@eo-sdk/client 8.14.0 → 8.15.0-rc.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.
Files changed (48) hide show
  1. package/app/eo-client/about-state/about-state.component.d.ts +1 -0
  2. package/app/eo-framework/form-elements/datetime/datepicker/datepicker.component.d.ts +2 -1
  3. package/app/eo-framework/form-elements/datetime/datetime.component.d.ts +5 -1
  4. package/app/eo-framework/object-form/object-form/form-element/form-element.component.d.ts +2 -1
  5. package/app/eo-framework/object-form/object-form/form-element-table/form-element-table.component.d.ts +4 -1
  6. package/app/eo-framework/object-form/object-form/object-form-group/object-form-group.component.d.ts +2 -0
  7. package/app/eo-framework/object-form/object-form/object-form.component.d.ts +2 -1
  8. package/app/eo-framework/object-form/object-form-edit/object-form-edit.component.d.ts +1 -0
  9. package/app/eo-framework/ui/eo-dialog/eo-dialog.component.d.ts +22 -11
  10. package/app/eo-framework/util/directive/trap-focus.directive.d.ts +14 -0
  11. package/assets/_default/config/main.json +2 -1
  12. package/assets/_default/i18n/de.json +2 -0
  13. package/assets/_default/i18n/en.json +2 -0
  14. package/assets/_default/svg/ic_preview_close.svg +1 -0
  15. package/assets/_default/svg/ic_preview_show.svg +1 -0
  16. package/bundles/eo-sdk-client.umd.js +3383 -3263
  17. package/bundles/eo-sdk-client.umd.js.map +1 -1
  18. package/bundles/eo-sdk-client.umd.min.js +1 -1
  19. package/bundles/eo-sdk-client.umd.min.js.map +1 -1
  20. package/eo-sdk-client.d.ts +67 -63
  21. package/eo-sdk-client.metadata.json +1 -1
  22. package/esm2015/app/eo-client/about-state/about-state.component.js +6 -5
  23. package/esm2015/app/eo-framework/actions/actions/add-resubmission-action/add-resubmission/add-resubmission.component.js +1 -1
  24. package/esm2015/app/eo-framework/app-shell/app-bar/app-bar.component.js +3 -2
  25. package/esm2015/app/eo-framework/app-shell/app-bar/app-search/app-search.component.js +3 -3
  26. package/esm2015/app/eo-framework/app-shell/app-bar/side-bar/side-bar.component.js +2 -2
  27. package/esm2015/app/eo-framework/app-shell/app-shell.module.js +5 -3
  28. package/esm2015/app/eo-framework/form-elements/datetime/datepicker/datepicker.component.js +8 -4
  29. package/esm2015/app/eo-framework/form-elements/datetime/datetime.component.js +13 -8
  30. package/esm2015/app/eo-framework/grid/filters/datetime-filter.component.js +2 -2
  31. package/esm2015/app/eo-framework/object-details/favorite-icon/favorite-icon.component.js +2 -2
  32. package/esm2015/app/eo-framework/object-form/object-form/form-element/form-element.component.js +3 -2
  33. package/esm2015/app/eo-framework/object-form/object-form/form-element-table/form-element-table.component.js +9 -2
  34. package/esm2015/app/eo-framework/object-form/object-form/object-form-group/object-form-group.component.js +3 -2
  35. package/esm2015/app/eo-framework/object-form/object-form/object-form.component.js +3 -2
  36. package/esm2015/app/eo-framework/object-form/object-form-edit/object-form-edit.component.js +5 -2
  37. package/esm2015/app/eo-framework/object-form/object-form.module.js +4 -2
  38. package/esm2015/app/eo-framework/prepare-details/prepare-details.component.js +2 -2
  39. package/esm2015/app/eo-framework/ui/eo-dialog/eo-dialog.component.js +78 -42
  40. package/esm2015/app/eo-framework/ui/ui.module.js +4 -2
  41. package/esm2015/app/eo-framework/util/directive/trap-focus.directive.js +50 -0
  42. package/esm2015/eo-sdk-client.js +68 -64
  43. package/fesm2015/eo-sdk-client.js +1248 -1135
  44. package/fesm2015/eo-sdk-client.js.map +1 -1
  45. package/package.json +3 -3
  46. package/projects/eo-sdk/core/package.json +1 -1
  47. package/styles.css +1 -0
  48. package/styles.scss +1 -0
@@ -1,8 +1,8 @@
1
- import { Injectable, ApplicationRef, NgZone, Pipe, NgModule, EventEmitter, Injector, ɵɵdefineInjectable, ɵɵinject, ErrorHandler, Optional, SkipSelf, Component, Input, Output, ViewEncapsulation, ElementRef, Renderer2, Directive, HostListener, ChangeDetectionStrategy, ChangeDetectorRef, ViewChild, HostBinding, forwardRef, ViewChildren, ViewContainerRef, ContentChildren, ANALYZE_FOR_ENTRY_COMPONENTS, InjectionToken, Inject, ComponentFactoryResolver, ContentChild, QueryList } from '@angular/core';
1
+ import { Injectable, ApplicationRef, NgZone, Pipe, NgModule, EventEmitter, Injector, ɵɵdefineInjectable, ɵɵinject, ErrorHandler, Optional, SkipSelf, Component, Input, Output, ViewEncapsulation, ElementRef, Renderer2, Directive, HostListener, ChangeDetectionStrategy, ChangeDetectorRef, ViewChild, HostBinding, ViewContainerRef, forwardRef, ViewChildren, ContentChildren, ANALYZE_FOR_ENTRY_COMPONENTS, InjectionToken, Inject, ComponentFactoryResolver, ContentChild, QueryList } from '@angular/core';
2
2
  import { DecimalPipe, PercentPipe, CurrencyPipe, DatePipe, getLocaleDateTimeFormat, FormatWidth, getLocaleTimeFormat, getLocaleDateFormat, CommonModule, Location, PlatformLocation } from '@angular/common';
3
3
  import { HttpClient, HttpResponse, HttpErrorResponse, HttpClientModule, HTTP_INTERCEPTORS, HttpHeaders } from '@angular/common/http';
4
4
  import { ReplaySubject, BehaviorSubject, from, forkJoin, of, Subject, fromEvent, AsyncSubject, Observable } from 'rxjs';
5
- import { groupBy, mergeMap, reduce, tap, catchError, map, debounceTime, takeUntil, filter, switchMap, pluck, finalize, combineLatest, throttleTime, take, takeWhile, withLatestFrom, first } from 'rxjs/operators';
5
+ import { groupBy, mergeMap, reduce, tap, catchError, map, debounceTime, takeUntil, filter, switchMap, pluck, finalize, combineLatest, takeWhile, throttleTime, take, withLatestFrom, first } from 'rxjs/operators';
6
6
  import { SearchQuery, SearchState, EnaioEvent, Utils, SearchService, EventService, SystemService, Logger, BackendService, UserService, TranslateService, NotificationsService, AppCacheService, UploadTarget, UploadRegistryService, DmsObject, ClipboardService, DmsService, EnvironmentEnaio, SearchFilter, RangeValue, AuthService, EoError, CapabilitiesService, Config, ClipboardAction, PrepareService, QueryScope, EoSharedModule, InboxService, BpmService, StoredQuery, StoredQueriesService, EnvironmentService, LocalStorageService, FieldDefinition, SortOption, InboxItem, Process, PreparedItem, WorkItem, SubscriptionMode, TranslateModule, UploadFileItem, SearchResult } from '@eo-sdk/core';
7
7
  import { Router, NavigationStart, RouterModule, ActivatedRoute, NavigationEnd } from '@angular/router';
8
8
  import { NumberFilter, Utils as Utils$1, SimpleFilter, NumberSequence, _ as _$1, RowNode, Autowired, PostConstruct, Bean, ModuleNames, DateFilter } from '@ag-grid-community/core';
@@ -10,7 +10,9 @@ import { Title, DomSanitizer } from '@angular/platform-browser';
10
10
  import { NG_VALUE_ACCESSOR, NG_VALIDATORS, FormBuilder, FormGroup, FormControl, FormsModule, ReactiveFormsModule, Validators, NgForm } from '@angular/forms';
11
11
  import { AccordionModule as AccordionModule$1 } from 'primeng/accordion';
12
12
  import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
13
- import { Dialog, OverlayPanelModule, DialogModule, InputMask, AutoComplete, InputTextModule, InputMaskModule, AutoCompleteModule, CheckboxModule, TriStateCheckboxModule, InputTextareaModule, ChipsModule, DropdownModule, SharedModule, TabPanel, TabViewModule, FieldsetModule, CalendarModule, TabView, TabViewNav, DragDropModule as DragDropModule$1 } from 'primeng/primeng';
13
+ import { OverlayPanelModule, DialogModule, InputMask, AutoComplete, InputTextModule, InputMaskModule, AutoCompleteModule, CheckboxModule, TriStateCheckboxModule, InputTextareaModule, ChipsModule, DropdownModule, SharedModule, TabPanel, TabViewModule, FieldsetModule, CalendarModule, TabView, TabViewNav, DragDropModule as DragDropModule$1 } from 'primeng/primeng';
14
+ import { Overlay, OverlayModule } from '@angular/cdk/overlay';
15
+ import { TemplatePortal, CdkPortalOutlet } from '@angular/cdk/portal';
14
16
  import * as moment_ from 'moment';
15
17
  import 'moment/min/locales';
16
18
  import * as _ from 'lodash';
@@ -3560,23 +3562,26 @@ ErrorMessageComponent.propDecorators = {
3560
3562
  };
3561
3563
 
3562
3564
  class EoDialogComponent extends UnsubscribeOnDestroy {
3563
- constructor(eventService, pendingChanges, renderer) {
3565
+ constructor(eventService, pendingChanges, renderer, overlay, viewContainerRef) {
3564
3566
  super();
3565
3567
  this.eventService = eventService;
3566
3568
  this.pendingChanges = pendingChanges;
3567
3569
  this.renderer = renderer;
3570
+ this.overlay = overlay;
3571
+ this.viewContainerRef = viewContainerRef;
3568
3572
  this._visible = false;
3569
3573
  this.id = Utils.uuid();
3570
3574
  this.parentId = '';
3571
3575
  this.styleClass = '';
3572
3576
  // array of pendingTask IDs to be checked before the dialog closes
3573
3577
  this.dirtyCheck = [];
3574
- this.appendTo = 'body';
3575
3578
  this.minWidth = 200;
3576
3579
  this.minHeight = 'auto';
3577
- this.resizable = false;
3578
- this.fullscreen = false;
3579
3580
  this.focusOnShow = true;
3581
+ this.align = 'center';
3582
+ this.isFormTable = false;
3583
+ this.showPreview = false;
3584
+ this.onTogglePreview = new EventEmitter();
3580
3585
  this.visibleChange = new EventEmitter();
3581
3586
  this.hide = new EventEmitter();
3582
3587
  this.show = new EventEmitter();
@@ -3611,40 +3616,57 @@ class EoDialogComponent extends UnsubscribeOnDestroy {
3611
3616
  this.closeDialog();
3612
3617
  }
3613
3618
  }
3619
+ open() {
3620
+ // We create the overlay
3621
+ this.overlayRef = this.overlay.create({
3622
+ hasBackdrop: true,
3623
+ scrollStrategy: this.overlay.scrollStrategies.reposition(),
3624
+ positionStrategy: this.getPositionStrategy(),
3625
+ minHeight: this.minHeight,
3626
+ minWidth: this.minWidth
3627
+ });
3628
+ //Then we create a portal to render a component
3629
+ const portal = new TemplatePortal(this.dialogContent, this.viewContainerRef);
3630
+ // We add a custom CSS class to our overlay
3631
+ // this.overlayRef.addPanelClass("example-overlay");
3632
+ this.overlayRef.attach(portal);
3633
+ this.overlayRef.backdropClick().subscribe((_) => {
3634
+ this.visible = false;
3635
+ });
3636
+ }
3637
+ getPositionStrategy() {
3638
+ let positionStrategy;
3639
+ if (this.align === 'center') {
3640
+ positionStrategy = this.overlay
3641
+ .position()
3642
+ .global()
3643
+ .centerHorizontally()
3644
+ .centerVertically();
3645
+ }
3646
+ else if (this.align === 'start') {
3647
+ positionStrategy = this.overlay
3648
+ .position()
3649
+ .global()
3650
+ .left()
3651
+ .top();
3652
+ }
3653
+ return positionStrategy;
3654
+ }
3614
3655
  toggleActive(active, trigger = true) {
3615
3656
  this.active = !!active;
3657
+ if (active && this.ready && !this.overlayRef) {
3658
+ this.open();
3659
+ }
3660
+ if (this.overlayRef && !active) {
3661
+ this.overlayRef.dispose();
3662
+ this.overlayRef = undefined;
3663
+ }
3616
3664
  if (trigger) {
3617
3665
  this.eventService.trigger(EnaioEvent.EO_DIALOG_STACK_CHANGED, {
3618
3666
  id: this.id,
3619
3667
  active: this.active
3620
3668
  });
3621
3669
  }
3622
- if (this.dialog) {
3623
- this.renderer[this.active || !this.appendTo ? 'addClass' : 'removeClass'](this.dialog.containerViewChild.nativeElement, 'active');
3624
- this.renderer[this.fullscreen ? 'addClass' : 'removeClass'](this.dialog.containerViewChild.nativeElement, 'fullscreen');
3625
- if (this.active) {
3626
- if (this.minHeight !== 'auto') {
3627
- setTimeout(() => {
3628
- this.minHeight = 'auto';
3629
- if (!!this.dialog) {
3630
- this.renderer.setStyle(this.dialog.contentViewChild.nativeElement.parentElement, 'minHeight', 'auto');
3631
- this.renderer.setStyle(this.dialog.contentViewChild.nativeElement.parentElement, 'maxWidth', '50%');
3632
- }
3633
- }, 200);
3634
- }
3635
- this.dialog.moveOnTop();
3636
- let focusableElement = this.dialog.contentViewChild.nativeElement.querySelector('[tabindex]');
3637
- if (focusableElement) {
3638
- focusableElement.focus();
3639
- }
3640
- }
3641
- else {
3642
- this._lastFocused.focus();
3643
- }
3644
- }
3645
- else if (this.active && this.visible) {
3646
- setTimeout(() => this.toggleActive(true, false), 0);
3647
- }
3648
3670
  }
3649
3671
  closeDialog() {
3650
3672
  if (this.dirtyCheck) {
@@ -3656,40 +3678,55 @@ class EoDialogComponent extends UnsubscribeOnDestroy {
3656
3678
  this.visible = false;
3657
3679
  }
3658
3680
  }
3681
+ togglePreview() {
3682
+ this.showPreview = !this.showPreview;
3683
+ this.onTogglePreview.emit();
3684
+ }
3659
3685
  ngOnDestroy() {
3660
3686
  if (this.active) {
3661
3687
  this.toggleActive(false);
3662
3688
  }
3663
3689
  }
3690
+ ngAfterViewInit() {
3691
+ // this.open();
3692
+ this.ready = true;
3693
+ if (this._visible) {
3694
+ this.open();
3695
+ }
3696
+ }
3664
3697
  }
3665
3698
  EoDialogComponent.decorators = [
3666
3699
  { type: Component, args: [{
3667
3700
  selector: 'eo-dialog',
3668
- template: "<p-dialog *ngIf=\"visible\" modal=\"modal\" [responsive]=\"true\" [closeOnEscape]=\"false\" [dismissableMask]=\"true\" [closable]=\"false\" [resizable]=\"resizable\"\r\n [showHeader]=\"false\" [header]=\"title\" [(visible)]=\"visible\" [appendTo]=\"appendTo\" [ngClass]=\"styleClass || ''\" [autoAlign]=\"true\"\r\n [focusOnShow]=\"focusOnShow\" [minWidth]=\"minWidth\" [minHeight]=\"minHeight\" eoRtlAware=\"dir\" styleClass=\"active\" [contentStyle]=\"{'max-height':'100%'}\">\r\n\r\n <div class=\"eo-dialog\" [ngClass]=\"styleClass || ''\" eoRtlAware=\"dir\">\r\n <header class=\"eo-dialog-header\" [ngClass]=\"styleClass ? styleClass + '--header ' : ''\">\r\n <h5 class=\"headline\">{{title}}</h5>\r\n <h6 *ngIf=\"subtitle\" class=\"subtitle\">{{subtitle}}</h6>\r\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\" (click)=\"closeDialog()\" class=\"button white eo-dialog-close\"></eo-icon>\r\n </header>\r\n <div class=\"eo-dialog-content\" [ngClass]=\"styleClass ? styleClass + '--content ' : ''\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n\r\n</p-dialog>\r\n",
3701
+ template: "<ng-template #dialogContent>\r\n <div class=\"eo-dialog\" [ngClass]=\"styleClass || ''\" eoRtlAware=\"dir\">\r\n <header class=\"eo-dialog-header\" [ngClass]=\"styleClass ? styleClass + '--header ' : ''\">\r\n <h5 class=\"headline\">{{title}}</h5>\r\n <h6 *ngIf=\"subtitle\" class=\"subtitle\">{{subtitle}}</h6>\r\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\" (click)=\"closeDialog()\" class=\"button white eo-dialog-close\"></eo-icon>\r\n <ng-container *ngIf=\"isFormTable\">\r\n <eo-icon *ngIf=\"showPreview\" [iconSrc]=\"'assets/_default/svg/ic_preview_close.svg'\"\r\n [iconTitle]=\"'eo.form.table.dialog.preview.hide' | translate\" (click)=\"togglePreview()\" class=\"button white eo-dialog-preview-toggle\"></eo-icon>\r\n <eo-icon *ngIf=\"!showPreview\" [iconSrc]=\"'assets/_default/svg/ic_preview_show.svg'\"\r\n [iconTitle]=\"'eo.form.table.dialog.preview.show' | translate\" (click)=\"togglePreview()\" class=\"button white eo-dialog-preview-toggle\"></eo-icon>\r\n </ng-container>\r\n </header>\r\n <div class=\"eo-dialog-content\" [ngClass]=\"styleClass ? styleClass + '--content ' : ''\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n</ng-template>\r\n",
3669
3702
  encapsulation: ViewEncapsulation.None,
3670
- styles: ["body>.ui-dialog.fullscreen{height:95%;width:95%}body>.ui-dialog.fullscreen .ui-dialog-content{height:100%}body>.ui-dialog:not(.ui-helper-hidden),p-dialog .ui-dialog:not(.ui-helper-hidden){-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;transition:all var(--app-default-transition-duration) ease-in-out}body>.ui-dialog:not(.ui-helper-hidden):not(.active),p-dialog .ui-dialog:not(.ui-helper-hidden):not(.active){transform:perspective(600px) rotateY(10deg) translate3d(-100px,-100px,-100px)}body>.ui-dialog:not(.ui-helper-hidden):not(.active) .eo-dialog-header,p-dialog .ui-dialog:not(.ui-helper-hidden):not(.active) .eo-dialog-header{background-color:var(--color-primary)}body>.ui-dialog.ui-widget .ui-dialog-content,p-dialog .ui-dialog.ui-widget .ui-dialog-content{overflow:inherit;padding:0}.eo-dialog{-webkit-animation:none;animation:none;display:flex;flex:1;flex-direction:column;max-height:100%;max-width:100%;min-height:0;min-width:0}.eo-dialog-close{position:absolute;right:5px;top:5px;z-index:2}.eo-dialog-header{background-color:var(--color-accent);color:var(--color-white);flex:0 0 auto;font-size:var(--font-headline);font-weight:var(--font-weight-light);padding:var(--app-pane-padding) calc(var(--app-pane-padding)*2.5) calc(var(--app-pane-padding)*2) var(--app-pane-padding)}.eo-dialog-header .headline{font-size:24px;font-weight:400;margin:0 25px 0 0}.eo-dialog-header .subtitle{font-size:15px;font-weight:400;margin:0}.eo-dialog-content{display:flex;flex:1;flex-direction:column;height:100%;max-height:520px;min-height:0;min-width:0;overflow:auto;position:relative}.eo-dialog-content>eo-tree{margin:var(--app-pane-padding)}.eo-dialog-content .empty{align-items:center;color:var(--text-color-caption);display:flex;flex:1;flex-direction:column;justify-content:center;min-height:0;min-width:0;padding:var(--app-pane-padding)}.eo-dialog-content .action-buttons{justify-content:flex-end;padding-top:32px}.eo-dialog-content button:not(:last-child){margin-right:5px}.object-form-table-dialog{background-color:var(--panel-background-grey);height:100%;width:100%}.object-form-table-dialog .body{height:100%;width:100%}.object-form-table-dialog .edit-body{display:flex;height:100%}.object-form-table-dialog .table-body{background-color:var(--panel-background-grey);display:flex;height:100%;width:100%}.object-form-table-dialog eo-split{padding:var(--app-pane-padding)}.object-form-table-dialog eo-split-area{box-shadow:0 2px 5px 0 rgba(0,0,0,.2)}.object-form-table-dialog eo-row-edit{background-color:var(--color-white);display:flex;flex:1;flex-direction:column;min-height:0;min-width:0}.object-form-table-dialog eo-row-edit .row-edit{display:flex;flex-direction:column;height:100%}.object-form-table-dialog eo-row-edit .row-edit .edit-header{display:flex;justify-content:space-between}.object-form-table-dialog eo-row-edit .row-edit .edit-header .new-indicator{color:var(--text-color-caption);font-size:var(--font-title);margin:8px 16px 0;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.object-form-table-dialog eo-row-edit .row-edit .edit-header .cancel-icon{color:var(--text-color-caption);margin:8px 8px 0}.object-form-table-dialog eo-row-edit .row-edit .edit-header .cancel-icon:hover{background:rgba(var(--color-black-rgb),.1)}.object-form-table-dialog eo-row-edit .row-edit .form{height:100%;overflow:auto}.object-form-table-dialog eo-row-edit .row-edit .actions{align-items:center;border-top:1px solid var(--panel-header-border-bottom-color);display:flex;flex:0;flex-direction:row;justify-content:flex-end;min-height:0;min-height:5em;min-width:0;padding-right:var(--app-pane-padding)}.object-form-table-dialog eo-row-edit .row-edit .actions button{height:3em;margin:0 calc(var(--app-pane-padding)/8);padding:0 calc(var(--app-pane-padding)/2)}.object-form-table-dialog eo-row-edit .row-edit .actions eo-checkbox{margin:0 calc(var(--app-pane-padding)/2)}.object-form-table-dialog eo-row-edit .row-edit .actions .add-label{color:var(--text-color-caption);font-size:var(--font-body);margin-right:var(--app-pane-padding)}.object-form-table-dialog .object-form-table{background-color:#fff;display:grid;grid-template-columns:1fr;grid-template-rows:auto 1fr;height:100%;width:100%}.object-form-table-dialog .object-form-table .grid-body{height:100%;position:relative;width:100%}.object-form-table-dialog .object-form-table .grid-body .ag-theme-balham .ag-header{background-color:unset!important}.object-form-table-dialog .object-form-table .grid-body ag-grid-angular{background-color:transparent;height:100%;width:100%}.object-form-table-dialog .object-form-table .grid-body ag-grid-angular .copy-cell,.object-form-table-dialog .object-form-table .grid-body ag-grid-angular .new-row{-webkit-animation-duration:4s;-webkit-animation-name:new-row;animation-duration:4s;animation-name:new-row}@-webkit-keyframes new-row{0%{background-color:var(--color-accent)}to{background-color:none}}@keyframes new-row{0%{background-color:var(--color-accent)}to{background-color:none}}.object-form-table-dialog .object-form-table .grid-body ag-grid-angular .ag-cell{align-items:center;display:flex;font-size:var(--font-caption);line-height:var(--oft-row-height);padding:0 calc(var(--app-pane-padding)/4)}.object-form-table-dialog .object-form-table .grid-body ag-grid-angular .ag-cell.ag-cell-focus{background-color:var(--list-item-hover-background);border-color:transparent!important;outline:0!important}.object-form-table-dialog .object-form-table .grid-body ag-grid-angular .ag-cell svg{pointer-events:none}.object-form-table-dialog .object-form-table .grid-body ag-grid-angular .ag-cell.col-boolean,.object-form-table-dialog .object-form-table .grid-body ag-grid-angular .ag-cell.res-ico{justify-content:center}.object-form-table-dialog .object-form-table .grid-body ag-grid-angular .ag-cell.col-number{justify-content:flex-end}.object-form-table-dialog .object-form-table .grid-body ag-grid-angular .ag-cell .action-icon{cursor:pointer;display:flex}.object-form-table-dialog .object-form-table .grid-body ag-grid-angular .ag-cell .action-icon svg{fill:var(--text-color-caption)}.object-form-table-dialog .label{align-items:center;border-bottom:0;display:flex;flex-flow:row nowrap;padding:calc(var(--app-pane-padding)/4) calc(var(--app-pane-padding)/4) calc(var(--app-pane-padding)/2) calc(var(--app-pane-padding)/4)}.object-form-table-dialog .label span{display:block;flex:1 1 auto}.object-form-table-dialog .label eo-icon.stf{color:var(--text-color-caption);cursor:pointer;height:20px;margin:calc(var(--app-pane-padding)/4);width:20px}.object-form-table-dialog .label eo-icon.stf.add-row{background-color:var(--color-accent);border-radius:2px;color:#fff;height:24px;width:24px}.object-form-table-dialog .label button.add{border-radius:2px;padding:calc(var(--app-pane-padding)/2)}.object-form-table-dialog .label button.export{border:1px solid #000;border-radius:2px;color:#000;font-size:var(--font-hint);margin:0 calc(var(--app-pane-padding)/4);padding:calc(var(--app-pane-padding)/8) calc(var(--app-pane-padding)/4)}.object-form-table-dialog .eo-dialog-content{height:100%;max-height:none;overflow:hidden}.object-form-table-dialog .table-area{overflow:unset!important}"]
3703
+ styles: [".eo-dialog{-webkit-animation:none;animation:none;background-color:var(--panel-background);display:flex;flex:1;flex-direction:column;max-height:100%;max-width:100%;min-height:0;min-width:0}.eo-dialog-close{position:absolute;right:5px;top:5px;z-index:2}.eo-dialog-preview-toggle{position:absolute;right:5px;top:50px;z-index:2}.eo-dialog-header{background-color:var(--color-accent);color:var(--color-white);flex:0 0 auto;font-size:var(--font-headline);font-weight:var(--font-weight-light);padding:var(--app-pane-padding) calc(var(--app-pane-padding)*2.5) calc(var(--app-pane-padding)*2) var(--app-pane-padding)}.eo-dialog-header .headline{font-size:24px;font-weight:400;margin:0 25px 0 0}.eo-dialog-header .subtitle{font-size:15px;font-weight:400;margin:0}.eo-dialog-content{display:flex;flex:1;flex-direction:column;height:100%;max-height:520px;min-height:0;min-width:0;overflow:auto;position:relative}.eo-dialog-content>eo-tree{margin:var(--app-pane-padding)}.eo-dialog-content .empty{align-items:center;color:var(--text-color-caption);display:flex;flex:1;flex-direction:column;justify-content:center;min-height:0;min-width:0;padding:var(--app-pane-padding)}.eo-dialog-content .action-buttons{justify-content:flex-end;padding-top:32px}.eo-dialog-content button:not(:last-child){margin-right:5px}.object-form-table-dialog{background-color:var(--panel-background-grey);height:95vh;width:100%}.object-form-table-dialog .body{height:80vh;width:100%}.object-form-table-dialog .edit-body{display:flex;height:100%}.object-form-table-dialog .table-body{background-color:var(--panel-background-grey);display:flex;height:100%;width:100%}.object-form-table-dialog eo-split{padding:var(--app-pane-padding);width:auto!important}.object-form-table-dialog eo-split-area{box-shadow:0 2px 5px 0 rgba(0,0,0,.2)}.object-form-table-dialog eo-row-edit{background-color:var(--color-white);display:flex;flex:1;flex-direction:column;min-height:0;min-width:0}.object-form-table-dialog eo-row-edit .row-edit{display:flex;flex-direction:column;height:100%}.object-form-table-dialog eo-row-edit .row-edit .edit-header{display:flex;justify-content:space-between}.object-form-table-dialog eo-row-edit .row-edit .edit-header .new-indicator{color:var(--text-color-caption);font-size:var(--font-title);margin:8px 16px 0;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.object-form-table-dialog eo-row-edit .row-edit .edit-header .cancel-icon{color:var(--text-color-caption);margin:8px 8px 0}.object-form-table-dialog eo-row-edit .row-edit .edit-header .cancel-icon:hover{background:rgba(var(--color-black-rgb),.1)}.object-form-table-dialog eo-row-edit .row-edit .form{height:100%;overflow:auto}.object-form-table-dialog eo-row-edit .row-edit .actions{align-items:center;border-top:1px solid var(--panel-header-border-bottom-color);display:flex;flex:0;flex-direction:row;justify-content:flex-end;min-height:0;min-height:5em;min-width:0;padding-right:var(--app-pane-padding)}.object-form-table-dialog eo-row-edit .row-edit .actions button{height:3em;margin:0 calc(var(--app-pane-padding)/8);padding:0 calc(var(--app-pane-padding)/2)}.object-form-table-dialog eo-row-edit .row-edit .actions eo-checkbox{margin:0 calc(var(--app-pane-padding)/2)}.object-form-table-dialog eo-row-edit .row-edit .actions .add-label{color:var(--text-color-caption);font-size:var(--font-body);margin-right:var(--app-pane-padding)}.object-form-table-dialog .object-form-table{background-color:#fff;display:grid;grid-template-columns:1fr;grid-template-rows:auto 1fr;height:100%;width:100%}.object-form-table-dialog .object-form-table .grid-body{height:100%;position:relative;width:100%}.object-form-table-dialog .object-form-table .grid-body .ag-theme-balham .ag-header{background-color:unset!important}.object-form-table-dialog .object-form-table .grid-body ag-grid-angular{background-color:transparent;height:100%;width:100%}.object-form-table-dialog .object-form-table .grid-body ag-grid-angular .copy-cell,.object-form-table-dialog .object-form-table .grid-body ag-grid-angular .new-row{-webkit-animation-duration:4s;-webkit-animation-name:new-row;animation-duration:4s;animation-name:new-row}@-webkit-keyframes new-row{0%{background-color:var(--color-accent)}to{background-color:none}}@keyframes new-row{0%{background-color:var(--color-accent)}to{background-color:none}}.object-form-table-dialog .object-form-table .grid-body ag-grid-angular .ag-cell{align-items:center;display:flex;font-size:var(--font-caption);line-height:var(--oft-row-height);padding:0 calc(var(--app-pane-padding)/4)}.object-form-table-dialog .object-form-table .grid-body ag-grid-angular .ag-cell.ag-cell-focus{background-color:var(--list-item-hover-background);border-color:transparent!important;outline:0!important}.object-form-table-dialog .object-form-table .grid-body ag-grid-angular .ag-cell svg{pointer-events:none}.object-form-table-dialog .object-form-table .grid-body ag-grid-angular .ag-cell.col-boolean,.object-form-table-dialog .object-form-table .grid-body ag-grid-angular .ag-cell.res-ico{justify-content:center}.object-form-table-dialog .object-form-table .grid-body ag-grid-angular .ag-cell.col-number{justify-content:flex-end}.object-form-table-dialog .object-form-table .grid-body ag-grid-angular .ag-cell .action-icon{cursor:pointer;display:flex}.object-form-table-dialog .object-form-table .grid-body ag-grid-angular .ag-cell .action-icon svg{fill:var(--text-color-caption)}.object-form-table-dialog .label{align-items:center;border-bottom:0;display:flex;flex-flow:row nowrap;padding:calc(var(--app-pane-padding)/4) calc(var(--app-pane-padding)/4) calc(var(--app-pane-padding)/2) calc(var(--app-pane-padding)/4)}.object-form-table-dialog .label span{display:block;flex:1 1 auto}.object-form-table-dialog .label eo-icon.stf{color:var(--text-color-caption);cursor:pointer;height:20px;margin:calc(var(--app-pane-padding)/4);width:20px}.object-form-table-dialog .label eo-icon.stf.add-row{background-color:var(--color-accent);border-radius:2px;color:#fff;height:24px;width:24px}.object-form-table-dialog .label button.add{border-radius:2px;padding:calc(var(--app-pane-padding)/2)}.object-form-table-dialog .label button.export{border:1px solid #000;border-radius:2px;color:#000;font-size:var(--font-hint);margin:0 calc(var(--app-pane-padding)/4);padding:calc(var(--app-pane-padding)/8) calc(var(--app-pane-padding)/4)}.object-form-table-dialog .eo-dialog-content{height:100%;max-height:none;overflow:hidden}.object-form-table-dialog .table-area{overflow:unset!important}.cdk-overlay-pane{position:absolute!important}"]
3671
3704
  },] }
3672
3705
  ];
3673
3706
  EoDialogComponent.ctorParameters = () => [
3674
3707
  { type: EventService },
3675
3708
  { type: PendingChangesService },
3676
- { type: Renderer2 }
3709
+ { type: Renderer2 },
3710
+ { type: Overlay },
3711
+ { type: ViewContainerRef }
3677
3712
  ];
3678
3713
  EoDialogComponent.propDecorators = {
3714
+ portalOutlet: [{ type: ViewChild, args: [CdkPortalOutlet,] }],
3715
+ dialogContent: [{ type: ViewChild, args: ['dialogContent',] }],
3679
3716
  title: [{ type: Input }],
3680
3717
  subtitle: [{ type: Input }],
3681
3718
  styleClass: [{ type: Input }],
3682
3719
  dirtyCheck: [{ type: Input }],
3683
- appendTo: [{ type: Input }],
3684
3720
  minWidth: [{ type: Input }],
3685
3721
  minHeight: [{ type: Input }],
3686
- resizable: [{ type: Input }],
3687
- fullscreen: [{ type: Input }],
3688
3722
  focusOnShow: [{ type: Input }],
3723
+ align: [{ type: Input }],
3724
+ isFormTable: [{ type: Input }],
3725
+ showPreview: [{ type: Input }],
3726
+ onTogglePreview: [{ type: Output }],
3689
3727
  visibleChange: [{ type: Output }],
3690
3728
  hide: [{ type: Output }],
3691
3729
  show: [{ type: Output }],
3692
- dialog: [{ type: ViewChild, args: [Dialog,] }],
3693
3730
  visible: [{ type: Input }],
3694
3731
  onKeydownHandler: [{ type: HostListener, args: ['document:keydown.escape', ['$event'],] }],
3695
3732
  onMousedown: [{ type: HostListener, args: ['document:mousedown', ['$event.target'],] }]
@@ -3799,7 +3836,8 @@ UiModule.decorators = [
3799
3836
  OverlayPanelModule,
3800
3837
  RouterModule,
3801
3838
  DialogModule,
3802
- AccordionModule
3839
+ AccordionModule,
3840
+ OverlayModule
3803
3841
  ],
3804
3842
  exports: [
3805
3843
  CommonModule,
@@ -3904,8 +3942,9 @@ class AppBarComponent extends UnsubscribeOnDestroy {
3904
3942
  .on(EnaioEvent.SCHEMA_LOCALE_CHANGED).pipe(takeUntil(this.componentDestroyed$))
3905
3943
  .subscribe(() => {
3906
3944
  this.bpmService
3907
- .initExecutableProcesses()
3945
+ .getExecutableProcesses()
3908
3946
  .subscribe(res => {
3947
+ // this.exeActions = !!res.length;
3909
3948
  this.exeActions = this.bpmService.hasMainExecutableProcesses;
3910
3949
  });
3911
3950
  });
@@ -4076,7 +4115,7 @@ class SideBarComponent extends UnsubscribeOnDestroy {
4076
4115
  SideBarComponent.decorators = [
4077
4116
  { type: Component, args: [{
4078
4117
  selector: 'eo-side-bar',
4079
- template: "<div class=\"eo-side-bar\">\r\n <eo-icon (click)=\"close()\" (keydown.enter)=\"close()\" tabindex=\"0\" class=\"button white close\" [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\"></eo-icon>\r\n\r\n <div class=\"head\" [style.background-image]=\"backgroundImage\">\r\n\r\n\r\n </div>\r\n\r\n <div class=\"body\">\r\n <a href=\"{{docu.link}}\" target=\"_blank\">\r\n <eo-icon class=\"button docu\" [iconTitle]=\"docu.label | translate\" [iconSrc]=\"'assets/_default/svg/ic_book.svg'\"></eo-icon>\r\n </a>\r\n <a routerLink=\"/about\"><eo-icon class=\"button about\" [iconTitle]=\"'eo.sidebar.help.about.tooltip' | translate\" [iconSrc]=\"'assets/_default/svg/ic_about.svg'\"></eo-icon></a>\r\n\r\n <p-tabView styleClass=\"tab-sidebar\">\r\n <p-tabPanel header=\"{{'eo.sidebar.navigation.title'|translate}}\" headerStyleClass=\"tab-nav\">\r\n\r\n <div class=\"navigation\">\r\n <div class=\"nav-item\" *ngIf=\"capabilities.favorites\">\r\n <a routerLink=\"/favorites\" routerLinkActive=\"active-link\" translate>eo.sidebar.navigation.favorites</a>\r\n </div>\r\n <div class=\"nav-item\" *ngIf=\"capabilities.inbox\">\r\n <a routerLink=\"/inbox\" routerLinkActive=\"active-link\" translate>eo.sidebar.navigation.inbox</a>\r\n </div>\r\n\r\n <div class=\"nav-item\" *ngIf=\"capabilities.intray\">\r\n <a routerLink=\"/prepare\" routerLinkActive=\"active-link\" translate>eo.sidebar.navigation.prepare</a>\r\n </div>\r\n\r\n <div class=\"nav-item\" *ngIf=\"capabilities.bpm\">\r\n <a routerLink=\"/process\" routerLinkActive=\"active-link\" translate>eo.sidebar.navigation.process</a>\r\n </div>\r\n\r\n <div class=\"nav-item\" *ngIf=\"capabilities.notifications\">\r\n <a routerLink=\"/notifications\" routerLinkActive=\"active-link\" translate>eo.sidebar.navigation.notifications</a>\r\n </div>\r\n\r\n <div class=\"nav-item\" *ngIf=\"capabilities.storedqueries\">\r\n <a routerLink=\"/stored-queries\" routerLinkActive=\"active-link\" translate>eo.sidebar.navigation.storedqueries</a>\r\n </div>\r\n <ng-content select=\".navi\"></ng-content>\r\n </div>\r\n\r\n </p-tabPanel>\r\n </p-tabView>\r\n </div>\r\n\r\n</div>\r\n",
4118
+ template: "<div class=\"eo-side-bar\" eoTrapFocus>\r\n <eo-icon (click)=\"close()\" (keydown.enter)=\"close()\" tabindex=\"0\" class=\"button white close\" [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\" focusable></eo-icon>\r\n\r\n <div class=\"head\" [style.background-image]=\"backgroundImage\">\r\n\r\n\r\n </div>\r\n\r\n <div class=\"body\">\r\n <a href=\"{{docu.link}}\" target=\"_blank\">\r\n <eo-icon class=\"button docu\" [iconTitle]=\"docu.label | translate\" [iconSrc]=\"'assets/_default/svg/ic_book.svg'\"></eo-icon>\r\n </a>\r\n <a routerLink=\"/about\"><eo-icon class=\"button about\" [iconTitle]=\"'eo.sidebar.help.about.tooltip' | translate\" [iconSrc]=\"'assets/_default/svg/ic_about.svg'\"></eo-icon></a>\r\n\r\n <p-tabView styleClass=\"tab-sidebar\">\r\n <p-tabPanel header=\"{{'eo.sidebar.navigation.title'|translate}}\" headerStyleClass=\"tab-nav\">\r\n\r\n <div class=\"navigation\">\r\n <div class=\"nav-item\" *ngIf=\"capabilities.favorites\">\r\n <a routerLink=\"/favorites\" routerLinkActive=\"active-link\" translate>eo.sidebar.navigation.favorites</a>\r\n </div>\r\n <div class=\"nav-item\" *ngIf=\"capabilities.inbox\">\r\n <a routerLink=\"/inbox\" routerLinkActive=\"active-link\" translate>eo.sidebar.navigation.inbox</a>\r\n </div>\r\n\r\n <div class=\"nav-item\" *ngIf=\"capabilities.intray\">\r\n <a routerLink=\"/prepare\" routerLinkActive=\"active-link\" translate>eo.sidebar.navigation.prepare</a>\r\n </div>\r\n\r\n <div class=\"nav-item\" *ngIf=\"capabilities.bpm\">\r\n <a routerLink=\"/process\" routerLinkActive=\"active-link\" translate>eo.sidebar.navigation.process</a>\r\n </div>\r\n\r\n <div class=\"nav-item\" *ngIf=\"capabilities.notifications\">\r\n <a routerLink=\"/notifications\" routerLinkActive=\"active-link\" translate>eo.sidebar.navigation.notifications</a>\r\n </div>\r\n\r\n <div class=\"nav-item\" *ngIf=\"capabilities.storedqueries\">\r\n <a routerLink=\"/stored-queries\" routerLinkActive=\"active-link\" translate>eo.sidebar.navigation.storedqueries</a>\r\n </div>\r\n <ng-content select=\".navi\"></ng-content>\r\n </div>\r\n\r\n </p-tabPanel>\r\n </p-tabView>\r\n </div>\r\n\r\n</div>\r\n",
4080
4119
  styles: [":host{--sidebar-header-height:250px}:host .eo-side-bar{-webkit-animation-duration:.2s;animation-duration:.2s;background-color:var(--color-primary);bottom:0;box-shadow:0 0 20px 0 rgba(var(--color-black-rgb),.5);position:absolute;top:0;width:300px;z-index:20}[dir=ltr] :host .eo-side-bar{left:0;right:inherit}[dir=rtl] :host .eo-side-bar{left:inherit;right:0}[dir=ltr] :host .eo-side-bar{-webkit-animation-name:sidebarAppearLeft;animation-name:sidebarAppearLeft}[dir=rtl] :host .eo-side-bar{-webkit-animation-name:sidebarAppearRight;animation-name:sidebarAppearRight}:host .eo-side-bar .close{position:absolute;top:var(--app-pane-padding);z-index:22}[dir=ltr] :host .eo-side-bar .close{left:var(--app-pane-padding)}[dir=rtl] :host .eo-side-bar .close{right:var(--app-pane-padding)}:host .eo-side-bar .head{background-position:50%;background-size:cover;height:var(--sidebar-header-height);left:0;position:absolute;right:0;top:0;z-index:21}:host .eo-side-bar .body ::ng-deep{bottom:0;left:0;position:absolute;right:0;top:calc(var(--sidebar-header-height) - 30px);z-index:22}:host .eo-side-bar .body ::ng-deep p-tabView{display:flex;flex:1;flex-direction:row;height:100%;min-height:0;min-width:0}:host .eo-side-bar .body ::ng-deep p-tabView .tab-sidebar{flex:1}:host .eo-side-bar .body ::ng-deep p-tabView .ui-tabview-panels{height:100%;overflow:auto}:host .eo-side-bar .body ::ng-deep .navigation{padding-top:var(--app-pane-padding)}:host .eo-side-bar .body ::ng-deep a:focus eo-icon,:host .eo-side-bar .body ::ng-deep a:hover eo-icon{background:rgba(var(--color-white-rgb),.1)}:host .eo-side-bar .body ::ng-deep eo-icon.about{color:var(--color-white);padding:3px;position:absolute;top:-6px}[dir=ltr] :host .eo-side-bar .body ::ng-deep eo-icon.about{right:8px}[dir=rtl] :host .eo-side-bar .body ::ng-deep eo-icon.about{left:8px}:host .eo-side-bar .body ::ng-deep eo-icon.docu{color:var(--color-white);padding:3px;position:absolute;top:-6px}[dir=ltr] :host .eo-side-bar .body ::ng-deep eo-icon.docu{right:43px}[dir=rtl] :host .eo-side-bar .body ::ng-deep eo-icon.docu{left:43px}:host .eo-side-bar .body ::ng-deep .nav-item{border-bottom:1px solid rgba(var(--color-white-rgb),.1)}:host .eo-side-bar .body ::ng-deep .nav-item a{-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;color:var(--color-white);cursor:pointer;display:block;padding:var(--app-pane-padding);text-decoration:none;transition:all var(--app-default-transition-duration) ease-in-out}[dir=ltr] :host .eo-side-bar .body ::ng-deep .nav-item a{border-left:4px solid transparent}[dir=rtl] :host .eo-side-bar .body ::ng-deep .nav-item a{border-right:4px solid transparent}:host .eo-side-bar .body ::ng-deep .nav-item a.active-link{background:rgba(var(--color-white-rgb),.06);border-color:var(--color-accent);cursor:default}:host .eo-side-bar .body ::ng-deep .nav-item a:not(.active-link):focus,:host .eo-side-bar .body ::ng-deep .nav-item a:not(.active-link):hover{background:rgba(var(--color-white-rgb),.1)}@-webkit-keyframes sidebarAppearLeft{0%{opacity:0;transform:translateX(-30px)}to{opacity:1;transform:translateX(0)}}@keyframes sidebarAppearLeft{0%{opacity:0;transform:translateX(-30px)}to{opacity:1;transform:translateX(0)}}@-webkit-keyframes sidebarAppearRight{0%{opacity:0;transform:translateX(30px)}to{opacity:1;transform:translateX(0)}}@keyframes sidebarAppearRight{0%{opacity:0;transform:translateX(30px)}to{opacity:1;transform:translateX(0)}}"]
4081
4120
  },] }
4082
4121
  ];
@@ -4780,12 +4819,12 @@ class AppSearchComponent {
4780
4819
  AppSearchComponent.decorators = [
4781
4820
  { type: Component, args: [{
4782
4821
  selector: 'eo-app-search',
4783
- template: "<eo-dialog class=\"eo-app-search-dialog\" [appendTo]=\"''\" [visible]=\"true\" (hide)=\"closeSearchMenu($event)\">\r\n\r\n <div class=\"eo-app-search\" [ngClass]=\"{expert: query.expertMode}\" eoRtlAware=\"full\" *ngIf=\"query\">\r\n\r\n <div class=\"head\">\r\n\r\n <div class=\"search\">\r\n <form (submit)=\"executeSearch()\">\r\n <div class=\"title\" translate>eo.search</div>\r\n\r\n <eo-query-scope-select [selection]=\"queryScope\" (select)=\"setQueryScope($event)\"></eo-query-scope-select>\r\n\r\n <div class=\"search-box\">\r\n <p-autoComplete *ngIf=\"!query.expertMode; else expertInput\" #searchInput class=\"form-control\"\r\n [(ngModel)]=\"query.term\" [ngModelOptions]=\"{standalone: true}\" [suggestions]=\"autocompleteResults\"\r\n (onSelect)=\"autocompleteSelect()\" (completeMethod)=\"autocompleteSuggest($event)\" (paste)=\"autocompletePaste($event)\"\r\n (onClear)=\"autocompleteSuggest()\" [delay]=\"500\" [minLength]=\"3\"></p-autoComplete>\r\n\r\n <ng-template #expertInput>\r\n <input autofocus=\"autofocus\" class=\"expert-search__input\" #xpinput type=\"text\"\r\n (ngModelChange)=\"expertTermChanged()\" [(ngModel)]=\"query.term\" [ngModelOptions]=\"{standalone: true}\">\r\n </ng-template>\r\n\r\n <button class=\"btn expert-mode\" type=\"button\" (click)=\"toggleExpertMode()\">\r\n <!--<span translate>eo.search.mode.expert</span>-->\r\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_expert-search.svg'\"\r\n [iconTitle]=\"('eo.search.mode.expert' | translate)\" *ngIf=\"!query?.expertMode; else close\"></eo-icon>\r\n <ng-template #close>\r\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_expert-search.svg'\"\r\n [iconTitle]=\"('eo.search.mode.expert.close' | translate)\"></eo-icon>\r\n </ng-template>\r\n </button>\r\n\r\n <button type=\"button\" class=\"btn expert-mode expert-mode__reset\" [ngClass]=\"{active: query.term}\"\r\n (click)=\"resetExpertModeInput()\">\r\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\"\r\n [iconTitle]=\"('eo.search.clear.search' | translate)\"></eo-icon>\r\n </button>\r\n\r\n <button class=\"btn btn-default\" type=\"submit\" [disabled]=\"queryState.isEmpty\"\r\n translate>eo.search.submit</button>\r\n </div>\r\n </form>\r\n </div>\r\n\r\n <div class=\"result\" *ngIf=\"!loading; else spinner\">{{queryState.totalCount | localeDecimal}}</div>\r\n <ng-template #spinner>\r\n <eo-loading-spinner class=\"search-aggregator__loader\" [size]=\"'medium'\" [mode]=\"'dark'\"></eo-loading-spinner>\r\n </ng-template>\r\n <eo-icon class=\"button white close\" [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\"\r\n [iconTitle]=\"('eo.search.close' | translate)\" (click)=\"closeSearchMenu($event)\"></eo-icon>\r\n\r\n </div>\r\n\r\n <div class=\"body\" *ngIf=\"!query.expertMode; else expert\">\r\n\r\n <p-tabView [styleClass]=\"'tab-main'\" (onChange)=\"onTabChange($event.index)\" [activeIndex]=\"activeTabIndex\">\r\n <!-- object type restriction panel -->\r\n <p-tabPanel header=\"{{'eo.search.restrict.type'|translate}}\" headerStyleClass=\"search-tab-objecttype\">\r\n\r\n <!-- object type selection -->\r\n <div class=\"object-types rest-box-container\" [ngClass]=\"{idxenabled: query.types.length < 1}\"\r\n *ngIf=\"objectTypeGroups && !idxSearch\">\r\n <div class=\"group rest-box\" *ngFor=\"let group of objectTypeGroups\">\r\n <h3 *ngIf=\"group.label !== '0'\">{{group.label}}</h3>\r\n <h3 *ngIf=\"group.label === '0'\" translate>{{'eo.search.group.general'}}</h3>\r\n <div class=\"type\" *ngFor=\"let type of group.types\"\r\n [ngClass]=\"{context: type.isContextFolder, folder: type.isFolder, abstract: type.isAbstract, selected: isTypeActive(type), saved: isTypeSaved(type)}\">\r\n\r\n <div class=\"checkbox\" (click)=\"toggleType(type)\">\r\n <svg fill=\"#ffffff\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\r\n </svg>\r\n </div>\r\n <div class=\"item\" (click)=\"selectObjectType(type)\">\r\n <eo-icon [objectType]=\"type\"></eo-icon>\r\n <div class=\"label\">{{type.label}} {{type.isAbstract ? '('+ ('eo.search.type.abstract' | translate) + ')' : ''}}</div>\r\n <div class=\"count\">{{getAggregationCount(type) | localeDecimal}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- indexdata search -->\r\n <div class=\"indexdata-search\" *ngIf=\"idxSearch\">\r\n <h2>\r\n <eo-icon class=\"button\" [iconSrc]=\"'assets/_default/svg/ic_arrow_back.svg'\"\r\n (click)=\"exitIndexdataSearch()\"></eo-icon>\r\n <span translate [translateParams]=\"{type: idxSearch.type.label}\">eo.search.objecttype.form</span>\r\n </h2>\r\n\r\n <!-- context type selection -->\r\n <div class=\"context\" *ngIf=\"idxSearch.contextModels.length\">\r\n\r\n <div class=\"context-select\">\r\n <div translate>eo.search.objecttype.form.context</div>\r\n <div class=\"spacer\"></div>\r\n\r\n <eo-context-search *ngFor=\"let ctx of idxSearch.contextModels; index as i\" [ctx]=\"ctx\" [query]=\"query\"\r\n [selected]=\"currentContextFolderName === ctx.name\"\r\n [disabled]=\"(currentContextFolderName && currentContextFolderName !== ctx.name)\"\r\n [idxSearch]=\"idxSearch\" (setContext)=\"setContext($event)\">\r\n </eo-context-search>\r\n </div>\r\n\r\n <section class=\"context form\">\r\n <eo-object-form class=\"dark\" #ctxform\r\n *ngIf=\"idxSearch.contextFormOptions && idxSearch.contextFormOptions?.formModel?.elements?.length\"\r\n [formOptions]=\"idxSearch.contextFormOptions\" (statusChanged)=\"onIndexDataChanged($event)\">\r\n </eo-object-form>\r\n </section>\r\n </div>\r\n\r\n\r\n <section class=\"object-type form\" *ngIf=\"idxSearch.formOptions\">\r\n <eo-object-form #idxform [formOptions]=\"idxSearch.formOptions\"\r\n (statusChanged)=\"onIndexDataChanged($event)\" (onFormReady)=\"idxform.focusForm()\">\r\n </eo-object-form>\r\n </section>\r\n </div>\r\n </p-tabPanel>\r\n\r\n <!-- created restriction panel -->\r\n <p-tabPanel header=\"{{'eo.search.restrict.creation' | translate}}\" headerStyleClass=\"search-tab-created\">\r\n\r\n <div class=\"created rest-box-container\" *ngIf=\"queryState.aggregations\">\r\n\r\n <div class=\"rest-box box-timespan\">\r\n <h3 translate>eo.search.agg.time.span</h3>\r\n <div class=\"rest-item\" *ngFor=\"let agg of aggregationsModel[PARAMS.CREATED]\"\r\n (click)=\"toggleFilter(PARAMS.CREATED, OPERATOR.RANGE, agg.key, agg.selected)\"\r\n [ngClass]=\"{selected: agg.selected, saved: agg.saved}\">\r\n <div class=\"label\">{{agg.label}}</div>\r\n <div class=\"count\">{{agg.value | localeDecimal}}</div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"rest-box box-timespan-custom\">\r\n <h3 translate>eo.search.agg.time.span.custom</h3>\r\n <form #createdForm=\"ngForm\">\r\n <eo-form-input [label]=\"'eo.search.agg.time.span' | translate\">\r\n <eo-datetime-range #createdField [(ngModel)]=\"filtersModel[PARAMS.CREATED].value\" name=\"range\"\r\n [operator]=\"filtersModel[PARAMS.CREATED].value ? filtersModel[PARAMS.CREATED].value.operator : OPERATOR.EQUAL\"\r\n [withTime]=\"createdField.searchOption && createdField.searchOption !== OPERATOR.EQUAL\"\r\n (ngModelChange)=\"setFilter(PARAMS.CREATED, OPERATOR.EQUAL, $event, createdForm)\">\r\n </eo-datetime-range>\r\n </eo-form-input>\r\n </form>\r\n </div>\r\n\r\n <div class=\"rest-box box-creator\">\r\n <h3 translate>eo.search.agg.creator</h3>\r\n <form #creatorForm=\"ngForm\">\r\n <eo-form-input [label]=\"'eo.search.agg.createdby' | translate\">\r\n <eo-organization [multiselect]=\"true\" [(ngModel)]=\"filtersModel[PARAMS.CREATOR].value\" name=\"creator\"\r\n (onValueResolved)=\"resolveLabel(filtersModel[PARAMS.CREATOR], $event)\" [situation]=\"'SEARCH'\"\r\n (ngModelChange)=\"setFilter(PARAMS.CREATOR, OPERATOR.IN, $event, creatorForm)\"></eo-organization>\r\n </eo-form-input>\r\n </form>\r\n </div>\r\n\r\n </div>\r\n\r\n </p-tabPanel>\r\n <p-tabPanel header=\"{{'eo.search.restrict.modification'|translate}}\" headerStyleClass=\"search-tab-changed\">\r\n\r\n <div class=\"modified rest-box-container\" *ngIf=\"queryState.aggregations\">\r\n\r\n <div class=\"rest-box box-timespan\">\r\n <h3 translate>eo.search.agg.time.span</h3>\r\n <div class=\"rest-item\" *ngFor=\"let agg of aggregationsModel[PARAMS.MODIFIED]\"\r\n (click)=\"toggleFilter(PARAMS.MODIFIED, OPERATOR.RANGE, agg.key, agg.selected)\"\r\n [ngClass]=\"{selected: agg.selected, saved: agg.saved}\">\r\n <div class=\"label\">{{agg.label}}</div>\r\n <div class=\"count\">{{agg.value | localeDecimal}}</div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"rest-box box-timespan-custom\">\r\n <h3 translate>eo.search.agg.time.span.custom</h3>\r\n <form #modifiedForm=\"ngForm\">\r\n <eo-form-input [label]=\"'eo.search.agg.time.span' | translate\">\r\n <eo-datetime-range #modifiedField [(ngModel)]=\"filtersModel[PARAMS.MODIFIED].value\" name=\"range\"\r\n [operator]=\"filtersModel[PARAMS.MODIFIED].value ? filtersModel[PARAMS.MODIFIED].value.operator : OPERATOR.EQUAL\"\r\n [withTime]=\"modifiedField.searchOption && modifiedField.searchOption !== OPERATOR.EQUAL\"\r\n (ngModelChange)=\"setFilter(PARAMS.MODIFIED, OPERATOR.EQUAL, $event, modifiedForm)\">\r\n </eo-datetime-range>\r\n </eo-form-input>\r\n </form>\r\n </div>\r\n\r\n <div class=\"rest-box box-modifier\">\r\n <h3 translate>eo.search.agg.modifier</h3>\r\n <form #modifierForm=\"ngForm\">\r\n <eo-form-input [label]=\"'eo.search.agg.modifiedby' | translate\">\r\n <eo-organization [multiselect]=\"true\" [(ngModel)]=\"filtersModel[PARAMS.MODIFIER].value\"\r\n name=\"modifier\" (onValueResolved)=\"resolveLabel(filtersModel[PARAMS.MODIFIER], $event)\"\r\n [situation]=\"'SEARCH'\"\r\n (ngModelChange)=\"setFilter(PARAMS.MODIFIER, OPERATOR.IN, $event, modifierForm)\"></eo-organization>\r\n </eo-form-input>\r\n </form>\r\n </div>\r\n </div>\r\n </p-tabPanel>\r\n\r\n <p-tabPanel header=\"{{'eo.search.restrict.file'|translate}}\" headerStyleClass=\"search-tab-docfile\">\r\n <div class=\"file rest-box-container\" *ngIf=\"queryState.aggregations\">\r\n\r\n <div class=\"rest-box box-mimetype-group\">\r\n <h3 translate>eo.search.restrict.mimetypegroup</h3>\r\n <div class=\"rest-item\" *ngFor=\"let agg of aggregationsModel[PARAMS.MIMETYPEGROUP]\"\r\n (click)=\"setFilter(PARAMS.MIMETYPEGROUP, OPERATOR.IN, resolveSelection(aggregationsModel[PARAMS.MIMETYPEGROUP], agg.key, agg.selected))\"\r\n [ngClass]=\"{selected: agg.selected, saved: agg.saved}\">\r\n <div class=\"checkbox\">\r\n <svg fill=\"#ffffff\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\r\n </svg>\r\n </div>\r\n <div class=\"label\">{{agg.label}}</div>\r\n <div class=\"count\">{{agg.value | localeDecimal}}</div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"rest-box box-filesize\">\r\n <h3 translate>eo.search.restrict.filesize</h3>\r\n <div class=\"rest-item\" *ngFor=\"let agg of aggregationsModel[PARAMS.FILESIZE]\"\r\n (click)=\"toggleFilter(PARAMS.FILESIZE, OPERATOR.RANGE, agg.key, agg.selected)\"\r\n [ngClass]=\"{selected: agg.selected, saved: agg.saved}\">\r\n <div class=\"label\">{{agg.label}}</div>\r\n <div class=\"count\">{{agg.value | localeDecimal}}</div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"rest-box box-filename\">\r\n <h3 translate>eo.search.restrict.filename</h3>\r\n <form #filenameForm=\"ngForm\">\r\n <eo-form-input [label]=\"'eo.search.restrict.filename' | translate\">\r\n <eo-string [autocomplete]=\"true\" [qname]=\"'filename'\"\r\n [(ngModel)]=\"filtersModel[PARAMS.FILENAME].value\" name=\"filename\"\r\n (ngModelChange)=\"setFilter(PARAMS.FILENAME, OPERATOR.EQUAL, $event, filenameForm)\"></eo-string>\r\n </eo-form-input>\r\n </form>\r\n </div>\r\n </div>\r\n </p-tabPanel>\r\n </p-tabView>\r\n\r\n\r\n <!-- summary of the current search filters -->\r\n <div class=\"summary-panel\">\r\n\r\n <div class=\"headline stored-query\" *ngIf=\"isStoredQuery; else reghead\">\r\n <div class=\"pre\" translate>eo.search.aside.summary.storedquery</div>\r\n <div class=\"stored-query-name\">{{storedQuery.name}}</div>\r\n </div>\r\n\r\n <ng-template #reghead>\r\n <div class=\"headline\" translate>eo.search.aside.summary</div>\r\n </ng-template>\r\n\r\n <section class=\"query-types\">\r\n <!-- search term -->\r\n <div class=\"section section-searchterm\" *ngIf=\"query.term\">\r\n <div class=\"title\" translate>eo.search.aside.summary.term</div>\r\n <div class=\"filter\">\r\n <div class=\"label\">{{query.term}}</div>\r\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\" (click)=\"removeTerm()\"></eo-icon>\r\n </div>\r\n </div>\r\n\r\n <!-- context type -->\r\n <div class=\"section section-contexttype\" *ngIf=\"query.contextFolderTypes.length\">\r\n <div class=\"title\" translate>eo.search.aside.summary.contextfoldertypes</div>\r\n <div class=\"filter\" *ngFor=\"let type of query.contextFolderTypes\">\r\n <div class=\"label\">{{type.label}}</div>\r\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\" (click)=\"removeContextType()\"></eo-icon>\r\n </div>\r\n </div>\r\n\r\n <!-- object type -->\r\n <div class=\"section section-objecttype\" *ngIf=\"query.types.length\">\r\n <div class=\"title\" translate>eo.search.aside.summary.types</div>\r\n <div class=\"filter\" *ngFor=\"let type of query.types\">\r\n <div class=\"label\">{{type.label}}</div>\r\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\" (click)=\"removeType(type)\"></eo-icon>\r\n </div>\r\n </div>\r\n\r\n <ng-template #filterTemplate let-filter let-translate>\r\n <ng-container *ngIf=\"filter.innerValue.length\">\r\n <div class=\"filter\" *ngFor=\"let val of filter.innerValue; index as i\">\r\n <div class=\"label\">{{filter.label[i] | async}}</div>\r\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\" (click)=\"resetFilter(filter, val)\"></eo-icon>\r\n </div>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <div class=\"section section-creation\"\r\n *ngIf=\"filtersModel[PARAMS.CREATED].innerValue.length || filtersModel[PARAMS.CREATOR].innerValue.length\">\r\n <div class=\"title\" translate>eo.search.restrict.creation</div>\r\n <ng-template [ngTemplateOutlet]=\"filterTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: filtersModel[PARAMS.CREATED] }\"></ng-template>\r\n <ng-template [ngTemplateOutlet]=\"filterTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: filtersModel[PARAMS.CREATOR] }\"></ng-template>\r\n </div>\r\n\r\n <div class=\"section section-modification\"\r\n *ngIf=\"filtersModel[PARAMS.MODIFIED].innerValue.length || filtersModel[PARAMS.MODIFIER].innerValue.length\">\r\n <div class=\"title\" translate>eo.search.restrict.modification</div>\r\n <ng-template [ngTemplateOutlet]=\"filterTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: filtersModel[PARAMS.MODIFIED] }\"></ng-template>\r\n <ng-template [ngTemplateOutlet]=\"filterTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: filtersModel[PARAMS.MODIFIER] }\"></ng-template>\r\n </div>\r\n\r\n <div class=\"section section-mimetypegroup\"\r\n *ngIf=\"filtersModel[PARAMS.MIMETYPEGROUP].innerValue.length || filtersModel[PARAMS.FILESIZE].innerValue.length || filtersModel[PARAMS.FILENAME].innerValue.length\">\r\n <div class=\"title\" translate>eo.search.restrict.file</div>\r\n <ng-template [ngTemplateOutlet]=\"filterTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: filtersModel[PARAMS.MIMETYPEGROUP] }\"></ng-template>\r\n <ng-template [ngTemplateOutlet]=\"filterTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: filtersModel[PARAMS.FILESIZE] }\"></ng-template>\r\n <ng-template [ngTemplateOutlet]=\"filterTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: filtersModel[PARAMS.FILENAME] }\"></ng-template>\r\n </div>\r\n </section>\r\n\r\n <div class=\"actions\" *ngIf=\"query.term || query.filters.length || query.types.length; else emptySearch\">\r\n\r\n <ng-container *ngIf=\"isStoredQuery; else regactions\">\r\n <button class=\"secondary btn-reset\" (click)=\"resetQuery()\" translate>eo.search.storedquery.close</button>\r\n <button class=\"primary grey btn-update\" (click)=\"updateStoredQuery()\"\r\n *ngIf=\"capabilities.storedqueries && isOwnQuery\" translate>eo.search.storedquery.update</button>\r\n <button class=\"primary grey btn-save\" (click)=\"saveQuery()\"\r\n *ngIf=\"capabilities.storedqueries && !isOwnQuery\" translate>eo.search.save</button>\r\n <button class=\"primary btn-submit\" (click)=\"executeSearch()\" [disabled]=\"queryState.isEmpty\"\r\n translate>eo.search.submit</button>\r\n </ng-container>\r\n\r\n <ng-template #regactions>\r\n <button class=\"primary grey btn-reset\" (click)=\"resetQuery()\" translate>eo.search.reset</button>\r\n <button class=\"primary grey btn-save\" (click)=\"saveQuery()\"\r\n *ngIf=\"capabilities.storedqueries && !isOwnQuery\" translate>eo.search.save</button>\r\n <button class=\"primary btn-submit\" (click)=\"executeSearch()\" [disabled]=\"queryState.isEmpty\"\r\n translate>eo.search.submit</button>\r\n </ng-template>\r\n\r\n\r\n </div>\r\n\r\n <ng-template #emptySearch>\r\n <div class=\"empty-search\" translate>eo.search.summary.empty</div>\r\n </ng-template>\r\n\r\n </div>\r\n\r\n\r\n </div>\r\n\r\n <!-- expert mode body panel containing explanations -->\r\n <ng-template #expert>\r\n <div class=\"body expert\">\r\n\r\n <div class=\"empty\" *ngIf=\"expertModeQueryEmpty\"><span translate>eo.search.mode.expert.result.empty</span></div>\r\n\r\n <!--\r\n <h2><span translate>eo.search.mode.expert</span></h2>\r\n <div class=\"intro\" translate>eo.search.mode.expert.intro</div>\r\n\r\n <div class=\"base-params fields\">\r\n <h2 translate>eo.search.mode.expert.support.baseparams</h2>\r\n <div class=\"items\">\r\n <div class=\"item\" *ngFor=\"let el of expertModeSupport.baseParams\" (click)=\"xpAddToTerm(el.data)\">\r\n <div class=\"label\"><span>{{el.label}}</span></div>\r\n <div class=\"data\">{{el.data}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"system-types fields\">\r\n\r\n <div class=\"column column-group\">\r\n <h2 translate>eo.search.mode.expert.support.group</h2>\r\n <div class=\"items\">\r\n <div class=\"item\" *ngFor=\"let group of typeGroupTree\"\r\n [ngClass]=\"{selected: expertModeSupport.selectedGroup && group.id === expertModeSupport.selectedGroup.id}\"\r\n (click)=\"xpSelectGroup(group)\">\r\n <div *ngIf=\"group.label !== '0'\">{{group.label}}</div>\r\n <div *ngIf=\"group.label === '0'\">{{'eo.search.group.general' | translate}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"column column-type\" *ngIf=\"expertModeSupport.selectedGroup\">\r\n <h2 translate>eo.search.mode.expert.support.type</h2>\r\n <div class=\"items\">\r\n <div class=\"item\" *ngFor=\"let type of expertModeSupport.selectedGroup.tree\"\r\n [ngClass]=\"{selected: expertModeSupport.selectedType && type.id === expertModeSupport.selectedType.id}\"\r\n (click)=\"xpSelectType(type)\">\r\n <div>{{type.label}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"column section-field\" *ngIf=\"expertModeSupport.selectedType\">\r\n <h2 translate>eo.search.mode.expert.support.field</h2>\r\n <div class=\"items\">\r\n <div class=\"item\" *ngFor=\"let el of expertModeSupport.selectedType.children\" (click)=\"xpAddToTerm(el.data)\">\r\n <div class=\"label\"><span>{{el.label}}</span><span class=\"type\">{{el.type}}</span></div>\r\n <div class=\"data\">{{el.data}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n -->\r\n </div>\r\n </ng-template>\r\n </div>\r\n</eo-dialog>\r\n",
4822
+ template: "<eo-dialog [visible]=\"true\" [styleClass]=\"'eo-app-search-dialog'\" [align]=\"'start'\" [minWidth]=\"'80vw'\" [minHeight]=\"'100vh'\" (hide)=\"closeSearchMenu($event)\">\r\n\r\n <div class=\"eo-app-search\" [ngClass]=\"{expert: query.expertMode}\" eoRtlAware=\"full\" *ngIf=\"query\">\r\n\r\n <div class=\"head\">\r\n\r\n <div class=\"search\">\r\n <form (submit)=\"executeSearch()\">\r\n <div class=\"title\" translate>eo.search</div>\r\n\r\n <eo-query-scope-select [selection]=\"queryScope\" (select)=\"setQueryScope($event)\"></eo-query-scope-select>\r\n\r\n <div class=\"search-box\">\r\n <p-autoComplete *ngIf=\"!query.expertMode; else expertInput\" #searchInput class=\"form-control\"\r\n [(ngModel)]=\"query.term\" [ngModelOptions]=\"{standalone: true}\" [suggestions]=\"autocompleteResults\"\r\n (onSelect)=\"autocompleteSelect()\" (completeMethod)=\"autocompleteSuggest($event)\" (paste)=\"autocompletePaste($event)\"\r\n (onClear)=\"autocompleteSuggest()\" [delay]=\"500\" [minLength]=\"3\"></p-autoComplete>\r\n\r\n <ng-template #expertInput>\r\n <input autofocus=\"autofocus\" class=\"expert-search__input\" #xpinput type=\"text\"\r\n (ngModelChange)=\"expertTermChanged()\" [(ngModel)]=\"query.term\" [ngModelOptions]=\"{standalone: true}\">\r\n </ng-template>\r\n\r\n <button class=\"btn expert-mode\" type=\"button\" (click)=\"toggleExpertMode()\">\r\n <!--<span translate>eo.search.mode.expert</span>-->\r\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_expert-search.svg'\"\r\n [iconTitle]=\"('eo.search.mode.expert' | translate)\" *ngIf=\"!query?.expertMode; else close\"></eo-icon>\r\n <ng-template #close>\r\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_expert-search.svg'\"\r\n [iconTitle]=\"('eo.search.mode.expert.close' | translate)\"></eo-icon>\r\n </ng-template>\r\n </button>\r\n\r\n <button type=\"button\" class=\"btn expert-mode expert-mode__reset\" [ngClass]=\"{active: query.term}\"\r\n (click)=\"resetExpertModeInput()\">\r\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\"\r\n [iconTitle]=\"('eo.search.clear.search' | translate)\"></eo-icon>\r\n </button>\r\n\r\n <button class=\"btn btn-default\" type=\"submit\" [disabled]=\"queryState.isEmpty\"\r\n translate>eo.search.submit</button>\r\n </div>\r\n </form>\r\n </div>\r\n\r\n <div class=\"result\" *ngIf=\"!loading; else spinner\">{{queryState.totalCount | localeDecimal}}</div>\r\n <ng-template #spinner>\r\n <eo-loading-spinner class=\"search-aggregator__loader\" [size]=\"'medium'\" [mode]=\"'dark'\"></eo-loading-spinner>\r\n </ng-template>\r\n <eo-icon class=\"button white close\" [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\"\r\n [iconTitle]=\"('eo.search.close' | translate)\" (click)=\"closeSearchMenu($event)\"></eo-icon>\r\n\r\n </div>\r\n\r\n <div class=\"body\" *ngIf=\"!query.expertMode; else expert\">\r\n\r\n <p-tabView [styleClass]=\"'tab-main'\" (onChange)=\"onTabChange($event.index)\" [activeIndex]=\"activeTabIndex\">\r\n <!-- object type restriction panel -->\r\n <p-tabPanel header=\"{{'eo.search.restrict.type'|translate}}\" headerStyleClass=\"search-tab-objecttype\">\r\n\r\n <!-- object type selection -->\r\n <div class=\"object-types rest-box-container\" [ngClass]=\"{idxenabled: query.types.length < 1}\"\r\n *ngIf=\"objectTypeGroups && !idxSearch\">\r\n <div class=\"group rest-box\" *ngFor=\"let group of objectTypeGroups\">\r\n <h3 *ngIf=\"group.label !== '0'\">{{group.label}}</h3>\r\n <h3 *ngIf=\"group.label === '0'\" translate>{{'eo.search.group.general'}}</h3>\r\n <div class=\"type\" *ngFor=\"let type of group.types\"\r\n [ngClass]=\"{context: type.isContextFolder, folder: type.isFolder, abstract: type.isAbstract, selected: isTypeActive(type), saved: isTypeSaved(type)}\">\r\n\r\n <div class=\"checkbox\" (click)=\"toggleType(type)\">\r\n <svg fill=\"#ffffff\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\r\n </svg>\r\n </div>\r\n <div class=\"item\" (click)=\"selectObjectType(type)\">\r\n <eo-icon [objectType]=\"type\"></eo-icon>\r\n <div class=\"label\">{{type.label}} {{type.isAbstract ? '('+ ('eo.search.type.abstract' | translate) + ')' : ''}}</div>\r\n <div class=\"count\">{{getAggregationCount(type) | localeDecimal}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- indexdata search -->\r\n <div class=\"indexdata-search\" *ngIf=\"idxSearch\">\r\n <h2>\r\n <eo-icon class=\"button\" [iconSrc]=\"'assets/_default/svg/ic_arrow_back.svg'\"\r\n (click)=\"exitIndexdataSearch()\"></eo-icon>\r\n <span translate [translateParams]=\"{type: idxSearch.type.label}\">eo.search.objecttype.form</span>\r\n </h2>\r\n\r\n <!-- context type selection -->\r\n <div class=\"context\" *ngIf=\"idxSearch.contextModels.length\">\r\n\r\n <div class=\"context-select\">\r\n <div translate>eo.search.objecttype.form.context</div>\r\n <div class=\"spacer\"></div>\r\n\r\n <eo-context-search *ngFor=\"let ctx of idxSearch.contextModels; index as i\" [ctx]=\"ctx\" [query]=\"query\"\r\n [selected]=\"currentContextFolderName === ctx.name\"\r\n [disabled]=\"(currentContextFolderName && currentContextFolderName !== ctx.name)\"\r\n [idxSearch]=\"idxSearch\" (setContext)=\"setContext($event)\">\r\n </eo-context-search>\r\n </div>\r\n\r\n <section class=\"context form\">\r\n <eo-object-form class=\"dark\" #ctxform\r\n *ngIf=\"idxSearch.contextFormOptions && idxSearch.contextFormOptions?.formModel?.elements?.length\"\r\n [formOptions]=\"idxSearch.contextFormOptions\" (statusChanged)=\"onIndexDataChanged($event)\">\r\n </eo-object-form>\r\n </section>\r\n </div>\r\n\r\n\r\n <section class=\"object-type form\" *ngIf=\"idxSearch.formOptions\">\r\n <eo-object-form #idxform [formOptions]=\"idxSearch.formOptions\"\r\n (statusChanged)=\"onIndexDataChanged($event)\" (onFormReady)=\"idxform.focusForm()\">\r\n </eo-object-form>\r\n </section>\r\n </div>\r\n </p-tabPanel>\r\n\r\n <!-- created restriction panel -->\r\n <p-tabPanel header=\"{{'eo.search.restrict.creation' | translate}}\" headerStyleClass=\"search-tab-created\">\r\n\r\n <div class=\"created rest-box-container\" *ngIf=\"queryState.aggregations\">\r\n\r\n <div class=\"rest-box box-timespan\">\r\n <h3 translate>eo.search.agg.time.span</h3>\r\n <div class=\"rest-item\" *ngFor=\"let agg of aggregationsModel[PARAMS.CREATED]\"\r\n (click)=\"toggleFilter(PARAMS.CREATED, OPERATOR.RANGE, agg.key, agg.selected)\"\r\n [ngClass]=\"{selected: agg.selected, saved: agg.saved}\">\r\n <div class=\"label\">{{agg.label}}</div>\r\n <div class=\"count\">{{agg.value | localeDecimal}}</div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"rest-box box-timespan-custom\">\r\n <h3 translate>eo.search.agg.time.span.custom</h3>\r\n <form #createdForm=\"ngForm\">\r\n <eo-form-input [label]=\"'eo.search.agg.time.span' | translate\">\r\n <eo-datetime-range #createdField [(ngModel)]=\"filtersModel[PARAMS.CREATED].value\" name=\"range\"\r\n [operator]=\"filtersModel[PARAMS.CREATED].value ? filtersModel[PARAMS.CREATED].value.operator : OPERATOR.EQUAL\"\r\n [withTime]=\"createdField.searchOption && createdField.searchOption !== OPERATOR.EQUAL\"\r\n (ngModelChange)=\"setFilter(PARAMS.CREATED, OPERATOR.EQUAL, $event, createdForm)\">\r\n </eo-datetime-range>\r\n </eo-form-input>\r\n </form>\r\n </div>\r\n\r\n <div class=\"rest-box box-creator\">\r\n <h3 translate>eo.search.agg.creator</h3>\r\n <form #creatorForm=\"ngForm\">\r\n <eo-form-input [label]=\"'eo.search.agg.createdby' | translate\">\r\n <eo-organization [multiselect]=\"true\" [(ngModel)]=\"filtersModel[PARAMS.CREATOR].value\" name=\"creator\"\r\n (onValueResolved)=\"resolveLabel(filtersModel[PARAMS.CREATOR], $event)\" [situation]=\"'SEARCH'\"\r\n (ngModelChange)=\"setFilter(PARAMS.CREATOR, OPERATOR.IN, $event, creatorForm)\"></eo-organization>\r\n </eo-form-input>\r\n </form>\r\n </div>\r\n\r\n </div>\r\n\r\n </p-tabPanel>\r\n <p-tabPanel header=\"{{'eo.search.restrict.modification'|translate}}\" headerStyleClass=\"search-tab-changed\">\r\n\r\n <div class=\"modified rest-box-container\" *ngIf=\"queryState.aggregations\">\r\n\r\n <div class=\"rest-box box-timespan\">\r\n <h3 translate>eo.search.agg.time.span</h3>\r\n <div class=\"rest-item\" *ngFor=\"let agg of aggregationsModel[PARAMS.MODIFIED]\"\r\n (click)=\"toggleFilter(PARAMS.MODIFIED, OPERATOR.RANGE, agg.key, agg.selected)\"\r\n [ngClass]=\"{selected: agg.selected, saved: agg.saved}\">\r\n <div class=\"label\">{{agg.label}}</div>\r\n <div class=\"count\">{{agg.value | localeDecimal}}</div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"rest-box box-timespan-custom\">\r\n <h3 translate>eo.search.agg.time.span.custom</h3>\r\n <form #modifiedForm=\"ngForm\">\r\n <eo-form-input [label]=\"'eo.search.agg.time.span' | translate\">\r\n <eo-datetime-range #modifiedField [(ngModel)]=\"filtersModel[PARAMS.MODIFIED].value\" name=\"range\"\r\n [operator]=\"filtersModel[PARAMS.MODIFIED].value ? filtersModel[PARAMS.MODIFIED].value.operator : OPERATOR.EQUAL\"\r\n [withTime]=\"modifiedField.searchOption && modifiedField.searchOption !== OPERATOR.EQUAL\"\r\n (ngModelChange)=\"setFilter(PARAMS.MODIFIED, OPERATOR.EQUAL, $event, modifiedForm)\">\r\n </eo-datetime-range>\r\n </eo-form-input>\r\n </form>\r\n </div>\r\n\r\n <div class=\"rest-box box-modifier\">\r\n <h3 translate>eo.search.agg.modifier</h3>\r\n <form #modifierForm=\"ngForm\">\r\n <eo-form-input [label]=\"'eo.search.agg.modifiedby' | translate\">\r\n <eo-organization [multiselect]=\"true\" [(ngModel)]=\"filtersModel[PARAMS.MODIFIER].value\"\r\n name=\"modifier\" (onValueResolved)=\"resolveLabel(filtersModel[PARAMS.MODIFIER], $event)\"\r\n [situation]=\"'SEARCH'\"\r\n (ngModelChange)=\"setFilter(PARAMS.MODIFIER, OPERATOR.IN, $event, modifierForm)\"></eo-organization>\r\n </eo-form-input>\r\n </form>\r\n </div>\r\n </div>\r\n </p-tabPanel>\r\n\r\n <p-tabPanel header=\"{{'eo.search.restrict.file'|translate}}\" headerStyleClass=\"search-tab-docfile\">\r\n <div class=\"file rest-box-container\" *ngIf=\"queryState.aggregations\">\r\n\r\n <div class=\"rest-box box-mimetype-group\">\r\n <h3 translate>eo.search.restrict.mimetypegroup</h3>\r\n <div class=\"rest-item\" *ngFor=\"let agg of aggregationsModel[PARAMS.MIMETYPEGROUP]\"\r\n (click)=\"setFilter(PARAMS.MIMETYPEGROUP, OPERATOR.IN, resolveSelection(aggregationsModel[PARAMS.MIMETYPEGROUP], agg.key, agg.selected))\"\r\n [ngClass]=\"{selected: agg.selected, saved: agg.saved}\">\r\n <div class=\"checkbox\">\r\n <svg fill=\"#ffffff\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\r\n </svg>\r\n </div>\r\n <div class=\"label\">{{agg.label}}</div>\r\n <div class=\"count\">{{agg.value | localeDecimal}}</div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"rest-box box-filesize\">\r\n <h3 translate>eo.search.restrict.filesize</h3>\r\n <div class=\"rest-item\" *ngFor=\"let agg of aggregationsModel[PARAMS.FILESIZE]\"\r\n (click)=\"toggleFilter(PARAMS.FILESIZE, OPERATOR.RANGE, agg.key, agg.selected)\"\r\n [ngClass]=\"{selected: agg.selected, saved: agg.saved}\">\r\n <div class=\"label\">{{agg.label}}</div>\r\n <div class=\"count\">{{agg.value | localeDecimal}}</div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"rest-box box-filename\">\r\n <h3 translate>eo.search.restrict.filename</h3>\r\n <form #filenameForm=\"ngForm\">\r\n <eo-form-input [label]=\"'eo.search.restrict.filename' | translate\">\r\n <eo-string [autocomplete]=\"true\" [qname]=\"'filename'\"\r\n [(ngModel)]=\"filtersModel[PARAMS.FILENAME].value\" name=\"filename\"\r\n (ngModelChange)=\"setFilter(PARAMS.FILENAME, OPERATOR.EQUAL, $event, filenameForm)\"></eo-string>\r\n </eo-form-input>\r\n </form>\r\n </div>\r\n </div>\r\n </p-tabPanel>\r\n </p-tabView>\r\n\r\n\r\n <!-- summary of the current search filters -->\r\n <div class=\"summary-panel\">\r\n\r\n <div class=\"headline stored-query\" *ngIf=\"isStoredQuery; else reghead\">\r\n <div class=\"pre\" translate>eo.search.aside.summary.storedquery</div>\r\n <div class=\"stored-query-name\">{{storedQuery.name}}</div>\r\n </div>\r\n\r\n <ng-template #reghead>\r\n <div class=\"headline\" translate>eo.search.aside.summary</div>\r\n </ng-template>\r\n\r\n <section class=\"query-types\">\r\n <!-- search term -->\r\n <div class=\"section section-searchterm\" *ngIf=\"query.term\">\r\n <div class=\"title\" translate>eo.search.aside.summary.term</div>\r\n <div class=\"filter\">\r\n <div class=\"label\">{{query.term}}</div>\r\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\" (click)=\"removeTerm()\"></eo-icon>\r\n </div>\r\n </div>\r\n\r\n <!-- context type -->\r\n <div class=\"section section-contexttype\" *ngIf=\"query.contextFolderTypes.length\">\r\n <div class=\"title\" translate>eo.search.aside.summary.contextfoldertypes</div>\r\n <div class=\"filter\" *ngFor=\"let type of query.contextFolderTypes\">\r\n <div class=\"label\">{{type.label}}</div>\r\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\" (click)=\"removeContextType()\"></eo-icon>\r\n </div>\r\n </div>\r\n\r\n <!-- object type -->\r\n <div class=\"section section-objecttype\" *ngIf=\"query.types.length\">\r\n <div class=\"title\" translate>eo.search.aside.summary.types</div>\r\n <div class=\"filter\" *ngFor=\"let type of query.types\">\r\n <div class=\"label\">{{type.label}}</div>\r\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\" (click)=\"removeType(type)\"></eo-icon>\r\n </div>\r\n </div>\r\n\r\n <ng-template #filterTemplate let-filter let-translate>\r\n <ng-container *ngIf=\"filter.innerValue.length\">\r\n <div class=\"filter\" *ngFor=\"let val of filter.innerValue; index as i\">\r\n <div class=\"label\">{{filter.label[i] | async}}</div>\r\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\" (click)=\"resetFilter(filter, val)\"></eo-icon>\r\n </div>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <div class=\"section section-creation\"\r\n *ngIf=\"filtersModel[PARAMS.CREATED].innerValue.length || filtersModel[PARAMS.CREATOR].innerValue.length\">\r\n <div class=\"title\" translate>eo.search.restrict.creation</div>\r\n <ng-template [ngTemplateOutlet]=\"filterTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: filtersModel[PARAMS.CREATED] }\"></ng-template>\r\n <ng-template [ngTemplateOutlet]=\"filterTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: filtersModel[PARAMS.CREATOR] }\"></ng-template>\r\n </div>\r\n\r\n <div class=\"section section-modification\"\r\n *ngIf=\"filtersModel[PARAMS.MODIFIED].innerValue.length || filtersModel[PARAMS.MODIFIER].innerValue.length\">\r\n <div class=\"title\" translate>eo.search.restrict.modification</div>\r\n <ng-template [ngTemplateOutlet]=\"filterTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: filtersModel[PARAMS.MODIFIED] }\"></ng-template>\r\n <ng-template [ngTemplateOutlet]=\"filterTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: filtersModel[PARAMS.MODIFIER] }\"></ng-template>\r\n </div>\r\n\r\n <div class=\"section section-mimetypegroup\"\r\n *ngIf=\"filtersModel[PARAMS.MIMETYPEGROUP].innerValue.length || filtersModel[PARAMS.FILESIZE].innerValue.length || filtersModel[PARAMS.FILENAME].innerValue.length\">\r\n <div class=\"title\" translate>eo.search.restrict.file</div>\r\n <ng-template [ngTemplateOutlet]=\"filterTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: filtersModel[PARAMS.MIMETYPEGROUP] }\"></ng-template>\r\n <ng-template [ngTemplateOutlet]=\"filterTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: filtersModel[PARAMS.FILESIZE] }\"></ng-template>\r\n <ng-template [ngTemplateOutlet]=\"filterTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: filtersModel[PARAMS.FILENAME] }\"></ng-template>\r\n </div>\r\n </section>\r\n\r\n <div class=\"actions\" *ngIf=\"query.term || query.filters.length || query.types.length; else emptySearch\">\r\n\r\n <ng-container *ngIf=\"isStoredQuery; else regactions\">\r\n <button class=\"secondary btn-reset\" (click)=\"resetQuery()\" translate>eo.search.storedquery.close</button>\r\n <button class=\"primary grey btn-update\" (click)=\"updateStoredQuery()\"\r\n *ngIf=\"capabilities.storedqueries && isOwnQuery\" translate>eo.search.storedquery.update</button>\r\n <button class=\"primary grey btn-save\" (click)=\"saveQuery()\"\r\n *ngIf=\"capabilities.storedqueries && !isOwnQuery\" translate>eo.search.save</button>\r\n <button class=\"primary btn-submit\" (click)=\"executeSearch()\" [disabled]=\"queryState.isEmpty\"\r\n translate>eo.search.submit</button>\r\n </ng-container>\r\n\r\n <ng-template #regactions>\r\n <button class=\"primary grey btn-reset\" (click)=\"resetQuery()\" translate>eo.search.reset</button>\r\n <button class=\"primary grey btn-save\" (click)=\"saveQuery()\"\r\n *ngIf=\"capabilities.storedqueries && !isOwnQuery\" translate>eo.search.save</button>\r\n <button class=\"primary btn-submit\" (click)=\"executeSearch()\" [disabled]=\"queryState.isEmpty\"\r\n translate>eo.search.submit</button>\r\n </ng-template>\r\n\r\n\r\n </div>\r\n\r\n <ng-template #emptySearch>\r\n <div class=\"empty-search\" translate>eo.search.summary.empty</div>\r\n </ng-template>\r\n\r\n </div>\r\n\r\n\r\n </div>\r\n\r\n <!-- expert mode body panel containing explanations -->\r\n <ng-template #expert>\r\n <div class=\"body expert\">\r\n\r\n <div class=\"empty\" *ngIf=\"expertModeQueryEmpty\"><span translate>eo.search.mode.expert.result.empty</span></div>\r\n\r\n <!--\r\n <h2><span translate>eo.search.mode.expert</span></h2>\r\n <div class=\"intro\" translate>eo.search.mode.expert.intro</div>\r\n\r\n <div class=\"base-params fields\">\r\n <h2 translate>eo.search.mode.expert.support.baseparams</h2>\r\n <div class=\"items\">\r\n <div class=\"item\" *ngFor=\"let el of expertModeSupport.baseParams\" (click)=\"xpAddToTerm(el.data)\">\r\n <div class=\"label\"><span>{{el.label}}</span></div>\r\n <div class=\"data\">{{el.data}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"system-types fields\">\r\n\r\n <div class=\"column column-group\">\r\n <h2 translate>eo.search.mode.expert.support.group</h2>\r\n <div class=\"items\">\r\n <div class=\"item\" *ngFor=\"let group of typeGroupTree\"\r\n [ngClass]=\"{selected: expertModeSupport.selectedGroup && group.id === expertModeSupport.selectedGroup.id}\"\r\n (click)=\"xpSelectGroup(group)\">\r\n <div *ngIf=\"group.label !== '0'\">{{group.label}}</div>\r\n <div *ngIf=\"group.label === '0'\">{{'eo.search.group.general' | translate}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"column column-type\" *ngIf=\"expertModeSupport.selectedGroup\">\r\n <h2 translate>eo.search.mode.expert.support.type</h2>\r\n <div class=\"items\">\r\n <div class=\"item\" *ngFor=\"let type of expertModeSupport.selectedGroup.tree\"\r\n [ngClass]=\"{selected: expertModeSupport.selectedType && type.id === expertModeSupport.selectedType.id}\"\r\n (click)=\"xpSelectType(type)\">\r\n <div>{{type.label}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"column section-field\" *ngIf=\"expertModeSupport.selectedType\">\r\n <h2 translate>eo.search.mode.expert.support.field</h2>\r\n <div class=\"items\">\r\n <div class=\"item\" *ngFor=\"let el of expertModeSupport.selectedType.children\" (click)=\"xpAddToTerm(el.data)\">\r\n <div class=\"label\"><span>{{el.label}}</span><span class=\"type\">{{el.type}}</span></div>\r\n <div class=\"data\">{{el.data}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n -->\r\n </div>\r\n </ng-template>\r\n </div>\r\n</eo-dialog>\r\n",
4784
4823
  encapsulation: ViewEncapsulation.None
4785
4824
  // todo: apply onPush change detection (agg search result right now doesn't update)
4786
4825
  // changeDetection: ChangeDetectionStrategy.OnPush
4787
4826
  ,
4788
- styles: [".eo-app-search-dialog>p-dialog>.ui-dialog{bottom:0!important;max-width:100%!important;min-width:500px!important;top:0!important;width:80%!important}[dir=ltr] .eo-app-search-dialog>p-dialog>.ui-dialog{left:0!important}[dir=rtl] .eo-app-search-dialog>p-dialog>.ui-dialog{left:auto!important}[dir=ltr] .eo-app-search-dialog>p-dialog>.ui-dialog{right:auto!important}[dir=rtl] .eo-app-search-dialog>p-dialog>.ui-dialog{right:0!important}[dir=ltr] .eo-app-search-dialog>p-dialog>.ui-dialog{-webkit-animation:appSearchAppear calc(var(--app-default-transition-duration)*2)!important;animation:appSearchAppear calc(var(--app-default-transition-duration)*2)!important}[dir=rtl] .eo-app-search-dialog>p-dialog>.ui-dialog{-webkit-animation:appSearchAppearRTL calc(var(--app-default-transition-duration)*2)!important;animation:appSearchAppearRTL calc(var(--app-default-transition-duration)*2)!important}@media (max-width:500px){.eo-app-search-dialog>p-dialog>.ui-dialog{min-width:inherit;width:100%!important}}.eo-app-search-dialog>p-dialog>.ui-dialog>.ui-dialog-content,.eo-app-search-dialog>p-dialog>.ui-dialog>.ui-dialog-content>.eo-dialog{height:100%}.eo-app-search-dialog>p-dialog>.ui-dialog>.ui-dialog-content>.eo-dialog>.eo-dialog-content{max-height:100%;overflow:inherit}.eo-app-search-dialog>p-dialog>.ui-dialog>.ui-dialog-content>.eo-dialog>.eo-dialog-header{display:none}.eo-app-search.rtl .head .close{left:var(--app-pane-padding);right:auto}.eo-app-search.rtl .body .indexdata-search h2 eo-icon{transform:rotate(180deg)}.eo-app-search{--search-box-max-width:600px;--search-min-width:500px;--search-summary-width:350px;background:var(--panel-background-grey);bottom:0;display:flex;flex:1;flex-direction:column;left:0;min-height:0;min-width:0;position:absolute;right:0;top:0}.eo-app-search .head{background:var(--color-primary-2);color:var(--color-white);display:flex;flex:0 0 auto;flex-flow:row nowrap;padding:var(--app-pane-padding) calc(var(--app-pane-padding)/2) 0 calc(var(--app-pane-padding)/2);position:relative}.eo-app-search .head .search{flex:1 1 auto;justify-content:space-between;margin:0 calc(var(--app-pane-padding)/2);z-index:2}.eo-app-search .head .search .title{font-size:var(--font-display);font-weight:var(--font-weight-light);line-height:1em;min-height:1em}@media (max-width:480px){.eo-app-search .head .search .title{font-size:var(--font-title)}}.eo-app-search .head .search .query-scope{margin:calc(var(--app-pane-padding)*2) 0 0 0;max-width:var(--search-box-max-width);min-width:var(--search-min-width)}.eo-app-search .head .search .search-box{align-items:stretch;background:var(--color-white);box-shadow:0 2px 2px 0 rgba(var(--color-black-rgb),.2);display:flex;flex-flow:row nowrap;margin-bottom:var(--app-pane-padding);max-width:var(--search-box-max-width)}@media (max-width:480px){.eo-app-search .head .search .search-box{margin-top:var(--app-pane-padding)}}.eo-app-search .head .search .search-box p-autocomplete{background:transparent;border:0;flex:1 1 auto;outline:0}.eo-app-search .head .search .search-box p-autocomplete span.ui-autocomplete{width:100%}.eo-app-search .head .search .search-box input{border:0;box-sizing:border-box;font-size:var(--font-title);padding:calc(var(--app-pane-padding)/2);width:100%}.eo-app-search .head .search .search-box input::-ms-clear{display:none}.eo-app-search .head .search .search-box button[type=submit]{background:var(--color-accent);border:0;color:var(--color-white);font-size:var(--font-subhead);padding:0 var(--app-pane-padding)}.eo-app-search .head .search .search-box button.expert-mode{align-items:center;background:transparent;border:0;color:var(--text-color-hint);display:flex;padding:0 calc(var(--app-pane-padding)/2)}.eo-app-search .head .search .search-box button.expert-mode__reset{opacity:0;padding:0;transition:all .2s ease-in-out;width:0}.eo-app-search .head .search .search-box button.expert-mode__reset.active{opacity:1;padding:0 8px;width:40px}.eo-app-search .head .search .search-box button.expert-mode span{-webkit-animation:eoFadeIn var(--app-default-transition-duration);animation:eoFadeIn var(--app-default-transition-duration);display:none;padding:calc(var(--app-pane-padding)/4);white-space:nowrap}.eo-app-search .head .search .search-box button.expert-mode:hover{color:var(--color-accent)}.eo-app-search .head .search .search-box button.expert-mode:hover span{display:block}.eo-app-search .head .result{font-size:7em;line-height:1em;opacity:.1;position:absolute;right:var(--app-pane-padding);top:calc(var(--app-pane-padding)*2.5);z-index:1}@media (max-width:900px){.eo-app-search .head .result{font-size:3em;right:calc(var(--app-pane-padding)*3);top:var(--app-pane-padding)}}.eo-app-search .head .search-aggregator__loader{-webkit-animation:eoFadeIn .5s;animation:eoFadeIn .5s;position:absolute;right:13%;top:30%;z-index:11}@media (max-width:900px){.eo-app-search .head .search-aggregator__loader{top:5%}}.eo-app-search .head .close{position:absolute;right:var(--app-pane-padding);top:var(--app-pane-padding);z-index:2}.eo-app-search .body{background:rgba(var(--color-white-rgb),.2);flex:1 1 auto;position:relative}@media (max-width:1000px){.eo-app-search .body .summary-panel{bottom:0;display:flex;flex-flow:row nowrap;left:0!important;right:0!important;top:auto!important;width:auto!important}.eo-app-search .body .summary-panel .headline:not(.stored-query),.eo-app-search .body .summary-panel .section{display:none}.eo-app-search .body .summary-panel .headline.stored-query{align-items:center;display:flex;margin-bottom:0;padding:0 var(--app-pane-padding)}.eo-app-search .body .summary-panel .headline.stored-query .pre{display:none}.eo-app-search .body .summary-panel .headline.stored-query .stored-query-name{font-size:var(--font-subhead)!important}.eo-app-search .body .summary-panel .actions{flex:1 1 auto}.eo-app-search .body .ui-tabview .ui-tabview-panels{padding-left:0!important;padding-right:0!important}.eo-app-search .body .ui-tabview.tab-main{bottom:50px!important}}.eo-app-search .body .summary-panel{background:rgba(var(--color-black-rgb),.06);box-sizing:border-box;position:absolute;right:var(--app-pane-padding);top:calc(var(--app-pane-padding) + 35px);width:var(--search-summary-width)}.eo-app-search .body .summary-panel .query-types{max-height:calc(100vh - 290px);overflow:auto}.eo-app-search .body .summary-panel .headline{color:var(--text-color-caption);font-size:var(--font-subhead);font-weight:var(--font-weight-light);line-height:1em;margin-bottom:calc(var(--app-pane-padding)/2);padding:calc(var(--app-pane-padding)/2)}.eo-app-search .body .summary-panel .headline.stored-query{background:var(--color-primary-3);color:var(--color-white);font-size:var(--font-body)}.eo-app-search .body .summary-panel .headline.stored-query .stored-query-name{font-size:var(--font-title);line-height:1.2em;padding:calc(var(--app-pane-padding)/2) 0}.eo-app-search .body .summary-panel .empty-search{color:var(--text-color-caption);padding:var(--app-pane-padding) calc(var(--app-pane-padding)/2) calc(var(--app-pane-padding)/2) calc(var(--app-pane-padding)/2)}.eo-app-search .body .summary-panel .section{max-height:calc(100vh - 280px);overflow-y:auto;padding:calc(var(--app-pane-padding)/2)}.eo-app-search .body .summary-panel .section .title{border-bottom:1px solid rgba(var(--color-black-rgb),.1);color:var(--text-color-caption);padding-bottom:calc(var(--app-pane-padding)/4)}.eo-app-search .body .summary-panel .filter{align-items:center;background:rgba(var(--color-white-rgb),.6);display:flex;flex:1;flex-direction:row;margin-top:4px;min-height:0;min-width:0}.eo-app-search .body .summary-panel .filter .label{display:inline-block;flex:1 1 auto;max-width:none;overflow:hidden;padding:0 0 0 calc(var(--app-pane-padding)/4);text-overflow:ellipsis;white-space:nowrap}.eo-app-search .body .summary-panel .filter eo-icon{box-sizing:border-box;color:var(--text-color-hint);cursor:pointer;flex:0 0 auto;padding:calc(var(--app-pane-padding)/4)}.eo-app-search .body .summary-panel .filter eo-icon:hover{color:var(--text-color-caption)}.eo-app-search .body .summary-panel .actions{display:flex;justify-content:flex-end;padding:calc(var(--app-pane-padding)/2) calc(var(--app-pane-padding)/2 - 2px)}.eo-app-search .body .summary-panel .actions button{font-size:var(--font-hint);line-height:1em;margin:0 2px}.eo-app-search .body .ui-tabview.tab-main{bottom:0;display:flex;flex-flow:column;left:0;position:absolute;right:0;top:0}.eo-app-search .body .ui-tabview.tab-main>.ui-tabview-nav{background:var(--color-primary-2);border-color:transparent;color:var(--color-white);display:flex;flex:0 0 auto;padding:0 calc(var(--app-pane-padding) - 2px)}.eo-app-search .body .ui-tabview.tab-main>.ui-tabview-nav>li a{color:rgba(var(--color-white-rgb),.54)}.eo-app-search .body .ui-tabview.tab-main>.ui-tabview-nav>li.ui-state-active a{color:var(--color-white)}.eo-app-search .body .ui-tabview.tab-main>.ui-tabview-nav li:not(.ui-state-active):not(.ui-state-disabled):hover{border-color:rgba(var(--color-white-rgb),.54)}.eo-app-search .body .ui-tabview.tab-main>.ui-tabview-nav li:not(.ui-state-active):not(.ui-state-disabled):hover a{color:var(--color-white)}.eo-app-search .body .ui-tabview.tab-main>.ui-tabview-panels{flex:1 1 auto;overflow-y:auto;padding-right:calc(var(--app-pane-padding)*2 + var(--search-summary-width));position:relative}.eo-app-search .body .ui-tabview .ui-tabview-panel{padding:calc(var(--app-pane-padding)/2)}.eo-app-search .body .ui-tabview .ui-tabview-panel h2{color:var(--text-color-caption);font-size:var(--font-title);font-weight:var(--font-weight-light);margin:0 0 calc(var(--app-pane-padding)*1.5) 0;padding:0}.eo-app-search .body .rest-box-container{align-items:stretch;display:flex;flex-flow:row wrap}.eo-app-search .body .rest-box-container .rest-box{background:var(--color-white);flex:1 1 auto;margin:calc(var(--app-pane-padding)/2);padding:calc(var(--app-pane-padding)/2)}.eo-app-search .body .rest-box-container .rest-box h3{color:var(--text-color-caption);font-size:var(--font-caption);font-weight:var(--font-weight-normal);margin:0 0 var(--app-pane-padding) 0;padding:0}.eo-app-search .body .rest-box-container .rest-box .rest-item{align-items:center;color:var(--text-color-body);display:flex;flex:1 1 auto;flex-flow:row nowrap;margin:0 calc(var(--app-pane-padding)/4);padding:calc(var(--app-pane-padding)/2)}.eo-app-search .body .rest-box-container .rest-box .rest-item.selected{background:var(--color-primary-3);color:var(--color-white)}.eo-app-search .body .rest-box-container .rest-box .rest-item:not(.selected):hover{background:var(--list-item-hover-background)}.eo-app-search .body .rest-box-container .rest-box .label{flex:1 1 auto;padding:0 calc(var(--app-pane-padding)/2)}.eo-app-search .body .rest-box-container .rest-box .count{font-size:var(--font-caption);font-weight:var(--font-weight-bold);min-width:30px;text-align:right}.eo-app-search .body .object-types .group .type{align-items:center;display:flex;flex-flow:row nowrap;padding:1px 0}.eo-app-search .body .object-types .group .type.context{font-weight:var(--font-weight-bold)}.eo-app-search .body .object-types .group .type.folder .item eo-icon{background:rgba(var(--color-black-rgb),.15)}.eo-app-search .body .object-types .group .type.folder .item:hover eo-icon{background:rgba(var(--color-white-rgb),.3)}.eo-app-search .body .object-types .group .type.abstract .item{color:var(--text-color-caption)}.eo-app-search .body .object-types .group .type.abstract .item:hover{background:var(--color-primary-3);color:var(--panel-background)}.eo-app-search .body .object-types .group .type .item{align-items:center;border-radius:2px;color:var(--text-color-body);cursor:default;display:flex;flex:1 1 auto;flex-flow:row nowrap;margin:0 calc(var(--app-pane-padding)/4);padding:calc(var(--app-pane-padding)/2)}.eo-app-search .body .object-types .group .type .item eo-icon{-moz-transition:none;-o-transition:none;-webkit-transition:none;border-radius:2px;box-sizing:content-box;color:var(--text-color-caption);height:16px;padding:2px;transition:none;width:16px}.eo-app-search .body .object-types .type .item{cursor:pointer}.eo-app-search .body .object-types .type .item:hover{background:var(--color-primary-3);color:var(--panel-background)}.eo-app-search .body .object-types .type .item:hover eo-icon{color:var(--panel-background)}.eo-app-search .body .indexdata-search{padding:calc(var(--app-pane-padding)/2) 0 0 calc(var(--app-pane-padding)/2)}.eo-app-search .body .indexdata-search h2{align-items:center;display:flex;flex-flow:row}.eo-app-search .body .indexdata-search h2 eo-icon{margin:0 calc(var(--app-pane-padding)/2)}.eo-app-search .body .indexdata-search h2 span{padding:0 calc(var(--app-pane-padding)/4)}.eo-app-search .body .indexdata-search .context{margin-bottom:var(--app-pane-padding)}.eo-app-search .body .indexdata-search .context .context-select{align-items:center;display:flex;flex-flow:row wrap;padding-bottom:1px}.eo-app-search .body .indexdata-search .context .context-select .spacer{width:var(--app-pane-padding)}.eo-app-search .body .indexdata-search eo-object-form{border:1px solid rgba(var(--color-black-rgb),.1)}.eo-app-search .body .indexdata-search eo-object-form.dark{background-color:var(--color-primary-2);display:block}.eo-app-search.rtl{-webkit-animation:appSearchAppearRTL var(--app-default-transition-duration);animation:appSearchAppearRTL var(--app-default-transition-duration);left:0;right:0}.eo-app-search.rtl .body .summary-panel,.eo-app-search.rtl .head .result{left:var(--app-pane-padding);right:auto}.eo-app-search.rtl .body .ui-tabview .ui-tabview-panels{padding-bottom:0;padding-left:calc(var(--app-pane-padding)*2 + var(--search-summary-width));padding-right:0;padding-top:0}.eo-app-search.expert .head .result{display:none}.eo-app-search.expert .head .search .search-box{max-width:100%}.eo-app-search.expert .head .search .search-box button.expert-mode{color:var(--color-accent)}.eo-app-search.expert .body{background:var(--color-primary-2);color:var(--color-white);display:flex;flex-flow:column}.eo-app-search.expert .body h2{flex:0 0 auto;font-size:var(--font-title);font-weight:var(--font-weight-light);margin:var(--app-pane-padding) 0;padding:0}.eo-app-search.expert .body h2 span{border-bottom:4px solid var(--color-accent);padding:calc(var(--app-pane-padding)/2) 0 calc(var(--app-pane-padding)/2) var(--app-pane-padding)}.eo-app-search.expert .body .intro{flex:0 0 auto;padding:var(--app-pane-padding)}.eo-app-search.expert .body .empty{flex:0 0 auto;padding:0 var(--app-pane-padding)}.eo-app-search.expert .body .empty span{background:var(--color-error);border-radius:2px;color:var(--color-white);padding:calc(var(--app-pane-padding)/4) calc(var(--app-pane-padding)/2)}.eo-app-search.expert .body .fields h2{border-bottom:1px solid rgba(var(--color-white-rgb),.3);flex:0 0 auto;margin:calc(var(--app-pane-padding)/2);padding:calc(var(--app-pane-padding)/2)}.eo-app-search.expert .body .fields .item{-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;background:rgba(var(--color-white-rgb),.06);border-radius:2px;cursor:pointer;margin-bottom:4px;padding:calc(var(--app-pane-padding)/2);transition:all var(--app-default-transition-duration) ease-in-out}.eo-app-search.expert .body .fields .item.selected,.eo-app-search.expert .body .fields .item:hover{background:rgba(var(--color-white-rgb),.2)}.eo-app-search.expert .body .fields .item .label{display:flex;font-weight:var(--font-weight-bold);justify-content:space-between}.eo-app-search.expert .body .fields .item .label .type{font-size:var(--font-hint);opacity:.5}.eo-app-search.expert .body .fields .item .data{opacity:.75}.eo-app-search.expert .body .base-params{padding:calc(var(--app-pane-padding)/2)}.eo-app-search.expert .body .base-params .items{display:flex;flex-flow:row wrap;padding:calc(var(--app-pane-padding)/4)}.eo-app-search.expert .body .base-params .items .item{margin:calc(var(--app-pane-padding)/4)}.eo-app-search.expert .body .system-types{align-items:stretch;display:flex;flex:1 1 auto;flex-flow:row;justify-content:flex-start;padding:calc(var(--app-pane-padding)/2)}.eo-app-search.expert .body .system-types .column{box-sizing:border-box;display:flex;flex:0 0 33%;flex-flow:column}.eo-app-search.expert .body .system-types .column .items{flex:1 1 auto;overflow-y:auto;padding:calc(var(--app-pane-padding)/2)}.eo-app-search.expert .body .system-types .column .items::-webkit-scrollbar-thumb{background-color:rgba(var(--color-white-rgb),.1)}.eo-app-search .body .rest-box-container .rest-box .rest-item .checkbox,.eo-app-search .body .rest-box-container .rest-box .type .checkbox{border:1px solid var(--text-color-hint);border-radius:2px;cursor:pointer;height:20px;margin:0 calc(var(--app-pane-padding)/2);width:20px}.eo-app-search .body .rest-box-container .rest-box .rest-item .checkbox svg,.eo-app-search .body .rest-box-container .rest-box .type .checkbox svg{opacity:0}.eo-app-search .body .rest-box-container .rest-box .rest-item:not(.selected):hover .checkbox:hover,.eo-app-search .body .rest-box-container .rest-box .type:not(.selected):hover .checkbox:hover{border-color:var(--text-color-caption)}.eo-app-search .body .rest-box-container .rest-box .rest-item:not(.selected):hover .checkbox:hover svg,.eo-app-search .body .rest-box-container .rest-box .type:not(.selected):hover .checkbox:hover svg{fill:var(--text-color-body);opacity:.3}.eo-app-search .body .rest-box-container .rest-box .rest-item.selected .checkbox,.eo-app-search .body .rest-box-container .rest-box .type.selected .checkbox{background:var(--color-primary-3);border-color:var(--color-primary-3)}.eo-app-search .body .rest-box-container .rest-box .rest-item.selected .checkbox svg,.eo-app-search .body .rest-box-container .rest-box .type.selected .checkbox svg{fill:var(--color-white)!important;opacity:1}.eo-app-search .body .rest-box-container .rest-box .rest-item.saved .count,.eo-app-search .body .rest-box-container .rest-box .type.saved .count{font-weight:var(--font-weight-normal)}@-webkit-keyframes appSearchAppear{0%{opacity:0;transform:translateX(-30px)}to{opacity:1;transform:translateX(0)}}@keyframes appSearchAppear{0%{opacity:0;transform:translateX(-30px)}to{opacity:1;transform:translateX(0)}}@-webkit-keyframes appSearchAppearRTL{0%{opacity:0;transform:translateX(30px)}to{opacity:1;transform:translateX(0)}}@keyframes appSearchAppearRTL{0%{opacity:0;transform:translateX(30px)}to{opacity:1;transform:translateX(0)}}"]
4827
+ styles: [".eo-app-search-dialog{bottom:0!important;max-width:100%!important;min-width:500px!important;top:0!important;width:80%!important}[dir=ltr] .eo-app-search-dialog{left:0!important}[dir=rtl] .eo-app-search-dialog{left:auto!important}[dir=ltr] .eo-app-search-dialog{right:auto!important}[dir=rtl] .eo-app-search-dialog{right:0!important}[dir=ltr] .eo-app-search-dialog{-webkit-animation:appSearchAppear calc(var(--app-default-transition-duration)*2)!important;animation:appSearchAppear calc(var(--app-default-transition-duration)*2)!important}[dir=rtl] .eo-app-search-dialog{-webkit-animation:appSearchAppearRTL calc(var(--app-default-transition-duration)*2)!important;animation:appSearchAppearRTL calc(var(--app-default-transition-duration)*2)!important}@media (max-width:500px){.eo-app-search-dialog{min-width:inherit;width:100%!important}}.eo-app-search-dialog .eo-dialog-content{max-height:100%;overflow:inherit}.eo-app-search-dialog .eo-dialog-header{display:none}.eo-app-search.rtl .head .close{left:var(--app-pane-padding);right:auto}.eo-app-search.rtl .body .indexdata-search h2 eo-icon{transform:rotate(180deg)}.eo-app-search{--search-box-max-width:600px;--search-min-width:500px;--search-summary-width:350px;background:var(--panel-background-grey);bottom:0;display:flex;flex:1;flex-direction:column;left:0;min-height:0;min-width:0;position:absolute;right:0;top:0}.eo-app-search .head{background:var(--color-primary-2);color:var(--color-white);display:flex;flex:0 0 auto;flex-flow:row nowrap;padding:var(--app-pane-padding) calc(var(--app-pane-padding)/2) 0 calc(var(--app-pane-padding)/2);position:relative}.eo-app-search .head .search{flex:1 1 auto;justify-content:space-between;margin:0 calc(var(--app-pane-padding)/2);z-index:2}.eo-app-search .head .search .title{font-size:var(--font-display);font-weight:var(--font-weight-light);line-height:1em;min-height:1em}@media (max-width:480px){.eo-app-search .head .search .title{font-size:var(--font-title)}}.eo-app-search .head .search .query-scope{margin:calc(var(--app-pane-padding)*2) 0 0 0;max-width:var(--search-box-max-width);min-width:var(--search-min-width)}.eo-app-search .head .search .search-box{align-items:stretch;background:var(--color-white);box-shadow:0 2px 2px 0 rgba(var(--color-black-rgb),.2);display:flex;flex-flow:row nowrap;margin-bottom:var(--app-pane-padding);max-width:var(--search-box-max-width)}@media (max-width:480px){.eo-app-search .head .search .search-box{margin-top:var(--app-pane-padding)}}.eo-app-search .head .search .search-box p-autocomplete{background:transparent;border:0;flex:1 1 auto;outline:0}.eo-app-search .head .search .search-box p-autocomplete span.ui-autocomplete{width:100%}.eo-app-search .head .search .search-box input{border:0;box-sizing:border-box;font-size:var(--font-title);padding:calc(var(--app-pane-padding)/2);width:100%}.eo-app-search .head .search .search-box input::-ms-clear{display:none}.eo-app-search .head .search .search-box button[type=submit]{background:var(--color-accent);border:0;color:var(--color-white);font-size:var(--font-subhead);padding:0 var(--app-pane-padding)}.eo-app-search .head .search .search-box button.expert-mode{align-items:center;background:transparent;border:0;color:var(--text-color-hint);display:flex;padding:0 calc(var(--app-pane-padding)/2)}.eo-app-search .head .search .search-box button.expert-mode__reset{opacity:0;padding:0;transition:all .2s ease-in-out;width:0}.eo-app-search .head .search .search-box button.expert-mode__reset.active{opacity:1;padding:0 8px;width:40px}.eo-app-search .head .search .search-box button.expert-mode span{-webkit-animation:eoFadeIn var(--app-default-transition-duration);animation:eoFadeIn var(--app-default-transition-duration);display:none;padding:calc(var(--app-pane-padding)/4);white-space:nowrap}.eo-app-search .head .search .search-box button.expert-mode:hover{color:var(--color-accent)}.eo-app-search .head .search .search-box button.expert-mode:hover span{display:block}.eo-app-search .head .result{font-size:7em;line-height:1em;opacity:.1;position:absolute;right:var(--app-pane-padding);top:calc(var(--app-pane-padding)*2.5);z-index:1}@media (max-width:900px){.eo-app-search .head .result{font-size:3em;right:calc(var(--app-pane-padding)*3);top:var(--app-pane-padding)}}.eo-app-search .head .search-aggregator__loader{-webkit-animation:eoFadeIn .5s;animation:eoFadeIn .5s;position:absolute;right:13%;top:30%;z-index:11}@media (max-width:900px){.eo-app-search .head .search-aggregator__loader{top:5%}}.eo-app-search .head .close{position:absolute;right:var(--app-pane-padding);top:var(--app-pane-padding);z-index:2}.eo-app-search .body{background:rgba(var(--color-white-rgb),.2);flex:1 1 auto;position:relative}@media (max-width:1000px){.eo-app-search .body .summary-panel{bottom:0;display:flex;flex-flow:row nowrap;left:0!important;right:0!important;top:auto!important;width:auto!important}.eo-app-search .body .summary-panel .headline:not(.stored-query),.eo-app-search .body .summary-panel .section{display:none}.eo-app-search .body .summary-panel .headline.stored-query{align-items:center;display:flex;margin-bottom:0;padding:0 var(--app-pane-padding)}.eo-app-search .body .summary-panel .headline.stored-query .pre{display:none}.eo-app-search .body .summary-panel .headline.stored-query .stored-query-name{font-size:var(--font-subhead)!important}.eo-app-search .body .summary-panel .actions{flex:1 1 auto}.eo-app-search .body .ui-tabview .ui-tabview-panels{padding-left:0!important;padding-right:0!important}.eo-app-search .body .ui-tabview.tab-main{bottom:50px!important}}.eo-app-search .body .summary-panel{background:rgba(var(--color-black-rgb),.06);box-sizing:border-box;position:absolute;right:var(--app-pane-padding);top:calc(var(--app-pane-padding) + 35px);width:var(--search-summary-width)}.eo-app-search .body .summary-panel .query-types{max-height:calc(100vh - 290px);overflow:auto}.eo-app-search .body .summary-panel .headline{color:var(--text-color-caption);font-size:var(--font-subhead);font-weight:var(--font-weight-light);line-height:1em;margin-bottom:calc(var(--app-pane-padding)/2);padding:calc(var(--app-pane-padding)/2)}.eo-app-search .body .summary-panel .headline.stored-query{background:var(--color-primary-3);color:var(--color-white);font-size:var(--font-body)}.eo-app-search .body .summary-panel .headline.stored-query .stored-query-name{font-size:var(--font-title);line-height:1.2em;padding:calc(var(--app-pane-padding)/2) 0}.eo-app-search .body .summary-panel .empty-search{color:var(--text-color-caption);padding:var(--app-pane-padding) calc(var(--app-pane-padding)/2) calc(var(--app-pane-padding)/2) calc(var(--app-pane-padding)/2)}.eo-app-search .body .summary-panel .section{max-height:calc(100vh - 280px);overflow-y:auto;padding:calc(var(--app-pane-padding)/2)}.eo-app-search .body .summary-panel .section .title{border-bottom:1px solid rgba(var(--color-black-rgb),.1);color:var(--text-color-caption);padding-bottom:calc(var(--app-pane-padding)/4)}.eo-app-search .body .summary-panel .filter{align-items:center;background:rgba(var(--color-white-rgb),.6);display:flex;flex:1;flex-direction:row;margin-top:4px;min-height:0;min-width:0}.eo-app-search .body .summary-panel .filter .label{display:inline-block;flex:1 1 auto;max-width:none;overflow:hidden;padding:0 0 0 calc(var(--app-pane-padding)/4);text-overflow:ellipsis;white-space:nowrap}.eo-app-search .body .summary-panel .filter eo-icon{box-sizing:border-box;color:var(--text-color-hint);cursor:pointer;flex:0 0 auto;padding:calc(var(--app-pane-padding)/4)}.eo-app-search .body .summary-panel .filter eo-icon:hover{color:var(--text-color-caption)}.eo-app-search .body .summary-panel .actions{display:flex;justify-content:flex-end;padding:calc(var(--app-pane-padding)/2) calc(var(--app-pane-padding)/2 - 2px)}.eo-app-search .body .summary-panel .actions button{font-size:var(--font-hint);line-height:1em;margin:0 2px}.eo-app-search .body .ui-tabview.tab-main{bottom:0;display:flex;flex-flow:column;left:0;position:absolute;right:0;top:0}.eo-app-search .body .ui-tabview.tab-main>.ui-tabview-nav{background:var(--color-primary-2);border-color:transparent;color:var(--color-white);display:flex;flex:0 0 auto;padding:0 calc(var(--app-pane-padding) - 2px)}.eo-app-search .body .ui-tabview.tab-main>.ui-tabview-nav>li a{color:rgba(var(--color-white-rgb),.54)}.eo-app-search .body .ui-tabview.tab-main>.ui-tabview-nav>li.ui-state-active a{color:var(--color-white)}.eo-app-search .body .ui-tabview.tab-main>.ui-tabview-nav li:not(.ui-state-active):not(.ui-state-disabled):hover{border-color:rgba(var(--color-white-rgb),.54)}.eo-app-search .body .ui-tabview.tab-main>.ui-tabview-nav li:not(.ui-state-active):not(.ui-state-disabled):hover a{color:var(--color-white)}.eo-app-search .body .ui-tabview.tab-main>.ui-tabview-panels{flex:1 1 auto;overflow-y:auto;padding-right:calc(var(--app-pane-padding)*2 + var(--search-summary-width));position:relative}.eo-app-search .body .ui-tabview .ui-tabview-panel{padding:calc(var(--app-pane-padding)/2)}.eo-app-search .body .ui-tabview .ui-tabview-panel h2{color:var(--text-color-caption);font-size:var(--font-title);font-weight:var(--font-weight-light);margin:0 0 calc(var(--app-pane-padding)*1.5) 0;padding:0}.eo-app-search .body .rest-box-container{align-items:stretch;display:flex;flex-flow:row wrap}.eo-app-search .body .rest-box-container .rest-box{background:var(--color-white);flex:1 1 auto;margin:calc(var(--app-pane-padding)/2);padding:calc(var(--app-pane-padding)/2)}.eo-app-search .body .rest-box-container .rest-box h3{color:var(--text-color-caption);font-size:var(--font-caption);font-weight:var(--font-weight-normal);margin:0 0 var(--app-pane-padding) 0;padding:0}.eo-app-search .body .rest-box-container .rest-box .rest-item{align-items:center;color:var(--text-color-body);display:flex;flex:1 1 auto;flex-flow:row nowrap;margin:0 calc(var(--app-pane-padding)/4);padding:calc(var(--app-pane-padding)/2)}.eo-app-search .body .rest-box-container .rest-box .rest-item.selected{background:var(--color-primary-3);color:var(--color-white)}.eo-app-search .body .rest-box-container .rest-box .rest-item:not(.selected):hover{background:var(--list-item-hover-background)}.eo-app-search .body .rest-box-container .rest-box .label{flex:1 1 auto;padding:0 calc(var(--app-pane-padding)/2)}.eo-app-search .body .rest-box-container .rest-box .count{font-size:var(--font-caption);font-weight:var(--font-weight-bold);min-width:30px;text-align:right}.eo-app-search .body .object-types .group .type{align-items:center;display:flex;flex-flow:row nowrap;padding:1px 0}.eo-app-search .body .object-types .group .type.context{font-weight:var(--font-weight-bold)}.eo-app-search .body .object-types .group .type.folder .item eo-icon{background:rgba(var(--color-black-rgb),.15)}.eo-app-search .body .object-types .group .type.folder .item:hover eo-icon{background:rgba(var(--color-white-rgb),.3)}.eo-app-search .body .object-types .group .type.abstract .item{color:var(--text-color-caption)}.eo-app-search .body .object-types .group .type.abstract .item:hover{background:var(--color-primary-3);color:var(--panel-background)}.eo-app-search .body .object-types .group .type .item{align-items:center;border-radius:2px;color:var(--text-color-body);cursor:default;display:flex;flex:1 1 auto;flex-flow:row nowrap;margin:0 calc(var(--app-pane-padding)/4);padding:calc(var(--app-pane-padding)/2)}.eo-app-search .body .object-types .group .type .item eo-icon{-moz-transition:none;-o-transition:none;-webkit-transition:none;border-radius:2px;box-sizing:content-box;color:var(--text-color-caption);height:16px;padding:2px;transition:none;width:16px}.eo-app-search .body .object-types .type .item{cursor:pointer}.eo-app-search .body .object-types .type .item:hover{background:var(--color-primary-3);color:var(--panel-background)}.eo-app-search .body .object-types .type .item:hover eo-icon{color:var(--panel-background)}.eo-app-search .body .indexdata-search{padding:calc(var(--app-pane-padding)/2) 0 0 calc(var(--app-pane-padding)/2)}.eo-app-search .body .indexdata-search h2{align-items:center;display:flex;flex-flow:row}.eo-app-search .body .indexdata-search h2 eo-icon{margin:0 calc(var(--app-pane-padding)/2)}.eo-app-search .body .indexdata-search h2 span{padding:0 calc(var(--app-pane-padding)/4)}.eo-app-search .body .indexdata-search .context{margin-bottom:var(--app-pane-padding)}.eo-app-search .body .indexdata-search .context .context-select{align-items:center;display:flex;flex-flow:row wrap;padding-bottom:1px}.eo-app-search .body .indexdata-search .context .context-select .spacer{width:var(--app-pane-padding)}.eo-app-search .body .indexdata-search eo-object-form{border:1px solid rgba(var(--color-black-rgb),.1)}.eo-app-search .body .indexdata-search eo-object-form.dark{background-color:var(--color-primary-2);display:block}.eo-app-search.rtl{-webkit-animation:appSearchAppearRTL var(--app-default-transition-duration);animation:appSearchAppearRTL var(--app-default-transition-duration);left:0;right:0}.eo-app-search.rtl .body .summary-panel,.eo-app-search.rtl .head .result{left:var(--app-pane-padding);right:auto}.eo-app-search.rtl .body .ui-tabview .ui-tabview-panels{padding-bottom:0;padding-left:calc(var(--app-pane-padding)*2 + var(--search-summary-width));padding-right:0;padding-top:0}.eo-app-search.expert .head .result{display:none}.eo-app-search.expert .head .search .search-box{max-width:100%}.eo-app-search.expert .head .search .search-box button.expert-mode{color:var(--color-accent)}.eo-app-search.expert .body{background:var(--color-primary-2);color:var(--color-white);display:flex;flex-flow:column}.eo-app-search.expert .body h2{flex:0 0 auto;font-size:var(--font-title);font-weight:var(--font-weight-light);margin:var(--app-pane-padding) 0;padding:0}.eo-app-search.expert .body h2 span{border-bottom:4px solid var(--color-accent);padding:calc(var(--app-pane-padding)/2) 0 calc(var(--app-pane-padding)/2) var(--app-pane-padding)}.eo-app-search.expert .body .intro{flex:0 0 auto;padding:var(--app-pane-padding)}.eo-app-search.expert .body .empty{flex:0 0 auto;padding:0 var(--app-pane-padding)}.eo-app-search.expert .body .empty span{background:var(--color-error);border-radius:2px;color:var(--color-white);padding:calc(var(--app-pane-padding)/4) calc(var(--app-pane-padding)/2)}.eo-app-search.expert .body .fields h2{border-bottom:1px solid rgba(var(--color-white-rgb),.3);flex:0 0 auto;margin:calc(var(--app-pane-padding)/2);padding:calc(var(--app-pane-padding)/2)}.eo-app-search.expert .body .fields .item{-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;background:rgba(var(--color-white-rgb),.06);border-radius:2px;cursor:pointer;margin-bottom:4px;padding:calc(var(--app-pane-padding)/2);transition:all var(--app-default-transition-duration) ease-in-out}.eo-app-search.expert .body .fields .item.selected,.eo-app-search.expert .body .fields .item:hover{background:rgba(var(--color-white-rgb),.2)}.eo-app-search.expert .body .fields .item .label{display:flex;font-weight:var(--font-weight-bold);justify-content:space-between}.eo-app-search.expert .body .fields .item .label .type{font-size:var(--font-hint);opacity:.5}.eo-app-search.expert .body .fields .item .data{opacity:.75}.eo-app-search.expert .body .base-params{padding:calc(var(--app-pane-padding)/2)}.eo-app-search.expert .body .base-params .items{display:flex;flex-flow:row wrap;padding:calc(var(--app-pane-padding)/4)}.eo-app-search.expert .body .base-params .items .item{margin:calc(var(--app-pane-padding)/4)}.eo-app-search.expert .body .system-types{align-items:stretch;display:flex;flex:1 1 auto;flex-flow:row;justify-content:flex-start;padding:calc(var(--app-pane-padding)/2)}.eo-app-search.expert .body .system-types .column{box-sizing:border-box;display:flex;flex:0 0 33%;flex-flow:column}.eo-app-search.expert .body .system-types .column .items{flex:1 1 auto;overflow-y:auto;padding:calc(var(--app-pane-padding)/2)}.eo-app-search.expert .body .system-types .column .items::-webkit-scrollbar-thumb{background-color:rgba(var(--color-white-rgb),.1)}.eo-app-search .body .rest-box-container .rest-box .rest-item .checkbox,.eo-app-search .body .rest-box-container .rest-box .type .checkbox{border:1px solid var(--text-color-hint);border-radius:2px;cursor:pointer;height:20px;margin:0 calc(var(--app-pane-padding)/2);width:20px}.eo-app-search .body .rest-box-container .rest-box .rest-item .checkbox svg,.eo-app-search .body .rest-box-container .rest-box .type .checkbox svg{opacity:0}.eo-app-search .body .rest-box-container .rest-box .rest-item:not(.selected):hover .checkbox:hover,.eo-app-search .body .rest-box-container .rest-box .type:not(.selected):hover .checkbox:hover{border-color:var(--text-color-caption)}.eo-app-search .body .rest-box-container .rest-box .rest-item:not(.selected):hover .checkbox:hover svg,.eo-app-search .body .rest-box-container .rest-box .type:not(.selected):hover .checkbox:hover svg{fill:var(--text-color-body);opacity:.3}.eo-app-search .body .rest-box-container .rest-box .rest-item.selected .checkbox,.eo-app-search .body .rest-box-container .rest-box .type.selected .checkbox{background:var(--color-primary-3);border-color:var(--color-primary-3)}.eo-app-search .body .rest-box-container .rest-box .rest-item.selected .checkbox svg,.eo-app-search .body .rest-box-container .rest-box .type.selected .checkbox svg{fill:var(--color-white)!important;opacity:1}.eo-app-search .body .rest-box-container .rest-box .rest-item.saved .count,.eo-app-search .body .rest-box-container .rest-box .type.saved .count{font-weight:var(--font-weight-normal)}@-webkit-keyframes appSearchAppear{0%{opacity:0;transform:translateX(-30px)}to{opacity:1;transform:translateX(0)}}@keyframes appSearchAppear{0%{opacity:0;transform:translateX(-30px)}to{opacity:1;transform:translateX(0)}}@-webkit-keyframes appSearchAppearRTL{0%{opacity:0;transform:translateX(30px)}to{opacity:1;transform:translateX(0)}}@keyframes appSearchAppearRTL{0%{opacity:0;transform:translateX(30px)}to{opacity:1;transform:translateX(0)}}"]
4789
4828
  },] }
4790
4829
  ];
4791
4830
  AppSearchComponent.ctorParameters = () => [
@@ -6124,7 +6163,7 @@ class DatepickerComponent {
6124
6163
  get year() {
6125
6164
  return this.datepickerService.year;
6126
6165
  }
6127
- set onylFutureDates(enabled) {
6166
+ set onlyFutureDates(enabled) {
6128
6167
  this.datepickerService.futureOnly = enabled ? enabled : false;
6129
6168
  }
6130
6169
  get futureOnly() {
@@ -6139,6 +6178,9 @@ class DatepickerComponent {
6139
6178
  }
6140
6179
  }
6141
6180
  }
6181
+ set useDatabaseMinimumTime(enabled) {
6182
+ this.minYear = enabled ? 1753 : 0;
6183
+ }
6142
6184
  onKeydownHandler(event) {
6143
6185
  let newDate;
6144
6186
  if (event.keyCode === 13) {
@@ -6277,7 +6319,7 @@ class DatepickerComponent {
6277
6319
  DatepickerComponent.decorators = [
6278
6320
  { type: Component, args: [{
6279
6321
  selector: 'eo-datepicker',
6280
- template: "<div class=\"date-picker\">\r\n\r\n <div class=\"select\">\r\n\r\n <div class=\"year\">\r\n <div class=\"back\">\r\n <div class=\"current\" (click)=\"focusSelection()\">\r\n <div class=\"d\">{{selected.date()}}</div>\r\n <div>\r\n <div class=\"m\">{{monthsShort[selected.month()]}}</div>\r\n <div class=\"y\">{{selected.year()}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n <input (keydown)=\"onInputKeydown($event)\" type=\"number\" eoYearRange [(ngModel)]=\"year\" [max]=\"maxYear\" (ngModelChange)=\"setYear($event)\" [ngModelOptions]=\"{standalone: true}\"/>\r\n <div class=\"controls\">\r\n <button class=\"icon white year-up\" (click)=\"increment(year)\" [disabled]=\"year === maxYear\">\r\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_arrow_down.svg'\"></eo-icon>\r\n </button>\r\n <button class=\"icon white year-down\" (click)=\"decrement(year)\" [disabled]=\"year === minYear\">\r\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_arrow_down.svg'\"></eo-icon>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"month\">\r\n <span *ngFor=\"let _month of monthsShort; let _i = index\" (click)=\"setMonth(_i)\" [ngClass]=\"{current: monthInfo.month == _i}\" >{{_month}}</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"calendar\">\r\n <div class=\"week names\">\r\n <div *ngFor=\"let _day of weekdaysShort\"><span class=\"day\">{{_day}}</span></div>\r\n </div>\r\n\r\n <div class=\"week\" *ngFor=\"let week of weeks; trackBy: trackByFn\">\r\n <div *ngFor=\"let day of week.days; trackBy: trackByFn\">\r\n <span class=\"day\" *ngIf=\"!day.disabled\" [ngClass]=\"{ today: day.isToday,\r\n 'different-month': !day.isCurrentMonth, selected: isSelectedDay(day.date) }\"\r\n (click)=\"select(day.date)\" (dblclick)=\"select(day.date)\">{{day.number}}</span>\r\n <span class=\"day disabled\" *ngIf=\"day.disabled\" [ngClass]=\"{ today: day.isToday,\r\n 'different-month': !day.isCurrentMonth, selected: isSelectedDay(day.date) }\">{{day.number}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"time\" *ngIf=\"withTime\">\r\n\r\n <div class=\"value val-h\">{{timeToString(withAmPm && !inRange(time.h, 1, 12) ? time.h - 12 : time.h)}}</div>\r\n <div class=\"controls ctrl-h\">\r\n <button class=\"icon btn-up\" (click)=\"setTime({h: time.h + 1, m: time.m})\">\r\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_arrow_down.svg'\"></eo-icon>\r\n </button>\r\n <button class=\"icon btn-down\" (click)=\"setTime({h: time.h - 1, m: time.m})\">\r\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_arrow_down.svg'\"></eo-icon>\r\n </button>\r\n </div>\r\n\r\n <div class=\"value val-sep\">:</div>\r\n <div class=\"value val-min\">{{timeToString(time.m)}}</div>\r\n <div class=\"controls ctrl-min\">\r\n <button class=\"icon btn-up\" (click)=\"setTime({h: time.h, m: time.m + 1})\">\r\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_arrow_down.svg'\"></eo-icon>\r\n </button>\r\n <button class=\"icon btn-down\" (click)=\"setTime({h: time.h, m: time.m - 1})\">\r\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_arrow_down.svg'\"></eo-icon>\r\n </button>\r\n </div>\r\n\r\n <div class=\"controls ctrl-am-pm\" *ngIf=\"withAmPm\">\r\n <button class=\"\" [ngClass]=\"{primary: inRange(time.h)}\" (click)=\"setTime({h: inRange(time.h) ? time.h : time.h - 12, m: time.m})\">AM</button>\r\n <button class=\"\" [ngClass]=\"{primary: !inRange(time.h)}\" (click)=\"setTime({h: inRange(time.h) ? time.h + 12 : time.h, m: time.m})\">PM</button>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"actions\">\r\n <button class=\"primary\" (click)=\"selectValue()\" translate>eo.datepicker.calendar.select</button>\r\n </div>\r\n\r\n</div>\r\n",
6322
+ template: "<div class=\"date-picker\">\r\n\r\n <div class=\"select\">\r\n\r\n <div class=\"year\">\r\n <div class=\"back\">\r\n <div class=\"current\" (click)=\"focusSelection()\">\r\n <div class=\"d\">{{selected.date()}}</div>\r\n <div>\r\n <div class=\"m\">{{monthsShort[selected.month()]}}</div>\r\n <div class=\"y\">{{selected.year()}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n <input (keydown)=\"onInputKeydown($event)\" type=\"number\" eoYearRange [(ngModel)]=\"year\" [max]=\"maxYear\" (ngModelChange)=\"setYear($event)\" [ngModelOptions]=\"{standalone: true}\"/>\r\n <div class=\"controls\">\r\n <button class=\"icon white year-up\" (click)=\"increment(year)\" [disabled]=\"year >= maxYear\">\r\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_arrow_down.svg'\"></eo-icon>\r\n </button>\r\n <button class=\"icon white year-down\" (click)=\"decrement(year)\" [disabled]=\"year <= minYear\">\r\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_arrow_down.svg'\"></eo-icon>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"month\">\r\n <span *ngFor=\"let _month of monthsShort; let _i = index\" (click)=\"setMonth(_i)\" [ngClass]=\"{current: monthInfo.month == _i}\" >{{_month}}</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"calendar\">\r\n <div class=\"week names\">\r\n <div *ngFor=\"let _day of weekdaysShort\"><span class=\"day\">{{_day}}</span></div>\r\n </div>\r\n\r\n <div class=\"week\" *ngFor=\"let week of weeks; trackBy: trackByFn\">\r\n <div *ngFor=\"let day of week.days; trackBy: trackByFn\">\r\n <span class=\"day\" *ngIf=\"!day.disabled\" [ngClass]=\"{ today: day.isToday,\r\n 'different-month': !day.isCurrentMonth, selected: isSelectedDay(day.date) }\"\r\n (click)=\"select(day.date)\" (dblclick)=\"select(day.date)\">{{day.number}}</span>\r\n <span class=\"day disabled\" *ngIf=\"day.disabled\" [ngClass]=\"{ today: day.isToday,\r\n 'different-month': !day.isCurrentMonth, selected: isSelectedDay(day.date) }\">{{day.number}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"time\" *ngIf=\"withTime\">\r\n\r\n <div class=\"value val-h\">{{timeToString(withAmPm && !inRange(time.h, 1, 12) ? time.h - 12 : time.h)}}</div>\r\n <div class=\"controls ctrl-h\">\r\n <button class=\"icon btn-up\" (click)=\"setTime({h: time.h + 1, m: time.m})\">\r\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_arrow_down.svg'\"></eo-icon>\r\n </button>\r\n <button class=\"icon btn-down\" (click)=\"setTime({h: time.h - 1, m: time.m})\">\r\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_arrow_down.svg'\"></eo-icon>\r\n </button>\r\n </div>\r\n\r\n <div class=\"value val-sep\">:</div>\r\n <div class=\"value val-min\">{{timeToString(time.m)}}</div>\r\n <div class=\"controls ctrl-min\">\r\n <button class=\"icon btn-up\" (click)=\"setTime({h: time.h, m: time.m + 1})\">\r\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_arrow_down.svg'\"></eo-icon>\r\n </button>\r\n <button class=\"icon btn-down\" (click)=\"setTime({h: time.h, m: time.m - 1})\">\r\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_arrow_down.svg'\"></eo-icon>\r\n </button>\r\n </div>\r\n\r\n <div class=\"controls ctrl-am-pm\" *ngIf=\"withAmPm\">\r\n <button class=\"\" [ngClass]=\"{primary: inRange(time.h)}\" (click)=\"setTime({h: inRange(time.h) ? time.h : time.h - 12, m: time.m})\">AM</button>\r\n <button class=\"\" [ngClass]=\"{primary: !inRange(time.h)}\" (click)=\"setTime({h: inRange(time.h) ? time.h + 12 : time.h, m: time.m})\">PM</button>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"actions\">\r\n <button class=\"primary\" (click)=\"selectValue()\" translate>eo.datepicker.calendar.select</button>\r\n </div>\r\n\r\n</div>\r\n",
6281
6323
  providers: [DatepickerService],
6282
6324
  styles: [".date-picker{background:var(--color-white);box-sizing:border-box;flex:1;flex-direction:column}.date-picker,.date-picker .controls{display:flex;min-height:0;min-width:0}.date-picker .controls{flex:none;flex-direction:column}.date-picker .controls button{border-radius:2px;margin:4px;padding:4px}.date-picker .controls button.icon{background:rgba(var(--color-black-rgb),0);color:var(--color-white);padding:0}.date-picker .controls button.icon:focus{border-color:rgba(var(--color-black-rgb),0)}.date-picker .controls button.icon eo-icon{-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;background:rgba(var(--color-white-rgb),.1);border-radius:2px;transition:all var(--app-default-transition-duration) ease-in-out}.date-picker .controls button.icon eo-icon svg{fill:var(--text-color-hint)}.date-picker .controls button.icon:first-child{transform:rotate(180deg)}.date-picker .select{background:var(--color-accent);color:var(--color-white);flex:0 0 auto}.date-picker .select .year{align-items:center;display:flex;flex:none;flex-direction:row;flex-wrap:nowrap;justify-content:flex-end;margin-bottom:var(--app-pane-padding);min-height:0;min-width:0;padding:0 var(--app-pane-padding)}.date-picker .select .year .back{align-items:flex-start;display:flex;flex:1;flex-direction:column;min-height:0;min-width:0}.date-picker .select .year .back .d{font-size:40px;line-height:1em;margin:0 4px}.date-picker .select .year .back .current{-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;align-items:center;border-radius:2px;cursor:pointer;display:flex;flex:none;flex-direction:row;min-height:0;min-width:0;padding:0 4px 0 0;transition:all var(--app-default-transition-duration) ease-in-out}.date-picker .select .year .back .current:hover{background:rgba(var(--color-white-rgb),.1)}.date-picker .select .year .back .current>div{align-items:flex-start;display:flex;flex:none;flex-direction:column;min-height:0;min-width:0}.date-picker .select .year input{background:rgba(var(--color-black-rgb),0);border:0;border-bottom:1px solid rgba(var(--color-black-rgb),0);color:var(--color-white);font-family:eoRoboto,sans-serif;font-size:50px;font-weight:var(--font-weight-light);line-height:1em;margin:0 calc(var(--app-pane-padding)/2);text-align:right;width:3em}.date-picker .select .year input::-moz-selection{background:rgba(var(--color-white-rgb),.3)}.date-picker .select .year input::selection{background:rgba(var(--color-white-rgb),.3)}.date-picker .select .year input:focus{border-bottom:1px solid rgba(var(--color-white-rgb),.5)}.date-picker .select .month{padding:0 var(--app-pane-padding)}.date-picker .select .month span{-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;border-bottom:2px solid rgba(var(--color-black-rgb),0);box-sizing:border-box;color:rgba(var(--color-white-rgb),.5);cursor:pointer;display:inline-block;font-size:var(--font-hint);font-weight:var(--font-weight-bold);margin-bottom:1px;padding:4px 0;text-align:center;transition:all var(--app-default-transition-duration) ease-in-out;width:3em}.date-picker .select .month span:hover{border-color:rgba(var(--color-white-rgb),.5);color:var(--color-white)}.date-picker .select .month span.current{border-color:var(--color-white);color:var(--color-white)}.date-picker .calendar{box-sizing:content-box;flex:1 1 auto;padding:var(--app-pane-padding)}.date-picker .time{align-items:center;display:flex;flex:none;flex-direction:row;justify-content:flex-start;min-height:0;min-width:0;padding:var(--app-pane-padding)}.date-picker .time .value{color:var(--text-color-caption);cursor:default;font-size:64px;font-weight:var(--font-weight-light);line-height:1em}.date-picker .time .value.val-h,.date-picker .time .value.val-min{min-width:1.2em}.date-picker .time .controls button.icon:focus{border:1px solid var(--color-primary-3)}.date-picker .time .controls button.icon eo-icon{background:rgba(var(--color-black-rgb),.05);color:var(--text-color-hint)}.date-picker .time .controls button.icon eo-icon:hover{background:rgba(var(--color-black-rgb),.1);color:var(--text-color-caption)}.date-picker .actions{display:flex;flex:none;flex-direction:row;justify-content:flex-end;min-height:0;min-width:0;padding:var(--app-pane-padding)}.week.names span:hover{background:rgba(var(--color-black-rgb),0);border-color:rgba(var(--color-black-rgb),0);cursor:default}.week{display:flex;flex:none;flex-direction:row;flex-wrap:nowrap;justify-content:space-around;margin-bottom:3px;min-height:0;min-width:0}.week>div{text-align:center;width:2.5em}.week span{-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;border-bottom:1px solid rgba(var(--color-black-rgb),0);box-sizing:border-box;color:var(--text-color-body);cursor:pointer;display:inline-block;padding:.25em 0;text-align:center;transition:all var(--app-default-transition-duration) ease-in-out;width:2em}.week .day.disabled{background-color:rgba(0,0,0,.1);border-radius:2px;color:#fff;cursor:default}.week .day.disabled:hover{border-bottom:0}.week span.today,.week span:hover{border-bottom:1px solid var(--color-accent);color:var(--color-accent)}.week span.today{font-weight:var(--font-weight-bold)}.week span.selected,.week span.selected:hover{-webkit-border-radius:2px;background:var(--color-accent);border-radius:2px;color:var(--color-white)!important}.week span.different-month{color:var(--text-color-hint)}.week.names span{color:var(--color-accent)}"]
6283
6325
  },] }
@@ -6291,8 +6333,9 @@ DatepickerComponent.propDecorators = {
6291
6333
  onCanceled: [{ type: Output }],
6292
6334
  withTime: [{ type: Input }],
6293
6335
  withAmPm: [{ type: Input }],
6294
- onylFutureDates: [{ type: Input }],
6336
+ onlyFutureDates: [{ type: Input }],
6295
6337
  date: [{ type: Input, args: ['date',] }],
6338
+ useDatabaseMinimumTime: [{ type: Input }],
6296
6339
  onKeydownHandler: [{ type: HostListener, args: ['document:keydown', ['$event'],] }]
6297
6340
  };
6298
6341
 
@@ -6303,6 +6346,8 @@ class DatetimeComponent {
6303
6346
  this.showPicker = false;
6304
6347
  this.isValid = true;
6305
6348
  this.isWebEnv = EnvironmentEnaio.isWebEnvironment();
6349
+ this.databaseMinimumTime = moment$2("1753-01-01T00:00:00");
6350
+ this.validateDatabaseTimeRange = false; //Needed to validate datetime that is stored in a database (January 1, 1753 to December 31, 9999)
6306
6351
  this.propagateChange = (_) => {
6307
6352
  };
6308
6353
  this.datePipe = new LocaleDatePipe(translate);
@@ -6334,9 +6379,13 @@ class DatetimeComponent {
6334
6379
  }
6335
6380
  registerOnTouched(fn) {
6336
6381
  }
6382
+ checkDatabaseTimeRange(m) {
6383
+ return !this.validateDatabaseTimeRange ||
6384
+ !m.isBefore(this.databaseMinimumTime);
6385
+ }
6337
6386
  setValueFromMask() {
6338
6387
  let m = moment$2(this.innerValue, this.momentDatePattern);
6339
- this.isValid = m.isValid();
6388
+ this.isValid = m.isValid() && this.checkDatabaseTimeRange(m);
6340
6389
  if (this.isValid) {
6341
6390
  this.value = m.toDate();
6342
6391
  }
@@ -6358,10 +6407,8 @@ class DatetimeComponent {
6358
6407
  setInnerValue() {
6359
6408
  if (this.value) {
6360
6409
  let m = moment$2(this.value);
6361
- this.isValid = m.isValid();
6362
- if (this.isValid) {
6363
- this.innerValue = m.format(this.momentDatePattern);
6364
- }
6410
+ this.isValid = m.isValid() && this.checkDatabaseTimeRange(m);
6411
+ this.innerValue = m.format(this.momentDatePattern);
6365
6412
  }
6366
6413
  else {
6367
6414
  this.innerValue = null;
@@ -6384,7 +6431,7 @@ class DatetimeComponent {
6384
6431
  DatetimeComponent.decorators = [
6385
6432
  { type: Component, args: [{
6386
6433
  selector: 'eo-datetime',
6387
- template: "<!-- non web environments use native pickers -->\r\n<div class=\"eo-datepicker native\" lang=\"{{locale}}\" *ngIf=\"!isWebEnv; else web\">\r\n <input type=\"date\" [(ngModel)]=\"value\" *ngIf=\"!withTime\" [readonly]=\"readonly\"/>\r\n <input type=\"datetime-local\" [(ngModel)]=\"value\" [readonly]=\"readonly\" *ngIf=\"withTime\"/>\r\n</div>\r\n\r\n\r\n<ng-template #web>\r\n\r\n <eo-dialog [styleClass]=\"'date-picker'\" [title]=\"pickerTitle\" [(visible)]=\"showPicker\" *ngIf=\"showPicker\">\r\n <eo-datepicker [date]=\"value\" [withTime]=\"withTime\" [withAmPm]=\"withAmPm\"\r\n [onylFutureDates]=\"onylFutureDates\"\r\n (onCanceled)=\"(showPicker = false)\"\r\n (onDateChanged)=\"setValueFromPicker($event)\"></eo-datepicker>\r\n </eo-dialog>\r\n\r\n <div class=\"eo-datepicker\">\r\n <p-inputMask [mask]=\"maskPattern\" [(ngModel)]=\"innerValue\"\r\n (ngModelChange)=\"onMaskValueChange($event)\"\r\n (onComplete)=\"setValueFromMask()\"\r\n [readonly]=\"readonly\"\r\n [autoClear]=\"true\"\r\n [placeholder]=\"datePattern\"></p-inputMask>\r\n\r\n <button class=\"ui-button\" (click)=\"(showPicker = true)\" (keyup.arrowDown)=\"(showPicker = true)\" *ngIf=\"!readonly\">\r\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_datepicker.svg'\"></eo-icon>\r\n </button>\r\n </div>\r\n\r\n</ng-template>\r\n\r\n\r\n\r\n\r\n\r\n",
6434
+ template: "<!-- non web environments use native pickers -->\r\n<div class=\"eo-datepicker native\" lang=\"{{locale}}\" *ngIf=\"!isWebEnv; else web\">\r\n <input type=\"date\" [(ngModel)]=\"value\" *ngIf=\"!withTime\" [readonly]=\"readonly\"/>\r\n <input type=\"datetime-local\" [(ngModel)]=\"value\" [readonly]=\"readonly\" *ngIf=\"withTime\"/>\r\n</div>\r\n\r\n\r\n<ng-template #web>\r\n\r\n <eo-dialog [styleClass]=\"'date-picker'\" [title]=\"pickerTitle\" [(visible)]=\"showPicker\" *ngIf=\"showPicker\">\r\n <eo-datepicker [date]=\"value\" [withTime]=\"withTime\" [withAmPm]=\"withAmPm\"\r\n [onlyFutureDates]=\"onlyFutureDates\"\r\n [useDatabaseMinimumTime]=\"validateDatabaseTimeRange\"\r\n (onCanceled)=\"(showPicker = false)\"\r\n (onDateChanged)=\"setValueFromPicker($event)\"></eo-datepicker>\r\n </eo-dialog>\r\n\r\n <div class=\"eo-datepicker\">\r\n <p-inputMask [mask]=\"maskPattern\" [(ngModel)]=\"innerValue\"\r\n (ngModelChange)=\"onMaskValueChange($event)\"\r\n (onComplete)=\"setValueFromMask()\"\r\n [readonly]=\"readonly\"\r\n [autoClear]=\"true\"\r\n [placeholder]=\"datePattern\"></p-inputMask>\r\n\r\n <button class=\"ui-button\" (click)=\"(showPicker = true)\" (keyup.arrowDown)=\"(showPicker = true)\" *ngIf=\"!readonly\">\r\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_datepicker.svg'\"></eo-icon>\r\n </button>\r\n </div>\r\n\r\n</ng-template>\r\n\r\n\r\n\r\n\r\n\r\n",
6388
6435
  providers: [
6389
6436
  {
6390
6437
  provide: NG_VALUE_ACCESSOR,
@@ -6406,7 +6453,8 @@ DatetimeComponent.ctorParameters = () => [
6406
6453
  DatetimeComponent.propDecorators = {
6407
6454
  readonly: [{ type: Input }],
6408
6455
  pickerTitle: [{ type: Input }],
6409
- onylFutureDates: [{ type: Input }],
6456
+ onlyFutureDates: [{ type: Input }],
6457
+ validateDatabaseTimeRange: [{ type: Input }],
6410
6458
  withTime: [{ type: Input }]
6411
6459
  };
6412
6460
 
@@ -8365,7 +8413,7 @@ class ObjectFormGroupComponent {
8365
8413
  ObjectFormGroupComponent.decorators = [
8366
8414
  { type: Component, args: [{
8367
8415
  selector: 'eo-form-group',
8368
- template: "<div *ngIf=\"group\" [ngSwitch]=\"groupType\"\r\n class=\"form-element {{group._eoFormGroup ? group._eoFormGroup.type : 'o2mControlWrap'}} align-{{(group._eoFormGroup && group._eoFormGroup.layout) ? group._eoFormGroup.layout.align : ''}}\"\r\n [formGroup]=\"group\">\r\n\r\n <!-- group stacks (tabs) -->\r\n <p-tabView *ngSwitchCase=\"'stack'\">\r\n <p-tabPanel header=\"{{getObjectFormGroup(group.controls[key]).label}}\"\r\n headerStyleClass=\"dirty-{{group.controls[key].dirty}} invalid-{{group.controls[key].invalid}} \"\r\n *ngFor=\"let key of group.controls | keys; index as i;\"\r\n [selected]=\"i === 0\">\r\n\r\n <div class=\"stack\" [ngClass]=\"{stackBase: group._eoFormGroup.label === 'data'}\">\r\n\r\n <eo-form-element [element]=\"group.controls[key]\"\r\n *ngIf=\"getObjectFormControlWrapper(group.controls[key]); else stkgroup\"\r\n [situation]=\"situation\"\r\n [skipToggle]=\"skipToggle\"></eo-form-element>\r\n <ng-template #stkgroup>\r\n <eo-form-group [group]=\"group.controls[key]\" [noGroupLabels]=\"true\"\r\n [situation]=\"situation\"\r\n [skipToggle]=\"skipToggle\"></eo-form-group>\r\n </ng-template>\r\n </div>\r\n </p-tabPanel>\r\n </p-tabView>\r\n\r\n <!-- group with legend -->\r\n <div *ngSwitchCase=\"'fieldset'\" class=\"om-group fieldset\">\r\n <div class=\"legend\"><span>{{group._eoFormGroup.label}}</span></div>\r\n\r\n <div>\r\n <ng-container *ngFor=\"let key of group.controls | keys\">\r\n <eo-form-element [element]=\"group.controls[key]\"\r\n *ngIf=\"getObjectFormControlWrapper(group.controls[key]); else fsgroup\"\r\n [situation]=\"situation\"\r\n [skipToggle]=\"skipToggle\"></eo-form-element>\r\n <ng-template #fsgroup>\r\n <eo-form-group [group]=\"group.controls[key]\" [situation]=\"situation\" [skipToggle]=\"skipToggle\"></eo-form-group>\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <!-- group -->\r\n <ng-container class=\"om-group\" *ngSwitchCase=\"'group'\">\r\n <ng-container *ngFor=\"let key of group.controls | keys\">\r\n\r\n <eo-form-element [element]=\"group.controls[key]\"\r\n *ngIf=\"getObjectFormControlWrapper(group.controls[key]); else omgroup\"\r\n [situation]=\"situation\"\r\n [skipToggle]=\"skipToggle\"></eo-form-element>\r\n <ng-template #omgroup>\r\n <eo-form-group [group]=\"group.controls[key]\" [situation]=\"situation\" [skipToggle]=\"skipToggle\"></eo-form-group>\r\n </ng-template>\r\n </ng-container>\r\n </ng-container>\r\n\r\n</div>\r\n",
8416
+ template: "<div *ngIf=\"group\" [ngSwitch]=\"groupType\"\r\n class=\"form-element {{group._eoFormGroup ? group._eoFormGroup.type : 'o2mControlWrap'}} align-{{(group._eoFormGroup && group._eoFormGroup.layout) ? group._eoFormGroup.layout.align : ''}}\"\r\n [formGroup]=\"group\">\r\n\r\n <!-- group stacks (tabs) -->\r\n <p-tabView *ngSwitchCase=\"'stack'\">\r\n <p-tabPanel header=\"{{getObjectFormGroup(group.controls[key]).label}}\"\r\n headerStyleClass=\"dirty-{{group.controls[key].dirty}} invalid-{{group.controls[key].invalid}} \"\r\n *ngFor=\"let key of group.controls | keys; index as i;\"\r\n [selected]=\"i === 0\">\r\n\r\n <div class=\"stack\" [ngClass]=\"{stackBase: group._eoFormGroup.label === 'data'}\">\r\n\r\n <eo-form-element [element]=\"group.controls[key]\"\r\n [dmsObject]=\"dmsObject\"\r\n *ngIf=\"getObjectFormControlWrapper(group.controls[key]); else stkgroup\"\r\n [situation]=\"situation\"\r\n [skipToggle]=\"skipToggle\"></eo-form-element>\r\n <ng-template #stkgroup>\r\n <eo-form-group [dmsObject]=\"dmsObject\" [group]=\"group.controls[key]\" [noGroupLabels]=\"true\"\r\n [situation]=\"situation\"\r\n [skipToggle]=\"skipToggle\"></eo-form-group>\r\n </ng-template>\r\n </div>\r\n </p-tabPanel>\r\n </p-tabView>\r\n\r\n <!-- group with legend -->\r\n <div *ngSwitchCase=\"'fieldset'\" class=\"om-group fieldset\">\r\n <div class=\"legend\"><span>{{group._eoFormGroup.label}}</span></div>\r\n\r\n <div>\r\n <ng-container *ngFor=\"let key of group.controls | keys\">\r\n <eo-form-element [dmsObject]=\"dmsObject\" [element]=\"group.controls[key]\"\r\n *ngIf=\"getObjectFormControlWrapper(group.controls[key]); else fsgroup\"\r\n [situation]=\"situation\"\r\n [skipToggle]=\"skipToggle\"></eo-form-element>\r\n <ng-template #fsgroup>\r\n <eo-form-group [dmsObject]=\"dmsObject\" [group]=\"group.controls[key]\" [situation]=\"situation\" [skipToggle]=\"skipToggle\"></eo-form-group>\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <!-- group -->\r\n <ng-container class=\"om-group\" *ngSwitchCase=\"'group'\">\r\n <ng-container *ngFor=\"let key of group.controls | keys\">\r\n\r\n <eo-form-element [dmsObject]=\"dmsObject\" [element]=\"group.controls[key]\"\r\n *ngIf=\"getObjectFormControlWrapper(group.controls[key]); else omgroup\"\r\n [situation]=\"situation\"\r\n [skipToggle]=\"skipToggle\"></eo-form-element>\r\n <ng-template #omgroup>\r\n <eo-form-group [dmsObject]=\"dmsObject\" [group]=\"group.controls[key]\" [situation]=\"situation\" [skipToggle]=\"skipToggle\"></eo-form-group>\r\n </ng-template>\r\n </ng-container>\r\n </ng-container>\r\n\r\n</div>\r\n",
8369
8417
  // changeDetection: ChangeDetectionStrategy.OnPush,
8370
8418
  encapsulation: ViewEncapsulation.None,
8371
8419
  styles: [":host{flex:1 1 auto}.dark .form-element .ui-tabview.ui-tabview-top>.ui-tabview-nav{border-color:rgba(var(--color-white-rgb),.2)}.dark .form-element.o2mGroupStack .ui-tabview.ui-tabview-top>.ui-tabview-nav li.ui-state-active{border-color:rgba(var(--color-white-rgb),1)}.dark .form-element .ui-state-active a,.dark .form-element .ui-widget-content .ui-state-active a,.dark .form-element .ui-widget-header .ui-state-active a{color:var(--color-white)}.dark .form-element .ui-state-default:not(.ui-state-active) a,.dark .form-element .ui-widget-content .ui-state-default:not(.ui-state-active) a,.dark .form-element .ui-widget-header .ui-state-default:not(.ui-state-active) a{color:rgba(var(--color-white-rgb),.3)}.form-element{box-sizing:border-box}.form-element.o2mGroupStack{background:rgba(var(--color-black-rgb),.02);border:1px solid rgba(var(--color-black-rgb),.1)}.form-element.o2mGroupStack .ui-tabview.ui-tabview-top>.ui-tabview-nav li.ui-state-active{border-color:rgba(var(--color-black-rgb),.26)}.form-element.o2mGroupStack .ui-tabview.ui-tabview-top>.ui-tabview-nav>li:not(.ui-state-active):not(.ui-state-disabled):hover{border-color:rgba(var(--color-black-rgb),.16)}.dark .form-element.o2mGroupStack .ui-tabview.ui-tabview-top>.ui-tabview-nav>li:not(.ui-state-active):not(.ui-state-disabled):hover{border-color:rgba(var(--color-white-rgb),.16)}.dark .form-element.o2mGroupStack .ui-tabview.ui-tabview-top>.ui-tabview-nav>li:not(.ui-state-active):not(.ui-state-disabled):hover a{color:rgba(var(--color-white-rgb),.7)}.form-element.o2mGroupStack .ui-tabview.ui-tabview-top>.ui-tabview-nav li.dirty-true:not(.invalid-true) a .ui-tabview-title{background-color:var(--color-dirty-background);color:var(--color-dirty-font)}.form-element.o2mGroupStack .ui-tabview.ui-tabview-top>.ui-tabview-nav li.invalid-true a .ui-tabview-title{background-color:var(--color-error);color:var(--color-white)}.form-element.o2mGroupStack .ui-tabview.ui-tabview-top>.ui-tabview-nav li.invalid-true a .ui-tabview-title:after{content:\"!\";margin-left:calc(var(--app-pane-padding)/2)}.form-element.o2mGroupStack p-tabview{width:100%}.form-element.o2mGroupStack.data{border:0}.form-element.align-column{align-content:stretch;align-items:stretch;display:flex;flex-flow:column nowrap;justify-content:flex-start}.form-element.align-column>*{flex:1 1 auto}.form-element.align-row{align-content:flex-start;align-items:flex-start;display:flex;flex-flow:row wrap;justify-content:flex-start}.form-element.align-row>*{flex:1 1 auto}.form-element.align-row>.fieldset>:not(.legend){align-content:flex-start;align-items:flex-start;display:flex;flex-flow:row wrap;justify-content:flex-start}.form-element.align-row>.fieldset>:not(.legend) eo-form-group{flex:1 1 auto;min-width:200px}.form-element .stackBase{padding:var(--app-pane-padding)}.form-element .stackBase>eo-form-group>.form-element>.fieldset{background-color:transparent;border:0;margin:0;padding:0}.form-element .stackBase>eo-form-group>.form-element>.fieldset>.legend{display:none}"]
@@ -8374,6 +8422,7 @@ ObjectFormGroupComponent.decorators = [
8374
8422
  ObjectFormGroupComponent.propDecorators = {
8375
8423
  situation: [{ type: Input }],
8376
8424
  skipToggle: [{ type: Input }],
8425
+ dmsObject: [{ type: Input }],
8377
8426
  groupd: [{ type: Input, args: ['group',] }],
8378
8427
  noGroupLabels: [{ type: Input }]
8379
8428
  };
@@ -9570,7 +9619,7 @@ class ObjectFormComponent extends UnsubscribeOnDestroy {
9570
9619
  ObjectFormComponent.decorators = [
9571
9620
  { type: Component, args: [{
9572
9621
  selector: 'eo-object-form',
9573
- template: "<div class=\"eo-object-form\" *ngIf=\"form && formOptions\" [formGroup]=\"form\" eoRtlAware>\r\n <div class=\"form-element-wrap core\">\r\n <eo-form-group [group]=\"form.get('core')\" [situation]=\"formOptions.formModel.situation\"></eo-form-group>\r\n </div>\r\n <div class=\"form-element-wrap data\">\r\n <eo-form-group [group]=\"form.get('data')\" [situation]=\"formOptions.formModel.situation\"></eo-form-group>\r\n </div>\r\n</div>\r\n\r\n\r\n\r\n\r\n",
9622
+ template: "<div class=\"eo-object-form\" *ngIf=\"form && formOptions\" [formGroup]=\"form\" eoRtlAware>\r\n <div class=\"form-element-wrap core\">\r\n <eo-form-group [group]=\"form.get('core')\" [situation]=\"formOptions.formModel.situation\"></eo-form-group>\r\n </div>\r\n <div class=\"form-element-wrap data\">\r\n <eo-form-group [dmsObject]=\"dmsObject\" [group]=\"form.get('data')\" [situation]=\"formOptions.formModel.situation\"></eo-form-group>\r\n </div>\r\n</div>\r\n\r\n\r\n\r\n\r\n",
9574
9623
  // define 'child only' services for the form without setting it up on the module
9575
9624
  // which would cause them to be propagated to the whole application
9576
9625
  providers: [ObjectFormScriptService],
@@ -9592,6 +9641,7 @@ ObjectFormComponent.propDecorators = {
9592
9641
  isInnerTableForm: [{ type: Input }],
9593
9642
  statusChanged: [{ type: Output }],
9594
9643
  onFormReady: [{ type: Output }],
9644
+ dmsObject: [{ type: Input }],
9595
9645
  options: [{ type: Input, args: ['formOptions',] }]
9596
9646
  };
9597
9647
 
@@ -9669,6 +9719,9 @@ class ObjectFormEditComponent {
9669
9719
  this.createObjectForm(dmsObject);
9670
9720
  }
9671
9721
  }
9722
+ get dmsObject() {
9723
+ return this._dmsObject;
9724
+ }
9672
9725
  startPending() {
9673
9726
  // because this method will be called every time the form status changes,
9674
9727
  // pending task will only be started once until it was finished
@@ -9777,7 +9830,7 @@ class ObjectFormEditComponent {
9777
9830
  ObjectFormEditComponent.decorators = [
9778
9831
  { type: Component, args: [{
9779
9832
  selector: 'eo-object-form-edit',
9780
- template: "<div class=\"object-form-edit\" [ngClass]=\"{invalid: formState?.invalid === true}\" [eoShortcuts]=\"shortcuts\">\r\n <eo-object-form [formOptions]=\"formOptions\" *ngIf=\"formOptions\"\r\n (statusChanged)=\"onFormStatusChanged($event)\"></eo-object-form>\r\n\r\n <div class=\"form-controls\" *ngIf=\"controls.visible\">\r\n\r\n <div class=\"err-msg\" *ngIf=\"formState?.invalid\" translate>eo.object.indexdata.form.invalid</div>\r\n\r\n <div class=\"buttons\">\r\n\r\n <button class=\"secondary\" (click)=\"reset()\" [disabled]=\"controls.saving\" translate>eo.object.indexdata.reset</button>\r\n <button class=\"primary\" [ngClass]=\"{spinner: controls.saving}\"\r\n [disabled]=\"formState?.invalid || controls.saving\"\r\n (click)=\"save()\" translate>eo.object.indexdata.save</button>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<eo-dialog [title]=\"('eo.object.indexdata.save.conflict.dialog.title' | translate : {modifier: conflictError?.dmsobject.modified.by.firstname + ' ' + conflictError?.dmsobject.modified.by.lastname})\" \r\n (hide)=\"controls.saving = false;\" [(visible)]=\"showConflictDialog\" [focusOnShow]=\"false\" [minWidth]=\"400\" [styleClass]=\"'conflict__dialog'\">\r\n\r\n <div class=\"action-buttons conflict--action-buttons flex-row\">\r\n <button type=\"button\" class=\"button cancel\" (click)=\"cancelSaving()\"\r\n translate>eo.object.indexdata.save.cancel</button>\r\n <button type=\"button\" class=\"button cancel\" (click)=\"showConflictChanges()\"\r\n translate>eo.object.indexdata.save.changes</button>\r\n <button type=\"button\" (click)=\"save(true); closeConflictDialog();\" class=\"button primary\"\r\n translate>eo.object.indexdata.save</button>\r\n </div>\r\n</eo-dialog>\r\n",
9833
+ template: "<div class=\"object-form-edit\" [ngClass]=\"{invalid: formState?.invalid === true}\" [eoShortcuts]=\"shortcuts\">\r\n <eo-object-form [dmsObject]=\"dmsObject\" [formOptions]=\"formOptions\" *ngIf=\"formOptions\"\r\n (statusChanged)=\"onFormStatusChanged($event)\"></eo-object-form>\r\n\r\n <div class=\"form-controls\" *ngIf=\"controls.visible\">\r\n\r\n <div class=\"err-msg\" *ngIf=\"formState?.invalid\" translate>eo.object.indexdata.form.invalid</div>\r\n\r\n <div class=\"buttons\">\r\n\r\n <button class=\"secondary\" (click)=\"reset()\" [disabled]=\"controls.saving\" translate>eo.object.indexdata.reset</button>\r\n <button class=\"primary\" [ngClass]=\"{spinner: controls.saving}\"\r\n [disabled]=\"formState?.invalid || controls.saving\"\r\n (click)=\"save()\" translate>eo.object.indexdata.save</button>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<eo-dialog [title]=\"('eo.object.indexdata.save.conflict.dialog.title' | translate : {modifier: conflictError?.dmsobject.modified.by.firstname + ' ' + conflictError?.dmsobject.modified.by.lastname})\"\r\n (hide)=\"controls.saving = false;\" [(visible)]=\"showConflictDialog\" [minWidth]=\"400\" [styleClass]=\"'conflict__dialog'\">\r\n\r\n <div class=\"action-buttons conflict--action-buttons flex-row\">\r\n <button type=\"button\" class=\"button cancel\" (click)=\"cancelSaving()\"\r\n translate>eo.object.indexdata.save.cancel</button>\r\n <button type=\"button\" class=\"button cancel\" (click)=\"showConflictChanges()\"\r\n translate>eo.object.indexdata.save.changes</button>\r\n <button type=\"button\" (click)=\"save(true); closeConflictDialog();\" class=\"button primary\"\r\n translate>eo.object.indexdata.save</button>\r\n </div>\r\n</eo-dialog>\r\n",
9781
9834
  styles: [".object-form-edit{background:var(--color-white);display:grid;grid-template-areas:\"form\" \"buttons\";grid-template-columns:1fr;grid-template-rows:1fr auto;min-width:300px}.object-form-edit eo-object-form{-ms-grid-column:1;-ms-grid-row:1;grid-area:form}.object-form-edit .form-controls{-ms-grid-column:1;-ms-grid-row:2;box-sizing:border-box;grid-area:buttons}.object-form-edit .form-controls .err-msg{background-color:var(--color-error);color:#fff;display:none;flex:1 1 auto;order:0;padding:calc(var(--app-pane-padding)/2) var(--app-pane-padding)}.object-form-edit .form-controls .buttons{align-items:center;display:flex;flex:1 1 auto;flex-flow:row wrap;justify-content:flex-end;order:1;padding:var(--app-pane-padding) calc(var(--app-pane-padding)*0.875)}.object-form-edit .form-controls .buttons button{flex:0 0 auto;margin:0 calc(var(--app-pane-padding)*0.125)}.object-form-edit .form-controls .buttons .loader{flex:1 1 auto}.object-form-edit .form-controls .buttons .loader eo-icon{display:none}.object-form-edit .form-controls .buttons .loader.saving eo-icon,.object-form-edit.invalid .form-controls .err-msg{display:block}::ng-deep .conflict__dialog{min-height:unset!important;padding:8px}::ng-deep .conflict__dialog--header{background:#fff!important;color:rgba(var(--color-black-rgb),.54)!important;font-size:1.17em!important;font-weight:400!important;margin:0;padding:0 0 1em!important}"]
9782
9835
  },] }
9783
9836
  ];
@@ -9870,7 +9923,7 @@ class FormElementComponent {
9870
9923
  FormElementComponent.decorators = [
9871
9924
  { type: Component, args: [{
9872
9925
  selector: 'eo-form-element',
9873
- template: "<div class=\"form-element\" [formGroup]=\"element\" *ngIf=\"element\">\r\n\r\n <div class=\"form-field t-{{formElementRef._eoFormElement.type}}\" #formField\r\n [ngSwitch]=\"formElementRef._eoFormElement.type\"\r\n [ngClass]=\"{disabled: !!formElementRef._eoFormElement.readonly}\">\r\n\r\n <!-- STRING -->\r\n <eo-form-input *ngSwitchCase=\"'STRING'\" [tag]=\"tag\" [label]=\"formElementRef._eoFormElement.label\"\r\n [isNull]=\"isNull\"\r\n [skipToggle]=\"skipToggle || situation !== 'SEARCH'\"\r\n (onToggleLabel)=\"labelToggled($event)\"\r\n [required]=\"formElementRef._eoFormElement.required\"\r\n [invalid]=\"formElementRef.invalid\">\r\n\r\n <eo-string\r\n *ngIf=\"!formElementRef._eoFormElement.reference && formElementRef._eoFormElement.classification !== 'selector'\"\r\n [situation]=\"element._eoFormControlWrapper.situation\"\r\n [formControlName]=\"element._eoFormControlWrapper.controlName\"\r\n [autocomplete]=\"formElementRef._eoFormElement.autocomplete\"\r\n [multiselect]=\"formElementRef._eoFormElement.multiselect\"\r\n [multiline]=\"formElementRef._eoFormElement.multiline\"\r\n [classification]=\"formElementRef._eoFormElement.classification\"\r\n [regex]=\"formElementRef._eoFormElement.regex\"\r\n [qname]=\"formElementRef._eoFormElement.qname\"\r\n [size]=\"formElementRef._eoFormElement.size\"\r\n [readonly]=\"formElementRef._eoFormElement.readonly\"\r\n [minLength]=\"formElementRef._eoFormElement.minlen\"\r\n [maxLength]=\"formElementRef._eoFormElement.maxlen\"\r\n ></eo-string>\r\n\r\n <!-- Dynamic List -->\r\n <eo-dynamic-list\r\n *ngIf=\"!formElementRef._eoFormElement.reference && formElementRef._eoFormElement.classification === 'selector'\"\r\n [situation]=\"element._eoFormControlWrapper.situation\"\r\n [pickerTitle]=\"formElementRef._eoFormElement.label\"\r\n [filterFunction]=\"formElementRef._eoFormElement.filterFunction\"\r\n [multiselect]=\"formElementRef._eoFormElement.multiselect\"\r\n [listObject]=\"formElementRef._eoFormElement.list\"\r\n [readonly]=\"formElementRef._eoFormElement.readonly\"\r\n [formControlName]=\"element._eoFormControlWrapper.controlName\"></eo-dynamic-list>\r\n\r\n\r\n <!-- Reference -->\r\n <eo-reference *ngIf=\"formElementRef._eoFormElement.reference\"\r\n [formControlName]=\"element._eoFormControlWrapper.controlName\"\r\n [readonly]=\"formElementRef._eoFormElement.readonly\"\r\n [reference]=\"formElementRef._eoFormElement.reference\"\r\n [multiselect]=\"formElementRef._eoFormElement.multiselect\"\r\n [minLength]=\"formElementRef._eoFormElement.minlen\"\r\n [maxLength]=\"formElementRef._eoFormElement.maxlen\"\r\n ></eo-reference>\r\n </eo-form-input>\r\n\r\n <!-- ID-Reference -->\r\n <eo-form-input *ngSwitchCase=\"'REFERENCE'\" [tag]=\"tag\" [label]=\"formElementRef._eoFormElement.label\"\r\n [isNull]=\"isNull\"\r\n [skipToggle]=\"skipToggle || situation !== 'SEARCH'\"\r\n (onToggleLabel)=\"labelToggled($event)\"\r\n [required]=\"formElementRef._eoFormElement.required\"\r\n [invalid]=\"formElementRef.invalid\">\r\n\r\n <eo-id-reference\r\n [formControlName]=\"element._eoFormControlWrapper.controlName\"\r\n [situation]=\"element._eoFormControlWrapper.situation\"\r\n [dataToRender]=\"formElementRef._eoFormElement.dataToRender\"\r\n [reference]=\"formElementRef._eoFormElement.reference\"\r\n [readonly]=\"formElementRef._eoFormElement.readonly\"\r\n [multiselect]=\"formElementRef._eoFormElement.multiselect\"\r\n [contextId]=\"formElementRef._eoFormElement.contextId\"\r\n [exceptionIDs]=\"formElementRef._eoFormElement.exceptionIDs\"\r\n [queryFilters]=\"formElementRef._eoFormElement.queryFilters\"\r\n [objectTypesFilter]=\"formElementRef._eoFormElement.objectTypesFilter\"\r\n ></eo-id-reference>\r\n </eo-form-input>\r\n\r\n <!-- ID -->\r\n <eo-form-input *ngSwitchCase=\"'ID'\" [tag]=\"tag\" [label]=\"formElementRef._eoFormElement.label\"\r\n [isNull]=\"isNull\"\r\n [skipToggle]=\"skipToggle || situation !== 'SEARCH'\"\r\n (onToggleLabel)=\"labelToggled($event)\"\r\n [required]=\"formElementRef._eoFormElement.required\"\r\n [invalid]=\"formElementRef.invalid\">\r\n\r\n <eo-string\r\n [situation]=\"element._eoFormControlWrapper.situation\"\r\n [formControlName]=\"element._eoFormControlWrapper.controlName\"\r\n [autocomplete]=\"formElementRef._eoFormElement.autocomplete\"\r\n [multiselect]=\"formElementRef._eoFormElement.multiselect\"\r\n [regex]=\"'^[0-9a-fA-F]*$'\"\r\n [qname]=\"formElementRef._eoFormElement.qname\"\r\n [readonly]=\"formElementRef._eoFormElement.readonly\"\r\n [minLength]=\"32\"\r\n [maxLength]=\"32\"\r\n ></eo-string>\r\n\r\n </eo-form-input>\r\n\r\n\r\n <!-- BOOLEAN -->\r\n <eo-form-input *ngSwitchCase=\"'BOOLEAN'\" [tag]=\"tag\" class=\"checkbox\" [label]=\"formElementRef._eoFormElement.label\"\r\n [isNull]=\"isNull\"\r\n [skipToggle]=\"skipToggle || situation !== 'SEARCH'\"\r\n [required]=\"formElementRef._eoFormElement.required\"\r\n (onToggleLabel)=\"labelToggled($event)\"\r\n [invalid]=\"formElementRef.invalid\">\r\n\r\n <eo-checkbox [formControlName]=\"element._eoFormControlWrapper.controlName\"\r\n [readonly]=\"formElementRef._eoFormElement.readonly\"\r\n [tristate]=\"true\"></eo-checkbox>\r\n </eo-form-input>\r\n\r\n <!-- CODESYSTEM -->\r\n <eo-form-input *ngSwitchCase=\"'CODESYSTEM'\" [tag]=\"tag\" [label]=\"formElementRef._eoFormElement.label\"\r\n [isNull]=\"isNull\"\r\n [skipToggle]=\"skipToggle || situation !== 'SEARCH'\"\r\n (onToggleLabel)=\"labelToggled($event)\"\r\n [required]=\"formElementRef._eoFormElement.required\"\r\n [invalid]=\"formElementRef.invalid\">\r\n\r\n <eo-codesystem [situation]=\"element._eoFormControlWrapper.situation\"\r\n [pickerTitle]=\"formElementRef._eoFormElement.label\"\r\n [readonly]=\"formElementRef._eoFormElement.readonly\"\r\n [codesystem]=\"formElementRef._eoFormElement.codesystem\"\r\n [multiselect]=\"formElementRef._eoFormElement.multiselect\"\r\n [filterFunction]=\"formElementRef._eoFormElement.filterFunction\"\r\n [disablingFilterFunction]=\"formElementRef._eoFormElement.disablingFilterFunction\"\r\n [formControlName]=\"element._eoFormControlWrapper.controlName\"\r\n ></eo-codesystem>\r\n </eo-form-input>\r\n\r\n <!-- ORGANIZATION -->\r\n <eo-form-input *ngSwitchCase=\"'ORGANIZATION'\" [tag]=\"tag\" [label]=\"formElementRef._eoFormElement.label\"\r\n [isNull]=\"isNull\"\r\n [skipToggle]=\"skipToggle || situation !== 'SEARCH'\"\r\n (onToggleLabel)=\"labelToggled($event)\"\r\n [required]=\"formElementRef._eoFormElement.required\"\r\n [invalid]=\"formElementRef.invalid\">\r\n\r\n <eo-organization [situation]=\"element._eoFormControlWrapper.situation\"\r\n [dataMeta]=\"formElementRef._eoFormElement.dataMeta\"\r\n [readonly]=\"formElementRef._eoFormElement.readonly\"\r\n [filterObject]=\"formElementRef._eoFormElement.filter\"\r\n [multiselect]=\"formElementRef._eoFormElement.multiselect\"\r\n (onDataMetaChanged)=\"organizationDataMetaResolved($event)\"\r\n [formControlName]=\"element._eoFormControlWrapper.controlName\"\r\n ></eo-organization>\r\n </eo-form-input>\r\n\r\n <!-- NUMBER -->\r\n\r\n <eo-form-input *ngSwitchCase=\"'NUMBER'\" [tag]=\"tag\" [label]=\"formElementRef._eoFormElement.label\"\r\n [isNull]=\"isNull\"\r\n [skipToggle]=\"skipToggle || situation !== 'SEARCH'\"\r\n (onToggleLabel)=\"labelToggled($event)\"\r\n [required]=\"formElementRef._eoFormElement.required\"\r\n [invalid]=\"formElementRef.invalid\">\r\n\r\n <eo-number *ngIf=\"situation !== 'SEARCH'\"\r\n [readonly]=\"formElementRef._eoFormElement.readonly\"\r\n [precision]=\"formElementRef._eoFormElement.precision\"\r\n [scale]=\"formElementRef._eoFormElement.scale\"\r\n [grouping]=\"formElementRef._eoFormElement.grouping\"\r\n [pattern]=\"formElementRef._eoFormElement.pattern\"\r\n [formControlName]=\"element._eoFormControlWrapper.controlName\">\r\n </eo-number>\r\n\r\n <eo-number-range *ngIf=\"situation === 'SEARCH'\"\r\n [readonly]=\"formElementRef._eoFormElement.readonly\"\r\n [precision]=\"formElementRef._eoFormElement.precision\"\r\n [scale]=\"formElementRef._eoFormElement.scale\"\r\n [grouping]=\"formElementRef._eoFormElement.grouping\"\r\n [pattern]=\"formElementRef._eoFormElement.pattern\"\r\n [formControlName]=\"element._eoFormControlWrapper.controlName\"\r\n ></eo-number-range>\r\n </eo-form-input>\r\n\r\n <!-- TABLE -->\r\n <div class=\"table\" *ngSwitchCase=\"'TABLE'\">\r\n <eo-table [params]=\"{\r\n situation: element._eoFormControlWrapper.situation,\r\n element: formElementRef._eoFormElement,\r\n size: formElementRef._eoFormElement.size\r\n }\" [formControlName]=\"element._eoFormControlWrapper.controlName\"></eo-table>\r\n </div>\r\n\r\n <!-- DATE AND DATETIME -->\r\n <eo-form-input *ngSwitchCase=\"'DATETIME'\" [tag]=\"tag\" [label]=\"formElementRef._eoFormElement.label\"\r\n [isNull]=\"isNull\"\r\n [skipToggle]=\"skipToggle || situation !== 'SEARCH'\"\r\n (onToggleLabel)=\"labelToggled($event)\"\r\n [required]=\"formElementRef._eoFormElement.required\"\r\n [invalid]=\"formElementRef.invalid\">\r\n\r\n <eo-datetime *ngIf=\"situation !== 'SEARCH'\"\r\n [readonly]=\"formElementRef._eoFormElement.readonly\"\r\n [pickerTitle]=\"formElementRef._eoFormElement.label\"\r\n [withTime]=\"formElementRef._eoFormElement.withtime\"\r\n [formControlName]=\"element._eoFormControlWrapper.controlName\"\r\n ></eo-datetime>\r\n\r\n <eo-datetime-range *ngIf=\"situation === 'SEARCH'\"\r\n [pickerTitle]=\"formElementRef._eoFormElement.label\"\r\n [withTime]=\"formElementRef._eoFormElement.withtime\"\r\n [formControlName]=\"element._eoFormControlWrapper.controlName\"\r\n ></eo-datetime-range>\r\n </eo-form-input>\r\n\r\n\r\n <!-- print out the type if it's not matching anything -->\r\n <div *ngSwitchDefault><b>{{formElementRef._eoFormElement.type}}</b></div>\r\n\r\n\r\n <!-- the fields description -->\r\n <div class=\"description\" *ngIf=\"formElementRef._eoFormElement.description\">{{formElementRef._eoFormElement.description}}</div>\r\n\r\n <!-- error/validation messages -->\r\n <div class=\"err-msg\" *ngIf=\"formElementRef.errors\">\r\n\r\n <div *ngIf=\"formElementRef.errors.daterange\" translate>eo.form.property.daterange.invalid</div>\r\n <div *ngIf=\"formElementRef.errors.numberrange\" translate>eo.form.property.numberrange.invalid</div>\r\n <div *ngIf=\"formElementRef.errors.number\" translate>eo.form.property.number</div>\r\n <div *ngIf=\"formElementRef.errors.precision\" translate\r\n [translateParams]=\"formElementRef.errors.precision.translateValues\">{{formElementRef.errors.precision.translateKey}}</div>\r\n <div *ngIf=\"formElementRef.errors.scale\" translate\r\n [translateParams]=\"formElementRef.errors.scale.translateValues\">{{formElementRef.errors.scale.translateKey}}</div>\r\n\r\n <div *ngIf=\"formElementRef.errors.regex || formElementRef.errors.pattern\" translate>eo.form.property.string.regex.nomatch</div>\r\n <div *ngIf=\"formElementRef.errors.classificationemail\" translate>eo.form.property.string.error.classification.email</div>\r\n <div *ngIf=\"formElementRef.errors.classificationurl\" translate>eo.form.property.string.error.classification.url</div>\r\n <div *ngIf=\"formElementRef.errors.onlyWhitespaces\" translate>eo.form.property.string.error.whitespaces</div>\r\n <div *ngIf=\"formElementRef.errors.datecontrol\" translate>eo.form.property.date.invalid</div>\r\n <div *ngIf=\"formElementRef.errors.codesystem\" translate>eo.form.property.codesystem.value.invalid</div>\r\n <div *ngIf=\"formElementRef.errors.eoformScript\">{{formElementRef._eoFormElement.error.msg}}</div>\r\n <div *ngIf=\"formElementRef.errors.required\" translate>eo.form.property.required</div>\r\n <div *ngIf=\"formElementRef.errors.maxlength\" translate [translateParams]=\"{maxlength: formElementRef._eoFormElement.maxlen}\">eo.form.property.maxlength</div>\r\n <div *ngIf=\"formElementRef.errors.minlength\" translate [translateParams]=\"{minlength: formElementRef._eoFormElement.minlen}\">eo.form.property.minlength</div>\r\n <div *ngIf=\"formElementRef.errors.deletedIDReference\" translate>eo.form.property.idreference.deleted</div>\r\n <div *ngIf=\"formElementRef.errors.deletedOrgObject\" translate>eo.form.property.orgobject.deleted</div>\r\n </div>\r\n\r\n </div>\r\n</div>\r\n",
9926
+ template: "<div class=\"form-element\" [formGroup]=\"element\" *ngIf=\"element\">\r\n\r\n <div class=\"form-field t-{{formElementRef._eoFormElement.type}}\" #formField\r\n [ngSwitch]=\"formElementRef._eoFormElement.type\"\r\n [ngClass]=\"{disabled: !!formElementRef._eoFormElement.readonly}\">\r\n\r\n <!-- STRING -->\r\n <eo-form-input *ngSwitchCase=\"'STRING'\" [tag]=\"tag\" [label]=\"formElementRef._eoFormElement.label\"\r\n [isNull]=\"isNull\"\r\n [skipToggle]=\"skipToggle || situation !== 'SEARCH'\"\r\n (onToggleLabel)=\"labelToggled($event)\"\r\n [required]=\"formElementRef._eoFormElement.required\"\r\n [invalid]=\"formElementRef.invalid\">\r\n\r\n <eo-string\r\n *ngIf=\"!formElementRef._eoFormElement.reference && formElementRef._eoFormElement.classification !== 'selector'\"\r\n [situation]=\"element._eoFormControlWrapper.situation\"\r\n [formControlName]=\"element._eoFormControlWrapper.controlName\"\r\n [autocomplete]=\"formElementRef._eoFormElement.autocomplete\"\r\n [multiselect]=\"formElementRef._eoFormElement.multiselect\"\r\n [multiline]=\"formElementRef._eoFormElement.multiline\"\r\n [classification]=\"formElementRef._eoFormElement.classification\"\r\n [regex]=\"formElementRef._eoFormElement.regex\"\r\n [qname]=\"formElementRef._eoFormElement.qname\"\r\n [size]=\"formElementRef._eoFormElement.size\"\r\n [readonly]=\"formElementRef._eoFormElement.readonly\"\r\n [minLength]=\"formElementRef._eoFormElement.minlen\"\r\n [maxLength]=\"formElementRef._eoFormElement.maxlen\"\r\n ></eo-string>\r\n\r\n <!-- Dynamic List -->\r\n <eo-dynamic-list\r\n *ngIf=\"!formElementRef._eoFormElement.reference && formElementRef._eoFormElement.classification === 'selector'\"\r\n [situation]=\"element._eoFormControlWrapper.situation\"\r\n [pickerTitle]=\"formElementRef._eoFormElement.label\"\r\n [filterFunction]=\"formElementRef._eoFormElement.filterFunction\"\r\n [multiselect]=\"formElementRef._eoFormElement.multiselect\"\r\n [listObject]=\"formElementRef._eoFormElement.list\"\r\n [readonly]=\"formElementRef._eoFormElement.readonly\"\r\n [formControlName]=\"element._eoFormControlWrapper.controlName\"></eo-dynamic-list>\r\n\r\n\r\n <!-- Reference -->\r\n <eo-reference *ngIf=\"formElementRef._eoFormElement.reference\"\r\n [formControlName]=\"element._eoFormControlWrapper.controlName\"\r\n [readonly]=\"formElementRef._eoFormElement.readonly\"\r\n [reference]=\"formElementRef._eoFormElement.reference\"\r\n [multiselect]=\"formElementRef._eoFormElement.multiselect\"\r\n [minLength]=\"formElementRef._eoFormElement.minlen\"\r\n [maxLength]=\"formElementRef._eoFormElement.maxlen\"\r\n ></eo-reference>\r\n </eo-form-input>\r\n\r\n <!-- ID-Reference -->\r\n <eo-form-input *ngSwitchCase=\"'REFERENCE'\" [tag]=\"tag\" [label]=\"formElementRef._eoFormElement.label\"\r\n [isNull]=\"isNull\"\r\n [skipToggle]=\"skipToggle || situation !== 'SEARCH'\"\r\n (onToggleLabel)=\"labelToggled($event)\"\r\n [required]=\"formElementRef._eoFormElement.required\"\r\n [invalid]=\"formElementRef.invalid\">\r\n\r\n <eo-id-reference\r\n [formControlName]=\"element._eoFormControlWrapper.controlName\"\r\n [situation]=\"element._eoFormControlWrapper.situation\"\r\n [dataToRender]=\"formElementRef._eoFormElement.dataToRender\"\r\n [reference]=\"formElementRef._eoFormElement.reference\"\r\n [readonly]=\"formElementRef._eoFormElement.readonly\"\r\n [multiselect]=\"formElementRef._eoFormElement.multiselect\"\r\n [contextId]=\"formElementRef._eoFormElement.contextId\"\r\n [exceptionIDs]=\"formElementRef._eoFormElement.exceptionIDs\"\r\n [queryFilters]=\"formElementRef._eoFormElement.queryFilters\"\r\n [objectTypesFilter]=\"formElementRef._eoFormElement.objectTypesFilter\"\r\n ></eo-id-reference>\r\n </eo-form-input>\r\n\r\n <!-- ID -->\r\n <eo-form-input *ngSwitchCase=\"'ID'\" [tag]=\"tag\" [label]=\"formElementRef._eoFormElement.label\"\r\n [isNull]=\"isNull\"\r\n [skipToggle]=\"skipToggle || situation !== 'SEARCH'\"\r\n (onToggleLabel)=\"labelToggled($event)\"\r\n [required]=\"formElementRef._eoFormElement.required\"\r\n [invalid]=\"formElementRef.invalid\">\r\n\r\n <eo-string\r\n [situation]=\"element._eoFormControlWrapper.situation\"\r\n [formControlName]=\"element._eoFormControlWrapper.controlName\"\r\n [autocomplete]=\"formElementRef._eoFormElement.autocomplete\"\r\n [multiselect]=\"formElementRef._eoFormElement.multiselect\"\r\n [regex]=\"'^[0-9a-fA-F]*$'\"\r\n [qname]=\"formElementRef._eoFormElement.qname\"\r\n [readonly]=\"formElementRef._eoFormElement.readonly\"\r\n [minLength]=\"32\"\r\n [maxLength]=\"32\"\r\n ></eo-string>\r\n\r\n </eo-form-input>\r\n\r\n\r\n <!-- BOOLEAN -->\r\n <eo-form-input *ngSwitchCase=\"'BOOLEAN'\" [tag]=\"tag\" class=\"checkbox\" [label]=\"formElementRef._eoFormElement.label\"\r\n [isNull]=\"isNull\"\r\n [skipToggle]=\"skipToggle || situation !== 'SEARCH'\"\r\n [required]=\"formElementRef._eoFormElement.required\"\r\n (onToggleLabel)=\"labelToggled($event)\"\r\n [invalid]=\"formElementRef.invalid\">\r\n\r\n <eo-checkbox [formControlName]=\"element._eoFormControlWrapper.controlName\"\r\n [readonly]=\"formElementRef._eoFormElement.readonly\"\r\n [tristate]=\"true\"></eo-checkbox>\r\n </eo-form-input>\r\n\r\n <!-- CODESYSTEM -->\r\n <eo-form-input *ngSwitchCase=\"'CODESYSTEM'\" [tag]=\"tag\" [label]=\"formElementRef._eoFormElement.label\"\r\n [isNull]=\"isNull\"\r\n [skipToggle]=\"skipToggle || situation !== 'SEARCH'\"\r\n (onToggleLabel)=\"labelToggled($event)\"\r\n [required]=\"formElementRef._eoFormElement.required\"\r\n [invalid]=\"formElementRef.invalid\">\r\n\r\n <eo-codesystem [situation]=\"element._eoFormControlWrapper.situation\"\r\n [pickerTitle]=\"formElementRef._eoFormElement.label\"\r\n [readonly]=\"formElementRef._eoFormElement.readonly\"\r\n [codesystem]=\"formElementRef._eoFormElement.codesystem\"\r\n [multiselect]=\"formElementRef._eoFormElement.multiselect\"\r\n [filterFunction]=\"formElementRef._eoFormElement.filterFunction\"\r\n [disablingFilterFunction]=\"formElementRef._eoFormElement.disablingFilterFunction\"\r\n [formControlName]=\"element._eoFormControlWrapper.controlName\"\r\n ></eo-codesystem>\r\n </eo-form-input>\r\n\r\n <!-- ORGANIZATION -->\r\n <eo-form-input *ngSwitchCase=\"'ORGANIZATION'\" [tag]=\"tag\" [label]=\"formElementRef._eoFormElement.label\"\r\n [isNull]=\"isNull\"\r\n [skipToggle]=\"skipToggle || situation !== 'SEARCH'\"\r\n (onToggleLabel)=\"labelToggled($event)\"\r\n [required]=\"formElementRef._eoFormElement.required\"\r\n [invalid]=\"formElementRef.invalid\">\r\n\r\n <eo-organization [situation]=\"element._eoFormControlWrapper.situation\"\r\n [dataMeta]=\"formElementRef._eoFormElement.dataMeta\"\r\n [readonly]=\"formElementRef._eoFormElement.readonly\"\r\n [filterObject]=\"formElementRef._eoFormElement.filter\"\r\n [multiselect]=\"formElementRef._eoFormElement.multiselect\"\r\n (onDataMetaChanged)=\"organizationDataMetaResolved($event)\"\r\n [formControlName]=\"element._eoFormControlWrapper.controlName\"\r\n ></eo-organization>\r\n </eo-form-input>\r\n\r\n <!-- NUMBER -->\r\n\r\n <eo-form-input *ngSwitchCase=\"'NUMBER'\" [tag]=\"tag\" [label]=\"formElementRef._eoFormElement.label\"\r\n [isNull]=\"isNull\"\r\n [skipToggle]=\"skipToggle || situation !== 'SEARCH'\"\r\n (onToggleLabel)=\"labelToggled($event)\"\r\n [required]=\"formElementRef._eoFormElement.required\"\r\n [invalid]=\"formElementRef.invalid\">\r\n\r\n <eo-number *ngIf=\"situation !== 'SEARCH'\"\r\n [readonly]=\"formElementRef._eoFormElement.readonly\"\r\n [precision]=\"formElementRef._eoFormElement.precision\"\r\n [scale]=\"formElementRef._eoFormElement.scale\"\r\n [grouping]=\"formElementRef._eoFormElement.grouping\"\r\n [pattern]=\"formElementRef._eoFormElement.pattern\"\r\n [formControlName]=\"element._eoFormControlWrapper.controlName\">\r\n </eo-number>\r\n\r\n <eo-number-range *ngIf=\"situation === 'SEARCH'\"\r\n [readonly]=\"formElementRef._eoFormElement.readonly\"\r\n [precision]=\"formElementRef._eoFormElement.precision\"\r\n [scale]=\"formElementRef._eoFormElement.scale\"\r\n [grouping]=\"formElementRef._eoFormElement.grouping\"\r\n [pattern]=\"formElementRef._eoFormElement.pattern\"\r\n [formControlName]=\"element._eoFormControlWrapper.controlName\"\r\n ></eo-number-range>\r\n </eo-form-input>\r\n\r\n <!-- TABLE -->\r\n <div class=\"table\" *ngSwitchCase=\"'TABLE'\">\r\n <eo-table [dmsObject]=\"dmsObject\" [params]=\"{\r\n situation: element._eoFormControlWrapper.situation,\r\n element: formElementRef._eoFormElement,\r\n size: formElementRef._eoFormElement.size\r\n }\" [formControlName]=\"element._eoFormControlWrapper.controlName\"></eo-table>\r\n </div>\r\n\r\n <!-- DATE AND DATETIME -->\r\n <eo-form-input *ngSwitchCase=\"'DATETIME'\" [tag]=\"tag\" [label]=\"formElementRef._eoFormElement.label\"\r\n [isNull]=\"isNull\"\r\n [skipToggle]=\"skipToggle || situation !== 'SEARCH'\"\r\n (onToggleLabel)=\"labelToggled($event)\"\r\n [required]=\"formElementRef._eoFormElement.required\"\r\n [invalid]=\"formElementRef.invalid\">\r\n\r\n <eo-datetime *ngIf=\"situation !== 'SEARCH'\"\r\n [readonly]=\"formElementRef._eoFormElement.readonly\"\r\n [pickerTitle]=\"formElementRef._eoFormElement.label\"\r\n [withTime]=\"formElementRef._eoFormElement.withtime\"\r\n [formControlName]=\"element._eoFormControlWrapper.controlName\"\r\n [validateDatabaseTimeRange]=\"formElementRef._eoFormElement.withtime\"\r\n ></eo-datetime>\r\n\r\n <eo-datetime-range *ngIf=\"situation === 'SEARCH'\"\r\n [pickerTitle]=\"formElementRef._eoFormElement.label\"\r\n [withTime]=\"formElementRef._eoFormElement.withtime\"\r\n [formControlName]=\"element._eoFormControlWrapper.controlName\"\r\n ></eo-datetime-range>\r\n </eo-form-input>\r\n\r\n\r\n <!-- print out the type if it's not matching anything -->\r\n <div *ngSwitchDefault><b>{{formElementRef._eoFormElement.type}}</b></div>\r\n\r\n\r\n <!-- the fields description -->\r\n <div class=\"description\" *ngIf=\"formElementRef._eoFormElement.description\">{{formElementRef._eoFormElement.description}}</div>\r\n\r\n <!-- error/validation messages -->\r\n <div class=\"err-msg\" *ngIf=\"formElementRef.errors\">\r\n\r\n <div *ngIf=\"formElementRef.errors.daterange\" translate>eo.form.property.daterange.invalid</div>\r\n <div *ngIf=\"formElementRef.errors.numberrange\" translate>eo.form.property.numberrange.invalid</div>\r\n <div *ngIf=\"formElementRef.errors.number\" translate>eo.form.property.number</div>\r\n <div *ngIf=\"formElementRef.errors.precision\" translate\r\n [translateParams]=\"formElementRef.errors.precision.translateValues\">{{formElementRef.errors.precision.translateKey}}</div>\r\n <div *ngIf=\"formElementRef.errors.scale\" translate\r\n [translateParams]=\"formElementRef.errors.scale.translateValues\">{{formElementRef.errors.scale.translateKey}}</div>\r\n\r\n <div *ngIf=\"formElementRef.errors.regex || formElementRef.errors.pattern\" translate>eo.form.property.string.regex.nomatch</div>\r\n <div *ngIf=\"formElementRef.errors.classificationemail\" translate>eo.form.property.string.error.classification.email</div>\r\n <div *ngIf=\"formElementRef.errors.classificationurl\" translate>eo.form.property.string.error.classification.url</div>\r\n <div *ngIf=\"formElementRef.errors.onlyWhitespaces\" translate>eo.form.property.string.error.whitespaces</div>\r\n <div *ngIf=\"formElementRef.errors.datecontrol\" translate>eo.form.property.date.invalid</div>\r\n <div *ngIf=\"formElementRef.errors.codesystem\" translate>eo.form.property.codesystem.value.invalid</div>\r\n <div *ngIf=\"formElementRef.errors.eoformScript\">{{formElementRef._eoFormElement.error.msg}}</div>\r\n <div *ngIf=\"formElementRef.errors.required\" translate>eo.form.property.required</div>\r\n <div *ngIf=\"formElementRef.errors.maxlength\" translate [translateParams]=\"{maxlength: formElementRef._eoFormElement.maxlen}\">eo.form.property.maxlength</div>\r\n <div *ngIf=\"formElementRef.errors.minlength\" translate [translateParams]=\"{minlength: formElementRef._eoFormElement.minlen}\">eo.form.property.minlength</div>\r\n <div *ngIf=\"formElementRef.errors.deletedIDReference\" translate>eo.form.property.idreference.deleted</div>\r\n <div *ngIf=\"formElementRef.errors.deletedOrgObject\" translate>eo.form.property.orgobject.deleted</div>\r\n </div>\r\n\r\n </div>\r\n</div>\r\n",
9874
9927
  styles: [":host-context(.dark) .form-element .form-field .err-msg{background-color:var(--color-error);border:0;border-radius:2px;color:var(--color-white);margin:calc(var(--app-pane-padding)/4) 0;padding:calc(var(--app-pane-padding)/4)}:host{flex:1 1 auto}:host.label-toggled::ng-deep eo-form-input label{text-decoration:line-through}.form-element{box-sizing:border-box}.form-element .form-field{margin:calc(var(--app-pane-padding)/4) calc(var(--app-pane-padding)/2)}.form-element .form-field .description{border:0;font-size:var(--font-hint);font-style:italic;padding:calc(var(--app-pane-padding)/8) calc(var(--app-pane-padding)/8) 0 calc(var(--app-pane-padding)/8)}.form-element .form-field .err-msg{border:0;color:var(--color-error);padding:calc(var(--app-pane-padding)/4) 0}.form-element .form-field .table{align-items:flex-start;border-color:transparent;flex-flow:column}.form-element .form-field .table .label{padding-bottom:calc(var(--app-pane-padding)/4)}.form-element.ng-dirty:not(.ng-invalid)>.form-field:not(.focused)::ng-deep label{background-color:var(--color-dirty-background);color:var(--color-dirty-font)!important}"]
9875
9928
  },] }
9876
9929
  ];
@@ -9882,6 +9935,7 @@ FormElementComponent.ctorParameters = () => [
9882
9935
  FormElementComponent.propDecorators = {
9883
9936
  situation: [{ type: Input }],
9884
9937
  skipToggle: [{ type: Input }],
9938
+ dmsObject: [{ type: Input }],
9885
9939
  elementSetter: [{ type: Input, args: ['element',] }],
9886
9940
  formField: [{ type: ViewChild, args: ['formField',] }]
9887
9941
  };
@@ -9897,6 +9951,7 @@ class FormElementTableComponent extends UnsubscribeOnDestroy {
9897
9951
  this.modules = [ClientSideRowModelModule, CsvExportModule];
9898
9952
  this.gridReady = false;
9899
9953
  this.showDialog = false;
9954
+ this.showPreview = false;
9900
9955
  this.propagateChange = (_) => {
9901
9956
  };
9902
9957
  this.gridOptions = {
@@ -9952,6 +10007,7 @@ class FormElementTableComponent extends UnsubscribeOnDestroy {
9952
10007
  });
9953
10008
  this._cachedColumns = this.storageService.getItem(FormElementTableComponent.COLUMNS_DEFINITION) || [];
9954
10009
  this._cachedColumnsOverlay = this.storageService.getItem(FormElementTableComponent.COLUMNS_DEFINITION_OVERLAY) || [];
10010
+ this.showPreview = !!this.storageService.getItem('showPreview');
9955
10011
  }
9956
10012
  set params(p) {
9957
10013
  if (p) {
@@ -10287,13 +10343,17 @@ class FormElementTableComponent extends UnsubscribeOnDestroy {
10287
10343
  }
10288
10344
  this.storageService.setItem(columnsDefinition, cachedColumns);
10289
10345
  }
10346
+ togglePreview() {
10347
+ this.showPreview = !this.showPreview;
10348
+ this.storageService.setItem('showPreview', this.showPreview);
10349
+ }
10290
10350
  }
10291
10351
  FormElementTableComponent.COLUMNS_DEFINITION = 'eo.framework.cache.tables.columns.definition';
10292
10352
  FormElementTableComponent.COLUMNS_DEFINITION_OVERLAY = 'eo.framework.cache.tables.overlay.columns.definition';
10293
10353
  FormElementTableComponent.decorators = [
10294
10354
  { type: Component, args: [{
10295
10355
  selector: 'eo-table',
10296
- template: "<div class=\"object-form-table\" [ngClass]=\"{medium: _params.size === 'medium', large: _params.size === 'large'}\">\r\n <div class=\"label\">\r\n <span>{{_params.element.label}}</span>\r\n <ng-container *ngIf=\"_params.situation !== 'SEARCH'\">\r\n\r\n <eo-icon class=\"stf\" [iconSrc]=\"'assets/_default/svg/ic_expand.svg'\" [iconTitle]=\"('eo.form.table.options.btn.open'| translate)\" (click)=\"openDialog()\"></eo-icon>\r\n <eo-icon class=\"stf\" [iconSrc]=\"'assets/_default/svg/ic_size_to_fit.svg'\" [iconTitle]=\"('eo.form.table.options.btn.fit'| translate)\" (click)=\"sizeToFit()\"></eo-icon>\r\n <eo-icon class=\"stf\" *ngIf=\"gridOptions.rowData.length\" [iconSrc]=\"'assets/_default/svg/ic_content-download.svg'\" [iconTitle]=\"('eo.form.table.options.btn.csv'| translate)\" (click)=\"exportCSV()\"></eo-icon>\r\n <eo-icon class=\"stf add-row\" *ngIf=\"!_params.element.readonly\" [iconSrc]=\"'assets/_default/svg/ic_add.svg'\" [iconTitle]=\"('eo.form.table.options.btn.add'| translate)\" (click)=\"addRow()\"></eo-icon>\r\n\r\n </ng-container>\r\n </div>\r\n <div class=\"grid-body size-{{ params.size }}\">\r\n <ag-grid-angular #agGrid *ngIf=\"gridReady\" class=\"ag-theme-balham\" [modules]=\"modules\"\r\n [gridOptions]=\"gridOptions\"\r\n (rowDoubleClicked)=\"editRow($event)\"\r\n (cellClicked)=\"onCellClicked($event)\"\r\n (sortChanged)=\"onSortChanged()\"\r\n (cellValueChanged)=\"onEditComplete($event)\"\r\n (columnResized)=\"onColumnResized($event.column)\">\r\n </ag-grid-angular>\r\n </div>\r\n</div>\r\n\r\n\r\n<eo-dialog\r\n[title]=\"params.element.label\"\r\n[visible]=\"showDialog\"\r\n[dirtyCheck]=\"rowEdit?.pendingTaskId\"\r\n[minWidth]=\"_params.situation === 'SEARCH' ? 500 : null\"\r\n[fullscreen]=\"_params.situation !== 'SEARCH'\"\r\n[styleClass]=\"'object-form-table-dialog'\"\r\n(hide)=\"onClose()\" #dialog>\r\n\r\n <div class=\"body\">\r\n\r\n <eo-split [gutterSize]=\"16\" [switchable]=\"true\">\r\n\r\n <eo-split-area *ngIf=\"_params.situation !== 'SEARCH'\" class=\"table-area\" [size]=\"75\" [minSizePixel]=\"100\">\r\n <div class=\"table-body\">\r\n <div class=\"object-form-table\">\r\n <div class=\"label\">\r\n <span></span>\r\n <ng-container>\r\n <eo-icon class=\"stf\" [iconSrc]=\"'assets/_default/svg/ic_size_to_fit.svg'\" [iconTitle]=\"('eo.form.table.options.btn.fit'| translate)\" (click)=\"sizeToFit(true)\"></eo-icon>\r\n <eo-icon class=\"stf\" *ngIf=\"gridOptions.rowData.length\" [iconSrc]=\"'assets/_default/svg/ic_content-download.svg'\" [iconTitle]=\"('eo.form.table.options.btn.csv'| translate)\" (click)=\"exportCSV()\"></eo-icon>\r\n <eo-icon class=\"stf add-row\" *ngIf=\"!_params.element.readonly\" [iconSrc]=\"'assets/_default/svg/ic_add.svg'\" [iconTitle]=\"('eo.form.table.options.btn.add'| translate)\" (click)=\"addRow()\"></eo-icon>\r\n </ng-container>\r\n </div>\r\n <div class=\"grid-body\">\r\n <ag-grid-angular #agGrid2 *ngIf=\"gridReady\" class=\"ag-theme-balham\" [modules]=\"modules\"\r\n [gridOptions]=\"overlayGridOptions\"\r\n (cellClicked)=\"onCellClicked($event);editRow($event)\"\r\n (mousedown)=\"onMouseDown($event)\"\r\n (sortChanged)=\"onSortChanged()\"\r\n (cellValueChanged)=\"onEditComplete($event)\"\r\n (columnResized)=\"onColumnResized($event.column, true)\">\r\n </ag-grid-angular>\r\n </div>\r\n </div>\r\n </div>\r\n </eo-split-area>\r\n\r\n <eo-split-area [size]=\"25\" [minSizePixel]=\"350\" *ngIf=\"editingRow\">\r\n <div class=\"edit-body\">\r\n <eo-row-edit [row]=\"editingRow\" #rowEdit\r\n (onSave)=\"updateRow($event)\"\r\n (onSaveCopy)=\"copyRow($event)\"\r\n (onDelete)=\"deleteRow($event)\"\r\n (onCancel)=\"cancelRowEdit()\"></eo-row-edit>\r\n </div>\r\n </eo-split-area>\r\n\r\n </eo-split>\r\n\r\n </div>\r\n</eo-dialog>\r\n\r\n",
10356
+ template: "<div class=\"object-form-table\" [ngClass]=\"{medium: _params.size === 'medium', large: _params.size === 'large'}\">\r\n <div class=\"label\">\r\n <span>{{_params.element.label}}</span>\r\n <ng-container *ngIf=\"_params.situation !== 'SEARCH'\">\r\n\r\n <eo-icon class=\"stf\" [iconSrc]=\"'assets/_default/svg/ic_expand.svg'\" [iconTitle]=\"('eo.form.table.options.btn.open'| translate)\" (click)=\"openDialog()\"></eo-icon>\r\n <eo-icon class=\"stf\" [iconSrc]=\"'assets/_default/svg/ic_size_to_fit.svg'\" [iconTitle]=\"('eo.form.table.options.btn.fit'| translate)\" (click)=\"sizeToFit()\"></eo-icon>\r\n <eo-icon class=\"stf\" *ngIf=\"gridOptions.rowData.length\" [iconSrc]=\"'assets/_default/svg/ic_content-download.svg'\" [iconTitle]=\"('eo.form.table.options.btn.csv'| translate)\" (click)=\"exportCSV()\"></eo-icon>\r\n <eo-icon class=\"stf add-row\" *ngIf=\"!_params.element.readonly\" [iconSrc]=\"'assets/_default/svg/ic_add.svg'\" [iconTitle]=\"('eo.form.table.options.btn.add'| translate)\" (click)=\"addRow()\"></eo-icon>\r\n\r\n </ng-container>\r\n </div>\r\n <div class=\"grid-body size-{{ params.size }}\">\r\n <ag-grid-angular #agGrid *ngIf=\"gridReady\" class=\"ag-theme-balham\" [modules]=\"modules\"\r\n [gridOptions]=\"gridOptions\"\r\n (rowDoubleClicked)=\"editRow($event)\"\r\n (cellClicked)=\"onCellClicked($event)\"\r\n (sortChanged)=\"onSortChanged()\"\r\n (cellValueChanged)=\"onEditComplete($event)\"\r\n (columnResized)=\"onColumnResized($event.column)\">\r\n </ag-grid-angular>\r\n </div>\r\n</div>\r\n\r\n\r\n<eo-dialog\r\n[title]=\"params.element.label\"\r\n[visible]=\"showDialog\"\r\n[dirtyCheck]=\"rowEdit?.pendingTaskId\"\r\n[minWidth]=\"_params.situation !== 'SEARCH' ? '97vw' : 200\"\r\n[styleClass]=\"'object-form-table-dialog'\"\r\n(hide)=\"onClose()\"\r\n[isFormTable]=\"true\"\r\n[showPreview]=\"showPreview\"\r\n(onTogglePreview)=\"togglePreview()\">\r\n\r\n <div class=\"body\">\r\n\r\n <eo-split [gutterSize]=\"16\" [switchable]=\"true\">\r\n\r\n <eo-split-area *ngIf=\"_params.situation !== 'SEARCH'\" class=\"table-area\" [size]=\"50\" [minSizePixel]=\"100\">\r\n <div class=\"table-body\">\r\n <div class=\"object-form-table\">\r\n <div class=\"label\">\r\n <span></span>\r\n <ng-container>\r\n <eo-icon class=\"stf\" [iconSrc]=\"'assets/_default/svg/ic_size_to_fit.svg'\" [iconTitle]=\"('eo.form.table.options.btn.fit'| translate)\" (click)=\"sizeToFit(true)\"></eo-icon>\r\n <eo-icon class=\"stf\" *ngIf=\"gridOptions.rowData.length\" [iconSrc]=\"'assets/_default/svg/ic_content-download.svg'\" [iconTitle]=\"('eo.form.table.options.btn.csv'| translate)\" (click)=\"exportCSV()\"></eo-icon>\r\n <eo-icon class=\"stf add-row\" *ngIf=\"!_params.element.readonly\" [iconSrc]=\"'assets/_default/svg/ic_add.svg'\" [iconTitle]=\"('eo.form.table.options.btn.add'| translate)\" (click)=\"addRow()\"></eo-icon>\r\n </ng-container>\r\n </div>\r\n <div class=\"grid-body\">\r\n <ag-grid-angular #agGrid2 *ngIf=\"gridReady\" class=\"ag-theme-balham\" [modules]=\"modules\"\r\n [gridOptions]=\"overlayGridOptions\"\r\n (cellClicked)=\"onCellClicked($event);editRow($event)\"\r\n (mousedown)=\"onMouseDown($event)\"\r\n (sortChanged)=\"onSortChanged()\"\r\n (cellValueChanged)=\"onEditComplete($event)\"\r\n (columnResized)=\"onColumnResized($event.column, true)\">\r\n </ag-grid-angular>\r\n </div>\r\n </div>\r\n </div>\r\n </eo-split-area>\r\n\r\n <eo-split-area [size]=\"15\" [minSizePixel]=\"300\" *ngIf=\"editingRow\">\r\n <div class=\"edit-body\">\r\n <eo-row-edit [row]=\"editingRow\" #rowEdit\r\n (onSave)=\"updateRow($event)\"\r\n (onSaveCopy)=\"copyRow($event)\"\r\n (onDelete)=\"deleteRow($event)\"\r\n (onCancel)=\"cancelRowEdit()\"></eo-row-edit>\r\n </div>\r\n </eo-split-area>\r\n\r\n <eo-split-area *ngIf=\"editingRow && showPreview\" [size]=\"10\" [minSizePixel]=\"150\">\r\n <eo-media *ngIf=\"dmsObject\" [dmsObject]=\"dmsObject\"\r\n [useVersion]=\"dmsObject.id === dmsObject.content?.id\"></eo-media>\r\n </eo-split-area>\r\n </eo-split>\r\n </div>\r\n</eo-dialog>\r\n\r\n",
10297
10357
  providers: [
10298
10358
  {
10299
10359
  provide: NG_VALUE_ACCESSOR,
@@ -10318,6 +10378,7 @@ FormElementTableComponent.ctorParameters = () => [
10318
10378
  ];
10319
10379
  FormElementTableComponent.propDecorators = {
10320
10380
  rowEdit: [{ type: ViewChild, args: ['rowEdit',] }],
10381
+ dmsObject: [{ type: Input }],
10321
10382
  params: [{ type: Input }],
10322
10383
  copyCellHandler: [{ type: HostListener, args: ['keydown.control.alt.shift.c', ['$event'],] }, { type: HostListener, args: ['keydown.control.shift.c', ['$event'],] }, { type: HostListener, args: ['keydown.control.alt.c', ['$event'],] }, { type: HostListener, args: ['keydown.control.c', ['$event'],] }]
10323
10384
  };
@@ -11603,7 +11664,7 @@ class DatetimeFilterComponent extends DatetimeComponent {
11603
11664
  DatetimeFilterComponent.decorators = [
11604
11665
  { type: Component, args: [{
11605
11666
  selector: 'eo-datetime-custom',
11606
- template: "<!-- non web environments use native pickers -->\r\n<div class=\"eo-datepicker native\" lang=\"{{locale}}\" *ngIf=\"!isWebEnv; else web\">\r\n <input type=\"date\" [(ngModel)]=\"value\" *ngIf=\"!withTime\" [readonly]=\"readonly\"/>\r\n <input type=\"datetime-local\" [(ngModel)]=\"value\" [readonly]=\"readonly\" *ngIf=\"withTime\"/>\r\n</div>\r\n\r\n\r\n<ng-template #web>\r\n\r\n <eo-dialog [styleClass]=\"'date-picker'\" [title]=\"pickerTitle\" [(visible)]=\"showPicker\" *ngIf=\"showPicker\">\r\n <eo-datepicker [date]=\"value\" [withTime]=\"withTime\" [withAmPm]=\"withAmPm\"\r\n [onylFutureDates]=\"onylFutureDates\"\r\n (onCanceled)=\"(showPicker = false)\"\r\n (onDateChanged)=\"setValueFromPicker($event)\"></eo-datepicker>\r\n </eo-dialog>\r\n\r\n <div class=\"eo-datepicker\">\r\n <p-inputMask [mask]=\"maskPattern\" [(ngModel)]=\"innerValue\"\r\n (ngModelChange)=\"onMaskValueChange($event)\"\r\n (onComplete)=\"setValueFromMask()\"\r\n [readonly]=\"readonly\"\r\n [autoClear]=\"true\"\r\n [placeholder]=\"datePattern\"></p-inputMask>\r\n\r\n <button class=\"ui-button\" (click)=\"(showPicker = true)\" (keyup.arrowDown)=\"(showPicker = true)\" *ngIf=\"!readonly\">\r\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_datepicker.svg'\"></eo-icon>\r\n </button>\r\n </div>\r\n\r\n</ng-template>\r\n\r\n\r\n\r\n\r\n\r\n",
11667
+ template: "<!-- non web environments use native pickers -->\r\n<div class=\"eo-datepicker native\" lang=\"{{locale}}\" *ngIf=\"!isWebEnv; else web\">\r\n <input type=\"date\" [(ngModel)]=\"value\" *ngIf=\"!withTime\" [readonly]=\"readonly\"/>\r\n <input type=\"datetime-local\" [(ngModel)]=\"value\" [readonly]=\"readonly\" *ngIf=\"withTime\"/>\r\n</div>\r\n\r\n\r\n<ng-template #web>\r\n\r\n <eo-dialog [styleClass]=\"'date-picker'\" [title]=\"pickerTitle\" [(visible)]=\"showPicker\" *ngIf=\"showPicker\">\r\n <eo-datepicker [date]=\"value\" [withTime]=\"withTime\" [withAmPm]=\"withAmPm\"\r\n [onlyFutureDates]=\"onlyFutureDates\"\r\n [useDatabaseMinimumTime]=\"validateDatabaseTimeRange\"\r\n (onCanceled)=\"(showPicker = false)\"\r\n (onDateChanged)=\"setValueFromPicker($event)\"></eo-datepicker>\r\n </eo-dialog>\r\n\r\n <div class=\"eo-datepicker\">\r\n <p-inputMask [mask]=\"maskPattern\" [(ngModel)]=\"innerValue\"\r\n (ngModelChange)=\"onMaskValueChange($event)\"\r\n (onComplete)=\"setValueFromMask()\"\r\n [readonly]=\"readonly\"\r\n [autoClear]=\"true\"\r\n [placeholder]=\"datePattern\"></p-inputMask>\r\n\r\n <button class=\"ui-button\" (click)=\"(showPicker = true)\" (keyup.arrowDown)=\"(showPicker = true)\" *ngIf=\"!readonly\">\r\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_datepicker.svg'\"></eo-icon>\r\n </button>\r\n </div>\r\n\r\n</ng-template>\r\n\r\n\r\n\r\n\r\n\r\n",
11607
11668
  styles: [":host .eo-datepicker{align-items:center;display:flex;flex-flow:row nowrap}:host ::ng-deep p-inputmask{flex:1 1 auto}:host ::ng-deep p-inputmask input{background:transparent;border:0;width:100%}"]
11608
11669
  },] }
11609
11670
  ];
@@ -13912,323 +13973,753 @@ ResultListModule.decorators = [
13912
13973
  },] }
13913
13974
  ];
13914
13975
 
13915
- /**
13916
- * @module
13917
- * @description
13918
- * Module rendering a dms objects form.
13919
- */
13920
- class ObjectFormModule {
13976
+ class ContentPreviewService {
13977
+ static undockWin(src) {
13978
+ const w = window[ContentPreviewService.UNDOCK_WINDOW_NAME] = window.open(src || '', ContentPreviewService.UNDOCK_WINDOW_NAME, 'directories=0, titlebar=0, toolbar=0, location=0, status=0, menubar=0, resizable=1, top=10, left=10');
13979
+ return w;
13980
+ }
13981
+ static closeWin() {
13982
+ return this.getUndockWin() && this.getUndockWin().close();
13983
+ }
13984
+ static getUndockWin() {
13985
+ return window[ContentPreviewService.UNDOCK_WINDOW_NAME];
13986
+ }
13987
+ static undockWinActive() {
13988
+ return !!ContentPreviewService.getUndockWin() && !ContentPreviewService.getUndockWin().closed;
13989
+ }
13990
+ static mapLang(lang) {
13991
+ switch (lang) {
13992
+ case 'en':
13993
+ return 'en-US';
13994
+ case 'es':
13995
+ return 'es-ES';
13996
+ case 'pt':
13997
+ return 'pt-PT';
13998
+ case 'zh':
13999
+ return 'zh-CN';
14000
+ case 'hi':
14001
+ return 'hi-IN';
14002
+ case 'bn':
14003
+ return 'bn-BD';
14004
+ default:
14005
+ return lang;
14006
+ }
14007
+ }
13921
14008
  }
13922
- ObjectFormModule.decorators = [
13923
- { type: NgModule, args: [{
13924
- imports: [
13925
- CommonModule,
13926
- FormsModule,
13927
- ReactiveFormsModule,
13928
- SharedModule,
13929
- TabViewModule,
13930
- FieldsetModule,
13931
- UiModule,
13932
- DialogModule,
13933
- PipesModule,
13934
- AgGridModule,
13935
- ShortcutsModule,
13936
- FormElementsModule,
13937
- SplitModule,
13938
- ResultListModule,
13939
- ListContainerModule,
13940
- GridModule
13941
- ],
13942
- exports: [ObjectFormComponent, ObjectFormGroupComponent, ObjectFormEditComponent, FormElementComponent],
13943
- providers: [ObjectFormHelperService],
13944
- declarations: [
13945
- ObjectFormComponent,
13946
- ObjectFormGroupComponent,
13947
- ObjectFormEditComponent,
13948
- FormElementComponent,
13949
- FormElementTableComponent,
13950
- RowEditComponent
13951
- ]
13952
- },] }
14009
+ ContentPreviewService.UNDOCK_WINDOW_NAME = 'eoViewer';
14010
+ ContentPreviewService.decorators = [
14011
+ { type: Injectable }
13953
14012
  ];
13954
14013
 
13955
- class AppAddDialogComponent {
13956
- constructor(prepareService, router, systemService, translate, pendingChanges, locationService) {
13957
- this.prepareService = prepareService;
13958
- this.router = router;
13959
- this.systemService = systemService;
14014
+ class MediaComponent extends UnsubscribeOnDestroy {
14015
+ constructor(translate, dms, renderer, system, _ngZone, config, pluginsService, backend) {
14016
+ super();
13960
14017
  this.translate = translate;
13961
- this.pendingChanges = pendingChanges;
13962
- this.locationService = locationService;
13963
- this.onClose = new EventEmitter();
13964
- this.rootTypes = [];
13965
- this.locationTypes = [];
13966
- }
13967
- prepare(type, isRootType = false) {
13968
- if (this.pendingChanges.check()) {
13969
- return;
13970
- }
13971
- let pid = null;
13972
- if (!isRootType && this.locationParent) {
13973
- pid = this.locationParent.id;
14018
+ this.dms = dms;
14019
+ this.renderer = renderer;
14020
+ this.system = system;
14021
+ this._ngZone = _ngZone;
14022
+ this.config = config;
14023
+ this.pluginsService = pluginsService;
14024
+ this.backend = backend;
14025
+ this.SIZE_LIMIT = 1024 * 1024 * 10; // 10MB
14026
+ this._disabled = false;
14027
+ this.attachments = [];
14028
+ this.isMedia = false;
14029
+ this.isOctetStream = false;
14030
+ this.isNotSupported = false;
14031
+ this.isLarge = false;
14032
+ this.hasError = false;
14033
+ this.customConfig = [];
14034
+ this.defaultViewers = [
14035
+ {
14036
+ "mimeType": ["application/json", "text/json", "text/plain", "text/xml", "text/java", "text/javascript", "application/javascript", "text/html", "text/markdown", "text/x-web-markdown", "text/x-markdown"],
14037
+ "viewer": "assets/_default/api/monaco/?path=${path}&mimeType=${mimeType}&fileExtension=${fileExtension}&lang=${lang}&theme=${theme}"
14038
+ },
14039
+ {
14040
+ "mimeType": ["audio/mp3", "audio/webm", "audio/ogg", "audio/mpeg", "video/mp4", "video/webm", "video/ogg", "application/ogg"],
14041
+ "viewer": "assets/_default/api/video/?path=${path}&mimeType=${mimeType}&fileExtension=${fileExtension}&lang=${lang}&theme=${theme}"
14042
+ },
14043
+ {
14044
+ "mimeType": ["image/jpeg", "image/png", "image/apng", "image/gif", "image/svg+xml", "image/webp"],
14045
+ "viewer": "assets/_default/api/img/?path=${path}&mimeType=${mimeType}&fileExtension=${fileExtension}&lang=${lang}&theme=${theme}"
14046
+ },
14047
+ { "viewer": "() => parameters.defaultViewer + '#'" },
14048
+ { "error": true, "type": "error", "viewer": "assets/_default/api/error/?path=${path}&mimeType=${mimeType}&fileExtension=${fileExtension}&lang=${lang}&theme=${theme}" }
14049
+ ];
14050
+ this.undockDisabled = false;
14051
+ this.enableCloseBtn = false;
14052
+ // by default, the viewer ignores the version of the dms object. This will always show the latest version.
14053
+ // We need this to be able to refresh the viewer because otherwise pdfjs worker will fail.
14054
+ this.useVersion = false;
14055
+ this.fileSizePipe = new FileSizePipe(translate);
14056
+ this.SIZE_LIMIT = this.config.getRaw('preview.fileSizeLimit') || this.SIZE_LIMIT;
14057
+ this.customConfig = (this.config.getRaw('preview.viewers') || []).concat(this.defaultViewers);
14058
+ this.pluginsService.api.content.catchError().subscribe((evt) => {
14059
+ var _a, _b;
14060
+ const { err, win, parameters } = evt.data;
14061
+ const uri = this.pluginsService.applyFunction((_b = (_a = this.customConfig) === null || _a === void 0 ? void 0 : _a.find((v) => v.error)) === null || _b === void 0 ? void 0 : _b.viewer, 'api, err, win, parameters', [
14062
+ this.pluginsService.api,
14063
+ err,
14064
+ win,
14065
+ parameters
14066
+ ]);
14067
+ uri && this.loadDocument(this.resolveUri(uri, parameters), true);
14068
+ });
14069
+ if (ContentPreviewService.undockWinActive()) {
14070
+ this.undock(false);
13974
14071
  }
13975
- this.prepareService
13976
- .createPreparedItem(pid, type.name)
13977
- .subscribe(() => {
13978
- this.router.navigateByUrl('/prepare');
13979
- }, Utils.throw(null, this.translate.instant('eo.add.prepare.fail.title'), this.translate.instant('eo.add.prepare.fail.msg')));
13980
- this.onClose.emit();
13981
14072
  }
13982
- autocompleteFn(evt) {
13983
- this.autocompleteRes = this.autocompleteList.filter(type => {
13984
- return type.label.toLowerCase().indexOf(evt.query.toLowerCase()) != -1;
13985
- });
14073
+ get undockWin() {
14074
+ return ContentPreviewService.getUndockWin();
13986
14075
  }
13987
- onSelect(node) {
13988
- if (node.isSubfolder) {
13989
- this.addToSubfolder();
14076
+ set setAttachments(attachments) {
14077
+ this.attachments = attachments;
14078
+ this.attachmentsShown = false;
14079
+ }
14080
+ set setSearchTerm(searchTerm) {
14081
+ this.searchTerm = searchTerm || '';
14082
+ }
14083
+ set disabled(disabled) {
14084
+ this._disabled = !!disabled;
14085
+ this.toogleViewer();
14086
+ }
14087
+ get disabled() {
14088
+ return this._disabled;
14089
+ }
14090
+ set previewUri(uri) {
14091
+ this._previewUri = uri;
14092
+ this.toogleViewer();
14093
+ }
14094
+ get previewUri() {
14095
+ return this._previewUri;
14096
+ }
14097
+ set previewFile(file) {
14098
+ var _a;
14099
+ if (file) {
14100
+ this.viewer = this.getViewer(file);
14101
+ this.isMedia = this.viewer.viewer !== MediaComponent.PDF_VIEWER;
14102
+ this.isOctetStream = !!((_a = file.mimegroup) === null || _a === void 0 ? void 0 : _a.match(/octet-stream/));
14103
+ this.isLarge = file.size && file.size > this.SIZE_LIMIT;
14104
+ this.mediaType = file.mediaTypeName && this.system.getObjectType(file.mediaTypeName);
14105
+ this.previewUri = this.isMedia ? this.viewer.previewUri : file.uriPdf;
13990
14106
  }
13991
14107
  else {
13992
- this.prepare(node.type, node.isRootType);
13993
- }
13994
- }
13995
- preparedItemData(payload) {
13996
- const typeElement = this.systemService
13997
- .getObjectType(this.subfolder.type)
13998
- .elements
13999
- .filter(val => this.subfolder.data ? val.name === Object.keys(this.subfolder.data)[0] : null);
14000
- if (typeElement.length && typeElement[0].multiselect) {
14001
- Object.entries(payload).map(([key, value]) => payload[key] = [value]);
14108
+ this.previewUri = '';
14002
14109
  }
14003
- return payload;
14004
14110
  }
14005
- addToSubfolder() {
14006
- if (this.pendingChanges.check()) {
14007
- return;
14111
+ set dmsObject(item) {
14112
+ var _a;
14113
+ this._dmsObject = item;
14114
+ this.dmsObjectTitle = item.title || '...';
14115
+ this.setAttachments = [];
14116
+ if (this.attachmentsLoading) {
14117
+ // cancel any pending requests
14118
+ this.attachmentsLoading.unsubscribe();
14119
+ }
14120
+ if (item.content && item.content.contents && item.content.contents.length) {
14121
+ const file = item.content.contents[0] || {};
14122
+ this.previewFile = {
14123
+ uri: this.dms.getPreview(item.content.id, item.content.type, this.useVersion ? item.version : null),
14124
+ uriPdf: this.dms.getPreview(item.content.id, item.content.type, this.useVersion ? item.version : null, 'PDF'),
14125
+ mimetype: file.mimetype,
14126
+ mimegroup: file.mimegroup,
14127
+ size: file.size,
14128
+ path: file.path,
14129
+ mediaTypeName: item.typeName
14130
+ };
14131
+ if (!!((_a = file.mimegroup) === null || _a === void 0 ? void 0 : _a.match(/^mail|octet-stream/))) {
14132
+ this.slideUri = this.dms.getSlide(item.content.id, item.content.type, this.useVersion ? item.version : null, 256);
14133
+ this.attachmentsLoading = this.dms.getAttachments(item).subscribe(a => this.setAttachments = a);
14134
+ }
14135
+ }
14136
+ else {
14137
+ this.previewUri = '';
14008
14138
  }
14009
- let pid = this.locationParent.id;
14010
- const { data, type } = this.subfolder;
14011
- const payload = this.preparedItemData(data);
14012
- this.prepareService
14013
- .createPreparedItem(pid, type ? type : null)
14014
- .pipe(mergeMap(res => this.prepareService.updatePreparedItemIndexData(res.id, payload)))
14015
- .subscribe(() => {
14016
- this.router.navigateByUrl('/prepare');
14017
- }, Utils.throw(null, this.translate.instant('eo.add.prepare.fail.title'), this.translate.instant('eo.add.prepare.fail.msg')));
14018
- this.onClose.emit();
14019
14139
  }
14020
- fetchRootTypes() {
14021
- this.prepareService
14022
- .getPrepareRootTypes()
14023
- .subscribe((types) => {
14024
- this.rootTypes = this.sortTypes(types);
14025
- this.createAutocompleteList();
14026
- });
14140
+ selectAttachment(attachment, force) {
14141
+ const previewUri = attachment && this.isMedia ? this.getViewer({ uriPdf: attachment === null || attachment === void 0 ? void 0 : attachment.previewUri }).previewUri : attachment === null || attachment === void 0 ? void 0 : attachment.previewUri;
14142
+ this.loadDocument(previewUri || this.previewUri, force);
14027
14143
  }
14028
- createAutocompleteList() {
14029
- this.autocompleteList = this.rootTypes.map(type => {
14030
- return {
14031
- label: type.label,
14032
- location: this.translate.instant('eo.add.title.location.common'),
14033
- isRootType: true,
14034
- isSubfolder: false,
14035
- type
14036
- };
14037
- }).concat(this.locationTypes.map(type => {
14038
- return {
14039
- label: type.label,
14040
- location: `${this.translate.instant('eo.add.title.location')} ${this.locationParent.title}`,
14041
- isRootType: false,
14042
- isSubfolder: false,
14043
- type
14044
- };
14045
- }));
14046
- if (this.subfolder) {
14047
- this.autocompleteList.push({
14048
- label: this.subfolder.title,
14049
- location: `${this.translate.instant('eo.add.title.location')} ${this.locationParent.title}`,
14050
- isRootType: false,
14051
- isSubfolder: true,
14052
- });
14144
+ toogleViewer() {
14145
+ this.open = !this.disabled && !!this.previewUri;
14146
+ if (this.undockDisabled) {
14147
+ this.isUndocked = false;
14148
+ }
14149
+ if (this.open || this.isUndocked) {
14150
+ this.loadDocument(this.previewUri, this.isUndocked);
14053
14151
  }
14054
14152
  }
14055
- sortTypes(types) {
14056
- return types.sort((a, b) => {
14057
- if (a.isContextFolder && !b.isContextFolder) {
14058
- return -1;
14059
- }
14060
- if (!a.isContextFolder && b.isContextFolder) {
14061
- return 1;
14062
- }
14063
- return Utils.sortValues('label').call(this, a, b);
14153
+ refresh() {
14154
+ this.loadDocument(this.previewUri, true);
14155
+ }
14156
+ openPdfViewer(uri) {
14157
+ this.pdfjs.contentWindow.PDFViewerApplication.open(uri).then(() => (this.hasError = false)).catch((err) => {
14158
+ this.hasError = !this.isOctetStream;
14159
+ this.isNotSupported = this.isOctetStream;
14064
14160
  });
14161
+ // this.search();
14065
14162
  }
14066
- fetchAllowedChildTypes(loc) {
14067
- this.prepareService
14068
- .getPrepareChildTypes(loc.id)
14069
- .subscribe((res) => {
14070
- const { types, parent } = res;
14071
- this.locationParent = Utils.truncateString(parent, 30);
14072
- this.locationTypes = this.sortTypes(types);
14073
- this.locationParent.title = Utils.truncateString(parent['title'], 30);
14074
- if (loc.subFolder && this.isSubFolderAllowed(loc.subFolder, this.locationTypes)) {
14075
- this.subfolder = loc.subFolder;
14076
- this.subFolderDescription = loc.title + '; ' + this.subfolder.title;
14077
- }
14078
- this.createAutocompleteList();
14163
+ getViewer(file) {
14164
+ var _a, _b;
14165
+ const isVideo = !!((_a = file.mimegroup) === null || _a === void 0 ? void 0 : _a.match(/^audio|^video/));
14166
+ const defaultViewer = isVideo ? MediaComponent.VIDEO_VIEWER : MediaComponent.PDF_VIEWER;
14167
+ const fileExtension = ((_b = file.path) === null || _b === void 0 ? void 0 : _b.includes('.')) ? file.path.split('.').pop() : '';
14168
+ const mimeType = file.mimetype;
14169
+ const config = this.customConfig.find((c) => {
14170
+ const matchMT = !c.mimeType || (typeof c.mimeType === 'string' ? [c.mimeType] : c.mimeType).includes(mimeType === null || mimeType === void 0 ? void 0 : mimeType.toLowerCase());
14171
+ const matchFE = !c.fileExtension || (typeof c.fileExtension === 'string' ? [c.fileExtension] : c.fileExtension).includes((fileExtension).toLowerCase());
14172
+ return matchMT && matchFE && (!c.type || c.type === 'default');
14079
14173
  });
14174
+ const parameters = {
14175
+ file,
14176
+ path: location.origin + file.uri,
14177
+ pathPdf: location.origin + file.uriPdf,
14178
+ viewer: (config === null || config === void 0 ? void 0 : config.viewer) || defaultViewer,
14179
+ load: config === null || config === void 0 ? void 0 : config.load,
14180
+ fileExtension,
14181
+ mimeType,
14182
+ theme: '',
14183
+ defaultViewer,
14184
+ previewUri: ''
14185
+ };
14186
+ parameters.viewer = this.pluginsService.applyFunction(parameters.viewer, 'component, dmsObject, parameters', [this, this._dmsObject, parameters]) || defaultViewer;
14187
+ const extend = this.customConfig.find((c) => c.type === 'extend');
14188
+ if (extend)
14189
+ parameters.viewer = this.pluginsService.applyFunction(extend.viewer, 'component, dmsObject, parameters', [this, this._dmsObject, parameters]);
14190
+ parameters.previewUri = this.resolveUri(parameters.viewer, parameters);
14191
+ return parameters;
14080
14192
  }
14081
- isSubFolderAllowed(subFolder, locationTypes) {
14082
- return !!locationTypes.find(lt => this.systemService.implementsType(lt, subFolder.type));
14193
+ resolveUri(viewer, parameters) {
14194
+ return (viewer ? document.baseURI : '') + viewer
14195
+ .replace('${originalPath}', parameters.path)
14196
+ .replace('${path}', encodeURIComponent(parameters.path))
14197
+ .replace('${pathPdf}', encodeURIComponent(parameters.pathPdf))
14198
+ .replace('${fileExtension}', encodeURIComponent(parameters.fileExtension))
14199
+ .replace('${mimeType}', encodeURIComponent(parameters.mimeType))
14200
+ .replace('${theme}', encodeURIComponent(parameters.theme))
14201
+ .replace('${lang}', ContentPreviewService.mapLang(this.translate.currentLang));
14083
14202
  }
14084
- ngOnInit() {
14085
- this.fetchRootTypes();
14086
- this.activeLocationSubscription = this.locationService.activeLocation$
14087
- .subscribe((loc) => {
14088
- if (loc) {
14089
- this.fetchAllowedChildTypes(loc);
14203
+ undock(open = true) {
14204
+ if (this.undockDisabled) {
14205
+ return;
14206
+ }
14207
+ this.isUndocked = !this.isUndocked;
14208
+ if (!this.isUndocked) {
14209
+ ContentPreviewService.closeWin();
14210
+ }
14211
+ else {
14212
+ this._ngZone.runOutsideAngular(_ => {
14213
+ const interval = setInterval(() => {
14214
+ if (this.undockWin && !ContentPreviewService.undockWinActive()) {
14215
+ clearInterval(interval);
14216
+ this._ngZone.run(() => this.isUndocked && this.undock());
14217
+ }
14218
+ }, 1000);
14219
+ fromEvent(window, 'beforeunload')
14220
+ .pipe(takeWhile(() => this.isUndocked))
14221
+ .subscribe(e => ContentPreviewService.closeWin());
14222
+ });
14223
+ }
14224
+ if (open) {
14225
+ this.loadDocument(this.previewUri, true);
14226
+ }
14227
+ }
14228
+ openWindow(src, clean = false) {
14229
+ ContentPreviewService.undockWin(src);
14230
+ if (clean) {
14231
+ while (this.undockWin.document.body.firstChild) {
14232
+ this.undockWin.document.body.removeChild(this.undockWin.document.body.firstChild);
14090
14233
  }
14091
- else {
14092
- this.locationTypes = [];
14093
- this.locationParent = null;
14234
+ }
14235
+ else if (!src && !this.undockWin.document.querySelector('#no-file')) {
14236
+ this.undockWin.document.write(`<div id="no-file" style="opacity: 0.06; display: flex; height: 100%; width: 100%; align-items: center; justify-content: center;">
14237
+ <svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 48 48">
14238
+ <path d="M29 4H14.6c-.8 0-1.5.2-2 .6l27.2 27.2v-17L29 4zm-.7 11.6V7.8l7.8 7.8h-7.8zM43.4 40.8l-2.5 2.5-3.5-3.5c-.4.1-.8.2-1.2.2H14.6c-2
14239
+ 0-3.6-1.6-3.6-3.6V13.5L5.9 8.4l2.5-2.5L11 8.4l28.7 28.7 3.1 3.1.6.6z"/>
14240
+ </svg>
14241
+ <div>`);
14242
+ }
14243
+ }
14244
+ loadDocument(uri, force) {
14245
+ var _a, _b;
14246
+ if (force) {
14247
+ this.isLarge = false;
14248
+ }
14249
+ if (!force && (this.disabled || !uri || (uri === this.latestUri && !this.hasError))) {
14250
+ return false;
14251
+ }
14252
+ this.latestUri = uri || '';
14253
+ this.hasError = false;
14254
+ this.isNotSupported = false;
14255
+ if (this.isUndocked) {
14256
+ this.openWindow(this.latestUri);
14257
+ const onload = () => { var _a; return this.pluginsService.applyFunction((_a = this.viewer) === null || _a === void 0 ? void 0 : _a.load, 'iframe, component', [this.undockWin, this]); };
14258
+ this.iframeInit(this.undockWin, ((_a = this.viewer) === null || _a === void 0 ? void 0 : _a.load) && onload);
14259
+ return false;
14260
+ }
14261
+ if (this.isLarge) {
14262
+ return false;
14263
+ }
14264
+ if (this.isMedia) {
14265
+ this.renderer.setAttribute(this.iframeMedia.nativeElement, 'src', this.latestUri);
14266
+ const onload = () => { var _a; return this.pluginsService.applyFunction((_a = this.viewer) === null || _a === void 0 ? void 0 : _a.load, 'iframe, component', [this.iframeMedia.nativeElement, this]); };
14267
+ this.iframeInit(this.iframeMedia.nativeElement, ((_b = this.viewer) === null || _b === void 0 ? void 0 : _b.load) && onload);
14268
+ }
14269
+ else {
14270
+ if (!this.pdfjs) {
14271
+ this.pdfjs = this.iframe.nativeElement;
14272
+ this.renderer.setAttribute(this.pdfjs, 'src', MediaComponent.PDF_VIEWER.replace(/\?.*/, '?file=&'));
14273
+ this.renderer.listen(this.pdfjs, 'load', () => {
14274
+ this.pdfjs.contentWindow.PDFViewerApplicationOptions.set('sidebarViewOnLoad', 0);
14275
+ this.pdfjs.contentWindow.PDFViewerApplicationOptions.set('viewOnLoad', false);
14276
+ this.pdfjs.contentWindow.PDFViewerApplicationOptions.set('locale', ContentPreviewService.mapLang(this.translate.currentLang));
14277
+ this.pdfjs.contentWindow.document.webL10n.setLanguage(ContentPreviewService.mapLang(this.translate.currentLang));
14278
+ this.pdfjs.contentWindow.PDFViewerApplication._initializeL10n();
14279
+ this.pdfjs.contentWindow.PDFViewerApplicationOptions.set('viewerCssTheme', 1);
14280
+ this.pdfjs.contentWindow.PDFViewerApplication._forceCssTheme();
14281
+ this.pdfjs.contentWindow.PDFViewerApplication.appConfig.viewerContainer
14282
+ .addEventListener('dragenter', e => window.document.dispatchEvent(new DragEvent('dragenter', e)));
14283
+ this.pdfjs.contentWindow.PDFViewerApplication.appConfig.viewerContainer.addEventListener('drop', e => e.stopPropagation());
14284
+ this.openPdfViewer(this.latestUri);
14285
+ });
14094
14286
  }
14095
- });
14287
+ else if (this.pdfjs.contentWindow && this.pdfjs.contentWindow.PDFViewerApplication) {
14288
+ this.pdfjs.contentWindow.PDFViewerApplication.pdfSidebar.close();
14289
+ this.openPdfViewer(this.latestUri);
14290
+ }
14291
+ }
14096
14292
  }
14097
- ngOnDestroy() {
14098
- if (this.activeLocationSubscription) {
14099
- this.activeLocationSubscription.unsubscribe();
14293
+ /**
14294
+ * Custom search inside PDF.JS based on search term
14295
+ * @param term search term
14296
+ * @param win iframe window
14297
+ */
14298
+ searchPDF(term = '', win) {
14299
+ var _a, _b;
14300
+ // remove all special characters
14301
+ term = (term || '').replace(/[\"|\*]/g, '').trim();
14302
+ if (term && ((_b = (_a = win === null || win === void 0 ? void 0 : win.PDFViewerApplication) === null || _a === void 0 ? void 0 : _a.appConfig) === null || _b === void 0 ? void 0 : _b.findBar)) {
14303
+ // win.PDFViewerApplication.findController.executeCommand('find', {
14304
+ // caseSensitive: false,
14305
+ // findPrevious: undefined,
14306
+ // highlightAll: true,
14307
+ // phraseSearch: true,
14308
+ // query: term
14309
+ // });
14310
+ win.PDFViewerApplication.appConfig.findBar.findField.value = term;
14311
+ win.PDFViewerApplication.appConfig.findBar.highlightAllCheckbox.checked = true;
14312
+ win.PDFViewerApplication.appConfig.findBar.caseSensitiveCheckbox.checked = false;
14100
14313
  }
14101
14314
  }
14102
- trackByFn(index, item) {
14103
- return index;
14315
+ preventDropEvent(win) {
14316
+ var _a, _b, _c, _d;
14317
+ if ((_b = (_a = this.iframe) === null || _a === void 0 ? void 0 : _a.src) === null || _b === void 0 ? void 0 : _b.startsWith(window.location.origin)) {
14318
+ (_c = win === null || win === void 0 ? void 0 : win.document) === null || _c === void 0 ? void 0 : _c.addEventListener('drop', (e) => e.stopPropagation());
14319
+ // dispach drag & drop events to main window
14320
+ (_d = win === null || win === void 0 ? void 0 : win.document) === null || _d === void 0 ? void 0 : _d.addEventListener('dragenter', (e) => {
14321
+ window.document.dispatchEvent(new DragEvent('dragenter', e));
14322
+ setTimeout(() => window.document.dispatchEvent(new DragEvent('dragleave', e)), 10);
14323
+ });
14324
+ }
14325
+ }
14326
+ iframeInit(iframe = this.iframe, onload) {
14327
+ if (iframe) {
14328
+ iframe._init || fromEvent(iframe, 'load')
14329
+ .pipe(takeUntil(this.componentDestroyed$))
14330
+ .subscribe(() => {
14331
+ const win = this.setApi(iframe);
14332
+ onload && onload();
14333
+ setTimeout(() => {
14334
+ // this.loading = false;
14335
+ this.searchPDF(this.searchTerm, win);
14336
+ this.preventDropEvent(win);
14337
+ }, 100);
14338
+ });
14339
+ iframe._init = !!this.setApi(iframe);
14340
+ }
14341
+ }
14342
+ setApi(iframe) {
14343
+ // set api to iframe window
14344
+ const win = (iframe === null || iframe === void 0 ? void 0 : iframe.contentWindow) || iframe;
14345
+ win['api'] = window['api'];
14346
+ return win;
14347
+ }
14348
+ ngAfterViewInit() {
14349
+ }
14350
+ ngOnDestroy() {
14351
+ // return ContentPreviewService.undockWinActive() && this.openWindow('', true);
14104
14352
  }
14105
14353
  }
14106
- AppAddDialogComponent.decorators = [
14354
+ MediaComponent.VIDEO_VIEWER = 'assets/_default/api/video/?path=${path}&mimeType=${mimeType}&fileExtension=${fileExtension}&lang=${lang}&theme=${theme}';
14355
+ MediaComponent.PDF_VIEWER = 'assets/_default/api/pdf/web/viewer.html?file=&path=${path}&pathPdf=${pathPdf}&mimeType=${mimeType}&fileExtension=${fileExtension}&lang=${lang}&theme=${theme}&css=%23toolbarViewerRight%20%23print%7Bdisplay%3Ablock!important%3B%7D';
14356
+ MediaComponent.decorators = [
14107
14357
  { type: Component, args: [{
14108
- selector: 'eo-app-add-dialog',
14109
- template: "<section class=\"autocomplete\">\r\n <p-autoComplete [(ngModel)]=\"selectedNode\" [minLength]=\"1\" [delay]=\"500\" #autocomplete\r\n [suggestions]=\"autocompleteRes\" field=\"label\"\r\n [forceSelection]=\"true\"\r\n (onSelect)=\"onSelect($event)\"\r\n (completeMethod)=\"autocompleteFn($event)\">\r\n \r\n <ng-template let-item pTemplate=\"item\">\r\n <span class=\"ui-autocomplete-token-label\" title=\"{{item.label}} ({{item.location}})\">\r\n <strong>{{item.label}}</strong>\r\n <span>{{item.location}}</span>\r\n </span>\r\n </ng-template>\r\n </p-autoComplete>\r\n</section>\r\n\r\n<section class=\"type-lists\">\r\n <section class=\"section location\" *ngIf=\"locationParent\">\r\n <div class=\"subhead\"><span translate>eo.add.title.location</span><span> \"{{locationParent.title}}\"</span></div>\r\n <div class=\"type sub\" (click)=\"addToSubfolder()\" *ngIf=\"subfolder\">\r\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_create_new_folder.svg'\"></eo-icon>\r\n <div>\r\n <div class=\"label\">{{'eo.add.title.location.subfolder'|translate: ({folder: subfolder.title})}}</div>\r\n <div class=\"group\">{{subFolderDescription}}</div>\r\n </div>\r\n </div>\r\n <div class=\"type\" *ngFor=\"let type of locationTypes; trackBy: trackByFn\" (click)=\"prepare(type)\">\r\n <eo-icon [objectType]=\"type\"></eo-icon>\r\n <div>\r\n <div class=\"label\">{{type.label}}</div>\r\n <div class=\"group\">{{type.group}}</div>\r\n </div>\r\n </div>\r\n </section>\r\n \r\n <section class=\"section general\" *ngIf=\"rootTypes.length; else noRootTypes\">\r\n <div class=\"subhead\"><span translate>eo.add.title.location.common</span></div>\r\n <div class=\"type\" *ngFor=\"let type of rootTypes; trackBy: trackByFn\"\r\n [ngClass]=\"{context: type.isContextFolder}\"\r\n (click)=\"prepare(type, true)\">\r\n <eo-icon [objectType]=\"type\"></eo-icon>\r\n <div>\r\n <div class=\"label\">{{type.label}}</div>\r\n <div class=\"group\">{{type.group}}</div>\r\n </div>\r\n </div>\r\n </section>\r\n</section>\r\n\r\n<ng-template #noRootTypes>\r\n <div *ngIf=\"!locationParent\">\r\n <span class=\"empty__root-types\" translate>eo.add.empty.root.types</span>\r\n </div>\r\n</ng-template>\r\n",
14110
- styles: ["::ng-deep .eo-dialog-content.add--content{max-height:620px;overflow:hidden}:host{display:flex;flex:1;flex-direction:column;min-height:0;min-width:0}:host ::ng-deep p-autocomplete{width:100%}:host ::ng-deep p-autocomplete .ui-autocomplete input.ui-inputtext{border:0;box-shadow:0 2px 2px 0 rgba(0,0,0,.2);font-size:var(--font-title);padding:calc(var(--app-pane-padding)/2)}:host ::ng-deep p-autocomplete .ui-autocomplete-token-label{display:flex;flex-flow:column}:host ::ng-deep p-autocomplete .ui-autocomplete-token-label>span{font-size:var(--font-hint)}:host .autocomplete{background-color:var(--color-accent);display:flex;padding:var(--app-pane-padding)}:host .type-lists{display:flex;flex:1;flex-direction:row;min-height:0;min-width:0;overflow:auto;padding:var(--app-pane-padding) 0}:host .type-lists .section{padding:0 var(--app-pane-padding)}:host .type-lists .section .subhead{color:var(--color-accent);font-size:var(--font-subhead);font-weight:var(--font-weight-normal);margin:0;padding:calc(var(--app-pane-padding)/2)}:host .type-lists .section .type{-moz-transition:background-color var(--app-default-transition-duration) ease-in-out;-o-transition:background-color var(--app-default-transition-duration) ease-in-out;-webkit-transition:background-color var(--app-default-transition-duration) ease-in-out;align-items:center;border-top:1px solid rgba(var(--color-black-rgb),.06);cursor:pointer;display:flex;flex-flow:row nowrap;padding:calc(var(--app-pane-padding)/4) var(--app-pane-padding);transition:background-color var(--app-default-transition-duration) ease-in-out}:host .type-lists .section .type.context>div .label{font-weight:var(--font-weight-bold)}:host .type-lists .section .type.context eo-icon{background-color:rgba(var(--color-black-rgb),.15)}:host .type-lists .section .type.sub{padding-bottom:calc(var(--app-pane-padding)/2);padding-top:calc(var(--app-pane-padding)/2)}:host .type-lists .section .type.sub>div .label{font-weight:var(--font-weight-bold)}:host .type-lists .section .type eo-icon{border-radius:2px;box-sizing:content-box;color:var(--text-color-caption);flex:0 0 auto;height:18px;padding:2px;width:18px}:host .type-lists .section .type>div{flex:1 1 auto;padding:0 var(--app-pane-padding)}:host .type-lists .section .type>div .label{color:var(--text-color-body)}:host .type-lists .section .type>div .group{color:var(--text-color-caption);font-size:var(--font-hint)}:host .type-lists .section .type:hover{background-color:var(--panel-background-grey)}:host .type-lists .empty__root-types{padding:8px}"]
14358
+ selector: 'eo-media',
14359
+ template: "<div [hidden]=\"!open\">\r\n\r\n <!-- attachments overlay -->\r\n <div class=\"attachments\" *ngIf=\"attachments?.length\" [ngClass]=\"{notmain: latestUri !== previewUri && !attachmentsShown, active: attachmentsShown}\"\r\n (eoOutsideClick)=\"attachmentsShown = false\">\r\n <div class=\"attachments-list\" *ngIf=\"attachmentsShown\">\r\n <div class=\"attachment main\" (click)=\"selectAttachment(null, isLarge)\" [ngClass]=\"{current: latestUri === previewUri}\">{{dmsObjectTitle}}</div>\r\n <div class=\"attachment\" *ngFor=\"let a of attachments\" (click)=\"selectAttachment(a, isLarge)\" [ngClass]=\"{current: latestUri === a.previewUri}\">\r\n {{a.name}}\r\n </div>\r\n </div>\r\n\r\n <eo-icon class=\"button\" [badge]=\"attachments?.length\"\r\n (click)=\"attachmentsShown = !attachmentsShown\"\r\n [iconSrc]=\"attachmentsShown ? 'assets/_default/svg/ic_clear.svg' : 'assets/_default/svg/ic_attachment.svg'\"></eo-icon>\r\n </div>\r\n\r\n <div class=\"preview-container\" [style.overflow]=\"'hidden'\" [hidden]=\"hasError\">\r\n <iframe [hidden]=\"isNotSupported || isLarge || isUndocked || isMedia\" #iframe height=\"100%\" width=\"100%\" frameborder=\"0\"></iframe>\r\n <iframe [hidden]=\"isNotSupported || isLarge || isUndocked || !isMedia\" #iframeMedia height=\"100%\" width=\"100%\" frameborder=\"0\"></iframe>\r\n <div class=\"slide\" *ngIf=\"isNotSupported || isLarge || isUndocked\">\r\n <!--<img *ngIf=\"!isMedia\" [src]=\"slideUri\" alt=\"preview\">-->\r\n <eo-icon *ngIf=\"mediaType\" [objectType]=\"mediaType\"></eo-icon>\r\n <div class=\"large-content\" *ngIf=\"isLarge && !isUndocked\" (click)=\"loadDocument(latestUri, true)\" translate>eo.object.preview.proceed</div>\r\n <div class=\"large-content not-supported\" *ngIf=\"isNotSupported\" translate>eo.object.preview.not.supported</div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div [hidden]=\"!hasError && open\" class=\"empty-container\">\r\n <eo-icon class=\"nofile\" [iconSrc]=\"'assets/_default/svg/ic_no-file.svg'\"></eo-icon>\r\n</div>\r\n\r\n<eo-icon *ngIf=\"!undockDisabled\" class=\"button undock\" [iconSrc]=\"'assets/_default/svg/ic_undock.svg'\" (click)=\"undock()\"></eo-icon>",
14360
+ providers: [ContentPreviewService],
14361
+ styles: [":host .empty-container{align-items:center;bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0}:host .empty-container .nofile{height:128px;opacity:.06;width:128px}:host .button.undock{background-color:rgba(var(--color-primary-rgb),.6);bottom:var(--app-pane-padding);opacity:.2;position:absolute;right:var(--app-pane-padding)}:host .button.undock:hover{opacity:.5}:host .preview-container{bottom:0;left:0;position:absolute;right:0;top:0}:host .preview-container .slide{align-items:center;display:flex;flex:1;flex-direction:column;height:100%;justify-content:center;min-height:0;min-width:0}:host .preview-container .slide .large-content{background-color:rgba(var(--color-primary-rgb),.5);color:var(--color-white);cursor:pointer;display:flex;flex:1;flex-direction:row;justify-content:center;min-height:0;min-width:0;padding:var(--app-pane-padding);position:absolute;top:0;width:100%}:host .preview-container .slide .large-content.not-supported,:host .preview-container .slide .large-content:hover{background-color:rgba(var(--color-primary-rgb),.9)}:host .preview-container .slide .large-content.not-supported{cursor:inherit}:host .preview-container .slide img{padding:var(--app-pane-padding);width:100%}:host .preview-container .slide eo-icon{height:128px;opacity:.2;width:128px}:host .attachments{align-items:flex-end;background-color:rgba(var(--color-primary-rgb),.6);border-radius:2px;bottom:calc(var(--app-pane-padding)*3);color:var(--color-white);display:flex;flex-flow:row;max-width:calc(100% - 16px);position:absolute;right:calc(var(--app-pane-padding)/2);z-index:5}:host .attachments:hover{background-color:rgba(var(--color-primary-rgb),.9)}:host .attachments eo-icon{flex:0 0 auto;margin:calc(var(--app-pane-padding)/2)}:host .attachments .attachments-list{display:flex;flex:1;flex-direction:row;flex-flow:wrap;max-height:150px;min-height:0;min-width:0;overflow:auto;padding:calc(var(--app-pane-padding)/2)}:host .attachments .attachments-list .attachment{-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;background-color:rgba(var(--color-white-rgb),.1);border:1px solid rgba(var(--color-white-rgb),0);border-radius:4px;cursor:pointer;display:inline-block;margin:calc(var(--app-pane-padding)/8);max-width:none;overflow:hidden;padding:calc(var(--app-pane-padding)/4);text-overflow:ellipsis;transition:all var(--app-default-transition-duration) ease-in-out;white-space:nowrap}:host .attachments .attachments-list .attachment:hover{border-color:rgba(var(--color-white-rgb),.5)}:host .attachments .attachments-list .attachment.current{background-color:var(--color-accent)}:host .attachments .attachments-list .attachment.main{background-color:var(--color-primary);flex:1 1 100%;order:100}:host .attachments .attachments-list .attachment:not(.main){font-style:italic}:host .attachments.notmain{background-color:var(--color-accent)}:host .attachments.active{align-items:center;background-color:rgba(var(--color-primary-rgb),.9);bottom:calc(var(--app-pane-padding)/2)}"]
14111
14362
  },] }
14112
14363
  ];
14113
- AppAddDialogComponent.ctorParameters = () => [
14114
- { type: PrepareService },
14115
- { type: Router },
14116
- { type: SystemService },
14364
+ MediaComponent.ctorParameters = () => [
14117
14365
  { type: TranslateService },
14118
- { type: PendingChangesService },
14119
- { type: LocationService }
14366
+ { type: DmsService },
14367
+ { type: Renderer2 },
14368
+ { type: SystemService },
14369
+ { type: NgZone },
14370
+ { type: Config },
14371
+ { type: PluginsService },
14372
+ { type: BackendService }
14120
14373
  ];
14121
- AppAddDialogComponent.propDecorators = {
14122
- onClose: [{ type: Output }]
14374
+ MediaComponent.propDecorators = {
14375
+ undockDisabled: [{ type: Input }],
14376
+ enableCloseBtn: [{ type: Input }],
14377
+ useVersion: [{ type: Input }],
14378
+ open: [{ type: HostBinding, args: ['class.open',] }],
14379
+ codesystem: [{ type: ViewChild, args: ['codesystem',] }],
14380
+ iframe: [{ type: ViewChild, args: ['iframe', { static: true },] }],
14381
+ iframeMedia: [{ type: ViewChild, args: ['iframeMedia', { static: true },] }],
14382
+ setAttachments: [{ type: Input, args: ['attachments',] }],
14383
+ setSearchTerm: [{ type: Input, args: ['searchTerm',] }],
14384
+ disabled: [{ type: Input }],
14385
+ previewUri: [{ type: Input }],
14386
+ previewFile: [{ type: Input }],
14387
+ dmsObject: [{ type: Input }]
14123
14388
  };
14124
14389
 
14125
- class PreventDoubleClickDirective {
14126
- constructor() {
14127
- this.debounceTime = 500;
14128
- this.debounceClick = new EventEmitter();
14129
- this.clicks = new Subject();
14130
- }
14131
- ngOnInit() {
14132
- this.subscription = this.clicks.pipe(throttleTime(this.debounceTime)).subscribe(e => this.debounceClick.emit(e));
14133
- }
14134
- ngOnDestroy() {
14135
- this.subscription.unsubscribe();
14136
- }
14137
- clickEvent(event) {
14138
- //TODO: does not support LinkAction (ctrl + click)
14139
- event.preventDefault();
14140
- event.stopPropagation();
14141
- this.clicks.next(event);
14142
- }
14390
+ class MediaModule {
14143
14391
  }
14144
- PreventDoubleClickDirective.decorators = [
14145
- { type: Directive, args: [{
14146
- selector: '[eoPreventDoubleClick]'
14392
+ MediaModule.decorators = [
14393
+ { type: NgModule, args: [{
14394
+ imports: [
14395
+ CommonModule,
14396
+ UiModule,
14397
+ FormsModule,
14398
+ FormElementsModule
14399
+ ],
14400
+ declarations: [MediaComponent],
14401
+ exports: [MediaComponent]
14147
14402
  },] }
14148
- ];
14149
- PreventDoubleClickDirective.ctorParameters = () => [];
14150
- PreventDoubleClickDirective.propDecorators = {
14151
- debounceTime: [{ type: Input }],
14152
- debounceClick: [{ type: Output }],
14153
- clickEvent: [{ type: HostListener, args: ['click', ['$event'],] }]
14154
- };
14403
+ ];
14155
14404
 
14156
- class ActionComponentAnchorDirective {
14157
- constructor(viewContainerRef) {
14158
- this.viewContainerRef = viewContainerRef;
14159
- }
14405
+ /**
14406
+ * @module
14407
+ * @description
14408
+ * Module rendering a dms objects form.
14409
+ */
14410
+ class ObjectFormModule {
14160
14411
  }
14161
- ActionComponentAnchorDirective.decorators = [
14162
- { type: Directive, args: [{
14163
- selector: '[eoActionComponentAnchor]'
14412
+ ObjectFormModule.decorators = [
14413
+ { type: NgModule, args: [{
14414
+ imports: [
14415
+ CommonModule,
14416
+ FormsModule,
14417
+ ReactiveFormsModule,
14418
+ SharedModule,
14419
+ TabViewModule,
14420
+ FieldsetModule,
14421
+ UiModule,
14422
+ DialogModule,
14423
+ PipesModule,
14424
+ AgGridModule,
14425
+ ShortcutsModule,
14426
+ FormElementsModule,
14427
+ SplitModule,
14428
+ ResultListModule,
14429
+ ListContainerModule,
14430
+ GridModule,
14431
+ MediaModule
14432
+ ],
14433
+ exports: [ObjectFormComponent, ObjectFormGroupComponent, ObjectFormEditComponent, FormElementComponent],
14434
+ providers: [ObjectFormHelperService],
14435
+ declarations: [
14436
+ ObjectFormComponent,
14437
+ ObjectFormGroupComponent,
14438
+ ObjectFormEditComponent,
14439
+ FormElementComponent,
14440
+ FormElementTableComponent,
14441
+ RowEditComponent
14442
+ ]
14164
14443
  },] }
14165
- ];
14166
- ActionComponentAnchorDirective.ctorParameters = () => [
14167
- { type: ViewContainerRef }
14168
14444
  ];
14169
14445
 
14170
- class ActionMenuComponent extends UnsubscribeOnDestroy {
14171
- constructor(actionService, router, viewContainerRef, componentFactoryResolver) {
14172
- super();
14173
- this.actionService = actionService;
14446
+ class AppAddDialogComponent {
14447
+ constructor(prepareService, router, systemService, translate, pendingChanges, locationService) {
14448
+ this.prepareService = prepareService;
14174
14449
  this.router = router;
14175
- this.viewContainerRef = viewContainerRef;
14176
- this.componentFactoryResolver = componentFactoryResolver;
14177
- this.actionLists = {
14178
- common: [], further: []
14179
- };
14180
- this.subActionsListHeader = '';
14181
- this.showComponent = false;
14182
- this.showMenu = false;
14183
- this.loading = false;
14184
- // subscribe for visibility observable indicating whether to show or hide the actions
14185
- this.actionService
14186
- .actionsShowing$.pipe(takeUntil(this.componentDestroyed$))
14187
- .subscribe((cmd) => {
14188
- if (!this.showMenu && cmd.show) {
14189
- this.selection = cmd.selection;
14190
- this.target = cmd.target;
14191
- this.showActionMenu();
14192
- }
14193
- else if (this.showMenu && !cmd.show) {
14194
- this.hideActionMenu();
14195
- }
14196
- });
14197
- this.router.events
14198
- .pipe(takeUntil(this.componentDestroyed$), filter(evt => evt instanceof NavigationStart))
14199
- .subscribe(() => this.hide());
14200
- }
14201
- getActions() {
14202
- this.actionService
14203
- .getActionsList(this.selection, this.viewContainerRef)
14204
- .subscribe(actionsList => {
14205
- this.actionLists.common = actionsList.filter(actionListEntry => actionListEntry.action.group === 'common');
14206
- this.actionLists.further = actionsList.filter(actionListEntry => actionListEntry.action.group === 'further');
14207
- });
14208
- }
14209
- getMoreActions() {
14210
- this.loading = true;
14211
- this.actionService
14212
- .getMoreActions(this.selection, this.viewContainerRef)
14213
- .subscribe(actionList => {
14214
- this.loading = false;
14215
- this.actionLists.further = this.actionLists.further.concat(actionList).sort(Utils.sortValues('action.label'));
14216
- }, Utils.throw(() => this.loading = false));
14450
+ this.systemService = systemService;
14451
+ this.translate = translate;
14452
+ this.pendingChanges = pendingChanges;
14453
+ this.locationService = locationService;
14454
+ this.onClose = new EventEmitter();
14455
+ this.rootTypes = [];
14456
+ this.locationTypes = [];
14217
14457
  }
14218
- hide() {
14219
- this.actionService.hideActions();
14458
+ prepare(type, isRootType = false) {
14459
+ if (this.pendingChanges.check()) {
14460
+ return;
14461
+ }
14462
+ let pid = null;
14463
+ if (!isRootType && this.locationParent) {
14464
+ pid = this.locationParent.id;
14465
+ }
14466
+ this.prepareService
14467
+ .createPreparedItem(pid, type.name)
14468
+ .subscribe(() => {
14469
+ this.router.navigateByUrl('/prepare');
14470
+ }, Utils.throw(null, this.translate.instant('eo.add.prepare.fail.title'), this.translate.instant('eo.add.prepare.fail.msg')));
14471
+ this.onClose.emit();
14220
14472
  }
14221
- showActionDescription(i, event) {
14222
- event.stopPropagation();
14223
- event.preventDefault();
14224
- this.actionDescription = i === this.actionDescription ? null : i;
14473
+ autocompleteFn(evt) {
14474
+ this.autocompleteRes = this.autocompleteList.filter(type => {
14475
+ return type.label.toLowerCase().indexOf(evt.query.toLowerCase()) != -1;
14476
+ });
14225
14477
  }
14226
- showActionMenu() {
14227
- this.getActions();
14228
- if (this.target === 'DMS_OBJECT') {
14229
- this.getMoreActions();
14478
+ onSelect(node) {
14479
+ if (node.isSubfolder) {
14480
+ this.addToSubfolder();
14481
+ }
14482
+ else {
14483
+ this.prepare(node.type, node.isRootType);
14230
14484
  }
14231
- this.showMenu = true;
14485
+ }
14486
+ preparedItemData(payload) {
14487
+ const typeElement = this.systemService
14488
+ .getObjectType(this.subfolder.type)
14489
+ .elements
14490
+ .filter(val => this.subfolder.data ? val.name === Object.keys(this.subfolder.data)[0] : null);
14491
+ if (typeElement.length && typeElement[0].multiselect) {
14492
+ Object.entries(payload).map(([key, value]) => payload[key] = [value]);
14493
+ }
14494
+ return payload;
14495
+ }
14496
+ addToSubfolder() {
14497
+ if (this.pendingChanges.check()) {
14498
+ return;
14499
+ }
14500
+ let pid = this.locationParent.id;
14501
+ const { data, type } = this.subfolder;
14502
+ const payload = this.preparedItemData(data);
14503
+ this.prepareService
14504
+ .createPreparedItem(pid, type ? type : null)
14505
+ .pipe(mergeMap(res => this.prepareService.updatePreparedItemIndexData(res.id, payload)))
14506
+ .subscribe(() => {
14507
+ this.router.navigateByUrl('/prepare');
14508
+ }, Utils.throw(null, this.translate.instant('eo.add.prepare.fail.title'), this.translate.instant('eo.add.prepare.fail.msg')));
14509
+ this.onClose.emit();
14510
+ }
14511
+ fetchRootTypes() {
14512
+ this.prepareService
14513
+ .getPrepareRootTypes()
14514
+ .subscribe((types) => {
14515
+ this.rootTypes = this.sortTypes(types);
14516
+ this.createAutocompleteList();
14517
+ });
14518
+ }
14519
+ createAutocompleteList() {
14520
+ this.autocompleteList = this.rootTypes.map(type => {
14521
+ return {
14522
+ label: type.label,
14523
+ location: this.translate.instant('eo.add.title.location.common'),
14524
+ isRootType: true,
14525
+ isSubfolder: false,
14526
+ type
14527
+ };
14528
+ }).concat(this.locationTypes.map(type => {
14529
+ return {
14530
+ label: type.label,
14531
+ location: `${this.translate.instant('eo.add.title.location')} ${this.locationParent.title}`,
14532
+ isRootType: false,
14533
+ isSubfolder: false,
14534
+ type
14535
+ };
14536
+ }));
14537
+ if (this.subfolder) {
14538
+ this.autocompleteList.push({
14539
+ label: this.subfolder.title,
14540
+ location: `${this.translate.instant('eo.add.title.location')} ${this.locationParent.title}`,
14541
+ isRootType: false,
14542
+ isSubfolder: true,
14543
+ });
14544
+ }
14545
+ }
14546
+ sortTypes(types) {
14547
+ return types.sort((a, b) => {
14548
+ if (a.isContextFolder && !b.isContextFolder) {
14549
+ return -1;
14550
+ }
14551
+ if (!a.isContextFolder && b.isContextFolder) {
14552
+ return 1;
14553
+ }
14554
+ return Utils.sortValues('label').call(this, a, b);
14555
+ });
14556
+ }
14557
+ fetchAllowedChildTypes(loc) {
14558
+ this.prepareService
14559
+ .getPrepareChildTypes(loc.id)
14560
+ .subscribe((res) => {
14561
+ const { types, parent } = res;
14562
+ this.locationParent = Utils.truncateString(parent, 30);
14563
+ this.locationTypes = this.sortTypes(types);
14564
+ this.locationParent.title = Utils.truncateString(parent['title'], 30);
14565
+ if (loc.subFolder && this.isSubFolderAllowed(loc.subFolder, this.locationTypes)) {
14566
+ this.subfolder = loc.subFolder;
14567
+ this.subFolderDescription = loc.title + '; ' + this.subfolder.title;
14568
+ }
14569
+ this.createAutocompleteList();
14570
+ });
14571
+ }
14572
+ isSubFolderAllowed(subFolder, locationTypes) {
14573
+ return !!locationTypes.find(lt => this.systemService.implementsType(lt, subFolder.type));
14574
+ }
14575
+ ngOnInit() {
14576
+ this.fetchRootTypes();
14577
+ this.activeLocationSubscription = this.locationService.activeLocation$
14578
+ .subscribe((loc) => {
14579
+ if (loc) {
14580
+ this.fetchAllowedChildTypes(loc);
14581
+ }
14582
+ else {
14583
+ this.locationTypes = [];
14584
+ this.locationParent = null;
14585
+ }
14586
+ });
14587
+ }
14588
+ ngOnDestroy() {
14589
+ if (this.activeLocationSubscription) {
14590
+ this.activeLocationSubscription.unsubscribe();
14591
+ }
14592
+ }
14593
+ trackByFn(index, item) {
14594
+ return index;
14595
+ }
14596
+ }
14597
+ AppAddDialogComponent.decorators = [
14598
+ { type: Component, args: [{
14599
+ selector: 'eo-app-add-dialog',
14600
+ template: "<section class=\"autocomplete\">\r\n <p-autoComplete [(ngModel)]=\"selectedNode\" [minLength]=\"1\" [delay]=\"500\" #autocomplete\r\n [suggestions]=\"autocompleteRes\" field=\"label\"\r\n [forceSelection]=\"true\"\r\n (onSelect)=\"onSelect($event)\"\r\n (completeMethod)=\"autocompleteFn($event)\">\r\n \r\n <ng-template let-item pTemplate=\"item\">\r\n <span class=\"ui-autocomplete-token-label\" title=\"{{item.label}} ({{item.location}})\">\r\n <strong>{{item.label}}</strong>\r\n <span>{{item.location}}</span>\r\n </span>\r\n </ng-template>\r\n </p-autoComplete>\r\n</section>\r\n\r\n<section class=\"type-lists\">\r\n <section class=\"section location\" *ngIf=\"locationParent\">\r\n <div class=\"subhead\"><span translate>eo.add.title.location</span><span> \"{{locationParent.title}}\"</span></div>\r\n <div class=\"type sub\" (click)=\"addToSubfolder()\" *ngIf=\"subfolder\">\r\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_create_new_folder.svg'\"></eo-icon>\r\n <div>\r\n <div class=\"label\">{{'eo.add.title.location.subfolder'|translate: ({folder: subfolder.title})}}</div>\r\n <div class=\"group\">{{subFolderDescription}}</div>\r\n </div>\r\n </div>\r\n <div class=\"type\" *ngFor=\"let type of locationTypes; trackBy: trackByFn\" (click)=\"prepare(type)\">\r\n <eo-icon [objectType]=\"type\"></eo-icon>\r\n <div>\r\n <div class=\"label\">{{type.label}}</div>\r\n <div class=\"group\">{{type.group}}</div>\r\n </div>\r\n </div>\r\n </section>\r\n \r\n <section class=\"section general\" *ngIf=\"rootTypes.length; else noRootTypes\">\r\n <div class=\"subhead\"><span translate>eo.add.title.location.common</span></div>\r\n <div class=\"type\" *ngFor=\"let type of rootTypes; trackBy: trackByFn\"\r\n [ngClass]=\"{context: type.isContextFolder}\"\r\n (click)=\"prepare(type, true)\">\r\n <eo-icon [objectType]=\"type\"></eo-icon>\r\n <div>\r\n <div class=\"label\">{{type.label}}</div>\r\n <div class=\"group\">{{type.group}}</div>\r\n </div>\r\n </div>\r\n </section>\r\n</section>\r\n\r\n<ng-template #noRootTypes>\r\n <div *ngIf=\"!locationParent\">\r\n <span class=\"empty__root-types\" translate>eo.add.empty.root.types</span>\r\n </div>\r\n</ng-template>\r\n",
14601
+ styles: ["::ng-deep .eo-dialog-content.add--content{max-height:620px;overflow:hidden}:host{display:flex;flex:1;flex-direction:column;min-height:0;min-width:0}:host ::ng-deep p-autocomplete{width:100%}:host ::ng-deep p-autocomplete .ui-autocomplete input.ui-inputtext{border:0;box-shadow:0 2px 2px 0 rgba(0,0,0,.2);font-size:var(--font-title);padding:calc(var(--app-pane-padding)/2)}:host ::ng-deep p-autocomplete .ui-autocomplete-token-label{display:flex;flex-flow:column}:host ::ng-deep p-autocomplete .ui-autocomplete-token-label>span{font-size:var(--font-hint)}:host .autocomplete{background-color:var(--color-accent);display:flex;padding:var(--app-pane-padding)}:host .type-lists{display:flex;flex:1;flex-direction:row;min-height:0;min-width:0;overflow:auto;padding:var(--app-pane-padding) 0}:host .type-lists .section{padding:0 var(--app-pane-padding)}:host .type-lists .section .subhead{color:var(--color-accent);font-size:var(--font-subhead);font-weight:var(--font-weight-normal);margin:0;padding:calc(var(--app-pane-padding)/2)}:host .type-lists .section .type{-moz-transition:background-color var(--app-default-transition-duration) ease-in-out;-o-transition:background-color var(--app-default-transition-duration) ease-in-out;-webkit-transition:background-color var(--app-default-transition-duration) ease-in-out;align-items:center;border-top:1px solid rgba(var(--color-black-rgb),.06);cursor:pointer;display:flex;flex-flow:row nowrap;padding:calc(var(--app-pane-padding)/4) var(--app-pane-padding);transition:background-color var(--app-default-transition-duration) ease-in-out}:host .type-lists .section .type.context>div .label{font-weight:var(--font-weight-bold)}:host .type-lists .section .type.context eo-icon{background-color:rgba(var(--color-black-rgb),.15)}:host .type-lists .section .type.sub{padding-bottom:calc(var(--app-pane-padding)/2);padding-top:calc(var(--app-pane-padding)/2)}:host .type-lists .section .type.sub>div .label{font-weight:var(--font-weight-bold)}:host .type-lists .section .type eo-icon{border-radius:2px;box-sizing:content-box;color:var(--text-color-caption);flex:0 0 auto;height:18px;padding:2px;width:18px}:host .type-lists .section .type>div{flex:1 1 auto;padding:0 var(--app-pane-padding)}:host .type-lists .section .type>div .label{color:var(--text-color-body)}:host .type-lists .section .type>div .group{color:var(--text-color-caption);font-size:var(--font-hint)}:host .type-lists .section .type:hover{background-color:var(--panel-background-grey)}:host .type-lists .empty__root-types{padding:8px}"]
14602
+ },] }
14603
+ ];
14604
+ AppAddDialogComponent.ctorParameters = () => [
14605
+ { type: PrepareService },
14606
+ { type: Router },
14607
+ { type: SystemService },
14608
+ { type: TranslateService },
14609
+ { type: PendingChangesService },
14610
+ { type: LocationService }
14611
+ ];
14612
+ AppAddDialogComponent.propDecorators = {
14613
+ onClose: [{ type: Output }]
14614
+ };
14615
+
14616
+ class PreventDoubleClickDirective {
14617
+ constructor() {
14618
+ this.debounceTime = 500;
14619
+ this.debounceClick = new EventEmitter();
14620
+ this.clicks = new Subject();
14621
+ }
14622
+ ngOnInit() {
14623
+ this.subscription = this.clicks.pipe(throttleTime(this.debounceTime)).subscribe(e => this.debounceClick.emit(e));
14624
+ }
14625
+ ngOnDestroy() {
14626
+ this.subscription.unsubscribe();
14627
+ }
14628
+ clickEvent(event) {
14629
+ //TODO: does not support LinkAction (ctrl + click)
14630
+ event.preventDefault();
14631
+ event.stopPropagation();
14632
+ this.clicks.next(event);
14633
+ }
14634
+ }
14635
+ PreventDoubleClickDirective.decorators = [
14636
+ { type: Directive, args: [{
14637
+ selector: '[eoPreventDoubleClick]'
14638
+ },] }
14639
+ ];
14640
+ PreventDoubleClickDirective.ctorParameters = () => [];
14641
+ PreventDoubleClickDirective.propDecorators = {
14642
+ debounceTime: [{ type: Input }],
14643
+ debounceClick: [{ type: Output }],
14644
+ clickEvent: [{ type: HostListener, args: ['click', ['$event'],] }]
14645
+ };
14646
+
14647
+ class ActionComponentAnchorDirective {
14648
+ constructor(viewContainerRef) {
14649
+ this.viewContainerRef = viewContainerRef;
14650
+ }
14651
+ }
14652
+ ActionComponentAnchorDirective.decorators = [
14653
+ { type: Directive, args: [{
14654
+ selector: '[eoActionComponentAnchor]'
14655
+ },] }
14656
+ ];
14657
+ ActionComponentAnchorDirective.ctorParameters = () => [
14658
+ { type: ViewContainerRef }
14659
+ ];
14660
+
14661
+ class ActionMenuComponent extends UnsubscribeOnDestroy {
14662
+ constructor(actionService, router, viewContainerRef, componentFactoryResolver) {
14663
+ super();
14664
+ this.actionService = actionService;
14665
+ this.router = router;
14666
+ this.viewContainerRef = viewContainerRef;
14667
+ this.componentFactoryResolver = componentFactoryResolver;
14668
+ this.actionLists = {
14669
+ common: [], further: []
14670
+ };
14671
+ this.subActionsListHeader = '';
14672
+ this.showComponent = false;
14673
+ this.showMenu = false;
14674
+ this.loading = false;
14675
+ // subscribe for visibility observable indicating whether to show or hide the actions
14676
+ this.actionService
14677
+ .actionsShowing$.pipe(takeUntil(this.componentDestroyed$))
14678
+ .subscribe((cmd) => {
14679
+ if (!this.showMenu && cmd.show) {
14680
+ this.selection = cmd.selection;
14681
+ this.target = cmd.target;
14682
+ this.showActionMenu();
14683
+ }
14684
+ else if (this.showMenu && !cmd.show) {
14685
+ this.hideActionMenu();
14686
+ }
14687
+ });
14688
+ this.router.events
14689
+ .pipe(takeUntil(this.componentDestroyed$), filter(evt => evt instanceof NavigationStart))
14690
+ .subscribe(() => this.hide());
14691
+ }
14692
+ getActions() {
14693
+ this.actionService
14694
+ .getActionsList(this.selection, this.viewContainerRef)
14695
+ .subscribe(actionsList => {
14696
+ this.actionLists.common = actionsList.filter(actionListEntry => actionListEntry.action.group === 'common');
14697
+ this.actionLists.further = actionsList.filter(actionListEntry => actionListEntry.action.group === 'further');
14698
+ });
14699
+ }
14700
+ getMoreActions() {
14701
+ this.loading = true;
14702
+ this.actionService
14703
+ .getMoreActions(this.selection, this.viewContainerRef)
14704
+ .subscribe(actionList => {
14705
+ this.loading = false;
14706
+ this.actionLists.further = this.actionLists.further.concat(actionList).sort(Utils.sortValues('action.label'));
14707
+ }, Utils.throw(() => this.loading = false));
14708
+ }
14709
+ hide() {
14710
+ this.actionService.hideActions();
14711
+ }
14712
+ showActionDescription(i, event) {
14713
+ event.stopPropagation();
14714
+ event.preventDefault();
14715
+ this.actionDescription = i === this.actionDescription ? null : i;
14716
+ }
14717
+ showActionMenu() {
14718
+ this.getActions();
14719
+ if (this.target === 'DMS_OBJECT') {
14720
+ this.getMoreActions();
14721
+ }
14722
+ this.showMenu = true;
14232
14723
  }
14233
14724
  hideActionMenu() {
14234
14725
  this.clear();
@@ -15628,7 +16119,7 @@ class AddResubmissionComponent {
15628
16119
  AddResubmissionComponent.decorators = [
15629
16120
  { type: Component, args: [{
15630
16121
  selector: 'eo-add-resubmission',
15631
- template: "<div class=\"eo-resubmission\">\r\n <h2>{{header}}</h2>\r\n <form [formGroup]=\"addResubmissionForm\">\r\n <eo-form-input [skipToggle]=\"true\" [label]=\"dueFieldLabel\">\r\n <eo-datetime [withTime]=\"true\" [onylFutureDates]=\"true\" formControlName=\"dueFieldFCN\"></eo-datetime>\r\n </eo-form-input>\r\n <eo-form-input [skipToggle]=\"true\" [label]=\"titleFieldLabel\" [required]=\"true\" [invalid]=\"titleValidity\" *ngIf=\"selection.length === 1\">\r\n <eo-string formControlName=\"titleFieldFCN\"></eo-string>\r\n </eo-form-input>\r\n <div class=\"err-msg\" *ngIf=\"titleValidity\">\r\n <div translate>eo.form.property.required</div>\r\n </div>\r\n <eo-form-input [skipToggle]=\"true\" [label]=\"inboxCbLabel\">\r\n <eo-checkbox formControlName=\"inboxCbFCN\" [tristate]=\"false\"></eo-checkbox>\r\n </eo-form-input>\r\n <eo-form-input [skipToggle]=\"true\" [label]=\"emailCbLabel\">\r\n <eo-checkbox formControlName=\"emailCbFCN\" [tristate]=\"false\" [readonly]=\"!hasEmail\"></eo-checkbox>\r\n </eo-form-input>\r\n </form>\r\n\r\n <!-- error/validation messages -->\r\n <div class=\"errors\">\r\n <div class=\"err-msg\" *ngIf=\"notificationMethodValidation\" translate>eo.resubmission.error.msg</div>\r\n <div class=\"err-msg\" *ngIf=\"dateValidation\" translate>eo.resubmission.error.msg.date</div>\r\n </div>\r\n\r\n <div class=\"form-buttons\" *ngIf=\"!processing; else indicator\">\r\n <button class=\"secondary\" (click)=\"cancel()\" translate>eo.resubmission.cancel</button>\r\n <button class=\"secondary\" *ngIf=\"selection[0].resubmissions.length\" (click)=\"removeResubmission()\" translate>eo.resubmission.delete</button>\r\n <button class=\"primary\" [disabled]=\"addResubmissionForm.errors || titleValidity\" *ngIf=\"selection[0].resubmissions.length\" (click)=\"updateResubmission()\" translate>eo.resubmission.apply</button>\r\n <button class=\"primary\" [disabled]=\"addResubmissionForm.errors || titleValidity\" *ngIf=\"!selection[0].resubmissions.length\" (click)=\"createResubmission()\" translate>eo.resubmission.add</button>\r\n </div>\r\n\r\n <ng-template #indicator>\r\n <div class=\"process-indicator\"><eo-icon [iconSrc]=\"'ic_kitt-loader.svg'\"></eo-icon></div>\r\n </ng-template>\r\n</div>\r\n\r\n",
16122
+ template: "<div class=\"eo-resubmission\">\r\n <h2>{{header}}</h2>\r\n <form [formGroup]=\"addResubmissionForm\">\r\n <eo-form-input [skipToggle]=\"true\" [label]=\"dueFieldLabel\">\r\n <eo-datetime [withTime]=\"true\" [onlyFutureDates]=\"true\" formControlName=\"dueFieldFCN\"></eo-datetime>\r\n </eo-form-input>\r\n <eo-form-input [skipToggle]=\"true\" [label]=\"titleFieldLabel\" [required]=\"true\" [invalid]=\"titleValidity\" *ngIf=\"selection.length === 1\">\r\n <eo-string formControlName=\"titleFieldFCN\"></eo-string>\r\n </eo-form-input>\r\n <div class=\"err-msg\" *ngIf=\"titleValidity\">\r\n <div translate>eo.form.property.required</div>\r\n </div>\r\n <eo-form-input [skipToggle]=\"true\" [label]=\"inboxCbLabel\">\r\n <eo-checkbox formControlName=\"inboxCbFCN\" [tristate]=\"false\"></eo-checkbox>\r\n </eo-form-input>\r\n <eo-form-input [skipToggle]=\"true\" [label]=\"emailCbLabel\">\r\n <eo-checkbox formControlName=\"emailCbFCN\" [tristate]=\"false\" [readonly]=\"!hasEmail\"></eo-checkbox>\r\n </eo-form-input>\r\n </form>\r\n\r\n <!-- error/validation messages -->\r\n <div class=\"errors\">\r\n <div class=\"err-msg\" *ngIf=\"notificationMethodValidation\" translate>eo.resubmission.error.msg</div>\r\n <div class=\"err-msg\" *ngIf=\"dateValidation\" translate>eo.resubmission.error.msg.date</div>\r\n </div>\r\n\r\n <div class=\"form-buttons\" *ngIf=\"!processing; else indicator\">\r\n <button class=\"secondary\" (click)=\"cancel()\" translate>eo.resubmission.cancel</button>\r\n <button class=\"secondary\" *ngIf=\"selection[0].resubmissions.length\" (click)=\"removeResubmission()\" translate>eo.resubmission.delete</button>\r\n <button class=\"primary\" [disabled]=\"addResubmissionForm.errors || titleValidity\" *ngIf=\"selection[0].resubmissions.length\" (click)=\"updateResubmission()\" translate>eo.resubmission.apply</button>\r\n <button class=\"primary\" [disabled]=\"addResubmissionForm.errors || titleValidity\" *ngIf=\"!selection[0].resubmissions.length\" (click)=\"createResubmission()\" translate>eo.resubmission.add</button>\r\n </div>\r\n\r\n <ng-template #indicator>\r\n <div class=\"process-indicator\"><eo-icon [iconSrc]=\"'ic_kitt-loader.svg'\"></eo-icon></div>\r\n </ng-template>\r\n</div>\r\n\r\n",
15632
16123
  styles: [".eo-resubmission{display:flex;flex-flow:column;justify-content:center;margin:var(--app-pane-padding)}.eo-resubmission h2{font-size:var(--font-subhead);font-weight:var(--font-weight-light)}.eo-resubmission .form-buttons{padding:5px 0;text-align:right}.eo-resubmission .form-buttons button:nth-child(2n):not(:last-child){margin:0 calc(var(--app-pane-padding)/2)}.eo-resubmission .form-buttons button:nth-child(2n):last-child{margin-left:calc(var(--app-pane-padding)/2);margin-right:0}.eo-resubmission .process-indicator{display:flex;justify-content:flex-end}.eo-resubmission .err-msg{background-color:var(--color-error);border:0;border-radius:2px;color:var(--color-white);margin:calc(var(--app-pane-padding)/4) 0;padding:calc(var(--app-pane-padding)/4)}.eo-resubmission .errors .err-msg:before{content:\"!\";padding:0 calc(var(--app-pane-padding)/4)}"]
15633
16124
  },] }
15634
16125
  ];
@@ -16251,16 +16742,65 @@ AppLayoutComponent.propDecorators = {
16251
16742
  };
16252
16743
 
16253
16744
  /**
16254
- * Module holding the base components of the application shell like application bar, side, search etc.
16745
+ * This directive traps the focus inside the element it is applied to.
16746
+ * When applied, a users can't "tab out" of the element.
16747
+ * You need at least two focusable children in the element for it to work properly.
16748
+ * See the querySelector in the trapFocus method to know which elements count as focusable.
16749
+ * Additionally you can add the attribute "focusable" to an element if you are unsure.
16255
16750
  */
16256
- class EoAppShellModule {
16751
+ class TrapFocusDirective {
16752
+ constructor(el) {
16753
+ this.el = el;
16754
+ }
16755
+ ngAfterViewInit() {
16756
+ this.trapFocus(this.el.nativeElement);
16757
+ }
16758
+ trapFocus(element) {
16759
+ let focusableElements = element.querySelectorAll('a[href], button, textarea, input[type="text"],' +
16760
+ 'input[type="radio"], input[type="checkbox"], select, [focusable]');
16761
+ focusableElements = Array.from(focusableElements)
16762
+ .filter((el) => !el.disabled && !el.classList.contains('disabled'));
16763
+ const firstFocusableElement = focusableElements[0];
16764
+ const lastFocusableElement = focusableElements[focusableElements.length - 1];
16765
+ element.addEventListener('keydown', ((event) => {
16766
+ const isTabPressed = event.keyCode === 9; // tab key code
16767
+ if (!isTabPressed)
16768
+ return;
16769
+ if (event.shiftKey) /* shift + tab */ {
16770
+ if (document.activeElement === firstFocusableElement) {
16771
+ lastFocusableElement.focus();
16772
+ event.preventDefault();
16773
+ }
16774
+ }
16775
+ else /* tab */ {
16776
+ if (document.activeElement === lastFocusableElement) {
16777
+ firstFocusableElement.focus();
16778
+ event.preventDefault();
16779
+ }
16780
+ }
16781
+ }));
16782
+ }
16257
16783
  }
16258
- EoAppShellModule.decorators = [
16259
- { type: NgModule, args: [{
16260
- imports: [
16261
- AppShellRoutingModule,
16262
- CommonModule,
16263
- FormsModule,
16784
+ TrapFocusDirective.decorators = [
16785
+ { type: Directive, args: [{
16786
+ selector: '[eoTrapFocus]'
16787
+ },] }
16788
+ ];
16789
+ TrapFocusDirective.ctorParameters = () => [
16790
+ { type: ElementRef }
16791
+ ];
16792
+
16793
+ /**
16794
+ * Module holding the base components of the application shell like application bar, side, search etc.
16795
+ */
16796
+ class EoAppShellModule {
16797
+ }
16798
+ EoAppShellModule.decorators = [
16799
+ { type: NgModule, args: [{
16800
+ imports: [
16801
+ AppShellRoutingModule,
16802
+ CommonModule,
16803
+ FormsModule,
16264
16804
  UiModule,
16265
16805
  UtilModule,
16266
16806
  AutoCompleteModule,
@@ -16272,7 +16812,7 @@ EoAppShellModule.decorators = [
16272
16812
  ShortcutsModule,
16273
16813
  ActionModule,
16274
16814
  CtaModule,
16275
- ProcessFormModule
16815
+ ProcessFormModule,
16276
16816
  ],
16277
16817
  exports: [AppBarComponent],
16278
16818
  declarations: [
@@ -16283,7 +16823,8 @@ EoAppShellModule.decorators = [
16283
16823
  AppAddDialogComponent,
16284
16824
  AppLayoutComponent,
16285
16825
  ContextSearchComponent,
16286
- AppProcessComponent
16826
+ AppProcessComponent,
16827
+ TrapFocusDirective,
16287
16828
  ]
16288
16829
  },] }
16289
16830
  ];
@@ -16522,851 +17063,422 @@ PluginService.ctorParameters = () => [
16522
17063
  { type: Array, decorators: [{ type: Inject, args: [ENTRY_COMPONENTS,] }] },
16523
17064
  { type: Array, decorators: [{ type: Inject, args: [ENTRY_LINKS,] }] },
16524
17065
  { type: ComponentFactoryResolver }
16525
- ];
16526
-
16527
- class PluginComponent {
16528
- constructor(pluginService) {
16529
- this.pluginService = pluginService;
16530
- }
16531
- set type(type) {
16532
- this.pluginService.loadByType(type, this.eoPlugin.viewContainerRef);
16533
- }
16534
- set id(id) {
16535
- this.pluginService.loadById(id, this.eoPlugin.viewContainerRef);
16536
- }
16537
- }
16538
- PluginComponent.decorators = [
16539
- { type: Component, args: [{
16540
- selector: 'eo-plugin',
16541
- template: `
16542
- <ng-template eoPlugin></ng-template>`
16543
- },] }
16544
- ];
16545
- PluginComponent.ctorParameters = () => [
16546
- { type: PluginService }
16547
- ];
16548
- PluginComponent.propDecorators = {
16549
- eoPlugin: [{ type: ViewChild, args: [PluginDirective, { static: true },] }],
16550
- type: [{ type: Input }],
16551
- id: [{ type: Input }]
16552
- };
16553
- class TabPluginComponent {
16554
- constructor(pluginService) {
16555
- this.pluginService = pluginService;
16556
- }
16557
- set type(type) {
16558
- this.types = this.pluginService.loadTabs(type);
16559
- }
16560
- }
16561
- TabPluginComponent.decorators = [
16562
- { type: Component, args: [{
16563
- selector: 'eo-tab-plugin',
16564
- template: `
16565
- <eo-tab-panel *ngFor="let t of types" [id]="t.id" [header]="t.id | translate">
16566
- <eo-plugin [id]="t.id"></eo-plugin>
16567
- </eo-tab-panel>`
16568
- },] }
16569
- ];
16570
- TabPluginComponent.ctorParameters = () => [
16571
- { type: PluginService }
16572
- ];
16573
- TabPluginComponent.propDecorators = {
16574
- tabPanels: [{ type: ViewChildren, args: [TabPanelComponent,] }],
16575
- type: [{ type: Input }]
16576
- };
16577
- class SidebarPluginComponent {
16578
- constructor(pluginService) {
16579
- this.pluginService = pluginService;
16580
- }
16581
- set type(type) {
16582
- this._links = this.pluginService.loadLinks(type);
16583
- }
16584
- }
16585
- SidebarPluginComponent.decorators = [
16586
- { type: Component, args: [{
16587
- selector: 'eo-sidebar-plugin',
16588
- template: `
16589
- <div #navItem class="nav-item" *ngFor="let l of _links">
16590
- <a [href]="l.path" *ngIf="l.path.startsWith('http');else link">{{l.id | translate}}</a>
16591
- <ng-template #link>
16592
- <a [routerLink]="l.path" [queryParams]="l.queryParams" routerLinkActive="active-link">{{l.id | translate}}</a>
16593
- </ng-template>
16594
- </div>`
16595
- },] }
16596
- ];
16597
- SidebarPluginComponent.ctorParameters = () => [
16598
- { type: PluginService }
16599
- ];
16600
- SidebarPluginComponent.propDecorators = {
16601
- links: [{ type: ViewChildren, args: ['navItem',] }],
16602
- type: [{ type: Input }]
16603
- };
16604
-
16605
- class ContentPreviewService {
16606
- static undockWin(src) {
16607
- const w = window[ContentPreviewService.UNDOCK_WINDOW_NAME] = window.open(src || '', ContentPreviewService.UNDOCK_WINDOW_NAME, 'directories=0, titlebar=0, toolbar=0, location=0, status=0, menubar=0, resizable=1, top=10, left=10');
16608
- return w;
16609
- }
16610
- static closeWin() {
16611
- return this.getUndockWin() && this.getUndockWin().close();
16612
- }
16613
- static getUndockWin() {
16614
- return window[ContentPreviewService.UNDOCK_WINDOW_NAME];
16615
- }
16616
- static undockWinActive() {
16617
- return !!ContentPreviewService.getUndockWin() && !ContentPreviewService.getUndockWin().closed;
16618
- }
16619
- static mapLang(lang) {
16620
- switch (lang) {
16621
- case 'en':
16622
- return 'en-US';
16623
- case 'es':
16624
- return 'es-ES';
16625
- case 'pt':
16626
- return 'pt-PT';
16627
- case 'zh':
16628
- return 'zh-CN';
16629
- case 'hi':
16630
- return 'hi-IN';
16631
- case 'bn':
16632
- return 'bn-BD';
16633
- default:
16634
- return lang;
16635
- }
16636
- }
16637
- }
16638
- ContentPreviewService.UNDOCK_WINDOW_NAME = 'eoViewer';
16639
- ContentPreviewService.decorators = [
16640
- { type: Injectable }
16641
- ];
16642
-
16643
- class ObjectDetailsComponent extends UnsubscribeOnDestroy {
16644
- constructor(router, route, system, empty, agentService, backend, dmsService, selection, actionService, capabilityService, uploadRegistry, eventService, configService, translate) {
16645
- super();
16646
- this.router = router;
16647
- this.route = route;
16648
- this.system = system;
16649
- this.empty = empty;
16650
- this.agentService = agentService;
16651
- this.backend = backend;
16652
- this.dmsService = dmsService;
16653
- this.selection = selection;
16654
- this.actionService = actionService;
16655
- this.capabilityService = capabilityService;
16656
- this.uploadRegistry = uploadRegistry;
16657
- this.eventService = eventService;
16658
- this.configService = configService;
16659
- this.translate = translate;
16660
- // generate unique id to pass to upload registry
16661
- this.uploadTarget = new UploadTarget(Utils.uuid(), UploadTarget.OBJECT);
16662
- this.hasError = false;
16663
- this.nodmsobject = false;
16664
- this.showLoader = false;
16665
- this.panelOrder = { 'master': ['summary', 'indexdata', 'history', 'links'], 'slave': ['preview'] };
16666
- this.agentIsConnected$ = this.agentService.isConnected$;
16667
- this.enableCompare = false;
16668
- this.enableDiff = true;
16669
- this.enableSync = true;
16670
- this._emptyState = { icon: 'ic_no-file.svg', text: '', className: '' };
16671
- this.externalPanels = new QueryList();
16672
- // shortcut actions
16673
- this.shortcuts = {
16674
- id: 'eo.object-details',
16675
- label: this.translate.instant('eo.shortcuts.eo-object-details.title'),
16676
- labelKey: 'eo.shortcuts.eo-object-details.title',
16677
- actions: [
16678
- {
16679
- name: this.translate.instant('eo.shortcuts.action.open.context'),
16680
- nameKey: 'eo.shortcuts.action.open.context',
16681
- shortcut: new Shortcut('O', false, false),
16682
- onExecuteAction: () => {
16683
- this.openObject(this.item.id, this.item.typeName);
16684
- },
16685
- isHidden: () => {
16686
- return false;
16687
- }
16688
- }
16689
- ]
16690
- };
16691
- this.parseDmsParams = this.getDmsParams;
16692
- this.hasContent = new EventEmitter();
16693
- this.undockWinActive = false;
16694
- this.panelOrder = this.configService.getRaw('objectDetailsTabs') || this.panelOrder;
16695
- this.undockWinActive = ContentPreviewService.undockWinActive();
16696
- this.agentService.setAgentStatus(this.route.snapshot.queryParams['connectagent']).subscribe((hasStatus) => {
16697
- if (hasStatus) {
16698
- this.router.navigate([], { queryParams: { connectagent: null }, queryParamsHandling: 'merge' });
16699
- }
16700
- });
16701
- }
16702
- set reference(isRef) {
16703
- this.isReference = isRef;
16704
- }
16705
- set emptyState(e) {
16706
- this._emptyState = e || EmptyStateService.defaultEmptyState();
16707
- }
16708
- get emptyState() {
16709
- return this._emptyState;
16710
- }
16711
- set dmsParams(params) {
16712
- this.showLoader = true;
16713
- this.loadDmsObject(params).subscribe((res) => {
16714
- this.dmsObject = res;
16715
- this.showLoader = false;
16716
- }, Utils.throw(() => this.onHasError(true, true, false)));
16717
- }
16718
- set dmsParams2(params) {
16719
- this.loadDmsObject(params)
16720
- .subscribe((res) => {
16721
- this.dmsObject2 = res;
16722
- }, Utils.throw(() => this.onHasError(true, true, false)));
16723
- }
16724
- set dmsObject(v) {
16725
- var _a;
16726
- this.item = v;
16727
- this.onHasError();
16728
- // prepare indexdata preview
16729
- this.onIndexDataSaved(null, this.item);
16730
- this.eventService.trigger(EnaioEvent.DMS_OBJECT_LOADED, this.item);
16731
- if (this.item) {
16732
- if (this.item.isActiveVersion && !this.enableCompare) {
16733
- this.uploadTarget.referenceObject = this.item;
16734
- this.uploadTarget.onUploadSuccess = () => this.dmsParams = { id: v.id, type: v.typeName };
16735
- this.uploadRegistry.register(this.uploadTarget);
16736
- }
16737
- if (this.item.lock) {
16738
- this.lockTooltip = this.translate.instant('eo.object.lock') + ' '
16739
- + (new LocaleDatePipe(this.translate).transform(this.item.lock.on))
16740
- + ', ' + this.item.lock.by.label + ' (' + this.item.lock.by.name + ')';
16741
- }
16742
- }
16743
- else {
16744
- this.emptyState = this.empty.getEmptyState(0);
16745
- }
16746
- if ((_a = this.item) === null || _a === void 0 ? void 0 : _a.subscriptions.length) {
16747
- this.subscriptionIconTooltip = this.createSubscriptionIconTooltip(this.item);
16748
- }
16749
- }
16750
- set dmsObject2(v) {
16751
- this.item2 = v;
16752
- this.onHasError();
16753
- this.onIndexDataSaved(null, this.item2);
16754
- }
16755
- get dataType() {
16756
- return this.item ? this.item.typeName : 'none';
16757
- }
16758
- getDmsParams(data) {
16759
- return data ? Object.assign(Object.assign({}, data), { type: data.typeName || data.type }) : null;
16760
- }
16761
- updateContent() {
16762
- if (this.applySelection) {
16763
- if (this.enableCompare) {
16764
- this.selection
16765
- .find(this.applySelection.in)
16766
- .selection$
16767
- .pipe(takeUntil(this.componentDestroyed$))
16768
- .subscribe((res) => {
16769
- this.dmsParams = this.parseDmsParams(res[0]);
16770
- this.dmsParams2 = this.parseDmsParams(res[1]);
16771
- });
16772
- return;
16773
- }
16774
- else {
16775
- this.selection
16776
- .find(this.applySelection.in)
16777
- .focus$
16778
- .pipe(takeUntil(this.componentDestroyed$))
16779
- .subscribe(res => {
16780
- this.showLoader = true;
16781
- this.loadDmsObject(this.parseDmsParams(res)).subscribe((res) => {
16782
- // refreshing object details may result in an updated version of the object
16783
- // so we'll use this trigger to also emitt those changes to other listening components
16784
- if (this.item && res && (this.item.id === res.id) && res.version > this.item.version) {
16785
- this.eventService.trigger(EnaioEvent.DMS_OBJECT_UPDATED, res);
16786
- }
16787
- this.dmsObject = res;
16788
- this.showLoader = false;
16789
- }, Utils.throw((error) => {
16790
- this.uploadRegistry.unregister(this.uploadTarget.id);
16791
- return this.onHasError(true, true, false);
16792
- }));
16793
- });
16794
- }
16795
- }
16796
- }
16797
- refreshContent() {
16798
- this.updateContent();
16799
- }
16800
- prepareIndexDataPreview(item, formData) {
16801
- const { id, data, type, created, modified, content, contentFileName, contentFileSize, version } = item;
16802
- return this.system
16803
- .getObjectTypeForm(type.name, 'EDIT')
16804
- .pipe(map(form => {
16805
- let indexDataPreview = {
16806
- form,
16807
- data: formData || data
16808
- };
16809
- let baseparams = {
16810
- id,
16811
- type: type.name,
16812
- createdOn: new Date(created.on),
16813
- modifiedOn: new Date(modified.on),
16814
- createdBy: `${created.by.title} (${created.by.name})`,
16815
- modifiedBy: `${modified.by.title} (${modified.by.name})`,
16816
- contentFileName: contentFileName ? contentFileName : null,
16817
- contentFileSize: contentFileSize ? Number(contentFileSize) : null,
16818
- version: version || 0,
16819
- mimeGroup: content ? content.contents ? content.contents[0].mimegroup : null : null,
16820
- digest: content ? content.contents ? content.contents[0].digest : null : null,
16821
- contentId: content ? content.contents ? content.id : null : null
16822
- };
16823
- return { indexDataPreview, baseparams };
16824
- }));
16825
- }
16826
- onHasError(hasError = false, nodmsobject = false, showLoader = false) {
16827
- this.hasError = hasError;
16828
- this.nodmsobject = nodmsobject;
16829
- this.showLoader = showLoader;
16830
- this.hasContent.emit(!hasError);
16831
- }
16832
- loadDmsObject(params) {
16833
- var _a;
16834
- if (!this.enableCompare && params) {
16835
- delete params.version;
16836
- }
16837
- // check for valid id
16838
- return ((_a = params === null || params === void 0 ? void 0 : params.id) === null || _a === void 0 ? void 0 : _a.length) === 32 ? this.dmsService.getDmsObjectByParams(params) : of(null);
16839
- }
16840
- downloadOriginalContent() {
16841
- this.backend.downloadContent([this.item]);
16842
- }
16843
- showActions() {
16844
- const actions = [this.item, this.item2].filter(v => v);
16845
- this.actionService.showActions(actions, 'DMS_OBJECT');
16846
- }
16847
- openObject(id, _type) {
16848
- const queryParams = { queryParams: { 'type': _type } };
16849
- return this.router.navigate(['/object', id], queryParams);
16850
- }
16851
- // executed when the dms object changed due to saving its indexdata
16852
- onIndexDataSaved(formData, item) {
16853
- if (!this.item) {
16854
- this.indexDataPreview = null;
16855
- this.baseparams = null;
16856
- }
16857
- if (!this.item2) {
16858
- this.indexDataPreview2 = null;
16859
- this.baseparams2 = null;
16860
- }
16861
- if (item) {
16862
- this.prepareIndexDataPreview(item, formData)
16863
- .subscribe(data => {
16864
- if (item === this.item) {
16865
- this.indexDataPreview = data.indexDataPreview;
16866
- this.baseparams = data.baseparams;
16867
- }
16868
- else {
16869
- this.indexDataPreview2 = data.indexDataPreview;
16870
- this.baseparams2 = data.baseparams;
16871
- }
16872
- });
16873
- }
16874
- }
16875
- get referenceTitle() {
16876
- return this.item.contextFolder ? this.item.contextFolder.title : this.item.title;
16877
- }
16878
- isJournalObject(item) {
16879
- return item.type.supertypes.find(sT => sT === 'sysjournalobject');
16880
- }
16881
- isVisible(id) {
16882
- return this.panelOrder.master.includes(id) || this.panelOrder.slave.includes(id);
16883
- }
16884
- createSubscriptionIconTooltip(item) {
16885
- let tooltip = '';
16886
- const modes = this.item.subscriptions.map(subscription => subscription.mode);
16887
- const subscribedToAllChanges = modes.includes(SubscriptionMode.DMS_OBJECT_CHANGED) || (modes.includes(SubscriptionMode.ONLY_DOCUMENT_CONTENT_CHANGED) && modes.includes(SubscriptionMode.ONLY_INDEX_DATA_CHANGED));
16888
- const subscribedToMetaChangesOnly = modes.includes(SubscriptionMode.ONLY_INDEX_DATA_CHANGED) && !modes.includes(SubscriptionMode.ONLY_DOCUMENT_CONTENT_CHANGED) && !modes.includes(SubscriptionMode.DMS_OBJECT_CHANGED);
16889
- const subscribedToContentChangesOnly = modes.includes(SubscriptionMode.ONLY_DOCUMENT_CONTENT_CHANGED) && !modes.includes(SubscriptionMode.ONLY_INDEX_DATA_CHANGED) && !modes.includes(SubscriptionMode.DMS_OBJECT_CHANGED);
16890
- if (subscribedToAllChanges) {
16891
- tooltip = this.translate.instant('eo.object.subscription.icon.tooltip.allChanges');
16892
- }
16893
- else if (subscribedToMetaChangesOnly) {
16894
- tooltip = this.translate.instant('eo.object.subscription.icon.tooltip.meta');
16895
- }
16896
- else if (subscribedToContentChangesOnly) {
16897
- tooltip = this.translate.instant('eo.object.subscription.icon.tooltip.content');
16898
- }
16899
- return tooltip;
17066
+ ];
17067
+
17068
+ class PluginComponent {
17069
+ constructor(pluginService) {
17070
+ this.pluginService = pluginService;
16900
17071
  }
16901
- ngOnInit() {
16902
- this.capabilities = this.capabilityService.getCapabilities();
16903
- this.updateContent();
16904
- this.eventService
16905
- .on(EnaioEvent.DMS_OBJECT_UPDATED)
16906
- .pipe(takeUntil(this.componentDestroyed$))
16907
- .subscribe(event => {
16908
- if (event.data && this.item.id === event.data.id) {
16909
- this.dmsObject = this.dmsService.createLocalCopyOfDMSObject(event.data);
16910
- if (this.preview && !this.preview.disabled) {
16911
- this.preview.refresh();
16912
- }
16913
- }
16914
- });
16915
- this.eventService
16916
- .on(EnaioEvent.INBOX_ITEM_CONFIRMED)
16917
- .pipe(takeUntil(this.componentDestroyed$))
16918
- .subscribe(event => {
16919
- if (this.item && this.item.id === event.data.target.id) {
16920
- this.dmsParams = null;
16921
- }
16922
- });
17072
+ set type(type) {
17073
+ this.pluginService.loadByType(type, this.eoPlugin.viewContainerRef);
16923
17074
  }
16924
- ngAfterViewInit() {
16925
- let panels = this.tabPanels.toArray();
16926
- this.tabPlugins.forEach(p => panels = panels.concat(p.tabPanels.toArray()));
16927
- this.externalPanels.reset(panels);
17075
+ set id(id) {
17076
+ this.pluginService.loadById(id, this.eoPlugin.viewContainerRef);
16928
17077
  }
16929
- ngOnDestroy() {
16930
- this.uploadRegistry.unregister(this.uploadTarget.id);
17078
+ }
17079
+ PluginComponent.decorators = [
17080
+ { type: Component, args: [{
17081
+ selector: 'eo-plugin',
17082
+ template: `
17083
+ <ng-template eoPlugin></ng-template>`
17084
+ },] }
17085
+ ];
17086
+ PluginComponent.ctorParameters = () => [
17087
+ { type: PluginService }
17088
+ ];
17089
+ PluginComponent.propDecorators = {
17090
+ eoPlugin: [{ type: ViewChild, args: [PluginDirective, { static: true },] }],
17091
+ type: [{ type: Input }],
17092
+ id: [{ type: Input }]
17093
+ };
17094
+ class TabPluginComponent {
17095
+ constructor(pluginService) {
17096
+ this.pluginService = pluginService;
17097
+ }
17098
+ set type(type) {
17099
+ this.types = this.pluginService.loadTabs(type);
16931
17100
  }
16932
17101
  }
16933
- ObjectDetailsComponent.decorators = [
17102
+ TabPluginComponent.decorators = [
16934
17103
  { type: Component, args: [{
16935
- selector: 'eo-object-details',
16936
- template: "<div class=\"loader-overlay__mask\" *ngIf=\"showLoader\">\r\n <eo-loading-spinner class=\"object-detail__loader\"></eo-loading-spinner>\r\n</div>\r\n<ng-container *ngIf=\"item && !hasError; else noItem\">\r\n\r\n <div class=\"eo-head eo-head-tabs\" [eoShortcuts]=\"shortcuts\">\r\n <header class=\"eo-header\">\r\n <eo-icon class=\"eo-header-icon\" [objectType]=\"item.type\" [iconTitle]=\"item.type.label\"></eo-icon>\r\n <div class=\"eo-header-info\">\r\n <h2 class=\"eo-header-title\">{{item.title}}</h2>\r\n <h3 class=\"eo-header-subtitle\">{{item.description}}</h3>\r\n </div>\r\n\r\n <div class=\"eo-header-actions-container\">\r\n <div class=\"eo-header-actions\">\r\n <ng-container *ngIf=\"!isReference; else tplHeadReference\">\r\n <eo-icon class=\"button refresh-button\" [iconSrc]=\"'assets/_default/svg/ic_refresh.svg'\"\r\n [iconTitle]=\"('eo.list.refresh' | translate)\" (click)=\"refreshContent()\"></eo-icon>\r\n <eo-icon class=\"button sync-tab-btn\" *ngIf=\"enableCompare\" [ngClass]=\"{'enabled': enableSync}\"\r\n [iconSrc]=\"'assets/_default/svg/ic_link.svg'\" [iconTitle]=\"'eo.versions.detail.glue.tooltip' | translate\"\r\n (click)=\"enableSync = !enableSync\"></eo-icon>\r\n <eo-favorite-icon [item]=\"item\" *ngIf=\"!enableCompare && capabilities.favorites && !isJournalObject(item)\">\r\n </eo-favorite-icon>\r\n <eo-icon class=\"button oc-button\" *ngIf=\"!enableCompare && item.content\" (click)=\"downloadOriginalContent()\"\r\n [iconTitle]=\"('eo.action.download.dms.object.content.label' | translate)\" [iconSrc]=\"'assets/_default/svg/ic_content-download.svg'\"></eo-icon>\r\n <eo-edit-icon [item]=\"item\" *ngIf=\"!enableCompare && item.content && item.rights.edit && (agentIsConnected$ | async)\">\r\n </eo-edit-icon>\r\n <eo-icon class=\"button am-button\" (click)=\"showActions()\"\r\n [iconTitle]=\"('eo.object.details.actions.title' | translate)\"\r\n [iconSrc]=\"'assets/_default/svg/ic_more.svg'\"></eo-icon>\r\n </ng-container>\r\n\r\n <ng-template #tplHeadReference>\r\n <a class=\"button reference primary\"\r\n [title]=\"('eo.object.reference.tooltip' | translate:{title:referenceTitle})\"\r\n [routerLink]=\"['/object', item.id]\"\r\n [queryParams]=\"{type: item.typeName}\">{{'eo.object.reference.open'|translate}}</a>\r\n </ng-template>\r\n\r\n </div>\r\n\r\n <div class=\"eo-header-status-icons\">\r\n <a class=\"content-link\" [title]=\"'eo.object.contentlink.tooltip' | translate\" *ngIf=\"item.content?.linked\"\r\n [routerLink]=\"'/object/' + item.content.id\" [queryParams]=\"{type: item.content.type}\">\r\n <span>{{'eo.object.contentlink' | translate}}</span>\r\n </a>\r\n <eo-icon class=\"subscription-icon\" *ngIf=\"item.subscriptions.length\"\r\n [iconSrc]=\"'assets/_default/svg/ic_subscription.svg'\"\r\n [iconTitle]=\"subscriptionIconTooltip\"></eo-icon>\r\n <eo-icon class=\"resubmission-icon\" *ngIf=\"item.resubmissions.length\"\r\n [iconSrc]=\"'assets/_default/svg/ic_resubmission.svg'\"\r\n [iconTitle]=\"'eo.object.resubmission.tooltip' | translate\"></eo-icon>\r\n <eo-icon class=\"lock\" [ngClass]=\"{'myLock': item.lock.by.me}\" *ngIf=\"item.lock\"\r\n [iconSrc]=\"'assets/_default/svg/ic_lock.svg'\" [iconTitle]=\"lockTooltip\"></eo-icon>\r\n <eo-icon class=\"finalized-icon\" *ngIf=\"item.isFinalized\" [iconSrc]=\"'assets/_default/svg/ic_finalized.svg'\"\r\n [iconTitle]=\"'eo.object.finalized.tooltip' | translate\"></eo-icon>\r\n </div>\r\n </div>\r\n </header>\r\n </div>\r\n <div class=\"eo-body\">\r\n <eo-tab-container [pluginPanels]=\"externalPanels\" [cacheLayout]=\"!enableCompare && cacheLayout\" [defaultPanelOrder]=\"!enableCompare && panelOrder\"\r\n [dndEnabled]=\"!enableCompare\" [enableSlave]=\"!enableCompare || item2\" [enableSync]=\"enableCompare && enableSync\"\r\n [version]=\"enableCompare && {master: item && item.version, slave: item2 && item2.version}\">\r\n\r\n <eo-tab-panel [id]=\"'summary'\" *ngIf=\"isVisible('summary')\" header=\"{{'eo.object.summary.title' | translate}}\">\r\n <ng-template pTemplate=\"content\">\r\n <eo-indexdata-summary [indexdata]=\"indexDataPreview\" [baseparams]=\"baseparams\" [dmsObject]=\"item\"\r\n [enableVersions]=\"!enableCompare\"></eo-indexdata-summary>\r\n </ng-template>\r\n </eo-tab-panel>\r\n\r\n <eo-tab-panel [id]=\"'indexdata'\" *ngIf=\"isVisible('indexdata')\" header=\"{{'eo.object.indexdata.title' | translate}}\">\r\n <ng-template pTemplate=\"content\">\r\n <eo-object-form-edit [dmsObject]=\"item\" (indexDataSaved)=\"onIndexDataSaved($event, item)\"\r\n [formDisabled]=\"enableCompare || isReference\"></eo-object-form-edit>\r\n </ng-template>\r\n </eo-tab-panel>\r\n \r\n <eo-tab-panel [id]=\"'preview'\" *ngIf=\"isVisible('preview')\" header=\"{{'eo.object.content.title' | translate}}\" [isSlave]=\"!enableCompare\"\r\n #preview>\r\n <ng-template pTemplate=\"content\" *ngIf=\"!undockWinActive; else loadPreview\">\r\n <eo-media *ngIf=\"item\" [dmsObject]=\"item\" [disabled]=\"!preview.selected\"\r\n [useVersion]=\"item.id === item.content?.id\" [searchTerm]=\"searchTerm\" #viewer></eo-media>\r\n </ng-template>\r\n <ng-template #loadPreview>\r\n <eo-media *ngIf=\"item\" [dmsObject]=\"item\"\r\n [useVersion]=\"item.id === item.content?.id\" [searchTerm]=\"searchTerm\" #viewer></eo-media>\r\n </ng-template>\r\n </eo-tab-panel>\r\n\r\n <eo-tab-panel *ngIf=\"isVisible('history') && !enableCompare\" [id]=\"'history'\" header=\"{{'eo.object.history.title' | translate}}\" #history>\r\n <ng-template pTemplate=\"content\">\r\n <eo-object-history *ngIf=\"history.selected\" [params]=\"{id: item.id, type: item.type?.qname}\">\r\n </eo-object-history>\r\n </ng-template>\r\n </eo-tab-panel>\r\n\r\n <eo-tab-panel *ngIf=\"isVisible('links') && !enableCompare\" [id]=\"'links'\" header=\"{{'eo.object.links.title' | translate}}\" #links>\r\n <ng-template pTemplate=\"content\">\r\n <eo-object-links *ngIf=\"links.selected\" [dmsObject]=\"item\"></eo-object-links>\r\n </ng-template>\r\n </eo-tab-panel>\r\n\r\n <!-- slave tabs -->\r\n\r\n <eo-tab-panel *ngIf=\"isVisible('summary') && enableCompare\" [id]=\"'summary2'\" header=\"{{'eo.object.summary.title' | translate}}\"\r\n [isSlave]=\"true\">\r\n <ng-template pTemplate=\"content\">\r\n <eo-indexdata-summary *ngIf=\"item2\" [indexdata]=\"indexDataPreview2\" [baseparams]=\"baseparams2\"\r\n [dmsObject]=\"item2\" [enableVersions]=\"!enableCompare\"></eo-indexdata-summary>\r\n </ng-template>\r\n </eo-tab-panel>\r\n\r\n <eo-tab-panel *ngIf=\"isVisible('indexdata') && enableCompare\" [id]=\"'indexdata2'\" header=\"{{'eo.object.indexdata.title' | translate}}\"\r\n [isSlave]=\"true\">\r\n <ng-template pTemplate=\"content\">\r\n <eo-object-form-edit *ngIf=\"item2\" [dmsObject]=\"item2\" (indexDataSaved)=\"onIndexDataSaved($event, item2)\"\r\n [formDisabled]=\"enableCompare || isReference\"></eo-object-form-edit>\r\n </ng-template>\r\n </eo-tab-panel>\r\n\r\n <eo-tab-panel *ngIf=\"isVisible('preview') && enableCompare\" [id]=\"'preview2'\" header=\"{{'eo.object.content.title' | translate}}\"\r\n [isSlave]=\"true\" #preview2>\r\n <ng-template pTemplate=\"content\">\r\n <eo-media *ngIf=\"item2\" [dmsObject]=\"item2\" [disabled]=\"!preview2.selected\" [undockDisabled]=\"enableCompare\"\r\n [useVersion]=\"true\" [searchTerm]=\"searchTerm\" #viewer2></eo-media>\r\n </ng-template>\r\n </eo-tab-panel>\r\n \r\n <eo-tab-panel *ngIf=\"enableCompare && enableDiff\" [id]=\"'changes'\" header=\"{{'eo.object.changes.title' | translate}}\"\r\n [isSlave]=\"true\">\r\n <ng-template pTemplate=\"content\">\r\n <eo-indexdata-summary *ngIf=\"item2\" [diff]=\"{indexdata : indexDataPreview, indexdata2: indexDataPreview2, baseparams: baseparams, baseparams2: baseparams2}\" \r\n [dmsObject]=\"item2\" [enableVersions]=\"!enableCompare\"></eo-indexdata-summary>\r\n </ng-template>\r\n </eo-tab-panel>\r\n\r\n <ng-content></ng-content>\r\n\r\n </eo-tab-container>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-template #noItem>\r\n <span class=\"not-found\" *ngIf=\"nodmsobject\" translate>eo.bpm.nodmsobject</span>\r\n <eo-error-message *ngIf=\"!showLoader\"\r\n [emptyState]=\"{icon: emptyState.icon, text: emptyState.text, className: emptyState.className}\">\r\n <ng-content select=\".error\"></ng-content>\r\n </eo-error-message>\r\n</ng-template>",
16937
- providers: [ContentPreviewService],
16938
- styles: [":host{background:var(--panel-background-grey);display:flex;flex:1;flex-direction:column;height:100%;min-height:0;min-width:0;overflow-y:auto}:host .eo-head .eo-header .eo-header-info .eo-header-subtitle,:host .eo-head .eo-header .eo-header-info .eo-header-title{-moz-user-select:text;-webkit-user-select:text;user-select:text}:host .eo-body__not-available{background:rgba(var(--color-black-rgb),.4);opacity:.4}:host .sync-tab-btn.enabled{color:var(--color-accent)}:host .lock{background:var(--color-error)!important;border-radius:2px;color:var(--color-white);height:18px;padding:1px;width:18px}:host .lock.myLock{background:var(--state-orange)!important;color:var(--color-white)}:host .not-found{background:var(--color-error);border-radius:2px;color:var(--panel-background);flex:0 0 auto;margin:calc(var(--app-pane-padding)/2);padding:calc(var(--app-pane-padding)/4);text-align:center}:host .eo-header-status-icons{display:flex;justify-content:flex-end;margin-top:var(--app-pane-padding)}:host .eo-header-status-icons>eo-icon{background-color:var(--color-primary-2);color:var(--color-white);height:18px;margin-left:1px;padding:calc(var(--app-pane-padding)/4);width:18px}:host .eo-header-status-icons>eo-icon:first-child{border-bottom-left-radius:4px;border-top-left-radius:4px}:host .eo-header-status-icons>eo-icon:last-child{border-bottom-right-radius:4px;border-top-right-radius:4px}:host .eo-header-status-icons>eo-icon.finalized-icon{background-color:var(--color-success)}:host .eo-header-status-icons>eo-icon.lock{background:var(--color-error)!important;border-radius:2px;color:var(--color-white);height:18px;padding:1px;width:18px}:host .eo-header-status-icons>eo-icon.lock.myLock{background:var(--state-orange)!important}:host .eo-header-status-icons>a{align-items:center;background-color:var(--color-success);border-radius:2px;color:var(--color-white);display:flex;font-size:var(--font-hint);line-height:var(--font-hint);margin:0 calc(var(--app-pane-padding)/4);padding:0 4px 1px;text-decoration:none}:host .loader-overlay__mask{-webkit-animation:eoFadeIn .5s;animation:eoFadeIn .5s;background:rgba(var(--color-white-rgb),.8);display:flex;height:100%;position:absolute;width:100%;z-index:11}:host .loader-overlay__mask .object-detail__loader{margin:auto}:host ::ng-deep .sync-tab-btn{color:rgba(var(--color-black-rgb),.2)}:host ::ng-deep .sync-tab-btn .svg-link{fill:transparent}:host ::ng-deep .sync-tab-btn.enabled .svg-link{fill:currentColor}:host ::ng-deep div[eosplitgutter]{background-color:var(--color-white)!important}:host ::ng-deep .indexdata-summary,:host ::ng-deep .object-form-edit{margin:var(--app-pane-padding)}:host ::ng-deep #indexdata{overflow:hidden}:host ::ng-deep #indexdata .object-form-edit{background:transparent!important;height:100%;margin:0;position:relative}:host ::ng-deep #indexdata .object-form-edit eo-object-form{background:transparent;overflow:auto}:host ::ng-deep #indexdata .object-form-edit eo-object-form .eo-object-form{background:var(--panel-background);border:1px solid rgba(var(--color-black-rgb),.1);margin:var(--app-pane-padding)}:host ::ng-deep #indexdata .object-form-edit .form-controls{-webkit-animation:eoFadeInUp .2s;animation:eoFadeInUp .2s;border:4px solid var(--panel-background-grey)}:host ::ng-deep #indexdata .object-form-edit .form-controls .buttons{background:var(--panel-background);border-top:1px solid var(--panel-divider-color);padding:calc(var(--app-pane-padding)/2) var(--app-pane-padding)!important}"]
17104
+ selector: 'eo-tab-plugin',
17105
+ template: `
17106
+ <eo-tab-panel *ngFor="let t of types" [id]="t.id" [header]="t.id | translate">
17107
+ <eo-plugin [id]="t.id"></eo-plugin>
17108
+ </eo-tab-panel>`
16939
17109
  },] }
16940
17110
  ];
16941
- ObjectDetailsComponent.ctorParameters = () => [
16942
- { type: Router },
16943
- { type: ActivatedRoute },
16944
- { type: SystemService },
16945
- { type: EmptyStateService },
16946
- { type: AgentService },
16947
- { type: BackendService },
16948
- { type: DmsService },
16949
- { type: SelectionService },
16950
- { type: ActionService },
16951
- { type: CapabilitiesService },
16952
- { type: UploadRegistryService },
16953
- { type: EventService },
16954
- { type: Config },
16955
- { type: TranslateService }
17111
+ TabPluginComponent.ctorParameters = () => [
17112
+ { type: PluginService }
16956
17113
  ];
16957
- ObjectDetailsComponent.propDecorators = {
16958
- preview: [{ type: ViewChild, args: ['viewer',] }],
16959
- isReference: [{ type: HostBinding, args: ['class.reference',] }],
16960
- reference: [{ type: Input }],
16961
- searchTerm: [{ type: Input }],
16962
- enableCompare: [{ type: Input }],
16963
- enableDiff: [{ type: Input }],
16964
- enableSync: [{ type: Input }],
16965
- cacheLayout: [{ type: Input }],
16966
- emptyState: [{ type: Input }],
16967
- dmsParams: [{ type: Input, args: ['params',] }],
16968
- dmsParams2: [{ type: Input, args: ['params2',] }],
16969
- dmsObject: [{ type: Input, args: ['item',] }],
16970
- dmsObject2: [{ type: Input, args: ['item2',] }],
16971
- tabPanels: [{ type: ContentChildren, args: [TabPanelComponent,] }],
16972
- tabPlugins: [{ type: ContentChildren, args: [TabPluginComponent,] }],
16973
- applySelection: [{ type: Input }],
16974
- parseDmsParams: [{ type: Input }],
16975
- hasContent: [{ type: Output }],
16976
- dataType: [{ type: HostBinding, args: ['attr.data-type',] }]
17114
+ TabPluginComponent.propDecorators = {
17115
+ tabPanels: [{ type: ViewChildren, args: [TabPanelComponent,] }],
17116
+ type: [{ type: Input }]
17117
+ };
17118
+ class SidebarPluginComponent {
17119
+ constructor(pluginService) {
17120
+ this.pluginService = pluginService;
17121
+ }
17122
+ set type(type) {
17123
+ this._links = this.pluginService.loadLinks(type);
17124
+ }
17125
+ }
17126
+ SidebarPluginComponent.decorators = [
17127
+ { type: Component, args: [{
17128
+ selector: 'eo-sidebar-plugin',
17129
+ template: `
17130
+ <div #navItem class="nav-item" *ngFor="let l of _links">
17131
+ <a [href]="l.path" *ngIf="l.path.startsWith('http');else link">{{l.id | translate}}</a>
17132
+ <ng-template #link>
17133
+ <a [routerLink]="l.path" [queryParams]="l.queryParams" routerLinkActive="active-link">{{l.id | translate}}</a>
17134
+ </ng-template>
17135
+ </div>`
17136
+ },] }
17137
+ ];
17138
+ SidebarPluginComponent.ctorParameters = () => [
17139
+ { type: PluginService }
17140
+ ];
17141
+ SidebarPluginComponent.propDecorators = {
17142
+ links: [{ type: ViewChildren, args: ['navItem',] }],
17143
+ type: [{ type: Input }]
16977
17144
  };
16978
17145
 
16979
- class MediaComponent extends UnsubscribeOnDestroy {
16980
- constructor(translate, dms, renderer, system, _ngZone, config, pluginsService, backend) {
17146
+ class ObjectDetailsComponent extends UnsubscribeOnDestroy {
17147
+ constructor(router, route, system, empty, agentService, backend, dmsService, selection, actionService, capabilityService, uploadRegistry, eventService, configService, translate) {
16981
17148
  super();
16982
- this.translate = translate;
16983
- this.dms = dms;
16984
- this.renderer = renderer;
17149
+ this.router = router;
17150
+ this.route = route;
16985
17151
  this.system = system;
16986
- this._ngZone = _ngZone;
16987
- this.config = config;
16988
- this.pluginsService = pluginsService;
17152
+ this.empty = empty;
17153
+ this.agentService = agentService;
16989
17154
  this.backend = backend;
16990
- this.SIZE_LIMIT = 1024 * 1024 * 10; // 10MB
16991
- this._disabled = false;
16992
- this.attachments = [];
16993
- this.isMedia = false;
16994
- this.isOctetStream = false;
16995
- this.isNotSupported = false;
16996
- this.isLarge = false;
17155
+ this.dmsService = dmsService;
17156
+ this.selection = selection;
17157
+ this.actionService = actionService;
17158
+ this.capabilityService = capabilityService;
17159
+ this.uploadRegistry = uploadRegistry;
17160
+ this.eventService = eventService;
17161
+ this.configService = configService;
17162
+ this.translate = translate;
17163
+ // generate unique id to pass to upload registry
17164
+ this.uploadTarget = new UploadTarget(Utils.uuid(), UploadTarget.OBJECT);
16997
17165
  this.hasError = false;
16998
- this.customConfig = [];
16999
- this.defaultViewers = [
17000
- {
17001
- "mimeType": ["application/json", "text/json", "text/plain", "text/xml", "text/java", "text/javascript", "application/javascript", "text/html", "text/markdown", "text/x-web-markdown", "text/x-markdown"],
17002
- "viewer": "assets/_default/api/monaco/?path=${path}&mimeType=${mimeType}&fileExtension=${fileExtension}&lang=${lang}&theme=${theme}"
17003
- },
17004
- {
17005
- "mimeType": ["audio/mp3", "audio/webm", "audio/ogg", "audio/mpeg", "video/mp4", "video/webm", "video/ogg", "application/ogg"],
17006
- "viewer": "assets/_default/api/video/?path=${path}&mimeType=${mimeType}&fileExtension=${fileExtension}&lang=${lang}&theme=${theme}"
17007
- },
17008
- {
17009
- "mimeType": ["image/jpeg", "image/png", "image/apng", "image/gif", "image/svg+xml", "image/webp"],
17010
- "viewer": "assets/_default/api/img/?path=${path}&mimeType=${mimeType}&fileExtension=${fileExtension}&lang=${lang}&theme=${theme}"
17011
- },
17012
- { "viewer": "() => parameters.defaultViewer + '#'" },
17013
- { "error": true, "type": "error", "viewer": "assets/_default/api/error/?path=${path}&mimeType=${mimeType}&fileExtension=${fileExtension}&lang=${lang}&theme=${theme}" }
17014
- ];
17015
- this.undockDisabled = false;
17016
- this.enableCloseBtn = false;
17017
- // by default, the viewer ignores the version of the dms object. This will always show the latest version.
17018
- // We need this to be able to refresh the viewer because otherwise pdfjs worker will fail.
17019
- this.useVersion = false;
17020
- this.fileSizePipe = new FileSizePipe(translate);
17021
- this.SIZE_LIMIT = this.config.getRaw('preview.fileSizeLimit') || this.SIZE_LIMIT;
17022
- this.customConfig = (this.config.getRaw('preview.viewers') || []).concat(this.defaultViewers);
17023
- this.pluginsService.api.content.catchError().subscribe((evt) => {
17024
- var _a, _b;
17025
- const { err, win, parameters } = evt.data;
17026
- const uri = this.pluginsService.applyFunction((_b = (_a = this.customConfig) === null || _a === void 0 ? void 0 : _a.find((v) => v.error)) === null || _b === void 0 ? void 0 : _b.viewer, 'api, err, win, parameters', [
17027
- this.pluginsService.api,
17028
- err,
17029
- win,
17030
- parameters
17031
- ]);
17032
- uri && this.loadDocument(this.resolveUri(uri, parameters), true);
17166
+ this.nodmsobject = false;
17167
+ this.showLoader = false;
17168
+ this.panelOrder = { 'master': ['summary', 'indexdata', 'history', 'links'], 'slave': ['preview'] };
17169
+ this.agentIsConnected$ = this.agentService.isConnected$;
17170
+ this.enableCompare = false;
17171
+ this.enableDiff = true;
17172
+ this.enableSync = true;
17173
+ this._emptyState = { icon: 'ic_no-file.svg', text: '', className: '' };
17174
+ this.externalPanels = new QueryList();
17175
+ // shortcut actions
17176
+ this.shortcuts = {
17177
+ id: 'eo.object-details',
17178
+ label: this.translate.instant('eo.shortcuts.eo-object-details.title'),
17179
+ labelKey: 'eo.shortcuts.eo-object-details.title',
17180
+ actions: [
17181
+ {
17182
+ name: this.translate.instant('eo.shortcuts.action.open.context'),
17183
+ nameKey: 'eo.shortcuts.action.open.context',
17184
+ shortcut: new Shortcut('O', false, false),
17185
+ onExecuteAction: () => {
17186
+ this.openObject(this.item.id, this.item.typeName);
17187
+ },
17188
+ isHidden: () => {
17189
+ return false;
17190
+ }
17191
+ }
17192
+ ]
17193
+ };
17194
+ this.parseDmsParams = this.getDmsParams;
17195
+ this.hasContent = new EventEmitter();
17196
+ this.undockWinActive = false;
17197
+ this.panelOrder = this.configService.getRaw('objectDetailsTabs') || this.panelOrder;
17198
+ this.undockWinActive = ContentPreviewService.undockWinActive();
17199
+ this.agentService.setAgentStatus(this.route.snapshot.queryParams['connectagent']).subscribe((hasStatus) => {
17200
+ if (hasStatus) {
17201
+ this.router.navigate([], { queryParams: { connectagent: null }, queryParamsHandling: 'merge' });
17202
+ }
17033
17203
  });
17034
- if (ContentPreviewService.undockWinActive()) {
17035
- this.undock(false);
17036
- }
17037
- }
17038
- get undockWin() {
17039
- return ContentPreviewService.getUndockWin();
17040
- }
17041
- set setAttachments(attachments) {
17042
- this.attachments = attachments;
17043
- this.attachmentsShown = false;
17044
- }
17045
- set setSearchTerm(searchTerm) {
17046
- this.searchTerm = searchTerm || '';
17047
17204
  }
17048
- set disabled(disabled) {
17049
- this._disabled = !!disabled;
17050
- this.toogleViewer();
17205
+ set reference(isRef) {
17206
+ this.isReference = isRef;
17051
17207
  }
17052
- get disabled() {
17053
- return this._disabled;
17208
+ set emptyState(e) {
17209
+ this._emptyState = e || EmptyStateService.defaultEmptyState();
17054
17210
  }
17055
- set previewUri(uri) {
17056
- this._previewUri = uri;
17057
- this.toogleViewer();
17211
+ get emptyState() {
17212
+ return this._emptyState;
17058
17213
  }
17059
- get previewUri() {
17060
- return this._previewUri;
17214
+ set dmsParams(params) {
17215
+ this.showLoader = true;
17216
+ this.loadDmsObject(params).subscribe((res) => {
17217
+ this.dmsObject = res;
17218
+ this.showLoader = false;
17219
+ }, Utils.throw(() => this.onHasError(true, true, false)));
17061
17220
  }
17062
- set previewFile(file) {
17063
- var _a;
17064
- if (file) {
17065
- this.viewer = this.getViewer(file);
17066
- this.isMedia = this.viewer.viewer !== MediaComponent.PDF_VIEWER;
17067
- this.isOctetStream = !!((_a = file.mimegroup) === null || _a === void 0 ? void 0 : _a.match(/octet-stream/));
17068
- this.isLarge = file.size && file.size > this.SIZE_LIMIT;
17069
- this.mediaType = file.mediaTypeName && this.system.getObjectType(file.mediaTypeName);
17070
- this.previewUri = this.isMedia ? this.viewer.previewUri : file.uriPdf;
17071
- }
17072
- else {
17073
- this.previewUri = '';
17074
- }
17221
+ set dmsParams2(params) {
17222
+ this.loadDmsObject(params)
17223
+ .subscribe((res) => {
17224
+ this.dmsObject2 = res;
17225
+ }, Utils.throw(() => this.onHasError(true, true, false)));
17075
17226
  }
17076
- set dmsObject(item) {
17227
+ set dmsObject(v) {
17077
17228
  var _a;
17078
- this._dmsObject = item;
17079
- this.dmsObjectTitle = item.title || '...';
17080
- this.setAttachments = [];
17081
- if (this.attachmentsLoading) {
17082
- // cancel any pending requests
17083
- this.attachmentsLoading.unsubscribe();
17084
- }
17085
- if (item.content && item.content.contents && item.content.contents.length) {
17086
- const file = item.content.contents[0] || {};
17087
- this.previewFile = {
17088
- uri: this.dms.getPreview(item.content.id, item.content.type, this.useVersion ? item.version : null),
17089
- uriPdf: this.dms.getPreview(item.content.id, item.content.type, this.useVersion ? item.version : null, 'PDF'),
17090
- mimetype: file.mimetype,
17091
- mimegroup: file.mimegroup,
17092
- size: file.size,
17093
- path: file.path,
17094
- mediaTypeName: item.typeName
17095
- };
17096
- if (!!((_a = file.mimegroup) === null || _a === void 0 ? void 0 : _a.match(/^mail|octet-stream/))) {
17097
- this.slideUri = this.dms.getSlide(item.content.id, item.content.type, this.useVersion ? item.version : null, 256);
17098
- this.attachmentsLoading = this.dms.getAttachments(item).subscribe(a => this.setAttachments = a);
17229
+ this.item = v;
17230
+ this.onHasError();
17231
+ // prepare indexdata preview
17232
+ this.onIndexDataSaved(null, this.item);
17233
+ this.eventService.trigger(EnaioEvent.DMS_OBJECT_LOADED, this.item);
17234
+ if (this.item) {
17235
+ if (this.item.isActiveVersion && !this.enableCompare) {
17236
+ this.uploadTarget.referenceObject = this.item;
17237
+ this.uploadTarget.onUploadSuccess = () => this.dmsParams = { id: v.id, type: v.typeName };
17238
+ this.uploadRegistry.register(this.uploadTarget);
17239
+ }
17240
+ if (this.item.lock) {
17241
+ this.lockTooltip = this.translate.instant('eo.object.lock') + ' '
17242
+ + (new LocaleDatePipe(this.translate).transform(this.item.lock.on))
17243
+ + ', ' + this.item.lock.by.label + ' (' + this.item.lock.by.name + ')';
17099
17244
  }
17100
17245
  }
17101
17246
  else {
17102
- this.previewUri = '';
17103
- }
17104
- }
17105
- selectAttachment(attachment, force) {
17106
- const previewUri = attachment && this.isMedia ? this.getViewer({ uriPdf: attachment === null || attachment === void 0 ? void 0 : attachment.previewUri }).previewUri : attachment === null || attachment === void 0 ? void 0 : attachment.previewUri;
17107
- this.loadDocument(previewUri || this.previewUri, force);
17108
- }
17109
- toogleViewer() {
17110
- this.open = !this.disabled && !!this.previewUri;
17111
- if (this.undockDisabled) {
17112
- this.isUndocked = false;
17247
+ this.emptyState = this.empty.getEmptyState(0);
17113
17248
  }
17114
- if (this.open || this.isUndocked) {
17115
- this.loadDocument(this.previewUri, this.isUndocked);
17249
+ if ((_a = this.item) === null || _a === void 0 ? void 0 : _a.subscriptions.length) {
17250
+ this.subscriptionIconTooltip = this.createSubscriptionIconTooltip(this.item);
17116
17251
  }
17117
17252
  }
17118
- refresh() {
17119
- this.loadDocument(this.previewUri, true);
17120
- }
17121
- openPdfViewer(uri) {
17122
- this.pdfjs.contentWindow.PDFViewerApplication.open(uri).then(() => (this.hasError = false)).catch((err) => {
17123
- this.hasError = !this.isOctetStream;
17124
- this.isNotSupported = this.isOctetStream;
17125
- });
17126
- // this.search();
17127
- }
17128
- getViewer(file) {
17129
- var _a, _b;
17130
- const isVideo = !!((_a = file.mimegroup) === null || _a === void 0 ? void 0 : _a.match(/^audio|^video/));
17131
- const defaultViewer = isVideo ? MediaComponent.VIDEO_VIEWER : MediaComponent.PDF_VIEWER;
17132
- const fileExtension = ((_b = file.path) === null || _b === void 0 ? void 0 : _b.includes('.')) ? file.path.split('.').pop() : '';
17133
- const mimeType = file.mimetype;
17134
- const config = this.customConfig.find((c) => {
17135
- const matchMT = !c.mimeType || (typeof c.mimeType === 'string' ? [c.mimeType] : c.mimeType).includes(mimeType === null || mimeType === void 0 ? void 0 : mimeType.toLowerCase());
17136
- const matchFE = !c.fileExtension || (typeof c.fileExtension === 'string' ? [c.fileExtension] : c.fileExtension).includes((fileExtension).toLowerCase());
17137
- return matchMT && matchFE && (!c.type || c.type === 'default');
17138
- });
17139
- const parameters = {
17140
- file,
17141
- path: location.origin + file.uri,
17142
- pathPdf: location.origin + file.uriPdf,
17143
- viewer: (config === null || config === void 0 ? void 0 : config.viewer) || defaultViewer,
17144
- load: config === null || config === void 0 ? void 0 : config.load,
17145
- fileExtension,
17146
- mimeType,
17147
- theme: '',
17148
- defaultViewer,
17149
- previewUri: ''
17150
- };
17151
- parameters.viewer = this.pluginsService.applyFunction(parameters.viewer, 'component, dmsObject, parameters', [this, this._dmsObject, parameters]) || defaultViewer;
17152
- const extend = this.customConfig.find((c) => c.type === 'extend');
17153
- if (extend)
17154
- parameters.viewer = this.pluginsService.applyFunction(extend.viewer, 'component, dmsObject, parameters', [this, this._dmsObject, parameters]);
17155
- parameters.previewUri = this.resolveUri(parameters.viewer, parameters);
17156
- return parameters;
17253
+ set dmsObject2(v) {
17254
+ this.item2 = v;
17255
+ this.onHasError();
17256
+ this.onIndexDataSaved(null, this.item2);
17157
17257
  }
17158
- resolveUri(viewer, parameters) {
17159
- return (viewer ? document.baseURI : '') + viewer
17160
- .replace('${originalPath}', parameters.path)
17161
- .replace('${path}', encodeURIComponent(parameters.path))
17162
- .replace('${pathPdf}', encodeURIComponent(parameters.pathPdf))
17163
- .replace('${fileExtension}', encodeURIComponent(parameters.fileExtension))
17164
- .replace('${mimeType}', encodeURIComponent(parameters.mimeType))
17165
- .replace('${theme}', encodeURIComponent(parameters.theme))
17166
- .replace('${lang}', ContentPreviewService.mapLang(this.translate.currentLang));
17258
+ get dataType() {
17259
+ return this.item ? this.item.typeName : 'none';
17167
17260
  }
17168
- undock(open = true) {
17169
- if (this.undockDisabled) {
17170
- return;
17171
- }
17172
- this.isUndocked = !this.isUndocked;
17173
- if (!this.isUndocked) {
17174
- ContentPreviewService.closeWin();
17175
- }
17176
- else {
17177
- this._ngZone.runOutsideAngular(_ => {
17178
- const interval = setInterval(() => {
17179
- if (this.undockWin && !ContentPreviewService.undockWinActive()) {
17180
- clearInterval(interval);
17181
- this._ngZone.run(() => this.isUndocked && this.undock());
17182
- }
17183
- }, 1000);
17184
- fromEvent(window, 'beforeunload')
17185
- .pipe(takeWhile(() => this.isUndocked))
17186
- .subscribe(e => ContentPreviewService.closeWin());
17187
- });
17188
- }
17189
- if (open) {
17190
- this.loadDocument(this.previewUri, true);
17191
- }
17261
+ getDmsParams(data) {
17262
+ return data ? Object.assign(Object.assign({}, data), { type: data.typeName || data.type }) : null;
17192
17263
  }
17193
- openWindow(src, clean = false) {
17194
- ContentPreviewService.undockWin(src);
17195
- if (clean) {
17196
- while (this.undockWin.document.body.firstChild) {
17197
- this.undockWin.document.body.removeChild(this.undockWin.document.body.firstChild);
17264
+ updateContent() {
17265
+ if (this.applySelection) {
17266
+ if (this.enableCompare) {
17267
+ this.selection
17268
+ .find(this.applySelection.in)
17269
+ .selection$
17270
+ .pipe(takeUntil(this.componentDestroyed$))
17271
+ .subscribe((res) => {
17272
+ this.dmsParams = this.parseDmsParams(res[0]);
17273
+ this.dmsParams2 = this.parseDmsParams(res[1]);
17274
+ });
17275
+ return;
17198
17276
  }
17199
- }
17200
- else if (!src && !this.undockWin.document.querySelector('#no-file')) {
17201
- this.undockWin.document.write(`<div id="no-file" style="opacity: 0.06; display: flex; height: 100%; width: 100%; align-items: center; justify-content: center;">
17202
- <svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 48 48">
17203
- <path d="M29 4H14.6c-.8 0-1.5.2-2 .6l27.2 27.2v-17L29 4zm-.7 11.6V7.8l7.8 7.8h-7.8zM43.4 40.8l-2.5 2.5-3.5-3.5c-.4.1-.8.2-1.2.2H14.6c-2
17204
- 0-3.6-1.6-3.6-3.6V13.5L5.9 8.4l2.5-2.5L11 8.4l28.7 28.7 3.1 3.1.6.6z"/>
17205
- </svg>
17206
- <div>`);
17207
- }
17208
- }
17209
- loadDocument(uri, force) {
17210
- var _a, _b;
17211
- if (force) {
17212
- this.isLarge = false;
17213
- }
17214
- if (!force && (this.disabled || !uri || (uri === this.latestUri && !this.hasError))) {
17215
- return false;
17216
- }
17217
- this.latestUri = uri || '';
17218
- this.hasError = false;
17219
- this.isNotSupported = false;
17220
- if (this.isUndocked) {
17221
- this.openWindow(this.latestUri);
17222
- const onload = () => { var _a; return this.pluginsService.applyFunction((_a = this.viewer) === null || _a === void 0 ? void 0 : _a.load, 'iframe, component', [this.undockWin, this]); };
17223
- this.iframeInit(this.undockWin, ((_a = this.viewer) === null || _a === void 0 ? void 0 : _a.load) && onload);
17224
- return false;
17225
- }
17226
- if (this.isLarge) {
17227
- return false;
17228
- }
17229
- if (this.isMedia) {
17230
- this.renderer.setAttribute(this.iframeMedia.nativeElement, 'src', this.latestUri);
17231
- const onload = () => { var _a; return this.pluginsService.applyFunction((_a = this.viewer) === null || _a === void 0 ? void 0 : _a.load, 'iframe, component', [this.iframeMedia.nativeElement, this]); };
17232
- this.iframeInit(this.iframeMedia.nativeElement, ((_b = this.viewer) === null || _b === void 0 ? void 0 : _b.load) && onload);
17233
- }
17234
- else {
17235
- if (!this.pdfjs) {
17236
- this.pdfjs = this.iframe.nativeElement;
17237
- this.renderer.setAttribute(this.pdfjs, 'src', MediaComponent.PDF_VIEWER.replace(/\?.*/, '?file=&'));
17238
- this.renderer.listen(this.pdfjs, 'load', () => {
17239
- this.pdfjs.contentWindow.PDFViewerApplicationOptions.set('sidebarViewOnLoad', 0);
17240
- this.pdfjs.contentWindow.PDFViewerApplicationOptions.set('viewOnLoad', false);
17241
- this.pdfjs.contentWindow.PDFViewerApplicationOptions.set('locale', ContentPreviewService.mapLang(this.translate.currentLang));
17242
- this.pdfjs.contentWindow.document.webL10n.setLanguage(ContentPreviewService.mapLang(this.translate.currentLang));
17243
- this.pdfjs.contentWindow.PDFViewerApplication._initializeL10n();
17244
- this.pdfjs.contentWindow.PDFViewerApplicationOptions.set('viewerCssTheme', 1);
17245
- this.pdfjs.contentWindow.PDFViewerApplication._forceCssTheme();
17246
- this.pdfjs.contentWindow.PDFViewerApplication.appConfig.viewerContainer
17247
- .addEventListener('dragenter', e => window.document.dispatchEvent(new DragEvent('dragenter', e)));
17248
- this.pdfjs.contentWindow.PDFViewerApplication.appConfig.viewerContainer.addEventListener('drop', e => e.stopPropagation());
17249
- this.openPdfViewer(this.latestUri);
17277
+ else {
17278
+ this.selection
17279
+ .find(this.applySelection.in)
17280
+ .focus$
17281
+ .pipe(takeUntil(this.componentDestroyed$))
17282
+ .subscribe(res => {
17283
+ this.showLoader = true;
17284
+ this.loadDmsObject(this.parseDmsParams(res)).subscribe((res) => {
17285
+ // refreshing object details may result in an updated version of the object
17286
+ // so we'll use this trigger to also emitt those changes to other listening components
17287
+ if (this.item && res && (this.item.id === res.id) && res.version > this.item.version) {
17288
+ this.eventService.trigger(EnaioEvent.DMS_OBJECT_UPDATED, res);
17289
+ }
17290
+ this.dmsObject = res;
17291
+ this.showLoader = false;
17292
+ }, Utils.throw((error) => {
17293
+ this.uploadRegistry.unregister(this.uploadTarget.id);
17294
+ return this.onHasError(true, true, false);
17295
+ }));
17250
17296
  });
17251
17297
  }
17252
- else if (this.pdfjs.contentWindow && this.pdfjs.contentWindow.PDFViewerApplication) {
17253
- this.pdfjs.contentWindow.PDFViewerApplication.pdfSidebar.close();
17254
- this.openPdfViewer(this.latestUri);
17255
- }
17256
17298
  }
17257
17299
  }
17258
- /**
17259
- * Custom search inside PDF.JS based on search term
17260
- * @param term search term
17261
- * @param win iframe window
17262
- */
17263
- searchPDF(term = '', win) {
17264
- var _a, _b;
17265
- // remove all special characters
17266
- term = (term || '').replace(/[\"|\*]/g, '').trim();
17267
- if (term && ((_b = (_a = win === null || win === void 0 ? void 0 : win.PDFViewerApplication) === null || _a === void 0 ? void 0 : _a.appConfig) === null || _b === void 0 ? void 0 : _b.findBar)) {
17268
- // win.PDFViewerApplication.findController.executeCommand('find', {
17269
- // caseSensitive: false,
17270
- // findPrevious: undefined,
17271
- // highlightAll: true,
17272
- // phraseSearch: true,
17273
- // query: term
17274
- // });
17275
- win.PDFViewerApplication.appConfig.findBar.findField.value = term;
17276
- win.PDFViewerApplication.appConfig.findBar.highlightAllCheckbox.checked = true;
17277
- win.PDFViewerApplication.appConfig.findBar.caseSensitiveCheckbox.checked = false;
17300
+ refreshContent() {
17301
+ this.updateContent();
17302
+ }
17303
+ prepareIndexDataPreview(item, formData) {
17304
+ const { id, data, type, created, modified, content, contentFileName, contentFileSize, version } = item;
17305
+ return this.system
17306
+ .getObjectTypeForm(type.name, 'EDIT')
17307
+ .pipe(map(form => {
17308
+ let indexDataPreview = {
17309
+ form,
17310
+ data: formData || data
17311
+ };
17312
+ let baseparams = {
17313
+ id,
17314
+ type: type.name,
17315
+ createdOn: new Date(created.on),
17316
+ modifiedOn: new Date(modified.on),
17317
+ createdBy: `${created.by.title} (${created.by.name})`,
17318
+ modifiedBy: `${modified.by.title} (${modified.by.name})`,
17319
+ contentFileName: contentFileName ? contentFileName : null,
17320
+ contentFileSize: contentFileSize ? Number(contentFileSize) : null,
17321
+ version: version || 0,
17322
+ mimeGroup: content ? content.contents ? content.contents[0].mimegroup : null : null,
17323
+ digest: content ? content.contents ? content.contents[0].digest : null : null,
17324
+ contentId: content ? content.contents ? content.id : null : null
17325
+ };
17326
+ return { indexDataPreview, baseparams };
17327
+ }));
17328
+ }
17329
+ onHasError(hasError = false, nodmsobject = false, showLoader = false) {
17330
+ this.hasError = hasError;
17331
+ this.nodmsobject = nodmsobject;
17332
+ this.showLoader = showLoader;
17333
+ this.hasContent.emit(!hasError);
17334
+ }
17335
+ loadDmsObject(params) {
17336
+ var _a;
17337
+ if (!this.enableCompare && params) {
17338
+ delete params.version;
17278
17339
  }
17340
+ // check for valid id
17341
+ return ((_a = params === null || params === void 0 ? void 0 : params.id) === null || _a === void 0 ? void 0 : _a.length) === 32 ? this.dmsService.getDmsObjectByParams(params) : of(null);
17279
17342
  }
17280
- preventDropEvent(win) {
17281
- var _a, _b, _c, _d;
17282
- if ((_b = (_a = this.iframe) === null || _a === void 0 ? void 0 : _a.src) === null || _b === void 0 ? void 0 : _b.startsWith(window.location.origin)) {
17283
- (_c = win === null || win === void 0 ? void 0 : win.document) === null || _c === void 0 ? void 0 : _c.addEventListener('drop', (e) => e.stopPropagation());
17284
- // dispach drag & drop events to main window
17285
- (_d = win === null || win === void 0 ? void 0 : win.document) === null || _d === void 0 ? void 0 : _d.addEventListener('dragenter', (e) => {
17286
- window.document.dispatchEvent(new DragEvent('dragenter', e));
17287
- setTimeout(() => window.document.dispatchEvent(new DragEvent('dragleave', e)), 10);
17343
+ downloadOriginalContent() {
17344
+ this.backend.downloadContent([this.item]);
17345
+ }
17346
+ showActions() {
17347
+ const actions = [this.item, this.item2].filter(v => v);
17348
+ this.actionService.showActions(actions, 'DMS_OBJECT');
17349
+ }
17350
+ openObject(id, _type) {
17351
+ const queryParams = { queryParams: { 'type': _type } };
17352
+ return this.router.navigate(['/object', id], queryParams);
17353
+ }
17354
+ // executed when the dms object changed due to saving its indexdata
17355
+ onIndexDataSaved(formData, item) {
17356
+ if (!this.item) {
17357
+ this.indexDataPreview = null;
17358
+ this.baseparams = null;
17359
+ }
17360
+ if (!this.item2) {
17361
+ this.indexDataPreview2 = null;
17362
+ this.baseparams2 = null;
17363
+ }
17364
+ if (item) {
17365
+ this.prepareIndexDataPreview(item, formData)
17366
+ .subscribe(data => {
17367
+ if (item === this.item) {
17368
+ this.indexDataPreview = data.indexDataPreview;
17369
+ this.baseparams = data.baseparams;
17370
+ }
17371
+ else {
17372
+ this.indexDataPreview2 = data.indexDataPreview;
17373
+ this.baseparams2 = data.baseparams;
17374
+ }
17288
17375
  });
17289
17376
  }
17290
17377
  }
17291
- iframeInit(iframe = this.iframe, onload) {
17292
- if (iframe) {
17293
- iframe._init || fromEvent(iframe, 'load')
17294
- .pipe(takeUntil(this.componentDestroyed$))
17295
- .subscribe(() => {
17296
- const win = this.setApi(iframe);
17297
- onload && onload();
17298
- setTimeout(() => {
17299
- // this.loading = false;
17300
- this.searchPDF(this.searchTerm, win);
17301
- this.preventDropEvent(win);
17302
- }, 100);
17303
- });
17304
- iframe._init = !!this.setApi(iframe);
17378
+ get referenceTitle() {
17379
+ return this.item.contextFolder ? this.item.contextFolder.title : this.item.title;
17380
+ }
17381
+ isJournalObject(item) {
17382
+ return item.type.supertypes.find(sT => sT === 'sysjournalobject');
17383
+ }
17384
+ isVisible(id) {
17385
+ return this.panelOrder.master.includes(id) || this.panelOrder.slave.includes(id);
17386
+ }
17387
+ createSubscriptionIconTooltip(item) {
17388
+ let tooltip = '';
17389
+ const modes = this.item.subscriptions.map(subscription => subscription.mode);
17390
+ const subscribedToAllChanges = modes.includes(SubscriptionMode.DMS_OBJECT_CHANGED) || (modes.includes(SubscriptionMode.ONLY_DOCUMENT_CONTENT_CHANGED) && modes.includes(SubscriptionMode.ONLY_INDEX_DATA_CHANGED));
17391
+ const subscribedToMetaChangesOnly = modes.includes(SubscriptionMode.ONLY_INDEX_DATA_CHANGED) && !modes.includes(SubscriptionMode.ONLY_DOCUMENT_CONTENT_CHANGED) && !modes.includes(SubscriptionMode.DMS_OBJECT_CHANGED);
17392
+ const subscribedToContentChangesOnly = modes.includes(SubscriptionMode.ONLY_DOCUMENT_CONTENT_CHANGED) && !modes.includes(SubscriptionMode.ONLY_INDEX_DATA_CHANGED) && !modes.includes(SubscriptionMode.DMS_OBJECT_CHANGED);
17393
+ if (subscribedToAllChanges) {
17394
+ tooltip = this.translate.instant('eo.object.subscription.icon.tooltip.allChanges');
17395
+ }
17396
+ else if (subscribedToMetaChangesOnly) {
17397
+ tooltip = this.translate.instant('eo.object.subscription.icon.tooltip.meta');
17398
+ }
17399
+ else if (subscribedToContentChangesOnly) {
17400
+ tooltip = this.translate.instant('eo.object.subscription.icon.tooltip.content');
17305
17401
  }
17402
+ return tooltip;
17306
17403
  }
17307
- setApi(iframe) {
17308
- // set api to iframe window
17309
- const win = (iframe === null || iframe === void 0 ? void 0 : iframe.contentWindow) || iframe;
17310
- win['api'] = window['api'];
17311
- return win;
17404
+ ngOnInit() {
17405
+ this.capabilities = this.capabilityService.getCapabilities();
17406
+ this.updateContent();
17407
+ this.eventService
17408
+ .on(EnaioEvent.DMS_OBJECT_UPDATED)
17409
+ .pipe(takeUntil(this.componentDestroyed$))
17410
+ .subscribe(event => {
17411
+ if (event.data && this.item.id === event.data.id) {
17412
+ this.dmsObject = this.dmsService.createLocalCopyOfDMSObject(event.data);
17413
+ if (this.preview && !this.preview.disabled) {
17414
+ this.preview.refresh();
17415
+ }
17416
+ }
17417
+ });
17418
+ this.eventService
17419
+ .on(EnaioEvent.INBOX_ITEM_CONFIRMED)
17420
+ .pipe(takeUntil(this.componentDestroyed$))
17421
+ .subscribe(event => {
17422
+ if (this.item && this.item.id === event.data.target.id) {
17423
+ this.dmsParams = null;
17424
+ }
17425
+ });
17312
17426
  }
17313
17427
  ngAfterViewInit() {
17428
+ let panels = this.tabPanels.toArray();
17429
+ this.tabPlugins.forEach(p => panels = panels.concat(p.tabPanels.toArray()));
17430
+ this.externalPanels.reset(panels);
17314
17431
  }
17315
17432
  ngOnDestroy() {
17316
- // return ContentPreviewService.undockWinActive() && this.openWindow('', true);
17433
+ this.uploadRegistry.unregister(this.uploadTarget.id);
17317
17434
  }
17318
17435
  }
17319
- MediaComponent.VIDEO_VIEWER = 'assets/_default/api/video/?path=${path}&mimeType=${mimeType}&fileExtension=${fileExtension}&lang=${lang}&theme=${theme}';
17320
- MediaComponent.PDF_VIEWER = 'assets/_default/api/pdf/web/viewer.html?file=&path=${path}&pathPdf=${pathPdf}&mimeType=${mimeType}&fileExtension=${fileExtension}&lang=${lang}&theme=${theme}&css=%23toolbarViewerRight%20%23print%7Bdisplay%3Ablock!important%3B%7D';
17321
- MediaComponent.decorators = [
17436
+ ObjectDetailsComponent.decorators = [
17322
17437
  { type: Component, args: [{
17323
- selector: 'eo-media',
17324
- template: "<div [hidden]=\"!open\">\r\n\r\n <!-- attachments overlay -->\r\n <div class=\"attachments\" *ngIf=\"attachments?.length\" [ngClass]=\"{notmain: latestUri !== previewUri && !attachmentsShown, active: attachmentsShown}\"\r\n (eoOutsideClick)=\"attachmentsShown = false\">\r\n <div class=\"attachments-list\" *ngIf=\"attachmentsShown\">\r\n <div class=\"attachment main\" (click)=\"selectAttachment(null, isLarge)\" [ngClass]=\"{current: latestUri === previewUri}\">{{dmsObjectTitle}}</div>\r\n <div class=\"attachment\" *ngFor=\"let a of attachments\" (click)=\"selectAttachment(a, isLarge)\" [ngClass]=\"{current: latestUri === a.previewUri}\">\r\n {{a.name}}\r\n </div>\r\n </div>\r\n\r\n <eo-icon class=\"button\" [badge]=\"attachments?.length\"\r\n (click)=\"attachmentsShown = !attachmentsShown\"\r\n [iconSrc]=\"attachmentsShown ? 'assets/_default/svg/ic_clear.svg' : 'assets/_default/svg/ic_attachment.svg'\"></eo-icon>\r\n </div>\r\n\r\n <div class=\"preview-container\" [style.overflow]=\"'hidden'\" [hidden]=\"hasError\">\r\n <iframe [hidden]=\"isNotSupported || isLarge || isUndocked || isMedia\" #iframe height=\"100%\" width=\"100%\" frameborder=\"0\"></iframe>\r\n <iframe [hidden]=\"isNotSupported || isLarge || isUndocked || !isMedia\" #iframeMedia height=\"100%\" width=\"100%\" frameborder=\"0\"></iframe>\r\n <div class=\"slide\" *ngIf=\"isNotSupported || isLarge || isUndocked\">\r\n <!--<img *ngIf=\"!isMedia\" [src]=\"slideUri\" alt=\"preview\">-->\r\n <eo-icon *ngIf=\"mediaType\" [objectType]=\"mediaType\"></eo-icon>\r\n <div class=\"large-content\" *ngIf=\"isLarge && !isUndocked\" (click)=\"loadDocument(latestUri, true)\" translate>eo.object.preview.proceed</div>\r\n <div class=\"large-content not-supported\" *ngIf=\"isNotSupported\" translate>eo.object.preview.not.supported</div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div [hidden]=\"!hasError && open\" class=\"empty-container\">\r\n <eo-icon class=\"nofile\" [iconSrc]=\"'assets/_default/svg/ic_no-file.svg'\"></eo-icon>\r\n</div>\r\n\r\n<eo-icon *ngIf=\"!undockDisabled\" class=\"button undock\" [iconSrc]=\"'assets/_default/svg/ic_undock.svg'\" (click)=\"undock()\"></eo-icon>",
17438
+ selector: 'eo-object-details',
17439
+ template: "<div class=\"loader-overlay__mask\" *ngIf=\"showLoader\">\r\n <eo-loading-spinner class=\"object-detail__loader\"></eo-loading-spinner>\r\n</div>\r\n<ng-container *ngIf=\"item && !hasError; else noItem\">\r\n\r\n <div class=\"eo-head eo-head-tabs\" [eoShortcuts]=\"shortcuts\">\r\n <header class=\"eo-header\">\r\n <eo-icon class=\"eo-header-icon\" [objectType]=\"item.type\" [iconTitle]=\"item.type.label\"></eo-icon>\r\n <div class=\"eo-header-info\">\r\n <h2 class=\"eo-header-title\">{{item.title}}</h2>\r\n <h3 class=\"eo-header-subtitle\">{{item.description}}</h3>\r\n </div>\r\n\r\n <div class=\"eo-header-actions-container\">\r\n <div class=\"eo-header-actions\">\r\n <ng-container *ngIf=\"!isReference; else tplHeadReference\">\r\n <eo-icon class=\"button refresh-button\" [iconSrc]=\"'assets/_default/svg/ic_refresh.svg'\"\r\n [iconTitle]=\"('eo.list.refresh' | translate)\" (click)=\"refreshContent()\"></eo-icon>\r\n <eo-icon class=\"button sync-tab-btn\" *ngIf=\"enableCompare\" [ngClass]=\"{'enabled': enableSync}\"\r\n [iconSrc]=\"'assets/_default/svg/ic_link.svg'\" [iconTitle]=\"'eo.versions.detail.glue.tooltip' | translate\"\r\n (click)=\"enableSync = !enableSync\"></eo-icon>\r\n <eo-favorite-icon [item]=\"item\" *ngIf=\"!enableCompare && capabilities.favorites && !isJournalObject(item)\">\r\n </eo-favorite-icon>\r\n <eo-icon class=\"button oc-button\" *ngIf=\"!enableCompare && item.content\" (click)=\"downloadOriginalContent()\"\r\n [iconTitle]=\"('eo.action.download.dms.object.content.label' | translate)\" [iconSrc]=\"'assets/_default/svg/ic_content-download.svg'\"></eo-icon>\r\n <eo-edit-icon [item]=\"item\" *ngIf=\"!enableCompare && item.content && item.rights.edit && (agentIsConnected$ | async)\">\r\n </eo-edit-icon>\r\n <eo-icon class=\"button am-button\" (click)=\"showActions()\"\r\n [iconTitle]=\"('eo.object.details.actions.title' | translate)\"\r\n [iconSrc]=\"'assets/_default/svg/ic_more.svg'\"></eo-icon>\r\n </ng-container>\r\n\r\n <ng-template #tplHeadReference>\r\n <a class=\"button reference primary\"\r\n [title]=\"('eo.object.reference.tooltip' | translate:{title:referenceTitle})\"\r\n [routerLink]=\"['/object', item.id]\"\r\n [queryParams]=\"{type: item.typeName}\">{{'eo.object.reference.open'|translate}}</a>\r\n </ng-template>\r\n\r\n </div>\r\n\r\n <div class=\"eo-header-status-icons\">\r\n <a class=\"content-link\" [title]=\"'eo.object.contentlink.tooltip' | translate\" *ngIf=\"item.content?.linked\"\r\n [routerLink]=\"'/object/' + item.content.id\" [queryParams]=\"{type: item.content.type}\">\r\n <span>{{'eo.object.contentlink' | translate}}</span>\r\n </a>\r\n <eo-icon class=\"subscription-icon\" *ngIf=\"item.subscriptions.length\"\r\n [iconSrc]=\"'assets/_default/svg/ic_subscription.svg'\"\r\n [iconTitle]=\"subscriptionIconTooltip\"></eo-icon>\r\n <eo-icon class=\"resubmission-icon\" *ngIf=\"item.resubmissions.length\"\r\n [iconSrc]=\"'assets/_default/svg/ic_resubmission.svg'\"\r\n [iconTitle]=\"'eo.object.resubmission.tooltip' | translate\"></eo-icon>\r\n <eo-icon class=\"lock\" [ngClass]=\"{'myLock': item.lock.by.me}\" *ngIf=\"item.lock\"\r\n [iconSrc]=\"'assets/_default/svg/ic_lock.svg'\" [iconTitle]=\"lockTooltip\"></eo-icon>\r\n <eo-icon class=\"finalized-icon\" *ngIf=\"item.isFinalized\" [iconSrc]=\"'assets/_default/svg/ic_finalized.svg'\"\r\n [iconTitle]=\"'eo.object.finalized.tooltip' | translate\"></eo-icon>\r\n </div>\r\n </div>\r\n </header>\r\n </div>\r\n <div class=\"eo-body\">\r\n <eo-tab-container [pluginPanels]=\"externalPanels\" [cacheLayout]=\"!enableCompare && cacheLayout\" [defaultPanelOrder]=\"!enableCompare && panelOrder\"\r\n [dndEnabled]=\"!enableCompare\" [enableSlave]=\"!enableCompare || item2\" [enableSync]=\"enableCompare && enableSync\"\r\n [version]=\"enableCompare && {master: item && item.version, slave: item2 && item2.version}\">\r\n\r\n <eo-tab-panel [id]=\"'summary'\" *ngIf=\"isVisible('summary')\" header=\"{{'eo.object.summary.title' | translate}}\">\r\n <ng-template pTemplate=\"content\">\r\n <eo-indexdata-summary [indexdata]=\"indexDataPreview\" [baseparams]=\"baseparams\" [dmsObject]=\"item\"\r\n [enableVersions]=\"!enableCompare\"></eo-indexdata-summary>\r\n </ng-template>\r\n </eo-tab-panel>\r\n\r\n <eo-tab-panel [id]=\"'indexdata'\" *ngIf=\"isVisible('indexdata')\" header=\"{{'eo.object.indexdata.title' | translate}}\">\r\n <ng-template pTemplate=\"content\">\r\n <eo-object-form-edit [dmsObject]=\"item\" (indexDataSaved)=\"onIndexDataSaved($event, item)\"\r\n [formDisabled]=\"enableCompare || isReference\"></eo-object-form-edit>\r\n </ng-template>\r\n </eo-tab-panel>\r\n \r\n <eo-tab-panel [id]=\"'preview'\" *ngIf=\"isVisible('preview')\" header=\"{{'eo.object.content.title' | translate}}\" [isSlave]=\"!enableCompare\"\r\n #preview>\r\n <ng-template pTemplate=\"content\" *ngIf=\"!undockWinActive; else loadPreview\">\r\n <eo-media *ngIf=\"item\" [dmsObject]=\"item\" [disabled]=\"!preview.selected\"\r\n [useVersion]=\"item.id === item.content?.id\" [searchTerm]=\"searchTerm\" #viewer></eo-media>\r\n </ng-template>\r\n <ng-template #loadPreview>\r\n <eo-media *ngIf=\"item\" [dmsObject]=\"item\"\r\n [useVersion]=\"item.id === item.content?.id\" [searchTerm]=\"searchTerm\" #viewer></eo-media>\r\n </ng-template>\r\n </eo-tab-panel>\r\n\r\n <eo-tab-panel *ngIf=\"isVisible('history') && !enableCompare\" [id]=\"'history'\" header=\"{{'eo.object.history.title' | translate}}\" #history>\r\n <ng-template pTemplate=\"content\">\r\n <eo-object-history *ngIf=\"history.selected\" [params]=\"{id: item.id, type: item.type?.qname}\">\r\n </eo-object-history>\r\n </ng-template>\r\n </eo-tab-panel>\r\n\r\n <eo-tab-panel *ngIf=\"isVisible('links') && !enableCompare\" [id]=\"'links'\" header=\"{{'eo.object.links.title' | translate}}\" #links>\r\n <ng-template pTemplate=\"content\">\r\n <eo-object-links *ngIf=\"links.selected\" [dmsObject]=\"item\"></eo-object-links>\r\n </ng-template>\r\n </eo-tab-panel>\r\n\r\n <!-- slave tabs -->\r\n\r\n <eo-tab-panel *ngIf=\"isVisible('summary') && enableCompare\" [id]=\"'summary2'\" header=\"{{'eo.object.summary.title' | translate}}\"\r\n [isSlave]=\"true\">\r\n <ng-template pTemplate=\"content\">\r\n <eo-indexdata-summary *ngIf=\"item2\" [indexdata]=\"indexDataPreview2\" [baseparams]=\"baseparams2\"\r\n [dmsObject]=\"item2\" [enableVersions]=\"!enableCompare\"></eo-indexdata-summary>\r\n </ng-template>\r\n </eo-tab-panel>\r\n\r\n <eo-tab-panel *ngIf=\"isVisible('indexdata') && enableCompare\" [id]=\"'indexdata2'\" header=\"{{'eo.object.indexdata.title' | translate}}\"\r\n [isSlave]=\"true\">\r\n <ng-template pTemplate=\"content\">\r\n <eo-object-form-edit *ngIf=\"item2\" [dmsObject]=\"item2\" (indexDataSaved)=\"onIndexDataSaved($event, item2)\"\r\n [formDisabled]=\"enableCompare || isReference\"></eo-object-form-edit>\r\n </ng-template>\r\n </eo-tab-panel>\r\n\r\n <eo-tab-panel *ngIf=\"isVisible('preview') && enableCompare\" [id]=\"'preview2'\" header=\"{{'eo.object.content.title' | translate}}\"\r\n [isSlave]=\"true\" #preview2>\r\n <ng-template pTemplate=\"content\">\r\n <eo-media *ngIf=\"item2\" [dmsObject]=\"item2\" [disabled]=\"!preview2.selected\" [undockDisabled]=\"enableCompare\"\r\n [useVersion]=\"true\" [searchTerm]=\"searchTerm\" #viewer2></eo-media>\r\n </ng-template>\r\n </eo-tab-panel>\r\n \r\n <eo-tab-panel *ngIf=\"enableCompare && enableDiff\" [id]=\"'changes'\" header=\"{{'eo.object.changes.title' | translate}}\"\r\n [isSlave]=\"true\">\r\n <ng-template pTemplate=\"content\">\r\n <eo-indexdata-summary *ngIf=\"item2\" [diff]=\"{indexdata : indexDataPreview, indexdata2: indexDataPreview2, baseparams: baseparams, baseparams2: baseparams2}\" \r\n [dmsObject]=\"item2\" [enableVersions]=\"!enableCompare\"></eo-indexdata-summary>\r\n </ng-template>\r\n </eo-tab-panel>\r\n\r\n <ng-content></ng-content>\r\n\r\n </eo-tab-container>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-template #noItem>\r\n <span class=\"not-found\" *ngIf=\"nodmsobject\" translate>eo.bpm.nodmsobject</span>\r\n <eo-error-message *ngIf=\"!showLoader\"\r\n [emptyState]=\"{icon: emptyState.icon, text: emptyState.text, className: emptyState.className}\">\r\n <ng-content select=\".error\"></ng-content>\r\n </eo-error-message>\r\n</ng-template>",
17325
17440
  providers: [ContentPreviewService],
17326
- styles: [":host .empty-container{align-items:center;bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0}:host .empty-container .nofile{height:128px;opacity:.06;width:128px}:host .button.undock{background-color:rgba(var(--color-primary-rgb),.6);bottom:var(--app-pane-padding);opacity:.2;position:absolute;right:var(--app-pane-padding)}:host .button.undock:hover{opacity:.5}:host .preview-container{bottom:0;left:0;position:absolute;right:0;top:0}:host .preview-container .slide{align-items:center;display:flex;flex:1;flex-direction:column;height:100%;justify-content:center;min-height:0;min-width:0}:host .preview-container .slide .large-content{background-color:rgba(var(--color-primary-rgb),.5);color:var(--color-white);cursor:pointer;display:flex;flex:1;flex-direction:row;justify-content:center;min-height:0;min-width:0;padding:var(--app-pane-padding);position:absolute;top:0;width:100%}:host .preview-container .slide .large-content.not-supported,:host .preview-container .slide .large-content:hover{background-color:rgba(var(--color-primary-rgb),.9)}:host .preview-container .slide .large-content.not-supported{cursor:inherit}:host .preview-container .slide img{padding:var(--app-pane-padding);width:100%}:host .preview-container .slide eo-icon{height:128px;opacity:.2;width:128px}:host .attachments{align-items:flex-end;background-color:rgba(var(--color-primary-rgb),.6);border-radius:2px;bottom:calc(var(--app-pane-padding)*3);color:var(--color-white);display:flex;flex-flow:row;max-width:calc(100% - 16px);position:absolute;right:calc(var(--app-pane-padding)/2);z-index:5}:host .attachments:hover{background-color:rgba(var(--color-primary-rgb),.9)}:host .attachments eo-icon{flex:0 0 auto;margin:calc(var(--app-pane-padding)/2)}:host .attachments .attachments-list{display:flex;flex:1;flex-direction:row;flex-flow:wrap;max-height:150px;min-height:0;min-width:0;overflow:auto;padding:calc(var(--app-pane-padding)/2)}:host .attachments .attachments-list .attachment{-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;background-color:rgba(var(--color-white-rgb),.1);border:1px solid rgba(var(--color-white-rgb),0);border-radius:4px;cursor:pointer;display:inline-block;margin:calc(var(--app-pane-padding)/8);max-width:none;overflow:hidden;padding:calc(var(--app-pane-padding)/4);text-overflow:ellipsis;transition:all var(--app-default-transition-duration) ease-in-out;white-space:nowrap}:host .attachments .attachments-list .attachment:hover{border-color:rgba(var(--color-white-rgb),.5)}:host .attachments .attachments-list .attachment.current{background-color:var(--color-accent)}:host .attachments .attachments-list .attachment.main{background-color:var(--color-primary);flex:1 1 100%;order:100}:host .attachments .attachments-list .attachment:not(.main){font-style:italic}:host .attachments.notmain{background-color:var(--color-accent)}:host .attachments.active{align-items:center;background-color:rgba(var(--color-primary-rgb),.9);bottom:calc(var(--app-pane-padding)/2)}"]
17441
+ styles: [":host{background:var(--panel-background-grey);display:flex;flex:1;flex-direction:column;height:100%;min-height:0;min-width:0;overflow-y:auto}:host .eo-head .eo-header .eo-header-info .eo-header-subtitle,:host .eo-head .eo-header .eo-header-info .eo-header-title{-moz-user-select:text;-webkit-user-select:text;user-select:text}:host .eo-body__not-available{background:rgba(var(--color-black-rgb),.4);opacity:.4}:host .sync-tab-btn.enabled{color:var(--color-accent)}:host .lock{background:var(--color-error)!important;border-radius:2px;color:var(--color-white);height:18px;padding:1px;width:18px}:host .lock.myLock{background:var(--state-orange)!important;color:var(--color-white)}:host .not-found{background:var(--color-error);border-radius:2px;color:var(--panel-background);flex:0 0 auto;margin:calc(var(--app-pane-padding)/2);padding:calc(var(--app-pane-padding)/4);text-align:center}:host .eo-header-status-icons{display:flex;justify-content:flex-end;margin-top:var(--app-pane-padding)}:host .eo-header-status-icons>eo-icon{background-color:var(--color-primary-2);color:var(--color-white);height:18px;margin-left:1px;padding:calc(var(--app-pane-padding)/4);width:18px}:host .eo-header-status-icons>eo-icon:first-child{border-bottom-left-radius:4px;border-top-left-radius:4px}:host .eo-header-status-icons>eo-icon:last-child{border-bottom-right-radius:4px;border-top-right-radius:4px}:host .eo-header-status-icons>eo-icon.finalized-icon{background-color:var(--color-success)}:host .eo-header-status-icons>eo-icon.lock{background:var(--color-error)!important;border-radius:2px;color:var(--color-white);height:18px;padding:1px;width:18px}:host .eo-header-status-icons>eo-icon.lock.myLock{background:var(--state-orange)!important}:host .eo-header-status-icons>a{align-items:center;background-color:var(--color-success);border-radius:2px;color:var(--color-white);display:flex;font-size:var(--font-hint);line-height:var(--font-hint);margin:0 calc(var(--app-pane-padding)/4);padding:0 4px 1px;text-decoration:none}:host .loader-overlay__mask{-webkit-animation:eoFadeIn .5s;animation:eoFadeIn .5s;background:rgba(var(--color-white-rgb),.8);display:flex;height:100%;position:absolute;width:100%;z-index:11}:host .loader-overlay__mask .object-detail__loader{margin:auto}:host ::ng-deep .sync-tab-btn{color:rgba(var(--color-black-rgb),.2)}:host ::ng-deep .sync-tab-btn .svg-link{fill:transparent}:host ::ng-deep .sync-tab-btn.enabled .svg-link{fill:currentColor}:host ::ng-deep div[eosplitgutter]{background-color:var(--color-white)!important}:host ::ng-deep .indexdata-summary,:host ::ng-deep .object-form-edit{margin:var(--app-pane-padding)}:host ::ng-deep #indexdata{overflow:hidden}:host ::ng-deep #indexdata .object-form-edit{background:transparent!important;height:100%;margin:0;position:relative}:host ::ng-deep #indexdata .object-form-edit eo-object-form{background:transparent;overflow:auto}:host ::ng-deep #indexdata .object-form-edit eo-object-form .eo-object-form{background:var(--panel-background);border:1px solid rgba(var(--color-black-rgb),.1);margin:var(--app-pane-padding)}:host ::ng-deep #indexdata .object-form-edit .form-controls{-webkit-animation:eoFadeInUp .2s;animation:eoFadeInUp .2s;border:4px solid var(--panel-background-grey)}:host ::ng-deep #indexdata .object-form-edit .form-controls .buttons{background:var(--panel-background);border-top:1px solid var(--panel-divider-color);padding:calc(var(--app-pane-padding)/2) var(--app-pane-padding)!important}"]
17327
17442
  },] }
17328
17443
  ];
17329
- MediaComponent.ctorParameters = () => [
17330
- { type: TranslateService },
17331
- { type: DmsService },
17332
- { type: Renderer2 },
17444
+ ObjectDetailsComponent.ctorParameters = () => [
17445
+ { type: Router },
17446
+ { type: ActivatedRoute },
17333
17447
  { type: SystemService },
17334
- { type: NgZone },
17448
+ { type: EmptyStateService },
17449
+ { type: AgentService },
17450
+ { type: BackendService },
17451
+ { type: DmsService },
17452
+ { type: SelectionService },
17453
+ { type: ActionService },
17454
+ { type: CapabilitiesService },
17455
+ { type: UploadRegistryService },
17456
+ { type: EventService },
17335
17457
  { type: Config },
17336
- { type: PluginsService },
17337
- { type: BackendService }
17458
+ { type: TranslateService }
17338
17459
  ];
17339
- MediaComponent.propDecorators = {
17340
- undockDisabled: [{ type: Input }],
17341
- enableCloseBtn: [{ type: Input }],
17342
- useVersion: [{ type: Input }],
17343
- open: [{ type: HostBinding, args: ['class.open',] }],
17344
- codesystem: [{ type: ViewChild, args: ['codesystem',] }],
17345
- iframe: [{ type: ViewChild, args: ['iframe', { static: true },] }],
17346
- iframeMedia: [{ type: ViewChild, args: ['iframeMedia', { static: true },] }],
17347
- setAttachments: [{ type: Input, args: ['attachments',] }],
17348
- setSearchTerm: [{ type: Input, args: ['searchTerm',] }],
17349
- disabled: [{ type: Input }],
17350
- previewUri: [{ type: Input }],
17351
- previewFile: [{ type: Input }],
17352
- dmsObject: [{ type: Input }]
17460
+ ObjectDetailsComponent.propDecorators = {
17461
+ preview: [{ type: ViewChild, args: ['viewer',] }],
17462
+ isReference: [{ type: HostBinding, args: ['class.reference',] }],
17463
+ reference: [{ type: Input }],
17464
+ searchTerm: [{ type: Input }],
17465
+ enableCompare: [{ type: Input }],
17466
+ enableDiff: [{ type: Input }],
17467
+ enableSync: [{ type: Input }],
17468
+ cacheLayout: [{ type: Input }],
17469
+ emptyState: [{ type: Input }],
17470
+ dmsParams: [{ type: Input, args: ['params',] }],
17471
+ dmsParams2: [{ type: Input, args: ['params2',] }],
17472
+ dmsObject: [{ type: Input, args: ['item',] }],
17473
+ dmsObject2: [{ type: Input, args: ['item2',] }],
17474
+ tabPanels: [{ type: ContentChildren, args: [TabPanelComponent,] }],
17475
+ tabPlugins: [{ type: ContentChildren, args: [TabPluginComponent,] }],
17476
+ applySelection: [{ type: Input }],
17477
+ parseDmsParams: [{ type: Input }],
17478
+ hasContent: [{ type: Output }],
17479
+ dataType: [{ type: HostBinding, args: ['attr.data-type',] }]
17353
17480
  };
17354
17481
 
17355
- class MediaModule {
17356
- }
17357
- MediaModule.decorators = [
17358
- { type: NgModule, args: [{
17359
- imports: [
17360
- CommonModule,
17361
- UiModule,
17362
- FormsModule,
17363
- FormElementsModule
17364
- ],
17365
- declarations: [MediaComponent],
17366
- exports: [MediaComponent]
17367
- },] }
17368
- ];
17369
-
17370
17482
  class TabContainerComponent {
17371
17483
  constructor(layout) {
17372
17484
  this.layout = layout;
@@ -18043,7 +18155,7 @@ class FavoriteIconComponent extends UnsubscribeOnDestroy {
18043
18155
  FavoriteIconComponent.decorators = [
18044
18156
  { type: Component, args: [{
18045
18157
  selector: 'eo-favorite-icon',
18046
- template: "<eo-icon class=\"button favorite\"\r\n [ngClass]=\"{active: item.isFavorite}\"\r\n [iconTitle]=\"tooltip\"\r\n [iconSrc]=\"'assets/_default/svg/ic_favorite.svg'\"\r\n (click)=\"toggle($event)\">\r\n</eo-icon>\r\n\r\n<eo-dialog\r\n [title]=\"('eo.favorite.icon.dialog.title' | translate)\"\r\n [(visible)]=\"display\"\r\n [minWidth]=\"400\"\r\n [focusOnShow]=\"false\"\r\n [styleClass]=\"'favorite-form__dialog'\">\r\n\r\n <form name=\"favoriteForm\" (ngSubmit)=\"save()\">\r\n <eo-form-input [label]=\" 'eo.favorite.icon.dialog.input.label' | translate\">\r\n <input [(ngModel)]=\"value\" maxlength=\"250\" [ngModelOptions]=\"{standalone: true}\" #favName />\r\n </eo-form-input>\r\n <div class=\"action-buttons favorite-form__dialog--action-buttons flex-row\">\r\n <button type=\"button\" class=\"button cancel\" (click)=\"toggle($event, true)\" translate>eo.favorite.icon.dialog.cancel</button>\r\n <button type=\"submit\" [disabled]=\"!value\" class=\"button primary\" translate>eo.favorite.icon.dialog.save</button>\r\n </div>\r\n </form>\r\n</eo-dialog>\r\n",
18158
+ template: "<eo-icon class=\"button favorite\"\r\n [ngClass]=\"{active: item.isFavorite}\"\r\n [iconTitle]=\"tooltip\"\r\n [iconSrc]=\"'assets/_default/svg/ic_favorite.svg'\"\r\n (click)=\"toggle($event)\">\r\n</eo-icon>\r\n\r\n<eo-dialog\r\n [title]=\"('eo.favorite.icon.dialog.title' | translate)\"\r\n [(visible)]=\"display\"\r\n [minWidth]=\"400\"\r\n [styleClass]=\"'favorite-form__dialog'\">\r\n\r\n <form name=\"favoriteForm\" (ngSubmit)=\"save()\">\r\n <eo-form-input [label]=\" 'eo.favorite.icon.dialog.input.label' | translate\">\r\n <input [(ngModel)]=\"value\" maxlength=\"250\" [ngModelOptions]=\"{standalone: true}\" #favName />\r\n </eo-form-input>\r\n <div class=\"action-buttons favorite-form__dialog--action-buttons flex-row\">\r\n <button type=\"button\" class=\"button cancel\" (click)=\"toggle($event, true)\" translate>eo.favorite.icon.dialog.cancel</button>\r\n <button type=\"submit\" [disabled]=\"!value\" class=\"button primary\" translate>eo.favorite.icon.dialog.save</button>\r\n </div>\r\n </form>\r\n</eo-dialog>\r\n",
18047
18159
  styles: [":host eo-icon.active{color:var(--color-favorite)}::ng-deep .favorite-form__dialog{min-height:unset!important;padding:8px}::ng-deep .favorite-form__dialog--header{background:#fff!important;color:rgba(var(--color-black-rgb),.54)!important;font-size:1.17em!important;font-weight:400!important;margin:0;padding:0 0 1em!important}::ng-deep .favorite-form__dialog .eo-dialog-content{overflow:hidden}"]
18048
18160
  },] }
18049
18161
  ];
@@ -20252,7 +20364,7 @@ class PrepareDetailsComponent extends UnsubscribeOnDestroy {
20252
20364
  PrepareDetailsComponent.decorators = [
20253
20365
  { type: Component, args: [{
20254
20366
  selector: 'eo-prepare-details',
20255
- template: "<div class=\"prepareDetails__wrapper\" *ngIf=\"!loading; else mainSpinner\">\r\n <section class=\"prepareDetails\" *ngIf=\"preparedItem && preparePhase; else noItem\"\r\n [ngClass]=\"{multifile: preparedItem.contentcount > 1, committing: committing}\">\r\n <div class=\"eo-head\">\r\n\r\n <div class=\"header-info\">\r\n <div class=\"header-title\">{{header.title}}</div>\r\n <div class=\"header-sub-title h-location\" *ngIf=\"!header.location.link; else linked\">{{header.location.label}}\r\n </div>\r\n <div class=\"header-sub-title h-subtitle\">{{header.subtitle}}</div>\r\n\r\n <ng-template #linked>\r\n <div class=\"header-sub-title h-subtitle-detailed\">\r\n <span translate>eo.prepare.location.title.prefix</span>\r\n <a [routerLink]=\"header.location.link\">{{header.location.label}}</a>\r\n </div>\r\n </ng-template>\r\n </div>\r\n\r\n <div class=\"actions\">\r\n <eo-icon class=\"btn btn-download\"\r\n *ngIf=\"preparePhase.name === 'content' ? selectedTemplateFile : preparePhase.data.previewFile\"\r\n [iconSrc]=\"'assets/_default/svg/ic_content-download.svg'\"\r\n [iconTitle]=\"('eo.action.download.dms.object.content.label' | translate)\" (click)=\"download()\"></eo-icon>\r\n <eo-icon class=\"btn btn-delete\" [iconSrc]=\"'assets/_default/svg/ic_trash.svg'\"\r\n (click)=\"showDeleteDialog = true;\"></eo-icon>\r\n <!-- buttons while choosing a template -->\r\n <ng-container *ngIf=\"chooseTemplate\">\r\n <button class=\"btn-tpl-abort\" (click)=\"showTemplateSelector(false)\"\r\n translate>eo.prepare.template.abort</button>\r\n <button class=\"primary btn-tpl-apply\" (click)=\"addTemplate(selectedTemplate)\" [disabled]=\"!selectedTemplate\"\r\n translate>eo.prepare.template.select</button>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"preparePhase.name === 'indexdata'\">\r\n <button (click)=\"commit()\" class=\"btn-idx-save\"\r\n [ngClass]=\"{primary: preparedItem.state.parentisroot && preparedItem.contentcount > 1}\"\r\n [disabled]=\"formState?.invalid || committing\" translate>eo.prepare.save</button>\r\n\r\n <button (click)=\"commit(true)\" [disabled]=\"formState?.invalid || committing\" class=\"primary btn-idx-saveopen\"\r\n [hidden]=\"preparedItem?.state.parentisroot && preparedItem?.contentcount > 1\"\r\n translate>eo.prepare.saveopen</button>\r\n\r\n </ng-container>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"eo-body\" [ngSwitch]=\"preparePhase.name\" *ngIf=\"!committing; else spinner\">\r\n\r\n <!-- PHASE TYPE -->\r\n <div class=\"phase type\" *ngSwitchCase=\"'type'\">\r\n\r\n <!-- with preview -->\r\n <eo-split [gutterSize]=\"16\" [gutterColor]=\"'#fff'\" [visibleTransition]=\"true\"\r\n *ngIf=\"preparePhase.data.previewFile; else nopreview\" [cacheLayout]=\"'prepare.details.phase.type'\">\r\n <eo-split-area [size]=\"30\">\r\n\r\n <div class=\"form-files\">\r\n <div class=\"object-type-select empty\" *ngIf=\"preparedItem.types.length == 0\" translate>\r\n eo.prepare.details.type.empty</div>\r\n <div class=\"object-type-select empty\"\r\n *ngIf=\"!preparedItem.state.typeselectedallowed && preparedItem.state.typeselected\"\r\n [translateParams]=\"{type: preparedItem.selectedtype.label, filename: getFileNames(preparedItem)}\"\r\n translate>eo.prepare.details.type.notallowed</div>\r\n\r\n <div class=\"object-type-select\">\r\n <div class=\"object-type\" *ngFor=\"let type of preparedItem.types; trackBy: trackByIdFn\"\r\n (click)=\"selectObjectType(type)\">\r\n <div class=\"type-icon\">\r\n <eo-icon [iconId]=\"type.icon.id\"></eo-icon>\r\n </div>\r\n <div class=\"content\">\r\n <div class=\"title\">{{type.label}}</div>\r\n <div class=\"description\">{{type.description}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"content-select\">\r\n <h2 translate>eo.prepare.details.contents.title</h2>\r\n <div class=\"content\"\r\n *ngFor=\"let content of preparedItem.contents; trackBy: trackByIndexFn; index as idx;\"\r\n [ngClass]=\"{selected: preparePhase.data.previewIndex == idx}\" (click)=\"setPreviewUri(idx)\">\r\n <span>{{content.path}}</span>\r\n <eo-icon class=\"btn btn-delete-content\" [iconSrc]=\"'assets/_default/svg/ic_trash.svg'\"\r\n (click)=\"showContentDeleteDialog = true; deletedContentIndex = idx;\"></eo-icon>\r\n <div *ngIf=\"content.existscount > 0\" class=\"attention\" title=\"{{'eo.prepare.content.existscount.message'|translate: ({count: content.existscount})}}\">!</div>\r\n </div>\r\n </div>\r\n </div>\r\n </eo-split-area>\r\n <eo-split-area [size]=\"70\">\r\n <div class=\"eo-media-wrap\">\r\n <eo-prepare-content-exists-info [content]=\"preparedItem.contents[preparePhase.data.previewIndex]\">\r\n </eo-prepare-content-exists-info>\r\n <eo-media [previewFile]=\"preparePhase.data.previewFile\"></eo-media>\r\n </div>\r\n </eo-split-area>\r\n </eo-split>\r\n\r\n <!-- without preview -->\r\n <ng-template #nopreview>\r\n <div class=\"form-files\">\r\n <div class=\"object-type-select\">\r\n <div class=\"object-type\" *ngFor=\"let type of preparedItem.types; trackBy: trackByIdFn\"\r\n (click)=\"selectObjectType(type)\">\r\n <div class=\"type-icon\">\r\n <eo-icon [iconId]=\"type.icon.id\"></eo-icon>\r\n </div>\r\n <div class=\"content\">\r\n <div class=\"title\">{{type.label}}</div>\r\n <div class=\"description\">{{type.description}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n </div>\r\n\r\n <!-- PHASE CONTENT -->\r\n <div class=\"phase content\" *ngSwitchCase=\"'content'\">\r\n\r\n <!-- panel for selecting a template to be used as items content -->\r\n <eo-split [gutterSize]=\"16\" [gutterColor]=\"'#fff'\" [visibleTransition]=\"true\"\r\n *ngIf=\"chooseTemplate; else attach\" [cacheLayout]=\"'prepare.details.phase.content'\">\r\n <eo-split-area [size]=\"40\">\r\n\r\n <!-- list of available templates -->\r\n <eo-list-container #eoList [loading]=\"false\" class=\"templates\">\r\n <div class=\"eo-header\">\r\n <eo-icon class=\"eo-header-icon\" [iconSrc]=\"'assets/_default/svg/ic_template.svg'\"></eo-icon>\r\n <div class=\"eo-header-info\">\r\n <div class=\"eo-header-title\" translate>eo.prepare.template.list.title</div>\r\n </div>\r\n <div class=\"eo-header-actions\">\r\n\r\n <eo-overlay #oFilter [iconSrc]=\"'assets/_default/svg/ic_filter.svg'\" [iconClass]=\"'primary'\"\r\n class=\"overlay-filter\" [title]=\"'eo.list.filter' | translate\"\r\n (active)=\"oFilter.onActiveChanged($event)\">\r\n <eo-custom-filter #cFilter (change)=\"cFilter.updateGrid(eoList.eoGridSubject, $event)\"\r\n (active)=\"oFilter.onActiveChanged($event)\">\r\n <eo-text-filter [title]=\"'eo.prepare.template.filter.text.title' | translate\"\r\n [matchFields]=\"['title', 'description', 'tags']\"\r\n [placeholder]=\"'eo.prepare.template.filter.text.title'\"></eo-text-filter>\r\n <eo-set-filter [operator]=\"'OR'\" [title]=\"'eo.prepare.template.filter.set.title' | translate\"\r\n *ngIf=\"tagFilterOptions?.length\" [options]=\"tagFilterOptions\"></eo-set-filter>\r\n </eo-custom-filter>\r\n </eo-overlay>\r\n\r\n </div>\r\n </div>\r\n <div class=\"eo-body\">\r\n <eo-grid #eoGrid *ngIf=\"gridOptions?.rowData\" [gridOptions]=\"gridOptions\" [fullWidth]=\"true\"\r\n [showHeader]=\"true\" [showFooter]=\"false\" [selectionLimit]=\"1\"\r\n (eoGridSelectionChanged)=\"selectTemplate($event[0])\">\r\n </eo-grid>\r\n </div>\r\n </eo-list-container>\r\n\r\n </eo-split-area>\r\n <eo-split-area [size]=\"60\">\r\n\r\n <!-- preview of selected template -->\r\n <eo-media [previewFile]=\"selectedTemplateFile\"></eo-media>\r\n\r\n </eo-split-area>\r\n </eo-split>\r\n\r\n <!-- add content general overview (upload, template, none) -->\r\n <ng-template #attach>\r\n\r\n <div class=\"info\" *ngIf=\"!uploadInProgress\" translate>eo.prepare.attachment.info</div>\r\n <input type=\"file\" #file (change)=\"fileChangeListener($event.target.files)\">\r\n\r\n <div class=\"attachments\" *ngIf=\"!uploadInProgress; else uploadspinner\">\r\n\r\n <!-- upload a file -->\r\n <div class=\"attachment att-file\" *ngIf=\"preparePhase.data.file\" (click)=\"upload()\">\r\n <div class=\"img\">\r\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_file_upload.svg'\"></eo-icon>\r\n </div>\r\n <h3 translate>eo.prepare.attachment.upload.title</h3>\r\n <p translate>eo.prepare.attachment.upload.desc</p>\r\n </div>\r\n\r\n <!-- select a template -->\r\n <div class=\"attachment att-tmpl\" *ngIf=\"preparePhase.data.templates.length > 0\"\r\n (click)=\"showTemplateSelector(true)\">\r\n <div class=\"img\">\r\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_prepare_add.svg'\"></eo-icon>\r\n </div>\r\n <h3 translate>eo.prepare.attachment.template.title</h3>\r\n <p translate>eo.prepare.attachment.template.desc</p>\r\n </div>\r\n\r\n <!-- no file -->\r\n <div class=\"attachment att-none\" *ngIf=\"preparePhase.data.withoutFile\" (click)=\"noFile()\">\r\n <div class=\"img\">\r\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_no-file.svg'\"></eo-icon>\r\n </div>\r\n <h3 translate>eo.prepare.attachment.nofile.title</h3>\r\n <p translate>eo.prepare.attachment.nofile.desc</p>\r\n </div>\r\n\r\n </div>\r\n\r\n </ng-template>\r\n\r\n <!-- upload progress indicator -->\r\n <ng-template #uploadspinner>\r\n <div class=\"upload-indicator\">\r\n <eo-loading-spinner [size]=\"'large'\"></eo-loading-spinner>\r\n </div>\r\n </ng-template>\r\n </div>\r\n\r\n <!-- PHASE INDEXDATA -->\r\n <div class=\"phase indexdata\" *ngSwitchCase=\"'indexdata'\">\r\n\r\n <!-- form and preview -->\r\n <eo-split [gutterSize]=\"16\" [gutterColor]=\"'#fff'\" [visibleTransition]=\"true\"\r\n *ngIf=\"preparePhase.data.previewFile; else justform\" [cacheLayout]=\"'prepare.details.phase.indexdata'\">\r\n <eo-split-area [size]=\"50\">\r\n\r\n <div class=\"form-files\">\r\n\r\n <!-- indexdata form -->\r\n <ng-container *ngTemplateOutlet=\"justform\"></ng-container>\r\n\r\n <!-- list of contents (in case of bulk upload) that can be previewed -->\r\n <div class=\"content-select\">\r\n\r\n <h2 translate>eo.prepare.details.contents.title</h2>\r\n <div class=\"content\"\r\n *ngFor=\"let content of preparedItem.contents; trackBy: trackByIndexFn; index as idx\"\r\n [ngClass]=\"{selected: preparePhase.data.previewIndex === idx}\" (click)=\"setPreviewUri(idx)\">\r\n {{content.path}} <span *ngIf=\"content.existscount > 0\" class=\"attention\" title=\"{{'eo.prepare.content.existscount.message'|translate: ({count: content.existscount})}}\">!</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </eo-split-area>\r\n <eo-split-area [size]=\"50\">\r\n <div class=\"eo-media-wrap\">\r\n <eo-prepare-content-exists-info [content]=\"preparedItem.contents[preparePhase.data.previewIndex]\">\r\n </eo-prepare-content-exists-info>\r\n <eo-media [previewFile]=\"preparePhase.data.previewFile\"></eo-media>\r\n </div>\r\n </eo-split-area>\r\n </eo-split>\r\n\r\n <!-- just the form -->\r\n <ng-template #justform>\r\n <div class=\"form-container situation-create\" *ngIf=\"formOptions\">\r\n <eo-object-form #form [formOptions]=\"formOptions\" (statusChanged)=\"onFormStatusChanged($event)\">\r\n </eo-object-form>\r\n </div>\r\n </ng-template>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n </section>\r\n\r\n <ng-template #spinner>\r\n <div class=\"eo-body\">\r\n <eo-loading-spinner size=\"medium\"></eo-loading-spinner>\r\n </div>\r\n </ng-template>\r\n\r\n</div>\r\n\r\n<ng-template #mainSpinner>\r\n <div class=\"prepareDetails__main-spinner\">\r\n <eo-loading-spinner size=\"medium\"></eo-loading-spinner>\r\n </div>\r\n</ng-template>\r\n\r\n\r\n<ng-template #noItem>\r\n <eo-error-message [emptyState]=\"{icon: emptyState.icon, text: emptyState.text, className: emptyState.className}\">\r\n <ng-content select=\".error\"></ng-content>\r\n </eo-error-message>\r\n</ng-template>\r\n\r\n<eo-dialog [title]=\"'eo.prepare.details.delete.dialog.title' | translate\"\r\n [(visible)]=\"showDeleteDialog\" [focusOnShow]=\"false\" [minWidth]=\"400\" [styleClass]=\"'prepare-delete__dialog'\">\r\n\r\n<div>{{'eo.prepare.details.delete.dialog.message' | translate}}</div>\r\n\r\n <div class=\"action-buttons prepare-delete--action-buttons flex-row\">\r\n <button type=\"button\" class=\"button cancel\" (click)=\"showDeleteDialog = false\"\r\n translate>eo.prepare.details.delete.dialog.cancel</button>\r\n <button type=\"button\" #confirmDelete (click)=\"removeItem(preparedItem)\" class=\"button primary\"\r\n translate>eo.prepare.details.delete.dialog.ok</button>\r\n </div>\r\n</eo-dialog>\r\n\r\n<eo-dialog [title]=\"'eo.prepare.details.delete.content.dialog.title' | translate\"\r\n [(visible)]=\"showContentDeleteDialog\" [focusOnShow]=\"false\" [minWidth]=\"400\" [styleClass]=\"'prepare-delete__dialog'\">\r\n\r\n<div>{{'eo.prepare.details.delete.content.dialog.message' | translate: ({contentPath: preparedItem?.contents ? preparedItem?.contents[deletedContentIndex]?.path : ''})}}</div>\r\n\r\n <div class=\"action-buttons prepare-delete--action-buttons flex-row\">\r\n <button type=\"button\" class=\"button cancel\" (click)=\"showContentDeleteDialog = false\"\r\n translate>eo.prepare.details.delete.dialog.cancel</button>\r\n <button type=\"button\" #confirmContentDelete (click)=\"removeItemContent(preparedItem, deletedContentIndex)\" class=\"button primary\"\r\n translate>eo.prepare.details.delete.dialog.ok</button>\r\n </div>\r\n</eo-dialog>\r\n",
20367
+ template: "<div class=\"prepareDetails__wrapper\" *ngIf=\"!loading; else mainSpinner\">\r\n <section class=\"prepareDetails\" *ngIf=\"preparedItem && preparePhase; else noItem\"\r\n [ngClass]=\"{multifile: preparedItem.contentcount > 1, committing: committing}\">\r\n <div class=\"eo-head\">\r\n\r\n <div class=\"header-info\">\r\n <div class=\"header-title\">{{header.title}}</div>\r\n <div class=\"header-sub-title h-location\" *ngIf=\"!header.location.link; else linked\">{{header.location.label}}\r\n </div>\r\n <div class=\"header-sub-title h-subtitle\">{{header.subtitle}}</div>\r\n\r\n <ng-template #linked>\r\n <div class=\"header-sub-title h-subtitle-detailed\">\r\n <span translate>eo.prepare.location.title.prefix</span>\r\n <a [routerLink]=\"header.location.link\">{{header.location.label}}</a>\r\n </div>\r\n </ng-template>\r\n </div>\r\n\r\n <div class=\"actions\">\r\n <eo-icon class=\"btn btn-download\"\r\n *ngIf=\"preparePhase.name === 'content' ? selectedTemplateFile : preparePhase.data.previewFile\"\r\n [iconSrc]=\"'assets/_default/svg/ic_content-download.svg'\"\r\n [iconTitle]=\"('eo.action.download.dms.object.content.label' | translate)\" (click)=\"download()\"></eo-icon>\r\n <eo-icon class=\"btn btn-delete\" [iconSrc]=\"'assets/_default/svg/ic_trash.svg'\"\r\n (click)=\"showDeleteDialog = true;\"></eo-icon>\r\n <!-- buttons while choosing a template -->\r\n <ng-container *ngIf=\"chooseTemplate\">\r\n <button class=\"btn-tpl-abort\" (click)=\"showTemplateSelector(false)\"\r\n translate>eo.prepare.template.abort</button>\r\n <button class=\"primary btn-tpl-apply\" (click)=\"addTemplate(selectedTemplate)\" [disabled]=\"!selectedTemplate\"\r\n translate>eo.prepare.template.select</button>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"preparePhase.name === 'indexdata'\">\r\n <button (click)=\"commit()\" class=\"btn-idx-save\"\r\n [ngClass]=\"{primary: preparedItem.state.parentisroot && preparedItem.contentcount > 1}\"\r\n [disabled]=\"formState?.invalid || committing\" translate>eo.prepare.save</button>\r\n\r\n <button (click)=\"commit(true)\" [disabled]=\"formState?.invalid || committing\" class=\"primary btn-idx-saveopen\"\r\n [hidden]=\"preparedItem?.state.parentisroot && preparedItem?.contentcount > 1\"\r\n translate>eo.prepare.saveopen</button>\r\n\r\n </ng-container>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"eo-body\" [ngSwitch]=\"preparePhase.name\" *ngIf=\"!committing; else spinner\">\r\n\r\n <!-- PHASE TYPE -->\r\n <div class=\"phase type\" *ngSwitchCase=\"'type'\">\r\n\r\n <!-- with preview -->\r\n <eo-split [gutterSize]=\"16\" [gutterColor]=\"'#fff'\" [visibleTransition]=\"true\"\r\n *ngIf=\"preparePhase.data.previewFile; else nopreview\" [cacheLayout]=\"'prepare.details.phase.type'\">\r\n <eo-split-area [size]=\"30\">\r\n\r\n <div class=\"form-files\">\r\n <div class=\"object-type-select empty\" *ngIf=\"preparedItem.types.length == 0\" translate>\r\n eo.prepare.details.type.empty</div>\r\n <div class=\"object-type-select empty\"\r\n *ngIf=\"!preparedItem.state.typeselectedallowed && preparedItem.state.typeselected\"\r\n [translateParams]=\"{type: preparedItem.selectedtype.label, filename: getFileNames(preparedItem)}\"\r\n translate>eo.prepare.details.type.notallowed</div>\r\n\r\n <div class=\"object-type-select\">\r\n <div class=\"object-type\" *ngFor=\"let type of preparedItem.types; trackBy: trackByIdFn\"\r\n (click)=\"selectObjectType(type)\">\r\n <div class=\"type-icon\">\r\n <eo-icon [iconId]=\"type.icon.id\"></eo-icon>\r\n </div>\r\n <div class=\"content\">\r\n <div class=\"title\">{{type.label}}</div>\r\n <div class=\"description\">{{type.description}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"content-select\">\r\n <h2 translate>eo.prepare.details.contents.title</h2>\r\n <div class=\"content\"\r\n *ngFor=\"let content of preparedItem.contents; trackBy: trackByIndexFn; index as idx;\"\r\n [ngClass]=\"{selected: preparePhase.data.previewIndex == idx}\" (click)=\"setPreviewUri(idx)\">\r\n <span>{{content.path}}</span>\r\n <eo-icon class=\"btn btn-delete-content\" [iconSrc]=\"'assets/_default/svg/ic_trash.svg'\"\r\n (click)=\"showContentDeleteDialog = true; deletedContentIndex = idx;\"></eo-icon>\r\n <div *ngIf=\"content.existscount > 0\" class=\"attention\" title=\"{{'eo.prepare.content.existscount.message'|translate: ({count: content.existscount})}}\">!</div>\r\n </div>\r\n </div>\r\n </div>\r\n </eo-split-area>\r\n <eo-split-area [size]=\"70\">\r\n <div class=\"eo-media-wrap\">\r\n <eo-prepare-content-exists-info [content]=\"preparedItem.contents[preparePhase.data.previewIndex]\">\r\n </eo-prepare-content-exists-info>\r\n <eo-media [previewFile]=\"preparePhase.data.previewFile\"></eo-media>\r\n </div>\r\n </eo-split-area>\r\n </eo-split>\r\n\r\n <!-- without preview -->\r\n <ng-template #nopreview>\r\n <div class=\"form-files\">\r\n <div class=\"object-type-select\">\r\n <div class=\"object-type\" *ngFor=\"let type of preparedItem.types; trackBy: trackByIdFn\"\r\n (click)=\"selectObjectType(type)\">\r\n <div class=\"type-icon\">\r\n <eo-icon [iconId]=\"type.icon.id\"></eo-icon>\r\n </div>\r\n <div class=\"content\">\r\n <div class=\"title\">{{type.label}}</div>\r\n <div class=\"description\">{{type.description}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n </div>\r\n\r\n <!-- PHASE CONTENT -->\r\n <div class=\"phase content\" *ngSwitchCase=\"'content'\">\r\n\r\n <!-- panel for selecting a template to be used as items content -->\r\n <eo-split [gutterSize]=\"16\" [gutterColor]=\"'#fff'\" [visibleTransition]=\"true\"\r\n *ngIf=\"chooseTemplate; else attach\" [cacheLayout]=\"'prepare.details.phase.content'\">\r\n <eo-split-area [size]=\"40\">\r\n\r\n <!-- list of available templates -->\r\n <eo-list-container #eoList [loading]=\"false\" class=\"templates\">\r\n <div class=\"eo-header\">\r\n <eo-icon class=\"eo-header-icon\" [iconSrc]=\"'assets/_default/svg/ic_template.svg'\"></eo-icon>\r\n <div class=\"eo-header-info\">\r\n <div class=\"eo-header-title\" translate>eo.prepare.template.list.title</div>\r\n </div>\r\n <div class=\"eo-header-actions\">\r\n\r\n <eo-overlay #oFilter [iconSrc]=\"'assets/_default/svg/ic_filter.svg'\" [iconClass]=\"'primary'\"\r\n class=\"overlay-filter\" [title]=\"'eo.list.filter' | translate\"\r\n (active)=\"oFilter.onActiveChanged($event)\">\r\n <eo-custom-filter #cFilter (change)=\"cFilter.updateGrid(eoList.eoGridSubject, $event)\"\r\n (active)=\"oFilter.onActiveChanged($event)\">\r\n <eo-text-filter [title]=\"'eo.prepare.template.filter.text.title' | translate\"\r\n [matchFields]=\"['title', 'description', 'tags']\"\r\n [placeholder]=\"'eo.prepare.template.filter.text.title'\"></eo-text-filter>\r\n <eo-set-filter [operator]=\"'OR'\" [title]=\"'eo.prepare.template.filter.set.title' | translate\"\r\n *ngIf=\"tagFilterOptions?.length\" [options]=\"tagFilterOptions\"></eo-set-filter>\r\n </eo-custom-filter>\r\n </eo-overlay>\r\n\r\n </div>\r\n </div>\r\n <div class=\"eo-body\">\r\n <eo-grid #eoGrid *ngIf=\"gridOptions?.rowData\" [gridOptions]=\"gridOptions\" [fullWidth]=\"true\"\r\n [showHeader]=\"true\" [showFooter]=\"false\" [selectionLimit]=\"1\"\r\n (eoGridSelectionChanged)=\"selectTemplate($event[0])\">\r\n </eo-grid>\r\n </div>\r\n </eo-list-container>\r\n\r\n </eo-split-area>\r\n <eo-split-area [size]=\"60\">\r\n\r\n <!-- preview of selected template -->\r\n <eo-media [previewFile]=\"selectedTemplateFile\"></eo-media>\r\n\r\n </eo-split-area>\r\n </eo-split>\r\n\r\n <!-- add content general overview (upload, template, none) -->\r\n <ng-template #attach>\r\n\r\n <div class=\"info\" *ngIf=\"!uploadInProgress\" translate>eo.prepare.attachment.info</div>\r\n <input type=\"file\" #file (change)=\"fileChangeListener($event.target.files)\">\r\n\r\n <div class=\"attachments\" *ngIf=\"!uploadInProgress; else uploadspinner\">\r\n\r\n <!-- upload a file -->\r\n <div class=\"attachment att-file\" *ngIf=\"preparePhase.data.file\" (click)=\"upload()\">\r\n <div class=\"img\">\r\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_file_upload.svg'\"></eo-icon>\r\n </div>\r\n <h3 translate>eo.prepare.attachment.upload.title</h3>\r\n <p translate>eo.prepare.attachment.upload.desc</p>\r\n </div>\r\n\r\n <!-- select a template -->\r\n <div class=\"attachment att-tmpl\" *ngIf=\"preparePhase.data.templates.length > 0\"\r\n (click)=\"showTemplateSelector(true)\">\r\n <div class=\"img\">\r\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_prepare_add.svg'\"></eo-icon>\r\n </div>\r\n <h3 translate>eo.prepare.attachment.template.title</h3>\r\n <p translate>eo.prepare.attachment.template.desc</p>\r\n </div>\r\n\r\n <!-- no file -->\r\n <div class=\"attachment att-none\" *ngIf=\"preparePhase.data.withoutFile\" (click)=\"noFile()\">\r\n <div class=\"img\">\r\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_no-file.svg'\"></eo-icon>\r\n </div>\r\n <h3 translate>eo.prepare.attachment.nofile.title</h3>\r\n <p translate>eo.prepare.attachment.nofile.desc</p>\r\n </div>\r\n\r\n </div>\r\n\r\n </ng-template>\r\n\r\n <!-- upload progress indicator -->\r\n <ng-template #uploadspinner>\r\n <div class=\"upload-indicator\">\r\n <eo-loading-spinner [size]=\"'large'\"></eo-loading-spinner>\r\n </div>\r\n </ng-template>\r\n </div>\r\n\r\n <!-- PHASE INDEXDATA -->\r\n <div class=\"phase indexdata\" *ngSwitchCase=\"'indexdata'\">\r\n\r\n <!-- form and preview -->\r\n <eo-split [gutterSize]=\"16\" [gutterColor]=\"'#fff'\" [visibleTransition]=\"true\"\r\n *ngIf=\"preparePhase.data.previewFile; else justform\" [cacheLayout]=\"'prepare.details.phase.indexdata'\">\r\n <eo-split-area [size]=\"50\">\r\n\r\n <div class=\"form-files\">\r\n\r\n <!-- indexdata form -->\r\n <ng-container *ngTemplateOutlet=\"justform\"></ng-container>\r\n\r\n <!-- list of contents (in case of bulk upload) that can be previewed -->\r\n <div class=\"content-select\">\r\n\r\n <h2 translate>eo.prepare.details.contents.title</h2>\r\n <div class=\"content\"\r\n *ngFor=\"let content of preparedItem.contents; trackBy: trackByIndexFn; index as idx\"\r\n [ngClass]=\"{selected: preparePhase.data.previewIndex === idx}\" (click)=\"setPreviewUri(idx)\">\r\n {{content.path}} <span *ngIf=\"content.existscount > 0\" class=\"attention\" title=\"{{'eo.prepare.content.existscount.message'|translate: ({count: content.existscount})}}\">!</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </eo-split-area>\r\n <eo-split-area [size]=\"50\">\r\n <div class=\"eo-media-wrap\">\r\n <eo-prepare-content-exists-info [content]=\"preparedItem.contents[preparePhase.data.previewIndex]\">\r\n </eo-prepare-content-exists-info>\r\n <eo-media [previewFile]=\"preparePhase.data.previewFile\"></eo-media>\r\n </div>\r\n </eo-split-area>\r\n </eo-split>\r\n\r\n <!-- just the form -->\r\n <ng-template #justform>\r\n <div class=\"form-container situation-create\" *ngIf=\"formOptions\">\r\n <eo-object-form #form [formOptions]=\"formOptions\" (statusChanged)=\"onFormStatusChanged($event)\">\r\n </eo-object-form>\r\n </div>\r\n </ng-template>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n </section>\r\n\r\n <ng-template #spinner>\r\n <div class=\"eo-body\">\r\n <eo-loading-spinner size=\"medium\"></eo-loading-spinner>\r\n </div>\r\n </ng-template>\r\n\r\n</div>\r\n\r\n<ng-template #mainSpinner>\r\n <div class=\"prepareDetails__main-spinner\">\r\n <eo-loading-spinner size=\"medium\"></eo-loading-spinner>\r\n </div>\r\n</ng-template>\r\n\r\n\r\n<ng-template #noItem>\r\n <eo-error-message [emptyState]=\"{icon: emptyState.icon, text: emptyState.text, className: emptyState.className}\">\r\n <ng-content select=\".error\"></ng-content>\r\n </eo-error-message>\r\n</ng-template>\r\n\r\n<eo-dialog [title]=\"'eo.prepare.details.delete.dialog.title' | translate\"\r\n [(visible)]=\"showDeleteDialog\" [focusOnShow]=\"false\" [minWidth]=\"400\" [styleClass]=\"'prepare-delete__dialog'\">\r\n\r\n<div>{{'eo.prepare.details.delete.dialog.message' | translate}}</div>\r\n\r\n <div class=\"action-buttons prepare-delete--action-buttons flex-row\">\r\n <button type=\"button\" class=\"button cancel\" (click)=\"showDeleteDialog = false\"\r\n translate>eo.prepare.details.delete.dialog.cancel</button>\r\n <button type=\"button\" #confirmDelete (click)=\"removeItem(preparedItem)\" class=\"button primary\"\r\n translate>eo.prepare.details.delete.dialog.ok</button>\r\n </div>\r\n</eo-dialog>\r\n\r\n<eo-dialog [title]=\"'eo.prepare.details.delete.content.dialog.title' | translate\"\r\n [(visible)]=\"showContentDeleteDialog\" [minWidth]=\"400\" [styleClass]=\"'prepare-delete__dialog'\">\r\n\r\n<div>{{'eo.prepare.details.delete.content.dialog.message' | translate: ({contentPath: preparedItem?.contents ? preparedItem?.contents[deletedContentIndex]?.path : ''})}}</div>\r\n\r\n <div class=\"action-buttons prepare-delete--action-buttons flex-row\">\r\n <button type=\"button\" class=\"button cancel\" (click)=\"showContentDeleteDialog = false\"\r\n translate>eo.prepare.details.delete.dialog.cancel</button>\r\n <button type=\"button\" #confirmContentDelete (click)=\"removeItemContent(preparedItem, deletedContentIndex)\" class=\"button primary\"\r\n translate>eo.prepare.details.delete.dialog.ok</button>\r\n </div>\r\n</eo-dialog>\r\n",
20256
20368
  styles: [":host{height:100%}:host .prepareDetails{background:var(--panel-background-grey);display:flex;flex:1;flex-direction:column;height:100%;min-height:0;min-width:0;overflow-y:auto}:host .prepareDetails .eo-media-wrap{display:flex;flex-flow:column;height:100%}:host .prepareDetails .eo-media-wrap eo-media{flex:1;position:relative}:host .prepareDetails__wrapper{height:100%}:host .prepareDetails__main-spinner{align-items:center;display:flex;height:100%;justify-content:center}:host .prepareDetails .content-select{display:none}:host .prepareDetails .eo-head{background-color:var(--color-white);display:flex;flex-flow:row nowrap}:host .prepareDetails .eo-head .header-info{color:var(--text-color-caption);flex:1 1 auto;font-size:var(--font-caption)}:host .prepareDetails .eo-head .header-info .header-title{color:var(--text-color-body);font-size:var(--font-title);padding-bottom:calc(var(--app-pane-padding)/2)}:host .prepareDetails .eo-head .header-info a{color:var(--color-accent);cursor:pointer;text-decoration:none}:host .prepareDetails .eo-head .actions{align-items:center;align-self:flex-start;display:flex}[dir=ltr] :host .prepareDetails .eo-head .actions button{margin-left:calc(var(--app-pane-padding)/2)}[dir=rtl] :host .prepareDetails .eo-head .actions button{margin-right:calc(var(--app-pane-padding)/2)}:host .prepareDetails .eo-head .actions eo-icon{cursor:pointer;padding:calc(var(--app-pane-padding)/4)}:host .prepareDetails .eo-body{overflow-y:hidden}:host .prepareDetails .eo-body eo-split-area{border-top:1px solid rgba(var(--color-black-rgb),.08);box-sizing:border-box}:host .prepareDetails .phase{height:100%;overflow-y:auto}:host .prepareDetails .phase.content{align-items:center;display:flex;flex-flow:column;justify-content:center}:host .prepareDetails .phase.content ::ng-deep eo-list-container.templates{background:linear-gradient(90deg,#fff 70%,var(--panel-background-lightgrey))}:host .prepareDetails .phase.content ::ng-deep eo-list-container.templates eo-grid ag-grid-angular.ag-theme-balham .chip:last-of-type:after{background:transparent!important}:host .prepareDetails .phase.content input[type=file]{display:none}:host .prepareDetails .phase.content .info{color:var(--text-color-caption);flex:0 0 auto;margin-bottom:var(--app-pane-padding)}:host .prepareDetails .phase.content .attachments{display:flex;flex:0 0 auto;flex-flow:row}:host .prepareDetails .phase.content .attachments .attachment:hover .img eo-icon{opacity:1}:host .prepareDetails .phase.content .attachments .attachment{background:var(--color-white);border-bottom:1px solid rgba(var(--color-black-rgb),.1);cursor:pointer;margin:calc(var(--app-pane-padding)/2);max-width:200px}:host .prepareDetails .phase.content .attachments .attachment .img{align-items:center;background:var(--color-accent);display:flex;flex-flow:column;justify-content:center;padding:calc(var(--app-pane-padding)*2) 0}:host .prepareDetails .phase.content .attachments .attachment .img eo-icon{-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;color:var(--color-white);height:48px;opacity:.5;transition:all var(--app-default-transition-duration) ease-in-out;width:48px}:host .prepareDetails .phase.content .attachments .attachment h3{font-size:var(--font-subhead);font-weight:var(--font-weight-normal);margin:0;padding:calc(var(--app-pane-padding)/2) var(--app-pane-padding)}:host .prepareDetails .phase.content .attachments .attachment p{color:var(--text-color-caption);margin:0;padding:0 var(--app-pane-padding) var(--app-pane-padding) var(--app-pane-padding)}:host .prepareDetails .phase div[eosplitgutter]{background-color:var(--color-light-blue)!important}:host .prepareDetails .phase.type .form-files .object-type-select{flex:1 1 auto;overflow-y:auto;padding:var(--app-pane-padding)}:host .prepareDetails .phase.type .form-files .object-type-select .object-type{-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;align-items:center;background:var(--color-white);cursor:pointer;display:flex;flex-flow:row nowrap;margin-bottom:1px;padding:calc(var(--app-pane-padding)/2);transition:all var(--app-default-transition-duration) ease-in-out}:host .prepareDetails .phase.type .form-files .object-type-select .object-type .type-icon{color:var(--text-color-hint)}:host .prepareDetails .phase.type .form-files .object-type-select .object-type .content{overflow:hidden;padding-left:calc(var(--app-pane-padding)/2)}:host .prepareDetails .phase.type .form-files .object-type-select .object-type .content .title{font-weight:var(--font-weight-bold);overflow:hidden;text-overflow:ellipsis}:host .prepareDetails .phase.type .form-files .object-type-select .object-type .content .description{color:var(--text-color-caption);overflow:hidden;text-overflow:ellipsis}:host .prepareDetails .phase .form-container eo-object-form{display:block;margin:var(--app-pane-padding)}:host .prepareDetails.committing .eo-head .actions .btn,:host .prepareDetails.committing .eo-head .actions button{display:none}:host .prepareDetails.committing .eo-body{align-items:center;display:flex;flex-flow:column;justify-content:center}:host .prepareDetails.multifile .form-files{bottom:0;display:flex;flex-flow:column;left:0;position:absolute;right:0;top:0}:host .prepareDetails.multifile .form-files .form-container{flex:1 1 auto;overflow-y:auto}:host .prepareDetails.multifile .content-select{border-top:1px solid var(--main-background);box-sizing:border-box;display:block;flex:0 0 30%;overflow-y:auto;padding:calc(var(--app-pane-padding)/2)}:host .prepareDetails.multifile .content-select h2{color:var(--text-color-caption);font-size:var(--font-subhead);font-weight:var(--font-weight-normal);margin:0;padding:calc(var(--app-pane-padding)/2);padding-bottom:var(--app-pane-padding)}:host .prepareDetails.multifile .content-select .content{-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;background:var(--color-white);color:var(--text-color-caption);cursor:pointer;display:flex;gap:8px;justify-content:space-between;margin-bottom:calc(var(--app-pane-padding)/2);overflow:hidden;padding:calc(var(--app-pane-padding)/2);text-overflow:ellipsis;transition:all var(--app-default-transition-duration) ease-in-out}:host .prepareDetails.multifile .content-select .content>span{flex:1;overflow:hidden;text-overflow:ellipsis}:host .prepareDetails.multifile .content-select .content .btn-delete-content{color:var(--text-color-caption);flex:0 0 16px;height:16px;width:16px}:host .prepareDetails.multifile .content-select .content .btn-delete-content:hover{background-color:var(--text-color-hint)}:host .prepareDetails.multifile .content-select .content div.attention{border:1px solid var(--color-warning);border-radius:2px;color:var(--color-warning);display:block;flex:0 0 auto;line-height:1em;padding:0 4px;right:4px;top:8px}:host .prepareDetails.multifile .content-select .content.selected{color:var(--color-accent)}:host .prepareDetails.multifile .content-select .content:hover{background:var(--panel-background-lightgrey)}:host ::ng-deep eo-grid,:host ::ng-deep eo-grid ag-grid-angular.ag-theme-balham,:host ::ng-deep eo-grid ag-grid-angular.ag-theme-balham .ag-row{background:transparent}:host ::ng-deep eo-grid ag-grid-angular.ag-theme-balham .ag-row:hover{background:var(--panel-background-lightgrey)}:host ::ng-deep eo-grid ag-grid-angular.ag-theme-balham .ag-row .ag-cell{border-bottom-color:var(--panel-header-border-bottom-color)}:host ::ng-deep eo-list-container .eo-head{height:48px}:host ::ng-deep eo-list-container .eo-grid-footer,:host ::ng-deep eo-list-container .eo-grid-header,:host ::ng-deep eo-list-container .eo-head{background:transparent;border-color:var(--panel-header-border-bottom-color)}:host ::ng-deep .eo-head .eo-header .eo-header-actions eo-icon{color:var(--text-color-hint)!important}:host ::ng-deep .eo-head .eo-header .eo-header-actions eo-icon:hover{color:var(--text-color-caption)!important}:host ::ng-deep .eo-head .eo-header .eo-header-actions eo-icon.active{color:var(--color-accent)!important}:host ::ng-deep .eo-header-icon,:host ::ng-deep .eo-header-title,:host ::ng-deep .template{color:var(--text-color-caption)}:host ::ng-deep .template{cursor:pointer;margin-bottom:1px}:host ::ng-deep .template .title{font-size:var(--font-body);font-weight:var(--font-weight-bold)}:host ::ng-deep .template .description{color:var(--text-color-caption)}:host ::ng-deep .template .chip{display:initial!important}::ng-deep .prepare-delete__dialog{min-height:unset!important;padding:8px}::ng-deep .prepare-delete__dialog--header{background:#fff!important;color:rgba(var(--color-black-rgb),.54)!important;font-size:1.17em!important;font-weight:400!important;margin:0;padding:0 0 1em!important}"]
20257
20369
  },] }
20258
20370
  ];
@@ -22218,10 +22330,10 @@ class AboutStateComponent {
22218
22330
  this.http = http;
22219
22331
  this.userService = userService;
22220
22332
  this.config = config;
22221
- this.__libraries__ = [{ "name": "@ag-grid-community/angular", "version": "22.1.2", "license": "MIT" }, { "name": "@ag-grid-community/client-side-row-model", "version": "22.1.1", "license": "MIT" }, { "name": "@ag-grid-community/core", "version": "22.1.1", "license": "MIT" }, { "name": "@ag-grid-community/csv-export", "version": "22.1.1", "license": "MIT" }, { "name": "@angular/animations", "version": "11.2.0", "license": "MIT" }, { "name": "@angular/cdk", "version": "11.2.0", "license": "MIT" }, { "name": "@angular/common", "version": "11.2.0", "license": "MIT" }, { "name": "@angular/compiler", "version": "11.2.0", "license": "MIT" }, { "name": "@angular/core", "version": "11.2.0", "license": "MIT" }, { "name": "@angular/forms", "version": "11.2.0", "license": "MIT" }, { "name": "@angular/platform-browser", "version": "11.2.0", "license": "MIT" }, { "name": "@angular/platform-browser-dynamic", "version": "11.2.0", "license": "MIT" }, { "name": "@angular/router", "version": "11.2.0", "license": "MIT" }, { "name": "@eo-sdk/core", "version": "8.14.0", "license": "MIT" }, { "name": "@ngx-pwa/local-storage", "version": "11.1.0", "license": "MIT" }, { "name": "@ngx-translate/core", "version": "13.0.0", "license": "MIT" }, { "name": "@types/lodash", "version": "4.14.88", "license": "MIT" }, { "name": "core-js", "version": "2.5.7", "license": "MIT" }, { "name": "file-saver", "version": "2.0.5", "license": "MIT" }, { "name": "font-awesome", "version": "4.7.0", "license": "(OFL-1.1 AND MIT)" }, { "name": "keyboardevent-key-polyfill", "version": "1.1.0", "license": "CC0-1.0" }, { "name": "keycode-js", "version": "0.0.4", "license": "MIT" }, { "name": "mobile-drag-drop", "version": "2.2.0", "license": "MIT" }, { "name": "moment", "version": "2.22.2", "license": "MIT" }, { "name": "ngx-toastr", "version": "13.2.0", "license": "MIT" }, { "name": "primeicons", "version": "1.0.0-beta.6", "license": "MIT" }, { "name": "primeng", "version": "6.0.0-beta.1", "license": "MIT" }, { "name": "reflect-metadata", "version": "0.1.10", "license": "Apache-2.0" }, { "name": "rxjs", "version": "6.6.3", "license": "Apache-2.0" }, { "name": "tslib", "version": "2.1.0", "license": "0BSD" }, { "name": "zone.js", "version": "0.10.3", "license": "MIT" }];
22333
+ this.__libraries__ = [{ "name": "@ag-grid-community/angular", "version": "22.1.2", "license": "MIT" }, { "name": "@ag-grid-community/client-side-row-model", "version": "22.1.1", "license": "MIT" }, { "name": "@ag-grid-community/core", "version": "22.1.1", "license": "MIT" }, { "name": "@ag-grid-community/csv-export", "version": "22.1.1", "license": "MIT" }, { "name": "@angular/animations", "version": "11.2.0", "license": "MIT" }, { "name": "@angular/cdk", "version": "11.2.0", "license": "MIT" }, { "name": "@angular/common", "version": "11.2.0", "license": "MIT" }, { "name": "@angular/compiler", "version": "11.2.0", "license": "MIT" }, { "name": "@angular/core", "version": "11.2.0", "license": "MIT" }, { "name": "@angular/forms", "version": "11.2.0", "license": "MIT" }, { "name": "@angular/platform-browser", "version": "11.2.0", "license": "MIT" }, { "name": "@angular/platform-browser-dynamic", "version": "11.2.0", "license": "MIT" }, { "name": "@angular/router", "version": "11.2.0", "license": "MIT" }, { "name": "@eo-sdk/core", "version": "8.15.0-rc.1", "license": "MIT" }, { "name": "@ngx-pwa/local-storage", "version": "11.1.0", "license": "MIT" }, { "name": "@ngx-translate/core", "version": "13.0.0", "license": "MIT" }, { "name": "@types/lodash", "version": "4.14.88", "license": "MIT" }, { "name": "core-js", "version": "2.5.7", "license": "MIT" }, { "name": "file-saver", "version": "2.0.5", "license": "MIT" }, { "name": "font-awesome", "version": "4.7.0", "license": "(OFL-1.1 AND MIT)" }, { "name": "keyboardevent-key-polyfill", "version": "1.1.0", "license": "CC0-1.0" }, { "name": "keycode-js", "version": "0.0.4", "license": "MIT" }, { "name": "mobile-drag-drop", "version": "2.2.0", "license": "MIT" }, { "name": "moment", "version": "2.22.2", "license": "MIT" }, { "name": "ngx-toastr", "version": "13.2.0", "license": "MIT" }, { "name": "primeicons", "version": "1.0.0-beta.6", "license": "MIT" }, { "name": "primeng", "version": "7.0.1", "license": "MIT" }, { "name": "reflect-metadata", "version": "0.1.10", "license": "Apache-2.0" }, { "name": "rxjs", "version": "6.6.3", "license": "Apache-2.0" }, { "name": "tslib", "version": "2.1.0", "license": "0BSD" }, { "name": "zone.js", "version": "0.10.3", "license": "MIT" }];
22222
22334
  this.ctrl = {
22223
22335
  productName: 'yuuvis® RAD client',
22224
- clientVersion: '8.14.0'
22336
+ clientVersion: '8.15.0-rc.1'
22225
22337
  };
22226
22338
  this.licenses = {
22227
22339
  'MIT': {
@@ -22263,6 +22375,7 @@ class AboutStateComponent {
22263
22375
  this.getUserLang();
22264
22376
  this.getDocumentation();
22265
22377
  this.backgroundImage = `url(${this.config.getDashboardBackgroundImage()})`;
22378
+ this.headerLogo = this.config.getRaw("about.headerLogo");
22266
22379
  }
22267
22380
  getDocumentation() {
22268
22381
  const docu = this.config.getRaw('about.docu');
@@ -22281,8 +22394,8 @@ class AboutStateComponent {
22281
22394
  AboutStateComponent.decorators = [
22282
22395
  { type: Component, args: [{
22283
22396
  selector: 'eo-about-state',
22284
- template: "<div class=\"eo-about-state\">\r\n\r\n <div class=\"about\">\r\n <div class=\"header\" [style.background-image]=\"backgroundImage\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 708.7 212.6\"><path fill=\"#fff\" d=\"M708.7 20.6c0-11.3-9.2-20.6-20.6-20.6s-20.6 9.2-20.6 20.6c0 11.3 9.2 20.6 20.6 20.6s20.6-9.3 20.6-20.6zm-2.7 0c0 9.9-8 17.9-17.9 17.9-9.9 0-17.9-8-17.9-17.9 0-9.9 8-17.9 17.9-17.9 9.9 0 17.9 8 17.9 17.9zm-9.9-5.4c0-2.7 0-6.7-7-6.7h-7.7c-.7 0-1.3.6-1.3 1.3v21.4c0 .7.6 1.3 1.3 1.3.7 0 1.3-.6 1.3-1.3v-9.4h5.9l5 10c.2.5.7.7 1.2.7.2 0 .4 0 .6-.1.7-.3.9-1.1.6-1.8l-4.5-9c4.6-.8 4.6-4.6 4.6-6.4zm-2.6 0c0 2.5-.3 4-4 4h-6.7v-8h6.4c2.1 0 3.4.4 3.9 1.1.4.6.4 1.7.4 2.9zM589.4 73.7c0-4.8 10.4-7.7 27.8-7.7 12.5 0 28.4 3.3 41.6 8.6l4.2 1.7V52.2l-2-.7c-12.6-4.4-29-6.9-44.9-6.9-33.3 0-56.6 12.9-56.6 31.3 0 13.2 14.6 24.1 37.1 27.9l21.4 3.7c23.1 3.9 25.6 8.6 25.6 10.5 0 4.6-5.2 7.7-9.7 9.5-5.3 2.4-11.7 3.4-22 3.4-16.7 0-33.7-2.8-47.8-8l-4.1-1.5V144l2.1.6c15.2 4.7 31.9 7.2 48.4 7.2 14.9 0 27.7-1.9 38-5.8 15.7-5.8 25.5-16.4 25.5-27.7 0-7.5-4.4-15-11.6-19.8-7.3-4.7-19.2-8.9-30.3-10.8l-19.8-3.5c-6.3-1-8-1.5-10.8-2.4l-1.1-.3c-7.2-2.1-11-4.7-11-7.8zm-29.6 110.8c-.2.3-.3.7-.2 1.2l8.4 25.7c.2.8.8 1.2 1.5 1.2h2.5c.8 0 1.3-.5 1.5-1.2l8.4-25.6c.2-.5.1-.9-.1-1.2-.1-.2-.4-.5-1-.5H579c-.3 0-1.1.1-1.4 1.2l-6.8 21.9-6.8-21.9c-.2-.8-.7-1.2-1.4-1.2h-1.7c-.7 0-1 .2-1.1.4zm-8.5 25.8c1.5-1.5 2.3-3.7 2.3-6.3v-11.2c0-2.6-.8-4.8-2.3-6.3-1.6-1.5-3.7-2.3-6.3-2.3h-4.8c-2.6 0-4.7.8-6.2 2.3-1.5 1.5-2.3 3.7-2.3 6.3V204c0 2.6.8 4.8 2.3 6.3 1.5 1.6 3.6 2.3 6.2 2.3h4.8c2.6 0 4.7-.8 6.3-2.3zm-2-6.4c0 1.5-.4 2.7-1.2 3.5-.8.8-1.9 1.2-3.4 1.2h-4.3c-1.5 0-2.6-.4-3.4-1.2-.8-.8-1.1-2-1.1-3.5v-11.1c0-1.5.4-2.7 1.1-3.5.8-.8 1.8-1.2 3.4-1.2h4.3c1.5 0 2.6.4 3.4 1.2.8.8 1.2 2 1.2 3.5v11.1zm-33.1-54.1h26.4V46h-26.4v103.8zm0-120.7h26.4V5.7h-26.4v23.4zm4.4 157.4c-1.5-1.6-3.6-2.3-6.2-2.3h-3.7c-2.3 0-4 .6-5.3 1.7v-.3c0-.9-.5-1.4-1.4-1.4h-1.6c-.8 0-1.3.6-1.3 1.4v25.7c0 .9.5 1.4 1.3 1.4h1.6c.8 0 1.4-.6 1.4-1.4v-18.4c0-1.5.4-2.7 1.3-3.5.9-.8 2.1-1.2 3.7-1.2h3.6c1.5 0 2.6.4 3.3 1.2.8.8 1.1 2 1.1 3.6v18.3c0 .9.5 1.4 1.4 1.4h1.6c.8 0 1.3-.6 1.3-1.4v-18.4c.2-2.8-.6-4.9-2.1-6.4zm-57-36.8l35.6-57.3V46l-38.5 59.1c-6.7 10.5-11.5 19.6-11.5 19.6s-5.1-9.5-12.2-20.6L400.2 46h-30.7l63.8 103.7h30.3zm-94.2-49.1c0 11.3-1 15.3-4.9 20.5-3.6 4.7-13.4 7.6-25.6 7.6-14.5 0-26.5-5.4-29.3-13.1-1-3.3-1.7-11.2-1.7-20V46h-27.4v54.1c0 15.2 1.1 19.9 4.8 26.9 10 19.1 37.2 26.1 53.1 26.1 18.9 0 36.6-7.9 45.8-15.8 6-5.1 9.3-9.8 11-17.1l-25.8-41.8v22.2zM277 211.2v-33.1c0-.9-.5-1.4-1.4-1.4H274c-.6 0-1.3.4-1.3 1.4v7.7c-1.3-1.2-3-1.7-5.3-1.7h-3.7c-2.6 0-4.6.8-6.2 2.3-1.5 1.5-2.3 3.7-2.3 6.3v11.2c0 2.6.8 4.8 2.3 6.3 1.5 1.6 3.6 2.3 6.2 2.3h3.7c2.3 0 4.1-.6 5.3-1.7v.3c0 1 .7 1.4 1.3 1.4h1.6c.9.1 1.4-.5 1.4-1.3zm-4.3-7.3c0 1.5-.4 2.7-1.3 3.5-.9.8-2.1 1.2-3.7 1.2H264c-1.5 0-2.6-.4-3.4-1.2-.8-.8-1.1-2-1.1-3.6v-11c0-1.5.4-2.7 1.1-3.6.8-.8 1.8-1.2 3.4-1.2h3.7c1.6 0 2.8.4 3.7 1.2.9.8 1.3 1.9 1.3 3.5v11.2zm-9.1-103.8V46h-27.4v54.6c0 11.3-1 15.3-4.9 20.5-3.6 4.7-13.4 7.6-25.6 7.6-14.5 0-26.5-5.4-29.3-13.1-1-3.3-1.7-11.2-1.7-20V46h-27.4v54.1c0 15.2 1.1 19.9 4.8 26.9 10 19.1 37.2 26.1 53.1 26.1 18.9 0 36.6-7.9 45.8-15.8 10.2-8.7 12.6-16 12.6-37.2zm-116.2 78v33.1c0 .9.5 1.4 1.3 1.4h1.6c.8 0 1.4-.6 1.4-1.4V197h12.7c.8 0 1.4-.5 1.4-1.4v-1.3c0-.8-.5-1.4-1.4-1.4h-12.7v-12.3h14.2c.9 0 1.4-.5 1.4-1.4v-1.3c0-.8-.6-1.4-1.4-1.4h-17.2c-.8.2-1.3.8-1.3 1.6zm-49.7-29.2L130.4 94V46h-.1l-36.9 58.2c-7.1 11.1-12.2 20.6-12.2 20.6s-4.8-9.1-11.6-19.6L31 46H0l67.7 105.5v24.9h30v-27.5zm77.5 36.6v25.7c0 .9.5 1.4 1.3 1.4h1.6c.8 0 1.4-.6 1.4-1.4v-17.6c0-1.7.4-3 1.3-4s2.1-1.4 3.7-1.4h2.5c.5 0 .9-.1 1-.3.2-.2.4-.5.4-1v-1.3c0-.8-.5-1.4-1.4-1.4h-2c-1.6 0-3.1.3-4.2 1-.5.3-.9.6-1.3.9v-.5c0-.9-.5-1.4-1.4-1.4h-1.6c-.8-.1-1.3.5-1.3 1.3zm22 .9c-1.5 1.5-2.3 3.7-2.3 6.3v11.2c0 2.6.8 4.8 2.3 6.3 1.5 1.6 3.6 2.3 6.2 2.3H215c.8 0 1.4-.5 1.4-1.4V210c0-.8-.5-1.4-1.4-1.4h-11.4c-1.5 0-2.6-.4-3.4-1.2-.8-.8-1.1-2-1.1-3.5v-3.3h16.2c.9 0 1.4-.6 1.4-1.4v-6.4c0-2.6-.8-4.8-2.3-6.3-1.6-1.5-3.7-2.3-6.3-2.3h-4.8c-2.5-.1-4.6.7-6.1 2.2zm1.9 6.4c0-1.5.4-2.7 1.1-3.5.7-.8 1.8-1.2 3.4-1.2h4.4c1.5 0 2.6.4 3.4 1.2.8.8 1.1 2 1.1 3.5v4h-13.4v-4zm28.2-6.4c-1.5 1.6-2.3 3.7-2.3 6.3v11.2c0 2.6.8 4.8 2.3 6.3 1.5 1.6 3.6 2.3 6.2 2.3h11.6c.8 0 1.4-.5 1.4-1.4V210c0-.8-.5-1.4-1.4-1.4h-11.4c-1.5 0-2.6-.4-3.4-1.2-.8-.8-1.1-2-1.1-3.5v-3.3h16.2c.9 0 1.4-.6 1.4-1.4v-6.4c0-2.6-.8-4.8-2.3-6.3-1.5-1.5-3.7-2.3-6.3-2.3h-4.8c-2.4-.1-4.5.7-6.1 2.2zm2 6.4c0-1.5.4-2.7 1.1-3.5.8-.8 1.8-1.2 3.4-1.2h4.4c1.5 0 2.6.4 3.4 1.2.8.8 1.1 2 1.1 3.5v4h-13.4v-4zm59.1-6.4c-1.5 1.5-2.3 3.7-2.3 6.3v11.2c0 2.6.8 4.8 2.3 6.3 1.5 1.6 3.6 2.3 6.2 2.3h4.8c2.6 0 4.7-.8 6.3-2.3 1.5-1.5 2.3-3.7 2.3-6.3v-11.2c0-2.6-.8-4.8-2.3-6.3-1.6-1.5-3.7-2.3-6.3-2.3h-4.8c-2.6 0-4.7.8-6.2 2.3zm2 6.4c0-1.5.4-2.7 1.1-3.5.7-.8 1.8-1.2 3.4-1.2h4.3c1.5 0 2.6.4 3.4 1.2.8.8 1.2 2 1.2 3.5v11.1c0 1.6-.4 2.7-1.2 3.5-.8.8-1.9 1.2-3.4 1.2h-4.3c-1.5 0-2.6-.4-3.4-1.2-.8-.8-1.1-2-1.1-3.5v-11.1zm26.7-7.3v25.7c0 1 .7 1.4 1.3 1.4h1.6c.8 0 1.4-.6 1.4-1.4v-18.4c0-1.5.4-2.7 1.3-3.5.9-.8 2.1-1.2 3.7-1.2h2.2c1.5 0 2.6.4 3.4 1.2.8.8 1.1 2 1.1 3.6v18.3c0 .9.5 1.4 1.4 1.4h1.6c.8 0 1.4-.6 1.4-1.4V193c0-1.5.4-2.7 1.3-3.6.9-.9 2.1-1.3 3.7-1.3h2.1c1.5 0 2.6.4 3.4 1.2.8.8 1.1 2 1.1 3.6v18.3c0 .9.5 1.4 1.4 1.4h1.6c.8 0 1.4-.6 1.4-1.4v-18.4c0-2.6-.8-4.8-2.3-6.3-1.5-1.6-3.6-2.3-6.2-2.3h-2.1c-1.5 0-3 .4-4.5 1.1-1.1.5-1.9 1.2-2.5 2.1-1.5-2.1-3.7-3.1-6.8-3.1h-2.3c-2.3 0-4.1.6-5.4 1.8v-.4c0-.9-.5-1.4-1.4-1.4h-1.6c-.6-.2-1.3.2-1.3 1.2zm60.1-7.4v1.3c0 .8.6 1.4 1.4 1.4h7.9v30.5c0 .9.5 1.4 1.4 1.4h1.6c.6 0 1.3-.4 1.3-1.4v-30.5h7.9c.9 0 1.4-.5 1.4-1.4v-1.3c0-.8-.6-1.4-1.4-1.4h-20.1c-.9 0-1.4.5-1.4 1.4zm31.1 8.3c-1.5 1.6-2.3 3.7-2.3 6.3v11.2c0 2.6.8 4.8 2.3 6.3 1.5 1.6 3.6 2.3 6.2 2.3h4.8c2.6 0 4.7-.8 6.3-2.3 1.5-1.5 2.3-3.7 2.3-6.3v-11.2c0-2.6-.8-4.8-2.3-6.3-1.6-1.5-3.7-2.3-6.3-2.3h-4.8c-2.6 0-4.7.8-6.2 2.3zm1.9 6.4c0-1.5.4-2.7 1.1-3.5.8-.8 1.8-1.2 3.4-1.2h4.3c1.5 0 2.6.4 3.4 1.2.8.8 1.2 2 1.2 3.5v11.1c0 1.5-.4 2.7-1.2 3.5-.8.8-1.9 1.2-3.4 1.2h-4.3c-1.5 0-2.6-.4-3.4-1.2-.8-.8-1.1-2-1.1-3.5v-11.1zm45.2-14.7v33.1c0 .9.5 1.4 1.3 1.4h1.6c.8 0 1.4-.6 1.4-1.4v-33.1c0-.9-.5-1.4-1.4-1.4h-1.6c-.8 0-1.3.6-1.3 1.4zm14.8 7.4v25.7c0 .9.5 1.4 1.3 1.4h1.6c.8 0 1.4-.6 1.4-1.4v-18.4c0-1.5.4-2.7 1.3-3.5.9-.8 2.1-1.2 3.7-1.2h3.6c1.5 0 2.6.4 3.4 1.2.8.8 1.1 2 1.1 3.6v18.3c0 .9.5 1.4 1.4 1.4h1.6c.8 0 1.3-.6 1.3-1.4v-18.4c0-2.6-.8-4.8-2.3-6.3-1.5-1.6-3.6-2.3-6.2-2.3h-3.7c-2.3 0-4 .6-5.3 1.7v-.3c0-.9-.5-1.4-1.4-1.4h-1.6c-.7-.1-1.2.5-1.2 1.3zm120.1.9c-1.5 1.5-2.3 3.7-2.3 6.3v11.2c0 2.6.8 4.8 2.3 6.3 1.5 1.6 3.6 2.3 6.2 2.3h3.6c2.3 0 4-.6 5.3-1.7v.3c0 .9.5 1.4 1.4 1.4h1.6c.8 0 1.3-.6 1.3-1.4v-25.7c0-.9-.5-1.4-1.3-1.4h-11.8c-2.6.1-4.7.9-6.3 2.4zm2 6.5c0-1.5.4-2.7 1.1-3.6.8-.8 1.8-1.2 3.3-1.2h8.6v15.8c0 1.5-.4 2.7-1.3 3.5-.9.8-2.1 1.2-3.7 1.2h-3.6c-1.5 0-2.6-.4-3.3-1.2-.8-.8-1.1-2-1.1-3.6v-10.9zm24.3-7.4v1.3c0 .8.5 1.3 1.4 1.3h3.2v16c0 2.6.8 4.7 2.5 6.2 1.6 1.5 3.8 2.3 6.4 2.3h2.4c.8 0 1.4-.5 1.4-1.4V210c0-.8-.5-1.4-1.4-1.4h-2.2c-1.6 0-2.7-.4-3.5-1.2-.8-.8-1.2-1.9-1.2-3.4v-15.9h6.4c.8 0 1.4-.5 1.4-1.3v-1.3c0-.8-.5-1.4-1.4-1.4h-6.4v-6c0-.9-.5-1.4-1.4-1.4h-1.6c-.8 0-1.4.6-1.4 1.4v6H618c-.9 0-1.4.5-1.4 1.4zm26.6.9c-1.5 1.5-2.3 3.7-2.3 6.3v11.2c0 2.6.8 4.8 2.3 6.3 1.5 1.6 3.6 2.3 6.2 2.3H661c.8 0 1.4-.5 1.4-1.4V210c0-.8-.5-1.4-1.4-1.4h-11.4c-1.5 0-2.6-.4-3.4-1.2-.8-.8-1.1-2-1.1-3.5v-3.3h16.2c.9 0 1.4-.6 1.4-1.4v-6.4c0-2.6-.8-4.8-2.3-6.3-1.6-1.5-3.7-2.3-6.3-2.3h-4.8c-2.5-.1-4.6.7-6.1 2.2zm2 6.4c0-1.5.4-2.7 1.1-3.5.8-.8 1.8-1.2 3.4-1.2h4.4c1.5 0 2.6.4 3.4 1.2.8.8 1.1 2 1.1 3.5v4h-13.4v-4z\"/></svg>\r\n\r\n </div>\r\n\r\n <div class=\"body\">\r\n <div class=\"claim\" translate>eo.help.about.claim</div>\r\n\r\n <div class=\"wrap\">\r\n <table>\r\n <tbody>\r\n <tr>\r\n <th translate>eo.help.about.product.label</th>\r\n <td>{{ctrl.productName}}</td>\r\n </tr>\r\n <tr>\r\n <th translate>eo.help.about.client.version.label</th>\r\n <td>{{ctrl.clientVersion}}</td>\r\n </tr>\r\n <tr>\r\n <th translate>eo.help.about.producer.label</th>\r\n <td translate>eo.help.about.producer.text</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <ul class=\"links\">\r\n <li>\r\n <a href=\"{{docu.link}}\" target=\"_blank\">{{docu.label | translate}}</a>\r\n </li>\r\n </ul>\r\n </div>\r\n\r\n\r\n <h2 translate>eo.help.license.title</h2>\r\n <p translate>eo.help.license.intro</p>\r\n <div class=\"showLic\" (click)=\"licenseShow = !licenseShow\">\r\n <span class=\"toggle\"><span translate>eo.help.license.title</span><span class=\"toggle-indicator\">{{licenseShow ? '-' : '+'}}</span></span></div>\r\n <div class=\"licenses\" *ngIf=\"licenseShow\">\r\n <div class=\"lib\" *ngFor=\"let lib of __libraries__; trackBy: trackByFn\">\r\n <div class=\"name\">{{lib.name}}</div>\r\n <div class=\"lic\" *ngIf=\"licenses[lib.license]\">\r\n <a href=\"{{licenses[lib.license].url}}\" target=\"_blank\" *ngIf=\"licenses[lib.license].url\">{{licenses[lib.license].label}}</a>\r\n <span *ngIf=\"!licenses[lib.license].url\">{{licenses[lib.license].label}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n</div>\r\n",
22285
- styles: [":host{--about-header-height:300px;bottom:0;display:flex;flex-flow:row;justify-content:center;left:0;overflow-y:auto;position:absolute;right:0;top:0}.eo-about-state{box-sizing:border-box;display:flex;flex-flow:column;width:800px}@media (max-width:832px){.eo-about-state{margin:0;min-width:inherit;width:100%}}.eo-about-state .about{background:var(--color-white);box-shadow:0 2px 5px 0 rgba(0,0,0,.2);margin:var(--app-pane-padding)}.eo-about-state .about .header{background-size:cover;height:var(--about-header-height);position:relative}.eo-about-state .about .header:after{background-color:rgba(var(--color-accent-rgb),.8);bottom:0;content:\"\";left:0;position:absolute;right:0;top:0}.eo-about-state .about .header svg{bottom:18%;position:absolute;right:8%;width:40%;z-index:20}.eo-about-state .about .body{padding:var(--app-pane-padding)}.eo-about-state .about .body .claim{padding:var(--app-pane-padding) 0}.eo-about-state .about .body h2{color:var(--text-color-caption);font-size:var(--font-title);font-weight:var(--font-weight-light);margin:1.5em 0 0}.eo-about-state .about .body .wrap{display:flex;flex-flow:row wrap}.eo-about-state .about .body ul.links{color:var(--color-accent);list-style-type:none}.eo-about-state .about .body ul.links li{padding:2px 0}.eo-about-state .about .body ul.links a{color:var(--color-accent);text-decoration:none}.eo-about-state .about .body ul.links a:hover{text-decoration:underline}.eo-about-state .about .body table{background-color:rgba(var(--color-black-rgb),.06);border-radius:2px;margin:var(--app-pane-padding);padding:calc(var(--app-pane-padding)/4) 0}.eo-about-state .about .body table th{align-items:flex-start;color:var(--text-color-caption);display:flex;flex-flow:column;font-size:var(--font-hint);justify-content:center}.eo-about-state .about .body table td,.eo-about-state .about .body table th{padding:calc(var(--app-pane-padding)/8) calc(var(--app-pane-padding)/2)}.eo-about-state .about .body .showLic span.toggle{border:1px solid var(--color-accent);border-radius:4px;color:var(--color-accent);cursor:pointer;display:inline-block;padding:0 4px 2px}.eo-about-state .about .body .showLic .toggle-indicator{padding:0 4px}.eo-about-state .about .body .licenses{padding-top:var(--app-pane-padding)}.eo-about-state .about .body .licenses .lib{border-top:1px solid var(--list-item-border-color);display:flex;flex-flow:row nowrap;padding:calc(var(--app-pane-padding)/4)}.eo-about-state .about .body .licenses .lib .name{flex:1 1 auto}.eo-about-state .about .body .licenses .lib .lic{color:var(--text-color-caption);flex:0 0 auto;font-size:var(--font-hint)}.eo-about-state .about .body .licenses .lib .lic a{background-color:rgba(var(--color-black-rgb),.06);border:1px solid var(--color-accent);border-radius:2px;color:var(--color-accent);display:inline-block;line-height:1em;padding:2px 4px;text-decoration:none}"]
22397
+ template: "<div class=\"eo-about-state\">\r\n\r\n <div class=\"about\">\r\n <div class=\"header\" [style.background-image]=\"backgroundImage\">\r\n <img [src]=\"headerLogo\"/>\r\n </div>\r\n\r\n <div class=\"body\">\r\n <div class=\"claim\" translate>eo.help.about.claim</div>\r\n\r\n <div class=\"wrap\">\r\n <table>\r\n <tbody>\r\n <tr>\r\n <th translate>eo.help.about.product.label</th>\r\n <td>{{ctrl.productName}}</td>\r\n </tr>\r\n <tr>\r\n <th translate>eo.help.about.client.version.label</th>\r\n <td>{{ctrl.clientVersion}}</td>\r\n </tr>\r\n <tr>\r\n <th translate>eo.help.about.producer.label</th>\r\n <td translate>eo.help.about.producer.text</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <ul class=\"links\">\r\n <li>\r\n <a href=\"{{docu.link}}\" target=\"_blank\">{{docu.label | translate}}</a>\r\n </li>\r\n </ul>\r\n </div>\r\n\r\n\r\n <h2 translate>eo.help.license.title</h2>\r\n <p translate>eo.help.license.intro</p>\r\n <div class=\"showLic\" (click)=\"licenseShow = !licenseShow\">\r\n <span class=\"toggle\"><span translate>eo.help.license.title</span><span class=\"toggle-indicator\">{{licenseShow ? '-' : '+'}}</span></span></div>\r\n <div class=\"licenses\" *ngIf=\"licenseShow\">\r\n <div class=\"lib\" *ngFor=\"let lib of __libraries__; trackBy: trackByFn\">\r\n <div class=\"name\">{{lib.name}}</div>\r\n <div class=\"lic\" *ngIf=\"licenses[lib.license]\">\r\n <a href=\"{{licenses[lib.license].url}}\" target=\"_blank\" *ngIf=\"licenses[lib.license].url\">{{licenses[lib.license].label}}</a>\r\n <span *ngIf=\"!licenses[lib.license].url\">{{licenses[lib.license].label}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n</div>\r\n",
22398
+ styles: [":host{--about-header-height:300px;bottom:0;display:flex;flex-flow:row;justify-content:center;left:0;overflow-y:auto;position:absolute;right:0;top:0}.eo-about-state{box-sizing:border-box;display:flex;flex-flow:column;width:800px}@media (max-width:832px){.eo-about-state{margin:0;min-width:inherit;width:100%}}.eo-about-state .about{background:var(--color-white);box-shadow:0 2px 5px 0 rgba(0,0,0,.2);margin:var(--app-pane-padding)}.eo-about-state .about .header{background-size:cover;height:var(--about-header-height);position:relative}.eo-about-state .about .header:after{background-color:rgba(var(--color-accent-rgb),.8);bottom:0;content:\"\";left:0;position:absolute;right:0;top:0}.eo-about-state .about .header img{bottom:18%;position:absolute;right:8%;width:40%;z-index:20}.eo-about-state .about .body{padding:var(--app-pane-padding)}.eo-about-state .about .body .claim{padding:var(--app-pane-padding) 0}.eo-about-state .about .body h2{color:var(--text-color-caption);font-size:var(--font-title);font-weight:var(--font-weight-light);margin:1.5em 0 0}.eo-about-state .about .body .wrap{display:flex;flex-flow:row wrap}.eo-about-state .about .body ul.links{color:var(--color-accent);list-style-type:none}.eo-about-state .about .body ul.links li{padding:2px 0}.eo-about-state .about .body ul.links a{color:var(--color-accent);text-decoration:none}.eo-about-state .about .body ul.links a:hover{text-decoration:underline}.eo-about-state .about .body table{background-color:rgba(var(--color-black-rgb),.06);border-radius:2px;margin:var(--app-pane-padding);padding:calc(var(--app-pane-padding)/4) 0}.eo-about-state .about .body table th{align-items:flex-start;color:var(--text-color-caption);display:flex;flex-flow:column;font-size:var(--font-hint);justify-content:center}.eo-about-state .about .body table td,.eo-about-state .about .body table th{padding:calc(var(--app-pane-padding)/8) calc(var(--app-pane-padding)/2)}.eo-about-state .about .body .showLic span.toggle{border:1px solid var(--color-accent);border-radius:4px;color:var(--color-accent);cursor:pointer;display:inline-block;padding:0 4px 2px}.eo-about-state .about .body .showLic .toggle-indicator{padding:0 4px}.eo-about-state .about .body .licenses{padding-top:var(--app-pane-padding)}.eo-about-state .about .body .licenses .lib{border-top:1px solid var(--list-item-border-color);display:flex;flex-flow:row nowrap;padding:calc(var(--app-pane-padding)/4)}.eo-about-state .about .body .licenses .lib .name{flex:1 1 auto}.eo-about-state .about .body .licenses .lib .lic{color:var(--text-color-caption);flex:0 0 auto;font-size:var(--font-hint)}.eo-about-state .about .body .licenses .lib .lic a{background-color:rgba(var(--color-black-rgb),.06);border:1px solid var(--color-accent);border-radius:2px;color:var(--color-accent);display:inline-block;line-height:1em;padding:2px 4px;text-decoration:none}"]
22286
22399
  },] }
22287
22400
  ];
22288
22401
  AboutStateComponent.ctorParameters = () => [
@@ -24063,5 +24176,5 @@ EoClientModule.ctorParameters = () => [
24063
24176
  * Generated bundle index. Do not edit.
24064
24177
  */
24065
24178
 
24066
- export { ACTIONS, AboutStateComponent, AbstractFilterComponent, AccordionModule, ActionMenuComponent, ActionModule, ActionService, ActionTarget, AgentService, AppAddComponent, AppAddDialogComponent, AppBarComponent, AppLayoutComponent, AppSearchComponent, AppSearchService, AreaState, AuthGuard, CUSTOM_ACTIONS, CapabilitiesGuard, CellRenderer, ChangePasswordFormComponent, CheckboxComponent, ClipboardComponent, CodesystemComponent, CodesystemFilterComponent, ColumnConfiguratorComponent, ContentPreviewService, ContextSearchComponent, ContextType, CtaComponent, CtaModule, CustomFilterComponent, CustomSortComponent, DashboardComponent, DatepickerComponent, DatetimeComponent, DatetimeFilterComponent, DatetimeRangeComponent, DmsObjectTarget, DynamicListComponent, DynamicPropertySwitchComponent, ENTRY_COMPONENTS, ENTRY_LINKS, EmptyComponent, EmptyStateService, EnaioErrorKeys, EoAppShellModule, EoClientModule, EoDialogComponent, EoFrameworkCoreModule, EoFrameworkModule, EoIconComponent, Error404Component, ErrorHandlerService, ErrorMessageComponent, ErrorModule, FavoriteIconComponent, FavoriteStateComponent, FileSizePipe, FormElementComponent, FormElementTableComponent, FormElementsModule, FormInputComponent, FrameComponent, GlobalShortcutsComponent, GlobalShortcutsSectionComponent, GridComponent, GridFilter, GridModule, GridService, HistoryFilterComponent, HistoryFilterPipe, IdReferenceComponent, InboxDetailsComponent, InboxItemTarget, InboxStateComponent, InboxStateModule, InboxTypes, InboxTypesFilter, IndexdataSummaryComponent, InputFocusDirective, KeysPipe, LayoutService, ListContainerComponent, ListContainerModule, ListSettingsService, LoadingSpinnerComponent, LocaleCurrencyPipe, LocaleDatePipe, LocaleDecimalPipe, LocaleNumberPipe, LocalePercentPipe, LocationService, LockSettings, LoginComponent, MediaComponent, MediaModule, NotFoundComponent, NotificationsStateComponent, NumberComponent, NumberRangeComponent, ObjectDetailsComponent, ObjectDetailsModule, ObjectFormComponent, ObjectFormControl, ObjectFormControlWrapper, ObjectFormEditComponent, ObjectFormGroup, ObjectFormGroupComponent, ObjectFormHelperService, ObjectFormModule, ObjectFormScriptService, ObjectFormScriptingScope, ObjectHistoryComponent, ObjectLinksComponent, ObjectStateComponent, ObjectStateDetailsComponent, ObjectStateModule, ObjectStateService, OrganizationComponent, OrganizationFilterComponent, OutsideClickDirective, OverlayComponent, PageTitleService, PanelLoading, PasswordComponent, PendingChangesService, PermissionsComponent, PluginComponent, PluginDirective, PluginService, PluginsModule, PluginsService, PrepareDetailsComponent, PrepareStateComponent, PrepareStateModule, PreparedItemTarget, ProcessDetailsComponent, ProcessFileComponent, ProcessHistoryComponent, ProcessItemTarget, QuickFilterComponent, QuickSearchComponent, QuickSearchModule, ReferenceComponent, ReferenceService, ResetFilterComponent, ResultListComponent, ResultListModule, ResultStateComponent, RouterLinkDirective, RowEditComponent, RtlAwareDirective, STATE, SafeHtmlPipe, SelectionRange, SelectionService, SetFilterComponent, SettingsComponent, SettingsModule, Shortcut, ShortcutsDirective, ShortcutsModule, ShortcutsService, SideBarComponent, SidebarPluginComponent, SimpleAccordionComponent, SplitAreaComponent, SplitComponent, SplitGutterDirective, SplitModule, StoredQueriesStateComponent, StoredQueryComponent, StoredQueryDetailsComponent, StoredQueryModule, StoredQueryTarget, StringComponent, TabContainerComponent, TabContainerModule, TabPanelComponent, TabPluginComponent, TabViewComponent, TabViewNavComponent, TextFilterComponent, TotalCountComponent, TreeComponent, TreeModule, TypeFilter, UNDOCK_WINDOW_NAME, UiModule, UndockSplitComponent, UndockSplitService, UnsubscribeOnDestroy, UploadOverlayComponent, UserAvatarComponent, UtilModule, UtilitiesService, VersionStateComponent, WorkItemTarget, agentConfigKeys, entryComponents, listAnimation, panelLoadingAnimations, ɵ0, ɵ1, PendingChangesGuard as ɵa, UploadOverlayGuard as ɵb, DownloadPdfActionComponent as ɵba, OpenDocumentActionComponent as ɵbb, EmailActionComponent as ɵbc, EmailLinkActionComponent as ɵbd, EmailOriginalActionComponent as ɵbe, EmailPdfActionComponent as ɵbf, ClipboardActionComponent as ɵbg, ClipboardLinkActionComponent as ɵbh, ClipboardOriginalActionComponent as ɵbi, ClipboardPdfActionComponent as ɵbj, FavoriteActionComponent as ɵbk, DeleteActionComponent as ɵbl, DeleteComponent as ɵbm, OpenVersionsActionComponent as ɵbn, RestoreVersionActionComponent as ɵbo, DeletePreparedActionComponent as ɵbp, AddSubscriptionActionComponent as ɵbq, AddSubscriptionComponent as ɵbr, RemoveSubscriptionActionComponent as ɵbs, WorkflowActionComponent as ɵbt, WorkflowComponent as ɵbu, CustomActionsComponent as ɵbv, AddResubmissionActionComponent as ɵbw, AddResubmissionComponent as ɵbx, UpdateResubmissionActionComponent as ɵby, ShareObjectActionComponent as ɵbz, AppShellRoutingModule as ɵc, ShareObjectComponent as ɵca, CutActionComponent as ɵcb, FinalizeActionComponent as ɵcc, DefinalizeActionComponent as ɵcd, DeleteContentActionComponent as ɵce, UnlockActionComponent as ɵcf, SimpleWorkflowActionComponent as ɵcg, PreventDoubleClickDirective as ɵch, EditIconComponent as ɵci, DuetimeInfoComponent as ɵcj, PrepareContentExistsInfoComponent as ɵck, ObjectStateRoutingModule as ɵcl, InboxStateRoutingModule as ɵcm, PrepareStateRoutingModule as ɵcn, EoClientRoutingModule as ɵco, ProcessStateComponent as ɵcp, AppProcessComponent as ɵd, PipesModule as ɵe, QueryScopeSelectComponent as ɵf, IndexdataSummaryEntryComponent as ɵg, OrderByPipe as ɵh, TreeNodeComponent as ɵi, DatepickerService as ɵj, YearRangeDirective as ɵk, ReferenceFinderComponent as ɵl, fadeInOut as ɵm, ReferenceFinderService as ɵn, ReferenceFinderEntryComponent as ɵo, DynamicListFilterComponent as ɵp, ListFilterComponent as ɵq, PaginationComponent as ɵr, ProcessFormModule as ɵs, ProcessFormComponent as ɵt, ActionComponentAnchorDirective as ɵu, OpenDocumentComponent as ɵv, CopyActionComponent as ɵw, OpenContextActionComponent as ɵx, DownloadActionComponent as ɵy, DownloadOriginalActionComponent as ɵz };
24179
+ export { ACTIONS, AboutStateComponent, AbstractFilterComponent, AccordionModule, ActionMenuComponent, ActionModule, ActionService, ActionTarget, AgentService, AppAddComponent, AppAddDialogComponent, AppBarComponent, AppLayoutComponent, AppSearchComponent, AppSearchService, AreaState, AuthGuard, CUSTOM_ACTIONS, CapabilitiesGuard, CellRenderer, ChangePasswordFormComponent, CheckboxComponent, ClipboardComponent, CodesystemComponent, CodesystemFilterComponent, ColumnConfiguratorComponent, ContentPreviewService, ContextSearchComponent, ContextType, CtaComponent, CtaModule, CustomFilterComponent, CustomSortComponent, DashboardComponent, DatepickerComponent, DatetimeComponent, DatetimeFilterComponent, DatetimeRangeComponent, DmsObjectTarget, DynamicListComponent, DynamicPropertySwitchComponent, ENTRY_COMPONENTS, ENTRY_LINKS, EmptyComponent, EmptyStateService, EnaioErrorKeys, EoAppShellModule, EoClientModule, EoDialogComponent, EoFrameworkCoreModule, EoFrameworkModule, EoIconComponent, Error404Component, ErrorHandlerService, ErrorMessageComponent, ErrorModule, FavoriteIconComponent, FavoriteStateComponent, FileSizePipe, FormElementComponent, FormElementTableComponent, FormElementsModule, FormInputComponent, FrameComponent, GlobalShortcutsComponent, GlobalShortcutsSectionComponent, GridComponent, GridFilter, GridModule, GridService, HistoryFilterComponent, HistoryFilterPipe, IdReferenceComponent, InboxDetailsComponent, InboxItemTarget, InboxStateComponent, InboxStateModule, InboxTypes, InboxTypesFilter, IndexdataSummaryComponent, InputFocusDirective, KeysPipe, LayoutService, ListContainerComponent, ListContainerModule, ListSettingsService, LoadingSpinnerComponent, LocaleCurrencyPipe, LocaleDatePipe, LocaleDecimalPipe, LocaleNumberPipe, LocalePercentPipe, LocationService, LockSettings, LoginComponent, MediaComponent, MediaModule, NotFoundComponent, NotificationsStateComponent, NumberComponent, NumberRangeComponent, ObjectDetailsComponent, ObjectDetailsModule, ObjectFormComponent, ObjectFormControl, ObjectFormControlWrapper, ObjectFormEditComponent, ObjectFormGroup, ObjectFormGroupComponent, ObjectFormHelperService, ObjectFormModule, ObjectFormScriptService, ObjectFormScriptingScope, ObjectHistoryComponent, ObjectLinksComponent, ObjectStateComponent, ObjectStateDetailsComponent, ObjectStateModule, ObjectStateService, OrganizationComponent, OrganizationFilterComponent, OutsideClickDirective, OverlayComponent, PageTitleService, PanelLoading, PasswordComponent, PendingChangesService, PermissionsComponent, PluginComponent, PluginDirective, PluginService, PluginsModule, PluginsService, PrepareDetailsComponent, PrepareStateComponent, PrepareStateModule, PreparedItemTarget, ProcessDetailsComponent, ProcessFileComponent, ProcessHistoryComponent, ProcessItemTarget, QuickFilterComponent, QuickSearchComponent, QuickSearchModule, ReferenceComponent, ReferenceService, ResetFilterComponent, ResultListComponent, ResultListModule, ResultStateComponent, RouterLinkDirective, RowEditComponent, RtlAwareDirective, STATE, SafeHtmlPipe, SelectionRange, SelectionService, SetFilterComponent, SettingsComponent, SettingsModule, Shortcut, ShortcutsDirective, ShortcutsModule, ShortcutsService, SideBarComponent, SidebarPluginComponent, SimpleAccordionComponent, SplitAreaComponent, SplitComponent, SplitGutterDirective, SplitModule, StoredQueriesStateComponent, StoredQueryComponent, StoredQueryDetailsComponent, StoredQueryModule, StoredQueryTarget, StringComponent, TabContainerComponent, TabContainerModule, TabPanelComponent, TabPluginComponent, TabViewComponent, TabViewNavComponent, TextFilterComponent, TotalCountComponent, TreeComponent, TreeModule, TypeFilter, UNDOCK_WINDOW_NAME, UiModule, UndockSplitComponent, UndockSplitService, UnsubscribeOnDestroy, UploadOverlayComponent, UserAvatarComponent, UtilModule, UtilitiesService, VersionStateComponent, WorkItemTarget, agentConfigKeys, entryComponents, listAnimation, panelLoadingAnimations, ɵ0, ɵ1, PendingChangesGuard as ɵa, UploadOverlayGuard as ɵb, OpenContextActionComponent as ɵba, DownloadActionComponent as ɵbb, DownloadOriginalActionComponent as ɵbc, DownloadPdfActionComponent as ɵbd, OpenDocumentActionComponent as ɵbe, EmailActionComponent as ɵbf, EmailLinkActionComponent as ɵbg, EmailOriginalActionComponent as ɵbh, EmailPdfActionComponent as ɵbi, ClipboardActionComponent as ɵbj, ClipboardLinkActionComponent as ɵbk, ClipboardOriginalActionComponent as ɵbl, ClipboardPdfActionComponent as ɵbm, FavoriteActionComponent as ɵbn, DeleteActionComponent as ɵbo, DeleteComponent as ɵbp, OpenVersionsActionComponent as ɵbq, RestoreVersionActionComponent as ɵbr, DeletePreparedActionComponent as ɵbs, AddSubscriptionActionComponent as ɵbt, AddSubscriptionComponent as ɵbu, RemoveSubscriptionActionComponent as ɵbv, WorkflowActionComponent as ɵbw, WorkflowComponent as ɵbx, CustomActionsComponent as ɵby, AddResubmissionActionComponent as ɵbz, AppShellRoutingModule as ɵc, AddResubmissionComponent as ɵca, UpdateResubmissionActionComponent as ɵcb, ShareObjectActionComponent as ɵcc, ShareObjectComponent as ɵcd, CutActionComponent as ɵce, FinalizeActionComponent as ɵcf, DefinalizeActionComponent as ɵcg, DeleteContentActionComponent as ɵch, UnlockActionComponent as ɵci, SimpleWorkflowActionComponent as ɵcj, PreventDoubleClickDirective as ɵck, TrapFocusDirective as ɵcl, EditIconComponent as ɵcm, DuetimeInfoComponent as ɵcn, PrepareContentExistsInfoComponent as ɵco, ObjectStateRoutingModule as ɵcp, InboxStateRoutingModule as ɵcq, PrepareStateRoutingModule as ɵcr, EoClientRoutingModule as ɵcs, ProcessStateComponent as ɵct, AppProcessComponent as ɵd, PipesModule as ɵe, UnsubscribeOnDestroy as ɵf, PendingChangesService as ɵg, QueryScopeSelectComponent as ɵh, IndexdataSummaryEntryComponent as ɵi, OrderByPipe as ɵj, TreeNodeComponent as ɵk, DatepickerService as ɵl, YearRangeDirective as ɵm, ReferenceFinderComponent as ɵn, fadeInOut as ɵo, ReferenceFinderService as ɵp, ReferenceFinderEntryComponent as ɵq, DynamicListFilterComponent as ɵr, ListFilterComponent as ɵs, PaginationComponent as ɵt, MediaModule as ɵu, ProcessFormModule as ɵv, ProcessFormComponent as ɵw, ActionComponentAnchorDirective as ɵx, OpenDocumentComponent as ɵy, CopyActionComponent as ɵz };
24067
24180
  //# sourceMappingURL=eo-sdk-client.js.map