UNPKG

@alfresco/adf-content-services

Version:
206 lines 55 kB
/*! * @license * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import { Component, DestroyRef, inject, Inject, ViewEncapsulation } from '@angular/core'; import { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog'; import { EmptyListComponent, NotificationService, ToolbarComponent, ToolbarTitleComponent, TranslationService } from '@alfresco/adf-core'; import { AllowableOperationsEnum } from '../common/models/allowable-operations.enum'; import { ContentService } from '../common/services/content.service'; import { UploadService } from '../common/services/upload.service'; import { NodeAction } from '../document-list/models/node-action.enum'; import { OverlayContainer } from '@angular/cdk/overlay'; import { CommonModule } from '@angular/common'; import { MatTabsModule } from '@angular/material/tabs'; import { TranslateModule } from '@ngx-translate/core'; import { DropdownBreadcrumbComponent } from '../breadcrumb/dropdown-breadcrumb.component'; import { NodeCounterDirective } from '../directives/node-counter.directive'; import { MatIconModule } from '@angular/material/icon'; import { UploadDragAreaComponent } from '../upload/components/upload-drag-area.component'; import { FileUploadingDialogComponent } from '../upload/components/file-uploading-dialog.component'; import { ContentNodeSelectorPanelComponent } from './content-node-selector-panel/content-node-selector-panel.component'; import { UploadButtonComponent } from '../upload/components/upload-button.component'; import { MatButtonModule } from '@angular/material/button'; import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import * as i0 from "@angular/core"; import * as i1 from "@alfresco/adf-core"; import * as i2 from "../common/services/content.service"; import * as i3 from "../common/services/upload.service"; import * as i4 from "@angular/material/dialog"; import * as i5 from "@angular/cdk/overlay"; import * as i6 from "@angular/common"; import * as i7 from "@angular/material/tabs"; import * as i8 from "@ngx-translate/core"; import * as i9 from "@angular/material/icon"; import * as i10 from "@angular/material/button"; export class ContentNodeSelectorComponent { constructor(translation, contentService, notificationService, uploadService, dialog, overlayContainer, data) { this.translation = translation; this.contentService = contentService; this.notificationService = notificationService; this.uploadService = uploadService; this.dialog = dialog; this.overlayContainer = overlayContainer; this.data = data; this.showingSearch = false; this.hasAllowableOperations = false; this.isLoading = true; this.selectedTabIndex = 0; this.uploadStarted = false; this.emptyFolderImageUrl = './assets/images/empty_doc_lib.svg'; this.destroyRef = inject(DestroyRef); this.action = data.actionName ?? NodeAction.CHOOSE; this.buttonActionName = `NODE_SELECTOR.${this.action}`; this.title = data.title; this.currentDirectoryId = data.currentFolderId; } ngOnInit() { this.dialog .keydownEvents() .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe((event) => { if (event?.key === 'Escape') { event.preventDefault(); event.stopImmediatePropagation(); this.close(); } }); this.dialog .backdropClick() .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe(() => { this.close(); }); this.dialog .afterOpened() .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe(() => { this.overlayContainer.getContainerElement().setAttribute('role', 'main'); }); this.uploadService.fileUploadStarting.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => { this.uploadStarted = true; }); } close() { this.dialog.close(); this.overlayContainer.getContainerElement().setAttribute('role', 'region'); } onSelect(nodeList) { this.chosenNode = nodeList; } onSiteChange(siteTitle) { this.updateTitle(siteTitle); } onNavigationChange(pathElement) { this.currentDirectoryId = pathElement.value.id; this.isLoading = true; } onClick() { this.data.select.next(this.chosenNode); this.close(); } updateTitle(siteTitle) { if (this.action === NodeAction.CHOOSE && siteTitle) { this.title = this.getTitleTranslation(this.action, siteTitle); } } getTitleTranslation(action, name) { return this.translation.instant(`NODE_SELECTOR.${action}_ITEM`, { name: this.translation.instant(name) }); } getSelectedCount() { return this.chosenNode?.length || 0; } isCounterVisible() { return this.action === NodeAction.ATTACH || this.action === NodeAction.CHOOSE; } isMultipleSelection() { return this.data.selectionMode === 'multiple'; } onError(error) { this.notificationService.showError(error); } isChooseButtonDisabled() { return this.uploadService.isUploading() || !this.hasNodeSelected(); } hasNodeSelected() { return this.chosenNode?.length > 0; } onShowingSearch(value) { this.showingSearch = value; } onCurrentFolder(currentFolder) { this.hasAllowableOperations = this.contentService.hasAllowableOperations(currentFolder, AllowableOperationsEnum.CREATE); this.breadcrumbFolderNode = currentFolder; } isNotAllowedToUpload() { return this.showingSearch || !this.hasAllowableOperations; } onFolderLoaded() { this.isLoading = false; } onTabSelectionChange(tabIndex) { this.selectedTabIndex = tabIndex; } isFileServerTabSelected() { return this.selectedTabIndex === 0; } isLocalUploadTabSelected() { return this.selectedTabIndex === 1; } isUploadEnabled() { return this.canPerformLocalUpload() && this.isLocalUploadTabSelected(); } canPerformLocalUpload() { return this.data?.showLocalUploadButton; } getWarningMessage() { if (this.showingSearch) { return 'NODE_SELECTOR.UPLOAD_BUTTON_SEARCH_WARNING_MESSAGE'; } return this.hasNoPermissionToUpload() ? 'NODE_SELECTOR.UPLOAD_BUTTON_PERMISSION_WARNING_MESSAGE' : ''; } hasNoPermissionToUpload() { return !this.hasAllowableOperations && !this.showingSearch && !this.isLoading; } hasUploadError() { return this.showingSearch || this.hasNoPermissionToUpload(); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: ContentNodeSelectorComponent, deps: [{ token: i1.TranslationService }, { token: i2.ContentService }, { token: i1.NotificationService }, { token: i3.UploadService }, { token: i4.MatDialogRef }, { token: i5.OverlayContainer }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: ContentNodeSelectorComponent, isStandalone: true, selector: "adf-content-node-selector", ngImport: i0, template: "<h1 mat-dialog-title class=\"adf-content-node-selector-dialog-title\" data-automation-id=\"content-node-selector-title\">{{title}}</h1>\n<ng-container *ngIf=\"canPerformLocalUpload(); else contentNodePanel\">\n <mat-tab-group class=\"adf-content-node-selector-dialog-content\"\n mat-align-tabs=\"start\"\n (selectedIndexChange)=\"onTabSelectionChange($event)\">\n <mat-tab label=\"{{ 'NODE_SELECTOR.REPOSITORY' | translate }}\">\n <ng-container *ngTemplateOutlet='contentNodePanel' />\n </mat-tab>\n <mat-tab [disabled]=\"isNotAllowedToUpload()\">\n <div class=\"adf-content-node-selector-local-upload-container\">\n <div class=\"adf-content-node-selector-local-upload-header\">\n <adf-toolbar>\n <adf-toolbar-title>\n <adf-dropdown-breadcrumb\n class=\"adf-content-node-selector-content-breadcrumb\"\n [folderNode]=\"breadcrumbFolderNode\"\n [rootId]=\"data?.currentFolderId\"\n [readOnly]=\"true\"\n data-automation-id=\"content-node-selector-upload-breadcrumb\"\n />\n <ng-container *ngIf=\"isCounterVisible()\" [adf-node-counter]=\"getSelectedCount()\" />\n </adf-toolbar-title>\n </adf-toolbar>\n <ng-template mat-tab-label>\n {{ 'NODE_SELECTOR.UPLOAD_FROM_DEVICE' | translate }}\n <mat-icon *ngIf=\"hasUploadError()\"\n data-automation-id=\"adf-content-node-selector-disabled-tab-info-icon\"\n title=\"{{ getWarningMessage() | translate }}\">info\n </mat-icon>\n </ng-template>\n </div>\n <div class=\"adf-content-node-selector-local-upload-content\">\n <adf-upload-drag-area [rootFolderId]=\"currentDirectoryId\">\n <div [class.adf-upload-dialog-container]=\"uploadStarted\">\n <adf-file-uploading-dialog [alwaysVisible]=\"true\" />\n </div>\n <adf-empty-list data-automation-id=\"adf-empty-list\" *ngIf=\"!uploadStarted\">\n <div class=\"adf-empty-list_template adf-empty-folder\">\n <div class=\"adf-empty-folder-drag-drop\">{{ 'ADF-DATATABLE.EMPTY.DRAG-AND-DROP.TITLE' | translate }}</div>\n <div class=\"adf-empty-folder-any-files-here-to-add\">{{ 'ADF-DATATABLE.EMPTY.DRAG-AND-DROP.SUBTITLE' | translate }}</div>\n <img [alt]=\"'ADF-DATATABLE.EMPTY.DRAG-AND-DROP.TITLE' | translate\" class=\"adf-empty-folder-image\"\n [src]=\"emptyFolderImageUrl\">\n </div>\n </adf-empty-list>\n </adf-upload-drag-area>\n </div>\n </div>\n </mat-tab>\n </mat-tab-group>\n</ng-container>\n\n<ng-template #contentNodePanel>\n <adf-content-node-selector-panel\n [currentFolderId]=\"data?.currentFolderId\"\n [restrictRootToCurrentFolderId]=\"data?.restrictRootToCurrentFolderId\"\n [dropdownHideMyFiles]=\"data?.dropdownHideMyFiles\"\n [dropdownSiteList]=\"data?.dropdownSiteList\"\n [rowFilter]=\"data?.rowFilter\"\n [imageResolver]=\"data?.imageResolver\"\n [isSelectionValid]=\"data?.isSelectionValid\"\n [breadcrumbTransform]=\"data?.breadcrumbTransform\"\n [excludeSiteContent]=\"data?.excludeSiteContent\"\n [selectionMode]=\"data?.selectionMode\"\n [where]=\"data?.where\"\n [showSearch]=\"data?.showSearch\"\n [showDropdownSiteList]=\"data?.showDropdownSiteList\"\n [showFilesInResult]=\"data?.showFilesInResult\"\n [showNodeCounter]=\"isCounterVisible()\"\n (currentFolder)=\"onCurrentFolder($event)\"\n (folderLoaded)=\"onFolderLoaded()\"\n (select)=\"onSelect($event)\"\n (showingSearch)=\"onShowingSearch($event)\"\n (siteChange)=\"onSiteChange($event)\"\n (navigationChange)=\"onNavigationChange($event)\" />\n</ng-template>\n\n\n<mat-dialog-actions class=\"adf-content-node-selector-dialog-actions\">\n <div>\n <ng-container *ngIf=\"isUploadEnabled()\">\n <adf-upload-button\n [staticTitle]=\"'FORM.FIELD.UPLOAD' | translate \"\n [multipleFiles]=\"isMultipleSelection()\"\n [rootFolderId]=\"currentDirectoryId\"\n [disabled]=\"isNotAllowedToUpload()\"\n (error)=\"onError($event)\" />\n </ng-container>\n </div>\n <div>\n <button\n mat-button\n (click)=\"close()\"\n data-automation-id=\"content-node-selector-actions-cancel\">{{ 'NODE_SELECTOR.CANCEL' | translate }}\n </button>\n\n <button mat-button\n [disabled]=\"isChooseButtonDisabled()\"\n class=\"adf-choose-action\"\n (click)=\"onClick()\"\n data-automation-id=\"content-node-selector-actions-choose\">{{ buttonActionName | translate }}\n </button>\n </div>\n</mat-dialog-actions>\n", styles: ["adf-content-node-selector .adf-upload-dialog{box-shadow:none;height:100%;width:100%;position:unset;bottom:unset}adf-content-node-selector .adf-upload-dialog__content{max-height:64%}adf-content-node-selector .adf-upload-dialog-container{height:380px}adf-content-node-selector .adf-toolbar-title{place-items:center}adf-content-node-selector .adf-content-node-selector-local-upload-content{height:50vh}adf-content-node-selector .adf-content-node-selector-local-upload-content adf-upload-drag-area adf-empty-list .adf-empty-folder-drag-drop{min-height:46px;font-size:40px}adf-content-node-selector .adf-content-node-selector-local-upload-content adf-upload-drag-area adf-empty-list .adf-empty-folder-image{height:100px;width:460px}.adf-content-node-selector-dialog .mat-mdc-form-field{width:100%}.adf-content-node-selector-dialog .adf-dropdown-breadcrumb-icon{color:var(--adf-theme-foreground-base-color-045)}.adf-content-node-selector-dialog .mdc-dialog__title{margin-bottom:0;padding:0}.adf-content-node-selector-dialog .mdc-dialog__title:before{display:none}.adf-content-node-selector-dialog .adf-content-node-selector-dialog-title{font-size:var(--theme-title-font-size);font-weight:600;font-style:normal;font-stretch:normal;line-height:1.6;letter-spacing:-.5px;color:var(--adf-theme-foreground-text-color-087);margin-bottom:20px}.adf-content-node-selector-dialog .adf-content-node-selector-dialog-title h2{margin:unset;font-size:unset}.adf-content-node-selector-dialog .adf-content-node-selector-dialog-actions{padding:8px;height:77px;background-color:var(--theme-background-color);display:flex;flex-direction:row;justify-content:space-between;color:var(--adf-theme-foreground-text-color)}.adf-content-node-selector-dialog .adf-content-node-selector-dialog-actions label{text-transform:uppercase;font-weight:400}.adf-content-node-selector-dialog .adf-content-node-selector-dialog-actions .adf-choose-action[disabled]{color:var(--adf-theme-foreground-secondary-text-color)}.adf-content-node-selector-dialog .adf-content-node-selector-dialog-actions .adf-choose-action:enabled{color:var(--theme-primary-color)}@media screen and (width <= 768px){.adf-content-node-selector-dialog{height:100vh}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i4.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i4.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "ngmodule", type: MatTabsModule }, { kind: "directive", type: i7.MatTabLabel, selector: "[mat-tab-label], [matTabLabel]" }, { kind: "component", type: i7.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { kind: "component", type: i7.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }, { kind: "component", type: ToolbarTitleComponent, selector: "adf-toolbar-title" }, { kind: "component", type: ToolbarComponent, selector: "adf-toolbar", inputs: ["title", "color"] }, { kind: "component", type: DropdownBreadcrumbComponent, selector: "adf-dropdown-breadcrumb" }, { kind: "directive", type: NodeCounterDirective, selector: "[adf-node-counter]", inputs: ["adf-node-counter"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: UploadDragAreaComponent, selector: "adf-upload-drag-area" }, { kind: "component", type: FileUploadingDialogComponent, selector: "adf-file-uploading-dialog", inputs: ["position", "alwaysVisible"], outputs: ["error"] }, { kind: "component", type: EmptyListComponent, selector: "adf-empty-list" }, { kind: "component", type: ContentNodeSelectorPanelComponent, selector: "adf-content-node-selector-panel", inputs: ["restrictRootToCurrentFolderId", "currentFolderId", "dropdownHideMyFiles", "dropdownSiteList", "where", "rowFilter", "excludeSiteContent", "imageResolver", "pageSize", "selectionMode", "isSelectionValid", "breadcrumbTransform", "showSearch", "showDropdownSiteList", "showFilesInResult", "showNodeCounter"], outputs: ["select", "navigationChange", "siteChange", "showingSearch", "currentFolder", "folderLoaded"] }, { kind: "component", type: UploadButtonComponent, selector: "adf-upload-button", inputs: ["uploadFolders", "multipleFiles", "staticTitle", "tooltip", "file"], outputs: ["permissionEvent"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i10.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }], encapsulation: i0.ViewEncapsulation.None }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: ContentNodeSelectorComponent, decorators: [{ type: Component, args: [{ selector: 'adf-content-node-selector', standalone: true, imports: [ CommonModule, MatDialogModule, MatTabsModule, TranslateModule, ToolbarTitleComponent, ToolbarComponent, DropdownBreadcrumbComponent, NodeCounterDirective, MatIconModule, UploadDragAreaComponent, FileUploadingDialogComponent, EmptyListComponent, ContentNodeSelectorPanelComponent, UploadButtonComponent, MatButtonModule ], encapsulation: ViewEncapsulation.None, template: "<h1 mat-dialog-title class=\"adf-content-node-selector-dialog-title\" data-automation-id=\"content-node-selector-title\">{{title}}</h1>\n<ng-container *ngIf=\"canPerformLocalUpload(); else contentNodePanel\">\n <mat-tab-group class=\"adf-content-node-selector-dialog-content\"\n mat-align-tabs=\"start\"\n (selectedIndexChange)=\"onTabSelectionChange($event)\">\n <mat-tab label=\"{{ 'NODE_SELECTOR.REPOSITORY' | translate }}\">\n <ng-container *ngTemplateOutlet='contentNodePanel' />\n </mat-tab>\n <mat-tab [disabled]=\"isNotAllowedToUpload()\">\n <div class=\"adf-content-node-selector-local-upload-container\">\n <div class=\"adf-content-node-selector-local-upload-header\">\n <adf-toolbar>\n <adf-toolbar-title>\n <adf-dropdown-breadcrumb\n class=\"adf-content-node-selector-content-breadcrumb\"\n [folderNode]=\"breadcrumbFolderNode\"\n [rootId]=\"data?.currentFolderId\"\n [readOnly]=\"true\"\n data-automation-id=\"content-node-selector-upload-breadcrumb\"\n />\n <ng-container *ngIf=\"isCounterVisible()\" [adf-node-counter]=\"getSelectedCount()\" />\n </adf-toolbar-title>\n </adf-toolbar>\n <ng-template mat-tab-label>\n {{ 'NODE_SELECTOR.UPLOAD_FROM_DEVICE' | translate }}\n <mat-icon *ngIf=\"hasUploadError()\"\n data-automation-id=\"adf-content-node-selector-disabled-tab-info-icon\"\n title=\"{{ getWarningMessage() | translate }}\">info\n </mat-icon>\n </ng-template>\n </div>\n <div class=\"adf-content-node-selector-local-upload-content\">\n <adf-upload-drag-area [rootFolderId]=\"currentDirectoryId\">\n <div [class.adf-upload-dialog-container]=\"uploadStarted\">\n <adf-file-uploading-dialog [alwaysVisible]=\"true\" />\n </div>\n <adf-empty-list data-automation-id=\"adf-empty-list\" *ngIf=\"!uploadStarted\">\n <div class=\"adf-empty-list_template adf-empty-folder\">\n <div class=\"adf-empty-folder-drag-drop\">{{ 'ADF-DATATABLE.EMPTY.DRAG-AND-DROP.TITLE' | translate }}</div>\n <div class=\"adf-empty-folder-any-files-here-to-add\">{{ 'ADF-DATATABLE.EMPTY.DRAG-AND-DROP.SUBTITLE' | translate }}</div>\n <img [alt]=\"'ADF-DATATABLE.EMPTY.DRAG-AND-DROP.TITLE' | translate\" class=\"adf-empty-folder-image\"\n [src]=\"emptyFolderImageUrl\">\n </div>\n </adf-empty-list>\n </adf-upload-drag-area>\n </div>\n </div>\n </mat-tab>\n </mat-tab-group>\n</ng-container>\n\n<ng-template #contentNodePanel>\n <adf-content-node-selector-panel\n [currentFolderId]=\"data?.currentFolderId\"\n [restrictRootToCurrentFolderId]=\"data?.restrictRootToCurrentFolderId\"\n [dropdownHideMyFiles]=\"data?.dropdownHideMyFiles\"\n [dropdownSiteList]=\"data?.dropdownSiteList\"\n [rowFilter]=\"data?.rowFilter\"\n [imageResolver]=\"data?.imageResolver\"\n [isSelectionValid]=\"data?.isSelectionValid\"\n [breadcrumbTransform]=\"data?.breadcrumbTransform\"\n [excludeSiteContent]=\"data?.excludeSiteContent\"\n [selectionMode]=\"data?.selectionMode\"\n [where]=\"data?.where\"\n [showSearch]=\"data?.showSearch\"\n [showDropdownSiteList]=\"data?.showDropdownSiteList\"\n [showFilesInResult]=\"data?.showFilesInResult\"\n [showNodeCounter]=\"isCounterVisible()\"\n (currentFolder)=\"onCurrentFolder($event)\"\n (folderLoaded)=\"onFolderLoaded()\"\n (select)=\"onSelect($event)\"\n (showingSearch)=\"onShowingSearch($event)\"\n (siteChange)=\"onSiteChange($event)\"\n (navigationChange)=\"onNavigationChange($event)\" />\n</ng-template>\n\n\n<mat-dialog-actions class=\"adf-content-node-selector-dialog-actions\">\n <div>\n <ng-container *ngIf=\"isUploadEnabled()\">\n <adf-upload-button\n [staticTitle]=\"'FORM.FIELD.UPLOAD' | translate \"\n [multipleFiles]=\"isMultipleSelection()\"\n [rootFolderId]=\"currentDirectoryId\"\n [disabled]=\"isNotAllowedToUpload()\"\n (error)=\"onError($event)\" />\n </ng-container>\n </div>\n <div>\n <button\n mat-button\n (click)=\"close()\"\n data-automation-id=\"content-node-selector-actions-cancel\">{{ 'NODE_SELECTOR.CANCEL' | translate }}\n </button>\n\n <button mat-button\n [disabled]=\"isChooseButtonDisabled()\"\n class=\"adf-choose-action\"\n (click)=\"onClick()\"\n data-automation-id=\"content-node-selector-actions-choose\">{{ buttonActionName | translate }}\n </button>\n </div>\n</mat-dialog-actions>\n", styles: ["adf-content-node-selector .adf-upload-dialog{box-shadow:none;height:100%;width:100%;position:unset;bottom:unset}adf-content-node-selector .adf-upload-dialog__content{max-height:64%}adf-content-node-selector .adf-upload-dialog-container{height:380px}adf-content-node-selector .adf-toolbar-title{place-items:center}adf-content-node-selector .adf-content-node-selector-local-upload-content{height:50vh}adf-content-node-selector .adf-content-node-selector-local-upload-content adf-upload-drag-area adf-empty-list .adf-empty-folder-drag-drop{min-height:46px;font-size:40px}adf-content-node-selector .adf-content-node-selector-local-upload-content adf-upload-drag-area adf-empty-list .adf-empty-folder-image{height:100px;width:460px}.adf-content-node-selector-dialog .mat-mdc-form-field{width:100%}.adf-content-node-selector-dialog .adf-dropdown-breadcrumb-icon{color:var(--adf-theme-foreground-base-color-045)}.adf-content-node-selector-dialog .mdc-dialog__title{margin-bottom:0;padding:0}.adf-content-node-selector-dialog .mdc-dialog__title:before{display:none}.adf-content-node-selector-dialog .adf-content-node-selector-dialog-title{font-size:var(--theme-title-font-size);font-weight:600;font-style:normal;font-stretch:normal;line-height:1.6;letter-spacing:-.5px;color:var(--adf-theme-foreground-text-color-087);margin-bottom:20px}.adf-content-node-selector-dialog .adf-content-node-selector-dialog-title h2{margin:unset;font-size:unset}.adf-content-node-selector-dialog .adf-content-node-selector-dialog-actions{padding:8px;height:77px;background-color:var(--theme-background-color);display:flex;flex-direction:row;justify-content:space-between;color:var(--adf-theme-foreground-text-color)}.adf-content-node-selector-dialog .adf-content-node-selector-dialog-actions label{text-transform:uppercase;font-weight:400}.adf-content-node-selector-dialog .adf-content-node-selector-dialog-actions .adf-choose-action[disabled]{color:var(--adf-theme-foreground-secondary-text-color)}.adf-content-node-selector-dialog .adf-content-node-selector-dialog-actions .adf-choose-action:enabled{color:var(--theme-primary-color)}@media screen and (width <= 768px){.adf-content-node-selector-dialog{height:100vh}}\n"] }] }], ctorParameters: () => [{ type: i1.TranslationService }, { type: i2.ContentService }, { type: i1.NotificationService }, { type: i3.UploadService }, { type: i4.MatDialogRef }, { type: i5.OverlayContainer }, { type: undefined, decorators: [{ type: Inject, args: [MAT_DIALOG_DATA] }] }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1ub2RlLXNlbGVjdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb250ZW50LXNlcnZpY2VzL3NyYy9saWIvY29udGVudC1ub2RlLXNlbGVjdG9yL2NvbnRlbnQtbm9kZS1zZWxlY3Rvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWIvY29udGVudC1zZXJ2aWNlcy9zcmMvbGliL2NvbnRlbnQtbm9kZS1zZWxlY3Rvci9jb250ZW50LW5vZGUtc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBVSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRyxPQUFPLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRixPQUFPLEVBQ0gsa0JBQWtCLEVBQ2xCLG1CQUFtQixFQUNuQixnQkFBZ0IsRUFDaEIscUJBQXFCLEVBQ3JCLGtCQUFrQixFQUNyQixNQUFNLG9CQUFvQixDQUFDO0FBRTVCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFHbEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQs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QUFPLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7SUFDaEUsQ0FBQzs4R0ExS1EsNEJBQTRCLDhNQXlCekIsZUFBZTtrR0F6QmxCLDRCQUE0QixxRkN2RXpDLHMyS0F1R0EsMHNFRHBEUSxZQUFZLHlTQUNaLGVBQWUsNlRBQ2YsYUFBYSxvc0JBQ2IsZUFBZSw0RkFDZixxQkFBcUIsOERBQ3JCLGdCQUFnQixvRkFDaEIsMkJBQTJCLG9FQUMzQixvQkFBb0IsNEZBQ3BCLGFBQWEsb0xBQ2IsdUJBQXVCLGlFQUN2Qiw0QkFBNEIsaUlBQzVCLGtCQUFrQiwyREFDbEIsaUNBQWlDLGlmQUNqQyxxQkFBcUIseUtBQ3JCLGVBQWU7OzJGQU1WLDRCQUE0QjtrQkF4QnhDLFNBQVM7K0JBQ0ksMkJBQTJCLGNBQ3pCLElBQUksV0FDUDt3QkFDTCxZQUFZO3dCQUNaLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixlQUFlO3dCQUNmLHFCQUFxQjt3QkFDckIsZ0JBQWdCO3dCQUNoQiwyQkFBMkI7d0JBQzNCLG9CQUFvQjt3QkFDcEIsYUFBYTt3QkFDYix1QkFBdUI7d0JBQ3ZCLDRCQUE0Qjt3QkFDNUIsa0JBQWtCO3dCQUNsQixpQ0FBaUM7d0JBQ2pDLHFCQUFxQjt3QkFDckIsZUFBZTtxQkFDbEIsaUJBR2MsaUJBQWlCLENBQUMsSUFBSTs7MEJBMkJoQyxNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI1IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IENvbXBvbmVudCwgRGVzdHJveVJlZiwgaW5qZWN0LCBJbmplY3QsIE9uSW5pdCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nTW9kdWxlLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHtcbiAgICBFbXB0eUxpc3RDb21wb25lbnQsXG4gICAgTm90aWZpY2F0aW9uU2VydmljZSxcbiAgICBUb29sYmFyQ29tcG9uZW50LFxuICAgIFRvb2xiYXJUaXRsZUNvbXBvbmVudCxcbiAgICBUcmFuc2xhdGlvblNlcnZpY2Vcbn0gZnJvbSAnQGFsZnJlc2NvL2FkZi1jb3JlJztcbmltcG9ydCB7IE5vZGUgfSBmcm9tICdAYWxmcmVzY28vanMtYXBpJztcbmltcG9ydCB7IEFsbG93YWJsZU9wZXJhdGlvbnNFbnVtIH0gZnJvbSAnLi4vY29tbW9uL21vZGVscy9hbGxvd2FibGUtb3BlcmF0aW9ucy5lbnVtJztcbmltcG9ydCB7IENvbnRlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uL3NlcnZpY2VzL2NvbnRlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBVcGxvYWRTZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uL3NlcnZpY2VzL3VwbG9hZC5zZXJ2aWNlJztcbmltcG9ydCB7IENvbnRlbnROb2RlU2VsZWN0b3JDb21wb25lbnREYXRhIH0gZnJvbSAnLi9jb250ZW50LW5vZGUtc2VsZWN0b3IuY29tcG9uZW50LWRhdGEuaW50ZXJmYWNlJztcbmltcG9ydCB7IE5vZGVFbnRyeUV2ZW50IH0gZnJvbSAnLi4vZG9jdW1lbnQtbGlzdC9jb21wb25lbnRzL25vZGUuZXZlbnQnO1xuaW1wb3J0IHsgTm9kZUFjdGlvbiB9IGZyb20gJy4uL2RvY3VtZW50LWxpc3QvbW9kZWxzL25vZGUtYWN0aW9uLmVudW0nO1xuaW1wb3J0IHsgT3ZlcmxheUNvbnRhaW5lciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNYXRUYWJzTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFicyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IERyb3Bkb3duQnJlYWRjcnVtYkNvbXBvbmVudCB9IGZyb20gJy4uL2JyZWFkY3J1bWIvZHJvcGRvd24tYnJlYWRjcnVtYi5jb21wb25lbnQnO1xuaW1wb3J0IHsgTm9kZUNvdW50ZXJEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL25vZGUtY291bnRlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgVXBsb2FkRHJhZ0FyZWFDb21wb25lbnQgfSBmcm9tICcuLi91cGxvYWQvY29tcG9uZW50cy91cGxvYWQtZHJhZy1hcmVhLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGaWxlVXBsb2FkaW5nRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vdXBsb2FkL2NvbXBvbmVudHMvZmlsZS11cGxvYWRpbmctZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb250ZW50Tm9kZVNlbGVjdG9yUGFuZWxDb21wb25lbnQgfSBmcm9tICcuL2NvbnRlbnQtbm9kZS1zZWxlY3Rvci1wYW5lbC9jb250ZW50LW5vZGUtc2VsZWN0b3ItcGFuZWwuY29tcG9uZW50JztcbmltcG9ydCB7IFVwbG9hZEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uL3VwbG9hZC9jb21wb25lbnRzL3VwbG9hZC1idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYWRmLWNvbnRlbnQtbm9kZS1zZWxlY3RvcicsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgTWF0RGlhbG9nTW9kdWxlLFxuICAgICAgICBNYXRUYWJzTW9kdWxlLFxuICAgICAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgICAgIFRvb2xiYXJUaXRsZUNvbXBvbmVudCxcbiAgICAgICAgVG9vbGJhckNvbXBvbmVudCxcbiAgICAgICAgRHJvcGRvd25CcmVhZGNydW1iQ29tcG9uZW50LFxuICAgICAgICBOb2RlQ291bnRlckRpcmVjdGl2ZSxcbiAgICAgICAgTWF0SWNvbk1vZHVsZSxcbiAgICAgICAgVXBsb2FkRHJhZ0FyZWFDb21wb25lbnQsXG4gICAgICAgIEZpbGVVcGxvYWRpbmdEaWFsb2dDb21wb25lbnQsXG4gICAgICAgIEVtcHR5TGlzdENvbXBvbmVudCxcbiAgICAgICAgQ29udGVudE5vZGVTZWxlY3RvclBhbmVsQ29tcG9uZW50LFxuICAgICAgICBVcGxvYWRCdXR0b25Db21wb25lbnQsXG4gICAgICAgIE1hdEJ1dHRvbk1vZHVsZVxuICAgIF0sXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NvbnRlbnQtbm9kZS1zZWxlY3Rvci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vY29udGVudC1ub2RlLXNlbGVjdG9yLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBDb250ZW50Tm9kZVNlbGVjdG9yQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgYWN0aW9uOiBOb2RlQWN0aW9uO1xuICAgIGJ1dHRvbkFjdGlvbk5hbWU6IHN0cmluZztcbiAgICBjaG9zZW5Ob2RlOiBOb2RlW107XG4gICAgY3VycmVudERpcmVjdG9yeUlkOiBzdHJpbmc7XG4gICAgc2hvd2luZ1NlYXJjaCA9IGZhbHNlO1xuICAgIGhhc0FsbG93YWJsZU9wZXJhdGlvbnMgPSBmYWxzZTtcbiAgICBpc0xvYWRpbmcgPSB0cnVlO1xuICAgIHNlbGVjdGVkVGFiSW5kZXg6IG51bWJlciA9IDA7XG4gICAgdXBsb2FkU3RhcnRlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgZW1wdHlGb2xkZXJJbWFnZVVybDogc3RyaW5nID0gJy4vYXNzZXRzL2ltYWdlcy9lbXB0eV9kb2NfbGliLnN2Zyc7XG4gICAgYnJlYWRjcnVtYkZvbGRlck5vZGU6IE5vZGU7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGlvbjogVHJhbnNsYXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNvbnRlbnRTZXJ2aWNlOiBDb250ZW50U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHVwbG9hZFNlcnZpY2U6IFVwbG9hZFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2dSZWY8Q29udGVudE5vZGVTZWxlY3RvckNvbXBvbmVudD4sXG4gICAgICAgIHByaXZhdGUgb3ZlcmxheUNvbnRhaW5lcjogT3ZlcmxheUNvbnRhaW5lcixcbiAgICAgICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBDb250ZW50Tm9kZVNlbGVjdG9yQ29tcG9uZW50RGF0YVxuICAgICkge1xuICAgICAgICB0aGlzLmFjdGlvbiA9IGRhdGEuYWN0aW9uTmFtZSA/PyBOb2RlQWN0aW9uLkNIT09TRTtcbiAgICAgICAgdGhpcy5idXR0b25BY3Rpb25OYW1lID0gYE5PREVfU0VMRUNUT1IuJHt0aGlzLmFjdGlvbn1gO1xuICAgICAgICB0aGlzLnRpdGxlID0gZGF0YS50aXRsZTtcbiAgICAgICAgdGhpcy5jdXJyZW50RGlyZWN0b3J5SWQgPSBkYXRhLmN1cnJlbnRGb2xkZXJJZDtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5kaWFsb2dcbiAgICAgICAgICAgIC5rZXlkb3duRXZlbnRzKClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQ/LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmRpYWxvZ1xuICAgICAgICAgICAgLmJhY2tkcm9wQ2xpY2soKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmRpYWxvZ1xuICAgICAgICAgICAgLmFmdGVyT3BlbmVkKClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vdmVybGF5Q29udGFpbmVyLmdldENvbnRhaW5lckVsZW1lbnQoKS5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnbWFpbicpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy51cGxvYWRTZXJ2aWNlLmZpbGVVcGxvYWRTdGFydGluZy5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGxvYWRTdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNsb3NlKCkge1xuICAgICAgICB0aGlzLmRpYWxvZy5jbG9zZSgpO1xuICAgICAgICB0aGlzLm92ZXJsYXlDb250YWluZXIuZ2V0Q29udGFpbmVyRWxlbWVudCgpLnNldEF0dHJpYnV0ZSgncm9sZScsICdyZWdpb24nKTtcbiAgICB9XG5cbiAgICBvblNlbGVjdChub2RlTGlzdDogTm9kZVtdKSB7XG4gICAgICAgIHRoaXMuY2hvc2VuTm9kZSA9IG5vZGVMaXN0O1xuICAgIH1cblxuICAgIG9uU2l0ZUNoYW5nZShzaXRlVGl0bGU6IHN0cmluZykge1xuICAgICAgICB0aGlzLnVwZGF0ZVRpdGxlKHNpdGVUaXRsZSk7XG4gICAgfVxuXG4gICAgb25OYXZpZ2F0aW9uQ2hhbmdlKHBhdGhFbGVtZW50OiBOb2RlRW50cnlFdmVudCkge1xuICAgICAgICB0aGlzLmN1cnJlbnREaXJlY3RvcnlJZCA9IHBhdGhFbGVtZW50LnZhbHVlLmlkO1xuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgfVxuXG4gICAgb25DbGljaygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kYXRhLnNlbGVjdC5uZXh0KHRoaXMuY2hvc2VuTm9kZSk7XG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9XG5cbiAgICB1cGRhdGVUaXRsZShzaXRlVGl0bGU6IHN0cmluZykge1xuICAgICAgICBpZiAodGhpcy5hY3Rpb24gPT09IE5vZGVBY3Rpb24uQ0hPT1NFICYmIHNpdGVUaXRsZSkge1xuICAgICAgICAgICAgdGhpcy50aXRsZSA9IHRoaXMuZ2V0VGl0bGVUcmFuc2xhdGlvbih0aGlzLmFjdGlvbiwgc2l0ZVRpdGxlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFRpdGxlVHJhbnNsYXRpb24oYWN0aW9uOiBOb2RlQWN0aW9uLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGlvbi5pbnN0YW50KGBOT0RFX1NFTEVDVE9SLiR7YWN0aW9ufV9JVEVNYCwgeyBuYW1lOiB0aGlzLnRyYW5zbGF0aW9uLmluc3RhbnQobmFtZSkgfSk7XG4gICAgfVxuXG4gICAgZ2V0U2VsZWN0ZWRDb3VudCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jaG9zZW5Ob2RlPy5sZW5ndGggfHwgMDtcbiAgICB9XG5cbiAgICBpc0NvdW50ZXJWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hY3Rpb24gPT09IE5vZGVBY3Rpb24uQVRUQUNIIHx8IHRoaXMuYWN0aW9uID09PSBOb2RlQWN0aW9uLkNIT09TRTtcbiAgICB9XG5cbiAgICBpc011bHRpcGxlU2VsZWN0aW9uKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLnNlbGVjdGlvbk1vZGUgPT09ICdtdWx0aXBsZSc7XG4gICAgfVxuXG4gICAgb25FcnJvcihlcnJvcikge1xuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc2hvd0Vycm9yKGVycm9yKTtcbiAgICB9XG5cbiAgICBpc0Nob29zZUJ1dHRvbkRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy51cGxvYWRTZXJ2aWNlLmlzVXBsb2FkaW5nKCkgfHwgIXRoaXMuaGFzTm9kZVNlbGVjdGVkKCk7XG4gICAgfVxuXG4gICAgaGFzTm9kZVNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jaG9zZW5Ob2RlPy5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIG9uU2hvd2luZ1NlYXJjaCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnNob3dpbmdTZWFyY2ggPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBvbkN1cnJlbnRGb2xkZXIoY3VycmVudEZvbGRlcjogTm9kZSkge1xuICAgICAgICB0aGlzLmhhc0FsbG93YWJsZU9wZXJhdGlvbnMgPSB0aGlzLmNvbnRlbnRTZXJ2aWNlLmhhc0FsbG93YWJsZU9wZXJhdGlvbnMoY3VycmVudEZvbGRlciwgQWxsb3dhYmxlT3BlcmF0aW9uc0VudW0uQ1JFQVRFKTtcbiAgICAgICAgdGhpcy5icmVhZGNydW1iRm9sZGVyTm9kZSA9IGN1cnJlbnRGb2xkZXI7XG4gICAgfVxuXG4gICAgaXNOb3RBbGxvd2VkVG9VcGxvYWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNob3dpbmdTZWFyY2ggfHwgIXRoaXMuaGFzQWxsb3dhYmxlT3BlcmF0aW9ucztcbiAgICB9XG5cbiAgICBvbkZvbGRlckxvYWRlZCgpIHtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBvblRhYlNlbGVjdGlvbkNoYW5nZSh0YWJJbmRleDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IHRhYkluZGV4O1xuICAgIH1cblxuICAgIGlzRmlsZVNlcnZlclRhYlNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFRhYkluZGV4ID09PSAwO1xuICAgIH1cblxuICAgIGlzTG9jYWxVcGxvYWRUYWJTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9PT0gMTtcbiAgICB9XG5cbiAgICBpc1VwbG9hZEVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhblBlcmZvcm1Mb2NhbFVwbG9hZCgpICYmIHRoaXMuaXNMb2NhbFVwbG9hZFRhYlNlbGVjdGVkKCk7XG4gICAgfVxuXG4gICAgY2FuUGVyZm9ybUxvY2FsVXBsb2FkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhPy5zaG93TG9jYWxVcGxvYWRCdXR0b247XG4gICAgfVxuXG4gICAgZ2V0V2FybmluZ01lc3NhZ2UoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvd2luZ1NlYXJjaCkge1xuICAgICAgICAgICAgcmV0dXJuICdOT0RFX1NFTEVDVE9SLlVQTE9BRF9CVVRUT05fU0VBUkNIX1dBUk5JTkdfTUVTU0FHRSc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzTm9QZXJtaXNzaW9uVG9VcGxvYWQoKSA/ICdOT0RFX1NFTEVDVE9SLlVQTE9BRF9CVVRUT05fUEVSTUlTU0lPTl9XQVJOSU5HX01FU1NBR0UnIDogJyc7XG4gICAgfVxuXG4gICAgaGFzTm9QZXJtaXNzaW9uVG9VcGxvYWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5oYXNBbGxvd2FibGVPcGVyYXRpb25zICYmICF0aGlzLnNob3dpbmdTZWFyY2ggJiYgIXRoaXMuaXNMb2FkaW5nO1xuICAgIH1cblxuICAgIGhhc1VwbG9hZEVycm9yKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zaG93aW5nU2VhcmNoIHx8IHRoaXMuaGFzTm9QZXJtaXNzaW9uVG9VcGxvYWQoKTtcbiAgICB9XG59XG4iLCI8aDEgbWF0LWRpYWxvZy10aXRsZSBjbGFzcz1cImFkZi1jb250ZW50LW5vZGUtc2VsZWN0b3ItZGlhbG9nLXRpdGxlXCIgZGF0YS1hdXRvbWF0aW9uLWlkPVwiY29udGVudC1ub2RlLXNlbGVjdG9yLXRpdGxlXCI+e3t0aXRsZX19PC9oMT5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJjYW5QZXJmb3JtTG9jYWxVcGxvYWQoKTsgZWxzZSBjb250ZW50Tm9kZVBhbmVsXCI+XG4gICAgPG1hdC10YWItZ3JvdXAgY2xhc3M9XCJhZGYtY29udGVudC1ub2RlLXNlbGVjdG9yLWRpYWxvZy1jb250ZW50XCJcbiAgICAgICAgICAgICAgICAgICBtYXQtYWxpZ24tdGFicz1cInN0YXJ0XCJcbiAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWRJbmRleENoYW5nZSk9XCJvblRhYlNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCI+XG4gICAgICAgIDxtYXQtdGFiIGxhYmVsPVwie3sgJ05PREVfU0VMRUNUT1IuUkVQT1NJVE9SWScgfCB0cmFuc2xhdGUgfX1cIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9J2NvbnRlbnROb2RlUGFuZWwnIC8+XG4gICAgICAgIDwvbWF0LXRhYj5cbiAgICAgICAgPG1hdC10YWIgW2Rpc2FibGVkXT1cImlzTm90QWxsb3dlZFRvVXBsb2FkKClcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtY29udGVudC1ub2RlLXNlbGVjdG9yLWxvY2FsLXVwbG9hZC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLWNvbnRlbnQtbm9kZS1zZWxlY3Rvci1sb2NhbC11cGxvYWQtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhZGYtdG9vbGJhcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhZGYtdG9vbGJhci10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YWRmLWRyb3Bkb3duLWJyZWFkY3J1bWJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLWNvbnRlbnQtbm9kZS1zZWxlY3Rvci1jb250ZW50LWJyZWFkY3J1bWJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZvbGRlck5vZGVdPVwiYnJlYWRjcnVtYkZvbGRlck5vZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvb3RJZF09XCJkYXRhPy5jdXJyZW50Rm9sZGVySWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRPbmx5XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1hdXRvbWF0aW9uLWlkPVwiY29udGVudC1ub2RlLXNlbGVjdG9yLXVwbG9hZC1icmVhZGNydW1iXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0NvdW50ZXJWaXNpYmxlKClcIiBbYWRmLW5vZGUtY291bnRlcl09XCJnZXRTZWxlY3RlZENvdW50KClcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hZGYtdG9vbGJhci10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgPC9hZGYtdG9vbGJhcj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdC10YWItbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAnTk9ERV9TRUxFQ1RPUi5VUExPQURfRlJPTV9ERVZJQ0UnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJoYXNVcGxvYWRFcnJvcigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWF1dG9tYXRpb24taWQ9XCJhZGYtY2