@bizdoc/core 3.9.0 → 3.9.3

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.
@@ -499,6 +499,10 @@ const MATERIAL_PALETTES = {
499
499
  };
500
500
 
501
501
  const IMAGE_TYPE = ['image/png', 'image/jpeg', 'image/jpg', 'image/gif'];
502
+ const START_CAP = /^[A-Z][^A-Z]/;
503
+ function decapitalize(str) {
504
+ return str.replace(START_CAP, e => e.toLowerCase());
505
+ }
502
506
  function anyKeys(obj) {
503
507
  return obj && Object.keys(obj).find(k => obj[k] != null && obj[k] !== undefined) !== undefined;
504
508
  }
@@ -9031,100 +9035,104 @@ class ExpandedItemComponent {
9031
9035
  this.actions = actions && actions.length ? this._session.profile.actions.filter(a => actions.indexOf(a.name) > -1) : undefined;
9032
9036
  this._sender();
9033
9037
  this._comments();
9034
- this._note();
9038
+ this.note = await this._note();
9035
9039
  this._awaiting();
9036
9040
  }
9037
9041
  /** */
9038
9042
  async _note() {
9039
- const { ownerId, ownerBy, issued, substituteId, received, replied, log, id, note, repliedBy, actionId, escalated, originId, draft } = this.model;
9040
- let target;
9041
- if (actionId)
9042
- target = await this._target(id);
9043
+ const { ownerId, ownerBy, issued, substituteId, received, replied, log, id, note, repliedBy, actionId, escalated, originId, draft } = this.model, { profile } = this._session;
9043
9044
  if (substituteId) {
9044
9045
  const substituting = await firstValueFrom(this._accounts.get(substituteId));
9045
9046
  if (replied) {
9046
- const time = this._fromNow(replied), aaction = this._session.profile.actions.find(a => a.name === actionId), adjective = (aaction.adjective || aaction.title).toLowerCase();
9047
+ const time = this._fromNow(replied), action = this._actionName(actionId, 'adjective');
9048
+ const target = await this._target(id);
9047
9049
  if (target)
9048
- this.note = this._translate.personalize('YouSubstituteActionTakenTo', substituting.gender, adjective, target, this._formatUserElement(substituting), time);
9050
+ return this._translate.personalize('YouSubstituteActionTakenTo', substituting.gender, action, target, this._formatUserElement(substituting), time);
9049
9051
  else
9050
- this.note = this._translate.personalize('YouSubstituteActionTaken', substituting.gender, adjective, this._formatUserElement(substituting), time);
9052
+ return this._translate.personalize('YouSubstituteActionTaken', substituting.gender, action, this._formatUserElement(substituting), time);
9051
9053
  }
9052
9054
  else if (escalated) {
9053
9055
  const escalation = log.find(l => l.type === 'Escalation' && l.recipientId === originId);
9054
- this.note = this._translate.personalize('EscalatedFrom', substituting.gender, this._formatUserElement(substituting), this._duration(escalation.duration));
9056
+ return this._translate.personalize('EscalatedFrom', substituting.gender, this._formatUserElement(substituting), this._duration(escalation.duration));
9055
9057
  }
9056
9058
  else {
9057
9059
  const time = this._fromNow(received);
9058
- this.note = this._translate.personalize('SubstitutingNote', substituting.gender, this._formatUserElement(substituting), time, note || '');
9060
+ return this._translate.personalize('SubstitutingNote', substituting.gender, this._formatUserElement(substituting), time, note || '');
9059
9061
  }
9060
9062
  }
9061
- else if (replied) {
9063
+ else if (actionId) {
9064
+ const target = await this._target(id);
9062
9065
  const time = this._fromNow(replied);
9063
9066
  if (repliedBy) {
9064
9067
  if (repliedBy === this._session.userId) {
9068
+ const action = this._actionName(actionId, 'you');
9065
9069
  if (target)
9066
- this.note = this._translate.get('ActionTakenByYouTo', this._actionName(actionId, 'you'), target, this._session.profile.name, time);
9070
+ return this._translate.get('ActionTakenByYouTo', action, target, profile.name, time);
9067
9071
  else
9068
- this.note = this._translate.get('ActionTakenByYou', this._actionName(actionId, 'you'), this._session.profile.name, time);
9072
+ return this._translate.get('ActionTakenByYou', action, profile.name, time);
9073
+ }
9074
+ else {
9075
+ const by = await firstValueFrom(this._accounts.get(repliedBy));
9076
+ const action = this._actionName(actionId, by.gender);
9077
+ if (target)
9078
+ return this._translate.get('YouTakenActionByTo', this._formatUserElement(by), action, target, time);
9079
+ else
9080
+ return this._translate.get('YouTakenActionBy', this._formatUserElement(by), action, time);
9069
9081
  }
9070
- else
9071
- this._accounts.get(repliedBy).subscribe(u => {
9072
- if (target)
9073
- this.note = this._translate.get('YouTakenActionByTo', this._formatUserElement(u), this._actionName(actionId, u.gender), target, time);
9074
- else
9075
- this.note = this._translate.get('YouTakenActionBy', this._formatUserElement(u), this._actionName(actionId, u.gender), time);
9076
- });
9077
9082
  }
9078
- else if (this._session.userId) {
9083
+ else if (this._session.isImpersonating) {
9084
+ const action = this._actionName(actionId, profile.gender);
9079
9085
  if (target)
9080
- this.note = this._translate.personalize('ActionTakenTo', this._session.profile.gender, this._session.profile.name, this._actionName(actionId, this._session.profile.gender), target, time);
9086
+ return this._translate.personalize('ActionTakenTo', profile.gender, profile.name, action, target, time);
9081
9087
  else
9082
- this.note = this._translate.personalize('ActionTaken', this._session.profile.gender, this._session.profile.name, this._actionName(actionId, this._session.profile.gender), time);
9088
+ return this._translate.personalize('ActionTaken', profile.gender, profile.name, action, time);
9083
9089
  }
9084
9090
  else {
9091
+ const action = this._actionName(actionId, 'you');
9085
9092
  if (target)
9086
- this.note = this._translate.get('YouTakenActionTo', this._actionName(actionId, 'you'), target, time);
9093
+ return this._translate.get('YouTakenActionTo', action, target, time);
9087
9094
  else
9088
- this.note = this._translate.get('YouTakenAction', this._actionName(actionId, 'you'), time);
9095
+ return this._translate.get('YouTakenAction', action, time);
9089
9096
  }
9090
9097
  }
9091
9098
  else if (note)
9092
- this.note = note;
9099
+ return note;
9093
9100
  else if (originId) {
9094
9101
  const origin = this.model.recipients.find(r => r.id === originId);
9095
- const action = this._session.profile.actions.find(a => a.name === origin.actionId), adjective = action.adjective || action.past || action.title;
9102
+ const action = this._actionName(origin.actionId, 'adjective');
9096
9103
  if ((origin.repliedBy || origin.userId) === this._session.userId)
9097
- this.note = this._translate.get('ActionByYou', adjective);
9104
+ return this._translate.get('ActionByYou', action);
9098
9105
  else if (origin.repliedBy) {
9099
9106
  const who = await firstValueFrom(this._accounts.get(origin.userId));
9100
9107
  const by = await firstValueFrom(this._accounts.get(origin.repliedBy));
9101
- this.note = this._translate.get('ActionByBy', adjective, by.name, who.name);
9108
+ return this._translate.get('ActionByBy', action, by.name, who.name);
9102
9109
  }
9103
9110
  else {
9104
9111
  const who = await firstValueFrom(this._accounts.get(origin.userId));
9105
- this.note = this._translate.get('ActionBy', adjective, who.name);
9112
+ return this._translate.get('ActionBy', action, who.name);
9106
9113
  }
9107
9114
  }
9108
9115
  else if (ownerId === this._session.userId && !draft) {
9109
9116
  const time = this._fromNow(issued);
9110
9117
  if (ownerBy) {
9111
9118
  if (ownerBy === this._session.userId)
9112
- this.note = this._translate.personalize('YouSubmittedNoteBy', this._session.profile.byGender, this._session.profile.name, time);
9119
+ return this._translate.personalize('YouSubmittedNoteBy', profile.byGender, profile.name, time);
9113
9120
  else {
9114
9121
  const by = await firstValueFrom(this._accounts.get(ownerBy));
9115
9122
  if (this._session.isImpersonating)
9116
- this.note = this._translate.personalize('SubmittedNoteBy', by.gender, this._formatUserElement(by), this._session.profile.name, time);
9123
+ return this._translate.personalize('SubmittedNoteBy', by.gender, this._formatUserElement(by), profile.name, time);
9117
9124
  else
9118
- this.note = this._translate.personalize('SubmittedNoteYouBy', by.gender, this._formatUserElement(by), time);
9125
+ return this._translate.personalize('SubmittedNoteYouBy', by.gender, this._formatUserElement(by), time);
9119
9126
  }
9120
9127
  }
9121
9128
  else {
9122
9129
  if (this._session.isImpersonating)
9123
- this.note = this._translate.personalize('SubmittedNote', this._session.profile.gender, this._session.profile.name, time);
9130
+ return this._translate.personalize('SubmittedNote', profile.gender, profile.name, time);
9124
9131
  else
9125
- this.note = this._translate.get('YouSubmittedNote', time);
9132
+ return this._translate.get('YouSubmittedNote', time);
9126
9133
  }
9127
9134
  }
9135
+ return null;
9128
9136
  }
9129
9137
  async _target(id) {
9130
9138
  const origins = this.model.recipients.filter(r => r.originId === id);
@@ -9132,23 +9140,30 @@ class ExpandedItemComponent {
9132
9140
  const users = await firstValueFrom(this._accounts.getAll(origins.map(r => r.userId)));
9133
9141
  return this._translate.join(users.map(u => this._formatUserElement(u)));
9134
9142
  }
9135
- return undefined;
9143
+ return null;
9136
9144
  }
9137
9145
  _actionName(name, gender) {
9138
9146
  const action = this._session.profile.actions.find(a => a.name === name);
9139
9147
  if (!action)
9140
9148
  return name;
9141
- if (gender === 'you') {
9142
- const gender = this._session.gender;
9143
- return ((gender === 'Male' ? (action.youMale || action.you) :
9144
- gender === 'Female' ? (action.youFemale || action.you) :
9145
- action.you) || action.past ||
9146
- action.title).toLowerCase();
9147
- }
9148
- return ((gender === 'Male' ? (action.pastMale || action.past) :
9149
- gender === 'Female' ? (action.pastFemale || action.past) :
9150
- action.past) ||
9151
- action.title).toLowerCase();
9149
+ switch (gender) {
9150
+ case 'adjective':
9151
+ return decapitalize(action.adjective || action.past || action.title);
9152
+ case 'you':
9153
+ const gender = this._session.gender;
9154
+ return decapitalize((gender === 'Male' ? (action.youMale || action.you) :
9155
+ gender === 'Female' ? (action.youFemale || action.you) :
9156
+ action.you) || action.past ||
9157
+ action.title);
9158
+ case 'Male':
9159
+ return decapitalize(action.pastMale || action.past ||
9160
+ action.title);
9161
+ case 'Female':
9162
+ return decapitalize(action.pastFemale || action.past ||
9163
+ action.title);
9164
+ default:
9165
+ return decapitalize(action.past || action.title);
9166
+ }
9152
9167
  }
9153
9168
  _fromNow(date) {
9154
9169
  return dayjs(date).fromNow();
@@ -9234,7 +9249,7 @@ class ExpandedItemComponent {
9234
9249
  this._mailbox.send(id, version, formId, null, action, args).subscribe({
9235
9250
  next: async (r) => {
9236
9251
  const target = await this._target(id);
9237
- const adjective = this._getActionAdjective(action);
9252
+ const adjective = this._actionName(action, 'adjective');
9238
9253
  if (target)
9239
9254
  this._sb.toast('SentTo', number, adjective, target);
9240
9255
  else
@@ -9250,10 +9265,6 @@ class ExpandedItemComponent {
9250
9265
  }
9251
9266
  });
9252
9267
  }
9253
- _getActionAdjective(action) {
9254
- const caction = this._session.profile.actions.find(a => a.name === action), adjective = caction.adjective || caction.title;
9255
- return adjective.toLowerCase();
9256
- }
9257
9268
  /**
9258
9269
  *
9259
9270
  * @param response
@@ -9724,7 +9735,7 @@ class BrowseItemsComponent {
9724
9735
  }
9725
9736
  _getActionAdjective(name, plural) {
9726
9737
  const action = this._session.profile.actions.find(a => a.name === name);
9727
- return ((plural ? (action.adjectivePlural || action.adjective) : action.adjective) || action.title).toLowerCase();
9738
+ return decapitalize((plural ? (action.adjectivePlural || action.adjective) : action.adjective) || action.title);
9728
9739
  }
9729
9740
  ngOnDestroy() {
9730
9741
  this._destroy.next();
@@ -10040,7 +10051,7 @@ class ComposeFormComponent {
10040
10051
  }
10041
10052
  _getActionAdjective(name) {
10042
10053
  const action = this._session.profile.actions.find(a => a.name === name);
10043
- return (action.adjective || action.past || action.title).toLowerCase();
10054
+ return decapitalize(action.adjective || action.past || action.title);
10044
10055
  }
10045
10056
  /**
10046
10057
  *
@@ -10577,11 +10588,11 @@ class ComposePaneComponent {
10577
10588
  this._destroy.complete();
10578
10589
  }
10579
10590
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.2", ngImport: i0, type: ComposePaneComponent, deps: [{ token: SessionService }, { token: MailboxService }, { token: PaneRef }, { token: PanesRouter }], target: i0.ɵɵFactoryTarget.Component }); }
10580
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.2", type: ComposePaneComponent, isStandalone: false, selector: "bizdoc-compose-pane", host: { listeners: { "document:drop": "handleDocumentDrop($event)", "drop": "handleDrop($event)", "dragenter": "handleEnter($event)", "dragleave": "handleLeave($event)", "dragover": "handleOver($event)", "document:keydown": "handleKeydown($event)" } }, viewQueries: [{ propertyName: "form", first: true, predicate: ComposeFormComponent, descendants: true, static: true }, { propertyName: "dropableElement", first: true, predicate: ["dropable"], descendants: true, read: ElementRef, static: true }], ngImport: i0, template: "<mat-toolbar class=\"nav-toolbar\">\r\n @if (page !== undefined) {\r\n <button mat-icon-button (click)=\"form.back()\" [bizdocTooltip]=\"'Back'|translate\" tabindex=\"1\">\r\n <mat-icon class=\"mat-icon-rtl-mirror\">arrow_circle_left</mat-icon>\r\n </button>\r\n }\r\n @if (model.draft) {\r\n <button mat-stroked-button color=\"primary\" data-help=\"submit\"\r\n (click)=\"submit()\" [disabled]=\"!valid||working\">\r\n <span>{{'Submit' | translate}}</span>\r\n </button>\r\n }\r\n @if (form.actions.length === 1) {\r\n <button mat-stroked-button [color]=\"!model.draft ? 'primary' : null\" [attr.data-help]=\"'action-'+form.actions[0].name\" (click)=\"send(model.actions![0])\" [disabled]=\"!valid||working\">\r\n <span>{{form.actions[0].title}}</span>\r\n @if (form.actions[0].icon) {\r\n <mat-icon>{{form.actions[0].icon}}</mat-icon>\r\n }\r\n </button>\r\n }\r\n @else if (form.actions.length > 1) {\r\n <button mat-stroked-button data-help=\"send\" [color]=\"!model.draft ? 'primary' : null\" [matMenuTriggerFor]=\"actionMenu\" [disabled]=\"!valid||working\">\r\n <span>{{'Send' | translate}}</span>\r\n </button>\r\n }\r\n <!-- action -->\r\n <mat-menu #actionMenu>\r\n <ng-template matMenuContent>\r\n @for (a of form.actions; track a; let i = $index) {\r\n @if (i > 0 && form.actions[i - 1].group !== a.group) {\r\n <mat-divider></mat-divider>\r\n }\r\n <button mat-menu-item (click)=\"send(a.name)\">{{a.title}}</button>\r\n }\r\n </ng-template>\r\n </mat-menu>\r\n <!--<ng-template #actionsPane>\r\n <mat-list>\r\n @for (a of form.actions; track a; let i = $index) {\r\n @if (i > 0 && form.actions[i - 1].group !== a.group) {\r\n <mat-divider></mat-divider>\r\n }\r\n <mat-list-item (click)=\"send(a.name)\">\r\n @if(a.icon) {\r\n <mat-icon matListItemIcon>{{a.icon}}</mat-icon>\r\n }\r\n <span matListItemTitle>{{a.title}}</span>\r\n <span matListItemLine>{{a.note}}</span>\r\n </mat-list-item>\r\n }\r\n </mat-list>\r\n </ng-template>-->\r\n @if (mode === 'compose') {\r\n <button mat-icon-button (click)=\"save()\" data-help=\"save\" [disabled]=\"!dirty||working\" [bizdocTooltip]=\"'Save'|translate\">\r\n <mat-icon>save</mat-icon>\r\n </button>\r\n }\r\n <button mat-icon-button data-help=\"tag\" (click)=\"form.tag($event)\" [bizdocTooltip]=\"'Tags' | translate\" [disabled]=\"working\"><mat-icon [class.filled]=\"form.userTags\">bookmark</mat-icon></button>\r\n <button mat-icon-button data-help=\"flag\" [bizdocTooltip]=\"'Flagged'| translate\" [disabled]=\"working\" (click)=\"form.flag()\"><mat-icon [class.filled]=\"model.flag\">star</mat-icon></button>\r\n <button mat-icon-button (click)=\"form.attach()\" data-help=\"attach\" [bizdocTooltip]=\"'AttachFile' | translate\" [disabled]=\"working\"><mat-icon>attach_file</mat-icon></button>\r\n @if (mode !== 'compose' && model.pending && !model.completed) {\r\n <button mat-icon-button [disabled]=\"working\" data-help=\"edit\" (click)=\"edit()\" [bizdocTooltip]=\"'Edit' | translate\"><mat-icon>create</mat-icon></button>\r\n }\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"navTrace()\" [bizdocTooltip]=\"'Trace' | translate\" tabindex=\"1\"><mat-icon>timeline</mat-icon></button>\r\n <button mat-icon-button (click)=\"navComments()\" data-help=\"comments\" [bizdocTooltip]=\"'Comments' | translate\">\r\n <mat-icon [matBadge]=\"newCommentsCount\" [matBadgeHidden]=\"!newCommentsCount\" matBadgeColor=\"accent\" [class.filled]=\"model.comments.length > 0\">format_quote</mat-icon>\r\n </button>\r\n @if (enableInsights) {\r\n <button mat-icon-button (click)=\"insights()\" [bizdocTooltip]=\"'Insights' | translate\" [attr.aria-label]=\"'Insight' | translate\" class=\"tool\"><mat-icon>data_usage</mat-icon></button>\r\n }\r\n @if (expendable) {\r\n <button mat-icon-button (click)=\"expand()\" [bizdocTooltip]=\"'Expand' | translate\" [attr.aria-label]=\"'Expand' | translate\"><mat-icon>open_in_new</mat-icon></button>\r\n }\r\n <button mat-icon-button [matMenuTriggerFor]=\"optionsMenu\" [bizdocTooltip]=\"'Options' | translate\" [attr.aria-label]=\"'Options' | translate\"><mat-icon>more_vert</mat-icon></button>\r\n <mat-menu #optionsMenu=\"matMenu\">\r\n <ng-template matMenuContent>\r\n <button mat-menu-item (click)=\"form.copy()\" [disabled]=\"working\">\r\n <!--<mat-icon>content_copy</mat-icon>-->\r\n <span>{{'Copy' | translate}}</span>\r\n </button>\r\n @if (model.draft && !model.issued) {\r\n <button mat-menu-item (click)=\"discard()\" [disabled]=\"working\">\r\n <!--<mat-icon>delete_outlined</mat-icon>-->\r\n <span>{{'Discard' | translate}}</span>\r\n </button>\r\n }\r\n @if (form.help) {\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"form.guide(form.help)\">\r\n <!--<mat-icon>help_outline</mat-icon>-->\r\n <span>{{'Help' | translate}}</span>\r\n </button>\r\n }\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"close()\"><!--<mat-icon></mat-icon>--><span>{{'Close'| translate}}</span></button>\r\n </ng-template>\r\n </mat-menu>\r\n</mat-toolbar>\r\n<div class=\"file-dropable form-container\" #dropable>\r\n <bizdoc-form [model]=model [page]=\"page\" #form\r\n (modelChange)=\"change()\"\r\n (saved)=\"saved()\"\r\n (validChange)=\"valid=$event\"\r\n (workingChange)=\"working=$event\"\r\n (dirtyChange)=\"dirty=$event\" [mode]=\"mode\"></bizdoc-form>\r\n</div>\r\n", styles: [":host{display:flex;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column;height:100%}.form-container{-ms-flex:1;-webkit-flex:1;flex:1;overflow:auto}button{margin-inline-end:6px}\n"], dependencies: [{ kind: "directive", type: i7$1.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "component", type: i2$5.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i8$1.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { 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: "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: ComposeFormComponent, selector: "bizdoc-form", inputs: ["model", "working", "dirty", "valid", "page", "mode", "contacts"], outputs: ["modelChange", "workingChange", "dirtyChange", "validChange", "saved"] }, { kind: "directive", type: TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
10591
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.2", type: ComposePaneComponent, isStandalone: false, selector: "bizdoc-compose-pane", host: { listeners: { "document:drop": "handleDocumentDrop($event)", "drop": "handleDrop($event)", "dragenter": "handleEnter($event)", "dragleave": "handleLeave($event)", "dragover": "handleOver($event)", "document:keydown": "handleKeydown($event)" } }, viewQueries: [{ propertyName: "form", first: true, predicate: ComposeFormComponent, descendants: true, static: true }, { propertyName: "dropableElement", first: true, predicate: ["dropable"], descendants: true, read: ElementRef, static: true }], ngImport: i0, template: "<mat-toolbar class=\"nav-toolbar\">\r\n @if (page !== undefined) {\r\n <button mat-icon-button (click)=\"form.back()\" [bizdocTooltip]=\"'Back'|translate\" tabindex=\"1\">\r\n <mat-icon class=\"mat-icon-rtl-mirror\">arrow_circle_left</mat-icon>\r\n </button>\r\n }\r\n @if (model.draft) {\r\n <button mat-stroked-button color=\"primary\" data-help=\"submit\"\r\n (click)=\"submit()\" [disabled]=\"!valid||working\">\r\n <span>{{'Submit' | translate}}</span>\r\n </button>\r\n }\r\n @if (form.actions.length === 1) {\r\n <button mat-stroked-button [color]=\"!model.draft ? 'primary' : null\" [attr.data-help]=\"'action-'+form.actions[0].name\" (click)=\"send(model.actions![0])\" [disabled]=\"!valid||working\">\r\n <span>{{form.actions[0].title}}</span>\r\n @if (form.actions[0].icon) {\r\n <mat-icon>{{form.actions[0].icon}}</mat-icon>\r\n }\r\n </button>\r\n }\r\n @else if (form.actions.length > 1) {\r\n <button mat-stroked-button data-help=\"send\" [color]=\"!model.draft ? 'primary' : null\" [matMenuTriggerFor]=\"actionMenu\" [disabled]=\"!valid||working\">\r\n <span>{{'Send' | translate}}</span>\r\n </button>\r\n }\r\n <!-- action -->\r\n <mat-menu #actionMenu>\r\n <ng-template matMenuContent>\r\n @for (a of form.actions; track a; let i = $index) {\r\n @if (i > 0 && form.actions[i - 1].group !== a.group) {\r\n <mat-divider></mat-divider>\r\n }\r\n <button mat-menu-item (click)=\"send(a.name)\">{{a.title}}</button>\r\n }\r\n </ng-template>\r\n </mat-menu>\r\n <!--<ng-template #actionsPane>\r\n <mat-list>\r\n <mat-list-item (click)=\"send(a.name)\">\r\n @if(a.icon) {\r\n <mat-icon matListItemIcon>{{a.icon}}</mat-icon>\r\n }\r\n <span matListItemTitle>{{a.title}}</span>\r\n <span matListItemLine>{{a.note}}</span>\r\n </mat-list-item>\r\n </mat-list>\r\n </ng-template>-->\r\n @if (mode === 'compose') {\r\n <button mat-icon-button (click)=\"save()\" data-help=\"save\" [disabled]=\"!dirty||working\" [bizdocTooltip]=\"'Save'|translate\">\r\n <mat-icon>save</mat-icon>\r\n </button>\r\n }\r\n <button mat-icon-button data-help=\"tag\" (click)=\"form.tag($event)\" [bizdocTooltip]=\"'Tags' | translate\" [disabled]=\"working\"><mat-icon [class.filled]=\"form.userTags\">bookmark</mat-icon></button>\r\n <button mat-icon-button data-help=\"flag\" [bizdocTooltip]=\"'Flagged'| translate\" [disabled]=\"working\" (click)=\"form.flag()\"><mat-icon [class.filled]=\"model.flag\">star</mat-icon></button>\r\n <button mat-icon-button (click)=\"form.attach()\" data-help=\"attach\" [bizdocTooltip]=\"'AttachFile' | translate\" [disabled]=\"working\"><mat-icon>attach_file</mat-icon></button>\r\n @if (mode !== 'compose' && model.pending && !model.completed) {\r\n <button mat-icon-button [disabled]=\"working\" data-help=\"edit\" (click)=\"edit()\" [bizdocTooltip]=\"'Edit' | translate\"><mat-icon>create</mat-icon></button>\r\n }\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"navTrace()\" [bizdocTooltip]=\"'Trace' | translate\" tabindex=\"1\"><mat-icon>network_node</mat-icon></button>\r\n <button mat-icon-button (click)=\"navComments()\" data-help=\"comments\" [bizdocTooltip]=\"'Comments' | translate\">\r\n <mat-icon [matBadge]=\"newCommentsCount\" [matBadgeHidden]=\"!newCommentsCount\" matBadgeColor=\"accent\" [class.filled]=\"model.comments.length > 0\">format_quote</mat-icon>\r\n </button>\r\n @if (enableInsights) {\r\n <button mat-icon-button (click)=\"insights()\" [bizdocTooltip]=\"'Insights' | translate\" [attr.aria-label]=\"'Insight' | translate\" class=\"tool\"><mat-icon>data_usage</mat-icon></button>\r\n }\r\n @if (expendable) {\r\n <button mat-icon-button (click)=\"expand()\" [bizdocTooltip]=\"'Expand' | translate\" [attr.aria-label]=\"'Expand' | translate\"><mat-icon>open_in_new</mat-icon></button>\r\n }\r\n <button mat-icon-button [matMenuTriggerFor]=\"optionsMenu\" [bizdocTooltip]=\"'Options' | translate\" [attr.aria-label]=\"'Options' | translate\"><mat-icon>more_vert</mat-icon></button>\r\n <mat-menu #optionsMenu=\"matMenu\">\r\n <ng-template matMenuContent>\r\n <button mat-menu-item (click)=\"form.copy()\" [disabled]=\"working\">\r\n <!--<mat-icon>content_copy</mat-icon>-->\r\n <span>{{'Copy' | translate}}</span>\r\n </button>\r\n @if (model.draft && !model.issued) {\r\n <button mat-menu-item (click)=\"discard()\" [disabled]=\"working\">\r\n <!--<mat-icon>delete_outlined</mat-icon>-->\r\n <span>{{'Discard' | translate}}</span>\r\n </button>\r\n }\r\n @if (form.help) {\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"form.guide(form.help)\">\r\n <!--<mat-icon>help_outline</mat-icon>-->\r\n <span>{{'Help' | translate}}</span>\r\n </button>\r\n }\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"close()\"><!--<mat-icon></mat-icon>--><span>{{'Close'| translate}}</span></button>\r\n </ng-template>\r\n </mat-menu>\r\n</mat-toolbar>\r\n<div class=\"file-dropable form-container\" #dropable>\r\n <bizdoc-form [model]=model [page]=\"page\" #form\r\n (modelChange)=\"change()\"\r\n (saved)=\"saved()\"\r\n (validChange)=\"valid=$event\"\r\n (workingChange)=\"working=$event\"\r\n (dirtyChange)=\"dirty=$event\" [mode]=\"mode\"></bizdoc-form>\r\n</div>\r\n", styles: [":host{display:flex;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column;height:100%}.form-container{-ms-flex:1;-webkit-flex:1;flex:1;overflow:auto}button{margin-inline-end:6px}\n"], dependencies: [{ kind: "directive", type: i7$1.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "component", type: i2$5.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i8$1.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { 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: "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: ComposeFormComponent, selector: "bizdoc-form", inputs: ["model", "working", "dirty", "valid", "page", "mode", "contacts"], outputs: ["modelChange", "workingChange", "dirtyChange", "validChange", "saved"] }, { kind: "directive", type: TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
10581
10592
  }
10582
10593
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.2", ngImport: i0, type: ComposePaneComponent, decorators: [{
10583
10594
  type: Component,
10584
- args: [{ standalone: false, selector: 'bizdoc-compose-pane', template: "<mat-toolbar class=\"nav-toolbar\">\r\n @if (page !== undefined) {\r\n <button mat-icon-button (click)=\"form.back()\" [bizdocTooltip]=\"'Back'|translate\" tabindex=\"1\">\r\n <mat-icon class=\"mat-icon-rtl-mirror\">arrow_circle_left</mat-icon>\r\n </button>\r\n }\r\n @if (model.draft) {\r\n <button mat-stroked-button color=\"primary\" data-help=\"submit\"\r\n (click)=\"submit()\" [disabled]=\"!valid||working\">\r\n <span>{{'Submit' | translate}}</span>\r\n </button>\r\n }\r\n @if (form.actions.length === 1) {\r\n <button mat-stroked-button [color]=\"!model.draft ? 'primary' : null\" [attr.data-help]=\"'action-'+form.actions[0].name\" (click)=\"send(model.actions![0])\" [disabled]=\"!valid||working\">\r\n <span>{{form.actions[0].title}}</span>\r\n @if (form.actions[0].icon) {\r\n <mat-icon>{{form.actions[0].icon}}</mat-icon>\r\n }\r\n </button>\r\n }\r\n @else if (form.actions.length > 1) {\r\n <button mat-stroked-button data-help=\"send\" [color]=\"!model.draft ? 'primary' : null\" [matMenuTriggerFor]=\"actionMenu\" [disabled]=\"!valid||working\">\r\n <span>{{'Send' | translate}}</span>\r\n </button>\r\n }\r\n <!-- action -->\r\n <mat-menu #actionMenu>\r\n <ng-template matMenuContent>\r\n @for (a of form.actions; track a; let i = $index) {\r\n @if (i > 0 && form.actions[i - 1].group !== a.group) {\r\n <mat-divider></mat-divider>\r\n }\r\n <button mat-menu-item (click)=\"send(a.name)\">{{a.title}}</button>\r\n }\r\n </ng-template>\r\n </mat-menu>\r\n <!--<ng-template #actionsPane>\r\n <mat-list>\r\n @for (a of form.actions; track a; let i = $index) {\r\n @if (i > 0 && form.actions[i - 1].group !== a.group) {\r\n <mat-divider></mat-divider>\r\n }\r\n <mat-list-item (click)=\"send(a.name)\">\r\n @if(a.icon) {\r\n <mat-icon matListItemIcon>{{a.icon}}</mat-icon>\r\n }\r\n <span matListItemTitle>{{a.title}}</span>\r\n <span matListItemLine>{{a.note}}</span>\r\n </mat-list-item>\r\n }\r\n </mat-list>\r\n </ng-template>-->\r\n @if (mode === 'compose') {\r\n <button mat-icon-button (click)=\"save()\" data-help=\"save\" [disabled]=\"!dirty||working\" [bizdocTooltip]=\"'Save'|translate\">\r\n <mat-icon>save</mat-icon>\r\n </button>\r\n }\r\n <button mat-icon-button data-help=\"tag\" (click)=\"form.tag($event)\" [bizdocTooltip]=\"'Tags' | translate\" [disabled]=\"working\"><mat-icon [class.filled]=\"form.userTags\">bookmark</mat-icon></button>\r\n <button mat-icon-button data-help=\"flag\" [bizdocTooltip]=\"'Flagged'| translate\" [disabled]=\"working\" (click)=\"form.flag()\"><mat-icon [class.filled]=\"model.flag\">star</mat-icon></button>\r\n <button mat-icon-button (click)=\"form.attach()\" data-help=\"attach\" [bizdocTooltip]=\"'AttachFile' | translate\" [disabled]=\"working\"><mat-icon>attach_file</mat-icon></button>\r\n @if (mode !== 'compose' && model.pending && !model.completed) {\r\n <button mat-icon-button [disabled]=\"working\" data-help=\"edit\" (click)=\"edit()\" [bizdocTooltip]=\"'Edit' | translate\"><mat-icon>create</mat-icon></button>\r\n }\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"navTrace()\" [bizdocTooltip]=\"'Trace' | translate\" tabindex=\"1\"><mat-icon>timeline</mat-icon></button>\r\n <button mat-icon-button (click)=\"navComments()\" data-help=\"comments\" [bizdocTooltip]=\"'Comments' | translate\">\r\n <mat-icon [matBadge]=\"newCommentsCount\" [matBadgeHidden]=\"!newCommentsCount\" matBadgeColor=\"accent\" [class.filled]=\"model.comments.length > 0\">format_quote</mat-icon>\r\n </button>\r\n @if (enableInsights) {\r\n <button mat-icon-button (click)=\"insights()\" [bizdocTooltip]=\"'Insights' | translate\" [attr.aria-label]=\"'Insight' | translate\" class=\"tool\"><mat-icon>data_usage</mat-icon></button>\r\n }\r\n @if (expendable) {\r\n <button mat-icon-button (click)=\"expand()\" [bizdocTooltip]=\"'Expand' | translate\" [attr.aria-label]=\"'Expand' | translate\"><mat-icon>open_in_new</mat-icon></button>\r\n }\r\n <button mat-icon-button [matMenuTriggerFor]=\"optionsMenu\" [bizdocTooltip]=\"'Options' | translate\" [attr.aria-label]=\"'Options' | translate\"><mat-icon>more_vert</mat-icon></button>\r\n <mat-menu #optionsMenu=\"matMenu\">\r\n <ng-template matMenuContent>\r\n <button mat-menu-item (click)=\"form.copy()\" [disabled]=\"working\">\r\n <!--<mat-icon>content_copy</mat-icon>-->\r\n <span>{{'Copy' | translate}}</span>\r\n </button>\r\n @if (model.draft && !model.issued) {\r\n <button mat-menu-item (click)=\"discard()\" [disabled]=\"working\">\r\n <!--<mat-icon>delete_outlined</mat-icon>-->\r\n <span>{{'Discard' | translate}}</span>\r\n </button>\r\n }\r\n @if (form.help) {\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"form.guide(form.help)\">\r\n <!--<mat-icon>help_outline</mat-icon>-->\r\n <span>{{'Help' | translate}}</span>\r\n </button>\r\n }\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"close()\"><!--<mat-icon></mat-icon>--><span>{{'Close'| translate}}</span></button>\r\n </ng-template>\r\n </mat-menu>\r\n</mat-toolbar>\r\n<div class=\"file-dropable form-container\" #dropable>\r\n <bizdoc-form [model]=model [page]=\"page\" #form\r\n (modelChange)=\"change()\"\r\n (saved)=\"saved()\"\r\n (validChange)=\"valid=$event\"\r\n (workingChange)=\"working=$event\"\r\n (dirtyChange)=\"dirty=$event\" [mode]=\"mode\"></bizdoc-form>\r\n</div>\r\n", styles: [":host{display:flex;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column;height:100%}.form-container{-ms-flex:1;-webkit-flex:1;flex:1;overflow:auto}button{margin-inline-end:6px}\n"] }]
10595
+ args: [{ standalone: false, selector: 'bizdoc-compose-pane', template: "<mat-toolbar class=\"nav-toolbar\">\r\n @if (page !== undefined) {\r\n <button mat-icon-button (click)=\"form.back()\" [bizdocTooltip]=\"'Back'|translate\" tabindex=\"1\">\r\n <mat-icon class=\"mat-icon-rtl-mirror\">arrow_circle_left</mat-icon>\r\n </button>\r\n }\r\n @if (model.draft) {\r\n <button mat-stroked-button color=\"primary\" data-help=\"submit\"\r\n (click)=\"submit()\" [disabled]=\"!valid||working\">\r\n <span>{{'Submit' | translate}}</span>\r\n </button>\r\n }\r\n @if (form.actions.length === 1) {\r\n <button mat-stroked-button [color]=\"!model.draft ? 'primary' : null\" [attr.data-help]=\"'action-'+form.actions[0].name\" (click)=\"send(model.actions![0])\" [disabled]=\"!valid||working\">\r\n <span>{{form.actions[0].title}}</span>\r\n @if (form.actions[0].icon) {\r\n <mat-icon>{{form.actions[0].icon}}</mat-icon>\r\n }\r\n </button>\r\n }\r\n @else if (form.actions.length > 1) {\r\n <button mat-stroked-button data-help=\"send\" [color]=\"!model.draft ? 'primary' : null\" [matMenuTriggerFor]=\"actionMenu\" [disabled]=\"!valid||working\">\r\n <span>{{'Send' | translate}}</span>\r\n </button>\r\n }\r\n <!-- action -->\r\n <mat-menu #actionMenu>\r\n <ng-template matMenuContent>\r\n @for (a of form.actions; track a; let i = $index) {\r\n @if (i > 0 && form.actions[i - 1].group !== a.group) {\r\n <mat-divider></mat-divider>\r\n }\r\n <button mat-menu-item (click)=\"send(a.name)\">{{a.title}}</button>\r\n }\r\n </ng-template>\r\n </mat-menu>\r\n <!--<ng-template #actionsPane>\r\n <mat-list>\r\n <mat-list-item (click)=\"send(a.name)\">\r\n @if(a.icon) {\r\n <mat-icon matListItemIcon>{{a.icon}}</mat-icon>\r\n }\r\n <span matListItemTitle>{{a.title}}</span>\r\n <span matListItemLine>{{a.note}}</span>\r\n </mat-list-item>\r\n </mat-list>\r\n </ng-template>-->\r\n @if (mode === 'compose') {\r\n <button mat-icon-button (click)=\"save()\" data-help=\"save\" [disabled]=\"!dirty||working\" [bizdocTooltip]=\"'Save'|translate\">\r\n <mat-icon>save</mat-icon>\r\n </button>\r\n }\r\n <button mat-icon-button data-help=\"tag\" (click)=\"form.tag($event)\" [bizdocTooltip]=\"'Tags' | translate\" [disabled]=\"working\"><mat-icon [class.filled]=\"form.userTags\">bookmark</mat-icon></button>\r\n <button mat-icon-button data-help=\"flag\" [bizdocTooltip]=\"'Flagged'| translate\" [disabled]=\"working\" (click)=\"form.flag()\"><mat-icon [class.filled]=\"model.flag\">star</mat-icon></button>\r\n <button mat-icon-button (click)=\"form.attach()\" data-help=\"attach\" [bizdocTooltip]=\"'AttachFile' | translate\" [disabled]=\"working\"><mat-icon>attach_file</mat-icon></button>\r\n @if (mode !== 'compose' && model.pending && !model.completed) {\r\n <button mat-icon-button [disabled]=\"working\" data-help=\"edit\" (click)=\"edit()\" [bizdocTooltip]=\"'Edit' | translate\"><mat-icon>create</mat-icon></button>\r\n }\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"navTrace()\" [bizdocTooltip]=\"'Trace' | translate\" tabindex=\"1\"><mat-icon>network_node</mat-icon></button>\r\n <button mat-icon-button (click)=\"navComments()\" data-help=\"comments\" [bizdocTooltip]=\"'Comments' | translate\">\r\n <mat-icon [matBadge]=\"newCommentsCount\" [matBadgeHidden]=\"!newCommentsCount\" matBadgeColor=\"accent\" [class.filled]=\"model.comments.length > 0\">format_quote</mat-icon>\r\n </button>\r\n @if (enableInsights) {\r\n <button mat-icon-button (click)=\"insights()\" [bizdocTooltip]=\"'Insights' | translate\" [attr.aria-label]=\"'Insight' | translate\" class=\"tool\"><mat-icon>data_usage</mat-icon></button>\r\n }\r\n @if (expendable) {\r\n <button mat-icon-button (click)=\"expand()\" [bizdocTooltip]=\"'Expand' | translate\" [attr.aria-label]=\"'Expand' | translate\"><mat-icon>open_in_new</mat-icon></button>\r\n }\r\n <button mat-icon-button [matMenuTriggerFor]=\"optionsMenu\" [bizdocTooltip]=\"'Options' | translate\" [attr.aria-label]=\"'Options' | translate\"><mat-icon>more_vert</mat-icon></button>\r\n <mat-menu #optionsMenu=\"matMenu\">\r\n <ng-template matMenuContent>\r\n <button mat-menu-item (click)=\"form.copy()\" [disabled]=\"working\">\r\n <!--<mat-icon>content_copy</mat-icon>-->\r\n <span>{{'Copy' | translate}}</span>\r\n </button>\r\n @if (model.draft && !model.issued) {\r\n <button mat-menu-item (click)=\"discard()\" [disabled]=\"working\">\r\n <!--<mat-icon>delete_outlined</mat-icon>-->\r\n <span>{{'Discard' | translate}}</span>\r\n </button>\r\n }\r\n @if (form.help) {\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"form.guide(form.help)\">\r\n <!--<mat-icon>help_outline</mat-icon>-->\r\n <span>{{'Help' | translate}}</span>\r\n </button>\r\n }\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"close()\"><!--<mat-icon></mat-icon>--><span>{{'Close'| translate}}</span></button>\r\n </ng-template>\r\n </mat-menu>\r\n</mat-toolbar>\r\n<div class=\"file-dropable form-container\" #dropable>\r\n <bizdoc-form [model]=model [page]=\"page\" #form\r\n (modelChange)=\"change()\"\r\n (saved)=\"saved()\"\r\n (validChange)=\"valid=$event\"\r\n (workingChange)=\"working=$event\"\r\n (dirtyChange)=\"dirty=$event\" [mode]=\"mode\"></bizdoc-form>\r\n</div>\r\n", styles: [":host{display:flex;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column;height:100%}.form-container{-ms-flex:1;-webkit-flex:1;flex:1;overflow:auto}button{margin-inline-end:6px}\n"] }]
10585
10596
  }], ctorParameters: () => [{ type: SessionService }, { type: MailboxService }, { type: PaneRef }, { type: PanesRouter }], propDecorators: { form: [{
10586
10597
  type: ViewChild,
10587
10598
  args: [ComposeFormComponent, { static: true }]
@@ -13692,13 +13703,13 @@ class CommentComponent {
13692
13703
  });
13693
13704
  }
13694
13705
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.2", ngImport: i0, type: CommentComponent, deps: [{ token: SessionService }, { token: PromptService }, { token: TranslateService }, { token: ChatInfo }, { token: AccountService }, { token: Popup }, { token: i2$3.Overlay }, { token: MailboxService }, { token: i0.ViewContainerRef }, { token: BIZDOC_CONFIG }], target: i0.ɵɵFactoryTarget.Component }); }
13695
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.2", type: CommentComponent, isStandalone: false, selector: "bizdoc-comment", inputs: { model: "model", item: "item" }, outputs: { deleted: "deleted", reply: "reply" }, host: { classAttribute: "comment" }, viewQueries: [{ propertyName: "bodyElement", first: true, predicate: ["body"], descendants: true }, { propertyName: "previewTemplate", first: true, predicate: ["previewTemplate"], descendants: true }], ngImport: i0, template: "<div class=\"row\">\r\n <div class=\"comment-body\" #body>\r\n <div [innerHTML]=\"item.text|taggingHtml:item.resource\" class=\"comment-text mat-body-1\"></div>\r\n @if (item.image) {\r\n <img [src]=\"'data:image/png;base64,'+item.image\" alt=\"\" (click)=\"preview()\" />\r\n }\r\n </div>\r\n <!-- menu -->\r\n @if (me) {\r\n <button mat-icon-button [matMenuTriggerFor]=\"menu\" class=\"comment-menu\" (click)=\"$event.stopPropagation()\"><mat-icon>more_vert</mat-icon></button>\r\n }\r\n <mat-menu #menu>\r\n <ng-template matMenuContent>\r\n @if (!item.deleted) {\r\n <button mat-menu-item (click)=\"edit()\">{{'Edit'|translate}}</button>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"delete(true)\">{{'Delete'|translate}}</button>\r\n }\r\n @else {\r\n <button mat-menu-item (click)=\"delete(false)\">{{'Undo'|translate}}</button>\r\n }\r\n </ng-template>\r\n </mat-menu>\r\n</div>\r\n<!-- reply -->\r\n@if(item.reply) {\r\n<div class=\"column comment-reply\">\r\n <div class=\"row\">\r\n <div [innerHTML]=\"item.reply.text|taggingHtml:item.reply.resource\" class=\"comment-text mat-body-1\"></div>\r\n @if (item.reply.image) {\r\n <img [src]=\"'data:image/png;base64,'+item.reply.image\" alt=\"\" (click)=\"null\" />\r\n }\r\n </div>\r\n <div class=\"row\">\r\n <small class=\"comment-tools\">\r\n <span class=\"flex\" [bizdocTooltip]=\"item.reply.time | amDateFormat: 'lll'\">{{item.reply.time | amTimeAgo}}</span>\r\n </small>\r\n </div>\r\n</div>\r\n}\r\n<div class=\"row\">\r\n <div class=\"column\">\r\n <small [innerHTML]=\"name | sanitizeHtml\" (click)=\"chat($event)\" class=\"uname\"></small>\r\n <small class=\"comment-tools flex\">\r\n <span class=\"flex\" [bizdocTooltip]=\"(item.edited || item.time) | amDateFormat: 'lll'\">{{(item.edited || item.time) | amTimeAgo}}</span>\r\n @if (item.edited) {\r\n &nbsp;<a (click)=\"edits()\" class=\"modification\">{{'Edited'| translate}}</a>\r\n }\r\n @if (!me) {\r\n &nbsp;<a (click)=\"reply.emit()\" class=\"modification\">{{'Reply'| translate}}</a>\r\n }\r\n </small>\r\n </div>\r\n @if (voting) {\r\n <div class=\"comment-actions\">\r\n @if (item.votes > 0 || item.votes < 0) {\r\n <small class=\"comment-tools\"><a [class.score-negative]=\"item.votes < 0\" class=\"comment-score\" dir=\"ltr\" (click)=\"votes()\" [bizdocTooltip]=\"'Votes'|translate\">{{item.votes}}</a></small>\r\n }\r\n <mat-icon matRipple (click)=\"vote(1, $event)\" [class.voted-true]=\"item.voted===1\">thumb_up_alt</mat-icon>\r\n <mat-icon matRipple (click)=\"vote(-1, $event)\" [class.voted-false]=\"item.voted===-1\">thumb_down_alt</mat-icon>\r\n </div>\r\n }\r\n</div>\r\n<ng-template #previewTemplate>\r\n <img [src]=\"'data:image/png;base64,'+item.image\" alt=\"\" />\r\n</ng-template>\r\n", dependencies: [{ kind: "directive", type: i2$3.ɵɵDir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { kind: "directive", type: i1$3.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { 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: 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: DateFormatPipe, name: "amDateFormat" }, { kind: "pipe", type: TimeAgoPipe, name: "amTimeAgo" }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: SanitizeHtmlPipe, name: "sanitizeHtml" }, { kind: "pipe", type: TaggingPipe, name: "taggingHtml" }] }); }
13706
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.2", type: CommentComponent, isStandalone: false, selector: "bizdoc-comment", inputs: { model: "model", item: "item" }, outputs: { deleted: "deleted", reply: "reply" }, host: { classAttribute: "comment" }, viewQueries: [{ propertyName: "bodyElement", first: true, predicate: ["body"], descendants: true }, { propertyName: "previewTemplate", first: true, predicate: ["previewTemplate"], descendants: true }], ngImport: i0, template: "<div class=\"row\">\r\n <div class=\"comment-body\" #body>\r\n <div [innerHTML]=\"item.text|taggingHtml:item.resource\" class=\"comment-text mat-body-1\"></div>\r\n @if (item.image) {\r\n <img [src]=\"'data:image/png;base64,'+item.image\" alt=\"\" (click)=\"preview()\" />\r\n }\r\n </div>\r\n <!-- menu -->\r\n @if (me) {\r\n <button mat-icon-button [matMenuTriggerFor]=\"menu\" class=\"comment-menu\" (click)=\"$event.stopPropagation()\"><mat-icon>more_vert</mat-icon></button>\r\n }\r\n <mat-menu #menu>\r\n <ng-template matMenuContent>\r\n @if (!item.deleted) {\r\n <button mat-menu-item (click)=\"edit()\">{{'Edit'|translate}}</button>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"delete(true)\">{{'Delete'|translate}}</button>\r\n }\r\n @else {\r\n <button mat-menu-item (click)=\"delete(false)\">{{'Undo'|translate}}</button>\r\n }\r\n </ng-template>\r\n </mat-menu>\r\n</div>\r\n<!-- reply -->\r\n@if(item.reply) {\r\n<div class=\"column comment-reply\">\r\n <div class=\"row\">\r\n <div [innerHTML]=\"item.reply.text|taggingHtml:item.reply.resource\" class=\"comment-text mat-body-1\"></div>\r\n @if (item.reply.image) {\r\n <img [src]=\"'data:image/png;base64,'+item.reply.image\" alt=\"\" (click)=\"null\" />\r\n }\r\n </div>\r\n <div class=\"row\">\r\n <small class=\"comment-tools\">\r\n <span [bizdocTooltip]=\"item.reply.time | amDateFormat: 'lll'\">{{item.reply.time | amTimeAgo}}</span>\r\n </small>\r\n </div>\r\n</div>\r\n}\r\n<div class=\"row\">\r\n <div class=\"column\">\r\n <small [innerHTML]=\"name | sanitizeHtml\" (click)=\"chat($event)\" class=\"uname\"></small>\r\n <small class=\"comment-tools flex\">\r\n <span class=\"flex\" [bizdocTooltip]=\"(item.edited || item.time) | amDateFormat: 'lll'\">{{(item.edited || item.time) | amTimeAgo}}</span>\r\n @if (item.edited) {\r\n &nbsp;<a (click)=\"edits()\">{{'Edited'| translate}}</a>\r\n }\r\n @if (!me) {\r\n &nbsp;<a (click)=\"reply.emit()\">{{'Reply'| translate}}</a>\r\n }\r\n </small>\r\n </div>\r\n @if (voting) {\r\n <div class=\"comment-actions\">\r\n @if (item.votes > 0 || item.votes < 0) {\r\n <a [class.score-negative]=\"item.votes < 0\" class=\"comment-score\" dir=\"ltr\" (click)=\"votes()\" [bizdocTooltip]=\"'Votes'|translate\">{{item.votes}}</a>\r\n }\r\n <mat-icon matRipple (click)=\"vote(1, $event)\" [class.voted-true]=\"item.voted===1\">thumb_up_alt</mat-icon>\r\n <mat-icon matRipple (click)=\"vote(-1, $event)\" [class.voted-false]=\"item.voted===-1\">thumb_down_alt</mat-icon>\r\n </div>\r\n }\r\n</div>\r\n<ng-template #previewTemplate>\r\n <img [src]=\"'data:image/png;base64,'+item.image\" alt=\"\" />\r\n</ng-template>\r\n", dependencies: [{ kind: "directive", type: i2$3.ɵɵDir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { kind: "directive", type: i1$3.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { 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: 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: DateFormatPipe, name: "amDateFormat" }, { kind: "pipe", type: TimeAgoPipe, name: "amTimeAgo" }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: SanitizeHtmlPipe, name: "sanitizeHtml" }, { kind: "pipe", type: TaggingPipe, name: "taggingHtml" }] }); }
13696
13707
  }
13697
13708
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.2", ngImport: i0, type: CommentComponent, decorators: [{
13698
13709
  type: Component,
13699
13710
  args: [{ standalone: false, selector: 'bizdoc-comment', host: {
13700
13711
  class: 'comment'
13701
- }, template: "<div class=\"row\">\r\n <div class=\"comment-body\" #body>\r\n <div [innerHTML]=\"item.text|taggingHtml:item.resource\" class=\"comment-text mat-body-1\"></div>\r\n @if (item.image) {\r\n <img [src]=\"'data:image/png;base64,'+item.image\" alt=\"\" (click)=\"preview()\" />\r\n }\r\n </div>\r\n <!-- menu -->\r\n @if (me) {\r\n <button mat-icon-button [matMenuTriggerFor]=\"menu\" class=\"comment-menu\" (click)=\"$event.stopPropagation()\"><mat-icon>more_vert</mat-icon></button>\r\n }\r\n <mat-menu #menu>\r\n <ng-template matMenuContent>\r\n @if (!item.deleted) {\r\n <button mat-menu-item (click)=\"edit()\">{{'Edit'|translate}}</button>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"delete(true)\">{{'Delete'|translate}}</button>\r\n }\r\n @else {\r\n <button mat-menu-item (click)=\"delete(false)\">{{'Undo'|translate}}</button>\r\n }\r\n </ng-template>\r\n </mat-menu>\r\n</div>\r\n<!-- reply -->\r\n@if(item.reply) {\r\n<div class=\"column comment-reply\">\r\n <div class=\"row\">\r\n <div [innerHTML]=\"item.reply.text|taggingHtml:item.reply.resource\" class=\"comment-text mat-body-1\"></div>\r\n @if (item.reply.image) {\r\n <img [src]=\"'data:image/png;base64,'+item.reply.image\" alt=\"\" (click)=\"null\" />\r\n }\r\n </div>\r\n <div class=\"row\">\r\n <small class=\"comment-tools\">\r\n <span class=\"flex\" [bizdocTooltip]=\"item.reply.time | amDateFormat: 'lll'\">{{item.reply.time | amTimeAgo}}</span>\r\n </small>\r\n </div>\r\n</div>\r\n}\r\n<div class=\"row\">\r\n <div class=\"column\">\r\n <small [innerHTML]=\"name | sanitizeHtml\" (click)=\"chat($event)\" class=\"uname\"></small>\r\n <small class=\"comment-tools flex\">\r\n <span class=\"flex\" [bizdocTooltip]=\"(item.edited || item.time) | amDateFormat: 'lll'\">{{(item.edited || item.time) | amTimeAgo}}</span>\r\n @if (item.edited) {\r\n &nbsp;<a (click)=\"edits()\" class=\"modification\">{{'Edited'| translate}}</a>\r\n }\r\n @if (!me) {\r\n &nbsp;<a (click)=\"reply.emit()\" class=\"modification\">{{'Reply'| translate}}</a>\r\n }\r\n </small>\r\n </div>\r\n @if (voting) {\r\n <div class=\"comment-actions\">\r\n @if (item.votes > 0 || item.votes < 0) {\r\n <small class=\"comment-tools\"><a [class.score-negative]=\"item.votes < 0\" class=\"comment-score\" dir=\"ltr\" (click)=\"votes()\" [bizdocTooltip]=\"'Votes'|translate\">{{item.votes}}</a></small>\r\n }\r\n <mat-icon matRipple (click)=\"vote(1, $event)\" [class.voted-true]=\"item.voted===1\">thumb_up_alt</mat-icon>\r\n <mat-icon matRipple (click)=\"vote(-1, $event)\" [class.voted-false]=\"item.voted===-1\">thumb_down_alt</mat-icon>\r\n </div>\r\n }\r\n</div>\r\n<ng-template #previewTemplate>\r\n <img [src]=\"'data:image/png;base64,'+item.image\" alt=\"\" />\r\n</ng-template>\r\n" }]
13712
+ }, template: "<div class=\"row\">\r\n <div class=\"comment-body\" #body>\r\n <div [innerHTML]=\"item.text|taggingHtml:item.resource\" class=\"comment-text mat-body-1\"></div>\r\n @if (item.image) {\r\n <img [src]=\"'data:image/png;base64,'+item.image\" alt=\"\" (click)=\"preview()\" />\r\n }\r\n </div>\r\n <!-- menu -->\r\n @if (me) {\r\n <button mat-icon-button [matMenuTriggerFor]=\"menu\" class=\"comment-menu\" (click)=\"$event.stopPropagation()\"><mat-icon>more_vert</mat-icon></button>\r\n }\r\n <mat-menu #menu>\r\n <ng-template matMenuContent>\r\n @if (!item.deleted) {\r\n <button mat-menu-item (click)=\"edit()\">{{'Edit'|translate}}</button>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"delete(true)\">{{'Delete'|translate}}</button>\r\n }\r\n @else {\r\n <button mat-menu-item (click)=\"delete(false)\">{{'Undo'|translate}}</button>\r\n }\r\n </ng-template>\r\n </mat-menu>\r\n</div>\r\n<!-- reply -->\r\n@if(item.reply) {\r\n<div class=\"column comment-reply\">\r\n <div class=\"row\">\r\n <div [innerHTML]=\"item.reply.text|taggingHtml:item.reply.resource\" class=\"comment-text mat-body-1\"></div>\r\n @if (item.reply.image) {\r\n <img [src]=\"'data:image/png;base64,'+item.reply.image\" alt=\"\" (click)=\"null\" />\r\n }\r\n </div>\r\n <div class=\"row\">\r\n <small class=\"comment-tools\">\r\n <span [bizdocTooltip]=\"item.reply.time | amDateFormat: 'lll'\">{{item.reply.time | amTimeAgo}}</span>\r\n </small>\r\n </div>\r\n</div>\r\n}\r\n<div class=\"row\">\r\n <div class=\"column\">\r\n <small [innerHTML]=\"name | sanitizeHtml\" (click)=\"chat($event)\" class=\"uname\"></small>\r\n <small class=\"comment-tools flex\">\r\n <span class=\"flex\" [bizdocTooltip]=\"(item.edited || item.time) | amDateFormat: 'lll'\">{{(item.edited || item.time) | amTimeAgo}}</span>\r\n @if (item.edited) {\r\n &nbsp;<a (click)=\"edits()\">{{'Edited'| translate}}</a>\r\n }\r\n @if (!me) {\r\n &nbsp;<a (click)=\"reply.emit()\">{{'Reply'| translate}}</a>\r\n }\r\n </small>\r\n </div>\r\n @if (voting) {\r\n <div class=\"comment-actions\">\r\n @if (item.votes > 0 || item.votes < 0) {\r\n <a [class.score-negative]=\"item.votes < 0\" class=\"comment-score\" dir=\"ltr\" (click)=\"votes()\" [bizdocTooltip]=\"'Votes'|translate\">{{item.votes}}</a>\r\n }\r\n <mat-icon matRipple (click)=\"vote(1, $event)\" [class.voted-true]=\"item.voted===1\">thumb_up_alt</mat-icon>\r\n <mat-icon matRipple (click)=\"vote(-1, $event)\" [class.voted-false]=\"item.voted===-1\">thumb_down_alt</mat-icon>\r\n </div>\r\n }\r\n</div>\r\n<ng-template #previewTemplate>\r\n <img [src]=\"'data:image/png;base64,'+item.image\" alt=\"\" />\r\n</ng-template>\r\n" }]
13702
13713
  }], ctorParameters: () => [{ type: SessionService }, { type: PromptService }, { type: TranslateService }, { type: ChatInfo }, { type: AccountService }, { type: Popup }, { type: i2$3.Overlay }, { type: MailboxService }, { type: i0.ViewContainerRef }, { type: undefined, decorators: [{
13703
13714
  type: Inject,
13704
13715
  args: [BIZDOC_CONFIG]
@@ -13824,12 +13835,12 @@ class CommentsComponent {
13824
13835
  reply(item) {
13825
13836
  this._replyTo = item;
13826
13837
  this._accounts.get(item.byId || item.userId).
13827
- subscribe(u => this.replyName = this._translate.get('ReplyTo', this._formatUserElement(u)));
13838
+ subscribe(u => this.replyName = u.name);
13828
13839
  this.input.focus();
13829
13840
  }
13830
13841
  clearReply() {
13831
- this._replyTo = undefined;
13832
- this.replyName = undefined;
13842
+ this._replyTo = null;
13843
+ this.replyName = null;
13833
13844
  }
13834
13845
  ngAfterViewInit() {
13835
13846
  const { comments } = this.model;
@@ -13912,13 +13923,13 @@ class CommentsComponent {
13912
13923
  window.localStorage.setItem(id, this.input.text);
13913
13924
  }
13914
13925
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.2", ngImport: i0, type: CommentsComponent, deps: [{ token: AccountService }, { token: SessionService }, { token: PromptService }, { token: TranslateService }, { token: ChatInfo }, { token: MailboxService }, { token: HubService }, { token: BIZDOC_CONFIG }], target: i0.ɵɵFactoryTarget.Component }); }
13915
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.2", type: CommentsComponent, isStandalone: false, selector: "bizdoc-comments", inputs: { model: "model" }, outputs: { change: "change" }, host: { classAttribute: "comments" }, viewQueries: [{ propertyName: "threadElement", first: true, predicate: ["thread"], descendants: true, read: ElementRef, static: true }, { propertyName: "input", first: true, predicate: EditInputComponent, descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "@if (!model.comments.length) {\r\n <bizdoc-none icon=\"format_quote\"></bizdoc-none>\r\n}\r\n\r\n<div class=\"column comments-thread mat-body\" #thread (scroll)=\"onScroll($event)\">\r\n @for (c of model.comments; track c.id) {\r\n <ng-container>\r\n @if (!c.deleted || showDeleted.has(c.id)) {\r\n <bizdoc-comment role=\"listitem\"\r\n [model]=\"model\"\r\n [item]=\"c\"\r\n (reply)=\"reply(c)\">\r\n </bizdoc-comment>\r\n } @else {\r\n <a (click)=\"showDeleted.add(c.id)\" class=\"comment-deleted\">{{'Deleted' | translate}}</a>\r\n }\r\n </ng-container>\r\n }\r\n</div>\r\n\r\n<div class=\"comments-typing mat-body\" [style.visibility]=\"typing ? 'visible': 'hidden'\">{{'Typing' | translate : typing}}</div>\r\n\r\n@if (replyName) {\r\n <div class=\"comments-reply mat-body\">\r\n <span [innerHTML]=\"replyName | sanitizeHtml\" (click)=\"chat($event)\" class=\"uname\"></span>\r\n &nbsp; <a class=\"comment-cancel-reply\" (click)=\"clearReply()\">{{'Cancel'|translate}}</a>\r\n </div>\r\n}\r\n\r\n<bizdoc-edit-text (ok)=\"post($event)\" (change)=\"_textChange.next()\"\r\n placeholder=\"CommentHere\"\r\n [disabled]=\"sending\" (focus)=\"onFocus()\" (blur)=\"onBlur()\">\r\n</bizdoc-edit-text>\r\n", styles: [":host{display:flex;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column;height:100%}.comments-thread{flex:1 1 auto;overflow:auto;padding:8px 12px 0}.comment-deleted{align-self:center}.comments-typing,.comments-reply{font-size:12px;padding:0 8px}.comments-reply .comment-cancel-reply{font-size:medium}\n"], dependencies: [{ kind: "component", type: EditInputComponent, selector: "bizdoc-edit-text", inputs: ["placeholder", "text", "image", "resource", "disabled", "autofocus", "cache"], outputs: ["change", "ok", "focus", "blur"] }, { kind: "component", type: NoneComponent, selector: "bizdoc-none", inputs: ["title", "subtitle", "icon"] }, { kind: "component", type: CommentComponent, selector: "bizdoc-comment", inputs: ["model", "item"], outputs: ["deleted", "reply"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: SanitizeHtmlPipe, name: "sanitizeHtml" }] }); }
13926
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.2", type: CommentsComponent, isStandalone: false, selector: "bizdoc-comments", inputs: { model: "model" }, outputs: { change: "change" }, host: { classAttribute: "comments" }, viewQueries: [{ propertyName: "threadElement", first: true, predicate: ["thread"], descendants: true, read: ElementRef, static: true }, { propertyName: "input", first: true, predicate: EditInputComponent, descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "@if (!model.comments.length) {\r\n <bizdoc-none icon=\"format_quote\"></bizdoc-none>\r\n}\r\n\r\n<div class=\"column comments-thread mat-body\" #thread (scroll)=\"onScroll($event)\">\r\n @for (c of model.comments; track c.id) {\r\n <ng-container>\r\n @if (!c.deleted || showDeleted.has(c.id)) {\r\n <bizdoc-comment role=\"listitem\"\r\n [model]=\"model\"\r\n [item]=\"c\"\r\n (reply)=\"reply(c)\">\r\n </bizdoc-comment>\r\n } @else {\r\n <a (click)=\"showDeleted.add(c.id)\" class=\"comment-deleted\">{{'Deleted' | translate}}</a>\r\n }\r\n </ng-container>\r\n }\r\n</div>\r\n\r\n<small class=\"mat-body comments-typing\" [style.visibility]=\"typing ? 'visible': 'hidden'\">{{'Typing' | translate : typing}}</small>\r\n\r\n@if (replyName) {\r\n<small class=\"mat-body comments-reply\">\r\n {{'ReplyTo' |translate : replyName }}\r\n &nbsp; <a class=\"comment-cancel-reply\" (click)=\"clearReply()\">{{'Cancel'|translate}}</a>\r\n</small>\r\n}\r\n\r\n<bizdoc-edit-text (ok)=\"post($event)\" (change)=\"_textChange.next()\"\r\n placeholder=\"CommentHere\"\r\n [disabled]=\"sending\" (focus)=\"onFocus()\" (blur)=\"onBlur()\">\r\n</bizdoc-edit-text>\r\n", styles: [":host{display:flex;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column;height:100%}.comments-thread{flex:1 1 auto;overflow:auto;padding:8px 12px 0}.comment-deleted{align-self:center}.comments-typing,.comments-reply{font-size:11px;padding:0 8px}.comments-reply .comment-cancel-reply{font-variant:small-caps}\n"], dependencies: [{ kind: "component", type: EditInputComponent, selector: "bizdoc-edit-text", inputs: ["placeholder", "text", "image", "resource", "disabled", "autofocus", "cache"], outputs: ["change", "ok", "focus", "blur"] }, { kind: "component", type: NoneComponent, selector: "bizdoc-none", inputs: ["title", "subtitle", "icon"] }, { kind: "component", type: CommentComponent, selector: "bizdoc-comment", inputs: ["model", "item"], outputs: ["deleted", "reply"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
13916
13927
  }
13917
13928
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.2", ngImport: i0, type: CommentsComponent, decorators: [{
13918
13929
  type: Component,
13919
13930
  args: [{ standalone: false, selector: 'bizdoc-comments', host: {
13920
13931
  class: 'comments'
13921
- }, template: "@if (!model.comments.length) {\r\n <bizdoc-none icon=\"format_quote\"></bizdoc-none>\r\n}\r\n\r\n<div class=\"column comments-thread mat-body\" #thread (scroll)=\"onScroll($event)\">\r\n @for (c of model.comments; track c.id) {\r\n <ng-container>\r\n @if (!c.deleted || showDeleted.has(c.id)) {\r\n <bizdoc-comment role=\"listitem\"\r\n [model]=\"model\"\r\n [item]=\"c\"\r\n (reply)=\"reply(c)\">\r\n </bizdoc-comment>\r\n } @else {\r\n <a (click)=\"showDeleted.add(c.id)\" class=\"comment-deleted\">{{'Deleted' | translate}}</a>\r\n }\r\n </ng-container>\r\n }\r\n</div>\r\n\r\n<div class=\"comments-typing mat-body\" [style.visibility]=\"typing ? 'visible': 'hidden'\">{{'Typing' | translate : typing}}</div>\r\n\r\n@if (replyName) {\r\n <div class=\"comments-reply mat-body\">\r\n <span [innerHTML]=\"replyName | sanitizeHtml\" (click)=\"chat($event)\" class=\"uname\"></span>\r\n &nbsp; <a class=\"comment-cancel-reply\" (click)=\"clearReply()\">{{'Cancel'|translate}}</a>\r\n </div>\r\n}\r\n\r\n<bizdoc-edit-text (ok)=\"post($event)\" (change)=\"_textChange.next()\"\r\n placeholder=\"CommentHere\"\r\n [disabled]=\"sending\" (focus)=\"onFocus()\" (blur)=\"onBlur()\">\r\n</bizdoc-edit-text>\r\n", styles: [":host{display:flex;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column;height:100%}.comments-thread{flex:1 1 auto;overflow:auto;padding:8px 12px 0}.comment-deleted{align-self:center}.comments-typing,.comments-reply{font-size:12px;padding:0 8px}.comments-reply .comment-cancel-reply{font-size:medium}\n"] }]
13932
+ }, template: "@if (!model.comments.length) {\r\n <bizdoc-none icon=\"format_quote\"></bizdoc-none>\r\n}\r\n\r\n<div class=\"column comments-thread mat-body\" #thread (scroll)=\"onScroll($event)\">\r\n @for (c of model.comments; track c.id) {\r\n <ng-container>\r\n @if (!c.deleted || showDeleted.has(c.id)) {\r\n <bizdoc-comment role=\"listitem\"\r\n [model]=\"model\"\r\n [item]=\"c\"\r\n (reply)=\"reply(c)\">\r\n </bizdoc-comment>\r\n } @else {\r\n <a (click)=\"showDeleted.add(c.id)\" class=\"comment-deleted\">{{'Deleted' | translate}}</a>\r\n }\r\n </ng-container>\r\n }\r\n</div>\r\n\r\n<small class=\"mat-body comments-typing\" [style.visibility]=\"typing ? 'visible': 'hidden'\">{{'Typing' | translate : typing}}</small>\r\n\r\n@if (replyName) {\r\n<small class=\"mat-body comments-reply\">\r\n {{'ReplyTo' |translate : replyName }}\r\n &nbsp; <a class=\"comment-cancel-reply\" (click)=\"clearReply()\">{{'Cancel'|translate}}</a>\r\n</small>\r\n}\r\n\r\n<bizdoc-edit-text (ok)=\"post($event)\" (change)=\"_textChange.next()\"\r\n placeholder=\"CommentHere\"\r\n [disabled]=\"sending\" (focus)=\"onFocus()\" (blur)=\"onBlur()\">\r\n</bizdoc-edit-text>\r\n", styles: [":host{display:flex;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column;height:100%}.comments-thread{flex:1 1 auto;overflow:auto;padding:8px 12px 0}.comment-deleted{align-self:center}.comments-typing,.comments-reply{font-size:11px;padding:0 8px}.comments-reply .comment-cancel-reply{font-variant:small-caps}\n"] }]
13922
13933
  }], ctorParameters: () => [{ type: AccountService }, { type: SessionService }, { type: PromptService }, { type: TranslateService }, { type: ChatInfo }, { type: MailboxService }, { type: HubService }, { type: undefined, decorators: [{
13923
13934
  type: Inject,
13924
13935
  args: [BIZDOC_CONFIG]
@@ -15579,10 +15590,11 @@ const FYI_PATH = 'M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 1
15579
15590
  /** flow-view component*/
15580
15591
  class FlowViewComponent extends TraceBase {
15581
15592
  /** workflow-view ctor */
15582
- constructor(_accounts, _translate, _duration, _elementRef, session, hub) {
15593
+ constructor(_accounts, _translate, _popup, _duration, _elementRef, session, hub) {
15583
15594
  super(session, hub);
15584
15595
  this._accounts = _accounts;
15585
15596
  this._translate = _translate;
15597
+ this._popup = _popup;
15586
15598
  this._duration = _duration;
15587
15599
  this._elementRef = _elementRef;
15588
15600
  this.connectorType = 'Bezier';
@@ -15661,6 +15673,7 @@ class FlowViewComponent extends TraceBase {
15661
15673
  snapSettings: this.snapSettings,
15662
15674
  scrollSettings: this.scrollSettings,
15663
15675
  height: 560,
15676
+ // mouseEnter: this._mouseEnter.bind(this),
15664
15677
  //layers: [
15665
15678
  // {
15666
15679
  // zIndex: 0,
@@ -15715,6 +15728,10 @@ class FlowViewComponent extends TraceBase {
15715
15728
  n.tooltip.content = this._tooltip(n.addInfo.tooltip);
15716
15729
  });
15717
15730
  }
15731
+ _mouseEnter(evt) {
15732
+ evt.element.addInfo && evt.element.addInfo.tooltip &&
15733
+ this._popup.open('', evt.actualObject);
15734
+ }
15718
15735
  /** */
15719
15736
  async _prepare() {
15720
15737
  const { connectors: dconnectors, nodes: dnodes } = this.model.workflow;
@@ -15731,24 +15748,24 @@ class FlowViewComponent extends TraceBase {
15731
15748
  if (recipients.length) {
15732
15749
  let r = 0;
15733
15750
  do {
15734
- var recipient = recipients[r];
15751
+ let { userId, estimate } = recipients[r];
15735
15752
  let exists = false;
15736
15753
  // remove duplicate user recipient on same node
15737
15754
  let j = 0;
15738
15755
  while (j < r && !exists) {
15739
- if (recipients[j].userId === recipient.userId)
15756
+ if (recipients[j].userId === userId)
15740
15757
  exists = true;
15741
15758
  else
15742
15759
  j++;
15743
15760
  }
15744
15761
  if (exists)
15745
- recipients.splice(recipient.estimate ? r : j, 1);
15762
+ recipients.splice(estimate ? r : j, 1);
15746
15763
  else
15747
15764
  r++;
15748
15765
  } while (r < recipients.length);
15749
15766
  for (r = 0; r < recipients.length; r++) {
15750
- let recipient = recipients[r];
15751
- const { annotation, tooltip } = await this._note(node, recipient), content = this._tooltip(tooltip), id = r === 0 ? node.id : node.id + r.toString();
15767
+ let recipient = recipients[r], { userId, actionId, escalated, fyi, pending } = recipient;
15768
+ let { annotation, tooltip } = await this._note(node, recipient), content = this._tooltip(tooltip), id = r === 0 ? node.id : node.id + r.toString();
15752
15769
  nodes.push({
15753
15770
  id,
15754
15771
  width: 50,
@@ -15757,8 +15774,8 @@ class FlowViewComponent extends TraceBase {
15757
15774
  strokeWidth: 2,
15758
15775
  //opacity: node.estimate ? .6 : 1,
15759
15776
  strokeColor: node.estimate ? this.dimColor : this._accentColor,
15760
- fill: !node.estimate && recipient.pending ?
15761
- this._session.getAccent(recipient.userId === this._session.userId ? 500 : 400) : this.transparentColor
15777
+ fill: !node.estimate && pending ?
15778
+ this._session.getAccent(userId === this._session.userId ? 500 : 400) : this.transparentColor
15762
15779
  },
15763
15780
  shape: this._configuration[node.type].shape,
15764
15781
  zIndex: zIndex++,
@@ -15790,9 +15807,9 @@ class FlowViewComponent extends TraceBase {
15790
15807
  }]
15791
15808
  });
15792
15809
  // add action indicator
15793
- if (recipient.actionId) {
15794
- const action = this._session.profile.actions.find(a => a.name === recipient.actionId);
15795
- action.shape && !recipient.pending &&
15810
+ if (actionId) {
15811
+ const action = this._session.profile.actions.find(a => a.name === actionId);
15812
+ action.shape && !pending &&
15796
15813
  indicators.push({
15797
15814
  id: id + 'action',
15798
15815
  width: 15,
@@ -15814,7 +15831,7 @@ class FlowViewComponent extends TraceBase {
15814
15831
  });
15815
15832
  }
15816
15833
  // fyi indicator
15817
- recipient.fyi &&
15834
+ fyi &&
15818
15835
  indicators.push({
15819
15836
  id: id + 'fyi',
15820
15837
  width: 15,
@@ -15835,7 +15852,7 @@ class FlowViewComponent extends TraceBase {
15835
15852
  }
15836
15853
  });
15837
15854
  // escalate indicator
15838
- recipient.escalated &&
15855
+ escalated &&
15839
15856
  indicators.push({
15840
15857
  id: id + 'escalate',
15841
15858
  width: 15,
@@ -16111,66 +16128,67 @@ class FlowViewComponent extends TraceBase {
16111
16128
  async _note(node, recipient) {
16112
16129
  const tooltip = {};
16113
16130
  let annotation;
16131
+ const { userId, id, pending, fyi, roleId, escalated, originId, replied, repliedBy, actionId, estimate, substituteId, received } = recipient;
16114
16132
  // you
16115
- if (recipient.userId === this._session.userId) {
16133
+ if (userId === this._session.userId) {
16116
16134
  if (this._session.isImpersonating)
16117
16135
  annotation = this._session.profile.name;
16118
16136
  else
16119
16137
  annotation = this._translate.get('You');
16120
- if (recipient.role) {
16121
- const role = this._roleName(recipient.role);
16122
- tooltip.role = `- ${role}`;
16138
+ if (roleId) {
16139
+ const roleName = this._roleName(roleId);
16140
+ tooltip.role = `- ${roleName}`;
16123
16141
  }
16124
16142
  }
16125
16143
  else
16126
16144
  // someone else
16127
16145
  {
16128
- const who = await firstValueFrom(this._accounts.get(recipient.userId));
16146
+ const who = await firstValueFrom(this._accounts.get(userId));
16129
16147
  annotation = who.name;
16130
16148
  if (who.role)
16131
16149
  tooltip.role = `- ${who.role}`;
16132
- else if (recipient.role) {
16133
- const role = this._roleName(recipient.role);
16134
- tooltip.role = `- ${role}`;
16150
+ else if (roleId) {
16151
+ const roleName = this._roleName(roleId);
16152
+ tooltip.role = `- ${roleName}`;
16135
16153
  }
16136
16154
  }
16137
- if (recipient.replied) {
16138
- const ago = dayjs(recipient.replied).fromNow();
16139
- const targets = this.model.recipients.filter(r => r.originId === recipient.id), to = [];
16155
+ if (replied) {
16156
+ const ago = dayjs(replied).fromNow();
16157
+ const targets = this.model.recipients.filter(r => r.originId === id), to = [];
16140
16158
  if (targets.length)
16141
16159
  for (let sibling of targets) {
16142
16160
  const who = await firstValueFrom(this._accounts.get(sibling.userId));
16143
16161
  to.push(who.name);
16144
16162
  }
16145
- if (recipient.repliedBy) {
16146
- if (recipient.repliedBy === this._session.profile.byId) {
16147
- const action = this._action(recipient.actionId, this._session.profile.byGender);
16163
+ if (repliedBy) {
16164
+ if (repliedBy === this._session.profile.byId) {
16165
+ const action = this._action(actionId, this._session.profile.byGender);
16148
16166
  if (to.length) {
16149
- if (recipient.userId === this._session.profile.userId)
16167
+ if (userId === this._session.profile.userId)
16150
16168
  tooltip.note = this._translate.get('ActionTakenByYouTo', action, this._translate.join(to), this._session.profile.name, ago);
16151
16169
  else {
16152
- const who = await firstValueFrom(this._accounts.get(recipient.userId));
16170
+ const who = await firstValueFrom(this._accounts.get(userId));
16153
16171
  tooltip.note = this._translate.get('ActionTakenByYouTo', action, this._translate.join(to), who.name, ago);
16154
16172
  }
16155
16173
  }
16156
- else if (recipient.userId === this._session.profile.userId)
16174
+ else if (userId === this._session.profile.userId)
16157
16175
  tooltip.note = this._translate.get('ActionTakenByYou', action, this._session.profile.name, ago);
16158
16176
  else {
16159
- const who = await firstValueFrom(this._accounts.get(recipient.userId));
16177
+ const who = await firstValueFrom(this._accounts.get(userId));
16160
16178
  tooltip.note = this._translate.get('ActionTakenByYou', action, who.name, ago);
16161
16179
  }
16162
16180
  }
16163
16181
  else {
16164
- const by = await firstValueFrom(this._accounts.get(recipient.repliedBy));
16165
- const action = this._action(recipient.actionId, by.gender);
16166
- if (recipient.userId === this._session.profile.userId) {
16182
+ const by = await firstValueFrom(this._accounts.get(repliedBy));
16183
+ const action = this._action(actionId, by.gender);
16184
+ if (userId === this._session.profile.userId) {
16167
16185
  if (to.length)
16168
16186
  tooltip.note = this._translate.get('YouTakenActionByTo', by.name, action, this._translate.join(to), ago);
16169
16187
  else
16170
16188
  tooltip.note = this._translate.get('YouTakenActionBy', by.name, action, ago);
16171
16189
  }
16172
16190
  else {
16173
- const who = await firstValueFrom(this._accounts.get(recipient.userId));
16191
+ const who = await firstValueFrom(this._accounts.get(userId));
16174
16192
  if (to.length)
16175
16193
  tooltip.note = this._translate.get('ActionTakenByTo', by.name, action, this._translate.join(to), who.name, ago);
16176
16194
  else
@@ -16179,80 +16197,80 @@ class FlowViewComponent extends TraceBase {
16179
16197
  }
16180
16198
  }
16181
16199
  else if (to.length) {
16182
- if (recipient.userId === this._session.profile.userId) {
16183
- const action = this._action(recipient.actionId, this._session.profile.gender);
16200
+ if (userId === this._session.profile.userId) {
16201
+ const action = this._action(actionId, this._session.profile.gender);
16184
16202
  if (this._session.isImpersonating)
16185
16203
  tooltip.note = this._translate.get('ActionTakenTo', this._session.profile.name, action, this._translate.join(to), ago);
16186
16204
  else
16187
16205
  tooltip.note = this._translate.get('YouTakenActionTo', action, this._translate.join(to), ago);
16188
16206
  }
16189
16207
  else {
16190
- const who = await firstValueFrom(this._accounts.get(recipient.userId));
16191
- const action = this._action(recipient.actionId, who.gender);
16192
- tooltip.note = this._translate.get('ActionTakenTo', who.name, action, this._translate.join(to));
16208
+ const who = await firstValueFrom(this._accounts.get(userId));
16209
+ const action = this._action(actionId, who.gender);
16210
+ tooltip.note = this._translate.get('ActionTakenTo', who.name, action, this._translate.join(to), ago);
16193
16211
  }
16194
16212
  }
16195
16213
  else if (this._session.isImpersonating) {
16196
- const action = this._action(recipient.actionId, this._session.profile.gender);
16214
+ const action = this._action(actionId, this._session.profile.gender);
16197
16215
  tooltip.note = this._translate.get('ActionTaken', this._session.profile.name, action, ago);
16198
16216
  }
16199
- else if (recipient.userId === this._session.profile.userId) {
16200
- const action = this._action(recipient.actionId, You);
16217
+ else if (userId === this._session.profile.userId) {
16218
+ const action = this._action(actionId, You);
16201
16219
  tooltip.note = this._translate.get('YouTakenAction', action, ago);
16202
16220
  }
16203
16221
  else {
16204
- const who = await firstValueFrom(this._accounts.get(recipient.userId));
16205
- const action = this._action(recipient.actionId, who.gender);
16222
+ const who = await firstValueFrom(this._accounts.get(userId));
16223
+ const action = this._action(actionId, who.gender);
16206
16224
  tooltip.note = this._translate.get('ActionTaken', who.name, action, ago);
16207
16225
  }
16208
16226
  }
16209
- else if (!recipient.estimate) {
16210
- const ago = dayjs(recipient.received).fromNow();
16211
- if (recipient.userId === this._session.userId) {
16227
+ else if (!estimate) {
16228
+ const ago = dayjs(received).fromNow();
16229
+ if (userId === this._session.userId) {
16212
16230
  if (this._session.isImpersonating)
16213
16231
  tooltip.note = this._translate.personalize('ReceivedBy', this._session.profile.gender, this._session.profile.name, ago);
16214
16232
  else
16215
16233
  tooltip.note = this._translate.get('YouReceived', ago);
16216
16234
  }
16217
16235
  else {
16218
- const who = await firstValueFrom(this._accounts.get(recipient.userId));
16236
+ const who = await firstValueFrom(this._accounts.get(userId));
16219
16237
  tooltip.note = this._translate.personalize('ReceivedTime', who.gender, ago);
16220
16238
  }
16221
16239
  }
16222
- if (recipient.substituteId) {
16223
- if (recipient.substituteId === this._session.userId)
16240
+ if (substituteId) {
16241
+ if (substituteId === this._session.userId)
16224
16242
  tooltip.substituting = this._translate.personalize('SubstitutingYou', this._session.gender);
16225
16243
  else {
16226
- const substituting = await firstValueFrom(this._accounts.get(recipient.substituteId));
16244
+ const substituting = await firstValueFrom(this._accounts.get(substituteId));
16227
16245
  tooltip.substituting = this._translate.personalize('SubstitutingFor', substituting.gender, substituting.name);
16228
16246
  }
16229
16247
  }
16230
- if (recipient.originId && !recipient.replied) {
16231
- const origin = this.model.recipients.find(r => r.id === recipient.originId), action = this._session.profile.actions.find(a => a.name === origin.actionId), adjective = action.adjective || action.past || action.title;
16248
+ if (originId && !replied) {
16249
+ const origin = this.model.recipients.find(r => r.id === originId), action = this._action(origin.actionId, 'adjective');
16232
16250
  if ((origin.repliedBy || origin.userId) === this._session.userId)
16233
- tooltip.substituting = this._translate.get('ActionByYou', adjective);
16251
+ tooltip.substituting = this._translate.get('ActionByYou', action);
16234
16252
  else if (origin.repliedBy) {
16235
16253
  const who = await firstValueFrom(this._accounts.get(origin.userId));
16236
16254
  const by = await firstValueFrom(this._accounts.get(origin.repliedBy));
16237
- tooltip.substituting = this._translate.get('ActionByBy', adjective, by.name, who.name);
16255
+ tooltip.substituting = this._translate.get('ActionByBy', action, by.name, who.name);
16238
16256
  }
16239
16257
  else {
16240
16258
  const who = await firstValueFrom(this._accounts.get(origin.userId));
16241
- tooltip.substituting = this._translate.get('ActionBy', adjective, who.name);
16259
+ tooltip.substituting = this._translate.get('ActionBy', action, who.name);
16242
16260
  }
16243
16261
  }
16244
- if (recipient.escalated) {
16245
- const escalation = this.model.log.find(l => l.type === 'Escalation' && l.recipientId === recipient.originId);
16262
+ if (escalated) {
16263
+ const escalation = this.model.log.find(l => l.type === 'Escalation' && l.recipientId === originId);
16246
16264
  const who = await firstValueFrom(this._accounts.get(escalation.userId));
16247
16265
  const duration = this._duration.transform(dayjs.duration(escalation.duration, 's'));
16248
16266
  tooltip.escalation = this._translate.get('EscalatedFrom', who.name, duration);
16249
16267
  }
16250
- if (recipient.replied) {
16251
- const duration = dayjs(recipient.replied).diff(recipient.received, 's');
16268
+ if (replied) {
16269
+ const duration = dayjs(replied).diff(received, 's');
16252
16270
  tooltip.duration = this._translate.get('DurationTime', this._duration.transform(duration));
16253
16271
  }
16254
- else if (recipient.pending) {
16255
- if (recipient.estimate)
16272
+ else if (pending) {
16273
+ if (estimate)
16256
16274
  tooltip.estimatedTime = this._timeEstimate(node);
16257
16275
  else if (node.standardTime) {
16258
16276
  const diff = node.standardTime - dayjs().diff(node.time, 's');
@@ -16262,27 +16280,41 @@ class FlowViewComponent extends TraceBase {
16262
16280
  }
16263
16281
  else if (node.standardTime)
16264
16282
  tooltip.standardTime = this._translate.get('NodeStandardTime', this._duration.transform(node.standardTime));
16265
- if (recipient.fyi)
16283
+ if (fyi)
16266
16284
  tooltip.fyi = this._translate.get('FYI');
16267
16285
  return { annotation, tooltip };
16268
16286
  }
16287
+ /**
16288
+ *
16289
+ * @param name
16290
+ * @param gender
16291
+ * @returns
16292
+ */
16269
16293
  _action(name, gender) {
16270
16294
  const action = this._session.profile.actions.find(a => a.name === name);
16271
- if (gender === You) {
16272
- const gender = this._session.gender, you = gender === 'Male' ? action?.youMale :
16273
- gender === 'Female' ? action?.youFemale :
16274
- null;
16275
- return (you || action?.you || action?.past || action?.title || name).toLowerCase();
16295
+ if (!action)
16296
+ return name;
16297
+ switch (gender) {
16298
+ case 'adjective':
16299
+ return decapitalize(action.adjective || action.past || action.title);
16300
+ case You:
16301
+ const gender = this._session.gender, you = gender === 'Male' ? action.youMale :
16302
+ gender === 'Female' ? action.youFemale :
16303
+ null;
16304
+ return decapitalize(you || action.you || action.past || action.title);
16305
+ case 'Male':
16306
+ return decapitalize(action.pastMale || action.past || action.title);
16307
+ case 'Female':
16308
+ return decapitalize(action.pastFemale || action.past || action.title);
16309
+ default:
16310
+ return decapitalize(action.past || action.title);
16276
16311
  }
16277
- const past = gender === 'Male' ? action?.pastMale :
16278
- gender === 'Female' ? action?.pastFemale : null;
16279
- return (past || action?.past || action?.title || name).toLowerCase();
16280
16312
  }
16281
16313
  ngOnDestroy() {
16282
16314
  this.diagram?.destroy();
16283
16315
  super.ngOnDestroy();
16284
16316
  }
16285
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.2", ngImport: i0, type: FlowViewComponent, deps: [{ token: AccountService }, { token: TranslateService }, { token: DurationFormatPipe }, { token: i0.ElementRef }, { token: SessionService }, { token: HubService }], target: i0.ɵɵFactoryTarget.Component }); }
16317
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.2", ngImport: i0, type: FlowViewComponent, deps: [{ token: AccountService }, { token: TranslateService }, { token: Popup }, { token: DurationFormatPipe }, { token: i0.ElementRef }, { token: SessionService }, { token: HubService }], target: i0.ɵɵFactoryTarget.Component }); }
16286
16318
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.2", type: FlowViewComponent, isStandalone: false, selector: "bizdoc-flow", inputs: { model: "model", version: "version", connectorType: "connectorType" }, host: { attributes: { "id": "diagram1", "dir": "ltr" } }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: '', isInline: true, styles: [":host{min-height:500px;min-width:400px;background-color:transparent!important}\n"] }); }
16287
16319
  }
16288
16320
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.2", ngImport: i0, type: FlowViewComponent, decorators: [{
@@ -16291,7 +16323,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.2", ngImpor
16291
16323
  id: 'diagram1',
16292
16324
  dir: 'ltr'
16293
16325
  }, styles: [":host{min-height:500px;min-width:400px;background-color:transparent!important}\n"] }]
16294
- }], ctorParameters: () => [{ type: AccountService }, { type: TranslateService }, { type: DurationFormatPipe }, { type: i0.ElementRef }, { type: SessionService }, { type: HubService }], propDecorators: { model: [{
16326
+ }], ctorParameters: () => [{ type: AccountService }, { type: TranslateService }, { type: Popup }, { type: DurationFormatPipe }, { type: i0.ElementRef }, { type: SessionService }, { type: HubService }], propDecorators: { model: [{
16295
16327
  type: Input
16296
16328
  }], version: [{
16297
16329
  type: Input
@@ -16444,90 +16476,90 @@ class TraceViewComponent extends TraceBase {
16444
16476
  };
16445
16477
  trace.push(step);
16446
16478
  if (l.recipientId) {
16447
- let recipient = recipients.find(r => r.id === l.recipientId);
16448
- if (recipient.role)
16449
- step.role = this._roleName(recipient.role);
16450
- step.fyi = recipient.fyi;
16451
- if (recipient.substituteId) {
16452
- if (recipient.repliedBy) {
16453
- if (recipient.repliedBy === this._session.userId) {
16454
- let who = await profileOf(recipient.userId);
16455
- if (recipient.substituteId === this._session.userId)
16479
+ let recipient = recipients.find(r => r.id === l.recipientId), { roleId, fyi, id, repliedBy, substituteId, userId } = recipient;
16480
+ if (roleId)
16481
+ step.role = this._roleName(roleId);
16482
+ step.fyi = fyi;
16483
+ if (substituteId) {
16484
+ if (repliedBy) {
16485
+ if (repliedBy === this._session.userId) {
16486
+ let who = await profileOf(userId);
16487
+ if (substituteId === this._session.userId)
16456
16488
  step.name = this._translate.get('ByYou', nameOf(who));
16457
16489
  else {
16458
- let substituting = await profileOf(recipient.substituteId);
16490
+ let substituting = await profileOf(substituteId);
16459
16491
  step.name = this._translate.personalize('SubstitutingByYou', who.gender, nameOf(who), nameOf(substituting));
16460
16492
  }
16461
16493
  if (action)
16462
- step.action = await actionBy(action, You, recipient.id);
16494
+ step.action = await actionBy(action, You, id);
16463
16495
  }
16464
16496
  else {
16465
- let by = await profileOf(recipient.repliedBy), who = await profileOf(recipient.userId), substituting = await profileOf(recipient.substituteId);
16497
+ let by = await profileOf(repliedBy), who = await profileOf(userId), substituting = await profileOf(substituteId);
16466
16498
  step.name = this._translate.get('SubstitutingBy', nameOf(who), nameOf(substituting), nameOf(by));
16467
16499
  if (by.role)
16468
16500
  step.role = by.role;
16469
16501
  if (action)
16470
- step.action = await actionBy(action, by.gender, recipient.id);
16502
+ step.action = await actionBy(action, by.gender, id);
16471
16503
  }
16472
16504
  }
16473
- else if (recipient.userId === this._session.userId) {
16474
- let substituting = await profileOf(recipient.substituteId);
16505
+ else if (userId === this._session.userId) {
16506
+ let substituting = await profileOf(substituteId);
16475
16507
  step.name = this._translate.personalize('YouSubstituting', this._session.gender, nameOf(substituting));
16476
16508
  if (action)
16477
- step.action = await actionBy(action, this._session.gender, recipient.id);
16509
+ step.action = await actionBy(action, this._session.gender, id);
16478
16510
  }
16479
- else if (recipient.substituteId === this._session.userId) {
16480
- let who = await profileOf(recipient.userId);
16511
+ else if (substituteId === this._session.userId) {
16512
+ let who = await profileOf(userId);
16481
16513
  step.name = this._translate.personalize('SubstitutingForYou', who.gender, nameOf(who));
16482
16514
  if (action)
16483
- step.action = await actionBy(action, who.gender, recipient.id);
16515
+ step.action = await actionBy(action, who.gender, id);
16484
16516
  }
16485
16517
  else {
16486
- let who = await profileOf(recipient.userId), substituting = await profileOf(recipient.substituteId);
16518
+ let who = await profileOf(userId), substituting = await profileOf(substituteId);
16487
16519
  step.name = this._translate.personalize('Substituting', who.gender, nameOf(who), nameOf(substituting));
16488
16520
  if (who.role)
16489
16521
  step.role = who.role;
16490
16522
  if (action)
16491
- step.action = await actionBy(action, who.gender, recipient.id);
16523
+ step.action = await actionBy(action, who.gender, id);
16492
16524
  }
16493
16525
  }
16494
- else if (recipient.repliedBy) {
16495
- if (recipient.userId === this._session.userId) {
16496
- let by = await profileOf(recipient.repliedBy);
16526
+ else if (repliedBy) {
16527
+ if (userId === this._session.userId) {
16528
+ let by = await profileOf(repliedBy);
16497
16529
  step.name = this._translate.get('YouBy', nameOf(by));
16498
16530
  if (action)
16499
- step.action = await actionBy(action, by.gender, recipient.id);
16531
+ step.action = await actionBy(action, by.gender, id);
16500
16532
  }
16501
16533
  else {
16502
- let who = await profileOf(recipient.userId);
16503
- if (recipient.repliedBy === this._session.userId) {
16534
+ let who = await profileOf(userId);
16535
+ if (repliedBy === this._session.userId) {
16504
16536
  step.name = this._translate.get('ByYou', nameOf(who));
16505
16537
  if (action)
16506
- step.action = await actionBy(action, You, recipient.id);
16538
+ step.action = await actionBy(action, You, id);
16507
16539
  }
16508
16540
  else {
16509
- let by = await profileOf(recipient.repliedBy);
16541
+ let by = await profileOf(repliedBy);
16510
16542
  step.name = this._translate.get('By', nameOf(who), nameOf(by));
16511
16543
  if (by.role)
16512
16544
  step.role = by.role;
16513
16545
  if (action)
16514
- step.action = await actionBy(action, by.gender, recipient.id);
16546
+ step.action = await actionBy(action, by.gender, id);
16515
16547
  }
16516
16548
  }
16517
16549
  }
16518
16550
  else {
16519
- if (recipient.userId === this._session.userId) {
16551
+ if (userId === this._session.userId) {
16520
16552
  step.name = this._translate.get('You');
16521
16553
  if (action)
16522
- step.action = await actionBy(action, You, recipient.id);
16554
+ step.action = await actionBy(action, You, id);
16523
16555
  }
16524
16556
  else {
16525
- let who = await profileOf(recipient.userId);
16557
+ let who = await profileOf(userId);
16526
16558
  step.name = nameOf(who);
16527
16559
  if (who.role)
16528
16560
  step.role = who.role;
16529
16561
  if (action)
16530
- step.action = await actionBy(action, who.gender, recipient.id);
16562
+ step.action = await actionBy(action, who.gender, id);
16531
16563
  }
16532
16564
  }
16533
16565
  }
@@ -16559,23 +16591,24 @@ class TraceViewComponent extends TraceBase {
16559
16591
  }
16560
16592
  }
16561
16593
  for (let recipient of recipients) {
16562
- if (!recipient.pending && !recipient.estimate)
16594
+ const { repliedBy, originId, note, escalated, pending, substituteId, actionId, userId, estimate, fyi, received, roleId, nodeId } = recipient;
16595
+ if (!pending && !estimate)
16563
16596
  continue;
16564
16597
  let step = {
16565
- time: recipient.received,
16566
- fyi: recipient.fyi,
16567
- estimate: recipient.estimate,
16568
- pending: recipient.pending,
16569
- action: recipient.actionId,
16570
- note: recipient.note,
16571
- type: recipient.estimate ? 'Estimate' : 'Pending',
16572
- duration: recipient.pending ? dayjs().diff(recipient.received, 's') : null,
16573
- role: recipient.role ? this._roleName(recipient.role) : null
16598
+ time: received,
16599
+ fyi,
16600
+ estimate,
16601
+ pending,
16602
+ action: actionId,
16603
+ note,
16604
+ type: estimate ? 'Estimate' : 'Pending',
16605
+ duration: pending ? dayjs().diff(received, 's') : null,
16606
+ role: roleId ? this._roleName(roleId) : null
16574
16607
  };
16575
- if (recipient.nodeId) {
16576
- const node = this.model.workflow.nodes.find(n => n.id === recipient.nodeId);
16608
+ if (nodeId) {
16609
+ const node = this.model.workflow.nodes.find(n => n.id === nodeId);
16577
16610
  if (node) {
16578
- if (recipient.estimate) {
16611
+ if (estimate) {
16579
16612
  const { min, max } = super._estimateTime(node);
16580
16613
  if (max)
16581
16614
  step.durationMin = min,
@@ -16583,36 +16616,36 @@ class TraceViewComponent extends TraceBase {
16583
16616
  }
16584
16617
  }
16585
16618
  }
16586
- if (recipient.substituteId) {
16587
- if (recipient.substituteId === this._session.userId) {
16588
- let who = await profileOf(recipient.userId);
16619
+ if (substituteId) {
16620
+ if (substituteId === this._session.userId) {
16621
+ let who = await profileOf(userId);
16589
16622
  step.name = this._translate.personalize('SubstitutingForYou', who.gender, nameOf(who));
16590
16623
  }
16591
- else if (recipient.userId === this._session.userId) {
16592
- let substituting = await profileOf(recipient.substituteId);
16624
+ else if (userId === this._session.userId) {
16625
+ let substituting = await profileOf(substituteId);
16593
16626
  step.name = this._translate.personalize('YouSubstituting', this._session.gender, nameOf(substituting));
16594
16627
  }
16595
16628
  else {
16596
- let who = await profileOf(recipient.userId), substituting = await profileOf(recipient.substituteId);
16629
+ let who = await profileOf(userId), substituting = await profileOf(substituteId);
16597
16630
  step.name = this._translate.personalize('Substituting', who.gender, nameOf(who), nameOf(substituting));
16598
16631
  if (who.role)
16599
16632
  step.role = who.role;
16600
16633
  }
16601
16634
  }
16602
- else if (recipient.repliedBy) {
16603
- let who = await profileOf(recipient.userId);
16604
- if (recipient.repliedBy === this._session.userId)
16635
+ else if (repliedBy) {
16636
+ let who = await profileOf(userId);
16637
+ if (repliedBy === this._session.userId)
16605
16638
  step.name = this._translate.get('ByYou', nameOf(who));
16606
16639
  else {
16607
- let by = await profileOf(recipient.repliedBy);
16640
+ let by = await profileOf(repliedBy);
16608
16641
  step.name = this._translate.get('By', nameOf(who), nameOf(by));
16609
16642
  if (by.role)
16610
16643
  step.role = by.role;
16611
16644
  }
16612
16645
  }
16613
- else if (recipient.escalated) {
16614
- let escalation = this.model.log.find(l => l.type === 'Escalation' && l.recipientId === recipient.originId);
16615
- let to = await profileOf(recipient.userId);
16646
+ else if (escalated) {
16647
+ let escalation = this.model.log.find(l => l.type === 'Escalation' && l.recipientId === originId);
16648
+ let to = await profileOf(userId);
16616
16649
  if (escalation.userId === this._session.userId)
16617
16650
  step.name = this._translate.get('EscalatedByYou', nameOf(to));
16618
16651
  else {
@@ -16621,10 +16654,10 @@ class TraceViewComponent extends TraceBase {
16621
16654
  }
16622
16655
  }
16623
16656
  else {
16624
- if (recipient.userId === this._session.userId)
16657
+ if (userId === this._session.userId)
16625
16658
  step.name = this._translate.get('You');
16626
16659
  else {
16627
- let who = await profileOf(recipient.userId);
16660
+ let who = await profileOf(userId);
16628
16661
  step.name = nameOf(who);
16629
16662
  if (who.role)
16630
16663
  step.role = who.role;
@@ -21588,11 +21621,11 @@ class HomeComponent extends HomeBase {
21588
21621
  item.instance.onPick();
21589
21622
  }
21590
21623
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.2", ngImport: i0, type: HomeComponent, deps: [{ token: PanesRouter }, { token: SearchService }, { token: DocumentFactory }, { token: Popup }, { token: GuideService }, { token: AuthenticationImpl }, { token: BIZDOC_CONFIG }], target: i0.ɵɵFactoryTarget.Component }); }
21591
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.2", type: HomeComponent, isStandalone: false, selector: "bizdoc-home", host: { listeners: { "document:keydown": "handleKeyboardEvent($event)" }, classAttribute: "mat-app-background" }, viewQueries: [{ propertyName: "drawer", first: true, predicate: MatSidenav, descendants: true, static: true }, { propertyName: "main", first: true, predicate: ["main"], descendants: true, static: true }, { propertyName: "input", first: true, predicate: ["input"], descendants: true }, { propertyName: "trigger", first: true, predicate: ["input"], descendants: true, read: MatAutocompleteTrigger }], usesInheritance: true, ngImport: i0, template: "<!-- menu -->\r\n<div [class.nav-collapsed]=\"collapsed\" [class.nav-open]=\"subMenu\"\r\n [class.dialog]=\"isDialogMode\"\r\n class=\"nav-menu row\">\r\n\r\n <div class=\"column\">\r\n <!--@if(appLogo){\r\n <img [src]=\"appLogo\" class=\"app-logo\" />\r\n }-->\r\n @if (forms.length) {\r\n <div [class.active]=\"activeMenu === 'new'\" class=\"new-container\">\r\n <button mat-raised-button\r\n [bizdocTooltip]=\"'Compose'|translate\" bizdocTooltipPosition=\"end\" [bizdocTooltipDisabled]=\"!collapsed\"\r\n (click)=\"openNew()\" [disabled]=\"creating\"\r\n [attr.aria-label]=\"'Compose'| translate\" color=\"primary\" data-help=\"compose\">\r\n <mat-icon>add</mat-icon>\r\n <span class=\"nav-label\">{{'Compose'| translate}}</span>\r\n </button>\r\n </div>\r\n }\r\n <mat-nav-list>\r\n <mat-list-item class=\"nav-menu\" [attr.aria-label]=\"'Dashboard' | translate\"\r\n (click)=\"nav('dashboard')\" [class.active]=\"activeMenu === 'dashboard'\"\r\n data-help=\"dashboard\"\r\n [bizdocTooltip]=\"'Dashboard'|translate\" bizdocTooltipPosition=\"end\" [bizdocTooltipDisabled]=\"!collapsed\">\r\n <mat-icon matListItemIcon>apps</mat-icon><span class=\"nav-label\" matListItemTitle>{{'Dashboard' | translate}}</span>\r\n </mat-list-item>\r\n <mat-list-item class=\"nav-menu\" (click)=\"openMailbox()\" [bizdocTooltip]=\"'Mailbox'|translate\" bizdocTooltipPosition=\"end\" [bizdocTooltipDisabled]=\"!collapsed\"\r\n [class.active]=\"activeMenu === 'mailbox'\"\r\n [attr.aria-label]=\"'Mailbox' | translate\" data-help=\"folders\">\r\n <mat-icon matListItemIcon [matBadge]=\"profile.inboxCount\" [matBadgeHidden]=\"!profile.inboxCount\" matBadgeColor=\"accent\" aria-hidden=\"false\">inbox</mat-icon>\r\n <span class=\"nav-label\" matListItemTitle>{{'Mailbox' | translate}}</span>\r\n </mat-list-item>\r\n @if (schedulerEnabled) {\r\n <mat-list-item class=\"nav-menu\" [attr.aria-label]=\"'Scheduler' | translate\"\r\n (click)=\"nav('schedule')\" [class.active]=\"activeMenu === 'schedule'\"\r\n [bizdocTooltip]=\"'Scheduler'|translate\" bizdocTooltipPosition=\"end\" [bizdocTooltipDisabled]=\"!collapsed\">\r\n <mat-icon matListItemIcon class=\"mat-icon-rtl-mirror\">date_range</mat-icon><span class=\"nav-label\" matListItemTitle>{{ 'Scheduler' | translate}}</span>\r\n </mat-list-item>\r\n }\r\n @if (chatEnabled) {\r\n <mat-list-item class=\"nav-menu\" data-help=\"chat\" [attr.aria-label]=\"'Chat' | translate\"\r\n (click)=\"nav('contacts')\" [class.active]=\"activeMenu === 'contacts'\"\r\n [bizdocTooltip]=\"'Chat'|translate\" bizdocTooltipPosition=\"end\" [bizdocTooltipDisabled]=\"!collapsed\">\r\n <mat-icon matListItemIcon [matBadge]=\"profile.conversationsCount\" [matBadgeHidden]=\"!profile.conversationsCount\" matBadgeColor=\"accent\" aria-hidden=\"false\">chat</mat-icon>\r\n <span class=\"nav-label\" matListItemTitle>{{ 'Chat' | translate}}</span>\r\n </mat-list-item>\r\n }\r\n <mat-divider></mat-divider>\r\n @if (enableAnalysis && profile.cubes.length) {\r\n <mat-list-item class=\"nav-menu\" (click)=\"openSubMenu('cube')\"\r\n [class.active]=\"activeMenu === 'cube'\"\r\n [bizdocTooltip]=\"'Cube'|translate\" bizdocTooltipPosition=\"end\" [bizdocTooltipDisabled]=\"!collapsed\"\r\n data-help=\"cube\" [attr.aria-label]=\"'Cube' | translate\">\r\n <mat-icon matListItemIcon>equalizer</mat-icon><span class=\"nav-label\" matListItemTitle>{{'Cube' | translate}}</span>\r\n </mat-list-item>\r\n }\r\n @if (profile.reports.length) {\r\n <mat-list-item class=\"nav-menu\" (click)=\"openSubMenu('reports')\"\r\n [class.active]=\"activeMenu === 'reports'\"\r\n [bizdocTooltip]=\"'Reports'|translate\" bizdocTooltipPosition=\"end\" [bizdocTooltipDisabled]=\"!collapsed\" data-help=\"reports\" [attr.aria-label]=\"'Reports' | translate\">\r\n <mat-icon matListItemIcon>list_alt</mat-icon><span class=\"nav-label\" matListItemTitle>{{'Reports' | translate}}</span>\r\n </mat-list-item>\r\n }\r\n @if (isSysAdmin) {\r\n <mat-divider></mat-divider>\r\n <mat-list-item class=\"nav-menu\" (click)=\"openSubMenu('admin')\"\r\n [class.active]=\"activeMenu === 'admin'\"\r\n [bizdocTooltip]=\"'System'|translate\" bizdocTooltipPosition=\"end\" [bizdocTooltipDisabled]=\"!collapsed\" [attr.aria-label]=\"'System' | translate\">\r\n <mat-icon matListItemIcon>device_hub</mat-icon>\r\n <span class=\"nav-label\" matListItemTitle>{{'Workflow' | translate}}</span>\r\n </mat-list-item>\r\n }\r\n </mat-nav-list>\r\n <span class=\"divider\"></span>\r\n <!--<lottie name=\"lf30_editor_qr7zgmcs\" *ngIf=\"loading\"></lottie>-->\r\n <div class=\"sign-in\">\r\n <button mat-icon-button data-help=\"settings\" [bizdocTooltip]=\"'Settings' | translate\" bizdocTooltipPosition=\"above\"\r\n [attr.aria-label]=\"'Settings' | translate\" (click)=\"options($event)\">\r\n <mat-icon matAnimate=\"rotate\">settingson</mat-icon>\r\n </button>\r\n @if(canSignOut) {\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button data-help=\"sign-in\" [attr.aria-label]=\"'Power' | translate\" (click)=\"signout($event)\" [bizdocTooltip]=\"'Exit'|translate\" bizdocTooltipPosition=\"above\">\r\n <mat-icon class=\"mat-icon-rtl-mirror\">logout</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n <!-- -->\r\n @if (subMenu) {\r\n <div class=\"sub-menu\" (mouseleave)=\"collapseSubMenu()\" [@subMenu]=\"subMenuMode\" (@subMenu.done)=\"resize()\">\r\n @if (subMenu !== 'new') {\r\n <div class=\"action\">\r\n <button mat-icon-button (click)=\"togglePinned()\" [bizdocTooltip]=\"(pinned?'Collapse':'Expand')|translate\"><mat-icon class=\"mat-icon-rtl-mirror\">{{pinned ? 'push_pin' : 'menu'}}</mat-icon></button>\r\n </div>\r\n }\r\n @switch (subMenu) {\r\n @case ('new') {\r\n <bizdoc-new-menu (change)=\"closeSubMenu()\"></bizdoc-new-menu>\r\n }\r\n @case ('mailbox') {\r\n <bizdoc-folders-menu [collapsed]=\"subMenuMode === 'shrink'\" (change)=\"collapseSubMenu()\"></bizdoc-folders-menu>\r\n }\r\n @case ('admin') {\r\n <bizdoc-admin-menu [collapsed]=\"subMenuMode === 'shrink'\"></bizdoc-admin-menu>\r\n }\r\n @case ('reports') {\r\n <bizdoc-reports-menu [collapsed]=\"subMenuMode === 'shrink'\" (change)=\"collapseSubMenu()\"></bizdoc-reports-menu>\r\n }\r\n @case ('cube') {\r\n <bizdoc-cube-menu [collapsed]=\"subMenuMode === 'shrink'\" (change)=\"collapseSubMenu()\"></bizdoc-cube-menu>\r\n }\r\n }\r\n </div>\r\n }\r\n @if (isDialogMode) {\r\n <div class=\"backdrop\"></div>\r\n }\r\n</div>\r\n<div class=\"main\">\r\n <!-- title -->\r\n <div class=\"row header\" [@title]=\"main.titleVariant\">\r\n <h1>\r\n @if (main.swap) {\r\n <button mat-icon-button (click)=\"main.back()\" [bizdocTooltip]=\"'Back'|translate\"><mat-icon class=\"mat-icon-rtl-mirror\">arrow_circle_left</mat-icon></button>\r\n }\r\n @for (p of main.panes; track p.id; let first = $first) {\r\n @if (!first) {\r\n <span class=\"breadcrumbs\">\\</span>\r\n }\r\n {{p.title}}\r\n }\r\n @if (guide) {\r\n <button mat-icon-button (click)=\"openGuide(guide)\" [bizdocTooltip]=\"'Help'|translate\"><mat-icon>help</mat-icon></button>\r\n }\r\n </h1>\r\n <span class=\"divider\">\r\n </span>\r\n <!--search-->\r\n <input type=\"text\"\r\n [@search]=\"searching\"\r\n (@search.done)=\"searching && focus()\"\r\n #input\r\n (keydown.escape)=\"collapse($event)\"\r\n [attr.aria-label]=\"'Search'|translate\"\r\n [formControl]=\"search\"\r\n [matAutocomplete]=\"auto\" class=\"search-box\">\r\n <mat-autocomplete autoActiveFirstOption #auto=\"matAutocomplete\" (optionSelected)=\"goto($event)\" [displayWith]=\"displayWith\">\r\n @for (o of results | async; track o) {\r\n <mat-option [value]=\"o\">\r\n <ng-container (attached)=\"onAttached(o, $event)\" [cdkPortalOutlet]=\"o.portal\"></ng-container>\r\n </mat-option>\r\n }\r\n </mat-autocomplete>\r\n <button mat-icon-button (click)=\"toggle($event)\" [bizdocTooltip]=\"'Search'|translate\" class=\"tool\"><mat-icon>search</mat-icon></button>\r\n <!--notifications-->\r\n <button mat-icon-button (click)=\"openNotifs($event)\" [bizdocTooltip]=\"'Notifications'|translate\" bizdocTooltipPosition=\"start\" class=\"tool\"\r\n [attr.aria-label]=\"'Notifications'| translate\"\r\n data-help=\"notifications\">\r\n <mat-icon [matBadge]=\"profile.messagesCount\" [matBadgeHidden]=\"!profile.messagesCount\"\r\n matBadgeColor=\"accent\" aria-hidden=\"false\"\r\n [class.filled]=\"profile.messagesCount\">\r\n {{profile.options.notifications?.active === true ? 'notifications':'notifications_off'}}\r\n </mat-icon>\r\n </button>\r\n </div>\r\n <!--panes & tabs-->\r\n <bizdoc-panes-outlet (dialogChange)=\"isDialogMode = $event\" #main></bizdoc-panes-outlet>\r\n</div>\r\n", styles: [":host{display:flex;height:100%}::ng-deep .nav-collapsed .mdc-list-item{padding-right:0}::ng-deep [dir=rtl] .nav-collapsed .mdc-list-item{padding-left:0}.nav-menu{z-index:1}.nav-menu .sub-menu{min-width:210px;display:block;z-index:1;overflow-x:hidden;align-self:stretch}.nav-menu .sub-menu .action{display:flex;-ms-flex-direction:row-reverse;-webkit-flex-direction:row-reverse;flex-direction:row-reverse}.nav-menu .new-container{margin:8px 8px 0;text-align:center}.nav-menu .new-container button{min-width:35px;padding:0 14px;height:40px}.nav-menu .new-container button .mat-icon{margin-right:2px;margin-left:2px}.nav-menu .nav-icon{display:none}.nav-menu.nav-collapsed .nav-menu{padding:0}.nav-menu.nav-collapsed .nav-icon{display:unset}.nav-menu.nav-collapsed .nav-label{display:none}.nav-menu.nav-collapsed .sign-in{-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column;align-items:center}.nav-menu .sign-in{display:flex;-ms-flex-direction:row;-webkit-flex-direction:row;flex-direction:row;overflow:hidden;margin-bottom:5px;align-items:baseline}.backdrop{position:absolute;z-index:200;width:100%;height:100%;display:block;background:#424242;opacity:.8}.main{flex:1;overflow-x:hidden;display:flex;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column}.main .header{margin:4px 4px 0 0;align-items:center;min-width:max-content}.main .header h1{font-size:xx-large;margin:12px;font-weight:100}.main .header h1 button{vertical-align:middle}.main .header h1 .breadcrumbs{font-size:smaller}.main .header .search-box{font-size:large}\n"], dependencies: [{ 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.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { 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.MatListItemIcon, selector: "[matListItemIcon]" }, { 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: 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: MatIconAnimate, selector: "[matAnimate]" }, { kind: "directive", type: TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "component", type: AdminMenuComponent, selector: "bizdoc-admin-menu", inputs: ["collapsed"] }, { kind: "component", type: SlotsComponent, selector: "bizdoc-panes-outlet", outputs: ["dialogChange"] }, { kind: "component", type: CubeMenuComponent, selector: "bizdoc-cube-menu", inputs: ["collapsed"], outputs: ["change"] }, { kind: "component", type: ReportsMenuComponent, selector: "bizdoc-reports-menu", inputs: ["collapsed"], outputs: ["change"] }, { kind: "component", type: FoldersMenuComponent, selector: "bizdoc-folders-menu", inputs: ["collapsed"], outputs: ["change"] }, { kind: "component", type: ComposeMenuComponent, selector: "bizdoc-new-menu", outputs: ["change"] }, { kind: "pipe", type: i9.AsyncPipe, name: "async" }, { kind: "pipe", type: TranslatePipe, name: "translate" }], animations: [subMenuAnimation, panesTitleAnimation, searchAnimation] }); }
21624
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.2", type: HomeComponent, isStandalone: false, selector: "bizdoc-home", host: { listeners: { "document:keydown": "handleKeyboardEvent($event)" }, classAttribute: "mat-app-background" }, viewQueries: [{ propertyName: "drawer", first: true, predicate: MatSidenav, descendants: true, static: true }, { propertyName: "main", first: true, predicate: ["main"], descendants: true, static: true }, { propertyName: "input", first: true, predicate: ["input"], descendants: true }, { propertyName: "trigger", first: true, predicate: ["input"], descendants: true, read: MatAutocompleteTrigger }], usesInheritance: true, ngImport: i0, template: "<!-- menu -->\r\n<div [class.nav-collapsed]=\"collapsed\" [class.nav-open]=\"subMenu\"\r\n [class.dialog]=\"isDialogMode\"\r\n class=\"nav-menu row\">\r\n\r\n <div class=\"column\">\r\n <!--@if(appLogo){\r\n <img [src]=\"appLogo\" class=\"app-logo\" />\r\n }-->\r\n @if (forms.length) {\r\n <div [class.active]=\"activeMenu === 'new'\" class=\"new-container\">\r\n <button mat-raised-button\r\n [bizdocTooltip]=\"'Compose'|translate\" bizdocTooltipPosition=\"end\" [bizdocTooltipDisabled]=\"!collapsed\"\r\n (click)=\"openNew()\" [disabled]=\"creating\"\r\n [attr.aria-label]=\"'Compose'| translate\" color=\"primary\" data-help=\"compose\">\r\n <mat-icon>add</mat-icon>\r\n <span class=\"nav-label\">{{'Compose'| translate}}</span>\r\n </button>\r\n </div>\r\n }\r\n <mat-nav-list>\r\n <mat-list-item class=\"nav-menu\" [attr.aria-label]=\"'Dashboard' | translate\"\r\n (click)=\"nav('dashboard')\" [class.active]=\"activeMenu === 'dashboard'\"\r\n data-help=\"dashboard\"\r\n [bizdocTooltip]=\"'Dashboard'|translate\" bizdocTooltipPosition=\"end\" [bizdocTooltipDisabled]=\"!collapsed\">\r\n <mat-icon matListItemIcon>apps</mat-icon><span class=\"nav-label\" matListItemTitle>{{'Dashboard' | translate}}</span>\r\n </mat-list-item>\r\n <mat-list-item class=\"nav-menu\" (click)=\"openMailbox()\" [bizdocTooltip]=\"'Mailbox'|translate\" bizdocTooltipPosition=\"end\" [bizdocTooltipDisabled]=\"!collapsed\"\r\n [class.active]=\"activeMenu === 'mailbox'\"\r\n [attr.aria-label]=\"'Mailbox' | translate\" data-help=\"folders\">\r\n <mat-icon matListItemIcon [matBadge]=\"profile.inboxCount\" [matBadgeHidden]=\"!profile.inboxCount\" matBadgeColor=\"accent\" aria-hidden=\"false\">inbox</mat-icon>\r\n <span class=\"nav-label\" matListItemTitle>{{'Mailbox' | translate}}</span>\r\n </mat-list-item>\r\n @if (schedulerEnabled) {\r\n <mat-list-item class=\"nav-menu\" [attr.aria-label]=\"'Scheduler' | translate\"\r\n (click)=\"nav('schedule')\" [class.active]=\"activeMenu === 'schedule'\"\r\n [bizdocTooltip]=\"'Scheduler'|translate\" bizdocTooltipPosition=\"end\" [bizdocTooltipDisabled]=\"!collapsed\">\r\n <mat-icon matListItemIcon class=\"mat-icon-rtl-mirror\">date_range</mat-icon><span class=\"nav-label\" matListItemTitle>{{ 'Scheduler' | translate}}</span>\r\n </mat-list-item>\r\n }\r\n @if (chatEnabled) {\r\n <mat-list-item class=\"nav-menu\" data-help=\"chat\" [attr.aria-label]=\"'Chat' | translate\"\r\n (click)=\"nav('contacts')\" [class.active]=\"activeMenu === 'contacts'\"\r\n [bizdocTooltip]=\"'Chat'|translate\" bizdocTooltipPosition=\"end\" [bizdocTooltipDisabled]=\"!collapsed\">\r\n <mat-icon matListItemIcon [matBadge]=\"profile.conversationsCount\" [matBadgeHidden]=\"!profile.conversationsCount\" matBadgeColor=\"accent\" aria-hidden=\"false\">chat</mat-icon>\r\n <span class=\"nav-label\" matListItemTitle>{{ 'Chat' | translate}}</span>\r\n </mat-list-item>\r\n }\r\n <mat-divider></mat-divider>\r\n @if (enableAnalysis && profile.cubes.length) {\r\n <mat-list-item class=\"nav-menu\" (click)=\"openSubMenu('cube')\"\r\n [class.active]=\"activeMenu === 'cube'\"\r\n [bizdocTooltip]=\"'Cube'|translate\" bizdocTooltipPosition=\"end\" [bizdocTooltipDisabled]=\"!collapsed\"\r\n data-help=\"cube\" [attr.aria-label]=\"'Cube' | translate\">\r\n <mat-icon matListItemIcon>equalizer</mat-icon><span class=\"nav-label\" matListItemTitle>{{'Cube' | translate}}</span>\r\n </mat-list-item>\r\n }\r\n @if (profile.reports.length) {\r\n <mat-list-item class=\"nav-menu\" (click)=\"openSubMenu('reports')\"\r\n [class.active]=\"activeMenu === 'reports'\"\r\n [bizdocTooltip]=\"'Reports'|translate\" bizdocTooltipPosition=\"end\" [bizdocTooltipDisabled]=\"!collapsed\" data-help=\"reports\" [attr.aria-label]=\"'Reports' | translate\">\r\n <mat-icon matListItemIcon>list_alt</mat-icon><span class=\"nav-label\" matListItemTitle>{{'Reports' | translate}}</span>\r\n </mat-list-item>\r\n }\r\n @if (isSysAdmin) {\r\n <mat-divider></mat-divider>\r\n <mat-list-item class=\"nav-menu\" (click)=\"openSubMenu('admin')\"\r\n [class.active]=\"activeMenu === 'admin'\"\r\n [bizdocTooltip]=\"'Tools'|translate\" bizdocTooltipPosition=\"end\" [bizdocTooltipDisabled]=\"!collapsed\" [attr.aria-label]=\"'System' | translate\">\r\n <mat-icon matListItemIcon>build</mat-icon>\r\n <span class=\"nav-label\" matListItemTitle>{{'Workflow' | translate}}</span>\r\n </mat-list-item>\r\n }\r\n </mat-nav-list>\r\n <span class=\"divider\"></span>\r\n <!--<lottie name=\"lf30_editor_qr7zgmcs\" *ngIf=\"loading\"></lottie>-->\r\n <div class=\"sign-in\">\r\n <button mat-icon-button data-help=\"settings\" [bizdocTooltip]=\"'Settings' | translate\" bizdocTooltipPosition=\"above\"\r\n [attr.aria-label]=\"'Settings' | translate\" (click)=\"options($event)\">\r\n <mat-icon matAnimate=\"rotate\">settingson</mat-icon>\r\n </button>\r\n @if(canSignOut) {\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button data-help=\"sign-in\" [attr.aria-label]=\"'Power' | translate\" (click)=\"signout($event)\" [bizdocTooltip]=\"'Exit'|translate\" bizdocTooltipPosition=\"above\">\r\n <mat-icon class=\"mat-icon-rtl-mirror\">logout</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n <!-- -->\r\n @if (subMenu) {\r\n <div class=\"sub-menu\" (mouseleave)=\"collapseSubMenu()\" [@subMenu]=\"subMenuMode\" (@subMenu.done)=\"resize()\">\r\n @if (subMenu !== 'new') {\r\n <div class=\"action\">\r\n <button mat-icon-button (click)=\"togglePinned()\" [bizdocTooltip]=\"(pinned?'Collapse':'Expand')|translate\"><mat-icon class=\"mat-icon-rtl-mirror\">{{pinned ? 'push_pin' : 'menu'}}</mat-icon></button>\r\n </div>\r\n }\r\n @switch (subMenu) {\r\n @case ('new') {\r\n <bizdoc-new-menu (change)=\"closeSubMenu()\"></bizdoc-new-menu>\r\n }\r\n @case ('mailbox') {\r\n <bizdoc-folders-menu [collapsed]=\"subMenuMode === 'shrink'\" (change)=\"collapseSubMenu()\"></bizdoc-folders-menu>\r\n }\r\n @case ('admin') {\r\n <bizdoc-admin-menu [collapsed]=\"subMenuMode === 'shrink'\"></bizdoc-admin-menu>\r\n }\r\n @case ('reports') {\r\n <bizdoc-reports-menu [collapsed]=\"subMenuMode === 'shrink'\" (change)=\"collapseSubMenu()\"></bizdoc-reports-menu>\r\n }\r\n @case ('cube') {\r\n <bizdoc-cube-menu [collapsed]=\"subMenuMode === 'shrink'\" (change)=\"collapseSubMenu()\"></bizdoc-cube-menu>\r\n }\r\n }\r\n </div>\r\n }\r\n @if (isDialogMode) {\r\n <div class=\"backdrop\"></div>\r\n }\r\n</div>\r\n<div class=\"main\">\r\n <!-- title -->\r\n <div class=\"row header\" [@title]=\"main.titleVariant\">\r\n <h1>\r\n @if (main.swap) {\r\n <button mat-icon-button (click)=\"main.back()\" [bizdocTooltip]=\"'Back'|translate\"><mat-icon class=\"mat-icon-rtl-mirror\">arrow_circle_left</mat-icon></button>\r\n }\r\n @for (p of main.panes; track p.id; let first = $first) {\r\n @if (!first) {\r\n <span class=\"breadcrumbs\">\\</span>\r\n }\r\n {{p.title}}\r\n }\r\n @if (guide) {\r\n <button mat-icon-button (click)=\"openGuide(guide)\" [bizdocTooltip]=\"'Help'|translate\"><mat-icon>help</mat-icon></button>\r\n }\r\n </h1>\r\n <span class=\"divider\">\r\n </span>\r\n <!--search-->\r\n <input type=\"text\"\r\n [@search]=\"searching\"\r\n (@search.done)=\"searching && focus()\"\r\n #input\r\n (keydown.escape)=\"collapse($event)\"\r\n [attr.aria-label]=\"'Search'|translate\"\r\n [formControl]=\"search\"\r\n [matAutocomplete]=\"auto\" class=\"search-box\">\r\n <mat-autocomplete autoActiveFirstOption #auto=\"matAutocomplete\" (optionSelected)=\"goto($event)\" [displayWith]=\"displayWith\">\r\n @for (o of results | async; track o) {\r\n <mat-option [value]=\"o\">\r\n <ng-container (attached)=\"onAttached(o, $event)\" [cdkPortalOutlet]=\"o.portal\"></ng-container>\r\n </mat-option>\r\n }\r\n </mat-autocomplete>\r\n <button mat-icon-button (click)=\"toggle($event)\" [bizdocTooltip]=\"'Search'|translate\" class=\"tool\"><mat-icon>search</mat-icon></button>\r\n <!--notifications-->\r\n <button mat-icon-button (click)=\"openNotifs($event)\" [bizdocTooltip]=\"'Notifications'|translate\" bizdocTooltipPosition=\"start\" class=\"tool\"\r\n [attr.aria-label]=\"'Notifications'| translate\"\r\n data-help=\"notifications\">\r\n <mat-icon [matBadge]=\"profile.messagesCount\" [matBadgeHidden]=\"!profile.messagesCount\"\r\n matBadgeColor=\"accent\" aria-hidden=\"false\"\r\n [class.filled]=\"profile.messagesCount\">\r\n {{profile.options.notifications?.active === true ? 'notifications':'notifications_off'}}\r\n </mat-icon>\r\n </button>\r\n </div>\r\n <!--panes & tabs-->\r\n <bizdoc-panes-outlet (dialogChange)=\"isDialogMode = $event\" #main></bizdoc-panes-outlet>\r\n</div>\r\n", styles: [":host{display:flex;height:100%}::ng-deep .nav-collapsed .mdc-list-item{padding-right:0}::ng-deep [dir=rtl] .nav-collapsed .mdc-list-item{padding-left:0}.nav-menu{z-index:1}.nav-menu .sub-menu{min-width:210px;display:block;z-index:1;overflow-x:hidden;align-self:stretch}.nav-menu .sub-menu .action{display:flex;-ms-flex-direction:row-reverse;-webkit-flex-direction:row-reverse;flex-direction:row-reverse}.nav-menu .new-container{margin:8px 8px 0;text-align:center}.nav-menu .new-container button{min-width:35px;padding:0 14px;height:40px}.nav-menu .new-container button .mat-icon{margin-right:2px;margin-left:2px}.nav-menu .nav-icon{display:none}.nav-menu.nav-collapsed .nav-menu{padding:0}.nav-menu.nav-collapsed .nav-icon{display:unset}.nav-menu.nav-collapsed .nav-label{display:none}.nav-menu.nav-collapsed .sign-in{-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column;align-items:center}.nav-menu .sign-in{display:flex;-ms-flex-direction:row;-webkit-flex-direction:row;flex-direction:row;overflow:hidden;margin-bottom:5px;align-items:baseline}.backdrop{position:absolute;z-index:200;width:100%;height:100%;display:block;background:#424242;opacity:.8}.main{flex:1;overflow-x:hidden;display:flex;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column}.main .header{margin:4px 4px 0 0;align-items:center;min-width:max-content}.main .header h1{font-size:xx-large;margin:12px;font-weight:100}.main .header h1 button{vertical-align:middle}.main .header h1 .breadcrumbs{font-size:smaller}.main .header .search-box{font-size:large}\n"], dependencies: [{ 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.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { 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.MatListItemIcon, selector: "[matListItemIcon]" }, { 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: 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: MatIconAnimate, selector: "[matAnimate]" }, { kind: "directive", type: TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "component", type: AdminMenuComponent, selector: "bizdoc-admin-menu", inputs: ["collapsed"] }, { kind: "component", type: SlotsComponent, selector: "bizdoc-panes-outlet", outputs: ["dialogChange"] }, { kind: "component", type: CubeMenuComponent, selector: "bizdoc-cube-menu", inputs: ["collapsed"], outputs: ["change"] }, { kind: "component", type: ReportsMenuComponent, selector: "bizdoc-reports-menu", inputs: ["collapsed"], outputs: ["change"] }, { kind: "component", type: FoldersMenuComponent, selector: "bizdoc-folders-menu", inputs: ["collapsed"], outputs: ["change"] }, { kind: "component", type: ComposeMenuComponent, selector: "bizdoc-new-menu", outputs: ["change"] }, { kind: "pipe", type: i9.AsyncPipe, name: "async" }, { kind: "pipe", type: TranslatePipe, name: "translate" }], animations: [subMenuAnimation, panesTitleAnimation, searchAnimation] }); }
21592
21625
  }
21593
21626
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.2", ngImport: i0, type: HomeComponent, decorators: [{
21594
21627
  type: Component,
21595
- args: [{ standalone: false, selector: 'bizdoc-home', host: { class: 'mat-app-background' }, animations: [subMenuAnimation, panesTitleAnimation, searchAnimation], template: "<!-- menu -->\r\n<div [class.nav-collapsed]=\"collapsed\" [class.nav-open]=\"subMenu\"\r\n [class.dialog]=\"isDialogMode\"\r\n class=\"nav-menu row\">\r\n\r\n <div class=\"column\">\r\n <!--@if(appLogo){\r\n <img [src]=\"appLogo\" class=\"app-logo\" />\r\n }-->\r\n @if (forms.length) {\r\n <div [class.active]=\"activeMenu === 'new'\" class=\"new-container\">\r\n <button mat-raised-button\r\n [bizdocTooltip]=\"'Compose'|translate\" bizdocTooltipPosition=\"end\" [bizdocTooltipDisabled]=\"!collapsed\"\r\n (click)=\"openNew()\" [disabled]=\"creating\"\r\n [attr.aria-label]=\"'Compose'| translate\" color=\"primary\" data-help=\"compose\">\r\n <mat-icon>add</mat-icon>\r\n <span class=\"nav-label\">{{'Compose'| translate}}</span>\r\n </button>\r\n </div>\r\n }\r\n <mat-nav-list>\r\n <mat-list-item class=\"nav-menu\" [attr.aria-label]=\"'Dashboard' | translate\"\r\n (click)=\"nav('dashboard')\" [class.active]=\"activeMenu === 'dashboard'\"\r\n data-help=\"dashboard\"\r\n [bizdocTooltip]=\"'Dashboard'|translate\" bizdocTooltipPosition=\"end\" [bizdocTooltipDisabled]=\"!collapsed\">\r\n <mat-icon matListItemIcon>apps</mat-icon><span class=\"nav-label\" matListItemTitle>{{'Dashboard' | translate}}</span>\r\n </mat-list-item>\r\n <mat-list-item class=\"nav-menu\" (click)=\"openMailbox()\" [bizdocTooltip]=\"'Mailbox'|translate\" bizdocTooltipPosition=\"end\" [bizdocTooltipDisabled]=\"!collapsed\"\r\n [class.active]=\"activeMenu === 'mailbox'\"\r\n [attr.aria-label]=\"'Mailbox' | translate\" data-help=\"folders\">\r\n <mat-icon matListItemIcon [matBadge]=\"profile.inboxCount\" [matBadgeHidden]=\"!profile.inboxCount\" matBadgeColor=\"accent\" aria-hidden=\"false\">inbox</mat-icon>\r\n <span class=\"nav-label\" matListItemTitle>{{'Mailbox' | translate}}</span>\r\n </mat-list-item>\r\n @if (schedulerEnabled) {\r\n <mat-list-item class=\"nav-menu\" [attr.aria-label]=\"'Scheduler' | translate\"\r\n (click)=\"nav('schedule')\" [class.active]=\"activeMenu === 'schedule'\"\r\n [bizdocTooltip]=\"'Scheduler'|translate\" bizdocTooltipPosition=\"end\" [bizdocTooltipDisabled]=\"!collapsed\">\r\n <mat-icon matListItemIcon class=\"mat-icon-rtl-mirror\">date_range</mat-icon><span class=\"nav-label\" matListItemTitle>{{ 'Scheduler' | translate}}</span>\r\n </mat-list-item>\r\n }\r\n @if (chatEnabled) {\r\n <mat-list-item class=\"nav-menu\" data-help=\"chat\" [attr.aria-label]=\"'Chat' | translate\"\r\n (click)=\"nav('contacts')\" [class.active]=\"activeMenu === 'contacts'\"\r\n [bizdocTooltip]=\"'Chat'|translate\" bizdocTooltipPosition=\"end\" [bizdocTooltipDisabled]=\"!collapsed\">\r\n <mat-icon matListItemIcon [matBadge]=\"profile.conversationsCount\" [matBadgeHidden]=\"!profile.conversationsCount\" matBadgeColor=\"accent\" aria-hidden=\"false\">chat</mat-icon>\r\n <span class=\"nav-label\" matListItemTitle>{{ 'Chat' | translate}}</span>\r\n </mat-list-item>\r\n }\r\n <mat-divider></mat-divider>\r\n @if (enableAnalysis && profile.cubes.length) {\r\n <mat-list-item class=\"nav-menu\" (click)=\"openSubMenu('cube')\"\r\n [class.active]=\"activeMenu === 'cube'\"\r\n [bizdocTooltip]=\"'Cube'|translate\" bizdocTooltipPosition=\"end\" [bizdocTooltipDisabled]=\"!collapsed\"\r\n data-help=\"cube\" [attr.aria-label]=\"'Cube' | translate\">\r\n <mat-icon matListItemIcon>equalizer</mat-icon><span class=\"nav-label\" matListItemTitle>{{'Cube' | translate}}</span>\r\n </mat-list-item>\r\n }\r\n @if (profile.reports.length) {\r\n <mat-list-item class=\"nav-menu\" (click)=\"openSubMenu('reports')\"\r\n [class.active]=\"activeMenu === 'reports'\"\r\n [bizdocTooltip]=\"'Reports'|translate\" bizdocTooltipPosition=\"end\" [bizdocTooltipDisabled]=\"!collapsed\" data-help=\"reports\" [attr.aria-label]=\"'Reports' | translate\">\r\n <mat-icon matListItemIcon>list_alt</mat-icon><span class=\"nav-label\" matListItemTitle>{{'Reports' | translate}}</span>\r\n </mat-list-item>\r\n }\r\n @if (isSysAdmin) {\r\n <mat-divider></mat-divider>\r\n <mat-list-item class=\"nav-menu\" (click)=\"openSubMenu('admin')\"\r\n [class.active]=\"activeMenu === 'admin'\"\r\n [bizdocTooltip]=\"'System'|translate\" bizdocTooltipPosition=\"end\" [bizdocTooltipDisabled]=\"!collapsed\" [attr.aria-label]=\"'System' | translate\">\r\n <mat-icon matListItemIcon>device_hub</mat-icon>\r\n <span class=\"nav-label\" matListItemTitle>{{'Workflow' | translate}}</span>\r\n </mat-list-item>\r\n }\r\n </mat-nav-list>\r\n <span class=\"divider\"></span>\r\n <!--<lottie name=\"lf30_editor_qr7zgmcs\" *ngIf=\"loading\"></lottie>-->\r\n <div class=\"sign-in\">\r\n <button mat-icon-button data-help=\"settings\" [bizdocTooltip]=\"'Settings' | translate\" bizdocTooltipPosition=\"above\"\r\n [attr.aria-label]=\"'Settings' | translate\" (click)=\"options($event)\">\r\n <mat-icon matAnimate=\"rotate\">settingson</mat-icon>\r\n </button>\r\n @if(canSignOut) {\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button data-help=\"sign-in\" [attr.aria-label]=\"'Power' | translate\" (click)=\"signout($event)\" [bizdocTooltip]=\"'Exit'|translate\" bizdocTooltipPosition=\"above\">\r\n <mat-icon class=\"mat-icon-rtl-mirror\">logout</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n <!-- -->\r\n @if (subMenu) {\r\n <div class=\"sub-menu\" (mouseleave)=\"collapseSubMenu()\" [@subMenu]=\"subMenuMode\" (@subMenu.done)=\"resize()\">\r\n @if (subMenu !== 'new') {\r\n <div class=\"action\">\r\n <button mat-icon-button (click)=\"togglePinned()\" [bizdocTooltip]=\"(pinned?'Collapse':'Expand')|translate\"><mat-icon class=\"mat-icon-rtl-mirror\">{{pinned ? 'push_pin' : 'menu'}}</mat-icon></button>\r\n </div>\r\n }\r\n @switch (subMenu) {\r\n @case ('new') {\r\n <bizdoc-new-menu (change)=\"closeSubMenu()\"></bizdoc-new-menu>\r\n }\r\n @case ('mailbox') {\r\n <bizdoc-folders-menu [collapsed]=\"subMenuMode === 'shrink'\" (change)=\"collapseSubMenu()\"></bizdoc-folders-menu>\r\n }\r\n @case ('admin') {\r\n <bizdoc-admin-menu [collapsed]=\"subMenuMode === 'shrink'\"></bizdoc-admin-menu>\r\n }\r\n @case ('reports') {\r\n <bizdoc-reports-menu [collapsed]=\"subMenuMode === 'shrink'\" (change)=\"collapseSubMenu()\"></bizdoc-reports-menu>\r\n }\r\n @case ('cube') {\r\n <bizdoc-cube-menu [collapsed]=\"subMenuMode === 'shrink'\" (change)=\"collapseSubMenu()\"></bizdoc-cube-menu>\r\n }\r\n }\r\n </div>\r\n }\r\n @if (isDialogMode) {\r\n <div class=\"backdrop\"></div>\r\n }\r\n</div>\r\n<div class=\"main\">\r\n <!-- title -->\r\n <div class=\"row header\" [@title]=\"main.titleVariant\">\r\n <h1>\r\n @if (main.swap) {\r\n <button mat-icon-button (click)=\"main.back()\" [bizdocTooltip]=\"'Back'|translate\"><mat-icon class=\"mat-icon-rtl-mirror\">arrow_circle_left</mat-icon></button>\r\n }\r\n @for (p of main.panes; track p.id; let first = $first) {\r\n @if (!first) {\r\n <span class=\"breadcrumbs\">\\</span>\r\n }\r\n {{p.title}}\r\n }\r\n @if (guide) {\r\n <button mat-icon-button (click)=\"openGuide(guide)\" [bizdocTooltip]=\"'Help'|translate\"><mat-icon>help</mat-icon></button>\r\n }\r\n </h1>\r\n <span class=\"divider\">\r\n </span>\r\n <!--search-->\r\n <input type=\"text\"\r\n [@search]=\"searching\"\r\n (@search.done)=\"searching && focus()\"\r\n #input\r\n (keydown.escape)=\"collapse($event)\"\r\n [attr.aria-label]=\"'Search'|translate\"\r\n [formControl]=\"search\"\r\n [matAutocomplete]=\"auto\" class=\"search-box\">\r\n <mat-autocomplete autoActiveFirstOption #auto=\"matAutocomplete\" (optionSelected)=\"goto($event)\" [displayWith]=\"displayWith\">\r\n @for (o of results | async; track o) {\r\n <mat-option [value]=\"o\">\r\n <ng-container (attached)=\"onAttached(o, $event)\" [cdkPortalOutlet]=\"o.portal\"></ng-container>\r\n </mat-option>\r\n }\r\n </mat-autocomplete>\r\n <button mat-icon-button (click)=\"toggle($event)\" [bizdocTooltip]=\"'Search'|translate\" class=\"tool\"><mat-icon>search</mat-icon></button>\r\n <!--notifications-->\r\n <button mat-icon-button (click)=\"openNotifs($event)\" [bizdocTooltip]=\"'Notifications'|translate\" bizdocTooltipPosition=\"start\" class=\"tool\"\r\n [attr.aria-label]=\"'Notifications'| translate\"\r\n data-help=\"notifications\">\r\n <mat-icon [matBadge]=\"profile.messagesCount\" [matBadgeHidden]=\"!profile.messagesCount\"\r\n matBadgeColor=\"accent\" aria-hidden=\"false\"\r\n [class.filled]=\"profile.messagesCount\">\r\n {{profile.options.notifications?.active === true ? 'notifications':'notifications_off'}}\r\n </mat-icon>\r\n </button>\r\n </div>\r\n <!--panes & tabs-->\r\n <bizdoc-panes-outlet (dialogChange)=\"isDialogMode = $event\" #main></bizdoc-panes-outlet>\r\n</div>\r\n", styles: [":host{display:flex;height:100%}::ng-deep .nav-collapsed .mdc-list-item{padding-right:0}::ng-deep [dir=rtl] .nav-collapsed .mdc-list-item{padding-left:0}.nav-menu{z-index:1}.nav-menu .sub-menu{min-width:210px;display:block;z-index:1;overflow-x:hidden;align-self:stretch}.nav-menu .sub-menu .action{display:flex;-ms-flex-direction:row-reverse;-webkit-flex-direction:row-reverse;flex-direction:row-reverse}.nav-menu .new-container{margin:8px 8px 0;text-align:center}.nav-menu .new-container button{min-width:35px;padding:0 14px;height:40px}.nav-menu .new-container button .mat-icon{margin-right:2px;margin-left:2px}.nav-menu .nav-icon{display:none}.nav-menu.nav-collapsed .nav-menu{padding:0}.nav-menu.nav-collapsed .nav-icon{display:unset}.nav-menu.nav-collapsed .nav-label{display:none}.nav-menu.nav-collapsed .sign-in{-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column;align-items:center}.nav-menu .sign-in{display:flex;-ms-flex-direction:row;-webkit-flex-direction:row;flex-direction:row;overflow:hidden;margin-bottom:5px;align-items:baseline}.backdrop{position:absolute;z-index:200;width:100%;height:100%;display:block;background:#424242;opacity:.8}.main{flex:1;overflow-x:hidden;display:flex;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column}.main .header{margin:4px 4px 0 0;align-items:center;min-width:max-content}.main .header h1{font-size:xx-large;margin:12px;font-weight:100}.main .header h1 button{vertical-align:middle}.main .header h1 .breadcrumbs{font-size:smaller}.main .header .search-box{font-size:large}\n"] }]
21628
+ args: [{ standalone: false, selector: 'bizdoc-home', host: { class: 'mat-app-background' }, animations: [subMenuAnimation, panesTitleAnimation, searchAnimation], template: "<!-- menu -->\r\n<div [class.nav-collapsed]=\"collapsed\" [class.nav-open]=\"subMenu\"\r\n [class.dialog]=\"isDialogMode\"\r\n class=\"nav-menu row\">\r\n\r\n <div class=\"column\">\r\n <!--@if(appLogo){\r\n <img [src]=\"appLogo\" class=\"app-logo\" />\r\n }-->\r\n @if (forms.length) {\r\n <div [class.active]=\"activeMenu === 'new'\" class=\"new-container\">\r\n <button mat-raised-button\r\n [bizdocTooltip]=\"'Compose'|translate\" bizdocTooltipPosition=\"end\" [bizdocTooltipDisabled]=\"!collapsed\"\r\n (click)=\"openNew()\" [disabled]=\"creating\"\r\n [attr.aria-label]=\"'Compose'| translate\" color=\"primary\" data-help=\"compose\">\r\n <mat-icon>add</mat-icon>\r\n <span class=\"nav-label\">{{'Compose'| translate}}</span>\r\n </button>\r\n </div>\r\n }\r\n <mat-nav-list>\r\n <mat-list-item class=\"nav-menu\" [attr.aria-label]=\"'Dashboard' | translate\"\r\n (click)=\"nav('dashboard')\" [class.active]=\"activeMenu === 'dashboard'\"\r\n data-help=\"dashboard\"\r\n [bizdocTooltip]=\"'Dashboard'|translate\" bizdocTooltipPosition=\"end\" [bizdocTooltipDisabled]=\"!collapsed\">\r\n <mat-icon matListItemIcon>apps</mat-icon><span class=\"nav-label\" matListItemTitle>{{'Dashboard' | translate}}</span>\r\n </mat-list-item>\r\n <mat-list-item class=\"nav-menu\" (click)=\"openMailbox()\" [bizdocTooltip]=\"'Mailbox'|translate\" bizdocTooltipPosition=\"end\" [bizdocTooltipDisabled]=\"!collapsed\"\r\n [class.active]=\"activeMenu === 'mailbox'\"\r\n [attr.aria-label]=\"'Mailbox' | translate\" data-help=\"folders\">\r\n <mat-icon matListItemIcon [matBadge]=\"profile.inboxCount\" [matBadgeHidden]=\"!profile.inboxCount\" matBadgeColor=\"accent\" aria-hidden=\"false\">inbox</mat-icon>\r\n <span class=\"nav-label\" matListItemTitle>{{'Mailbox' | translate}}</span>\r\n </mat-list-item>\r\n @if (schedulerEnabled) {\r\n <mat-list-item class=\"nav-menu\" [attr.aria-label]=\"'Scheduler' | translate\"\r\n (click)=\"nav('schedule')\" [class.active]=\"activeMenu === 'schedule'\"\r\n [bizdocTooltip]=\"'Scheduler'|translate\" bizdocTooltipPosition=\"end\" [bizdocTooltipDisabled]=\"!collapsed\">\r\n <mat-icon matListItemIcon class=\"mat-icon-rtl-mirror\">date_range</mat-icon><span class=\"nav-label\" matListItemTitle>{{ 'Scheduler' | translate}}</span>\r\n </mat-list-item>\r\n }\r\n @if (chatEnabled) {\r\n <mat-list-item class=\"nav-menu\" data-help=\"chat\" [attr.aria-label]=\"'Chat' | translate\"\r\n (click)=\"nav('contacts')\" [class.active]=\"activeMenu === 'contacts'\"\r\n [bizdocTooltip]=\"'Chat'|translate\" bizdocTooltipPosition=\"end\" [bizdocTooltipDisabled]=\"!collapsed\">\r\n <mat-icon matListItemIcon [matBadge]=\"profile.conversationsCount\" [matBadgeHidden]=\"!profile.conversationsCount\" matBadgeColor=\"accent\" aria-hidden=\"false\">chat</mat-icon>\r\n <span class=\"nav-label\" matListItemTitle>{{ 'Chat' | translate}}</span>\r\n </mat-list-item>\r\n }\r\n <mat-divider></mat-divider>\r\n @if (enableAnalysis && profile.cubes.length) {\r\n <mat-list-item class=\"nav-menu\" (click)=\"openSubMenu('cube')\"\r\n [class.active]=\"activeMenu === 'cube'\"\r\n [bizdocTooltip]=\"'Cube'|translate\" bizdocTooltipPosition=\"end\" [bizdocTooltipDisabled]=\"!collapsed\"\r\n data-help=\"cube\" [attr.aria-label]=\"'Cube' | translate\">\r\n <mat-icon matListItemIcon>equalizer</mat-icon><span class=\"nav-label\" matListItemTitle>{{'Cube' | translate}}</span>\r\n </mat-list-item>\r\n }\r\n @if (profile.reports.length) {\r\n <mat-list-item class=\"nav-menu\" (click)=\"openSubMenu('reports')\"\r\n [class.active]=\"activeMenu === 'reports'\"\r\n [bizdocTooltip]=\"'Reports'|translate\" bizdocTooltipPosition=\"end\" [bizdocTooltipDisabled]=\"!collapsed\" data-help=\"reports\" [attr.aria-label]=\"'Reports' | translate\">\r\n <mat-icon matListItemIcon>list_alt</mat-icon><span class=\"nav-label\" matListItemTitle>{{'Reports' | translate}}</span>\r\n </mat-list-item>\r\n }\r\n @if (isSysAdmin) {\r\n <mat-divider></mat-divider>\r\n <mat-list-item class=\"nav-menu\" (click)=\"openSubMenu('admin')\"\r\n [class.active]=\"activeMenu === 'admin'\"\r\n [bizdocTooltip]=\"'Tools'|translate\" bizdocTooltipPosition=\"end\" [bizdocTooltipDisabled]=\"!collapsed\" [attr.aria-label]=\"'System' | translate\">\r\n <mat-icon matListItemIcon>build</mat-icon>\r\n <span class=\"nav-label\" matListItemTitle>{{'Workflow' | translate}}</span>\r\n </mat-list-item>\r\n }\r\n </mat-nav-list>\r\n <span class=\"divider\"></span>\r\n <!--<lottie name=\"lf30_editor_qr7zgmcs\" *ngIf=\"loading\"></lottie>-->\r\n <div class=\"sign-in\">\r\n <button mat-icon-button data-help=\"settings\" [bizdocTooltip]=\"'Settings' | translate\" bizdocTooltipPosition=\"above\"\r\n [attr.aria-label]=\"'Settings' | translate\" (click)=\"options($event)\">\r\n <mat-icon matAnimate=\"rotate\">settingson</mat-icon>\r\n </button>\r\n @if(canSignOut) {\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button data-help=\"sign-in\" [attr.aria-label]=\"'Power' | translate\" (click)=\"signout($event)\" [bizdocTooltip]=\"'Exit'|translate\" bizdocTooltipPosition=\"above\">\r\n <mat-icon class=\"mat-icon-rtl-mirror\">logout</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n <!-- -->\r\n @if (subMenu) {\r\n <div class=\"sub-menu\" (mouseleave)=\"collapseSubMenu()\" [@subMenu]=\"subMenuMode\" (@subMenu.done)=\"resize()\">\r\n @if (subMenu !== 'new') {\r\n <div class=\"action\">\r\n <button mat-icon-button (click)=\"togglePinned()\" [bizdocTooltip]=\"(pinned?'Collapse':'Expand')|translate\"><mat-icon class=\"mat-icon-rtl-mirror\">{{pinned ? 'push_pin' : 'menu'}}</mat-icon></button>\r\n </div>\r\n }\r\n @switch (subMenu) {\r\n @case ('new') {\r\n <bizdoc-new-menu (change)=\"closeSubMenu()\"></bizdoc-new-menu>\r\n }\r\n @case ('mailbox') {\r\n <bizdoc-folders-menu [collapsed]=\"subMenuMode === 'shrink'\" (change)=\"collapseSubMenu()\"></bizdoc-folders-menu>\r\n }\r\n @case ('admin') {\r\n <bizdoc-admin-menu [collapsed]=\"subMenuMode === 'shrink'\"></bizdoc-admin-menu>\r\n }\r\n @case ('reports') {\r\n <bizdoc-reports-menu [collapsed]=\"subMenuMode === 'shrink'\" (change)=\"collapseSubMenu()\"></bizdoc-reports-menu>\r\n }\r\n @case ('cube') {\r\n <bizdoc-cube-menu [collapsed]=\"subMenuMode === 'shrink'\" (change)=\"collapseSubMenu()\"></bizdoc-cube-menu>\r\n }\r\n }\r\n </div>\r\n }\r\n @if (isDialogMode) {\r\n <div class=\"backdrop\"></div>\r\n }\r\n</div>\r\n<div class=\"main\">\r\n <!-- title -->\r\n <div class=\"row header\" [@title]=\"main.titleVariant\">\r\n <h1>\r\n @if (main.swap) {\r\n <button mat-icon-button (click)=\"main.back()\" [bizdocTooltip]=\"'Back'|translate\"><mat-icon class=\"mat-icon-rtl-mirror\">arrow_circle_left</mat-icon></button>\r\n }\r\n @for (p of main.panes; track p.id; let first = $first) {\r\n @if (!first) {\r\n <span class=\"breadcrumbs\">\\</span>\r\n }\r\n {{p.title}}\r\n }\r\n @if (guide) {\r\n <button mat-icon-button (click)=\"openGuide(guide)\" [bizdocTooltip]=\"'Help'|translate\"><mat-icon>help</mat-icon></button>\r\n }\r\n </h1>\r\n <span class=\"divider\">\r\n </span>\r\n <!--search-->\r\n <input type=\"text\"\r\n [@search]=\"searching\"\r\n (@search.done)=\"searching && focus()\"\r\n #input\r\n (keydown.escape)=\"collapse($event)\"\r\n [attr.aria-label]=\"'Search'|translate\"\r\n [formControl]=\"search\"\r\n [matAutocomplete]=\"auto\" class=\"search-box\">\r\n <mat-autocomplete autoActiveFirstOption #auto=\"matAutocomplete\" (optionSelected)=\"goto($event)\" [displayWith]=\"displayWith\">\r\n @for (o of results | async; track o) {\r\n <mat-option [value]=\"o\">\r\n <ng-container (attached)=\"onAttached(o, $event)\" [cdkPortalOutlet]=\"o.portal\"></ng-container>\r\n </mat-option>\r\n }\r\n </mat-autocomplete>\r\n <button mat-icon-button (click)=\"toggle($event)\" [bizdocTooltip]=\"'Search'|translate\" class=\"tool\"><mat-icon>search</mat-icon></button>\r\n <!--notifications-->\r\n <button mat-icon-button (click)=\"openNotifs($event)\" [bizdocTooltip]=\"'Notifications'|translate\" bizdocTooltipPosition=\"start\" class=\"tool\"\r\n [attr.aria-label]=\"'Notifications'| translate\"\r\n data-help=\"notifications\">\r\n <mat-icon [matBadge]=\"profile.messagesCount\" [matBadgeHidden]=\"!profile.messagesCount\"\r\n matBadgeColor=\"accent\" aria-hidden=\"false\"\r\n [class.filled]=\"profile.messagesCount\">\r\n {{profile.options.notifications?.active === true ? 'notifications':'notifications_off'}}\r\n </mat-icon>\r\n </button>\r\n </div>\r\n <!--panes & tabs-->\r\n <bizdoc-panes-outlet (dialogChange)=\"isDialogMode = $event\" #main></bizdoc-panes-outlet>\r\n</div>\r\n", styles: [":host{display:flex;height:100%}::ng-deep .nav-collapsed .mdc-list-item{padding-right:0}::ng-deep [dir=rtl] .nav-collapsed .mdc-list-item{padding-left:0}.nav-menu{z-index:1}.nav-menu .sub-menu{min-width:210px;display:block;z-index:1;overflow-x:hidden;align-self:stretch}.nav-menu .sub-menu .action{display:flex;-ms-flex-direction:row-reverse;-webkit-flex-direction:row-reverse;flex-direction:row-reverse}.nav-menu .new-container{margin:8px 8px 0;text-align:center}.nav-menu .new-container button{min-width:35px;padding:0 14px;height:40px}.nav-menu .new-container button .mat-icon{margin-right:2px;margin-left:2px}.nav-menu .nav-icon{display:none}.nav-menu.nav-collapsed .nav-menu{padding:0}.nav-menu.nav-collapsed .nav-icon{display:unset}.nav-menu.nav-collapsed .nav-label{display:none}.nav-menu.nav-collapsed .sign-in{-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column;align-items:center}.nav-menu .sign-in{display:flex;-ms-flex-direction:row;-webkit-flex-direction:row;flex-direction:row;overflow:hidden;margin-bottom:5px;align-items:baseline}.backdrop{position:absolute;z-index:200;width:100%;height:100%;display:block;background:#424242;opacity:.8}.main{flex:1;overflow-x:hidden;display:flex;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column}.main .header{margin:4px 4px 0 0;align-items:center;min-width:max-content}.main .header h1{font-size:xx-large;margin:12px;font-weight:100}.main .header h1 button{vertical-align:middle}.main .header h1 .breadcrumbs{font-size:smaller}.main .header .search-box{font-size:large}\n"] }]
21596
21629
  }], ctorParameters: () => [{ type: PanesRouter }, { type: SearchService }, { type: DocumentFactory }, { type: Popup }, { type: GuideService }, { type: AuthenticationImpl }, { type: undefined, decorators: [{
21597
21630
  type: Inject,
21598
21631
  args: [BIZDOC_CONFIG]
@@ -22053,7 +22086,7 @@ const PANES_CONFIG = [
22053
22086
  ]
22054
22087
  }, {
22055
22088
  path: 'trace',
22056
- icon: 'timeline',
22089
+ icon: 'network_node',
22057
22090
  component: TracePaneComponent,
22058
22091
  policy: OpenPolicy.Tab | OpenPolicy.Expandable
22059
22092
  }, {
@@ -22077,7 +22110,7 @@ const PANES_CONFIG = [
22077
22110
  policy: OpenPolicy.Tab | OpenPolicy.Expandable
22078
22111
  }, {
22079
22112
  path: 'trace',
22080
- icon: 'timeline',
22113
+ icon: 'network_node',
22081
22114
  component: TracePaneComponent,
22082
22115
  policy: OpenPolicy.Tab | OpenPolicy.Expandable
22083
22116
  }, {
@@ -28975,8 +29008,8 @@ let TimelineViewComponent = class TimelineViewComponent {
28975
29008
  task.name = this._translate.get('WhoSubstituting', u[0].name, u[1].name);
28976
29009
  if (u[0].role)
28977
29010
  task.name += `, ${u[0].role}`;
28978
- if (r.role) {
28979
- const role = this._session.profile.roles.find(o => o.name === r.role);
29011
+ if (r.roleId) {
29012
+ const role = this._session.profile.roles.find(o => o.name === r.roleId);
28980
29013
  if (role)
28981
29014
  task.name += `, ${role.name}`;
28982
29015
  }
@@ -28988,8 +29021,8 @@ let TimelineViewComponent = class TimelineViewComponent {
28988
29021
  task.name = u.name;
28989
29022
  if (u.role)
28990
29023
  task.name += `, ${u.role}`;
28991
- else if (r.role) {
28992
- const role = this._session.profile.roles.find(o => o.name === r.role);
29024
+ else if (r.roleId) {
29025
+ const role = this._session.profile.roles.find(o => o.name === r.roleId);
28993
29026
  if (role)
28994
29027
  task.name += `, ${role.name}`;
28995
29028
  }