barsa-sap-ui 0.0.5 → 0.0.7
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.
- package/esm2020/lib/apply-conditional-formmatings.directive.mjs +1 -1
- package/esm2020/lib/barsa-asp-viewer/barsa-asp-viewer.component.mjs +2 -2
- package/esm2020/lib/barsa-date-time-picker/barsa-date-time-picker.component.mjs +1 -1
- package/esm2020/lib/barsa-list-file-linear/barsa-list-file-linear.component.mjs +4 -4
- package/esm2020/lib/barsa-monaco-editor/barsa-monaco-editor.component.mjs +14 -14
- package/esm2020/lib/barsa-network-offline/barsa-network-offline.component.mjs +20 -12
- package/esm2020/lib/barsa-sap-ui-routing.module.mjs +1 -1
- package/esm2020/lib/barsa-sap-ui.module.mjs +25 -16
- package/esm2020/lib/barsa-search-form/barsa-search-form.component.mjs +3 -3
- package/esm2020/lib/barsa-table-header/barsa-table-header.component.mjs +4 -4
- package/esm2020/lib/barsa-table-row/barsa-table-row.component.mjs +3 -3
- package/esm2020/lib/barsa-tinyemce/barsa-tinyemce.component.mjs +6 -6
- package/esm2020/lib/barsa-tree-item/barsa-tree-item.component.mjs +23 -12
- package/esm2020/lib/barsa-ulv-main/barsa-ulv-main.component.mjs +8 -7
- package/esm2020/lib/blob-viewer/blob-viewer.component.mjs +60 -0
- package/esm2020/lib/breadcrumb/breadcrumb.component.mjs +3 -3
- package/esm2020/lib/captcha-field/captcha-field.component.mjs +1 -1
- package/esm2020/lib/card-item/card-item.component.mjs +4 -4
- package/esm2020/lib/card-view-content/card-view-content.component.mjs +3 -3
- package/esm2020/lib/column-matrix-renderer/column-matrix-renderer.component.mjs +3 -3
- package/esm2020/lib/column-matrix-renderer/matrix-value.pipe.mjs +1 -1
- package/esm2020/lib/column-renderer/column-renderer.component.mjs +6 -5
- package/esm2020/lib/constants.mjs +1 -1
- package/esm2020/lib/custom-date-time/custom-date-time.component.mjs +1 -1
- package/esm2020/lib/device-info-field-base.mjs +1 -1
- package/esm2020/lib/download-files.directive.mjs +33 -0
- package/esm2020/lib/empty-page/empty-page.component.mjs +3 -3
- package/esm2020/lib/file-in-dialog/file-in-dialog.component.mjs +1 -1
- package/esm2020/lib/file-viewer/file-viewer.component.mjs +47 -0
- package/esm2020/lib/file-viewer-content/file-viewer-content.component.mjs +49 -0
- package/esm2020/lib/file-viewer-popover/file-viewer-popover.component.mjs +34 -0
- package/esm2020/lib/form-dialog/form-dialog.component.mjs +3 -3
- package/esm2020/lib/form-dialog-less/form-dialog-less.component.mjs +1 -1
- package/esm2020/lib/form-page/form-page.component.mjs +17 -17
- package/esm2020/lib/form-page-base.mjs +1 -1
- package/esm2020/lib/form-toolbar-button/form-toolbar-button.component.mjs +3 -3
- package/esm2020/lib/form-wizard/form-wizard.component.mjs +3 -3
- package/esm2020/lib/fullscreen-dialog.directive.mjs +1 -1
- package/esm2020/lib/fullscreen-files.directive.mjs +39 -0
- package/esm2020/lib/fundamental-dynamic-form/fundamental-dynamic-form.component.mjs +3 -3
- package/esm2020/lib/gantt-dhtml-chart-view/gantt-dhtml-chart-view.component.mjs +1 -1
- package/esm2020/lib/global-search/global-search.component.mjs +1 -1
- package/esm2020/lib/global-search-module/global-search-module.component.mjs +1 -1
- package/esm2020/lib/global-search-panel/global-search-panel.component.mjs +1 -1
- package/esm2020/lib/header-avatar/header-avatar.component.mjs +1 -1
- package/esm2020/lib/header-facet-form/header-facet-form.component.mjs +1 -1
- package/esm2020/lib/header-facet-key-value/header-facet-key-value.component.mjs +1 -1
- package/esm2020/lib/header-facet-microchart/header-facet-microchart.component.mjs +3 -3
- package/esm2020/lib/header-facet-plain-text/header-facet-plain-text.component.mjs +3 -3
- package/esm2020/lib/header-facet-rate/header-facet-rate.component.mjs +1 -1
- package/esm2020/lib/hyperlink/hyperlink.component.mjs +1 -1
- package/esm2020/lib/index.mjs +18 -3
- package/esm2020/lib/inline-save-and-cancel/inline-save-and-cancel.component.mjs +1 -1
- package/esm2020/lib/layout-actions/layout-actions.component.mjs +1 -1
- package/esm2020/lib/layout-control/layout-control.component.mjs +4 -4
- package/esm2020/lib/layout-wizard/layout-wizard.component.mjs +25 -3
- package/esm2020/lib/list-item/list-item.component.mjs +3 -3
- package/esm2020/lib/ly-empty-space/ly-empty-space.component.mjs +5 -7
- package/esm2020/lib/ly-horizontal-layout/ly-horizontal-layout.component.mjs +8 -7
- package/esm2020/lib/ly-layout-container/ly-layout-container.component.mjs +3 -3
- package/esm2020/lib/ly-layout-container-of-root/ly-layout-container-of-root.component.mjs +3 -3
- package/esm2020/lib/ly-layout-field-label/ly-layout-field-label.component.mjs +1 -1
- package/esm2020/lib/ly-layout-panel/ly-layout-panel.component.mjs +9 -3
- package/esm2020/lib/ly-line/ly-line.component.mjs +1 -1
- package/esm2020/lib/ly-simple-label/ly-simple-label.component.mjs +6 -10
- package/esm2020/lib/ly-tab-container/ly-tab-container.component.mjs +7 -3
- package/esm2020/lib/ly-tab-page/ly-tab-page.component.mjs +3 -3
- package/esm2020/lib/ly-vertical-layout/ly-vertical-layout.component.mjs +8 -7
- package/esm2020/lib/mask/mask.component.mjs +3 -3
- package/esm2020/lib/message-strip/message-strip.component.mjs +1 -1
- package/esm2020/lib/models/grid-data-provider.mjs +2 -2
- package/esm2020/lib/models/grid-view.mjs +1 -1
- package/esm2020/lib/no-data/no-data.component.mjs +3 -3
- package/esm2020/lib/page-with-form-handler-base.mjs +1 -1
- package/esm2020/lib/page-with-header/page-with-header.component.mjs +1 -1
- package/esm2020/lib/progress-indicator/progress-indicator.component.mjs +1 -1
- package/esm2020/lib/report-navigator/report-navigator.component.mjs +3 -3
- package/esm2020/lib/report-new-top-form/report-new-top-form.component.mjs +3 -3
- package/esm2020/lib/report-search-fields-hidden-settings/report-search-fields-hidden-settings.component.mjs +3 -3
- package/esm2020/lib/report-search-fields-manage/report-search-fields-manage.component.mjs +3 -3
- package/esm2020/lib/report-tree-base.mjs +4 -1
- package/esm2020/lib/report-view-renderer.directive.mjs +32 -2
- package/esm2020/lib/responsive-toolbar/responsive-toolbar.component.mjs +1 -1
- package/esm2020/lib/responsive-toolbar-renderer/responsive-toolbar-renderer.component.mjs +1 -1
- package/esm2020/lib/rich-text-static/rich-text-static.component.mjs +1 -1
- package/esm2020/lib/sap-ui-report-base.component.mjs +87 -64
- package/esm2020/lib/search-panel/search-panel.component.mjs +1 -1
- package/esm2020/lib/static-text/static-text.component.mjs +3 -3
- package/esm2020/lib/ui-asp-report-viewer/ui-asp-report-viewer.component.mjs +3 -3
- package/esm2020/lib/ui-button/ui-button.component.mjs +3 -3
- package/esm2020/lib/ui-calendar/ui-calendar.component.mjs +3 -3
- package/esm2020/lib/ui-card-view/ui-card-view.component.mjs +3 -3
- package/esm2020/lib/ui-check-box/ui-check-box.component.mjs +3 -3
- package/esm2020/lib/ui-color-ui/ui-color-ui.component.mjs +1 -1
- package/esm2020/lib/ui-container-with-button/ui-container-with-button.component.mjs +3 -3
- package/esm2020/lib/ui-date-range-ex/ui-date-range-ex.component.mjs +3 -3
- package/esm2020/lib/ui-date-time/ui-date-time.component.mjs +3 -3
- package/esm2020/lib/ui-editable-grid/ui-editable-grid.component.mjs +3 -3
- package/esm2020/lib/ui-exception-form/ui-exception-form.component.mjs +1 -1
- package/esm2020/lib/ui-file-linear-list-box/ui-file-linear-list-box.component.mjs +29 -90
- package/esm2020/lib/ui-form-panel/ui-form-panel.component.mjs +3 -3
- package/esm2020/lib/ui-gantt-chart/ui-gantt-chart.component.mjs +3 -3
- package/esm2020/lib/ui-graph/ui-graph.component.mjs +1 -1
- package/esm2020/lib/ui-grid/ui-grid.component.mjs +3 -3
- package/esm2020/lib/ui-grid-columns/ui-grid-columns.component.mjs +3 -3
- package/esm2020/lib/ui-grid-filter-item/ui-grid-filter-item.component.mjs +1 -1
- package/esm2020/lib/ui-grid-filter-settings/ui-grid-filter-settings.component.mjs +1 -1
- package/esm2020/lib/ui-grid-sort-item/ui-grid-sort-item.component.mjs +1 -1
- package/esm2020/lib/ui-grid-sort-setting/ui-grid-sort-setting.component.mjs +1 -1
- package/esm2020/lib/ui-info-bar-panel/ui-info-bar-panel.component.mjs +1 -1
- package/esm2020/lib/ui-label/ui-label.component.mjs +3 -3
- package/esm2020/lib/ui-linear-list-container-with-button/ui-linear-list-container-with-button.component.mjs +2 -2
- package/esm2020/lib/ui-list-view/ui-list-view.component.mjs +4 -3
- package/esm2020/lib/ui-matrix-view/ui-matrix-view.component.mjs +3 -3
- package/esm2020/lib/ui-mo-info-combo-viewer/ui-mo-info-combo-viewer.component.mjs +3 -3
- package/esm2020/lib/ui-mo-info-general-object-ui/ui-mo-info-general-object-ui.component.mjs +1 -1
- package/esm2020/lib/ui-mo-info-sub-form-ui/ui-mo-info-sub-form-ui.component.mjs +3 -3
- package/esm2020/lib/ui-mo-info-ulv-combo/ui-mo-info-ulv-combo.component.mjs +19 -14
- package/esm2020/lib/ui-monaco-editor/ui-monaco-editor.component.mjs +3 -3
- package/esm2020/lib/ui-multi-select-combo/ui-multi-select-combo.component.mjs +26 -9
- package/esm2020/lib/ui-num-decimal-ui/ui-num-decimal-ui.component.mjs +1 -1
- package/esm2020/lib/ui-num-int-ui/ui-num-int-ui.component.mjs +3 -3
- package/esm2020/lib/ui-pdf-viewer/ui-pdf-viewer.component.mjs +19 -20
- package/esm2020/lib/ui-picture-file/ui-picture-file.component.mjs +26 -30
- package/esm2020/lib/ui-pictures-info/ui-pictures-info.component.mjs +39 -31
- package/esm2020/lib/ui-radio-group/ui-radio-group.component.mjs +3 -3
- package/esm2020/lib/ui-read-only-field/ui-read-only-field.component.mjs +3 -3
- package/esm2020/lib/ui-report-container/ui-report-container.component.mjs +3 -3
- package/esm2020/lib/ui-search-command-info-ui/ui-search-command-info-ui.component.mjs +1 -1
- package/esm2020/lib/ui-simple-combo/ui-simple-combo.component.mjs +3 -3
- package/esm2020/lib/ui-single-picture/ui-single-picture.component.mjs +1 -1
- package/esm2020/lib/ui-switch-button/ui-switch-button.component.mjs +3 -3
- package/esm2020/lib/ui-table-view/ui-table-view.component.mjs +8 -3
- package/esm2020/lib/ui-text-area/ui-text-area.component.mjs +3 -3
- package/esm2020/lib/ui-text-field/ui-text-field.component.mjs +1 -1
- package/esm2020/lib/ui-text-field-auto-complete/ui-text-field-auto-complete.component.mjs +3 -3
- package/esm2020/lib/ui-time-span/ui-time-span.component.mjs +1 -1
- package/esm2020/lib/ui-tinymce/ui-tinymce.component.mjs +1 -1
- package/esm2020/lib/ui-tree/ui-tree.component.mjs +26 -3
- package/esm2020/lib/ui-tree-view/ui-tree-view.component.mjs +9 -3
- package/esm2020/lib/ui-ulv-form-multi-select-ui/ui-ulv-form-multi-select-ui.component.mjs +2 -2
- package/esm2020/lib/ui-ulv-main-ui/ui-ulv-main-ui.component.mjs +6 -3
- package/esm2020/lib/ui-workflow-panel-ui/ui-workflow-panel-ui.component.mjs +1 -1
- package/esm2020/lib/ul-loading-mask-ui/ul-loading-mask-ui.component.mjs +7 -2
- package/esm2020/lib/ul-msg-box-adapter/ul-msg-box-adapter.component.mjs +3 -3
- package/esm2020/lib/ul-notify-popup/ul-notify-popup.component.mjs +1 -1
- package/esm2020/lib/ul-toast-adapter/ul-toast-adapter.component.mjs +1 -1
- package/esm2020/lib/ulv-column-settings/ulv-column-settings.component.mjs +3 -3
- package/esm2020/lib/ulv-context-menu/ulv-context-menu.component.mjs +3 -3
- package/esm2020/lib/ulv-filter-settings/ulv-filter-settings.component.mjs +3 -3
- package/esm2020/lib/ulv-form-multi-select/ulv-form-multi-select.component.mjs +5 -5
- package/esm2020/lib/ulv-groupby-settings/ulv-groupby-settings.component.mjs +3 -3
- package/esm2020/lib/ulv-paging/ulv-paging.component.mjs +1 -1
- package/esm2020/lib/ulv-selection/ulv-selection.component.mjs +2 -2
- package/esm2020/lib/ulv-settings/ulv-settings.component.mjs +1 -1
- package/esm2020/lib/ulv-sort-settings/ulv-sort-settings.component.mjs +3 -3
- package/esm2020/lib/ulv-toolbar/ulv-toolbar.component.mjs +11 -5
- package/esm2020/lib/wizard-layout.directive.mjs +1 -1
- package/esm2020/public-api.mjs +7 -1
- package/fesm2015/barsa-sap-ui.mjs +888 -542
- package/fesm2015/barsa-sap-ui.mjs.map +1 -1
- package/fesm2020/barsa-sap-ui.mjs +879 -541
- package/fesm2020/barsa-sap-ui.mjs.map +1 -1
- package/lib/barsa-network-offline/barsa-network-offline.component.d.ts +3 -2
- package/lib/barsa-sap-ui.module.d.ts +31 -25
- package/lib/barsa-tree-item/barsa-tree-item.component.d.ts +7 -1
- package/lib/barsa-ulv-main/barsa-ulv-main.component.d.ts +3 -1
- package/lib/blob-viewer/blob-viewer.component.d.ts +20 -0
- package/lib/download-files.directive.d.ts +9 -0
- package/lib/file-viewer/file-viewer.component.d.ts +21 -0
- package/lib/file-viewer-content/file-viewer-content.component.d.ts +18 -0
- package/lib/file-viewer-popover/file-viewer-popover.component.d.ts +13 -0
- package/lib/fullscreen-files.directive.d.ts +15 -0
- package/lib/index.d.ts +8 -4
- package/lib/layout-control/layout-control.component.d.ts +5 -5
- package/lib/layout-wizard/layout-wizard.component.d.ts +1 -0
- package/lib/ly-empty-space/ly-empty-space.component.d.ts +1 -3
- package/lib/ly-horizontal-layout/ly-horizontal-layout.component.d.ts +4 -3
- package/lib/ly-simple-label/ly-simple-label.component.d.ts +1 -3
- package/lib/ly-tab-container/ly-tab-container.component.d.ts +3 -1
- package/lib/ly-vertical-layout/ly-vertical-layout.component.d.ts +4 -3
- package/lib/report-tree-base.d.ts +2 -1
- package/lib/report-view-renderer.directive.d.ts +10 -1
- package/lib/sap-ui-report-base.component.d.ts +13 -4
- package/lib/ui-file-linear-list-box/ui-file-linear-list-box.component.d.ts +15 -18
- package/lib/ui-multi-select-combo/ui-multi-select-combo.component.d.ts +9 -3
- package/lib/ui-pdf-viewer/ui-pdf-viewer.component.d.ts +5 -6
- package/lib/ui-picture-file/ui-picture-file.component.d.ts +4 -6
- package/lib/ui-pictures-info/ui-pictures-info.component.d.ts +8 -7
- package/lib/ui-table-view/ui-table-view.component.d.ts +1 -0
- package/lib/ui-tree/ui-tree.component.d.ts +5 -0
- package/lib/ui-tree-view/ui-tree-view.component.d.ts +7 -1
- package/lib/ui-ulv-main-ui/ui-ulv-main-ui.component.d.ts +2 -1
- package/lib/ul-loading-mask-ui/ul-loading-mask-ui.component.d.ts +2 -1
- package/lib/ulv-toolbar/ulv-toolbar.component.d.ts +4 -1
- package/package.json +1 -1
- package/public-api.d.ts +6 -0
|
@@ -1,17 +1,22 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, Input, ViewChild } from '@angular/core';
|
|
1
|
+
import { ChangeDetectionStrategy, Component, Input, ViewChild, TemplateRef } from '@angular/core';
|
|
2
2
|
import { BehaviorSubject, of, Subject } from 'rxjs';
|
|
3
|
-
import { catchError,
|
|
3
|
+
import { catchError, concatMap, takeUntil, tap } from 'rxjs/operators';
|
|
4
4
|
import { BarsaApi, UploadService, getDeviceIsMobile, FilesValidationHelper } from 'barsa-novin-ray-core';
|
|
5
5
|
import { DeviceInfoFieldBaseComponent } from '../device-info-field-base';
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
7
7
|
import * as i1 from "@angular/common";
|
|
8
8
|
import * as i2 from "barsa-novin-ray-core";
|
|
9
|
-
import * as i3 from "@fundamental-ngx/core/
|
|
10
|
-
import * as i4 from "@fundamental-ngx/core/
|
|
11
|
-
import * as i5 from "@fundamental-ngx/core/
|
|
12
|
-
import * as i6 from "@fundamental-ngx/
|
|
13
|
-
import * as i7 from "@fundamental-ngx/
|
|
14
|
-
import * as i8 from "@fundamental-ngx/
|
|
9
|
+
import * as i3 from "@fundamental-ngx/core/bar";
|
|
10
|
+
import * as i4 from "@fundamental-ngx/core/button";
|
|
11
|
+
import * as i5 from "@fundamental-ngx/core/card";
|
|
12
|
+
import * as i6 from "@fundamental-ngx/core/file-uploader";
|
|
13
|
+
import * as i7 from "@fundamental-ngx/core/inline-help";
|
|
14
|
+
import * as i8 from "@fundamental-ngx/core/layout-grid";
|
|
15
|
+
import * as i9 from "@fundamental-ngx/core/menu";
|
|
16
|
+
import * as i10 from "@fundamental-ngx/core/dialog";
|
|
17
|
+
import * as i11 from "@fundamental-ngx/core/title";
|
|
18
|
+
import * as i12 from "@fundamental-ngx/core/utils";
|
|
19
|
+
import * as i13 from "../mask/mask.component";
|
|
15
20
|
export class UiPicturesInfoComponent extends DeviceInfoFieldBaseComponent {
|
|
16
21
|
constructor() {
|
|
17
22
|
super(...arguments);
|
|
@@ -26,9 +31,7 @@ export class UiPicturesInfoComponent extends DeviceInfoFieldBaseComponent {
|
|
|
26
31
|
this.mediaData$ = this.mediaDataSource.asObservable();
|
|
27
32
|
super.ngOnInit();
|
|
28
33
|
this.isMobile = getDeviceIsMobile();
|
|
29
|
-
this.
|
|
30
|
-
this.progress$ = this._uploadService.progress$;
|
|
31
|
-
this.uploadState$ = this._uploadService.uploadState$;
|
|
34
|
+
this.uploadingState$ = this._uploadService.uploadingState$;
|
|
32
35
|
this.value$.subscribe((value) => this._setFileCount(value));
|
|
33
36
|
this.filesValidationHelper = new FilesValidationHelper(this.Setting.MaxPictureCount, this.Setting.MaxFileSizeKb, this.Setting.MaxTotalFileSizeKb);
|
|
34
37
|
this.maxFileCount = this.filesValidationHelper.maxFileCount;
|
|
@@ -41,15 +44,24 @@ export class UiPicturesInfoComponent extends DeviceInfoFieldBaseComponent {
|
|
|
41
44
|
super.ngOnDestroy();
|
|
42
45
|
this.context.un('DisplayImages', this._displayImages);
|
|
43
46
|
}
|
|
47
|
+
onFullscreen(media, mediaData) {
|
|
48
|
+
const dialogConfig = {
|
|
49
|
+
data: { media, mediaData },
|
|
50
|
+
escKeyCloseable: false,
|
|
51
|
+
fullScreen: true,
|
|
52
|
+
verticalPadding: false
|
|
53
|
+
};
|
|
54
|
+
this._dialogService.open(this.dialogTemplate, dialogConfig);
|
|
55
|
+
}
|
|
56
|
+
onMedaiClick(media, index) {
|
|
57
|
+
this.gallery.nativeElement.querySelector('[id="' + String(index) + '"]')?.scrollIntoView(true);
|
|
58
|
+
}
|
|
44
59
|
onThumbnailClicked(imgIndex) {
|
|
45
60
|
this.selectedIndex = imgIndex;
|
|
46
61
|
this.gallery.nativeElement.querySelector('[id="' + String(imgIndex) + '"]')?.scrollIntoView(true);
|
|
47
62
|
}
|
|
48
|
-
onDelete() {
|
|
49
|
-
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
const selectedMedia = this.value[this.selectedIndex];
|
|
63
|
+
onDelete(index) {
|
|
64
|
+
const selectedMedia = this.value[index];
|
|
53
65
|
this._deleteMedia(selectedMedia);
|
|
54
66
|
}
|
|
55
67
|
onScan() {
|
|
@@ -93,11 +105,9 @@ export class UiPicturesInfoComponent extends DeviceInfoFieldBaseComponent {
|
|
|
93
105
|
this.fillOriginal = false;
|
|
94
106
|
this.fillWidth = false;
|
|
95
107
|
}
|
|
96
|
-
onFileSelection(
|
|
97
|
-
this.filesValidationHelper
|
|
98
|
-
|
|
99
|
-
.pipe(filter((files) => files.length > 0), switchMap((files) => this.uploadToServer(files)))
|
|
100
|
-
.subscribe();
|
|
108
|
+
onFileSelection(files) {
|
|
109
|
+
this.filesValidationHelper.validateFiles(files);
|
|
110
|
+
this.uploadToServer(files).pipe(takeUntil(this._onDestroy$)).subscribe();
|
|
101
111
|
}
|
|
102
112
|
_deleteMedia(selectedMedia) {
|
|
103
113
|
const { Id, FileId } = selectedMedia;
|
|
@@ -178,16 +188,11 @@ export class UiPicturesInfoComponent extends DeviceInfoFieldBaseComponent {
|
|
|
178
188
|
this.mediaDataSource.next(data);
|
|
179
189
|
}
|
|
180
190
|
uploadToServer(files) {
|
|
181
|
-
|
|
182
|
-
files.forEach((file) => {
|
|
183
|
-
formData.append('unicFileName', 'x' + BarsaApi.Common.Util.GetNewMetaGuid() + ';;;' + file.name);
|
|
184
|
-
formData.append('file', file);
|
|
185
|
-
});
|
|
186
|
-
return this._uploadService.upload(formData, this.Setting.ControlFieldDefId).pipe(tap((res) => {
|
|
191
|
+
return this._uploadService.compressFiles$(files).pipe(concatMap((formData) => this._uploadService.upload(formData, this.Setting.ControlFieldDefId).pipe(tap((res) => {
|
|
187
192
|
if (Array.isArray(res)) {
|
|
188
193
|
this.updateValue(res);
|
|
189
194
|
}
|
|
190
|
-
}), catchError((err) => of(err)));
|
|
195
|
+
}), catchError((err) => of(err)))));
|
|
191
196
|
}
|
|
192
197
|
_setFileCount(value) {
|
|
193
198
|
this._fileCountSource.next(value.filter((c) => !c.IsDeleted).length);
|
|
@@ -202,14 +207,17 @@ export class UiPicturesInfoComponent extends DeviceInfoFieldBaseComponent {
|
|
|
202
207
|
}
|
|
203
208
|
}
|
|
204
209
|
UiPicturesInfoComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UiPicturesInfoComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
205
|
-
UiPicturesInfoComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: UiPicturesInfoComponent, selector: "bsu-ui-pictures-info", inputs: { value: "value" }, providers: [UploadService], viewQueries: [{ propertyName: "gallery", first: true, predicate: ["gallery"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-container>\n <fd-toolbar *untilInView=\"el\" [transparent]=\"true\" [shouldOverflow]=\"true\">\n <fd-file-uploader\n #uploader\n [style.display]=\"'none'\"\n fd-toolbar-item\n [id]=\"id\"\n [name]=\"'pictures_' + id\"\n [placeholder]=\"'AttachPicture' | bbbTranslate\"\n [buttonLabel]=\"'AttachPicture' | bbbTranslate\"\n [buttonAriaLabel]=\"'AttachPicture' | bbbTranslate\"\n accept=\".png,.jpg,.bpm,.jpeg,.gif,.png,.tif\"\n [fileLimit]=\"maxFileCount === 0 ? 100 : maxFileCount\"\n [multiple]=\"maxFileCount === 0 || maxFileCount > 1\"\n (selectedFilesChanged)=\"onFileSelection($event)\"\n ></fd-file-uploader>\n <fdp-button\n [disabled]=\"!(value | canUploadFile: maxFileCount:(disable$ | async)!!:(readonly$ | async)!!)\"\n fd-toolbar-item\n glyph=\"attachment\"\n buttonType=\"transparent\"\n (click)=\"uploader.open()\"\n ></fdp-button>\n <fdp-button\n [disabled]=\"selectedIndex === -1 || (disableOrReadonly$ | async)!!\"\n class=\"delete\"\n fd-toolbar-item\n glyph=\"delete\"\n [buttonType]=\"'transparent'\"\n (click)=\"onDelete()\"\n ></fdp-button>\n <fdp-button fd-toolbar-item glyph=\"zoom-in\" [buttonType]=\"'transparent'\" (click)=\"onZoomIn()\"></fdp-button>\n <fdp-button fd-toolbar-item glyph=\"zoom-out\" [buttonType]=\"'transparent'\" (click)=\"onZoomOut()\"></fdp-button>\n <fdp-button\n fd-toolbar-item\n glyph=\"exitfullscreen\"\n [buttonType]=\"'transparent'\"\n (click)=\"onFillOriginal()\"\n ></fdp-button>\n <fdp-button\n fd-toolbar-item\n glyph=\"resize-horizontal\"\n [buttonType]=\"'transparent'\"\n (click)=\"onFillWidth()\"\n ></fdp-button>\n <fdp-button fd-toolbar-item glyph=\"resize\" [buttonType]=\"'transparent'\" (click)=\"onFillAll()\"></fdp-button>\n <fdp-split-menu-button\n [readonly]=\"(readonly$ | async)!!\"\n [disabled]=\"(readonly$ | async)!!\"\n *ngIf=\"value | canUploadFile: maxFileCount:(disable$ | async)!!:(readonly$ | async)!!\"\n fd-toolbar-item\n [menu]=\"menu1\"\n [buttonLabel]=\"'Scan' | bbbTranslate\"\n [title]=\"'Scan' | bbbTranslate\"\n type=\"transparent\"\n [menuTitle]=\"'Scan' | bbbTranslate\"\n (primaryButtonClick)=\"onScan()\"\n >\n </fdp-split-menu-button>\n <fdp-menu #menu1 xPosition=\"after\">\n <fdp-menu-item (itemSelect)=\"onAdvanceScan()\">{{ 'AdvancedScan' | bbbTranslate }}</fdp-menu-item>\n </fdp-menu>\n </fd-toolbar>\n</ng-container>\n<ng-container *ngIf=\"mediaData$ | async as mediaData\">\n <div *ngIf=\"mediaData.length > 0; else hashed\" dir=\"rtl\" class=\"gallery\" #gallery>\n <div class=\"column small-imgs-box\">\n <div\n class=\"pics\"\n (click)=\"onThumbnailClicked(i)\"\n *ngFor=\"let media of mediaData; let i = index\"\n [class.selected]=\"i === selectedIndex || (!selectedIndex && i === 0)\"\n >\n <img [src]=\"media.thumbnailUrl\" />\n </div>\n </div>\n <div\n class=\"column big-imgs-box\"\n [class.fill-width]=\"fillWidth\"\n [class.fill-all]=\"fillAll\"\n [class.fill-original]=\"fillOriginal\"\n [ngClass]=\"selectedZoom\"\n >\n <div class=\"pics\" [id]=\"i\" *ngFor=\"let media of mediaData; let i = index\">\n <img imgLazy [imgLazy]=\"media.mediaUrl\" [src]=\"media.mediaUrl\" />\n </div>\n </div>\n </div>\n\n <ng-template #hashed>\n <div class=\"hatchBackground\" style=\"display: flex; align-items: center; justify-content: center\">\n <fd-busy-indicator fd-toolbar-item [loading]=\"(uploading$ | async)!!\"></fd-busy-indicator>\n </div>\n </ng-template>\n</ng-container>\n", styles: [":host ::ng-deep .delete button{border-color:transparent!important;background-color:transparent!important}.hatchBackground{min-height:100px}.gallery{display:flex;width:100%;height:400px;column-gap:1px;background-color:var(--sapField_Background, #fff)}.gallery ::-webkit-scrollbar{width:7px;height:7px}.gallery ::-webkit-scrollbar-track{box-shadow:inset 0 0 5px gray;border-radius:4px}.gallery ::-webkit-scrollbar-thumb{background:rgb(85,84,84);border-radius:4px}.gallery ::-webkit-scrollbar-thumb:hover{background:#2c2b2b}.gallery .column{overflow-y:scroll;display:flex;flex-direction:column;row-gap:3%;align-items:center}.gallery .column .pics{width:100%;display:flex;justify-content:center}.gallery .column .pics img{border-radius:5px}.gallery .column.small-imgs-box{flex:10%}.gallery .column.big-imgs-box{flex:90%}.gallery .selected{background-color:#fff;border:3px solid #0294d8;padding:10px}.gallery .fill-width img{width:100%!important}.gallery .fill-all .pics{height:100%}.gallery .fill-all img{width:100%!important;height:100%!important;object-fit:fill!important}.gallery .fill-original img{width:unset;height:unset}.gallery .zoom1 img{zoom:1}.gallery .zoom1-5 img{zoom:1.5}.gallery .zoom2 img{zoom:2}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ImageLazyDirective, selector: "[imgLazy]", inputs: ["auto", "threshold", "imgLazy"], outputs: ["imageLoaded"] }, { kind: "directive", type: i2.UntilInViewDirective, selector: "[untilInView]", inputs: ["untilInView", "intersectionDebounce"] }, { kind: "component", type: i3.BusyIndicatorComponent, selector: "fd-busy-indicator", inputs: ["loading", "size", "block", "ariaLabel", "title", "label", "ariaLive"] }, { kind: "component", type: i4.FileUploaderComponent, selector: "fd-file-uploader", inputs: ["disabled", "required", "multiple", "accept", "dragndrop", "maxFileSize", "minFileSize", "id", "ariaLabel", "ariaLabelledBy", "placeholder", "buttonLabel", "buttonAriaLabel", "state", "fileLimit", "inputHidden", "width"], outputs: ["selectedFilesChanged", "selectedInvalidFiles", "onDragEnter", "onDragLeave"] }, { kind: "component", type: i5.ToolbarComponent, selector: "fd-toolbar", inputs: ["class", "shouldOverflow", "fdType", "hasTitle", "title", "active", "clearBorder", "forceOverflow", "tabindex"] }, { kind: "directive", type: i5.ToolbarItemDirective, selector: "[fd-toolbar-item]" }, { kind: "component", type: i6.ButtonComponent, selector: "fdp-button", inputs: ["glyphPosition", "label", "glyph", "buttonType", "title", "ariaSelected", "ariaDisabled", "ariaExpanded", "ariaControlsId", "ariaPressed", "name", "type", "value"], outputs: ["buttonClicked"] }, { kind: "component", type: i7.MenuComponent, selector: "fdp-menu", inputs: ["id", "openByArrowKeys", "xPosition"], outputs: ["close"] }, { kind: "component", type: i7.MenuItemComponent, selector: "fdp-menu-item", inputs: ["disabled", "cascadeDirection"], outputs: ["itemSelect"] }, { kind: "component", type: i8.SplitMenuButtonComponent, selector: "fdp-split-menu-button", inputs: ["fixedWidth", "title", "menuTitle", "buttonLabel", "menu", "icon", "type"], outputs: ["primaryButtonClick"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.CanUploadFilePipe, name: "canUploadFile" }, { kind: "pipe", type: i2.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
210
|
+
UiPicturesInfoComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: UiPicturesInfoComponent, selector: "bsu-ui-pictures-info", inputs: { value: "value" }, providers: [UploadService], viewQueries: [{ propertyName: "gallery", first: true, predicate: ["gallery"], descendants: true }, { propertyName: "dialogTemplate", first: true, predicate: ["dialogTemplate"], descendants: true, read: TemplateRef }], usesInheritance: true, ngImport: i0, template: "<fd-file-uploader\r\n #uploader\r\n [style.display]=\"'none'\"\r\n [id]=\"id\"\r\n [name]=\"'pictures_' + id\"\r\n [placeholder]=\"'AttachPicture' | bbbTranslate\"\r\n [buttonLabel]=\"'AttachPicture' | bbbTranslate\"\r\n [buttonAriaLabel]=\"'AttachPicture' | bbbTranslate\"\r\n accept=\".png,.jpg,.bpm,.jpeg,.gif,.png,.tif\"\r\n [fileLimit]=\"maxFileCount === 0 ? 100 : maxFileCount\"\r\n [multiple]=\"maxFileCount === 0 || maxFileCount > 1\"\r\n (selectedFilesChanged)=\"onFileSelection($event)\"\r\n></fd-file-uploader>\r\n<!-- <ng-container *ngTemplateOutlet=\"toolbarTpl\"></ng-container>\r\n<ng-template #toolbarTpl let-inDialog=\"inDialog\">\r\n <fd-toolbar *untilInView=\"el\" [fdType]=\"'transparent'\" [clearBorder]=\"true\" [shouldOverflow]=\"true\">\r\n <fdp-button *ngIf=\"!inDialog\"\r\n [disabled]=\"!(value | canUploadFile: maxFileCount:(disable$ | async)!!:(readonly$ | async)!!)\"\r\n fd-toolbar-item glyph=\"attachment\" buttonType=\"transparent\" (click)=\"uploader.open()\"></fdp-button>\r\n <fdp-button [disabled]=\"selectedIndex === -1 || (disableOrReadonly$ | async)!!\" class=\"delete\" fd-toolbar-item\r\n glyph=\"delete\" [buttonType]=\"'transparent'\" (click)=\"onDelete()\"></fdp-button>\r\n <fdp-button fd-toolbar-item glyph=\"zoom-in\" [buttonType]=\"'transparent'\" (click)=\"onZoomIn()\"></fdp-button>\r\n <fdp-button fd-toolbar-item glyph=\"zoom-out\" [buttonType]=\"'transparent'\" (click)=\"onZoomOut()\"></fdp-button>\r\n <fdp-button fd-toolbar-item glyph=\"exitfullscreen\" [buttonType]=\"'transparent'\"\r\n (click)=\"onFillOriginal()\"></fdp-button>\r\n <fdp-button fd-toolbar-item glyph=\"resize-horizontal\" [buttonType]=\"'transparent'\"\r\n (click)=\"onFillWidth()\"></fdp-button>\r\n <fdp-button fd-toolbar-item glyph=\"resize\" [buttonType]=\"'transparent'\" (click)=\"onFillAll()\"></fdp-button>\r\n <ng-container *ngIf=\"!inDialog\">\r\n <fdp-split-menu-button fd-toolbar-item [readonly]=\"(readonly$ | async)!!\" [disabled]=\"(readonly$ | async)!!\"\r\n *ngIf=\"value | canUploadFile: maxFileCount:(disable$ | async)!!:(readonly$ | async)!!\" [menu]=\"menu1\"\r\n [buttonLabel]=\"'Scan' | bbbTranslate\" [title]=\"'Scan' | bbbTranslate\" type=\"transparent\"\r\n [menuTitle]=\"'Scan' | bbbTranslate\" (primaryButtonClick)=\"onScan()\">\r\n </fdp-split-menu-button>\r\n <fdp-menu #menu1 xPosition=\"after\">\r\n <fdp-menu-item (itemSelect)=\"onAdvanceScan()\">{{ 'AdvancedScan' | bbbTranslate }}</fdp-menu-item>\r\n </fdp-menu>\r\n </ng-container>\r\n </fd-toolbar>\r\n</ng-template> -->\r\n\r\n<!-- <ng-container *ngIf=\"mediaData$ | async as mediaData\">\r\n <div *ngIf=\"mediaData.length > 0; else hashed\" dir=\"rtl\" class=\"gallery\" #gallery>\r\n <div class=\"column small-imgs-box\">\r\n <div class=\"pics\" (click)=\"onThumbnailClicked(i)\" *ngFor=\"let media of mediaData; let i = index\"\r\n [class.selected]=\"i === selectedIndex || (!selectedIndex && i === 0)\">\r\n <img [src]=\"media.thumbnailUrl\" />\r\n </div>\r\n </div>\r\n <div class=\"column big-imgs-box\" [class.fill-width]=\"fillWidth\" [class.fill-all]=\"fillAll\"\r\n [class.fill-original]=\"fillOriginal\" [ngClass]=\"selectedZoom\">\r\n <div class=\"pics\" [id]=\"i\" *ngFor=\"let media of mediaData; let i = index\">\r\n <img imgLazy [imgLazy]=\"media.mediaUrl\" [src]=\"media.mediaUrl\" />\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <ng-template #hashed>\r\n <div class=\"hatchBackground\" style=\"display: flex; align-items: center; justify-content: center\"></div>\r\n </ng-template>\r\n</ng-container> -->\r\n\r\n<ng-container *ngTemplateOutlet=\"layoutGridTpl\"></ng-container>\r\n<ng-template #layoutGridTpl let-inDialog=\"inDialog\">\r\n <fd-layout-grid>\r\n <div fdLayoutGridRow *ngIf=\"mediaData$ | async as mediaData\">\r\n <div\r\n *ngFor=\"let media of mediaData; let i = index\"\r\n [fdLayoutGridCol]=\"6\"\r\n [colMd]=\"3\"\r\n [colLg]=\"2\"\r\n [colXl]=\"2\"\r\n (click)=\"onMedaiClick(media, i)\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n cardTpl;\r\n context: { $implicit: media, mediaData: this.mediaData, inDialog: this.inDialog, index: i }\r\n \"\r\n ></ng-container>\r\n </div>\r\n <div *ngIf=\"!inDialog\" [fdLayoutGridCol]=\"6\" [colMd]=\"3\" [colLg]=\"2\" [colXl]=\"2\">\r\n <ng-container *ngTemplateOutlet=\"newFile\"></ng-container>\r\n </div>\r\n </div>\r\n </fd-layout-grid>\r\n</ng-template>\r\n<ng-template #cardTpl let-media let-mediaData=\"mediaData\" let-inDialog=\"inDialog\" let-index=\"index\">\r\n <fd-card class=\"media\" [class.inDialog]=\"inDialog\">\r\n <fd-card-content style=\"text-align: center; height: 120px\">\r\n <img imgLazy [imgLazy]=\"media.thumbnailUrl\" [src]=\"media.thumbnailUrl\" />\r\n </fd-card-content>\r\n <fd-card-footer *ngIf=\"!inDialog\">\r\n <button\r\n glyph=\"message-information\"\r\n *fdCardFooterActionItem\r\n fd-button\r\n fdType=\"transparent\"\r\n [fd-inline-help]=\"media.title\"\r\n [triggers]=\"['click']\"\r\n [closeOnOutsideClick]=\"true\"\r\n ></button>\r\n <button\r\n glyph=\"full-screen\"\r\n *fdCardFooterActionItem\r\n fd-button\r\n fdType=\"transparent\"\r\n (click)=\"onFullscreen(media, mediaData)\"\r\n ></button>\r\n <button\r\n glyph=\"delete\"\r\n *fdCardFooterActionItem\r\n fd-button\r\n fdType=\"transparent\"\r\n (click)=\"onDelete(index)\"\r\n ></button>\r\n </fd-card-footer>\r\n </fd-card>\r\n</ng-template>\r\n<ng-template #newFile>\r\n <div style=\"position: relative; height: 100%\">\r\n <fd-card>\r\n <fd-card-content style=\"display: flex; align-items: center; justify-content: center; min-height: 120px\">\r\n <button\r\n fd-button\r\n glyph=\"add-photo\"\r\n fdType=\"transparent\"\r\n [label]=\"'AttachFile' | bbbTranslate\"\r\n (click)=\"uploader.open()\"\r\n ></button>\r\n </fd-card-content>\r\n\r\n <fd-card-footer style=\"border-top: 1px solid #ccc\">\r\n <button fd-button [glyph]=\"'overflow'\" [fdType]=\"'transparent'\" [fdMenuTrigger]=\"menu\"></button>\r\n <fd-menu #menu>\r\n <li fd-menu-item (click)=\"onScan()\">\r\n <a fd-menu-interactive>\r\n <span fd-menu-title>{{ 'Scan' | bbbTranslate }}</span>\r\n </a>\r\n </li>\r\n <li fd-menu-item (click)=\"onAdvanceScan()\">\r\n <a fd-menu-interactive>\r\n <span fd-menu-title>{{ 'AdvancedScan' | bbbTranslate }}</span>\r\n </a>\r\n </li>\r\n </fd-menu>\r\n </fd-card-footer>\r\n </fd-card>\r\n <bsu-mask *ngIf=\"(uploadingState$ | async)?.uploading === true\"></bsu-mask>\r\n </div>\r\n</ng-template>\r\n<ng-template #dialogTemplate let-dialog let-dialogConfig=\"dialogConfig\">\r\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\" #dialogTpl class=\"vertical\">\r\n <fd-dialog-header>\r\n <ng-template fdTemplate=\"header\">\r\n <div fd-bar-left>\r\n <fd-bar-element>\r\n <h1 fd-title>{{ Setting.ControlFieldCaptionTranslated }}</h1>\r\n </fd-bar-element>\r\n </div>\r\n <div fd-bar-right>\r\n <fd-button-bar\r\n *ngIf=\"!dialogConfig.fullscreen\"\r\n ariaLabel=\"Fit image size\"\r\n [glyph]=\"'resize'\"\r\n [fdType]=\"fillWidth ? 'emphasized' : 'transparent'\"\r\n (click)=\"fillWidth = !fillWidth\"\r\n ></fd-button-bar>\r\n <fd-button-bar ariaLabel=\"close\" glyph=\"decline\" (click)=\"dialog.close()\"></fd-button-bar>\r\n </div>\r\n </ng-template>\r\n </fd-dialog-header>\r\n <fd-dialog-body #fdbody>\r\n <div #gallery class=\"gallery inDialog\" style=\"flex: 1\">\r\n <div\r\n *ngFor=\"let media of dialog.data.mediaData; let i = index\"\r\n class=\"column big-imgs-box\"\r\n [class.fill-width]=\"fillWidth\"\r\n [class.fill-all]=\"fillAll\"\r\n [class.fill-original]=\"fillOriginal\"\r\n [ngClass]=\"selectedZoom\"\r\n >\r\n <div class=\"pics\" [id]=\"i\">\r\n <bsu-mask></bsu-mask>\r\n <img imgLazy [imgLazy]=\"media.mediaUrl\" [src]=\"media.mediaUrl\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"(deviceSize$ | async) !== 's'\" class=\"thumbnail\" style=\"flex-shrink: 1\">\r\n <ng-cotainer *ngTemplateOutlet=\"layoutGridTpl; context: { inDialog: true }\"></ng-cotainer>\r\n </div>\r\n </fd-dialog-body>\r\n </fd-dialog>\r\n</ng-template>\r\n", styles: [":host{position:relative}:host ::ng-deep .delete button{border-color:transparent!important;background-color:transparent!important}fd-toolbar{width:100%}fd-dialog-footer{justify-content:center}.hatchBackground{min-height:100px}.gallery{display:flex;width:100%;height:400px;column-gap:1px;background-color:var(--sapField_Background, #fff)}.gallery ::-webkit-scrollbar{width:7px;height:7px}.gallery ::-webkit-scrollbar-track{box-shadow:inset 0 0 5px gray;border-radius:4px}.gallery ::-webkit-scrollbar-thumb{background:rgb(85,84,84);border-radius:4px}.gallery ::-webkit-scrollbar-thumb:hover{background:#2c2b2b}.gallery .column{overflow-y:scroll;display:flex;flex-direction:column;row-gap:3%;align-items:center}.gallery .column .pics{width:100%;display:flex;justify-content:center}.gallery .column .pics img{border-radius:5px}.gallery .column.small-imgs-box{flex:10%}.gallery .column.big-imgs-box{flex:90%}.gallery .selected{background-color:#fff;border:3px solid #0294d8;padding:10px}.gallery .fill-width img{width:100%!important}.gallery .fill-all .pics{height:100%}.gallery .fill-all img{width:100%!important;height:100%!important;object-fit:fill!important}.gallery .fill-original img{width:unset;height:unset}.gallery .zoom1 img{zoom:1}.gallery .zoom1-5 img{zoom:1.5}.gallery .zoom2 img{zoom:2}fd-dialog .gallery{overflow:auto}fd-dialog .gallery .column{overflow:initial}fd-dialog .gallery .pics{position:relative}fd-dialog fd-dialog-body{display:flex}fd-dialog.horizontal fd-dialog-body{flex-direction:column}fd-dialog.horizontal .gallery{flex-direction:row}fd-dialog.horizontal .thumbnail{border-top:1px solid #ccc;overflow-x:auto}fd-dialog.vertical fd-dialog-body{flex-direction:row-reverse}fd-dialog.vertical .gallery{flex-direction:column;height:100%}fd-dialog.vertical .thumbnail{border-left:1px solid #ccc;height:100%;width:200px;overflow-y:auto}fd-dialog.vertical .thumbnail ::ng-deep .fd-row>div{width:100%;min-width:100%}fd-card.media fd-card-footer button{border:none}fd-card.inDialog fd-card-header{padding-top:5px;padding-bottom:5px}.fd-col{min-width:165px}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.ImageLazyDirective, selector: "[imgLazy]", inputs: ["auto", "threshold", "imgLazy"], outputs: ["imageLoaded"] }, { kind: "directive", type: i3.BarLeftDirective, selector: "[fd-bar-left]" }, { kind: "directive", type: i3.BarRightDirective, selector: "[fd-bar-right]" }, { kind: "directive", type: i3.BarElementDirective, selector: "fd-bar-element", inputs: ["fullWidth", "isTitle"] }, { kind: "component", type: i3.ButtonBarComponent, selector: "fd-button-bar", inputs: ["fullWidth", "fdType", "title", "ariaLabel", "ariaLabelledby", "id"] }, { kind: "component", type: i4.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i5.CardComponent, selector: "fd-card", inputs: ["badge", "isLoading", "cardType", "id", "role"] }, { kind: "component", type: i5.CardContentComponent, selector: "fd-card-content" }, { kind: "component", type: i5.CardFooterComponent, selector: "fd-card-footer" }, { kind: "directive", type: i5.CardFooterActionItemDirective, selector: "[fdCardFooterActionItem]" }, { kind: "component", type: i6.FileUploaderComponent, selector: "fd-file-uploader", inputs: ["disabled", "required", "multiple", "accept", "dragndrop", "maxFileSize", "minFileSize", "id", "ariaLabel", "ariaLabelledBy", "placeholder", "buttonLabel", "buttonAriaLabel", "state", "fileLimit", "inputHidden", "width"], outputs: ["selectedFilesChanged", "selectedInvalidFiles", "onDragEnter", "onDragLeave"] }, { kind: "directive", type: i7.InlineHelpDirective, selector: "[fd-inline-help], [fd-inline-help-template]", inputs: ["triggers", "noArrow", "closeOnEscapeKey", "closeOnOutsideClick", "fd-inline-help", "fd-inline-help-template"] }, { kind: "component", type: i8.LayoutGridComponent, selector: "fd-layout-grid, [fdLayoutGrid]", inputs: ["class", "noGap", "noHorizontalGap", "noVerticalGap"] }, { kind: "directive", type: i8.LayoutGridColDirective, selector: "[fd-layout-grid-col], [fdLayoutGridCol]", inputs: ["fdLayoutGridCol", "colGrow", "colMd", "colLg", "colXl", "colOffset", "colOffsetMd", "colOffsetLg", "colOffsetXl", "class"] }, { kind: "directive", type: i8.LayoutGridRowDirective, selector: "[fd-layout-grid-row], [fdLayoutGridRow]" }, { kind: "component", type: i9.MenuComponent, selector: "fd-menu", inputs: ["mobile", "disabled", "focusTrapped", "openOnHoverTime", "mobileConfig", "ariaLabel", "ariaLabelledby", "id"], outputs: ["activePath"] }, { kind: "component", type: i9.MenuItemComponent, selector: "li[fd-menu-item]", inputs: ["disabled", "itemId", "submenu"], outputs: ["onSelect"], exportAs: ["fd-menu-item"] }, { kind: "directive", type: i9.MenuInteractiveDirective, selector: "[fd-menu-interactive]" }, { kind: "directive", type: i9.MenuTitleDirective, selector: "[fd-menu-title]" }, { kind: "directive", type: i9.MenuTriggerDirective, selector: "[fdMenuTrigger]", inputs: ["fdMenuTrigger"] }, { kind: "component", type: i10.DialogComponent, selector: "fd-dialog", inputs: ["class", "dialogRef", "dialogConfig"] }, { kind: "component", type: i10.DialogBodyComponent, selector: "fd-dialog-body" }, { kind: "component", type: i10.DialogHeaderComponent, selector: "fd-dialog-header" }, { kind: "component", type: i11.TitleComponent, selector: "h1[fd-title], h2[fd-title], h3[fd-title], h4[fd-title], h5[fd-title], h6[fd-title]", inputs: ["headerSize", "wrap"], exportAs: ["fd-title"] }, { kind: "directive", type: i12.TemplateDirective, selector: "[fdTemplate]", inputs: ["fdTemplate"] }, { kind: "component", type: i13.MaskComponent, selector: "bsu-mask", inputs: ["size", "marginTop"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
206
211
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UiPicturesInfoComponent, decorators: [{
|
|
207
212
|
type: Component,
|
|
208
|
-
args: [{ selector: 'bsu-ui-pictures-info', providers: [UploadService], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container>\n <fd-toolbar *untilInView=\"el\" [transparent]=\"true\" [shouldOverflow]=\"true\">\n <fd-file-uploader\n #uploader\n [style.display]=\"'none'\"\n fd-toolbar-item\n [id]=\"id\"\n [name]=\"'pictures_' + id\"\n [placeholder]=\"'AttachPicture' | bbbTranslate\"\n [buttonLabel]=\"'AttachPicture' | bbbTranslate\"\n [buttonAriaLabel]=\"'AttachPicture' | bbbTranslate\"\n accept=\".png,.jpg,.bpm,.jpeg,.gif,.png,.tif\"\n [fileLimit]=\"maxFileCount === 0 ? 100 : maxFileCount\"\n [multiple]=\"maxFileCount === 0 || maxFileCount > 1\"\n (selectedFilesChanged)=\"onFileSelection($event)\"\n ></fd-file-uploader>\n <fdp-button\n [disabled]=\"!(value | canUploadFile: maxFileCount:(disable$ | async)!!:(readonly$ | async)!!)\"\n fd-toolbar-item\n glyph=\"attachment\"\n buttonType=\"transparent\"\n (click)=\"uploader.open()\"\n ></fdp-button>\n <fdp-button\n [disabled]=\"selectedIndex === -1 || (disableOrReadonly$ | async)!!\"\n class=\"delete\"\n fd-toolbar-item\n glyph=\"delete\"\n [buttonType]=\"'transparent'\"\n (click)=\"onDelete()\"\n ></fdp-button>\n <fdp-button fd-toolbar-item glyph=\"zoom-in\" [buttonType]=\"'transparent'\" (click)=\"onZoomIn()\"></fdp-button>\n <fdp-button fd-toolbar-item glyph=\"zoom-out\" [buttonType]=\"'transparent'\" (click)=\"onZoomOut()\"></fdp-button>\n <fdp-button\n fd-toolbar-item\n glyph=\"exitfullscreen\"\n [buttonType]=\"'transparent'\"\n (click)=\"onFillOriginal()\"\n ></fdp-button>\n <fdp-button\n fd-toolbar-item\n glyph=\"resize-horizontal\"\n [buttonType]=\"'transparent'\"\n (click)=\"onFillWidth()\"\n ></fdp-button>\n <fdp-button fd-toolbar-item glyph=\"resize\" [buttonType]=\"'transparent'\" (click)=\"onFillAll()\"></fdp-button>\n <fdp-split-menu-button\n [readonly]=\"(readonly$ | async)!!\"\n [disabled]=\"(readonly$ | async)!!\"\n *ngIf=\"value | canUploadFile: maxFileCount:(disable$ | async)!!:(readonly$ | async)!!\"\n fd-toolbar-item\n [menu]=\"menu1\"\n [buttonLabel]=\"'Scan' | bbbTranslate\"\n [title]=\"'Scan' | bbbTranslate\"\n type=\"transparent\"\n [menuTitle]=\"'Scan' | bbbTranslate\"\n (primaryButtonClick)=\"onScan()\"\n >\n </fdp-split-menu-button>\n <fdp-menu #menu1 xPosition=\"after\">\n <fdp-menu-item (itemSelect)=\"onAdvanceScan()\">{{ 'AdvancedScan' | bbbTranslate }}</fdp-menu-item>\n </fdp-menu>\n </fd-toolbar>\n</ng-container>\n<ng-container *ngIf=\"mediaData$ | async as mediaData\">\n <div *ngIf=\"mediaData.length > 0; else hashed\" dir=\"rtl\" class=\"gallery\" #gallery>\n <div class=\"column small-imgs-box\">\n <div\n class=\"pics\"\n (click)=\"onThumbnailClicked(i)\"\n *ngFor=\"let media of mediaData; let i = index\"\n [class.selected]=\"i === selectedIndex || (!selectedIndex && i === 0)\"\n >\n <img [src]=\"media.thumbnailUrl\" />\n </div>\n </div>\n <div\n class=\"column big-imgs-box\"\n [class.fill-width]=\"fillWidth\"\n [class.fill-all]=\"fillAll\"\n [class.fill-original]=\"fillOriginal\"\n [ngClass]=\"selectedZoom\"\n >\n <div class=\"pics\" [id]=\"i\" *ngFor=\"let media of mediaData; let i = index\">\n <img imgLazy [imgLazy]=\"media.mediaUrl\" [src]=\"media.mediaUrl\" />\n </div>\n </div>\n </div>\n\n <ng-template #hashed>\n <div class=\"hatchBackground\" style=\"display: flex; align-items: center; justify-content: center\">\n <fd-busy-indicator fd-toolbar-item [loading]=\"(uploading$ | async)!!\"></fd-busy-indicator>\n </div>\n </ng-template>\n</ng-container>\n", styles: [":host ::ng-deep .delete button{border-color:transparent!important;background-color:transparent!important}.hatchBackground{min-height:100px}.gallery{display:flex;width:100%;height:400px;column-gap:1px;background-color:var(--sapField_Background, #fff)}.gallery ::-webkit-scrollbar{width:7px;height:7px}.gallery ::-webkit-scrollbar-track{box-shadow:inset 0 0 5px gray;border-radius:4px}.gallery ::-webkit-scrollbar-thumb{background:rgb(85,84,84);border-radius:4px}.gallery ::-webkit-scrollbar-thumb:hover{background:#2c2b2b}.gallery .column{overflow-y:scroll;display:flex;flex-direction:column;row-gap:3%;align-items:center}.gallery .column .pics{width:100%;display:flex;justify-content:center}.gallery .column .pics img{border-radius:5px}.gallery .column.small-imgs-box{flex:10%}.gallery .column.big-imgs-box{flex:90%}.gallery .selected{background-color:#fff;border:3px solid #0294d8;padding:10px}.gallery .fill-width img{width:100%!important}.gallery .fill-all .pics{height:100%}.gallery .fill-all img{width:100%!important;height:100%!important;object-fit:fill!important}.gallery .fill-original img{width:unset;height:unset}.gallery .zoom1 img{zoom:1}.gallery .zoom1-5 img{zoom:1.5}.gallery .zoom2 img{zoom:2}\n"] }]
|
|
213
|
+
args: [{ selector: 'bsu-ui-pictures-info', providers: [UploadService], changeDetection: ChangeDetectionStrategy.OnPush, template: "<fd-file-uploader\r\n #uploader\r\n [style.display]=\"'none'\"\r\n [id]=\"id\"\r\n [name]=\"'pictures_' + id\"\r\n [placeholder]=\"'AttachPicture' | bbbTranslate\"\r\n [buttonLabel]=\"'AttachPicture' | bbbTranslate\"\r\n [buttonAriaLabel]=\"'AttachPicture' | bbbTranslate\"\r\n accept=\".png,.jpg,.bpm,.jpeg,.gif,.png,.tif\"\r\n [fileLimit]=\"maxFileCount === 0 ? 100 : maxFileCount\"\r\n [multiple]=\"maxFileCount === 0 || maxFileCount > 1\"\r\n (selectedFilesChanged)=\"onFileSelection($event)\"\r\n></fd-file-uploader>\r\n<!-- <ng-container *ngTemplateOutlet=\"toolbarTpl\"></ng-container>\r\n<ng-template #toolbarTpl let-inDialog=\"inDialog\">\r\n <fd-toolbar *untilInView=\"el\" [fdType]=\"'transparent'\" [clearBorder]=\"true\" [shouldOverflow]=\"true\">\r\n <fdp-button *ngIf=\"!inDialog\"\r\n [disabled]=\"!(value | canUploadFile: maxFileCount:(disable$ | async)!!:(readonly$ | async)!!)\"\r\n fd-toolbar-item glyph=\"attachment\" buttonType=\"transparent\" (click)=\"uploader.open()\"></fdp-button>\r\n <fdp-button [disabled]=\"selectedIndex === -1 || (disableOrReadonly$ | async)!!\" class=\"delete\" fd-toolbar-item\r\n glyph=\"delete\" [buttonType]=\"'transparent'\" (click)=\"onDelete()\"></fdp-button>\r\n <fdp-button fd-toolbar-item glyph=\"zoom-in\" [buttonType]=\"'transparent'\" (click)=\"onZoomIn()\"></fdp-button>\r\n <fdp-button fd-toolbar-item glyph=\"zoom-out\" [buttonType]=\"'transparent'\" (click)=\"onZoomOut()\"></fdp-button>\r\n <fdp-button fd-toolbar-item glyph=\"exitfullscreen\" [buttonType]=\"'transparent'\"\r\n (click)=\"onFillOriginal()\"></fdp-button>\r\n <fdp-button fd-toolbar-item glyph=\"resize-horizontal\" [buttonType]=\"'transparent'\"\r\n (click)=\"onFillWidth()\"></fdp-button>\r\n <fdp-button fd-toolbar-item glyph=\"resize\" [buttonType]=\"'transparent'\" (click)=\"onFillAll()\"></fdp-button>\r\n <ng-container *ngIf=\"!inDialog\">\r\n <fdp-split-menu-button fd-toolbar-item [readonly]=\"(readonly$ | async)!!\" [disabled]=\"(readonly$ | async)!!\"\r\n *ngIf=\"value | canUploadFile: maxFileCount:(disable$ | async)!!:(readonly$ | async)!!\" [menu]=\"menu1\"\r\n [buttonLabel]=\"'Scan' | bbbTranslate\" [title]=\"'Scan' | bbbTranslate\" type=\"transparent\"\r\n [menuTitle]=\"'Scan' | bbbTranslate\" (primaryButtonClick)=\"onScan()\">\r\n </fdp-split-menu-button>\r\n <fdp-menu #menu1 xPosition=\"after\">\r\n <fdp-menu-item (itemSelect)=\"onAdvanceScan()\">{{ 'AdvancedScan' | bbbTranslate }}</fdp-menu-item>\r\n </fdp-menu>\r\n </ng-container>\r\n </fd-toolbar>\r\n</ng-template> -->\r\n\r\n<!-- <ng-container *ngIf=\"mediaData$ | async as mediaData\">\r\n <div *ngIf=\"mediaData.length > 0; else hashed\" dir=\"rtl\" class=\"gallery\" #gallery>\r\n <div class=\"column small-imgs-box\">\r\n <div class=\"pics\" (click)=\"onThumbnailClicked(i)\" *ngFor=\"let media of mediaData; let i = index\"\r\n [class.selected]=\"i === selectedIndex || (!selectedIndex && i === 0)\">\r\n <img [src]=\"media.thumbnailUrl\" />\r\n </div>\r\n </div>\r\n <div class=\"column big-imgs-box\" [class.fill-width]=\"fillWidth\" [class.fill-all]=\"fillAll\"\r\n [class.fill-original]=\"fillOriginal\" [ngClass]=\"selectedZoom\">\r\n <div class=\"pics\" [id]=\"i\" *ngFor=\"let media of mediaData; let i = index\">\r\n <img imgLazy [imgLazy]=\"media.mediaUrl\" [src]=\"media.mediaUrl\" />\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <ng-template #hashed>\r\n <div class=\"hatchBackground\" style=\"display: flex; align-items: center; justify-content: center\"></div>\r\n </ng-template>\r\n</ng-container> -->\r\n\r\n<ng-container *ngTemplateOutlet=\"layoutGridTpl\"></ng-container>\r\n<ng-template #layoutGridTpl let-inDialog=\"inDialog\">\r\n <fd-layout-grid>\r\n <div fdLayoutGridRow *ngIf=\"mediaData$ | async as mediaData\">\r\n <div\r\n *ngFor=\"let media of mediaData; let i = index\"\r\n [fdLayoutGridCol]=\"6\"\r\n [colMd]=\"3\"\r\n [colLg]=\"2\"\r\n [colXl]=\"2\"\r\n (click)=\"onMedaiClick(media, i)\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n cardTpl;\r\n context: { $implicit: media, mediaData: this.mediaData, inDialog: this.inDialog, index: i }\r\n \"\r\n ></ng-container>\r\n </div>\r\n <div *ngIf=\"!inDialog\" [fdLayoutGridCol]=\"6\" [colMd]=\"3\" [colLg]=\"2\" [colXl]=\"2\">\r\n <ng-container *ngTemplateOutlet=\"newFile\"></ng-container>\r\n </div>\r\n </div>\r\n </fd-layout-grid>\r\n</ng-template>\r\n<ng-template #cardTpl let-media let-mediaData=\"mediaData\" let-inDialog=\"inDialog\" let-index=\"index\">\r\n <fd-card class=\"media\" [class.inDialog]=\"inDialog\">\r\n <fd-card-content style=\"text-align: center; height: 120px\">\r\n <img imgLazy [imgLazy]=\"media.thumbnailUrl\" [src]=\"media.thumbnailUrl\" />\r\n </fd-card-content>\r\n <fd-card-footer *ngIf=\"!inDialog\">\r\n <button\r\n glyph=\"message-information\"\r\n *fdCardFooterActionItem\r\n fd-button\r\n fdType=\"transparent\"\r\n [fd-inline-help]=\"media.title\"\r\n [triggers]=\"['click']\"\r\n [closeOnOutsideClick]=\"true\"\r\n ></button>\r\n <button\r\n glyph=\"full-screen\"\r\n *fdCardFooterActionItem\r\n fd-button\r\n fdType=\"transparent\"\r\n (click)=\"onFullscreen(media, mediaData)\"\r\n ></button>\r\n <button\r\n glyph=\"delete\"\r\n *fdCardFooterActionItem\r\n fd-button\r\n fdType=\"transparent\"\r\n (click)=\"onDelete(index)\"\r\n ></button>\r\n </fd-card-footer>\r\n </fd-card>\r\n</ng-template>\r\n<ng-template #newFile>\r\n <div style=\"position: relative; height: 100%\">\r\n <fd-card>\r\n <fd-card-content style=\"display: flex; align-items: center; justify-content: center; min-height: 120px\">\r\n <button\r\n fd-button\r\n glyph=\"add-photo\"\r\n fdType=\"transparent\"\r\n [label]=\"'AttachFile' | bbbTranslate\"\r\n (click)=\"uploader.open()\"\r\n ></button>\r\n </fd-card-content>\r\n\r\n <fd-card-footer style=\"border-top: 1px solid #ccc\">\r\n <button fd-button [glyph]=\"'overflow'\" [fdType]=\"'transparent'\" [fdMenuTrigger]=\"menu\"></button>\r\n <fd-menu #menu>\r\n <li fd-menu-item (click)=\"onScan()\">\r\n <a fd-menu-interactive>\r\n <span fd-menu-title>{{ 'Scan' | bbbTranslate }}</span>\r\n </a>\r\n </li>\r\n <li fd-menu-item (click)=\"onAdvanceScan()\">\r\n <a fd-menu-interactive>\r\n <span fd-menu-title>{{ 'AdvancedScan' | bbbTranslate }}</span>\r\n </a>\r\n </li>\r\n </fd-menu>\r\n </fd-card-footer>\r\n </fd-card>\r\n <bsu-mask *ngIf=\"(uploadingState$ | async)?.uploading === true\"></bsu-mask>\r\n </div>\r\n</ng-template>\r\n<ng-template #dialogTemplate let-dialog let-dialogConfig=\"dialogConfig\">\r\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\" #dialogTpl class=\"vertical\">\r\n <fd-dialog-header>\r\n <ng-template fdTemplate=\"header\">\r\n <div fd-bar-left>\r\n <fd-bar-element>\r\n <h1 fd-title>{{ Setting.ControlFieldCaptionTranslated }}</h1>\r\n </fd-bar-element>\r\n </div>\r\n <div fd-bar-right>\r\n <fd-button-bar\r\n *ngIf=\"!dialogConfig.fullscreen\"\r\n ariaLabel=\"Fit image size\"\r\n [glyph]=\"'resize'\"\r\n [fdType]=\"fillWidth ? 'emphasized' : 'transparent'\"\r\n (click)=\"fillWidth = !fillWidth\"\r\n ></fd-button-bar>\r\n <fd-button-bar ariaLabel=\"close\" glyph=\"decline\" (click)=\"dialog.close()\"></fd-button-bar>\r\n </div>\r\n </ng-template>\r\n </fd-dialog-header>\r\n <fd-dialog-body #fdbody>\r\n <div #gallery class=\"gallery inDialog\" style=\"flex: 1\">\r\n <div\r\n *ngFor=\"let media of dialog.data.mediaData; let i = index\"\r\n class=\"column big-imgs-box\"\r\n [class.fill-width]=\"fillWidth\"\r\n [class.fill-all]=\"fillAll\"\r\n [class.fill-original]=\"fillOriginal\"\r\n [ngClass]=\"selectedZoom\"\r\n >\r\n <div class=\"pics\" [id]=\"i\">\r\n <bsu-mask></bsu-mask>\r\n <img imgLazy [imgLazy]=\"media.mediaUrl\" [src]=\"media.mediaUrl\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"(deviceSize$ | async) !== 's'\" class=\"thumbnail\" style=\"flex-shrink: 1\">\r\n <ng-cotainer *ngTemplateOutlet=\"layoutGridTpl; context: { inDialog: true }\"></ng-cotainer>\r\n </div>\r\n </fd-dialog-body>\r\n </fd-dialog>\r\n</ng-template>\r\n", styles: [":host{position:relative}:host ::ng-deep .delete button{border-color:transparent!important;background-color:transparent!important}fd-toolbar{width:100%}fd-dialog-footer{justify-content:center}.hatchBackground{min-height:100px}.gallery{display:flex;width:100%;height:400px;column-gap:1px;background-color:var(--sapField_Background, #fff)}.gallery ::-webkit-scrollbar{width:7px;height:7px}.gallery ::-webkit-scrollbar-track{box-shadow:inset 0 0 5px gray;border-radius:4px}.gallery ::-webkit-scrollbar-thumb{background:rgb(85,84,84);border-radius:4px}.gallery ::-webkit-scrollbar-thumb:hover{background:#2c2b2b}.gallery .column{overflow-y:scroll;display:flex;flex-direction:column;row-gap:3%;align-items:center}.gallery .column .pics{width:100%;display:flex;justify-content:center}.gallery .column .pics img{border-radius:5px}.gallery .column.small-imgs-box{flex:10%}.gallery .column.big-imgs-box{flex:90%}.gallery .selected{background-color:#fff;border:3px solid #0294d8;padding:10px}.gallery .fill-width img{width:100%!important}.gallery .fill-all .pics{height:100%}.gallery .fill-all img{width:100%!important;height:100%!important;object-fit:fill!important}.gallery .fill-original img{width:unset;height:unset}.gallery .zoom1 img{zoom:1}.gallery .zoom1-5 img{zoom:1.5}.gallery .zoom2 img{zoom:2}fd-dialog .gallery{overflow:auto}fd-dialog .gallery .column{overflow:initial}fd-dialog .gallery .pics{position:relative}fd-dialog fd-dialog-body{display:flex}fd-dialog.horizontal fd-dialog-body{flex-direction:column}fd-dialog.horizontal .gallery{flex-direction:row}fd-dialog.horizontal .thumbnail{border-top:1px solid #ccc;overflow-x:auto}fd-dialog.vertical fd-dialog-body{flex-direction:row-reverse}fd-dialog.vertical .gallery{flex-direction:column;height:100%}fd-dialog.vertical .thumbnail{border-left:1px solid #ccc;height:100%;width:200px;overflow-y:auto}fd-dialog.vertical .thumbnail ::ng-deep .fd-row>div{width:100%;min-width:100%}fd-card.media fd-card-footer button{border:none}fd-card.inDialog fd-card-header{padding-top:5px;padding-bottom:5px}.fd-col{min-width:165px}\n"] }]
|
|
209
214
|
}], propDecorators: { value: [{
|
|
210
215
|
type: Input
|
|
211
216
|
}], gallery: [{
|
|
212
217
|
type: ViewChild,
|
|
213
218
|
args: ['gallery']
|
|
219
|
+
}], dialogTemplate: [{
|
|
220
|
+
type: ViewChild,
|
|
221
|
+
args: ['dialogTemplate', { read: TemplateRef }]
|
|
214
222
|
}] } });
|
|
215
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktcGljdHVyZXMtaW5mby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1zYXAtdWkvc3JjL2xpYi91aS1waWN0dXJlcy1pbmZvL3VpLXBpY3R1cmVzLWluZm8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvdWktcGljdHVyZXMtaW5mby91aS1waWN0dXJlcy1pbmZvLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUFxQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEgsT0FBTyxFQUFFLGVBQWUsRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUlwRSxPQUFPLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pHLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7Ozs7O0FBU3pFLE1BQU0sT0FBTyx1QkFBd0IsU0FBUSw0QkFBNEI7SUFQekU7O1FBb0JJLGlCQUFZLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUduQyxvQkFBZSxHQUFHLElBQUksZUFBZSxDQUFVLEVBQUUsQ0FBQyxDQUFDO1FBR25ELGtCQUFhLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFJbkIsaUJBQVksR0FBa0MsT0FBTyxDQUFDO1FBSTlDLHFCQUFnQixHQUFHLElBQUksZUFBZSxDQUFTLENBQUMsQ0FBQyxDQUFDO0tBMk43RDtJQXpORyxRQUFRO1FBQ0osSUFBSSxDQUFDLFVB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QyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFUyxjQUFjLENBQ3BCLEtBT0c7UUFFSCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUN2QixDQUFDOztvSEFyUFEsdUJBQXVCO3dHQUF2Qix1QkFBdUIsMkVBSHJCLENBQUMsYUFBYSxDQUFDLHFKQ2I5QixncUlBK0ZBOzJGRC9FYSx1QkFBdUI7a0JBUG5DLFNBQVM7K0JBQ0ksc0JBQXNCLGFBR3JCLENBQUMsYUFBYSxDQUFDLG1CQUNULHVCQUF1QixDQUFDLE1BQU07OEJBR3RDLEtBQUs7c0JBQWIsS0FBSztnQkFRZ0IsT0FBTztzQkFBNUIsU0FBUzt1QkFBQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGZpbHRlciwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBNZWRpYSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvcGxhdGZvcm0nO1xuaW1wb3J0IHsgQ29udGVudERlbnNpdHkgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUnO1xuXG5pbXBvcnQgeyBCYXJzYUFwaSwgVXBsb2FkU2VydmljZSwgZ2V0RGV2aWNlSXNNb2JpbGUsIEZpbGVzVmFsaWRhdGlvbkhlbHBlciB9IGZyb20gJ2JhcnNhLW5vdmluLXJheS1jb3JlJztcbmltcG9ydCB7IERldmljZUluZm9GaWVsZEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9kZXZpY2UtaW5mby1maWVsZC1iYXNlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdic3UtdWktcGljdHVyZXMtaW5mbycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3VpLXBpY3R1cmVzLWluZm8uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3VpLXBpY3R1cmVzLWluZm8uY29tcG9uZW50LnNjc3MnXSxcbiAgICBwcm92aWRlcnM6IFtVcGxvYWRTZXJ2aWNlXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBVaVBpY3R1cmVzSW5mb0NvbXBvbmVudCBleHRlbmRzIERldmljZUluZm9GaWVsZEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgQElucHV0KCkgdmFsdWU6IHtcbiAgICAgICAgSWQ6IHN0cmluZztcbiAgICAgICAgRmlsZUlkOiBzdHJpbmc7XG4gICAgICAgIEZpbGVOYW1lOiBzdHJpbmc7XG4gICAgICAgIFdpZHRoOiBzdHJpbmc7XG4gICAgICAgIEhlaWdodDogc3RyaW5nO1xuICAgICAgICBTaXplOiBzdHJpbmc7XG4gICAgfVtdO1xuICAgIEBWaWV3Q2hpbGQoJ2dhbGxlcnknKSBnYWxsZXJ5ITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gICAgdXBsb2FkU3RhdGUkOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gICAgcHJvZ3Jlc3MkOiBPYnNlcnZhYmxlPG51bWJlcj47XG4gICAgdXBsb2FkaW5nJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgICBjYW5jZWxhdGlvbiQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIGNvbnRlbnREZW5zaXR5JDogT2JzZXJ2YWJsZTxDb250ZW50RGVuc2l0eT47XG4gICAgZmlsZXM6IEZpbGVbXTtcbiAgICBtZWRpYURhdGFTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1lZGlhW10+KFtdKTtcbiAgICBtZWRpYURhdGEkOiBPYnNlcnZhYmxlPE1lZGlhW10+O1xuICAgIGlzTW9iaWxlOiBhbnk7XG4gICAgc2VsZWN0ZWRJbmRleCA9IC0xO1xuICAgIGZpbGxXaWR0aDogYm9vbGVhbjtcbiAgICBmaWxsQWxsOiBib29sZWFuO1xuICAgIGZpbGxPcmlnaW5hbDogYm9vbGVhbjtcbiAgICBzZWxlY3RlZFpvb206ICd6b29tMScgfCAnem9vbTEtNScgfCAnem9vbTInID0gJ3pvb20xJztcbiAgICBmaWxlc1ZhbGlkYXRpb25IZWxwZXI6IEZpbGVzVmFsaWRhdGlvbkhlbHBlcjtcbiAgICBtYXhGaWxlQ291bnQ6IG51bWJlcjtcbiAgICBmaWxlQ291bnQkOiBPYnNlcnZhYmxlPG51bWJlcj47XG4gICAgcHJpdmF0ZSBfZmlsZUNvdW50U291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZmlsZUNvdW50JCA9IHRoaXMuX2ZpbGVDb3VudFNvdXJjZS5hc09ic2VydmFibGUoKTtcbiAgICAgICAgdGhpcy5tZWRpYURhdGEkID0gdGhpcy5tZWRpYURhdGFTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIHRoaXMuaXNNb2JpbGUgPSBnZXREZXZpY2VJc01vYmlsZSgpO1xuICAgICAgICB0aGlzLnVwbG9hZGluZyQgPSB0aGlzLl91cGxvYWRTZXJ2aWNlLnVwbG9hZGluZyQ7XG4gICAgICAgIHRoaXMucHJvZ3Jlc3MkID0gdGhpcy5fdXBsb2FkU2VydmljZS5wcm9ncmVzcyQ7XG4gICAgICAgIHRoaXMudXBsb2FkU3RhdGUkID0gdGhpcy5fdXBsb2FkU2VydmljZS51cGxvYWRTdGF0ZSQ7XG4gICAgICAgIHRoaXMudmFsdWUkLnN1YnNjcmliZSgodmFsdWUpID0+IHRoaXMuX3NldEZpbGVDb3VudCh2YWx1ZSkpO1xuXG4gICAgICAgIHRoaXMuZmlsZXNWYWxpZGF0aW9uSGVscGVyID0gbmV3IEZpbGVzVmFsaWRhdGlvbkhlbHBlcihcbiAgICAgICAgICAgIHRoaXMuU2V0dGluZy5NYXhQaWN0dXJlQ291bnQsXG4gICAgICAgICAgICB0aGlzLlNldHRpbmcuTWF4RmlsZVNpemVLYixcbiAgICAgICAgICAgIHRoaXMuU2V0dGluZy5NYXhUb3RhbEZpbGVTaXplS2JcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5tYXhGaWxlQ291bnQgPSB0aGlzLmZpbGVzVmFsaWRhdGlvbkhlbHBlci5tYXhGaWxlQ291bnQ7XG5cbiAgICAgICAgdGhpcy5fcHJlcGFyZUdhbGxlcnkodGhpcy52YWx1ZSk7XG4gICAgICAgIHRoaXMuY29udGV4dC5vbih7XG4gICAgICAgICAgICBEaXNwbGF5SW1hZ2VzOiB0aGlzLl9kaXNwbGF5SW1hZ2VzLmJpbmQodGhpcylcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgICAgICB0aGlzLmNvbnRleHQudW4oJ0Rpc3BsYXlJbWFnZXMnLCB0aGlzLl9kaXNwbGF5SW1hZ2VzKTtcbiAgICB9XG4gICAgb25UaHVtYm5haWxDbGlja2VkKGltZ0luZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gaW1nSW5kZXg7XG4gICAgICAgIHRoaXMuZ2FsbGVyeS5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tpZD1cIicgKyBTdHJpbmcoaW1nSW5kZXgpICsgJ1wiXScpPy5zY3JvbGxJbnRvVmlldyh0cnVlKTtcbiAgICB9XG5cbiAgICBvbkRlbGV0ZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCEodGhpcy5zZWxlY3RlZEluZGV4ID49IDApKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRNZWRpYSA9IHRoaXMudmFsdWVbdGhpcy5zZWxlY3RlZEluZGV4XTtcbiAgICAgICAgdGhpcy5fZGVsZXRlTWVkaWEoc2VsZWN0ZWRNZWRpYSk7XG4gICAgfVxuICAgIG9uU2NhbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2NhbkhlbHBlcihmYWxzZSk7XG4gICAgfVxuXG4gICAgb25BZHZhbmNlU2NhbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2NhbkhlbHBlcih0cnVlKTtcbiAgICB9XG5cbiAgICBvblpvb21JbigpOiB2b2lkIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLnNlbGVjdGVkWm9vbSkge1xuICAgICAgICAgICAgY2FzZSAnem9vbTEnOlxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRab29tID0gJ3pvb20xLTUnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnem9vbTEtNSc6XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFpvb20gPSAnem9vbTInO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25ab29tT3V0KCk6IHZvaWQge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuc2VsZWN0ZWRab29tKSB7XG4gICAgICAgICAgICBjYXNlICd6b29tMic6XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFpvb20gPSAnem9vbTEtNSc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd6b29tMS01JzpcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkWm9vbSA9ICd6b29tMSc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkZpbGxPcmlnaW5hbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5maWxsV2lkdGggPSBmYWxzZTtcbiAgICAgICAgdGhpcy5maWxsQWxsID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZmlsbE9yaWdpbmFsID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBvbkZpbGxXaWR0aCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5maWxsV2lkdGggPSB0cnVlO1xuICAgICAgICB0aGlzLmZpbGxBbGwgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5maWxsT3JpZ2luYWwgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBvbkZpbGxBbGwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZmlsbEFsbCA9IHRydWU7XG4gICAgICAgIHRoaXMuZmlsbE9yaWdpbmFsID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZmlsbFdpZHRoID0gZmFsc2U7XG4gICAgfVxuICAgIG9uRmlsZVNlbGVjdGlvbihzZWxlY3RlZEZpbGVzOiBGaWxlW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5maWxlc1ZhbGlkYXRpb25IZWxwZXJcbiAgICAgICAgICAgIC52YWxpZGF0ZUZpbGVzKHNlbGVjdGVkRmlsZXMpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKGZpbGVzKSA9PiBmaWxlcy5sZW5ndGggPiAwKSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKGZpbGVzKSA9PiB0aGlzLnVwbG9hZFRvU2VydmVyKGZpbGVzKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9kZWxldGVNZWRpYShzZWxlY3RlZE1lZGlhKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgSWQsIEZpbGVJZCB9ID0gc2VsZWN0ZWRNZWRpYTtcbiAgICAgICAgbGV0IHNlbGVjdGVkSWQgPSBJZDtcbiAgICAgICAgaWYgKCFzZWxlY3RlZElkKSB7XG4gICAgICAgICAgICBzZWxlY3RlZElkID0gRmlsZUlkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkUGljSW5kZXggPSB0aGlzLnZhbHVlLmZpbmRJbmRleCgoYykgPT4gYy5JZCA9PT0gc2VsZWN0ZWRJZCB8fCBjLkZpbGVJZCA9PT0gc2VsZWN0ZWRJZCk7XG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlLmZpbHRlcigoYykgPT4gYy5JZCAhPT0gc2VsZWN0ZWRJZCAmJiBjLkZpbGVJZCAhPT0gc2VsZWN0ZWRJZCk7XG4gICAgICAgIHRoaXMuX3ByZXBhcmVHYWxsZXJ5KHRoaXMudmFsdWUpO1xuICAgICAgICBpZiAodGhpcy52YWx1ZSAmJiB0aGlzLnZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSAtMTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbnRleHQuZmlyZUV2ZW50KCdDaGFuZ2UnLCB7XG4gICAgICAgICAgICBGaWxlSWQ6IHNlbGVjdGVkSWQsXG4gICAgICAgICAgICBJc0RlbGV0ZWQ6IHRydWUsXG4gICAgICAgICAgICBPbGRJbmRleDogc2VsZWN0ZWRQaWNJbmRleFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9zY2FuSGVscGVyKGlzQWR2YW5jZWQpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2Nhbm5lciA9IG5ldyBCYXJzYUFwaS5Db21tb24uQmFyc2FTY2FubmVyKHtcbiAgICAgICAgICAgIFNjYW5uZXJBZ2VudFBhcmFtczogdGhpcy5jb250ZXh0LlNjYW5uZXJBZ2VudFBhcmFtc1xuICAgICAgICB9KTtcblxuICAgICAgICBzY2FubmVyLm9uKEJhcnNhQXBpLkNvbW1vbi5CYXJzYVNjYW5uZXIuRXZlbnRFbnVtLlNjYW5SZXN1bHRSZWFkeSwgdGhpcy5fb25TY2FuUmVzdWx0X1JlYWR5LCB0aGlzKTtcbiAgICAgICAgc2Nhbm5lci5vbihCYXJzYUFwaS5Db21tb24uQmFyc2FTY2FubmVyLkV2ZW50RW51bS5TY2FuRXJyb3IsIHRoaXMuX29uU2Nhbl9FcnJvciwgdGhpcyk7XG4gICAgICAgIHNjYW5uZXIub24oQmFyc2FBcGkuQ29tbW9uLkJhcnNhU2Nhbm5lci5FdmVudEVudW0uU2hvd1dhcnJuaW5nLCB0aGlzLl9vblNjYW5fV2Fycm5pbmcsIHRoaXMpO1xuICAgICAgICBCYXJzYUFwaS5VbC5Mb2FkaW5nTWFzay5NYXNrKHRoaXMuZWwubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIHNjYW5uZXIuU2Nhbihpc0FkdmFuY2VkKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX29uU2NhblJlc3VsdF9SZWFkeShjb250ZW50cyk6IHZvaWQge1xuICAgICAgICB0aGlzLl91cGxvYWRTY2FuKGNvbnRlbnRzKTtcbiAgICAgICAgQmFyc2FBcGkuVWwuTG9hZGluZ01hc2suVW5tYXNrKHRoaXMuZWwubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9vblNjYW5fV2Fycm5pbmcodGV4dCk6IHZvaWQge1xuICAgICAgICBpZiAodHlwZW9mIHRleHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBCYXJzYUFwaS5VbC5Nc2dCb3guRXJyb3IodGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgQmFyc2FBcGkuVWwuTG9hZGluZ01hc2suVW5tYXNrKHRoaXMuZWwubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9vblNjYW5fRXJyb3IoZXJyKTogdm9pZCB7XG4gICAgICAgIGlmICh0eXBlb2YgZXJyID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgQmFyc2FBcGkuVWwuTXNnQm94LkVycm9yKGVycik7XG4gICAgICAgIH1cblxuICAgICAgICBCYXJzYUFwaS5VbC5Mb2FkaW5nTWFzay5Vbm1hc2sodGhpcy5lbC5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX3VwbG9hZFNjYW4oY29udGVudHMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNvbnRlbnRzICYmIGNvbnRlbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnRlbnRzLmZvckVhY2goKGNvbnRlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBCYXJzYUFwaS5Db21tb24uQmFyc2FTY2FubmVyLlVwbG9hZFNjYW5Db250ZW50KHRoaXMuY29udGV4dC5GaWVsZERlZklkLCBjb250ZW50LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIChmaWxlT2JqKSB0aGlzLl9vblVwbG9hZFdpbl9OZXdGaWxlVXBsb2FkKG51bGwsIGZpbGVPYmopO1xuICAgICAgICAgICAgICAgICAgICAvLyBkZWJ1Z2dlcjtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgQmFyc2FBcGkuVWwuTXNnQm94Lldhcm5pbmcodGhpcy5fYmJiUGlwZS50cmFuc2Zvcm0oJ1NjYW5SZXN1bHROb3RGb3VuZCcpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBfcHJlcGFyZUdhbGxlcnkodmFsdWU6IGFueVtdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRhdGE6IGFueVtdID0gW107XG4gICAgICAgIHZhbHVlLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1lZGlhVXJsID0gdGhpcy5fcGljRmllbGRTcmMudHJhbnNmb3JtKGl0ZW0uRmlsZUlkLCAnQmFyc2FQaWN0dXJlLkZ1bGwnLCBudWxsKTtcbiAgICAgICAgICAgIGNvbnN0IHRodW1ibmFpbFVybCA9IHRoaXMuX3BpY0ZpZWxkU3JjLnRyYW5zZm9ybShpdGVtLkZpbGVJZCwgJ0JhcnNhUGljdHVyZS5UaHVtYm5haWwnLCBudWxsKTtcbiAgICAgICAgICAgIGRhdGEucHVzaCh7XG4gICAgICAgICAgICAgICAgSWQ6IGl0ZW0uSWQsXG4gICAgICAgICAgICAgICAgRmlsZUlkOiBpdGVtLkZpbGVJZCxcbiAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS5GaWxlTmFtZSxcbiAgICAgICAgICAgICAgICBtZWRpYVR5cGU6ICdpbWFnZScsXG4gICAgICAgICAgICAgICAgbGFiZWw6IGl0ZW0uRmlsZU5hbWUsXG4gICAgICAgICAgICAgICAgbWVkaWFVcmwsXG4gICAgICAgICAgICAgICAgdGh1bWJuYWlsVXJsLFxuICAgICAgICAgICAgICAgIGFsdDogJ0ZhaWxlZCB0byBsb2FkICcgKyBtZWRpYVVybFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm1lZGlhRGF0YVNvdXJjZS5uZXh0KGRhdGEpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCB1cGxvYWRUb1NlcnZlcihmaWxlczogRmlsZVtdKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgZmlsZXMuZm9yRWFjaCgoZmlsZSkgPT4ge1xuICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKCd1bmljRmlsZU5hbWUnLCAneCcgKyBCYXJzYUFwaS5Db21tb24uVXRpbC5HZXROZXdNZXRhR3VpZCgpICsgJzs7OycgKyBmaWxlLm5hbWUpO1xuICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdmaWxlJywgZmlsZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl91cGxvYWRTZXJ2aWNlLnVwbG9hZChmb3JtRGF0YSwgdGhpcy5TZXR0aW5nLkNvbnRyb2xGaWVsZERlZklkKS5waXBlKFxuICAgICAgICAgICAgdGFwKChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWUocmVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4gb2YoZXJyKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX3NldEZpbGVDb3VudCh2YWx1ZSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9maWxlQ291bnRTb3VyY2UubmV4dCh2YWx1ZS5maWx0ZXIoKGMpID0+ICFjLklzRGVsZXRlZCkubGVuZ3RoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgdXBkYXRlVmFsdWUobmV3VmFsOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLnZhbHVlID0gWy4uLnRoaXMudmFsdWUsIC4uLm5ld1ZhbF07XG4gICAgICAgIHRoaXMuX3ByZXBhcmVHYWxsZXJ5KHRoaXMudmFsdWUpO1xuICAgICAgICB0aGlzLmZpcmVDb250ZXh0RXZlbnQoJ0NoYW5nZScsIG5ld1ZhbCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9kaXNwbGF5SW1hZ2VzKFxuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgSWQ6IHN0cmluZztcbiAgICAgICAgICAgIEZpbGVJZDogc3RyaW5nO1xuICAgICAgICAgICAgRmlsZU5hbWU6IHN0cmluZztcbiAgICAgICAgICAgIFdpZHRoOiBzdHJpbmc7XG4gICAgICAgICAgICBIZWlnaHQ6IHN0cmluZztcbiAgICAgICAgICAgIFNpemU6IHN0cmluZztcbiAgICAgICAgfVtdXG4gICAgKTogdm9pZCB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG59XG4iLCI8bmctY29udGFpbmVyPlxuICAgIDxmZC10b29sYmFyICp1bnRpbEluVmlldz1cImVsXCIgW3RyYW5zcGFyZW50XT1cInRydWVcIiBbc2hvdWxkT3ZlcmZsb3ddPVwidHJ1ZVwiPlxuICAgICAgICA8ZmQtZmlsZS11cGxvYWRlclxuICAgICAgICAgICAgI3VwbG9hZGVyXG4gICAgICAgICAgICBbc3R5bGUuZGlzcGxheV09XCInbm9uZSdcIlxuICAgICAgICAgICAgZmQtdG9vbGJhci1pdGVtXG4gICAgICAgICAgICBbaWRdPVwiaWRcIlxuICAgICAgICAgICAgW25hbWVdPVwiJ3BpY3R1cmVzXycgKyBpZFwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0F0dGFjaFBpY3R1cmUnIHwgYmJiVHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFtidXR0b25MYWJlbF09XCInQXR0YWNoUGljdHVyZScgfCBiYmJUcmFuc2xhdGVcIlxuICAgICAgICAgICAgW2J1dHRvbkFyaWFMYWJlbF09XCInQXR0YWNoUGljdHVyZScgfCBiYmJUcmFuc2xhdGVcIlxuICAgICAgICAgICAgYWNjZXB0PVwiLnBuZywuanBnLC5icG0sLmpwZWcsLmdpZiwucG5nLC50aWZcIlxuICAgICAgICAgICAgW2ZpbGVMaW1pdF09XCJtYXhGaWxlQ291bnQgPT09IDAgPyAxMDAgOiBtYXhGaWxlQ291bnRcIlxuICAgICAgICAgICAgW211bHRpcGxlXT1cIm1heEZpbGVDb3VudCA9PT0gMCB8fCBtYXhGaWxlQ291bnQgPiAxXCJcbiAgICAgICAgICAgIChzZWxlY3RlZEZpbGVzQ2hhbmdlZCk9XCJvbkZpbGVTZWxlY3Rpb24oJGV2ZW50KVwiXG4gICAgICAgID48L2ZkLWZpbGUtdXBsb2FkZXI+XG4gICAgICAgIDxmZHAtYnV0dG9uXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiISh2YWx1ZSB8IGNhblVwbG9hZEZpbGU6IG1heEZpbGVDb3VudDooZGlzYWJsZSQgfCBhc3luYykhIToocmVhZG9ubHkkIHwgYXN5bmMpISEpXCJcbiAgICAgICAgICAgIGZkLXRvb2xiYXItaXRlbVxuICAgICAgICAgICAgZ2x5cGg9XCJhdHRhY2htZW50XCJcbiAgICAgICAgICAgIGJ1dHRvblR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAoY2xpY2spPVwidXBsb2FkZXIub3BlbigpXCJcbiAgICAgICAgPjwvZmRwLWJ1dHRvbj5cbiAgICAgICAgPGZkcC1idXR0b25cbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzZWxlY3RlZEluZGV4ID09PSAtMSB8fCAoZGlzYWJsZU9yUmVhZG9ubHkkIHwgYXN5bmMpISFcIlxuICAgICAgICAgICAgY2xhc3M9XCJkZWxldGVcIlxuICAgICAgICAgICAgZmQtdG9vbGJhci1pdGVtXG4gICAgICAgICAgICBnbHlwaD1cImRlbGV0ZVwiXG4gICAgICAgICAgICBbYnV0dG9uVHlwZV09XCIndHJhbnNwYXJlbnQnXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkRlbGV0ZSgpXCJcbiAgICAgICAgPjwvZmRwLWJ1dHRvbj5cbiAgICAgICAgPGZkcC1idXR0b24gZmQtdG9vbGJhci1pdGVtIGdseXBoPVwiem9vbS1pblwiIFtidXR0b25UeXBlXT1cIid0cmFuc3BhcmVudCdcIiAoY2xpY2spPVwib25ab29tSW4oKVwiPjwvZmRwLWJ1dHRvbj5cbiAgICAgICAgPGZkcC1idXR0b24gZmQtdG9vbGJhci1pdGVtIGdseXBoPVwiem9vbS1vdXRcIiBbYnV0dG9uVHlwZV09XCIndHJhbnNwYXJlbnQnXCIgKGNsaWNrKT1cIm9uWm9vbU91dCgpXCI+PC9mZHAtYnV0dG9uPlxuICAgICAgICA8ZmRwLWJ1dHRvblxuICAgICAgICAgICAgZmQtdG9vbGJhci1pdGVtXG4gICAgICAgICAgICBnbHlwaD1cImV4aXRmdWxsc2NyZWVuXCJcbiAgICAgICAgICAgIFtidXR0b25UeXBlXT1cIid0cmFuc3BhcmVudCdcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uRmlsbE9yaWdpbmFsKClcIlxuICAgICAgICA+PC9mZHAtYnV0dG9uPlxuICAgICAgICA8ZmRwLWJ1dHRvblxuICAgICAgICAgICAgZmQtdG9vbGJhci1pdGVtXG4gICAgICAgICAgICBnbHlwaD1cInJlc2l6ZS1ob3Jpem9udGFsXCJcbiAgICAgICAgICAgIFtidXR0b25UeXBlXT1cIid0cmFuc3BhcmVudCdcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uRmlsbFdpZHRoKClcIlxuICAgICAgICA+PC9mZHAtYnV0dG9uPlxuICAgICAgICA8ZmRwLWJ1dHRvbiBmZC10b29sYmFyLWl0ZW0gZ2x5cGg9XCJyZXNpemVcIiBbYnV0dG9uVHlwZV09XCIndHJhbnNwYXJlbnQnXCIgKGNsaWNrKT1cIm9uRmlsbEFsbCgpXCI+PC9mZHAtYnV0dG9uPlxuICAgICAgICA8ZmRwLXNwbGl0LW1lbnUtYnV0dG9uXG4gICAgICAgICAgICBbcmVhZG9ubHldPVwiKHJlYWRvbmx5JCB8IGFzeW5jKSEhXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIocmVhZG9ubHkkIHwgYXN5bmMpISFcIlxuICAgICAgICAgICAgKm5nSWY9XCJ2YWx1ZSB8IGNhblVwbG9hZEZpbGU6IG1heEZpbGVDb3VudDooZGlzYWJsZSQgfCBhc3luYykhIToocmVhZG9ubHkkIHwgYXN5bmMpISFcIlxuICAgICAgICAgICAgZmQtdG9vbGJhci1pdGVtXG4gICAgICAgICAgICBbbWVudV09XCJtZW51MVwiXG4gICAgICAgICAgICBbYnV0dG9uTGFiZWxdPVwiJ1NjYW4nIHwgYmJiVHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCInU2NhbicgfCBiYmJUcmFuc2xhdGVcIlxuICAgICAgICAgICAgdHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgIFttZW51VGl0bGVdPVwiJ1NjYW4nIHwgYmJiVHJhbnNsYXRlXCJcbiAgICAgICAgICAgIChwcmltYXJ5QnV0dG9uQ2xpY2spPVwib25TY2FuKClcIlxuICAgICAgICA+XG4gICAgICAgIDwvZmRwLXNwbGl0LW1lbnUtYnV0dG9uPlxuICAgICAgICA8ZmRwLW1lbnUgI21lbnUxIHhQb3NpdGlvbj1cImFmdGVyXCI+XG4gICAgICAgICAgICA8ZmRwLW1lbnUtaXRlbSAoaXRlbVNlbGVjdCk9XCJvbkFkdmFuY2VTY2FuKClcIj57eyAnQWR2YW5jZWRTY2FuJyB8IGJiYlRyYW5zbGF0ZSB9fTwvZmRwLW1lbnUtaXRlbT5cbiAgICAgICAgPC9mZHAtbWVudT5cbiAgICA8L2ZkLXRvb2xiYXI+XG48L25nLWNvbnRhaW5lcj5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJtZWRpYURhdGEkIHwgYXN5bmMgYXMgbWVkaWFEYXRhXCI+XG4gICAgPGRpdiAqbmdJZj1cIm1lZGlhRGF0YS5sZW5ndGggPiAwOyBlbHNlIGhhc2hlZFwiIGRpcj1cInJ0bFwiIGNsYXNzPVwiZ2FsbGVyeVwiICNnYWxsZXJ5PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uIHNtYWxsLWltZ3MtYm94XCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJwaWNzXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25UaHVtYm5haWxDbGlja2VkKGkpXCJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgbWVkaWEgb2YgbWVkaWFEYXRhOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwiaSA9PT0gc2VsZWN0ZWRJbmRleCB8fCAoIXNlbGVjdGVkSW5kZXggJiYgaSA9PT0gMClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJtZWRpYS50aHVtYm5haWxVcmxcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImNvbHVtbiBiaWctaW1ncy1ib3hcIlxuICAgICAgICAgICAgW2NsYXNzLmZpbGwtd2lkdGhdPVwiZmlsbFdpZHRoXCJcbiAgICAgICAgICAgIFtjbGFzcy5maWxsLWFsbF09XCJmaWxsQWxsXCJcbiAgICAgICAgICAgIFtjbGFzcy5maWxsLW9yaWdpbmFsXT1cImZpbGxPcmlnaW5hbFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJzZWxlY3RlZFpvb21cIlxuICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGljc1wiIFtpZF09XCJpXCIgKm5nRm9yPVwibGV0IG1lZGlhIG9mIG1lZGlhRGF0YTsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgIDxpbWcgaW1nTGF6eSBbaW1nTGF6eV09XCJtZWRpYS5tZWRpYVVybFwiIFtzcmNdPVwibWVkaWEubWVkaWFVcmxcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPG5nLXRlbXBsYXRlICNoYXNoZWQ+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJoYXRjaEJhY2tncm91bmRcIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyXCI+XG4gICAgICAgICAgICA8ZmQtYnVzeS1pbmRpY2F0b3IgZmQtdG9vbGJhci1pdGVtIFtsb2FkaW5nXT1cIih1cGxvYWRpbmckIHwgYXN5bmMpISFcIj48L2ZkLWJ1c3ktaW5kaWNhdG9yPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuPC9uZy1jb250YWluZXI+XG4iXX0=
|
|
223
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktcGljdHVyZXMtaW5mby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1zYXAtdWkvc3JjL2xpYi91aS1waWN0dXJlcy1pbmZvL3VpLXBpY3R1cmVzLWluZm8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvdWktcGljdHVyZXMtaW5mby91aS1waWN0dXJlcy1pbmZvLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULEtBQUssRUFHTCxTQUFTLEVBQ1QsV0FBVyxFQUNkLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJdkUsT0FBTyxFQUNILFFBQVEsRUFDUixhQUFhLEVBQ2IsaUJBQWlCLEVBQ2pCLHFCQUFxQixFQUV4QixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUFTekUsTUFBTSxPQUFPLHVCQUF3QixTQUFRLDRCQUE0QjtJQVB6RTs7UUFvQkksaUJBQVksR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBR25DLG9CQUFlLEdBQUcsSUFBSSxlQUFlLENBQVUsRUFBRSxDQUFDLENBQUM7UUFHbkQsa0JBQWEsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUluQixpQkFBWSxHQUFrQyxPQUFPLENBQUM7UUFLOUMscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBQVMsQ0FBQyxDQUFDLENBQUM7S0EyTjdEO0lBek5HLFFBQVE7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QUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVTLGNBQWMsQ0FDcEIsS0FPRztRQUVILElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLENBQUM7O29IQXRQUSx1QkFBdUI7d0dBQXZCLHVCQUF1QiwyRUFIckIsQ0FBQyxhQUFhLENBQUMsNE1BYVcsV0FBVyxvREN6Q3BELHM3VEFrTUE7MkZEbkthLHVCQUF1QjtrQkFQbkMsU0FBUzsrQkFDSSxzQkFBc0IsYUFHckIsQ0FBQyxhQUFhLENBQUMsbUJBQ1QsdUJBQXVCLENBQUMsTUFBTTs4QkFHdEMsS0FBSztzQkFBYixLQUFLO2dCQVFnQixPQUFPO3NCQUE1QixTQUFTO3VCQUFDLFNBQVM7Z0JBQ2dDLGNBQWM7c0JBQWpFLFNBQVM7dUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgRWxlbWVudFJlZixcclxuICAgIElucHV0LFxyXG4gICAgT25EZXN0cm95LFxyXG4gICAgT25Jbml0LFxyXG4gICAgVmlld0NoaWxkLFxyXG4gICAgVGVtcGxhdGVSZWZcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCBjb25jYXRNYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBNZWRpYSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvcGxhdGZvcm0nO1xyXG5pbXBvcnQgeyBDb250ZW50RGVuc2l0eSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZSc7XHJcblxyXG5pbXBvcnQge1xyXG4gICAgQmFyc2FBcGksXHJcbiAgICBVcGxvYWRTZXJ2aWNlLFxyXG4gICAgZ2V0RGV2aWNlSXNNb2JpbGUsXHJcbiAgICBGaWxlc1ZhbGlkYXRpb25IZWxwZXIsXHJcbiAgICBJVXBsb2FkaW5nU3RhdGVcclxufSBmcm9tICdiYXJzYS1ub3Zpbi1yYXktY29yZSc7XHJcbmltcG9ydCB7IERldmljZUluZm9GaWVsZEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9kZXZpY2UtaW5mby1maWVsZC1iYXNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdic3UtdWktcGljdHVyZXMtaW5mbycsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vdWktcGljdHVyZXMtaW5mby5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi91aS1waWN0dXJlcy1pbmZvLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBwcm92aWRlcnM6IFtVcGxvYWRTZXJ2aWNlXSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVaVBpY3R1cmVzSW5mb0NvbXBvbmVudCBleHRlbmRzIERldmljZUluZm9GaWVsZEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgICBASW5wdXQoKSB2YWx1ZToge1xyXG4gICAgICAgIElkOiBzdHJpbmc7XHJcbiAgICAgICAgRmlsZUlkOiBzdHJpbmc7XHJcbiAgICAgICAgRmlsZU5hbWU6IHN0cmluZztcclxuICAgICAgICBXaWR0aDogc3RyaW5nO1xyXG4gICAgICAgIEhlaWdodDogc3RyaW5nO1xyXG4gICAgICAgIFNpemU6IHN0cmluZztcclxuICAgIH1bXTtcclxuICAgIEBWaWV3Q2hpbGQoJ2dhbGxlcnknKSBnYWxsZXJ5ITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XHJcbiAgICBAVmlld0NoaWxkKCdkaWFsb2dUZW1wbGF0ZScsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgZGlhbG9nVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gICAgdXBsb2FkaW5nU3RhdGUkOiBPYnNlcnZhYmxlPElVcGxvYWRpbmdTdGF0ZT47XHJcbiAgICBjYW5jZWxhdGlvbiQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gICAgY29udGVudERlbnNpdHkkOiBPYnNlcnZhYmxlPENvbnRlbnREZW5zaXR5PjtcclxuICAgIGZpbGVzOiBGaWxlW107XHJcbiAgICBtZWRpYURhdGFTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1lZGlhW10+KFtdKTtcclxuICAgIG1lZGlhRGF0YSQ6IE9ic2VydmFibGU8TWVkaWFbXT47XHJcbiAgICBpc01vYmlsZTogYW55O1xyXG4gICAgc2VsZWN0ZWRJbmRleCA9IC0xO1xyXG4gICAgZmlsbFdpZHRoOiBib29sZWFuO1xyXG4gICAgZmlsbEFsbDogYm9vbGVhbjtcclxuICAgIGZpbGxPcmlnaW5hbDogYm9vbGVhbjtcclxuICAgIHNlbGVjdGVkWm9vbTogJ3pvb20xJyB8ICd6b29tMS01JyB8ICd6b29tMicgPSAnem9vbTEnO1xyXG4gICAgZmlsZXNWYWxpZGF0aW9uSGVscGVyOiBGaWxlc1ZhbGlkYXRpb25IZWxwZXI7XHJcbiAgICBtYXhGaWxlQ291bnQ6IG51bWJlcjtcclxuICAgIGZpbGVDb3VudCQ6IE9ic2VydmFibGU8bnVtYmVyPjtcclxuXHJcbiAgICBwcml2YXRlIF9maWxlQ291bnRTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XHJcblxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5maWxlQ291bnQkID0gdGhpcy5fZmlsZUNvdW50U291cmNlLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgICAgIHRoaXMubWVkaWFEYXRhJCA9IHRoaXMubWVkaWFEYXRhU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICAgICAgdGhpcy5pc01vYmlsZSA9IGdldERldmljZUlzTW9iaWxlKCk7XHJcbiAgICAgICAgdGhpcy51cGxvYWRpbmdTdGF0ZSQgPSB0aGlzLl91cGxvYWRTZXJ2aWNlLnVwbG9hZGluZ1N0YXRlJDtcclxuICAgICAgICB0aGlzLnZhbHVlJC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB0aGlzLl9zZXRGaWxlQ291bnQodmFsdWUpKTtcclxuXHJcbiAgICAgICAgdGhpcy5maWxlc1ZhbGlkYXRpb25IZWxwZXIgPSBuZXcgRmlsZXNWYWxpZGF0aW9uSGVscGVyKFxyXG4gICAgICAgICAgICB0aGlzLlNldHRpbmcuTWF4UGljdHVyZUNvdW50LFxyXG4gICAgICAgICAgICB0aGlzLlNldHRpbmcuTWF4RmlsZVNpemVLYixcclxuICAgICAgICAgICAgdGhpcy5TZXR0aW5nLk1heFRvdGFsRmlsZVNpemVLYlxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5tYXhGaWxlQ291bnQgPSB0aGlzLmZpbGVzVmFsaWRhdGlvbkhlbHBlci5tYXhGaWxlQ291bnQ7XHJcblxyXG4gICAgICAgIHRoaXMuX3ByZXBhcmVHYWxsZXJ5KHRoaXMudmFsdWUpO1xyXG4gICAgICAgIHRoaXMuY29udGV4dC5vbih7XHJcbiAgICAgICAgICAgIERpc3BsYXlJbWFnZXM6IHRoaXMuX2Rpc3BsYXlJbWFnZXMuYmluZCh0aGlzKVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcclxuICAgICAgICB0aGlzLmNvbnRleHQudW4oJ0Rpc3BsYXlJbWFnZXMnLCB0aGlzLl9kaXNwbGF5SW1hZ2VzKTtcclxuICAgIH1cclxuICAgIG9uRnVsbHNjcmVlbihtZWRpYSwgbWVkaWFEYXRhKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZGlhbG9nQ29uZmlnID0ge1xyXG4gICAgICAgICAgICBkYXRhOiB7IG1lZGlhLCBtZWRpYURhdGEgfSxcclxuICAgICAgICAgICAgZXNjS2V5Q2xvc2VhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgZnVsbFNjcmVlbjogdHJ1ZSxcclxuICAgICAgICAgICAgdmVydGljYWxQYWRkaW5nOiBmYWxzZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5fZGlhbG9nU2VydmljZS5vcGVuKHRoaXMuZGlhbG9nVGVtcGxhdGUsIGRpYWxvZ0NvbmZpZyk7XHJcbiAgICB9XHJcbiAgICBvbk1lZGFpQ2xpY2sobWVkaWEsIGluZGV4KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5nYWxsZXJ5Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignW2lkPVwiJyArIFN0cmluZyhpbmRleCkgKyAnXCJdJyk/LnNjcm9sbEludG9WaWV3KHRydWUpO1xyXG4gICAgfVxyXG4gICAgb25UaHVtYm5haWxDbGlja2VkKGltZ0luZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSBpbWdJbmRleDtcclxuICAgICAgICB0aGlzLmdhbGxlcnkubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdbaWQ9XCInICsgU3RyaW5nKGltZ0luZGV4KSArICdcIl0nKT8uc2Nyb2xsSW50b1ZpZXcodHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25EZWxldGUoaW5kZXgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZE1lZGlhID0gdGhpcy52YWx1ZVtpbmRleF07XHJcbiAgICAgICAgdGhpcy5fZGVsZXRlTWVkaWEoc2VsZWN0ZWRNZWRpYSk7XHJcbiAgICB9XHJcbiAgICBvblNjYW4oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fc2NhbkhlbHBlcihmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25BZHZhbmNlU2NhbigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9zY2FuSGVscGVyKHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uWm9vbUluKCk6IHZvaWQge1xyXG4gICAgICAgIHN3aXRjaCAodGhpcy5zZWxlY3RlZFpvb20pIHtcclxuICAgICAgICAgICAgY2FzZSAnem9vbTEnOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFpvb20gPSAnem9vbTEtNSc7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnem9vbTEtNSc6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkWm9vbSA9ICd6b29tMic7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25ab29tT3V0KCk6IHZvaWQge1xyXG4gICAgICAgIHN3aXRjaCAodGhpcy5zZWxlY3RlZFpvb20pIHtcclxuICAgICAgICAgICAgY2FzZSAnem9vbTInOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFpvb20gPSAnem9vbTEtNSc7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnem9vbTEtNSc6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkWm9vbSA9ICd6b29tMSc7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25GaWxsT3JpZ2luYWwoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5maWxsV2lkdGggPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmZpbGxBbGwgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmZpbGxPcmlnaW5hbCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgb25GaWxsV2lkdGgoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5maWxsV2lkdGggPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZmlsbEFsbCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZmlsbE9yaWdpbmFsID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgb25GaWxsQWxsKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZmlsbEFsbCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5maWxsT3JpZ2luYWwgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmZpbGxXaWR0aCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgb25GaWxlU2VsZWN0aW9uKGZpbGVzOiBGaWxlW10pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmZpbGVzVmFsaWRhdGlvbkhlbHBlci52YWxpZGF0ZUZpbGVzKGZpbGVzKTtcclxuICAgICAgICB0aGlzLnVwbG9hZFRvU2VydmVyKGZpbGVzKS5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSkuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX2RlbGV0ZU1lZGlhKHNlbGVjdGVkTWVkaWEpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB7IElkLCBGaWxlSWQgfSA9IHNlbGVjdGVkTWVkaWE7XHJcbiAgICAgICAgbGV0IHNlbGVjdGVkSWQgPSBJZDtcclxuICAgICAgICBpZiAoIXNlbGVjdGVkSWQpIHtcclxuICAgICAgICAgICAgc2VsZWN0ZWRJZCA9IEZpbGVJZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRQaWNJbmRleCA9IHRoaXMudmFsdWUuZmluZEluZGV4KChjKSA9PiBjLklkID09PSBzZWxlY3RlZElkIHx8IGMuRmlsZUlkID09PSBzZWxlY3RlZElkKTtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZS5maWx0ZXIoKGMpID0+IGMuSWQgIT09IHNlbGVjdGVkSWQgJiYgYy5GaWxlSWQgIT09IHNlbGVjdGVkSWQpO1xyXG4gICAgICAgIHRoaXMuX3ByZXBhcmVHYWxsZXJ5KHRoaXMudmFsdWUpO1xyXG4gICAgICAgIGlmICh0aGlzLnZhbHVlICYmIHRoaXMudmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSAwO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNvbnRleHQuZmlyZUV2ZW50KCdDaGFuZ2UnLCB7XHJcbiAgICAgICAgICAgIEZpbGVJZDogc2VsZWN0ZWRJZCxcclxuICAgICAgICAgICAgSXNEZWxldGVkOiB0cnVlLFxyXG4gICAgICAgICAgICBPbGRJbmRleDogc2VsZWN0ZWRQaWNJbmRleFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF9zY2FuSGVscGVyKGlzQWR2YW5jZWQpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBzY2FubmVyID0gbmV3IEJhcnNhQXBpLkNvbW1vbi5CYXJzYVNjYW5uZXIoe1xyXG4gICAgICAgICAgICBTY2FubmVyQWdlbnRQYXJhbXM6IHRoaXMuY29udGV4dC5TY2FubmVyQWdlbnRQYXJhbXNcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgc2Nhbm5lci5vbihCYXJzYUFwaS5Db21tb24uQmFyc2FTY2FubmVyLkV2ZW50RW51bS5TY2FuUmVzdWx0UmVhZHksIHRoaXMuX29uU2NhblJlc3VsdF9SZWFkeSwgdGhpcyk7XHJcbiAgICAgICAgc2Nhbm5lci5vbihCYXJzYUFwaS5Db21tb24uQmFyc2FTY2FubmVyLkV2ZW50RW51bS5TY2FuRXJyb3IsIHRoaXMuX29uU2Nhbl9FcnJvciwgdGhpcyk7XHJcbiAgICAgICAgc2Nhbm5lci5vbihCYXJzYUFwaS5Db21tb24uQmFyc2FTY2FubmVyLkV2ZW50RW51bS5TaG93V2Fycm5pbmcsIHRoaXMuX29uU2Nhbl9XYXJybmluZywgdGhpcyk7XHJcbiAgICAgICAgQmFyc2FBcGkuVWwuTG9hZGluZ01hc2suTWFzayh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgICAgIHNjYW5uZXIuU2Nhbihpc0FkdmFuY2VkKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX29uU2NhblJlc3VsdF9SZWFkeShjb250ZW50cyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3VwbG9hZFNjYW4oY29udGVudHMpO1xyXG4gICAgICAgIEJhcnNhQXBpLlVsLkxvYWRpbmdNYXNrLlVubWFzayh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfb25TY2FuX1dhcnJuaW5nKHRleHQpOiB2b2lkIHtcclxuICAgICAgICBpZiAodHlwZW9mIHRleHQgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIEJhcnNhQXBpLlVsLk1zZ0JveC5FcnJvcih0ZXh0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgQmFyc2FBcGkuVWwuTG9hZGluZ01hc2suVW5tYXNrKHRoaXMuZWwubmF0aXZlRWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9vblNjYW5fRXJyb3IoZXJyKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBlcnIgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIEJhcnNhQXBpLlVsLk1zZ0JveC5FcnJvcihlcnIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgQmFyc2FBcGkuVWwuTG9hZGluZ01hc2suVW5tYXNrKHRoaXMuZWwubmF0aXZlRWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF91cGxvYWRTY2FuKGNvbnRlbnRzKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGNvbnRlbnRzICYmIGNvbnRlbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29udGVudHMuZm9yRWFjaCgoY29udGVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgQmFyc2FBcGkuQ29tbW9uLkJhcnNhU2Nhbm5lci5VcGxvYWRTY2FuQ29udGVudCh0aGlzLmNvbnRleHQuRmllbGREZWZJZCwgY29udGVudCwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIChmaWxlT2JqKSB0aGlzLl9vblVwbG9hZFdpbl9OZXdGaWxlVXBsb2FkKG51bGwsIGZpbGVPYmopO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGRlYnVnZ2VyO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIEJhcnNhQXBpLlVsLk1zZ0JveC5XYXJuaW5nKHRoaXMuX2JiYlBpcGUudHJhbnNmb3JtKCdTY2FuUmVzdWx0Tm90Rm91bmQnKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfcHJlcGFyZUdhbGxlcnkodmFsdWU6IGFueVtdKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZGF0YTogYW55W10gPSBbXTtcclxuICAgICAgICB2YWx1ZS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1lZGlhVXJsID0gdGhpcy5fcGljRmllbGRTcmMudHJhbnNmb3JtKGl0ZW0uRmlsZUlkLCAnQmFyc2FQaWN0dXJlLkZ1bGwnLCBudWxsKTtcclxuICAgICAgICAgICAgY29uc3QgdGh1bWJuYWlsVXJsID0gdGhpcy5fcGljRmllbGRTcmMudHJhbnNmb3JtKGl0ZW0uRmlsZUlkLCAnQmFyc2FQaWN0dXJlLlRodW1ibmFpbCcsIG51bGwpO1xyXG4gICAgICAgICAgICBkYXRhLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgSWQ6IGl0ZW0uSWQsXHJcbiAgICAgICAgICAgICAgICBGaWxlSWQ6IGl0ZW0uRmlsZUlkLFxyXG4gICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0uRmlsZU5hbWUsXHJcbiAgICAgICAgICAgICAgICBtZWRpYVR5cGU6ICdpbWFnZScsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogaXRlbS5GaWxlTmFtZSxcclxuICAgICAgICAgICAgICAgIG1lZGlhVXJsLFxyXG4gICAgICAgICAgICAgICAgdGh1bWJuYWlsVXJsLFxyXG4gICAgICAgICAgICAgICAgYWx0OiAnRmFpbGVkIHRvIGxvYWQgJyArIG1lZGlhVXJsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMubWVkaWFEYXRhU291cmNlLm5leHQoZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHVwbG9hZFRvU2VydmVyKGZpbGVzOiBGaWxlW10pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl91cGxvYWRTZXJ2aWNlLmNvbXByZXNzRmlsZXMkKGZpbGVzKS5waXBlKFxyXG4gICAgICAgICAgICBjb25jYXRNYXAoKGZvcm1EYXRhKSA9PlxyXG4gICAgICAgICAgICAgICAgdGhpcy5fdXBsb2FkU2VydmljZS51cGxvYWQoZm9ybURhdGEsIHRoaXMuU2V0dGluZy5Db250cm9sRmllbGREZWZJZCkucGlwZShcclxuICAgICAgICAgICAgICAgICAgICB0YXAoKHJlcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlKHJlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnIpID0+IG9mKGVycikpXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfc2V0RmlsZUNvdW50KHZhbHVlKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fZmlsZUNvdW50U291cmNlLm5leHQodmFsdWUuZmlsdGVyKChjKSA9PiAhYy5Jc0RlbGV0ZWQpLmxlbmd0aCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHVwZGF0ZVZhbHVlKG5ld1ZhbDogYW55W10pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnZhbHVlID0gWy4uLnRoaXMudmFsdWUsIC4uLm5ld1ZhbF07XHJcbiAgICAgICAgdGhpcy5fcHJlcGFyZUdhbGxlcnkodGhpcy52YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5maXJlQ29udGV4dEV2ZW50KCdDaGFuZ2UnLCBuZXdWYWwpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfZGlzcGxheUltYWdlcyhcclxuICAgICAgICB2YWx1ZToge1xyXG4gICAgICAgICAgICBJZDogc3RyaW5nO1xyXG4gICAgICAgICAgICBGaWxlSWQ6IHN0cmluZztcclxuICAgICAgICAgICAgRmlsZU5hbWU6IHN0cmluZztcclxuICAgICAgICAgICAgV2lkdGg6IHN0cmluZztcclxuICAgICAgICAgICAgSGVpZ2h0OiBzdHJpbmc7XHJcbiAgICAgICAgICAgIFNpemU6IHN0cmluZztcclxuICAgICAgICB9W11cclxuICAgICk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICAgIH1cclxufVxyXG4iLCI8ZmQtZmlsZS11cGxvYWRlclxyXG4gICAgI3VwbG9hZGVyXHJcbiAgICBbc3R5bGUuZGlzcGxheV09XCInbm9uZSdcIlxyXG4gICAgW2lkXT1cImlkXCJcclxuICAgIFtuYW1lXT1cIidwaWN0dXJlc18nICsgaWRcIlxyXG4gICAgW3BsYWNlaG9sZGVyXT1cIidBdHRhY2hQaWN0dXJlJyB8IGJiYlRyYW5zbGF0ZVwiXHJcbiAgICBbYnV0dG9uTGFiZWxdPVwiJ0F0dGFjaFBpY3R1cmUnIHwgYmJiVHJhbnNsYXRlXCJcclxuICAgIFtidXR0b25BcmlhTGFiZWxdPVwiJ0F0dGFjaFBpY3R1cmUnIHwgYmJiVHJhbnNsYXRlXCJcclxuICAgIGFjY2VwdD1cIi5wbmcsLmpwZywuYnBtLC5qcGVnLC5naWYsLnBuZywudGlmXCJcclxuICAgIFtmaWxlTGltaXRdPVwibWF4RmlsZUNvdW50ID09PSAwID8gMTAwIDogbWF4RmlsZUNvdW50XCJcclxuICAgIFttdWx0aXBsZV09XCJtYXhGaWxlQ291bnQgPT09IDAgfHwgbWF4RmlsZUNvdW50ID4gMVwiXHJcbiAgICAoc2VsZWN0ZWRGaWxlc0NoYW5nZWQpPVwib25GaWxlU2VsZWN0aW9uKCRldmVudClcIlxyXG4+PC9mZC1maWxlLXVwbG9hZGVyPlxyXG48IS0tIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0b29sYmFyVHBsXCI+PC9uZy1jb250YWluZXI+XHJcbjxuZy10ZW1wbGF0ZSAjdG9vbGJhclRwbCBsZXQtaW5EaWFsb2c9XCJpbkRpYWxvZ1wiPlxyXG4gICAgPGZkLXRvb2xiYXIgKnVudGlsSW5WaWV3PVwiZWxcIiBbZmRUeXBlXT1cIid0cmFuc3BhcmVudCdcIiBbY2xlYXJCb3JkZXJdPVwidHJ1ZVwiIFtzaG91bGRPdmVyZmxvd109XCJ0cnVlXCI+XHJcbiAgICAgICAgPGZkcC1idXR0b24gKm5nSWY9XCIhaW5EaWFsb2dcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiISh2YWx1ZSB8IGNhblVwbG9hZEZpbGU6IG1heEZpbGVDb3VudDooZGlzYWJsZSQgfCBhc3luYykhIToocmVhZG9ubHkkIHwgYXN5bmMpISEpXCJcclxuICAgICAgICAgICAgZmQtdG9vbGJhci1pdGVtIGdseXBoPVwiYXR0YWNobWVudFwiIGJ1dHRvblR5cGU9XCJ0cmFuc3BhcmVudFwiIChjbGljayk9XCJ1cGxvYWRlci5vcGVuKClcIj48L2ZkcC1idXR0b24+XHJcbiAgICAgICAgPGZkcC1idXR0b24gW2Rpc2FibGVkXT1cInNlbGVjdGVkSW5kZXggPT09IC0xIHx8IChkaXNhYmxlT3JSZWFkb25seSQgfCBhc3luYykhIVwiIGNsYXNzPVwiZGVsZXRlXCIgZmQtdG9vbGJhci1pdGVtXHJcbiAgICAgICAgICAgIGdseXBoPVwiZGVsZXRlXCIgW2J1dHRvblR5cGVdPVwiJ3RyYW5zcGFyZW50J1wiIChjbGljayk9XCJvbkRlbGV0ZSgpXCI+PC9mZHAtYnV0dG9uPlxyXG4gICAgICAgIDxmZHAtYnV0dG9uIGZkLXRvb2xiYXItaXRlbSBnbHlwaD1cInpvb20taW5cIiBbYnV0dG9uVHlwZV09XCIndHJhbnNwYXJlbnQnXCIgKGNsaWNrKT1cIm9uWm9vbUluKClcIj48L2ZkcC1idXR0b24+XHJcbiAgICAgICAgPGZkcC1idXR0b24gZmQtdG9vbGJhci1pdGVtIGdseXBoPVwiem9vbS1vdXRcIiBbYnV0dG9uVHlwZV09XCIndHJhbnNwYXJlbnQnXCIgKGNsaWNrKT1cIm9uWm9vbU91dCgpXCI+PC9mZHAtYnV0dG9uPlxyXG4gICAgICAgIDxmZHAtYnV0dG9uIGZkLXRvb2xiYXItaXRlbSBnbHlwaD1cImV4aXRmdWxsc2NyZWVuXCIgW2J1dHRvblR5cGVdPVwiJ3RyYW5zcGFyZW50J1wiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkZpbGxPcmlnaW5hbCgpXCI+PC9mZHAtYnV0dG9uPlxyXG4gICAgICAgIDxmZHAtYnV0dG9uIGZkLXRvb2xiYXItaXRlbSBnbHlwaD1cInJlc2l6ZS1ob3Jpem9udGFsXCIgW2J1dHRvblR5cGVdPVwiJ3RyYW5zcGFyZW50J1wiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkZpbGxXaWR0aCgpXCI+PC9mZHAtYnV0dG9uPlxyXG4gICAgICAgIDxmZHAtYnV0dG9uIGZkLXRvb2xiYXItaXRlbSBnbHlwaD1cInJlc2l6ZVwiIFtidXR0b25UeXBlXT1cIid0cmFuc3BhcmVudCdcIiAoY2xpY2spPVwib25GaWxsQWxsKClcIj48L2ZkcC1idXR0b24+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpbkRpYWxvZ1wiPlxyXG4gICAgICAgICAgICA8ZmRwLXNwbGl0LW1lbnUtYnV0dG9uIGZkLXRvb2xiYXItaXRlbSBbcmVhZG9ubHldPVwiKHJlYWRvbmx5JCB8IGFzeW5jKSEhXCIgW2Rpc2FibGVkXT1cIihyZWFkb25seSQgfCBhc3luYykhIVwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInZhbHVlIHwgY2FuVXBsb2FkRmlsZTogbWF4RmlsZUNvdW50OihkaXNhYmxlJCB8IGFzeW5jKSEhOihyZWFkb25seSQgfCBhc3luYykhIVwiIFttZW51XT1cIm1lbnUxXCJcclxuICAgICAgICAgICAgICAgIFtidXR0b25MYWJlbF09XCInU2NhbicgfCBiYmJUcmFuc2xhdGVcIiBbdGl0bGVdPVwiJ1NjYW4nIHwgYmJiVHJhbnNsYXRlXCIgdHlwZT1cInRyYW5zcGFyZW50XCJcclxuICAgICAgICAgICAgICAgIFttZW51VGl0bGVdPVwiJ1NjYW4nIHwgYmJiVHJhbnNsYXRlXCIgKHByaW1hcnlCdXR0b25DbGljayk9XCJvblNjYW4oKVwiPlxyXG4gICAgICAgICAgICA8L2ZkcC1zcGxpdC1tZW51LWJ1dHRvbj5cclxuICAgICAgICAgICAgPGZkcC1tZW51ICNtZW51MSB4UG9zaXRpb249XCJhZnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGZkcC1tZW51LWl0ZW0gKGl0ZW1TZWxlY3QpPVwib25BZHZhbmNlU2NhbigpXCI+e3sgJ0FkdmFuY2VkU2NhbicgfCBiYmJUcmFuc2xhdGUgfX08L2ZkcC1tZW51LWl0ZW0+XHJcbiAgICAgICAgICAgIDwvZmRwLW1lbnU+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2ZkLXRvb2xiYXI+XHJcbjwvbmctdGVtcGxhdGU+IC0tPlxyXG5cclxuPCEtLSA8bmctY29udGFpbmVyICpuZ0lmPVwibWVkaWFEYXRhJCB8IGFzeW5jIGFzIG1lZGlhRGF0YVwiPlxyXG4gICAgPGRpdiAqbmdJZj1cIm1lZGlhRGF0YS5sZW5ndGggPiAwOyBlbHNlIGhhc2hlZFwiIGRpcj1cInJ0bFwiIGNsYXNzPVwiZ2FsbGVyeVwiICNnYWxsZXJ5PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW4gc21hbGwtaW1ncy1ib3hcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBpY3NcIiAoY2xpY2spPVwib25UaHVtYm5haWxDbGlja2VkKGkpXCIgKm5nRm9yPVwibGV0IG1lZGlhIG9mIG1lZGlhRGF0YTsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICAgICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwiaSA9PT0gc2VsZWN0ZWRJbmRleCB8fCAoIXNlbGVjdGVkSW5kZXggJiYgaSA9PT0gMClcIj5cclxuICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJtZWRpYS50aHVtYm5haWxVcmxcIiAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uIGJpZy1pbWdzLWJveFwiIFtjbGFzcy5maWxsLXdpZHRoXT1cImZpbGxXaWR0aFwiIFtjbGFzcy5maWxsLWFsbF09XCJmaWxsQWxsXCJcclxuICAgICAgICAgICAgW2NsYXNzLmZpbGwtb3JpZ2luYWxdPVwiZmlsbE9yaWdpbmFsXCIgW25nQ2xhc3NdPVwic2VsZWN0ZWRab29tXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwaWNzXCIgW2lkXT1cImlcIiAqbmdGb3I9XCJsZXQgbWVkaWEgb2YgbWVkaWFEYXRhOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICA8aW1nIGltZ0xhenkgW2ltZ0xhenldPVwibWVkaWEubWVkaWFVcmxcIiBbc3JjXT1cIm1lZGlhLm1lZGlhVXJsXCIgLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgI2hhc2hlZD5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaGF0Y2hCYWNrZ3JvdW5kXCIgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlclwiPjwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuPC9uZy1jb250YWluZXI+IC0tPlxyXG5cclxuPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxheW91dEdyaWRUcGxcIj48L25nLWNvbnRhaW5lcj5cclxuPG5nLXRlbXBsYXRlICNsYXlvdXRHcmlkVHBsIGxldC1pbkRpYWxvZz1cImluRGlhbG9nXCI+XHJcbiAgICA8ZmQtbGF5b3V0LWdyaWQ+XHJcbiAgICAgICAgPGRpdiBmZExheW91dEdyaWRSb3cgKm5nSWY9XCJtZWRpYURhdGEkIHwgYXN5bmMgYXMgbWVkaWFEYXRhXCI+XHJcbiAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBtZWRpYSBvZiBtZWRpYURhdGE7IGxldCBpID0gaW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgW2ZkTGF5b3V0R3JpZENvbF09XCI2XCJcclxuICAgICAgICAgICAgICAgIFtjb2xNZF09XCIzXCJcclxuICAgICAgICAgICAgICAgIFtjb2xMZ109XCIyXCJcclxuICAgICAgICAgICAgICAgIFtjb2xYbF09XCIyXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbk1lZGFpQ2xpY2sobWVkaWEsIGkpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhcmRUcGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiBtZWRpYSwgbWVkaWFEYXRhOiB0aGlzLm1lZGlhRGF0YSwgaW5EaWFsb2c6IHRoaXMuaW5EaWFsb2csIGluZGV4OiBpIH1cclxuICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFpbkRpYWxvZ1wiIFtmZExheW91dEdyaWRDb2xdPVwiNlwiIFtjb2xNZF09XCIzXCIgW2NvbExnXT1cIjJcIiBbY29sWGxdPVwiMlwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm5ld0ZpbGVcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2ZkLWxheW91dC1ncmlkPlxyXG48L25nLXRlbXBsYXRlPlxyXG48bmctdGVtcGxhdGUgI2NhcmRUcGwgbGV0LW1lZGlhIGxldC1tZWRpYURhdGE9XCJtZWRpYURhdGFcIiBsZXQtaW5EaWFsb2c9XCJpbkRpYWxvZ1wiIGxldC1pbmRleD1cImluZGV4XCI+XHJcbiAgICA8ZmQtY2FyZCBjbGFzcz1cIm1lZGlhXCIgW2NsYXNzLmluRGlhbG9nXT1cImluRGlhbG9nXCI+XHJcbiAgICAgICAgPGZkLWNhcmQtY29udGVudCBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjsgaGVpZ2h0OiAxMjBweFwiPlxyXG4gICAgICAgICAgICA8aW1nIGltZ0xhenkgW2ltZ0xhenldPVwibWVkaWEudGh1bWJuYWlsVXJsXCIgW3NyY109XCJtZWRpYS50aHVtYm5haWxVcmxcIiAvPlxyXG4gICAgICAgIDwvZmQtY2FyZC1jb250ZW50PlxyXG4gICAgICAgIDxmZC1jYXJkLWZvb3RlciAqbmdJZj1cIiFpbkRpYWxvZ1wiPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBnbHlwaD1cIm1lc3NhZ2UtaW5mb3JtYXRpb25cIlxyXG4gICAgICAgICAgICAgICAgKmZkQ2FyZEZvb3RlckFjdGlvbkl0ZW1cclxuICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxyXG4gICAgICAgICAgICAgICAgW2ZkLWlubGluZS1oZWxwXT1cIm1lZGlhLnRpdGxlXCJcclxuICAgICAgICAgICAgICAgIFt0cmlnZ2Vyc109XCJbJ2NsaWNrJ11cIlxyXG4gICAgICAgICAgICAgICAgW2Nsb3NlT25PdXRzaWRlQ2xpY2tdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgID48L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgZ2x5cGg9XCJmdWxsLXNjcmVlblwiXHJcbiAgICAgICAgICAgICAgICAqZmRDYXJkRm9vdGVyQWN0aW9uSXRlbVxyXG4gICAgICAgICAgICAgICAgZmQtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25GdWxsc2NyZWVuKG1lZGlhLCBtZWRpYURhdGEpXCJcclxuICAgICAgICAgICAgPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBnbHlwaD1cImRlbGV0ZVwiXHJcbiAgICAgICAgICAgICAgICAqZmRDYXJkRm9vdGVyQWN0aW9uSXRlbVxyXG4gICAgICAgICAgICAgICAgZmQtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25EZWxldGUoaW5kZXgpXCJcclxuICAgICAgICAgICAgPjwvYnV0dG9uPlxyXG4gICAgICAgIDwvZmQtY2FyZC1mb290ZXI+XHJcbiAgICA8L2ZkLWNhcmQ+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjxuZy10ZW1wbGF0ZSAjbmV3RmlsZT5cclxuICAgIDxkaXYgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmU7IGhlaWdodDogMTAwJVwiPlxyXG4gICAgICAgIDxmZC1jYXJkPlxyXG4gICAgICAgICAgICA8ZmQtY2FyZC1jb250ZW50IHN0eWxlPVwiZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IG1pbi1oZWlnaHQ6IDEyMHB4XCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgZ2x5cGg9XCJhZGQtcGhvdG9cIlxyXG4gICAgICAgICAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcclxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ0F0dGFjaEZpbGUnIHwgYmJiVHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidXBsb2FkZXIub3BlbigpXCJcclxuICAgICAgICAgICAgICAgID48L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9mZC1jYXJkLWNvbnRlbnQ+XHJcblxyXG4gICAgICAgICAgICA8ZmQtY2FyZC1mb290ZXIgc3R5bGU9XCJib3JkZXItdG9wOiAxcHggc29saWQgI2NjY1wiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBmZC1idXR0b24gW2dseXBoXT1cIidvdmVyZmxvdydcIiBbZmRUeXBlXT1cIid0cmFuc3BhcmVudCdcIiBbZmRNZW51VHJpZ2dlcl09XCJtZW51XCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8ZmQtbWVudSAjbWVudT5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgZmQtbWVudS1pdGVtIChjbGljayk9XCJvblNjYW4oKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBmZC1tZW51LWludGVyYWN0aXZlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZmQtbWVudS10aXRsZT57eyAnU2NhbicgfCBiYmJUcmFuc2xhdGUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSBmZC1tZW51LWl0ZW0gKGNsaWNrKT1cIm9uQWR2YW5jZVNjYW4oKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBmZC1tZW51LWludGVyYWN0aXZlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZmQtbWVudS10aXRsZT57eyAnQWR2YW5jZWRTY2FuJyB8IGJiYlRyYW5zbGF0ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L2ZkLW1lbnU+XHJcbiAgICAgICAgICAgIDwvZmQtY2FyZC1mb290ZXI+XHJcbiAgICAgICAgPC9mZC1jYXJkPlxyXG4gICAgICAgIDxic3UtbWFzayAqbmdJZj1cIih1cGxvYWRpbmdTdGF0ZSQgfCBhc3luYyk/LnVwbG9hZGluZyA9PT0gdHJ1ZVwiPjwvYnN1LW1hc2s+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPG5nLXRlbXBsYXRlICNkaWFsb2dUZW1wbGF0ZSBsZXQtZGlhbG9nIGxldC1kaWFsb2dDb25maWc9XCJkaWFsb2dDb25maWdcIj5cclxuICAgIDxmZC1kaWFsb2cgW2RpYWxvZ0NvbmZpZ109XCJkaWFsb2dDb25maWdcIiBbZGlhbG9nUmVmXT1cImRpYWxvZ1wiICNkaWFsb2dUcGwgY2xhc3M9XCJ2ZXJ0aWNhbFwiPlxyXG4gICAgICAgIDxmZC1kaWFsb2ctaGVhZGVyPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgZmRUZW1wbGF0ZT1cImhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBmZC1iYXItbGVmdD5cclxuICAgICAgICAgICAgICAgICAgICA8ZmQtYmFyLWVsZW1lbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMSBmZC10aXRsZT57eyBTZXR0aW5nLkNvbnRyb2xGaWVsZENhcHRpb25UcmFuc2xhdGVkIH19PC9oMT5cclxuICAgICAgICAgICAgICAgICAgICA8L2ZkLWJhci1lbGVtZW50PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGZkLWJhci1yaWdodD5cclxuICAgICAgICAgICAgICAgICAgICA8ZmQtYnV0dG9uLWJhclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFkaWFsb2dDb25maWcuZnVsbHNjcmVlblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWFMYWJlbD1cIkZpdCBpbWFnZSBzaXplXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2dseXBoXT1cIidyZXNpemUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2ZkVHlwZV09XCJmaWxsV2lkdGggPyAnZW1waGFzaXplZCcgOiAndHJhbnNwYXJlbnQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZpbGxXaWR0aCA9ICFmaWxsV2lkdGhcIlxyXG4gICAgICAgICAgICAgICAgICAgID48L2ZkLWJ1dHRvbi1iYXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGZkLWJ1dHRvbi1iYXIgYXJpYUxhYmVsPVwiY2xvc2VcIiBnbHlwaD1cImRlY2xpbmVcIiAoY2xpY2spPVwiZGlhbG9nLmNsb3NlKClcIj48L2ZkLWJ1dHRvbi1iYXI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L2ZkLWRpYWxvZy1oZWFkZXI+XHJcbiAgICAgICAgPGZkLWRpYWxvZy1ib2R5ICNmZGJvZHk+XHJcbiAgICAgICAgICAgIDxkaXYgI2dhbGxlcnkgY2xhc3M9XCJnYWxsZXJ5IGluRGlhbG9nXCIgc3R5bGU9XCJmbGV4OiAxXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG1lZGlhIG9mIGRpYWxvZy5kYXRhLm1lZGlhRGF0YTsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2x1bW4gYmlnLWltZ3MtYm94XCJcclxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmlsbC13aWR0aF09XCJmaWxsV2lkdGhcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5maWxsLWFsbF09XCJmaWxsQWxsXCJcclxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmlsbC1vcmlnaW5hbF09XCJmaWxsT3JpZ2luYWxcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNlbGVjdGVkWm9vbVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBpY3NcIiBbaWRdPVwiaVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnN1LW1hc2s+PC9ic3UtbWFzaz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBpbWdMYXp5IFtpbWdMYXp5XT1cIm1lZGlhLm1lZGlhVXJsXCIgW3NyY109XCJtZWRpYS5tZWRpYVVybFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIoZGV2aWNlU2l6ZSQgfCBhc3luYykgIT09ICdzJ1wiIGNsYXNzPVwidGh1bWJuYWlsXCIgc3R5bGU9XCJmbGV4LXNocmluazogMVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvdGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibGF5b3V0R3JpZFRwbDsgY29udGV4dDogeyBpbkRpYWxvZzogdHJ1ZSB9XCI+PC9uZy1jb3RhaW5lcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9mZC1kaWFsb2ctYm9keT5cclxuICAgIDwvZmQtZGlhbG9nPlxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=
|
|
@@ -16,9 +16,9 @@ export class UiRadioGroupComponent extends DeviceInfoFieldBaseComponent {
|
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
18
|
UiRadioGroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UiRadioGroupComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
19
|
-
UiRadioGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: UiRadioGroupComponent, selector: "bsu-ui-radio-group", usesInheritance: true, ngImport: i0, template: "<fd-form-group [isInline]=\"true\">\n <ng-container *ngFor=\"let item of context.items; let i = index; let first = first\">\n <div fd-form-item>\n <fd-radio-button\n [value]=\"item.inputValue\"\n [id]=\"'radio-' + id + i\"\n [name]=\"'radio' + id + i\"\n [disabled]=\"(disableOrReadonly$ | async)!!\"\n [ngModel]=\"value?.inputValue\"\n (click)=\"onRadioClicked(item)\"\n >\n {{ item.boxLabel }}\n </fd-radio-button>\n </div>\n </ng-container>\n</fd-form-group>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.FormItemComponent, selector: "[fd-form-item]", inputs: ["isInline", "horizontal"] }, { kind: "component", type: i3.FormGroupComponent, selector: "fd-form-group", inputs: ["isInline"] }, { kind: "component", type: i4.RadioButtonComponent, selector: "fd-radio-button", inputs: ["ariaLabel", "ariaLabelledBy", "ariaDescribedBy", "title", "tabIndex", "state", "disabled", "selectedValue", "name", "id", "value", "required"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
19
|
+
UiRadioGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: UiRadioGroupComponent, selector: "bsu-ui-radio-group", usesInheritance: true, ngImport: i0, template: "<fd-form-group [isInline]=\"true\">\n <ng-container *ngFor=\"let item of context.items; let i = index; let first = first\">\n <div fd-form-item>\n <fd-radio-button\n *ngIf=\"!item.IsEmpty\"\n [value]=\"item.inputValue\"\n [id]=\"'radio-' + id + i\"\n [name]=\"'radio' + id + i\"\n [disabled]=\"(disableOrReadonly$ | async)!!\"\n [ngModel]=\"value?.inputValue\"\n (click)=\"onRadioClicked(item)\"\n >\n {{ item.boxLabel }}\n </fd-radio-button>\n </div>\n </ng-container>\n</fd-form-group>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.FormItemComponent, selector: "[fd-form-item]", inputs: ["isInline", "horizontal"] }, { kind: "component", type: i3.FormGroupComponent, selector: "fd-form-group", inputs: ["isInline"] }, { kind: "component", type: i4.RadioButtonComponent, selector: "fd-radio-button", inputs: ["ariaLabel", "ariaLabelledBy", "ariaDescribedBy", "title", "tabIndex", "state", "disabled", "selectedValue", "name", "id", "value", "required"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
20
20
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UiRadioGroupComponent, decorators: [{
|
|
21
21
|
type: Component,
|
|
22
|
-
args: [{ selector: 'bsu-ui-radio-group', changeDetection: ChangeDetectionStrategy.OnPush, template: "<fd-form-group [isInline]=\"true\">\n <ng-container *ngFor=\"let item of context.items; let i = index; let first = first\">\n <div fd-form-item>\n <fd-radio-button\n [value]=\"item.inputValue\"\n [id]=\"'radio-' + id + i\"\n [name]=\"'radio' + id + i\"\n [disabled]=\"(disableOrReadonly$ | async)!!\"\n [ngModel]=\"value?.inputValue\"\n (click)=\"onRadioClicked(item)\"\n >\n {{ item.boxLabel }}\n </fd-radio-button>\n </div>\n </ng-container>\n</fd-form-group>\n" }]
|
|
22
|
+
args: [{ selector: 'bsu-ui-radio-group', changeDetection: ChangeDetectionStrategy.OnPush, template: "<fd-form-group [isInline]=\"true\">\n <ng-container *ngFor=\"let item of context.items; let i = index; let first = first\">\n <div fd-form-item>\n <fd-radio-button\n *ngIf=\"!item.IsEmpty\"\n [value]=\"item.inputValue\"\n [id]=\"'radio-' + id + i\"\n [name]=\"'radio' + id + i\"\n [disabled]=\"(disableOrReadonly$ | async)!!\"\n [ngModel]=\"value?.inputValue\"\n (click)=\"onRadioClicked(item)\"\n >\n {{ item.boxLabel }}\n </fd-radio-button>\n </div>\n </ng-container>\n</fd-form-group>\n" }]
|
|
23
23
|
}] });
|
|
24
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktcmFkaW8tZ3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvdWktcmFkaW8tZ3JvdXAvdWktcmFkaW8tZ3JvdXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvdWktcmFkaW8tZ3JvdXAvdWktcmFkaW8tZ3JvdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7O0FBT3pFLE1BQU0sT0FBTyxxQkFBc0IsU0FBUSw0QkFBNEI7SUFDbkUsUUFBUTtRQUNKLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUFJO1FBQ2YsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsQ0FBQzs7a0hBVFEscUJBQXFCO3NHQUFyQixxQkFBcUIsaUZDUmxDLHdwQkFpQkE7MkZEVGEscUJBQXFCO2tCQU5qQyxTQUFTOytCQUNJLG9CQUFvQixtQkFHYix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERldmljZUluZm9GaWVsZEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9kZXZpY2UtaW5mby1maWVsZC1iYXNlJztcclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2JzdS11aS1yYWRpby1ncm91cCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vdWktcmFkaW8tZ3JvdXAuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vdWktcmFkaW8tZ3JvdXAuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVaVJhZGlvR3JvdXBDb21wb25lbnQgZXh0ZW5kcyBEZXZpY2VJbmZvRmllbGRCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuY29udGV4dC5pdGVtcy5maW5kKChjKSA9PiBjLmlucHV0VmFsdWUgPT09IHRoaXMudmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uUmFkaW9DbGlja2VkKGl0ZW0pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnZhbHVlID0gaXRlbTtcclxuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoaXRlbSk7XHJcbiAgICB9XHJcbn1cclxuIiwiPGZkLWZvcm0tZ3JvdXAgW2lzSW5saW5lXT1cInRydWVcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNvbnRleHQuaXRlbXM7IGxldCBpID0gaW5kZXg7IGxldCBmaXJzdCA9IGZpcnN0XCI+XG4gICAgICAgIDxkaXYgZmQtZm9ybS1pdGVtPlxuICAgICAgICAgICAgPGZkLXJhZGlvLWJ1dHRvblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiIWl0ZW0uSXNFbXB0eVwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cIml0ZW0uaW5wdXRWYWx1ZVwiXG4gICAgICAgICAgICAgICAgW2lkXT1cIidyYWRpby0nICsgaWQgKyBpXCJcbiAgICAgICAgICAgICAgICBbbmFtZV09XCIncmFkaW8nICsgaWQgKyBpXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiKGRpc2FibGVPclJlYWRvbmx5JCB8IGFzeW5jKSEhXCJcbiAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJ2YWx1ZT8uaW5wdXRWYWx1ZVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUmFkaW9DbGlja2VkKGl0ZW0pXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBpdGVtLmJveExhYmVsIH19XG4gICAgICAgICAgICA8L2ZkLXJhZGlvLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG48L2ZkLWZvcm0tZ3JvdXA+XG4iXX0=
|
|
@@ -21,9 +21,9 @@ export class UiReadOnlyFieldComponent extends FieldBaseComponent {
|
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
23
|
UiReadOnlyFieldComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UiReadOnlyFieldComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
24
|
-
UiReadOnlyFieldComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: UiReadOnlyFieldComponent, selector: "bsu-ui-read-only-field", usesInheritance: true, ngImport: i0, template: "<fd-text [class.empty-bracket]=\"!text\" [text]=\"text || 'Empty_Bracket' | bbbTranslate\" hyphenation=\"auto\"></fd-text>\n", styles: [":host{display:flex;width:100%;height:100%;align-items:center}label{overflow:hidden;text-align:justify;line-height:1.6rem}.empty-bracket{opacity:.3}\n"], dependencies: [{ kind: "component", type: i1.TextComponent, selector: "fd-text", inputs: ["text", "maxLines", "whitespaces", "hyphenation", "expandable", "moreLabel", "lessLabel", "isCollapsed"], outputs: ["isCollapsedChange"] }, { kind: "pipe", type: i2.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
24
|
+
UiReadOnlyFieldComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: UiReadOnlyFieldComponent, selector: "bsu-ui-read-only-field", usesInheritance: true, ngImport: i0, template: "<fd-text [class.empty-bracket]=\"!text\" [text]=\"text || 'Empty_Bracket' | bbbTranslate\" hyphenation=\"auto\"></fd-text>\r\n", styles: [":host{display:flex;width:100%;height:100%;align-items:center}label{overflow:hidden;text-align:justify;line-height:1.6rem}.empty-bracket{opacity:.3}\n"], dependencies: [{ kind: "component", type: i1.TextComponent, selector: "fd-text", inputs: ["text", "maxLines", "whitespaces", "hyphenation", "expandable", "moreLabel", "lessLabel", "isCollapsed"], outputs: ["isCollapsedChange"] }, { kind: "pipe", type: i2.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
25
25
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UiReadOnlyFieldComponent, decorators: [{
|
|
26
26
|
type: Component,
|
|
27
|
-
args: [{ selector: 'bsu-ui-read-only-field', changeDetection: ChangeDetectionStrategy.OnPush, template: "<fd-text [class.empty-bracket]=\"!text\" [text]=\"text || 'Empty_Bracket' | bbbTranslate\" hyphenation=\"auto\"></fd-text>\n", styles: [":host{display:flex;width:100%;height:100%;align-items:center}label{overflow:hidden;text-align:justify;line-height:1.6rem}.empty-bracket{opacity:.3}\n"] }]
|
|
27
|
+
args: [{ selector: 'bsu-ui-read-only-field', changeDetection: ChangeDetectionStrategy.OnPush, template: "<fd-text [class.empty-bracket]=\"!text\" [text]=\"text || 'Empty_Bracket' | bbbTranslate\" hyphenation=\"auto\"></fd-text>\r\n", styles: [":host{display:flex;width:100%;height:100%;align-items:center}label{overflow:hidden;text-align:justify;line-height:1.6rem}.empty-bracket{opacity:.3}\n"] }]
|
|
28
28
|
}] });
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktcmVhZC1vbmx5LWZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLXNhcC11aS9zcmMvbGliL3VpLXJlYWQtb25seS1maWVsZC91aS1yZWFkLW9ubHktZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvdWktcmVhZC1vbmx5LWZpZWxkL3VpLXJlYWQtb25seS1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRTNFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7O0FBTzFELE1BQU0sT0FBTyx3QkFBeUIsU0FBUSxrQkFBa0I7SUFFNUQsUUFBUTtRQUNKLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUNTLFNBQVMsQ0FBQyxLQUFVO1FBQzFCLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFDTyxRQUFRO1FBQ1osTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUN6QixNQUFNLElBQUksR0FBRyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDdEQsMkJBQTJCO1FBQzNCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxFQUFFLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzdCLENBQUM7O3FIQWhCUSx3QkFBd0I7eUdBQXhCLHdCQUF3QixxRkNUckMsZ0lBQ0E7MkZEUWEsd0JBQXdCO2tCQU5wQyxTQUFTOytCQUNJLHdCQUF3QixtQkFHakIsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgRmllbGRCYXNlQ29tcG9uZW50IH0gZnJvbSAnYmFyc2Etbm92aW4tcmF5LWNvcmUnO1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnYnN1LXVpLXJlYWQtb25seS1maWVsZCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vdWktcmVhZC1vbmx5LWZpZWxkLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL3VpLXJlYWQtb25seS1maWVsZC5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIFVpUmVhZE9ubHlGaWVsZENvbXBvbmVudCBleHRlbmRzIEZpZWxkQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICB0ZXh0OiBzdHJpbmc7XHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG4gICAgICAgIHRoaXMuX3NldFRleHQoKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfc2V0VmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHN1cGVyLl9zZXRWYWx1ZSh2YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5fc2V0VGV4dCgpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBfc2V0VGV4dCgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IHZhbHVlPy4kQ2FwdGlvbiA/IHZhbHVlLiRDYXB0aW9uIDogdmFsdWU7XHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXHJcbiAgICAgICAgdGhpcy50ZXh0ID0gdGV4dD8ucmVwbGFjZSgvPGJyXFxzKltcXC9dPz4vZ2ksICdcXG4nKTtcclxuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9XHJcbn1cclxuIiwiPGZkLXRleHQgW2NsYXNzLmVtcHR5LWJyYWNrZXRdPVwiIXRleHRcIiBbdGV4dF09XCJ0ZXh0IHx8ICdFbXB0eV9CcmFja2V0JyB8IGJiYlRyYW5zbGF0ZVwiIGh5cGhlbmF0aW9uPVwiYXV0b1wiPjwvZmQtdGV4dD5cclxuIl19
|