@bizdoc/core 2.4.4 → 2.4.6

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.
Files changed (44) hide show
  1. package/assets/bizdoc-schema.json +3 -0
  2. package/assets/themes/brown.min.css +1 -1
  3. package/assets/themes/dark.min.css +1 -1
  4. package/assets/themes/deep-purple-light-blue.min.css +2 -2
  5. package/assets/themes/deep-purple-teal.min.css +1 -1
  6. package/assets/themes/default.min.css +1 -1
  7. package/assets/themes/green.min.css +1 -1
  8. package/assets/themes/indigo.min.css +1 -1
  9. package/esm2022/lib/bizdoc.module.mjs +3 -3
  10. package/esm2022/lib/compose/compose.pane.component.mjs +1 -1
  11. package/esm2022/lib/compose/form-ref.mjs +12 -21
  12. package/esm2022/lib/compose/form-selector/form-selector.sheet.mjs +11 -41
  13. package/esm2022/lib/compose/form.component.mjs +12 -14
  14. package/esm2022/lib/compose/new-menu.component.mjs +16 -43
  15. package/esm2022/lib/compose/overlay.component.exp.mjs +93 -0
  16. package/esm2022/lib/core/base.mjs +1 -1
  17. package/esm2022/lib/core/configuration.mjs +1 -1
  18. package/esm2022/lib/core/document-factory.service.mjs +136 -0
  19. package/esm2022/lib/core/info/document-info.service.mjs +1 -1
  20. package/esm2022/lib/core/inputs/auto-complete.input.mjs +3 -3
  21. package/esm2022/lib/core/inputs/select.input.mjs +5 -4
  22. package/esm2022/lib/core/mailbox.service.mjs +7 -7
  23. package/esm2022/lib/core/models.mjs +1 -1
  24. package/esm2022/lib/home/home.desktop.component.mjs +9 -37
  25. package/esm2022/lib/notifications/types/invite.notification.mjs +8 -8
  26. package/esm2022/lib/shared.module.mjs +10 -8
  27. package/esm2022/public-api.mjs +2 -1
  28. package/fesm2022/bizdoc-core.mjs +276 -170
  29. package/fesm2022/bizdoc-core.mjs.map +1 -1
  30. package/lib/compose/form-ref.d.ts +7 -12
  31. package/lib/compose/form-selector/form-selector.sheet.d.ts +4 -6
  32. package/lib/compose/form.component.d.ts +1 -0
  33. package/lib/compose/new-menu.component.d.ts +5 -10
  34. package/lib/compose/overlay.component.exp.d.ts +28 -0
  35. package/lib/core/base.d.ts +6 -1
  36. package/lib/core/configuration.d.ts +1 -1
  37. package/lib/core/document-factory.service.d.ts +28 -0
  38. package/lib/core/mailbox.service.d.ts +1 -1
  39. package/lib/core/models.d.ts +1 -0
  40. package/lib/home/home.desktop.component.d.ts +3 -4
  41. package/lib/notifications/types/invite.notification.d.ts +3 -3
  42. package/lib/shared.module.d.ts +203 -202
  43. package/package.json +1 -1
  44. package/public-api.d.ts +2 -1
@@ -133,6 +133,7 @@ import { UndoRedo, ConnectorBridging, ConnectorEditing, Snapping, Diagram, BpmnD
133
133
  import { DiagramTools as DiagramTools$1, DiagramConstraints as DiagramConstraints$1, ConnectionPointOrigin, SnapConstraints, Diagram as Diagram$1, NodeConstraints as NodeConstraints$1, ComplexHierarchicalTreeService, DiagramModule, SymbolPaletteModule, ConnectorBridgingService, LineRoutingService, BpmnDiagramsService, LayoutAnimationService, UndoRedoService, SnappingService, ConnectorEditingService, LineDistributionService, ComplexHierarchicalTree, BpmnDiagrams as BpmnDiagrams$1, DataBinding, LineDistribution } from '@syncfusion/ej2-angular-diagrams';
134
134
  import * as i5$3 from '@syncfusion/ej2-angular-schedule';
135
135
  import { ScheduleModule, ExcelExportService as ExcelExportService$2, DayService, WorkWeekService, MonthService, MonthAgendaService, ICalendarExportService, AgendaService, YearService, Day, WorkWeek, Month, MonthAgenda, Agenda, Year, Schedule } from '@syncfusion/ej2-angular-schedule';
136
+ import { DIALOG_DATA } from '@angular/cdk/dialog';
136
137
  import * as i10$2 from '@syncfusion/ej2-angular-kanban';
137
138
  import { KanbanComponent, KanbanModule } from '@syncfusion/ej2-angular-kanban';
138
139
  import * as i3$4 from '@syncfusion/ej2-angular-inputs';
@@ -5262,7 +5263,7 @@ class TypeAutocomplete {
5262
5263
  }
5263
5264
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: TypeAutocomplete, deps: [{ token: i1$2.NgControl, optional: true, self: true }, { token: i2$8.FocusMonitor }, { token: i0.ElementRef }, { token: SessionService }, { token: DatasourceService }], target: i0.ɵɵFactoryTarget.Component }); }
5264
5265
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.4", type: TypeAutocomplete, selector: "bizdoc-autocomplete", inputs: { _type: ["type", "_type"], placeholder: "placeholder", text: "text", required: "required", disabled: "disabled", value: "value", minimumChars: "minimumChars", textFormControlName: "textFormControlName", textFormControl: "textFormControl" }, outputs: { textChange: "textChange", optionSelected: "optionSelected" }, host: { properties: { "class.floating": "this.shouldLabelFloat", "attr.aria-describedby": "this.describedBy", "id": "this.id" }, classAttribute: "row" }, providers: [{ provide: MatFormFieldControl, useExisting: TypeAutocomplete }], viewQueries: [{ propertyName: "inputElement", first: true, predicate: ["input"], descendants: true, static: true }, { propertyName: "trigger", first: true, predicate: ["input"], descendants: true, read: MatAutocompleteTrigger, static: true }], ngImport: i0, template: `<input matInput [matAutocomplete]="auto" [placeholder]="placeholder" [formControl]="_control" #input
5265
- (focus)="_onFocus()" (blur)="_onBlur()" [disabled]="disabled" [required]="required"/>
5266
+ (focus)="_onFocus()" (blur)="_onBlur()" [required]="required"/>
5266
5267
  <mat-autocomplete #auto (optionSelected)="_optionSelected($event)" [displayWith]='displayFn'>
5267
5268
  @for (v of _items$ | async; track v) {
5268
5269
  <mat-option [value]="v">
@@ -5285,7 +5286,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
5285
5286
  selector: 'bizdoc-autocomplete',
5286
5287
  providers: [{ provide: MatFormFieldControl, useExisting: TypeAutocomplete }],
5287
5288
  template: `<input matInput [matAutocomplete]="auto" [placeholder]="placeholder" [formControl]="_control" #input
5288
- (focus)="_onFocus()" (blur)="_onBlur()" [disabled]="disabled" [required]="required"/>
5289
+ (focus)="_onFocus()" (blur)="_onBlur()" [required]="required"/>
5289
5290
  <mat-autocomplete #auto (optionSelected)="_optionSelected($event)" [displayWith]='displayFn'>
5290
5291
  @for (v of _items$ | async; track v) {
5291
5292
  <mat-option [value]="v">
@@ -6565,7 +6566,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
6565
6566
 
6566
6567
  const DOCUMENT_MODEL = new InjectionToken('model');
6567
6568
  class MailboxService {
6568
- constructor(_session, _auth, messaging, _http) {
6569
+ constructor(messaging, _session, _auth, _http) {
6569
6570
  this._session = _session;
6570
6571
  this._auth = _auth;
6571
6572
  this._http = _http;
@@ -6924,13 +6925,13 @@ class MailboxService {
6924
6925
  }
6925
6926
  });
6926
6927
  }
6927
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: MailboxService, deps: [{ token: SessionService }, { token: AuthenticationImpl }, { token: HubService }, { token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
6928
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: MailboxService, deps: [{ token: HubService }, { token: SessionService }, { token: AuthenticationImpl }, { token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
6928
6929
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: MailboxService, providedIn: 'root' }); }
6929
6930
  }
6930
6931
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: MailboxService, decorators: [{
6931
6932
  type: Injectable,
6932
6933
  args: [{ providedIn: 'root' }]
6933
- }], ctorParameters: () => [{ type: SessionService }, { type: AuthenticationImpl }, { type: HubService }, { type: i1.HttpClient }] });
6934
+ }], ctorParameters: () => [{ type: HubService }, { type: SessionService }, { type: AuthenticationImpl }, { type: i1.HttpClient }] });
6934
6935
  function isHttpResponse(event) {
6935
6936
  return event.type === HttpEventType.Response;
6936
6937
  }
@@ -9351,10 +9352,8 @@ class FormRef {
9351
9352
  constructor(_router, _configuration) {
9352
9353
  this._router = _router;
9353
9354
  this._configuration = _configuration;
9354
- this._saving = new Subject();
9355
- this._stateChange = new Subject();
9356
- this._modelChange = new Subject();
9357
- this._navigating = new Subject();
9355
+ this._stateChange$ = new Subject();
9356
+ this._create$ = new Subject();
9358
9357
  this._help = _configuration.guide;
9359
9358
  }
9360
9359
  /** configuration options */
@@ -9362,23 +9361,12 @@ class FormRef {
9362
9361
  return this._configuration.options || {};
9363
9362
  }
9364
9363
  get name() { return this._configuration.name; }
9365
- /** intercept save */
9366
- saving() {
9367
- return this._saving.asObservable();
9368
- }
9369
- /** listen to page navigate events */
9370
- navigating() {
9371
- return this._navigating.asObservable();
9372
- }
9373
- modelChange() {
9374
- return this._modelChange.asObservable();
9375
- }
9376
9364
  get mode() { return this._mode; }
9377
9365
  /** user guide */
9378
9366
  get help() { return this._help; }
9379
9367
  set help(val) {
9380
9368
  this._help = val;
9381
- this._stateChange.next();
9369
+ this._stateChange$.next();
9382
9370
  }
9383
9371
  /**
9384
9372
  * navigate to a form page
@@ -9389,12 +9377,16 @@ class FormRef {
9389
9377
  queryParams: { page },
9390
9378
  });
9391
9379
  }
9380
+ /**
9381
+ * Overlay form mode
9382
+ * @param model
9383
+ */
9384
+ complete(model) {
9385
+ this._create$.next(model);
9386
+ }
9392
9387
  /** release events */
9393
9388
  _destroy() {
9394
- this._saving.complete();
9395
- this._stateChange.complete();
9396
- this._modelChange.complete();
9397
- this._navigating.complete();
9389
+ this._stateChange$.complete();
9398
9390
  }
9399
9391
  }
9400
9392
 
@@ -9502,8 +9494,7 @@ class ComposeFormComponent {
9502
9494
  }
9503
9495
  ngOnInit() {
9504
9496
  this._fileElement.nativeElement.addEventListener('change', this._fileChangeListener.bind(this));
9505
- this._messaging.callback$.pipe(takeUntil(this._destroy)).subscribe(e => this._instance.onMessage
9506
- && this._instance.onMessage(e.message));
9497
+ this._messaging.callback$.pipe(takeUntil(this._destroy)).subscribe(e => this._instance.onMessage && this._instance.onMessage(e.message));
9507
9498
  this._messaging.editing$.pipe(takeUntil(this._destroy)).subscribe(e => e.id === this.model.id &&
9508
9499
  this._editing(e.userId));
9509
9500
  this._messaging.update$.pipe(takeUntil(this._destroy)).subscribe(e => {
@@ -9528,9 +9519,8 @@ class ComposeFormComponent {
9528
9519
  });
9529
9520
  }
9530
9521
  ngOnChanges(changes) {
9531
- if (changes['page'] && !changes['page'].firstChange) {
9532
- this._formRef._navigating.next(changes['page'].currentValue);
9533
- }
9522
+ if (changes['page'] && !changes['page'].firstChange)
9523
+ this._navPage(changes['page'].currentValue);
9534
9524
  else {
9535
9525
  this._formRef && this._formRef._destroy();
9536
9526
  this.form = this._session.profile.forms.find(f => f.name === this.model.formId);
@@ -9539,7 +9529,7 @@ class ComposeFormComponent {
9539
9529
  throw (`Form '${this.form.name}' model missing '[Template()]' attribute.`);
9540
9530
  const comp = this._cf.component(this.form.template);
9541
9531
  this._formRef = new FormRef(this._router, this.form);
9542
- this._formRef._stateChange.pipe(startWith()).
9532
+ this._formRef._stateChange$.pipe(startWith()).
9543
9533
  subscribe(() => this.help = this._formRef.help);
9544
9534
  const injector = Injector.create({
9545
9535
  providers: [
@@ -9555,7 +9545,7 @@ class ComposeFormComponent {
9555
9545
  this._instance = componentRef.instance;
9556
9546
  this._formRef._mode = this._instance.mode = this.mode;
9557
9547
  this.page !== undefined &&
9558
- this._formRef._navigating.next(this.page);
9548
+ this._navPage(this.page);
9559
9549
  this._instance.form.statusChanges.pipe(takeUntil(this._destroy)).subscribe(() => {
9560
9550
  const { dirty, valid } = this._instance.form;
9561
9551
  this.dirty = dirty;
@@ -9572,6 +9562,11 @@ class ComposeFormComponent {
9572
9562
  this._reset();
9573
9563
  }
9574
9564
  }
9565
+ _navPage(page) {
9566
+ if (!this._instance.onNavigate)
9567
+ throw 'Implement fomr onNavigate';
9568
+ this._instance.onNavigate(page);
9569
+ }
9575
9570
  _fileChangeListener(ev) {
9576
9571
  const { files } = ev.target, arr = [];
9577
9572
  if (files && files.length) {
@@ -9688,10 +9683,7 @@ class ComposeFormComponent {
9688
9683
  */
9689
9684
  save(feedback = true) {
9690
9685
  this._applychanges();
9691
- const saveArgs = { cancel: false };
9692
- this._formRef._saving.next(saveArgs);
9693
- if (saveArgs.cancel)
9694
- return of(false);
9686
+ //const saveArgs = { cancel: false } as SaveEventArgs;
9695
9687
  if (this._instance.onSave) {
9696
9688
  const result = this._instance.onSave();
9697
9689
  if (isBoolean(result)) {
@@ -9739,7 +9731,6 @@ class ComposeFormComponent {
9739
9731
  }));
9740
9732
  }
9741
9733
  back() {
9742
- this._formRef._navigating.next(undefined);
9743
9734
  this._router.navigate([], {
9744
9735
  queryParams: { page: undefined },
9745
9736
  });
@@ -9872,7 +9863,6 @@ class ComposeFormComponent {
9872
9863
  });
9873
9864
  if (emitEvent !== false) {
9874
9865
  this.modelChange.emit(this.model);
9875
- this._formRef._modelChange.next(this.model);
9876
9866
  }
9877
9867
  }
9878
9868
  ngOnDestroy() {
@@ -17465,10 +17455,210 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
17465
17455
  args: [NOTIFICATION_DATA]
17466
17456
  }] }, { type: AccountService }, { type: TranslateService }, { type: RouterImpl }, { type: SessionService }, { type: ChatInfo }] });
17467
17457
 
17468
- class InviteNotification {
17469
- constructor(_router, _mailbox, session, translate, notification) {
17458
+ class OverlayFormComponent {
17459
+ constructor(session, _router, _injector, _cf, _guide, _messaging, formId) {
17470
17460
  this._router = _router;
17461
+ this._injector = _injector;
17462
+ this._cf = _cf;
17463
+ this._guide = _guide;
17464
+ this._messaging = _messaging;
17465
+ this.created$ = new Subject();
17466
+ this._destroy = new Subject();
17467
+ this.form = session.profile.forms.find(f => f.name === formId);
17468
+ }
17469
+ ngOnInit() {
17470
+ if (!this.form.template)
17471
+ throw (`Form '${this.form.name}' model missing '[Template()]' attribute.`);
17472
+ const comp = this._cf.component(this.form.template);
17473
+ this._formRef = new FormRef(this._router, this.form);
17474
+ // create on form event
17475
+ this._formRef._create$.pipe(takeUntil(this._destroy)).
17476
+ subscribe({
17477
+ next: m => {
17478
+ this.creating = true;
17479
+ this.created$.next(m);
17480
+ },
17481
+ error: this.created$.error.bind(this)
17482
+ });
17483
+ const injector = Injector.create({
17484
+ providers: [
17485
+ {
17486
+ provide: FormRef, useValue: this._formRef
17487
+ }
17488
+ ], parent: this._injector
17489
+ });
17490
+ const componentRef = this.container.createComponent(comp, { injector });
17491
+ const instance = componentRef.instance;
17492
+ this._formRef._mode = instance.mode = 'overlay';
17493
+ // callback
17494
+ this._messaging.callback$.pipe(takeUntil(this._destroy)).subscribe(e => instance.onMessage && instance.onMessage(e.message));
17495
+ }
17496
+ guide() {
17497
+ this._guide.start(this.form.guide);
17498
+ }
17499
+ ngOnDestroy() {
17500
+ this.created$.unsubscribe();
17501
+ this._destroy.next();
17502
+ }
17503
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: OverlayFormComponent, deps: [{ token: SessionService }, { token: RouterImpl }, { token: i0.Injector }, { token: BizDocComponentFactoryResolver }, { token: GuideService }, { token: HubService }, { token: DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
17504
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.4", type: OverlayFormComponent, selector: "ng-component", viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true, read: ViewContainerRef, static: true }], ngImport: i0, template: `
17505
+ <h1 class="mat-h1 row">{{form.title}}
17506
+ @if(form.guide) {
17507
+ <span class="divider"></span>
17508
+ <button mat-icon-button (click)="guide()" [bizdocTooltip]="'Help'|translate"><mat-icon>support</mat-icon></button>
17509
+ }
17510
+ </h1>
17511
+ <hr />
17512
+ <mat-progress-bar mode="indeterminate" [style.visibility]="creating ? 'visible':'hidden'"></mat-progress-bar>
17513
+ <ng-container #container></ng-container>`, isInline: true, styles: [":host{display:flex;flex-direction:column}\n"], dependencies: [{ kind: "component", type: i7$2.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: i8.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
17514
+ }
17515
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: OverlayFormComponent, decorators: [{
17516
+ type: Component,
17517
+ args: [{ template: `
17518
+ <h1 class="mat-h1 row">{{form.title}}
17519
+ @if(form.guide) {
17520
+ <span class="divider"></span>
17521
+ <button mat-icon-button (click)="guide()" [bizdocTooltip]="'Help'|translate"><mat-icon>support</mat-icon></button>
17522
+ }
17523
+ </h1>
17524
+ <hr />
17525
+ <mat-progress-bar mode="indeterminate" [style.visibility]="creating ? 'visible':'hidden'"></mat-progress-bar>
17526
+ <ng-container #container></ng-container>`, host: {}, styles: [":host{display:flex;flex-direction:column}\n"] }]
17527
+ }], ctorParameters: () => [{ type: SessionService }, { type: RouterImpl }, { type: i0.Injector }, { type: BizDocComponentFactoryResolver }, { type: GuideService }, { type: HubService }, { type: undefined, decorators: [{
17528
+ type: Inject,
17529
+ args: [DIALOG_DATA]
17530
+ }] }], propDecorators: { container: [{
17531
+ type: ViewChild,
17532
+ args: ['container', { static: true, read: ViewContainerRef }]
17533
+ }] } });
17534
+
17535
+ class DocumentFactory {
17536
+ constructor(_session, _mailbox, _ps, _overlay, _dir, _router) {
17537
+ this._session = _session;
17471
17538
  this._mailbox = _mailbox;
17539
+ this._ps = _ps;
17540
+ this._overlay = _overlay;
17541
+ this._dir = _dir;
17542
+ this._router = _router;
17543
+ }
17544
+ create(formId) {
17545
+ const form = this._session.profile.forms.find(f => f.name == formId);
17546
+ return new Observable(observe => {
17547
+ switch (form.mode) {
17548
+ case 'Overlay':
17549
+ const overlayRef = this._overlay.create({
17550
+ positionStrategy: this._overlay.position().global().
17551
+ centerHorizontally().centerVertically(),
17552
+ hasBackdrop: true,
17553
+ height: '90vh',
17554
+ width: '90vw',
17555
+ direction: this._dir.value,
17556
+ backdropClass: 'cdk-overlay-transparent-backdrop',
17557
+ panelClass: 'home-panel'
17558
+ });
17559
+ const injector = Injector.create({
17560
+ providers: [
17561
+ {
17562
+ provide: DIALOG_DATA,
17563
+ useValue: formId
17564
+ }
17565
+ ]
17566
+ });
17567
+ const portal = new ComponentPortal(OverlayFormComponent, null, injector);
17568
+ const compRef = overlayRef.attach(portal);
17569
+ compRef.instance.created$.
17570
+ subscribe(m => {
17571
+ if (m !== false)
17572
+ this._mailbox.create(formId, m).subscribe({
17573
+ next: d => {
17574
+ observe.next(d);
17575
+ },
17576
+ error: e => {
17577
+ this._error(e);
17578
+ overlayRef.detach();
17579
+ observe.error();
17580
+ },
17581
+ complete: () => {
17582
+ overlayRef.detach();
17583
+ observe.complete();
17584
+ }
17585
+ });
17586
+ else {
17587
+ observe.error();
17588
+ overlayRef.detach();
17589
+ }
17590
+ });
17591
+ merge(overlayRef.backdropClick(), overlayRef.keydownEvents().pipe(filter$1(k => k.key === 'Escape'))).
17592
+ subscribe(() => {
17593
+ observe.error();
17594
+ overlayRef.detach();
17595
+ });
17596
+ default:
17597
+ this._mailbox.create(formId).subscribe({
17598
+ next: m => observe.next(m),
17599
+ error: e => {
17600
+ this._error(e);
17601
+ observe.error();
17602
+ },
17603
+ complete: () => observe.complete()
17604
+ });
17605
+ }
17606
+ });
17607
+ }
17608
+ _nav(item) {
17609
+ this._router.navigate(['mailbox/i', item.id.encodeId()], {
17610
+ policy: OpenPolicy.Clear,
17611
+ state: { item }
17612
+ });
17613
+ }
17614
+ copy(documentId) {
17615
+ return new Observable(observe => this._mailbox.copy(documentId).
17616
+ subscribe({
17617
+ next: d => {
17618
+ this._ps.toast('Copied', d.number);
17619
+ observe.next();
17620
+ }, error: e => {
17621
+ this._error(e);
17622
+ observe.error();
17623
+ },
17624
+ complete: () => observe.complete()
17625
+ }));
17626
+ }
17627
+ /**
17628
+ * Handle http error response
17629
+ * @param e
17630
+ */
17631
+ _error(e) {
17632
+ if (e.constructor.name === 'PositionError')
17633
+ switch (e.code) {
17634
+ case 1:
17635
+ this._ps.error('UserDeniedGeoErr');
17636
+ break;
17637
+ default:
17638
+ this._ps.error('GeoErr');
17639
+ }
17640
+ else
17641
+ switch (e.status) {
17642
+ case 406: // server ValidationException thrown
17643
+ const message = e.error;
17644
+ this._ps.errorString(message);
17645
+ break;
17646
+ default:
17647
+ this._ps.error();
17648
+ }
17649
+ }
17650
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: DocumentFactory, deps: [{ token: SessionService }, { token: MailboxService }, { token: PromptService }, { token: i1$1.Overlay }, { token: i1$3.Directionality }, { token: RouterImpl }], target: i0.ɵɵFactoryTarget.Injectable }); }
17651
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: DocumentFactory, providedIn: 'root' }); }
17652
+ }
17653
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: DocumentFactory, decorators: [{
17654
+ type: Injectable,
17655
+ args: [{ providedIn: 'root' }]
17656
+ }], ctorParameters: () => [{ type: SessionService }, { type: MailboxService }, { type: PromptService }, { type: i1$1.Overlay }, { type: i1$3.Directionality }, { type: RouterImpl }] });
17657
+
17658
+ class InviteNotification {
17659
+ constructor(_router, _factory, session, translate, notification) {
17660
+ this._router = _router;
17661
+ this._factory = _factory;
17472
17662
  this.notification = notification;
17473
17663
  const form = session.profile.forms.find(f => f.name == notification.formId);
17474
17664
  this.message = notification.message ||
@@ -17484,17 +17674,17 @@ class InviteNotification {
17484
17674
  if (this.notification.recipientId)
17485
17675
  this._router.navigate(['mailbox/i', this.notification.recipientId.encodeId()]);
17486
17676
  else
17487
- this._mailbox.create(this.notification.formId).subscribe(m => {
17677
+ this._factory.create(this.notification.formId).subscribe(m => {
17488
17678
  this._router.navigate(['mailbox/i', m.id.encodeId()]);
17489
17679
  });
17490
17680
  }
17491
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: InviteNotification, deps: [{ token: RouterImpl }, { token: MailboxService }, { token: SessionService }, { token: TranslateService }, { token: NOTIFICATION_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
17681
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: InviteNotification, deps: [{ token: RouterImpl }, { token: DocumentFactory }, { token: SessionService }, { token: TranslateService }, { token: NOTIFICATION_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
17492
17682
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: InviteNotification, selector: "ng-component", host: { listeners: { "click": "open($event)" } }, ngImport: i0, template: `<span [innerHTML]="message"></span>`, isInline: true }); }
17493
17683
  }
17494
17684
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: InviteNotification, decorators: [{
17495
17685
  type: Component,
17496
17686
  args: [{ template: `<span [innerHTML]="message"></span>` }]
17497
- }], ctorParameters: () => [{ type: RouterImpl }, { type: MailboxService }, { type: SessionService }, { type: TranslateService }, { type: undefined, decorators: [{
17687
+ }], ctorParameters: () => [{ type: RouterImpl }, { type: DocumentFactory }, { type: SessionService }, { type: TranslateService }, { type: undefined, decorators: [{
17498
17688
  type: Inject,
17499
17689
  args: [NOTIFICATION_DATA]
17500
17690
  }] }], propDecorators: { open: [{
@@ -20482,21 +20672,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
20482
20672
 
20483
20673
  const DEBOUNCE_SEARCH_TIME = 200;
20484
20674
  class ComposeMenuComponent {
20485
- constructor(_session, _mailbox, _ps, _router) {
20675
+ constructor(_session, _mailbox, _factory, _router) {
20486
20676
  this._session = _session;
20487
20677
  this._mailbox = _mailbox;
20488
- this._ps = _ps;
20678
+ this._factory = _factory;
20489
20679
  this._router = _router;
20490
20680
  this.change = new EventEmitter();
20491
20681
  this.search = new FormControl(null);
20492
20682
  this._destroy = new Subject();
20493
- this._working = new Subject();
20683
+ this._working$ = new Subject();
20494
20684
  this.defaultgroup = { forms: [] };
20495
20685
  this.groups = [];
20496
20686
  }
20497
20687
  ngOnInit() {
20498
20688
  this.items = this.search.valueChanges.pipe(takeUntil(this._destroy), debounceTime(DEBOUNCE_SEARCH_TIME), switchMap(v => this._mailbox.findAll(v ? { contains: v } : { type: 'recent' }, { take: 5 })));
20499
- this._working.pipe(takeUntil(this._destroy), debounceTime(200)).subscribe(v => this.working = v);
20689
+ this._working$.pipe(takeUntil(this._destroy), debounceTime(200)).subscribe(v => this.working = v);
20500
20690
  this._session.profile.forms.forEach(f => {
20501
20691
  if (!f.creatable)
20502
20692
  return;
@@ -20515,27 +20705,23 @@ class ComposeMenuComponent {
20515
20705
  });
20516
20706
  }
20517
20707
  clear() { this.search.setValue(null); }
20518
- create(form) {
20519
- this._working.next(true);
20520
- this._mailbox.create(form).subscribe({
20708
+ create(formId) {
20709
+ this._working$.next(true);
20710
+ this._factory.create(formId).subscribe({
20521
20711
  next: i => this._nav(i),
20522
- error: e => this._error(e),
20523
- complete: () => this._working.next(false)
20712
+ complete: () => this._working$.next(false)
20524
20713
  });
20525
20714
  }
20526
20715
  copy(item) {
20527
- this._working.next(true);
20716
+ this._working$.next(true);
20528
20717
  this.search.disable();
20529
- this._mailbox.copy(item.documentId).
20718
+ this._factory.copy(item.documentId).
20530
20719
  subscribe({
20531
20720
  next: i => {
20532
- this.search.setValue(null);
20533
- this._ps.toast('Copied', i.number);
20721
+ this.clear();
20534
20722
  this._nav(i);
20535
- }, error: e => {
20536
- this._error(e);
20537
20723
  }, complete: () => {
20538
- this._working.next(false);
20724
+ this._working$.next(false);
20539
20725
  this.search.enable();
20540
20726
  }
20541
20727
  });
@@ -20547,40 +20733,17 @@ class ComposeMenuComponent {
20547
20733
  state: { item }
20548
20734
  });
20549
20735
  }
20550
- /**
20551
- * Handle http error response
20552
- * @param e
20553
- */
20554
- _error(e) {
20555
- if (e.constructor.name === 'PositionError')
20556
- switch (e.code) {
20557
- case 1:
20558
- this._ps.error('UserDeniedGeoErr');
20559
- break;
20560
- default:
20561
- this._ps.error('GeoErr');
20562
- }
20563
- else
20564
- switch (e.status) {
20565
- case 406: // server ValidationException thrown
20566
- const message = e.error;
20567
- this._ps.errorString(message);
20568
- break;
20569
- default:
20570
- this._ps.error();
20571
- }
20572
- }
20573
20736
  ngOnDestroy() {
20574
20737
  this._destroy.next();
20575
20738
  this._destroy.complete();
20576
20739
  }
20577
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ComposeMenuComponent, deps: [{ token: SessionService }, { token: MailboxService }, { token: PromptService }, { token: PanesRouter }], target: i0.ɵɵFactoryTarget.Component }); }
20740
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ComposeMenuComponent, deps: [{ token: SessionService }, { token: MailboxService }, { token: DocumentFactory }, { token: PanesRouter }], target: i0.ɵɵFactoryTarget.Component }); }
20578
20741
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.4", type: ComposeMenuComponent, selector: "bizdoc-new-menu", outputs: { change: "change" }, ngImport: i0, template: "<mat-progress-bar mode=\"indeterminate\" [style.visibility]=\"working ? 'visible':'hidden'\"></mat-progress-bar>\n<div class=\"container\">\n <h1 class=\"mat-h1\">{{'New'|translate}}</h1>\n <!--<span class=\"mat-subheader\">BizDoc</span>-->\n\n <mat-nav-list dense>\n @for (f of defaultgroup.forms; track f) {\n <mat-list-item (click)=\"create(f.name)\" [attr.data-help]=\"f.name + '-form'\">\n <mat-icon matListItemIcon>{{f.icon || 'description'}}</mat-icon>\n <span matListItemTitle>{{f.title}}</span>\n </mat-list-item>\n }\n @for (g of groups; track g; let index = $index) {\n @if (index) {\n <mat-divider></mat-divider>\n }\n <h3 mat-subheader>{{g.title}}</h3>\n @for (f of g.forms; track f) {\n <mat-list-item (click)=\"create(f.name)\" [attr.data-help]=\"f.name + '-form'\">\n <mat-icon matListItemIcon>{{f.icon || 'description'}}</mat-icon>\n <span matListItemTitle>{{f.title}}</span>\n </mat-list-item>\n }\n }\n </mat-nav-list>\n</div>\n<!--<mat-spinner radius=\"25\" *ngIf=\"creating===f.name\"></mat-spinner>-->\n", styles: ["h1{font-weight:500;margin:0 16px}form{padding:8px}hr{opacity:.4}\n"], dependencies: [{ kind: "component", type: i7$2.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: i2$4.MatNavList, selector: "mat-nav-list", exportAs: ["matNavList"] }, { kind: "component", type: i2$4.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: i2$4.MatListItemIcon, selector: "[matListItemIcon]" }, { kind: "directive", type: i2$4.MatListSubheaderCssMatStyler, selector: "[mat-subheader], [matSubheader]" }, { kind: "component", type: i6$1.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: i2$4.MatListItemTitle, selector: "[matListItemTitle]" }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], animations: [] }); }
20579
20742
  }
20580
20743
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ComposeMenuComponent, decorators: [{
20581
20744
  type: Component,
20582
20745
  args: [{ selector: 'bizdoc-new-menu', animations: [], template: "<mat-progress-bar mode=\"indeterminate\" [style.visibility]=\"working ? 'visible':'hidden'\"></mat-progress-bar>\n<div class=\"container\">\n <h1 class=\"mat-h1\">{{'New'|translate}}</h1>\n <!--<span class=\"mat-subheader\">BizDoc</span>-->\n\n <mat-nav-list dense>\n @for (f of defaultgroup.forms; track f) {\n <mat-list-item (click)=\"create(f.name)\" [attr.data-help]=\"f.name + '-form'\">\n <mat-icon matListItemIcon>{{f.icon || 'description'}}</mat-icon>\n <span matListItemTitle>{{f.title}}</span>\n </mat-list-item>\n }\n @for (g of groups; track g; let index = $index) {\n @if (index) {\n <mat-divider></mat-divider>\n }\n <h3 mat-subheader>{{g.title}}</h3>\n @for (f of g.forms; track f) {\n <mat-list-item (click)=\"create(f.name)\" [attr.data-help]=\"f.name + '-form'\">\n <mat-icon matListItemIcon>{{f.icon || 'description'}}</mat-icon>\n <span matListItemTitle>{{f.title}}</span>\n </mat-list-item>\n }\n }\n </mat-nav-list>\n</div>\n<!--<mat-spinner radius=\"25\" *ngIf=\"creating===f.name\"></mat-spinner>-->\n", styles: ["h1{font-weight:500;margin:0 16px}form{padding:8px}hr{opacity:.4}\n"] }]
20583
- }], ctorParameters: () => [{ type: SessionService }, { type: MailboxService }, { type: PromptService }, { type: PanesRouter }], propDecorators: { change: [{
20746
+ }], ctorParameters: () => [{ type: SessionService }, { type: MailboxService }, { type: DocumentFactory }, { type: PanesRouter }], propDecorators: { change: [{
20584
20747
  type: Output
20585
20748
  }] } });
20586
20749
 
@@ -20630,13 +20793,13 @@ class HomeComponent extends HomeBase {
20630
20793
  this._pinned = value;
20631
20794
  this._is('pinned', value);
20632
20795
  }
20633
- constructor(_router, _service, _mailbox, _popup, _sb, _guide, injector, session, messaging, translate, snackBar, config) {
20796
+ constructor(_router, _service, _mailbox, _factory, _popup, _guide, injector, session, messaging, translate, snackBar, config) {
20634
20797
  super(session, messaging, translate, snackBar, injector, config);
20635
20798
  this._router = _router;
20636
20799
  this._service = _service;
20637
20800
  this._mailbox = _mailbox;
20801
+ this._factory = _factory;
20638
20802
  this._popup = _popup;
20639
- this._sb = _sb;
20640
20803
  this._guide = _guide;
20641
20804
  this.sysAdmin = this._session.isSystem;
20642
20805
  this.forms = this._session.profile.forms.filter(f => f.creatable);
@@ -20688,44 +20851,16 @@ class HomeComponent extends HomeBase {
20688
20851
  }
20689
20852
  _create() {
20690
20853
  this.creating = true;
20691
- this._mailbox.create(this.forms[0].name).
20854
+ this._factory.create(this.forms[0].name).
20692
20855
  subscribe({
20693
20856
  next: r => {
20694
- this.creating = false;
20695
20857
  this._router.navigate(['mailbox/i', r.id.encodeId()], {
20696
20858
  policy: OpenPolicy.Clear,
20697
20859
  state: { item: r }
20698
20860
  });
20699
- }, error: (e) => {
20700
- this._handleErr(e);
20701
- this.creating = false;
20702
- }
20861
+ }, complete: () => this.creating = false
20703
20862
  });
20704
20863
  }
20705
- _handleErr(response) {
20706
- if (response.constructor.name === 'PositionError')
20707
- switch (response.code) {
20708
- case 1:
20709
- this._sb.error('UserDeniedGeoErr');
20710
- break;
20711
- default:
20712
- this._sb.error('GeoErr');
20713
- }
20714
- else
20715
- switch (response.status) {
20716
- case 401:
20717
- this._sb.error('Unauthorized');
20718
- break;
20719
- case 406:
20720
- this._sb.errorString(response.error);
20721
- break;
20722
- case 426: // license
20723
- this._sb.error('LicenseErr');
20724
- break;
20725
- default:
20726
- this._sb.error();
20727
- }
20728
- }
20729
20864
  opensubmenu(menu) {
20730
20865
  if (this.submenu === menu)
20731
20866
  this.submenuMode = this.submenuMode === 'full' ? 'shrink' : 'full';
@@ -20836,13 +20971,13 @@ class HomeComponent extends HomeBase {
20836
20971
  const item = evt.option.value;
20837
20972
  item.instance.onPick();
20838
20973
  }
20839
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: HomeComponent, deps: [{ token: PanesRouter }, { token: SearchService }, { token: MailboxService }, { token: Popup }, { token: PromptService }, { token: GuideService }, { token: i0.Injector }, { token: SessionService }, { token: HubService }, { token: TranslateService }, { token: i3.MatSnackBar }, { token: BIZDOC_CONFIG }], target: i0.ɵɵFactoryTarget.Component }); }
20974
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: HomeComponent, deps: [{ token: PanesRouter }, { token: SearchService }, { token: MailboxService }, { token: DocumentFactory }, { token: Popup }, { token: GuideService }, { token: i0.Injector }, { token: SessionService }, { token: HubService }, { token: TranslateService }, { token: i3.MatSnackBar }, { token: BIZDOC_CONFIG }], target: i0.ɵɵFactoryTarget.Component }); }
20840
20975
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.4", type: HomeComponent, selector: "bizdoc-home", host: { listeners: { "document:keydown": "handleKeyboardEvent($event)" }, classAttribute: "mat-app-background" }, viewQueries: [{ propertyName: "drawer", first: true, predicate: MatSidenav, descendants: true, static: true }, { propertyName: "main", first: true, predicate: SlotsComponent, descendants: true }, { propertyName: "input", first: true, predicate: ["input"], descendants: true }, { propertyName: "trigger", first: true, predicate: ["input"], descendants: true, read: MatAutocompleteTrigger }], usesInheritance: true, ngImport: i0, template: "<!-- menu -->\n<div [class.nav-collapsed]=\"collapsed\" [class.nav-open]=\"submenu\"\n [class.dialog]=\"dialog\"\n class=\"nav-menu row\">\n <div class=\"column\">\n <div>\n @if (forms.length) {\n <div [class.active]=\"activeMenu === 'new'\" class=\"new-container\">\n <button mat-raised-button\n [bizdocTooltip]=\"'Compose'|translate\" bizdocTooltipPosition=\"end\" [bizdocTooltipDisabled]=\"!collapsed\"\n (click)=\"opennew()\" [disabled]=\"creating\"\n [attr.aria-label]=\"'Compose'| translate\" color=\"primary\" data-help=\"compose\">\n <mat-icon>add</mat-icon>\n <span class=\"nav-label\">{{'Compose'| translate}}</span>\n </button>\n </div>\n }\n <mat-nav-list>\n <mat-list-item [attr.aria-label]=\"'Dashboard' | translate\"\n (click)=\"nav('dashboard')\" [class.active]=\"activeMenu === 'dashboard'\"\n data-help=\"dashboard\"\n [bizdocTooltip]=\"'Dashboard'|translate\" bizdocTooltipPosition=\"end\" [bizdocTooltipDisabled]=\"!collapsed\">\n <mat-icon matListItemIcon>apps</mat-icon><span class=\"nav-label\" matListItemTitle>{{'Dashboard' | translate}}</span>\n </mat-list-item>\n <mat-list-item (click)=\"mails()\" [bizdocTooltip]=\"'Mailbox'|translate\" bizdocTooltipPosition=\"end\" [bizdocTooltipDisabled]=\"!collapsed\"\n [class.active]=\"activeMenu === 'mailbox'\"\n [attr.aria-label]=\"'Mailbox' | translate\" data-help=\"folders\">\n <mat-icon matListItemIcon [matBadge]=\"profile.inboxCount\" [matBadgeHidden]=\"profile.inboxCount < 1\" matBadgeColor=\"accent\" aria-hidden=\"false\">inbox</mat-icon>\n <span class=\"nav-label\" matListItemTitle>{{'Mailbox' | translate}}</span>\n </mat-list-item>\n @if (schedulerEnabled) {\n <mat-list-item [attr.aria-label]=\"'Scheduler' | translate\"\n (click)=\"nav('schedule')\" [class.active]=\"activeMenu === 'schedule'\"\n [bizdocTooltip]=\"'Scheduler'|translate\" bizdocTooltipPosition=\"end\" [bizdocTooltipDisabled]=\"!collapsed\">\n <mat-icon matListItemIcon class=\"mat-icon-rtl-mirror\">date_range</mat-icon><span class=\"nav-label\" matListItemTitle>{{ 'Scheduler' | translate}}</span>\n </mat-list-item>\n }\n @if (chatEnabled) {\n <mat-list-item data-help=\"chat\" [attr.aria-label]=\"'Chat' | translate\"\n (click)=\"nav('contacts')\" [class.active]=\"activeMenu === 'contacts'\"\n [bizdocTooltip]=\"'Chat'|translate\" bizdocTooltipPosition=\"end\" [bizdocTooltipDisabled]=\"!collapsed\">\n <mat-icon matListItemIcon [matBadge]=\"profile.conversationsCount\" [matBadgeHidden]=\"!profile.conversationsCount\" matBadgeColor=\"accent\" aria-hidden=\"false\">chat</mat-icon>\n <span class=\"nav-label\" matListItemTitle>{{ 'Chat' | translate}}</span>\n </mat-list-item>\n }\n <mat-divider></mat-divider>\n @if (enableAnalysis && profile.cubes.length) {\n <mat-list-item (click)=\"opensubmenu('cube')\"\n [class.active]=\"activeMenu === 'cube'\"\n [bizdocTooltip]=\"'Cube'|translate\" bizdocTooltipPosition=\"end\" [bizdocTooltipDisabled]=\"!collapsed\"\n data-help=\"cube\" [attr.aria-label]=\"'Cube' | translate\">\n <mat-icon matListItemIcon>equalizer</mat-icon><span class=\"nav-label\" matListItemTitle>{{'Cube' | translate}}</span>\n </mat-list-item>\n }\n @if (profile.reports.length) {\n <mat-list-item (click)=\"opensubmenu('reports')\"\n [class.active]=\"activeMenu === 'reports'\"\n [bizdocTooltip]=\"'Reports'|translate\" bizdocTooltipPosition=\"end\" [bizdocTooltipDisabled]=\"!collapsed\" data-help=\"reports\" [attr.aria-label]=\"'Reports' | translate\">\n <mat-icon matListItemIcon>list_alt</mat-icon><span class=\"nav-label\" matListItemTitle>{{'Reports' | translate}}</span>\n </mat-list-item>\n }\n @if (sysAdmin) {\n <mat-divider></mat-divider>\n <mat-list-item (click)=\"opensubmenu('admin')\"\n [class.active]=\"activeMenu === 'admin'\"\n [bizdocTooltip]=\"'System'|translate\" bizdocTooltipPosition=\"end\" [bizdocTooltipDisabled]=\"!collapsed\" [attr.aria-label]=\"'System' | translate\">\n <mat-icon matListItemIcon>device_hub</mat-icon>\n <span class=\"nav-label\" matListItemTitle>{{'Workflow' | translate}}</span>\n </mat-list-item>\n }\n </mat-nav-list>\n </div>\n <span class=\"divider\"></span>\n <!--<lottie name=\"lf30_editor_qr7zgmcs\" *ngIf=\"loading\"></lottie>-->\n <div class=\"sign-in\">\n <button mat-icon-button data-help=\"sign-in\" [bizdocTooltip]=\"'Settings' | translate\" bizdocTooltipPosition=\"above\"\n [attr.aria-label]=\"'Settings' | translate\" (click)=\"options($event)\">\n <mat-icon matAnimate=\"rotate\">settingson</mat-icon>\n </button>\n <span class=\"divider\"></span>\n <button mat-icon-button [attr.aria-label]=\"'Power' | translate\" (click)=\"signout($event)\" [bizdocTooltip]=\"'Exit'|translate\" bizdocTooltipPosition=\"above\">\n <mat-icon class=\"mat-icon-rtl-mirror\">logout</mat-icon>\n </button>\n </div>\n </div>\n <!-- -->\n @if (submenu) {\n <div class=\"sub-menu\" (mouseleave)=\"collapsesubmenu()\" [@submenu]=\"submenuMode\" (@submenu.done)=\"resize()\">\n @if (submenu !== 'new') {\n <div class=\"action\">\n <button mat-icon-button (click)=\"togglePinned()\" [bizdocTooltip]=\"(pinned?'Collapse':'Expand')|translate\"><mat-icon class=\"mat-icon-rtl-mirror\">{{pinned ? 'push_pin' : 'menu'}}</mat-icon></button>\n </div>\n }\n @switch (submenu) {\n @case ('new') {\n <bizdoc-new-menu (change)=\"closesubmenu()\"></bizdoc-new-menu>\n }\n @case ('mailbox') {\n <bizdoc-folders-menu [collapsed]=\"submenuMode === 'shrink'\" (change)=\"collapsesubmenu()\"></bizdoc-folders-menu>\n }\n @case ('admin') {\n <bizdoc-admin-menu [collapsed]=\"submenuMode === 'shrink'\"></bizdoc-admin-menu>\n }\n @case ('reports') {\n <bizdoc-reports-menu [collapsed]=\"submenuMode === 'shrink'\" (change)=\"collapsesubmenu()\"></bizdoc-reports-menu>\n }\n @case ('cube') {\n <bizdoc-cube-menu [collapsed]=\"submenuMode === 'shrink'\" (change)=\"collapsesubmenu()\"></bizdoc-cube-menu>\n }\n }\n </div>\n }\n @if (dialog) {\n <div class=\"backdrop\"></div>\n }\n</div>\n<div class=\"main\">\n <!-- title -->\n <div class=\"row header\" [@title]=\"main.titleVariant\">\n <h1>\n @if (main.swap) {\n <button mat-icon-button (click)=\"main.back()\" [bizdocTooltip]=\"'Back'|translate\"><mat-icon class=\"mat-icon-rtl-mirror\">arrow_circle_left</mat-icon></button>\n }\n @for (p of main.panes; track p; let first = $first) {\n @if (!first) {\n <span class=\"breadcrumbs\">\\</span>\n }\n {{p.title}}\n }\n @if (main.panes[0]?.guide) {\n <button mat-icon-button (click)=\"guide(main.panes[0].guide)\" [bizdocTooltip]=\"'Help'|translate\"><mat-icon>help</mat-icon></button>\n }\n </h1>\n <span class=\"divider\">\n </span>\n <!--search-->\n <input type=\"text\"\n [@search]=\"searching\"\n (@search.done)=\"searching && focus()\"\n #input\n (keydown.escape)=\"collapse($event)\"\n [attr.aria-label]=\"'Search'|translate\"\n [formControl]=\"search\"\n [matAutocomplete]=\"auto\" class=\"search-box\">\n <mat-autocomplete autoActiveFirstOption #auto=\"matAutocomplete\" (optionSelected)=\"goto($event)\" [displayWith]=\"displayWith\">\n @for (o of results | async; track o) {\n <mat-option [value]=\"o\">\n <ng-container (attached)=\"onAttached(o, $event)\" [cdkPortalOutlet]=\"o.portal\"></ng-container>\n </mat-option>\n }\n </mat-autocomplete>\n <button mat-icon-button (click)=\"toggle($event)\" [bizdocTooltip]=\"'Search'|translate\" class=\"tool\"><mat-icon>search</mat-icon></button>\n <!--notifications-->\n <button mat-icon-button (click)=\"notifs($event)\" [bizdocTooltip]=\"'Notifications'|translate\" bizdocTooltipPosition=\"start\" class=\"tool\"\n [attr.aria-label]=\"'Notifications'| translate\"\n data-help=\"notifications\">\n <mat-icon matListItemIcon [matBadge]=\"profile.notificationsCount\" [matBadgeHidden]=\"!profile.notificationsCount\"\n matBadgeColor=\"accent\" aria-hidden=\"false\"\n [class.filled]=\"profile.notificationsCount\">\n {{profile.options.notifications.active ? 'notifications':'notifications_off'}}\n </mat-icon>\n </button>\n </div>\n <!--panes & tabs-->\n <bizdoc-panes-outlet (dialogChange)=\"dialog = $event\" #main></bizdoc-panes-outlet>\n</div>\n", styles: [":host{display:flex;height:100%}::ng-deep .nav-collapsed .mdc-list-item{padding-right:0}::ng-deep [dir=rtl] .nav-collapsed .mdc-list-item{padding-left:0}.nav-menu{z-index:1}.nav-menu .sub-menu{min-width:210px;display:block;z-index:1;overflow-x:hidden;align-self:stretch}.nav-menu .sub-menu .action{display:flex;-ms-flex-direction:row-reverse;-webkit-flex-direction:row-reverse;flex-direction:row-reverse}.nav-menu .new-container{margin:8px 8px 0;text-align:center}.nav-menu .new-container button{min-width:35px;padding:0 14px;height:40px}.nav-menu .new-container button .mat-icon{margin-right:2px;margin-left:2px}.nav-menu .nav-icon{display:none}.nav-menu.nav-collapsed .nav-icon{display:unset}.nav-menu.nav-collapsed .nav-label{display:none}.nav-menu.nav-collapsed .sign-in{-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column;align-items:center}.nav-menu .sign-in{display:flex;-ms-flex-direction:row;-webkit-flex-direction:row;flex-direction:row;overflow:hidden;margin-bottom:5px;align-items:baseline}.backdrop{position:absolute;z-index:200;width:100%;height:100%;display:block;background:#424242;opacity:.8}.main{flex:1;overflow-x:hidden;display:flex;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column}.main .header{align-items:center;min-width:max-content}.main .header h1{font-size:xx-large;margin:12px;font-weight:100}.main .header h1 button{vertical-align:middle}.main .header h1 .breadcrumbs{font-size:smaller}.main .header .search-box{font-size:large}\n"], dependencies: [{ kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "directive", type: i5$2.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "component", type: i2$4.MatNavList, selector: "mat-nav-list", exportAs: ["matNavList"] }, { kind: "component", type: i2$4.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: i2$4.MatListItemIcon, selector: "[matListItemIcon]" }, { kind: "component", type: i6$1.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: i2$4.MatListItemTitle, selector: "[matListItemTitle]" }, { kind: "component", type: i4$1.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$5.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i4$1.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i8.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i8.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatIconAnimate, selector: "[matAnimate]" }, { kind: "directive", type: TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "component", type: AdminMenuComponent, selector: "bizdoc-admin-menu", inputs: ["collapsed"] }, { kind: "component", type: SlotsComponent, selector: "bizdoc-panes-outlet", outputs: ["dialogChange"] }, { kind: "component", type: CubeMenuComponent, selector: "bizdoc-cube-menu", inputs: ["collapsed"], outputs: ["change"] }, { kind: "component", type: ReportsMenuComponent, selector: "bizdoc-reports-menu", inputs: ["collapsed"], outputs: ["change"] }, { kind: "component", type: FoldersMenuComponent, selector: "bizdoc-folders-menu", inputs: ["collapsed"], outputs: ["change"] }, { kind: "component", type: ComposeMenuComponent, selector: "bizdoc-new-menu", outputs: ["change"] }, { kind: "pipe", type: i9.AsyncPipe, name: "async" }, { kind: "pipe", type: TranslatePipe, name: "translate" }], animations: [submenuAnimation, panesTitleAnimation, searchAnimation] }); }
20841
20976
  }
20842
20977
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: HomeComponent, decorators: [{
20843
20978
  type: Component,
20844
20979
  args: [{ selector: 'bizdoc-home', host: { class: 'mat-app-background' }, animations: [submenuAnimation, panesTitleAnimation, searchAnimation], template: "<!-- menu -->\n<div [class.nav-collapsed]=\"collapsed\" [class.nav-open]=\"submenu\"\n [class.dialog]=\"dialog\"\n class=\"nav-menu row\">\n <div class=\"column\">\n <div>\n @if (forms.length) {\n <div [class.active]=\"activeMenu === 'new'\" class=\"new-container\">\n <button mat-raised-button\n [bizdocTooltip]=\"'Compose'|translate\" bizdocTooltipPosition=\"end\" [bizdocTooltipDisabled]=\"!collapsed\"\n (click)=\"opennew()\" [disabled]=\"creating\"\n [attr.aria-label]=\"'Compose'| translate\" color=\"primary\" data-help=\"compose\">\n <mat-icon>add</mat-icon>\n <span class=\"nav-label\">{{'Compose'| translate}}</span>\n </button>\n </div>\n }\n <mat-nav-list>\n <mat-list-item [attr.aria-label]=\"'Dashboard' | translate\"\n (click)=\"nav('dashboard')\" [class.active]=\"activeMenu === 'dashboard'\"\n data-help=\"dashboard\"\n [bizdocTooltip]=\"'Dashboard'|translate\" bizdocTooltipPosition=\"end\" [bizdocTooltipDisabled]=\"!collapsed\">\n <mat-icon matListItemIcon>apps</mat-icon><span class=\"nav-label\" matListItemTitle>{{'Dashboard' | translate}}</span>\n </mat-list-item>\n <mat-list-item (click)=\"mails()\" [bizdocTooltip]=\"'Mailbox'|translate\" bizdocTooltipPosition=\"end\" [bizdocTooltipDisabled]=\"!collapsed\"\n [class.active]=\"activeMenu === 'mailbox'\"\n [attr.aria-label]=\"'Mailbox' | translate\" data-help=\"folders\">\n <mat-icon matListItemIcon [matBadge]=\"profile.inboxCount\" [matBadgeHidden]=\"profile.inboxCount < 1\" matBadgeColor=\"accent\" aria-hidden=\"false\">inbox</mat-icon>\n <span class=\"nav-label\" matListItemTitle>{{'Mailbox' | translate}}</span>\n </mat-list-item>\n @if (schedulerEnabled) {\n <mat-list-item [attr.aria-label]=\"'Scheduler' | translate\"\n (click)=\"nav('schedule')\" [class.active]=\"activeMenu === 'schedule'\"\n [bizdocTooltip]=\"'Scheduler'|translate\" bizdocTooltipPosition=\"end\" [bizdocTooltipDisabled]=\"!collapsed\">\n <mat-icon matListItemIcon class=\"mat-icon-rtl-mirror\">date_range</mat-icon><span class=\"nav-label\" matListItemTitle>{{ 'Scheduler' | translate}}</span>\n </mat-list-item>\n }\n @if (chatEnabled) {\n <mat-list-item data-help=\"chat\" [attr.aria-label]=\"'Chat' | translate\"\n (click)=\"nav('contacts')\" [class.active]=\"activeMenu === 'contacts'\"\n [bizdocTooltip]=\"'Chat'|translate\" bizdocTooltipPosition=\"end\" [bizdocTooltipDisabled]=\"!collapsed\">\n <mat-icon matListItemIcon [matBadge]=\"profile.conversationsCount\" [matBadgeHidden]=\"!profile.conversationsCount\" matBadgeColor=\"accent\" aria-hidden=\"false\">chat</mat-icon>\n <span class=\"nav-label\" matListItemTitle>{{ 'Chat' | translate}}</span>\n </mat-list-item>\n }\n <mat-divider></mat-divider>\n @if (enableAnalysis && profile.cubes.length) {\n <mat-list-item (click)=\"opensubmenu('cube')\"\n [class.active]=\"activeMenu === 'cube'\"\n [bizdocTooltip]=\"'Cube'|translate\" bizdocTooltipPosition=\"end\" [bizdocTooltipDisabled]=\"!collapsed\"\n data-help=\"cube\" [attr.aria-label]=\"'Cube' | translate\">\n <mat-icon matListItemIcon>equalizer</mat-icon><span class=\"nav-label\" matListItemTitle>{{'Cube' | translate}}</span>\n </mat-list-item>\n }\n @if (profile.reports.length) {\n <mat-list-item (click)=\"opensubmenu('reports')\"\n [class.active]=\"activeMenu === 'reports'\"\n [bizdocTooltip]=\"'Reports'|translate\" bizdocTooltipPosition=\"end\" [bizdocTooltipDisabled]=\"!collapsed\" data-help=\"reports\" [attr.aria-label]=\"'Reports' | translate\">\n <mat-icon matListItemIcon>list_alt</mat-icon><span class=\"nav-label\" matListItemTitle>{{'Reports' | translate}}</span>\n </mat-list-item>\n }\n @if (sysAdmin) {\n <mat-divider></mat-divider>\n <mat-list-item (click)=\"opensubmenu('admin')\"\n [class.active]=\"activeMenu === 'admin'\"\n [bizdocTooltip]=\"'System'|translate\" bizdocTooltipPosition=\"end\" [bizdocTooltipDisabled]=\"!collapsed\" [attr.aria-label]=\"'System' | translate\">\n <mat-icon matListItemIcon>device_hub</mat-icon>\n <span class=\"nav-label\" matListItemTitle>{{'Workflow' | translate}}</span>\n </mat-list-item>\n }\n </mat-nav-list>\n </div>\n <span class=\"divider\"></span>\n <!--<lottie name=\"lf30_editor_qr7zgmcs\" *ngIf=\"loading\"></lottie>-->\n <div class=\"sign-in\">\n <button mat-icon-button data-help=\"sign-in\" [bizdocTooltip]=\"'Settings' | translate\" bizdocTooltipPosition=\"above\"\n [attr.aria-label]=\"'Settings' | translate\" (click)=\"options($event)\">\n <mat-icon matAnimate=\"rotate\">settingson</mat-icon>\n </button>\n <span class=\"divider\"></span>\n <button mat-icon-button [attr.aria-label]=\"'Power' | translate\" (click)=\"signout($event)\" [bizdocTooltip]=\"'Exit'|translate\" bizdocTooltipPosition=\"above\">\n <mat-icon class=\"mat-icon-rtl-mirror\">logout</mat-icon>\n </button>\n </div>\n </div>\n <!-- -->\n @if (submenu) {\n <div class=\"sub-menu\" (mouseleave)=\"collapsesubmenu()\" [@submenu]=\"submenuMode\" (@submenu.done)=\"resize()\">\n @if (submenu !== 'new') {\n <div class=\"action\">\n <button mat-icon-button (click)=\"togglePinned()\" [bizdocTooltip]=\"(pinned?'Collapse':'Expand')|translate\"><mat-icon class=\"mat-icon-rtl-mirror\">{{pinned ? 'push_pin' : 'menu'}}</mat-icon></button>\n </div>\n }\n @switch (submenu) {\n @case ('new') {\n <bizdoc-new-menu (change)=\"closesubmenu()\"></bizdoc-new-menu>\n }\n @case ('mailbox') {\n <bizdoc-folders-menu [collapsed]=\"submenuMode === 'shrink'\" (change)=\"collapsesubmenu()\"></bizdoc-folders-menu>\n }\n @case ('admin') {\n <bizdoc-admin-menu [collapsed]=\"submenuMode === 'shrink'\"></bizdoc-admin-menu>\n }\n @case ('reports') {\n <bizdoc-reports-menu [collapsed]=\"submenuMode === 'shrink'\" (change)=\"collapsesubmenu()\"></bizdoc-reports-menu>\n }\n @case ('cube') {\n <bizdoc-cube-menu [collapsed]=\"submenuMode === 'shrink'\" (change)=\"collapsesubmenu()\"></bizdoc-cube-menu>\n }\n }\n </div>\n }\n @if (dialog) {\n <div class=\"backdrop\"></div>\n }\n</div>\n<div class=\"main\">\n <!-- title -->\n <div class=\"row header\" [@title]=\"main.titleVariant\">\n <h1>\n @if (main.swap) {\n <button mat-icon-button (click)=\"main.back()\" [bizdocTooltip]=\"'Back'|translate\"><mat-icon class=\"mat-icon-rtl-mirror\">arrow_circle_left</mat-icon></button>\n }\n @for (p of main.panes; track p; let first = $first) {\n @if (!first) {\n <span class=\"breadcrumbs\">\\</span>\n }\n {{p.title}}\n }\n @if (main.panes[0]?.guide) {\n <button mat-icon-button (click)=\"guide(main.panes[0].guide)\" [bizdocTooltip]=\"'Help'|translate\"><mat-icon>help</mat-icon></button>\n }\n </h1>\n <span class=\"divider\">\n </span>\n <!--search-->\n <input type=\"text\"\n [@search]=\"searching\"\n (@search.done)=\"searching && focus()\"\n #input\n (keydown.escape)=\"collapse($event)\"\n [attr.aria-label]=\"'Search'|translate\"\n [formControl]=\"search\"\n [matAutocomplete]=\"auto\" class=\"search-box\">\n <mat-autocomplete autoActiveFirstOption #auto=\"matAutocomplete\" (optionSelected)=\"goto($event)\" [displayWith]=\"displayWith\">\n @for (o of results | async; track o) {\n <mat-option [value]=\"o\">\n <ng-container (attached)=\"onAttached(o, $event)\" [cdkPortalOutlet]=\"o.portal\"></ng-container>\n </mat-option>\n }\n </mat-autocomplete>\n <button mat-icon-button (click)=\"toggle($event)\" [bizdocTooltip]=\"'Search'|translate\" class=\"tool\"><mat-icon>search</mat-icon></button>\n <!--notifications-->\n <button mat-icon-button (click)=\"notifs($event)\" [bizdocTooltip]=\"'Notifications'|translate\" bizdocTooltipPosition=\"start\" class=\"tool\"\n [attr.aria-label]=\"'Notifications'| translate\"\n data-help=\"notifications\">\n <mat-icon matListItemIcon [matBadge]=\"profile.notificationsCount\" [matBadgeHidden]=\"!profile.notificationsCount\"\n matBadgeColor=\"accent\" aria-hidden=\"false\"\n [class.filled]=\"profile.notificationsCount\">\n {{profile.options.notifications.active ? 'notifications':'notifications_off'}}\n </mat-icon>\n </button>\n </div>\n <!--panes & tabs-->\n <bizdoc-panes-outlet (dialogChange)=\"dialog = $event\" #main></bizdoc-panes-outlet>\n</div>\n", styles: [":host{display:flex;height:100%}::ng-deep .nav-collapsed .mdc-list-item{padding-right:0}::ng-deep [dir=rtl] .nav-collapsed .mdc-list-item{padding-left:0}.nav-menu{z-index:1}.nav-menu .sub-menu{min-width:210px;display:block;z-index:1;overflow-x:hidden;align-self:stretch}.nav-menu .sub-menu .action{display:flex;-ms-flex-direction:row-reverse;-webkit-flex-direction:row-reverse;flex-direction:row-reverse}.nav-menu .new-container{margin:8px 8px 0;text-align:center}.nav-menu .new-container button{min-width:35px;padding:0 14px;height:40px}.nav-menu .new-container button .mat-icon{margin-right:2px;margin-left:2px}.nav-menu .nav-icon{display:none}.nav-menu.nav-collapsed .nav-icon{display:unset}.nav-menu.nav-collapsed .nav-label{display:none}.nav-menu.nav-collapsed .sign-in{-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column;align-items:center}.nav-menu .sign-in{display:flex;-ms-flex-direction:row;-webkit-flex-direction:row;flex-direction:row;overflow:hidden;margin-bottom:5px;align-items:baseline}.backdrop{position:absolute;z-index:200;width:100%;height:100%;display:block;background:#424242;opacity:.8}.main{flex:1;overflow-x:hidden;display:flex;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column}.main .header{align-items:center;min-width:max-content}.main .header h1{font-size:xx-large;margin:12px;font-weight:100}.main .header h1 button{vertical-align:middle}.main .header h1 .breadcrumbs{font-size:smaller}.main .header .search-box{font-size:large}\n"] }]
20845
- }], ctorParameters: () => [{ type: PanesRouter }, { type: SearchService }, { type: MailboxService }, { type: Popup }, { type: PromptService }, { type: GuideService }, { type: i0.Injector }, { type: SessionService }, { type: HubService }, { type: TranslateService }, { type: i3.MatSnackBar }, { type: undefined, decorators: [{
20980
+ }], ctorParameters: () => [{ type: PanesRouter }, { type: SearchService }, { type: MailboxService }, { type: DocumentFactory }, { type: Popup }, { type: GuideService }, { type: i0.Injector }, { type: SessionService }, { type: HubService }, { type: TranslateService }, { type: i3.MatSnackBar }, { type: undefined, decorators: [{
20846
20981
  type: Inject,
20847
20982
  args: [BIZDOC_CONFIG]
20848
20983
  }] }], propDecorators: { drawer: [{
@@ -20894,11 +21029,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
20894
21029
  /** form selector component */
20895
21030
  class FormSelectorSheet {
20896
21031
  /** form selector ctor */
20897
- constructor(_dialog, _bsRef, _sb, _mailbox, _router, _session) {
21032
+ constructor(_dialog, _bsRef, _sb, _factory, _router, _session) {
20898
21033
  this._dialog = _dialog;
20899
21034
  this._bsRef = _bsRef;
20900
21035
  this._sb = _sb;
20901
- this._mailbox = _mailbox;
21036
+ this._factory = _factory;
20902
21037
  this._router = _router;
20903
21038
  this._session = _session;
20904
21039
  this._done = new Subject();
@@ -20906,8 +21041,8 @@ class FormSelectorSheet {
20906
21041
  this.forms = _session.profile.forms.filter(f => f.creatable);
20907
21042
  }
20908
21043
  open(form) {
20909
- this._mailbox.create(form).subscribe({
20910
- next: i => this._route(i), error: e => this._error(e)
21044
+ this._factory.create(form).subscribe({
21045
+ next: i => this._nav(i),
20911
21046
  });
20912
21047
  this._bsRef.dismiss();
20913
21048
  }
@@ -20915,43 +21050,13 @@ class FormSelectorSheet {
20915
21050
  event.preventDefault();
20916
21051
  this._bsRef.afterDismissed().subscribe(() => this._dialog.open(CopyDialog).afterClosed().subscribe(i => {
20917
21052
  i &&
20918
- this._mailbox.copy(i.documentId).subscribe({
20919
- next: i => {
20920
- this._sb.toast('Copied', i.number || this._getForm(i.formId).title);
20921
- this._route(i);
20922
- }, error: e => this._error(e)
21053
+ this._factory.copy(i.documentId).subscribe({
21054
+ next: i => this._nav(i)
20923
21055
  });
20924
21056
  }));
20925
21057
  this._bsRef.dismiss();
20926
21058
  }
20927
- _getForm(name) {
20928
- return this._session.profile.forms.find(f => f.name === name);
20929
- }
20930
- _error(response) {
20931
- if (response.constructor.name === 'PositionError')
20932
- switch (response.code) {
20933
- case 1:
20934
- this._sb.error('UserDeniedGeoErr');
20935
- break;
20936
- default:
20937
- this._sb.error('GeoErr');
20938
- }
20939
- else
20940
- switch (response.status) {
20941
- case 401:
20942
- this._sb.error('Unauthorized');
20943
- break;
20944
- case 406:
20945
- this._sb.errorString(response.error);
20946
- break;
20947
- case 426: // license
20948
- this._sb.error('LicenseErr');
20949
- break;
20950
- default:
20951
- this._sb.error();
20952
- }
20953
- }
20954
- _route(item) {
21059
+ _nav(item) {
20955
21060
  this._done.next(item);
20956
21061
  this._router.navigate(['mailbox/i', item.id.encodeId()], {
20957
21062
  state: {
@@ -20959,13 +21064,13 @@ class FormSelectorSheet {
20959
21064
  }
20960
21065
  });
20961
21066
  }
20962
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: FormSelectorSheet, deps: [{ token: i2$2.MatDialog }, { token: i2$a.MatBottomSheetRef }, { token: PromptService }, { token: MailboxService }, { token: i1$4.Router }, { token: SessionService }], target: i0.ɵɵFactoryTarget.Component }); }
21067
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: FormSelectorSheet, deps: [{ token: i2$2.MatDialog }, { token: i2$a.MatBottomSheetRef }, { token: PromptService }, { token: DocumentFactory }, { token: i1$4.Router }, { token: SessionService }], target: i0.ɵɵFactoryTarget.Component }); }
20963
21068
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.4", type: FormSelectorSheet, selector: "bizdoc-form-selector", ngImport: i0, template: "<mat-nav-list role=\"list\">\n @for (f of forms; track f) {\n <a mat-list-item role=\"listitem\" (click)=\"open(f.name)\">\n <span matListItemTitle>{{f.title}}</span>\n <mat-icon matListItemIcon>{{f.icon || 'description'}}</mat-icon>\n </a>\n }\n <mat-divider></mat-divider>\n <a mat-list-item role=\"listitem\" (click)=\"copy($event)\">\n <span matListItemTitle>{{'Elipsis'| translate: ('Copy' | translate)}}</span>\n </a>\n</mat-nav-list>\n", dependencies: [{ kind: "component", type: i2$4.MatNavList, selector: "mat-nav-list", exportAs: ["matNavList"] }, { kind: "component", type: i2$4.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: i2$4.MatListItemIcon, selector: "[matListItemIcon]" }, { kind: "component", type: i6$1.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: i2$4.MatListItemTitle, selector: "[matListItemTitle]" }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
20964
21069
  }
20965
21070
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: FormSelectorSheet, decorators: [{
20966
21071
  type: Component,
20967
21072
  args: [{ selector: 'bizdoc-form-selector', template: "<mat-nav-list role=\"list\">\n @for (f of forms; track f) {\n <a mat-list-item role=\"listitem\" (click)=\"open(f.name)\">\n <span matListItemTitle>{{f.title}}</span>\n <mat-icon matListItemIcon>{{f.icon || 'description'}}</mat-icon>\n </a>\n }\n <mat-divider></mat-divider>\n <a mat-list-item role=\"listitem\" (click)=\"copy($event)\">\n <span matListItemTitle>{{'Elipsis'| translate: ('Copy' | translate)}}</span>\n </a>\n</mat-nav-list>\n" }]
20968
- }], ctorParameters: () => [{ type: i2$2.MatDialog }, { type: i2$a.MatBottomSheetRef }, { type: PromptService }, { type: MailboxService }, { type: i1$4.Router }, { type: SessionService }] });
21073
+ }], ctorParameters: () => [{ type: i2$2.MatDialog }, { type: i2$a.MatBottomSheetRef }, { type: PromptService }, { type: DocumentFactory }, { type: i1$4.Router }, { type: SessionService }] });
20969
21074
 
20970
21075
  class ChatMobileComponent {
20971
21076
  constructor() {
@@ -26284,7 +26389,8 @@ class TypeSelect {
26284
26389
  if (!this._configuration)
26285
26390
  throw `${this.type} is not a known BizDoc type.`;
26286
26391
  if (this._configuration.columns)
26287
- this._column = this._configuration.columns.find(c => !c.flags || c.flags.indexOf('Key') < 0);
26392
+ this._column = this._configuration.columns.
26393
+ find(c => !c.flags || c.flags.indexOf('Key') < 0);
26288
26394
  this._items$ = this._service.all(this.type);
26289
26395
  this._control.valueChanges.pipe(takeUntil(this._destroy)).subscribe(v => {
26290
26396
  if (this._multiple) {
@@ -26320,7 +26426,7 @@ class TypeSelect {
26320
26426
  }
26321
26427
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: TypeSelect, deps: [{ token: i1$2.NgControl, optional: true, self: true }, { token: i2$8.FocusMonitor }, { token: i0.ElementRef }, { token: SessionService }, { token: DatasourceService }], target: i0.ɵɵFactoryTarget.Component }); }
26322
26428
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.4", type: TypeSelect, selector: "bizdoc-select", inputs: { type: "type", scope: "scope", multiple: "multiple", placeholder: "placeholder", required: "required", disabled: "disabled", text: "text", value: "value" }, outputs: { selectionChange: "selectionChange", textChange: "textChange" }, host: { properties: { "class.floating": "this.shouldLabelFloat", "attr.aria-describedby": "this.describedBy", "id": "this.id" } }, providers: [{ provide: MatFormFieldControl, useExisting: TypeSelect }], viewQueries: [{ propertyName: "inputElement", first: true, predicate: MatSelect, descendants: true, static: true }], ngImport: i0, template: `<mat-select [placeholder]="placeholder" [formControl]="_control" [multiple]='multiple'
26323
- (focusin)="_onFocus()" (focusout)="_onBlur()" [disabled]="disabled" [compareWith]='_compareWithKey' [required]="required">
26429
+ (focusin)="_onFocus()" (focusout)="_onBlur()" [compareWith]='_compareWithKey' [required]="required">
26324
26430
  @if (!required && !multiple) {
26325
26431
  <mat-option [value]="null">
26326
26432
  {{ 'None' | translate }}
@@ -26344,7 +26450,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
26344
26450
  selector: 'bizdoc-select',
26345
26451
  providers: [{ provide: MatFormFieldControl, useExisting: TypeSelect }],
26346
26452
  template: `<mat-select [placeholder]="placeholder" [formControl]="_control" [multiple]='multiple'
26347
- (focusin)="_onFocus()" (focusout)="_onBlur()" [disabled]="disabled" [compareWith]='_compareWithKey' [required]="required">
26453
+ (focusin)="_onFocus()" (focusout)="_onBlur()" [compareWith]='_compareWithKey' [required]="required">
26348
26454
  @if (!required && !multiple) {
26349
26455
  <mat-option [value]="null">
26350
26456
  {{ 'None' | translate }}
@@ -30345,7 +30451,7 @@ const CONTROLS_COMPONENTS$1 = [SignatureField, AddressField, ChecklistField, Rad
30345
30451
  /** common BizDoc components */
30346
30452
  class SharedModule {
30347
30453
  static forChild(config) {
30348
- const { formats, routing, routes } = config || {};
30454
+ const { formats, routingEngine, routes } = config || {};
30349
30455
  routes && PANES_CONFIG.push(...routes);
30350
30456
  registerComponents(CORE_COMPONENTS);
30351
30457
  registerComponents(CONTROLS_COMPONENTS$1);
@@ -30362,9 +30468,9 @@ class SharedModule {
30362
30468
  }
30363
30469
  }
30364
30470
  }];
30365
- if (routing)
30471
+ if (routingEngine)
30366
30472
  providers.push({
30367
- provide: RouterImpl, useClass: routing === 'ng' ? NgRouter : PaneRouter
30473
+ provide: RouterImpl, useClass: routingEngine === 'ng' ? NgRouter : PaneRouter
30368
30474
  });
30369
30475
  return {
30370
30476
  ngModule: SharedModule,
@@ -30372,7 +30478,7 @@ class SharedModule {
30372
30478
  };
30373
30479
  }
30374
30480
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: SharedModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
30375
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.2.4", ngImport: i0, type: SharedModule, declarations: [LocalizedStringPipe, HelpTipComponent, BoxFormComponent, BoxFormRowComponent, BoxFormControlComponent,
30481
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.2.4", ngImport: i0, type: SharedModule, declarations: [OverlayFormComponent, LocalizedStringPipe, HelpTipComponent, BoxFormComponent, BoxFormRowComponent, BoxFormControlComponent,
30376
30482
  PerformanceWindComponent, PerformanceHiloComponent,
30377
30483
  CubeUsageComponent,
30378
30484
  CubeDocumentsComponent,
@@ -30515,7 +30621,7 @@ class SharedModule {
30515
30621
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: SharedModule, providers: [Popup,
30516
30622
  CookieService,
30517
30623
  DocumentInfo, AttachmentInfo, MapInfo, CubeInfo,
30518
- MailboxService, SessionService, HubService,
30624
+ MailboxService, SessionService, DocumentFactory, HubService,
30519
30625
  CubeService, DatasourceService,
30520
30626
  DateRangePipe, AgoPipe, DurationFormatPipe,
30521
30627
  WindowTitleService, NotificationsService,
@@ -30552,7 +30658,7 @@ class SharedModule {
30552
30658
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: SharedModule, decorators: [{
30553
30659
  type: NgModule,
30554
30660
  args: [{
30555
- declarations: [LocalizedStringPipe, HelpTipComponent, BoxFormComponent, BoxFormRowComponent, BoxFormControlComponent,
30661
+ declarations: [OverlayFormComponent, LocalizedStringPipe, HelpTipComponent, BoxFormComponent, BoxFormRowComponent, BoxFormControlComponent,
30556
30662
  PerformanceWindComponent, PerformanceHiloComponent,
30557
30663
  CubeUsageComponent,
30558
30664
  CubeDocumentsComponent,
@@ -30649,7 +30755,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
30649
30755
  providers: [Popup,
30650
30756
  CookieService,
30651
30757
  DocumentInfo, AttachmentInfo, MapInfo, CubeInfo,
30652
- MailboxService, SessionService, HubService,
30758
+ MailboxService, SessionService, DocumentFactory, HubService,
30653
30759
  CubeService, DatasourceService,
30654
30760
  DateRangePipe, AgoPipe, DurationFormatPipe,
30655
30761
  WindowTitleService, NotificationsService,
@@ -36870,7 +36976,7 @@ class BizDocModule {
36870
36976
  MobileModule,
36871
36977
  DesktopModule,
36872
36978
  SystemModule.forChild(),
36873
- SharedModule.forChild({ routing: isMobile() ? 'ng' : 'pane' }), SharedModule,
36979
+ SharedModule.forChild({ routingEngine: isMobile() ? 'ng' : 'pane' }), SharedModule,
36874
36980
  MaterialModule] }); }
36875
36981
  }
36876
36982
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: BizDocModule, decorators: [{
@@ -36886,7 +36992,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
36886
36992
  MobileModule,
36887
36993
  DesktopModule,
36888
36994
  SystemModule.forChild(),
36889
- SharedModule.forChild({ routing: isMobile() ? 'ng' : 'pane' })
36995
+ SharedModule.forChild({ routingEngine: isMobile() ? 'ng' : 'pane' })
36890
36996
  ],
36891
36997
  exports: [
36892
36998
  BizDocApp,
@@ -36900,5 +37006,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
36900
37006
  * Generated bundle index. Do not edit.
36901
37007
  */
36902
37008
 
36903
- 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, 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 };
37009
+ 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 };
36904
37010
  //# sourceMappingURL=bizdoc-core.mjs.map