barsa-develop-components 2.2.72 → 2.2.74

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/fesm2022/barsa-develop-components.mjs +212 -205
  2. package/fesm2022/barsa-develop-components.mjs.map +1 -1
  3. package/lib/avatar/avatar.component.d.ts +1 -1
  4. package/lib/form-report-view/form-report-view.component.d.ts +1 -1
  5. package/lib/geographic-location/geographic-location.component.d.ts +1 -1
  6. package/lib/report-button-view/report-button-view.component.d.ts +1 -1
  7. package/lib/service-desk-header/service-desk-header.component.d.ts +3 -0
  8. package/package.json +3 -5
  9. package/esm2022/barsa-develop-components.mjs +0 -5
  10. package/esm2022/lib/accept-reject/accept-reject.component.mjs +0 -68
  11. package/esm2022/lib/avatar/avatar.component.mjs +0 -29
  12. package/esm2022/lib/barcode-format-pipe.mjs +0 -25
  13. package/esm2022/lib/barcode-reader/barcode-reader.component.mjs +0 -62
  14. package/esm2022/lib/barcode-reader-dialog/barcode-reader-dialog.component.mjs +0 -82
  15. package/esm2022/lib/barcode-reader-video/barcode-reader-video.component.mjs +0 -66
  16. package/esm2022/lib/barcode.service.mjs +0 -330
  17. package/esm2022/lib/barsa-develop-components.module.mjs +0 -292
  18. package/esm2022/lib/barsa-document-list-item/barsa-document-list-item.component.mjs +0 -104
  19. package/esm2022/lib/barsa-documents/barsa-documents.component.mjs +0 -159
  20. package/esm2022/lib/barsa-geographic-location/barsa-geographic-location.component.mjs +0 -173
  21. package/esm2022/lib/card-content-image-and-title/card-content-image-and-title.component.mjs +0 -50
  22. package/esm2022/lib/card-content-line-chart/card-content-line-chart.component.mjs +0 -36
  23. package/esm2022/lib/card-header-big-image-title-and-subtitle/card-header-big-image-title-and-subtitle.component.mjs +0 -19
  24. package/esm2022/lib/card-header-kpi/card-header-kpi.component.mjs +0 -40
  25. package/esm2022/lib/card-header-logo-title-subtitle/card-header-logo-title-subtitle.component.mjs +0 -45
  26. package/esm2022/lib/checkbox-button/checkbox-button.component.mjs +0 -23
  27. package/esm2022/lib/column-chip/column-chip.component.mjs +0 -44
  28. package/esm2022/lib/column-form-viewer/column-form-viewer.component.mjs +0 -88
  29. package/esm2022/lib/column-progressbar/column-progressbar.component.mjs +0 -87
  30. package/esm2022/lib/enum-info-micro-proccess-flow/enum-info-micro-proccess-flow.component.mjs +0 -18
  31. package/esm2022/lib/footer/footer.component.mjs +0 -43
  32. package/esm2022/lib/form-card/form-card.component.mjs +0 -17
  33. package/esm2022/lib/form-chart-content/form-chart-content.component.mjs +0 -36
  34. package/esm2022/lib/form-content-quick-view/form-content-quick-view.component.mjs +0 -102
  35. package/esm2022/lib/form-report-view/form-report-view.component.mjs +0 -25
  36. package/esm2022/lib/form-report-view-item/form-report-view-item.component.mjs +0 -45
  37. package/esm2022/lib/g4b-details/g4b-details.component.mjs +0 -28
  38. package/esm2022/lib/g4b-estelam/g4b-estelam.component.mjs +0 -30
  39. package/esm2022/lib/geographic-location/geographic-location.component.mjs +0 -88
  40. package/esm2022/lib/login-form/login-form.component.mjs +0 -55
  41. package/esm2022/lib/login-social-conncetions/login-social-conncetions.component.mjs +0 -30
  42. package/esm2022/lib/master-detail-card-form/master-detail-card-form.component.mjs +0 -17
  43. package/esm2022/lib/media-file-uploader/media-file-uploader.component.mjs +0 -238
  44. package/esm2022/lib/micro-proccess-flow/micro-proccess-flow.component.mjs +0 -52
  45. package/esm2022/lib/micro-process-flow-view/micro-process-flow-view.component.mjs +0 -24
  46. package/esm2022/lib/mo-info-micro-proccess-flow/mo-info-micro-proccess-flow.component.mjs +0 -23
  47. package/esm2022/lib/models/document-item.mjs +0 -2
  48. package/esm2022/lib/models/documents-setting.mjs +0 -2
  49. package/esm2022/lib/models/form-report-view-setting.mjs +0 -2
  50. package/esm2022/lib/models/index.mjs +0 -8
  51. package/esm2022/lib/models/micro-process-flow-view-setting.mjs +0 -2
  52. package/esm2022/lib/models/person.mjs +0 -2
  53. package/esm2022/lib/models/service-desk-view-of-services-setting.mjs +0 -2
  54. package/esm2022/lib/models/tab-process-view-setting.mjs +0 -2
  55. package/esm2022/lib/pipes/datasource-to-flow-item.mjs +0 -23
  56. package/esm2022/lib/pipes/index.mjs +0 -3
  57. package/esm2022/lib/pipes/mo-list-to-flow-item.pipe.mjs +0 -23
  58. package/esm2022/lib/query-string-form-observable/query-string-form-observable.component.mjs +0 -37
  59. package/esm2022/lib/query-string-observable/query-string-observable.component.mjs +0 -22
  60. package/esm2022/lib/report-button-view/report-button-view.component.mjs +0 -37
  61. package/esm2022/lib/report-line-chart-view/report-line-chart-view.component.mjs +0 -12
  62. package/esm2022/lib/report-tab-view/report-tab-view.component.mjs +0 -27
  63. package/esm2022/lib/resend-verification-code/resend-verification-code.component.mjs +0 -62
  64. package/esm2022/lib/service-desk-card-content-mojavezhay-akhz-shode/service-desk-card-content-mojavezhay-akhz-shode.component.mjs +0 -28
  65. package/esm2022/lib/service-desk-form-layout-content-mojavez/service-desk-form-layout-content-mojavez.component.mjs +0 -110
  66. package/esm2022/lib/service-desk-header/service-desk-header.component.mjs +0 -242
  67. package/esm2022/lib/service-desk-servcie-detail/service-desk-servcie-detail.component.mjs +0 -142
  68. package/esm2022/lib/service-desk-view-of-services/service-desk-view-of-services.component.mjs +0 -37
  69. package/esm2022/lib/setting-form/setting-form.component.mjs +0 -64
  70. package/esm2022/lib/subform-in-row-report/subform-in-row-report.component.mjs +0 -73
  71. package/esm2022/lib/tab-process-view/tab-process-view.component.mjs +0 -48
  72. package/esm2022/lib/table-view-vertical-columns/table-view-vertical-columns.component.mjs +0 -16
  73. package/esm2022/lib/timer-count-down/timer-count-down.component.mjs +0 -104
  74. package/esm2022/lib/token-report-view/token-report-view.component.mjs +0 -27
  75. package/esm2022/lib/ui-enum-segmented-button/ui-enum-segmented-button.component.mjs +0 -25
  76. package/esm2022/lib/ui-num-rate/ui-num-rate.component.mjs +0 -41
  77. package/esm2022/lib/ui-person/ui-person.component.mjs +0 -160
  78. package/esm2022/lib/ui-person/ui-person.pipe.mjs +0 -41
  79. package/esm2022/lib/ui-pictures-carousel/ui-pictures-carousel.component.mjs +0 -17
  80. package/esm2022/lib/ui-text-field-search/ui-text-field-search.component.mjs +0 -42
  81. package/esm2022/lib/ulv-context-menu-item-show-file-content/ulv-context-menu-item-show-file-content.component.mjs +0 -69
  82. package/esm2022/public-api.mjs +0 -64
@@ -1,159 +0,0 @@
1
- import { ChangeDetectionStrategy, Component } from '@angular/core';
2
- import { FilesValidationHelper, LinearListHelper, ReportViewBaseComponent, UploadService } from 'barsa-novin-ray-core';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@fundamental-ngx/core/table";
5
- import * as i2 from "../barsa-document-list-item/barsa-document-list-item.component";
6
- import * as i3 from "@angular/common";
7
- import * as i4 from "barsa-novin-ray-core";
8
- export class BarsaDocumentsComponent extends ReportViewBaseComponent {
9
- get documentItems() {
10
- if (this.customFieldInfo) {
11
- return this.customFieldInfo.DocumentItems.MoDataList;
12
- }
13
- else {
14
- return this.viewSetting.FilesSetting.DocumentItems.MoDataList;
15
- }
16
- }
17
- ngOnInit() {
18
- super.ngOnInit();
19
- const { moDataList, viewSetting, allColumns } = this;
20
- this._initColumnField(allColumns, viewSetting);
21
- this._subscribeOnUploadFile(this.fileColumn);
22
- this._mapDocumentItem(moDataList, this.documentItems);
23
- this._checkMandatory();
24
- }
25
- ngOnChanges(changes) {
26
- super.ngOnChanges(changes);
27
- const { moDataList } = changes;
28
- if (moDataList && !moDataList.firstChange) {
29
- if (moDataList && !moDataList.firstChange) {
30
- this._mapDocumentItem(moDataList.currentValue, this.documentItems);
31
- this.detectChanges();
32
- }
33
- }
34
- }
35
- ngAfterViewInit() {
36
- super.ngAfterViewInit();
37
- setTimeout(() => {
38
- for (let i = 0; i < this.documentItems.length - this.moDataList.length; i++) {
39
- this.createNewMo.emit();
40
- }
41
- });
42
- }
43
- onFileSelection(files, documentItem, mo) {
44
- this.selectedMo = mo;
45
- this._uploadFile(files, documentItem);
46
- }
47
- onRemoveFile(file, mo) {
48
- const fileDbName = this.fileColumn.Name;
49
- let files = mo[fileDbName].Files;
50
- if (file.IsNew) {
51
- files = files.filter((c) => c.Id !== file.Id);
52
- }
53
- else {
54
- const existFile = files.find((c) => c.Id === file.Id);
55
- existFile.IsDeleted = true;
56
- }
57
- mo[fileDbName].Files = [...files];
58
- this._updateMo(mo);
59
- }
60
- onStatusChanged(e, mo) {
61
- mo[this.statusColumn.Name] = e.value;
62
- mo[this.rejectedReasonColumn.Name] = e.rejectedText;
63
- this._updateMo(mo);
64
- }
65
- onRejectedTextChange(text, mo) {
66
- mo[this.rejectedReasonColumn.Name] = text;
67
- this._updateMo(mo);
68
- }
69
- _checkMandatory() {
70
- const moDataList = this.moDataList;
71
- const items = this.documentItems.filter((c) => c.IsRequired);
72
- let mandatory = items.length > 0;
73
- const mandatory2 = items
74
- .map((item) => moDataList.find((c) => c[this.keyColumn.Name] === item.ItemKey))
75
- .filter((item) => item)
76
- .some((mo) => mo[this.fileColumn.Name].Files.filter((c) => !c.IsDeleted).length === 0);
77
- mandatory = mandatory && mandatory2;
78
- this.mandatory.emit(mandatory);
79
- }
80
- _mapDocumentItem(moDataList, documentItems) {
81
- const keyName = this.keyColumn.Name;
82
- moDataList.forEach((mo, index) => {
83
- let documentItem = documentItems.find((c) => c.ItemKey === mo[keyName]); // find setting that matches with mo by itemKey
84
- if (documentItem) {
85
- mo.$documentItem = documentItem;
86
- }
87
- else {
88
- documentItem = documentItems.find((item) => moDataList.map((c) => c[keyName]).indexOf(item.ItemKey) < 0); // find a setting has not have $RelatedMo yet
89
- if (documentItem) {
90
- mo[keyName] = documentItem.ItemKey;
91
- mo.$documentItem = documentItem;
92
- this.updateMo.emit(mo);
93
- }
94
- }
95
- });
96
- }
97
- _initColumnField(allColumns, viewSetting) {
98
- const keyColumn = this._findColumnByDbName.transform(allColumns, viewSetting.ItemKeyField);
99
- const fileColumn = this._findColumnByDbName.transform(allColumns, viewSetting.FileField);
100
- const acceptedColumn = this._findColumnByDbName.transform(allColumns, viewSetting.AcceptedField);
101
- const rejectedReasonColumn = this._findColumnByDbName.transform(allColumns, viewSetting.RejectedReasonField);
102
- const statusColumn = this._findColumnByDbName.transform(allColumns, viewSetting.StatusField);
103
- !keyColumn && this._columnNotExistsInReport(viewSetting.ItemKeyField);
104
- !fileColumn && this._columnNotExistsInReport(viewSetting.FileField);
105
- !rejectedReasonColumn && this._columnNotExistsInReport(viewSetting.RejectedReasonField);
106
- !acceptedColumn && this._columnNotExistsInReport(viewSetting.AcceptedField);
107
- !statusColumn && this._columnNotExistsInReport(viewSetting.StatusField);
108
- keyColumn && (this.keyColumn = keyColumn);
109
- fileColumn && (this.fileColumn = fileColumn);
110
- acceptedColumn && (this.acceptedColumn = acceptedColumn);
111
- rejectedReasonColumn && (this.rejectedReasonColumn = rejectedReasonColumn);
112
- statusColumn && (this.statusColumn = statusColumn);
113
- }
114
- _subscribeOnUploadFile(fileColumn) {
115
- this._filesValidationHelper = new FilesValidationHelper(0, 0, 0);
116
- if (this._uploadService) {
117
- this._createLinearHelper(this._uploadService, this._filesValidationHelper, fileColumn.FieldDefId);
118
- this.uploadingState$ = this._uploadService.uploadingState$;
119
- }
120
- else {
121
- throw new Error('UploadService not provided.');
122
- }
123
- this._linearHelper.newFileUploaded$.subscribe((file) => {
124
- const mo = this.moDataList.find((c) => c.Id === this.selectedMo.Id);
125
- if (mo) {
126
- mo[fileColumn.Name].Files = [...mo[fileColumn.Name].Files, file];
127
- this._updateMo(mo);
128
- }
129
- });
130
- }
131
- _updateMo(mo) {
132
- mo.$NewInlineMo = undefined;
133
- if (mo.$State === 'Unchanged') {
134
- mo.$State = 'Modified';
135
- }
136
- this.updateMo.emit(mo);
137
- this._checkMandatory();
138
- }
139
- _createLinearHelper(uploadService, filesValidationHelper, fieldDefId) {
140
- this._linearHelper = new LinearListHelper(uploadService, filesValidationHelper, fieldDefId);
141
- }
142
- _uploadFile(files, documentItem) {
143
- const filesValidationHelper = this._filesValidationHelper;
144
- filesValidationHelper.maxFileCount = +documentItem.MaxFileCount;
145
- filesValidationHelper.maxFileSize = +documentItem.EachFileSize;
146
- filesValidationHelper.maxTotalFileSize = +documentItem.MaxFileSize;
147
- this._linearHelper.uploadToServer(files, documentItem.Title);
148
- }
149
- _columnNotExistsInReport(columnCaption) {
150
- throw new Error(`can not find ${columnCaption} column in report.please add it to report columns.`);
151
- }
152
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BarsaDocumentsComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
153
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: BarsaDocumentsComponent, selector: "bdc-barsa-documents", providers: [UploadService], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<!-- <ul fd-list [byline]=\"true\" fdCompact [selection]=\"false\"> -->\r\n<table fd-table aria-label=\"Default\" [allCellsFocusable]=\"true\" [noBorderX]=\"true\">\r\n <thead fd-table-header>\r\n <tr fd-table-row>\r\n <th fd-table-cell>{{ '\u0639\u06A9\u0633' | bbbTranslate }}</th>\r\n <th fd-table-cell style=\"min-width: 140px; width: auto\">{{ '\u0646\u0648\u0639 \u0645\u062F\u0631\u06A9' | bbbTranslate }}</th>\r\n <th fd-table-cell style=\"width: 99%\">{{ '\u0627\u0644\u0635\u0627\u0642 \u0641\u0627\u06CC\u0644' | bbbTranslate }}</th>\r\n <th fd-table-cell></th>\r\n <th fd-table-cell style=\"width: 400px; min-width: 400px; max-width: 400px\">{{ '\u0648\u0636\u0639\u06CC\u062A' | bbbTranslate }}</th>\r\n </tr>\r\n </thead>\r\n <tbody fd-table-body>\r\n @for (mo of moDataList; track _trackByRow($index, mo)) { @if (mo.$documentItem) {\r\n <bdc-barsa-document-list-item\r\n [documentItem]=\"mo.$documentItem\"\r\n [accepted]=\"mo[acceptedColumn.Name]\"\r\n [files]=\"mo[fileColumn.Name].Files\"\r\n [uploadingState]=\"(uploadingState$ | async)!!\"\r\n [rejectedReason]=\"mo[rejectedReasonColumn.Name]\"\r\n [fileDbName]=\"fileColumn.Name\"\r\n [status]=\"+mo[statusColumn.Name]\"\r\n [deviceSize]=\"deviceSize\"\r\n [readonly]=\"!access.Edit\"\r\n [deviceSize]=\"deviceSize\"\r\n (removeFile)=\"onRemoveFile($event, mo)\"\r\n (fileSelectionChange)=\"onFileSelection($event, mo.$documentItem, mo)\"\r\n (rejectTextChange)=\"onRejectedTextChange($event, mo)\"\r\n (statusChanged)=\"onStatusChanged($event, mo)\"\r\n ></bdc-barsa-document-list-item>\r\n } }\r\n <!-- </ul> -->\r\n </tbody>\r\n</table>\r\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "component", type: i1.TableComponent, selector: "table[fd-table]", inputs: ["noBorderX", "noBorderY", "noOuterBorder", "topBorder", "popIn", "responsive", "keys", "allCellsFocusable"], exportAs: ["fd-table"] }, { kind: "directive", type: i1.TableHeaderDirective, selector: "[fdTableHeader], [fd-table-header]", inputs: ["noBorderX", "noBorderY", "nonInteractive"] }, { kind: "directive", type: i1.TableBodyDirective, selector: "[fdTableBody], [fd-table-body]", inputs: ["noBorderX", "noBorderY"] }, { kind: "directive", type: i1.TableRowDirective, selector: "[fdTableRow], [fd-table-row]", inputs: ["activable", "highlightActive", "hoverable", "focusable", "main", "secondary", "active"] }, { kind: "directive", type: i1.TableCellDirective, selector: "[fdTableCell], [fd-table-cell]", inputs: ["noBorderX", "noBorderY", "activable", "focusable", "hoverable", "fitContent", "noPadding", "noData", "nonInteractive", "key"] }, { kind: "component", type: i2.BarsaDocumentListItemComponent, selector: "bdc-barsa-document-list-item", inputs: ["documentItem", "deviceSize", "files", "accepted", "rejectedReason", "readonly", "status", "uploadingState"], outputs: ["statusChanged", "rejectTextChange", "fileSelectionChange", "removeFile", "fullscreen", "download", "downloadAll"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
154
- }
155
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BarsaDocumentsComponent, decorators: [{
156
- type: Component,
157
- args: [{ selector: 'bdc-barsa-documents', changeDetection: ChangeDetectionStrategy.OnPush, providers: [UploadService], standalone: false, template: "<!-- <ul fd-list [byline]=\"true\" fdCompact [selection]=\"false\"> -->\r\n<table fd-table aria-label=\"Default\" [allCellsFocusable]=\"true\" [noBorderX]=\"true\">\r\n <thead fd-table-header>\r\n <tr fd-table-row>\r\n <th fd-table-cell>{{ '\u0639\u06A9\u0633' | bbbTranslate }}</th>\r\n <th fd-table-cell style=\"min-width: 140px; width: auto\">{{ '\u0646\u0648\u0639 \u0645\u062F\u0631\u06A9' | bbbTranslate }}</th>\r\n <th fd-table-cell style=\"width: 99%\">{{ '\u0627\u0644\u0635\u0627\u0642 \u0641\u0627\u06CC\u0644' | bbbTranslate }}</th>\r\n <th fd-table-cell></th>\r\n <th fd-table-cell style=\"width: 400px; min-width: 400px; max-width: 400px\">{{ '\u0648\u0636\u0639\u06CC\u062A' | bbbTranslate }}</th>\r\n </tr>\r\n </thead>\r\n <tbody fd-table-body>\r\n @for (mo of moDataList; track _trackByRow($index, mo)) { @if (mo.$documentItem) {\r\n <bdc-barsa-document-list-item\r\n [documentItem]=\"mo.$documentItem\"\r\n [accepted]=\"mo[acceptedColumn.Name]\"\r\n [files]=\"mo[fileColumn.Name].Files\"\r\n [uploadingState]=\"(uploadingState$ | async)!!\"\r\n [rejectedReason]=\"mo[rejectedReasonColumn.Name]\"\r\n [fileDbName]=\"fileColumn.Name\"\r\n [status]=\"+mo[statusColumn.Name]\"\r\n [deviceSize]=\"deviceSize\"\r\n [readonly]=\"!access.Edit\"\r\n [deviceSize]=\"deviceSize\"\r\n (removeFile)=\"onRemoveFile($event, mo)\"\r\n (fileSelectionChange)=\"onFileSelection($event, mo.$documentItem, mo)\"\r\n (rejectTextChange)=\"onRejectedTextChange($event, mo)\"\r\n (statusChanged)=\"onStatusChanged($event, mo)\"\r\n ></bdc-barsa-document-list-item>\r\n } }\r\n <!-- </ul> -->\r\n </tbody>\r\n</table>\r\n", styles: [":host{display:block}\n"] }]
158
- }] });
159
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFyc2EtZG9jdW1lbnRzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLWRldmVsb3AtY29tcG9uZW50cy9zcmMvbGliL2JhcnNhLWRvY3VtZW50cy9iYXJzYS1kb2N1bWVudHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2EtZGV2ZWxvcC1jb21wb25lbnRzL3NyYy9saWIvYmFyc2EtZG9jdW1lbnRzL2JhcnNhLWRvY3VtZW50cy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFvQyxNQUFNLGVBQWUsQ0FBQztBQUNyRyxPQUFPLEVBQ0gscUJBQXFCLEVBQ3JCLGdCQUFnQixFQUVoQix1QkFBdUIsRUFFdkIsYUFBYSxFQUdoQixNQUFNLHNCQUFzQixDQUFDOzs7Ozs7QUFZOUIsTUFBTSxPQUFPLHVCQUF3QixTQUFRLHVCQUF5QztJQVlsRixJQUFJLGFBQWE7UUFDYixJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN2QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLFVBQWlDLENBQUM7UUFDaEYsQ0FBQzthQUFNLENBQUM7WUFDSixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxVQUFpQyxDQUFDO1FBQ3pGLENBQUM7SUFDTCxDQUFDO0lBQ0QsUUFBUTtRQUNKLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQixNQUFNLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFFckQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFD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RUFBRSxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFDUyxtQkFBbUIsQ0FDekIsYUFBNEIsRUFDNUIscUJBQTRDLEVBQzVDLFVBQWtCO1FBRWxCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUscUJBQXFCLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDaEcsQ0FBQztJQUNTLFdBQVcsQ0FBQyxLQUFhLEVBQUUsWUFBMEI7UUFDM0QsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUM7UUFDMUQscUJBQXFCLENBQUMsWUFBWSxHQUFHLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQztRQUNoRSxxQkFBcUIsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDO1FBQy9ELHFCQUFxQixDQUFDLGdCQUFnQixHQUFHLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQztRQUNuRSxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFDUyx3QkFBd0IsQ0FBQyxhQUFhO1FBQzVDLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLGFBQWEsb0RBQW9ELENBQUMsQ0FBQztJQUN2RyxDQUFDOytHQWhLUSx1QkFBdUI7bUdBQXZCLHVCQUF1Qiw4Q0FIckIsQ0FBQyxhQUFhLENBQUMsc0VDbkI5Qiw4MURBaUNBOzs0RkRYYSx1QkFBdUI7a0JBUm5DLFNBQVM7K0JBQ0kscUJBQXFCLG1CQUdkLHVCQUF1QixDQUFDLE1BQU0sYUFDcEMsQ0FBQyxhQUFhLENBQUMsY0FDZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgT25DaGFuZ2VzLCBPbkluaXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICAgIEZpbGVzVmFsaWRhdGlvbkhlbHBlcixcclxuICAgIExpbmVhckxpc3RIZWxwZXIsXHJcbiAgICBNZXRhb2JqZWN0RGF0YU1vZGVsLFxyXG4gICAgUmVwb3J0Vmlld0Jhc2VDb21wb25lbnQsXHJcbiAgICBSZXBvcnRWaWV3Q29sdW1uLFxyXG4gICAgVXBsb2FkU2VydmljZSxcclxuICAgIEZpbGVBdHRhY2htZW50SW5mbyxcclxuICAgIElVcGxvYWRpbmdTdGF0ZVxyXG59IGZyb20gJ2JhcnNhLW5vdmluLXJheS1jb3JlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBEb2N1bWVudEl0ZW0sIERvY3VtZW50c1NldHRpbmcgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2JkYy1iYXJzYS1kb2N1bWVudHMnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2JhcnNhLWRvY3VtZW50cy5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9iYXJzYS1kb2N1bWVudHMuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gICAgcHJvdmlkZXJzOiBbVXBsb2FkU2VydmljZV0sXHJcbiAgICBzdGFuZGFsb25lOiBmYWxzZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQmFyc2FEb2N1bWVudHNDb21wb25lbnQgZXh0ZW5kcyBSZXBvcnRWaWV3QmFzZUNvbXBvbmVudDxEb2N1bWVudHNTZXR0aW5nPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuICAgIGtleUNvbHVtbjogUmVwb3J0Vmlld0NvbHVtbjtcclxuICAgIGZpbGVDb2x1bW46IFJlcG9ydFZpZXdDb2x1bW47XHJcbiAgICBzdGF0dXNDb2x1bW46IFJlcG9ydFZpZXdDb2x1bW47XHJcbiAgICByZWplY3RlZFJlYXNvbkNvbHVtbjogUmVwb3J0Vmlld0NvbHVtbjtcclxuICAgIGFjY2VwdGVkQ29sdW1uOiBSZXBvcnRWaWV3Q29sdW1uO1xyXG4gICAgc2VsZWN0ZWRNbzogTWV0YW9iamVjdERhdGFNb2RlbDtcclxuICAgIHVwbG9hZGluZ1N0YXRlJDogT2JzZXJ2YWJsZTxJVXBsb2FkaW5nU3RhdGU+O1xyXG5cclxuICAgIHByb3RlY3RlZCBfZmlsZXNWYWxpZGF0aW9uSGVscGVyOiBGaWxlc1ZhbGlkYXRpb25IZWxwZXI7XHJcbiAgICBwcm90ZWN0ZWQgX2xpbmVhckhlbHBlcjogTGluZWFyTGlzdEhlbHBlcjtcclxuXHJcbiAgICBnZXQgZG9jdW1lbnRJdGVtcygpOiBBcnJheTxEb2N1bWVudEl0ZW0+IHtcclxuICAgICAgICBpZiAodGhpcy5jdXN0b21GaWVsZEluZm8pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tRmllbGRJbmZvLkRvY3VtZW50SXRlbXMuTW9EYXRhTGlzdCBhcyBBcnJheTxEb2N1bWVudEl0ZW0+O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZpZXdTZXR0aW5nLkZpbGVzU2V0dGluZy5Eb2N1bWVudEl0ZW1zLk1vRGF0YUxpc3QgYXMgQXJyYXk8RG9jdW1lbnRJdGVtPjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG4gICAgICAgIGNvbnN0IHsgbW9EYXRhTGlzdCwgdmlld1NldHRpbmcsIGFsbENvbHVtbnMgfSA9IHRoaXM7XHJcblxyXG4gICAgICAgIHRoaXMuX2luaXRDb2x1bW5GaWVsZChhbGxDb2x1bW5zLCB2aWV3U2V0dGluZyk7XHJcbiAgICAgICAgdGhpcy5fc3Vic2NyaWJlT25VcGxvYWRGaWxlKHRoaXMuZmlsZUNvbHVtbik7XHJcbiAgICAgICAgdGhpcy5fbWFwRG9jdW1lbnRJdGVtKG1vRGF0YUxpc3QsIHRoaXMuZG9jdW1lbnRJdGVtcyk7XHJcbiAgICAgICAgdGhpcy5fY2hlY2tNYW5kYXRvcnkoKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICAgICAgc3VwZXIubmdPbkNoYW5nZXMoY2hhbmdlcyk7XHJcbiAgICAgICAgY29uc3QgeyBtb0RhdGFMaXN0IH0gPSBjaGFuZ2VzO1xyXG4gICAgICAgIGlmIChtb0RhdGFMaXN0ICYmICFtb0RhdGFMaXN0LmZpcnN0Q2hhbmdlKSB7XHJcbiAgICAgICAgICAgIGlmIChtb0RhdGFMaXN0ICYmICFtb0RhdGFMaXN0LmZpcnN0Q2hhbmdlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXBEb2N1bWVudEl0ZW0obW9EYXRhTGlzdC5jdXJyZW50VmFsdWUsIHRoaXMuZG9jdW1lbnRJdGVtcyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmRvY3VtZW50SXRlbXMubGVuZ3RoIC0gdGhpcy5tb0RhdGFMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZU5ld01vLmVtaXQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgb25GaWxlU2VsZWN0aW9uKGZpbGVzOiBGaWxlW10sIGRvY3VtZW50SXRlbTogRG9jdW1lbnRJdGVtLCBtbzogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRNbyA9IG1vO1xyXG4gICAgICAgIHRoaXMuX3VwbG9hZEZpbGUoZmlsZXMsIGRvY3VtZW50SXRlbSk7XHJcbiAgICB9XHJcbiAgICBvblJlbW92ZUZpbGUoZmlsZTogRmlsZUF0dGFjaG1lbnRJbmZvLCBtbzogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGZpbGVEYk5hbWUgPSB0aGlzLmZpbGVDb2x1bW4uTmFtZTtcclxuICAgICAgICBsZXQgZmlsZXMgPSBtb1tmaWxlRGJOYW1lXS5GaWxlcztcclxuICAgICAgICBpZiAoZmlsZS5Jc05ldykge1xyXG4gICAgICAgICAgICBmaWxlcyA9IGZpbGVzLmZpbHRlcigoYykgPT4gYy5JZCAhPT0gZmlsZS5JZCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgZXhpc3RGaWxlID0gZmlsZXMuZmluZCgoYykgPT4gYy5JZCA9PT0gZmlsZS5JZCk7XHJcbiAgICAgICAgICAgIGV4aXN0RmlsZS5Jc0RlbGV0ZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBtb1tmaWxlRGJOYW1lXS5GaWxlcyA9IFsuLi5maWxlc107XHJcbiAgICAgICAgdGhpcy5fdXBkYXRlTW8obW8pO1xyXG4gICAgfVxyXG4gICAgb25TdGF0dXNDaGFuZ2VkKGU6IHsgdmFsdWU6IG51bWJlcjsgcmVqZWN0ZWRUZXh0OiBzdHJpbmcgfSwgbW86IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcclxuICAgICAgICBtb1t0aGlzLnN0YXR1c0NvbHVtbi5OYW1lXSA9IGUudmFsdWU7XHJcbiAgICAgICAgbW9bdGhpcy5yZWplY3RlZFJlYXNvbkNvbHVtbi5OYW1lXSA9IGUucmVqZWN0ZWRUZXh0O1xyXG4gICAgICAgIHRoaXMuX3VwZGF0ZU1vKG1vKTtcclxuICAgIH1cclxuICAgIG9uUmVqZWN0ZWRUZXh0Q2hhbmdlKHRleHQ6IHN0cmluZywgbW86IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcclxuICAgICAgICBtb1t0aGlzLnJlamVjdGVkUmVhc29uQ29sdW1uLk5hbWVdID0gdGV4dDtcclxuICAgICAgICB0aGlzLl91cGRhdGVNbyhtbyk7XHJcbiAgICB9XHJcbiAgICBfY2hlY2tNYW5kYXRvcnkoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgbW9EYXRhTGlzdCA9IHRoaXMubW9EYXRhTGlzdDtcclxuICAgICAgICBjb25zdCBpdGVtcyA9IHRoaXMuZG9jdW1lbnRJdGVtcy5maWx0ZXIoKGMpID0+IGMuSXNSZXF1aXJlZCk7XHJcbiAgICAgICAgbGV0IG1hbmRhdG9yeSA9IGl0ZW1zLmxlbmd0aCA+IDA7XHJcbiAgICAgICAgY29uc3QgbWFuZGF0b3J5MiA9IGl0ZW1zXHJcbiAgICAgICAgICAgIC5tYXAoKGl0ZW0pID0+IG1vRGF0YUxpc3QuZmluZCgoYykgPT4gY1t0aGlzLmtleUNvbHVtbi5OYW1lXSA9PT0gaXRlbS5JdGVtS2V5KSlcclxuICAgICAgICAgICAgLmZpbHRlcigoaXRlbSkgPT4gaXRlbSlcclxuICAgICAgICAgICAgLnNvbWUoKG1vKSA9PiBtb1t0aGlzLmZpbGVDb2x1bW4uTmFtZV0uRmlsZXMuZmlsdGVyKChjKSA9PiAhYy5Jc0RlbGV0ZWQpLmxlbmd0aCA9PT0gMCk7XHJcbiAgICAgICAgbWFuZGF0b3J5ID0gbWFuZGF0b3J5ICYmIG1hbmRhdG9yeTI7XHJcbiAgICAgICAgdGhpcy5tYW5kYXRvcnkuZW1pdChtYW5kYXRvcnkpO1xyXG4gICAgfVxyXG4gICAgX21hcERvY3VtZW50SXRlbShtb0RhdGFMaXN0OiBBcnJheTxNZXRhb2JqZWN0RGF0YU1vZGVsPiwgZG9jdW1lbnRJdGVtczogQXJyYXk8RG9jdW1lbnRJdGVtPik6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGtleU5hbWUgPSB0aGlzLmtleUNvbHVtbi5OYW1lO1xyXG4gICAgICAgIG1vRGF0YUxpc3QuZm9yRWFjaCgobW8sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBkb2N1bWVudEl0ZW0gPSBkb2N1bWVudEl0ZW1zLmZpbmQoKGMpID0+IGMuSXRlbUtleSA9PT0gbW9ba2V5TmFtZV0pOyAvLyBmaW5kIHNldHRpbmcgdGhhdCBtYXRjaGVzIHdpdGggbW8gYnkgaXRlbUtleVxyXG4gICAgICAgICAgICBpZiAoZG9jdW1lbnRJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICBtby4kZG9jdW1lbnRJdGVtID0gZG9jdW1lbnRJdGVtO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnRJdGVtID0gZG9jdW1lbnRJdGVtcy5maW5kKFxyXG4gICAgICAgICAgICAgICAgICAgIChpdGVtKSA9PiBtb0RhdGFMaXN0Lm1hcCgoYykgPT4gY1trZXlOYW1lXSkuaW5kZXhPZihpdGVtLkl0ZW1LZXkpIDwgMFxyXG4gICAgICAgICAgICAgICAgKTsgLy8gZmluZCBhIHNldHRpbmcgaGFzIG5vdCBoYXZlICRSZWxhdGVkTW8geWV0XHJcbiAgICAgICAgICAgICAgICBpZiAoZG9jdW1lbnRJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbW9ba2V5TmFtZV0gPSBkb2N1bWVudEl0ZW0uSXRlbUtleTtcclxuICAgICAgICAgICAgICAgICAgICBtby4kZG9jdW1lbnRJdGVtID0gZG9jdW1lbnRJdGVtO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlTW8uZW1pdChtbyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfaW5pdENvbHVtbkZpZWxkKGFsbENvbHVtbnM6IFJlcG9ydFZpZXdDb2x1bW5bXSwgdmlld1NldHRpbmc6IERvY3VtZW50c1NldHRpbmcpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBrZXlDb2x1bW4gPSB0aGlzLl9maW5kQ29sdW1uQnlEYk5hbWUudHJhbnNmb3JtKGFsbENvbHVtbnMsIHZpZXdTZXR0aW5nLkl0ZW1LZXlGaWVsZCk7XHJcbiAgICAgICAgY29uc3QgZmlsZUNvbHVtbiA9IHRoaXMuX2ZpbmRDb2x1bW5CeURiTmFtZS50cmFuc2Zvcm0oYWxsQ29sdW1ucywgdmlld1NldHRpbmcuRmlsZUZpZWxkKTtcclxuICAgICAgICBjb25zdCBhY2NlcHRlZENvbHVtbiA9IHRoaXMuX2ZpbmRDb2x1bW5CeURiTmFtZS50cmFuc2Zvcm0oYWxsQ29sdW1ucywgdmlld1NldHRpbmcuQWNjZXB0ZWRGaWVsZCk7XHJcbiAgICAgICAgY29uc3QgcmVqZWN0ZWRSZWFzb25Db2x1bW4gPSB0aGlzLl9maW5kQ29sdW1uQnlEYk5hbWUudHJhbnNmb3JtKGFsbENvbHVtbnMsIHZpZXdTZXR0aW5nLlJlamVjdGVkUmVhc29uRmllbGQpO1xyXG4gICAgICAgIGNvbnN0IHN0YXR1c0NvbHVtbiA9IHRoaXMuX2ZpbmRDb2x1bW5CeURiTmFtZS50cmFuc2Zvcm0oYWxsQ29sdW1ucywgdmlld1NldHRpbmcuU3RhdHVzRmllbGQpO1xyXG4gICAgICAgICFrZXlDb2x1bW4gJiYgdGhpcy5fY29sdW1uTm90RXhpc3RzSW5SZXBvcnQodmlld1NldHRpbmcuSXRlbUtleUZpZWxkKTtcclxuICAgICAgICAhZmlsZUNvbHVtbiAmJiB0aGlzLl9jb2x1bW5Ob3RFeGlzdHNJblJlcG9ydCh2aWV3U2V0dGluZy5GaWxlRmllbGQpO1xyXG4gICAgICAgICFyZWplY3RlZFJlYXNvbkNvbHVtbiAmJiB0aGlzLl9jb2x1bW5Ob3RFeGlzdHNJblJlcG9ydCh2aWV3U2V0dGluZy5SZWplY3RlZFJlYXNvbkZpZWxkKTtcclxuICAgICAgICAhYWNjZXB0ZWRDb2x1bW4gJiYgdGhpcy5fY29sdW1uTm90RXhpc3RzSW5SZXBvcnQodmlld1NldHRpbmcuQWNjZXB0ZWRGaWVsZCk7XHJcbiAgICAgICAgIXN0YXR1c0NvbHVtbiAmJiB0aGlzLl9jb2x1bW5Ob3RFeGlzdHNJblJlcG9ydCh2aWV3U2V0dGluZy5TdGF0dXNGaWVsZCk7XHJcblxyXG4gICAgICAgIGtleUNvbHVtbiAmJiAodGhpcy5rZXlDb2x1bW4gPSBrZXlDb2x1bW4pO1xyXG4gICAgICAgIGZpbGVDb2x1bW4gJiYgKHRoaXMuZmlsZUNvbHVtbiA9IGZpbGVDb2x1bW4pO1xyXG4gICAgICAgIGFjY2VwdGVkQ29sdW1uICYmICh0aGlzLmFjY2VwdGVkQ29sdW1uID0gYWNjZXB0ZWRDb2x1bW4pO1xyXG4gICAgICAgIHJlamVjdGVkUmVhc29uQ29sdW1uICYmICh0aGlzLnJlamVjdGVkUmVhc29uQ29sdW1uID0gcmVqZWN0ZWRSZWFzb25Db2x1bW4pO1xyXG4gICAgICAgIHN0YXR1c0NvbHVtbiAmJiAodGhpcy5zdGF0dXNDb2x1bW4gPSBzdGF0dXNDb2x1bW4pO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF9zdWJzY3JpYmVPblVwbG9hZEZpbGUoZmlsZUNvbHVtbjogUmVwb3J0Vmlld0NvbHVtbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2ZpbGVzVmFsaWRhdGlvbkhlbHBlciA9IG5ldyBGaWxlc1ZhbGlkYXRpb25IZWxwZXIoMCwgMCwgMCk7XHJcbiAgICAgICAgaWYgKHRoaXMuX3VwbG9hZFNlcnZpY2UpIHtcclxuICAgICAgICAgICAgdGhpcy5fY3JlYXRlTGluZWFySGVscGVyKHRoaXMuX3VwbG9hZFNlcnZpY2UsIHRoaXMuX2ZpbGVzVmFsaWRhdGlvbkhlbHBlciwgZmlsZUNvbHVtbi5GaWVsZERlZklkKTtcclxuICAgICAgICAgICAgdGhpcy51cGxvYWRpbmdTdGF0ZSQgPSB0aGlzLl91cGxvYWRTZXJ2aWNlLnVwbG9hZGluZ1N0YXRlJDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VwbG9hZFNlcnZpY2Ugbm90IHByb3ZpZGVkLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fbGluZWFySGVscGVyLm5ld0ZpbGVVcGxvYWRlZCQuc3Vic2NyaWJlKChmaWxlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1vID0gdGhpcy5tb0RhdGFMaXN0LmZpbmQoKGMpID0+IGMuSWQgPT09IHRoaXMuc2VsZWN0ZWRNby5JZCk7XHJcbiAgICAgICAgICAgIGlmIChtbykge1xyXG4gICAgICAgICAgICAgICAgbW9bZmlsZUNvbHVtbi5OYW1lXS5GaWxlcyA9IFsuLi5tb1tmaWxlQ29sdW1uLk5hbWVdLkZpbGVzLCBmaWxlXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZU1vKG1vKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF91cGRhdGVNbyhtbzogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xyXG4gICAgICAgIG1vLiROZXdJbmxpbmVNbyA9IHVuZGVmaW5lZDtcclxuICAgICAgICBpZiAobW8uJFN0YXRlID09PSAnVW5jaGFuZ2VkJykge1xyXG4gICAgICAgICAgICBtby4kU3RhdGUgPSAnTW9kaWZpZWQnO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnVwZGF0ZU1vLmVtaXQobW8pO1xyXG4gICAgICAgIHRoaXMuX2NoZWNrTWFuZGF0b3J5KCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX2NyZWF0ZUxpbmVhckhlbHBlcihcclxuICAgICAgICB1cGxvYWRTZXJ2aWNlOiBVcGxvYWRTZXJ2aWNlLFxyXG4gICAgICAgIGZpbGVzVmFsaWRhdGlvbkhlbHBlcjogRmlsZXNWYWxpZGF0aW9uSGVscGVyLFxyXG4gICAgICAgIGZpZWxkRGVmSWQ6IHN0cmluZ1xyXG4gICAgKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fbGluZWFySGVscGVyID0gbmV3IExpbmVhckxpc3RIZWxwZXIodXBsb2FkU2VydmljZSwgZmlsZXNWYWxpZGF0aW9uSGVscGVyLCBmaWVsZERlZklkKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfdXBsb2FkRmlsZShmaWxlczogRmlsZVtdLCBkb2N1bWVudEl0ZW06IERvY3VtZW50SXRlbSk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGZpbGVzVmFsaWRhdGlvbkhlbHBlciA9IHRoaXMuX2ZpbGVzVmFsaWRhdGlvbkhlbHBlcjtcclxuICAgICAgICBmaWxlc1ZhbGlkYXRpb25IZWxwZXIubWF4RmlsZUNvdW50ID0gK2RvY3VtZW50SXRlbS5NYXhGaWxlQ291bnQ7XHJcbiAgICAgICAgZmlsZXNWYWxpZGF0aW9uSGVscGVyLm1heEZpbGVTaXplID0gK2RvY3VtZW50SXRlbS5FYWNoRmlsZVNpemU7XHJcbiAgICAgICAgZmlsZXNWYWxpZGF0aW9uSGVscGVyLm1heFRvdGFsRmlsZVNpemUgPSArZG9jdW1lbnRJdGVtLk1heEZpbGVTaXplO1xyXG4gICAgICAgIHRoaXMuX2xpbmVhckhlbHBlci51cGxvYWRUb1NlcnZlcihmaWxlcywgZG9jdW1lbnRJdGVtLlRpdGxlKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfY29sdW1uTm90RXhpc3RzSW5SZXBvcnQoY29sdW1uQ2FwdGlvbik6IHZvaWQge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgY2FuIG5vdCBmaW5kICR7Y29sdW1uQ2FwdGlvbn0gY29sdW1uIGluIHJlcG9ydC5wbGVhc2UgYWRkIGl0IHRvIHJlcG9ydCBjb2x1bW5zLmApO1xyXG4gICAgfVxyXG59XHJcbiIsIjwhLS0gPHVsIGZkLWxpc3QgW2J5bGluZV09XCJ0cnVlXCIgZmRDb21wYWN0IFtzZWxlY3Rpb25dPVwiZmFsc2VcIj4gLS0+XHJcbjx0YWJsZSBmZC10YWJsZSBhcmlhLWxhYmVsPVwiRGVmYXVsdFwiIFthbGxDZWxsc0ZvY3VzYWJsZV09XCJ0cnVlXCIgW25vQm9yZGVyWF09XCJ0cnVlXCI+XHJcbiAgICA8dGhlYWQgZmQtdGFibGUtaGVhZGVyPlxyXG4gICAgICAgIDx0ciBmZC10YWJsZS1yb3c+XHJcbiAgICAgICAgICAgIDx0aCBmZC10YWJsZS1jZWxsPnt7ICfYudqp2LMnIHwgYmJiVHJhbnNsYXRlIH19PC90aD5cclxuICAgICAgICAgICAgPHRoIGZkLXRhYmxlLWNlbGwgc3R5bGU9XCJtaW4td2lkdGg6IDE0MHB4OyB3aWR0aDogYXV0b1wiPnt7ICfZhtmI2Lkg2YXYr9ix2qknIHwgYmJiVHJhbnNsYXRlIH19PC90aD5cclxuICAgICAgICAgICAgPHRoIGZkLXRhYmxlLWNlbGwgc3R5bGU9XCJ3aWR0aDogOTklXCI+e3sgJ9in2YTYtdin2YIg2YHYp9uM2YQnIHwgYmJiVHJhbnNsYXRlIH19PC90aD5cclxuICAgICAgICAgICAgPHRoIGZkLXRhYmxlLWNlbGw+PC90aD5cclxuICAgICAgICAgICAgPHRoIGZkLXRhYmxlLWNlbGwgc3R5bGU9XCJ3aWR0aDogNDAwcHg7IG1pbi13aWR0aDogNDAwcHg7IG1heC13aWR0aDogNDAwcHhcIj57eyAn2YjYtti524zYqicgfCBiYmJUcmFuc2xhdGUgfX08L3RoPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICA8L3RoZWFkPlxyXG4gICAgPHRib2R5IGZkLXRhYmxlLWJvZHk+XHJcbiAgICAgICAgQGZvciAobW8gb2YgbW9EYXRhTGlzdDsgdHJhY2sgX3RyYWNrQnlSb3coJGluZGV4LCBtbykpIHsgQGlmIChtby4kZG9jdW1lbnRJdGVtKSB7XHJcbiAgICAgICAgPGJkYy1iYXJzYS1kb2N1bWVudC1saXN0LWl0ZW1cclxuICAgICAgICAgICAgW2RvY3VtZW50SXRlbV09XCJtby4kZG9jdW1lbnRJdGVtXCJcclxuICAgICAgICAgICAgW2FjY2VwdGVkXT1cIm1vW2FjY2VwdGVkQ29sdW1uLk5hbWVdXCJcclxuICAgICAgICAgICAgW2ZpbGVzXT1cIm1vW2ZpbGVDb2x1bW4uTmFtZV0uRmlsZXNcIlxyXG4gICAgICAgICAgICBbdXBsb2FkaW5nU3RhdGVdPVwiKHVwbG9hZGluZ1N0YXRlJCB8IGFzeW5jKSEhXCJcclxuICAgICAgICAgICAgW3JlamVjdGVkUmVhc29uXT1cIm1vW3JlamVjdGVkUmVhc29uQ29sdW1uLk5hbWVdXCJcclxuICAgICAgICAgICAgW2ZpbGVEYk5hbWVdPVwiZmlsZUNvbHVtbi5OYW1lXCJcclxuICAgICAgICAgICAgW3N0YXR1c109XCIrbW9bc3RhdHVzQ29sdW1uLk5hbWVdXCJcclxuICAgICAgICAgICAgW2RldmljZVNpemVdPVwiZGV2aWNlU2l6ZVwiXHJcbiAgICAgICAgICAgIFtyZWFkb25seV09XCIhYWNjZXNzLkVkaXRcIlxyXG4gICAgICAgICAgICBbZGV2aWNlU2l6ZV09XCJkZXZpY2VTaXplXCJcclxuICAgICAgICAgICAgKHJlbW92ZUZpbGUpPVwib25SZW1vdmVGaWxlKCRldmVudCwgbW8pXCJcclxuICAgICAgICAgICAgKGZpbGVTZWxlY3Rpb25DaGFuZ2UpPVwib25GaWxlU2VsZWN0aW9uKCRldmVudCwgbW8uJGRvY3VtZW50SXRlbSwgbW8pXCJcclxuICAgICAgICAgICAgKHJlamVjdFRleHRDaGFuZ2UpPVwib25SZWplY3RlZFRleHRDaGFuZ2UoJGV2ZW50LCBtbylcIlxyXG4gICAgICAgICAgICAoc3RhdHVzQ2hhbmdlZCk9XCJvblN0YXR1c0NoYW5nZWQoJGV2ZW50LCBtbylcIlxyXG4gICAgICAgID48L2JkYy1iYXJzYS1kb2N1bWVudC1saXN0LWl0ZW0+XHJcbiAgICAgICAgfSB9XHJcbiAgICAgICAgPCEtLSA8L3VsPiAtLT5cclxuICAgIDwvdGJvZHk+XHJcbjwvdGFibGU+XHJcbiJdfQ==
@@ -1,173 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, Input, Output, EventEmitter } from '@angular/core';
2
- import { BaseComponent } from 'barsa-novin-ray-core';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@fundamental-ngx/core/button";
5
- export class BarsaGeographicLocationComponent extends BaseComponent {
6
- constructor(_el) {
7
- super();
8
- this._el = _el;
9
- this.move = new EventEmitter();
10
- this.moveEnd = new EventEmitter();
11
- this.fullscreen = new EventEmitter();
12
- this.exitFullscreen = new EventEmitter();
13
- this.errorEvent = new EventEmitter();
14
- this.markerChange = new EventEmitter();
15
- this._navigatorOptions = {
16
- enableHighAccuracy: true,
17
- timeout: 5000,
18
- maximumAge: 0
19
- };
20
- }
21
- ngOnChanges(changes) {
22
- super.ngOnChanges(changes);
23
- const { longitude, latitude } = changes;
24
- if (latitude?.firstChange === false || longitude?.firstChange === false) {
25
- this._setGeoLocation({
26
- latitude: latitude.currentValue,
27
- longitude: longitude.currentValue
28
- }, this.disableOrReadonly, true, false);
29
- }
30
- }
31
- ngAfterViewInit() {
32
- super.ngAfterViewInit();
33
- head.load([
34
- 'Lib/leaflet/leaflet.css',
35
- 'Lib/leaflet/leaflet-src.js',
36
- 'Lib/leaflet/SearchControl.js',
37
- 'Lib/leaflet/BeautifyMarker-master/leaflet-beautify-marker-icon.css',
38
- 'Lib/leaflet/BeautifyMarker-master/leaflet-beautify-marker-icon.js',
39
- 'Lib/leaflet/BeautifyMarker-master/leaflet-beautify-marker.js',
40
- 'Lib/leaflet/BeautifyMarker-master/leaflet-beautify-marker-icon-barsa.js'
41
- ], () => this._initilaize());
42
- }
43
- onCurrentLocation() {
44
- if (this.disableOrReadonly) {
45
- return;
46
- }
47
- this._getNavigatorCurrentPosition();
48
- }
49
- onFullscreen() {
50
- this.fullscreen.emit();
51
- }
52
- onExitFullscreen() {
53
- this.exitFullscreen.emit();
54
- }
55
- _addMarkers(disableOrReadonly, pos) {
56
- this._setGeoLocation({ latitude: pos[0], longitude: pos[1] }, disableOrReadonly);
57
- }
58
- _initilaize() {
59
- this._map = L.map(this._el.nativeElement);
60
- const location = this.defaultLocation;
61
- if (this.latitude) {
62
- location[0] = Number(this.latitude);
63
- location[1] = Number(this.longitude);
64
- }
65
- this._setGeoLocation({
66
- latitude: location[0],
67
- longitude: location[1]
68
- }, this.disableOrReadonly, true, false);
69
- if (!this.disableOrReadonly && this.setAutomaticLocation && !this.latitude) {
70
- // درصورتی که از قبل مقدار نداشته باشد
71
- this._getNavigatorCurrentPosition();
72
- }
73
- }
74
- _onErrorNavigatorLocation(err) {
75
- this.errorEvent.emit(err);
76
- }
77
- _setGeoLocation(position, disableOrReadonly = false, setView = false, fireEvent = true) {
78
- if (this._marker) {
79
- this._map.removeLayer(this._marker);
80
- this._marker = null;
81
- }
82
- const { latitude, longitude } = position;
83
- L.tileLayer('https://api.mapbox.com/styles/v1/{id}/tiles/{z}/{x}/{y}?access_token={accessToken}', {
84
- attribution: '',
85
- maxZoom: 18,
86
- id: 'mapbox/streets-v11',
87
- tileSize: 512,
88
- zoomOffset: -1,
89
- accessToken: 'pk.eyJ1IjoibXJlemFkZXZlbG9wZXIiLCJhIjoiY2p6anlrdTE2MDBxdjNtczZtYWFqbHFmdiJ9.SzniRy2KH6U3gdbOFnwA7Q'
90
- }).addTo(this._map);
91
- if (setView) {
92
- this._map.setView([latitude, longitude], 18);
93
- }
94
- const marker = this._createMarker('0', { mo: 'test' }, latitude, longitude, 'my location', '', !disableOrReadonly && this.draggable === true);
95
- marker.addTo(this._map);
96
- this._marker = marker;
97
- if (!disableOrReadonly && fireEvent) {
98
- this.markerChange.emit({ latitude, longitude });
99
- }
100
- }
101
- _getNavigatorCurrentPosition() {
102
- if (navigator.geolocation) {
103
- navigator.geolocation.getCurrentPosition((position) => this._setGeoLocation({ latitude: position.coords.latitude, longitude: position.coords.longitude }, this.disableOrReadonly, true), (err) => this._onErrorNavigatorLocation(err), this._navigatorOptions);
104
- }
105
- }
106
- _createMarker(id, mo, lat, lng, text, icon, draggable) {
107
- const markerCfg = {
108
- Id: id,
109
- Data: mo,
110
- title: text,
111
- draggable,
112
- icon: L.divIcon({
113
- html: icon
114
- ? `<fd-icon style="font-size:1rem" class="sap-icon--${icon}"></fd-icon>`
115
- : `<img style="width:32px" src="${'assets/svg/location-sign.svg'}"/>`,
116
- iconSize: [20, 20],
117
- className: 'my-location'
118
- })
119
- };
120
- // var marker = L.BeautifyMarker.marker([Number(lat), Number(lng)], {
121
- const marker = L.marker([Number(lat), Number(lng)], markerCfg);
122
- marker.on('moveend', (e) => {
123
- this._onMoveEnd(e);
124
- });
125
- marker.on('move', (e) => {
126
- this._onMove(e);
127
- });
128
- return marker;
129
- }
130
- _onMove(e) {
131
- this.move.emit(e);
132
- }
133
- _onMoveEnd(e) {
134
- this.moveEnd.emit(e);
135
- }
136
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BarsaGeographicLocationComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
137
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: BarsaGeographicLocationComponent, selector: "bdc-barsa-geographic-location", inputs: { disableOrReadonly: "disableOrReadonly", setAutomaticLocation: "setAutomaticLocation", showLocationButton: "showLocationButton", showFullscreenButton: "showFullscreenButton", showExitFullscreenButton: "showExitFullscreenButton", draggable: "draggable", defaultLocation: "defaultLocation", latitude: "latitude", longitude: "longitude" }, outputs: { move: "move", moveEnd: "moveEnd", fullscreen: "fullscreen", exitFullscreen: "exitFullscreen", errorEvent: "errorEvent", markerChange: "markerChange" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div style=\"position: absolute; z-index: 1000; display: flex; flex-direction: column; row-gap: 5px; left: 0; bottom: 0\">\r\n @if (showFullscreenButton) {\r\n <button fd-button glyph=\"resize\" fdType=\"positive\" (click)=\"onFullscreen()\"></button>\r\n } @if (showExitFullscreenButton) {\r\n <button fd-button glyph=\"exitfullscreen\" fdType=\"positive\" (click)=\"onExitFullscreen()\"></button>\r\n } @if (showLocationButton || disableOrReadonly) {\r\n <button fd-button glyph=\"map\" fdType=\"positive\" (click)=\"onCurrentLocation()\"></button>\r\n }\r\n</div>\r\n", styles: [":host{display:block;min-height:300px;position:relative}\n"], dependencies: [{ kind: "component", type: i1.ButtonComponent, selector: "button[fd-button], a[fd-button], span[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
138
- }
139
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BarsaGeographicLocationComponent, decorators: [{
140
- type: Component,
141
- args: [{ selector: 'bdc-barsa-geographic-location', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<div style=\"position: absolute; z-index: 1000; display: flex; flex-direction: column; row-gap: 5px; left: 0; bottom: 0\">\r\n @if (showFullscreenButton) {\r\n <button fd-button glyph=\"resize\" fdType=\"positive\" (click)=\"onFullscreen()\"></button>\r\n } @if (showExitFullscreenButton) {\r\n <button fd-button glyph=\"exitfullscreen\" fdType=\"positive\" (click)=\"onExitFullscreen()\"></button>\r\n } @if (showLocationButton || disableOrReadonly) {\r\n <button fd-button glyph=\"map\" fdType=\"positive\" (click)=\"onCurrentLocation()\"></button>\r\n }\r\n</div>\r\n", styles: [":host{display:block;min-height:300px;position:relative}\n"] }]
142
- }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { disableOrReadonly: [{
143
- type: Input
144
- }], setAutomaticLocation: [{
145
- type: Input
146
- }], showLocationButton: [{
147
- type: Input
148
- }], showFullscreenButton: [{
149
- type: Input
150
- }], showExitFullscreenButton: [{
151
- type: Input
152
- }], draggable: [{
153
- type: Input
154
- }], defaultLocation: [{
155
- type: Input
156
- }], latitude: [{
157
- type: Input
158
- }], longitude: [{
159
- type: Input
160
- }], move: [{
161
- type: Output
162
- }], moveEnd: [{
163
- type: Output
164
- }], fullscreen: [{
165
- type: Output
166
- }], exitFullscreen: [{
167
- type: Output
168
- }], errorEvent: [{
169
- type: Output
170
- }], markerChange: [{
171
- type: Output
172
- }] } });
173
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFyc2EtZ2VvZ3JhcGhpYy1sb2NhdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1kZXZlbG9wLWNvbXBvbmVudHMvc3JjL2xpYi9iYXJzYS1nZW9ncmFwaGljLWxvY2F0aW9uL2JhcnNhLWdlb2dyYXBoaWMtbG9jYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2EtZGV2ZWxvcC1jb21wb25lbnRzL3NyYy9saWIvYmFyc2EtZ2VvZ3JhcGhpYy1sb2NhdGlvbi9iYXJzYS1nZW9ncmFwaGljLWxvY2F0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUdmLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7O0FBWXJELE1BQU0sT0FBTyxnQ0FBaUMsU0FBUSxhQUFhO0lBMEIvRCxZQUFvQixHQUFlO1FBQy9CLEtBQUssRUFBRSxDQUFDO1FBRFEsUUFBRyxHQUFILEdBQUcsQ0FBWTtRQWZ6QixTQUFJLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUMvQixZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNsQyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNoQyxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDcEMsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDaEMsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBMkIsQ0FBQztRQUc3RCxzQkFBaUIsR0FBRztZQUN4QixrQkFBa0IsRUFBRSxJQUFJO1lBQ3hCLE9BQU8sRUFBRSxJQUFJO1lBQ2IsVUFBVSxFQUFFLENBQUM7U0FDaEIsQ0FBQztJ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Y2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBBZnRlclZpZXdJbml0LFxyXG4gICAgSW5wdXQsXHJcbiAgICBPdXRwdXQsXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBFbGVtZW50UmVmLFxyXG4gICAgU2ltcGxlQ2hhbmdlc1xyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50IH0gZnJvbSAnYmFyc2Etbm92aW4tcmF5LWNvcmUnO1xyXG5cclxuZGVjbGFyZSBjb25zdCBoZWFkOiBhbnk7XHJcbmRlY2xhcmUgY29uc3QgTDogYW55O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2JkYy1iYXJzYS1nZW9ncmFwaGljLWxvY2F0aW9uJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9iYXJzYS1nZW9ncmFwaGljLWxvY2F0aW9uLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2JhcnNhLWdlb2dyYXBoaWMtbG9jYXRpb24uY29tcG9uZW50LnNjc3MnXSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gICAgc3RhbmRhbG9uZTogZmFsc2VcclxufSlcclxuZXhwb3J0IGNsYXNzIEJhcnNhR2VvZ3JhcGhpY0xvY2F0aW9uQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xyXG4gICAgQElucHV0KCkgZGlzYWJsZU9yUmVhZG9ubHk6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBzZXRBdXRvbWF0aWNMb2NhdGlvbjogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIHNob3dMb2NhdGlvbkJ1dHRvbjogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIHNob3dGdWxsc2NyZWVuQnV0dG9uOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgc2hvd0V4aXRGdWxsc2NyZWVuQnV0dG9uOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgZHJhZ2dhYmxlOiBib29sZWFuO1xyXG5cclxuICAgIEBJbnB1dCgpIGRlZmF1bHRMb2NhdGlvbjogbnVtYmVyW107XHJcbiAgICBASW5wdXQoKSBsYXRpdHVkZTogbnVtYmVyO1xyXG4gICAgQElucHV0KCkgbG9uZ2l0dWRlOiBudW1iZXI7XHJcbiAgICBAT3V0cHV0KCkgbW92ZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG1vdmVFbmQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBmdWxsc2NyZWVuID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgQE91dHB1dCgpIGV4aXRGdWxsc2NyZWVuID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgQE91dHB1dCgpIGVycm9yRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBAT3V0cHV0KCkgbWFya2VyQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx7IGxhdGl0dWRlOyBsb25naXR1ZGUgfT4oKTtcclxuXHJcbiAgICBwcml2YXRlIF9tYXA6IGFueTtcclxuICAgIHByaXZhdGUgX25hdmlnYXRvck9wdGlvbnMgPSB7XHJcbiAgICAgICAgZW5hYmxlSGlnaEFjY3VyYWN5OiB0cnVlLFxyXG4gICAgICAgIHRpbWVvdXQ6IDUwMDAsXHJcbiAgICAgICAgbWF4aW11bUFnZTogMFxyXG4gICAgfTtcclxuICAgIHByaXZhdGUgX21hcmtlcjogYW55O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX2VsOiBFbGVtZW50UmVmKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgIH1cclxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgICAgICBzdXBlci5uZ09uQ2hhbmdlcyhjaGFuZ2VzKTtcclxuICAgICAgICBjb25zdCB7IGxvbmdpdHVkZSwgbGF0aXR1ZGUgfSA9IGNoYW5nZXM7XHJcbiAgICAgICAgaWYgKGxhdGl0dWRlPy5maXJzdENoYW5nZSA9PT0gZmFsc2UgfHwgbG9uZ2l0dWRlPy5maXJzdENoYW5nZSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgdGhpcy5fc2V0R2VvTG9jYXRpb24oXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGF0aXR1ZGU6IGxhdGl0dWRlLmN1cnJlbnRWYWx1ZSxcclxuICAgICAgICAgICAgICAgICAgICBsb25naXR1ZGU6IGxvbmdpdHVkZS5jdXJyZW50VmFsdWVcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVPclJlYWRvbmx5LFxyXG4gICAgICAgICAgICAgICAgdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGZhbHNlXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHN1cGVyLm5nQWZ0ZXJWaWV3SW5pdCgpO1xyXG4gICAgICAgIGhlYWQubG9hZChcclxuICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAgJ0xpYi9sZWFmbGV0L2xlYWZsZXQuY3NzJyxcclxuICAgICAgICAgICAgICAgICdMaWIvbGVhZmxldC9sZWFmbGV0LXNyYy5qcycsXHJcbiAgICAgICAgICAgICAgICAnTGliL2xlYWZsZXQvU2VhcmNoQ29udHJvbC5qcycsXHJcbiAgICAgICAgICAgICAgICAnTGliL2xlYWZsZXQvQmVhdXRpZnlNYXJrZXItbWFzdGVyL2xlYWZsZXQtYmVhdXRpZnktbWFya2VyLWljb24uY3NzJyxcclxuICAgICAgICAgICAgICAgICdMaWIvbGVhZmxldC9CZWF1dGlmeU1hcmtlci1tYXN0ZXIvbGVhZmxldC1iZWF1dGlmeS1tYXJrZXItaWNvbi5qcycsXHJcbiAgICAgICAgICAgICAgICAnTGliL2xlYWZsZXQvQmVhdXRpZnlNYXJrZXItbWFzdGVyL2xlYWZsZXQtYmVhdXRpZnktbWFya2VyLmpzJyxcclxuICAgICAgICAgICAgICAgICdMaWIvbGVhZmxldC9CZWF1dGlmeU1hcmtlci1tYXN0ZXIvbGVhZmxldC1iZWF1dGlmeS1tYXJrZXItaWNvbi1iYXJzYS5qcydcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgKCkgPT4gdGhpcy5faW5pdGlsYWl6ZSgpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICAgIG9uQ3VycmVudExvY2F0aW9uKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVPclJlYWRvbmx5KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fZ2V0TmF2aWdhdG9yQ3VycmVudFBvc2l0aW9uKCk7XHJcbiAgICB9XHJcbiAgICBvbkZ1bGxzY3JlZW4oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5mdWxsc2NyZWVuLmVtaXQoKTtcclxuICAgIH1cclxuICAgIG9uRXhpdEZ1bGxzY3JlZW4oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5leGl0RnVsbHNjcmVlbi5lbWl0KCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX2FkZE1hcmtlcnMoZGlzYWJsZU9yUmVhZG9ubHk6IGJvb2xlYW4sIHBvczogbnVtYmVyW10pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9zZXRHZW9Mb2NhdGlvbih7IGxhdGl0dWRlOiBwb3NbMF0sIGxvbmdpdHVkZTogcG9zWzFdIH0sIGRpc2FibGVPclJlYWRvbmx5KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2luaXRpbGFpemUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fbWFwID0gTC5tYXAodGhpcy5fZWwubmF0aXZlRWxlbWVudCk7XHJcbiAgICAgICAgY29uc3QgbG9jYXRpb24gPSB0aGlzLmRlZmF1bHRMb2NhdGlvbjtcclxuICAgICAgICBpZiAodGhpcy5sYXRpdHVkZSkge1xyXG4gICAgICAgICAgICBsb2NhdGlvblswXSA9IE51bWJlcih0aGlzLmxhdGl0dWRlKTtcclxuICAgICAgICAgICAgbG9jYXRpb25bMV0gPSBOdW1iZXIodGhpcy5sb25naXR1ZGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9zZXRHZW9Mb2NhdGlvbihcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbGF0aXR1ZGU6IGxvY2F0aW9uWzBdLFxyXG4gICAgICAgICAgICAgICAgbG9uZ2l0dWRlOiBsb2NhdGlvblsxXVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVPclJlYWRvbmx5LFxyXG4gICAgICAgICAgICB0cnVlLFxyXG4gICAgICAgICAgICBmYWxzZVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5kaXNhYmxlT3JSZWFkb25seSAmJiB0aGlzLnNldEF1dG9tYXRpY0xvY2F0aW9uICYmICF0aGlzLmxhdGl0dWRlKSB7XHJcbiAgICAgICAgICAgIC8vINiv2LHYtdmI2LHYqtuMINqp2Ycg2KfYsiDZgtio2YQg2YXZgtiv2KfYsSDZhtiv2KfYtNiq2Ycg2KjYp9i02K9cclxuICAgICAgICAgICAgdGhpcy5fZ2V0TmF2aWdhdG9yQ3VycmVudFBvc2l0aW9uKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF9vbkVycm9yTmF2aWdhdG9yTG9jYXRpb24oZXJyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5lcnJvckV2ZW50LmVtaXQoZXJyKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfc2V0R2VvTG9jYXRpb24oXHJcbiAgICAgICAgcG9zaXRpb246IHsgbGF0aXR1ZGU6IGFueTsgbG9uZ2l0dWRlOiBhbnkgfSxcclxuICAgICAgICBkaXNhYmxlT3JSZWFkb25seSA9IGZhbHNlLFxyXG4gICAgICAgIHNldFZpZXcgPSBmYWxzZSxcclxuICAgICAgICBmaXJlRXZlbnQgPSB0cnVlXHJcbiAgICApOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5fbWFya2VyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX21hcC5yZW1vdmVMYXllcih0aGlzLl9tYXJrZXIpO1xyXG4gICAgICAgICAgICB0aGlzLl9tYXJrZXIgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgeyBsYXRpdHVkZSwgbG9uZ2l0dWRlIH0gPSBwb3NpdGlvbjtcclxuXHJcbiAgICAgICAgTC50aWxlTGF5ZXIoJ2h0dHBzOi8vYXBpLm1hcGJveC5jb20vc3R5bGVzL3YxL3tpZH0vdGlsZXMve3p9L3t4fS97eX0/YWNjZXNzX3Rva2VuPXthY2Nlc3NUb2tlbn0nLCB7XHJcbiAgICAgICAgICAgIGF0dHJpYnV0aW9uOiAnJyxcclxuICAgICAgICAgICAgbWF4Wm9vbTogMTgsXHJcbiAgICAgICAgICAgIGlkOiAnbWFwYm94L3N0cmVldHMtdjExJyxcclxuICAgICAgICAgICAgdGlsZVNpemU6IDUxMixcclxuICAgICAgICAgICAgem9vbU9mZnNldDogLTEsXHJcbiAgICAgICAgICAgIGFjY2Vzc1Rva2VuOlxyXG4gICAgICAgICAgICAgICAgJ3BrLmV5SjFJam9pYlhKbGVtRmtaWFpsYkc5d1pYSWlMQ0poSWpvaVkycDZhbmxyZFRFMk1EQnhkak50Y3padFlXRnFiSEZtZGlKOS5Tem5pUnkyS0g2VTNnZGJPRm53QTdRJ1xyXG4gICAgICAgIH0pLmFkZFRvKHRoaXMuX21hcCk7XHJcbiAgICAgICAgaWYgKHNldFZpZXcpIHtcclxuICAgICAgICAgICAgdGhpcy5fbWFwLnNldFZpZXcoW2xhdGl0dWRlLCBsb25naXR1ZGVdLCAxOCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG1hcmtlciA9IHRoaXMuX2NyZWF0ZU1hcmtlcihcclxuICAgICAgICAgICAgJzAnLFxyXG4gICAgICAgICAgICB7IG1vOiAndGVzdCcgfSxcclxuICAgICAgICAgICAgbGF0aXR1ZGUsXHJcbiAgICAgICAgICAgIGxvbmdpdHVkZSxcclxuICAgICAgICAgICAgJ215IGxvY2F0aW9uJyxcclxuICAgICAgICAgICAgJycsXHJcbiAgICAgICAgICAgICFkaXNhYmxlT3JSZWFkb25seSAmJiB0aGlzLmRyYWdnYWJsZSA9PT0gdHJ1ZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgbWFya2VyLmFkZFRvKHRoaXMuX21hcCk7XHJcbiAgICAgICAgdGhpcy5fbWFya2VyID0gbWFya2VyO1xyXG4gICAgICAgIGlmICghZGlzYWJsZU9yUmVhZG9ubHkgJiYgZmlyZUV2ZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMubWFya2VyQ2hhbmdlLmVtaXQoeyBsYXRpdHVkZSwgbG9uZ2l0dWRlIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfZ2V0TmF2aWdhdG9yQ3VycmVudFBvc2l0aW9uKCk6IHZvaWQge1xyXG4gICAgICAgIGlmIChuYXZpZ2F0b3IuZ2VvbG9jYXRpb24pIHtcclxuICAgICAgICAgICAgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihcclxuICAgICAgICAgICAgICAgIChwb3NpdGlvbikgPT5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZXRHZW9Mb2NhdGlvbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgeyBsYXRpdHVkZTogcG9zaXRpb24uY29vcmRzLmxhdGl0dWRlLCBsb25naXR1ZGU6IHBvc2l0aW9uLmNvb3Jkcy5sb25naXR1ZGUgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlT3JSZWFkb25seSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAoZXJyKSA9PiB0aGlzLl9vbkVycm9yTmF2aWdhdG9yTG9jYXRpb24oZXJyKSxcclxuICAgICAgICAgICAgICAgIHRoaXMuX25hdmlnYXRvck9wdGlvbnNcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX2NyZWF0ZU1hcmtlcihpZCwgbW8sIGxhdCwgbG5nLCB0ZXh0LCBpY29uLCBkcmFnZ2FibGUpOiBhbnkge1xyXG4gICAgICAgIGNvbnN0IG1hcmtlckNmZyA9IHtcclxuICAgICAgICAgICAgSWQ6IGlkLFxyXG4gICAgICAgICAgICBEYXRhOiBtbyxcclxuICAgICAgICAgICAgdGl0bGU6IHRleHQsXHJcbiAgICAgICAgICAgIGRyYWdnYWJsZSxcclxuICAgICAgICAgICAgaWNvbjogTC5kaXZJY29uKHtcclxuICAgICAgICAgICAgICAgIGh0bWw6IGljb25cclxuICAgICAgICAgICAgICAgICAgICA/IGA8ZmQtaWNvbiBzdHlsZT1cImZvbnQtc2l6ZToxcmVtXCIgY2xhc3M9XCJzYXAtaWNvbi0tJHtpY29ufVwiPjwvZmQtaWNvbj5gXHJcbiAgICAgICAgICAgICAgICAgICAgOiBgPGltZyAgc3R5bGU9XCJ3aWR0aDozMnB4XCIgc3JjPVwiJHsnYXNzZXRzL3N2Zy9sb2NhdGlvbi1zaWduLnN2Zyd9XCIvPmAsXHJcbiAgICAgICAgICAgICAgICBpY29uU2l6ZTogWzIwLCAyMF0sXHJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdteS1sb2NhdGlvbidcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvLyB2YXIgbWFya2VyID0gTC5CZWF1dGlmeU1hcmtlci5tYXJrZXIoW051bWJlcihsYXQpLCBOdW1iZXIobG5nKV0sIHtcclxuICAgICAgICBjb25zdCBtYXJrZXIgPSBMLm1hcmtlcihbTnVtYmVyKGxhdCksIE51bWJlcihsbmcpXSwgbWFya2VyQ2ZnKTtcclxuXHJcbiAgICAgICAgbWFya2VyLm9uKCdtb3ZlZW5kJywgKGUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fb25Nb3ZlRW5kKGUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIG1hcmtlci5vbignbW92ZScsIChlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX29uTW92ZShlKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG1hcmtlcjtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX29uTW92ZShlKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5tb3ZlLmVtaXQoZSk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX29uTW92ZUVuZChlKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5tb3ZlRW5kLmVtaXQoZSk7XHJcbiAgICB9XHJcbn1cclxuIiwiPGRpdiBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTsgei1pbmRleDogMTAwMDsgZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgcm93LWdhcDogNXB4OyBsZWZ0OiAwOyBib3R0b206IDBcIj5cclxuICAgIEBpZiAoc2hvd0Z1bGxzY3JlZW5CdXR0b24pIHtcclxuICAgIDxidXR0b24gZmQtYnV0dG9uIGdseXBoPVwicmVzaXplXCIgZmRUeXBlPVwicG9zaXRpdmVcIiAoY2xpY2spPVwib25GdWxsc2NyZWVuKClcIj48L2J1dHRvbj5cclxuICAgIH0gQGlmIChzaG93RXhpdEZ1bGxzY3JlZW5CdXR0b24pIHtcclxuICAgIDxidXR0b24gZmQtYnV0dG9uIGdseXBoPVwiZXhpdGZ1bGxzY3JlZW5cIiBmZFR5cGU9XCJwb3NpdGl2ZVwiIChjbGljayk9XCJvbkV4aXRGdWxsc2NyZWVuKClcIj48L2J1dHRvbj5cclxuICAgIH0gQGlmIChzaG93TG9jYXRpb25CdXR0b24gfHwgZGlzYWJsZU9yUmVhZG9ubHkpIHtcclxuICAgIDxidXR0b24gZmQtYnV0dG9uIGdseXBoPVwibWFwXCIgZmRUeXBlPVwicG9zaXRpdmVcIiAoY2xpY2spPVwib25DdXJyZW50TG9jYXRpb24oKVwiPjwvYnV0dG9uPlxyXG4gICAgfVxyXG48L2Rpdj5cclxuIl19
@@ -1,50 +0,0 @@
1
- import { Component, ChangeDetectionStrategy, ViewChild, HostBinding } from '@angular/core';
2
- import { BaseItemContentPropsComponent } from 'barsa-novin-ray-core';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "barsa-novin-ray-core";
5
- import * as i2 from "@fundamental-ngx/core/icon";
6
- import * as i3 from "@fundamental-ngx/core/title";
7
- export class CardContentImageAndTitleComponent extends BaseItemContentPropsComponent {
8
- constructor() {
9
- super(...arguments);
10
- this.backgroundColor = null;
11
- this.color = null;
12
- }
13
- ngOnInit() {
14
- super.ngOnInit();
15
- const parameters = this.parameters;
16
- if (parameters != null) {
17
- this.color = this.colorSetting = parameters.Color;
18
- this.backgroundColor = this.backgroundColorSetting = parameters.BackgroundColor;
19
- this.picture = this._rval.transform(parameters.Picture, this.mo, this.allColumns);
20
- this.title = this._rval.transform(parameters.Title, this.mo, this.allColumns);
21
- this.subtitle = this._rval.transform(parameters.Subtitle, this.mo, this.allColumns);
22
- this.icon = this._rval.transform(parameters.Icon, this.mo, this.allColumns);
23
- this.prepareNumberSign();
24
- }
25
- }
26
- prepareNumberSign() {
27
- if (this.color && Number(this.colorSetting[0])) {
28
- this.color = '#' + this.colorSetting;
29
- }
30
- if (this.backgroundColor && Number(this.backgroundColorSetting[0])) {
31
- this.backgroundColor = '#' + this.backgroundColorSetting;
32
- }
33
- }
34
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CardContentImageAndTitleComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
35
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: CardContentImageAndTitleComponent, selector: "bdc-card-content-image-and-title", host: { properties: { "style.background-color": "this.backgroundColor", "style.color": "this.color" } }, viewQueries: [{ propertyName: "iconRef", first: true, predicate: ["iconRef"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"card-content\" #elemRef>\r\n <div class=\"item-data\">\r\n @if (picture) {\r\n <img\r\n [imgLazy]=\"picture.FileId | picFieldSrc: 'ID':null:'':100:70\"\r\n height=\"70\"\r\n width=\"100\"\r\n [alt]=\"title | bbbTranslate\"\r\n />\r\n } @else { @if (icon) {\r\n <fd-icon #iconRef [glyph]=\"icon\" [style.color]=\"color\"> </fd-icon>\r\n } }\r\n </div>\r\n <h5 fd-title class=\"item-data fd-title--wrap\" [style.color]=\"color\">\r\n {{ title | bbbTranslate }}\r\n </h5>\r\n @if (subtitle) {\r\n <h6 fd-title class=\"item-data fd-title--wrap\" [style.color]=\"color\">\r\n {{ subtitle | bbbTranslate }}\r\n </h6>\r\n }\r\n</div>\r\n", styles: [":host{display:flex;justify-content:center;align-items:stretch;height:100%;width:100%;min-height:180px}:host:hover{opacity:.8}:host:hover{cursor:pointer}.card-content{display:flex;align-items:center;flex-direction:column;align-self:stretch;margin-top:auto;margin-bottom:auto;width:100%}.item-data{text-align:center}fd-icon{font-size:2.5rem}h4{height:60px;width:80%;text-align:center}h6{line-height:2rem}\n"], dependencies: [{ kind: "directive", type: i1.ImageLazyDirective, selector: "[imgLazy]", inputs: ["auto", "threshold", "imgLazy"], outputs: ["imageLoaded"] }, { kind: "component", type: i2.IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "color", "background", "class", "ariaLabel", "ariaHidden"] }, { kind: "component", type: i3.TitleComponent, selector: "[fd-title], [fdTitle]", inputs: ["headerSize", "wrap"], exportAs: ["fd-title"] }, { kind: "pipe", type: i1.PictureFieldSourcePipe, name: "picFieldSrc" }, { kind: "pipe", type: i1.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
36
- }
37
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CardContentImageAndTitleComponent, decorators: [{
38
- type: Component,
39
- args: [{ selector: 'bdc-card-content-image-and-title', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<div class=\"card-content\" #elemRef>\r\n <div class=\"item-data\">\r\n @if (picture) {\r\n <img\r\n [imgLazy]=\"picture.FileId | picFieldSrc: 'ID':null:'':100:70\"\r\n height=\"70\"\r\n width=\"100\"\r\n [alt]=\"title | bbbTranslate\"\r\n />\r\n } @else { @if (icon) {\r\n <fd-icon #iconRef [glyph]=\"icon\" [style.color]=\"color\"> </fd-icon>\r\n } }\r\n </div>\r\n <h5 fd-title class=\"item-data fd-title--wrap\" [style.color]=\"color\">\r\n {{ title | bbbTranslate }}\r\n </h5>\r\n @if (subtitle) {\r\n <h6 fd-title class=\"item-data fd-title--wrap\" [style.color]=\"color\">\r\n {{ subtitle | bbbTranslate }}\r\n </h6>\r\n }\r\n</div>\r\n", styles: [":host{display:flex;justify-content:center;align-items:stretch;height:100%;width:100%;min-height:180px}:host:hover{opacity:.8}:host:hover{cursor:pointer}.card-content{display:flex;align-items:center;flex-direction:column;align-self:stretch;margin-top:auto;margin-bottom:auto;width:100%}.item-data{text-align:center}fd-icon{font-size:2.5rem}h4{height:60px;width:80%;text-align:center}h6{line-height:2rem}\n"] }]
40
- }], propDecorators: { iconRef: [{
41
- type: ViewChild,
42
- args: ['iconRef', { static: false }]
43
- }], backgroundColor: [{
44
- type: HostBinding,
45
- args: ['style.background-color']
46
- }], color: [{
47
- type: HostBinding,
48
- args: ['style.color']
49
- }] } });
50
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC1jb250ZW50LWltYWdlLWFuZC10aXRsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1kZXZlbG9wLWNvbXBvbmVudHMvc3JjL2xpYi9jYXJkLWNvbnRlbnQtaW1hZ2UtYW5kLXRpdGxlL2NhcmQtY29udGVudC1pbWFnZS1hbmQtdGl0bGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2EtZGV2ZWxvcC1jb21wb25lbnRzL3NyYy9saWIvY2FyZC1jb250ZW50LWltYWdlLWFuZC10aXRsZS9jYXJkLWNvbnRlbnQtaW1hZ2UtYW5kLXRpdGxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsdUJBQXVCLEVBQUUsU0FBUyxFQUFjLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRyxPQUFPLEVBQXdCLDZCQUE2QixFQUEyQixNQUFNLHNCQUFzQixDQUFDOzs7OztBQVNwSCxNQUFNLE9BQU8saUNBQ1QsU0FBUSw2QkFBc0Q7SUFSbEU7O1FBYTJDLG9CQUFlLEdBQWtCLElBQUksQ0FBQztRQUNqRCxVQUFLLEdBQWtCLElBQUksQ0FBQztLQWtDM0Q7SUF6QkcsUUFBUTtRQUNKLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ25DLElBQUksVUFBVSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDO1lBQ2xELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixHQUFHLFVBQVUsQ0FBQyxlQUFlLENBQUM7WUFFaEYsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2xGLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM5RSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDcEYsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBRTVFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQzdCLENBQUM7SUFDTCxDQUFDO0lBRU8saUJBQWlCO1FBQ3JCLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDN0MsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUN6QyxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2pFLElBQUksQ0FBQyxlQUFlLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztRQUM3RCxDQUFDO0lBQ0wsQ0FBQzsrR0F4Q1EsaUNBQWlDO21HQUFqQyxpQ0FBaUMsNFNDVjlDLGl3QkFzQkE7OzRGRFphLGlDQUFpQztrQkFQN0MsU0FBUzsrQkFDSSxrQ0FBa0MsbUJBRzNCLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsS0FBSzs4QkFNd0IsT0FBTztzQkFBL0MsU0FBUzt1QkFBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUVBLGVBQWU7c0JBQXJELFdBQVc7dUJBQUMsd0JBQXdCO2dCQUNULEtBQUs7c0JBQWhDLFdBQVc7dUJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBIb3N0QmluZGluZyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGaWxlUGljdHVyZUluZm9Nb2RlbCwgQmFzZUl0ZW1Db250ZW50UHJvcHNDb21wb25lbnQsIFVpUmVwb3J0Vmlld0Jhc2VTZXR0aW5nIH0gZnJvbSAnYmFyc2Etbm92aW4tcmF5LWNvcmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2JkYy1jYXJkLWNvbnRlbnQtaW1hZ2UtYW5kLXRpdGxlJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jYXJkLWNvbnRlbnQtaW1hZ2UtYW5kLXRpdGxlLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2NhcmQtY29udGVudC1pbWFnZS1hbmQtdGl0bGUuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gICAgc3RhbmRhbG9uZTogZmFsc2VcclxufSlcclxuZXhwb3J0IGNsYXNzIENhcmRDb250ZW50SW1hZ2VBbmRUaXRsZUNvbXBvbmVudFxyXG4gICAgZXh0ZW5kcyBCYXNlSXRlbUNvbnRlbnRQcm9wc0NvbXBvbmVudDxVaVJlcG9ydFZpZXdCYXNlU2V0dGluZz5cclxuICAgIGltcGxlbWVudHMgT25Jbml0XHJcbntcclxuICAgIEBWaWV3Q2hpbGQoJ2ljb25SZWYnLCB7IHN0YXRpYzogZmFsc2UgfSkgaWNvblJlZjogRWxlbWVudFJlZjtcclxuXHJcbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLmJhY2tncm91bmQtY29sb3InKSBiYWNrZ3JvdW5kQ29sb3I6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5jb2xvcicpIGNvbG9yOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICBiYWNrZ3JvdW5kQ29sb3JTZXR0aW5nOiBzdHJpbmc7XHJcbiAgICB0aXRsZTogc3RyaW5nO1xyXG4gICAgc3VidGl0bGU6IHN0cmluZztcclxuICAgIGljb246IHN0cmluZztcclxuICAgIGNvbG9yU2V0dGluZzogc3RyaW5nO1xyXG4gICAgcGljdHVyZTogRmlsZVBpY3R1cmVJbmZvTW9kZWw7XHJcblxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcclxuICAgICAgICBjb25zdCBwYXJhbWV0ZXJzID0gdGhpcy5wYXJhbWV0ZXJzO1xyXG4gICAgICAgIGlmIChwYXJhbWV0ZXJzICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5jb2xvciA9IHRoaXMuY29sb3JTZXR0aW5nID0gcGFyYW1ldGVycy5Db2xvcjtcclxuICAgICAgICAgICAgdGhpcy5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLmJhY2tncm91bmRDb2xvclNldHRpbmcgPSBwYXJhbWV0ZXJzLkJhY2tncm91bmRDb2xvcjtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucGljdHVyZSA9IHRoaXMuX3J2YWwudHJhbnNmb3JtKHBhcmFtZXRlcnMuUGljdHVyZSwgdGhpcy5tbywgdGhpcy5hbGxDb2x1bW5zKTtcclxuICAgICAgICAgICAgdGhpcy50aXRsZSA9IHRoaXMuX3J2YWwudHJhbnNmb3JtKHBhcmFtZXRlcnMuVGl0bGUsIHRoaXMubW8sIHRoaXMuYWxsQ29sdW1ucyk7XHJcbiAgICAgICAgICAgIHRoaXMuc3VidGl0bGUgPSB0aGlzLl9ydmFsLnRyYW5zZm9ybShwYXJhbWV0ZXJzLlN1YnRpdGxlLCB0aGlzLm1vLCB0aGlzLmFsbENvbHVtbnMpO1xyXG4gICAgICAgICAgICB0aGlzLmljb24gPSB0aGlzLl9ydmFsLnRyYW5zZm9ybShwYXJhbWV0ZXJzLkljb24sIHRoaXMubW8sIHRoaXMuYWxsQ29sdW1ucyk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnByZXBhcmVOdW1iZXJTaWduKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcHJlcGFyZU51bWJlclNpZ24oKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29sb3IgJiYgTnVtYmVyKHRoaXMuY29sb3JTZXR0aW5nWzBdKSkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbG9yID0gJyMnICsgdGhpcy5jb2xvclNldHRpbmc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5iYWNrZ3JvdW5kQ29sb3IgJiYgTnVtYmVyKHRoaXMuYmFja2dyb3VuZENvbG9yU2V0dGluZ1swXSkpIHtcclxuICAgICAgICAgICAgdGhpcy5iYWNrZ3JvdW5kQ29sb3IgPSAnIycgKyB0aGlzLmJhY2tncm91bmRDb2xvclNldHRpbmc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJjYXJkLWNvbnRlbnRcIiAjZWxlbVJlZj5cclxuICAgIDxkaXYgY2xhc3M9XCJpdGVtLWRhdGFcIj5cclxuICAgICAgICBAaWYgKHBpY3R1cmUpIHtcclxuICAgICAgICA8aW1nXHJcbiAgICAgICAgICAgIFtpbWdMYXp5XT1cInBpY3R1cmUuRmlsZUlkIHwgcGljRmllbGRTcmM6ICdJRCc6bnVsbDonJzoxMDA6NzBcIlxyXG4gICAgICAgICAgICBoZWlnaHQ9XCI3MFwiXHJcbiAgICAgICAgICAgIHdpZHRoPVwiMTAwXCJcclxuICAgICAgICAgICAgW2FsdF09XCJ0aXRsZSB8IGJiYlRyYW5zbGF0ZVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgICB9IEBlbHNlIHsgQGlmIChpY29uKSB7XHJcbiAgICAgICAgPGZkLWljb24gI2ljb25SZWYgW2dseXBoXT1cImljb25cIiBbc3R5bGUuY29sb3JdPVwiY29sb3JcIj4gPC9mZC1pY29uPlxyXG4gICAgICAgIH0gfVxyXG4gICAgPC9kaXY+XHJcbiAgICA8aDUgZmQtdGl0bGUgY2xhc3M9XCJpdGVtLWRhdGEgZmQtdGl0bGUtLXdyYXBcIiBbc3R5bGUuY29sb3JdPVwiY29sb3JcIj5cclxuICAgICAgICB7eyB0aXRsZSB8IGJiYlRyYW5zbGF0ZSB9fVxyXG4gICAgPC9oNT5cclxuICAgIEBpZiAoc3VidGl0bGUpIHtcclxuICAgIDxoNiBmZC10aXRsZSBjbGFzcz1cIml0ZW0tZGF0YSBmZC10aXRsZS0td3JhcFwiIFtzdHlsZS5jb2xvcl09XCJjb2xvclwiPlxyXG4gICAgICAgIHt7IHN1YnRpdGxlIHwgYmJiVHJhbnNsYXRlIH19XHJcbiAgICA8L2g2PlxyXG4gICAgfVxyXG48L2Rpdj5cclxuIl19
@@ -1,36 +0,0 @@
1
- import { Component, ChangeDetectionStrategy } from '@angular/core';
2
- import { BarsaApi, BaseItemContentPropsComponent } from 'barsa-novin-ray-core';
3
- import * as i0 from "@angular/core";
4
- export class CardContentLineChartComponent extends BaseItemContentPropsComponent {
5
- ngOnInit() {
6
- super.ngOnInit();
7
- const parameters = this.parameters;
8
- const { MethodParametersFieldName, RunBlMethodName } = parameters;
9
- const methodParameters = [];
10
- MethodParametersFieldName.split(',').forEach((c) => {
11
- const value = this.mo[c];
12
- if (typeof value === 'object' && value.Id) {
13
- methodParameters.push(value.Id);
14
- }
15
- else {
16
- methodParameters.push(value);
17
- }
18
- });
19
- BarsaApi.Bw.RunBlMethodAsync({
20
- Parameters: methodParameters,
21
- Method: RunBlMethodName,
22
- SuccessFn: (chartOption) => {
23
- this.chartOption = JSON.parse(chartOption);
24
- this._cdr.detectChanges();
25
- },
26
- FailFn: () => { }
27
- });
28
- }
29
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CardContentLineChartComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
30
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: CardContentLineChartComponent, selector: "bdc-card-content-line-chart", usesInheritance: true, ngImport: i0, template: "@if (chartOption) {\r\n<div class=\"card-content\" #elemRef>\r\n <div beChartLineTime [chartOption]=\"chartOption\"></div>\r\n</div>\r\n}\r\n", styles: [":host{display:block;padding:15px}.card-content{height:300px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
31
- }
32
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CardContentLineChartComponent, decorators: [{
33
- type: Component,
34
- args: [{ selector: 'bdc-card-content-line-chart', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "@if (chartOption) {\r\n<div class=\"card-content\" #elemRef>\r\n <div beChartLineTime [chartOption]=\"chartOption\"></div>\r\n</div>\r\n}\r\n", styles: [":host{display:block;padding:15px}.card-content{height:300px}\n"] }]
35
- }] });
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC1jb250ZW50LWxpbmUtY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2EtZGV2ZWxvcC1jb21wb25lbnRzL3NyYy9saWIvY2FyZC1jb250ZW50LWxpbmUtY2hhcnQvY2FyZC1jb250ZW50LWxpbmUtY2hhcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2EtZGV2ZWxvcC1jb21wb25lbnRzL3NyYy9saWIvY2FyZC1jb250ZW50LWxpbmUtY2hhcnQvY2FyZC1jb250ZW50LWxpbmUtY2hhcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSx1QkFBdUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUUsUUFBUSxFQUFFLDZCQUE2QixFQUEyQixNQUFNLHNCQUFzQixDQUFDOztBQVN4RyxNQUFNLE9BQU8sNkJBQ1QsU0FBUSw2QkFBc0Q7SUFLOUQsUUFBUTtRQUNKLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ25DLE1BQU0sRUFBRSx5QkFBeUIsRUFBRSxlQUFlLEVBQUUsR0FBRyxVQUFVLENBQUM7UUFDbEUsTUFBTSxnQkFBZ0IsR0FBUSxFQUFFLENBQUM7UUFDakMseUJBQXlCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQy9DLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekIsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUN4QyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3BDLENBQUM7aUJBQU0sQ0FBQztnQkFDSixnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDakMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsUUFBUSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztZQUN6QixVQUFVLEVBQUUsZ0JBQWdCO1lBQzVCLE1BQU0sRUFBRSxlQUFlO1lBQ3ZCLFNBQVMsRUFBRSxDQUFDLFdBQW1CLEVBQUUsRUFBRTtnQkFDL0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUMzQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzlCLENBQUM7WUFDRCxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUUsQ0FBQztTQUNuQixDQUFDLENBQUM7SUFDUCxDQUFDOytHQTVCUSw2QkFBNkI7bUdBQTdCLDZCQUE2QiwwRkNWMUMsa0pBS0E7OzRGREthLDZCQUE2QjtrQkFQekMsU0FBUzsrQkFDSSw2QkFBNkIsbUJBR3RCLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCYXJzYUFwaSwgQmFzZUl0ZW1Db250ZW50UHJvcHNDb21wb25lbnQsIFVpUmVwb3J0Vmlld0Jhc2VTZXR0aW5nIH0gZnJvbSAnYmFyc2Etbm92aW4tcmF5LWNvcmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2JkYy1jYXJkLWNvbnRlbnQtbGluZS1jaGFydCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2FyZC1jb250ZW50LWxpbmUtY2hhcnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vY2FyZC1jb250ZW50LWxpbmUtY2hhcnQuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gICAgc3RhbmRhbG9uZTogZmFsc2VcclxufSlcclxuZXhwb3J0IGNsYXNzIENhcmRDb250ZW50TGluZUNoYXJ0Q29tcG9uZW50XHJcbiAgICBleHRlbmRzIEJhc2VJdGVtQ29udGVudFByb3BzQ29tcG9uZW50PFVpUmVwb3J0Vmlld0Jhc2VTZXR0aW5nPlxyXG4gICAgaW1wbGVtZW50cyBPbkluaXRcclxue1xyXG4gICAgY2hhcnRPcHRpb246IGFueTtcclxuXHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG4gICAgICAgIGNvbnN0IHBhcmFtZXRlcnMgPSB0aGlzLnBhcmFtZXRlcnM7XHJcbiAgICAgICAgY29uc3QgeyBNZXRob2RQYXJhbWV0ZXJzRmllbGROYW1lLCBSdW5CbE1ldGhvZE5hbWUgfSA9IHBhcmFtZXRlcnM7XHJcbiAgICAgICAgY29uc3QgbWV0aG9kUGFyYW1ldGVyczogYW55ID0gW107XHJcbiAgICAgICAgTWV0aG9kUGFyYW1ldGVyc0ZpZWxkTmFtZS5zcGxpdCgnLCcpLmZvckVhY2goKGMpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLm1vW2NdO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZS5JZCkge1xyXG4gICAgICAgICAgICAgICAgbWV0aG9kUGFyYW1ldGVycy5wdXNoKHZhbHVlLklkKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1ldGhvZFBhcmFtZXRlcnMucHVzaCh2YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBCYXJzYUFwaS5Cdy5SdW5CbE1ldGhvZEFzeW5jKHtcclxuICAgICAgICAgICAgUGFyYW1ldGVyczogbWV0aG9kUGFyYW1ldGVycyxcclxuICAgICAgICAgICAgTWV0aG9kOiBSdW5CbE1ldGhvZE5hbWUsXHJcbiAgICAgICAgICAgIFN1Y2Nlc3NGbjogKGNoYXJ0T3B0aW9uOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hhcnRPcHRpb24gPSBKU09OLnBhcnNlKGNoYXJ0T3B0aW9uKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIEZhaWxGbjogKCkgPT4ge31cclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCJAaWYgKGNoYXJ0T3B0aW9uKSB7XHJcbjxkaXYgY2xhc3M9XCJjYXJkLWNvbnRlbnRcIiAjZWxlbVJlZj5cclxuICAgIDxkaXYgYmVDaGFydExpbmVUaW1lIFtjaGFydE9wdGlvbl09XCJjaGFydE9wdGlvblwiPjwvZGl2PlxyXG48L2Rpdj5cclxufVxyXG4iXX0=
@@ -1,19 +0,0 @@
1
- import { Component, ChangeDetectionStrategy } from '@angular/core';
2
- import { CardHeaderLogoTitleSubtitleComponent } from '../card-header-logo-title-subtitle/card-header-logo-title-subtitle.component';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/forms";
5
- import * as i2 from "barsa-sap-ui";
6
- import * as i3 from "@fundamental-ngx/core/avatar";
7
- import * as i4 from "@fundamental-ngx/core/button";
8
- import * as i5 from "@fundamental-ngx/core/card";
9
- import * as i6 from "@fundamental-ngx/core/checkbox";
10
- import * as i7 from "barsa-novin-ray-core";
11
- export class CardHeaderBigImageTitleAndSubtitleComponent extends CardHeaderLogoTitleSubtitleComponent {
12
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CardHeaderBigImageTitleAndSubtitleComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
13
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: CardHeaderBigImageTitleAndSubtitleComponent, selector: "bdc-card-header-big-image-title-and-subtitle", usesInheritance: true, ngImport: i0, template: "<fd-card-header [class.hide-border]=\"parameters.HideBorder\">\r\n <fd-card-main-header>\r\n @if (hasIcon) {\r\n <fd-avatar\r\n [circle]=\"avatarCircle\"\r\n size=\"s\"\r\n ariaLabel=\"avatar image\"\r\n title=\"avatar image\"\r\n [glyph]=\"fontIcon\"\r\n [image]=\"isIconImage ? (imageIcon?.FileId | picFieldSrc: 'GetPictureFromFileInfo':null) : ''\"\r\n ></fd-avatar>\r\n }\r\n <div fd-card-title [style.justify-content]=\"'end'\" style=\"display:flex\">\r\n <div style=\"display: flex; justify-content: start; flex-grow: 1\">\r\n @if (isCheckList) {\r\n <fd-checkbox\r\n [name]=\"mo.$Caption\"\r\n [ngModel]=\"isChecked\"\r\n (ngModelChange)=\"events.emit({ title: 'rowCheck' })\"\r\n ></fd-checkbox>\r\n } @if (!setting.ContextMenuInFooter && contextMenuItems && contextMenuItems.length > 0) {\r\n <div\r\n ulvContextMenu\r\n [allColumns]=\"allColumns\"\r\n [menuItems]=\"contextMenuItems\"\r\n [conditionalFormats]=\"conditionalFormats\"\r\n [disableOverflowContextMenu]=\"disableOverflowContextMenu\"\r\n [mo]=\"mo\"\r\n [styleIndex]=\"styleIndex\"\r\n (commandClick)=\"events.emit({ title: 'ulvCommand' })\"\r\n ></div>\r\n }\r\n <h2\r\n #hEl\r\n class=\"fd-card__title\"\r\n [hostEl]=\"hEl\"\r\n [dbName]=\"titleDbName\"\r\n [styleIndex]=\"styleIndex\"\r\n [applyConditionalFormats]=\"conditionalFormats\"\r\n >\r\n {{ title }}\r\n </h2>\r\n </div>\r\n @if (canView && !hideOpenIcon) {\r\n <button\r\n fd-button\r\n (click)=\"events.emit({ title: 'rowClick' })\"\r\n [glyph]=\"navigationArrow\"\r\n fdType=\"transparent\"\r\n ></button>\r\n }\r\n </div>\r\n\r\n <h3\r\n fd-card-subtitle\r\n #hEl\r\n [hostEl]=\"hEl\"\r\n [dbName]=\"subtitleDbName\"\r\n [styleIndex]=\"styleIndex\"\r\n [applyConditionalFormats]=\"conditionalFormats\"\r\n >\r\n {{ subtitle }}\r\n </h3>\r\n </fd-card-main-header>\r\n</fd-card-header>\r\n<div></div>\r\n", styles: [":host ::ng-deep .fd-card__header-text{padding:1rem}fd-card-header{cursor:default}fd-card-header ::ng-deep .fd-card__header-main-container{display:flex;flex-direction:column;padding:0}fd-card-header fd-avatar{min-height:160px;max-height:160px;height:160px;width:283px;max-width:100%;min-width:100%}fd-card-header .fd-card__title{display:-webkit-box;width:100%}fd-card-header button{cursor:pointer;z-index:4}fd-card-header.hide-border{border-bottom:none!important}\n"], dependencies: [{ kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "component", type: i2.UlvContextMenuComponent, selector: "bsu-ulv-context-menu,[ulvContextMenu]", inputs: ["onlyOverflow", "rightClickEnable", "deviceName", "menuItems", "allColumns", "index", "mo", "styleIndex", "conditionalFormats", "disableOverflowContextMenu", "footerMode", "contextMenuOverflowText", "appendTo"], outputs: ["commandClick"] }, { kind: "directive", type: i2.ApplyConditionalFormatsDirective, selector: "[applyConditionalFormats]", inputs: ["applyConditionalFormats", "styleIndex", "hostEl", "dbName"] }, { kind: "component", type: i3.AvatarComponent, selector: "fd-avatar", inputs: ["class", "id", "ariaLabel", "ariaLabelledby", "label", "size", "font", "glyph", "zoomGlyph", "circle", "transparent", "contain", "placeholder", "tile", "border", "colorAccent", "colorIndication", "random", "clickable", "valueState", "image", "alterIcon", "backupImage"], outputs: ["avatarClicked", "zoomGlyphClicked"] }, { kind: "component", type: i4.ButtonComponent, selector: "button[fd-button], a[fd-button], span[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i5.CardHeaderComponent, selector: "fd-card-header", inputs: ["ariaRoleDescription"] }, { kind: "component", type: i5.CardMainHeaderComponent, selector: "fd-card-main-header", inputs: ["interactive", "title"] }, { kind: "directive", type: i5.CardTitleDirective, selector: "[fd-card-title]", inputs: ["id"] }, { kind: "directive", type: i5.CardSubtitleDirective, selector: "[fd-card-subtitle]" }, { kind: "component", type: i6.CheckboxComponent, selector: "fd-checkbox", inputs: ["wrapLabel", "valignLabel", "ariaLabel", "role", "value", "ariaLabelledBy", "ariaDescribedBy", "title", "inputId", "state", "name", "label", "disabled", "readonly", "tristate", "tristateSelectable", "labelClass", "required", "displayOnly", "values", "standalone"], outputs: ["focusChange"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i7.PictureFieldSourcePipe, name: "picFieldSrc" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
14
- }
15
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CardHeaderBigImageTitleAndSubtitleComponent, decorators: [{
16
- type: Component,
17
- args: [{ selector: 'bdc-card-header-big-image-title-and-subtitle', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<fd-card-header [class.hide-border]=\"parameters.HideBorder\">\r\n <fd-card-main-header>\r\n @if (hasIcon) {\r\n <fd-avatar\r\n [circle]=\"avatarCircle\"\r\n size=\"s\"\r\n ariaLabel=\"avatar image\"\r\n title=\"avatar image\"\r\n [glyph]=\"fontIcon\"\r\n [image]=\"isIconImage ? (imageIcon?.FileId | picFieldSrc: 'GetPictureFromFileInfo':null) : ''\"\r\n ></fd-avatar>\r\n }\r\n <div fd-card-title [style.justify-content]=\"'end'\" style=\"display:flex\">\r\n <div style=\"display: flex; justify-content: start; flex-grow: 1\">\r\n @if (isCheckList) {\r\n <fd-checkbox\r\n [name]=\"mo.$Caption\"\r\n [ngModel]=\"isChecked\"\r\n (ngModelChange)=\"events.emit({ title: 'rowCheck' })\"\r\n ></fd-checkbox>\r\n } @if (!setting.ContextMenuInFooter && contextMenuItems && contextMenuItems.length > 0) {\r\n <div\r\n ulvContextMenu\r\n [allColumns]=\"allColumns\"\r\n [menuItems]=\"contextMenuItems\"\r\n [conditionalFormats]=\"conditionalFormats\"\r\n [disableOverflowContextMenu]=\"disableOverflowContextMenu\"\r\n [mo]=\"mo\"\r\n [styleIndex]=\"styleIndex\"\r\n (commandClick)=\"events.emit({ title: 'ulvCommand' })\"\r\n ></div>\r\n }\r\n <h2\r\n #hEl\r\n class=\"fd-card__title\"\r\n [hostEl]=\"hEl\"\r\n [dbName]=\"titleDbName\"\r\n [styleIndex]=\"styleIndex\"\r\n [applyConditionalFormats]=\"conditionalFormats\"\r\n >\r\n {{ title }}\r\n </h2>\r\n </div>\r\n @if (canView && !hideOpenIcon) {\r\n <button\r\n fd-button\r\n (click)=\"events.emit({ title: 'rowClick' })\"\r\n [glyph]=\"navigationArrow\"\r\n fdType=\"transparent\"\r\n ></button>\r\n }\r\n </div>\r\n\r\n <h3\r\n fd-card-subtitle\r\n #hEl\r\n [hostEl]=\"hEl\"\r\n [dbName]=\"subtitleDbName\"\r\n [styleIndex]=\"styleIndex\"\r\n [applyConditionalFormats]=\"conditionalFormats\"\r\n >\r\n {{ subtitle }}\r\n </h3>\r\n </fd-card-main-header>\r\n</fd-card-header>\r\n<div></div>\r\n", styles: [":host ::ng-deep .fd-card__header-text{padding:1rem}fd-card-header{cursor:default}fd-card-header ::ng-deep .fd-card__header-main-container{display:flex;flex-direction:column;padding:0}fd-card-header fd-avatar{min-height:160px;max-height:160px;height:160px;width:283px;max-width:100%;min-width:100%}fd-card-header .fd-card__title{display:-webkit-box;width:100%}fd-card-header button{cursor:pointer;z-index:4}fd-card-header.hide-border{border-bottom:none!important}\n"] }]
18
- }] });
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC1oZWFkZXItYmlnLWltYWdlLXRpdGxlLWFuZC1zdWJ0aXRsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1kZXZlbG9wLWNvbXBvbmVudHMvc3JjL2xpYi9jYXJkLWhlYWRlci1iaWctaW1hZ2UtdGl0bGUtYW5kLXN1YnRpdGxlL2NhcmQtaGVhZGVyLWJpZy1pbWFnZS10aXRsZS1hbmQtc3VidGl0bGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2EtZGV2ZWxvcC1jb21wb25lbnRzL3NyYy9saWIvY2FyZC1oZWFkZXItYmlnLWltYWdlLXRpdGxlLWFuZC1zdWJ0aXRsZS9jYXJkLWhlYWRlci1iaWctaW1hZ2UtdGl0bGUtYW5kLXN1YnRpdGxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFFLG9DQUFvQyxFQUFFLE1BQU0sOEVBQThFLENBQUM7Ozs7Ozs7OztBQVFwSSxNQUFNLE9BQU8sMkNBQTRDLFNBQVEsb0NBQW9DOytHQUF4RiwyQ0FBMkM7bUdBQTNDLDJDQUEyQywyR0NUeEQsbW5GQWtFQTs7NEZEekRhLDJDQUEyQztrQkFQdkQsU0FBUzsrQkFDSSw4Q0FBOEMsbUJBR3ZDLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ2FyZEhlYWRlckxvZ29UaXRsZVN1YnRpdGxlQ29tcG9uZW50IH0gZnJvbSAnLi4vY2FyZC1oZWFkZXItbG9nby10aXRsZS1zdWJ0aXRsZS9jYXJkLWhlYWRlci1sb2dvLXRpdGxlLXN1YnRpdGxlLmNvbXBvbmVudCc7XHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdiZGMtY2FyZC1oZWFkZXItYmlnLWltYWdlLXRpdGxlLWFuZC1zdWJ0aXRsZScsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2FyZC1oZWFkZXItYmlnLWltYWdlLXRpdGxlLWFuZC1zdWJ0aXRsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9jYXJkLWhlYWRlci1iaWctaW1hZ2UtdGl0bGUtYW5kLXN1YnRpdGxlLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICAgIHN0YW5kYWxvbmU6IGZhbHNlXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDYXJkSGVhZGVyQmlnSW1hZ2VUaXRsZUFuZFN1YnRpdGxlQ29tcG9uZW50IGV4dGVuZHMgQ2FyZEhlYWRlckxvZ29UaXRsZVN1YnRpdGxlQ29tcG9uZW50IHt9XHJcbiIsIjxmZC1jYXJkLWhlYWRlciBbY2xhc3MuaGlkZS1ib3JkZXJdPVwicGFyYW1ldGVycy5IaWRlQm9yZGVyXCI+XHJcbiAgICA8ZmQtY2FyZC1tYWluLWhlYWRlcj5cclxuICAgICAgICBAaWYgKGhhc0ljb24pIHtcclxuICAgICAgICA8ZmQtYXZhdGFyXHJcbiAgICAgICAgICAgIFtjaXJjbGVdPVwiYXZhdGFyQ2lyY2xlXCJcclxuICAgICAgICAgICAgc2l6ZT1cInNcIlxyXG4gICAgICAgICAgICBhcmlhTGFiZWw9XCJhdmF0YXIgaW1hZ2VcIlxyXG4gICAgICAgICAgICB0aXRsZT1cImF2YXRhciBpbWFnZVwiXHJcbiAgICAgICAgICAgIFtnbHlwaF09XCJmb250SWNvblwiXHJcbiAgICAgICAgICAgIFtpbWFnZV09XCJpc0ljb25JbWFnZSA/IChpbWFnZUljb24/LkZpbGVJZCB8IHBpY0ZpZWxkU3JjOiAnR2V0UGljdHVyZUZyb21GaWxlSW5mbyc6bnVsbCkgOiAnJ1wiXHJcbiAgICAgICAgPjwvZmQtYXZhdGFyPlxyXG4gICAgICAgIH1cclxuICAgICAgICA8ZGl2IGZkLWNhcmQtdGl0bGUgW3N0eWxlLmp1c3RpZnktY29udGVudF09XCInZW5kJ1wiIHN0eWxlPVwiZGlzcGxheTpmbGV4XCI+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IHN0YXJ0OyBmbGV4LWdyb3c6IDFcIj5cclxuICAgICAgICAgICAgICAgIEBpZiAoaXNDaGVja0xpc3QpIHtcclxuICAgICAgICAgICAgICAgIDxmZC1jaGVja2JveFxyXG4gICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cIm1vLiRDYXB0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJpc0NoZWNrZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImV2ZW50cy5lbWl0KHsgdGl0bGU6ICdyb3dDaGVjaycgfSlcIlxyXG4gICAgICAgICAgICAgICAgPjwvZmQtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICB9IEBpZiAoIXNldHRpbmcuQ29udGV4dE1lbnVJbkZvb3RlciAmJiBjb250ZXh0TWVudUl0ZW1zICYmIGNvbnRleHRNZW51SXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgIHVsdkNvbnRleHRNZW51XHJcbiAgICAgICAgICAgICAgICAgICAgW2FsbENvbHVtbnNdPVwiYWxsQ29sdW1uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW21lbnVJdGVtc109XCJjb250ZXh0TWVudUl0ZW1zXCJcclxuICAgICAgICAgICAgICAgICAgICBbY29uZGl0aW9uYWxGb3JtYXRzXT1cImNvbmRpdGlvbmFsRm9ybWF0c1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVPdmVyZmxvd0NvbnRleHRNZW51XT1cImRpc2FibGVPdmVyZmxvd0NvbnRleHRNZW51XCJcclxuICAgICAgICAgICAgICAgICAgICBbbW9dPVwibW9cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZUluZGV4XT1cInN0eWxlSW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjb21tYW5kQ2xpY2spPVwiZXZlbnRzLmVtaXQoeyB0aXRsZTogJ3VsdkNvbW1hbmQnIH0pXCJcclxuICAgICAgICAgICAgICAgID48L2Rpdj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDxoMlxyXG4gICAgICAgICAgICAgICAgICAgICNoRWxcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkLWNhcmRfX3RpdGxlXCJcclxuICAgICAgICAgICAgICAgICAgICBbaG9zdEVsXT1cImhFbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2RiTmFtZV09XCJ0aXRsZURiTmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlSW5kZXhdPVwic3R5bGVJbmRleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2FwcGx5Q29uZGl0aW9uYWxGb3JtYXRzXT1cImNvbmRpdGlvbmFsRm9ybWF0c1wiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgdGl0bGUgfX1cclxuICAgICAgICAgICAgICAgIDwvaDI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICBAaWYgKGNhblZpZXcgJiYgIWhpZGVPcGVuSWNvbikge1xyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBmZC1idXR0b25cclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJldmVudHMuZW1pdCh7IHRpdGxlOiAncm93Q2xpY2snIH0pXCJcclxuICAgICAgICAgICAgICAgIFtnbHlwaF09XCJuYXZpZ2F0aW9uQXJyb3dcIlxyXG4gICAgICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxyXG4gICAgICAgICAgICA+PC9idXR0b24+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGgzXHJcbiAgICAgICAgICAgIGZkLWNhcmQtc3VidGl0bGVcclxuICAgICAgICAgICAgI2hFbFxyXG4gICAgICAgICAgICBbaG9zdEVsXT1cImhFbFwiXHJcbiAgICAgICAgICAgIFtkYk5hbWVdPVwic3VidGl0bGVEYk5hbWVcIlxyXG4gICAgICAgICAgICBbc3R5bGVJbmRleF09XCJzdHlsZUluZGV4XCJcclxuICAgICAgICAgICAgW2FwcGx5Q29uZGl0aW9uYWxGb3JtYXRzXT1cImNvbmRpdGlvbmFsRm9ybWF0c1wiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICB7eyBzdWJ0aXRsZSB9fVxyXG4gICAgICAgIDwvaDM+XHJcbiAgICA8L2ZkLWNhcmQtbWFpbi1oZWFkZXI+XHJcbjwvZmQtY2FyZC1oZWFkZXI+XHJcbjxkaXY+PC9kaXY+XHJcbiJdfQ==