@bizdoc/core 3.5.7 → 3.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -7,8 +7,8 @@ import { MatChipInput, MatChipsModule, MatChipListbox } from '@angular/material/
7
7
  import { ENTER, COMMA, SEMICOLON } from '@angular/cdk/keycodes';
8
8
  import * as i3$3 from '@angular/material/input';
9
9
  import { MatInput, MatInputModule } from '@angular/material/input';
10
- import { trigger, transition, style, animate, state, query, stagger, animateChild, keyframes } from '@angular/animations';
11
10
  import { HubConnectionBuilder, HubConnectionState } from '@microsoft/signalr';
11
+ import { trigger, transition, style, animate, state, query, stagger, animateChild, keyframes } from '@angular/animations';
12
12
  import dayjs from 'dayjs';
13
13
  import { Loader } from '@googlemaps/js-api-loader';
14
14
  import * as firebase from 'firebase/app';
@@ -724,7 +724,7 @@ function getParameterByName(name, url = window.location.href) {
724
724
  }
725
725
 
726
726
  const INBOX = 'ib', DRAFT = 'df';
727
- const AvailableMode = ['Offline', 'Online', 'OutOfOffice', 'Vacation', 'WorkingHome'];
727
+ const AvailableMode = ['Offline', 'Online', 'OutOfOffice', 'OnVacation', 'WorkingHome'];
728
728
  var ValidationType;
729
729
  (function (ValidationType) {
730
730
  ValidationType["Required"] = "Required";
@@ -1127,6 +1127,15 @@ class SessionService {
1127
1127
  iconRegistry.addSvgIconLiteral('powerpoint', sanitizer.bypassSecurityTrustHtml(POWERPOINT_ICON));
1128
1128
  iconRegistry.addSvgIconLiteral('pdf', sanitizer.bypassSecurityTrustHtml(PDF_ICON));
1129
1129
  }
1130
+ /** */
1131
+ get tags() {
1132
+ return this._tags || (this._tags =
1133
+ this.profile.tags.
1134
+ concat(this.profile.options.tags?.
1135
+ filter(v => !this.profile.tags.find(t => t.name === v.name)). // Filter out duplicates
1136
+ map(v => ({ system: false, ...v }))
1137
+ || []));
1138
+ }
1130
1139
  get profile() { return this._profile; }
1131
1140
  get gender() { return this.profile.byId ? this._profile.byGender : this._profile.gender; }
1132
1141
  get accentPalette() {
@@ -1892,7 +1901,7 @@ const STRINGS = {
1892
1901
  SignOut: 'Sign out',
1893
1902
  SignOutAsk: 'Are you sure you want to sign out?',
1894
1903
  Goodbye: 'Goodbye',
1895
- Vacation: 'On Vacation',
1904
+ OnVacation: 'On Vacation',
1896
1905
  OutOfOffice: 'Out of office',
1897
1906
  Online: 'Online',
1898
1907
  Offline: 'Offline',
@@ -2608,7 +2617,7 @@ const STRINGS = {
2608
2617
  SignOutAsk: 'האם את/ה בטוח שברצונך לצאת?',
2609
2618
  SignOutAskMale: 'האם אתה בטוח שברצונך לצאת?',
2610
2619
  SignOutAskFemale: 'האם את בטוחה שברצונך לצאת?',
2611
- Vacation: 'נמצא בחופשה',
2620
+ OnVacation: 'נמצא בחופשה',
2612
2621
  OutOfOffice: 'מחוץ למשרד',
2613
2622
  Online: 'פעיל',
2614
2623
  Offline: 'לא זמין',
@@ -3630,7 +3639,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
3630
3639
  const OPTION_PANEL = new InjectionToken('options');
3631
3640
  /** options component*/
3632
3641
  class OptionsComponent {
3633
- constructor(_ps, _guide, _hub, _dialog, _fb, _accounts, _sb, _session, config) {
3642
+ constructor(_ps, _guide, _hub, _dialog, _fb, _accounts, _sb, _session, _popup, config) {
3634
3643
  this._ps = _ps;
3635
3644
  this._guide = _guide;
3636
3645
  this._hub = _hub;
@@ -3639,6 +3648,7 @@ class OptionsComponent {
3639
3648
  this._accounts = _accounts;
3640
3649
  this._sb = _sb;
3641
3650
  this._session = _session;
3651
+ this._popup = _popup;
3642
3652
  this.languages = this._session.languages;
3643
3653
  this.themes = this._session.Themes;
3644
3654
  this.modes = AvailableMode;
@@ -3735,6 +3745,9 @@ class OptionsComponent {
3735
3745
  this._ps.mask('Refreshing');
3736
3746
  location.reload();
3737
3747
  }
3748
+ showKeyboard(evt) {
3749
+ this._popup.open(this.keyboard, evt.target);
3750
+ }
3738
3751
  ngOnInit() {
3739
3752
  this._hub.state$.pipe(startWith(this._hub.state), takeUntil(this._destroy)).subscribe(s => this.online = s === HubConnectionState.Connected);
3740
3753
  const { outOfOffice, grantAccess, notifications, emails } = this.form.controls;
@@ -3825,9 +3838,10 @@ class OptionsComponent {
3825
3838
  }
3826
3839
  addTag(event) {
3827
3840
  const { chipInput, value } = event;
3841
+ const val = value?.trim();
3828
3842
  // Add our fruit
3829
- if ((value || '').trim()) {
3830
- this.options.tags.push(value.trim());
3843
+ if (val && val.length) {
3844
+ this.options.tags.push({ name: val });
3831
3845
  this.form.patchValue({});
3832
3846
  }
3833
3847
  // Reset the input value
@@ -3871,16 +3885,19 @@ class OptionsComponent {
3871
3885
  this._destroy.next();
3872
3886
  this._destroy.complete();
3873
3887
  }
3874
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: OptionsComponent, deps: [{ token: PromptService }, { token: GuideService }, { token: HubService }, { token: i2$2.MatDialog }, { token: i1$2.FormBuilder }, { token: AccountService }, { token: PromptService }, { token: SessionService }, { token: BIZDOC_CONFIG }], target: i0.ɵɵFactoryTarget.Component }); }
3875
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.6", type: OptionsComponent, isStandalone: false, selector: "bizdoc-options", inputs: { sectionName: ["section", "sectionName"] }, host: { listeners: { "document:keydown.escape": "close()" } }, viewQueries: [{ propertyName: "substitueInput", first: true, predicate: ["substitueInput"], descendants: true, read: MatInput }, { propertyName: "grantInput", first: true, predicate: ["grantInput"], descendants: true, read: MatChipInput }, { propertyName: "oooTmpl", first: true, predicate: ["oooTmpl"], descendants: true, static: true }, { propertyName: "notificationsTmpl", first: true, predicate: ["notificationsTmpl"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"column\">\r\n <div class=\"profile-name\">\r\n <span class=\"mat-headline-6\">\r\n @if (profile.byName) {\r\n {{profile.byName}} \\\r\n }\r\n {{profile.name}}\r\n </span>\r\n </div>\r\n\r\n <mat-divider />\r\n\r\n <div class=\"row\">\r\n <mat-nav-list class=\"nav-list\">\r\n <mat-list-item (click)=\"nav('notifications', notificationsTmpl, 0)\" [class.active]=\"sectionName === 'notifications'\">\r\n <span matListItemTitle>{{'Notifications' | translate}}</span>\r\n </mat-list-item>\r\n <mat-list-item (click)=\"nav('emails', emailsTmpl, 1)\" [class.active]=\"sectionName === 'emails'\">\r\n <span matListItemTitle>{{'Emails' | translate}}</span>\r\n </mat-list-item>\r\n <mat-list-item (click)=\"nav('out_of_office', oooTmpl, 2)\" [class.active]=\"sectionName === 'out_of_office'\">\r\n <span matListItemTitle>{{'OutOfOffice' | translate}}</span>\r\n </mat-list-item>\r\n <mat-list-item (click)=\"nav('grant_access', grantAccessTmpl, 3)\" [class.active]=\"sectionName === 'grant_access'\">\r\n <span matListItemTitle>{{'GrantAccess' | translate}}</span>\r\n </mat-list-item>\r\n <mat-list-item (click)=\"nav('preferences', preferencesTmpl, 4)\" [class.active]=\"sectionName === 'preferences'\">\r\n <span matListItemTitle>{{'Preferences' | translate}}</span>\r\n </mat-list-item>\r\n </mat-nav-list>\r\n <div class=\"separator\"></div>\r\n <form autocomplete=\"off\" [@v-swape]=\"sectionIndex\">\r\n <ng-container *ngTemplateOutlet=\"sectionTmpl\"></ng-container>\r\n </form>\r\n </div>\r\n <mat-divider />\r\n <!--keys-->\r\n @if(!isMobile) {\r\n <dl class=\"keys mat-body-2\">\r\n <dt>Alt+n</dt>\r\n <dd>{{'AltNHelp'|translate}}</dd>\r\n <dt>Ctrl+s</dt>\r\n <dd>{{'CtrlSHelp'|translate}}</dd>\r\n <dt>Alt+s</dt>\r\n <dd>{{'AltSHelp'|translate}}</dd>\r\n <dt>Alt+q</dt>\r\n <dd>{{'AltQHelp'|translate}}</dd>\r\n <dt>Alt+a</dt>\r\n <dd>{{'AltAHelp'|translate}}</dd>\r\n <dt>Alt+h</dt>\r\n <dd>{{'AltHHelp'|translate}}</dd>\r\n <dt>Ctrl+.</dt>\r\n <dd>{{'CtrlDotHelp'|translate}}</dd>\r\n </dl>\r\n }\r\n <!--themes-->\r\n @if (themes.length > 1) {\r\n <div class=\"row center\">\r\n @for (t of themes; track t) {\r\n <button (click)=\"changeTheme(t)\" mat-icon-button class=\"theme\" [style.background]=\"t.color\" [class.active]=\"t.name === theme\" [class.dark]=\"t.dark\" [bizdocTooltip]=\"'Theme'|translate\"></button>\r\n }\r\n </div>\r\n }\r\n</div>\r\n<!--guide-->\r\n<mat-nav-list role=\"list\">\r\n <mat-divider></mat-divider>\r\n <h3 mat-subheader [matBadge]=\"guidesCount\" matBadgeColor=\"accent\" matBadgeOverlap=\"false\" matBadgeSize=\"small\">{{'Help'|translate}}</h3>\r\n @for (g of guides; track g) {\r\n <button mat-menu-item (click)=\"guide(g.name)\">{{g.title}}</button>\r\n }\r\n</mat-nav-list>\r\n<mat-divider></mat-divider>\r\n<!--footer-->\r\n<div class=\"row footer\">\r\n <button mat-button role=\"listitem\" [matMenuTriggerFor]=\"language\">\r\n {{currentLanguage | translate}}\r\n <mat-icon>arrow_drop_down</mat-icon>\r\n <!--'ChangeLanguage'-->\r\n </button>\r\n <mat-menu #language>\r\n @for (l of languages; track l) {\r\n <button mat-menu-item (click)=\"changeLanguage(l)\">{{l | translate}}</button>\r\n }\r\n </mat-menu>\r\n @if (online) {\r\n <button mat-button [matMenuTriggerFor]=\"availability\">\r\n {{'ShowAs' | translate : (available | translate | lowercase)}}\r\n <mat-icon>arrow_drop_down</mat-icon>\r\n </button>\r\n }\r\n <mat-menu #availability>\r\n @for (m of modes; track m) {\r\n <button mat-menu-item (click)=\"setAvailable(m)\">{{m | translate}}</button>\r\n }\r\n </mat-menu>\r\n <span class=\"divider\"></span>\r\n <button mat-button role=\"listitem\" (click)=\"about()\">{{ 'About' | translate}}</button>\r\n @if (!online) {\r\n <button mat-icon-button (click)=\"revive()\" [bizdocTooltip]=\"'Connect'|translate\">\r\n <mat-icon>wifi_off</mat-icon>\r\n </button>\r\n }\r\n</div>\r\n<!--preferences-->\r\n<ng-template #preferencesTmpl>\r\n <div class=\"column\">\r\n <mat-form-field>\r\n <mat-label>{{'Tags'|translate}}</mat-label>\r\n <mat-chip-grid #chips>\r\n @for (item of form.value.tags; track item) {\r\n <mat-chip-row [removable]=\"true\" (removed)=\"removeTag(item)\">\r\n {{item}}\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip-row>\r\n }\r\n </mat-chip-grid>\r\n <input [matChipInputFor]=\"chips\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\r\n [matChipInputAddOnBlur]=\"true\"\r\n (matChipInputTokenEnd)=\"addTag($event)\">\r\n </mat-form-field>\r\n </div>\r\n</ng-template>\r\n<!--notifications-->\r\n<ng-template #notificationsTmpl>\r\n <div [formGroup]=\"form.controls.notifications\" class=\"column\">\r\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\r\n <br />\r\n <mat-checkbox formControlName=\"myDocumentStateChange\">{{'MyStateChange' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"anyDocumentStateChange\">{{'AnyStateChange' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"commentMyDocument\">{{'CommentMyDocument' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"commentAnyDocument\">{{'CommentAnyDocument' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"likes\" [style.display]=\"voting?'':'none'\">{{'LikedComment' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"tagged\">{{'TaggedInComments' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"upcomingEvents\">{{'UpcomingEvents' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"cubeAnomaly\">{{'CubeAnomaly' | translate}}</mat-checkbox>\r\n <div formGroupName=\"extra\" class=\"column\"> \r\n @for(n of profile.notifications; track n.name) {\r\n <mat-checkbox [formControlName]=\"n.name\">{{n.title}}</mat-checkbox>\r\n }\r\n </div>\r\n <div class=\"row\">\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button type=\"button\" (click)=\"toggleSound()\" [disabled]=\"!form.value.notifications.active\" [bizdocTooltip]=\"(form.value.notifications.sound ? 'SoundOn': 'SoundOff')|translate\"><mat-icon>{{form.value.notifications.sound ? 'volume_up' : 'volume_off'}}</mat-icon></button>\r\n </div>\r\n </div>\r\n</ng-template>\r\n<!--emails-->\r\n<ng-template #emailsTmpl>\r\n <div [formGroup]=\"form.controls.emails\" class=\"column\">\r\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\r\n <br />\r\n <mat-checkbox formControlName=\"mail\">{{'Mails' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"chat\">{{'Conversations' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"notifications\">{{'EmailNotifications' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"events\">{{'AlarmEvents' | translate}}</mat-checkbox>\r\n </div>\r\n</ng-template>\r\n<!--ooo-->\r\n<ng-template #oooTmpl>\r\n <div [formGroup]=\"form.controls.outOfOffice\" class=\"column\">\r\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\r\n <br />\r\n <mat-form-field class=\"flex\">\r\n <input matInput [formControl]=\"oooId\" type=\"search\" [matAutocomplete]=\"sauto\" #substitueInput\r\n [placeholder]=\"'Associate' | translate\" [required]=\"form.value.outOfOffice.active\" />\r\n <mat-autocomplete #sauto=\"matAutocomplete\" [displayWith]=\"display\"\r\n (optionSelected)=\"oooSelected($event)\">\r\n @for (u of susers$ | async; track u.id) {\r\n <mat-option [value]=\"u\">\r\n <span>{{u.name}}</span>\r\n </mat-option>\r\n }\r\n </mat-autocomplete>\r\n <mat-hint>{{'OutOfOfficeTip' | translate}}</mat-hint>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'Dates'|translate}}</mat-label>\r\n <mat-date-range-input [rangePicker]=\"dates\">\r\n <input matStartDate formControlName=\"from\" [placeholder]=\"'From'|translate\" [min]=\"today\">\r\n <input matEndDate formControlName=\"to\" [placeholder]=\"'To'|translate\">\r\n </mat-date-range-input>\r\n <mat-datepicker-toggle matSuffix [for]=\"dates\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #dates [touchUi]=\"isMobile\"></mat-date-range-picker>\r\n </mat-form-field>\r\n </div>\r\n</ng-template>\r\n<!--grantAccess-->\r\n<ng-template #grantAccessTmpl>\r\n <div [formGroup]=\"form.controls.grantAccess\" class=\"column\">\r\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\r\n <br />\r\n <mat-form-field>\r\n <mat-label>{{'Associates'| translate}}</mat-label>\r\n <mat-chip-grid #grantList [attr.aria-label]=\"\" [disabled]=\"!form.value.grantAccess.active\">\r\n @for (u of form.value.grantAccess.users || []; track u.id) {\r\n <mat-chip-row (removed)=\"removeGrant(u)\">\r\n {{u | userName | async}}\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip-row>\r\n }\r\n </mat-chip-grid>\r\n <input [formControl]=\"grantUserIds\"\r\n #grantInput\r\n [matAutocomplete]=\"grantAuto\"\r\n [matChipInputFor]=\"grantList\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\">\r\n <mat-autocomplete #grantAuto=\"matAutocomplete\" (optionSelected)=\"addGrant(grantInput, $event)\">\r\n @for (u of gusers$ | async; track u.id) {\r\n <mat-option [value]=\"u.id\">\r\n {{u.name}}\r\n @if (u.email) {\r\n <span>&nbsp; - {{u.email}}</span>\r\n }\r\n </mat-option>\r\n }\r\n </mat-autocomplete>\r\n <mat-hint>{{'GrantTip' | translate}}</mat-hint>\r\n </mat-form-field>\r\n </div>\r\n</ng-template>\r\n", styles: [":host{max-width:80vw;min-width:420px}.footer{align-items:center}.profile-name{margin:8px}.theme{height:22px!important;width:22px!important;-moz-border-radius:13px 13px!important;-webkit-border-radius:13px 13px!important;border-radius:13px!important;margin:4px!important}.theme.active.dark{border:2px solid #f4f4f4}.keys{padding:8px}.keys dt{width:72px;float:inline-start;clear:both;font-variant-caps:all-small-caps}.keys dd{float:inline-end;font-size:small;margin:0}.separator{height:280px;width:1px;background-color:var(--mat-sys-outline)}form{padding:20px 8px 0;min-width:320px}\n"], dependencies: [{ kind: "directive", type: i9.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1$2.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "component", type: i4.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i4.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled", "readonly", "matChipInputDisabledInteractive"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i4.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i4.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "component", type: i2$4.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i2$4.MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { kind: "directive", type: i2$4.MatStartDate, selector: "input[matStartDate]", outputs: ["dateChange", "dateInput"] }, { kind: "directive", type: i2$4.MatEndDate, selector: "input[matEndDate]", outputs: ["dateChange", "dateInput"] }, { kind: "component", type: i2$4.MatDateRangePicker, selector: "mat-date-range-picker", exportAs: ["matDateRangePicker"] }, { kind: "directive", type: i7$1.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "component", type: i2$5.MatNavList, selector: "mat-nav-list", exportAs: ["matNavList"] }, { kind: "component", type: i2$5.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: i2$5.MatListSubheaderCssMatStyler, selector: "[mat-subheader], [matSubheader]" }, { kind: "component", type: i2$5.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: i2$5.MatListItemTitle, selector: "[matListItemTitle]" }, { kind: "component", type: i2$6.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i2$6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i2$6.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i3$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3$1.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3$1.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i3$1.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i3$2.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "component", type: i8.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i8.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i2$7.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i3$3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i10.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i10.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i10.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "pipe", type: i9.AsyncPipe, name: "async" }, { kind: "pipe", type: i9.LowerCasePipe, name: "lowercase" }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: UserNamePipe, name: "userName" }], animations: [verticalSwapAnimation] }); }
3888
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: OptionsComponent, deps: [{ token: PromptService }, { token: GuideService }, { token: HubService }, { token: i2$2.MatDialog }, { token: i1$2.FormBuilder }, { token: AccountService }, { token: PromptService }, { token: SessionService }, { token: Popup }, { token: BIZDOC_CONFIG }], target: i0.ɵɵFactoryTarget.Component }); }
3889
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.6", type: OptionsComponent, isStandalone: false, selector: "bizdoc-options", inputs: { sectionName: ["section", "sectionName"] }, host: { listeners: { "document:keydown.escape": "close()" } }, viewQueries: [{ propertyName: "keyboard", first: true, predicate: ["keyboardTmpl"], descendants: true }, { propertyName: "substitueInput", first: true, predicate: ["substitueInput"], descendants: true, read: MatInput }, { propertyName: "grantInput", first: true, predicate: ["grantInput"], descendants: true, read: MatChipInput }, { propertyName: "oooTmpl", first: true, predicate: ["oooTmpl"], descendants: true, static: true }, { propertyName: "notificationsTmpl", first: true, predicate: ["notificationsTmpl"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"column\">\r\n <div class=\"profile-name\">\r\n <span class=\"mat-headline-6\">\r\n @if (profile.byName) {\r\n {{profile.byName}} \\\r\n }\r\n {{profile.name}}\r\n </span>\r\n </div>\r\n\r\n <mat-divider />\r\n\r\n <div class=\"row\">\r\n <mat-nav-list class=\"nav-list\">\r\n <mat-list-item (click)=\"nav('notifications', notificationsTmpl, 0)\" [class.active]=\"sectionName === 'notifications'\">\r\n <span matListItemTitle>{{'Notifications' | translate}}</span>\r\n </mat-list-item>\r\n <mat-list-item (click)=\"nav('emails', emailsTmpl, 1)\" [class.active]=\"sectionName === 'emails'\">\r\n <span matListItemTitle>{{'Emails' | translate}}</span>\r\n </mat-list-item>\r\n <mat-list-item (click)=\"nav('out_of_office', oooTmpl, 2)\" [class.active]=\"sectionName === 'out_of_office'\">\r\n <span matListItemTitle>{{'OutOfOffice' | translate}}</span>\r\n </mat-list-item>\r\n <mat-list-item (click)=\"nav('grant_access', grantAccessTmpl, 3)\" [class.active]=\"sectionName === 'grant_access'\">\r\n <span matListItemTitle>{{'GrantAccess' | translate}}</span>\r\n </mat-list-item>\r\n <mat-list-item (click)=\"nav('preferences', preferencesTmpl, 4)\" [class.active]=\"sectionName === 'preferences'\">\r\n <span matListItemTitle>{{'Preferences' | translate}}</span>\r\n </mat-list-item>\r\n </mat-nav-list>\r\n <div class=\"separator\"></div>\r\n <form autocomplete=\"off\" [@v-swape]=\"sectionIndex\">\r\n <ng-container *ngTemplateOutlet=\"sectionTmpl\"></ng-container>\r\n </form>\r\n </div>\r\n <mat-divider />\r\n <!--themes-->\r\n @if (themes.length > 1) {\r\n <div class=\"row center\">\r\n @for (t of themes; track t) {\r\n <button (click)=\"changeTheme(t)\" mat-icon-button class=\"theme\" [style.background]=\"t.color\" [class.active]=\"t.name === theme\" [class.dark]=\"t.dark\" [bizdocTooltip]=\"'Theme'|translate\"></button>\r\n }\r\n </div>\r\n }\r\n</div>\r\n<!--guide-->\r\n<mat-nav-list role=\"list\">\r\n <mat-divider></mat-divider>\r\n <h3 mat-subheader [matBadge]=\"guidesCount\" matBadgeColor=\"accent\" matBadgeOverlap=\"false\" matBadgeSize=\"small\">{{'Help'|translate}}</h3>\r\n @for (g of guides; track g) {\r\n <button mat-menu-item (click)=\"guide(g.name)\">{{g.title}}</button>\r\n }\r\n</mat-nav-list>\r\n<mat-divider></mat-divider>\r\n<!--footer-->\r\n<div class=\"row footer\">\r\n <!--keys-->\r\n @if(!isMobile) {\r\n <button mat-button role=\"listitem\" (click)=\"showKeyboard($event)\">\r\n {{'Keyboard' | translate}}\r\n <mat-icon>arrow_drop_down</mat-icon>\r\n <!--'ChangeLanguage'-->\r\n </button>\r\n }\r\n <button mat-button role=\"listitem\" [matMenuTriggerFor]=\"language\">\r\n {{currentLanguage | translate}}\r\n <mat-icon>arrow_drop_down</mat-icon>\r\n <!--'ChangeLanguage'-->\r\n </button>\r\n <mat-menu #language>\r\n @for (l of languages; track l) {\r\n <button mat-menu-item (click)=\"changeLanguage(l)\">{{l | translate}}</button>\r\n }\r\n </mat-menu>\r\n @if (online) {\r\n <button mat-button [matMenuTriggerFor]=\"availability\">\r\n {{'ShowAs' | translate : (available | translate | lowercase)}}\r\n <mat-icon>arrow_drop_down</mat-icon>\r\n </button>\r\n }\r\n <mat-menu #availability>\r\n @for (m of modes; track m) {\r\n <button mat-menu-item (click)=\"setAvailable(m)\">{{m | translate}}</button>\r\n }\r\n </mat-menu>\r\n <span class=\"divider\"></span>\r\n <button mat-button role=\"listitem\" (click)=\"about()\">{{ 'About' | translate}}</button>\r\n @if (!online) {\r\n <button mat-icon-button (click)=\"revive()\" [bizdocTooltip]=\"'Connect'|translate\">\r\n <mat-icon>wifi_off</mat-icon>\r\n </button>\r\n }\r\n</div>\r\n<!--preferences-->\r\n<ng-template #preferencesTmpl>\r\n <div class=\"column\">\r\n <mat-form-field>\r\n <mat-label>{{'Tags'|translate}}</mat-label>\r\n <mat-chip-grid #chips>\r\n @for (tag of form.value.tags; track tag.name) {\r\n <mat-chip-row [removable]=\"true\" (removed)=\"removeTag(tag)\">\r\n {{tag.name}}\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip-row>\r\n }\r\n </mat-chip-grid>\r\n <input [matChipInputFor]=\"chips\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\r\n [matChipInputAddOnBlur]=\"true\"\r\n (matChipInputTokenEnd)=\"addTag($event)\">\r\n </mat-form-field>\r\n </div>\r\n</ng-template>\r\n<!---->\r\n<ng-template #keyboardTmpl>\r\n <dl class=\"keys mat-body-2\">\r\n <dt>Alt+n</dt>\r\n <dd>{{'AltNHelp'|translate}}</dd>\r\n <dt>Ctrl+s</dt>\r\n <dd>{{'CtrlSHelp'|translate}}</dd>\r\n <dt>Alt+s</dt>\r\n <dd>{{'AltSHelp'|translate}}</dd>\r\n <dt>Alt+q</dt>\r\n <dd>{{'AltQHelp'|translate}}</dd>\r\n <dt>Alt+a</dt>\r\n <dd>{{'AltAHelp'|translate}}</dd>\r\n <dt>Alt+h</dt>\r\n <dd>{{'AltHHelp'|translate}}</dd>\r\n <dt>Ctrl+.</dt>\r\n <dd>{{'CtrlDotHelp'|translate}}</dd>\r\n </dl>\r\n</ng-template>\r\n<!--notifications-->\r\n<ng-template #notificationsTmpl>\r\n <div [formGroup]=\"form.controls.notifications\" class=\"column\">\r\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\r\n <br />\r\n <mat-checkbox formControlName=\"myDocumentStateChange\">{{'MyStateChange' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"anyDocumentStateChange\">{{'AnyStateChange' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"commentMyDocument\">{{'CommentMyDocument' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"commentAnyDocument\">{{'CommentAnyDocument' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"likes\" [style.display]=\"voting?'':'none'\">{{'LikedComment' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"tagged\">{{'TaggedInComments' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"upcomingEvents\">{{'UpcomingEvents' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"cubeAnomaly\">{{'CubeAnomaly' | translate}}</mat-checkbox>\r\n <div formGroupName=\"extra\" class=\"column\"> \r\n @for(n of profile.notifications; track n.name) {\r\n <mat-checkbox [formControlName]=\"n.name\">{{n.title}}</mat-checkbox>\r\n }\r\n </div>\r\n <div class=\"row\">\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button type=\"button\" (click)=\"toggleSound()\" [disabled]=\"!form.value.notifications.active\" [bizdocTooltip]=\"(form.value.notifications.sound ? 'SoundOn': 'SoundOff')|translate\"><mat-icon>{{form.value.notifications.sound ? 'volume_up' : 'volume_off'}}</mat-icon></button>\r\n </div>\r\n </div>\r\n</ng-template>\r\n<!--emails-->\r\n<ng-template #emailsTmpl>\r\n <div [formGroup]=\"form.controls.emails\" class=\"column\">\r\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\r\n <br />\r\n <mat-checkbox formControlName=\"mail\">{{'Mails' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"chat\">{{'Conversations' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"notifications\">{{'EmailNotifications' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"events\">{{'AlarmEvents' | translate}}</mat-checkbox>\r\n </div>\r\n</ng-template>\r\n<!--ooo-->\r\n<ng-template #oooTmpl>\r\n <div [formGroup]=\"form.controls.outOfOffice\" class=\"column\">\r\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\r\n <br />\r\n <mat-form-field class=\"flex\">\r\n <input matInput [formControl]=\"oooId\" type=\"search\" [matAutocomplete]=\"sauto\" #substitueInput\r\n [placeholder]=\"'Associate' | translate\" [required]=\"form.value.outOfOffice.active\" />\r\n <mat-autocomplete #sauto=\"matAutocomplete\" [displayWith]=\"display\"\r\n (optionSelected)=\"oooSelected($event)\">\r\n @for (u of susers$ | async; track u.id) {\r\n <mat-option [value]=\"u\">\r\n <span>{{u.name}}</span>\r\n </mat-option>\r\n }\r\n </mat-autocomplete>\r\n <mat-hint>{{'OutOfOfficeTip' | translate}}</mat-hint>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'Dates'|translate}}</mat-label>\r\n <mat-date-range-input [rangePicker]=\"dates\">\r\n <input matStartDate formControlName=\"from\" [placeholder]=\"'From'|translate\" [min]=\"today\">\r\n <input matEndDate formControlName=\"to\" [placeholder]=\"'To'|translate\">\r\n </mat-date-range-input>\r\n <mat-datepicker-toggle matSuffix [for]=\"dates\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #dates [touchUi]=\"isMobile\"></mat-date-range-picker>\r\n </mat-form-field>\r\n </div>\r\n</ng-template>\r\n<!--grantAccess-->\r\n<ng-template #grantAccessTmpl>\r\n <div [formGroup]=\"form.controls.grantAccess\" class=\"column\">\r\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\r\n <br />\r\n <mat-form-field>\r\n <mat-label>{{'Associates'| translate}}</mat-label>\r\n <mat-chip-grid #grantList [attr.aria-label]=\"\" [disabled]=\"!form.value.grantAccess.active\">\r\n @for (u of form.value.grantAccess.users || []; track u.id) {\r\n <mat-chip-row (removed)=\"removeGrant(u)\">\r\n {{u | userName | async}}\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip-row>\r\n }\r\n </mat-chip-grid>\r\n <input [formControl]=\"grantUserIds\"\r\n #grantInput\r\n [matAutocomplete]=\"grantAuto\"\r\n [matChipInputFor]=\"grantList\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\">\r\n <mat-autocomplete #grantAuto=\"matAutocomplete\" (optionSelected)=\"addGrant(grantInput, $event)\">\r\n @for (u of gusers$ | async; track u.id) {\r\n <mat-option [value]=\"u.id\">\r\n {{u.name}}\r\n @if (u.email) {\r\n <span>&nbsp; - {{u.email}}</span>\r\n }\r\n </mat-option>\r\n }\r\n </mat-autocomplete>\r\n <mat-hint>{{'GrantTip' | translate}}</mat-hint>\r\n </mat-form-field>\r\n </div>\r\n</ng-template>\r\n", styles: [":host{max-width:80vw;min-width:420px}.footer{align-items:center}.profile-name{margin:8px}.theme{height:22px!important;width:22px!important;-moz-border-radius:13px 13px!important;-webkit-border-radius:13px 13px!important;border-radius:13px!important;margin:4px!important}.theme.active.dark{border:2px solid #f4f4f4}.keys{padding:8px}.keys dt{width:72px;float:inline-start;clear:both;font-variant-caps:all-small-caps}.keys dd{float:inline-end;font-size:small;margin:0}.separator{height:280px;width:1px;background-color:var(--mat-sys-outline)}form{padding:20px 8px 0;min-width:320px}\n"], dependencies: [{ kind: "directive", type: i9.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1$2.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "component", type: i4.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i4.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled", "readonly", "matChipInputDisabledInteractive"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i4.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i4.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "component", type: i2$4.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i2$4.MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { kind: "directive", type: i2$4.MatStartDate, selector: "input[matStartDate]", outputs: ["dateChange", "dateInput"] }, { kind: "directive", type: i2$4.MatEndDate, selector: "input[matEndDate]", outputs: ["dateChange", "dateInput"] }, { kind: "component", type: i2$4.MatDateRangePicker, selector: "mat-date-range-picker", exportAs: ["matDateRangePicker"] }, { kind: "directive", type: i7$1.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "component", type: i2$5.MatNavList, selector: "mat-nav-list", exportAs: ["matNavList"] }, { kind: "component", type: i2$5.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: i2$5.MatListSubheaderCssMatStyler, selector: "[mat-subheader], [matSubheader]" }, { kind: "component", type: i2$5.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: i2$5.MatListItemTitle, selector: "[matListItemTitle]" }, { kind: "component", type: i2$6.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i2$6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i2$6.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i3$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3$1.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3$1.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i3$1.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i3$2.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "component", type: i8.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i8.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i2$7.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i3$3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i10.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i10.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i10.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "pipe", type: i9.AsyncPipe, name: "async" }, { kind: "pipe", type: i9.LowerCasePipe, name: "lowercase" }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: UserNamePipe, name: "userName" }], animations: [verticalSwapAnimation] }); }
3876
3890
  }
3877
3891
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: OptionsComponent, decorators: [{
3878
3892
  type: Component,
3879
- args: [{ standalone: false, selector: 'bizdoc-options', animations: [verticalSwapAnimation], template: "<div class=\"column\">\r\n <div class=\"profile-name\">\r\n <span class=\"mat-headline-6\">\r\n @if (profile.byName) {\r\n {{profile.byName}} \\\r\n }\r\n {{profile.name}}\r\n </span>\r\n </div>\r\n\r\n <mat-divider />\r\n\r\n <div class=\"row\">\r\n <mat-nav-list class=\"nav-list\">\r\n <mat-list-item (click)=\"nav('notifications', notificationsTmpl, 0)\" [class.active]=\"sectionName === 'notifications'\">\r\n <span matListItemTitle>{{'Notifications' | translate}}</span>\r\n </mat-list-item>\r\n <mat-list-item (click)=\"nav('emails', emailsTmpl, 1)\" [class.active]=\"sectionName === 'emails'\">\r\n <span matListItemTitle>{{'Emails' | translate}}</span>\r\n </mat-list-item>\r\n <mat-list-item (click)=\"nav('out_of_office', oooTmpl, 2)\" [class.active]=\"sectionName === 'out_of_office'\">\r\n <span matListItemTitle>{{'OutOfOffice' | translate}}</span>\r\n </mat-list-item>\r\n <mat-list-item (click)=\"nav('grant_access', grantAccessTmpl, 3)\" [class.active]=\"sectionName === 'grant_access'\">\r\n <span matListItemTitle>{{'GrantAccess' | translate}}</span>\r\n </mat-list-item>\r\n <mat-list-item (click)=\"nav('preferences', preferencesTmpl, 4)\" [class.active]=\"sectionName === 'preferences'\">\r\n <span matListItemTitle>{{'Preferences' | translate}}</span>\r\n </mat-list-item>\r\n </mat-nav-list>\r\n <div class=\"separator\"></div>\r\n <form autocomplete=\"off\" [@v-swape]=\"sectionIndex\">\r\n <ng-container *ngTemplateOutlet=\"sectionTmpl\"></ng-container>\r\n </form>\r\n </div>\r\n <mat-divider />\r\n <!--keys-->\r\n @if(!isMobile) {\r\n <dl class=\"keys mat-body-2\">\r\n <dt>Alt+n</dt>\r\n <dd>{{'AltNHelp'|translate}}</dd>\r\n <dt>Ctrl+s</dt>\r\n <dd>{{'CtrlSHelp'|translate}}</dd>\r\n <dt>Alt+s</dt>\r\n <dd>{{'AltSHelp'|translate}}</dd>\r\n <dt>Alt+q</dt>\r\n <dd>{{'AltQHelp'|translate}}</dd>\r\n <dt>Alt+a</dt>\r\n <dd>{{'AltAHelp'|translate}}</dd>\r\n <dt>Alt+h</dt>\r\n <dd>{{'AltHHelp'|translate}}</dd>\r\n <dt>Ctrl+.</dt>\r\n <dd>{{'CtrlDotHelp'|translate}}</dd>\r\n </dl>\r\n }\r\n <!--themes-->\r\n @if (themes.length > 1) {\r\n <div class=\"row center\">\r\n @for (t of themes; track t) {\r\n <button (click)=\"changeTheme(t)\" mat-icon-button class=\"theme\" [style.background]=\"t.color\" [class.active]=\"t.name === theme\" [class.dark]=\"t.dark\" [bizdocTooltip]=\"'Theme'|translate\"></button>\r\n }\r\n </div>\r\n }\r\n</div>\r\n<!--guide-->\r\n<mat-nav-list role=\"list\">\r\n <mat-divider></mat-divider>\r\n <h3 mat-subheader [matBadge]=\"guidesCount\" matBadgeColor=\"accent\" matBadgeOverlap=\"false\" matBadgeSize=\"small\">{{'Help'|translate}}</h3>\r\n @for (g of guides; track g) {\r\n <button mat-menu-item (click)=\"guide(g.name)\">{{g.title}}</button>\r\n }\r\n</mat-nav-list>\r\n<mat-divider></mat-divider>\r\n<!--footer-->\r\n<div class=\"row footer\">\r\n <button mat-button role=\"listitem\" [matMenuTriggerFor]=\"language\">\r\n {{currentLanguage | translate}}\r\n <mat-icon>arrow_drop_down</mat-icon>\r\n <!--'ChangeLanguage'-->\r\n </button>\r\n <mat-menu #language>\r\n @for (l of languages; track l) {\r\n <button mat-menu-item (click)=\"changeLanguage(l)\">{{l | translate}}</button>\r\n }\r\n </mat-menu>\r\n @if (online) {\r\n <button mat-button [matMenuTriggerFor]=\"availability\">\r\n {{'ShowAs' | translate : (available | translate | lowercase)}}\r\n <mat-icon>arrow_drop_down</mat-icon>\r\n </button>\r\n }\r\n <mat-menu #availability>\r\n @for (m of modes; track m) {\r\n <button mat-menu-item (click)=\"setAvailable(m)\">{{m | translate}}</button>\r\n }\r\n </mat-menu>\r\n <span class=\"divider\"></span>\r\n <button mat-button role=\"listitem\" (click)=\"about()\">{{ 'About' | translate}}</button>\r\n @if (!online) {\r\n <button mat-icon-button (click)=\"revive()\" [bizdocTooltip]=\"'Connect'|translate\">\r\n <mat-icon>wifi_off</mat-icon>\r\n </button>\r\n }\r\n</div>\r\n<!--preferences-->\r\n<ng-template #preferencesTmpl>\r\n <div class=\"column\">\r\n <mat-form-field>\r\n <mat-label>{{'Tags'|translate}}</mat-label>\r\n <mat-chip-grid #chips>\r\n @for (item of form.value.tags; track item) {\r\n <mat-chip-row [removable]=\"true\" (removed)=\"removeTag(item)\">\r\n {{item}}\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip-row>\r\n }\r\n </mat-chip-grid>\r\n <input [matChipInputFor]=\"chips\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\r\n [matChipInputAddOnBlur]=\"true\"\r\n (matChipInputTokenEnd)=\"addTag($event)\">\r\n </mat-form-field>\r\n </div>\r\n</ng-template>\r\n<!--notifications-->\r\n<ng-template #notificationsTmpl>\r\n <div [formGroup]=\"form.controls.notifications\" class=\"column\">\r\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\r\n <br />\r\n <mat-checkbox formControlName=\"myDocumentStateChange\">{{'MyStateChange' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"anyDocumentStateChange\">{{'AnyStateChange' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"commentMyDocument\">{{'CommentMyDocument' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"commentAnyDocument\">{{'CommentAnyDocument' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"likes\" [style.display]=\"voting?'':'none'\">{{'LikedComment' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"tagged\">{{'TaggedInComments' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"upcomingEvents\">{{'UpcomingEvents' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"cubeAnomaly\">{{'CubeAnomaly' | translate}}</mat-checkbox>\r\n <div formGroupName=\"extra\" class=\"column\"> \r\n @for(n of profile.notifications; track n.name) {\r\n <mat-checkbox [formControlName]=\"n.name\">{{n.title}}</mat-checkbox>\r\n }\r\n </div>\r\n <div class=\"row\">\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button type=\"button\" (click)=\"toggleSound()\" [disabled]=\"!form.value.notifications.active\" [bizdocTooltip]=\"(form.value.notifications.sound ? 'SoundOn': 'SoundOff')|translate\"><mat-icon>{{form.value.notifications.sound ? 'volume_up' : 'volume_off'}}</mat-icon></button>\r\n </div>\r\n </div>\r\n</ng-template>\r\n<!--emails-->\r\n<ng-template #emailsTmpl>\r\n <div [formGroup]=\"form.controls.emails\" class=\"column\">\r\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\r\n <br />\r\n <mat-checkbox formControlName=\"mail\">{{'Mails' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"chat\">{{'Conversations' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"notifications\">{{'EmailNotifications' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"events\">{{'AlarmEvents' | translate}}</mat-checkbox>\r\n </div>\r\n</ng-template>\r\n<!--ooo-->\r\n<ng-template #oooTmpl>\r\n <div [formGroup]=\"form.controls.outOfOffice\" class=\"column\">\r\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\r\n <br />\r\n <mat-form-field class=\"flex\">\r\n <input matInput [formControl]=\"oooId\" type=\"search\" [matAutocomplete]=\"sauto\" #substitueInput\r\n [placeholder]=\"'Associate' | translate\" [required]=\"form.value.outOfOffice.active\" />\r\n <mat-autocomplete #sauto=\"matAutocomplete\" [displayWith]=\"display\"\r\n (optionSelected)=\"oooSelected($event)\">\r\n @for (u of susers$ | async; track u.id) {\r\n <mat-option [value]=\"u\">\r\n <span>{{u.name}}</span>\r\n </mat-option>\r\n }\r\n </mat-autocomplete>\r\n <mat-hint>{{'OutOfOfficeTip' | translate}}</mat-hint>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'Dates'|translate}}</mat-label>\r\n <mat-date-range-input [rangePicker]=\"dates\">\r\n <input matStartDate formControlName=\"from\" [placeholder]=\"'From'|translate\" [min]=\"today\">\r\n <input matEndDate formControlName=\"to\" [placeholder]=\"'To'|translate\">\r\n </mat-date-range-input>\r\n <mat-datepicker-toggle matSuffix [for]=\"dates\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #dates [touchUi]=\"isMobile\"></mat-date-range-picker>\r\n </mat-form-field>\r\n </div>\r\n</ng-template>\r\n<!--grantAccess-->\r\n<ng-template #grantAccessTmpl>\r\n <div [formGroup]=\"form.controls.grantAccess\" class=\"column\">\r\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\r\n <br />\r\n <mat-form-field>\r\n <mat-label>{{'Associates'| translate}}</mat-label>\r\n <mat-chip-grid #grantList [attr.aria-label]=\"\" [disabled]=\"!form.value.grantAccess.active\">\r\n @for (u of form.value.grantAccess.users || []; track u.id) {\r\n <mat-chip-row (removed)=\"removeGrant(u)\">\r\n {{u | userName | async}}\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip-row>\r\n }\r\n </mat-chip-grid>\r\n <input [formControl]=\"grantUserIds\"\r\n #grantInput\r\n [matAutocomplete]=\"grantAuto\"\r\n [matChipInputFor]=\"grantList\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\">\r\n <mat-autocomplete #grantAuto=\"matAutocomplete\" (optionSelected)=\"addGrant(grantInput, $event)\">\r\n @for (u of gusers$ | async; track u.id) {\r\n <mat-option [value]=\"u.id\">\r\n {{u.name}}\r\n @if (u.email) {\r\n <span>&nbsp; - {{u.email}}</span>\r\n }\r\n </mat-option>\r\n }\r\n </mat-autocomplete>\r\n <mat-hint>{{'GrantTip' | translate}}</mat-hint>\r\n </mat-form-field>\r\n </div>\r\n</ng-template>\r\n", styles: [":host{max-width:80vw;min-width:420px}.footer{align-items:center}.profile-name{margin:8px}.theme{height:22px!important;width:22px!important;-moz-border-radius:13px 13px!important;-webkit-border-radius:13px 13px!important;border-radius:13px!important;margin:4px!important}.theme.active.dark{border:2px solid #f4f4f4}.keys{padding:8px}.keys dt{width:72px;float:inline-start;clear:both;font-variant-caps:all-small-caps}.keys dd{float:inline-end;font-size:small;margin:0}.separator{height:280px;width:1px;background-color:var(--mat-sys-outline)}form{padding:20px 8px 0;min-width:320px}\n"] }]
3880
- }], ctorParameters: () => [{ type: PromptService }, { type: GuideService }, { type: HubService }, { type: i2$2.MatDialog }, { type: i1$2.FormBuilder }, { type: AccountService }, { type: PromptService }, { type: SessionService }, { type: undefined, decorators: [{
3893
+ args: [{ standalone: false, selector: 'bizdoc-options', animations: [verticalSwapAnimation], template: "<div class=\"column\">\r\n <div class=\"profile-name\">\r\n <span class=\"mat-headline-6\">\r\n @if (profile.byName) {\r\n {{profile.byName}} \\\r\n }\r\n {{profile.name}}\r\n </span>\r\n </div>\r\n\r\n <mat-divider />\r\n\r\n <div class=\"row\">\r\n <mat-nav-list class=\"nav-list\">\r\n <mat-list-item (click)=\"nav('notifications', notificationsTmpl, 0)\" [class.active]=\"sectionName === 'notifications'\">\r\n <span matListItemTitle>{{'Notifications' | translate}}</span>\r\n </mat-list-item>\r\n <mat-list-item (click)=\"nav('emails', emailsTmpl, 1)\" [class.active]=\"sectionName === 'emails'\">\r\n <span matListItemTitle>{{'Emails' | translate}}</span>\r\n </mat-list-item>\r\n <mat-list-item (click)=\"nav('out_of_office', oooTmpl, 2)\" [class.active]=\"sectionName === 'out_of_office'\">\r\n <span matListItemTitle>{{'OutOfOffice' | translate}}</span>\r\n </mat-list-item>\r\n <mat-list-item (click)=\"nav('grant_access', grantAccessTmpl, 3)\" [class.active]=\"sectionName === 'grant_access'\">\r\n <span matListItemTitle>{{'GrantAccess' | translate}}</span>\r\n </mat-list-item>\r\n <mat-list-item (click)=\"nav('preferences', preferencesTmpl, 4)\" [class.active]=\"sectionName === 'preferences'\">\r\n <span matListItemTitle>{{'Preferences' | translate}}</span>\r\n </mat-list-item>\r\n </mat-nav-list>\r\n <div class=\"separator\"></div>\r\n <form autocomplete=\"off\" [@v-swape]=\"sectionIndex\">\r\n <ng-container *ngTemplateOutlet=\"sectionTmpl\"></ng-container>\r\n </form>\r\n </div>\r\n <mat-divider />\r\n <!--themes-->\r\n @if (themes.length > 1) {\r\n <div class=\"row center\">\r\n @for (t of themes; track t) {\r\n <button (click)=\"changeTheme(t)\" mat-icon-button class=\"theme\" [style.background]=\"t.color\" [class.active]=\"t.name === theme\" [class.dark]=\"t.dark\" [bizdocTooltip]=\"'Theme'|translate\"></button>\r\n }\r\n </div>\r\n }\r\n</div>\r\n<!--guide-->\r\n<mat-nav-list role=\"list\">\r\n <mat-divider></mat-divider>\r\n <h3 mat-subheader [matBadge]=\"guidesCount\" matBadgeColor=\"accent\" matBadgeOverlap=\"false\" matBadgeSize=\"small\">{{'Help'|translate}}</h3>\r\n @for (g of guides; track g) {\r\n <button mat-menu-item (click)=\"guide(g.name)\">{{g.title}}</button>\r\n }\r\n</mat-nav-list>\r\n<mat-divider></mat-divider>\r\n<!--footer-->\r\n<div class=\"row footer\">\r\n <!--keys-->\r\n @if(!isMobile) {\r\n <button mat-button role=\"listitem\" (click)=\"showKeyboard($event)\">\r\n {{'Keyboard' | translate}}\r\n <mat-icon>arrow_drop_down</mat-icon>\r\n <!--'ChangeLanguage'-->\r\n </button>\r\n }\r\n <button mat-button role=\"listitem\" [matMenuTriggerFor]=\"language\">\r\n {{currentLanguage | translate}}\r\n <mat-icon>arrow_drop_down</mat-icon>\r\n <!--'ChangeLanguage'-->\r\n </button>\r\n <mat-menu #language>\r\n @for (l of languages; track l) {\r\n <button mat-menu-item (click)=\"changeLanguage(l)\">{{l | translate}}</button>\r\n }\r\n </mat-menu>\r\n @if (online) {\r\n <button mat-button [matMenuTriggerFor]=\"availability\">\r\n {{'ShowAs' | translate : (available | translate | lowercase)}}\r\n <mat-icon>arrow_drop_down</mat-icon>\r\n </button>\r\n }\r\n <mat-menu #availability>\r\n @for (m of modes; track m) {\r\n <button mat-menu-item (click)=\"setAvailable(m)\">{{m | translate}}</button>\r\n }\r\n </mat-menu>\r\n <span class=\"divider\"></span>\r\n <button mat-button role=\"listitem\" (click)=\"about()\">{{ 'About' | translate}}</button>\r\n @if (!online) {\r\n <button mat-icon-button (click)=\"revive()\" [bizdocTooltip]=\"'Connect'|translate\">\r\n <mat-icon>wifi_off</mat-icon>\r\n </button>\r\n }\r\n</div>\r\n<!--preferences-->\r\n<ng-template #preferencesTmpl>\r\n <div class=\"column\">\r\n <mat-form-field>\r\n <mat-label>{{'Tags'|translate}}</mat-label>\r\n <mat-chip-grid #chips>\r\n @for (tag of form.value.tags; track tag.name) {\r\n <mat-chip-row [removable]=\"true\" (removed)=\"removeTag(tag)\">\r\n {{tag.name}}\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip-row>\r\n }\r\n </mat-chip-grid>\r\n <input [matChipInputFor]=\"chips\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\r\n [matChipInputAddOnBlur]=\"true\"\r\n (matChipInputTokenEnd)=\"addTag($event)\">\r\n </mat-form-field>\r\n </div>\r\n</ng-template>\r\n<!---->\r\n<ng-template #keyboardTmpl>\r\n <dl class=\"keys mat-body-2\">\r\n <dt>Alt+n</dt>\r\n <dd>{{'AltNHelp'|translate}}</dd>\r\n <dt>Ctrl+s</dt>\r\n <dd>{{'CtrlSHelp'|translate}}</dd>\r\n <dt>Alt+s</dt>\r\n <dd>{{'AltSHelp'|translate}}</dd>\r\n <dt>Alt+q</dt>\r\n <dd>{{'AltQHelp'|translate}}</dd>\r\n <dt>Alt+a</dt>\r\n <dd>{{'AltAHelp'|translate}}</dd>\r\n <dt>Alt+h</dt>\r\n <dd>{{'AltHHelp'|translate}}</dd>\r\n <dt>Ctrl+.</dt>\r\n <dd>{{'CtrlDotHelp'|translate}}</dd>\r\n </dl>\r\n</ng-template>\r\n<!--notifications-->\r\n<ng-template #notificationsTmpl>\r\n <div [formGroup]=\"form.controls.notifications\" class=\"column\">\r\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\r\n <br />\r\n <mat-checkbox formControlName=\"myDocumentStateChange\">{{'MyStateChange' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"anyDocumentStateChange\">{{'AnyStateChange' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"commentMyDocument\">{{'CommentMyDocument' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"commentAnyDocument\">{{'CommentAnyDocument' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"likes\" [style.display]=\"voting?'':'none'\">{{'LikedComment' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"tagged\">{{'TaggedInComments' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"upcomingEvents\">{{'UpcomingEvents' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"cubeAnomaly\">{{'CubeAnomaly' | translate}}</mat-checkbox>\r\n <div formGroupName=\"extra\" class=\"column\"> \r\n @for(n of profile.notifications; track n.name) {\r\n <mat-checkbox [formControlName]=\"n.name\">{{n.title}}</mat-checkbox>\r\n }\r\n </div>\r\n <div class=\"row\">\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button type=\"button\" (click)=\"toggleSound()\" [disabled]=\"!form.value.notifications.active\" [bizdocTooltip]=\"(form.value.notifications.sound ? 'SoundOn': 'SoundOff')|translate\"><mat-icon>{{form.value.notifications.sound ? 'volume_up' : 'volume_off'}}</mat-icon></button>\r\n </div>\r\n </div>\r\n</ng-template>\r\n<!--emails-->\r\n<ng-template #emailsTmpl>\r\n <div [formGroup]=\"form.controls.emails\" class=\"column\">\r\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\r\n <br />\r\n <mat-checkbox formControlName=\"mail\">{{'Mails' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"chat\">{{'Conversations' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"notifications\">{{'EmailNotifications' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"events\">{{'AlarmEvents' | translate}}</mat-checkbox>\r\n </div>\r\n</ng-template>\r\n<!--ooo-->\r\n<ng-template #oooTmpl>\r\n <div [formGroup]=\"form.controls.outOfOffice\" class=\"column\">\r\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\r\n <br />\r\n <mat-form-field class=\"flex\">\r\n <input matInput [formControl]=\"oooId\" type=\"search\" [matAutocomplete]=\"sauto\" #substitueInput\r\n [placeholder]=\"'Associate' | translate\" [required]=\"form.value.outOfOffice.active\" />\r\n <mat-autocomplete #sauto=\"matAutocomplete\" [displayWith]=\"display\"\r\n (optionSelected)=\"oooSelected($event)\">\r\n @for (u of susers$ | async; track u.id) {\r\n <mat-option [value]=\"u\">\r\n <span>{{u.name}}</span>\r\n </mat-option>\r\n }\r\n </mat-autocomplete>\r\n <mat-hint>{{'OutOfOfficeTip' | translate}}</mat-hint>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'Dates'|translate}}</mat-label>\r\n <mat-date-range-input [rangePicker]=\"dates\">\r\n <input matStartDate formControlName=\"from\" [placeholder]=\"'From'|translate\" [min]=\"today\">\r\n <input matEndDate formControlName=\"to\" [placeholder]=\"'To'|translate\">\r\n </mat-date-range-input>\r\n <mat-datepicker-toggle matSuffix [for]=\"dates\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #dates [touchUi]=\"isMobile\"></mat-date-range-picker>\r\n </mat-form-field>\r\n </div>\r\n</ng-template>\r\n<!--grantAccess-->\r\n<ng-template #grantAccessTmpl>\r\n <div [formGroup]=\"form.controls.grantAccess\" class=\"column\">\r\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\r\n <br />\r\n <mat-form-field>\r\n <mat-label>{{'Associates'| translate}}</mat-label>\r\n <mat-chip-grid #grantList [attr.aria-label]=\"\" [disabled]=\"!form.value.grantAccess.active\">\r\n @for (u of form.value.grantAccess.users || []; track u.id) {\r\n <mat-chip-row (removed)=\"removeGrant(u)\">\r\n {{u | userName | async}}\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip-row>\r\n }\r\n </mat-chip-grid>\r\n <input [formControl]=\"grantUserIds\"\r\n #grantInput\r\n [matAutocomplete]=\"grantAuto\"\r\n [matChipInputFor]=\"grantList\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\">\r\n <mat-autocomplete #grantAuto=\"matAutocomplete\" (optionSelected)=\"addGrant(grantInput, $event)\">\r\n @for (u of gusers$ | async; track u.id) {\r\n <mat-option [value]=\"u.id\">\r\n {{u.name}}\r\n @if (u.email) {\r\n <span>&nbsp; - {{u.email}}</span>\r\n }\r\n </mat-option>\r\n }\r\n </mat-autocomplete>\r\n <mat-hint>{{'GrantTip' | translate}}</mat-hint>\r\n </mat-form-field>\r\n </div>\r\n</ng-template>\r\n", styles: [":host{max-width:80vw;min-width:420px}.footer{align-items:center}.profile-name{margin:8px}.theme{height:22px!important;width:22px!important;-moz-border-radius:13px 13px!important;-webkit-border-radius:13px 13px!important;border-radius:13px!important;margin:4px!important}.theme.active.dark{border:2px solid #f4f4f4}.keys{padding:8px}.keys dt{width:72px;float:inline-start;clear:both;font-variant-caps:all-small-caps}.keys dd{float:inline-end;font-size:small;margin:0}.separator{height:280px;width:1px;background-color:var(--mat-sys-outline)}form{padding:20px 8px 0;min-width:320px}\n"] }]
3894
+ }], ctorParameters: () => [{ type: PromptService }, { type: GuideService }, { type: HubService }, { type: i2$2.MatDialog }, { type: i1$2.FormBuilder }, { type: AccountService }, { type: PromptService }, { type: SessionService }, { type: Popup }, { type: undefined, decorators: [{
3881
3895
  type: Inject,
3882
3896
  args: [BIZDOC_CONFIG]
3883
- }] }], propDecorators: { substitueInput: [{
3897
+ }] }], propDecorators: { keyboard: [{
3898
+ type: ViewChild,
3899
+ args: ['keyboardTmpl']
3900
+ }], substitueInput: [{
3884
3901
  type: ViewChild,
3885
3902
  args: ['substitueInput', { read: MatInput }]
3886
3903
  }], grantInput: [{
@@ -5602,6 +5619,7 @@ let ChecklistControlDesigner = class ChecklistControlDesigner extends OptionsCon
5602
5619
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: ChecklistControlDesigner, deps: [{ token: SystemService }, { token: i1$2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
5603
5620
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.6", type: ChecklistControlDesigner, isStandalone: false, selector: "ng-component", usesInheritance: true, ngImport: i0, template: `
5604
5621
  <form autocomplete="off" [formGroup]="form" class="column">
5622
+ <bizdoc-localized-string [placeholder]="'Label'|translate" required formControlName="label"></bizdoc-localized-string>
5605
5623
  <mat-checkbox formControlName="multiple">{{'Multiple'|translate}}</mat-checkbox>
5606
5624
  @if (datatypes) {
5607
5625
  <mat-form-field>
@@ -5628,7 +5646,7 @@ let ChecklistControlDesigner = class ChecklistControlDesigner extends OptionsCon
5628
5646
  </mat-form-field>
5629
5647
  }
5630
5648
  <bizdoc-design-options [form]="form" [model]="model"></bizdoc-design-options>
5631
- </form>`, isInline: true, dependencies: [{ kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i2$6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i2$6.MatOptgroup, selector: "mat-optgroup", inputs: ["label", "disabled"], exportAs: ["matOptgroup"] }, { kind: "component", type: i3$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3$1.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3$1.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: i3$1.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i2$7.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: ControlOptionsComponent, selector: "bizdoc-design-options", inputs: ["form", "model"] }, { kind: "pipe", type: ArraySortPipe, name: "sort" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
5649
+ </form>`, isInline: true, dependencies: [{ kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i2$6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i2$6.MatOptgroup, selector: "mat-optgroup", inputs: ["label", "disabled"], exportAs: ["matOptgroup"] }, { kind: "component", type: i3$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3$1.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3$1.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: i3$1.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i2$7.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: LocalizedStringComponent, selector: "bizdoc-localized-string", inputs: ["class", "floatLabel", "value", "placeholder", "required", "disabled", "maxlength"] }, { kind: "component", type: ControlOptionsComponent, selector: "bizdoc-design-options", inputs: ["form", "model"] }, { kind: "pipe", type: ArraySortPipe, name: "sort" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
5632
5650
  };
5633
5651
  ChecklistControlDesigner = __decorate([
5634
5652
  BizDoc({ selector: 'checklist-control-designer' })
@@ -5639,6 +5657,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
5639
5657
  standalone: false,
5640
5658
  template: `
5641
5659
  <form autocomplete="off" [formGroup]="form" class="column">
5660
+ <bizdoc-localized-string [placeholder]="'Label'|translate" required formControlName="label"></bizdoc-localized-string>
5642
5661
  <mat-checkbox formControlName="multiple">{{'Multiple'|translate}}</mat-checkbox>
5643
5662
  @if (datatypes) {
5644
5663
  <mat-form-field>
@@ -7001,7 +7020,7 @@ class MailboxService {
7001
7020
  reportProgress: true
7002
7021
  });
7003
7022
  }
7004
- removeattachment(recipientId, fileId) {
7023
+ removeAttachment(recipientId, fileId) {
7005
7024
  return this._http.delete(`/api/attachments/${recipientId}/${fileId}`);
7006
7025
  }
7007
7026
  read(id, read, folderId, received) {
@@ -7080,7 +7099,7 @@ class MailboxService {
7080
7099
  };
7081
7100
  });
7082
7101
  }
7083
- upload(recipientId, formId, version, files, options) {
7102
+ uploadAttachment(recipientId, formId, version, files, options) {
7084
7103
  const fd = new FormData();
7085
7104
  if (isArray(files))
7086
7105
  files.forEach(f => fd.append(f.name, f));
@@ -8079,7 +8098,7 @@ class BrowseFilterComponent {
8079
8098
  this._destroy = new Subject();
8080
8099
  this.states = _session.profile.states;
8081
8100
  this.forms = _session.profile.forms;
8082
- this.tags = _session.profile.options.tags;
8101
+ this.tags = _session.tags;
8083
8102
  }
8084
8103
  ngOnInit() {
8085
8104
  if (this.folderId) {
@@ -8120,7 +8139,8 @@ class BrowseFilterComponent {
8120
8139
  this.valuesChange.emit(value);
8121
8140
  }
8122
8141
  toggleTag(evt) {
8123
- this.form.controls.tag.setValue(this.form.controls.tag.value !== evt.value ? evt.value : null);
8142
+ const tag = evt.value?.name;
8143
+ this.form.controls.tag.setValue(this.form.controls.tag.value !== tag ? tag : null);
8124
8144
  }
8125
8145
  displayFn(item) {
8126
8146
  return item ? item.name : undefined;
@@ -8144,11 +8164,11 @@ class BrowseFilterComponent {
8144
8164
  this._destroy.complete();
8145
8165
  }
8146
8166
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: BrowseFilterComponent, deps: [{ token: i1$2.FormBuilder }, { token: SessionService }, { token: i0.ChangeDetectorRef }, { token: MailboxService }, { token: AccountService }, { token: BIZDOC_CONFIG }], target: i0.ɵɵFactoryTarget.Component }); }
8147
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.6", type: BrowseFilterComponent, isStandalone: false, selector: "bizdoc-browse-filter", inputs: { values: "values", folderId: "folderId", exclude: "exclude" }, outputs: { valuesChange: "valuesChange" }, viewQueries: [{ propertyName: "chips", first: true, predicate: MatChipListbox, descendants: true, static: true }, { propertyName: "containsEl", first: true, predicate: ["contains"], descendants: true, read: ElementRef, static: true }, { propertyName: "senderEl", first: true, predicate: ["sender"], descendants: true, read: ElementRef, static: true }], ngImport: i0, template: "<form [formGroup]=\"form\" class=\"column gap\" autocomplete=\"off\">\r\n @if (!exclude || exclude.indexOf('contains') < 0) {\r\n <mat-form-field subscriptSizing=\"dynamic\">\r\n <input matInput formControlName=\"contains\" placeholder=\"{{'Contains' | translate}}\" #contains>\r\n @if (form.value.contains) {\r\n <button matSuffix mat-icon-button aria-label=\"\" (click)=\"form.controls.contains.setValue(null)\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n }\r\n <mat-form-field subscriptSizing=\"dynamic\">\r\n <input matInput [matAutocomplete]=\"senders\" [placeholder]=\"'Sender' | translate\" [formControl]=\"sendername\" #sender />\r\n <mat-autocomplete #senders [displayWith]=\"displayValue\" (optionSelected)=\"senderSelected($event)\">\r\n @for (u of senders$ | async; track u) {\r\n <mat-option [value]=\"u\">\r\n <span>{{u.name}}</span>\r\n </mat-option>\r\n }\r\n </mat-autocomplete>\r\n @if (sendername.value) {\r\n <button matSuffix mat-icon-button (click)=\"clearSender()\"><mat-icon>clear</mat-icon></button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field subscriptSizing=\"dynamic\">\r\n <mat-select [placeholder]=\"'Status'|translate\" formControlName=\"state\">\r\n <mat-option>\r\n {{ 'All' | translate }}\r\n </mat-option>\r\n @for (s of states; track s) {\r\n <mat-option [value]=\"s.name\">\r\n {{s.title}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field subscriptSizing=\"dynamic\">\r\n <mat-select [placeholder]=\"'Form' | translate\" formControlName=\"form\">\r\n <mat-option>\r\n {{ 'All' | translate }}\r\n </mat-option>\r\n @for (f of forms; track f) {\r\n <mat-option [value]=\"f.name\">{{f.title}}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-chip-listbox id=\"tags\" (change)=\"toggleTag($event)\">\r\n @for (tag of tags; track tag) {\r\n <mat-chip-option color=\"accent\">\r\n {{tag}}\r\n </mat-chip-option>\r\n }\r\n </mat-chip-listbox>\r\n @if (filters) {\r\n <bizdoc-cube-filter class=\"cube-filter\"\r\n [cube]=\"filters.cube\"\r\n [include]=\"filters.axes\"\r\n [axes]=\"values\"\r\n [autofocus]=\"false\"\r\n (axesChange)=\"axesChange($event)\"></bizdoc-cube-filter>\r\n }\r\n</form>\r\n", styles: [".cube-filter ::ng-deep form{padding:0}\n"], dependencies: [{ kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i4.MatChipListbox, selector: "mat-chip-listbox", inputs: ["multiple", "aria-orientation", "selectable", "compareWith", "required", "hideSingleSelectionIndicator", "value"], outputs: ["change"] }, { kind: "component", type: i4.MatChipOption, selector: "mat-basic-chip-option, [mat-basic-chip-option], mat-chip-option, [mat-chip-option]", inputs: ["selectable", "selected"], outputs: ["selectionChange"] }, { kind: "component", type: i2$6.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i2$6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i2$6.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i3$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3$1.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i3$1.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i8.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: i3$3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: CubeFilterComponent, selector: "bizdoc-cube-filter", inputs: ["cube", "exclude", "include", "axes", "autofocus"], outputs: ["axesChange"] }, { kind: "pipe", type: i9.AsyncPipe, name: "async" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
8167
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.6", type: BrowseFilterComponent, isStandalone: false, selector: "bizdoc-browse-filter", inputs: { values: "values", folderId: "folderId", exclude: "exclude" }, outputs: { valuesChange: "valuesChange" }, viewQueries: [{ propertyName: "chips", first: true, predicate: MatChipListbox, descendants: true, static: true }, { propertyName: "containsEl", first: true, predicate: ["contains"], descendants: true, read: ElementRef, static: true }, { propertyName: "senderEl", first: true, predicate: ["sender"], descendants: true, read: ElementRef, static: true }], ngImport: i0, template: "<form [formGroup]=\"form\" class=\"column gap\" autocomplete=\"off\">\r\n @if (!exclude || exclude.indexOf('contains') < 0) {\r\n <mat-form-field subscriptSizing=\"dynamic\">\r\n <input matInput formControlName=\"contains\" placeholder=\"{{'Contains' | translate}}\" #contains>\r\n @if (form.value.contains) {\r\n <button matSuffix mat-icon-button aria-label=\"\" (click)=\"form.controls.contains.setValue(null)\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n }\r\n <mat-form-field subscriptSizing=\"dynamic\">\r\n <input matInput [matAutocomplete]=\"senders\" [placeholder]=\"'Sender' | translate\" [formControl]=\"sendername\" #sender />\r\n <mat-autocomplete #senders [displayWith]=\"displayValue\" (optionSelected)=\"senderSelected($event)\">\r\n @for (u of senders$ | async; track u) {\r\n <mat-option [value]=\"u\">\r\n <span>{{u.name}}</span>\r\n </mat-option>\r\n }\r\n </mat-autocomplete>\r\n @if (sendername.value) {\r\n <button matSuffix mat-icon-button (click)=\"clearSender()\"><mat-icon>clear</mat-icon></button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field subscriptSizing=\"dynamic\">\r\n <mat-select [placeholder]=\"'Status'|translate\" formControlName=\"state\">\r\n <mat-option>\r\n {{ 'All' | translate }}\r\n </mat-option>\r\n @for (s of states; track s) {\r\n <mat-option [value]=\"s.name\">\r\n {{s.title}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field subscriptSizing=\"dynamic\">\r\n <mat-select [placeholder]=\"'Form' | translate\" formControlName=\"form\">\r\n <mat-option>\r\n {{ 'All' | translate }}\r\n </mat-option>\r\n @for (f of forms; track f) {\r\n <mat-option [value]=\"f.name\">{{f.title}}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-chip-listbox id=\"tags\" (change)=\"toggleTag($event)\">\r\n @for (tag of tags; track tag.name) {\r\n <mat-chip-option [value]=\"tag\">\r\n @if(tag.icon) {\r\n <mat-icon matChipAvatar>{{tag.icon}}</mat-icon>\r\n }\r\n {{tag.title || tag.name}}\r\n </mat-chip-option>\r\n }\r\n </mat-chip-listbox>\r\n @if (filters) {\r\n <bizdoc-cube-filter class=\"cube-filter\"\r\n [cube]=\"filters.cube\"\r\n [include]=\"filters.axes\"\r\n [axes]=\"values\"\r\n [autofocus]=\"false\"\r\n (axesChange)=\"axesChange($event)\"></bizdoc-cube-filter>\r\n }\r\n</form>\r\n", styles: [".cube-filter ::ng-deep form{padding:0}\n"], dependencies: [{ kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i4.MatChipAvatar, selector: "mat-chip-avatar, [matChipAvatar]" }, { kind: "component", type: i4.MatChipListbox, selector: "mat-chip-listbox", inputs: ["multiple", "aria-orientation", "selectable", "compareWith", "required", "hideSingleSelectionIndicator", "value"], outputs: ["change"] }, { kind: "component", type: i4.MatChipOption, selector: "mat-basic-chip-option, [mat-basic-chip-option], mat-chip-option, [mat-chip-option]", inputs: ["selectable", "selected"], outputs: ["selectionChange"] }, { kind: "component", type: i2$6.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i2$6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i2$6.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i3$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3$1.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i3$1.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i8.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: i3$3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: CubeFilterComponent, selector: "bizdoc-cube-filter", inputs: ["cube", "exclude", "include", "axes", "autofocus"], outputs: ["axesChange"] }, { kind: "pipe", type: i9.AsyncPipe, name: "async" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
8148
8168
  }
8149
8169
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: BrowseFilterComponent, decorators: [{
8150
8170
  type: Component,
8151
- args: [{ standalone: false, selector: 'bizdoc-browse-filter', template: "<form [formGroup]=\"form\" class=\"column gap\" autocomplete=\"off\">\r\n @if (!exclude || exclude.indexOf('contains') < 0) {\r\n <mat-form-field subscriptSizing=\"dynamic\">\r\n <input matInput formControlName=\"contains\" placeholder=\"{{'Contains' | translate}}\" #contains>\r\n @if (form.value.contains) {\r\n <button matSuffix mat-icon-button aria-label=\"\" (click)=\"form.controls.contains.setValue(null)\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n }\r\n <mat-form-field subscriptSizing=\"dynamic\">\r\n <input matInput [matAutocomplete]=\"senders\" [placeholder]=\"'Sender' | translate\" [formControl]=\"sendername\" #sender />\r\n <mat-autocomplete #senders [displayWith]=\"displayValue\" (optionSelected)=\"senderSelected($event)\">\r\n @for (u of senders$ | async; track u) {\r\n <mat-option [value]=\"u\">\r\n <span>{{u.name}}</span>\r\n </mat-option>\r\n }\r\n </mat-autocomplete>\r\n @if (sendername.value) {\r\n <button matSuffix mat-icon-button (click)=\"clearSender()\"><mat-icon>clear</mat-icon></button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field subscriptSizing=\"dynamic\">\r\n <mat-select [placeholder]=\"'Status'|translate\" formControlName=\"state\">\r\n <mat-option>\r\n {{ 'All' | translate }}\r\n </mat-option>\r\n @for (s of states; track s) {\r\n <mat-option [value]=\"s.name\">\r\n {{s.title}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field subscriptSizing=\"dynamic\">\r\n <mat-select [placeholder]=\"'Form' | translate\" formControlName=\"form\">\r\n <mat-option>\r\n {{ 'All' | translate }}\r\n </mat-option>\r\n @for (f of forms; track f) {\r\n <mat-option [value]=\"f.name\">{{f.title}}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-chip-listbox id=\"tags\" (change)=\"toggleTag($event)\">\r\n @for (tag of tags; track tag) {\r\n <mat-chip-option color=\"accent\">\r\n {{tag}}\r\n </mat-chip-option>\r\n }\r\n </mat-chip-listbox>\r\n @if (filters) {\r\n <bizdoc-cube-filter class=\"cube-filter\"\r\n [cube]=\"filters.cube\"\r\n [include]=\"filters.axes\"\r\n [axes]=\"values\"\r\n [autofocus]=\"false\"\r\n (axesChange)=\"axesChange($event)\"></bizdoc-cube-filter>\r\n }\r\n</form>\r\n", styles: [".cube-filter ::ng-deep form{padding:0}\n"] }]
8171
+ args: [{ standalone: false, selector: 'bizdoc-browse-filter', template: "<form [formGroup]=\"form\" class=\"column gap\" autocomplete=\"off\">\r\n @if (!exclude || exclude.indexOf('contains') < 0) {\r\n <mat-form-field subscriptSizing=\"dynamic\">\r\n <input matInput formControlName=\"contains\" placeholder=\"{{'Contains' | translate}}\" #contains>\r\n @if (form.value.contains) {\r\n <button matSuffix mat-icon-button aria-label=\"\" (click)=\"form.controls.contains.setValue(null)\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n }\r\n <mat-form-field subscriptSizing=\"dynamic\">\r\n <input matInput [matAutocomplete]=\"senders\" [placeholder]=\"'Sender' | translate\" [formControl]=\"sendername\" #sender />\r\n <mat-autocomplete #senders [displayWith]=\"displayValue\" (optionSelected)=\"senderSelected($event)\">\r\n @for (u of senders$ | async; track u) {\r\n <mat-option [value]=\"u\">\r\n <span>{{u.name}}</span>\r\n </mat-option>\r\n }\r\n </mat-autocomplete>\r\n @if (sendername.value) {\r\n <button matSuffix mat-icon-button (click)=\"clearSender()\"><mat-icon>clear</mat-icon></button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field subscriptSizing=\"dynamic\">\r\n <mat-select [placeholder]=\"'Status'|translate\" formControlName=\"state\">\r\n <mat-option>\r\n {{ 'All' | translate }}\r\n </mat-option>\r\n @for (s of states; track s) {\r\n <mat-option [value]=\"s.name\">\r\n {{s.title}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field subscriptSizing=\"dynamic\">\r\n <mat-select [placeholder]=\"'Form' | translate\" formControlName=\"form\">\r\n <mat-option>\r\n {{ 'All' | translate }}\r\n </mat-option>\r\n @for (f of forms; track f) {\r\n <mat-option [value]=\"f.name\">{{f.title}}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-chip-listbox id=\"tags\" (change)=\"toggleTag($event)\">\r\n @for (tag of tags; track tag.name) {\r\n <mat-chip-option [value]=\"tag\">\r\n @if(tag.icon) {\r\n <mat-icon matChipAvatar>{{tag.icon}}</mat-icon>\r\n }\r\n {{tag.title || tag.name}}\r\n </mat-chip-option>\r\n }\r\n </mat-chip-listbox>\r\n @if (filters) {\r\n <bizdoc-cube-filter class=\"cube-filter\"\r\n [cube]=\"filters.cube\"\r\n [include]=\"filters.axes\"\r\n [axes]=\"values\"\r\n [autofocus]=\"false\"\r\n (axesChange)=\"axesChange($event)\"></bizdoc-cube-filter>\r\n }\r\n</form>\r\n", styles: [".cube-filter ::ng-deep form{padding:0}\n"] }]
8152
8172
  }], ctorParameters: () => [{ type: i1$2.FormBuilder }, { type: SessionService }, { type: i0.ChangeDetectorRef }, { type: MailboxService }, { type: AccountService }, { type: undefined, decorators: [{
8153
8173
  type: Inject,
8154
8174
  args: [BIZDOC_CONFIG]
@@ -8813,9 +8833,8 @@ class AttachmentsComponent {
8813
8833
  this.ngOnChanges();
8814
8834
  }
8815
8835
  discard(item) {
8816
- const task = () => this._mailbox.removeattachment(this.model.id, item.id).subscribe({
8836
+ const task = () => this._mailbox.removeAttachment(this.model.id, item.id).subscribe({
8817
8837
  next: () => {
8818
- //item.deleted = true;
8819
8838
  this.model.attachments.remove(item);
8820
8839
  this.ngOnChanges();
8821
8840
  }, error: () => this._sb.error()
@@ -8902,6 +8921,8 @@ class ExpandedItemComponent {
8902
8921
  this._destroy = new Subject();
8903
8922
  }
8904
8923
  ngOnInit() {
8924
+ this.tags = this.model.tags?.map(v => this._session.tags.find(t => t.name === v)).
8925
+ filter(e => e !== undefined);
8905
8926
  this._messaging.comment$.pipe(takeUntil(this._destroy)).
8906
8927
  subscribe(e => {
8907
8928
  if (e.id === this.model.id && (e.model.byId || e.model.userId) !== this._session.userId) {
@@ -9170,11 +9191,11 @@ class ExpandedItemComponent {
9170
9191
  this._typingTask && clearTimeout(this._typingTask);
9171
9192
  }
9172
9193
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: ExpandedItemComponent, deps: [{ token: PromptService }, { token: ChatInfo }, { token: AccountService }, { token: MailboxService }, { token: SessionService }, { token: i7$2.Directionality }, { token: i2$2.MatDialog }, { token: TranslateService }, { token: HubService }], target: i0.ɵɵFactoryTarget.Component }); }
9173
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.6", type: ExpandedItemComponent, isStandalone: false, selector: "bizdoc-expanded-item", inputs: { model: "model" }, outputs: { sent: "sent" }, ngImport: i0, template: "@if (model.summary) {\r\n <div class=\"summary\" [innerHTML]=\"model.summary\">\r\n </div>\r\n}\r\n<div>\r\n <bizdoc-attachments [model]=\"model\"></bizdoc-attachments>\r\n <bizdoc-events [model]=\"model\"></bizdoc-events>\r\n</div>\r\n<div class=\"row\">\r\n <span class=\"note\" [innerHTML]=\"note | sanitizeHtml\" (click)=\"chat($event)\"></span>\r\n <span class=\"divider\"></span>\r\n @for (a of actions; track a) {\r\n @if (a.icon) {\r\n <button mat-icon-button (click)=\"send(a.name)\" [bizdocTooltip]=\"a.title\" class=\"tool\">\r\n <mat-icon>{{a.icon}}</mat-icon>\r\n </button>\r\n }\r\n }\r\n</div>\r\n<div class=\"row\">\r\n <div class=\"mat-small row\">\r\n <span>{{model.stateId | state : 'past' }}</span>\r\n &nbsp;\r\n <span class=\"time\" [bizdocTooltip]=\"model.received | amCalendar\">{{model.received | amTimeAgo}}</span>\r\n &nbsp;\r\n <span [innerHTML]=\"sender | sanitizeHtml\" (click)=\"chat($event)\" class=\"who\"></span>&nbsp;\r\n <span [innerHTML]=\"awaiting | sanitizeHtml\" (click)=\"chat($event)\" class=\"who\"></span>\r\n </div>\r\n <span class=\"divider\"></span>\r\n <div class=\"center center\">\r\n @if (typing) {\r\n <span class=\"mat-small\">{{'SomeoneTyping'|translate}}</span>\r\n }\r\n @if (model.comments.length) {\r\n <div class=\"mat-small\">\r\n @if (!newComments) {\r\n <span>{{model.comments.length > 1 ? ('CommentsCount' | translate : model.comments.length) : 'OneComment' | translate }}</span>\r\n } @else {\r\n <span [innerHTML]=\"'NewCommentsCount' | translate : model.comments.length : newComments | sanitizeHtml\"></span>\r\n }\r\n </div>\r\n }\r\n </div>\r\n @if (model.tags) {\r\n <mat-chip-set>\r\n @for (tag of model.tags; track tag) {\r\n <mat-chip [disabled]=\"true\">{{tag}}</mat-chip>\r\n }\r\n </mat-chip-set>\r\n }\r\n</div>\r\n", styles: [":host{display:flex;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column;overflow:hidden;padding-right:24px;padding-left:24px;text-align:start}.row{align-items:center;min-height:27px;flex-direction:row;box-sizing:border-box;display:flex}.note{font-weight:200}.time{text-transform:uppercase}.summary{max-width:fit-content}\n"], dependencies: [{ kind: "component", type: i4.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["role", "id", "aria-label", "aria-description", "value", "color", "removable", "highlighted", "disableRipple", "disabled"], outputs: ["removed", "destroyed"], exportAs: ["matChip"] }, { kind: "component", type: i4.MatChipSet, selector: "mat-chip-set", inputs: ["disabled", "role", "tabIndex"] }, { 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: AttachmentsComponent, selector: "bizdoc-attachments", inputs: ["model", "viewedIndicator", "includeDeleted"] }, { kind: "component", type: DocumentEventsComponent, selector: "bizdoc-events", inputs: ["model"] }, { kind: "directive", type: TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "pipe", type: CalendarPipe, name: "amCalendar" }, { kind: "pipe", type: TimeAgoPipe, name: "amTimeAgo" }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: SanitizeHtmlPipe, name: "sanitizeHtml" }, { kind: "pipe", type: StatePipe, name: "state" }] }); }
9194
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.6", type: ExpandedItemComponent, isStandalone: false, selector: "bizdoc-expanded-item", inputs: { model: "model" }, outputs: { sent: "sent" }, ngImport: i0, template: "@if (model.summary) {\r\n<div class=\"summary\" [innerHTML]=\"model.summary\">\r\n</div>\r\n}\r\n<div>\r\n <bizdoc-attachments [model]=\"model\"></bizdoc-attachments>\r\n <bizdoc-events [model]=\"model\"></bizdoc-events>\r\n</div>\r\n<div class=\"row\">\r\n <span class=\"note\" [innerHTML]=\"note | sanitizeHtml\" (click)=\"chat($event)\"></span>\r\n <span class=\"divider\"></span>\r\n @for (a of actions; track a) {\r\n @if (a.icon) {\r\n <button mat-icon-button (click)=\"send(a.name)\" [bizdocTooltip]=\"a.title\" class=\"tool\">\r\n <mat-icon>{{a.icon}}</mat-icon>\r\n </button>\r\n }\r\n }\r\n</div>\r\n<div class=\"row\">\r\n <div class=\"mat-small row\">\r\n <span>{{model.stateId | state : 'past' }}</span>\r\n &nbsp;\r\n <span class=\"time\" [bizdocTooltip]=\"model.received | amCalendar\">{{model.received | amTimeAgo}}</span>\r\n &nbsp;\r\n <span [innerHTML]=\"sender | sanitizeHtml\" (click)=\"chat($event)\" class=\"who\"></span>&nbsp;\r\n <span [innerHTML]=\"awaiting | sanitizeHtml\" (click)=\"chat($event)\" class=\"who\"></span>\r\n </div>\r\n <span class=\"divider\"></span>\r\n <div class=\"center center\">\r\n @if (typing) {\r\n <span class=\"mat-small\">{{'SomeoneTyping'|translate}}</span>\r\n }\r\n @if (model.comments.length) {\r\n <div class=\"mat-small\">\r\n @if (!newComments) {\r\n <span>{{model.comments.length > 1 ? ('CommentsCount' | translate : model.comments.length) : 'OneComment' | translate }}</span>\r\n } @else {\r\n <span [innerHTML]=\"'NewCommentsCount' | translate : model.comments.length : newComments | sanitizeHtml\"></span>\r\n }\r\n </div>\r\n }\r\n </div>\r\n @if (tags) {\r\n <mat-chip-set>\r\n @for (tag of tags; track tag.name) {\r\n <mat-chip [disableRipple]=\"true\" [style.backgroundColor]=\"tag.backgroundColor\">\r\n @if(tag.icon) {\r\n <mat-icon matChipAvatar [style.color]=\"tag.color\">{{tag.icon}}</mat-icon>\r\n }\r\n <span [style.color]=\"tag.color\">{{tag.title || tag.name}}</span>\r\n </mat-chip>\r\n }\r\n </mat-chip-set>\r\n }\r\n</div>\r\n", styles: [":host{display:flex;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column;overflow:hidden;padding-right:24px;padding-left:24px;text-align:start}.row{align-items:center;min-height:27px;flex-direction:row;box-sizing:border-box;display:flex}.note{font-weight:200}.time{text-transform:uppercase}.summary{max-width:fit-content}\n"], dependencies: [{ kind: "component", type: i4.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["role", "id", "aria-label", "aria-description", "value", "color", "removable", "highlighted", "disableRipple", "disabled"], outputs: ["removed", "destroyed"], exportAs: ["matChip"] }, { kind: "directive", type: i4.MatChipAvatar, selector: "mat-chip-avatar, [matChipAvatar]" }, { kind: "component", type: i4.MatChipSet, selector: "mat-chip-set", inputs: ["disabled", "role", "tabIndex"] }, { 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: AttachmentsComponent, selector: "bizdoc-attachments", inputs: ["model", "viewedIndicator", "includeDeleted"] }, { kind: "component", type: DocumentEventsComponent, selector: "bizdoc-events", inputs: ["model"] }, { kind: "directive", type: TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "pipe", type: CalendarPipe, name: "amCalendar" }, { kind: "pipe", type: TimeAgoPipe, name: "amTimeAgo" }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: SanitizeHtmlPipe, name: "sanitizeHtml" }, { kind: "pipe", type: StatePipe, name: "state" }] }); }
9174
9195
  }
9175
9196
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: ExpandedItemComponent, decorators: [{
9176
9197
  type: Component,
9177
- args: [{ standalone: false, selector: 'bizdoc-expanded-item', template: "@if (model.summary) {\r\n <div class=\"summary\" [innerHTML]=\"model.summary\">\r\n </div>\r\n}\r\n<div>\r\n <bizdoc-attachments [model]=\"model\"></bizdoc-attachments>\r\n <bizdoc-events [model]=\"model\"></bizdoc-events>\r\n</div>\r\n<div class=\"row\">\r\n <span class=\"note\" [innerHTML]=\"note | sanitizeHtml\" (click)=\"chat($event)\"></span>\r\n <span class=\"divider\"></span>\r\n @for (a of actions; track a) {\r\n @if (a.icon) {\r\n <button mat-icon-button (click)=\"send(a.name)\" [bizdocTooltip]=\"a.title\" class=\"tool\">\r\n <mat-icon>{{a.icon}}</mat-icon>\r\n </button>\r\n }\r\n }\r\n</div>\r\n<div class=\"row\">\r\n <div class=\"mat-small row\">\r\n <span>{{model.stateId | state : 'past' }}</span>\r\n &nbsp;\r\n <span class=\"time\" [bizdocTooltip]=\"model.received | amCalendar\">{{model.received | amTimeAgo}}</span>\r\n &nbsp;\r\n <span [innerHTML]=\"sender | sanitizeHtml\" (click)=\"chat($event)\" class=\"who\"></span>&nbsp;\r\n <span [innerHTML]=\"awaiting | sanitizeHtml\" (click)=\"chat($event)\" class=\"who\"></span>\r\n </div>\r\n <span class=\"divider\"></span>\r\n <div class=\"center center\">\r\n @if (typing) {\r\n <span class=\"mat-small\">{{'SomeoneTyping'|translate}}</span>\r\n }\r\n @if (model.comments.length) {\r\n <div class=\"mat-small\">\r\n @if (!newComments) {\r\n <span>{{model.comments.length > 1 ? ('CommentsCount' | translate : model.comments.length) : 'OneComment' | translate }}</span>\r\n } @else {\r\n <span [innerHTML]=\"'NewCommentsCount' | translate : model.comments.length : newComments | sanitizeHtml\"></span>\r\n }\r\n </div>\r\n }\r\n </div>\r\n @if (model.tags) {\r\n <mat-chip-set>\r\n @for (tag of model.tags; track tag) {\r\n <mat-chip [disabled]=\"true\">{{tag}}</mat-chip>\r\n }\r\n </mat-chip-set>\r\n }\r\n</div>\r\n", styles: [":host{display:flex;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column;overflow:hidden;padding-right:24px;padding-left:24px;text-align:start}.row{align-items:center;min-height:27px;flex-direction:row;box-sizing:border-box;display:flex}.note{font-weight:200}.time{text-transform:uppercase}.summary{max-width:fit-content}\n"] }]
9198
+ args: [{ standalone: false, selector: 'bizdoc-expanded-item', template: "@if (model.summary) {\r\n<div class=\"summary\" [innerHTML]=\"model.summary\">\r\n</div>\r\n}\r\n<div>\r\n <bizdoc-attachments [model]=\"model\"></bizdoc-attachments>\r\n <bizdoc-events [model]=\"model\"></bizdoc-events>\r\n</div>\r\n<div class=\"row\">\r\n <span class=\"note\" [innerHTML]=\"note | sanitizeHtml\" (click)=\"chat($event)\"></span>\r\n <span class=\"divider\"></span>\r\n @for (a of actions; track a) {\r\n @if (a.icon) {\r\n <button mat-icon-button (click)=\"send(a.name)\" [bizdocTooltip]=\"a.title\" class=\"tool\">\r\n <mat-icon>{{a.icon}}</mat-icon>\r\n </button>\r\n }\r\n }\r\n</div>\r\n<div class=\"row\">\r\n <div class=\"mat-small row\">\r\n <span>{{model.stateId | state : 'past' }}</span>\r\n &nbsp;\r\n <span class=\"time\" [bizdocTooltip]=\"model.received | amCalendar\">{{model.received | amTimeAgo}}</span>\r\n &nbsp;\r\n <span [innerHTML]=\"sender | sanitizeHtml\" (click)=\"chat($event)\" class=\"who\"></span>&nbsp;\r\n <span [innerHTML]=\"awaiting | sanitizeHtml\" (click)=\"chat($event)\" class=\"who\"></span>\r\n </div>\r\n <span class=\"divider\"></span>\r\n <div class=\"center center\">\r\n @if (typing) {\r\n <span class=\"mat-small\">{{'SomeoneTyping'|translate}}</span>\r\n }\r\n @if (model.comments.length) {\r\n <div class=\"mat-small\">\r\n @if (!newComments) {\r\n <span>{{model.comments.length > 1 ? ('CommentsCount' | translate : model.comments.length) : 'OneComment' | translate }}</span>\r\n } @else {\r\n <span [innerHTML]=\"'NewCommentsCount' | translate : model.comments.length : newComments | sanitizeHtml\"></span>\r\n }\r\n </div>\r\n }\r\n </div>\r\n @if (tags) {\r\n <mat-chip-set>\r\n @for (tag of tags; track tag.name) {\r\n <mat-chip [disableRipple]=\"true\" [style.backgroundColor]=\"tag.backgroundColor\">\r\n @if(tag.icon) {\r\n <mat-icon matChipAvatar [style.color]=\"tag.color\">{{tag.icon}}</mat-icon>\r\n }\r\n <span [style.color]=\"tag.color\">{{tag.title || tag.name}}</span>\r\n </mat-chip>\r\n }\r\n </mat-chip-set>\r\n }\r\n</div>\r\n", styles: [":host{display:flex;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column;overflow:hidden;padding-right:24px;padding-left:24px;text-align:start}.row{align-items:center;min-height:27px;flex-direction:row;box-sizing:border-box;display:flex}.note{font-weight:200}.time{text-transform:uppercase}.summary{max-width:fit-content}\n"] }]
9178
9199
  }], ctorParameters: () => [{ type: PromptService }, { type: ChatInfo }, { type: AccountService }, { type: MailboxService }, { type: SessionService }, { type: i7$2.Directionality }, { type: i2$2.MatDialog }, { type: TranslateService }, { type: HubService }], propDecorators: { model: [{
9179
9200
  type: Input
9180
9201
  }], sent: [{
@@ -9687,37 +9708,38 @@ class FormRef {
9687
9708
  }
9688
9709
 
9689
9710
  class TagsComponent {
9690
- constructor(data, _mailbox, session) {
9691
- this.data = data;
9711
+ constructor(_data, _mailbox, session) {
9712
+ this._data = _data;
9692
9713
  this._mailbox = _mailbox;
9693
9714
  this.control = new FormControl(null);
9694
9715
  this.separatorKeysCodes = [ENTER, COMMA, SEMICOLON];
9695
9716
  this._destroy = new Subject();
9696
- const options = session.profile.options.tags || [];
9697
- this._options = options.sort();
9698
- if (!data.tags)
9699
- data.tags = [];
9700
- else
9701
- data.tags = data.tags.filter(t => options.indexOf(t) > -1);
9702
- this.tags = data.tags;
9717
+ this._options = session.tags.filter(t => !t.system);
9718
+ if (!_data.tags)
9719
+ _data.tags = [];
9720
+ this.tags = _data.tags;
9703
9721
  }
9704
9722
  ngOnInit() {
9705
- this.options = this.control.valueChanges.pipe(startWith(''), takeUntil(this._destroy), map(v => v ? v.toLowerCase() : ''), map(v => this._options.filter(t => t.toLowerCase().indexOf(v) > -1 && this.data.tags.indexOf(t) < 0)));
9723
+ this.options = this.control.valueChanges.pipe(takeUntil(this._destroy), startWith(''), map(v => v ? v.toLowerCase() : ''), map(v => this._options.filter(t => (t.title || t.name).toLowerCase().indexOf(v) > -1 &&
9724
+ !this.tags.find(t => t.name === v))));
9706
9725
  }
9707
9726
  ngAfterViewInit() {
9708
9727
  setTimeout(() => this.inputElement.nativeElement.focus());
9709
9728
  }
9710
9729
  _save() {
9711
- this._mailbox.tags(this.data.id, this.data.tags).subscribe();
9730
+ this._mailbox.tags(this._data.id, this._data.tags.map(t => t.name)).subscribe();
9712
9731
  }
9713
9732
  add(event) {
9714
9733
  if (!this.auto.isOpen) {
9715
9734
  const { chipInput, value } = event;
9716
- if ((value || '').trim()) {
9717
- const tag = value.trim();
9718
- this.data.tags.push(tag);
9719
- if (this._options.indexOf(tag) < 0)
9735
+ let val = value?.trim();
9736
+ if (val && val.length) {
9737
+ let tag = this._options.find(t => t.name === val);
9738
+ if (!tag) {
9739
+ tag = { name: val, title: val };
9720
9740
  this._options.push(tag);
9741
+ }
9742
+ this.tags.push(tag);
9721
9743
  this._save();
9722
9744
  }
9723
9745
  chipInput?.clear();
@@ -9726,15 +9748,15 @@ class TagsComponent {
9726
9748
  }
9727
9749
  selected(evt) {
9728
9750
  const tag = evt.option.value;
9729
- if (this.data.tags.indexOf(tag) < 0) {
9730
- this.data.tags.push(tag);
9751
+ if (!this._data.tags.find(t => t.name === tag.name)) {
9752
+ this.tags.push(tag);
9731
9753
  this._save();
9732
9754
  }
9733
9755
  this.inputElement.nativeElement.value = '';
9734
9756
  this.control.setValue(null);
9735
9757
  }
9736
9758
  remove(tag) {
9737
- this.data.tags.remove(tag);
9759
+ this.tags.remove(tag);
9738
9760
  this._save();
9739
9761
  }
9740
9762
  ngOnDestroy() {
@@ -9742,11 +9764,11 @@ class TagsComponent {
9742
9764
  this._destroy.complete();
9743
9765
  }
9744
9766
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: TagsComponent, deps: [{ token: POPUP_DATA }, { token: MailboxService }, { token: SessionService }], target: i0.ɵɵFactoryTarget.Component }); }
9745
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.6", type: TagsComponent, isStandalone: false, selector: "ng-component", viewQueries: [{ propertyName: "inputElement", first: true, predicate: ["input"], descendants: true, static: true }, { propertyName: "auto", first: true, predicate: ["auto"], descendants: true, static: true }], ngImport: i0, template: "<mat-form-field floatLabel=\"never\" subscriptSizing=\"dynamic\">\r\n <mat-chip-grid #chipList [attr.aria-label]=\"'Tags'|translate\">\r\n @for (item of tags; track item) {\r\n <mat-chip\r\n [removable]=\"true\" (removed)=\"remove(item)\">\r\n {{item}}\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip>\r\n }\r\n </mat-chip-grid>\r\n <input [placeholder]=\"'TagsHint'|translate\"\r\n [matAutocomplete]=\"auto\"\r\n [matChipInputFor]=\"chipList\"\r\n [formControl]=\"control\"\r\n #input autocomplete=\"off\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\r\n [matChipInputAddOnBlur]=\"true\"\r\n (matChipInputTokenEnd)=\"add($event)\">\r\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"selected($event)\">\r\n @for (item of options | async; track item) {\r\n <mat-option [value]=\"item\">\r\n {{item}}\r\n </mat-option>\r\n }\r\n </mat-autocomplete>\r\n </mat-form-field>\r\n", styles: [":host{min-width:260px;padding:8px}\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: "component", type: i4.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["role", "id", "aria-label", "aria-description", "value", "color", "removable", "highlighted", "disableRipple", "disabled"], outputs: ["removed", "destroyed"], exportAs: ["matChip"] }, { kind: "component", type: i4.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i4.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled", "readonly", "matChipInputDisabledInteractive"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i4.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i2$6.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i2$6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i2$6.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i3$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: i9.AsyncPipe, name: "async" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
9767
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.6", type: TagsComponent, isStandalone: false, selector: "ng-component", viewQueries: [{ propertyName: "inputElement", first: true, predicate: ["input"], descendants: true, static: true }, { propertyName: "auto", first: true, predicate: ["auto"], descendants: true, static: true }], ngImport: i0, template: "<mat-form-field floatLabel=\"never\" subscriptSizing=\"dynamic\">\r\n <mat-chip-grid #chipList [attr.aria-label]=\"'Tags'|translate\">\r\n @for (tag of tags | filterBy: 'system': false; track tag.name) {\r\n <mat-chip [removable]=\"true\" (removed)=\"remove(tag)\">\r\n <!-- [ngStyle]=\"{'background-color': tag.backgroundColor, 'color': tag.color}\"-->\r\n {{tag.title || tag.name}}\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip>\r\n }\r\n </mat-chip-grid>\r\n <input [placeholder]=\"'TagsHint'|translate\"\r\n [matAutocomplete]=\"auto\"\r\n [matChipInputFor]=\"chipList\"\r\n [formControl]=\"control\"\r\n #input autocomplete=\"off\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\r\n [matChipInputAddOnBlur]=\"true\"\r\n (matChipInputTokenEnd)=\"add($event)\">\r\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"selected($event)\">\r\n @for (tag of options | async; track tag.name) {\r\n <mat-option [value]=\"tag\">\r\n {{tag.title || tag.name}}\r\n </mat-option>\r\n }\r\n </mat-autocomplete>\r\n </mat-form-field>\r\n", styles: [":host{min-width:260px;padding:8px}\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: "component", type: i4.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["role", "id", "aria-label", "aria-description", "value", "color", "removable", "highlighted", "disableRipple", "disabled"], outputs: ["removed", "destroyed"], exportAs: ["matChip"] }, { kind: "component", type: i4.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i4.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled", "readonly", "matChipInputDisabledInteractive"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i4.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i2$6.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i2$6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i2$6.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i3$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: i9.AsyncPipe, name: "async" }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: FilterPipe, name: "filterBy" }] }); }
9746
9768
  }
9747
9769
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: TagsComponent, decorators: [{
9748
9770
  type: Component,
9749
- args: [{ standalone: false, template: "<mat-form-field floatLabel=\"never\" subscriptSizing=\"dynamic\">\r\n <mat-chip-grid #chipList [attr.aria-label]=\"'Tags'|translate\">\r\n @for (item of tags; track item) {\r\n <mat-chip\r\n [removable]=\"true\" (removed)=\"remove(item)\">\r\n {{item}}\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip>\r\n }\r\n </mat-chip-grid>\r\n <input [placeholder]=\"'TagsHint'|translate\"\r\n [matAutocomplete]=\"auto\"\r\n [matChipInputFor]=\"chipList\"\r\n [formControl]=\"control\"\r\n #input autocomplete=\"off\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\r\n [matChipInputAddOnBlur]=\"true\"\r\n (matChipInputTokenEnd)=\"add($event)\">\r\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"selected($event)\">\r\n @for (item of options | async; track item) {\r\n <mat-option [value]=\"item\">\r\n {{item}}\r\n </mat-option>\r\n }\r\n </mat-autocomplete>\r\n </mat-form-field>\r\n", styles: [":host{min-width:260px;padding:8px}\n"] }]
9771
+ args: [{ standalone: false, template: "<mat-form-field floatLabel=\"never\" subscriptSizing=\"dynamic\">\r\n <mat-chip-grid #chipList [attr.aria-label]=\"'Tags'|translate\">\r\n @for (tag of tags | filterBy: 'system': false; track tag.name) {\r\n <mat-chip [removable]=\"true\" (removed)=\"remove(tag)\">\r\n <!-- [ngStyle]=\"{'background-color': tag.backgroundColor, 'color': tag.color}\"-->\r\n {{tag.title || tag.name}}\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip>\r\n }\r\n </mat-chip-grid>\r\n <input [placeholder]=\"'TagsHint'|translate\"\r\n [matAutocomplete]=\"auto\"\r\n [matChipInputFor]=\"chipList\"\r\n [formControl]=\"control\"\r\n #input autocomplete=\"off\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\r\n [matChipInputAddOnBlur]=\"true\"\r\n (matChipInputTokenEnd)=\"add($event)\">\r\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"selected($event)\">\r\n @for (tag of options | async; track tag.name) {\r\n <mat-option [value]=\"tag\">\r\n {{tag.title || tag.name}}\r\n </mat-option>\r\n }\r\n </mat-autocomplete>\r\n </mat-form-field>\r\n", styles: [":host{min-width:260px;padding:8px}\n"] }]
9750
9772
  }], ctorParameters: () => [{ type: undefined, decorators: [{
9751
9773
  type: Inject,
9752
9774
  args: [POPUP_DATA]
@@ -9790,6 +9812,8 @@ class ComposeFormComponent {
9790
9812
  }
9791
9813
  /** */
9792
9814
  ngOnInit() {
9815
+ this.tags = this.model.tags?.map(v => this._session.tags.find(t => t.name === v)).
9816
+ filter(e => e !== undefined);
9793
9817
  this._fileElement.nativeElement.addEventListener('change', this._fileChangeListener.bind(this));
9794
9818
  this._messaging.callback$.pipe(takeUntil(this._destroy)).subscribe(e => this._instance.onMessage && this._instance.onMessage(e.message));
9795
9819
  this._messaging.editing$.pipe(takeUntil(this._destroy)).subscribe(e => e.id === this.model.id &&
@@ -9940,7 +9964,7 @@ class ComposeFormComponent {
9940
9964
  if (retry > -1)
9941
9965
  this.model.attachments.splice(retry, 1);
9942
9966
  const model = this._constructAttachment(f);
9943
- const observable = this._mailbox.upload(this.model.id, this.model.formId, this.model.version, f).
9967
+ const observable = this._mailbox.uploadAttachment(this.model.id, this.model.formId, this.model.version, f).
9944
9968
  pipe(tap({
9945
9969
  next: r => {
9946
9970
  this._sb.toast(!exists ? 'UploadOk' : 'UploadVersionOk', f.name);
@@ -9974,8 +9998,12 @@ class ComposeFormComponent {
9974
9998
  };
9975
9999
  }
9976
10000
  tag(evt) {
10001
+ const { id, version } = this.model;
9977
10002
  this._popup.open(TagsComponent, evt.target, {
9978
- data: this.model
10003
+ data: {
10004
+ id, version,
10005
+ tags: this.tags,
10006
+ }
9979
10007
  });
9980
10008
  }
9981
10009
  /** */
@@ -10228,13 +10256,13 @@ class ComposeFormComponent {
10228
10256
  this._destroy.complete();
10229
10257
  }
10230
10258
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: ComposeFormComponent, deps: [{ token: Popup }, { token: MailboxService }, { token: AccountService }, { token: RouterImpl }, { token: i2$2.MatDialog }, { token: PromptService }, { token: SessionService }, { token: i0.Injector }, { token: i3.MatSnackBar }, { token: BizDocComponentFactoryResolver }, { token: GuideService }, { token: TranslateService }, { token: HubService }], target: i0.ɵɵFactoryTarget.Component }); }
10231
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.6", type: ComposeFormComponent, isStandalone: false, selector: "bizdoc-form", inputs: { model: "model", working: "working", dirty: "dirty", valid: "valid", page: "page", mode: "mode", contacts: "contacts" }, outputs: { modelChange: "modelChange", workingChange: "workingChange", dirtyChange: "dirtyChange", validChange: "validChange", saved: "saved" }, host: { classAttribute: "form-container bizdoc-compose" }, viewQueries: [{ propertyName: "_fileElement", first: true, predicate: ["file"], descendants: true, static: true }, { propertyName: "attachments", first: true, predicate: AttachmentsComponent, descendants: true, static: true }, { propertyName: "_container", first: true, predicate: ["component"], descendants: true, read: ViewContainerRef, static: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"form-header\">\r\n <!--<bizdoc-people [model]=\"model\" *ngIf=\"mode !== 'compose' && contacts\"></bizdoc-people>-->\r\n <bizdoc-attachments [model]=\"model\" [includeDeleted]=\"true\" [viewedIndicator]=\"false\"></bizdoc-attachments>\r\n @if (!model.replied && mode !== 'compose' && model.note) {\r\n <div class=\"compose-note\">\r\n <mat-icon color=\"primary\">info</mat-icon> <span class=\"mat-body-2\">{{model.note}}</span>\r\n </div>\r\n }\r\n @if (model.tags) {\r\n <mat-chip-set>\r\n @for (tag of model.tags; track tag) {\r\n <mat-chip [disableRipple]=\"true\">{{tag}}</mat-chip>\r\n }\r\n </mat-chip-set>\r\n }\r\n @if (editing) {\r\n <div class=\"message\">{{ editing }}</div>\r\n }\r\n</div>\r\n<ng-container #component></ng-container>\r\n<form style=\"display:none\"><input type=\"file\" #file multiple /></form>\r\n", dependencies: [{ kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i4.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["role", "id", "aria-label", "aria-description", "value", "color", "removable", "highlighted", "disableRipple", "disabled"], outputs: ["removed", "destroyed"], exportAs: ["matChip"] }, { kind: "component", type: i4.MatChipSet, selector: "mat-chip-set", inputs: ["disabled", "role", "tabIndex"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: AttachmentsComponent, selector: "bizdoc-attachments", inputs: ["model", "viewedIndicator", "includeDeleted"] }] }); }
10259
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.6", type: ComposeFormComponent, isStandalone: false, selector: "bizdoc-form", inputs: { model: "model", working: "working", dirty: "dirty", valid: "valid", page: "page", mode: "mode", contacts: "contacts" }, outputs: { modelChange: "modelChange", workingChange: "workingChange", dirtyChange: "dirtyChange", validChange: "validChange", saved: "saved" }, host: { classAttribute: "form-container bizdoc-compose" }, viewQueries: [{ propertyName: "_fileElement", first: true, predicate: ["file"], descendants: true, static: true }, { propertyName: "attachments", first: true, predicate: AttachmentsComponent, descendants: true, static: true }, { propertyName: "_container", first: true, predicate: ["component"], descendants: true, read: ViewContainerRef, static: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"form-header\">\r\n <!--<bizdoc-people [model]=\"model\" *ngIf=\"mode !== 'compose' && contacts\"></bizdoc-people>-->\r\n <bizdoc-attachments [model]=\"model\" [includeDeleted]=\"true\" [viewedIndicator]=\"false\"></bizdoc-attachments>\r\n @if (!model.replied && mode !== 'compose' && model.note) {\r\n <div class=\"compose-note\">\r\n <mat-icon color=\"primary\">info</mat-icon> <span class=\"mat-body-2\">{{model.note}}</span>\r\n </div>\r\n }\r\n @if (tags) {\r\n <mat-chip-set>\r\n @for (tag of tags; track tag.name) {\r\n <mat-chip [disableRipple]=\"true\" [style.backgroundColor]=\"tag.backgroundColor\">\r\n @if(tag.icon) {\r\n <mat-icon matChipAvatar [style.color]=\"tag.color\">{{tag.icon}}</mat-icon>\r\n }\r\n <span [style.color]=\"tag.color\">{{tag.title || tag.name}}</span>\r\n </mat-chip>\r\n }\r\n </mat-chip-set>\r\n }\r\n @if (editing) {\r\n <div class=\"message\">{{ editing }}</div>\r\n }\r\n</div>\r\n<ng-container #component></ng-container>\r\n<form style=\"display:none\"><input type=\"file\" #file multiple /></form>\r\n", dependencies: [{ kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i4.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["role", "id", "aria-label", "aria-description", "value", "color", "removable", "highlighted", "disableRipple", "disabled"], outputs: ["removed", "destroyed"], exportAs: ["matChip"] }, { kind: "directive", type: i4.MatChipAvatar, selector: "mat-chip-avatar, [matChipAvatar]" }, { kind: "component", type: i4.MatChipSet, selector: "mat-chip-set", inputs: ["disabled", "role", "tabIndex"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: AttachmentsComponent, selector: "bizdoc-attachments", inputs: ["model", "viewedIndicator", "includeDeleted"] }] }); }
10232
10260
  }
10233
10261
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: ComposeFormComponent, decorators: [{
10234
10262
  type: Component,
10235
10263
  args: [{ standalone: false, selector: 'bizdoc-form', host: {
10236
10264
  class: 'form-container bizdoc-compose'
10237
- }, template: "<div class=\"form-header\">\r\n <!--<bizdoc-people [model]=\"model\" *ngIf=\"mode !== 'compose' && contacts\"></bizdoc-people>-->\r\n <bizdoc-attachments [model]=\"model\" [includeDeleted]=\"true\" [viewedIndicator]=\"false\"></bizdoc-attachments>\r\n @if (!model.replied && mode !== 'compose' && model.note) {\r\n <div class=\"compose-note\">\r\n <mat-icon color=\"primary\">info</mat-icon> <span class=\"mat-body-2\">{{model.note}}</span>\r\n </div>\r\n }\r\n @if (model.tags) {\r\n <mat-chip-set>\r\n @for (tag of model.tags; track tag) {\r\n <mat-chip [disableRipple]=\"true\">{{tag}}</mat-chip>\r\n }\r\n </mat-chip-set>\r\n }\r\n @if (editing) {\r\n <div class=\"message\">{{ editing }}</div>\r\n }\r\n</div>\r\n<ng-container #component></ng-container>\r\n<form style=\"display:none\"><input type=\"file\" #file multiple /></form>\r\n" }]
10265
+ }, template: "<div class=\"form-header\">\r\n <!--<bizdoc-people [model]=\"model\" *ngIf=\"mode !== 'compose' && contacts\"></bizdoc-people>-->\r\n <bizdoc-attachments [model]=\"model\" [includeDeleted]=\"true\" [viewedIndicator]=\"false\"></bizdoc-attachments>\r\n @if (!model.replied && mode !== 'compose' && model.note) {\r\n <div class=\"compose-note\">\r\n <mat-icon color=\"primary\">info</mat-icon> <span class=\"mat-body-2\">{{model.note}}</span>\r\n </div>\r\n }\r\n @if (tags) {\r\n <mat-chip-set>\r\n @for (tag of tags; track tag.name) {\r\n <mat-chip [disableRipple]=\"true\" [style.backgroundColor]=\"tag.backgroundColor\">\r\n @if(tag.icon) {\r\n <mat-icon matChipAvatar [style.color]=\"tag.color\">{{tag.icon}}</mat-icon>\r\n }\r\n <span [style.color]=\"tag.color\">{{tag.title || tag.name}}</span>\r\n </mat-chip>\r\n }\r\n </mat-chip-set>\r\n }\r\n @if (editing) {\r\n <div class=\"message\">{{ editing }}</div>\r\n }\r\n</div>\r\n<ng-container #component></ng-container>\r\n<form style=\"display:none\"><input type=\"file\" #file multiple /></form>\r\n" }]
10238
10266
  }], ctorParameters: () => [{ type: Popup }, { type: MailboxService }, { type: AccountService }, { type: RouterImpl }, { type: i2$2.MatDialog }, { type: PromptService }, { type: SessionService }, { type: i0.Injector }, { type: i3.MatSnackBar }, { type: BizDocComponentFactoryResolver }, { type: GuideService }, { type: TranslateService }, { type: HubService }], propDecorators: { model: [{
10239
10267
  type: Input
10240
10268
  }], modelChange: [{
@@ -10302,6 +10330,8 @@ class ComposePaneComponent {
10302
10330
  else
10303
10331
  this.mode = 'preview';
10304
10332
  this.newCommentsCount = this.model.unreadComments;
10333
+ this.userTags = this.model.tags &&
10334
+ this.model.tags.some(e => !this._session.tags.find(t => t.name === e));
10305
10335
  this._pane.title = this._pane.group = `#${this.model.number}`;
10306
10336
  this.page = undefined;
10307
10337
  });
@@ -12710,7 +12740,7 @@ const MODE_MAP = {
12710
12740
  'Offline': { icon: 'timer', color: '#f57c00' },
12711
12741
  'Online': { icon: 'check', color: '#43a047' },
12712
12742
  'OutOfOffice': { icon: 'priority_high', color: '#90a4ae' },
12713
- 'Vacation': { icon: 'beach_access', color: '#fdd835' },
12743
+ 'OnVacation': { icon: 'beach_access', color: '#fdd835' },
12714
12744
  'WorkingHome': { icon: 'home', color: '#fdd835' }
12715
12745
  };
12716
12746
  class AvatarComponent {
@@ -19750,13 +19780,13 @@ class SearchService {
19750
19780
  });
19751
19781
  // user tags
19752
19782
  profile.options.tags?.forEach(t => {
19753
- if (t.toLowerCase().indexOf(val) > -1)
19783
+ if ((t.title || t.name).toLowerCase().indexOf(val) > -1)
19754
19784
  results.push({
19755
19785
  portal: new ComponentPortal(PathListingComponent),
19756
19786
  model: {
19757
19787
  path: ['mailbox', 'f'],
19758
- params: { tag: t },
19759
- title: t,
19788
+ params: { tag: t.name },
19789
+ title: t.title || t.name,
19760
19790
  section: 'Tags',
19761
19791
  icon: 'bookmark'
19762
19792
  }
@@ -22138,6 +22168,8 @@ class ComposeMobileComponent {
22138
22168
  this.newCommentsCount = this.model.unreadComments;
22139
22169
  const form = this._session.profile.forms.find(f => f.name === this.model.formId);
22140
22170
  this._title.set(this.model.number ? `#${this.model.number}` : form.title);
22171
+ this.userTags = this.model.tags &&
22172
+ this.model.tags.some(e => !this._session.tags.find(t => t.name === e));
22141
22173
  this.page = undefined;
22142
22174
  this.newCommentsCount &&
22143
22175
  this.drawer.open();
@@ -22196,11 +22228,11 @@ class ComposeMobileComponent {
22196
22228
  this._destroy.complete();
22197
22229
  }
22198
22230
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: ComposeMobileComponent, deps: [{ token: WindowTitleService }, { token: SessionService }, { token: i1$1.Router }, { token: i1$1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component }); }
22199
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.6", type: ComposeMobileComponent, isStandalone: false, selector: "ng-component", viewQueries: [{ propertyName: "form", first: true, predicate: ComposeFormComponent, descendants: true, static: true }, { propertyName: "comments", first: true, predicate: CommentsComponent, descendants: true }, { propertyName: "drawer", first: true, predicate: MatSidenav, descendants: true, 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-icon-button color=\"primary\" data-help=\"submit\"\r\n (click)=\"submit()\" [disabled]=\"!valid||working\" [bizdocTooltip]=\"'Submit' | translate\">\r\n <mat-icon class=\"mat-icon-rtl-mirror\">send</mat-icon>\r\n </button>\r\n }\r\n @if (form.actions.length === 1) {\r\n <button mat-icon-button color=\"primary\" [attr.data-help]=\"'action-'+form.actions[0].name\" (click)=\"send(model.actions[0])\" [disabled]=\"!valid||working\" [bizdocTooltip]=\"form.actions[0].title\">\r\n <mat-icon class=\"mat-icon-rtl-mirror\">{{form.actions[0].icon || 'send'}}</mat-icon>\r\n </button>\r\n }\r\n @else if (form.actions.length > 1) {\r\n <button mat-icon-button data-help=\"send\" color=\"primary\" [matMenuTriggerFor]=\"actionmenu\" [disabled]=\"!valid||working\" [bizdocTooltip]=\"'Send' | translate\">\r\n <mat-icon class=\"mat-icon-rtl-mirror\">send</mat-icon>\r\n </button>\r\n }\r\n <!-- action -->\r\n <mat-menu #actionmenu>\r\n @for (a of form.actions | sort : 'group'; 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 </mat-menu>\r\n @if (mode === 'compose') {\r\n <button mat-icon-button (click)=\"form.save().subscribe()\" data-help=\"save\" [disabled]=\"!dirty||working\" [bizdocTooltip]=\"(model.draft ? 'SaveDraft' : '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]=\"model.tags && model.tags.length\">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.completed && model.pending) {\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)=\"toggle('comments')\" 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)=\"toggle('insights')\" [bizdocTooltip]=\"'Insights' | translate\" [attr.aria-label]=\"'Insight' | translate\" class=\"tool\"><mat-icon>data_usage</mat-icon></button>\r\n }\r\n <button mat-icon-button [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 </ng-template>\r\n </mat-menu>\r\n</mat-toolbar>\r\n<mat-sidenav-container class=\"page-container\">\r\n <mat-sidenav-content>\r\n <bizdoc-form [model]=model #form (validChange)=\"valid=$event\"\r\n (workingChange)=\"working=$event\" [page]=\"page\"\r\n (dirtyChange)=\"dirty=$event\" [mode]=\"mode\"></bizdoc-form>\r\n </mat-sidenav-content>\r\n <mat-sidenav mode=\"over\" position=\"end\" [opened]=\"false\" #drawer autoFocus=\"false\" class=\"side-nav\">\r\n @switch (viewMode) {\r\n @case ('insights') {\r\n <bizdoc-document-insights [model]=\"model\"></bizdoc-document-insights>\r\n }\r\n @default {\r\n <bizdoc-comments [model]=\"model\"></bizdoc-comments>\r\n }\r\n }\r\n </mat-sidenav>\r\n</mat-sidenav-container>\r\n", styles: [".page-container ::ng-deep form{padding:6px}.side-nav{min-width:280px}\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: i6$4.MatSidenav, selector: "mat-sidenav", inputs: ["fixedInViewport", "fixedTopGap", "fixedBottomGap"], exportAs: ["matSidenav"] }, { kind: "component", type: i6$4.MatSidenavContainer, selector: "mat-sidenav-container", exportAs: ["matSidenavContainer"] }, { kind: "component", type: i6$4.MatSidenavContent, selector: "mat-sidenav-content" }, { kind: "component", type: i8$1.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { 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: DocumentViewsComponent, selector: "bizdoc-document-insights", inputs: ["model"] }, { kind: "component", type: CommentsComponent, selector: "bizdoc-comments", inputs: ["model"], outputs: ["change"] }, { 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: ArraySortPipe, name: "sort" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
22231
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.6", type: ComposeMobileComponent, isStandalone: false, selector: "ng-component", viewQueries: [{ propertyName: "form", first: true, predicate: ComposeFormComponent, descendants: true, static: true }, { propertyName: "comments", first: true, predicate: CommentsComponent, descendants: true }, { propertyName: "drawer", first: true, predicate: MatSidenav, descendants: true, 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-icon-button color=\"primary\" data-help=\"submit\"\r\n (click)=\"submit()\" [disabled]=\"!valid||working\" [bizdocTooltip]=\"'Submit' | translate\">\r\n <mat-icon class=\"mat-icon-rtl-mirror\">send</mat-icon>\r\n </button>\r\n }\r\n @if (form.actions.length === 1) {\r\n <button mat-icon-button color=\"primary\" [attr.data-help]=\"'action-'+form.actions[0].name\" (click)=\"send(model.actions[0])\" [disabled]=\"!valid||working\" [bizdocTooltip]=\"form.actions[0].title\">\r\n <mat-icon class=\"mat-icon-rtl-mirror\">{{form.actions[0].icon || 'send'}}</mat-icon>\r\n </button>\r\n }\r\n @else if (form.actions.length > 1) {\r\n <button mat-icon-button data-help=\"send\" color=\"primary\" [matMenuTriggerFor]=\"actionmenu\" [disabled]=\"!valid||working\" [bizdocTooltip]=\"'Send' | translate\">\r\n <mat-icon class=\"mat-icon-rtl-mirror\">send</mat-icon>\r\n </button>\r\n }\r\n <!-- action -->\r\n <mat-menu #actionmenu>\r\n @for (a of form.actions | sort : 'group'; 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 </mat-menu>\r\n @if (mode === 'compose') {\r\n <button mat-icon-button (click)=\"form.save().subscribe()\" data-help=\"save\" [disabled]=\"!dirty||working\" [bizdocTooltip]=\"(model.draft ? 'SaveDraft' : '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]=\"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.completed && model.pending) {\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)=\"toggle('comments')\" 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)=\"toggle('insights')\" [bizdocTooltip]=\"'Insights' | translate\" [attr.aria-label]=\"'Insight' | translate\" class=\"tool\"><mat-icon>data_usage</mat-icon></button>\r\n }\r\n <button mat-icon-button [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 </ng-template>\r\n </mat-menu>\r\n</mat-toolbar>\r\n<mat-sidenav-container class=\"page-container\">\r\n <mat-sidenav-content>\r\n <bizdoc-form [model]=model #form (validChange)=\"valid=$event\"\r\n (workingChange)=\"working=$event\" [page]=\"page\"\r\n (dirtyChange)=\"dirty=$event\" [mode]=\"mode\"></bizdoc-form>\r\n </mat-sidenav-content>\r\n <mat-sidenav mode=\"over\" position=\"end\" [opened]=\"false\" #drawer autoFocus=\"false\" class=\"side-nav\">\r\n @switch (viewMode) {\r\n @case ('insights') {\r\n <bizdoc-document-insights [model]=\"model\"></bizdoc-document-insights>\r\n }\r\n @default {\r\n <bizdoc-comments [model]=\"model\"></bizdoc-comments>\r\n }\r\n }\r\n </mat-sidenav>\r\n</mat-sidenav-container>\r\n", styles: [".page-container ::ng-deep form{padding:6px}.side-nav{min-width:280px}\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: i6$4.MatSidenav, selector: "mat-sidenav", inputs: ["fixedInViewport", "fixedTopGap", "fixedBottomGap"], exportAs: ["matSidenav"] }, { kind: "component", type: i6$4.MatSidenavContainer, selector: "mat-sidenav-container", exportAs: ["matSidenavContainer"] }, { kind: "component", type: i6$4.MatSidenavContent, selector: "mat-sidenav-content" }, { kind: "component", type: i8$1.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { 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: DocumentViewsComponent, selector: "bizdoc-document-insights", inputs: ["model"] }, { kind: "component", type: CommentsComponent, selector: "bizdoc-comments", inputs: ["model"], outputs: ["change"] }, { 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: ArraySortPipe, name: "sort" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
22200
22232
  }
22201
22233
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: ComposeMobileComponent, decorators: [{
22202
22234
  type: Component,
22203
- args: [{ standalone: false, 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-icon-button color=\"primary\" data-help=\"submit\"\r\n (click)=\"submit()\" [disabled]=\"!valid||working\" [bizdocTooltip]=\"'Submit' | translate\">\r\n <mat-icon class=\"mat-icon-rtl-mirror\">send</mat-icon>\r\n </button>\r\n }\r\n @if (form.actions.length === 1) {\r\n <button mat-icon-button color=\"primary\" [attr.data-help]=\"'action-'+form.actions[0].name\" (click)=\"send(model.actions[0])\" [disabled]=\"!valid||working\" [bizdocTooltip]=\"form.actions[0].title\">\r\n <mat-icon class=\"mat-icon-rtl-mirror\">{{form.actions[0].icon || 'send'}}</mat-icon>\r\n </button>\r\n }\r\n @else if (form.actions.length > 1) {\r\n <button mat-icon-button data-help=\"send\" color=\"primary\" [matMenuTriggerFor]=\"actionmenu\" [disabled]=\"!valid||working\" [bizdocTooltip]=\"'Send' | translate\">\r\n <mat-icon class=\"mat-icon-rtl-mirror\">send</mat-icon>\r\n </button>\r\n }\r\n <!-- action -->\r\n <mat-menu #actionmenu>\r\n @for (a of form.actions | sort : 'group'; 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 </mat-menu>\r\n @if (mode === 'compose') {\r\n <button mat-icon-button (click)=\"form.save().subscribe()\" data-help=\"save\" [disabled]=\"!dirty||working\" [bizdocTooltip]=\"(model.draft ? 'SaveDraft' : '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]=\"model.tags && model.tags.length\">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.completed && model.pending) {\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)=\"toggle('comments')\" 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)=\"toggle('insights')\" [bizdocTooltip]=\"'Insights' | translate\" [attr.aria-label]=\"'Insight' | translate\" class=\"tool\"><mat-icon>data_usage</mat-icon></button>\r\n }\r\n <button mat-icon-button [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 </ng-template>\r\n </mat-menu>\r\n</mat-toolbar>\r\n<mat-sidenav-container class=\"page-container\">\r\n <mat-sidenav-content>\r\n <bizdoc-form [model]=model #form (validChange)=\"valid=$event\"\r\n (workingChange)=\"working=$event\" [page]=\"page\"\r\n (dirtyChange)=\"dirty=$event\" [mode]=\"mode\"></bizdoc-form>\r\n </mat-sidenav-content>\r\n <mat-sidenav mode=\"over\" position=\"end\" [opened]=\"false\" #drawer autoFocus=\"false\" class=\"side-nav\">\r\n @switch (viewMode) {\r\n @case ('insights') {\r\n <bizdoc-document-insights [model]=\"model\"></bizdoc-document-insights>\r\n }\r\n @default {\r\n <bizdoc-comments [model]=\"model\"></bizdoc-comments>\r\n }\r\n }\r\n </mat-sidenav>\r\n</mat-sidenav-container>\r\n", styles: [".page-container ::ng-deep form{padding:6px}.side-nav{min-width:280px}\n"] }]
22235
+ args: [{ standalone: false, 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-icon-button color=\"primary\" data-help=\"submit\"\r\n (click)=\"submit()\" [disabled]=\"!valid||working\" [bizdocTooltip]=\"'Submit' | translate\">\r\n <mat-icon class=\"mat-icon-rtl-mirror\">send</mat-icon>\r\n </button>\r\n }\r\n @if (form.actions.length === 1) {\r\n <button mat-icon-button color=\"primary\" [attr.data-help]=\"'action-'+form.actions[0].name\" (click)=\"send(model.actions[0])\" [disabled]=\"!valid||working\" [bizdocTooltip]=\"form.actions[0].title\">\r\n <mat-icon class=\"mat-icon-rtl-mirror\">{{form.actions[0].icon || 'send'}}</mat-icon>\r\n </button>\r\n }\r\n @else if (form.actions.length > 1) {\r\n <button mat-icon-button data-help=\"send\" color=\"primary\" [matMenuTriggerFor]=\"actionmenu\" [disabled]=\"!valid||working\" [bizdocTooltip]=\"'Send' | translate\">\r\n <mat-icon class=\"mat-icon-rtl-mirror\">send</mat-icon>\r\n </button>\r\n }\r\n <!-- action -->\r\n <mat-menu #actionmenu>\r\n @for (a of form.actions | sort : 'group'; 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 </mat-menu>\r\n @if (mode === 'compose') {\r\n <button mat-icon-button (click)=\"form.save().subscribe()\" data-help=\"save\" [disabled]=\"!dirty||working\" [bizdocTooltip]=\"(model.draft ? 'SaveDraft' : '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]=\"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.completed && model.pending) {\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)=\"toggle('comments')\" 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)=\"toggle('insights')\" [bizdocTooltip]=\"'Insights' | translate\" [attr.aria-label]=\"'Insight' | translate\" class=\"tool\"><mat-icon>data_usage</mat-icon></button>\r\n }\r\n <button mat-icon-button [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 </ng-template>\r\n </mat-menu>\r\n</mat-toolbar>\r\n<mat-sidenav-container class=\"page-container\">\r\n <mat-sidenav-content>\r\n <bizdoc-form [model]=model #form (validChange)=\"valid=$event\"\r\n (workingChange)=\"working=$event\" [page]=\"page\"\r\n (dirtyChange)=\"dirty=$event\" [mode]=\"mode\"></bizdoc-form>\r\n </mat-sidenav-content>\r\n <mat-sidenav mode=\"over\" position=\"end\" [opened]=\"false\" #drawer autoFocus=\"false\" class=\"side-nav\">\r\n @switch (viewMode) {\r\n @case ('insights') {\r\n <bizdoc-document-insights [model]=\"model\"></bizdoc-document-insights>\r\n }\r\n @default {\r\n <bizdoc-comments [model]=\"model\"></bizdoc-comments>\r\n }\r\n }\r\n </mat-sidenav>\r\n</mat-sidenav-container>\r\n", styles: [".page-container ::ng-deep form{padding:6px}.side-nav{min-width:280px}\n"] }]
22204
22236
  }], ctorParameters: () => [{ type: WindowTitleService }, { type: SessionService }, { type: i1$1.Router }, { type: i1$1.ActivatedRoute }], propDecorators: { form: [{
22205
22237
  type: ViewChild,
22206
22238
  args: [ComposeFormComponent, { static: true }]
@@ -23762,7 +23794,7 @@ class FileInput {
23762
23794
  });
23763
23795
  }
23764
23796
  discard(item) {
23765
- const task = () => this._mailbox.removeattachment(this._model.id, item.id).subscribe({
23797
+ const task = () => this._mailbox.removeAttachment(this._model.id, item.id).subscribe({
23766
23798
  next: () => {
23767
23799
  this._items.remove(item);
23768
23800
  this._value = this.multiple ? this._items.length ? this._items.map(i => i.id) : undefined : undefined;
@@ -23883,7 +23915,7 @@ class FileInput {
23883
23915
  }
23884
23916
  else if (this._editable(item)) {
23885
23917
  // existing item, override
23886
- let observable = this._mailbox.upload(this._model.id, this._model.formId, this._model.version, file, { isPrivate: true }).
23918
+ let observable = this._mailbox.uploadAttachment(this._model.id, this._model.formId, this._model.version, file, { isPrivate: true }).
23887
23919
  pipe(
23888
23920
  // TODO: reportProgress(item),
23889
23921
  catchError(e => {
@@ -23900,7 +23932,7 @@ class FileInput {
23900
23932
  }
23901
23933
  else {
23902
23934
  // upload new
23903
- let observable = this._mailbox.upload(this._model.id, this._model.formId, this._model.version, file, { isPrivate: true }).
23935
+ let observable = this._mailbox.uploadAttachment(this._model.id, this._model.formId, this._model.version, file, { isPrivate: true }).
23904
23936
  pipe(/*TODO reportProgress(item), */ catchError(e => {
23905
23937
  this._handleError(e);
23906
23938
  return of(false);
@@ -34496,7 +34528,11 @@ class DesignerItemComponent {
34496
34528
  this.mode = 'edit';
34497
34529
  if (this.mode === 'add' && this.model.copyOf && !this.addContent)
34498
34530
  this.mode = 'edit';
34499
- this.mode === 'edit' && this._commonForm();
34531
+ switch (this.mode) {
34532
+ case 'edit':
34533
+ this._commonForm();
34534
+ break;
34535
+ }
34500
34536
  if (!this.model.designTemplate && !this.model.arguments?.length)
34501
34537
  this._patch();
34502
34538
  (this.model.copyOf || this.mode === 'add') && this.form.markAsDirty();
@@ -34627,11 +34663,11 @@ class DesignerItemComponent {
34627
34663
  this._destroy?.complete();
34628
34664
  }
34629
34665
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: DesignerItemComponent, deps: [{ token: i0.ElementRef }, { token: i1$2.FormBuilder }, { token: i2$1.DomSanitizer }, { token: DesignerRef }, { token: BizDocComponentFactoryResolver }], target: i0.ɵɵFactoryTarget.Component }); }
34630
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.6", type: DesignerItemComponent, isStandalone: false, selector: "bizdoc-designer-element", inputs: { privileges: "privileges", icon: "icon", form: "form", context: "context" }, outputs: { onSave: "save", onContinue: "continue" }, queries: [{ propertyName: "editContent", first: true, predicate: EditContentDirective, descendants: true }, { propertyName: "addContent", first: true, predicate: AddContentDirective, descendants: true }, { propertyName: "widgetContent", first: true, predicate: WidgetContentDirective, descendants: true }, { propertyName: "customContents", predicate: CustomContentDirective }], usesOnChanges: true, ngImport: i0, template: "@switch (mode) {\r\n<!--widget mode -->\r\n@case ('widget') {\r\n<!--icon -->\r\n @if (model.familyKey) {\r\n @if (SVG[model.familyKey]) {\r\n<img class=\"logo\" [src]=\"resource(SVG[model.familyKey])\" [bizdocTooltip]=\"model.family\" />\r\n }\r\n @else {\r\n<div>{{model.family}}</div>\r\n }\r\n }\r\n<!--options-->\r\n<ng-container (attached)=\"optionsAttached($event)\" [cdkPortalOutlet]=\"options\"></ng-container>\r\n<!--designer widget-->\r\n<ng-container [ngTemplateOutlet]=\"widgetContent?.templateRef\"></ng-container>\r\n}\r\n@case ('edit') {\r\n<!--edit / custom mode -->\r\n@if (context?.active) {\r\n<mat-toolbar class=\"row\">\r\n @if(context.mode === 'add') {\r\n <button mat-icon-button (click)=\"closeView(true)\" [disabled]=\"context.form.invalid\"><mat-icon>save</mat-icon></button>\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"closeView()\" [bizdocTooltip]=\"'Close'|translate\"><mat-icon>close</mat-icon></button>\r\n }\r\n @else {\r\n <button mat-icon-button (click)=\"closeView(true)\" [bizdocTooltip]=\"'Back'|translate\"><mat-icon>keyboard_backspace</mat-icon></button>\r\n }\r\n</mat-toolbar>\r\n<form autocomplete=\"off\" class=\"column\" (keydown)=\"handleKeyboardEvent($event)\">\r\n <h2 class=\"mat-h2\">{{context.title|translate}}</h2>\r\n <ng-container *ngTemplateOutlet=\"customView; context: context\"></ng-container>\r\n</form>\r\n}\r\n@else {\r\n<!--edit mode -->\r\n<mat-toolbar bizdoc-sticky>\r\n <button mat-icon-button (click)=\"save()\" [disabled]=\"form.invalid || !form.dirty\"><mat-icon>save</mat-icon></button>\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"close()\" [bizdocTooltip]=\"'Close'|translate\"><mat-icon>close</mat-icon></button>\r\n</mat-toolbar>\r\n<form autocomplete=\"off\" class=\"column\" (keydown)=\"handleKeyboardEvent($event)\">\r\n @if (model.resourceType) {\r\n <p class=\"message\" (click)=\"unlock($event)\" [innerHTML]=\"'UnlockMultilang'|translate\"></p>\r\n <br />\r\n }\r\n <ng-container [formGroup]=\"form\">\r\n <div class=\"row gap\">\r\n <bizdoc-localized-string #title formControlName=\"title\" [placeholder]=\"'Title'|translate\" required class=\"flex column\"></bizdoc-localized-string>\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Name'|translate}}</mat-label>\r\n <input matInput formControlName=\"name\" required />\r\n @if (form.controls.name.hasError('required')) {\r\n <mat-error [innerHTML]=\"'RequiredErr'|translate:('Name'|translate)\"></mat-error>\r\n }\r\n @if (form.controls.name.hasError('duplicate')) {\r\n <mat-error [innerHTML]=\"'DuplicateErr'|translate:('Name'|translate)\"></mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n @if (icon) {\r\n <bizdoc-icon-picker formControlName=\"icon\" required></bizdoc-icon-picker>\r\n }\r\n </ng-container>\r\n <!--arguments-->\r\n @if (arguments) {\r\n <ng-container (attached)=\"argumentsAttached($event)\" [cdkPortalOutlet]=\"arguments\"></ng-container>\r\n }\r\n <!--edit template-->\r\n <ng-container [ngTemplateOutlet]=\"editContent?.templateRef\"></ng-container>\r\n <!--options-->\r\n @if (options) {\r\n <ng-container (attached)=\"optionsAttached($event)\" [cdkPortalOutlet]=\"options\"></ng-container>\r\n }\r\n <!--privileges-->\r\n @if (form.controls.privileges) {\r\n <bizdoc-designer-privileges [form]=\"form.controls.privileges\"></bizdoc-designer-privileges>\r\n }\r\n</form>\r\n}\r\n}\r\n<!--add-->\r\n@case ('add') {\r\n<form autocomplete=\"off\" class=\"column\" (keydown)=\"handleKeyboardEvent($event)\">\r\n <!--arguments-->\r\n @if (arguments) {\r\n <ng-container (attached)=\"argumentsAttached($event)\" [cdkPortalOutlet]=\"arguments\"></ng-container>\r\n }\r\n <!--add template-->\r\n <ng-container [ngTemplateOutlet]=\"addContent?.templateRef\"></ng-container>\r\n @if (options) {\r\n <!--options-->\r\n <ng-container (attached)=\"optionsAttached($event)\" [cdkPortalOutlet]=\"options\"></ng-container>\r\n }\r\n <!-- continue-->\r\n <div class=\"row actions\">\r\n <span class=\"divider\"></span>\r\n <button mat-stroked-button [disabled]=\"form.invalid\" (click)=\"continue()\" type=\"button\">{{'Continue'|translate}}&nbsp;<mat-icon class=\"mat-icon-rtl-mirror\">double_arrow</mat-icon></button>\r\n </div>\r\n</form>\r\n }\r\n}\r\n", styles: ["img.logo{display:block;height:26px}:host{flex:1;width:100%}form{min-width:280px;padding:8px}p.message{margin:5px}:host ::ng-deep .cdk-drag-handle{cursor:move}\n"], dependencies: [{ kind: "directive", type: i9.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i5.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "component", type: i8$1.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: i3$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3$1.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3$1.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { 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: "directive", type: i3$3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "component", type: LocalizedStringComponent, selector: "bizdoc-localized-string", inputs: ["class", "floatLabel", "value", "placeholder", "required", "disabled", "maxlength"] }, { kind: "component", type: DesignerPrivilegesComponent, selector: "bizdoc-designer-privileges", inputs: ["form"] }, { kind: "component", type: IconPickerComponent, selector: "bizdoc-icon-picker", inputs: ["value", "required", "disabled"], outputs: ["valueChanges"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
34666
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.6", type: DesignerItemComponent, isStandalone: false, selector: "bizdoc-designer-element", inputs: { privileges: "privileges", icon: "icon", form: "form", context: "context" }, outputs: { onSave: "save", onContinue: "continue" }, queries: [{ propertyName: "editContent", first: true, predicate: EditContentDirective, descendants: true }, { propertyName: "addContent", first: true, predicate: AddContentDirective, descendants: true }, { propertyName: "widgetContent", first: true, predicate: WidgetContentDirective, descendants: true }, { propertyName: "customContents", predicate: CustomContentDirective }], usesOnChanges: true, ngImport: i0, template: "@switch (mode) {\r\n<!--widget mode -->\r\n@case ('widget') {\r\n<!--icon -->\r\n @if (model.familyKey) {\r\n @if (SVG[model.familyKey]) {\r\n<img class=\"logo\" [src]=\"resource(SVG[model.familyKey])\" [bizdocTooltip]=\"model.family\" />\r\n }\r\n @else {\r\n<div>{{model.family}}</div>\r\n }\r\n }\r\n<!--options-->\r\n<ng-container (attached)=\"optionsAttached($event)\" [cdkPortalOutlet]=\"options\"></ng-container>\r\n<!--designer widget-->\r\n<ng-container [ngTemplateOutlet]=\"widgetContent?.templateRef\"></ng-container>\r\n}\r\n@case ('edit') {\r\n<!--edit / custom mode -->\r\n@if (context?.active) {\r\n<mat-toolbar class=\"row\">\r\n @if(context.mode === 'add') {\r\n <button mat-icon-button (click)=\"closeView(true)\" [disabled]=\"context.form.invalid\"><mat-icon>save</mat-icon></button>\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"closeView()\" [bizdocTooltip]=\"'Close'|translate\"><mat-icon>close</mat-icon></button>\r\n }\r\n @else {\r\n <button mat-icon-button (click)=\"closeView(true)\" [bizdocTooltip]=\"'Back'|translate\"><mat-icon>keyboard_backspace</mat-icon></button>\r\n }\r\n</mat-toolbar>\r\n<form autocomplete=\"off\" class=\"column\" (keydown)=\"handleKeyboardEvent($event)\">\r\n <h2 class=\"mat-h2\">{{context.title|translate}}</h2>\r\n <ng-container *ngTemplateOutlet=\"customView; context: context\"></ng-container>\r\n</form>\r\n}\r\n@else {\r\n<!--edit mode -->\r\n<mat-toolbar bizdoc-sticky>\r\n <button mat-icon-button (click)=\"save()\" [disabled]=\"form.invalid || !form.dirty\"><mat-icon>save</mat-icon></button>\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"close()\" [bizdocTooltip]=\"'Close'|translate\"><mat-icon>close</mat-icon></button>\r\n</mat-toolbar>\r\n<form autocomplete=\"off\" class=\"column\" (keydown)=\"handleKeyboardEvent($event)\">\r\n @if (model.resourceType) {\r\n <p class=\"message\" (click)=\"unlock($event)\" [innerHTML]=\"'UnlockMultilang'|translate\"></p>\r\n <br />\r\n }\r\n <ng-container [formGroup]=\"form\">\r\n <div class=\"row gap\">\r\n <bizdoc-localized-string #title formControlName=\"title\" [placeholder]=\"'Title'|translate\" required class=\"flex column\"></bizdoc-localized-string>\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Name'|translate}}</mat-label>\r\n <input matInput formControlName=\"name\" required />\r\n @if (form.controls.name.hasError('required')) {\r\n <mat-error [innerHTML]=\"'RequiredErr'|translate:('Name'|translate)\"></mat-error>\r\n }\r\n @if (form.controls.name.hasError('duplicate')) {\r\n <mat-error [innerHTML]=\"'DuplicateErr'|translate:('Name'|translate)\"></mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n @if (icon) {\r\n <bizdoc-icon-picker formControlName=\"icon\" required></bizdoc-icon-picker>\r\n }\r\n </ng-container>\r\n <!--arguments-->\r\n @if (arguments) {\r\n <ng-container (attached)=\"argumentsAttached($event)\" [cdkPortalOutlet]=\"arguments\"></ng-container>\r\n }\r\n <!--edit template-->\r\n <ng-container [ngTemplateOutlet]=\"editContent?.templateRef\"></ng-container>\r\n <!--options-->\r\n @if (options) {\r\n <ng-container (attached)=\"optionsAttached($event)\" [cdkPortalOutlet]=\"options\"></ng-container>\r\n }\r\n <!--privileges-->\r\n @if (form.controls.privileges) {\r\n <bizdoc-designer-privileges [form]=\"form.controls.privileges\"></bizdoc-designer-privileges>\r\n }\r\n</form>\r\n}\r\n}\r\n<!--add-->\r\n@case ('add') {\r\n<form autocomplete=\"off\" class=\"column\" (keydown)=\"handleKeyboardEvent($event)\">\r\n <!--arguments-->\r\n @if (arguments) {\r\n <ng-container (attached)=\"argumentsAttached($event)\" [cdkPortalOutlet]=\"arguments\"></ng-container>\r\n }\r\n <!--add template-->\r\n @if(addContent) {\r\n <ng-container [ngTemplateOutlet]=\"addContent.templateRef\"></ng-container>\r\n }\r\n @else {\r\n <ng-container [ngTemplateOutlet]=\"editContent?.templateRef\"></ng-container>\r\n }\r\n @if (options) {\r\n <!--options-->\r\n <ng-container (attached)=\"optionsAttached($event)\" [cdkPortalOutlet]=\"options\"></ng-container>\r\n }\r\n <!-- continue-->\r\n <div class=\"row actions\">\r\n <span class=\"divider\"></span>\r\n <button mat-stroked-button [disabled]=\"form.invalid\" (click)=\"continue()\" type=\"button\">{{'Continue'|translate}}&nbsp;<mat-icon class=\"mat-icon-rtl-mirror\">double_arrow</mat-icon></button>\r\n </div>\r\n</form>\r\n }\r\n}\r\n", styles: ["img.logo{display:block;height:26px}:host{flex:1;width:100%}form{min-width:280px;padding:8px}p.message{margin:5px}:host ::ng-deep .cdk-drag-handle{cursor:move}\n"], dependencies: [{ kind: "directive", type: i9.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i5.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "component", type: i8$1.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: i3$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3$1.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3$1.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { 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: "directive", type: i3$3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "component", type: LocalizedStringComponent, selector: "bizdoc-localized-string", inputs: ["class", "floatLabel", "value", "placeholder", "required", "disabled", "maxlength"] }, { kind: "component", type: DesignerPrivilegesComponent, selector: "bizdoc-designer-privileges", inputs: ["form"] }, { kind: "component", type: IconPickerComponent, selector: "bizdoc-icon-picker", inputs: ["value", "required", "disabled"], outputs: ["valueChanges"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
34631
34667
  }
34632
34668
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: DesignerItemComponent, decorators: [{
34633
34669
  type: Component,
34634
- args: [{ standalone: false, selector: 'bizdoc-designer-element', template: "@switch (mode) {\r\n<!--widget mode -->\r\n@case ('widget') {\r\n<!--icon -->\r\n @if (model.familyKey) {\r\n @if (SVG[model.familyKey]) {\r\n<img class=\"logo\" [src]=\"resource(SVG[model.familyKey])\" [bizdocTooltip]=\"model.family\" />\r\n }\r\n @else {\r\n<div>{{model.family}}</div>\r\n }\r\n }\r\n<!--options-->\r\n<ng-container (attached)=\"optionsAttached($event)\" [cdkPortalOutlet]=\"options\"></ng-container>\r\n<!--designer widget-->\r\n<ng-container [ngTemplateOutlet]=\"widgetContent?.templateRef\"></ng-container>\r\n}\r\n@case ('edit') {\r\n<!--edit / custom mode -->\r\n@if (context?.active) {\r\n<mat-toolbar class=\"row\">\r\n @if(context.mode === 'add') {\r\n <button mat-icon-button (click)=\"closeView(true)\" [disabled]=\"context.form.invalid\"><mat-icon>save</mat-icon></button>\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"closeView()\" [bizdocTooltip]=\"'Close'|translate\"><mat-icon>close</mat-icon></button>\r\n }\r\n @else {\r\n <button mat-icon-button (click)=\"closeView(true)\" [bizdocTooltip]=\"'Back'|translate\"><mat-icon>keyboard_backspace</mat-icon></button>\r\n }\r\n</mat-toolbar>\r\n<form autocomplete=\"off\" class=\"column\" (keydown)=\"handleKeyboardEvent($event)\">\r\n <h2 class=\"mat-h2\">{{context.title|translate}}</h2>\r\n <ng-container *ngTemplateOutlet=\"customView; context: context\"></ng-container>\r\n</form>\r\n}\r\n@else {\r\n<!--edit mode -->\r\n<mat-toolbar bizdoc-sticky>\r\n <button mat-icon-button (click)=\"save()\" [disabled]=\"form.invalid || !form.dirty\"><mat-icon>save</mat-icon></button>\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"close()\" [bizdocTooltip]=\"'Close'|translate\"><mat-icon>close</mat-icon></button>\r\n</mat-toolbar>\r\n<form autocomplete=\"off\" class=\"column\" (keydown)=\"handleKeyboardEvent($event)\">\r\n @if (model.resourceType) {\r\n <p class=\"message\" (click)=\"unlock($event)\" [innerHTML]=\"'UnlockMultilang'|translate\"></p>\r\n <br />\r\n }\r\n <ng-container [formGroup]=\"form\">\r\n <div class=\"row gap\">\r\n <bizdoc-localized-string #title formControlName=\"title\" [placeholder]=\"'Title'|translate\" required class=\"flex column\"></bizdoc-localized-string>\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Name'|translate}}</mat-label>\r\n <input matInput formControlName=\"name\" required />\r\n @if (form.controls.name.hasError('required')) {\r\n <mat-error [innerHTML]=\"'RequiredErr'|translate:('Name'|translate)\"></mat-error>\r\n }\r\n @if (form.controls.name.hasError('duplicate')) {\r\n <mat-error [innerHTML]=\"'DuplicateErr'|translate:('Name'|translate)\"></mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n @if (icon) {\r\n <bizdoc-icon-picker formControlName=\"icon\" required></bizdoc-icon-picker>\r\n }\r\n </ng-container>\r\n <!--arguments-->\r\n @if (arguments) {\r\n <ng-container (attached)=\"argumentsAttached($event)\" [cdkPortalOutlet]=\"arguments\"></ng-container>\r\n }\r\n <!--edit template-->\r\n <ng-container [ngTemplateOutlet]=\"editContent?.templateRef\"></ng-container>\r\n <!--options-->\r\n @if (options) {\r\n <ng-container (attached)=\"optionsAttached($event)\" [cdkPortalOutlet]=\"options\"></ng-container>\r\n }\r\n <!--privileges-->\r\n @if (form.controls.privileges) {\r\n <bizdoc-designer-privileges [form]=\"form.controls.privileges\"></bizdoc-designer-privileges>\r\n }\r\n</form>\r\n}\r\n}\r\n<!--add-->\r\n@case ('add') {\r\n<form autocomplete=\"off\" class=\"column\" (keydown)=\"handleKeyboardEvent($event)\">\r\n <!--arguments-->\r\n @if (arguments) {\r\n <ng-container (attached)=\"argumentsAttached($event)\" [cdkPortalOutlet]=\"arguments\"></ng-container>\r\n }\r\n <!--add template-->\r\n <ng-container [ngTemplateOutlet]=\"addContent?.templateRef\"></ng-container>\r\n @if (options) {\r\n <!--options-->\r\n <ng-container (attached)=\"optionsAttached($event)\" [cdkPortalOutlet]=\"options\"></ng-container>\r\n }\r\n <!-- continue-->\r\n <div class=\"row actions\">\r\n <span class=\"divider\"></span>\r\n <button mat-stroked-button [disabled]=\"form.invalid\" (click)=\"continue()\" type=\"button\">{{'Continue'|translate}}&nbsp;<mat-icon class=\"mat-icon-rtl-mirror\">double_arrow</mat-icon></button>\r\n </div>\r\n</form>\r\n }\r\n}\r\n", styles: ["img.logo{display:block;height:26px}:host{flex:1;width:100%}form{min-width:280px;padding:8px}p.message{margin:5px}:host ::ng-deep .cdk-drag-handle{cursor:move}\n"] }]
34670
+ args: [{ standalone: false, selector: 'bizdoc-designer-element', template: "@switch (mode) {\r\n<!--widget mode -->\r\n@case ('widget') {\r\n<!--icon -->\r\n @if (model.familyKey) {\r\n @if (SVG[model.familyKey]) {\r\n<img class=\"logo\" [src]=\"resource(SVG[model.familyKey])\" [bizdocTooltip]=\"model.family\" />\r\n }\r\n @else {\r\n<div>{{model.family}}</div>\r\n }\r\n }\r\n<!--options-->\r\n<ng-container (attached)=\"optionsAttached($event)\" [cdkPortalOutlet]=\"options\"></ng-container>\r\n<!--designer widget-->\r\n<ng-container [ngTemplateOutlet]=\"widgetContent?.templateRef\"></ng-container>\r\n}\r\n@case ('edit') {\r\n<!--edit / custom mode -->\r\n@if (context?.active) {\r\n<mat-toolbar class=\"row\">\r\n @if(context.mode === 'add') {\r\n <button mat-icon-button (click)=\"closeView(true)\" [disabled]=\"context.form.invalid\"><mat-icon>save</mat-icon></button>\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"closeView()\" [bizdocTooltip]=\"'Close'|translate\"><mat-icon>close</mat-icon></button>\r\n }\r\n @else {\r\n <button mat-icon-button (click)=\"closeView(true)\" [bizdocTooltip]=\"'Back'|translate\"><mat-icon>keyboard_backspace</mat-icon></button>\r\n }\r\n</mat-toolbar>\r\n<form autocomplete=\"off\" class=\"column\" (keydown)=\"handleKeyboardEvent($event)\">\r\n <h2 class=\"mat-h2\">{{context.title|translate}}</h2>\r\n <ng-container *ngTemplateOutlet=\"customView; context: context\"></ng-container>\r\n</form>\r\n}\r\n@else {\r\n<!--edit mode -->\r\n<mat-toolbar bizdoc-sticky>\r\n <button mat-icon-button (click)=\"save()\" [disabled]=\"form.invalid || !form.dirty\"><mat-icon>save</mat-icon></button>\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"close()\" [bizdocTooltip]=\"'Close'|translate\"><mat-icon>close</mat-icon></button>\r\n</mat-toolbar>\r\n<form autocomplete=\"off\" class=\"column\" (keydown)=\"handleKeyboardEvent($event)\">\r\n @if (model.resourceType) {\r\n <p class=\"message\" (click)=\"unlock($event)\" [innerHTML]=\"'UnlockMultilang'|translate\"></p>\r\n <br />\r\n }\r\n <ng-container [formGroup]=\"form\">\r\n <div class=\"row gap\">\r\n <bizdoc-localized-string #title formControlName=\"title\" [placeholder]=\"'Title'|translate\" required class=\"flex column\"></bizdoc-localized-string>\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Name'|translate}}</mat-label>\r\n <input matInput formControlName=\"name\" required />\r\n @if (form.controls.name.hasError('required')) {\r\n <mat-error [innerHTML]=\"'RequiredErr'|translate:('Name'|translate)\"></mat-error>\r\n }\r\n @if (form.controls.name.hasError('duplicate')) {\r\n <mat-error [innerHTML]=\"'DuplicateErr'|translate:('Name'|translate)\"></mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n @if (icon) {\r\n <bizdoc-icon-picker formControlName=\"icon\" required></bizdoc-icon-picker>\r\n }\r\n </ng-container>\r\n <!--arguments-->\r\n @if (arguments) {\r\n <ng-container (attached)=\"argumentsAttached($event)\" [cdkPortalOutlet]=\"arguments\"></ng-container>\r\n }\r\n <!--edit template-->\r\n <ng-container [ngTemplateOutlet]=\"editContent?.templateRef\"></ng-container>\r\n <!--options-->\r\n @if (options) {\r\n <ng-container (attached)=\"optionsAttached($event)\" [cdkPortalOutlet]=\"options\"></ng-container>\r\n }\r\n <!--privileges-->\r\n @if (form.controls.privileges) {\r\n <bizdoc-designer-privileges [form]=\"form.controls.privileges\"></bizdoc-designer-privileges>\r\n }\r\n</form>\r\n}\r\n}\r\n<!--add-->\r\n@case ('add') {\r\n<form autocomplete=\"off\" class=\"column\" (keydown)=\"handleKeyboardEvent($event)\">\r\n <!--arguments-->\r\n @if (arguments) {\r\n <ng-container (attached)=\"argumentsAttached($event)\" [cdkPortalOutlet]=\"arguments\"></ng-container>\r\n }\r\n <!--add template-->\r\n @if(addContent) {\r\n <ng-container [ngTemplateOutlet]=\"addContent.templateRef\"></ng-container>\r\n }\r\n @else {\r\n <ng-container [ngTemplateOutlet]=\"editContent?.templateRef\"></ng-container>\r\n }\r\n @if (options) {\r\n <!--options-->\r\n <ng-container (attached)=\"optionsAttached($event)\" [cdkPortalOutlet]=\"options\"></ng-container>\r\n }\r\n <!-- continue-->\r\n <div class=\"row actions\">\r\n <span class=\"divider\"></span>\r\n <button mat-stroked-button [disabled]=\"form.invalid\" (click)=\"continue()\" type=\"button\">{{'Continue'|translate}}&nbsp;<mat-icon class=\"mat-icon-rtl-mirror\">double_arrow</mat-icon></button>\r\n </div>\r\n</form>\r\n }\r\n}\r\n", styles: ["img.logo{display:block;height:26px}:host{flex:1;width:100%}form{min-width:280px;padding:8px}p.message{margin:5px}:host ::ng-deep .cdk-drag-handle{cursor:move}\n"] }]
34635
34671
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1$2.FormBuilder }, { type: i2$1.DomSanitizer }, { type: DesignerRef, decorators: [{
34636
34672
  type: Inject,
34637
34673
  args: [DesignerRef]
@@ -35658,6 +35694,30 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
35658
35694
  args: [{ standalone: false, selector: 'bizdoc-device-designer', template: "<bizdoc-designer-element [form]=\"form\">\r\n <ng-template bizdocEditContent>\r\n <ng-container [formGroup]=\"form\">\r\n <mat-form-field>\r\n <mat-label>{{'ExecutionMode'|translate}}</mat-label>\r\n <mat-select formControlName=\"executionMode\">\r\n <mat-option value=\"RegisteredDevice\">{{'RegisteredDevice'|translate}}</mat-option>\r\n <mat-option value=\"Challenge\">{{'Challenge'|translate}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n </ng-template>\r\n</bizdoc-designer-element>\r\n" }]
35659
35695
  }] });
35660
35696
 
35697
+ class TagDesignComponent extends DesignerTypeElementComponent {
35698
+ constructor(fb, element, ref) {
35699
+ super(fb, element, ref);
35700
+ this.form = this._fb.group({
35701
+ color: null,
35702
+ backgroundColor: null,
35703
+ system: true,
35704
+ });
35705
+ }
35706
+ ngOnInit() {
35707
+ // if (this.mode !== 'widget') {
35708
+ // }
35709
+ }
35710
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: TagDesignComponent, deps: [{ token: i1$2.FormBuilder }, { token: i0.ElementRef }, { token: DesignerRef }], target: i0.ɵɵFactoryTarget.Component }); }
35711
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.6", type: TagDesignComponent, isStandalone: false, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<bizdoc-designer-element [form]=\"form\" [icon]=\"true\">\r\n <ng-template bizdocEditContent>\r\n <ng-container [formGroup]=\"form\">\r\n <div class=\"row\">\r\n <bizdoc-color-picker formControlName=\"color\" [label]=\"'Color'|translate\" class=\"flex\"></bizdoc-color-picker>\r\n <bizdoc-color-picker formControlName=\"backgroundColor\" [label]=\"'BackgroundColor'|translate\" class=\"flex\"></bizdoc-color-picker>\r\n </div>\r\n <mat-checkbox formControlName=\"system\">{{'System'|translate}}</mat-checkbox>\r\n <!--<mat-chip [ngStyle]=\"{'background-color': form.controls.backgroundColor.value, 'color': form.controls.color.value}\">{{'Tag'|translate}}</mat-chip>-->\r\n </ng-container>\r\n </ng-template>\r\n</bizdoc-designer-element>\r\n", dependencies: [{ kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i2$7.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: ColorPicker, selector: "bizdoc-color-picker", inputs: ["label", "value", "required", "disabled"], outputs: ["valueChanges"] }, { kind: "directive", type: EditContentDirective, selector: "[bizdocEditContent]" }, { kind: "component", type: DesignerItemComponent, selector: "bizdoc-designer-element", inputs: ["privileges", "icon", "form", "context"], outputs: ["save", "continue"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
35712
+ }
35713
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: TagDesignComponent, decorators: [{
35714
+ type: Component,
35715
+ args: [{ standalone: false, template: "<bizdoc-designer-element [form]=\"form\" [icon]=\"true\">\r\n <ng-template bizdocEditContent>\r\n <ng-container [formGroup]=\"form\">\r\n <div class=\"row\">\r\n <bizdoc-color-picker formControlName=\"color\" [label]=\"'Color'|translate\" class=\"flex\"></bizdoc-color-picker>\r\n <bizdoc-color-picker formControlName=\"backgroundColor\" [label]=\"'BackgroundColor'|translate\" class=\"flex\"></bizdoc-color-picker>\r\n </div>\r\n <mat-checkbox formControlName=\"system\">{{'System'|translate}}</mat-checkbox>\r\n <!--<mat-chip [ngStyle]=\"{'background-color': form.controls.backgroundColor.value, 'color': form.controls.color.value}\">{{'Tag'|translate}}</mat-chip>-->\r\n </ng-container>\r\n </ng-template>\r\n</bizdoc-designer-element>\r\n" }]
35716
+ }], ctorParameters: () => [{ type: i1$2.FormBuilder }, { type: i0.ElementRef }, { type: DesignerRef, decorators: [{
35717
+ type: Inject,
35718
+ args: [DesignerRef]
35719
+ }] }] });
35720
+
35661
35721
  const SEARCH_DEBOUNCE = 200;
35662
35722
  /** */
35663
35723
  let ConfigurationDesignerComponent = class ConfigurationDesignerComponent {
@@ -35706,6 +35766,7 @@ let ConfigurationDesignerComponent = class ConfigurationDesignerComponent {
35706
35766
  { elements: r.notifications, type: 'Notifications', comp: NotificationDesignComponent, templates: r.tNotifications },
35707
35767
  { elements: r.devices, type: 'Devices', comp: DeviceDesignComponent, templates: r.tDevices },
35708
35768
  { elements: r.controls, type: 'Controls', comp: ControlDesignComponent },
35769
+ { elements: r.tags, type: 'Tags', comp: TagDesignComponent, templates: [{ title: this._translate.get('Tag') }] },
35709
35770
  { elements: r.policies, type: 'Policies', comp: PolicyDesignComponent, templates: r.tPolicies },
35710
35771
  ];
35711
35772
  const families = [];
@@ -35938,7 +35999,7 @@ let ConfigurationDesignerComponent = class ConfigurationDesignerComponent {
35938
35999
  }
35939
36000
  save() {
35940
36001
  this.saving = true;
35941
- const { controls, attributes, policies, actions, cubes, folders, forms, guides, reports, roles, notifications, rules, states, types, utilities, views, widgets, nodes, devices } = this.model;
36002
+ const { controls, tags, attributes, policies, actions, cubes, folders, forms, guides, reports, roles, notifications, rules, states, types, utilities, views, widgets, nodes, devices } = this.model;
35942
36003
  const model = {
35943
36004
  actions: strip(actions),
35944
36005
  cubes: strip(cubes),
@@ -35958,6 +36019,7 @@ let ConfigurationDesignerComponent = class ConfigurationDesignerComponent {
35958
36019
  nodes: strip(nodes),
35959
36020
  widgets: strip(widgets),
35960
36021
  controls: strip(controls),
36022
+ tags: strip(tags),
35961
36023
  attributes: strip(attributes)
35962
36024
  };
35963
36025
  this._ref.execute(model).subscribe({
@@ -36410,14 +36472,14 @@ let FormDesignerComponent = class FormDesignerComponent {
36410
36472
  });
36411
36473
  }
36412
36474
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: FormDesignerComponent, deps: [{ token: i1$2.FormBuilder }, { token: PaneRef }, { token: i0.ChangeDetectorRef }, { token: PromptService }, { token: SystemService }, { token: TranslateService }, { token: PanesRouter }, { token: SessionService }, { token: i0.ElementRef }, { token: UtilityRef }], target: i0.ɵɵFactoryTarget.Component }); }
36413
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.6", type: FormDesignerComponent, isStandalone: false, selector: "ng-component", host: { listeners: { "document:keydown": "handleKeyboardEvent($event)" } }, ngImport: i0, template: "<mat-toolbar>\r\n <button mat-icon-button (click)=\"save()\" [disabled]=\"!form.dirty || loading || saving\" [bizdocTooltip]=\"'Save'|translate\"><mat-icon>save</mat-icon></button>\r\n <button mat-icon-button (click)=\"undo()\" [bizdocTooltip]=\"'Undo' | translate\" [disabled]=\"historyIndex === -1\"><mat-icon class=\"mat-icon-rtl-mirror\">undo</mat-icon></button>\r\n <button mat-icon-button (click)=\"redo()\" [bizdocTooltip]=\"'Redo' | translate\" [disabled]=\"historyIndex === history.length - 1\"><mat-icon class=\"mat-icon-rtl-mirror\">redo</mat-icon></button>\r\n <span class=\"divider\"></span>\r\n <!--<button mat-icon-button (click)=\"opensettings()\" [bizdocTooltip]=\"'Settings'|translate\" type=\"button\"><mat-icon>settings</mat-icon></button>-->\r\n</mat-toolbar>\r\n@if (model) {\r\n <form autocomplete=\"off\" [formGroup]=\"form\">\r\n <div cdkDropList (cdkDropListDropped)=\"drop($event, sections)\">\r\n @for (s of sections.controls; track s; let si = $index) {\r\n <section class=\"column\" cdkDrag [attr.data-index]=\"si\">\r\n <div class=\"row\">\r\n <mat-icon class=\"section-drag\" cdkDragHandle>drag_indicator</mat-icon>\r\n <div class=\"column\" [formGroup]=\"s\">\r\n <h2 class=\"mat-h2\">{{s.controls.title.value|localizedString}}</h2>\r\n @if (s.controls.note.value) {\r\n <p class=\"mat-body-1\">{{s.controls.note.value|localizedString}}</p>\r\n }\r\n <div cdkDropList (cdkDropListDropped)=\"drop($event, s.controls.rows)\">\r\n @for (r of s.controls.rows.controls; track r; let ri = $index) {\r\n <div class=\"row designer-row\" cdkDrag [attr.data-index]=\"ri\">\r\n <mat-icon cdkDragHandle>drag_indicator</mat-icon>\r\n <div cdkDropList cdkDropListOrientation=\"horizontal\" (cdkDropListDropped)=\"drop($event, r.controls.fields)\" class=\"row\">\r\n @for (f of r.controls.fields.controls; track f; let fi = $index) {\r\n <div cdkDrag class=\"designer-field row\" [attr.data-index]=\"fi\">\r\n <!--<mat-icon cdkDragHandle>{{iconOf(f.value.type)}}</mat-icon>-->\r\n <bizdoc-box-control-design [metadata]=\"f.value\"></bizdoc-box-control-design>\r\n <div class=\"tools\">\r\n <button mat-stroked-button (click)=\"removeField(r, f)\" [bizdocTooltip]=\"'Discard'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n <button mat-stroked-button (click)=\"editField(f)\" [bizdocTooltip]=\"'Settings'|translate\" type=\"button\"><mat-icon>settings</mat-icon></button>\r\n </div>\r\n <!--<div *cdkDragPlaceholder class=\"drag-placeholder\"></div>-->\r\n </div>\r\n }\r\n </div>\r\n <div class=\"column\">\r\n <button mat-stroked-button [matMenuTriggerFor]=\"fieldMenu\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add</mat-icon></button>\r\n <mat-menu #fieldMenu>\r\n @for (c of controls; track c) {\r\n <button mat-menu-item (click)=\"addField(s, r, c, $event)\">\r\n <mat-icon>{{c.icon}}</mat-icon>\r\n <span>{{c.title}}</span>\r\n </button>\r\n }\r\n </mat-menu>\r\n <span class=\"divider\"></span>\r\n <div class=\"tools\">\r\n <button mat-stroked-button (click)=\"removeRow(s, r)\" [bizdocTooltip]=\"'Discard'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"tools row\">\r\n <button mat-stroked-button (click)=\"addRow(s, $event)\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add</mat-icon></button>\r\n <span class=\"divider\"></span>\r\n <button mat-stroked-button (click)=\"removeSection(s)\" [bizdocTooltip]=\"'Discard'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n <button mat-stroked-button (click)=\"editSection(s)\" [bizdocTooltip]=\"'Settings'|translate\" type=\"button\"><mat-icon>settings</mat-icon></button>\r\n </div>\r\n </section>\r\n }\r\n <button mat-stroked-button (click)=\"addSection($event)\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add</mat-icon></button>\r\n </div>\r\n </form>\r\n}\r\n", styles: ["form{margin:8px}:host ::ng-deep .cdk-drag-handle{cursor:move}section,.designer-row{border:2px solid transparent;border-radius:3px;padding:8px}.designer-field button{opacity:.1}.designer-field:hover button{opacity:1}section:hover,.designer-row:hover{border:2px dotted}section .designer-row{margin:5px 0}section .designer-row .designer-field{flex:1}.drag-placeholder{border:2px dashed}\n"], dependencies: [{ kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2$8.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i2$8.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i2$8.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { 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.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: "component", type: DesignControlComponent, selector: "bizdoc-box-control-design", inputs: ["metadata"] }, { kind: "pipe", type: LocalizedStringPipe, name: "localizedString" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
36475
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.6", type: FormDesignerComponent, isStandalone: false, selector: "ng-component", host: { listeners: { "document:keydown": "handleKeyboardEvent($event)" } }, ngImport: i0, template: "<mat-toolbar>\r\n <button mat-icon-button (click)=\"save()\" [disabled]=\"!form.dirty || loading || saving\" [bizdocTooltip]=\"'Save'|translate\"><mat-icon>save</mat-icon></button>\r\n <button mat-icon-button (click)=\"undo()\" [bizdocTooltip]=\"'Undo' | translate\" [disabled]=\"historyIndex === -1\"><mat-icon class=\"mat-icon-rtl-mirror\">undo</mat-icon></button>\r\n <button mat-icon-button (click)=\"redo()\" [bizdocTooltip]=\"'Redo' | translate\" [disabled]=\"historyIndex === history.length - 1\"><mat-icon class=\"mat-icon-rtl-mirror\">redo</mat-icon></button>\r\n <span class=\"divider\"></span>\r\n <!--<button mat-icon-button (click)=\"opensettings()\" [bizdocTooltip]=\"'Settings'|translate\" type=\"button\"><mat-icon>settings</mat-icon></button>-->\r\n</mat-toolbar>\r\n@if (model) {\r\n <form autocomplete=\"off\" [formGroup]=\"form\">\r\n <div cdkDropList (cdkDropListDropped)=\"drop($event, sections)\">\r\n @for (s of sections.controls; track s; let si = $index) {\r\n <section class=\"column\" cdkDrag [attr.data-index]=\"si\">\r\n <div class=\"row\">\r\n <mat-icon class=\"section-drag\" cdkDragHandle>drag_indicator</mat-icon>\r\n <div class=\"column\" [formGroup]=\"s\">\r\n <h2 class=\"mat-h2\">{{s.controls.title.value|localizedString}}</h2>\r\n @if (s.controls.note.value) {\r\n <p class=\"mat-body-1\">{{s.controls.note.value|localizedString}}</p>\r\n }\r\n <div cdkDropList (cdkDropListDropped)=\"drop($event, s.controls.rows)\">\r\n @for (r of s.controls.rows.controls; track r; let ri = $index) {\r\n <div class=\"row designer-row\" cdkDrag [attr.data-index]=\"ri\">\r\n <mat-icon cdkDragHandle>drag_indicator</mat-icon>\r\n <div cdkDropList cdkDropListOrientation=\"horizontal\" (cdkDropListDropped)=\"drop($event, r.controls.fields)\" class=\"row flex\">\r\n @for (f of r.controls.fields.controls; track f; let fi = $index) {\r\n <div cdkDrag class=\"designer-field row\" [attr.data-index]=\"fi\">\r\n <!--<mat-icon cdkDragHandle>{{iconOf(f.value.type)}}</mat-icon>-->\r\n <bizdoc-box-control-design [metadata]=\"f.value\"></bizdoc-box-control-design>\r\n <div class=\"tools\">\r\n <button mat-icon-button (click)=\"removeField(r, f)\" [bizdocTooltip]=\"'Discard'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n <button mat-icon-button (click)=\"editField(f)\" [bizdocTooltip]=\"'Settings'|translate\" type=\"button\"><mat-icon>settings</mat-icon></button>\r\n </div>\r\n <!--<div *cdkDragPlaceholder class=\"drag-placeholder\"></div>-->\r\n </div>\r\n }\r\n </div>\r\n <div class=\"column\">\r\n <button mat-icon-button [matMenuTriggerFor]=\"fieldMenu\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add</mat-icon></button>\r\n <mat-menu #fieldMenu>\r\n @for (c of controls; track c) {\r\n <button mat-menu-item (click)=\"addField(s, r, c, $event)\">\r\n <mat-icon>{{c.icon}}</mat-icon>\r\n <span>{{c.title}}</span>\r\n </button>\r\n }\r\n </mat-menu>\r\n <span class=\"divider\"></span>\r\n <div class=\"tools\">\r\n <button mat-icon-button (click)=\"removeRow(s, r)\" [bizdocTooltip]=\"'Discard'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"tools row\">\r\n <button mat-icon-button (click)=\"addRow(s, $event)\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add</mat-icon></button>\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"removeSection(s)\" [bizdocTooltip]=\"'Discard'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n <button mat-icon-button (click)=\"editSection(s)\" [bizdocTooltip]=\"'Settings'|translate\" type=\"button\"><mat-icon>settings</mat-icon></button>\r\n </div>\r\n </section>\r\n }\r\n <button mat-icon-button (click)=\"addSection($event)\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add</mat-icon></button>\r\n </div>\r\n </form>\r\n}\r\n", styles: ["form{margin:8px}:host ::ng-deep .cdk-drag-handle{cursor:move}section,.designer-row{border:2px solid transparent;border-radius:3px;padding:8px}.designer-field button{opacity:.1}.designer-field:hover button{opacity:1}section:hover,.designer-row:hover{border:2px dotted}section .designer-row{margin:5px 0}section .designer-row .designer-field{flex:1}.drag-placeholder{border:2px dashed}\n"], dependencies: [{ kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2$8.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i2$8.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i2$8.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: i8$1.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { 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.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: "component", type: DesignControlComponent, selector: "bizdoc-box-control-design", inputs: ["metadata"] }, { kind: "pipe", type: LocalizedStringPipe, name: "localizedString" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
36414
36476
  };
36415
36477
  FormDesignerComponent = __decorate([
36416
36478
  BizDoc({ selector: 'bizdoc-form-designer' })
36417
36479
  ], FormDesignerComponent);
36418
36480
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: FormDesignerComponent, decorators: [{
36419
36481
  type: Component,
36420
- args: [{ standalone: false, template: "<mat-toolbar>\r\n <button mat-icon-button (click)=\"save()\" [disabled]=\"!form.dirty || loading || saving\" [bizdocTooltip]=\"'Save'|translate\"><mat-icon>save</mat-icon></button>\r\n <button mat-icon-button (click)=\"undo()\" [bizdocTooltip]=\"'Undo' | translate\" [disabled]=\"historyIndex === -1\"><mat-icon class=\"mat-icon-rtl-mirror\">undo</mat-icon></button>\r\n <button mat-icon-button (click)=\"redo()\" [bizdocTooltip]=\"'Redo' | translate\" [disabled]=\"historyIndex === history.length - 1\"><mat-icon class=\"mat-icon-rtl-mirror\">redo</mat-icon></button>\r\n <span class=\"divider\"></span>\r\n <!--<button mat-icon-button (click)=\"opensettings()\" [bizdocTooltip]=\"'Settings'|translate\" type=\"button\"><mat-icon>settings</mat-icon></button>-->\r\n</mat-toolbar>\r\n@if (model) {\r\n <form autocomplete=\"off\" [formGroup]=\"form\">\r\n <div cdkDropList (cdkDropListDropped)=\"drop($event, sections)\">\r\n @for (s of sections.controls; track s; let si = $index) {\r\n <section class=\"column\" cdkDrag [attr.data-index]=\"si\">\r\n <div class=\"row\">\r\n <mat-icon class=\"section-drag\" cdkDragHandle>drag_indicator</mat-icon>\r\n <div class=\"column\" [formGroup]=\"s\">\r\n <h2 class=\"mat-h2\">{{s.controls.title.value|localizedString}}</h2>\r\n @if (s.controls.note.value) {\r\n <p class=\"mat-body-1\">{{s.controls.note.value|localizedString}}</p>\r\n }\r\n <div cdkDropList (cdkDropListDropped)=\"drop($event, s.controls.rows)\">\r\n @for (r of s.controls.rows.controls; track r; let ri = $index) {\r\n <div class=\"row designer-row\" cdkDrag [attr.data-index]=\"ri\">\r\n <mat-icon cdkDragHandle>drag_indicator</mat-icon>\r\n <div cdkDropList cdkDropListOrientation=\"horizontal\" (cdkDropListDropped)=\"drop($event, r.controls.fields)\" class=\"row\">\r\n @for (f of r.controls.fields.controls; track f; let fi = $index) {\r\n <div cdkDrag class=\"designer-field row\" [attr.data-index]=\"fi\">\r\n <!--<mat-icon cdkDragHandle>{{iconOf(f.value.type)}}</mat-icon>-->\r\n <bizdoc-box-control-design [metadata]=\"f.value\"></bizdoc-box-control-design>\r\n <div class=\"tools\">\r\n <button mat-stroked-button (click)=\"removeField(r, f)\" [bizdocTooltip]=\"'Discard'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n <button mat-stroked-button (click)=\"editField(f)\" [bizdocTooltip]=\"'Settings'|translate\" type=\"button\"><mat-icon>settings</mat-icon></button>\r\n </div>\r\n <!--<div *cdkDragPlaceholder class=\"drag-placeholder\"></div>-->\r\n </div>\r\n }\r\n </div>\r\n <div class=\"column\">\r\n <button mat-stroked-button [matMenuTriggerFor]=\"fieldMenu\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add</mat-icon></button>\r\n <mat-menu #fieldMenu>\r\n @for (c of controls; track c) {\r\n <button mat-menu-item (click)=\"addField(s, r, c, $event)\">\r\n <mat-icon>{{c.icon}}</mat-icon>\r\n <span>{{c.title}}</span>\r\n </button>\r\n }\r\n </mat-menu>\r\n <span class=\"divider\"></span>\r\n <div class=\"tools\">\r\n <button mat-stroked-button (click)=\"removeRow(s, r)\" [bizdocTooltip]=\"'Discard'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"tools row\">\r\n <button mat-stroked-button (click)=\"addRow(s, $event)\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add</mat-icon></button>\r\n <span class=\"divider\"></span>\r\n <button mat-stroked-button (click)=\"removeSection(s)\" [bizdocTooltip]=\"'Discard'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n <button mat-stroked-button (click)=\"editSection(s)\" [bizdocTooltip]=\"'Settings'|translate\" type=\"button\"><mat-icon>settings</mat-icon></button>\r\n </div>\r\n </section>\r\n }\r\n <button mat-stroked-button (click)=\"addSection($event)\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add</mat-icon></button>\r\n </div>\r\n </form>\r\n}\r\n", styles: ["form{margin:8px}:host ::ng-deep .cdk-drag-handle{cursor:move}section,.designer-row{border:2px solid transparent;border-radius:3px;padding:8px}.designer-field button{opacity:.1}.designer-field:hover button{opacity:1}section:hover,.designer-row:hover{border:2px dotted}section .designer-row{margin:5px 0}section .designer-row .designer-field{flex:1}.drag-placeholder{border:2px dashed}\n"] }]
36482
+ args: [{ standalone: false, template: "<mat-toolbar>\r\n <button mat-icon-button (click)=\"save()\" [disabled]=\"!form.dirty || loading || saving\" [bizdocTooltip]=\"'Save'|translate\"><mat-icon>save</mat-icon></button>\r\n <button mat-icon-button (click)=\"undo()\" [bizdocTooltip]=\"'Undo' | translate\" [disabled]=\"historyIndex === -1\"><mat-icon class=\"mat-icon-rtl-mirror\">undo</mat-icon></button>\r\n <button mat-icon-button (click)=\"redo()\" [bizdocTooltip]=\"'Redo' | translate\" [disabled]=\"historyIndex === history.length - 1\"><mat-icon class=\"mat-icon-rtl-mirror\">redo</mat-icon></button>\r\n <span class=\"divider\"></span>\r\n <!--<button mat-icon-button (click)=\"opensettings()\" [bizdocTooltip]=\"'Settings'|translate\" type=\"button\"><mat-icon>settings</mat-icon></button>-->\r\n</mat-toolbar>\r\n@if (model) {\r\n <form autocomplete=\"off\" [formGroup]=\"form\">\r\n <div cdkDropList (cdkDropListDropped)=\"drop($event, sections)\">\r\n @for (s of sections.controls; track s; let si = $index) {\r\n <section class=\"column\" cdkDrag [attr.data-index]=\"si\">\r\n <div class=\"row\">\r\n <mat-icon class=\"section-drag\" cdkDragHandle>drag_indicator</mat-icon>\r\n <div class=\"column\" [formGroup]=\"s\">\r\n <h2 class=\"mat-h2\">{{s.controls.title.value|localizedString}}</h2>\r\n @if (s.controls.note.value) {\r\n <p class=\"mat-body-1\">{{s.controls.note.value|localizedString}}</p>\r\n }\r\n <div cdkDropList (cdkDropListDropped)=\"drop($event, s.controls.rows)\">\r\n @for (r of s.controls.rows.controls; track r; let ri = $index) {\r\n <div class=\"row designer-row\" cdkDrag [attr.data-index]=\"ri\">\r\n <mat-icon cdkDragHandle>drag_indicator</mat-icon>\r\n <div cdkDropList cdkDropListOrientation=\"horizontal\" (cdkDropListDropped)=\"drop($event, r.controls.fields)\" class=\"row flex\">\r\n @for (f of r.controls.fields.controls; track f; let fi = $index) {\r\n <div cdkDrag class=\"designer-field row\" [attr.data-index]=\"fi\">\r\n <!--<mat-icon cdkDragHandle>{{iconOf(f.value.type)}}</mat-icon>-->\r\n <bizdoc-box-control-design [metadata]=\"f.value\"></bizdoc-box-control-design>\r\n <div class=\"tools\">\r\n <button mat-icon-button (click)=\"removeField(r, f)\" [bizdocTooltip]=\"'Discard'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n <button mat-icon-button (click)=\"editField(f)\" [bizdocTooltip]=\"'Settings'|translate\" type=\"button\"><mat-icon>settings</mat-icon></button>\r\n </div>\r\n <!--<div *cdkDragPlaceholder class=\"drag-placeholder\"></div>-->\r\n </div>\r\n }\r\n </div>\r\n <div class=\"column\">\r\n <button mat-icon-button [matMenuTriggerFor]=\"fieldMenu\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add</mat-icon></button>\r\n <mat-menu #fieldMenu>\r\n @for (c of controls; track c) {\r\n <button mat-menu-item (click)=\"addField(s, r, c, $event)\">\r\n <mat-icon>{{c.icon}}</mat-icon>\r\n <span>{{c.title}}</span>\r\n </button>\r\n }\r\n </mat-menu>\r\n <span class=\"divider\"></span>\r\n <div class=\"tools\">\r\n <button mat-icon-button (click)=\"removeRow(s, r)\" [bizdocTooltip]=\"'Discard'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"tools row\">\r\n <button mat-icon-button (click)=\"addRow(s, $event)\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add</mat-icon></button>\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"removeSection(s)\" [bizdocTooltip]=\"'Discard'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n <button mat-icon-button (click)=\"editSection(s)\" [bizdocTooltip]=\"'Settings'|translate\" type=\"button\"><mat-icon>settings</mat-icon></button>\r\n </div>\r\n </section>\r\n }\r\n <button mat-icon-button (click)=\"addSection($event)\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add</mat-icon></button>\r\n </div>\r\n </form>\r\n}\r\n", styles: ["form{margin:8px}:host ::ng-deep .cdk-drag-handle{cursor:move}section,.designer-row{border:2px solid transparent;border-radius:3px;padding:8px}.designer-field button{opacity:.1}.designer-field:hover button{opacity:1}section:hover,.designer-row:hover{border:2px dotted}section .designer-row{margin:5px 0}section .designer-row .designer-field{flex:1}.drag-placeholder{border:2px dashed}\n"] }]
36421
36483
  }], ctorParameters: () => [{ type: i1$2.FormBuilder }, { type: PaneRef }, { type: i0.ChangeDetectorRef }, { type: PromptService }, { type: SystemService }, { type: TranslateService }, { type: PanesRouter }, { type: SessionService }, { type: i0.ElementRef }, { type: UtilityRef }], propDecorators: { handleKeyboardEvent: [{
36422
36484
  type: HostListener,
36423
36485
  args: ['document:keydown', ['$event']]
@@ -37196,6 +37258,9 @@ class SystemModule {
37196
37258
  registerComponents(DESINER_COMPONENTS);
37197
37259
  TranslateService.set({
37198
37260
  en: {
37261
+ BackgroundColor: 'Background color',
37262
+ Tag: 'Tag',
37263
+ Tags: 'Tags',
37199
37264
  RegisteredDevice: 'Registered device',
37200
37265
  Challenge: 'Challenge',
37201
37266
  Settings: 'Settings',
@@ -37581,7 +37646,7 @@ class SystemModule {
37581
37646
  static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.0.6", ngImport: i0, type: SystemModule, declarations: [
37582
37647
  /** design */
37583
37648
  FormInviteDialog, PerformanceReportDesignComponent, NodeDesignerComponent, DesignerPrivilegesComponent, AddContentDirective, IconPickerComponent, CustomContentDirective, EditContentDirective, WidgetContentDirective,
37584
- DocumentStateWidgetDesignComponent, PolicyDesignComponent, StateDesignComponent, RoleDesignComponent, GuideDesignComponent, ControlDesignComponent, AttributeDesignComponent, DeviceDesignComponent, NotificationDesignComponent, RuleDesignComponent, ReportDesignerComponent, FolderDesignComponent, UtilityDesignComponent, FormDesignComponent, WidgetDesignComponent, SourceDesignComponent, JobDesignComponent, CubeDesignComponent, ActionDesignerComponent, ReportDesignerComponent, ViewDesignComponent, TypeDesignComponent,
37649
+ DocumentStateWidgetDesignComponent, PolicyDesignComponent, StateDesignComponent, TagDesignComponent, RoleDesignComponent, GuideDesignComponent, ControlDesignComponent, AttributeDesignComponent, DeviceDesignComponent, NotificationDesignComponent, RuleDesignComponent, ReportDesignerComponent, FolderDesignComponent, UtilityDesignComponent, FormDesignComponent, WidgetDesignComponent, SourceDesignComponent, JobDesignComponent, CubeDesignComponent, ActionDesignerComponent, ReportDesignerComponent, ViewDesignComponent, TypeDesignComponent,
37585
37650
  CubeIndexDesignComponent, ConfigurationDatasourceDesignComponent, ReturnToRoleActionDesignComponent, PivotViewDesignComponent, CubeViewDesignComponent, BoxFormDesignComponent, AnomalyRuleDesignComponent, UsageReportDesignComponent, DocumentsWidgetDesignComponent, PerformanceWidgetDesignComponent, DocumentsReportDesignComponent, TasksReportDesignComponent, ExploreViewDesignComponent, AnalysisWidgetDesignComponent, ParallelViewDesignComponent, SumViewDesignComponent, MatrixViewDesignComponent, ChartViewDesignComponent,
37586
37651
  LocalizedStringField,
37587
37652
  /** utilities */
@@ -37624,7 +37689,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
37624
37689
  declarations: [
37625
37690
  /** design */
37626
37691
  FormInviteDialog, PerformanceReportDesignComponent, NodeDesignerComponent, DesignerPrivilegesComponent, AddContentDirective, IconPickerComponent, CustomContentDirective, EditContentDirective, WidgetContentDirective,
37627
- DocumentStateWidgetDesignComponent, PolicyDesignComponent, StateDesignComponent, RoleDesignComponent, GuideDesignComponent, ControlDesignComponent, AttributeDesignComponent, DeviceDesignComponent, NotificationDesignComponent, RuleDesignComponent, ReportDesignerComponent, FolderDesignComponent, UtilityDesignComponent, FormDesignComponent, WidgetDesignComponent, SourceDesignComponent, JobDesignComponent, CubeDesignComponent, ActionDesignerComponent, ReportDesignerComponent, ViewDesignComponent, TypeDesignComponent,
37692
+ DocumentStateWidgetDesignComponent, PolicyDesignComponent, StateDesignComponent, TagDesignComponent, RoleDesignComponent, GuideDesignComponent, ControlDesignComponent, AttributeDesignComponent, DeviceDesignComponent, NotificationDesignComponent, RuleDesignComponent, ReportDesignerComponent, FolderDesignComponent, UtilityDesignComponent, FormDesignComponent, WidgetDesignComponent, SourceDesignComponent, JobDesignComponent, CubeDesignComponent, ActionDesignerComponent, ReportDesignerComponent, ViewDesignComponent, TypeDesignComponent,
37628
37693
  CubeIndexDesignComponent, ConfigurationDatasourceDesignComponent, ReturnToRoleActionDesignComponent, PivotViewDesignComponent, CubeViewDesignComponent, BoxFormDesignComponent, AnomalyRuleDesignComponent, UsageReportDesignComponent, DocumentsWidgetDesignComponent, PerformanceWidgetDesignComponent, DocumentsReportDesignComponent, TasksReportDesignComponent, ExploreViewDesignComponent, AnalysisWidgetDesignComponent, ParallelViewDesignComponent, SumViewDesignComponent, MatrixViewDesignComponent, ChartViewDesignComponent,
37629
37694
  LocalizedStringField,
37630
37695
  /** utilities */
@@ -37903,5 +37968,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
37903
37968
  * Generated bundle index. Do not edit.
37904
37969
  */
37905
37970
 
37906
- export { AccountService, AceInput, ActionDialog, ActionPicker, ActionPipe, ActionRef, ActionsWidget, AddressControlDesigner, AddressInput, AgoPipe, ArraySortPipe, AssignActionComponent, AttachmentInfo, AttachmentPreview, AuthenticationImpl, AutocompleteControlDesigner, AvatarComponent, BIZDOC_CONFIG, BackNavigation, BizDoc, BizDocApp, BizDocComponentFactoryResolver, BizDocModule, BrokenPage, BrowseFilterComponent, BrowseItemsComponent, CalendarPipe, ChatInfo, CheckboxComponent, CheckboxControlDesigner, ChecklistControlDesigner, CollapseNavigation, ColorPicker, CombinationPicker, CombinationPickerBody, CombinationPool, CommentsComponent, CompareContextDirective, CompareGroupDirective, CompareGroupsWidget, CompareNameDirective, ComposeFormComponent, ContactsComponent, ConversationComponent, CubeAccumAnalysisWidget, CubeAccumulationChartComponent, CubeAnalysisWidget, CubeChartAnalysisWidget, CubeChartComponent, CubeDocumentsGridComponent, CubeDocumentsTableComponent, CubeDocumentsWidget, CubeFilterComponent, CubeGridComponent, CubeInfo, CubeItemResolveService, CubeMatrixComponent, CubeParallelComponent, CubePerformanceWidget, CubePivotComponent, CubeService, CubeSpreadsheetComponent, CubeSumComponent, CubeViewComponent, CubeWidgetFilterComponent, DEFAULT_POLICY, DRAFT, DashboardComponent, DatasourceService, DateControlDesigner, DateFormatPipe, DateRangeControlDesigner, DateRangePipe, DesignerCubeFilterComponent, DesignerModule, DesignerRef, DifferencePipe, DocumentFactory, DocumentInfo, DocumentInfoComponent, DocumentResolveService, DocumentViewRef, DocumentViewsComponent, DurationFormatPipe, DurationPipe, EnterExitLeft, EnterExitRight, EnterExitTop, ExploreDocumentComponent, ExploreItemImplComponent, ExploreItemsComponent, ExpressionFieldDesigner, FONT_FAMILY, FadeSlideInOut, FieldKind, FileControlDesigner, FileInput, FilterPipe, FilterTagsComponent, FlowViewComponent, FormPipe, FormRef, GuideRef, GuideService, HelpTipComponent, HtmlFieldDesigner, INBOX, IdentityName, InputFieldDesigner, JoinPipe, JsonPipe, L18nPipe, LayoutComponent, ListingRef, LocalizedStringComponent, LocalizedStringControlDesigner, LocalizedStringPipe, LottieAnimation, MailboxService, MapInfo, MatIconAnimate, MaterialModule, NavigationBase, NavigationClose, NavigationEnd, NavigationExpand, NavigationFocus, NavigationMode, NavigationPaneBase, NavigationResize, NavigationStart, NodeRef, NoneComponent, NotificationsTableComponent, NumberControlDesigner, OpenPolicy, OptionsComponent, POPUP_DATA, PaneRef, PanesRouter, ParamNavigation, PeersPerformanceWidget, PendingResultsWidget, PersonalActivityWidget, PersonalScoreWidget, Popup, PopupRef, PrivilegeDisabledDirective, PrivilegeHiddenDirective, PulseAnimation, QueryParamNavigation, QuickCommentComponent, RadioButtonControlDesigner, RecentsWidget, RecipientResolveService, ReportArgumentsComponent, ReportRef, ReportViewerComponent, ReturnActionComponent, RolePipe, RouterImpl, SanitizeHtmlPipe, SaveChangesDialog, ScheduleViewComponent, SearchInput, SelectControlDesigner, SessionService, ShakeAnimation, SharedModule, SignatureControlDesigner, SlotRouterDirective, SpContainer, StateDirective, StatePipe, StickyToolbar, SubstitutionComponent, SwapAnimation, Tab, TagsComponent, TagsControlDesigner, TasksComponent, TextAreaFieldDesigner, TimeAgoPipe, TimeControlDesigner, TimePicker, TimespanControlDesigner, TimespanInput, ToNowPipe, TooltipDirective, TraceViewComponent, TranslatePipe, TranslateService, TypeAutocomplete, TypeSelect, TypeValuePipe, UsageChartComponent, UsagePivotComponent, UsageReportArgs, UserNamePipe, UtilityRef, VersionCompareComponent, VirtualTabs, WidgetItemComponent, WidgetRef, YesNoControlDesigner, cleanup, getMonthList, isArray, isBoolean, isDate, isFunction, isImage, isMobile, isObject, isPrimitive, isPromise, isString, modelize, programName, registerComponents };
37971
+ export { AccountService, AceInput, ActionDialog, ActionPicker, ActionPipe, ActionRef, ActionsWidget, AddressControlDesigner, AddressInput, AgoPipe, ArraySortPipe, AssignActionComponent, AttachmentInfo, AttachmentPreview, AuthenticationImpl, AutocompleteControlDesigner, AvatarComponent, BIZDOC_CONFIG, BackNavigation, BizDoc, BizDocApp, BizDocComponentFactoryResolver, BizDocModule, BrokenPage, BrowseFilterComponent, BrowseItemsComponent, CalendarPipe, ChatInfo, CheckboxComponent, CheckboxControlDesigner, ChecklistControlDesigner, CollapseNavigation, ColorPicker, CombinationPicker, CombinationPickerBody, CombinationPool, CommentsComponent, CompareContextDirective, CompareGroupDirective, CompareGroupsWidget, CompareNameDirective, ComposeFormComponent, ContactsComponent, ConversationComponent, CubeAccumAnalysisWidget, CubeAccumulationChartComponent, CubeAnalysisWidget, CubeChartAnalysisWidget, CubeChartComponent, CubeDocumentsGridComponent, CubeDocumentsTableComponent, CubeDocumentsWidget, CubeFilterComponent, CubeGridComponent, CubeInfo, CubeItemResolveService, CubeMatrixComponent, CubeParallelComponent, CubePerformanceWidget, CubePivotComponent, CubeService, CubeSpreadsheetComponent, CubeSumComponent, CubeViewComponent, CubeWidgetFilterComponent, DEFAULT_POLICY, DRAFT, DashboardComponent, DatasourceService, DateControlDesigner, DateFormatPipe, DateRangeControlDesigner, DateRangePipe, DesignerCubeFilterComponent, DesignerModule, DesignerRef, DifferencePipe, DocumentFactory, DocumentInfo, DocumentInfoComponent, DocumentResolveService, DocumentViewRef, DocumentViewsComponent, DurationFormatPipe, DurationPipe, EnterExitLeft, EnterExitRight, EnterExitTop, ExploreDocumentComponent, ExploreItemImplComponent, ExploreItemsComponent, ExpressionFieldDesigner, FONT_FAMILY, FadeSlideInOut, FieldKind, FileControlDesigner, FileInput, FilterPipe, FilterTagsComponent, FlowViewComponent, FormPipe, FormRef, GuideRef, GuideService, HelpTipComponent, HtmlFieldDesigner, INBOX, IdentityName, InputFieldDesigner, JoinPipe, JsonPipe, L18nPipe, LayoutComponent, ListingRef, LocalizedStringComponent, LocalizedStringControlDesigner, LocalizedStringPipe, LottieAnimation, MailboxService, MapInfo, MatIconAnimate, MaterialModule, NavigationBase, NavigationClose, NavigationEnd, NavigationExpand, NavigationFocus, NavigationMode, NavigationPaneBase, NavigationResize, NavigationStart, NodeRef, NoneComponent, NotificationsTableComponent, NumberControlDesigner, OpenPolicy, OptionsComponent, POPUP_DATA, PaneRef, PanesRouter, ParamNavigation, PeersPerformanceWidget, PendingResultsWidget, PersonalActivityWidget, PersonalScoreWidget, Popup, PopupRef, PrivilegeDisabledDirective, PrivilegeHiddenDirective, PulseAnimation, QueryParamNavigation, QuickCommentComponent, RadioButtonControlDesigner, RecentsWidget, RecipientResolveService, ReportArgumentsComponent, ReportRef, ReportViewerComponent, ReturnActionComponent, RolePipe, RouterImpl, SanitizeHtmlPipe, SaveChangesDialog, ScheduleViewComponent, SearchInput, SelectControlDesigner, SessionService, ShakeAnimation, SharedModule, SignatureControlDesigner, SlotRouterDirective, SpContainer, StateDirective, StatePipe, StickyToolbar, SubstitutionComponent, SwapAnimation, Tab, TagsComponent, TagsControlDesigner, TasksComponent, TextAreaFieldDesigner, TimeAgoPipe, TimeControlDesigner, TimePicker, TimespanControlDesigner, TimespanInput, ToNowPipe, TooltipDirective, TraceViewComponent, TranslatePipe, TranslateService, TypeAutocomplete, TypeSelect, TypeValuePipe, UsageChartComponent, UsagePivotComponent, UsageReportArgs, UserNamePipe, UtilityRef, VersionCompareComponent, VirtualTabs, WidgetItemComponent, WidgetRef, YesNoControlDesigner, cleanup, getMonthList, isArray, isBoolean, isDate, isFunction, isImage, isMobile, isObject, isPrimitive, isPromise, isString, modelize, playAudio, programName, registerComponents };
37907
37972
  //# sourceMappingURL=bizdoc-core.mjs.map