barsa-develop-components 1.0.456 → 2.0.2

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 (205) hide show
  1. package/{esm2020 → esm2022}/barsa-develop-components.mjs +4 -4
  2. package/esm2022/lib/accept-reject/accept-reject.component.mjs +68 -0
  3. package/esm2022/lib/avatar/avatar.component.mjs +29 -0
  4. package/esm2022/lib/barcode-format-pipe.mjs +24 -0
  5. package/esm2022/lib/barcode-reader/barcode-reader.component.mjs +62 -0
  6. package/esm2022/lib/barcode-reader-dialog/barcode-reader-dialog.component.mjs +82 -0
  7. package/esm2022/lib/barcode-reader-video/barcode-reader-video.component.mjs +66 -0
  8. package/esm2022/lib/barcode.service.mjs +330 -0
  9. package/{esm2020 → esm2022}/lib/barsa-develop-components.module.mjs +284 -284
  10. package/esm2022/lib/barsa-document-list-item/barsa-document-list-item.component.mjs +104 -0
  11. package/esm2022/lib/barsa-documents/barsa-documents.component.mjs +173 -0
  12. package/esm2022/lib/barsa-geographic-location/barsa-geographic-location.component.mjs +163 -0
  13. package/esm2022/lib/card-content-image-and-title/card-content-image-and-title.component.mjs +50 -0
  14. package/esm2022/lib/card-content-line-chart/card-content-line-chart.component.mjs +37 -0
  15. package/esm2022/lib/card-header-big-image-title-and-subtitle/card-header-big-image-title-and-subtitle.component.mjs +19 -0
  16. package/esm2022/lib/card-header-kpi/card-header-kpi.component.mjs +40 -0
  17. package/esm2022/lib/card-header-logo-title-subtitle/card-header-logo-title-subtitle.component.mjs +45 -0
  18. package/{esm2020 → esm2022}/lib/checkbox-button/checkbox-button.component.mjs +23 -23
  19. package/esm2022/lib/column-form-viewer/column-form-viewer.component.mjs +88 -0
  20. package/{esm2020 → esm2022}/lib/enum-info-micro-proccess-flow/enum-info-micro-proccess-flow.component.mjs +18 -18
  21. package/esm2022/lib/footer/footer.component.mjs +43 -0
  22. package/esm2022/lib/form-card/form-card.component.mjs +17 -0
  23. package/esm2022/lib/form-chart-content/form-chart-content.component.mjs +37 -0
  24. package/esm2022/lib/form-content-quick-view/form-content-quick-view.component.mjs +102 -0
  25. package/esm2022/lib/form-report-view/form-report-view.component.mjs +25 -0
  26. package/esm2022/lib/form-report-view-item/form-report-view-item.component.mjs +45 -0
  27. package/{esm2020 → esm2022}/lib/g4b-details/g4b-details.component.mjs +28 -28
  28. package/esm2022/lib/g4b-estelam/g4b-estelam.component.mjs +30 -0
  29. package/esm2022/lib/geographic-location/geographic-location.component.mjs +85 -0
  30. package/esm2022/lib/login-form/login-form.component.mjs +55 -0
  31. package/{esm2020 → esm2022}/lib/login-social-conncetions/login-social-conncetions.component.mjs +30 -30
  32. package/esm2022/lib/master-detail-card-form/master-detail-card-form.component.mjs +17 -0
  33. package/esm2022/lib/media-file-uploader/media-file-uploader.component.mjs +238 -0
  34. package/esm2022/lib/micro-proccess-flow/micro-proccess-flow.component.mjs +52 -0
  35. package/esm2022/lib/micro-process-flow-view/micro-process-flow-view.component.mjs +24 -0
  36. package/esm2022/lib/mo-info-micro-proccess-flow/mo-info-micro-proccess-flow.component.mjs +23 -0
  37. package/esm2022/lib/models/document-item.mjs +2 -0
  38. package/esm2022/lib/models/documents-setting.mjs +2 -0
  39. package/{esm2020 → esm2022}/lib/models/form-report-view-setting.mjs +2 -2
  40. package/{esm2020 → esm2022}/lib/models/index.mjs +8 -8
  41. package/{esm2020 → esm2022}/lib/models/micro-process-flow-view-setting.mjs +2 -2
  42. package/{esm2020 → esm2022}/lib/models/person.mjs +1 -1
  43. package/{esm2020 → esm2022}/lib/models/service-desk-view-of-services-setting.mjs +2 -2
  44. package/{esm2020 → esm2022}/lib/models/tab-process-view-setting.mjs +2 -2
  45. package/{esm2020 → esm2022}/lib/pipes/datasource-to-flow-item.mjs +22 -22
  46. package/{esm2020 → esm2022}/lib/pipes/index.mjs +2 -2
  47. package/{esm2020 → esm2022}/lib/pipes/mo-list-to-flow-item.pipe.mjs +22 -22
  48. package/esm2022/lib/query-string-form-observable/query-string-form-observable.component.mjs +37 -0
  49. package/esm2022/lib/query-string-observable/query-string-observable.component.mjs +22 -0
  50. package/esm2022/lib/report-button-view/report-button-view.component.mjs +37 -0
  51. package/{esm2020 → esm2022}/lib/report-line-chart-view/report-line-chart-view.component.mjs +13 -13
  52. package/esm2022/lib/report-tab-view/report-tab-view.component.mjs +27 -0
  53. package/esm2022/lib/resend-verification-code/resend-verification-code.component.mjs +62 -0
  54. package/{esm2020 → esm2022}/lib/service-desk-card-content-mojavezhay-akhz-shode/service-desk-card-content-mojavezhay-akhz-shode.component.mjs +28 -28
  55. package/esm2022/lib/service-desk-form-layout-content-mojavez/service-desk-form-layout-content-mojavez.component.mjs +110 -0
  56. package/esm2022/lib/service-desk-header/service-desk-header.component.mjs +240 -0
  57. package/esm2022/lib/service-desk-servcie-detail/service-desk-servcie-detail.component.mjs +142 -0
  58. package/esm2022/lib/service-desk-view-of-services/service-desk-view-of-services.component.mjs +37 -0
  59. package/esm2022/lib/setting-form/setting-form.component.mjs +64 -0
  60. package/esm2022/lib/subform-in-row-report/subform-in-row-report.component.mjs +73 -0
  61. package/esm2022/lib/tab-process-view/tab-process-view.component.mjs +48 -0
  62. package/esm2022/lib/table-view-vertical-columns/table-view-vertical-columns.component.mjs +16 -0
  63. package/esm2022/lib/timer-count-down/timer-count-down.component.mjs +98 -0
  64. package/esm2022/lib/token-report-view/token-report-view.component.mjs +27 -0
  65. package/esm2022/lib/ui-enum-segmented-button/ui-enum-segmented-button.component.mjs +25 -0
  66. package/esm2022/lib/ui-num-rate/ui-num-rate.component.mjs +29 -0
  67. package/esm2022/lib/ui-person/ui-person.component.mjs +160 -0
  68. package/esm2022/lib/ui-person/ui-person.pipe.mjs +40 -0
  69. package/esm2022/lib/ui-pictures-carousel/ui-pictures-carousel.component.mjs +17 -0
  70. package/esm2022/lib/ui-text-field-search/ui-text-field-search.component.mjs +42 -0
  71. package/esm2022/lib/ulv-context-menu-item-show-file-content/ulv-context-menu-item-show-file-content.component.mjs +69 -0
  72. package/{esm2020 → esm2022}/public-api.mjs +62 -62
  73. package/fesm2022/barsa-develop-components.mjs +3626 -0
  74. package/fesm2022/barsa-develop-components.mjs.map +1 -0
  75. package/index.d.ts +5 -5
  76. package/lib/accept-reject/accept-reject.component.d.ts +28 -28
  77. package/lib/avatar/avatar.component.d.ts +12 -12
  78. package/lib/barcode-format-pipe.d.ts +7 -7
  79. package/lib/barcode-reader/barcode-reader.component.d.ts +19 -19
  80. package/lib/barcode-reader-dialog/barcode-reader-dialog.component.d.ts +32 -32
  81. package/lib/barcode-reader-video/barcode-reader-video.component.d.ts +22 -22
  82. package/lib/barcode.service.d.ts +98 -98
  83. package/lib/barsa-develop-components.module.d.ts +117 -117
  84. package/lib/barsa-document-list-item/barsa-document-list-item.component.d.ts +39 -39
  85. package/lib/barsa-documents/barsa-documents.component.d.ts +47 -47
  86. package/lib/barsa-geographic-location/barsa-geographic-location.component.d.ts +45 -46
  87. package/lib/card-content-image-and-title/card-content-image-and-title.component.d.ts +18 -18
  88. package/lib/card-content-line-chart/card-content-line-chart.component.d.ts +9 -9
  89. package/lib/card-header-big-image-title-and-subtitle/card-header-big-image-title-and-subtitle.component.d.ts +6 -6
  90. package/lib/card-header-kpi/card-header-kpi.component.d.ts +14 -14
  91. package/lib/card-header-logo-title-subtitle/card-header-logo-title-subtitle.component.d.ts +23 -23
  92. package/lib/checkbox-button/checkbox-button.component.d.ts +13 -13
  93. package/lib/column-form-viewer/column-form-viewer.component.d.ts +30 -30
  94. package/lib/enum-info-micro-proccess-flow/enum-info-micro-proccess-flow.component.d.ts +8 -8
  95. package/lib/footer/footer.component.d.ts +15 -15
  96. package/lib/form-card/form-card.component.d.ts +8 -8
  97. package/lib/form-chart-content/form-chart-content.component.d.ts +9 -9
  98. package/lib/form-content-quick-view/form-content-quick-view.component.d.ts +18 -18
  99. package/lib/form-report-view/form-report-view.component.d.ts +13 -13
  100. package/lib/form-report-view-item/form-report-view-item.component.d.ts +15 -15
  101. package/lib/g4b-details/g4b-details.component.d.ts +9 -9
  102. package/lib/g4b-estelam/g4b-estelam.component.d.ts +11 -11
  103. package/lib/geographic-location/geographic-location.component.d.ts +33 -34
  104. package/lib/login-form/login-form.component.d.ts +12 -12
  105. package/lib/login-social-conncetions/login-social-conncetions.component.d.ts +12 -12
  106. package/lib/master-detail-card-form/master-detail-card-form.component.d.ts +8 -8
  107. package/lib/media-file-uploader/media-file-uploader.component.d.ts +52 -52
  108. package/lib/micro-proccess-flow/micro-proccess-flow.component.d.ts +28 -28
  109. package/lib/micro-process-flow-view/micro-process-flow-view.component.d.ts +14 -14
  110. package/lib/mo-info-micro-proccess-flow/mo-info-micro-proccess-flow.component.d.ts +9 -9
  111. package/lib/models/document-item.d.ts +19 -19
  112. package/lib/models/documents-setting.d.ts +11 -11
  113. package/lib/models/form-report-view-setting.d.ts +7 -7
  114. package/lib/models/index.d.ts +7 -7
  115. package/lib/models/micro-process-flow-view-setting.d.ts +8 -8
  116. package/lib/models/person.d.ts +10 -10
  117. package/lib/models/service-desk-view-of-services-setting.d.ts +6 -6
  118. package/lib/models/tab-process-view-setting.d.ts +7 -7
  119. package/lib/pipes/datasource-to-flow-item.d.ts +10 -10
  120. package/lib/pipes/index.d.ts +2 -2
  121. package/lib/pipes/mo-list-to-flow-item.pipe.d.ts +10 -10
  122. package/lib/query-string-form-observable/query-string-form-observable.component.d.ts +13 -13
  123. package/lib/query-string-observable/query-string-observable.component.d.ts +9 -9
  124. package/lib/report-button-view/report-button-view.component.d.ts +12 -12
  125. package/lib/report-line-chart-view/report-line-chart-view.component.d.ts +7 -7
  126. package/lib/report-tab-view/report-tab-view.component.d.ts +15 -15
  127. package/lib/resend-verification-code/resend-verification-code.component.d.ts +19 -18
  128. package/lib/service-desk-card-content-mojavezhay-akhz-shode/service-desk-card-content-mojavezhay-akhz-shode.component.d.ts +15 -15
  129. package/lib/service-desk-form-layout-content-mojavez/service-desk-form-layout-content-mojavez.component.d.ts +26 -26
  130. package/lib/service-desk-header/service-desk-header.component.d.ts +63 -63
  131. package/lib/service-desk-servcie-detail/service-desk-servcie-detail.component.d.ts +39 -39
  132. package/lib/service-desk-view-of-services/service-desk-view-of-services.component.d.ts +16 -16
  133. package/lib/setting-form/setting-form.component.d.ts +20 -20
  134. package/lib/subform-in-row-report/subform-in-row-report.component.d.ts +22 -21
  135. package/lib/tab-process-view/tab-process-view.component.d.ts +20 -20
  136. package/lib/table-view-vertical-columns/table-view-vertical-columns.component.d.ts +6 -6
  137. package/lib/timer-count-down/timer-count-down.component.d.ts +15 -15
  138. package/lib/token-report-view/token-report-view.component.d.ts +15 -15
  139. package/lib/ui-enum-segmented-button/ui-enum-segmented-button.component.d.ts +9 -9
  140. package/lib/ui-num-rate/ui-num-rate.component.d.ts +9 -9
  141. package/lib/ui-person/ui-person.component.d.ts +31 -31
  142. package/lib/ui-person/ui-person.pipe.d.ts +7 -7
  143. package/lib/ui-pictures-carousel/ui-pictures-carousel.component.d.ts +6 -6
  144. package/lib/ui-text-field-search/ui-text-field-search.component.d.ts +17 -17
  145. package/lib/ulv-context-menu-item-show-file-content/ulv-context-menu-item-show-file-content.component.d.ts +25 -25
  146. package/package.json +7 -13
  147. package/public-api.d.ts +58 -58
  148. package/esm2020/lib/accept-reject/accept-reject.component.mjs +0 -69
  149. package/esm2020/lib/avatar/avatar.component.mjs +0 -29
  150. package/esm2020/lib/barcode-format-pipe.mjs +0 -24
  151. package/esm2020/lib/barcode-reader/barcode-reader.component.mjs +0 -62
  152. package/esm2020/lib/barcode-reader-dialog/barcode-reader-dialog.component.mjs +0 -82
  153. package/esm2020/lib/barcode-reader-video/barcode-reader-video.component.mjs +0 -66
  154. package/esm2020/lib/barcode.service.mjs +0 -330
  155. package/esm2020/lib/barsa-document-list-item/barsa-document-list-item.component.mjs +0 -104
  156. package/esm2020/lib/barsa-documents/barsa-documents.component.mjs +0 -173
  157. package/esm2020/lib/barsa-geographic-location/barsa-geographic-location.component.mjs +0 -174
  158. package/esm2020/lib/card-content-image-and-title/card-content-image-and-title.component.mjs +0 -51
  159. package/esm2020/lib/card-content-line-chart/card-content-line-chart.component.mjs +0 -38
  160. package/esm2020/lib/card-header-big-image-title-and-subtitle/card-header-big-image-title-and-subtitle.component.mjs +0 -20
  161. package/esm2020/lib/card-header-kpi/card-header-kpi.component.mjs +0 -41
  162. package/esm2020/lib/card-header-logo-title-subtitle/card-header-logo-title-subtitle.component.mjs +0 -46
  163. package/esm2020/lib/column-form-viewer/column-form-viewer.component.mjs +0 -88
  164. package/esm2020/lib/footer/footer.component.mjs +0 -44
  165. package/esm2020/lib/form-card/form-card.component.mjs +0 -18
  166. package/esm2020/lib/form-chart-content/form-chart-content.component.mjs +0 -38
  167. package/esm2020/lib/form-content-quick-view/form-content-quick-view.component.mjs +0 -102
  168. package/esm2020/lib/form-report-view/form-report-view.component.mjs +0 -26
  169. package/esm2020/lib/form-report-view-item/form-report-view-item.component.mjs +0 -45
  170. package/esm2020/lib/g4b-estelam/g4b-estelam.component.mjs +0 -30
  171. package/esm2020/lib/geographic-location/geographic-location.component.mjs +0 -88
  172. package/esm2020/lib/login-form/login-form.component.mjs +0 -55
  173. package/esm2020/lib/master-detail-card-form/master-detail-card-form.component.mjs +0 -17
  174. package/esm2020/lib/media-file-uploader/media-file-uploader.component.mjs +0 -238
  175. package/esm2020/lib/micro-proccess-flow/micro-proccess-flow.component.mjs +0 -53
  176. package/esm2020/lib/micro-process-flow-view/micro-process-flow-view.component.mjs +0 -24
  177. package/esm2020/lib/mo-info-micro-proccess-flow/mo-info-micro-proccess-flow.component.mjs +0 -23
  178. package/esm2020/lib/models/document-item.mjs +0 -2
  179. package/esm2020/lib/models/documents-setting.mjs +0 -2
  180. package/esm2020/lib/query-string-form-observable/query-string-form-observable.component.mjs +0 -37
  181. package/esm2020/lib/query-string-observable/query-string-observable.component.mjs +0 -22
  182. package/esm2020/lib/report-button-view/report-button-view.component.mjs +0 -38
  183. package/esm2020/lib/report-tab-view/report-tab-view.component.mjs +0 -28
  184. package/esm2020/lib/resend-verification-code/resend-verification-code.component.mjs +0 -59
  185. package/esm2020/lib/service-desk-form-layout-content-mojavez/service-desk-form-layout-content-mojavez.component.mjs +0 -110
  186. package/esm2020/lib/service-desk-header/service-desk-header.component.mjs +0 -236
  187. package/esm2020/lib/service-desk-servcie-detail/service-desk-servcie-detail.component.mjs +0 -142
  188. package/esm2020/lib/service-desk-view-of-services/service-desk-view-of-services.component.mjs +0 -37
  189. package/esm2020/lib/setting-form/setting-form.component.mjs +0 -64
  190. package/esm2020/lib/subform-in-row-report/subform-in-row-report.component.mjs +0 -65
  191. package/esm2020/lib/tab-process-view/tab-process-view.component.mjs +0 -49
  192. package/esm2020/lib/table-view-vertical-columns/table-view-vertical-columns.component.mjs +0 -16
  193. package/esm2020/lib/timer-count-down/timer-count-down.component.mjs +0 -98
  194. package/esm2020/lib/token-report-view/token-report-view.component.mjs +0 -27
  195. package/esm2020/lib/ui-enum-segmented-button/ui-enum-segmented-button.component.mjs +0 -25
  196. package/esm2020/lib/ui-num-rate/ui-num-rate.component.mjs +0 -29
  197. package/esm2020/lib/ui-person/ui-person.component.mjs +0 -160
  198. package/esm2020/lib/ui-person/ui-person.pipe.mjs +0 -40
  199. package/esm2020/lib/ui-pictures-carousel/ui-pictures-carousel.component.mjs +0 -17
  200. package/esm2020/lib/ui-text-field-search/ui-text-field-search.component.mjs +0 -42
  201. package/esm2020/lib/ulv-context-menu-item-show-file-content/ulv-context-menu-item-show-file-content.component.mjs +0 -70
  202. package/fesm2015/barsa-develop-components.mjs +0 -3660
  203. package/fesm2015/barsa-develop-components.mjs.map +0 -1
  204. package/fesm2020/barsa-develop-components.mjs +0 -3625
  205. package/fesm2020/barsa-develop-components.mjs.map +0 -1
@@ -0,0 +1,104 @@
1
+ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import { AudioMimeType, BaseComponent, ImageMimeType, PreventDefaulEvent, VideoMimeType, AllFilesMimeType, isImage, getIcon } 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 "@angular/common";
6
+ import * as i3 from "barsa-sap-ui";
7
+ import * as i4 from "@fundamental-ngx/core/action-sheet";
8
+ import * as i5 from "@fundamental-ngx/core/avatar";
9
+ import * as i6 from "@fundamental-ngx/core/button";
10
+ import * as i7 from "@fundamental-ngx/core/file-uploader";
11
+ import * as i8 from "@fundamental-ngx/core/form";
12
+ import * as i9 from "@fundamental-ngx/core/inline-help";
13
+ import * as i10 from "@fundamental-ngx/core/object-status";
14
+ import * as i11 from "@fundamental-ngx/core/table";
15
+ import * as i12 from "@fundamental-ngx/core/toolbar";
16
+ export class BarsaDocumentListItemComponent extends BaseComponent {
17
+ constructor(_cdr, _picFieldSrc) {
18
+ super();
19
+ this._cdr = _cdr;
20
+ this._picFieldSrc = _picFieldSrc;
21
+ this.statusChanged = new EventEmitter();
22
+ this.rejectTextChange = new EventEmitter();
23
+ this.fileSelectionChange = new EventEmitter();
24
+ this.removeFile = new EventEmitter();
25
+ this.fullscreen = new EventEmitter();
26
+ this.download = new EventEmitter();
27
+ this.downloadAll = new EventEmitter();
28
+ this.hasFiles = false;
29
+ }
30
+ ngOnInit() {
31
+ super.ngOnInit();
32
+ const documentItem = this.documentItem;
33
+ documentItem.$ValidExtensions = `
34
+ ${documentItem.SupportImage ? ImageMimeType : ''},
35
+ ${documentItem.SupportAudio ? AudioMimeType : ''},
36
+ ${documentItem.SupportVideo ? VideoMimeType : ''},
37
+ ${documentItem.SupportFile ? AllFilesMimeType : ''}
38
+ `;
39
+ }
40
+ ngOnChanges(changes) {
41
+ super.ngOnChanges(changes);
42
+ const { files } = changes;
43
+ files && Array.isArray(files.currentValue) && this._setFirstImage(files.currentValue);
44
+ this._detectChanges();
45
+ }
46
+ onReject(e) {
47
+ this.statusChanged.emit({ value: e, rejectedText: e === 2 ? '' : this.rejectedReason });
48
+ }
49
+ onRejectedTextChange(e) {
50
+ this.rejectTextChange.emit(e.target.value);
51
+ }
52
+ onPreventClick(e) {
53
+ PreventDefaulEvent(e);
54
+ }
55
+ onFileSelection(files) {
56
+ this.fileSelectionChange.emit(files);
57
+ }
58
+ _setFirstImage(files) {
59
+ files.length &&
60
+ (this.firstImageUrl = isImage(files[0].Type)
61
+ ? this._picFieldSrc.transform(files[0].Id, 'ID', null, '', 120, 120)
62
+ : getIcon(files[0].Type));
63
+ }
64
+ _detectChanges() {
65
+ this._cdr.detectChanges();
66
+ }
67
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: BarsaDocumentListItemComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.PictureFieldSourcePipe }], target: i0.ɵɵFactoryTarget.Component }); }
68
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: BarsaDocumentListItemComponent, selector: "bdc-barsa-document-list-item", inputs: { documentItem: "documentItem", deviceSize: "deviceSize", files: "files", accepted: "accepted", rejectedReason: "rejectedReason", readonly: "readonly", status: "status", uploadingState: "uploadingState" }, outputs: { statusChanged: "statusChanged", rejectTextChange: "rejectTextChange", fileSelectionChange: "fileSelectionChange", removeFile: "removeFile", fullscreen: "fullscreen", download: "download", downloadAll: "downloadAll" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<!-- <li fd-list-item style=\"padding: 0.5rem 1rem\">\r\n<span fd-list-thumbnail>\r\n <fd-icon *ngIf=\"documentItem.FontIcon\" [glyph]=\"documentItem.FontIcon\"></fd-icon>\r\n <fd-avatar\r\n *ngIf=\"documentItem.Avatar\"\r\n size=\"s\"\r\n [image]=\"documentItem.Avatar.FileId | picFieldSrc: 'ID':null:''\"\r\n [clickable]=\"true\"\r\n ></fd-avatar\r\n ></span>\r\n\r\n <div fd-list-content>\r\n <div fd-list-title>\r\n <div style=\"display: flex; column-gap: 3px\">\r\n <strong\r\n >{{ documentItem.Title }}\r\n <span fd-object-status status=\"negative\" *ngIf=\"documentItem.IsRequired\"\r\n >*({{ '\u0627\u062C\u0628\u0627\u0631\u06CC' | bbbTranslate }})\r\n </span>\r\n </strong>\r\n <div\r\n *ngIf=\"documentItem.$Accepted === false || documentItem.$Accepted === true\"\r\n style=\"display: flex; column-gap: 3px; flex-wrap: wrap; align-items: center\"\r\n >\r\n <span\r\n fd-object-status\r\n [status]=\"accepted ? 'positive' : 'negative'\"\r\n [label]=\"accepted ? acceptedText : rejectedText\"\r\n [clickable]=\"true\"\r\n [inverted]=\"true\"\r\n [aria-label]=\"accepted ? acceptedText : rejectedText\"\r\n ></span>\r\n <fd-popover title=\"Rejected document\" *ngIf=\"rejectedReason && !accepted\">\r\n <fd-popover-control>\r\n <span\r\n fd-object-status\r\n status=\"negative\"\r\n glyph=\"question-mark\"\r\n glyphAriaLabel=\"Negative\"\r\n title=\"Rejected document\"\r\n ></span>\r\n </fd-popover-control>\r\n <fd-popover-body>\r\n <fd-message-strip type=\"error\" [dismissible]=\"false\">\r\n {{ rejectedReason }}\r\n </fd-message-strip>\r\n </fd-popover-body>\r\n </fd-popover>\r\n </div>\r\n </div>\r\n </div>\r\n <div fd-list-byline [twoCol]=\"true\" [class.smallSize]=\"deviceSize === 's'\">\r\n <div fd-list-byline-left>\r\n <div style=\"display: flex; flex-direction: column; row-gap: 5px; flex-wrap: wrap\">\r\n <span>\r\n {{ documentItem.Description }}\r\n </span>\r\n <div style=\"display: flex; flex-wrap: wrap; column-gap: 3px; align-items: center\">\r\n <ng-container *ngIf=\"hasFiles\">\r\n <button fd-button [fdType]=\"'transparent'\" glyph=\"show\" (click)=\"onFullscreen()\"></button>\r\n <ng-container *ngFor=\"let file of files\">\r\n <fd-token\r\n [readOnly]=\"readonly\"\r\n *ngIf=\"!file.IsDeleted\"\r\n (onCloseClick)=\"onRemoveFile(file)\"\r\n >{{ file.FileName }}</fd-token\r\n >\r\n </ng-container>\r\n </ng-container>\r\n <button\r\n fd-button\r\n *ngIf=\"documentItem.MaxFileCount && !readonly\"\r\n glyph=\"attachment\"\r\n [label]=\"'AttachFile' | bbbTranslate\"\r\n (click)=\"!readonly && uploader.open()\"\r\n ></button>\r\n <fd-file-uploader\r\n #uploader\r\n [style.display]=\"'none'\"\r\n fd-toolbar-item\r\n [id]=\"documentItem.ItemKey\"\r\n [name]=\"'pictures_' + documentItem.ItemKey\"\r\n [accept]=\"documentItem.$ValidExtensions\"\r\n [fileLimit]=\"documentItem.MaxFileCount\"\r\n [multiple]=\"documentItem.MaxFileCount > 0\"\r\n (selectedFilesChanged)=\"onFileSelection($event)\"\r\n ></fd-file-uploader>\r\n </div>\r\n </div>\r\n </div>\r\n <div fd-list-byline-right *ngIf=\"documentItem.CanAccept\">\r\n <bdc-accept-reject\r\n [rejectedReason]=\"rejectedReason\"\r\n [positiveText]=\"acceptedText\"\r\n [negativeText]=\"rejectedText\"\r\n [deviceSize]=\"deviceSize\"\r\n [readonly]=\"readonly\"\r\n ></bdc-accept-reject>\r\n </div>\r\n </div>\r\n </div>\r\n </li> -->\r\n\r\n<tr fd-table-row>\r\n <td fd-table-cell>\r\n @if (documentItem.Avatar && !files.length) {\r\n <fd-avatar\r\n size=\"s\"\r\n [image]=\"documentItem.Avatar.FileId | picFieldSrc: 'ID':null:'':64:64\"\r\n [clickable]=\"true\"\r\n [transparent]=\"true\"\r\n ></fd-avatar>\r\n } @else { @if (files.length) {\r\n <fd-avatar [transparent]=\"true\" size=\"s\" [image]=\"firstImageUrl\" [clickable]=\"true\"></fd-avatar>\r\n } @if (!files.length) {\r\n <fd-avatar [transparent]=\"true\" size=\"s\" [glyph]=\"documentItem.FontIcon\" [clickable]=\"true\"></fd-avatar>\r\n } }\r\n </td>\r\n <td fd-table-cell style=\"min-width: 140px\">\r\n <p fd-table-text>\r\n <strong\r\n >{{ documentItem.Title }}\r\n @if (documentItem.IsRequired) {\r\n <span fd-object-status status=\"negative\">*({{ '\u0627\u062C\u0628\u0627\u0631\u06CC' | bbbTranslate }}) </span>\r\n }\r\n </strong>\r\n </p>\r\n <div>\r\n <span>\r\n {{ documentItem.Description }}\r\n </span>\r\n </div>\r\n </td>\r\n\r\n <td fd-table-cell>\r\n <ng-container>\r\n <!-- <ul fd-list>\r\n <li fd-list-item *ngFor=\"let file of files; let ind = index\">\r\n <span fd-list-title>\r\n {{ file.FileName }}\r\n </span>\r\n <span fd-list-secondary>\r\n <button ariaLabel=\"Remove\" title=\"Remove\" fd-button glyph=\"delete\" ></button>\r\n </span>\r\n </li>\r\n </ul> -->\r\n <div style=\"display: flex; align-items: flex-start; column-gap: 3px; row-gap: 3px; flex-direction: column\">\r\n @for (file of files; track file) {\r\n <!-- <span><fd-icon glyph=\"attachment\"></fd-icon><a fd-link>{{file.FileName}}</a></span> -->\r\n @if (!file.IsDeleted) {\r\n <bsu-file-viewer-popover\r\n [file]=\"file\"\r\n [deviceSize]=\"deviceSize\"\r\n [canDownload]=\"true\"\r\n (remove)=\"removeFile.emit(file)\"\r\n ></bsu-file-viewer-popover>\r\n } }\r\n <!-- <button\r\n fd-button\r\n *ngIf=\"+documentItem.MaxFileCount && !readonly\"\r\n glyph=\"add\"\r\n (click)=\"!readonly && uploader.open()\"\r\n ></button> -->\r\n </div>\r\n <!-- <p *ngFor=\"let file of files\" fd-table-text>\r\n <fd-action-sheet >\r\n <fd-action-sheet-control>\r\n <button\r\n fd-button\r\n glyph=\"settings\"\r\n title=\"Open Action Sheet Mobile\"\r\n id=\"fd-action-sheet-mobile-control\"\r\n aria-haspopup=\"menu\"\r\n [label]=\"file.FileName ||''\"\r\n aria-controls=\"fd-action-sheet-mobile-body\"\r\n ></button>\r\n </fd-action-sheet-control>\r\n\r\n <fd-action-sheet-body\r\n actionSheetBodyId=\"fd-action-sheet-mobile-body\"\r\n ariaLabelledBy=\"fd-action-sheet-mobile-control\"\r\n >\r\n <li fd-action-sheet-item label=\"Search\" glyph=\"search\"></li>\r\n <li fd-action-sheet-item label=\"Download\" glyph=\"download\" ></li>\r\n <li fd-action-sheet-item label=\"Accept\" glyph=\"accept\" ></li>\r\n <li fd-action-sheet-item label=\"Reject\" glyph=\"cancel\" ></li>\r\n <li fd-action-sheet-item label=\"Decide Later\" [isCloseButton]=\"true\"></li>\r\n <li fd-action-sheet-item label=\"Cancel\" [negative]=\"true\" [isCloseButton]=\"true\"></li>\r\n </fd-action-sheet-body>\r\n </fd-action-sheet>\r\n </p> -->\r\n </ng-container>\r\n </td>\r\n <td fd-table-cell>\r\n <div class=\"status\" style=\"position: relative\">\r\n @if (+documentItem.MaxFileCount && !readonly) {\r\n <button\r\n fd-button\r\n glyph=\"attachment\"\r\n [label]=\"'AttachFile' | bbbTranslate\"\r\n [disabled]=\"uploadingState?.key === documentItem.Title && uploadingState?.uploading\"\r\n (click)=\"!readonly && uploader.open()\"\r\n >\r\n @if (uploadingState?.key === documentItem.Title && uploadingState?.uploading) {\r\n <bsu-mask [marginTop]=\"'3px'\"></bsu-mask>\r\n }\r\n </button>\r\n }\r\n <button\r\n fd-button\r\n glyph=\"show\"\r\n fullscreenFiles\r\n [files]=\"files\"\r\n [title]=\"documentItem.Title\"\r\n [fd-inline-help]=\"'\u0645\u0634\u0627\u0647\u062F\u0647 \u0647\u0645\u0647' | bbbTranslate\"\r\n [aria-describedby]=\"'\u0645\u0634\u0627\u0647\u062F\u0647 \u0647\u0645\u0647' | bbbTranslate\"\r\n [ariaLabel]=\"'\u0645\u0634\u0627\u0647\u062F\u0647 \u0647\u0645\u0647' | bbbTranslate\"\r\n fullscreenFiles\r\n [disabled]=\"!files.length\"\r\n [files]=\"files\"\r\n ></button>\r\n <button\r\n fd-button\r\n glyph=\"download\"\r\n [fd-inline-help]=\"'\u062F\u0627\u0646\u0644\u0648\u062F \u0647\u0645\u0647' | bbbTranslate\"\r\n [aria-describedby]=\"'\u062F\u0627\u0646\u0644\u0648\u062F \u0647\u0645\u0647' | bbbTranslate\"\r\n [ariaLabel]=\"'\u062F\u0627\u0646\u0644\u0648\u062F \u0647\u0645\u0647' | bbbTranslate\"\r\n downloadFiles\r\n [disabled]=\"!files.length\"\r\n [files]=\"files\"\r\n (click)=\"downloadAll.emit()\"\r\n ></button>\r\n </div>\r\n </td>\r\n <td fd-table-cell>\r\n <fd-action-sheet #actionSheet>\r\n <fd-action-sheet-control>\r\n <ng-container *ngTemplateOutlet=\"statusTpl\"></ng-container>\r\n </fd-action-sheet-control>\r\n <fd-action-sheet-body>\r\n <li\r\n fd-action-sheet-item\r\n [label]=\"'Accept' | bbbTranslate\"\r\n glyph=\"accept\"\r\n (click)=\"actionSheet.close(); onReject(2)\"\r\n ></li>\r\n <li\r\n fd-action-sheet-item\r\n [label]=\"'Reject' | bbbTranslate\"\r\n glyph=\"cancel\"\r\n (click)=\"actionSheet.close(); onReject(3)\"\r\n ></li>\r\n </fd-action-sheet-body>\r\n </fd-action-sheet>\r\n\r\n @if (status === 3) {\r\n <p fd-table-text maxWidth=\"400px\">\r\n @if (readonly && rejectedReason) {\r\n <span> {{ rejectedReason | bbbTranslate }} </span>\r\n } @if (!readonly) {\r\n <input\r\n fd-form-control\r\n [value]=\"rejectedReason | bbbTranslate\"\r\n [placeholder]=\"'\u062F\u0644\u0627\u06CC\u0644 \u0631\u062F \u0645\u062F\u0631\u06A9' | bbbTranslate\"\r\n />\r\n }\r\n </p>\r\n }\r\n </td>\r\n</tr>\r\n\r\n<fd-file-uploader\r\n #uploader\r\n [style.display]=\"'none'\"\r\n fd-toolbar-item\r\n [id]=\"documentItem.ItemKey\"\r\n [name]=\"'pictures_' + documentItem.ItemKey\"\r\n [accept]=\"documentItem.$ValidExtensions\"\r\n [fileLimit]=\"documentItem.MaxFileCount\"\r\n [multiple]=\"documentItem.MaxFileCount > 0\"\r\n (selectedFilesChanged)=\"onFileSelection($event)\"\r\n></fd-file-uploader>\r\n<ng-template #statusTpl>\r\n <div class=\"status\">\r\n <button fd-button fdType=\"transparent\">\r\n @if (status === 1) {\r\n <span\r\n fd-object-status\r\n [label]=\"'[\u067E\u06CC\u0648\u0633\u062A \u0645\u062F\u0627\u0631\u06A9]' | bbbTranslate\"\r\n [aria-label]=\"'[\u067E\u06CC\u0648\u0633\u062A \u0645\u062F\u0627\u0631\u06A9]' | bbbTranslate\"\r\n ></span>\r\n } @if (status === 2) {\r\n <span\r\n fd-object-status\r\n glyph=\"message-success\"\r\n status=\"positive\"\r\n [label]=\"'Accepted' | bbbTranslate\"\r\n [label]=\"'Accepted' | bbbTranslate\"\r\n ></span>\r\n } @if (status === 3) {\r\n <span\r\n fd-object-status\r\n glyph=\"cancel\"\r\n status=\"negative\"\r\n [label]=\"'Rejected' | bbbTranslate\"\r\n [aria-label]=\"'Rejected' | bbbTranslate\"\r\n ></span>\r\n }\r\n </button>\r\n </div>\r\n</ng-template>\r\n", styles: [":host{display:contents}::ng-deep .fd-list--byline .fd-list__byline-left,::ng-deep .fd-list--byline .fd-list__byline-right{line-height:1.1rem!important}.fd-list__byline.smallSize{flex-direction:column;row-gap:5px}.fd-list__byline.smallSize div{width:100%}td{white-space:nowrap;padding:.5rem}fd-avatar ::ng-deep i{font-size:2.3rem!important}.status{display:flex;align-items:center;column-gap:3px;row-gap:3px}.status span.fd-object-status{font-size:var(--sapFontSize)!important;font-weight:700!important}.status span.fd-object-status ::ng-deep fd-icon{font-size:var(--sapFontSize);font-weight:700}\n"], dependencies: [{ kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.MaskComponent, selector: "bsu-mask", inputs: ["size", "top"] }, { kind: "component", type: i3.FileViewerPopoverComponent, selector: "bsu-file-viewer-popover", inputs: ["files", "file", "deviceSize", "canDownload", "disableRemove", "fdType"], outputs: ["remove"] }, { kind: "directive", type: i3.FullscreenFilesDirective, selector: "[fullscreenFiles]", inputs: ["files", "title", "deviceSize", "isImageGallery", "component"] }, { kind: "directive", type: i3.DownloadFilesDirective, selector: "[downloadFiles]", inputs: ["files"] }, { kind: "component", type: i4.ActionSheetComponent, selector: "fd-action-sheet", inputs: ["mobile", "placement", "noArrow", "isOpen", "keyboardSupport", "triggers"], outputs: ["focusEscapeList", "isOpenChange"] }, { kind: "component", type: i4.ActionSheetControlComponent, selector: "fd-action-sheet-control", outputs: ["clicked"] }, { kind: "component", type: i4.ActionSheetItemComponent, selector: "[fd-action-sheet-item]", inputs: ["label", "glyph", "glyphFont", "negative", "isCloseButton", "disabled"], outputs: ["keyDown"] }, { kind: "component", type: i4.ActionSheetBodyComponent, selector: "fd-action-sheet-body", inputs: ["actionSheetBodyId", "mobile", "ariaLabel", "ariaLabelledby"] }, { kind: "component", type: i5.AvatarComponent, selector: "fd-avatar", inputs: ["class", "id", "ariaLabel", "ariaLabelledby", "label", "size", "font", "glyph", "zoomGlyph", "circle", "transparent", "contain", "placeholder", "tile", "border", "colorAccent", "random", "clickable", "valueState", "image", "alterIcon", "backupImage"], outputs: ["avatarClicked", "zoomGlyphClicked"] }, { kind: "component", type: i6.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i7.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: i8.FormControlComponent, selector: "input[fd-form-control], textarea[fd-form-control]", inputs: ["state", "type", "class", "ariaLabel", "ariaLabelledBy"] }, { kind: "directive", type: i9.InlineHelpDirective, selector: "[fd-inline-help]:not([fd-inline-help-template]), [fd-inline-help-template]:not([fd-inline-help])", inputs: ["triggers", "noArrow", "closeOnEscapeKey", "closeOnOutsideClick", "fd-inline-help"] }, { kind: "component", type: i10.ObjectStatusComponent, selector: "[fd-object-status]", inputs: ["class", "status", "glyph", "glyphFont", "label", "glyphAriaLabel", "indicationColor", "clickable", "inverted", "large", "secondaryIndication", "textTemplate"] }, { kind: "directive", type: i11.TableRowDirective, selector: "[fdTableRow], [fd-table-row]", inputs: ["activable", "highlightActive", "hoverable", "focusable", "main", "secondary", "active"] }, { kind: "directive", type: i11.TableCellDirective, selector: "[fdTableCell], [fd-table-cell]", inputs: ["noBorderX", "noBorderY", "activable", "focusable", "hoverable", "fitContent", "noPadding", "noData", "key"] }, { kind: "directive", type: i11.TableTextDirective, selector: "[fdTableText], [fd-table-text]", inputs: ["fdTableTextClass", "noWrap", "title", "maxWidth"] }, { kind: "directive", type: i12.ToolbarItemDirective, selector: "[fd-toolbar-item], [fdOverflowGroup], [fdOverflowPriority]", inputs: ["fdOverflowPriority", "fdOverflowGroup"] }, { kind: "pipe", type: i1.PictureFieldSourcePipe, name: "picFieldSrc" }, { kind: "pipe", type: i1.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
69
+ }
70
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: BarsaDocumentListItemComponent, decorators: [{
71
+ type: Component,
72
+ args: [{ selector: 'bdc-barsa-document-list-item', changeDetection: ChangeDetectionStrategy.OnPush, template: "<!-- <li fd-list-item style=\"padding: 0.5rem 1rem\">\r\n<span fd-list-thumbnail>\r\n <fd-icon *ngIf=\"documentItem.FontIcon\" [glyph]=\"documentItem.FontIcon\"></fd-icon>\r\n <fd-avatar\r\n *ngIf=\"documentItem.Avatar\"\r\n size=\"s\"\r\n [image]=\"documentItem.Avatar.FileId | picFieldSrc: 'ID':null:''\"\r\n [clickable]=\"true\"\r\n ></fd-avatar\r\n ></span>\r\n\r\n <div fd-list-content>\r\n <div fd-list-title>\r\n <div style=\"display: flex; column-gap: 3px\">\r\n <strong\r\n >{{ documentItem.Title }}\r\n <span fd-object-status status=\"negative\" *ngIf=\"documentItem.IsRequired\"\r\n >*({{ '\u0627\u062C\u0628\u0627\u0631\u06CC' | bbbTranslate }})\r\n </span>\r\n </strong>\r\n <div\r\n *ngIf=\"documentItem.$Accepted === false || documentItem.$Accepted === true\"\r\n style=\"display: flex; column-gap: 3px; flex-wrap: wrap; align-items: center\"\r\n >\r\n <span\r\n fd-object-status\r\n [status]=\"accepted ? 'positive' : 'negative'\"\r\n [label]=\"accepted ? acceptedText : rejectedText\"\r\n [clickable]=\"true\"\r\n [inverted]=\"true\"\r\n [aria-label]=\"accepted ? acceptedText : rejectedText\"\r\n ></span>\r\n <fd-popover title=\"Rejected document\" *ngIf=\"rejectedReason && !accepted\">\r\n <fd-popover-control>\r\n <span\r\n fd-object-status\r\n status=\"negative\"\r\n glyph=\"question-mark\"\r\n glyphAriaLabel=\"Negative\"\r\n title=\"Rejected document\"\r\n ></span>\r\n </fd-popover-control>\r\n <fd-popover-body>\r\n <fd-message-strip type=\"error\" [dismissible]=\"false\">\r\n {{ rejectedReason }}\r\n </fd-message-strip>\r\n </fd-popover-body>\r\n </fd-popover>\r\n </div>\r\n </div>\r\n </div>\r\n <div fd-list-byline [twoCol]=\"true\" [class.smallSize]=\"deviceSize === 's'\">\r\n <div fd-list-byline-left>\r\n <div style=\"display: flex; flex-direction: column; row-gap: 5px; flex-wrap: wrap\">\r\n <span>\r\n {{ documentItem.Description }}\r\n </span>\r\n <div style=\"display: flex; flex-wrap: wrap; column-gap: 3px; align-items: center\">\r\n <ng-container *ngIf=\"hasFiles\">\r\n <button fd-button [fdType]=\"'transparent'\" glyph=\"show\" (click)=\"onFullscreen()\"></button>\r\n <ng-container *ngFor=\"let file of files\">\r\n <fd-token\r\n [readOnly]=\"readonly\"\r\n *ngIf=\"!file.IsDeleted\"\r\n (onCloseClick)=\"onRemoveFile(file)\"\r\n >{{ file.FileName }}</fd-token\r\n >\r\n </ng-container>\r\n </ng-container>\r\n <button\r\n fd-button\r\n *ngIf=\"documentItem.MaxFileCount && !readonly\"\r\n glyph=\"attachment\"\r\n [label]=\"'AttachFile' | bbbTranslate\"\r\n (click)=\"!readonly && uploader.open()\"\r\n ></button>\r\n <fd-file-uploader\r\n #uploader\r\n [style.display]=\"'none'\"\r\n fd-toolbar-item\r\n [id]=\"documentItem.ItemKey\"\r\n [name]=\"'pictures_' + documentItem.ItemKey\"\r\n [accept]=\"documentItem.$ValidExtensions\"\r\n [fileLimit]=\"documentItem.MaxFileCount\"\r\n [multiple]=\"documentItem.MaxFileCount > 0\"\r\n (selectedFilesChanged)=\"onFileSelection($event)\"\r\n ></fd-file-uploader>\r\n </div>\r\n </div>\r\n </div>\r\n <div fd-list-byline-right *ngIf=\"documentItem.CanAccept\">\r\n <bdc-accept-reject\r\n [rejectedReason]=\"rejectedReason\"\r\n [positiveText]=\"acceptedText\"\r\n [negativeText]=\"rejectedText\"\r\n [deviceSize]=\"deviceSize\"\r\n [readonly]=\"readonly\"\r\n ></bdc-accept-reject>\r\n </div>\r\n </div>\r\n </div>\r\n </li> -->\r\n\r\n<tr fd-table-row>\r\n <td fd-table-cell>\r\n @if (documentItem.Avatar && !files.length) {\r\n <fd-avatar\r\n size=\"s\"\r\n [image]=\"documentItem.Avatar.FileId | picFieldSrc: 'ID':null:'':64:64\"\r\n [clickable]=\"true\"\r\n [transparent]=\"true\"\r\n ></fd-avatar>\r\n } @else { @if (files.length) {\r\n <fd-avatar [transparent]=\"true\" size=\"s\" [image]=\"firstImageUrl\" [clickable]=\"true\"></fd-avatar>\r\n } @if (!files.length) {\r\n <fd-avatar [transparent]=\"true\" size=\"s\" [glyph]=\"documentItem.FontIcon\" [clickable]=\"true\"></fd-avatar>\r\n } }\r\n </td>\r\n <td fd-table-cell style=\"min-width: 140px\">\r\n <p fd-table-text>\r\n <strong\r\n >{{ documentItem.Title }}\r\n @if (documentItem.IsRequired) {\r\n <span fd-object-status status=\"negative\">*({{ '\u0627\u062C\u0628\u0627\u0631\u06CC' | bbbTranslate }}) </span>\r\n }\r\n </strong>\r\n </p>\r\n <div>\r\n <span>\r\n {{ documentItem.Description }}\r\n </span>\r\n </div>\r\n </td>\r\n\r\n <td fd-table-cell>\r\n <ng-container>\r\n <!-- <ul fd-list>\r\n <li fd-list-item *ngFor=\"let file of files; let ind = index\">\r\n <span fd-list-title>\r\n {{ file.FileName }}\r\n </span>\r\n <span fd-list-secondary>\r\n <button ariaLabel=\"Remove\" title=\"Remove\" fd-button glyph=\"delete\" ></button>\r\n </span>\r\n </li>\r\n </ul> -->\r\n <div style=\"display: flex; align-items: flex-start; column-gap: 3px; row-gap: 3px; flex-direction: column\">\r\n @for (file of files; track file) {\r\n <!-- <span><fd-icon glyph=\"attachment\"></fd-icon><a fd-link>{{file.FileName}}</a></span> -->\r\n @if (!file.IsDeleted) {\r\n <bsu-file-viewer-popover\r\n [file]=\"file\"\r\n [deviceSize]=\"deviceSize\"\r\n [canDownload]=\"true\"\r\n (remove)=\"removeFile.emit(file)\"\r\n ></bsu-file-viewer-popover>\r\n } }\r\n <!-- <button\r\n fd-button\r\n *ngIf=\"+documentItem.MaxFileCount && !readonly\"\r\n glyph=\"add\"\r\n (click)=\"!readonly && uploader.open()\"\r\n ></button> -->\r\n </div>\r\n <!-- <p *ngFor=\"let file of files\" fd-table-text>\r\n <fd-action-sheet >\r\n <fd-action-sheet-control>\r\n <button\r\n fd-button\r\n glyph=\"settings\"\r\n title=\"Open Action Sheet Mobile\"\r\n id=\"fd-action-sheet-mobile-control\"\r\n aria-haspopup=\"menu\"\r\n [label]=\"file.FileName ||''\"\r\n aria-controls=\"fd-action-sheet-mobile-body\"\r\n ></button>\r\n </fd-action-sheet-control>\r\n\r\n <fd-action-sheet-body\r\n actionSheetBodyId=\"fd-action-sheet-mobile-body\"\r\n ariaLabelledBy=\"fd-action-sheet-mobile-control\"\r\n >\r\n <li fd-action-sheet-item label=\"Search\" glyph=\"search\"></li>\r\n <li fd-action-sheet-item label=\"Download\" glyph=\"download\" ></li>\r\n <li fd-action-sheet-item label=\"Accept\" glyph=\"accept\" ></li>\r\n <li fd-action-sheet-item label=\"Reject\" glyph=\"cancel\" ></li>\r\n <li fd-action-sheet-item label=\"Decide Later\" [isCloseButton]=\"true\"></li>\r\n <li fd-action-sheet-item label=\"Cancel\" [negative]=\"true\" [isCloseButton]=\"true\"></li>\r\n </fd-action-sheet-body>\r\n </fd-action-sheet>\r\n </p> -->\r\n </ng-container>\r\n </td>\r\n <td fd-table-cell>\r\n <div class=\"status\" style=\"position: relative\">\r\n @if (+documentItem.MaxFileCount && !readonly) {\r\n <button\r\n fd-button\r\n glyph=\"attachment\"\r\n [label]=\"'AttachFile' | bbbTranslate\"\r\n [disabled]=\"uploadingState?.key === documentItem.Title && uploadingState?.uploading\"\r\n (click)=\"!readonly && uploader.open()\"\r\n >\r\n @if (uploadingState?.key === documentItem.Title && uploadingState?.uploading) {\r\n <bsu-mask [marginTop]=\"'3px'\"></bsu-mask>\r\n }\r\n </button>\r\n }\r\n <button\r\n fd-button\r\n glyph=\"show\"\r\n fullscreenFiles\r\n [files]=\"files\"\r\n [title]=\"documentItem.Title\"\r\n [fd-inline-help]=\"'\u0645\u0634\u0627\u0647\u062F\u0647 \u0647\u0645\u0647' | bbbTranslate\"\r\n [aria-describedby]=\"'\u0645\u0634\u0627\u0647\u062F\u0647 \u0647\u0645\u0647' | bbbTranslate\"\r\n [ariaLabel]=\"'\u0645\u0634\u0627\u0647\u062F\u0647 \u0647\u0645\u0647' | bbbTranslate\"\r\n fullscreenFiles\r\n [disabled]=\"!files.length\"\r\n [files]=\"files\"\r\n ></button>\r\n <button\r\n fd-button\r\n glyph=\"download\"\r\n [fd-inline-help]=\"'\u062F\u0627\u0646\u0644\u0648\u062F \u0647\u0645\u0647' | bbbTranslate\"\r\n [aria-describedby]=\"'\u062F\u0627\u0646\u0644\u0648\u062F \u0647\u0645\u0647' | bbbTranslate\"\r\n [ariaLabel]=\"'\u062F\u0627\u0646\u0644\u0648\u062F \u0647\u0645\u0647' | bbbTranslate\"\r\n downloadFiles\r\n [disabled]=\"!files.length\"\r\n [files]=\"files\"\r\n (click)=\"downloadAll.emit()\"\r\n ></button>\r\n </div>\r\n </td>\r\n <td fd-table-cell>\r\n <fd-action-sheet #actionSheet>\r\n <fd-action-sheet-control>\r\n <ng-container *ngTemplateOutlet=\"statusTpl\"></ng-container>\r\n </fd-action-sheet-control>\r\n <fd-action-sheet-body>\r\n <li\r\n fd-action-sheet-item\r\n [label]=\"'Accept' | bbbTranslate\"\r\n glyph=\"accept\"\r\n (click)=\"actionSheet.close(); onReject(2)\"\r\n ></li>\r\n <li\r\n fd-action-sheet-item\r\n [label]=\"'Reject' | bbbTranslate\"\r\n glyph=\"cancel\"\r\n (click)=\"actionSheet.close(); onReject(3)\"\r\n ></li>\r\n </fd-action-sheet-body>\r\n </fd-action-sheet>\r\n\r\n @if (status === 3) {\r\n <p fd-table-text maxWidth=\"400px\">\r\n @if (readonly && rejectedReason) {\r\n <span> {{ rejectedReason | bbbTranslate }} </span>\r\n } @if (!readonly) {\r\n <input\r\n fd-form-control\r\n [value]=\"rejectedReason | bbbTranslate\"\r\n [placeholder]=\"'\u062F\u0644\u0627\u06CC\u0644 \u0631\u062F \u0645\u062F\u0631\u06A9' | bbbTranslate\"\r\n />\r\n }\r\n </p>\r\n }\r\n </td>\r\n</tr>\r\n\r\n<fd-file-uploader\r\n #uploader\r\n [style.display]=\"'none'\"\r\n fd-toolbar-item\r\n [id]=\"documentItem.ItemKey\"\r\n [name]=\"'pictures_' + documentItem.ItemKey\"\r\n [accept]=\"documentItem.$ValidExtensions\"\r\n [fileLimit]=\"documentItem.MaxFileCount\"\r\n [multiple]=\"documentItem.MaxFileCount > 0\"\r\n (selectedFilesChanged)=\"onFileSelection($event)\"\r\n></fd-file-uploader>\r\n<ng-template #statusTpl>\r\n <div class=\"status\">\r\n <button fd-button fdType=\"transparent\">\r\n @if (status === 1) {\r\n <span\r\n fd-object-status\r\n [label]=\"'[\u067E\u06CC\u0648\u0633\u062A \u0645\u062F\u0627\u0631\u06A9]' | bbbTranslate\"\r\n [aria-label]=\"'[\u067E\u06CC\u0648\u0633\u062A \u0645\u062F\u0627\u0631\u06A9]' | bbbTranslate\"\r\n ></span>\r\n } @if (status === 2) {\r\n <span\r\n fd-object-status\r\n glyph=\"message-success\"\r\n status=\"positive\"\r\n [label]=\"'Accepted' | bbbTranslate\"\r\n [label]=\"'Accepted' | bbbTranslate\"\r\n ></span>\r\n } @if (status === 3) {\r\n <span\r\n fd-object-status\r\n glyph=\"cancel\"\r\n status=\"negative\"\r\n [label]=\"'Rejected' | bbbTranslate\"\r\n [aria-label]=\"'Rejected' | bbbTranslate\"\r\n ></span>\r\n }\r\n </button>\r\n </div>\r\n</ng-template>\r\n", styles: [":host{display:contents}::ng-deep .fd-list--byline .fd-list__byline-left,::ng-deep .fd-list--byline .fd-list__byline-right{line-height:1.1rem!important}.fd-list__byline.smallSize{flex-direction:column;row-gap:5px}.fd-list__byline.smallSize div{width:100%}td{white-space:nowrap;padding:.5rem}fd-avatar ::ng-deep i{font-size:2.3rem!important}.status{display:flex;align-items:center;column-gap:3px;row-gap:3px}.status span.fd-object-status{font-size:var(--sapFontSize)!important;font-weight:700!important}.status span.fd-object-status ::ng-deep fd-icon{font-size:var(--sapFontSize);font-weight:700}\n"] }]
73
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.PictureFieldSourcePipe }], propDecorators: { documentItem: [{
74
+ type: Input
75
+ }], deviceSize: [{
76
+ type: Input
77
+ }], files: [{
78
+ type: Input
79
+ }], accepted: [{
80
+ type: Input
81
+ }], rejectedReason: [{
82
+ type: Input
83
+ }], readonly: [{
84
+ type: Input
85
+ }], status: [{
86
+ type: Input
87
+ }], uploadingState: [{
88
+ type: Input
89
+ }], statusChanged: [{
90
+ type: Output
91
+ }], rejectTextChange: [{
92
+ type: Output
93
+ }], fileSelectionChange: [{
94
+ type: Output
95
+ }], removeFile: [{
96
+ type: Output
97
+ }], fullscreen: [{
98
+ type: Output
99
+ }], download: [{
100
+ type: Output
101
+ }], downloadAll: [{
102
+ type: Output
103
+ }] } });
104
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFyc2EtZG9jdW1lbnQtbGlzdC1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLWRldmVsb3AtY29tcG9uZW50cy9zcmMvbGliL2JhcnNhLWRvY3VtZW50LWxpc3QtaXRlbS9iYXJzYS1kb2N1bWVudC1saXN0LWl0ZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2EtZGV2ZWxvcC1jb21wb25lbnRzL3NyYy9saWIvYmFyc2EtZG9jdW1lbnQtbGlzdC1pdGVtL2JhcnNhLWRvY3VtZW50LWxpc3QtaXRlbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFFVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBRUgsYUFBYSxFQUNiLGFBQWEsRUFFYixhQUFhLEVBQ2Isa0JBQWtCLEVBQ2xCLGFBQWEsRUFDYixnQkFBZ0IsRUFFaEIsT0FBTyxFQUNQLE9BQU8sRUFFVixNQUFNLHNCQUFzQixDQUFDOzs7Ozs7Ozs7Ozs7OztBQVM5QixNQUFNLE9BQU8sOEJBQStCLFNBQVEsYUFBYTtJQXFCN0QsWUFBb0IsSUFBdUIsRUFBVSxZQUFvQztRQUNyRixLQUFLLEVBQUUsQ0FBQztRQURRLFNBQUksR0FBSixJQUFJLENBQW1CO1FBQVUsaUJBQVksR0FBWixZQUFZLENBQXdCO1FBVi9FLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQTJDLENBQUM7UUFDNUUscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUM5Qyx3QkFBbUIsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ2pELGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBc0IsQ0FBQztRQUNwRCxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQTZCLENBQUM7UUFD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QUFoQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVJLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBJbnB1dCxcclxuICAgIE9uQ2hhbmdlcyxcclxuICAgIE91dHB1dCxcclxuICAgIFNpbXBsZUNoYW5nZXNcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICAgIEFiYnJldmF0aW9uRGV2aWNlU2l6ZSxcclxuICAgIEF1ZGlvTWltZVR5cGUsXHJcbiAgICBCYXNlQ29tcG9uZW50LFxyXG4gICAgRmlsZUF0dGFjaG1lbnRJbmZvLFxyXG4gICAgSW1hZ2VNaW1lVHlwZSxcclxuICAgIFByZXZlbnREZWZhdWxFdmVudCxcclxuICAgIFZpZGVvTWltZVR5cGUsXHJcbiAgICBBbGxGaWxlc01pbWVUeXBlLFxyXG4gICAgUGljdHVyZUZpZWxkU291cmNlUGlwZSxcclxuICAgIGlzSW1hZ2UsXHJcbiAgICBnZXRJY29uLFxyXG4gICAgSVVwbG9hZGluZ1N0YXRlXHJcbn0gZnJvbSAnYmFyc2Etbm92aW4tcmF5LWNvcmUnO1xyXG5pbXBvcnQgeyBEb2N1bWVudEl0ZW0gfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2JkYy1iYXJzYS1kb2N1bWVudC1saXN0LWl0ZW0nLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2JhcnNhLWRvY3VtZW50LWxpc3QtaXRlbS5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9iYXJzYS1kb2N1bWVudC1saXN0LWl0ZW0uY29tcG9uZW50LnNjc3MnXSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCYXJzYURvY3VtZW50TGlzdEl0ZW1Db21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcclxuICAgIEBJbnB1dCgpIGRvY3VtZW50SXRlbTogRG9jdW1lbnRJdGVtO1xyXG5cclxuICAgIEBJbnB1dCgpIGRldmljZVNpemU6IEFiYnJldmF0aW9uRGV2aWNlU2l6ZTtcclxuICAgIEBJbnB1dCgpIGZpbGVzOiBGaWxlQXR0YWNobWVudEluZm9bXTtcclxuICAgIEBJbnB1dCgpIGFjY2VwdGVkOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgcmVqZWN0ZWRSZWFzb246IHN0cmluZztcclxuICAgIEBJbnB1dCgpIHJlYWRvbmx5OiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgc3RhdHVzOiBudW1iZXI7XHJcbiAgICBASW5wdXQoKSB1cGxvYWRpbmdTdGF0ZTogSVVwbG9hZGluZ1N0YXRlO1xyXG5cclxuICAgIEBPdXRwdXQoKSBzdGF0dXNDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjx7IHZhbHVlOiBudW1iZXI7IHJlamVjdGVkVGV4dDogc3RyaW5nIH0+KCk7XHJcbiAgICBAT3V0cHV0KCkgcmVqZWN0VGV4dENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gICAgQE91dHB1dCgpIGZpbGVTZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEZpbGVbXT4oKTtcclxuICAgIEBPdXRwdXQoKSByZW1vdmVGaWxlID0gbmV3IEV2ZW50RW1pdHRlcjxGaWxlQXR0YWNobWVudEluZm8+KCk7XHJcbiAgICBAT3V0cHV0KCkgZnVsbHNjcmVlbiA9IG5ldyBFdmVudEVtaXR0ZXI8bnVsbCB8IEZpbGVBdHRhY2htZW50SW5mbz4oKTtcclxuICAgIEBPdXRwdXQoKSBkb3dubG9hZCA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsZUF0dGFjaG1lbnRJbmZvPigpO1xyXG4gICAgQE91dHB1dCgpIGRvd25sb2FkQWxsID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAgIGhhc0ZpbGVzID0gZmFsc2U7XHJcbiAgICBmaXJzdEltYWdlVXJsOiBhbnk7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9jZHI6IENoYW5nZURldGVjdG9yUmVmLCBwcml2YXRlIF9waWNGaWVsZFNyYzogUGljdHVyZUZpZWxkU291cmNlUGlwZSkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG4gICAgICAgIGNvbnN0IGRvY3VtZW50SXRlbSA9IHRoaXMuZG9jdW1lbnRJdGVtO1xyXG4gICAgICAgIGRvY3VtZW50SXRlbS4kVmFsaWRFeHRlbnNpb25zID0gYCAgICAgICAgICAgIFxyXG4gICAgICAgICR7ZG9jdW1lbnRJdGVtLlN1cHBvcnRJbWFnZSA/IEltYWdlTWltZVR5cGUgOiAnJ30sXHJcbiAgICAgICAgJHtkb2N1bWVudEl0ZW0uU3VwcG9ydEF1ZGlvID8gQXVkaW9NaW1lVHlwZSA6ICcnfSxcclxuICAgICAgICAke2RvY3VtZW50SXRlbS5TdXBwb3J0VmlkZW8gPyBWaWRlb01pbWVUeXBlIDogJyd9LFxyXG4gICAgICAgICR7ZG9jdW1lbnRJdGVtLlN1cHBvcnRGaWxlID8gQWxsRmlsZXNNaW1lVHlwZSA6ICcnfVxyXG4gICAgICAgIGA7XHJcbiAgICB9XHJcbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICAgICAgc3VwZXIubmdPbkNoYW5nZXMoY2hhbmdlcyk7XHJcbiAgICAgICAgY29uc3QgeyBmaWxlcyB9ID0gY2hhbmdlcztcclxuICAgICAgICBmaWxlcyAmJiBBcnJheS5pc0FycmF5KGZpbGVzLmN1cnJlbnRWYWx1ZSkgJiYgdGhpcy5fc2V0Rmlyc3RJbWFnZShmaWxlcy5jdXJyZW50VmFsdWUpO1xyXG4gICAgICAgIHRoaXMuX2RldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICAgIG9uUmVqZWN0KGU6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc3RhdHVzQ2hhbmdlZC5lbWl0KHsgdmFsdWU6IGUsIHJlamVjdGVkVGV4dDogZSA9PT0gMiA/ICcnIDogdGhpcy5yZWplY3RlZFJlYXNvbiB9KTtcclxuICAgIH1cclxuICAgIG9uUmVqZWN0ZWRUZXh0Q2hhbmdlKGUpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnJlamVjdFRleHRDaGFuZ2UuZW1pdChlLnRhcmdldC52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBvblByZXZlbnRDbGljayhlKTogdm9pZCB7XHJcbiAgICAgICAgUHJldmVudERlZmF1bEV2ZW50KGUpO1xyXG4gICAgfVxyXG4gICAgb25GaWxlU2VsZWN0aW9uKGZpbGVzOiBGaWxlW10pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmZpbGVTZWxlY3Rpb25DaGFuZ2UuZW1pdChmaWxlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9zZXRGaXJzdEltYWdlKGZpbGVzOiBGaWxlQXR0YWNobWVudEluZm9bXSk6IHZvaWQge1xyXG4gICAgICAgIGZpbGVzLmxlbmd0aCAmJlxyXG4gICAgICAgICAgICAodGhpcy5maXJzdEltYWdlVXJsID0gaXNJbWFnZShmaWxlc1swXS5UeXBlKVxyXG4gICAgICAgICAgICAgICAgPyB0aGlzLl9waWNGaWVsZFNyYy50cmFuc2Zvcm0oZmlsZXNbMF0uSWQsICdJRCcsIG51bGwsICcnLCAxMjAsIDEyMClcclxuICAgICAgICAgICAgICAgIDogZ2V0SWNvbihmaWxlc1swXS5UeXBlKSk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX2RldGVjdENoYW5nZXMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxufVxyXG4iLCI8IS0tIDxsaSBmZC1saXN0LWl0ZW0gc3R5bGU9XCJwYWRkaW5nOiAwLjVyZW0gMXJlbVwiPlxyXG48c3BhbiBmZC1saXN0LXRodW1ibmFpbD5cclxuICA8ZmQtaWNvbiAqbmdJZj1cImRvY3VtZW50SXRlbS5Gb250SWNvblwiIFtnbHlwaF09XCJkb2N1bWVudEl0ZW0uRm9udEljb25cIj48L2ZkLWljb24+XHJcbiAgPGZkLWF2YXRhclxyXG4gICAgKm5nSWY9XCJkb2N1bWVudEl0ZW0uQXZhdGFyXCJcclxuICAgIHNpemU9XCJzXCJcclxuICAgIFtpbWFnZV09XCJkb2N1bWVudEl0ZW0uQXZhdGFyLkZpbGVJZCB8IHBpY0ZpZWxkU3JjOiAnSUQnOm51bGw6JydcIlxyXG4gICAgW2NsaWNrYWJsZV09XCJ0cnVlXCJcclxuICAgID48L2ZkLWF2YXRhclxyXG4gID48L3NwYW4+XHJcblxyXG4gIDxkaXYgZmQtbGlzdC1jb250ZW50PlxyXG4gICAgPGRpdiBmZC1saXN0LXRpdGxlPlxyXG4gICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgY29sdW1uLWdhcDogM3B4XCI+XHJcbiAgICAgICAgPHN0cm9uZ1xyXG4gICAgICAgICAgPnt7IGRvY3VtZW50SXRlbS5UaXRsZSB9fVxyXG4gICAgICAgICAgPHNwYW4gZmQtb2JqZWN0LXN0YXR1cyBzdGF0dXM9XCJuZWdhdGl2ZVwiICpuZ0lmPVwiZG9jdW1lbnRJdGVtLklzUmVxdWlyZWRcIlxyXG4gICAgICAgICAgICA+Kih7eyAn2KfYrNio2KfYsduMJyB8IGJiYlRyYW5zbGF0ZSB9fSlcclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L3N0cm9uZz5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAqbmdJZj1cImRvY3VtZW50SXRlbS4kQWNjZXB0ZWQgPT09IGZhbHNlIHx8IGRvY3VtZW50SXRlbS4kQWNjZXB0ZWQgPT09IHRydWVcIlxyXG4gICAgICAgICAgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBjb2x1bW4tZ2FwOiAzcHg7IGZsZXgtd3JhcDogd3JhcDsgYWxpZ24taXRlbXM6IGNlbnRlclwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICBmZC1vYmplY3Qtc3RhdHVzXHJcbiAgICAgICAgICAgIFtzdGF0dXNdPVwiYWNjZXB0ZWQgPyAncG9zaXRpdmUnIDogJ25lZ2F0aXZlJ1wiXHJcbiAgICAgICAgICAgIFtsYWJlbF09XCJhY2NlcHRlZCA/IGFjY2VwdGVkVGV4dCA6IHJlamVjdGVkVGV4dFwiXHJcbiAgICAgICAgICAgIFtjbGlja2FibGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgIFtpbnZlcnRlZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgW2FyaWEtbGFiZWxdPVwiYWNjZXB0ZWQgPyBhY2NlcHRlZFRleHQgOiByZWplY3RlZFRleHRcIlxyXG4gICAgICAgICAgPjwvc3Bhbj5cclxuICAgICAgICAgIDxmZC1wb3BvdmVyIHRpdGxlPVwiUmVqZWN0ZWQgZG9jdW1lbnRcIiAqbmdJZj1cInJlamVjdGVkUmVhc29uICYmICFhY2NlcHRlZFwiPlxyXG4gICAgICAgICAgICA8ZmQtcG9wb3Zlci1jb250cm9sPlxyXG4gICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICBmZC1vYmplY3Qtc3RhdHVzXHJcbiAgICAgICAgICAgICAgICBzdGF0dXM9XCJuZWdhdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICBnbHlwaD1cInF1ZXN0aW9uLW1hcmtcIlxyXG4gICAgICAgICAgICAgICAgZ2x5cGhBcmlhTGFiZWw9XCJOZWdhdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICB0aXRsZT1cIlJlamVjdGVkIGRvY3VtZW50XCJcclxuICAgICAgICAgICAgICA+PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2ZkLXBvcG92ZXItY29udHJvbD5cclxuICAgICAgICAgICAgPGZkLXBvcG92ZXItYm9keT5cclxuICAgICAgICAgICAgICA8ZmQtbWVzc2FnZS1zdHJpcCB0eXBlPVwiZXJyb3JcIiBbZGlzbWlzc2libGVdPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgIHt7IHJlamVjdGVkUmVhc29uIH19XHJcbiAgICAgICAgICAgICAgPC9mZC1tZXNzYWdlLXN0cmlwPlxyXG4gICAgICAgICAgICA8L2ZkLXBvcG92ZXItYm9keT5cclxuICAgICAgICAgIDwvZmQtcG9wb3Zlcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgZmQtbGlzdC1ieWxpbmUgW3R3b0NvbF09XCJ0cnVlXCIgW2NsYXNzLnNtYWxsU2l6ZV09XCJkZXZpY2VTaXplID09PSAncydcIj5cclxuICAgICAgPGRpdiBmZC1saXN0LWJ5bGluZS1sZWZ0PlxyXG4gICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyByb3ctZ2FwOiA1cHg7IGZsZXgtd3JhcDogd3JhcFwiPlxyXG4gICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgIHt7IGRvY3VtZW50SXRlbS5EZXNjcmlwdGlvbiB9fVxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGZsZXgtd3JhcDogd3JhcDsgY29sdW1uLWdhcDogM3B4OyBhbGlnbi1pdGVtczogY2VudGVyXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoYXNGaWxlc1wiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gZmQtYnV0dG9uIFtmZFR5cGVdPVwiJ3RyYW5zcGFyZW50J1wiIGdseXBoPVwic2hvd1wiIChjbGljayk9XCJvbkZ1bGxzY3JlZW4oKVwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZpbGUgb2YgZmlsZXNcIj5cclxuICAgICAgICAgICAgICAgIDxmZC10b2tlblxyXG4gICAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwicmVhZG9ubHlcIlxyXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIiFmaWxlLklzRGVsZXRlZFwiXHJcbiAgICAgICAgICAgICAgICAgIChvbkNsb3NlQ2xpY2spPVwib25SZW1vdmVGaWxlKGZpbGUpXCJcclxuICAgICAgICAgICAgICAgICAgPnt7IGZpbGUuRmlsZU5hbWUgfX08L2ZkLXRva2VuXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJkb2N1bWVudEl0ZW0uTWF4RmlsZUNvdW50ICYmICFyZWFkb25seVwiXHJcbiAgICAgICAgICAgICAgICBnbHlwaD1cImF0dGFjaG1lbnRcIlxyXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cIidBdHRhY2hGaWxlJyB8IGJiYlRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiIXJlYWRvbmx5ICYmIHVwbG9hZGVyLm9wZW4oKVwiXHJcbiAgICAgICAgICAgICAgPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxmZC1maWxlLXVwbG9hZGVyXHJcbiAgICAgICAgICAgICAgICAjdXBsb2FkZXJcclxuICAgICAgICAgICAgICAgIFtzdHlsZS5kaXNwbGF5XT1cIidub25lJ1wiXHJcbiAgICAgICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cclxuICAgICAgICAgICAgICAgIFtpZF09XCJkb2N1bWVudEl0ZW0uSXRlbUtleVwiXHJcbiAgICAgICAgICAgICAgICBbbmFtZV09XCIncGljdHVyZXNfJyArIGRvY3VtZW50SXRlbS5JdGVtS2V5XCJcclxuICAgICAgICAgICAgICAgIFthY2NlcHRdPVwiZG9jdW1lbnRJdGVtLiRWYWxpZEV4dGVuc2lvbnNcIlxyXG4gICAgICAgICAgICAgICAgW2ZpbGVMaW1pdF09XCJkb2N1bWVudEl0ZW0uTWF4RmlsZUNvdW50XCJcclxuICAgICAgICAgICAgICAgIFttdWx0aXBsZV09XCJkb2N1bWVudEl0ZW0uTWF4RmlsZUNvdW50ID4gMFwiXHJcbiAgICAgICAgICAgICAgICAoc2VsZWN0ZWRGaWxlc0NoYW5nZWQpPVwib25GaWxlU2VsZWN0aW9uKCRldmVudClcIlxyXG4gICAgICAgICAgICAgID48L2ZkLWZpbGUtdXBsb2FkZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBmZC1saXN0LWJ5bGluZS1yaWdodCAqbmdJZj1cImRvY3VtZW50SXRlbS5DYW5BY2NlcHRcIj5cclxuICAgICAgICAgIDxiZGMtYWNjZXB0LXJlamVjdFxyXG4gICAgICAgICAgICBbcmVqZWN0ZWRSZWFzb25dPVwicmVqZWN0ZWRSZWFzb25cIlxyXG4gICAgICAgICAgICBbcG9zaXRpdmVUZXh0XT1cImFjY2VwdGVkVGV4dFwiXHJcbiAgICAgICAgICAgIFtuZWdhdGl2ZVRleHRdPVwicmVqZWN0ZWRUZXh0XCJcclxuICAgICAgICAgICAgW2RldmljZVNpemVdPVwiZGV2aWNlU2l6ZVwiXHJcbiAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXHJcbiAgICAgICAgICA+PC9iZGMtYWNjZXB0LXJlamVjdD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2xpPiAtLT5cclxuXHJcbjx0ciBmZC10YWJsZS1yb3c+XHJcbiAgICA8dGQgZmQtdGFibGUtY2VsbD5cclxuICAgICAgICBAaWYgKGRvY3VtZW50SXRlbS5BdmF0YXIgJiYgIWZpbGVzLmxlbmd0aCkge1xyXG4gICAgICAgIDxmZC1hdmF0YXJcclxuICAgICAgICAgICAgc2l6ZT1cInNcIlxyXG4gICAgICAgICAgICBbaW1hZ2VdPVwiZG9jdW1lbnRJdGVtLkF2YXRhci5GaWxlSWQgfCBwaWNGaWVsZFNyYzogJ0lEJzpudWxsOicnOjY0OjY0XCJcclxuICAgICAgICAgICAgW2NsaWNrYWJsZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgW3RyYW5zcGFyZW50XT1cInRydWVcIlxyXG4gICAgICAgID48L2ZkLWF2YXRhcj5cclxuICAgICAgICB9IEBlbHNlIHsgQGlmIChmaWxlcy5sZW5ndGgpIHtcclxuICAgICAgICA8ZmQtYXZhdGFyIFt0cmFuc3BhcmVudF09XCJ0cnVlXCIgc2l6ZT1cInNcIiBbaW1hZ2VdPVwiZmlyc3RJbWFnZVVybFwiIFtjbGlja2FibGVdPVwidHJ1ZVwiPjwvZmQtYXZhdGFyPlxyXG4gICAgICAgIH0gQGlmICghZmlsZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgPGZkLWF2YXRhciBbdHJhbnNwYXJlbnRdPVwidHJ1ZVwiIHNpemU9XCJzXCIgW2dseXBoXT1cImRvY3VtZW50SXRlbS5Gb250SWNvblwiIFtjbGlja2FibGVdPVwidHJ1ZVwiPjwvZmQtYXZhdGFyPlxyXG4gICAgICAgIH0gfVxyXG4gICAgPC90ZD5cclxuICAgIDx0ZCBmZC10YWJsZS1jZWxsIHN0eWxlPVwibWluLXdpZHRoOiAxNDBweFwiPlxyXG4gICAgICAgIDxwIGZkLXRhYmxlLXRleHQ+XHJcbiAgICAgICAgICAgIDxzdHJvbmdcclxuICAgICAgICAgICAgICAgID57eyBkb2N1bWVudEl0ZW0uVGl0bGUgfX1cclxuICAgICAgICAgICAgICAgIEBpZiAoZG9jdW1lbnRJdGVtLklzUmVxdWlyZWQpIHtcclxuICAgICAgICAgICAgICAgIDxzcGFuIGZkLW9iamVjdC1zdGF0dXMgc3RhdHVzPVwibmVnYXRpdmVcIj4qKHt7ICfYp9is2KjYp9ix24wnIHwgYmJiVHJhbnNsYXRlIH19KSA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvc3Ryb25nPlxyXG4gICAgICAgIDwvcD5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgIHt7IGRvY3VtZW50SXRlbS5EZXNjcmlwdGlvbiB9fVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L3RkPlxyXG5cclxuICAgIDx0ZCBmZC10YWJsZS1jZWxsPlxyXG4gICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwhLS0gPHVsIGZkLWxpc3Q+XHJcbiAgICAgICAgPGxpIGZkLWxpc3QtaXRlbSAqbmdGb3I9XCJsZXQgZmlsZSBvZiBmaWxlczsgbGV0IGluZCA9IGluZGV4XCI+XHJcbiAgICAgICAgICA8c3BhbiBmZC1saXN0LXRpdGxlPlxyXG4gICAgICAgICAgICB7eyBmaWxlLkZpbGVOYW1lIH19XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBmZC1saXN0LXNlY29uZGFyeT5cclxuICAgICAgICAgICAgPGJ1dHRvbiBhcmlhTGFiZWw9XCJSZW1vdmVcIiB0aXRsZT1cIlJlbW92ZVwiIGZkLWJ1dHRvbiBnbHlwaD1cImRlbGV0ZVwiID48L2J1dHRvbj5cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICA8L3VsPiAtLT5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0OyBjb2x1bW4tZ2FwOiAzcHg7IHJvdy1nYXA6IDNweDsgZmxleC1kaXJlY3Rpb246IGNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgQGZvciAoZmlsZSBvZiBmaWxlczsgdHJhY2sgZmlsZSkge1xyXG4gICAgICAgICAgICAgICAgPCEtLSA8c3Bhbj48ZmQtaWNvbiBnbHlwaD1cImF0dGFjaG1lbnRcIj48L2ZkLWljb24+PGEgZmQtbGluaz57e2ZpbGUuRmlsZU5hbWV9fTwvYT48L3NwYW4+IC0tPlxyXG4gICAgICAgICAgICAgICAgQGlmICghZmlsZS5Jc0RlbGV0ZWQpIHtcclxuICAgICAgICAgICAgICAgIDxic3UtZmlsZS12aWV3ZXItcG9wb3ZlclxyXG4gICAgICAgICAgICAgICAgICAgIFtmaWxlXT1cImZpbGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkZXZpY2VTaXplXT1cImRldmljZVNpemVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjYW5Eb3dubG9hZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAocmVtb3ZlKT1cInJlbW92ZUZpbGUuZW1pdChmaWxlKVwiXHJcbiAgICAgICAgICAgICAgICA+PC9ic3UtZmlsZS12aWV3ZXItcG9wb3Zlcj5cclxuICAgICAgICAgICAgICAgIH0gfVxyXG4gICAgICAgICAgICAgICAgPCEtLSA8YnV0dG9uXHJcbiAgICAgICAgZmQtYnV0dG9uXHJcbiAgICAgICAgKm5nSWY9XCIrZG9jdW1lbnRJdGVtLk1heEZpbGVDb3VudCAmJiAhcmVhZG9ubHlcIlxyXG4gICAgICAgIGdseXBoPVwiYWRkXCJcclxuICAgICAgICAoY2xpY2spPVwiIXJlYWRvbmx5ICYmIHVwbG9hZGVyLm9wZW4oKVwiXHJcbiAgICAgID48L2J1dHRvbj4gLS0+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tIDxwICpuZ0Zvcj1cImxldCBmaWxlIG9mIGZpbGVzXCIgZmQtdGFibGUtdGV4dD5cclxuICAgIDxmZC1hY3Rpb24tc2hlZXQgID5cclxuICAgICAgPGZkLWFjdGlvbi1zaGVldC1jb250cm9sPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgIGZkLWJ1dHRvblxyXG4gICAgICAgICAgZ2x5cGg9XCJzZXR0aW5nc1wiXHJcbiAgICAgICAgICB0aXRsZT1cIk9wZW4gQWN0aW9uIFNoZWV0IE1vYmlsZVwiXHJcbiAgICAgICAgICBpZD1cImZkLWFjdGlvbi1zaGVldC1tb2JpbGUtY29udHJvbFwiXHJcbiAgICAgICAgICBhcmlhLWhhc3BvcHVwPVwibWVudVwiXHJcbiAgICAgICAgICBbbGFiZWxdPVwiZmlsZS5GaWxlTmFtZSB8fCcnXCJcclxuICAgICAgICAgIGFyaWEtY29udHJvbHM9XCJmZC1hY3Rpb24tc2hlZXQtbW9iaWxlLWJvZHlcIlxyXG4gICAgICAgID48L2J1dHRvbj5cclxuICAgICAgPC9mZC1hY3Rpb24tc2hlZXQtY29udHJvbD5cclxuXHJcbiAgICAgIDxmZC1hY3Rpb24tc2hlZXQtYm9keVxyXG4gICAgICAgIGFjdGlvblNoZWV0Qm9keUlkPVwiZmQtYWN0aW9uLXNoZWV0LW1vYmlsZS1ib2R5XCJcclxuICAgICAgICBhcmlhTGFiZWxsZWRCeT1cImZkLWFjdGlvbi1zaGVldC1tb2JpbGUtY29udHJvbFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgIDxsaSBmZC1hY3Rpb24tc2hlZXQtaXRlbSBsYWJlbD1cIlNlYXJjaFwiIGdseXBoPVwic2VhcmNoXCI+PC9saT5cclxuICAgICAgICA8bGkgZmQtYWN0aW9uLXNoZWV0LWl0ZW0gbGFiZWw9XCJEb3dubG9hZFwiIGdseXBoPVwiZG93bmxvYWRcIiA+PC9saT5cclxuICAgICAgICA8bGkgZmQtYWN0aW9uLXNoZWV0LWl0ZW0gbGFiZWw9XCJBY2NlcHRcIiBnbHlwaD1cImFjY2VwdFwiID48L2xpPlxyXG4gICAgICAgIDxsaSBmZC1hY3Rpb24tc2hlZXQtaXRlbSBsYWJlbD1cIlJlamVjdFwiIGdseXBoPVwiY2FuY2VsXCIgPjwvbGk+XHJcbiAgICAgICAgPGxpIGZkLWFjdGlvbi1zaGVldC1pdGVtIGxhYmVsPVwiRGVjaWRlIExhdGVyXCIgW2lzQ2xvc2VCdXR0b25dPVwidHJ1ZVwiPjwvbGk+XHJcbiAgICAgICAgPGxpIGZkLWFjdGlvbi1zaGVldC1pdGVtIGxhYmVsPVwiQ2FuY2VsXCIgW25lZ2F0aXZlXT1cInRydWVcIiBbaXNDbG9zZUJ1dHRvbl09XCJ0cnVlXCI+PC9saT5cclxuICAgICAgPC9mZC1hY3Rpb24tc2hlZXQtYm9keT5cclxuICAgIDwvZmQtYWN0aW9uLXNoZWV0PlxyXG4gIDwvcD4gLS0+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L3RkPlxyXG4gICAgPHRkIGZkLXRhYmxlLWNlbGw+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0YXR1c1wiIHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgIEBpZiAoK2RvY3VtZW50SXRlbS5NYXhGaWxlQ291bnQgJiYgIXJlYWRvbmx5KSB7XHJcbiAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgZ2x5cGg9XCJhdHRhY2htZW50XCJcclxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCInQXR0YWNoRmlsZScgfCBiYmJUcmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInVwbG9hZGluZ1N0YXRlPy5rZXkgPT09IGRvY3VtZW50SXRlbS5UaXRsZSAmJiB1cGxvYWRpbmdTdGF0ZT8udXBsb2FkaW5nXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCIhcmVhZG9ubHkgJiYgdXBsb2FkZXIub3BlbigpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgQGlmICh1cGxvYWRpbmdTdGF0ZT8ua2V5ID09PSBkb2N1bWVudEl0ZW0uVGl0bGUgJiYgdXBsb2FkaW5nU3RhdGU/LnVwbG9hZGluZykge1xyXG4gICAgICAgICAgICAgICAgPGJzdS1tYXNrIFttYXJnaW5Ub3BdPVwiJzNweCdcIj48L2JzdS1tYXNrPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBmZC1idXR0b25cclxuICAgICAgICAgICAgICAgIGdseXBoPVwic2hvd1wiXHJcbiAgICAgICAgICAgICAgICBmdWxsc2NyZWVuRmlsZXNcclxuICAgICAgICAgICAgICAgIFtmaWxlc109XCJmaWxlc1wiXHJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwiZG9jdW1lbnRJdGVtLlRpdGxlXCJcclxuICAgICAgICAgICAgICAgIFtmZC1pbmxpbmUtaGVscF09XCIn2YXYtNin2YfYr9mHINmH2YXZhycgfCBiYmJUcmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgW2FyaWEtZGVzY3JpYmVkYnldPVwiJ9mF2LTYp9mH2K/ZhyDZh9mF2YcnIHwgYmJiVHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgIFthcmlhTGFiZWxdPVwiJ9mF2LTYp9mH2K/ZhyDZh9mF2YcnIHwgYmJiVHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgIGZ1bGxzY3JlZW5GaWxlc1xyXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFmaWxlcy5sZW5ndGhcIlxyXG4gICAgICAgICAgICAgICAgW2ZpbGVzXT1cImZpbGVzXCJcclxuICAgICAgICAgICAgPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBmZC1idXR0b25cclxuICAgICAgICAgICAgICAgIGdseXBoPVwiZG93bmxvYWRcIlxyXG4gICAgICAgICAgICAgICAgW2ZkLWlubGluZS1oZWxwXT1cIifYr9in2YbZhNmI2K8g2YfZhdmHJyB8IGJiYlRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICBbYXJpYS1kZXNjcmliZWRieV09XCIn2K/Yp9mG2YTZiNivINmH2YXZhycgfCBiYmJUcmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgW2FyaWFMYWJlbF09XCIn2K/Yp9mG2YTZiNivINmH2YXZhycgfCBiYmJUcmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgZG93bmxvYWRGaWxlc1xyXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFmaWxlcy5sZW5ndGhcIlxyXG4gICAgICAgICAgICAgICAgW2ZpbGVzXT1cImZpbGVzXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJkb3dubG9hZEFsbC5lbWl0KClcIlxyXG4gICAgICAgICAgICA+PC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L3RkPlxyXG4gICAgPHRkIGZkLXRhYmxlLWNlbGw+XHJcbiAgICAgICAgPGZkLWFjdGlvbi1zaGVldCAjYWN0aW9uU2hlZXQ+XHJcbiAgICAgICAgICAgIDxmZC1hY3Rpb24tc2hlZXQtY29udHJvbD5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdGF0dXNUcGxcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9mZC1hY3Rpb24tc2hlZXQtY29udHJvbD5cclxuICAgICAgICAgICAgPGZkLWFjdGlvbi1zaGVldC1ib2R5PlxyXG4gICAgICAgICAgICAgICAgPGxpXHJcbiAgICAgICAgICAgICAgICAgICAgZmQtYWN0aW9uLXNoZWV0LWl0ZW1cclxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ0FjY2VwdCcgfCBiYmJUcmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIGdseXBoPVwiYWNjZXB0XCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aW9uU2hlZXQuY2xvc2UoKTsgb25SZWplY3QoMilcIlxyXG4gICAgICAgICAgICAgICAgPjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGlcclxuICAgICAgICAgICAgICAgICAgICBmZC1hY3Rpb24tc2hlZXQtaXRlbVxyXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInUmVqZWN0JyB8IGJiYlRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgZ2x5cGg9XCJjYW5jZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhY3Rpb25TaGVldC5jbG9zZSgpOyBvblJlamVjdCgzKVwiXHJcbiAgICAgICAgICAgICAgICA+PC9saT5cclxuICAgICAgICAgICAgPC9mZC1hY3Rpb24tc2hlZXQtYm9keT5cclxuICAgICAgICA8L2ZkLWFjdGlvbi1zaGVldD5cclxuXHJcbiAgICAgICAgQGlmIChzdGF0dXMgPT09IDMpIHtcclxuICAgICAgICA8cCBmZC10YWJsZS10ZXh0IG1heFdpZHRoPVwiNDAwcHhcIj5cclxuICAgICAgICAgICAgQGlmIChyZWFkb25seSAmJiByZWplY3RlZFJlYXNvbikge1xyXG4gICAgICAgICAgICA8c3Bhbj4ge3sgcmVqZWN0ZWRSZWFzb24gfCBiYmJUcmFuc2xhdGUgfX0gPC9zcGFuPlxyXG4gICAgICAgICAgICB9IEBpZiAoIXJlYWRvbmx5KSB7XHJcbiAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgZmQtZm9ybS1jb250cm9sXHJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwicmVqZWN0ZWRSZWFzb24gfCBiYmJUcmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIifYr9mE2KfbjNmEINix2K8g2YXYr9ix2qknIHwgYmJiVHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIDwvcD5cclxuICAgICAgICB9XHJcbiAgICA8L3RkPlxyXG48L3RyPlxyXG5cclxuPGZkLWZpbGUtdXBsb2FkZXJcclxuICAgICN1cGxvYWRlclxyXG4gICAgW3N0eWxlLmRpc3BsYXldPVwiJ25vbmUnXCJcclxuICAgIGZkLXRvb2xiYXItaXRlbVxyXG4gICAgW2lkXT1cImRvY3VtZW50SXRlbS5JdGVtS2V5XCJcclxuICAgIFtuYW1lXT1cIidwaWN0dXJlc18nICsgZG9jdW1lbnRJdGVtLkl0ZW1LZXlcIlxyXG4gICAgW2FjY2VwdF09XCJkb2N1bWVudEl0ZW0uJFZhbGlkRXh0ZW5zaW9uc1wiXHJcbiAgICBbZmlsZUxpbWl0XT1cImRvY3VtZW50SXRlbS5NYXhGaWxlQ291bnRcIlxyXG4gICAgW211bHRpcGxlXT1cImRvY3VtZW50SXRlbS5NYXhGaWxlQ291bnQgPiAwXCJcclxuICAgIChzZWxlY3RlZEZpbGVzQ2hhbmdlZCk9XCJvbkZpbGVTZWxlY3Rpb24oJGV2ZW50KVwiXHJcbj48L2ZkLWZpbGUtdXBsb2FkZXI+XHJcbjxuZy10ZW1wbGF0ZSAjc3RhdHVzVHBsPlxyXG4gICAgPGRpdiBjbGFzcz1cInN0YXR1c1wiPlxyXG4gICAgICAgIDxidXR0b24gZmQtYnV0dG9uIGZkVHlwZT1cInRyYW5zcGFyZW50XCI+XHJcbiAgICAgICAgICAgIEBpZiAoc3RhdHVzID09PSAxKSB7XHJcbiAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICBmZC1vYmplY3Qtc3RhdHVzXHJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ1vZvtuM2YjYs9iqINmF2K/Yp9ix2qldJyB8IGJiYlRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICBbYXJpYS1sYWJlbF09XCInW9m+24zZiNiz2Kog2YXYr9in2LHaqV0nIHwgYmJiVHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgPjwvc3Bhbj5cclxuICAgICAgICAgICAgfSBAaWYgKHN0YXR1cyA9PT0gMikge1xyXG4gICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgZmQtb2JqZWN0LXN0YXR1c1xyXG4gICAgICAgICAgICAgICAgZ2x5cGg9XCJtZXNzYWdlLXN1Y2Nlc3NcIlxyXG4gICAgICAgICAgICAgICAgc3RhdHVzPVwicG9zaXRpdmVcIlxyXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cIidBY2NlcHRlZCcgfCBiYmJUcmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cIidBY2NlcHRlZCcgfCBiYmJUcmFuc2xhdGVcIlxyXG4gICAgICAgICAgICA+PC9zcGFuPlxyXG4gICAgICAgICAgICB9IEBpZiAoc3RhdHVzID09PSAzKSB7XHJcbiAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICBmZC1vYmplY3Qtc3RhdHVzXHJcbiAgICAgICAgICAgICAgICBnbHlwaD1cImNhbmNlbFwiXHJcbiAgICAgICAgICAgICAgICBzdGF0dXM9XCJuZWdhdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ1JlamVjdGVkJyB8IGJiYlRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICBbYXJpYS1sYWJlbF09XCInUmVqZWN0ZWQnIHwgYmJiVHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgPjwvc3Bhbj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
@@ -0,0 +1,173 @@
1
+ import { ChangeDetectionStrategy, Component, Optional } 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 "barsa-novin-ray-core";
5
+ import * as i2 from "@fundamental-ngx/core";
6
+ import * as i3 from "@fundamental-ngx/core/table";
7
+ import * as i4 from "../barsa-document-list-item/barsa-document-list-item.component";
8
+ import * as i5 from "@angular/common";
9
+ export class BarsaDocumentsComponent extends ReportViewBaseComponent {
10
+ constructor(_el, _cdr, _renderer2, _findColumnByDbName, _ulvMainService, _portalService, _dialogService, _uploadService) {
11
+ super(_el, _cdr, _renderer2, _findColumnByDbName, _ulvMainService, _portalService, _uploadService);
12
+ this._el = _el;
13
+ this._cdr = _cdr;
14
+ this._renderer2 = _renderer2;
15
+ this._findColumnByDbName = _findColumnByDbName;
16
+ this._ulvMainService = _ulvMainService;
17
+ this._portalService = _portalService;
18
+ this._dialogService = _dialogService;
19
+ this._uploadService = _uploadService;
20
+ }
21
+ get documentItems() {
22
+ if (this.customFieldInfo) {
23
+ return this.customFieldInfo.DocumentItems.MoDataList;
24
+ }
25
+ else {
26
+ return this.viewSetting.FilesSetting.DocumentItems.MoDataList;
27
+ }
28
+ }
29
+ ngOnInit() {
30
+ super.ngOnInit();
31
+ const { moDataList, viewSetting, allColumns } = this;
32
+ this._initColumnField(allColumns, viewSetting);
33
+ this._subscribeOnUploadFile(this.fileColumn);
34
+ this._mapDocumentItem(moDataList, this.documentItems);
35
+ this._checkMandatory();
36
+ }
37
+ ngOnChanges(changes) {
38
+ super.ngOnChanges(changes);
39
+ const { moDataList } = changes;
40
+ if (moDataList && !moDataList.firstChange) {
41
+ if (moDataList && !moDataList.firstChange) {
42
+ this._mapDocumentItem(moDataList.currentValue, this.documentItems);
43
+ this.detectChanges();
44
+ }
45
+ }
46
+ }
47
+ ngAfterViewInit() {
48
+ super.ngAfterViewInit();
49
+ setTimeout(() => {
50
+ for (let i = 0; i < this.documentItems.length - this.moDataList.length; i++) {
51
+ this.createNewMo.emit();
52
+ }
53
+ });
54
+ }
55
+ onFileSelection(files, documentItem, mo) {
56
+ this.selectedMo = mo;
57
+ this._uploadFile(files, documentItem);
58
+ }
59
+ onRemoveFile(file, mo) {
60
+ const fileDbName = this.fileColumn.Name;
61
+ let files = mo[fileDbName].Files;
62
+ if (file.IsNew) {
63
+ files = files.filter((c) => c.Id !== file.Id);
64
+ }
65
+ else {
66
+ const existFile = files.find((c) => c.Id === file.Id);
67
+ existFile.IsDeleted = true;
68
+ }
69
+ mo[fileDbName].Files = [...files];
70
+ this._updateMo(mo);
71
+ }
72
+ onStatusChanged(e, mo) {
73
+ mo[this.statusColumn.Name] = e.value;
74
+ mo[this.rejectedReasonColumn.Name] = e.rejectedText;
75
+ this._updateMo(mo);
76
+ }
77
+ onRejectedTextChange(text, mo) {
78
+ mo[this.rejectedReasonColumn.Name] = text;
79
+ this._updateMo(mo);
80
+ }
81
+ _checkMandatory() {
82
+ const moDataList = this.moDataList;
83
+ const items = this.documentItems.filter((c) => c.IsRequired);
84
+ let mandatory = items.length > 0;
85
+ const mandatory2 = items
86
+ .map((item) => moDataList.find((c) => c[this.keyColumn.Name] === item.ItemKey))
87
+ .filter((item) => item)
88
+ .some((mo) => mo[this.fileColumn.Name].Files.filter((c) => !c.IsDeleted).length === 0);
89
+ mandatory = mandatory && mandatory2;
90
+ this.mandatory.emit(mandatory);
91
+ }
92
+ _mapDocumentItem(moDataList, documentItems) {
93
+ const keyName = this.keyColumn.Name;
94
+ moDataList.forEach((mo, index) => {
95
+ let documentItem = documentItems.find((c) => c.ItemKey === mo[keyName]); // find setting that matches with mo by itemKey
96
+ if (documentItem) {
97
+ mo.$documentItem = documentItem;
98
+ }
99
+ else {
100
+ documentItem = documentItems.find((item) => moDataList.map((c) => c[keyName]).indexOf(item.ItemKey) < 0); // find a setting has not have $RelatedMo yet
101
+ if (documentItem) {
102
+ mo[keyName] = documentItem.ItemKey;
103
+ mo.$documentItem = documentItem;
104
+ this.updateMo.emit(mo);
105
+ }
106
+ }
107
+ });
108
+ }
109
+ _initColumnField(allColumns, viewSetting) {
110
+ const keyColumn = this._findColumnByDbName.transform(allColumns, viewSetting.ItemKeyField);
111
+ const fileColumn = this._findColumnByDbName.transform(allColumns, viewSetting.FileField);
112
+ const acceptedColumn = this._findColumnByDbName.transform(allColumns, viewSetting.AcceptedField);
113
+ const rejectedReasonColumn = this._findColumnByDbName.transform(allColumns, viewSetting.RejectedReasonField);
114
+ const statusColumn = this._findColumnByDbName.transform(allColumns, viewSetting.StatusField);
115
+ !keyColumn && this._columnNotExistsInReport(viewSetting.ItemKeyField);
116
+ !fileColumn && this._columnNotExistsInReport(viewSetting.FileField);
117
+ !rejectedReasonColumn && this._columnNotExistsInReport(viewSetting.RejectedReasonField);
118
+ !acceptedColumn && this._columnNotExistsInReport(viewSetting.AcceptedField);
119
+ !statusColumn && this._columnNotExistsInReport(viewSetting.StatusField);
120
+ keyColumn && (this.keyColumn = keyColumn);
121
+ fileColumn && (this.fileColumn = fileColumn);
122
+ acceptedColumn && (this.acceptedColumn = acceptedColumn);
123
+ rejectedReasonColumn && (this.rejectedReasonColumn = rejectedReasonColumn);
124
+ statusColumn && (this.statusColumn = statusColumn);
125
+ }
126
+ _subscribeOnUploadFile(fileColumn) {
127
+ this._filesValidationHelper = new FilesValidationHelper(0, 0, 0);
128
+ if (this._uploadService) {
129
+ this._createLinearHelper(this._uploadService, this._filesValidationHelper, fileColumn.FieldDefId);
130
+ this.uploadingState$ = this._uploadService.uploadingState$;
131
+ }
132
+ else {
133
+ throw new Error('UploadService not provided.');
134
+ }
135
+ this._linearHelper.newFileUploaded$.subscribe((file) => {
136
+ const mo = this.moDataList.find((c) => c.Id === this.selectedMo.Id);
137
+ if (mo) {
138
+ mo[fileColumn.Name].Files = [...mo[fileColumn.Name].Files, file];
139
+ this._updateMo(mo);
140
+ }
141
+ });
142
+ }
143
+ _updateMo(mo) {
144
+ mo.$NewInlineMo = undefined;
145
+ if (mo.$State === 'Unchanged') {
146
+ mo.$State = 'Modified';
147
+ }
148
+ this.updateMo.emit(mo);
149
+ this._checkMandatory();
150
+ }
151
+ _createLinearHelper(uploadService, filesValidationHelper, fieldDefId) {
152
+ this._linearHelper = new LinearListHelper(uploadService, filesValidationHelper, fieldDefId);
153
+ }
154
+ _uploadFile(files, documentItem) {
155
+ const filesValidationHelper = this._filesValidationHelper;
156
+ filesValidationHelper.maxFileCount = +documentItem.MaxFileCount;
157
+ filesValidationHelper.maxFileSize = +documentItem.EachFileSize;
158
+ filesValidationHelper.maxTotalFileSize = +documentItem.MaxFileSize;
159
+ this._linearHelper.uploadToServer(files, documentItem.Title);
160
+ }
161
+ _columnNotExistsInReport(columnCaption) {
162
+ throw new Error(`can not find ${columnCaption} column in report.please add it to report columns.`);
163
+ }
164
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: BarsaDocumentsComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i1.FindColumnByDbNamePipe }, { token: i1.UlvMainService }, { token: i1.PortalService }, { token: i2.DialogService }, { token: i1.UploadService, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
165
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", 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: i3.TableComponent, selector: "table[fd-table]", inputs: ["noBorderX", "noBorderY", "noOuterBorder", "topBorder", "popIn", "responsive", "keys", "allCellsFocusable"], exportAs: ["fd-table"] }, { kind: "directive", type: i3.TableHeaderDirective, selector: "[fdTableHeader], [fd-table-header]", inputs: ["noBorderX", "noBorderY"] }, { kind: "directive", type: i3.TableBodyDirective, selector: "[fdTableBody], [fd-table-body]", inputs: ["noBorderX", "noBorderY"] }, { kind: "directive", type: i3.TableRowDirective, selector: "[fdTableRow], [fd-table-row]", inputs: ["activable", "highlightActive", "hoverable", "focusable", "main", "secondary", "active"] }, { kind: "directive", type: i3.TableCellDirective, selector: "[fdTableCell], [fd-table-cell]", inputs: ["noBorderX", "noBorderY", "activable", "focusable", "hoverable", "fitContent", "noPadding", "noData", "key"] }, { kind: "component", type: i4.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: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
166
+ }
167
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: BarsaDocumentsComponent, decorators: [{
168
+ type: Component,
169
+ args: [{ selector: 'bdc-barsa-documents', changeDetection: ChangeDetectionStrategy.OnPush, providers: [UploadService], 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"] }]
170
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i1.FindColumnByDbNamePipe }, { type: i1.UlvMainService }, { type: i1.PortalService }, { type: i2.DialogService }, { type: i1.UploadService, decorators: [{
171
+ type: Optional
172
+ }] }] });
173
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFyc2EtZG9jdW1lbnRzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLWRldmVsb3AtY29tcG9uZW50cy9zcmMvbGliL2JhcnNhLWRvY3VtZW50cy9iYXJzYS1kb2N1bWVudHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2EtZGV2ZWxvcC1jb21wb25lbnRzL3NyYy9saWIvYmFyc2EtZG9jdW1lbnRzL2JhcnNhLWRvY3VtZW50cy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBRXZCLFNBQVMsRUFJVCxRQUFRLEVBR1gsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUNILHFCQUFxQixFQUNyQixnQkFBZ0IsRUFFaEIsdUJBQXVCLEVBRXZCLGFBQWEsRUFNaEIsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7OztBQVc5QixNQUFNLE9BQU8sdUJBQXdCLFNBQVEsdUJBQXlDO0lBWWxGLFlBQ2MsR0FBZSxFQUNmLElBQXVCLEVBQ3ZCLFVBQXFCLEVBQ3JCLG1CQUEyQyxFQUMzQyxlQUErQixFQUMvQixjQUE2QixFQUM3QixjQUE2QixFQUNqQixjQUE4QjtRQUVwRCxLQUFLLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsbUJBQW1CLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxjQUFjLENBQUMsQ0FBQztRQVR6RixRQUFHLEdBQUgsR0FBRyxDQUFZO1FBQ2YsU0FBSSxHQUFKLElBQUksQ0FBbUI7UUFDdkIsZUFBVSxHQUFWLFVBQVUsQ0FBVztRQUNyQix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXdCO1FBQzNDLG9CQUFlLEdBQWYsZUFBZSxDQUFnQjtRQUMvQixtQkFBYyxHQUFkLGNBQWMsQ0FBZTtRQUM3QixtQkFBYyxHQUFkLGNBQWMsQ0FBZTtRQUNqQixtQkFBYyxHQUFk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QUFDLEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUNTLHdCQUF3QixDQUFDLGFBQWE7UUFDNUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsYUFBYSxvREFBb0QsQ0FBQyxDQUFDO0lBQ3ZHLENBQUM7OEdBN0tRLHVCQUF1QjtrR0FBdkIsdUJBQXVCLDhDQUZyQixDQUFDLGFBQWEsQ0FBQyxzRUNqQzlCLDgxREFpQ0E7OzJGREVhLHVCQUF1QjtrQkFQbkMsU0FBUzsrQkFDSSxxQkFBcUIsbUJBR2QsdUJBQXVCLENBQUMsTUFBTSxhQUNwQyxDQUFDLGFBQWEsQ0FBQzs7MEJBc0JyQixRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBFbGVtZW50UmVmLFxyXG4gICAgT25DaGFuZ2VzLFxyXG4gICAgT25Jbml0LFxyXG4gICAgT3B0aW9uYWwsXHJcbiAgICBSZW5kZXJlcjIsXHJcbiAgICBTaW1wbGVDaGFuZ2VzXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gICAgRmlsZXNWYWxpZGF0aW9uSGVscGVyLFxyXG4gICAgTGluZWFyTGlzdEhlbHBlcixcclxuICAgIE1ldGFvYmplY3REYXRhTW9kZWwsXHJcbiAgICBSZXBvcnRWaWV3QmFzZUNvbXBvbmVudCxcclxuICAgIFJlcG9ydFZpZXdDb2x1bW4sXHJcbiAgICBVcGxvYWRTZXJ2aWNlLFxyXG4gICAgRmlsZUF0dGFjaG1lbnRJbmZvLFxyXG4gICAgRmluZENvbHVtbkJ5RGJOYW1lUGlwZSxcclxuICAgIFBvcnRhbFNlcnZpY2UsXHJcbiAgICBVbHZNYWluU2VydmljZSxcclxuICAgIElVcGxvYWRpbmdTdGF0ZVxyXG59IGZyb20gJ2JhcnNhLW5vdmluLXJheS1jb3JlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBEb2N1bWVudEl0ZW0sIERvY3VtZW50c1NldHRpbmcgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2JkYy1iYXJzYS1kb2N1bWVudHMnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2JhcnNhLWRvY3VtZW50cy5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9iYXJzYS1kb2N1bWVudHMuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gICAgcHJvdmlkZXJzOiBbVXBsb2FkU2VydmljZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIEJhcnNhRG9jdW1lbnRzQ29tcG9uZW50IGV4dGVuZHMgUmVwb3J0Vmlld0Jhc2VDb21wb25lbnQ8RG9jdW1lbnRzU2V0dGluZz4gaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcbiAgICBrZXlDb2x1bW46IFJlcG9ydFZpZXdDb2x1bW47XHJcbiAgICBmaWxlQ29sdW1uOiBSZXBvcnRWaWV3Q29sdW1uO1xyXG4gICAgc3RhdHVzQ29sdW1uOiBSZXBvcnRWaWV3Q29sdW1uO1xyXG4gICAgcmVqZWN0ZWRSZWFzb25Db2x1bW46IFJlcG9ydFZpZXdDb2x1bW47XHJcbiAgICBhY2NlcHRlZENvbHVtbjogUmVwb3J0Vmlld0NvbHVtbjtcclxuICAgIHNlbGVjdGVkTW86IE1ldGFvYmplY3REYXRhTW9kZWw7XHJcbiAgICB1cGxvYWRpbmdTdGF0ZSQ6IE9ic2VydmFibGU8SVVwbG9hZGluZ1N0YXRlPjtcclxuXHJcbiAgICBwcm90ZWN0ZWQgX2ZpbGVzVmFsaWRhdGlvbkhlbHBlcjogRmlsZXNWYWxpZGF0aW9uSGVscGVyO1xyXG4gICAgcHJvdGVjdGVkIF9saW5lYXJIZWxwZXI6IExpbmVhckxpc3RIZWxwZXI7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJvdGVjdGVkIF9lbDogRWxlbWVudFJlZixcclxuICAgICAgICBwcm90ZWN0ZWQgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAgICAgcHJvdGVjdGVkIF9yZW5kZXJlcjI6IFJlbmRlcmVyMixcclxuICAgICAgICBwcm90ZWN0ZWQgX2ZpbmRDb2x1bW5CeURiTmFtZTogRmluZENvbHVtbkJ5RGJOYW1lUGlwZSxcclxuICAgICAgICBwcm90ZWN0ZWQgX3Vsdk1haW5TZXJ2aWNlOiBVbHZNYWluU2VydmljZSxcclxuICAgICAgICBwcm90ZWN0ZWQgX3BvcnRhbFNlcnZpY2U6IFBvcnRhbFNlcnZpY2UsXHJcbiAgICAgICAgcHJvdGVjdGVkIF9kaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxyXG4gICAgICAgIEBPcHRpb25hbCgpIHByb3RlY3RlZCBfdXBsb2FkU2VydmljZT86IFVwbG9hZFNlcnZpY2VcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKF9lbCwgX2NkciwgX3JlbmRlcmVyMiwgX2ZpbmRDb2x1bW5CeURiTmFtZSwgX3Vsdk1haW5TZXJ2aWNlLCBfcG9ydGFsU2VydmljZSwgX3VwbG9hZFNlcnZpY2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBkb2N1bWVudEl0ZW1zKCk6IEFycmF5PERvY3VtZW50SXRlbT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmN1c3RvbUZpZWxkSW5mbykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jdXN0b21GaWVsZEluZm8uRG9jdW1lbnRJdGVtcy5Nb0RhdGFMaXN0IGFzIEFycmF5PERvY3VtZW50SXRlbT47XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmlld1NldHRpbmcuRmlsZXNTZXR0aW5nLkRvY3VtZW50SXRlbXMuTW9EYXRhTGlzdCBhcyBBcnJheTxEb2N1bWVudEl0ZW0+O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICAgICAgY29uc3QgeyBtb0RhdGFMaXN0LCB2aWV3U2V0dGluZywgYWxsQ29sdW1ucyB9ID0gdGhpcztcclxuXHJcbiAgICAgICAgdGhpcy5faW5pdENvbHVtbkZpZWxkKGFsbENvbHVtbnMsIHZpZXdTZXR0aW5nKTtcclxuICAgICAgICB0aGlzLl9zdWJzY3JpYmVPblVwbG9hZEZpbGUodGhpcy5maWxlQ29sdW1uKTtcclxuICAgICAgICB0aGlzLl9tYXBEb2N1bWVudEl0ZW0obW9EYXRhTGlzdCwgdGhpcy5kb2N1bWVudEl0ZW1zKTtcclxuICAgICAgICB0aGlzLl9jaGVja01hbmRhdG9yeSgpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgICAgICBzdXBlci5uZ09uQ2hhbmdlcyhjaGFuZ2VzKTtcclxuICAgICAgICBjb25zdCB7IG1vRGF0YUxpc3QgfSA9IGNoYW5nZXM7XHJcbiAgICAgICAgaWYgKG1vRGF0YUxpc3QgJiYgIW1vRGF0YUxpc3QuZmlyc3RDaGFuZ2UpIHtcclxuICAgICAgICAgICAgaWYgKG1vRGF0YUxpc3QgJiYgIW1vRGF0YUxpc3QuZmlyc3RDaGFuZ2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX21hcERvY3VtZW50SXRlbShtb0RhdGFMaXN0LmN1cnJlbnRWYWx1ZSwgdGhpcy5kb2N1bWVudEl0ZW1zKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHN1cGVyLm5nQWZ0ZXJWaWV3SW5pdCgpO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZG9jdW1lbnRJdGVtcy5sZW5ndGggLSB0aGlzLm1vRGF0YUxpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlTmV3TW8uZW1pdCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBvbkZpbGVTZWxlY3Rpb24oZmlsZXM6IEZpbGVbXSwgZG9jdW1lbnRJdGVtOiBEb2N1bWVudEl0ZW0sIG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE1vID0gbW87XHJcbiAgICAgICAgdGhpcy5fdXBsb2FkRmlsZShmaWxlcywgZG9jdW1lbnRJdGVtKTtcclxuICAgIH1cclxuICAgIG9uUmVtb3ZlRmlsZShmaWxlOiBGaWxlQXR0YWNobWVudEluZm8sIG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZmlsZURiTmFtZSA9IHRoaXMuZmlsZUNvbHVtbi5OYW1lO1xyXG4gICAgICAgIGxldCBmaWxlcyA9IG1vW2ZpbGVEYk5hbWVdLkZpbGVzO1xyXG4gICAgICAgIGlmIChmaWxlLklzTmV3KSB7XHJcbiAgICAgICAgICAgIGZpbGVzID0gZmlsZXMuZmlsdGVyKChjKSA9PiBjLklkICE9PSBmaWxlLklkKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBleGlzdEZpbGUgPSBmaWxlcy5maW5kKChjKSA9PiBjLklkID09PSBmaWxlLklkKTtcclxuICAgICAgICAgICAgZXhpc3RGaWxlLklzRGVsZXRlZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG1vW2ZpbGVEYk5hbWVdLkZpbGVzID0gWy4uLmZpbGVzXTtcclxuICAgICAgICB0aGlzLl91cGRhdGVNbyhtbyk7XHJcbiAgICB9XHJcbiAgICBvblN0YXR1c0NoYW5nZWQoZTogeyB2YWx1ZTogbnVtYmVyOyByZWplY3RlZFRleHQ6IHN0cmluZyB9LCBtbzogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xyXG4gICAgICAgIG1vW3RoaXMuc3RhdHVzQ29sdW1uLk5hbWVdID0gZS52YWx1ZTtcclxuICAgICAgICBtb1t0aGlzLnJlamVjdGVkUmVhc29uQ29sdW1uLk5hbWVdID0gZS5yZWplY3RlZFRleHQ7XHJcbiAgICAgICAgdGhpcy5fdXBkYXRlTW8obW8pO1xyXG4gICAgfVxyXG4gICAgb25SZWplY3RlZFRleHRDaGFuZ2UodGV4dDogc3RyaW5nLCBtbzogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xyXG4gICAgICAgIG1vW3RoaXMucmVqZWN0ZWRSZWFzb25Db2x1bW4uTmFtZV0gPSB0ZXh0O1xyXG4gICAgICAgIHRoaXMuX3VwZGF0ZU1vKG1vKTtcclxuICAgIH1cclxuICAgIF9jaGVja01hbmRhdG9yeSgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBtb0RhdGFMaXN0ID0gdGhpcy5tb0RhdGFMaXN0O1xyXG4gICAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5kb2N1bWVudEl0ZW1zLmZpbHRlcigoYykgPT4gYy5Jc1JlcXVpcmVkKTtcclxuICAgICAgICBsZXQgbWFuZGF0b3J5ID0gaXRlbXMubGVuZ3RoID4gMDtcclxuICAgICAgICBjb25zdCBtYW5kYXRvcnkyID0gaXRlbXNcclxuICAgICAgICAgICAgLm1hcCgoaXRlbSkgPT4gbW9EYXRhTGlzdC5maW5kKChjKSA9PiBjW3RoaXMua2V5Q29sdW1uLk5hbWVdID09PSBpdGVtLkl0ZW1LZXkpKVxyXG4gICAgICAgICAgICAuZmlsdGVyKChpdGVtKSA9PiBpdGVtKVxyXG4gICAgICAgICAgICAuc29tZSgobW8pID0+IG1vW3RoaXMuZmlsZUNvbHVtbi5OYW1lXS5GaWxlcy5maWx0ZXIoKGMpID0+ICFjLklzRGVsZXRlZCkubGVuZ3RoID09PSAwKTtcclxuICAgICAgICBtYW5kYXRvcnkgPSBtYW5kYXRvcnkgJiYgbWFuZGF0b3J5MjtcclxuICAgICAgICB0aGlzLm1hbmRhdG9yeS5lbWl0KG1hbmRhdG9yeSk7XHJcbiAgICB9XHJcbiAgICBfbWFwRG9jdW1lbnRJdGVtKG1vRGF0YUxpc3Q6IEFycmF5PE1ldGFvYmplY3REYXRhTW9kZWw+LCBkb2N1bWVudEl0ZW1zOiBBcnJheTxEb2N1bWVudEl0ZW0+KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3Qga2V5TmFtZSA9IHRoaXMua2V5Q29sdW1uLk5hbWU7XHJcbiAgICAgICAgbW9EYXRhTGlzdC5mb3JFYWNoKChtbywgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgbGV0IGRvY3VtZW50SXRlbSA9IGRvY3VtZW50SXRlbXMuZmluZCgoYykgPT4gYy5JdGVtS2V5ID09PSBtb1trZXlOYW1lXSk7IC8vIGZpbmQgc2V0dGluZyB0aGF0IG1hdGNoZXMgd2l0aCBtbyBieSBpdGVtS2V5XHJcbiAgICAgICAgICAgIGlmIChkb2N1bWVudEl0ZW0pIHtcclxuICAgICAgICAgICAgICAgIG1vLiRkb2N1bWVudEl0ZW0gPSBkb2N1bWVudEl0ZW07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudEl0ZW0gPSBkb2N1bWVudEl0ZW1zLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAgICAgKGl0ZW0pID0+IG1vRGF0YUxpc3QubWFwKChjKSA9PiBjW2tleU5hbWVdKS5pbmRleE9mKGl0ZW0uSXRlbUtleSkgPCAwXHJcbiAgICAgICAgICAgICAgICApOyAvLyBmaW5kIGEgc2V0dGluZyBoYXMgbm90IGhhdmUgJFJlbGF0ZWRNbyB5ZXRcclxuICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudEl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICBtb1trZXlOYW1lXSA9IGRvY3VtZW50SXRlbS5JdGVtS2V5O1xyXG4gICAgICAgICAgICAgICAgICAgIG1vLiRkb2N1bWVudEl0ZW0gPSBkb2N1bWVudEl0ZW07XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVNby5lbWl0KG1vKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF9pbml0Q29sdW1uRmllbGQoYWxsQ29sdW1uczogUmVwb3J0Vmlld0NvbHVtbltdLCB2aWV3U2V0dGluZzogRG9jdW1lbnRzU2V0dGluZyk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGtleUNvbHVtbiA9IHRoaXMuX2ZpbmRDb2x1bW5CeURiTmFtZS50cmFuc2Zvcm0oYWxsQ29sdW1ucywgdmlld1NldHRpbmcuSXRlbUtleUZpZWxkKTtcclxuICAgICAgICBjb25zdCBmaWxlQ29sdW1uID0gdGhpcy5fZmluZENvbHVtbkJ5RGJOYW1lLnRyYW5zZm9ybShhbGxDb2x1bW5zLCB2aWV3U2V0dGluZy5GaWxlRmllbGQpO1xyXG4gICAgICAgIGNvbnN0IGFjY2VwdGVkQ29sdW1uID0gdGhpcy5fZmluZENvbHVtbkJ5RGJOYW1lLnRyYW5zZm9ybShhbGxDb2x1bW5zLCB2aWV3U2V0dGluZy5BY2NlcHRlZEZpZWxkKTtcclxuICAgICAgICBjb25zdCByZWplY3RlZFJlYXNvbkNvbHVtbiA9IHRoaXMuX2ZpbmRDb2x1bW5CeURiTmFtZS50cmFuc2Zvcm0oYWxsQ29sdW1ucywgdmlld1NldHRpbmcuUmVqZWN0ZWRSZWFzb25GaWVsZCk7XHJcbiAgICAgICAgY29uc3Qgc3RhdHVzQ29sdW1uID0gdGhpcy5fZmluZENvbHVtbkJ5RGJOYW1lLnRyYW5zZm9ybShhbGxDb2x1bW5zLCB2aWV3U2V0dGluZy5TdGF0dXNGaWVsZCk7XHJcbiAgICAgICAgIWtleUNvbHVtbiAmJiB0aGlzLl9jb2x1bW5Ob3RFeGlzdHNJblJlcG9ydCh2aWV3U2V0dGluZy5JdGVtS2V5RmllbGQpO1xyXG4gICAgICAgICFmaWxlQ29sdW1uICYmIHRoaXMuX2NvbHVtbk5vdEV4aXN0c0luUmVwb3J0KHZpZXdTZXR0aW5nLkZpbGVGaWVsZCk7XHJcbiAgICAgICAgIXJlamVjdGVkUmVhc29uQ29sdW1uICYmIHRoaXMuX2NvbHVtbk5vdEV4aXN0c0luUmVwb3J0KHZpZXdTZXR0aW5nLlJlamVjdGVkUmVhc29uRmllbGQpO1xyXG4gICAgICAgICFhY2NlcHRlZENvbHVtbiAmJiB0aGlzLl9jb2x1bW5Ob3RFeGlzdHNJblJlcG9ydCh2aWV3U2V0dGluZy5BY2NlcHRlZEZpZWxkKTtcclxuICAgICAgICAhc3RhdHVzQ29sdW1uICYmIHRoaXMuX2NvbHVtbk5vdEV4aXN0c0luUmVwb3J0KHZpZXdTZXR0aW5nLlN0YXR1c0ZpZWxkKTtcclxuXHJcbiAgICAgICAga2V5Q29sdW1uICYmICh0aGlzLmtleUNvbHVtbiA9IGtleUNvbHVtbik7XHJcbiAgICAgICAgZmlsZUNvbHVtbiAmJiAodGhpcy5maWxlQ29sdW1uID0gZmlsZUNvbHVtbik7XHJcbiAgICAgICAgYWNjZXB0ZWRDb2x1bW4gJiYgKHRoaXMuYWNjZXB0ZWRDb2x1bW4gPSBhY2NlcHRlZENvbHVtbik7XHJcbiAgICAgICAgcmVqZWN0ZWRSZWFzb25Db2x1bW4gJiYgKHRoaXMucmVqZWN0ZWRSZWFzb25Db2x1bW4gPSByZWplY3RlZFJlYXNvbkNvbHVtbik7XHJcbiAgICAgICAgc3RhdHVzQ29sdW1uICYmICh0aGlzLnN0YXR1c0NvbHVtbiA9IHN0YXR1c0NvbHVtbik7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX3N1YnNjcmliZU9uVXBsb2FkRmlsZShmaWxlQ29sdW1uOiBSZXBvcnRWaWV3Q29sdW1uKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fZmlsZXNWYWxpZGF0aW9uSGVscGVyID0gbmV3IEZpbGVzVmFsaWRhdGlvbkhlbHBlcigwLCAwLCAwKTtcclxuICAgICAgICBpZiAodGhpcy5fdXBsb2FkU2VydmljZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9jcmVhdGVMaW5lYXJIZWxwZXIodGhpcy5fdXBsb2FkU2VydmljZSwgdGhpcy5fZmlsZXNWYWxpZGF0aW9uSGVscGVyLCBmaWxlQ29sdW1uLkZpZWxkRGVmSWQpO1xyXG4gICAgICAgICAgICB0aGlzLnVwbG9hZGluZ1N0YXRlJCA9IHRoaXMuX3VwbG9hZFNlcnZpY2UudXBsb2FkaW5nU3RhdGUkO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVXBsb2FkU2VydmljZSBub3QgcHJvdmlkZWQuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9saW5lYXJIZWxwZXIubmV3RmlsZVVwbG9hZGVkJC5zdWJzY3JpYmUoKGZpbGUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbW8gPSB0aGlzLm1vRGF0YUxpc3QuZmluZCgoYykgPT4gYy5JZCA9PT0gdGhpcy5zZWxlY3RlZE1vLklkKTtcclxuICAgICAgICAgICAgaWYgKG1vKSB7XHJcbiAgICAgICAgICAgICAgICBtb1tmaWxlQ29sdW1uLk5hbWVdLkZpbGVzID0gWy4uLm1vW2ZpbGVDb2x1bW4uTmFtZV0uRmlsZXMsIGZpbGVdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlTW8obW8pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX3VwZGF0ZU1vKG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XHJcbiAgICAgICAgbW8uJE5ld0lubGluZU1vID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIGlmIChtby4kU3RhdGUgPT09ICdVbmNoYW5nZWQnKSB7XHJcbiAgICAgICAgICAgIG1vLiRTdGF0ZSA9ICdNb2RpZmllZCc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudXBkYXRlTW8uZW1pdChtbyk7XHJcbiAgICAgICAgdGhpcy5fY2hlY2tNYW5kYXRvcnkoKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfY3JlYXRlTGluZWFySGVscGVyKFxyXG4gICAgICAgIHVwbG9hZFNlcnZpY2U6IFVwbG9hZFNlcnZpY2UsXHJcbiAgICAgICAgZmlsZXNWYWxpZGF0aW9uSGVscGVyOiBGaWxlc1ZhbGlkYXRpb25IZWxwZXIsXHJcbiAgICAgICAgZmllbGREZWZJZDogc3RyaW5nXHJcbiAgICApOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9saW5lYXJIZWxwZXIgPSBuZXcgTGluZWFyTGlzdEhlbHBlcih1cGxvYWRTZXJ2aWNlLCBmaWxlc1ZhbGlkYXRpb25IZWxwZXIsIGZpZWxkRGVmSWQpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF91cGxvYWRGaWxlKGZpbGVzOiBGaWxlW10sIGRvY3VtZW50SXRlbTogRG9jdW1lbnRJdGVtKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZmlsZXNWYWxpZGF0aW9uSGVscGVyID0gdGhpcy5fZmlsZXNWYWxpZGF0aW9uSGVscGVyO1xyXG4gICAgICAgIGZpbGVzVmFsaWRhdGlvbkhlbHBlci5tYXhGaWxlQ291bnQgPSArZG9jdW1lbnRJdGVtLk1heEZpbGVDb3VudDtcclxuICAgICAgICBmaWxlc1ZhbGlkYXRpb25IZWxwZXIubWF4RmlsZVNpemUgPSArZG9jdW1lbnRJdGVtLkVhY2hGaWxlU2l6ZTtcclxuICAgICAgICBmaWxlc1ZhbGlkYXRpb25IZWxwZXIubWF4VG90YWxGaWxlU2l6ZSA9ICtkb2N1bWVudEl0ZW0uTWF4RmlsZVNpemU7XHJcbiAgICAgICAgdGhpcy5fbGluZWFySGVscGVyLnVwbG9hZFRvU2VydmVyKGZpbGVzLCBkb2N1bWVudEl0ZW0uVGl0bGUpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF9jb2x1bW5Ob3RFeGlzdHNJblJlcG9ydChjb2x1bW5DYXB0aW9uKTogdm9pZCB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBjYW4gbm90IGZpbmQgJHtjb2x1bW5DYXB0aW9ufSBjb2x1bW4gaW4gcmVwb3J0LnBsZWFzZSBhZGQgaXQgdG8gcmVwb3J0IGNvbHVtbnMuYCk7XHJcbiAgICB9XHJcbn1cclxuIiwiPCEtLSA8dWwgZmQtbGlzdCBbYnlsaW5lXT1cInRydWVcIiBmZENvbXBhY3QgW3NlbGVjdGlvbl09XCJmYWxzZVwiPiAtLT5cclxuPHRhYmxlIGZkLXRhYmxlIGFyaWEtbGFiZWw9XCJEZWZhdWx0XCIgW2FsbENlbGxzRm9jdXNhYmxlXT1cInRydWVcIiBbbm9Cb3JkZXJYXT1cInRydWVcIj5cclxuICAgIDx0aGVhZCBmZC10YWJsZS1oZWFkZXI+XHJcbiAgICAgICAgPHRyIGZkLXRhYmxlLXJvdz5cclxuICAgICAgICAgICAgPHRoIGZkLXRhYmxlLWNlbGw+e3sgJ9i52qnYsycgfCBiYmJUcmFuc2xhdGUgfX08L3RoPlxyXG4gICAgICAgICAgICA8dGggZmQtdGFibGUtY2VsbCBzdHlsZT1cIm1pbi13aWR0aDogMTQwcHg7IHdpZHRoOiBhdXRvXCI+e3sgJ9mG2YjYuSDZhdiv2LHaqScgfCBiYmJUcmFuc2xhdGUgfX08L3RoPlxyXG4gICAgICAgICAgICA8dGggZmQtdGFibGUtY2VsbCBzdHlsZT1cIndpZHRoOiA5OSVcIj57eyAn2KfZhNi12KfZgiDZgdin24zZhCcgfCBiYmJUcmFuc2xhdGUgfX08L3RoPlxyXG4gICAgICAgICAgICA8dGggZmQtdGFibGUtY2VsbD48L3RoPlxyXG4gICAgICAgICAgICA8dGggZmQtdGFibGUtY2VsbCBzdHlsZT1cIndpZHRoOiA0MDBweDsgbWluLXdpZHRoOiA0MDBweDsgbWF4LXdpZHRoOiA0MDBweFwiPnt7ICfZiNi22LnbjNiqJyB8IGJiYlRyYW5zbGF0ZSB9fTwvdGg+XHJcbiAgICAgICAgPC90cj5cclxuICAgIDwvdGhlYWQ+XHJcbiAgICA8dGJvZHkgZmQtdGFibGUtYm9keT5cclxuICAgICAgICBAZm9yIChtbyBvZiBtb0RhdGFMaXN0OyB0cmFjayBfdHJhY2tCeVJvdygkaW5kZXgsIG1vKSkgeyBAaWYgKG1vLiRkb2N1bWVudEl0ZW0pIHtcclxuICAgICAgICA8YmRjLWJhcnNhLWRvY3VtZW50LWxpc3QtaXRlbVxyXG4gICAgICAgICAgICBbZG9jdW1lbnRJdGVtXT1cIm1vLiRkb2N1bWVudEl0ZW1cIlxyXG4gICAgICAgICAgICBbYWNjZXB0ZWRdPVwibW9bYWNjZXB0ZWRDb2x1bW4uTmFtZV1cIlxyXG4gICAgICAgICAgICBbZmlsZXNdPVwibW9bZmlsZUNvbHVtbi5OYW1lXS5GaWxlc1wiXHJcbiAgICAgICAgICAgIFt1cGxvYWRpbmdTdGF0ZV09XCIodXBsb2FkaW5nU3RhdGUkIHwgYXN5bmMpISFcIlxyXG4gICAgICAgICAgICBbcmVqZWN0ZWRSZWFzb25dPVwibW9bcmVqZWN0ZWRSZWFzb25Db2x1bW4uTmFtZV1cIlxyXG4gICAgICAgICAgICBbZmlsZURiTmFtZV09XCJmaWxlQ29sdW1uLk5hbWVcIlxyXG4gICAgICAgICAgICBbc3RhdHVzXT1cIittb1tzdGF0dXNDb2x1bW4uTmFtZV1cIlxyXG4gICAgICAgICAgICBbZGV2aWNlU2l6ZV09XCJkZXZpY2VTaXplXCJcclxuICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiFhY2Nlc3MuRWRpdFwiXHJcbiAgICAgICAgICAgIFtkZXZpY2VTaXplXT1cImRldmljZVNpemVcIlxyXG4gICAgICAgICAgICAocmVtb3ZlRmlsZSk9XCJvblJlbW92ZUZpbGUoJGV2ZW50LCBtbylcIlxyXG4gICAgICAgICAgICAoZmlsZVNlbGVjdGlvbkNoYW5nZSk9XCJvbkZpbGVTZWxlY3Rpb24oJGV2ZW50LCBtby4kZG9jdW1lbnRJdGVtLCBtbylcIlxyXG4gICAgICAgICAgICAocmVqZWN0VGV4dENoYW5nZSk9XCJvblJlamVjdGVkVGV4dENoYW5nZSgkZXZlbnQsIG1vKVwiXHJcbiAgICAgICAgICAgIChzdGF0dXNDaGFuZ2VkKT1cIm9uU3RhdHVzQ2hhbmdlZCgkZXZlbnQsIG1vKVwiXHJcbiAgICAgICAgPjwvYmRjLWJhcnNhLWRvY3VtZW50LWxpc3QtaXRlbT5cclxuICAgICAgICB9IH1cclxuICAgICAgICA8IS0tIDwvdWw+IC0tPlxyXG4gICAgPC90Ym9keT5cclxuPC90YWJsZT5cclxuIl19