@eo-sdk/client 8.14.0-rc.2 → 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 (47) 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 +3 -1
  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 +3381 -3262
  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-search/app-search.component.js +3 -3
  25. package/esm2015/app/eo-framework/app-shell/app-bar/side-bar/side-bar.component.js +2 -2
  26. package/esm2015/app/eo-framework/app-shell/app-shell.module.js +5 -3
  27. package/esm2015/app/eo-framework/form-elements/datetime/datepicker/datepicker.component.js +8 -4
  28. package/esm2015/app/eo-framework/form-elements/datetime/datetime.component.js +13 -8
  29. package/esm2015/app/eo-framework/grid/filters/datetime-filter.component.js +2 -2
  30. package/esm2015/app/eo-framework/object-details/favorite-icon/favorite-icon.component.js +2 -2
  31. package/esm2015/app/eo-framework/object-form/object-form/form-element/form-element.component.js +3 -2
  32. package/esm2015/app/eo-framework/object-form/object-form/form-element-table/form-element-table.component.js +9 -2
  33. package/esm2015/app/eo-framework/object-form/object-form/object-form-group/object-form-group.component.js +3 -2
  34. package/esm2015/app/eo-framework/object-form/object-form/object-form.component.js +3 -2
  35. package/esm2015/app/eo-framework/object-form/object-form-edit/object-form-edit.component.js +5 -2
  36. package/esm2015/app/eo-framework/object-form/object-form.module.js +4 -2
  37. package/esm2015/app/eo-framework/prepare-details/prepare-details.component.js +2 -2
  38. package/esm2015/app/eo-framework/ui/eo-dialog/eo-dialog.component.js +78 -42
  39. package/esm2015/app/eo-framework/ui/ui.module.js +4 -2
  40. package/esm2015/app/eo-framework/util/directive/trap-focus.directive.js +50 -0
  41. package/esm2015/eo-sdk-client.js +68 -64
  42. package/fesm2015/eo-sdk-client.js +1246 -1134
  43. package/fesm2015/eo-sdk-client.js.map +1 -1
  44. package/package.json +3 -3
  45. package/projects/eo-sdk/core/package.json +1 -1
  46. package/styles.css +1 -0
  47. 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,
@@ -4077,7 +4115,7 @@ class SideBarComponent extends UnsubscribeOnDestroy {
4077
4115
  SideBarComponent.decorators = [
4078
4116
  { type: Component, args: [{
4079
4117
  selector: 'eo-side-bar',
4080
- 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",
4081
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)}}"]
4082
4120
  },] }
4083
4121
  ];
@@ -4781,12 +4819,12 @@ class AppSearchComponent {
4781
4819
  AppSearchComponent.decorators = [
4782
4820
  { type: Component, args: [{
4783
4821
  selector: 'eo-app-search',
4784
- 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",
4785
4823
  encapsulation: ViewEncapsulation.None
4786
4824
  // todo: apply onPush change detection (agg search result right now doesn't update)
4787
4825
  // changeDetection: ChangeDetectionStrategy.OnPush
4788
4826
  ,
4789
- 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)}}"]
4790
4828
  },] }
4791
4829
  ];
4792
4830
  AppSearchComponent.ctorParameters = () => [
@@ -6125,7 +6163,7 @@ class DatepickerComponent {
6125
6163
  get year() {
6126
6164
  return this.datepickerService.year;
6127
6165
  }
6128
- set onylFutureDates(enabled) {
6166
+ set onlyFutureDates(enabled) {
6129
6167
  this.datepickerService.futureOnly = enabled ? enabled : false;
6130
6168
  }
6131
6169
  get futureOnly() {
@@ -6140,6 +6178,9 @@ class DatepickerComponent {
6140
6178
  }
6141
6179
  }
6142
6180
  }
6181
+ set useDatabaseMinimumTime(enabled) {
6182
+ this.minYear = enabled ? 1753 : 0;
6183
+ }
6143
6184
  onKeydownHandler(event) {
6144
6185
  let newDate;
6145
6186
  if (event.keyCode === 13) {
@@ -6278,7 +6319,7 @@ class DatepickerComponent {
6278
6319
  DatepickerComponent.decorators = [
6279
6320
  { type: Component, args: [{
6280
6321
  selector: 'eo-datepicker',
6281
- 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",
6282
6323
  providers: [DatepickerService],
6283
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)}"]
6284
6325
  },] }
@@ -6292,8 +6333,9 @@ DatepickerComponent.propDecorators = {
6292
6333
  onCanceled: [{ type: Output }],
6293
6334
  withTime: [{ type: Input }],
6294
6335
  withAmPm: [{ type: Input }],
6295
- onylFutureDates: [{ type: Input }],
6336
+ onlyFutureDates: [{ type: Input }],
6296
6337
  date: [{ type: Input, args: ['date',] }],
6338
+ useDatabaseMinimumTime: [{ type: Input }],
6297
6339
  onKeydownHandler: [{ type: HostListener, args: ['document:keydown', ['$event'],] }]
6298
6340
  };
6299
6341
 
@@ -6304,6 +6346,8 @@ class DatetimeComponent {
6304
6346
  this.showPicker = false;
6305
6347
  this.isValid = true;
6306
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)
6307
6351
  this.propagateChange = (_) => {
6308
6352
  };
6309
6353
  this.datePipe = new LocaleDatePipe(translate);
@@ -6335,9 +6379,13 @@ class DatetimeComponent {
6335
6379
  }
6336
6380
  registerOnTouched(fn) {
6337
6381
  }
6382
+ checkDatabaseTimeRange(m) {
6383
+ return !this.validateDatabaseTimeRange ||
6384
+ !m.isBefore(this.databaseMinimumTime);
6385
+ }
6338
6386
  setValueFromMask() {
6339
6387
  let m = moment$2(this.innerValue, this.momentDatePattern);
6340
- this.isValid = m.isValid();
6388
+ this.isValid = m.isValid() && this.checkDatabaseTimeRange(m);
6341
6389
  if (this.isValid) {
6342
6390
  this.value = m.toDate();
6343
6391
  }
@@ -6359,10 +6407,8 @@ class DatetimeComponent {
6359
6407
  setInnerValue() {
6360
6408
  if (this.value) {
6361
6409
  let m = moment$2(this.value);
6362
- this.isValid = m.isValid();
6363
- if (this.isValid) {
6364
- this.innerValue = m.format(this.momentDatePattern);
6365
- }
6410
+ this.isValid = m.isValid() && this.checkDatabaseTimeRange(m);
6411
+ this.innerValue = m.format(this.momentDatePattern);
6366
6412
  }
6367
6413
  else {
6368
6414
  this.innerValue = null;
@@ -6385,7 +6431,7 @@ class DatetimeComponent {
6385
6431
  DatetimeComponent.decorators = [
6386
6432
  { type: Component, args: [{
6387
6433
  selector: 'eo-datetime',
6388
- 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",
6389
6435
  providers: [
6390
6436
  {
6391
6437
  provide: NG_VALUE_ACCESSOR,
@@ -6407,7 +6453,8 @@ DatetimeComponent.ctorParameters = () => [
6407
6453
  DatetimeComponent.propDecorators = {
6408
6454
  readonly: [{ type: Input }],
6409
6455
  pickerTitle: [{ type: Input }],
6410
- onylFutureDates: [{ type: Input }],
6456
+ onlyFutureDates: [{ type: Input }],
6457
+ validateDatabaseTimeRange: [{ type: Input }],
6411
6458
  withTime: [{ type: Input }]
6412
6459
  };
6413
6460
 
@@ -8366,7 +8413,7 @@ class ObjectFormGroupComponent {
8366
8413
  ObjectFormGroupComponent.decorators = [
8367
8414
  { type: Component, args: [{
8368
8415
  selector: 'eo-form-group',
8369
- 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",
8370
8417
  // changeDetection: ChangeDetectionStrategy.OnPush,
8371
8418
  encapsulation: ViewEncapsulation.None,
8372
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}"]
@@ -8375,6 +8422,7 @@ ObjectFormGroupComponent.decorators = [
8375
8422
  ObjectFormGroupComponent.propDecorators = {
8376
8423
  situation: [{ type: Input }],
8377
8424
  skipToggle: [{ type: Input }],
8425
+ dmsObject: [{ type: Input }],
8378
8426
  groupd: [{ type: Input, args: ['group',] }],
8379
8427
  noGroupLabels: [{ type: Input }]
8380
8428
  };
@@ -9571,7 +9619,7 @@ class ObjectFormComponent extends UnsubscribeOnDestroy {
9571
9619
  ObjectFormComponent.decorators = [
9572
9620
  { type: Component, args: [{
9573
9621
  selector: 'eo-object-form',
9574
- 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",
9575
9623
  // define 'child only' services for the form without setting it up on the module
9576
9624
  // which would cause them to be propagated to the whole application
9577
9625
  providers: [ObjectFormScriptService],
@@ -9593,6 +9641,7 @@ ObjectFormComponent.propDecorators = {
9593
9641
  isInnerTableForm: [{ type: Input }],
9594
9642
  statusChanged: [{ type: Output }],
9595
9643
  onFormReady: [{ type: Output }],
9644
+ dmsObject: [{ type: Input }],
9596
9645
  options: [{ type: Input, args: ['formOptions',] }]
9597
9646
  };
9598
9647
 
@@ -9670,6 +9719,9 @@ class ObjectFormEditComponent {
9670
9719
  this.createObjectForm(dmsObject);
9671
9720
  }
9672
9721
  }
9722
+ get dmsObject() {
9723
+ return this._dmsObject;
9724
+ }
9673
9725
  startPending() {
9674
9726
  // because this method will be called every time the form status changes,
9675
9727
  // pending task will only be started once until it was finished
@@ -9778,7 +9830,7 @@ class ObjectFormEditComponent {
9778
9830
  ObjectFormEditComponent.decorators = [
9779
9831
  { type: Component, args: [{
9780
9832
  selector: 'eo-object-form-edit',
9781
- 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",
9782
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}"]
9783
9835
  },] }
9784
9836
  ];
@@ -9871,7 +9923,7 @@ class FormElementComponent {
9871
9923
  FormElementComponent.decorators = [
9872
9924
  { type: Component, args: [{
9873
9925
  selector: 'eo-form-element',
9874
- 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",
9875
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}"]
9876
9928
  },] }
9877
9929
  ];
@@ -9883,6 +9935,7 @@ FormElementComponent.ctorParameters = () => [
9883
9935
  FormElementComponent.propDecorators = {
9884
9936
  situation: [{ type: Input }],
9885
9937
  skipToggle: [{ type: Input }],
9938
+ dmsObject: [{ type: Input }],
9886
9939
  elementSetter: [{ type: Input, args: ['element',] }],
9887
9940
  formField: [{ type: ViewChild, args: ['formField',] }]
9888
9941
  };
@@ -9898,6 +9951,7 @@ class FormElementTableComponent extends UnsubscribeOnDestroy {
9898
9951
  this.modules = [ClientSideRowModelModule, CsvExportModule];
9899
9952
  this.gridReady = false;
9900
9953
  this.showDialog = false;
9954
+ this.showPreview = false;
9901
9955
  this.propagateChange = (_) => {
9902
9956
  };
9903
9957
  this.gridOptions = {
@@ -9953,6 +10007,7 @@ class FormElementTableComponent extends UnsubscribeOnDestroy {
9953
10007
  });
9954
10008
  this._cachedColumns = this.storageService.getItem(FormElementTableComponent.COLUMNS_DEFINITION) || [];
9955
10009
  this._cachedColumnsOverlay = this.storageService.getItem(FormElementTableComponent.COLUMNS_DEFINITION_OVERLAY) || [];
10010
+ this.showPreview = !!this.storageService.getItem('showPreview');
9956
10011
  }
9957
10012
  set params(p) {
9958
10013
  if (p) {
@@ -10288,13 +10343,17 @@ class FormElementTableComponent extends UnsubscribeOnDestroy {
10288
10343
  }
10289
10344
  this.storageService.setItem(columnsDefinition, cachedColumns);
10290
10345
  }
10346
+ togglePreview() {
10347
+ this.showPreview = !this.showPreview;
10348
+ this.storageService.setItem('showPreview', this.showPreview);
10349
+ }
10291
10350
  }
10292
10351
  FormElementTableComponent.COLUMNS_DEFINITION = 'eo.framework.cache.tables.columns.definition';
10293
10352
  FormElementTableComponent.COLUMNS_DEFINITION_OVERLAY = 'eo.framework.cache.tables.overlay.columns.definition';
10294
10353
  FormElementTableComponent.decorators = [
10295
10354
  { type: Component, args: [{
10296
10355
  selector: 'eo-table',
10297
- 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",
10298
10357
  providers: [
10299
10358
  {
10300
10359
  provide: NG_VALUE_ACCESSOR,
@@ -10319,6 +10378,7 @@ FormElementTableComponent.ctorParameters = () => [
10319
10378
  ];
10320
10379
  FormElementTableComponent.propDecorators = {
10321
10380
  rowEdit: [{ type: ViewChild, args: ['rowEdit',] }],
10381
+ dmsObject: [{ type: Input }],
10322
10382
  params: [{ type: Input }],
10323
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'],] }]
10324
10384
  };
@@ -11604,7 +11664,7 @@ class DatetimeFilterComponent extends DatetimeComponent {
11604
11664
  DatetimeFilterComponent.decorators = [
11605
11665
  { type: Component, args: [{
11606
11666
  selector: 'eo-datetime-custom',
11607
- 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",
11608
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%}"]
11609
11669
  },] }
11610
11670
  ];
@@ -13913,323 +13973,753 @@ ResultListModule.decorators = [
13913
13973
  },] }
13914
13974
  ];
13915
13975
 
13916
- /**
13917
- * @module
13918
- * @description
13919
- * Module rendering a dms objects form.
13920
- */
13921
- 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
+ }
13922
14008
  }
13923
- ObjectFormModule.decorators = [
13924
- { type: NgModule, args: [{
13925
- imports: [
13926
- CommonModule,
13927
- FormsModule,
13928
- ReactiveFormsModule,
13929
- SharedModule,
13930
- TabViewModule,
13931
- FieldsetModule,
13932
- UiModule,
13933
- DialogModule,
13934
- PipesModule,
13935
- AgGridModule,
13936
- ShortcutsModule,
13937
- FormElementsModule,
13938
- SplitModule,
13939
- ResultListModule,
13940
- ListContainerModule,
13941
- GridModule
13942
- ],
13943
- exports: [ObjectFormComponent, ObjectFormGroupComponent, ObjectFormEditComponent, FormElementComponent],
13944
- providers: [ObjectFormHelperService],
13945
- declarations: [
13946
- ObjectFormComponent,
13947
- ObjectFormGroupComponent,
13948
- ObjectFormEditComponent,
13949
- FormElementComponent,
13950
- FormElementTableComponent,
13951
- RowEditComponent
13952
- ]
13953
- },] }
14009
+ ContentPreviewService.UNDOCK_WINDOW_NAME = 'eoViewer';
14010
+ ContentPreviewService.decorators = [
14011
+ { type: Injectable }
13954
14012
  ];
13955
14013
 
13956
- class AppAddDialogComponent {
13957
- constructor(prepareService, router, systemService, translate, pendingChanges, locationService) {
13958
- this.prepareService = prepareService;
13959
- this.router = router;
13960
- this.systemService = systemService;
14014
+ class MediaComponent extends UnsubscribeOnDestroy {
14015
+ constructor(translate, dms, renderer, system, _ngZone, config, pluginsService, backend) {
14016
+ super();
13961
14017
  this.translate = translate;
13962
- this.pendingChanges = pendingChanges;
13963
- this.locationService = locationService;
13964
- this.onClose = new EventEmitter();
13965
- this.rootTypes = [];
13966
- this.locationTypes = [];
13967
- }
13968
- prepare(type, isRootType = false) {
13969
- if (this.pendingChanges.check()) {
13970
- return;
13971
- }
13972
- let pid = null;
13973
- if (!isRootType && this.locationParent) {
13974
- 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);
13975
14071
  }
13976
- this.prepareService
13977
- .createPreparedItem(pid, type.name)
13978
- .subscribe(() => {
13979
- this.router.navigateByUrl('/prepare');
13980
- }, Utils.throw(null, this.translate.instant('eo.add.prepare.fail.title'), this.translate.instant('eo.add.prepare.fail.msg')));
13981
- this.onClose.emit();
13982
14072
  }
13983
- autocompleteFn(evt) {
13984
- this.autocompleteRes = this.autocompleteList.filter(type => {
13985
- return type.label.toLowerCase().indexOf(evt.query.toLowerCase()) != -1;
13986
- });
14073
+ get undockWin() {
14074
+ return ContentPreviewService.getUndockWin();
13987
14075
  }
13988
- onSelect(node) {
13989
- if (node.isSubfolder) {
13990
- 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;
13991
14106
  }
13992
14107
  else {
13993
- this.prepare(node.type, node.isRootType);
13994
- }
13995
- }
13996
- preparedItemData(payload) {
13997
- const typeElement = this.systemService
13998
- .getObjectType(this.subfolder.type)
13999
- .elements
14000
- .filter(val => this.subfolder.data ? val.name === Object.keys(this.subfolder.data)[0] : null);
14001
- if (typeElement.length && typeElement[0].multiselect) {
14002
- Object.entries(payload).map(([key, value]) => payload[key] = [value]);
14108
+ this.previewUri = '';
14003
14109
  }
14004
- return payload;
14005
14110
  }
14006
- addToSubfolder() {
14007
- if (this.pendingChanges.check()) {
14008
- 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 = '';
14009
14138
  }
14010
- let pid = this.locationParent.id;
14011
- const { data, type } = this.subfolder;
14012
- const payload = this.preparedItemData(data);
14013
- this.prepareService
14014
- .createPreparedItem(pid, type ? type : null)
14015
- .pipe(mergeMap(res => this.prepareService.updatePreparedItemIndexData(res.id, payload)))
14016
- .subscribe(() => {
14017
- this.router.navigateByUrl('/prepare');
14018
- }, Utils.throw(null, this.translate.instant('eo.add.prepare.fail.title'), this.translate.instant('eo.add.prepare.fail.msg')));
14019
- this.onClose.emit();
14020
14139
  }
14021
- fetchRootTypes() {
14022
- this.prepareService
14023
- .getPrepareRootTypes()
14024
- .subscribe((types) => {
14025
- this.rootTypes = this.sortTypes(types);
14026
- this.createAutocompleteList();
14027
- });
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);
14028
14143
  }
14029
- createAutocompleteList() {
14030
- this.autocompleteList = this.rootTypes.map(type => {
14031
- return {
14032
- label: type.label,
14033
- location: this.translate.instant('eo.add.title.location.common'),
14034
- isRootType: true,
14035
- isSubfolder: false,
14036
- type
14037
- };
14038
- }).concat(this.locationTypes.map(type => {
14039
- return {
14040
- label: type.label,
14041
- location: `${this.translate.instant('eo.add.title.location')} ${this.locationParent.title}`,
14042
- isRootType: false,
14043
- isSubfolder: false,
14044
- type
14045
- };
14046
- }));
14047
- if (this.subfolder) {
14048
- this.autocompleteList.push({
14049
- label: this.subfolder.title,
14050
- location: `${this.translate.instant('eo.add.title.location')} ${this.locationParent.title}`,
14051
- isRootType: false,
14052
- isSubfolder: true,
14053
- });
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);
14054
14151
  }
14055
14152
  }
14056
- sortTypes(types) {
14057
- return types.sort((a, b) => {
14058
- if (a.isContextFolder && !b.isContextFolder) {
14059
- return -1;
14060
- }
14061
- if (!a.isContextFolder && b.isContextFolder) {
14062
- return 1;
14063
- }
14064
- 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;
14065
14160
  });
14161
+ // this.search();
14066
14162
  }
14067
- fetchAllowedChildTypes(loc) {
14068
- this.prepareService
14069
- .getPrepareChildTypes(loc.id)
14070
- .subscribe((res) => {
14071
- const { types, parent } = res;
14072
- this.locationParent = Utils.truncateString(parent, 30);
14073
- this.locationTypes = this.sortTypes(types);
14074
- this.locationParent.title = Utils.truncateString(parent['title'], 30);
14075
- if (loc.subFolder && this.isSubFolderAllowed(loc.subFolder, this.locationTypes)) {
14076
- this.subfolder = loc.subFolder;
14077
- this.subFolderDescription = loc.title + '; ' + this.subfolder.title;
14078
- }
14079
- 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');
14080
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;
14081
14192
  }
14082
- isSubFolderAllowed(subFolder, locationTypes) {
14083
- 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));
14084
14202
  }
14085
- ngOnInit() {
14086
- this.fetchRootTypes();
14087
- this.activeLocationSubscription = this.locationService.activeLocation$
14088
- .subscribe((loc) => {
14089
- if (loc) {
14090
- 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);
14091
14233
  }
14092
- else {
14093
- this.locationTypes = [];
14094
- 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
+ });
14095
14286
  }
14096
- });
14287
+ else if (this.pdfjs.contentWindow && this.pdfjs.contentWindow.PDFViewerApplication) {
14288
+ this.pdfjs.contentWindow.PDFViewerApplication.pdfSidebar.close();
14289
+ this.openPdfViewer(this.latestUri);
14290
+ }
14291
+ }
14097
14292
  }
14098
- ngOnDestroy() {
14099
- if (this.activeLocationSubscription) {
14100
- 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;
14101
14313
  }
14102
14314
  }
14103
- trackByFn(index, item) {
14104
- 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);
14105
14352
  }
14106
14353
  }
14107
- 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 = [
14108
14357
  { type: Component, args: [{
14109
- selector: 'eo-app-add-dialog',
14110
- 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",
14111
- 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)}"]
14112
14362
  },] }
14113
14363
  ];
14114
- AppAddDialogComponent.ctorParameters = () => [
14115
- { type: PrepareService },
14116
- { type: Router },
14117
- { type: SystemService },
14364
+ MediaComponent.ctorParameters = () => [
14118
14365
  { type: TranslateService },
14119
- { type: PendingChangesService },
14120
- { type: LocationService }
14366
+ { type: DmsService },
14367
+ { type: Renderer2 },
14368
+ { type: SystemService },
14369
+ { type: NgZone },
14370
+ { type: Config },
14371
+ { type: PluginsService },
14372
+ { type: BackendService }
14121
14373
  ];
14122
- AppAddDialogComponent.propDecorators = {
14123
- 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 }]
14124
14388
  };
14125
14389
 
14126
- class PreventDoubleClickDirective {
14127
- constructor() {
14128
- this.debounceTime = 500;
14129
- this.debounceClick = new EventEmitter();
14130
- this.clicks = new Subject();
14131
- }
14132
- ngOnInit() {
14133
- this.subscription = this.clicks.pipe(throttleTime(this.debounceTime)).subscribe(e => this.debounceClick.emit(e));
14134
- }
14135
- ngOnDestroy() {
14136
- this.subscription.unsubscribe();
14137
- }
14138
- clickEvent(event) {
14139
- //TODO: does not support LinkAction (ctrl + click)
14140
- event.preventDefault();
14141
- event.stopPropagation();
14142
- this.clicks.next(event);
14143
- }
14390
+ class MediaModule {
14144
14391
  }
14145
- PreventDoubleClickDirective.decorators = [
14146
- { type: Directive, args: [{
14147
- 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]
14148
14402
  },] }
14149
- ];
14150
- PreventDoubleClickDirective.ctorParameters = () => [];
14151
- PreventDoubleClickDirective.propDecorators = {
14152
- debounceTime: [{ type: Input }],
14153
- debounceClick: [{ type: Output }],
14154
- clickEvent: [{ type: HostListener, args: ['click', ['$event'],] }]
14155
- };
14403
+ ];
14156
14404
 
14157
- class ActionComponentAnchorDirective {
14158
- constructor(viewContainerRef) {
14159
- this.viewContainerRef = viewContainerRef;
14160
- }
14405
+ /**
14406
+ * @module
14407
+ * @description
14408
+ * Module rendering a dms objects form.
14409
+ */
14410
+ class ObjectFormModule {
14161
14411
  }
14162
- ActionComponentAnchorDirective.decorators = [
14163
- { type: Directive, args: [{
14164
- 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
+ ]
14165
14443
  },] }
14166
- ];
14167
- ActionComponentAnchorDirective.ctorParameters = () => [
14168
- { type: ViewContainerRef }
14169
14444
  ];
14170
14445
 
14171
- class ActionMenuComponent extends UnsubscribeOnDestroy {
14172
- constructor(actionService, router, viewContainerRef, componentFactoryResolver) {
14173
- super();
14174
- this.actionService = actionService;
14446
+ class AppAddDialogComponent {
14447
+ constructor(prepareService, router, systemService, translate, pendingChanges, locationService) {
14448
+ this.prepareService = prepareService;
14175
14449
  this.router = router;
14176
- this.viewContainerRef = viewContainerRef;
14177
- this.componentFactoryResolver = componentFactoryResolver;
14178
- this.actionLists = {
14179
- common: [], further: []
14180
- };
14181
- this.subActionsListHeader = '';
14182
- this.showComponent = false;
14183
- this.showMenu = false;
14184
- this.loading = false;
14185
- // subscribe for visibility observable indicating whether to show or hide the actions
14186
- this.actionService
14187
- .actionsShowing$.pipe(takeUntil(this.componentDestroyed$))
14188
- .subscribe((cmd) => {
14189
- if (!this.showMenu && cmd.show) {
14190
- this.selection = cmd.selection;
14191
- this.target = cmd.target;
14192
- this.showActionMenu();
14193
- }
14194
- else if (this.showMenu && !cmd.show) {
14195
- this.hideActionMenu();
14196
- }
14197
- });
14198
- this.router.events
14199
- .pipe(takeUntil(this.componentDestroyed$), filter(evt => evt instanceof NavigationStart))
14200
- .subscribe(() => this.hide());
14201
- }
14202
- getActions() {
14203
- this.actionService
14204
- .getActionsList(this.selection, this.viewContainerRef)
14205
- .subscribe(actionsList => {
14206
- this.actionLists.common = actionsList.filter(actionListEntry => actionListEntry.action.group === 'common');
14207
- this.actionLists.further = actionsList.filter(actionListEntry => actionListEntry.action.group === 'further');
14208
- });
14209
- }
14210
- getMoreActions() {
14211
- this.loading = true;
14212
- this.actionService
14213
- .getMoreActions(this.selection, this.viewContainerRef)
14214
- .subscribe(actionList => {
14215
- this.loading = false;
14216
- this.actionLists.further = this.actionLists.further.concat(actionList).sort(Utils.sortValues('action.label'));
14217
- }, 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 = [];
14218
14457
  }
14219
- hide() {
14220
- 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();
14221
14472
  }
14222
- showActionDescription(i, event) {
14223
- event.stopPropagation();
14224
- event.preventDefault();
14225
- 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
+ });
14226
14477
  }
14227
- showActionMenu() {
14228
- this.getActions();
14229
- if (this.target === 'DMS_OBJECT') {
14230
- this.getMoreActions();
14478
+ onSelect(node) {
14479
+ if (node.isSubfolder) {
14480
+ this.addToSubfolder();
14481
+ }
14482
+ else {
14483
+ this.prepare(node.type, node.isRootType);
14231
14484
  }
14232
- 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;
14233
14723
  }
14234
14724
  hideActionMenu() {
14235
14725
  this.clear();
@@ -15629,7 +16119,7 @@ class AddResubmissionComponent {
15629
16119
  AddResubmissionComponent.decorators = [
15630
16120
  { type: Component, args: [{
15631
16121
  selector: 'eo-add-resubmission',
15632
- 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",
15633
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)}"]
15634
16124
  },] }
15635
16125
  ];
@@ -16252,16 +16742,65 @@ AppLayoutComponent.propDecorators = {
16252
16742
  };
16253
16743
 
16254
16744
  /**
16255
- * 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.
16256
16750
  */
16257
- 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
+ }
16258
16783
  }
16259
- EoAppShellModule.decorators = [
16260
- { type: NgModule, args: [{
16261
- imports: [
16262
- AppShellRoutingModule,
16263
- CommonModule,
16264
- 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,
16265
16804
  UiModule,
16266
16805
  UtilModule,
16267
16806
  AutoCompleteModule,
@@ -16273,7 +16812,7 @@ EoAppShellModule.decorators = [
16273
16812
  ShortcutsModule,
16274
16813
  ActionModule,
16275
16814
  CtaModule,
16276
- ProcessFormModule
16815
+ ProcessFormModule,
16277
16816
  ],
16278
16817
  exports: [AppBarComponent],
16279
16818
  declarations: [
@@ -16284,7 +16823,8 @@ EoAppShellModule.decorators = [
16284
16823
  AppAddDialogComponent,
16285
16824
  AppLayoutComponent,
16286
16825
  ContextSearchComponent,
16287
- AppProcessComponent
16826
+ AppProcessComponent,
16827
+ TrapFocusDirective,
16288
16828
  ]
16289
16829
  },] }
16290
16830
  ];
@@ -16523,851 +17063,422 @@ PluginService.ctorParameters = () => [
16523
17063
  { type: Array, decorators: [{ type: Inject, args: [ENTRY_COMPONENTS,] }] },
16524
17064
  { type: Array, decorators: [{ type: Inject, args: [ENTRY_LINKS,] }] },
16525
17065
  { type: ComponentFactoryResolver }
16526
- ];
16527
-
16528
- class PluginComponent {
16529
- constructor(pluginService) {
16530
- this.pluginService = pluginService;
16531
- }
16532
- set type(type) {
16533
- this.pluginService.loadByType(type, this.eoPlugin.viewContainerRef);
16534
- }
16535
- set id(id) {
16536
- this.pluginService.loadById(id, this.eoPlugin.viewContainerRef);
16537
- }
16538
- }
16539
- PluginComponent.decorators = [
16540
- { type: Component, args: [{
16541
- selector: 'eo-plugin',
16542
- template: `
16543
- <ng-template eoPlugin></ng-template>`
16544
- },] }
16545
- ];
16546
- PluginComponent.ctorParameters = () => [
16547
- { type: PluginService }
16548
- ];
16549
- PluginComponent.propDecorators = {
16550
- eoPlugin: [{ type: ViewChild, args: [PluginDirective, { static: true },] }],
16551
- type: [{ type: Input }],
16552
- id: [{ type: Input }]
16553
- };
16554
- class TabPluginComponent {
16555
- constructor(pluginService) {
16556
- this.pluginService = pluginService;
16557
- }
16558
- set type(type) {
16559
- this.types = this.pluginService.loadTabs(type);
16560
- }
16561
- }
16562
- TabPluginComponent.decorators = [
16563
- { type: Component, args: [{
16564
- selector: 'eo-tab-plugin',
16565
- template: `
16566
- <eo-tab-panel *ngFor="let t of types" [id]="t.id" [header]="t.id | translate">
16567
- <eo-plugin [id]="t.id"></eo-plugin>
16568
- </eo-tab-panel>`
16569
- },] }
16570
- ];
16571
- TabPluginComponent.ctorParameters = () => [
16572
- { type: PluginService }
16573
- ];
16574
- TabPluginComponent.propDecorators = {
16575
- tabPanels: [{ type: ViewChildren, args: [TabPanelComponent,] }],
16576
- type: [{ type: Input }]
16577
- };
16578
- class SidebarPluginComponent {
16579
- constructor(pluginService) {
16580
- this.pluginService = pluginService;
16581
- }
16582
- set type(type) {
16583
- this._links = this.pluginService.loadLinks(type);
16584
- }
16585
- }
16586
- SidebarPluginComponent.decorators = [
16587
- { type: Component, args: [{
16588
- selector: 'eo-sidebar-plugin',
16589
- template: `
16590
- <div #navItem class="nav-item" *ngFor="let l of _links">
16591
- <a [href]="l.path" *ngIf="l.path.startsWith('http');else link">{{l.id | translate}}</a>
16592
- <ng-template #link>
16593
- <a [routerLink]="l.path" [queryParams]="l.queryParams" routerLinkActive="active-link">{{l.id | translate}}</a>
16594
- </ng-template>
16595
- </div>`
16596
- },] }
16597
- ];
16598
- SidebarPluginComponent.ctorParameters = () => [
16599
- { type: PluginService }
16600
- ];
16601
- SidebarPluginComponent.propDecorators = {
16602
- links: [{ type: ViewChildren, args: ['navItem',] }],
16603
- type: [{ type: Input }]
16604
- };
16605
-
16606
- class ContentPreviewService {
16607
- static undockWin(src) {
16608
- 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');
16609
- return w;
16610
- }
16611
- static closeWin() {
16612
- return this.getUndockWin() && this.getUndockWin().close();
16613
- }
16614
- static getUndockWin() {
16615
- return window[ContentPreviewService.UNDOCK_WINDOW_NAME];
16616
- }
16617
- static undockWinActive() {
16618
- return !!ContentPreviewService.getUndockWin() && !ContentPreviewService.getUndockWin().closed;
16619
- }
16620
- static mapLang(lang) {
16621
- switch (lang) {
16622
- case 'en':
16623
- return 'en-US';
16624
- case 'es':
16625
- return 'es-ES';
16626
- case 'pt':
16627
- return 'pt-PT';
16628
- case 'zh':
16629
- return 'zh-CN';
16630
- case 'hi':
16631
- return 'hi-IN';
16632
- case 'bn':
16633
- return 'bn-BD';
16634
- default:
16635
- return lang;
16636
- }
16637
- }
16638
- }
16639
- ContentPreviewService.UNDOCK_WINDOW_NAME = 'eoViewer';
16640
- ContentPreviewService.decorators = [
16641
- { type: Injectable }
16642
- ];
16643
-
16644
- class ObjectDetailsComponent extends UnsubscribeOnDestroy {
16645
- constructor(router, route, system, empty, agentService, backend, dmsService, selection, actionService, capabilityService, uploadRegistry, eventService, configService, translate) {
16646
- super();
16647
- this.router = router;
16648
- this.route = route;
16649
- this.system = system;
16650
- this.empty = empty;
16651
- this.agentService = agentService;
16652
- this.backend = backend;
16653
- this.dmsService = dmsService;
16654
- this.selection = selection;
16655
- this.actionService = actionService;
16656
- this.capabilityService = capabilityService;
16657
- this.uploadRegistry = uploadRegistry;
16658
- this.eventService = eventService;
16659
- this.configService = configService;
16660
- this.translate = translate;
16661
- // generate unique id to pass to upload registry
16662
- this.uploadTarget = new UploadTarget(Utils.uuid(), UploadTarget.OBJECT);
16663
- this.hasError = false;
16664
- this.nodmsobject = false;
16665
- this.showLoader = false;
16666
- this.panelOrder = { 'master': ['summary', 'indexdata', 'history', 'links'], 'slave': ['preview'] };
16667
- this.agentIsConnected$ = this.agentService.isConnected$;
16668
- this.enableCompare = false;
16669
- this.enableDiff = true;
16670
- this.enableSync = true;
16671
- this._emptyState = { icon: 'ic_no-file.svg', text: '', className: '' };
16672
- this.externalPanels = new QueryList();
16673
- // shortcut actions
16674
- this.shortcuts = {
16675
- id: 'eo.object-details',
16676
- label: this.translate.instant('eo.shortcuts.eo-object-details.title'),
16677
- labelKey: 'eo.shortcuts.eo-object-details.title',
16678
- actions: [
16679
- {
16680
- name: this.translate.instant('eo.shortcuts.action.open.context'),
16681
- nameKey: 'eo.shortcuts.action.open.context',
16682
- shortcut: new Shortcut('O', false, false),
16683
- onExecuteAction: () => {
16684
- this.openObject(this.item.id, this.item.typeName);
16685
- },
16686
- isHidden: () => {
16687
- return false;
16688
- }
16689
- }
16690
- ]
16691
- };
16692
- this.parseDmsParams = this.getDmsParams;
16693
- this.hasContent = new EventEmitter();
16694
- this.undockWinActive = false;
16695
- this.panelOrder = this.configService.getRaw('objectDetailsTabs') || this.panelOrder;
16696
- this.undockWinActive = ContentPreviewService.undockWinActive();
16697
- this.agentService.setAgentStatus(this.route.snapshot.queryParams['connectagent']).subscribe((hasStatus) => {
16698
- if (hasStatus) {
16699
- this.router.navigate([], { queryParams: { connectagent: null }, queryParamsHandling: 'merge' });
16700
- }
16701
- });
16702
- }
16703
- set reference(isRef) {
16704
- this.isReference = isRef;
16705
- }
16706
- set emptyState(e) {
16707
- this._emptyState = e || EmptyStateService.defaultEmptyState();
16708
- }
16709
- get emptyState() {
16710
- return this._emptyState;
16711
- }
16712
- set dmsParams(params) {
16713
- this.showLoader = true;
16714
- this.loadDmsObject(params).subscribe((res) => {
16715
- this.dmsObject = res;
16716
- this.showLoader = false;
16717
- }, Utils.throw(() => this.onHasError(true, true, false)));
16718
- }
16719
- set dmsParams2(params) {
16720
- this.loadDmsObject(params)
16721
- .subscribe((res) => {
16722
- this.dmsObject2 = res;
16723
- }, Utils.throw(() => this.onHasError(true, true, false)));
16724
- }
16725
- set dmsObject(v) {
16726
- var _a;
16727
- this.item = v;
16728
- this.onHasError();
16729
- // prepare indexdata preview
16730
- this.onIndexDataSaved(null, this.item);
16731
- this.eventService.trigger(EnaioEvent.DMS_OBJECT_LOADED, this.item);
16732
- if (this.item) {
16733
- if (this.item.isActiveVersion && !this.enableCompare) {
16734
- this.uploadTarget.referenceObject = this.item;
16735
- this.uploadTarget.onUploadSuccess = () => this.dmsParams = { id: v.id, type: v.typeName };
16736
- this.uploadRegistry.register(this.uploadTarget);
16737
- }
16738
- if (this.item.lock) {
16739
- this.lockTooltip = this.translate.instant('eo.object.lock') + ' '
16740
- + (new LocaleDatePipe(this.translate).transform(this.item.lock.on))
16741
- + ', ' + this.item.lock.by.label + ' (' + this.item.lock.by.name + ')';
16742
- }
16743
- }
16744
- else {
16745
- this.emptyState = this.empty.getEmptyState(0);
16746
- }
16747
- if ((_a = this.item) === null || _a === void 0 ? void 0 : _a.subscriptions.length) {
16748
- this.subscriptionIconTooltip = this.createSubscriptionIconTooltip(this.item);
16749
- }
16750
- }
16751
- set dmsObject2(v) {
16752
- this.item2 = v;
16753
- this.onHasError();
16754
- this.onIndexDataSaved(null, this.item2);
16755
- }
16756
- get dataType() {
16757
- return this.item ? this.item.typeName : 'none';
16758
- }
16759
- getDmsParams(data) {
16760
- return data ? Object.assign(Object.assign({}, data), { type: data.typeName || data.type }) : null;
16761
- }
16762
- updateContent() {
16763
- if (this.applySelection) {
16764
- if (this.enableCompare) {
16765
- this.selection
16766
- .find(this.applySelection.in)
16767
- .selection$
16768
- .pipe(takeUntil(this.componentDestroyed$))
16769
- .subscribe((res) => {
16770
- this.dmsParams = this.parseDmsParams(res[0]);
16771
- this.dmsParams2 = this.parseDmsParams(res[1]);
16772
- });
16773
- return;
16774
- }
16775
- else {
16776
- this.selection
16777
- .find(this.applySelection.in)
16778
- .focus$
16779
- .pipe(takeUntil(this.componentDestroyed$))
16780
- .subscribe(res => {
16781
- this.showLoader = true;
16782
- this.loadDmsObject(this.parseDmsParams(res)).subscribe((res) => {
16783
- // refreshing object details may result in an updated version of the object
16784
- // so we'll use this trigger to also emitt those changes to other listening components
16785
- if (this.item && res && (this.item.id === res.id) && res.version > this.item.version) {
16786
- this.eventService.trigger(EnaioEvent.DMS_OBJECT_UPDATED, res);
16787
- }
16788
- this.dmsObject = res;
16789
- this.showLoader = false;
16790
- }, Utils.throw((error) => {
16791
- this.uploadRegistry.unregister(this.uploadTarget.id);
16792
- return this.onHasError(true, true, false);
16793
- }));
16794
- });
16795
- }
16796
- }
16797
- }
16798
- refreshContent() {
16799
- this.updateContent();
16800
- }
16801
- prepareIndexDataPreview(item, formData) {
16802
- const { id, data, type, created, modified, content, contentFileName, contentFileSize, version } = item;
16803
- return this.system
16804
- .getObjectTypeForm(type.name, 'EDIT')
16805
- .pipe(map(form => {
16806
- let indexDataPreview = {
16807
- form,
16808
- data: formData || data
16809
- };
16810
- let baseparams = {
16811
- id,
16812
- type: type.name,
16813
- createdOn: new Date(created.on),
16814
- modifiedOn: new Date(modified.on),
16815
- createdBy: `${created.by.title} (${created.by.name})`,
16816
- modifiedBy: `${modified.by.title} (${modified.by.name})`,
16817
- contentFileName: contentFileName ? contentFileName : null,
16818
- contentFileSize: contentFileSize ? Number(contentFileSize) : null,
16819
- version: version || 0,
16820
- mimeGroup: content ? content.contents ? content.contents[0].mimegroup : null : null,
16821
- digest: content ? content.contents ? content.contents[0].digest : null : null,
16822
- contentId: content ? content.contents ? content.id : null : null
16823
- };
16824
- return { indexDataPreview, baseparams };
16825
- }));
16826
- }
16827
- onHasError(hasError = false, nodmsobject = false, showLoader = false) {
16828
- this.hasError = hasError;
16829
- this.nodmsobject = nodmsobject;
16830
- this.showLoader = showLoader;
16831
- this.hasContent.emit(!hasError);
16832
- }
16833
- loadDmsObject(params) {
16834
- var _a;
16835
- if (!this.enableCompare && params) {
16836
- delete params.version;
16837
- }
16838
- // check for valid id
16839
- 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);
16840
- }
16841
- downloadOriginalContent() {
16842
- this.backend.downloadContent([this.item]);
16843
- }
16844
- showActions() {
16845
- const actions = [this.item, this.item2].filter(v => v);
16846
- this.actionService.showActions(actions, 'DMS_OBJECT');
16847
- }
16848
- openObject(id, _type) {
16849
- const queryParams = { queryParams: { 'type': _type } };
16850
- return this.router.navigate(['/object', id], queryParams);
16851
- }
16852
- // executed when the dms object changed due to saving its indexdata
16853
- onIndexDataSaved(formData, item) {
16854
- if (!this.item) {
16855
- this.indexDataPreview = null;
16856
- this.baseparams = null;
16857
- }
16858
- if (!this.item2) {
16859
- this.indexDataPreview2 = null;
16860
- this.baseparams2 = null;
16861
- }
16862
- if (item) {
16863
- this.prepareIndexDataPreview(item, formData)
16864
- .subscribe(data => {
16865
- if (item === this.item) {
16866
- this.indexDataPreview = data.indexDataPreview;
16867
- this.baseparams = data.baseparams;
16868
- }
16869
- else {
16870
- this.indexDataPreview2 = data.indexDataPreview;
16871
- this.baseparams2 = data.baseparams;
16872
- }
16873
- });
16874
- }
16875
- }
16876
- get referenceTitle() {
16877
- return this.item.contextFolder ? this.item.contextFolder.title : this.item.title;
16878
- }
16879
- isJournalObject(item) {
16880
- return item.type.supertypes.find(sT => sT === 'sysjournalobject');
16881
- }
16882
- isVisible(id) {
16883
- return this.panelOrder.master.includes(id) || this.panelOrder.slave.includes(id);
16884
- }
16885
- createSubscriptionIconTooltip(item) {
16886
- let tooltip = '';
16887
- const modes = this.item.subscriptions.map(subscription => subscription.mode);
16888
- const subscribedToAllChanges = modes.includes(SubscriptionMode.DMS_OBJECT_CHANGED) || (modes.includes(SubscriptionMode.ONLY_DOCUMENT_CONTENT_CHANGED) && modes.includes(SubscriptionMode.ONLY_INDEX_DATA_CHANGED));
16889
- const subscribedToMetaChangesOnly = modes.includes(SubscriptionMode.ONLY_INDEX_DATA_CHANGED) && !modes.includes(SubscriptionMode.ONLY_DOCUMENT_CONTENT_CHANGED) && !modes.includes(SubscriptionMode.DMS_OBJECT_CHANGED);
16890
- const subscribedToContentChangesOnly = modes.includes(SubscriptionMode.ONLY_DOCUMENT_CONTENT_CHANGED) && !modes.includes(SubscriptionMode.ONLY_INDEX_DATA_CHANGED) && !modes.includes(SubscriptionMode.DMS_OBJECT_CHANGED);
16891
- if (subscribedToAllChanges) {
16892
- tooltip = this.translate.instant('eo.object.subscription.icon.tooltip.allChanges');
16893
- }
16894
- else if (subscribedToMetaChangesOnly) {
16895
- tooltip = this.translate.instant('eo.object.subscription.icon.tooltip.meta');
16896
- }
16897
- else if (subscribedToContentChangesOnly) {
16898
- tooltip = this.translate.instant('eo.object.subscription.icon.tooltip.content');
16899
- }
16900
- return tooltip;
17066
+ ];
17067
+
17068
+ class PluginComponent {
17069
+ constructor(pluginService) {
17070
+ this.pluginService = pluginService;
16901
17071
  }
16902
- ngOnInit() {
16903
- this.capabilities = this.capabilityService.getCapabilities();
16904
- this.updateContent();
16905
- this.eventService
16906
- .on(EnaioEvent.DMS_OBJECT_UPDATED)
16907
- .pipe(takeUntil(this.componentDestroyed$))
16908
- .subscribe(event => {
16909
- if (event.data && this.item.id === event.data.id) {
16910
- this.dmsObject = this.dmsService.createLocalCopyOfDMSObject(event.data);
16911
- if (this.preview && !this.preview.disabled) {
16912
- this.preview.refresh();
16913
- }
16914
- }
16915
- });
16916
- this.eventService
16917
- .on(EnaioEvent.INBOX_ITEM_CONFIRMED)
16918
- .pipe(takeUntil(this.componentDestroyed$))
16919
- .subscribe(event => {
16920
- if (this.item && this.item.id === event.data.target.id) {
16921
- this.dmsParams = null;
16922
- }
16923
- });
17072
+ set type(type) {
17073
+ this.pluginService.loadByType(type, this.eoPlugin.viewContainerRef);
16924
17074
  }
16925
- ngAfterViewInit() {
16926
- let panels = this.tabPanels.toArray();
16927
- this.tabPlugins.forEach(p => panels = panels.concat(p.tabPanels.toArray()));
16928
- this.externalPanels.reset(panels);
17075
+ set id(id) {
17076
+ this.pluginService.loadById(id, this.eoPlugin.viewContainerRef);
16929
17077
  }
16930
- ngOnDestroy() {
16931
- 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);
16932
17100
  }
16933
17101
  }
16934
- ObjectDetailsComponent.decorators = [
17102
+ TabPluginComponent.decorators = [
16935
17103
  { type: Component, args: [{
16936
- selector: 'eo-object-details',
16937
- 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>",
16938
- providers: [ContentPreviewService],
16939
- 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>`
16940
17109
  },] }
16941
17110
  ];
16942
- ObjectDetailsComponent.ctorParameters = () => [
16943
- { type: Router },
16944
- { type: ActivatedRoute },
16945
- { type: SystemService },
16946
- { type: EmptyStateService },
16947
- { type: AgentService },
16948
- { type: BackendService },
16949
- { type: DmsService },
16950
- { type: SelectionService },
16951
- { type: ActionService },
16952
- { type: CapabilitiesService },
16953
- { type: UploadRegistryService },
16954
- { type: EventService },
16955
- { type: Config },
16956
- { type: TranslateService }
17111
+ TabPluginComponent.ctorParameters = () => [
17112
+ { type: PluginService }
16957
17113
  ];
16958
- ObjectDetailsComponent.propDecorators = {
16959
- preview: [{ type: ViewChild, args: ['viewer',] }],
16960
- isReference: [{ type: HostBinding, args: ['class.reference',] }],
16961
- reference: [{ type: Input }],
16962
- searchTerm: [{ type: Input }],
16963
- enableCompare: [{ type: Input }],
16964
- enableDiff: [{ type: Input }],
16965
- enableSync: [{ type: Input }],
16966
- cacheLayout: [{ type: Input }],
16967
- emptyState: [{ type: Input }],
16968
- dmsParams: [{ type: Input, args: ['params',] }],
16969
- dmsParams2: [{ type: Input, args: ['params2',] }],
16970
- dmsObject: [{ type: Input, args: ['item',] }],
16971
- dmsObject2: [{ type: Input, args: ['item2',] }],
16972
- tabPanels: [{ type: ContentChildren, args: [TabPanelComponent,] }],
16973
- tabPlugins: [{ type: ContentChildren, args: [TabPluginComponent,] }],
16974
- applySelection: [{ type: Input }],
16975
- parseDmsParams: [{ type: Input }],
16976
- hasContent: [{ type: Output }],
16977
- 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 }]
16978
17144
  };
16979
17145
 
16980
- class MediaComponent extends UnsubscribeOnDestroy {
16981
- 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) {
16982
17148
  super();
16983
- this.translate = translate;
16984
- this.dms = dms;
16985
- this.renderer = renderer;
17149
+ this.router = router;
17150
+ this.route = route;
16986
17151
  this.system = system;
16987
- this._ngZone = _ngZone;
16988
- this.config = config;
16989
- this.pluginsService = pluginsService;
17152
+ this.empty = empty;
17153
+ this.agentService = agentService;
16990
17154
  this.backend = backend;
16991
- this.SIZE_LIMIT = 1024 * 1024 * 10; // 10MB
16992
- this._disabled = false;
16993
- this.attachments = [];
16994
- this.isMedia = false;
16995
- this.isOctetStream = false;
16996
- this.isNotSupported = false;
16997
- 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);
16998
17165
  this.hasError = false;
16999
- this.customConfig = [];
17000
- this.defaultViewers = [
17001
- {
17002
- "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"],
17003
- "viewer": "assets/_default/api/monaco/?path=${path}&mimeType=${mimeType}&fileExtension=${fileExtension}&lang=${lang}&theme=${theme}"
17004
- },
17005
- {
17006
- "mimeType": ["audio/mp3", "audio/webm", "audio/ogg", "audio/mpeg", "video/mp4", "video/webm", "video/ogg", "application/ogg"],
17007
- "viewer": "assets/_default/api/video/?path=${path}&mimeType=${mimeType}&fileExtension=${fileExtension}&lang=${lang}&theme=${theme}"
17008
- },
17009
- {
17010
- "mimeType": ["image/jpeg", "image/png", "image/apng", "image/gif", "image/svg+xml", "image/webp"],
17011
- "viewer": "assets/_default/api/img/?path=${path}&mimeType=${mimeType}&fileExtension=${fileExtension}&lang=${lang}&theme=${theme}"
17012
- },
17013
- { "viewer": "() => parameters.defaultViewer + '#'" },
17014
- { "error": true, "type": "error", "viewer": "assets/_default/api/error/?path=${path}&mimeType=${mimeType}&fileExtension=${fileExtension}&lang=${lang}&theme=${theme}" }
17015
- ];
17016
- this.undockDisabled = false;
17017
- this.enableCloseBtn = false;
17018
- // by default, the viewer ignores the version of the dms object. This will always show the latest version.
17019
- // We need this to be able to refresh the viewer because otherwise pdfjs worker will fail.
17020
- this.useVersion = false;
17021
- this.fileSizePipe = new FileSizePipe(translate);
17022
- this.SIZE_LIMIT = this.config.getRaw('preview.fileSizeLimit') || this.SIZE_LIMIT;
17023
- this.customConfig = (this.config.getRaw('preview.viewers') || []).concat(this.defaultViewers);
17024
- this.pluginsService.api.content.catchError().subscribe((evt) => {
17025
- var _a, _b;
17026
- const { err, win, parameters } = evt.data;
17027
- 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', [
17028
- this.pluginsService.api,
17029
- err,
17030
- win,
17031
- parameters
17032
- ]);
17033
- 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
+ }
17034
17203
  });
17035
- if (ContentPreviewService.undockWinActive()) {
17036
- this.undock(false);
17037
- }
17038
- }
17039
- get undockWin() {
17040
- return ContentPreviewService.getUndockWin();
17041
- }
17042
- set setAttachments(attachments) {
17043
- this.attachments = attachments;
17044
- this.attachmentsShown = false;
17045
- }
17046
- set setSearchTerm(searchTerm) {
17047
- this.searchTerm = searchTerm || '';
17048
17204
  }
17049
- set disabled(disabled) {
17050
- this._disabled = !!disabled;
17051
- this.toogleViewer();
17205
+ set reference(isRef) {
17206
+ this.isReference = isRef;
17052
17207
  }
17053
- get disabled() {
17054
- return this._disabled;
17208
+ set emptyState(e) {
17209
+ this._emptyState = e || EmptyStateService.defaultEmptyState();
17055
17210
  }
17056
- set previewUri(uri) {
17057
- this._previewUri = uri;
17058
- this.toogleViewer();
17211
+ get emptyState() {
17212
+ return this._emptyState;
17059
17213
  }
17060
- get previewUri() {
17061
- 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)));
17062
17220
  }
17063
- set previewFile(file) {
17064
- var _a;
17065
- if (file) {
17066
- this.viewer = this.getViewer(file);
17067
- this.isMedia = this.viewer.viewer !== MediaComponent.PDF_VIEWER;
17068
- this.isOctetStream = !!((_a = file.mimegroup) === null || _a === void 0 ? void 0 : _a.match(/octet-stream/));
17069
- this.isLarge = file.size && file.size > this.SIZE_LIMIT;
17070
- this.mediaType = file.mediaTypeName && this.system.getObjectType(file.mediaTypeName);
17071
- this.previewUri = this.isMedia ? this.viewer.previewUri : file.uriPdf;
17072
- }
17073
- else {
17074
- this.previewUri = '';
17075
- }
17221
+ set dmsParams2(params) {
17222
+ this.loadDmsObject(params)
17223
+ .subscribe((res) => {
17224
+ this.dmsObject2 = res;
17225
+ }, Utils.throw(() => this.onHasError(true, true, false)));
17076
17226
  }
17077
- set dmsObject(item) {
17227
+ set dmsObject(v) {
17078
17228
  var _a;
17079
- this._dmsObject = item;
17080
- this.dmsObjectTitle = item.title || '...';
17081
- this.setAttachments = [];
17082
- if (this.attachmentsLoading) {
17083
- // cancel any pending requests
17084
- this.attachmentsLoading.unsubscribe();
17085
- }
17086
- if (item.content && item.content.contents && item.content.contents.length) {
17087
- const file = item.content.contents[0] || {};
17088
- this.previewFile = {
17089
- uri: this.dms.getPreview(item.content.id, item.content.type, this.useVersion ? item.version : null),
17090
- uriPdf: this.dms.getPreview(item.content.id, item.content.type, this.useVersion ? item.version : null, 'PDF'),
17091
- mimetype: file.mimetype,
17092
- mimegroup: file.mimegroup,
17093
- size: file.size,
17094
- path: file.path,
17095
- mediaTypeName: item.typeName
17096
- };
17097
- if (!!((_a = file.mimegroup) === null || _a === void 0 ? void 0 : _a.match(/^mail|octet-stream/))) {
17098
- this.slideUri = this.dms.getSlide(item.content.id, item.content.type, this.useVersion ? item.version : null, 256);
17099
- 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 + ')';
17100
17244
  }
17101
17245
  }
17102
17246
  else {
17103
- this.previewUri = '';
17104
- }
17105
- }
17106
- selectAttachment(attachment, force) {
17107
- 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;
17108
- this.loadDocument(previewUri || this.previewUri, force);
17109
- }
17110
- toogleViewer() {
17111
- this.open = !this.disabled && !!this.previewUri;
17112
- if (this.undockDisabled) {
17113
- this.isUndocked = false;
17247
+ this.emptyState = this.empty.getEmptyState(0);
17114
17248
  }
17115
- if (this.open || this.isUndocked) {
17116
- 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);
17117
17251
  }
17118
17252
  }
17119
- refresh() {
17120
- this.loadDocument(this.previewUri, true);
17121
- }
17122
- openPdfViewer(uri) {
17123
- this.pdfjs.contentWindow.PDFViewerApplication.open(uri).then(() => (this.hasError = false)).catch((err) => {
17124
- this.hasError = !this.isOctetStream;
17125
- this.isNotSupported = this.isOctetStream;
17126
- });
17127
- // this.search();
17128
- }
17129
- getViewer(file) {
17130
- var _a, _b;
17131
- const isVideo = !!((_a = file.mimegroup) === null || _a === void 0 ? void 0 : _a.match(/^audio|^video/));
17132
- const defaultViewer = isVideo ? MediaComponent.VIDEO_VIEWER : MediaComponent.PDF_VIEWER;
17133
- const fileExtension = ((_b = file.path) === null || _b === void 0 ? void 0 : _b.includes('.')) ? file.path.split('.').pop() : '';
17134
- const mimeType = file.mimetype;
17135
- const config = this.customConfig.find((c) => {
17136
- const matchMT = !c.mimeType || (typeof c.mimeType === 'string' ? [c.mimeType] : c.mimeType).includes(mimeType === null || mimeType === void 0 ? void 0 : mimeType.toLowerCase());
17137
- const matchFE = !c.fileExtension || (typeof c.fileExtension === 'string' ? [c.fileExtension] : c.fileExtension).includes((fileExtension).toLowerCase());
17138
- return matchMT && matchFE && (!c.type || c.type === 'default');
17139
- });
17140
- const parameters = {
17141
- file,
17142
- path: location.origin + file.uri,
17143
- pathPdf: location.origin + file.uriPdf,
17144
- viewer: (config === null || config === void 0 ? void 0 : config.viewer) || defaultViewer,
17145
- load: config === null || config === void 0 ? void 0 : config.load,
17146
- fileExtension,
17147
- mimeType,
17148
- theme: '',
17149
- defaultViewer,
17150
- previewUri: ''
17151
- };
17152
- parameters.viewer = this.pluginsService.applyFunction(parameters.viewer, 'component, dmsObject, parameters', [this, this._dmsObject, parameters]) || defaultViewer;
17153
- const extend = this.customConfig.find((c) => c.type === 'extend');
17154
- if (extend)
17155
- parameters.viewer = this.pluginsService.applyFunction(extend.viewer, 'component, dmsObject, parameters', [this, this._dmsObject, parameters]);
17156
- parameters.previewUri = this.resolveUri(parameters.viewer, parameters);
17157
- return parameters;
17253
+ set dmsObject2(v) {
17254
+ this.item2 = v;
17255
+ this.onHasError();
17256
+ this.onIndexDataSaved(null, this.item2);
17158
17257
  }
17159
- resolveUri(viewer, parameters) {
17160
- return (viewer ? document.baseURI : '') + viewer
17161
- .replace('${originalPath}', parameters.path)
17162
- .replace('${path}', encodeURIComponent(parameters.path))
17163
- .replace('${pathPdf}', encodeURIComponent(parameters.pathPdf))
17164
- .replace('${fileExtension}', encodeURIComponent(parameters.fileExtension))
17165
- .replace('${mimeType}', encodeURIComponent(parameters.mimeType))
17166
- .replace('${theme}', encodeURIComponent(parameters.theme))
17167
- .replace('${lang}', ContentPreviewService.mapLang(this.translate.currentLang));
17258
+ get dataType() {
17259
+ return this.item ? this.item.typeName : 'none';
17168
17260
  }
17169
- undock(open = true) {
17170
- if (this.undockDisabled) {
17171
- return;
17172
- }
17173
- this.isUndocked = !this.isUndocked;
17174
- if (!this.isUndocked) {
17175
- ContentPreviewService.closeWin();
17176
- }
17177
- else {
17178
- this._ngZone.runOutsideAngular(_ => {
17179
- const interval = setInterval(() => {
17180
- if (this.undockWin && !ContentPreviewService.undockWinActive()) {
17181
- clearInterval(interval);
17182
- this._ngZone.run(() => this.isUndocked && this.undock());
17183
- }
17184
- }, 1000);
17185
- fromEvent(window, 'beforeunload')
17186
- .pipe(takeWhile(() => this.isUndocked))
17187
- .subscribe(e => ContentPreviewService.closeWin());
17188
- });
17189
- }
17190
- if (open) {
17191
- this.loadDocument(this.previewUri, true);
17192
- }
17261
+ getDmsParams(data) {
17262
+ return data ? Object.assign(Object.assign({}, data), { type: data.typeName || data.type }) : null;
17193
17263
  }
17194
- openWindow(src, clean = false) {
17195
- ContentPreviewService.undockWin(src);
17196
- if (clean) {
17197
- while (this.undockWin.document.body.firstChild) {
17198
- 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;
17199
17276
  }
17200
- }
17201
- else if (!src && !this.undockWin.document.querySelector('#no-file')) {
17202
- this.undockWin.document.write(`<div id="no-file" style="opacity: 0.06; display: flex; height: 100%; width: 100%; align-items: center; justify-content: center;">
17203
- <svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 48 48">
17204
- <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
17205
- 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"/>
17206
- </svg>
17207
- <div>`);
17208
- }
17209
- }
17210
- loadDocument(uri, force) {
17211
- var _a, _b;
17212
- if (force) {
17213
- this.isLarge = false;
17214
- }
17215
- if (!force && (this.disabled || !uri || (uri === this.latestUri && !this.hasError))) {
17216
- return false;
17217
- }
17218
- this.latestUri = uri || '';
17219
- this.hasError = false;
17220
- this.isNotSupported = false;
17221
- if (this.isUndocked) {
17222
- this.openWindow(this.latestUri);
17223
- const onload = () => { var _a; return this.pluginsService.applyFunction((_a = this.viewer) === null || _a === void 0 ? void 0 : _a.load, 'iframe, component', [this.undockWin, this]); };
17224
- this.iframeInit(this.undockWin, ((_a = this.viewer) === null || _a === void 0 ? void 0 : _a.load) && onload);
17225
- return false;
17226
- }
17227
- if (this.isLarge) {
17228
- return false;
17229
- }
17230
- if (this.isMedia) {
17231
- this.renderer.setAttribute(this.iframeMedia.nativeElement, 'src', this.latestUri);
17232
- 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]); };
17233
- this.iframeInit(this.iframeMedia.nativeElement, ((_b = this.viewer) === null || _b === void 0 ? void 0 : _b.load) && onload);
17234
- }
17235
- else {
17236
- if (!this.pdfjs) {
17237
- this.pdfjs = this.iframe.nativeElement;
17238
- this.renderer.setAttribute(this.pdfjs, 'src', MediaComponent.PDF_VIEWER.replace(/\?.*/, '?file=&'));
17239
- this.renderer.listen(this.pdfjs, 'load', () => {
17240
- this.pdfjs.contentWindow.PDFViewerApplicationOptions.set('sidebarViewOnLoad', 0);
17241
- this.pdfjs.contentWindow.PDFViewerApplicationOptions.set('viewOnLoad', false);
17242
- this.pdfjs.contentWindow.PDFViewerApplicationOptions.set('locale', ContentPreviewService.mapLang(this.translate.currentLang));
17243
- this.pdfjs.contentWindow.document.webL10n.setLanguage(ContentPreviewService.mapLang(this.translate.currentLang));
17244
- this.pdfjs.contentWindow.PDFViewerApplication._initializeL10n();
17245
- this.pdfjs.contentWindow.PDFViewerApplicationOptions.set('viewerCssTheme', 1);
17246
- this.pdfjs.contentWindow.PDFViewerApplication._forceCssTheme();
17247
- this.pdfjs.contentWindow.PDFViewerApplication.appConfig.viewerContainer
17248
- .addEventListener('dragenter', e => window.document.dispatchEvent(new DragEvent('dragenter', e)));
17249
- this.pdfjs.contentWindow.PDFViewerApplication.appConfig.viewerContainer.addEventListener('drop', e => e.stopPropagation());
17250
- 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
+ }));
17251
17296
  });
17252
17297
  }
17253
- else if (this.pdfjs.contentWindow && this.pdfjs.contentWindow.PDFViewerApplication) {
17254
- this.pdfjs.contentWindow.PDFViewerApplication.pdfSidebar.close();
17255
- this.openPdfViewer(this.latestUri);
17256
- }
17257
17298
  }
17258
17299
  }
17259
- /**
17260
- * Custom search inside PDF.JS based on search term
17261
- * @param term search term
17262
- * @param win iframe window
17263
- */
17264
- searchPDF(term = '', win) {
17265
- var _a, _b;
17266
- // remove all special characters
17267
- term = (term || '').replace(/[\"|\*]/g, '').trim();
17268
- 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)) {
17269
- // win.PDFViewerApplication.findController.executeCommand('find', {
17270
- // caseSensitive: false,
17271
- // findPrevious: undefined,
17272
- // highlightAll: true,
17273
- // phraseSearch: true,
17274
- // query: term
17275
- // });
17276
- win.PDFViewerApplication.appConfig.findBar.findField.value = term;
17277
- win.PDFViewerApplication.appConfig.findBar.highlightAllCheckbox.checked = true;
17278
- 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;
17279
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);
17280
17342
  }
17281
- preventDropEvent(win) {
17282
- var _a, _b, _c, _d;
17283
- if ((_b = (_a = this.iframe) === null || _a === void 0 ? void 0 : _a.src) === null || _b === void 0 ? void 0 : _b.startsWith(window.location.origin)) {
17284
- (_c = win === null || win === void 0 ? void 0 : win.document) === null || _c === void 0 ? void 0 : _c.addEventListener('drop', (e) => e.stopPropagation());
17285
- // dispach drag & drop events to main window
17286
- (_d = win === null || win === void 0 ? void 0 : win.document) === null || _d === void 0 ? void 0 : _d.addEventListener('dragenter', (e) => {
17287
- window.document.dispatchEvent(new DragEvent('dragenter', e));
17288
- 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
+ }
17289
17375
  });
17290
17376
  }
17291
17377
  }
17292
- iframeInit(iframe = this.iframe, onload) {
17293
- if (iframe) {
17294
- iframe._init || fromEvent(iframe, 'load')
17295
- .pipe(takeUntil(this.componentDestroyed$))
17296
- .subscribe(() => {
17297
- const win = this.setApi(iframe);
17298
- onload && onload();
17299
- setTimeout(() => {
17300
- // this.loading = false;
17301
- this.searchPDF(this.searchTerm, win);
17302
- this.preventDropEvent(win);
17303
- }, 100);
17304
- });
17305
- 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');
17306
17401
  }
17402
+ return tooltip;
17307
17403
  }
17308
- setApi(iframe) {
17309
- // set api to iframe window
17310
- const win = (iframe === null || iframe === void 0 ? void 0 : iframe.contentWindow) || iframe;
17311
- win['api'] = window['api'];
17312
- 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
+ });
17313
17426
  }
17314
17427
  ngAfterViewInit() {
17428
+ let panels = this.tabPanels.toArray();
17429
+ this.tabPlugins.forEach(p => panels = panels.concat(p.tabPanels.toArray()));
17430
+ this.externalPanels.reset(panels);
17315
17431
  }
17316
17432
  ngOnDestroy() {
17317
- // return ContentPreviewService.undockWinActive() && this.openWindow('', true);
17433
+ this.uploadRegistry.unregister(this.uploadTarget.id);
17318
17434
  }
17319
17435
  }
17320
- MediaComponent.VIDEO_VIEWER = 'assets/_default/api/video/?path=${path}&mimeType=${mimeType}&fileExtension=${fileExtension}&lang=${lang}&theme=${theme}';
17321
- 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';
17322
- MediaComponent.decorators = [
17436
+ ObjectDetailsComponent.decorators = [
17323
17437
  { type: Component, args: [{
17324
- selector: 'eo-media',
17325
- 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>",
17326
17440
  providers: [ContentPreviewService],
17327
- 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}"]
17328
17442
  },] }
17329
17443
  ];
17330
- MediaComponent.ctorParameters = () => [
17331
- { type: TranslateService },
17332
- { type: DmsService },
17333
- { type: Renderer2 },
17444
+ ObjectDetailsComponent.ctorParameters = () => [
17445
+ { type: Router },
17446
+ { type: ActivatedRoute },
17334
17447
  { type: SystemService },
17335
- { 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 },
17336
17457
  { type: Config },
17337
- { type: PluginsService },
17338
- { type: BackendService }
17458
+ { type: TranslateService }
17339
17459
  ];
17340
- MediaComponent.propDecorators = {
17341
- undockDisabled: [{ type: Input }],
17342
- enableCloseBtn: [{ type: Input }],
17343
- useVersion: [{ type: Input }],
17344
- open: [{ type: HostBinding, args: ['class.open',] }],
17345
- codesystem: [{ type: ViewChild, args: ['codesystem',] }],
17346
- iframe: [{ type: ViewChild, args: ['iframe', { static: true },] }],
17347
- iframeMedia: [{ type: ViewChild, args: ['iframeMedia', { static: true },] }],
17348
- setAttachments: [{ type: Input, args: ['attachments',] }],
17349
- setSearchTerm: [{ type: Input, args: ['searchTerm',] }],
17350
- disabled: [{ type: Input }],
17351
- previewUri: [{ type: Input }],
17352
- previewFile: [{ type: Input }],
17353
- 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',] }]
17354
17480
  };
17355
17481
 
17356
- class MediaModule {
17357
- }
17358
- MediaModule.decorators = [
17359
- { type: NgModule, args: [{
17360
- imports: [
17361
- CommonModule,
17362
- UiModule,
17363
- FormsModule,
17364
- FormElementsModule
17365
- ],
17366
- declarations: [MediaComponent],
17367
- exports: [MediaComponent]
17368
- },] }
17369
- ];
17370
-
17371
17482
  class TabContainerComponent {
17372
17483
  constructor(layout) {
17373
17484
  this.layout = layout;
@@ -18044,7 +18155,7 @@ class FavoriteIconComponent extends UnsubscribeOnDestroy {
18044
18155
  FavoriteIconComponent.decorators = [
18045
18156
  { type: Component, args: [{
18046
18157
  selector: 'eo-favorite-icon',
18047
- 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",
18048
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}"]
18049
18160
  },] }
18050
18161
  ];
@@ -20253,7 +20364,7 @@ class PrepareDetailsComponent extends UnsubscribeOnDestroy {
20253
20364
  PrepareDetailsComponent.decorators = [
20254
20365
  { type: Component, args: [{
20255
20366
  selector: 'eo-prepare-details',
20256
- 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",
20257
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}"]
20258
20369
  },] }
20259
20370
  ];
@@ -22219,10 +22330,10 @@ class AboutStateComponent {
22219
22330
  this.http = http;
22220
22331
  this.userService = userService;
22221
22332
  this.config = config;
22222
- 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-rc.2", "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" }];
22223
22334
  this.ctrl = {
22224
22335
  productName: 'yuuvis® RAD client',
22225
- clientVersion: '8.14.0-rc.2'
22336
+ clientVersion: '8.15.0-rc.1'
22226
22337
  };
22227
22338
  this.licenses = {
22228
22339
  'MIT': {
@@ -22264,6 +22375,7 @@ class AboutStateComponent {
22264
22375
  this.getUserLang();
22265
22376
  this.getDocumentation();
22266
22377
  this.backgroundImage = `url(${this.config.getDashboardBackgroundImage()})`;
22378
+ this.headerLogo = this.config.getRaw("about.headerLogo");
22267
22379
  }
22268
22380
  getDocumentation() {
22269
22381
  const docu = this.config.getRaw('about.docu');
@@ -22282,8 +22394,8 @@ class AboutStateComponent {
22282
22394
  AboutStateComponent.decorators = [
22283
22395
  { type: Component, args: [{
22284
22396
  selector: 'eo-about-state',
22285
- 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",
22286
- 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}"]
22287
22399
  },] }
22288
22400
  ];
22289
22401
  AboutStateComponent.ctorParameters = () => [
@@ -24064,5 +24176,5 @@ EoClientModule.ctorParameters = () => [
24064
24176
  * Generated bundle index. Do not edit.
24065
24177
  */
24066
24178
 
24067
- 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 };
24068
24180
  //# sourceMappingURL=eo-sdk-client.js.map