barsa-sap-ui 2.2.72 → 2.2.74

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (256) hide show
  1. package/fesm2022/barsa-sap-ui.mjs +757 -761
  2. package/fesm2022/barsa-sap-ui.mjs.map +1 -1
  3. package/lib/models/grid-data-provider.d.ts +1 -1
  4. package/lib/notification-popup.service.d.ts +1 -1
  5. package/lib/ui-grid-columns/ui-grid-columns.component.d.ts +1 -1
  6. package/lib/ui-mo-info-ulv-combo/ui-mo-info-ulv-combo.component.d.ts +1 -1
  7. package/lib/ui-pictures-info/ui-pictures-info.component.d.ts +2 -2
  8. package/lib/ui-table-view/ui-table-view.component.d.ts +4 -4
  9. package/lib/ul-msg-box-adapter/ul-msg-box-adapter.component.d.ts +1 -1
  10. package/lib/ul-notify-popup/ul-notify-popup.component.d.ts +1 -1
  11. package/lib/ulv-toolbar/ulv-toolbar.component.d.ts +2 -2
  12. package/package.json +3 -5
  13. package/esm2022/barsa-sap-ui.mjs +0 -5
  14. package/esm2022/lib/apply-conditional-formmatings.directive.mjs +0 -90
  15. package/esm2022/lib/avatar-size.pipe.mjs +0 -41
  16. package/esm2022/lib/barsa-answer-card/barsa-answer-card.component.mjs +0 -41
  17. package/esm2022/lib/barsa-asp-viewer/barsa-asp-viewer.component.mjs +0 -153
  18. package/esm2022/lib/barsa-bar-download-file/barsa-bar-download-file.component.mjs +0 -30
  19. package/esm2022/lib/barsa-bar-panel/barsa-bar-panel.component.mjs +0 -23
  20. package/esm2022/lib/barsa-base-panel/barsa-base-layout-panel.component.mjs +0 -29
  21. package/esm2022/lib/barsa-breadcrumbs/barsa-breadcrumbs.component.mjs +0 -24
  22. package/esm2022/lib/barsa-card-banner/barsa-card-banner.component.mjs +0 -38
  23. package/esm2022/lib/barsa-card-layout-panel/barsa-card-layout-panel.component.mjs +0 -24
  24. package/esm2022/lib/barsa-card-row-payam/barsa-card-row-payam.component.mjs +0 -31
  25. package/esm2022/lib/barsa-cartable-form/barsa-cartable-form.component.mjs +0 -41
  26. package/esm2022/lib/barsa-cartable-template/barsa-cartable-template.component.mjs +0 -24
  27. package/esm2022/lib/barsa-chat/barsa-chat.component.mjs +0 -84
  28. package/esm2022/lib/barsa-chat/chat.model.mjs +0 -8
  29. package/esm2022/lib/barsa-chat-content/barsa-chat-content.component.mjs +0 -13
  30. package/esm2022/lib/barsa-chat-content-toolbar/barsa-chat-content-toolbar.component.mjs +0 -22
  31. package/esm2022/lib/barsa-chat-list/barsa-chat-list.component.mjs +0 -117
  32. package/esm2022/lib/barsa-chat-message/barsa-chat-message.component.mjs +0 -79
  33. package/esm2022/lib/barsa-chat-thread/barsa-chat-thread.component.mjs +0 -22
  34. package/esm2022/lib/barsa-chat-threads-list/barsa-chat-threads-list.component.mjs +0 -13
  35. package/esm2022/lib/barsa-chat-threads-list-toolbar/barsa-chat-threads-list-toolbar.component.mjs +0 -15
  36. package/esm2022/lib/barsa-chip/barsa-chip.component.mjs +0 -72
  37. package/esm2022/lib/barsa-column-indicator/barsa-column-indicator.component.mjs +0 -23
  38. package/esm2022/lib/barsa-column-rownumber/barsa-column-rownumber.component.mjs +0 -14
  39. package/esm2022/lib/barsa-custom-inline-edit/barsa-custom-inline-edit.component.mjs +0 -14
  40. package/esm2022/lib/barsa-custom-inline-edit-row/barsa-custom-inline-edit-row.component.mjs +0 -26
  41. package/esm2022/lib/barsa-date-time-picker/barsa-date-time-picker.component.mjs +0 -71
  42. package/esm2022/lib/barsa-dynamic-field/barsa-dynamic-field.component.mjs +0 -40
  43. package/esm2022/lib/barsa-enum-menu-button/barsa-enum-menu-button.component.mjs +0 -61
  44. package/esm2022/lib/barsa-field-key-value/barsa-field-key-value.component.mjs +0 -45
  45. package/esm2022/lib/barsa-form-layout-panel/barsa-form-layout-panel.component.mjs +0 -58
  46. package/esm2022/lib/barsa-form-side-content/barsa-form-side-content.component.mjs +0 -58
  47. package/esm2022/lib/barsa-grid-layout-panel/barsa-grid-layout-panel.component.mjs +0 -27
  48. package/esm2022/lib/barsa-group-cartable/barsa-cartable-group.component.mjs +0 -94
  49. package/esm2022/lib/barsa-horizontal-flex-panel/barsa-horizontal-flex-panel.component.mjs +0 -22
  50. package/esm2022/lib/barsa-img-skeleton/barsa-img-skeleton.component.mjs +0 -25
  51. package/esm2022/lib/barsa-linkable-items-panel/barsa-linkable-items-panel.component.mjs +0 -37
  52. package/esm2022/lib/barsa-list-file-linear/barsa-list-file-linear.component.mjs +0 -42
  53. package/esm2022/lib/barsa-list-file-linear-gmail/barsa-list-file-linear-gmail.component.mjs +0 -30
  54. package/esm2022/lib/barsa-list-layout-panel/barsa-list-layout-panel.component.mjs +0 -23
  55. package/esm2022/lib/barsa-modal/barsa-modal.component.mjs +0 -43
  56. package/esm2022/lib/barsa-monaco-editor/barsa-monaco-editor.component.mjs +0 -83
  57. package/esm2022/lib/barsa-network-offline/barsa-network-offline.component.mjs +0 -57
  58. package/esm2022/lib/barsa-pishnamayesh-payam/barsa-pishnamayesh-payam.component.mjs +0 -159
  59. package/esm2022/lib/barsa-question-answer-comments-section/barsa-question-answer-comments-section.component.mjs +0 -17
  60. package/esm2022/lib/barsa-question-answer-content-actions-section/barsa-question-answer-content-actions-section.component.mjs +0 -30
  61. package/esm2022/lib/barsa-question-answer-creator-time-section/barsa-question-answer-creator-time-section.component.mjs +0 -14
  62. package/esm2022/lib/barsa-question-answer-form/barsa-question-answer-form.component.mjs +0 -34
  63. package/esm2022/lib/barsa-question-answer-form-add-comment/barsa-question-answer-form-add-comment.component.mjs +0 -46
  64. package/esm2022/lib/barsa-question-answer-vote-section/barsa-question-answer-vote-section.component.mjs +0 -79
  65. package/esm2022/lib/barsa-question-post/barsa-question-post.component.mjs +0 -30
  66. package/esm2022/lib/barsa-report-card-flex-view/barsa-report-card-flex-view.component.mjs +0 -31
  67. package/esm2022/lib/barsa-report-checkbox-switch-button/barsa-report-checkbox-switch-button.component.mjs +0 -28
  68. package/esm2022/lib/barsa-report-one-of-list/barsa-report-one-of-list.component.mjs +0 -103
  69. package/esm2022/lib/barsa-row-inline-actionlist/barsa-row-inline-actionlist.component.mjs +0 -26
  70. package/esm2022/lib/barsa-sap-ui-routing.module.mjs +0 -18
  71. package/esm2022/lib/barsa-sap-ui.module.mjs +0 -369
  72. package/esm2022/lib/barsa-search-form/barsa-search-form.component.mjs +0 -30
  73. package/esm2022/lib/barsa-simple-form/barsa-simple-form.component.mjs +0 -171
  74. package/esm2022/lib/barsa-tab-route-manager/barsa-tab-route-manager.component.mjs +0 -18
  75. package/esm2022/lib/barsa-table-column/barsa-table-column.component.mjs +0 -29
  76. package/esm2022/lib/barsa-table-header/barsa-table-header.component.mjs +0 -230
  77. package/esm2022/lib/barsa-table-row/barsa-table-row.component.mjs +0 -102
  78. package/esm2022/lib/barsa-tag-categories/barsa-tag-categories.component.mjs +0 -60
  79. package/esm2022/lib/barsa-tag-chip/barsa-tag-chip.component.mjs +0 -26
  80. package/esm2022/lib/barsa-tags-category-row/barsa-tags-category-row.component.mjs +0 -23
  81. package/esm2022/lib/barsa-text-ellipsis/barsa-text-ellipsis.component.mjs +0 -37
  82. package/esm2022/lib/barsa-theme/barsa-theme.component.mjs +0 -121
  83. package/esm2022/lib/barsa-tinyemce/barsa-tinyemce.component.mjs +0 -419
  84. package/esm2022/lib/barsa-toolbaritem-search/barsa-toolbaritem-search.component.mjs +0 -36
  85. package/esm2022/lib/barsa-tree-item/barsa-tree-item.component.mjs +0 -153
  86. package/esm2022/lib/barsa-tree-item/node-has-one-depth-level.pipe.mjs +0 -20
  87. package/esm2022/lib/barsa-ulv-main/barsa-ulv-main.component.mjs +0 -248
  88. package/esm2022/lib/blob-viewer/blob-viewer.component.mjs +0 -79
  89. package/esm2022/lib/breadcrumb/breadcrumb.component.mjs +0 -52
  90. package/esm2022/lib/captcha-field/captcha-field.component.mjs +0 -33
  91. package/esm2022/lib/card-item/card-item.component.mjs +0 -79
  92. package/esm2022/lib/card-view-content/card-view-content.component.mjs +0 -46
  93. package/esm2022/lib/col-renderer.directive.mjs +0 -47
  94. package/esm2022/lib/column-matrix-renderer/column-matrix-renderer.component.mjs +0 -56
  95. package/esm2022/lib/column-matrix-renderer/matrix-value.pipe.mjs +0 -61
  96. package/esm2022/lib/column-renderer/column-renderer.component.mjs +0 -108
  97. package/esm2022/lib/constants.mjs +0 -450
  98. package/esm2022/lib/contentDensity.directive.mjs +0 -25
  99. package/esm2022/lib/custom-date-time/custom-date-time.component.mjs +0 -41
  100. package/esm2022/lib/device-info-field-base.mjs +0 -24
  101. package/esm2022/lib/dialog-handler.directive.mjs +0 -29
  102. package/esm2022/lib/download-files.directive.mjs +0 -34
  103. package/esm2022/lib/dynamic-page-size.pipe.mjs +0 -27
  104. package/esm2022/lib/file-in-dialog/file-in-dialog.component.mjs +0 -44
  105. package/esm2022/lib/file-viewer/file-viewer.component.mjs +0 -47
  106. package/esm2022/lib/file-viewer-content/file-viewer-content.component.mjs +0 -80
  107. package/esm2022/lib/file-viewer-popover/file-viewer-popover.component.mjs +0 -40
  108. package/esm2022/lib/form-dialog/form-dialog.component.mjs +0 -175
  109. package/esm2022/lib/form-dialog-less/form-dialog-less.component.mjs +0 -50
  110. package/esm2022/lib/form-toolbar/form-toolbar.component.mjs +0 -62
  111. package/esm2022/lib/form-toolbar-button/form-toolbar-button.component.mjs +0 -45
  112. package/esm2022/lib/form-wizard/form-wizard.component.mjs +0 -22
  113. package/esm2022/lib/fullscreen-dialog.directive.mjs +0 -60
  114. package/esm2022/lib/fullscreen-files.directive.mjs +0 -43
  115. package/esm2022/lib/fundamental-dynamic-form/fundamental-dynamic-form.component.mjs +0 -220
  116. package/esm2022/lib/gantt-dhtml-chart-view/gantt-dhtml-chart-view.component.mjs +0 -215
  117. package/esm2022/lib/global-search/global-search.component.mjs +0 -27
  118. package/esm2022/lib/global-search-module/global-search-module.component.mjs +0 -29
  119. package/esm2022/lib/global-search-panel/global-search-panel.component.mjs +0 -25
  120. package/esm2022/lib/header-avatar/header-avatar.component.mjs +0 -18
  121. package/esm2022/lib/htree-create-new/htree-create-new.component.mjs +0 -48
  122. package/esm2022/lib/hyperlink/hyperlink.component.mjs +0 -23
  123. package/esm2022/lib/index.mjs +0 -467
  124. package/esm2022/lib/inline-save-and-cancel/inline-save-and-cancel.component.mjs +0 -32
  125. package/esm2022/lib/layout-actions/layout-actions.component.mjs +0 -70
  126. package/esm2022/lib/layout-control/layout-control.component.mjs +0 -320
  127. package/esm2022/lib/layout-wizard/layout-wizard.component.mjs +0 -180
  128. package/esm2022/lib/list-item/list-item.component.mjs +0 -34
  129. package/esm2022/lib/ly-empty-space/ly-empty-space.component.mjs +0 -42
  130. package/esm2022/lib/ly-horizontal-layout/ly-horizontal-layout.component.mjs +0 -82
  131. package/esm2022/lib/ly-label/ly-label.component.mjs +0 -39
  132. package/esm2022/lib/ly-layout-container/ly-layout-container.component.mjs +0 -83
  133. package/esm2022/lib/ly-layout-container-of-root/ly-layout-container-of-root.component.mjs +0 -24
  134. package/esm2022/lib/ly-layout-field-label/ly-layout-field-label.component.mjs +0 -24
  135. package/esm2022/lib/ly-layout-panel/ly-layout-panel.component.mjs +0 -92
  136. package/esm2022/lib/ly-line/ly-line.component.mjs +0 -56
  137. package/esm2022/lib/ly-simple-label/ly-simple-label.component.mjs +0 -22
  138. package/esm2022/lib/ly-tab-container/ly-tab-container.component.mjs +0 -44
  139. package/esm2022/lib/ly-tab-page/ly-tab-page.component.mjs +0 -49
  140. package/esm2022/lib/ly-vertical-layout/ly-vertical-layout.component.mjs +0 -51
  141. package/esm2022/lib/manage-filters-report/manage-filters-report.component.mjs +0 -43
  142. package/esm2022/lib/mask/mask.component.mjs +0 -22
  143. package/esm2022/lib/message-strip/message-strip.component.mjs +0 -29
  144. package/esm2022/lib/models/grid-data-provider.mjs +0 -121
  145. package/esm2022/lib/models/grid-view.mjs +0 -2
  146. package/esm2022/lib/models/index.mjs +0 -2
  147. package/esm2022/lib/no-data/no-data.component.mjs +0 -30
  148. package/esm2022/lib/notification-item/notification-item.component.mjs +0 -57
  149. package/esm2022/lib/notification-item-actions/notification-item-actions.component.mjs +0 -79
  150. package/esm2022/lib/notification-popup.service.mjs +0 -92
  151. package/esm2022/lib/object-status-icon.pipe.mjs +0 -27
  152. package/esm2022/lib/progress-indicator/progress-indicator.component.mjs +0 -18
  153. package/esm2022/lib/report-navigator/report-navigator.component.mjs +0 -75
  154. package/esm2022/lib/report-new-top-form/report-new-top-form.component.mjs +0 -61
  155. package/esm2022/lib/report-search-fields-hidden-settings/report-search-fields-hidden-settings.component.mjs +0 -35
  156. package/esm2022/lib/report-search-fields-manage/report-search-fields-manage.component.mjs +0 -97
  157. package/esm2022/lib/report-search-panel-save/report-search-panel-save.component.mjs +0 -88
  158. package/esm2022/lib/report-tree-base.mjs +0 -387
  159. package/esm2022/lib/report-view-renderer.directive.mjs +0 -395
  160. package/esm2022/lib/responsive-toolbar/responsive-toolbar.component.mjs +0 -50
  161. package/esm2022/lib/responsive-toolbar-renderer/responsive-toolbar-renderer.component.mjs +0 -84
  162. package/esm2022/lib/rich-text-static/rich-text-static.component.mjs +0 -74
  163. package/esm2022/lib/sap-font-class.pipe.mjs +0 -30
  164. package/esm2022/lib/sap-font.pipe.mjs +0 -30
  165. package/esm2022/lib/sap-size.pipe.mjs +0 -28
  166. package/esm2022/lib/sap-ui-report-base.component.mjs +0 -819
  167. package/esm2022/lib/search-panel/search-panel.component.mjs +0 -63
  168. package/esm2022/lib/static-text/static-text.component.mjs +0 -15
  169. package/esm2022/lib/table-th.directive.mjs +0 -87
  170. package/esm2022/lib/title/title.component.mjs +0 -15
  171. package/esm2022/lib/ui-asp-report-viewer/ui-asp-report-viewer.component.mjs +0 -44
  172. package/esm2022/lib/ui-bpmn-viewer/ui-bpmn-viewer.component.mjs +0 -33
  173. package/esm2022/lib/ui-button/ui-button.component.mjs +0 -32
  174. package/esm2022/lib/ui-calendar/ui-calendar.component.mjs +0 -54
  175. package/esm2022/lib/ui-card-view/ui-card-view.component.mjs +0 -63
  176. package/esm2022/lib/ui-card-view-horizontal-group/ui-card-view-horizontal-group.component.mjs +0 -43
  177. package/esm2022/lib/ui-check-box/ui-check-box.component.mjs +0 -44
  178. package/esm2022/lib/ui-color-ui/ui-color-ui.component.mjs +0 -50
  179. package/esm2022/lib/ui-container-with-button/ui-container-with-button.component.mjs +0 -38
  180. package/esm2022/lib/ui-date-range-ex/ui-date-range-ex.component.mjs +0 -191
  181. package/esm2022/lib/ui-date-time/ui-date-time.component.mjs +0 -150
  182. package/esm2022/lib/ui-editable-grid/ui-editable-grid.component.mjs +0 -111
  183. package/esm2022/lib/ui-exception-form/ui-exception-form.component.mjs +0 -53
  184. package/esm2022/lib/ui-file-linear-list-box/ui-file-linear-list-box.component.mjs +0 -138
  185. package/esm2022/lib/ui-form-panel/ui-form-panel.component.mjs +0 -104
  186. package/esm2022/lib/ui-gantt-chart/ui-gantt-chart.component.mjs +0 -33
  187. package/esm2022/lib/ui-graph/ui-graph.component.mjs +0 -17
  188. package/esm2022/lib/ui-grid/ui-grid.component.mjs +0 -26
  189. package/esm2022/lib/ui-grid-columns/ui-grid-columns.component.mjs +0 -43
  190. package/esm2022/lib/ui-grid-filter-item/ui-grid-filter-item.component.mjs +0 -66
  191. package/esm2022/lib/ui-grid-filter-settings/ui-grid-filter-settings.component.mjs +0 -75
  192. package/esm2022/lib/ui-grid-sort-item/ui-grid-sort-item.component.mjs +0 -58
  193. package/esm2022/lib/ui-grid-sort-setting/ui-grid-sort-setting.component.mjs +0 -123
  194. package/esm2022/lib/ui-html-viewer/ui-html-viewer.component.mjs +0 -16
  195. package/esm2022/lib/ui-info-bar-panel/ui-info-bar-panel.component.mjs +0 -11
  196. package/esm2022/lib/ui-label/ui-label.component.mjs +0 -12
  197. package/esm2022/lib/ui-linear-list-container-with-button/ui-linear-list-container-with-button.component.mjs +0 -405
  198. package/esm2022/lib/ui-list-view/ui-list-view.component.mjs +0 -85
  199. package/esm2022/lib/ui-map/ui-map.component.mjs +0 -68
  200. package/esm2022/lib/ui-matrix-view/ui-matrix-view.component.mjs +0 -124
  201. package/esm2022/lib/ui-mo-info-combo-viewer/ui-mo-info-combo-viewer.component.mjs +0 -19
  202. package/esm2022/lib/ui-mo-info-general-object-ui/ui-mo-info-general-object-ui.component.mjs +0 -14
  203. package/esm2022/lib/ui-mo-info-sub-form-ui/ui-mo-info-sub-form-ui.component.mjs +0 -55
  204. package/esm2022/lib/ui-mo-info-ulv-combo/ui-mo-info-ulv-combo.component.mjs +0 -450
  205. package/esm2022/lib/ui-monaco-editor/ui-monaco-editor.component.mjs +0 -28
  206. package/esm2022/lib/ui-multi-select-card/ui-multi-select-card.component.mjs +0 -37
  207. package/esm2022/lib/ui-multi-select-checkbox/ui-multi-select-checkbox.component.mjs +0 -59
  208. package/esm2022/lib/ui-multi-select-combo/ui-multi-select-combo.component.mjs +0 -117
  209. package/esm2022/lib/ui-multi-select-radio/ui-multi-select-radio.component.mjs +0 -36
  210. package/esm2022/lib/ui-multi-select-slider/ui-multi-select-slider.component.mjs +0 -56
  211. package/esm2022/lib/ui-multi-select-smile/ui-multi-select-smile.component.mjs +0 -28
  212. package/esm2022/lib/ui-notification-view/ui-notification-view.component.mjs +0 -47
  213. package/esm2022/lib/ui-num-decimal-ui/ui-num-decimal-ui.component.mjs +0 -33
  214. package/esm2022/lib/ui-num-int-slider/ui-num-int-slider.component.mjs +0 -27
  215. package/esm2022/lib/ui-num-int-ui/ui-num-int-ui.component.mjs +0 -21
  216. package/esm2022/lib/ui-pdf-viewer/ui-pdf-viewer.component.mjs +0 -271
  217. package/esm2022/lib/ui-picture-file/ui-picture-file.component.mjs +0 -103
  218. package/esm2022/lib/ui-pictures-info/ui-pictures-info.component.mjs +0 -260
  219. package/esm2022/lib/ui-radio-group/ui-radio-group.component.mjs +0 -48
  220. package/esm2022/lib/ui-read-only-field/ui-read-only-field.component.mjs +0 -36
  221. package/esm2022/lib/ui-report-carousel-view/ui-report-carousel-view.component.mjs +0 -140
  222. package/esm2022/lib/ui-report-container/ui-report-container.component.mjs +0 -66
  223. package/esm2022/lib/ui-search-command-info-ui/ui-search-command-info-ui.component.mjs +0 -24
  224. package/esm2022/lib/ui-simple-combo/ui-simple-combo.component.mjs +0 -55
  225. package/esm2022/lib/ui-single-picture/ui-single-picture.component.mjs +0 -36
  226. package/esm2022/lib/ui-switch-button/ui-switch-button.component.mjs +0 -20
  227. package/esm2022/lib/ui-table-view/ui-table-view.component.mjs +0 -296
  228. package/esm2022/lib/ui-text-area/ui-text-area.component.mjs +0 -50
  229. package/esm2022/lib/ui-text-field/ui-text-field.component.mjs +0 -52
  230. package/esm2022/lib/ui-text-field-auto-complete/ui-text-field-auto-complete.component.mjs +0 -48
  231. package/esm2022/lib/ui-time-span/ui-time-span.component.mjs +0 -24
  232. package/esm2022/lib/ui-tinymce/ui-tinymce.component.mjs +0 -50
  233. package/esm2022/lib/ui-tree/ui-tree.component.mjs +0 -115
  234. package/esm2022/lib/ui-tree-view/ui-tree-view.component.mjs +0 -100
  235. package/esm2022/lib/ui-ulv-form-multi-select-ui/ui-ulv-form-multi-select-ui.component.mjs +0 -23
  236. package/esm2022/lib/ui-ulv-main-ui/ui-ulv-main-ui.component.mjs +0 -313
  237. package/esm2022/lib/ui-workflow-panel-ui/ui-workflow-panel-ui.component.mjs +0 -25
  238. package/esm2022/lib/ul-loading-mask-ui/ul-loading-mask-ui.component.mjs +0 -93
  239. package/esm2022/lib/ul-msg-box-adapter/ul-msg-box-adapter.component.mjs +0 -119
  240. package/esm2022/lib/ul-notify-popup/ul-notify-popup.component.mjs +0 -32
  241. package/esm2022/lib/ul-toast-adapter/ul-toast-adapter.component.mjs +0 -48
  242. package/esm2022/lib/ulv-column-settings/ulv-column-settings.component.mjs +0 -53
  243. package/esm2022/lib/ulv-context-menu/ulv-context-menu.component.mjs +0 -116
  244. package/esm2022/lib/ulv-filter-settings/ulv-filter-settings.component.mjs +0 -43
  245. package/esm2022/lib/ulv-form-multi-select/ulv-form-multi-select.component.mjs +0 -196
  246. package/esm2022/lib/ulv-groupby-settings/ulv-groupby-settings.component.mjs +0 -44
  247. package/esm2022/lib/ulv-paging/ulv-paging.component.mjs +0 -84
  248. package/esm2022/lib/ulv-selection/ulv-selection.component.mjs +0 -65
  249. package/esm2022/lib/ulv-settings/ulv-settings.component.mjs +0 -116
  250. package/esm2022/lib/ulv-sort-settings/ulv-sort-settings.component.mjs +0 -54
  251. package/esm2022/lib/ulv-toolbar/ulv-toolbar.component.mjs +0 -177
  252. package/esm2022/lib/upload-file-status.pipe.mjs +0 -29
  253. package/esm2022/lib/util-chat-time-badge.pipe.mjs +0 -18
  254. package/esm2022/lib/util-date-to-hh-mm.pipe.mjs +0 -23
  255. package/esm2022/lib/wizard-layout.directive.mjs +0 -104
  256. package/esm2022/public-api.mjs +0 -242
@@ -1,248 +0,0 @@
1
- import { Component, ChangeDetectionStrategy, Input, Output, EventEmitter, ViewChild, HostBinding } from '@angular/core';
2
- import { DynamicPageComponent } from '@fundamental-ngx/core';
3
- import { BaseComponent, getDeviceIsMobile, BarsaApi } from 'barsa-novin-ray-core';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "@fundamental-ngx/core";
6
- import * as i2 from "@angular/common";
7
- import * as i3 from "barsa-novin-ray-core";
8
- import * as i4 from "@fundamental-ngx/core/bar";
9
- import * as i5 from "@fundamental-ngx/core/breadcrumb";
10
- import * as i6 from "@fundamental-ngx/core/content-density";
11
- import * as i7 from "@fundamental-ngx/core/button";
12
- import * as i8 from "@fundamental-ngx/core/card";
13
- import * as i9 from "@fundamental-ngx/core/dynamic-page";
14
- import * as i10 from "@fundamental-ngx/core/dynamic-side-content";
15
- import * as i11 from "@fundamental-ngx/core/icon";
16
- import * as i12 from "@fundamental-ngx/core/list";
17
- import * as i13 from "@fundamental-ngx/core/dialog";
18
- import * as i14 from "@fundamental-ngx/core/title";
19
- import * as i15 from "@fundamental-ngx/cdk/utils";
20
- import * as i16 from "@fundamental-ngx/core/popover";
21
- import * as i17 from "@fundamental-ngx/core/toolbar";
22
- import * as i18 from "../mask/mask.component";
23
- import * as i19 from "../search-panel/search-panel.component";
24
- import * as i20 from "../breadcrumb/breadcrumb.component";
25
- import * as i21 from "../dynamic-page-size.pipe";
26
- import * as i22 from "../sap-size.pipe";
27
- export class BarsaUlvMainComponent extends BaseComponent {
28
- constructor(el, _dialogService, _renderer2) {
29
- super();
30
- this.el = el;
31
- this._dialogService = _dialogService;
32
- this._renderer2 = _renderer2;
33
- this._backgroundColor = null;
34
- this._backgroundUrl = null;
35
- this._backgroundRepeat = null;
36
- this._customBackground = false;
37
- this.closeEvent = new EventEmitter();
38
- this.searchPanelMoChange = new EventEmitter();
39
- this.openManageFilters = new EventEmitter();
40
- this.collapsedChange = new EventEmitter();
41
- this.hideSearchPanelClick = new EventEmitter();
42
- this.filterSave = new EventEmitter();
43
- this.filterSaveAs = new EventEmitter();
44
- this.pageChange = new EventEmitter();
45
- this.showFilterFieldsSetting = new EventEmitter();
46
- this.manageFilters = new EventEmitter();
47
- this.clearSearch = new EventEmitter();
48
- this.search = new EventEmitter();
49
- this.selectSearchPanelSettings = new EventEmitter();
50
- this.isServiceDesk = false;
51
- this.fillPage = false;
52
- this.sideContentMode = false;
53
- this.isServiceDesk = BarsaApi.LoginFormData.IsServiceDesk; // eslint-disable-line
54
- }
55
- ngOnInit() {
56
- super.ngOnInit();
57
- this.hidePageing = BarsaApi.Common.Util.TryGetValue(this.context, 'Setting.ClassNames.CustomUi.Parameters.HidePageing', false);
58
- this.fillPage = BarsaApi.Common.Util.TryGetValue(this.context, 'Setting.ClassNames.CustomUi.Parameters.FillPage', false);
59
- this.sideContentMode = BarsaApi.Common.Util.TryGetValue(this.context, 'Setting.ClassNames.CustomUi.Parameters.SearchpanelInSideContent', false);
60
- this.mainContentWidth = BarsaApi.Common.Util.TryGetValue(this.context, 'Setting.ClassNames.CustomUi.Parameters.MainContentWidth', false);
61
- this.isMobile = getDeviceIsMobile();
62
- this.mobileBottomBar = this.isMobile && !this.standalone;
63
- }
64
- ngAfterViewInit() {
65
- super.ngAfterViewInit();
66
- if (this._dynamicPageComponent) {
67
- if (this.deviceSize === 'xl' && this._dynamicPageComponent.size !== 'extra-large') {
68
- this._dynamicPageComponent.refreshSize();
69
- }
70
- }
71
- }
72
- ngOnChanges(changes) {
73
- const { cssBackground } = changes;
74
- if (cssBackground && cssBackground.currentValue) {
75
- this._setBackground(cssBackground.currentValue);
76
- }
77
- }
78
- onClose() {
79
- this.closeEvent.emit();
80
- }
81
- onSearchPanelMoChanged() {
82
- this.searchPanelMoChange.emit();
83
- }
84
- onShowSearchpanelDialog() {
85
- this.openDialog(this.dialogTemplate);
86
- }
87
- openDialog(dialog) {
88
- this._dialogService.open(dialog, {
89
- responsivePadding: true,
90
- mobile: true,
91
- ariaLabelledBy: 'Fitlers',
92
- ariaDescribedBy: 'Fitlers',
93
- focusTrapped: true,
94
- closeOnNavigation: true
95
- });
96
- }
97
- onOpenManageFilters() {
98
- this.openManageFilters.emit();
99
- }
100
- onCollapsedChange(collapsed) {
101
- this.collapsedChange.emit(collapsed);
102
- }
103
- onHideSearchPanelClick() {
104
- this.hideSearchPanelClick.emit();
105
- }
106
- onFilterSave(popover) {
107
- popover.close();
108
- this.filterSave.emit();
109
- }
110
- onFilterSaveAs(popover) {
111
- popover.close();
112
- this.filterSaveAs.emit();
113
- }
114
- onShowFilterFieldsSetting() {
115
- this.showFilterFieldsSetting.emit();
116
- }
117
- onManageFilters(popover) {
118
- popover.close();
119
- this.manageFilters.emit();
120
- }
121
- onClearSearch() {
122
- this.clearSearch.emit();
123
- }
124
- onSearch() {
125
- this.search.emit();
126
- }
127
- onPageChange(e) {
128
- this.pageChange.emit(e);
129
- }
130
- onSelectSearchPanelSettings(selectedSearchPanelSettingsId, popover) {
131
- popover.close();
132
- this.selectSearchPanelSettings.emit(selectedSearchPanelSettingsId);
133
- }
134
- SetUiViewerSelector(uiViewerSelector) {
135
- this._renderer2.setAttribute(this.el.nativeElement, 'uiviewer', uiViewerSelector);
136
- }
137
- _setBackground(cssBackground) {
138
- this._backgroundColor = cssBackground.color;
139
- this._backgroundUrl = cssBackground.url;
140
- this._backgroundRepeat = cssBackground.repeat === false ? 'no-repeat' : 'repeat';
141
- this._customBackground = true;
142
- }
143
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BarsaUlvMainComponent, deps: [{ token: i0.ElementRef }, { token: i1.DialogService }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
144
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: BarsaUlvMainComponent, selector: "bsu-barsa-ulv-main", inputs: { viewerControl: "viewerControl", loading: "loading", hidePaging: "hidePaging", viewerLoading: "viewerLoading", isReportPage: "isReportPage", cssBackground: "cssBackground", deviceSize: "deviceSize", title: "title", searchPanelUi: "searchPanelUi", breadCrumbs: "breadCrumbs", allSearchPanelSettings: "allSearchPanelSettings", isAnonymous: "isAnonymous", canSaveGridSetting: "canSaveGridSetting", rtl: "rtl", hideUlvPageTitle: "hideUlvPageTitle", selectedSearchPanelSettings: "selectedSearchPanelSettings", searchPanelMoChanged: "searchPanelMoChanged", selectedSearchPanelSettingsId: "selectedSearchPanelSettingsId", hideSearchPanel: "hideSearchPanel", pagingSetting: "pagingSetting", contentDensity: "contentDensity", context: "context", isMobile: "isMobile", standalone: "standalone", landscape: "landscape", simpleSearchPanel: "simpleSearchPanel", layoutInfo: "layoutInfo" }, outputs: { closeEvent: "closeEvent", searchPanelMoChange: "searchPanelMoChange", openManageFilters: "openManageFilters", collapsedChange: "collapsedChange", hideSearchPanelClick: "hideSearchPanelClick", filterSave: "filterSave", filterSaveAs: "filterSaveAs", pageChange: "pageChange", showFilterFieldsSetting: "showFilterFieldsSetting", manageFilters: "manageFilters", clearSearch: "clearSearch", search: "search", selectSearchPanelSettings: "selectSearchPanelSettings" }, host: { properties: { "style.background-color": "this._backgroundColor", "style.background-image": "this._backgroundUrl", "style.background-repeat": "this._backgroundRepeat", "class.custom-background": "this._customBackground" } }, viewQueries: [{ propertyName: "_dynamicPageComponent", first: true, predicate: DynamicPageComponent, descendants: true }, { propertyName: "dialogTemplate", first: true, predicate: ["searchpanelDialog"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ng-container\r\n *ngTemplateOutlet=\"\r\n isReportPage ? reportPageTemplate : reportTemplate;\r\n context: {\r\n $implicit: viewerControl,\r\n tabMode: viewerControl?.Setting?.ClassNames?.CustomUi?.Parameters?.TabMode\r\n }\r\n \"\r\n>\r\n</ng-container>\r\n@if (loading) {\r\n<bsu-mask size=\"m\"></bsu-mask>\r\n}\r\n<ng-template #reportPageTemplate let-viewerControl let-tabMode=\"tabMode\">\r\n <fd-dynamic-page\r\n formClose\r\n mobile\r\n [attr.isMobile]=\"isMobile ? true : null\"\r\n [isMobile]=\"isMobile\"\r\n [size]=\"deviceSize | dynamicPageSize\"\r\n [attr.tabMode]=\"tabMode\"\r\n [autoResponsive]=\"false\"\r\n [class.notitle]=\"\r\n (!title && !searchPanelUi && !hideSearchPanel && !sideContentMode) ||\r\n (!hideSearchPanel && !title) ||\r\n hideUlvPageTitle ||\r\n sideContentMode\r\n \"\r\n >\r\n <fd-dynamic-page-header\r\n [title]=\"\r\n (title | bbbTranslate) && !hideUlvPageTitle\r\n ? (title | bbbTranslate)\r\n : isMobile && breadCrumbs.length\r\n ? breadCrumbs[breadCrumbs.length - 1].label\r\n : ''\r\n \"\r\n class=\"p-b0\" \r\n >\r\n <fd-dynamic-page-breadcrumb [class.hide]=\"isMobile\">\r\n <fd-breadcrumb>\r\n @for ( breadCrumb of breadCrumbs | slice: 0:breadCrumbs.length; track breadCrumb.url; let i =\r\n $index; let last = $last) {\r\n <fd-breadcrumb-item>\r\n <bsu-breadcrumb\r\n [index]=\"i\"\r\n [isLast]=\"last\"\r\n [breadCrumb]=\"breadCrumb\"\r\n [allBreadCrumb]=\"breadCrumbs\"\r\n ></bsu-breadcrumb>\r\n </fd-breadcrumb-item>\r\n }\r\n </fd-breadcrumb>\r\n </fd-dynamic-page-breadcrumb>\r\n <!-- <fd-dynamic-page-title-content>\u06AF\u0632\u0627\u0631\u0634 </fd-dynamic-page-title-content> -->\r\n\r\n <fd-dynamic-page-global-actions *untilInView=\"el\" style=\"min-width: auto\">\r\n <fd-toolbar [shouldOverflow]=\"true\" Style=\"display:none\"> </fd-toolbar>\r\n <!-- added this because in mobile landscape toolbar disapper -->\r\n @if (!hideSearchPanel ||( searchPanelUi && !sideContentMode)) {\r\n <fd-toolbar\r\n class=\"global-actions\"\r\n fdType=\"transparent\"\r\n [clearBorder]=\"true\"\r\n [shouldOverflow]=\"deviceSize === 's'\"\r\n >\r\n @if (isAnonymous === false && canSaveGridSetting) {\r\n <fd-popover fd-toolbar-item #popover fdOverflowPriority=\"never\">\r\n <fd-popover-control>\r\n <div style=\"display: flex; align-items: center\">\r\n <h3 class=\"header-search\" [attr.rtl]=\"rtl\" fd-title>\r\n {{\r\n selectedSearchPanelSettings?.IsStandard\r\n ? ''\r\n : selectedSearchPanelSettings?.Title\r\n }}\r\n @if (searchPanelMoChanged) {\r\n <strong>*</strong>\r\n }\r\n </h3>\r\n <button\r\n fd-button\r\n glyph=\"slim-arrow-down\"\r\n fdType=\"transparent\"\r\n [fdContentDensity]=\"contentDensity\"\r\n ></button>\r\n </div>\r\n </fd-popover-control>\r\n <fd-popover-body mobile>\r\n <div fd-popover-body-header>\r\n <div fd-bar [fdCozy]>\r\n <div fd-bar-left>\r\n <fd-bar-element>{{ 'Filters' | bbbTranslate }}</fd-bar-element>\r\n </div>\r\n </div>\r\n </div>\r\n <ul fd-list style=\"min-height: 200px; background-color: var(--sapBackgroundColor, #f7f7f7)\">\r\n @for (option of allSearchPanelSettings; track option) {\r\n <li\r\n fd-list-item\r\n [selected]=\"option.Id === selectedSearchPanelSettingsId\"\r\n (click)=\"onSelectSearchPanelSettings(option.Id, popover)\"\r\n >\r\n <span fd-list-title>{{ option.Title }}</span>\r\n </li>\r\n }\r\n </ul>\r\n <div fd-popover-body-footer>\r\n <div fd-bar [barDesign]=\"'footer'\" [fdCozy]>\r\n @if (selectedSearchPanelSettings) {\r\n <div fd-bar-right>\r\n @if (!selectedSearchPanelSettings.IsPrimary && searchPanelMoChanged) {\r\n <fd-button-bar\r\n [label]=\"'Save' | bbbTranslate\"\r\n fdType=\"emphasized\"\r\n (click)=\"onFilterSave(popover)\"\r\n >\r\n </fd-button-bar>\r\n } @if (searchPanelMoChanged) {\r\n <fd-button-bar\r\n [label]=\"'SaveAs' | bbbTranslate\"\r\n [fdType]=\"\r\n selectedSearchPanelSettings.IsDefault ? 'emphasized' : 'transparent'\r\n \"\r\n (click)=\"onFilterSaveAs(popover)\"\r\n >\r\n </fd-button-bar>\r\n }\r\n <fd-button-bar\r\n [label]=\"'Manage' | bbbTranslate\"\r\n fdkInitialFocus\r\n fdType=\"transparent\"\r\n (click)=\"onManageFilters(popover)\"\r\n >\r\n </fd-button-bar>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </fd-popover-body>\r\n </fd-popover>\r\n } @if (deviceSize !== 's') {\r\n <fd-toolbar-spacer></fd-toolbar-spacer>\r\n } @if (isMobile && searchPanelUi) {\r\n <button\r\n fd-button\r\n fd-toolbar-item\r\n fdOverflowPriority=\"never\"\r\n (click)=\"onShowSearchpanelDialog()\"\r\n [glyph]=\"'filter'\"\r\n [fdContentDensity]=\"contentDensity\"\r\n ></button>\r\n } @if (!isMobile && !sideContentMode && !simpleSearchPanel && searchPanelUi) {\r\n <button\r\n fd-button\r\n fd-toolbar-item\r\n fdOverflowPriority=\"never\"\r\n fdType=\"emphasized\"\r\n [label]=\"'Search' | bbbTranslate\"\r\n (click)=\"onSearch()\"\r\n [fdContentDensity]=\"contentDensity\"\r\n ></button>\r\n } @if (!isMobile && !sideContentMode && searchPanelUi) {\r\n <button\r\n fd-button\r\n fd-toolbar-item\r\n fdType=\"transparent\"\r\n fdOverflowPriority=\"low\"\r\n [label]=\"'Filters' | bbbTranslate\"\r\n (click)=\"onShowFilterFieldsSetting()\"\r\n [fdOverflowGroup]=\"1\"\r\n [fdContentDensity]=\"contentDensity\"\r\n ></button>\r\n } @if (!isMobile && !sideContentMode && searchPanelUi) {\r\n <button\r\n fd-button\r\n fd-toolbar-item\r\n fdType=\"transparent\"\r\n fdOverflowPriority=\"low\"\r\n [label]=\"'Clear' | bbbTranslate\"\r\n (click)=\"onClearSearch()\"\r\n [fdOverflowGroup]=\"1\"\r\n [fdContentDensity]=\"contentDensity\"\r\n ></button>\r\n } @if (!isMobile && !sideContentMode && searchPanelUi) {\r\n <button\r\n fd-button\r\n fd-toolbar-item\r\n fdType=\"transparent\"\r\n [label]=\"hideSearchPanel ? ('Show' | bbbTranslate) : ('Hide' | bbbTranslate)\"\r\n (click)=\"onHideSearchPanelClick()\"\r\n fdOverflowPriority=\"low\"\r\n [fdOverflowGroup]=\"1\"\r\n [fdContentDensity]=\"contentDensity\"\r\n ></button>\r\n }\r\n </fd-toolbar>\r\n }\r\n </fd-dynamic-page-global-actions>\r\n <fd-dynamic-page-layout-actions>\r\n <fd-toolbar fdType=\"transparent\" [clearBorder]=\"true\">\r\n <button fd-button fdType=\"transparent\" aria-label=\"Close\" (click)=\"closeEvent.emit()\" title=\"Close\">\r\n <i [class]=\"'sap-icon--' + (isMobile ? (rtl ? 'arrow-right' : 'arrow-left') : 'decline')\"></i>\r\n </button>\r\n </fd-toolbar>\r\n </fd-dynamic-page-layout-actions>\r\n </fd-dynamic-page-header>\r\n @if (!hideSearchPanel && searchPanelUi && !sideContentMode) {\r\n <fd-dynamic-page-subheader [pinnable]=\"true\" [collapsible]=\"false\">\r\n @if (!isMobile) {\r\n <bsu-search-panel\r\n [hideButtons]=\"!simpleSearchPanel\"\r\n [searchPanelUi]=\"searchPanelUi\"\r\n (moChanged)=\"onSearchPanelMoChanged()\"\r\n ></bsu-search-panel>\r\n }\r\n </fd-dynamic-page-subheader>\r\n } @if (!tabMode) {\r\n\r\n <fd-dynamic-page-content>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n sideContentMode ? sideContentTemplate : viewerTemplate;\r\n context: { noRenderPageing: true }\r\n \"\r\n ></ng-container>\r\n </fd-dynamic-page-content>\r\n\r\n } @if (pagingSetting?.TotalPages) {\r\n <fd-dynamic-page-footer>\r\n <!-- page footer content goes here -->\r\n <div fd-bar [barDesign]=\"'footer'\">\r\n <div fd-bar-middle>\r\n <ng-container\r\n [renderUlvPaging]=\"context\"\r\n [pagingSetting]=\"pagingSetting\"\r\n (pageChange)=\"onPageChange($event)\"\r\n ></ng-container>\r\n </div>\r\n </div>\r\n </fd-dynamic-page-footer>\r\n }\r\n </fd-dynamic-page>\r\n @if (tabMode) {\r\n <ng-container\r\n *ngTemplateOutlet=\"sideContentMode ? sideContentTemplate : viewerTemplate; context: { noRenderPageing: true }\"\r\n ></ng-container>\r\n }\r\n</ng-template>\r\n<ng-template #reportTemplate>\r\n @if (loading) {\r\n <bsu-mask size=\"s\"></bsu-mask>\r\n } @if (!hideSearchPanel && searchPanelUi && !sideContentMode) {\r\n <ng-container *ngTemplateOutlet=\"searchpanelTemplate; context: { hideButtons: false }\"></ng-container>\r\n }\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n sideContentMode ? sideContentTemplate : viewerTemplate;\r\n context: { simpleReport: 'simpleReport' }\r\n \"\r\n >\r\n </ng-container>\r\n</ng-template>\r\n<ng-template #sideContentTemplate let-simpleReport=\"simpleReport\">\r\n <fd-dynamic-side-content\r\n [class.rtl]=\"rtl\"\r\n [size]=\"deviceSize | sapSize\"\r\n fillEmptySpace\r\n [decrement]=\"'2rem'\"\r\n [disable]=\"isReportPage\"\r\n [setMinHeight]=\"true\"\r\n *untilInView=\"el\"\r\n >\r\n <fd-dynamic-side-content-side>\r\n <ng-container\r\n *ngTemplateOutlet=\"searchpanelTemplate; context: { isSearcPanelInSideContent: true }\"\r\n ></ng-container>\r\n </fd-dynamic-side-content-side>\r\n <fd-dynamic-side-content-main [style.width]=\"deviceSize !== 's' ? mainContentWidth : null\">\r\n <fd-card>\r\n <fd-card-content>\r\n <ng-container\r\n *ngTemplateOutlet=\"viewerTemplate; context: { noRenderPageing: isReportPage ? true : false }\"\r\n ></ng-container>\r\n </fd-card-content>\r\n </fd-card>\r\n </fd-dynamic-side-content-main>\r\n </fd-dynamic-side-content>\r\n</ng-template>\r\n<ng-template\r\n #searchpanelTemplate\r\n let-isSearcPanelInSideContent=\"isSearcPanelInSideContent\"\r\n let-hideButtons=\"hideButtons\"\r\n>\r\n @if (!isSearcPanelInSideContent) { @if (!hideSearchPanel && searchPanelUi) {\r\n <bsu-search-panel\r\n [searchPanelUi]=\"searchPanelUi\"\r\n [isSearcPanelInSideContent]=\"isSearcPanelInSideContent\"\r\n [hideButtons]=\"hideButtons\"\r\n (moChanged)=\"onSearchPanelMoChanged()\"\r\n ></bsu-search-panel>\r\n } } @else {\r\n <fd-card class=\"searchpanel-card\">\r\n <fd-card-header>\r\n <fd-card-main-header>\r\n <h2 fd-card-title>\r\n <fd-icon glyph=\"filter\"></fd-icon><span>{{ 'Filter' | bbbTranslate }}</span>\r\n </h2>\r\n </fd-card-main-header>\r\n </fd-card-header>\r\n <fd-card-content style=\"flex-grow: 0\">\r\n @if (!hideSearchPanel && searchPanelUi) {\r\n <bsu-search-panel\r\n [searchPanelUi]=\"searchPanelUi\"\r\n [hideButtons]=\"true\"\r\n [isSearcPanelInSideContent]=\"isSearcPanelInSideContent\"\r\n (moChanged)=\"onSearchPanelMoChanged()\"\r\n ></bsu-search-panel>\r\n }\r\n </fd-card-content>\r\n <fd-card-footer style=\"border-bottom: none\">\r\n <button\r\n *fdCardFooterActionItem\r\n fd-button\r\n fdType=\"emphasized\"\r\n [label]=\"'Search' | bbbTranslate\"\r\n (click)=\"onSearch()\"\r\n [fdContentDensity]=\"contentDensity\"\r\n ></button>\r\n <button\r\n *fdCardFooterActionItem\r\n fd-button\r\n fdType=\"transparent\"\r\n [label]=\"('Delete' | bbbTranslate) + ' ' + ('Filters' | bbbTranslate)\"\r\n (click)=\"onClearSearch()\"\r\n [fdOverflowGroup]=\"1\"\r\n [fdContentDensity]=\"contentDensity\"\r\n ></button>\r\n </fd-card-footer>\r\n </fd-card>\r\n }\r\n</ng-template>\r\n<ng-template #viewerTemplate let-noRenderPageing=\"noRenderPageing\">\r\n <div\r\n class=\"viewer-container\"\r\n fillEmptySpace\r\n [disable]=\"!isReportPage || !fillPage\"\r\n [decrement]=\"deviceSize !== 's' ? '100px' : '75px'\"\r\n [style.height]=\"viewerLoading ? '100%' : 'auto'\"\r\n [style.min-height]=\"isReportPage ? '100%' : null\"\r\n [style.position]=\"viewerLoading ? 'relative' : null\"\r\n >\r\n @if (viewerLoading) {\r\n <bsu-mask size=\"m\"></bsu-mask>\r\n } @if (viewerControl) {\r\n <ng-container\r\n [renderUlvViewer]=\"viewerControl\"\r\n [layoutInfo]=\"layoutInfo\"\r\n [isReportPage]=\"isReportPage\"\r\n ></ng-container>\r\n }\r\n </div>\r\n @if (!noRenderPageing && pagingSetting?.TotalPages && !hidePageing && !hidePaging) {\r\n <ng-container\r\n [renderUlvPaging]=\"context\"\r\n [pagingSetting]=\"pagingSetting\"\r\n (pageChange)=\"onPageChange($event)\"\r\n ></ng-container>\r\n }\r\n</ng-template>\r\n<ng-template let-dialog let-dialogConfig=\"dialogConfig\" #searchpanelDialog>\r\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\r\n <fd-dialog-header>\r\n <h1 id=\"fd-dialog-header-10\" fd-title>{{ 'Filters' | bbbTranslate }}</h1>\r\n <button fd-dialog-close-button (click)=\"dialog.dismiss('Close button')\"></button>\r\n </fd-dialog-header>\r\n <fd-dialog-body>\r\n <bsu-search-panel\r\n [hideButtons]=\"true\"\r\n [searchPanelUi]=\"searchPanelUi\"\r\n (moChanged)=\"onSearchPanelMoChanged()\"\r\n ></bsu-search-panel>\r\n </fd-dialog-body>\r\n\r\n <fd-dialog-footer>\r\n <fd-dialog-footer-button>\r\n <button\r\n fd-button\r\n fdkInitialFocus\r\n fdType=\"emphasized\"\r\n (click)=\"dialog.dismiss(); onSearch()\"\r\n [label]=\"'Search' | bbbTranslate\"\r\n ></button>\r\n </fd-dialog-footer-button>\r\n <fd-dialog-footer-button>\r\n <button fd-button [label]=\"'Clear' | bbbTranslate\" (click)=\"onClearSearch()\"></button>\r\n </fd-dialog-footer-button>\r\n <fd-dialog-footer-button>\r\n <button\r\n fd-button\r\n fdType=\"transparent\"\r\n (click)=\"dialog.dismiss('Close button')\"\r\n [label]=\"'Cancel' | bbbTranslate\"\r\n ></button>\r\n </fd-dialog-footer-button>\r\n </fd-dialog-footer>\r\n </fd-dialog>\r\n</ng-template>\r\n", styles: [":host{display:block;height:100%;flex-grow:1}:host .searchpanel-card fd-card-header{pointer-events:none;cursor:default;padding:.5rem}:host .searchpanel-card h2[fd-card-title]{font-size:1rem;display:flex;align-items:center;gap:.5rem}:host .searchpanel-card h2[fd-card-title] fd-icon{font-size:1.2rem}:host[uiviewer=bsu-ui-card-view]>fd-dynamic-side-content{border:var(--sapList_BorderWidth) solid var(--sapList_BorderColor)}:host[uiviewer=bsu-ui-card-view]>fd-dynamic-side-content fd-dynamic-side-content-side{border-right:var(--sapList_BorderWidth) solid var(--sapList_BorderColor)}:host[uiviewer=bsu-ui-card-view]>fd-dynamic-side-content.rtl fd-dynamic-side-content-side{border-right:none;border-left:1px solid #ccc!important}:host[uiviewer=bsu-ui-card-view]>fd-dynamic-side-content fd-dynamic-side-content-main fd-card{transition:.25s background-color!important;background-color:var(--sapBackgroundColor, #f7f7f7)}:host.custom-background ::ng-deep article.fd-dynamic-page,:host.custom-background ::ng-deep fd-dynamic-page-content,:host.custom-background ::ng-deep .report-view,:host.custom-background ::ng-deep fd-dynamic-side-content-main>fd-card{background-color:transparent!important}:host>fd-dynamic-page>fd-dynamic-page-header.hide-container ::ng-deep .fd-dynamic-page__title-container{display:none}fd-dynamic-page:not(.mobile).notitle ::ng-deep>article>header .fd-dynamic-page__title-container{display:none}fd-dynamic-page:not(.mobile) ::ng-deep>article>div{display:flex;flex:1}fd-dynamic-page:not(.mobile) ::ng-deep>article>fd-tab-list>.fd-tabs__content fd-tab.is-expanded{min-height:100%;display:flex}fd-dynamic-page:not(.mobile) ::ng-deep>article>fd-tab-list>.fd-tabs__content fd-tab.is-expanded>fd-dynamic-page-content{min-height:100%}fd-dynamic-page[tabmode=true] ::ng-deep>article{height:auto!important}fd-dynamic-side-content{min-height:100%;height:auto}fd-dynamic-side-content-main ::ng-deep fd-toolbar{border:none!important}fd-dynamic-side-content-main ::ng-deep bsu-ui-table-view{padding-bottom:0!important;overflow-y:hidden}fd-dynamic-side-content-side fd-card-content{padding:.5rem}fd-dynamic-page-global-actions{flex:1;width:100%}h3[rtl=true]{margin-left:5px}h3[rtl=false]{margin-right:5px}.header-search{color:var(--sapButton_TextColor, #0854a0)!important}.filter-wrapper{border-bottom:1px solid var(--sapObjectHeader_BorderColor, #d9d9d9)}.report-toolbar-container{display:flex}.report-toolbar-container .global-actions{flex-grow:1}fd-popover-body{min-width:380px}fd-popover-body.mobile{min-width:80vw}@media (max-width: 599px){.report-toolbar-container{flex-direction:column-reverse}.report-toolbar-container .layout-actions{flex-grow:1}}\n"], dependencies: [{ kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.RenderUlvViewerDirective, selector: "[renderUlvViewer]", inputs: ["mask", "isReportPage", "layoutInfo", "renderUlvViewer"] }, { kind: "directive", type: i3.RenderUlvPaginDirective, selector: "[renderUlvPaging]", inputs: ["mask", "pagingSetting", "renderUlvPaging"], outputs: ["pageChange"] }, { kind: "directive", type: i3.UntilInViewDirective, selector: "[untilInView]", inputs: ["untilInView", "intersectionDebounce"] }, { kind: "directive", type: i3.FillEmptySpaceDirective, selector: "[fillEmptySpace]", inputs: ["containerDom", "decrement", "disable", "height", "dontUseTopBound", "setMinHeight"], outputs: ["heightChanged"], exportAs: ["fillEmptySpace"] }, { kind: "directive", type: i3.FormCloseDirective, selector: "[formClose]", inputs: ["isMobile"] }, { kind: "directive", type: i3.MobileDirective, selector: "[mobile]" }, { kind: "component", type: i4.BarComponent, selector: "[fd-bar]", inputs: ["class", "barDesign", "inPage", "inHomePage", "size"] }, { kind: "directive", type: i4.BarLeftDirective, selector: "[fd-bar-left]" }, { kind: "directive", type: i4.BarMiddleDirective, selector: "[fd-bar-middle]" }, { kind: "directive", type: i4.BarRightDirective, selector: "[fd-bar-right]" }, { kind: "directive", type: i4.BarElementDirective, selector: "fd-bar-element", inputs: ["fullWidth"] }, { kind: "component", type: i4.ButtonBarComponent, selector: "fd-button-bar", inputs: ["fullWidth", "fdType", "title", "ariaLabelledby", "id"] }, { kind: "component", type: i5.BreadcrumbComponent, selector: "fd-breadcrumb", inputs: ["reverse", "tabIndex"], outputs: ["visibleItemsCount", "hiddenItemsCount"] }, { kind: "component", type: i5.BreadcrumbItemComponent, selector: "fd-breadcrumb-item" }, { kind: "directive", type: i6.ContentDensityDirective, selector: "[fdContentDensity]:not([fdCompact]):not([fdCondensed]):not([fdCozy]), [fdCompact]:not([fdContentDensity]):not([fdCondensed]):not([fdCozy]), [fdCondensed]:not([fdContentDensity]):not([fdCompact]):not([fdCozy]), [fdCozy]:not([fdContentDensity]):not([fdCompact]):not([fdCondensed])", inputs: ["fdContentDensity", "fdCompact", "fdCondensed", "fdCozy"], exportAs: ["fdContentDensity"] }, { kind: "component", type: i7.ButtonComponent, selector: "button[fd-button], a[fd-button], span[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i8.CardComponent, selector: "fd-card", inputs: ["badge", "badgeIcon", "badgeColor", "badgeColorSecondary", "badgeStatus", "badgeAriaLabel", "secondBadge", "secondBadgeIcon", "secondBadgeColor", "secondBadgeColorSecondary", "secondBadgeStatus", "secondBadgeAriaLabel", "isLoading", "cardType", "id", "ariaRoledescription", "ariaDescription", "ariaLabel", "role", "interactive", "selected", "ariaPosinset", "ariaSetsize"], outputs: ["ariaPosinsetChange", "ariaSetsizeChange"] }, { kind: "component", type: i8.CardHeaderComponent, selector: "fd-card-header", inputs: ["ariaRoleDescription"] }, { kind: "component", type: i8.CardMainHeaderComponent, selector: "fd-card-main-header", inputs: ["interactive", "title"] }, { kind: "component", type: i8.CardContentComponent, selector: "fd-card-content" }, { kind: "directive", type: i8.CardTitleDirective, selector: "[fd-card-title]", inputs: ["id"] }, { kind: "component", type: i8.CardFooterComponent, selector: "fd-card-footer" }, { kind: "directive", type: i8.CardFooterActionItemDirective, selector: "[fdCardFooterActionItem]" }, { kind: "component", type: i9.DynamicPageComponent, selector: "fd-dynamic-page", inputs: ["disableSnapOnScroll", "ariaLabel", "ariaRoledescription", "background", "autoResponsive", "size", "offset", "expandContent", "positionRelative"] }, { kind: "component", type: i9.DynamicPageHeaderComponent, selector: "fd-dynamic-page-header", inputs: ["title", "titleWrap", "subtitle", "subtitleWrap", "headingLevel", "titleId"] }, { kind: "component", type: i9.DynamicPageGlobalActionsComponent, selector: "fd-dynamic-page-global-actions" }, { kind: "component", type: i9.DynamicPageLayoutActionsComponent, selector: "fd-dynamic-page-layout-actions" }, { kind: "component", type: i9.DynamicPageSubheaderComponent, selector: "fd-dynamic-page-subheader", inputs: ["collapsible", "pinnable", "collapsed", "expandLabel", "collapseLabel", "id", "headerAriaLabel", "pinAriaLabel", "unpinAriaLabel"], outputs: ["collapsedChange"] }, { kind: "component", type: i9.DynamicPageContentComponent, selector: "fd-dynamic-page-content", inputs: ["tabLabel", "id"] }, { kind: "component", type: i9.DynamicPageFooterComponent, selector: "fd-dynamic-page-footer" }, { kind: "component", type: i9.DynamicPageBreadcrumbComponent, selector: "fd-dynamic-page-breadcrumb" }, { kind: "component", type: i10.DynamicSideContentComponent, selector: "fd-dynamic-side-content", inputs: ["position", "size", "id"] }, { kind: "component", type: i10.DynamicSideContentSideComponent, selector: "fd-dynamic-side-content-side", inputs: ["id"] }, { kind: "component", type: i10.DynamicSideContentMainComponent, selector: "fd-dynamic-side-content-main", inputs: ["id"] }, { kind: "component", type: i11.IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "color", "background", "class", "ariaLabel", "ariaHidden"] }, { kind: "component", type: i12.ListComponent, selector: "[fd-list], [fdList]", inputs: ["dropdownMode", "multiInputMode", "mobileMode", "hasMessage", "noBorder", "navigationIndicator", "selection", "keyboardSupport", "byline", "unreadIndicator", "role"], outputs: ["focusEscapeList"] }, { kind: "component", type: i12.ListItemComponent, selector: "[fdListItem] ,[fd-list-item]", inputs: ["selected", "noData", "action", "interactive", "growing", "counter", "unread", "byline", "ariaRole", "id", "preventClick"], outputs: ["keyDown"] }, { kind: "directive", type: i12.ListTitleDirective, selector: "[fd-list-title], [fdListTitle]", inputs: ["wrap"] }, { kind: "component", type: i13.DialogComponent, selector: "fd-dialog", inputs: ["class", "dialogRef", "dialogConfig"] }, { kind: "component", type: i13.DialogBodyComponent, selector: "fd-dialog-body", inputs: ["disablePaddings"] }, { kind: "component", type: i13.DialogFooterComponent, selector: "fd-dialog-footer" }, { kind: "component", type: i13.DialogHeaderComponent, selector: "fd-dialog-header" }, { kind: "component", type: i13.DialogCloseButtonComponent, selector: "[fd-dialog-close-button]", inputs: ["mobile", "title", "ariaLabel"] }, { kind: "component", type: i14.TitleComponent, selector: "[fd-title], [fdTitle]", inputs: ["headerSize", "wrap"], exportAs: ["fd-title"] }, { kind: "directive", type: i15.InitialFocusDirective, selector: "[fdkInitialFocus]", inputs: ["fdkInitialFocus", "enabled", "focusLastElement"] }, { kind: "component", type: i16.PopoverControlComponent, selector: "fd-popover-control, [fdPopoverControl]" }, { kind: "component", type: i16.PopoverBodyComponent, selector: "fd-popover-body", inputs: ["minWidth", "maxWidth", "minHeight", "maxHeight"] }, { kind: "directive", type: i16.PopoverBodyHeaderDirective, selector: "[fdPopoverBodyHeader], [fd-popover-body-header]" }, { kind: "directive", type: i16.PopoverBodyFooterDirective, selector: "[fdPopoverBodyFooter], [fd-popover-body-footer]" }, { kind: "component", type: i16.PopoverComponent, selector: "fd-popover", inputs: ["title", "trigger", "fixedPosition", "id", "mobile", "mobileConfig", "preventSpaceKeyScroll"] }, { kind: "component", type: i17.ToolbarComponent, selector: "fd-toolbar", inputs: ["titleId", "class", "shouldOverflow", "fdType", "title", "active", "clearBorder", "forceOverflow", "tabindex", "headingLevel", "ariaLabel", "ariaLabelledBy"] }, { kind: "directive", type: i17.ToolbarItemDirective, selector: "[fd-toolbar-item], [fdOverflowGroup], [fdOverflowPriority]", inputs: ["fdOverflowPriority", "fdOverflowGroup"] }, { kind: "directive", type: i17.ToolbarSpacerDirective, selector: "fd-toolbar-spacer", inputs: ["width", "class", "fixed"] }, { kind: "component", type: i18.MaskComponent, selector: "bsu-mask", inputs: ["size", "top"] }, { kind: "component", type: i19.SearchPanelComponent, selector: "bsu-search-panel", inputs: ["searchPanelUi", "hideButtons", "isSearcPanelInSideContent"], outputs: ["moChanged"] }, { kind: "component", type: i20.BreadcrumbComponent, selector: "bsu-breadcrumb", inputs: ["breadCrumb", "allBreadCrumb", "isLast", "index"] }, { kind: "pipe", type: i2.SlicePipe, name: "slice" }, { kind: "pipe", type: i3.BbbTranslatePipe, name: "bbbTranslate" }, { kind: "pipe", type: i21.DynamicPageSizePipe, name: "dynamicPageSize" }, { kind: "pipe", type: i22.SapSizePipe, name: "sapSize" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
145
- }
146
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BarsaUlvMainComponent, decorators: [{
147
- type: Component,
148
- args: [{ selector: 'bsu-barsa-ulv-main', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<ng-container\r\n *ngTemplateOutlet=\"\r\n isReportPage ? reportPageTemplate : reportTemplate;\r\n context: {\r\n $implicit: viewerControl,\r\n tabMode: viewerControl?.Setting?.ClassNames?.CustomUi?.Parameters?.TabMode\r\n }\r\n \"\r\n>\r\n</ng-container>\r\n@if (loading) {\r\n<bsu-mask size=\"m\"></bsu-mask>\r\n}\r\n<ng-template #reportPageTemplate let-viewerControl let-tabMode=\"tabMode\">\r\n <fd-dynamic-page\r\n formClose\r\n mobile\r\n [attr.isMobile]=\"isMobile ? true : null\"\r\n [isMobile]=\"isMobile\"\r\n [size]=\"deviceSize | dynamicPageSize\"\r\n [attr.tabMode]=\"tabMode\"\r\n [autoResponsive]=\"false\"\r\n [class.notitle]=\"\r\n (!title && !searchPanelUi && !hideSearchPanel && !sideContentMode) ||\r\n (!hideSearchPanel && !title) ||\r\n hideUlvPageTitle ||\r\n sideContentMode\r\n \"\r\n >\r\n <fd-dynamic-page-header\r\n [title]=\"\r\n (title | bbbTranslate) && !hideUlvPageTitle\r\n ? (title | bbbTranslate)\r\n : isMobile && breadCrumbs.length\r\n ? breadCrumbs[breadCrumbs.length - 1].label\r\n : ''\r\n \"\r\n class=\"p-b0\" \r\n >\r\n <fd-dynamic-page-breadcrumb [class.hide]=\"isMobile\">\r\n <fd-breadcrumb>\r\n @for ( breadCrumb of breadCrumbs | slice: 0:breadCrumbs.length; track breadCrumb.url; let i =\r\n $index; let last = $last) {\r\n <fd-breadcrumb-item>\r\n <bsu-breadcrumb\r\n [index]=\"i\"\r\n [isLast]=\"last\"\r\n [breadCrumb]=\"breadCrumb\"\r\n [allBreadCrumb]=\"breadCrumbs\"\r\n ></bsu-breadcrumb>\r\n </fd-breadcrumb-item>\r\n }\r\n </fd-breadcrumb>\r\n </fd-dynamic-page-breadcrumb>\r\n <!-- <fd-dynamic-page-title-content>\u06AF\u0632\u0627\u0631\u0634 </fd-dynamic-page-title-content> -->\r\n\r\n <fd-dynamic-page-global-actions *untilInView=\"el\" style=\"min-width: auto\">\r\n <fd-toolbar [shouldOverflow]=\"true\" Style=\"display:none\"> </fd-toolbar>\r\n <!-- added this because in mobile landscape toolbar disapper -->\r\n @if (!hideSearchPanel ||( searchPanelUi && !sideContentMode)) {\r\n <fd-toolbar\r\n class=\"global-actions\"\r\n fdType=\"transparent\"\r\n [clearBorder]=\"true\"\r\n [shouldOverflow]=\"deviceSize === 's'\"\r\n >\r\n @if (isAnonymous === false && canSaveGridSetting) {\r\n <fd-popover fd-toolbar-item #popover fdOverflowPriority=\"never\">\r\n <fd-popover-control>\r\n <div style=\"display: flex; align-items: center\">\r\n <h3 class=\"header-search\" [attr.rtl]=\"rtl\" fd-title>\r\n {{\r\n selectedSearchPanelSettings?.IsStandard\r\n ? ''\r\n : selectedSearchPanelSettings?.Title\r\n }}\r\n @if (searchPanelMoChanged) {\r\n <strong>*</strong>\r\n }\r\n </h3>\r\n <button\r\n fd-button\r\n glyph=\"slim-arrow-down\"\r\n fdType=\"transparent\"\r\n [fdContentDensity]=\"contentDensity\"\r\n ></button>\r\n </div>\r\n </fd-popover-control>\r\n <fd-popover-body mobile>\r\n <div fd-popover-body-header>\r\n <div fd-bar [fdCozy]>\r\n <div fd-bar-left>\r\n <fd-bar-element>{{ 'Filters' | bbbTranslate }}</fd-bar-element>\r\n </div>\r\n </div>\r\n </div>\r\n <ul fd-list style=\"min-height: 200px; background-color: var(--sapBackgroundColor, #f7f7f7)\">\r\n @for (option of allSearchPanelSettings; track option) {\r\n <li\r\n fd-list-item\r\n [selected]=\"option.Id === selectedSearchPanelSettingsId\"\r\n (click)=\"onSelectSearchPanelSettings(option.Id, popover)\"\r\n >\r\n <span fd-list-title>{{ option.Title }}</span>\r\n </li>\r\n }\r\n </ul>\r\n <div fd-popover-body-footer>\r\n <div fd-bar [barDesign]=\"'footer'\" [fdCozy]>\r\n @if (selectedSearchPanelSettings) {\r\n <div fd-bar-right>\r\n @if (!selectedSearchPanelSettings.IsPrimary && searchPanelMoChanged) {\r\n <fd-button-bar\r\n [label]=\"'Save' | bbbTranslate\"\r\n fdType=\"emphasized\"\r\n (click)=\"onFilterSave(popover)\"\r\n >\r\n </fd-button-bar>\r\n } @if (searchPanelMoChanged) {\r\n <fd-button-bar\r\n [label]=\"'SaveAs' | bbbTranslate\"\r\n [fdType]=\"\r\n selectedSearchPanelSettings.IsDefault ? 'emphasized' : 'transparent'\r\n \"\r\n (click)=\"onFilterSaveAs(popover)\"\r\n >\r\n </fd-button-bar>\r\n }\r\n <fd-button-bar\r\n [label]=\"'Manage' | bbbTranslate\"\r\n fdkInitialFocus\r\n fdType=\"transparent\"\r\n (click)=\"onManageFilters(popover)\"\r\n >\r\n </fd-button-bar>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </fd-popover-body>\r\n </fd-popover>\r\n } @if (deviceSize !== 's') {\r\n <fd-toolbar-spacer></fd-toolbar-spacer>\r\n } @if (isMobile && searchPanelUi) {\r\n <button\r\n fd-button\r\n fd-toolbar-item\r\n fdOverflowPriority=\"never\"\r\n (click)=\"onShowSearchpanelDialog()\"\r\n [glyph]=\"'filter'\"\r\n [fdContentDensity]=\"contentDensity\"\r\n ></button>\r\n } @if (!isMobile && !sideContentMode && !simpleSearchPanel && searchPanelUi) {\r\n <button\r\n fd-button\r\n fd-toolbar-item\r\n fdOverflowPriority=\"never\"\r\n fdType=\"emphasized\"\r\n [label]=\"'Search' | bbbTranslate\"\r\n (click)=\"onSearch()\"\r\n [fdContentDensity]=\"contentDensity\"\r\n ></button>\r\n } @if (!isMobile && !sideContentMode && searchPanelUi) {\r\n <button\r\n fd-button\r\n fd-toolbar-item\r\n fdType=\"transparent\"\r\n fdOverflowPriority=\"low\"\r\n [label]=\"'Filters' | bbbTranslate\"\r\n (click)=\"onShowFilterFieldsSetting()\"\r\n [fdOverflowGroup]=\"1\"\r\n [fdContentDensity]=\"contentDensity\"\r\n ></button>\r\n } @if (!isMobile && !sideContentMode && searchPanelUi) {\r\n <button\r\n fd-button\r\n fd-toolbar-item\r\n fdType=\"transparent\"\r\n fdOverflowPriority=\"low\"\r\n [label]=\"'Clear' | bbbTranslate\"\r\n (click)=\"onClearSearch()\"\r\n [fdOverflowGroup]=\"1\"\r\n [fdContentDensity]=\"contentDensity\"\r\n ></button>\r\n } @if (!isMobile && !sideContentMode && searchPanelUi) {\r\n <button\r\n fd-button\r\n fd-toolbar-item\r\n fdType=\"transparent\"\r\n [label]=\"hideSearchPanel ? ('Show' | bbbTranslate) : ('Hide' | bbbTranslate)\"\r\n (click)=\"onHideSearchPanelClick()\"\r\n fdOverflowPriority=\"low\"\r\n [fdOverflowGroup]=\"1\"\r\n [fdContentDensity]=\"contentDensity\"\r\n ></button>\r\n }\r\n </fd-toolbar>\r\n }\r\n </fd-dynamic-page-global-actions>\r\n <fd-dynamic-page-layout-actions>\r\n <fd-toolbar fdType=\"transparent\" [clearBorder]=\"true\">\r\n <button fd-button fdType=\"transparent\" aria-label=\"Close\" (click)=\"closeEvent.emit()\" title=\"Close\">\r\n <i [class]=\"'sap-icon--' + (isMobile ? (rtl ? 'arrow-right' : 'arrow-left') : 'decline')\"></i>\r\n </button>\r\n </fd-toolbar>\r\n </fd-dynamic-page-layout-actions>\r\n </fd-dynamic-page-header>\r\n @if (!hideSearchPanel && searchPanelUi && !sideContentMode) {\r\n <fd-dynamic-page-subheader [pinnable]=\"true\" [collapsible]=\"false\">\r\n @if (!isMobile) {\r\n <bsu-search-panel\r\n [hideButtons]=\"!simpleSearchPanel\"\r\n [searchPanelUi]=\"searchPanelUi\"\r\n (moChanged)=\"onSearchPanelMoChanged()\"\r\n ></bsu-search-panel>\r\n }\r\n </fd-dynamic-page-subheader>\r\n } @if (!tabMode) {\r\n\r\n <fd-dynamic-page-content>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n sideContentMode ? sideContentTemplate : viewerTemplate;\r\n context: { noRenderPageing: true }\r\n \"\r\n ></ng-container>\r\n </fd-dynamic-page-content>\r\n\r\n } @if (pagingSetting?.TotalPages) {\r\n <fd-dynamic-page-footer>\r\n <!-- page footer content goes here -->\r\n <div fd-bar [barDesign]=\"'footer'\">\r\n <div fd-bar-middle>\r\n <ng-container\r\n [renderUlvPaging]=\"context\"\r\n [pagingSetting]=\"pagingSetting\"\r\n (pageChange)=\"onPageChange($event)\"\r\n ></ng-container>\r\n </div>\r\n </div>\r\n </fd-dynamic-page-footer>\r\n }\r\n </fd-dynamic-page>\r\n @if (tabMode) {\r\n <ng-container\r\n *ngTemplateOutlet=\"sideContentMode ? sideContentTemplate : viewerTemplate; context: { noRenderPageing: true }\"\r\n ></ng-container>\r\n }\r\n</ng-template>\r\n<ng-template #reportTemplate>\r\n @if (loading) {\r\n <bsu-mask size=\"s\"></bsu-mask>\r\n } @if (!hideSearchPanel && searchPanelUi && !sideContentMode) {\r\n <ng-container *ngTemplateOutlet=\"searchpanelTemplate; context: { hideButtons: false }\"></ng-container>\r\n }\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n sideContentMode ? sideContentTemplate : viewerTemplate;\r\n context: { simpleReport: 'simpleReport' }\r\n \"\r\n >\r\n </ng-container>\r\n</ng-template>\r\n<ng-template #sideContentTemplate let-simpleReport=\"simpleReport\">\r\n <fd-dynamic-side-content\r\n [class.rtl]=\"rtl\"\r\n [size]=\"deviceSize | sapSize\"\r\n fillEmptySpace\r\n [decrement]=\"'2rem'\"\r\n [disable]=\"isReportPage\"\r\n [setMinHeight]=\"true\"\r\n *untilInView=\"el\"\r\n >\r\n <fd-dynamic-side-content-side>\r\n <ng-container\r\n *ngTemplateOutlet=\"searchpanelTemplate; context: { isSearcPanelInSideContent: true }\"\r\n ></ng-container>\r\n </fd-dynamic-side-content-side>\r\n <fd-dynamic-side-content-main [style.width]=\"deviceSize !== 's' ? mainContentWidth : null\">\r\n <fd-card>\r\n <fd-card-content>\r\n <ng-container\r\n *ngTemplateOutlet=\"viewerTemplate; context: { noRenderPageing: isReportPage ? true : false }\"\r\n ></ng-container>\r\n </fd-card-content>\r\n </fd-card>\r\n </fd-dynamic-side-content-main>\r\n </fd-dynamic-side-content>\r\n</ng-template>\r\n<ng-template\r\n #searchpanelTemplate\r\n let-isSearcPanelInSideContent=\"isSearcPanelInSideContent\"\r\n let-hideButtons=\"hideButtons\"\r\n>\r\n @if (!isSearcPanelInSideContent) { @if (!hideSearchPanel && searchPanelUi) {\r\n <bsu-search-panel\r\n [searchPanelUi]=\"searchPanelUi\"\r\n [isSearcPanelInSideContent]=\"isSearcPanelInSideContent\"\r\n [hideButtons]=\"hideButtons\"\r\n (moChanged)=\"onSearchPanelMoChanged()\"\r\n ></bsu-search-panel>\r\n } } @else {\r\n <fd-card class=\"searchpanel-card\">\r\n <fd-card-header>\r\n <fd-card-main-header>\r\n <h2 fd-card-title>\r\n <fd-icon glyph=\"filter\"></fd-icon><span>{{ 'Filter' | bbbTranslate }}</span>\r\n </h2>\r\n </fd-card-main-header>\r\n </fd-card-header>\r\n <fd-card-content style=\"flex-grow: 0\">\r\n @if (!hideSearchPanel && searchPanelUi) {\r\n <bsu-search-panel\r\n [searchPanelUi]=\"searchPanelUi\"\r\n [hideButtons]=\"true\"\r\n [isSearcPanelInSideContent]=\"isSearcPanelInSideContent\"\r\n (moChanged)=\"onSearchPanelMoChanged()\"\r\n ></bsu-search-panel>\r\n }\r\n </fd-card-content>\r\n <fd-card-footer style=\"border-bottom: none\">\r\n <button\r\n *fdCardFooterActionItem\r\n fd-button\r\n fdType=\"emphasized\"\r\n [label]=\"'Search' | bbbTranslate\"\r\n (click)=\"onSearch()\"\r\n [fdContentDensity]=\"contentDensity\"\r\n ></button>\r\n <button\r\n *fdCardFooterActionItem\r\n fd-button\r\n fdType=\"transparent\"\r\n [label]=\"('Delete' | bbbTranslate) + ' ' + ('Filters' | bbbTranslate)\"\r\n (click)=\"onClearSearch()\"\r\n [fdOverflowGroup]=\"1\"\r\n [fdContentDensity]=\"contentDensity\"\r\n ></button>\r\n </fd-card-footer>\r\n </fd-card>\r\n }\r\n</ng-template>\r\n<ng-template #viewerTemplate let-noRenderPageing=\"noRenderPageing\">\r\n <div\r\n class=\"viewer-container\"\r\n fillEmptySpace\r\n [disable]=\"!isReportPage || !fillPage\"\r\n [decrement]=\"deviceSize !== 's' ? '100px' : '75px'\"\r\n [style.height]=\"viewerLoading ? '100%' : 'auto'\"\r\n [style.min-height]=\"isReportPage ? '100%' : null\"\r\n [style.position]=\"viewerLoading ? 'relative' : null\"\r\n >\r\n @if (viewerLoading) {\r\n <bsu-mask size=\"m\"></bsu-mask>\r\n } @if (viewerControl) {\r\n <ng-container\r\n [renderUlvViewer]=\"viewerControl\"\r\n [layoutInfo]=\"layoutInfo\"\r\n [isReportPage]=\"isReportPage\"\r\n ></ng-container>\r\n }\r\n </div>\r\n @if (!noRenderPageing && pagingSetting?.TotalPages && !hidePageing && !hidePaging) {\r\n <ng-container\r\n [renderUlvPaging]=\"context\"\r\n [pagingSetting]=\"pagingSetting\"\r\n (pageChange)=\"onPageChange($event)\"\r\n ></ng-container>\r\n }\r\n</ng-template>\r\n<ng-template let-dialog let-dialogConfig=\"dialogConfig\" #searchpanelDialog>\r\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\r\n <fd-dialog-header>\r\n <h1 id=\"fd-dialog-header-10\" fd-title>{{ 'Filters' | bbbTranslate }}</h1>\r\n <button fd-dialog-close-button (click)=\"dialog.dismiss('Close button')\"></button>\r\n </fd-dialog-header>\r\n <fd-dialog-body>\r\n <bsu-search-panel\r\n [hideButtons]=\"true\"\r\n [searchPanelUi]=\"searchPanelUi\"\r\n (moChanged)=\"onSearchPanelMoChanged()\"\r\n ></bsu-search-panel>\r\n </fd-dialog-body>\r\n\r\n <fd-dialog-footer>\r\n <fd-dialog-footer-button>\r\n <button\r\n fd-button\r\n fdkInitialFocus\r\n fdType=\"emphasized\"\r\n (click)=\"dialog.dismiss(); onSearch()\"\r\n [label]=\"'Search' | bbbTranslate\"\r\n ></button>\r\n </fd-dialog-footer-button>\r\n <fd-dialog-footer-button>\r\n <button fd-button [label]=\"'Clear' | bbbTranslate\" (click)=\"onClearSearch()\"></button>\r\n </fd-dialog-footer-button>\r\n <fd-dialog-footer-button>\r\n <button\r\n fd-button\r\n fdType=\"transparent\"\r\n (click)=\"dialog.dismiss('Close button')\"\r\n [label]=\"'Cancel' | bbbTranslate\"\r\n ></button>\r\n </fd-dialog-footer-button>\r\n </fd-dialog-footer>\r\n </fd-dialog>\r\n</ng-template>\r\n", styles: [":host{display:block;height:100%;flex-grow:1}:host .searchpanel-card fd-card-header{pointer-events:none;cursor:default;padding:.5rem}:host .searchpanel-card h2[fd-card-title]{font-size:1rem;display:flex;align-items:center;gap:.5rem}:host .searchpanel-card h2[fd-card-title] fd-icon{font-size:1.2rem}:host[uiviewer=bsu-ui-card-view]>fd-dynamic-side-content{border:var(--sapList_BorderWidth) solid var(--sapList_BorderColor)}:host[uiviewer=bsu-ui-card-view]>fd-dynamic-side-content fd-dynamic-side-content-side{border-right:var(--sapList_BorderWidth) solid var(--sapList_BorderColor)}:host[uiviewer=bsu-ui-card-view]>fd-dynamic-side-content.rtl fd-dynamic-side-content-side{border-right:none;border-left:1px solid #ccc!important}:host[uiviewer=bsu-ui-card-view]>fd-dynamic-side-content fd-dynamic-side-content-main fd-card{transition:.25s background-color!important;background-color:var(--sapBackgroundColor, #f7f7f7)}:host.custom-background ::ng-deep article.fd-dynamic-page,:host.custom-background ::ng-deep fd-dynamic-page-content,:host.custom-background ::ng-deep .report-view,:host.custom-background ::ng-deep fd-dynamic-side-content-main>fd-card{background-color:transparent!important}:host>fd-dynamic-page>fd-dynamic-page-header.hide-container ::ng-deep .fd-dynamic-page__title-container{display:none}fd-dynamic-page:not(.mobile).notitle ::ng-deep>article>header .fd-dynamic-page__title-container{display:none}fd-dynamic-page:not(.mobile) ::ng-deep>article>div{display:flex;flex:1}fd-dynamic-page:not(.mobile) ::ng-deep>article>fd-tab-list>.fd-tabs__content fd-tab.is-expanded{min-height:100%;display:flex}fd-dynamic-page:not(.mobile) ::ng-deep>article>fd-tab-list>.fd-tabs__content fd-tab.is-expanded>fd-dynamic-page-content{min-height:100%}fd-dynamic-page[tabmode=true] ::ng-deep>article{height:auto!important}fd-dynamic-side-content{min-height:100%;height:auto}fd-dynamic-side-content-main ::ng-deep fd-toolbar{border:none!important}fd-dynamic-side-content-main ::ng-deep bsu-ui-table-view{padding-bottom:0!important;overflow-y:hidden}fd-dynamic-side-content-side fd-card-content{padding:.5rem}fd-dynamic-page-global-actions{flex:1;width:100%}h3[rtl=true]{margin-left:5px}h3[rtl=false]{margin-right:5px}.header-search{color:var(--sapButton_TextColor, #0854a0)!important}.filter-wrapper{border-bottom:1px solid var(--sapObjectHeader_BorderColor, #d9d9d9)}.report-toolbar-container{display:flex}.report-toolbar-container .global-actions{flex-grow:1}fd-popover-body{min-width:380px}fd-popover-body.mobile{min-width:80vw}@media (max-width: 599px){.report-toolbar-container{flex-direction:column-reverse}.report-toolbar-container .layout-actions{flex-grow:1}}\n"] }]
149
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.DialogService }, { type: i0.Renderer2 }], propDecorators: { _dynamicPageComponent: [{
150
- type: ViewChild,
151
- args: [DynamicPageComponent]
152
- }], dialogTemplate: [{
153
- type: ViewChild,
154
- args: ['searchpanelDialog']
155
- }], _backgroundColor: [{
156
- type: HostBinding,
157
- args: ['style.background-color']
158
- }], _backgroundUrl: [{
159
- type: HostBinding,
160
- args: ['style.background-image']
161
- }], _backgroundRepeat: [{
162
- type: HostBinding,
163
- args: ['style.background-repeat']
164
- }], _customBackground: [{
165
- type: HostBinding,
166
- args: ['class.custom-background']
167
- }], viewerControl: [{
168
- type: Input
169
- }], loading: [{
170
- type: Input
171
- }], hidePaging: [{
172
- type: Input
173
- }], viewerLoading: [{
174
- type: Input
175
- }], isReportPage: [{
176
- type: Input
177
- }], cssBackground: [{
178
- type: Input
179
- }], deviceSize: [{
180
- type: Input
181
- }], title: [{
182
- type: Input
183
- }], searchPanelUi: [{
184
- type: Input
185
- }], breadCrumbs: [{
186
- type: Input
187
- }], allSearchPanelSettings: [{
188
- type: Input
189
- }], isAnonymous: [{
190
- type: Input
191
- }], canSaveGridSetting: [{
192
- type: Input
193
- }], rtl: [{
194
- type: Input
195
- }], hideUlvPageTitle: [{
196
- type: Input
197
- }], selectedSearchPanelSettings: [{
198
- type: Input
199
- }], searchPanelMoChanged: [{
200
- type: Input
201
- }], selectedSearchPanelSettingsId: [{
202
- type: Input
203
- }], hideSearchPanel: [{
204
- type: Input
205
- }], pagingSetting: [{
206
- type: Input
207
- }], contentDensity: [{
208
- type: Input
209
- }], context: [{
210
- type: Input
211
- }], isMobile: [{
212
- type: Input
213
- }], standalone: [{
214
- type: Input
215
- }], landscape: [{
216
- type: Input
217
- }], simpleSearchPanel: [{
218
- type: Input
219
- }], layoutInfo: [{
220
- type: Input
221
- }], closeEvent: [{
222
- type: Output
223
- }], searchPanelMoChange: [{
224
- type: Output
225
- }], openManageFilters: [{
226
- type: Output
227
- }], collapsedChange: [{
228
- type: Output
229
- }], hideSearchPanelClick: [{
230
- type: Output
231
- }], filterSave: [{
232
- type: Output
233
- }], filterSaveAs: [{
234
- type: Output
235
- }], pageChange: [{
236
- type: Output
237
- }], showFilterFieldsSetting: [{
238
- type: Output
239
- }], manageFilters: [{
240
- type: Output
241
- }], clearSearch: [{
242
- type: Output
243
- }], search: [{
244
- type: Output
245
- }], selectSearchPanelSettings: [{
246
- type: Output
247
- }] } });
248
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFyc2EtdWx2LW1haW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvYmFyc2EtdWx2LW1haW4vYmFyc2EtdWx2LW1haW4uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvYmFyc2EtdWx2LW1haW4vYmFyc2EtdWx2LW1haW4uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCx1QkFBdUIsRUFDdkIsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBRVosU0FBUyxFQUtULFdBQVcsRUFFZCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWlCLG9CQUFvQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUUsT0FBTyxFQUVILGFBQWEsRUFDYixpQkFBaUIsRUFFakIsUUFBUSxFQUlYLE1BQU0sc0JBQXNCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVM5QixNQUFNLE9BQU8scUJBQXNCLFNBQVEsYUFBYTtJQXFEcEQsWUFBbUIsRUFBYyxFQUFZLGNBQTZCLEVBQVUsVUFBcUI7UUFDckcsS0FBSyxFQUFFLENBQUM7UUFETyxPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQVksbUJBQWMsR0FBZCxjQUFjLENBQWU7UUFBVSxlQUFVLEdBQVYsVUFBVSxDQUFXO1FBbERsRSxxQkFBZ0IsR0FBa0IsSUFBSSxDQUFDO1FBQ3ZDLG1CQUFjLEdBQWtCLElBQUksQ0FBQztRQUNwQyxzQkFBaUIsR0FBa0IsSUFBSSxDQUFDO1FBQ3hDLHNCQUFpQixHQUFHLEtBQUssQ0FBQztRQTRCeEQsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDaEMsd0JBQW1CLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUN6QyxzQkFBaUIsR0FBRyxJ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c0JBQW5CLE1BQU07Z0JBQ0csdUJBQXVCO3NCQUFoQyxNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU07Z0JBQ0cseUJBQXlCO3NCQUFsQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIENvbXBvbmVudCxcclxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gICAgSW5wdXQsXHJcbiAgICBPdXRwdXQsXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBBZnRlclZpZXdJbml0LFxyXG4gICAgVmlld0NoaWxkLFxyXG4gICAgRWxlbWVudFJlZixcclxuICAgIE9uSW5pdCxcclxuICAgIFRlbXBsYXRlUmVmLFxyXG4gICAgUmVuZGVyZXIyLFxyXG4gICAgSG9zdEJpbmRpbmcsXHJcbiAgICBTaW1wbGVDaGFuZ2VzXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UsIER5bmFtaWNQYWdlQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlJztcclxuaW1wb3J0IHtcclxuICAgIEFiYnJldmF0aW9uRGV2aWNlU2l6ZSxcclxuICAgIEJhc2VDb21wb25lbnQsXHJcbiAgICBnZXREZXZpY2VJc01vYmlsZSxcclxuICAgIEJyZWFkQ3J1bWJJbmZvLFxyXG4gICAgQmFyc2FBcGksXHJcbiAgICBQYWdpbmdTZXR0aW5nLFxyXG4gICAgTGF5b3V0U2V0dGluZyxcclxuICAgIENzc0JhY2tncm91bmRcclxufSBmcm9tICdiYXJzYS1ub3Zpbi1yYXktY29yZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnYnN1LWJhcnNhLXVsdi1tYWluJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9iYXJzYS11bHYtbWFpbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9iYXJzYS11bHYtbWFpbi5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgICBzdGFuZGFsb25lOiBmYWxzZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQmFyc2FVbHZNYWluQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgICBAVmlld0NoaWxkKER5bmFtaWNQYWdlQ29tcG9uZW50KSBfZHluYW1pY1BhZ2VDb21wb25lbnQ6IER5bmFtaWNQYWdlQ29tcG9uZW50O1xyXG4gICAgQFZpZXdDaGlsZCgnc2VhcmNocGFuZWxEaWFsb2cnKSBkaWFsb2dUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICAgIEBIb3N0QmluZGluZygnc3R5bGUuYmFja2dyb3VuZC1jb2xvcicpIF9iYWNrZ3JvdW5kQ29sb3I6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5iYWNrZ3JvdW5kLWltYWdlJykgX2JhY2tncm91bmRVcmw6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5iYWNrZ3JvdW5kLXJlcGVhdCcpIF9iYWNrZ3JvdW5kUmVwZWF0OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuY3VzdG9tLWJhY2tncm91bmQnKSBfY3VzdG9tQmFja2dyb3VuZCA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgdmlld2VyQ29udHJvbDogYW55O1xyXG4gICAgQElucHV0KCkgbG9hZGluZzogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIGhpZGVQYWdpbmc6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSB2aWV3ZXJMb2FkaW5nOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgaXNSZXBvcnRQYWdlOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgY3NzQmFja2dyb3VuZDogQ3NzQmFja2dyb3VuZCB8IG51bGw7XHJcbiAgICBASW5wdXQoKSBkZXZpY2VTaXplOiBBYmJyZXZhdGlvbkRldmljZVNpemU7XHJcbiAgICBASW5wdXQoKSB0aXRsZTogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgc2VhcmNoUGFuZWxVaTogYW55O1xyXG4gICAgQElucHV0KCkgYnJlYWRDcnVtYnM6IEJyZWFkQ3J1bWJJbmZvW107XHJcbiAgICBASW5wdXQoKSBhbGxTZWFyY2hQYW5lbFNldHRpbmdzOiBhbnlbXTtcclxuICAgIEBJbnB1dCgpIGlzQW5vbnltb3VzOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgY2FuU2F2ZUdyaWRTZXR0aW5nOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgcnRsOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgaGlkZVVsdlBhZ2VUaXRsZTogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIHNlbGVjdGVkU2VhcmNoUGFuZWxTZXR0aW5nczogYW55O1xyXG4gICAgQElucHV0KCkgc2VhcmNoUGFuZWxNb0NoYW5nZWQ6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBzZWxlY3RlZFNlYXJjaFBhbmVsU2V0dGluZ3NJZDogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgaGlkZVNlYXJjaFBhbmVsOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgcGFnaW5nU2V0dGluZzogUGFnaW5nU2V0dGluZztcclxuICAgIEBJbnB1dCgpIGNvbnRlbnREZW5zaXR5OiBhbnk7XHJcbiAgICBASW5wdXQoKSBjb250ZXh0OiBhbnk7XHJcbiAgICBASW5wdXQoKSBpc01vYmlsZTogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIHN0YW5kYWxvbmU6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBsYW5kc2NhcGU6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBzaW1wbGVTZWFyY2hQYW5lbDogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIGxheW91dEluZm86IExheW91dFNldHRpbmc7XHJcbiAgICBAT3V0cHV0KCkgY2xvc2VFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBPdXRwdXQoKSBzZWFyY2hQYW5lbE1vQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgQE91dHB1dCgpIG9wZW5NYW5hZ2VGaWx0ZXJzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgQE91dHB1dCgpIGNvbGxhcHNlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuICAgIEBPdXRwdXQoKSBoaWRlU2VhcmNoUGFuZWxDbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBPdXRwdXQoKSBmaWx0ZXJTYXZlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgQE91dHB1dCgpIGZpbHRlclNhdmVBcyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBPdXRwdXQoKSBwYWdlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XHJcbiAgICBAT3V0cHV0KCkgc2hvd0ZpbHRlckZpZWxkc1NldHRpbmcgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBAT3V0cHV0KCkgbWFuYWdlRmlsdGVycyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBPdXRwdXQoKSBjbGVhclNlYXJjaCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBPdXRwdXQoKSBzZWFyY2ggPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBAT3V0cHV0KCkgc2VsZWN0U2VhcmNoUGFuZWxTZXR0aW5ncyA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gICAgaXNTZXJ2aWNlRGVzayA9IGZhbHNlO1xyXG4gICAgZmlsbFBhZ2UgPSBmYWxzZTtcclxuICAgIHNpZGVDb250ZW50TW9kZSA9IGZhbHNlO1xyXG4gICAgbW9iaWxlQm90dG9tQmFyOiBib29sZWFuO1xyXG4gICAgaGlkZVBhZ2Vpbmc6IGJvb2xlYW47XHJcbiAgICBtYWluQ29udGVudFdpZHRoOiBzdHJpbmc7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZWw6IEVsZW1lbnRSZWYsIHByb3RlY3RlZCBfZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSwgcHJpdmF0ZSBfcmVuZGVyZXIyOiBSZW5kZXJlcjIpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMuaXNTZXJ2aWNlRGVzayA9IEJhcnNhQXBpLkxvZ2luRm9ybURhdGEuSXNTZXJ2aWNlRGVzazsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxyXG4gICAgfVxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcclxuICAgICAgICB0aGlzLmhpZGVQYWdlaW5nID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUoXHJcbiAgICAgICAgICAgIHRoaXMuY29udGV4dCxcclxuICAgICAgICAgICAgJ1NldHRpbmcuQ2xhc3NOYW1lcy5DdXN0b21VaS5QYXJhbWV0ZXJzLkhpZGVQYWdlaW5nJyxcclxuICAgICAgICAgICAgZmFsc2VcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZmlsbFBhZ2UgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZShcclxuICAgICAgICAgICAgdGhpcy5jb250ZXh0LFxyXG4gICAgICAgICAgICAnU2V0dGluZy5DbGFzc05hbWVzLkN1c3RvbVVpLlBhcmFtZXRlcnMuRmlsbFBhZ2UnLFxyXG4gICAgICAgICAgICBmYWxzZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5zaWRlQ29udGVudE1vZGUgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZShcclxuICAgICAgICAgICAgdGhpcy5jb250ZXh0LFxyXG4gICAgICAgICAgICAnU2V0dGluZy5DbGFzc05hbWVzLkN1c3RvbVVpLlBhcmFtZXRlcnMuU2VhcmNocGFuZWxJblNpZGVDb250ZW50JyxcclxuICAgICAgICAgICAgZmFsc2VcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMubWFpbkNvbnRlbnRXaWR0aCA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLlRyeUdldFZhbHVlKFxyXG4gICAgICAgICAgICB0aGlzLmNvbnRleHQsXHJcbiAgICAgICAgICAgICdTZXR0aW5nLkNsYXNzTmFtZXMuQ3VzdG9tVWkuUGFyYW1ldGVycy5NYWluQ29udGVudFdpZHRoJyxcclxuICAgICAgICAgICAgZmFsc2VcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLmlzTW9iaWxlID0gZ2V0RGV2aWNlSXNNb2JpbGUoKTtcclxuICAgICAgICB0aGlzLm1vYmlsZUJvdHRvbUJhciA9IHRoaXMuaXNNb2JpbGUgJiYgIXRoaXMuc3RhbmRhbG9uZTtcclxuICAgIH1cclxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcclxuICAgICAgICBpZiAodGhpcy5fZHluYW1pY1BhZ2VDb21wb25lbnQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZGV2aWNlU2l6ZSA9PT0gJ3hsJyAmJiB0aGlzLl9keW5hbWljUGFnZUNvbXBvbmVudC5zaXplICE9PSAnZXh0cmEtbGFyZ2UnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9keW5hbWljUGFnZUNvbXBvbmVudC5yZWZyZXNoU2l6ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHsgY3NzQmFja2dyb3VuZCB9ID0gY2hhbmdlcztcclxuICAgICAgICBpZiAoY3NzQmFja2dyb3VuZCAmJiBjc3NCYWNrZ3JvdW5kLmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9zZXRCYWNrZ3JvdW5kKGNzc0JhY2tncm91bmQuY3VycmVudFZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25DbG9zZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNsb3NlRXZlbnQuZW1pdCgpO1xyXG4gICAgfVxyXG4gICAgb25TZWFyY2hQYW5lbE1vQ2hhbmdlZCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNlYXJjaFBhbmVsTW9DaGFuZ2UuZW1pdCgpO1xyXG4gICAgfVxyXG4gICAgb25TaG93U2VhcmNocGFuZWxEaWFsb2coKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5vcGVuRGlhbG9nKHRoaXMuZGlhbG9nVGVtcGxhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIG9wZW5EaWFsb2coZGlhbG9nOiBUZW1wbGF0ZVJlZjxhbnk+KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fZGlhbG9nU2VydmljZS5vcGVuKGRpYWxvZywge1xyXG4gICAgICAgICAgICByZXNwb25zaXZlUGFkZGluZzogdHJ1ZSxcclxuICAgICAgICAgICAgbW9iaWxlOiB0cnVlLFxyXG4gICAgICAgICAgICBhcmlhTGFiZWxsZWRCeTogJ0ZpdGxlcnMnLFxyXG4gICAgICAgICAgICBhcmlhRGVzY3JpYmVkQnk6ICdGaXRsZXJzJyxcclxuICAgICAgICAgICAgZm9jdXNUcmFwcGVkOiB0cnVlLFxyXG4gICAgICAgICAgICBjbG9zZU9uTmF2aWdhdGlvbjogdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgb25PcGVuTWFuYWdlRmlsdGVycygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9wZW5NYW5hZ2VGaWx0ZXJzLmVtaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNvbGxhcHNlZENoYW5nZShjb2xsYXBzZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNvbGxhcHNlZENoYW5nZS5lbWl0KGNvbGxhcHNlZCk7XHJcbiAgICB9XHJcbiAgICBvbkhpZGVTZWFyY2hQYW5lbENsaWNrKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaGlkZVNlYXJjaFBhbmVsQ2xpY2suZW1pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uRmlsdGVyU2F2ZShwb3BvdmVyKTogdm9pZCB7XHJcbiAgICAgICAgcG9wb3Zlci5jbG9zZSgpO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyU2F2ZS5lbWl0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25GaWx0ZXJTYXZlQXMocG9wb3Zlcik6IHZvaWQge1xyXG4gICAgICAgIHBvcG92ZXIuY2xvc2UoKTtcclxuICAgICAgICB0aGlzLmZpbHRlclNhdmVBcy5lbWl0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25TaG93RmlsdGVyRmllbGRzU2V0dGluZygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNob3dGaWx0ZXJGaWVsZHNTZXR0aW5nLmVtaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBvbk1hbmFnZUZpbHRlcnMocG9wb3Zlcik6IHZvaWQge1xyXG4gICAgICAgIHBvcG92ZXIuY2xvc2UoKTtcclxuICAgICAgICB0aGlzLm1hbmFnZUZpbHRlcnMuZW1pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2xlYXJTZWFyY2goKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jbGVhclNlYXJjaC5lbWl0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25TZWFyY2goKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zZWFyY2guZW1pdCgpO1xyXG4gICAgfVxyXG4gICAgb25QYWdlQ2hhbmdlKGU6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucGFnZUNoYW5nZS5lbWl0KGUpO1xyXG4gICAgfVxyXG4gICAgb25TZWxlY3RTZWFyY2hQYW5lbFNldHRpbmdzKHNlbGVjdGVkU2VhcmNoUGFuZWxTZXR0aW5nc0lkOiBzdHJpbmcsIHBvcG92ZXIpOiB2b2lkIHtcclxuICAgICAgICBwb3BvdmVyLmNsb3NlKCk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RTZWFyY2hQYW5lbFNldHRpbmdzLmVtaXQoc2VsZWN0ZWRTZWFyY2hQYW5lbFNldHRpbmdzSWQpO1xyXG4gICAgfVxyXG4gICAgU2V0VWlWaWV3ZXJTZWxlY3Rvcih1aVZpZXdlclNlbGVjdG9yKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIyLnNldEF0dHJpYnV0ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsICd1aXZpZXdlcicsIHVpVmlld2VyU2VsZWN0b3IpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBfc2V0QmFja2dyb3VuZChjc3NCYWNrZ3JvdW5kOiBDc3NCYWNrZ3JvdW5kKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fYmFja2dyb3VuZENvbG9yID0gY3NzQmFja2dyb3VuZC5jb2xvcjtcclxuICAgICAgICB0aGlzLl9iYWNrZ3JvdW5kVXJsID0gY3NzQmFja2dyb3VuZC51cmw7XHJcbiAgICAgICAgdGhpcy5fYmFja2dyb3VuZFJlcGVhdCA9IGNzc0JhY2tncm91bmQucmVwZWF0ID09PSBmYWxzZSA/ICduby1yZXBlYXQnIDogJ3JlcGVhdCc7XHJcbiAgICAgICAgdGhpcy5fY3VzdG9tQmFja2dyb3VuZCA9IHRydWU7XHJcbiAgICB9XHJcbn1cclxuIiwiPG5nLWNvbnRhaW5lclxyXG4gICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcclxuICAgICAgICBpc1JlcG9ydFBhZ2UgPyByZXBvcnRQYWdlVGVtcGxhdGUgOiByZXBvcnRUZW1wbGF0ZTtcclxuICAgICAgICBjb250ZXh0OiB7XHJcbiAgICAgICAgICAgICRpbXBsaWNpdDogdmlld2VyQ29udHJvbCxcclxuICAgICAgICAgICAgdGFiTW9kZTogdmlld2VyQ29udHJvbD8uU2V0dGluZz8uQ2xhc3NOYW1lcz8uQ3VzdG9tVWk/LlBhcmFtZXRlcnM/LlRhYk1vZGVcclxuICAgICAgICB9XHJcbiAgICBcIlxyXG4+XHJcbjwvbmctY29udGFpbmVyPlxyXG5AaWYgKGxvYWRpbmcpIHtcclxuPGJzdS1tYXNrIHNpemU9XCJtXCI+PC9ic3UtbWFzaz5cclxufVxyXG48bmctdGVtcGxhdGUgI3JlcG9ydFBhZ2VUZW1wbGF0ZSBsZXQtdmlld2VyQ29udHJvbCBsZXQtdGFiTW9kZT1cInRhYk1vZGVcIj5cclxuICAgIDxmZC1keW5hbWljLXBhZ2VcclxuICAgICAgICBmb3JtQ2xvc2VcclxuICAgICAgICBtb2JpbGVcclxuICAgICAgICBbYXR0ci5pc01vYmlsZV09XCJpc01vYmlsZSA/IHRydWUgOiBudWxsXCJcclxuICAgICAgICBbaXNNb2JpbGVdPVwiaXNNb2JpbGVcIlxyXG4gICAgICAgIFtzaXplXT1cImRldmljZVNpemUgfCBkeW5hbWljUGFnZVNpemVcIlxyXG4gICAgICAgIFthdHRyLnRhYk1vZGVdPVwidGFiTW9kZVwiXHJcbiAgICAgICAgW2F1dG9SZXNwb25zaXZlXT1cImZhbHNlXCJcclxuICAgICAgICBbY2xhc3Mubm90aXRsZV09XCJcclxuICAgICAgICAgICAgKCF0aXRsZSAmJiAhc2VhcmNoUGFuZWxVaSAmJiAhaGlkZVNlYXJjaFBhbmVsICYmICFzaWRlQ29udGVudE1vZGUpIHx8XHJcbiAgICAgICAgICAgICghaGlkZVNlYXJjaFBhbmVsICYmICF0aXRsZSkgfHxcclxuICAgICAgICAgICAgaGlkZVVsdlBhZ2VUaXRsZSB8fFxyXG4gICAgICAgICAgICBzaWRlQ29udGVudE1vZGVcclxuICAgICAgICBcIlxyXG4gICAgPlxyXG4gICAgICAgIDxmZC1keW5hbWljLXBhZ2UtaGVhZGVyXHJcbiAgICAgICAgICAgIFt0aXRsZV09XCJcclxuICAgICAgICAgICAgICAgICh0aXRsZSB8IGJiYlRyYW5zbGF0ZSkgJiYgIWhpZGVVbHZQYWdlVGl0bGVcclxuICAgICAgICAgICAgICAgICAgICA/ICh0aXRsZSB8IGJiYlRyYW5zbGF0ZSlcclxuICAgICAgICAgICAgICAgICAgICA6IGlzTW9iaWxlICYmIGJyZWFkQ3J1bWJzLmxlbmd0aFxyXG4gICAgICAgICAgICAgICAgICAgID8gYnJlYWRDcnVtYnNbYnJlYWRDcnVtYnMubGVuZ3RoIC0gMV0ubGFiZWxcclxuICAgICAgICAgICAgICAgICAgICA6ICcnXHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwicC1iMFwiICAgICAgICAgICAgXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8ZmQtZHluYW1pYy1wYWdlLWJyZWFkY3J1bWIgW2NsYXNzLmhpZGVdPVwiaXNNb2JpbGVcIj5cclxuICAgICAgICAgICAgICAgIDxmZC1icmVhZGNydW1iPlxyXG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKCBicmVhZENydW1iIG9mIGJyZWFkQ3J1bWJzIHwgc2xpY2U6IDA6YnJlYWRDcnVtYnMubGVuZ3RoOyB0cmFjayBicmVhZENydW1iLnVybDsgbGV0IGkgPVxyXG4gICAgICAgICAgICAgICAgICAgICRpbmRleDsgbGV0IGxhc3QgPSAkbGFzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIDxmZC1icmVhZGNydW1iLWl0ZW0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxic3UtYnJlYWRjcnVtYlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2luZGV4XT1cImlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzTGFzdF09XCJsYXN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFticmVhZENydW1iXT1cImJyZWFkQ3J1bWJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FsbEJyZWFkQ3J1bWJdPVwiYnJlYWRDcnVtYnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9ic3UtYnJlYWRjcnVtYj5cclxuICAgICAgICAgICAgICAgICAgICA8L2ZkLWJyZWFkY3J1bWItaXRlbT5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA8L2ZkLWJyZWFkY3J1bWI+XHJcbiAgICAgICAgICAgIDwvZmQtZHluYW1pYy1wYWdlLWJyZWFkY3J1bWI+XHJcbiAgICAgICAgICAgIDwhLS0gPGZkLWR5bmFtaWMtcGFnZS10aXRsZS1jb250ZW50Ptqv2LLYp9ix2LQgPC9mZC1keW5hbWljLXBhZ2UtdGl0bGUtY29udGVudD4gLS0+XHJcblxyXG4gICAgICAgICAgICA8ZmQtZHluYW1pYy1wYWdlLWdsb2JhbC1hY3Rpb25zICp1bnRpbEluVmlldz1cImVsXCIgc3R5bGU9XCJtaW4td2lkdGg6IGF1dG9cIj5cclxuICAgICAgICAgICAgICAgIDxmZC10b29sYmFyIFtzaG91bGRPdmVyZmxvd109XCJ0cnVlXCIgU3R5bGU9XCJkaXNwbGF5Om5vbmVcIj4gPC9mZC10b29sYmFyPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBhZGRlZCB0aGlzIGJlY2F1c2UgaW4gbW9iaWxlIGxhbmRzY2FwZSB0b29sYmFyIGRpc2FwcGVyIC0tPlxyXG4gICAgICAgICAgICAgICAgQGlmICghaGlkZVNlYXJjaFBhbmVsIHx8KCBzZWFyY2hQYW5lbFVpICYmICFzaWRlQ29udGVudE1vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICA8ZmQtdG9vbGJhclxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZ2xvYmFsLWFjdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcclxuICAgICAgICAgICAgICAgICAgICBbY2xlYXJCb3JkZXJdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3Nob3VsZE92ZXJmbG93XT1cImRldmljZVNpemUgPT09ICdzJ1wiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgQGlmIChpc0Fub255bW91cyA9PT0gZmFsc2UgJiYgY2FuU2F2ZUdyaWRTZXR0aW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgPGZkLXBvcG92ZXIgZmQtdG9vbGJhci1pdGVtICNwb3BvdmVyIGZkT3ZlcmZsb3dQcmlvcml0eT1cIm5ldmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1wb3BvdmVyLWNvbnRyb2w+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cImhlYWRlci1zZWFyY2hcIiBbYXR0ci5ydGxdPVwicnRsXCIgZmQtdGl0bGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFNlYXJjaFBhbmVsU2V0dGluZ3M/LklzU3RhbmRhcmRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICcnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzZWxlY3RlZFNlYXJjaFBhbmVsU2V0dGluZ3M/LlRpdGxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoc2VhcmNoUGFuZWxNb0NoYW5nZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz4qPC9zdHJvbmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoPVwic2xpbS1hcnJvdy1kb3duXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmRDb250ZW50RGVuc2l0eV09XCJjb250ZW50RGVuc2l0eVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZmQtcG9wb3Zlci1jb250cm9sPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZmQtcG9wb3Zlci1ib2R5IG1vYmlsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZmQtcG9wb3Zlci1ib2R5LWhlYWRlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGZkLWJhciBbZmRDb3p5XT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBmZC1iYXItbGVmdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1iYXItZWxlbWVudD57eyAnRmlsdGVycycgfCBiYmJUcmFuc2xhdGUgfX08L2ZkLWJhci1lbGVtZW50PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGZkLWxpc3Qgc3R5bGU9XCJtaW4taGVpZ2h0OiAyMDBweDsgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc2FwQmFja2dyb3VuZENvbG9yLCAjZjdmN2Y3KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKG9wdGlvbiBvZiBhbGxTZWFyY2hQYW5lbFNldHRpbmdzOyB0cmFjayBvcHRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmQtbGlzdC1pdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJvcHRpb24uSWQgPT09IHNlbGVjdGVkU2VhcmNoUGFuZWxTZXR0aW5nc0lkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uU2VsZWN0U2VhcmNoUGFuZWxTZXR0aW5ncyhvcHRpb24uSWQsIHBvcG92ZXIpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGZkLWxpc3QtdGl0bGU+e3sgb3B0aW9uLlRpdGxlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZmQtcG9wb3Zlci1ib2R5LWZvb3Rlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGZkLWJhciBbYmFyRGVzaWduXT1cIidmb290ZXInXCIgW2ZkQ296eV0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoc2VsZWN0ZWRTZWFyY2hQYW5lbFNldHRpbmdzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZmQtYmFyLXJpZ2h0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmICghc2VsZWN0ZWRTZWFyY2hQYW5lbFNldHRpbmdzLklzUHJpbWFyeSAmJiBzZWFyY2hQYW5lbE1vQ2hhbmdlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZkLWJ1dHRvbi1iYXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ1NhdmUnIHwgYmJiVHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZFR5cGU9XCJlbXBoYXNpemVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25GaWx0ZXJTYXZlKHBvcG92ZXIpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmQtYnV0dG9uLWJhcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGlmIChzZWFyY2hQYW5lbE1vQ2hhbmdlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZkLWJ1dHRvbi1iYXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ1NhdmVBcycgfCBiYmJUcmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmZFR5cGVdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkU2VhcmNoUGFuZWxTZXR0aW5ncy5Jc0RlZmF1bHQgPyAnZW1waGFzaXplZCcgOiAndHJhbnNwYXJlbnQnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25GaWx0ZXJTYXZlQXMocG9wb3ZlcilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mZC1idXR0b24tYmFyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZkLWJ1dHRvbi1iYXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ01hbmFnZScgfCBiYmJUcmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZka0luaXRpYWxGb2N1c1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25NYW5hZ2VGaWx0ZXJzKHBvcG92ZXIpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmQtYnV0dG9uLWJhcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2ZkLXBvcG92ZXItYm9keT5cclxuICAgICAgICAgICAgICAgICAgICA8L2ZkLXBvcG92ZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgfSBAaWYgKGRldmljZVNpemUgIT09ICdzJykge1xyXG4gICAgICAgICAgICAgICAgICAgIDxmZC10b29sYmFyLXNwYWNlcj48L2ZkLXRvb2xiYXItc3BhY2VyPlxyXG4gICAgICAgICAgICAgICAgICAgIH0gQGlmIChpc01vYmlsZSAmJiBzZWFyY2hQYW5lbFVpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgZmQtdG9vbGJhci1pdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZkT3ZlcmZsb3dQcmlvcml0eT1cIm5ldmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uU2hvd1NlYXJjaHBhbmVsRGlhbG9nKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZ2x5cGhdPVwiJ2ZpbHRlcidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZmRDb250ZW50RGVuc2l0eV09XCJjb250ZW50RGVuc2l0eVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIH0gQGlmICghaXNNb2JpbGUgJiYgIXNpZGVDb250ZW50TW9kZSAmJiAhc2ltcGxlU2VhcmNoUGFuZWwgJiYgc2VhcmNoUGFuZWxVaSkge1xyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZkLXRvb2xiYXItaXRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmZE92ZXJmbG93UHJpb3JpdHk9XCJuZXZlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZkVHlwZT1cImVtcGhhc2l6ZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ1NlYXJjaCcgfCBiYmJUcmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25TZWFyY2goKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmZENvbnRlbnREZW5zaXR5XT1cImNvbnRlbnREZW5zaXR5XCJcclxuICAgICAgICAgICAgICAgICAgICA+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgfSBAaWYgKCFpc01vYmlsZSAmJiAhc2lkZUNvbnRlbnRNb2RlICYmIHNlYXJjaFBhbmVsVWkpIHtcclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmZE92ZXJmbG93UHJpb3JpdHk9XCJsb3dcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ0ZpbHRlcnMnIHwgYmJiVHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uU2hvd0ZpbHRlckZpZWxkc1NldHRpbmcoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmZE92ZXJmbG93R3JvdXBdPVwiMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmZENvbnRlbnREZW5zaXR5XT1cImNvbnRlbnREZW5zaXR5XCJcclxuICAgICAgICAgICAgICAgICAgICA+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgfSBAaWYgKCFpc01vYmlsZSAmJiAhc2lkZUNvbnRlbnRNb2RlICYmIHNlYXJjaFBhbmVsVWkpIHtcclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmZE92ZXJmbG93UHJpb3JpdHk9XCJsb3dcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ0NsZWFyJyB8IGJiYlRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNsZWFyU2VhcmNoKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZmRPdmVyZmxvd0dyb3VwXT1cIjFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZmRDb250ZW50RGVuc2l0eV09XCJjb250ZW50RGVuc2l0eVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIH0gQGlmICghaXNNb2JpbGUgJiYgIXNpZGVDb250ZW50TW9kZSAmJiBzZWFyY2hQYW5lbFVpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgZmQtdG9vbGJhci1pdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImhpZGVTZWFyY2hQYW5lbCA/ICgnU2hvdycgfCBiYmJUcmFuc2xhdGUpIDogKCdIaWRlJyB8IGJiYlRyYW5zbGF0ZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25IaWRlU2VhcmNoUGFuZWxDbGljaygpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmRPdmVyZmxvd1ByaW9yaXR5PVwibG93XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2ZkT3ZlcmZsb3dHcm91cF09XCIxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2ZkQ29udGVudERlbnNpdHldPVwiY29udGVudERlbnNpdHlcIlxyXG4gICAgICAgICAgICAgICAgICAgID48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA8L2ZkLXRvb2xiYXI+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvZmQtZHluYW1pYy1wYWdlLWdsb2JhbC1hY3Rpb25zPlxyXG4gICAgICAgICAgICA8ZmQtZHluYW1pYy1wYWdlLWxheW91dC1hY3Rpb25zPlxyXG4gICAgICAgICAgICAgICAgPGZkLXRvb2xiYXIgZmRUeXBlPVwidHJhbnNwYXJlbnRcIiBbY2xlYXJCb3JkZXJdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gZmQtYnV0dG9uIGZkVHlwZT1cInRyYW5zcGFyZW50XCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgKGNsaWNrKT1cImNsb3NlRXZlbnQuZW1pdCgpXCIgdGl0bGU9XCJDbG9zZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBbY2xhc3NdPVwiJ3NhcC1pY29uLS0nICsgKGlzTW9iaWxlID8gKHJ0bCA/ICdhcnJvdy1yaWdodCcgOiAnYXJyb3ctbGVmdCcpIDogJ2RlY2xpbmUnKVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZmQtdG9vbGJhcj5cclxuICAgICAgICAgICAgPC9mZC1keW5hbWljLXBhZ2UtbGF5b3V0LWFjdGlvbnM+XHJcbiAgICAgICAgPC9mZC1keW5hbWljLXBhZ2UtaGVhZGVyPlxyXG4gICAgICAgIEBpZiAoIWhpZGVTZWFyY2hQYW5lbCAmJiBzZWFyY2hQYW5lbFVpICYmICFzaWRlQ29udGVudE1vZGUpIHtcclxuICAgICAgICA8ZmQtZHluYW1pYy1wYWdlLXN1YmhlYWRlciBbcGlubmFibGVdPVwidHJ1ZVwiIFtjb2xsYXBzaWJsZV09XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICBAaWYgKCFpc01vYmlsZSkge1xyXG4gICAgICAgICAgICA8YnN1LXNlYXJjaC1wYW5lbFxyXG4gICAgICAgICAgICAgICAgW2hpZGVCdXR0b25zXT1cIiFzaW1wbGVTZWFyY2hQYW5lbFwiXHJcbiAgICAgICAgICAgICAgICBbc2VhcmNoUGFuZWxVaV09XCJzZWFyY2hQYW5lbFVpXCJcclxuICAgICAgICAgICAgICAgIChtb0NoYW5nZWQpPVwib25TZWFyY2hQYW5lbE1vQ2hhbmdlZCgpXCJcclxuICAgICAgICAgICAgPjwvYnN1LXNlYXJjaC1wYW5lbD5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIDwvZmQtZHluYW1pYy1wYWdlLXN1YmhlYWRlcj5cclxuICAgICAgICB9IEBpZiAoIXRhYk1vZGUpIHtcclxuXHJcbiAgICAgICAgPGZkLWR5bmFtaWMtcGFnZS1jb250ZW50PlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxyXG4gICAgICAgICAgICAgICAgICAgIHNpZGVDb250ZW50TW9kZSA/IHNpZGVDb250ZW50VGVtcGxhdGUgOiB2aWV3ZXJUZW1wbGF0ZTtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7IG5vUmVuZGVyUGFnZWluZzogdHJ1ZSB9XHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9mZC1keW5hbWljLXBhZ2UtY29udGVudD5cclxuXHJcbiAgICAgICAgfSBAaWYgKHBhZ2luZ1NldHRpbmc/LlRvdGFsUGFnZXMpIHtcclxuICAgICAgICA8ZmQtZHluYW1pYy1wYWdlLWZvb3Rlcj5cclxuICAgICAgICAgICAgPCEtLSBwYWdlIGZvb3RlciBjb250ZW50IGdvZXMgaGVyZSAtLT5cclxuICAgICAgICAgICAgPGRpdiBmZC1iYXIgW2JhckRlc2lnbl09XCInZm9vdGVyJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBmZC1iYXItbWlkZGxlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3JlbmRlclVsdlBhZ2luZ109XCJjb250ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3BhZ2luZ1NldHRpbmddPVwicGFnaW5nU2V0dGluZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChwYWdlQ2hhbmdlKT1cIm9uUGFnZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9mZC1keW5hbWljLXBhZ2UtZm9vdGVyPlxyXG4gICAgICAgIH1cclxuICAgIDwvZmQtZHluYW1pYy1wYWdlPlxyXG4gICAgQGlmICh0YWJNb2RlKSB7XHJcbiAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzaWRlQ29udGVudE1vZGUgPyBzaWRlQ29udGVudFRlbXBsYXRlIDogdmlld2VyVGVtcGxhdGU7IGNvbnRleHQ6IHsgbm9SZW5kZXJQYWdlaW5nOiB0cnVlIH1cIlxyXG4gICAgPjwvbmctY29udGFpbmVyPlxyXG4gICAgfVxyXG48L25nLXRlbXBsYXRlPlxyXG48bmctdGVtcGxhdGUgI3JlcG9ydFRlbXBsYXRlPlxyXG4gICAgQGlmIChsb2FkaW5nKSB7XHJcbiAgICA8YnN1LW1hc2sgc2l6ZT1cInNcIj48L2JzdS1tYXNrPlxyXG4gICAgfSBAaWYgKCFoaWRlU2VhcmNoUGFuZWwgJiYgc2VhcmNoUGFuZWxVaSAmJiAhc2lkZUNvbnRlbnRNb2RlKSB7XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2VhcmNocGFuZWxUZW1wbGF0ZTsgY29udGV4dDogeyBoaWRlQnV0dG9uczogZmFsc2UgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgfVxyXG4gICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXHJcbiAgICAgICAgICAgIHNpZGVDb250ZW50TW9kZSA/IHNpZGVDb250ZW50VGVtcGxhdGUgOiB2aWV3ZXJUZW1wbGF0ZTtcclxuICAgICAgICAgICAgY29udGV4dDogeyBzaW1wbGVSZXBvcnQ6ICdzaW1wbGVSZXBvcnQnIH1cclxuICAgICAgICBcIlxyXG4gICAgPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjxuZy10ZW1wbGF0ZSAjc2lkZUNvbnRlbnRUZW1wbGF0ZSBsZXQtc2ltcGxlUmVwb3J0PVwic2ltcGxlUmVwb3J0XCI+XHJcbiAgICA8ZmQtZHluYW1pYy1zaWRlLWNvbnRlbnRcclxuICAgICAgICBbY2xhc3MucnRsXT1cInJ0bFwiXHJcbiAgICAgICAgW3NpemVdPVwiZGV2aWNlU2l6ZSB8IHNhcFNpemVcIlxyXG4gICAgICAgIGZpbGxFbXB0eVNwYWNlXHJcbiAgICAgICAgW2RlY3JlbWVudF09XCInMnJlbSdcIlxyXG4gICAgICAgIFtkaXNhYmxlXT1cImlzUmVwb3J0UGFnZVwiXHJcbiAgICAgICAgW3NldE1pbkhlaWdodF09XCJ0cnVlXCJcclxuICAgICAgICAqdW50aWxJblZpZXc9XCJlbFwiXHJcbiAgICA+XHJcbiAgICAgICAgPGZkLWR5bmFtaWMtc2lkZS1jb250ZW50LXNpZGU+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwic2VhcmNocGFuZWxUZW1wbGF0ZTsgY29udGV4dDogeyBpc1NlYXJjUGFuZWxJblNpZGVDb250ZW50OiB0cnVlIH1cIlxyXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9mZC1keW5hbWljLXNpZGUtY29udGVudC1zaWRlPlxyXG4gICAgICAgIDxmZC1keW5hbWljLXNpZGUtY29udGVudC1tYWluIFtzdHlsZS53aWR0aF09XCJkZXZpY2VTaXplICE9PSAncycgPyBtYWluQ29udGVudFdpZHRoIDogbnVsbFwiPlxyXG4gICAgICAgICAgICA8ZmQtY2FyZD5cclxuICAgICAgICAgICAgICAgIDxmZC1jYXJkLWNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInZpZXdlclRlbXBsYXRlOyBjb250ZXh0OiB7IG5vUmVuZGVyUGFnZWluZzogaXNSZXBvcnRQYWdlID8gdHJ1ZSA6IGZhbHNlIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvZmQtY2FyZC1jb250ZW50PlxyXG4gICAgICAgICAgICA8L2ZkLWNhcmQ+XHJcbiAgICAgICAgPC9mZC1keW5hbWljLXNpZGUtY29udGVudC1tYWluPlxyXG4gICAgPC9mZC1keW5hbWljLXNpZGUtY29udGVudD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPG5nLXRlbXBsYXRlXHJcbiAgICAjc2VhcmNocGFuZWxUZW1wbGF0ZVxyXG4gICAgbGV0LWlzU2VhcmNQYW5lbEluU2lkZUNvbnRlbnQ9XCJpc1NlYXJjUGFuZWxJblNpZGVDb250ZW50XCJcclxuICAgIGxldC1oaWRlQnV0dG9ucz1cImhpZGVCdXR0b25zXCJcclxuPlxyXG4gICAgQGlmICghaXNTZWFyY1BhbmVsSW5TaWRlQ29udGVudCkgeyBAaWYgKCFoaWRlU2VhcmNoUGFuZWwgJiYgc2VhcmNoUGFuZWxVaSkge1xyXG4gICAgPGJzdS1zZWFyY2gtcGFuZWxcclxuICAgICAgICBbc2VhcmNoUGFuZWxVaV09XCJzZWFyY2hQYW5lbFVpXCJcclxuICAgICAgICBbaXNTZWFyY1BhbmVsSW5TaWRlQ29udGVudF09XCJpc1NlYXJjUGFuZWxJblNpZGVDb250ZW50XCJcclxuICAgICAgICBbaGlkZUJ1dHRvbnNdPVwiaGlkZUJ1dHRvbnNcIlxyXG4gICAgICAgIChtb0NoYW5nZWQpPVwib25TZWFyY2hQYW5lbE1vQ2hhbmdlZCgpXCJcclxuICAgID48L2JzdS1zZWFyY2gtcGFuZWw+XHJcbiAgICB9IH0gQGVsc2Uge1xyXG4gICAgPGZkLWNhcmQgY2xhc3M9XCJzZWFyY2hwYW5lbC1jYXJkXCI+XHJcbiAgICAgICAgPGZkLWNhcmQtaGVhZGVyPlxyXG4gICAgICAgICAgICA8ZmQtY2FyZC1tYWluLWhlYWRlcj5cclxuICAgICAgICAgICAgICAgIDxoMiBmZC1jYXJkLXRpdGxlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxmZC1pY29uIGdseXBoPVwiZmlsdGVyXCI+PC9mZC1pY29uPjxzcGFuPnt7ICdGaWx0ZXInIHwgYmJiVHJhbnNsYXRlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9oMj5cclxuICAgICAgICAgICAgPC9mZC1jYXJkLW1haW4taGVhZGVyPlxyXG4gICAgICAgIDwvZmQtY2FyZC1oZWFkZXI+XHJcbiAgICAgICAgPGZkLWNhcmQtY29udGVudCBzdHlsZT1cImZsZXgtZ3JvdzogMFwiPlxyXG4gICAgICAgICAgICBAaWYgKCFoaWRlU2VhcmNoUGFuZWwgJiYgc2VhcmNoUGFuZWxVaSkge1xyXG4gICAgICAgICAgICA8YnN1LXNlYXJjaC1wYW5lbFxyXG4gICAgICAgICAgICAgICAgW3NlYXJjaFBhbmVsVWldPVwic2VhcmNoUGFuZWxVaVwiXHJcbiAgICAgICAgICAgICAgICBbaGlkZUJ1dHRvbnNdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICBbaXNTZWFyY1BhbmVsSW5TaWRlQ29udGVudF09XCJpc1NlYXJjUGFuZWxJblNpZGVDb250ZW50XCJcclxuICAgICAgICAgICAgICAgIChtb0NoYW5nZWQpPVwib25TZWFyY2hQYW5lbE1vQ2hhbmdlZCgpXCJcclxuICAgICAgICAgICAgPjwvYnN1LXNlYXJjaC1wYW5lbD5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIDwvZmQtY2FyZC1jb250ZW50PlxyXG4gICAgICAgIDxmZC1jYXJkLWZvb3RlciBzdHlsZT1cImJvcmRlci1ib3R0b206IG5vbmVcIj5cclxuICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgKmZkQ2FyZEZvb3RlckFjdGlvbkl0ZW1cclxuICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgZmRUeXBlPVwiZW1waGFzaXplZFwiXHJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ1NlYXJjaCcgfCBiYmJUcmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uU2VhcmNoKClcIlxyXG4gICAgICAgICAgICAgICAgW2ZkQ29udGVudERlbnNpdHldPVwiY29udGVudERlbnNpdHlcIlxyXG4gICAgICAgICAgICA+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICpmZENhcmRGb290ZXJBY3Rpb25JdGVtXHJcbiAgICAgICAgICAgICAgICBmZC1idXR0b25cclxuICAgICAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcclxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCIoJ0RlbGV0ZScgfCBiYmJUcmFuc2xhdGUpICsgJyAnICsgKCdGaWx0ZXJzJyB8IGJiYlRyYW5zbGF0ZSlcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xlYXJTZWFyY2goKVwiXHJcbiAgICAgICAgICAgICAgICBbZmRPdmVyZmxvd0dyb3VwXT1cIjFcIlxyXG4gICAgICAgICAgICAgICAgW2ZkQ29udGVudERlbnNpdHldPVwiY29udGVudERlbnNpdHlcIlxyXG4gICAgICAgICAgICA+PC9idXR0b24+XHJcbiAgICAgICAgPC9mZC1jYXJkLWZvb3Rlcj5cclxuICAgIDwvZmQtY2FyZD5cclxuICAgIH1cclxuPC9uZy10ZW1wbGF0ZT5cclxuPG5nLXRlbXBsYXRlICN2aWV3ZXJUZW1wbGF0ZSBsZXQtbm9SZW5kZXJQYWdlaW5nPVwibm9SZW5kZXJQYWdlaW5nXCI+XHJcbiAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJ2aWV3ZXItY29udGFpbmVyXCJcclxuICAgICAgICBmaWxsRW1wdHlTcGFjZVxyXG4gICAgICAgIFtkaXNhYmxlXT1cIiFpc1JlcG9ydFBhZ2UgfHwgIWZpbGxQYWdlXCJcclxuICAgICAgICBbZGVjcmVtZW50XT1cImRldmljZVNpemUgIT09ICdzJyA/ICcxMDBweCcgOiAnNzVweCdcIlxyXG4gICAgICAgIFtzdHlsZS5oZWlnaHRdPVwidmlld2VyTG9hZGluZyA/ICcxMDAlJyA6ICdhdXRvJ1wiXHJcbiAgICAgICAgW3N0eWxlLm1pbi1oZWlnaHRdPVwiaXNSZXBvcnRQYWdlID8gJzEwMCUnIDogbnVsbFwiXHJcbiAgICAgICAgW3N0eWxlLnBvc2l0aW9uXT1cInZpZXdlckxvYWRpbmcgPyAncmVsYXRpdmUnIDogbnVsbFwiXHJcbiAgICA+XHJcbiAgICAgICAgQGlmICh2aWV3ZXJMb2FkaW5nKSB7XHJcbiAgICAgICAgPGJzdS1tYXNrIHNpemU9XCJtXCI+PC9ic3UtbWFzaz5cclxuICAgICAgICB9IEBpZiAodmlld2VyQ29udHJvbCkge1xyXG4gICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgW3JlbmRlclVsdlZpZXdlcl09XCJ2aWV3ZXJDb250cm9sXCJcclxuICAgICAgICAgICAgW2xheW91dEluZm9dPVwibGF5b3V0SW5mb1wiXHJcbiAgICAgICAgICAgIFtpc1JlcG9ydFBhZ2VdPVwiaXNSZXBvcnRQYWdlXCJcclxuICAgICAgICA+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgfVxyXG4gICAgPC9kaXY+XHJcbiAgICBAaWYgKCFub1JlbmRlclBhZ2VpbmcgJiYgcGFnaW5nU2V0dGluZz8uVG90YWxQYWdlcyAmJiAhaGlkZVBhZ2VpbmcgJiYgIWhpZGVQYWdpbmcpIHtcclxuICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICBbcmVuZGVyVWx2UGFnaW5nXT1cImNvbnRleHRcIlxyXG4gICAgICAgIFtwYWdpbmdTZXR0aW5nXT1cInBhZ2luZ1NldHRpbmdcIlxyXG4gICAgICAgIChwYWdlQ2hhbmdlKT1cIm9uUGFnZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgIH1cclxuPC9uZy10ZW1wbGF0ZT5cclxuPG5nLXRlbXBsYXRlIGxldC1kaWFsb2cgbGV0LWRpYWxvZ0NvbmZpZz1cImRpYWxvZ0NvbmZpZ1wiICNzZWFyY2hwYW5lbERpYWxvZz5cclxuICAgIDxmZC1kaWFsb2cgW2RpYWxvZ0NvbmZpZ109XCJkaWFsb2dDb25maWdcIiBbZGlhbG9nUmVmXT1cImRpYWxvZ1wiPlxyXG4gICAgICAgIDxmZC1kaWFsb2ctaGVhZGVyPlxyXG4gICAgICAgICAgICA8aDEgaWQ9XCJmZC1kaWFsb2ctaGVhZGVyLTEwXCIgZmQtdGl0bGU+e3sgJ0ZpbHRlcnMnIHwgYmJiVHJhbnNsYXRlIH19PC9oMT5cclxuICAgICAgICAgICAgPGJ1dHRvbiBmZC1kaWFsb2ctY2xvc2UtYnV0dG9uIChjbGljayk9XCJkaWFsb2cuZGlzbWlzcygnQ2xvc2UgYnV0dG9uJylcIj48L2J1dHRvbj5cclxuICAgICAgICA8L2ZkLWRpYWxvZy1oZWFkZXI+XHJcbiAgICAgICAgPGZkLWRpYWxvZy1ib2R5PlxyXG4gICAgICAgICAgICA8YnN1LXNlYXJjaC1wYW5lbFxyXG4gICAgICAgICAgICAgICAgW2hpZGVCdXR0b25zXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgW3NlYXJjaFBhbmVsVWldPVwic2VhcmNoUGFuZWxVaVwiXHJcbiAgICAgICAgICAgICAgICAobW9DaGFuZ2VkKT1cIm9uU2VhcmNoUGFuZWxNb0NoYW5nZWQoKVwiXHJcbiAgICAgICAgICAgID48L2JzdS1zZWFyY2gtcGFuZWw+XHJcbiAgICAgICAgPC9mZC1kaWFsb2ctYm9keT5cclxuXHJcbiAgICAgICAgPGZkLWRpYWxvZy1mb290ZXI+XHJcbiAgICAgICAgICAgIDxmZC1kaWFsb2ctZm9vdGVyLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cclxuICAgICAgICAgICAgICAgICAgICBmZGtJbml0aWFsRm9jdXNcclxuICAgICAgICAgICAgICAgICAgICBmZFR5cGU9XCJlbXBoYXNpemVkXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGlhbG9nLmRpc21pc3MoKTsgb25TZWFyY2goKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidTZWFyY2gnIHwgYmJiVHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgID48L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9mZC1kaWFsb2ctZm9vdGVyLWJ1dHRvbj5cclxuICAgICAgICAgICAgPGZkLWRpYWxvZy1mb290ZXItYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBmZC1idXR0b24gW2xhYmVsXT1cIidDbGVhcicgfCBiYmJUcmFuc2xhdGVcIiAoY2xpY2spPVwib25DbGVhclNlYXJjaCgpXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZmQtZGlhbG9nLWZvb3Rlci1idXR0b24+XHJcbiAgICAgICAgICAgIDxmZC1kaWFsb2ctZm9vdGVyLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cclxuICAgICAgICAgICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRpYWxvZy5kaXNtaXNzKCdDbG9zZSBidXR0b24nKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidDYW5jZWwnIHwgYmJiVHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgID48L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9mZC1kaWFsb2ctZm9vdGVyLWJ1dHRvbj5cclxuICAgICAgICA8L2ZkLWRpYWxvZy1mb290ZXI+XHJcbiAgICA8L2ZkLWRpYWxvZz5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19
@@ -1,79 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, Input, ViewChild, signal } from '@angular/core';
2
- import { getDeviceIsMobile, BarsaApi, BaseComponent } from 'barsa-novin-ray-core';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/platform-browser";
5
- import * as i2 from "@angular/common";
6
- import * as i3 from "barsa-novin-ray-core";
7
- import * as i4 from "ng2-pdfjs-viewer";
8
- import * as i5 from "../mask/mask.component";
9
- export class BlobViewerComponent extends BaseComponent {
10
- constructor(_cdr, _domSanitizer) {
11
- super();
12
- this._cdr = _cdr;
13
- this._domSanitizer = _domSanitizer;
14
- this.loading = signal(true);
15
- this.isMobile = getDeviceIsMobile();
16
- }
17
- ngOnInit() {
18
- super.ngOnInit();
19
- this.fallbackUrl = this.getFallbackUrl(this.file.Id);
20
- this._downloadFileId(this.file.Id, true, 'pdf', false, false);
21
- }
22
- ngOnChanges(changes) {
23
- super.ngOnChanges(changes);
24
- const { file } = changes;
25
- if (file && !file.firstChange) {
26
- this.fallbackUrl = this.getFallbackUrl(this.file.Id);
27
- this._downloadFileId(this.file.Id, true, 'pdf', false, false);
28
- }
29
- }
30
- onVisibilityChange(e) {
31
- if (e === 'Visible' && this.isMobile) {
32
- this._pdfViewerOnDemand?.refresh();
33
- }
34
- }
35
- _downloadFileId(fileId, viewInBrowser, convertTo, forOcx, isOfficeOnline) {
36
- this._setLoading(true);
37
- BarsaApi.Common.File.DownloadFileContent.bind(this)({
38
- fileId,
39
- fileUrl: null,
40
- viewInBrowser,
41
- convertTo,
42
- isOfficeOnline,
43
- forOcx
44
- }, (response) => {
45
- if (response.succeed) {
46
- this._downloadFileIdCompleted(response);
47
- }
48
- }, (error) => {
49
- alert(error);
50
- this._setLoading(false);
51
- });
52
- }
53
- getFallbackUrl(fileId) {
54
- return `امکان نمایش فایل در این مرورگر وجود ندارد.
55
- برای باز کردن فایل از لینک زیر استفاده کنید: </br> <a href='${BarsaApi.Common.File.CreateAttachmentUrl(fileId, false, true)}'>دانلود فایل بصورت pdf</a> </br> <a href='${BarsaApi.Common.File.CreateAttachmentUrl(fileId, false, false)}'>دانلود فایل بصورت بصورت اصلی</a>`;
56
- }
57
- _setLoading(loading) {
58
- this.loading.set(loading);
59
- }
60
- _downloadFileIdCompleted(response) {
61
- this._setLoading(false);
62
- const blob = BarsaApi.Common.File.B64toBlob(response.content, response.contentType);
63
- const url = window.URL || window.webkitURL;
64
- this.blobUrl = url.createObjectURL(blob);
65
- this.valueUrl = this._domSanitizer.bypassSecurityTrustResourceUrl(url.createObjectURL(blob));
66
- }
67
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BlobViewerComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component }); }
68
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: BlobViewerComponent, selector: "bsu-blob-viewer", inputs: { file: "file" }, viewQueries: [{ propertyName: "_pdfViewerOnDemand", first: true, predicate: ["pdfViewerOnDemand"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "@if (loading()) {\r\n<bsu-mask></bsu-mask>\r\n} @else if (valueUrl) { @switch (file.Type) { @case ('pdf') {\r\n<ng-container *ngTemplateOutlet=\"objectTpl\"></ng-container>\r\n} @case('txt'){\r\n<ng-container *ngTemplateOutlet=\"objectTpl\"></ng-container>\r\n} @case('m4a'){\r\n<ng-container *ngTemplateOutlet=\"audio\"></ng-container>\r\n} @case('x-ms-wma'){\r\n<ng-container *ngTemplateOutlet=\"audio\"></ng-container>\r\n} @case('x-wav'){\r\n<ng-container *ngTemplateOutlet=\"audio\"></ng-container>\r\n} @case('mp4'){\r\n<ng-container *ngTemplateOutlet=\"video\"></ng-container>\r\n} @case('webm'){\r\n<ng-container *ngTemplateOutlet=\"video\"></ng-container>\r\n} } }\r\n\r\n<ng-template #objectTpl let-type>\r\n @if(!isMobile){\r\n <object\r\n style=\"flex-grow: 1\"\r\n [attr.data]=\"valueUrl\"\r\n type=\"application/pdf\"\r\n width=\"100%\"\r\n height=\"100%\"\r\n [attr.html]=\"fallbackUrl\"\r\n ></object>\r\n }\r\n</ng-template>\r\n<ng-template #audio>\r\n <audio controls>\r\n <source [src]=\"valueUrl\" />\r\n Your browser does not support the audio element.\r\n </audio>\r\n</ng-template>\r\n<ng-template #video>\r\n <video controls>\r\n <source [src]=\"valueUrl\" />\r\n Your browser does not support the audio element.\r\n </video>\r\n</ng-template>\r\n@if(blobUrl && isMobile){\r\n<div intersectionObserver [intersectionThreshold]=\"0.1\" (visibilityChange)=\"onVisibilityChange($event)\"></div>\r\n<ng2-pdfjs-viewer\r\n #pdfViewerOnDemand\r\n [downloadFileName]=\"blobUrl\"\r\n [externalWindow]=\"false\"\r\n [openFile]=\"false\"\r\n [viewBookmark]=\"false\"\r\n [showSpinner]=\"true\"\r\n [download]=\"true\"\r\n [pdfSrc]=\"blobUrl\"\r\n></ng2-pdfjs-viewer>\r\n}\r\n", styles: [":host{display:block;position:relative;height:100%;width:100%}\n"], dependencies: [{ kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.IntersectionObserverDirective, selector: "[intersectionObserver]", inputs: ["intersectionDebounce", "intersectionRootMargin", "intersectionRoot", "intersectionThreshold"], outputs: ["visibilityChange"] }, { kind: "component", type: i4.PdfJsViewerComponent, selector: "ng2-pdfjs-viewer", inputs: ["viewerId", "viewerFolder", "externalWindow", "target", "showSpinner", "downloadFileName", "openFile", "download", "startDownload", "viewBookmark", "print", "startPrint", "fullScreen", "find", "zoom", "nameddest", "pagemode", "lastPage", "rotatecw", "rotateccw", "cursor", "scroll", "spread", "locale", "useOnlyCssZoom", "errorOverride", "errorAppend", "errorMessage", "diagnosticLogs", "externalWindowOptions", "page", "pdfSrc"], outputs: ["onBeforePrint", "onAfterPrint", "onDocumentLoad", "onPageChange"] }, { kind: "component", type: i5.MaskComponent, selector: "bsu-mask", inputs: ["size", "top"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
69
- }
70
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BlobViewerComponent, decorators: [{
71
- type: Component,
72
- args: [{ selector: 'bsu-blob-viewer', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "@if (loading()) {\r\n<bsu-mask></bsu-mask>\r\n} @else if (valueUrl) { @switch (file.Type) { @case ('pdf') {\r\n<ng-container *ngTemplateOutlet=\"objectTpl\"></ng-container>\r\n} @case('txt'){\r\n<ng-container *ngTemplateOutlet=\"objectTpl\"></ng-container>\r\n} @case('m4a'){\r\n<ng-container *ngTemplateOutlet=\"audio\"></ng-container>\r\n} @case('x-ms-wma'){\r\n<ng-container *ngTemplateOutlet=\"audio\"></ng-container>\r\n} @case('x-wav'){\r\n<ng-container *ngTemplateOutlet=\"audio\"></ng-container>\r\n} @case('mp4'){\r\n<ng-container *ngTemplateOutlet=\"video\"></ng-container>\r\n} @case('webm'){\r\n<ng-container *ngTemplateOutlet=\"video\"></ng-container>\r\n} } }\r\n\r\n<ng-template #objectTpl let-type>\r\n @if(!isMobile){\r\n <object\r\n style=\"flex-grow: 1\"\r\n [attr.data]=\"valueUrl\"\r\n type=\"application/pdf\"\r\n width=\"100%\"\r\n height=\"100%\"\r\n [attr.html]=\"fallbackUrl\"\r\n ></object>\r\n }\r\n</ng-template>\r\n<ng-template #audio>\r\n <audio controls>\r\n <source [src]=\"valueUrl\" />\r\n Your browser does not support the audio element.\r\n </audio>\r\n</ng-template>\r\n<ng-template #video>\r\n <video controls>\r\n <source [src]=\"valueUrl\" />\r\n Your browser does not support the audio element.\r\n </video>\r\n</ng-template>\r\n@if(blobUrl && isMobile){\r\n<div intersectionObserver [intersectionThreshold]=\"0.1\" (visibilityChange)=\"onVisibilityChange($event)\"></div>\r\n<ng2-pdfjs-viewer\r\n #pdfViewerOnDemand\r\n [downloadFileName]=\"blobUrl\"\r\n [externalWindow]=\"false\"\r\n [openFile]=\"false\"\r\n [viewBookmark]=\"false\"\r\n [showSpinner]=\"true\"\r\n [download]=\"true\"\r\n [pdfSrc]=\"blobUrl\"\r\n></ng2-pdfjs-viewer>\r\n}\r\n", styles: [":host{display:block;position:relative;height:100%;width:100%}\n"] }]
73
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.DomSanitizer }], propDecorators: { file: [{
74
- type: Input
75
- }], _pdfViewerOnDemand: [{
76
- type: ViewChild,
77
- args: ['pdfViewerOnDemand']
78
- }] } });
79
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvYi12aWV3ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvYmxvYi12aWV3ZXIvYmxvYi12aWV3ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvYmxvYi12aWV3ZXIvYmxvYi12aWV3ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsS0FBSyxFQUlMLFNBQVMsRUFDVCxNQUFNLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQXNCLE1BQU0sc0JBQXNCLENBQUM7Ozs7Ozs7QUFTdEcsTUFBTSxPQUFPLG1CQUFvQixTQUFRLGFBQWE7SUFRbEQsWUFBb0IsSUFBdUIsRUFBVSxhQUEyQjtRQUM1RSxLQUFLLEVBQUUsQ0FBQztRQURRLFNBQUksR0FBSixJQUFJLENBQW1CO1FBQVUsa0JBQWEsR0FBYixhQUFhLENBQWM7UUFKaEYsWUFBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV2QixhQUFRLEdBQUcsaUJBQWlCLEVBQUUsQ0FBQztJQUkvQixDQUFDO0lBQ0QsUUFBUTtRQUNKLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFDRCxXQUFXLENBQUMsT0FBc0I7UUFD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O3NCQUFaLEtBQUs7Z0JBQzBCLGtCQUFrQjtzQkFBakQsU0FBUzt1QkFBQyxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIENvbXBvbmVudCxcclxuICAgIElucHV0LFxyXG4gICAgT25DaGFuZ2VzLFxyXG4gICAgT25Jbml0LFxyXG4gICAgU2ltcGxlQ2hhbmdlcyxcclxuICAgIFZpZXdDaGlsZCxcclxuICAgIHNpZ25hbFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVSZXNvdXJjZVVybCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBnZXREZXZpY2VJc01vYmlsZSwgQmFyc2FBcGksIEJhc2VDb21wb25lbnQsIEZpbGVBdHRhY2htZW50SW5mbyB9IGZyb20gJ2JhcnNhLW5vdmluLXJheS1jb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdic3UtYmxvYi12aWV3ZXInLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2Jsb2Itdmlld2VyLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2Jsb2Itdmlld2VyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICAgIHN0YW5kYWxvbmU6IGZhbHNlXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCbG9iVmlld2VyQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuICAgIEBJbnB1dCgpIGZpbGU6IEZpbGVBdHRhY2htZW50SW5mbztcclxuICAgIEBWaWV3Q2hpbGQoJ3BkZlZpZXdlck9uRGVtYW5kJykgX3BkZlZpZXdlck9uRGVtYW5kOiBhbnk7XHJcbiAgICB2YWx1ZVVybDogU2FmZVJlc291cmNlVXJsO1xyXG4gICAgbG9hZGluZyA9IHNpZ25hbCh0cnVlKTtcclxuICAgIGZhbGxiYWNrVXJsOiBzdHJpbmc7XHJcbiAgICBpc01vYmlsZSA9IGdldERldmljZUlzTW9iaWxlKCk7XHJcbiAgICBibG9iVXJsOiBzdHJpbmc7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9jZHI6IENoYW5nZURldGVjdG9yUmVmLCBwcml2YXRlIF9kb21TYW5pdGl6ZXI6IERvbVNhbml0aXplcikge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG4gICAgICAgIHRoaXMuZmFsbGJhY2tVcmwgPSB0aGlzLmdldEZhbGxiYWNrVXJsKHRoaXMuZmlsZS5JZCk7XHJcbiAgICAgICAgdGhpcy5fZG93bmxvYWRGaWxlSWQodGhpcy5maWxlLklkLCB0cnVlLCAncGRmJywgZmFsc2UsIGZhbHNlKTtcclxuICAgIH1cclxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgICAgICBzdXBlci5uZ09uQ2hhbmdlcyhjaGFuZ2VzKTtcclxuICAgICAgICBjb25zdCB7IGZpbGUgfSA9IGNoYW5nZXM7XHJcbiAgICAgICAgaWYgKGZpbGUgJiYgIWZpbGUuZmlyc3RDaGFuZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5mYWxsYmFja1VybCA9IHRoaXMuZ2V0RmFsbGJhY2tVcmwodGhpcy5maWxlLklkKTtcclxuICAgICAgICAgICAgdGhpcy5fZG93bmxvYWRGaWxlSWQodGhpcy5maWxlLklkLCB0cnVlLCAncGRmJywgZmFsc2UsIGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBvblZpc2liaWxpdHlDaGFuZ2UoZSk6IHZvaWQge1xyXG4gICAgICAgIGlmIChlID09PSAnVmlzaWJsZScgJiYgdGhpcy5pc01vYmlsZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9wZGZWaWV3ZXJPbkRlbWFuZD8ucmVmcmVzaCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfZG93bmxvYWRGaWxlSWQoZmlsZUlkLCB2aWV3SW5Ccm93c2VyLCBjb252ZXJ0VG8sIGZvck9jeCwgaXNPZmZpY2VPbmxpbmUpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9zZXRMb2FkaW5nKHRydWUpO1xyXG4gICAgICAgIEJhcnNhQXBpLkNvbW1vbi5GaWxlLkRvd25sb2FkRmlsZUNvbnRlbnQuYmluZCh0aGlzKShcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZmlsZUlkLFxyXG4gICAgICAgICAgICAgICAgZmlsZVVybDogbnVsbCxcclxuICAgICAgICAgICAgICAgIHZpZXdJbkJyb3dzZXIsXHJcbiAgICAgICAgICAgICAgICBjb252ZXJ0VG8sXHJcbiAgICAgICAgICAgICAgICBpc09mZmljZU9ubGluZSxcclxuICAgICAgICAgICAgICAgIGZvck9jeFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZWVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZG93bmxvYWRGaWxlSWRDb21wbGV0ZWQocmVzcG9uc2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgIGFsZXJ0KGVycm9yKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NldExvYWRpbmcoZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBnZXRGYWxsYmFja1VybChmaWxlSWQpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBg2KfZhdqp2KfZhiDZhtmF2KfbjNi0INmB2KfbjNmEINiv2LEg2KfbjNmGINmF2LHZiNix2q/YsSDZiNis2YjYryDZhtiv2KfYsdivLlxyXG4gICAg2KjYsdin24wg2KjYp9iyINqp2LHYr9mGINmB2KfbjNmEINin2LIg2YTbjNmG2qkg2LLbjNixINin2LPYqtmB2KfYr9mHINqp2YbbjNivOiAgPC9icj4gPGEgaHJlZj0nJHtCYXJzYUFwaS5Db21tb24uRmlsZS5DcmVhdGVBdHRhY2htZW50VXJsKFxyXG4gICAgICAgIGZpbGVJZCxcclxuICAgICAgICBmYWxzZSxcclxuICAgICAgICB0cnVlXHJcbiAgICApfSc+2K/Yp9mG2YTZiNivINmB2KfbjNmEINio2LXZiNix2KogcGRmPC9hPiAgPC9icj4gIDxhIGhyZWY9JyR7QmFyc2FBcGkuQ29tbW9uLkZpbGUuQ3JlYXRlQXR0YWNobWVudFVybChcclxuICAgICAgICAgICAgZmlsZUlkLFxyXG4gICAgICAgICAgICBmYWxzZSxcclxuICAgICAgICAgICAgZmFsc2VcclxuICAgICAgICApfSc+2K/Yp9mG2YTZiNivINmB2KfbjNmEINio2LXZiNix2Kog2KjYtdmI2LHYqiDYp9i12YTbjDwvYT5gO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF9zZXRMb2FkaW5nKGxvYWRpbmcpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmxvYWRpbmcuc2V0KGxvYWRpbmcpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF9kb3dubG9hZEZpbGVJZENvbXBsZXRlZChyZXNwb25zZSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3NldExvYWRpbmcoZmFsc2UpO1xyXG4gICAgICAgIGNvbnN0IGJsb2IgPSBCYXJzYUFwaS5Db21tb24uRmlsZS5CNjR0b0Jsb2IocmVzcG9uc2UuY29udGVudCwgcmVzcG9uc2UuY29udGVudFR5cGUpO1xyXG4gICAgICAgIGNvbnN0IHVybCA9IHdpbmRvdy5VUkwgfHwgd2luZG93LndlYmtpdFVSTDtcclxuICAgICAgICB0aGlzLmJsb2JVcmwgPSB1cmwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG4gICAgICAgIHRoaXMudmFsdWVVcmwgPSB0aGlzLl9kb21TYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKHVybC5jcmVhdGVPYmplY3RVUkwoYmxvYikpO1xyXG4gICAgfVxyXG4gICBcclxufVxyXG4iLCJAaWYgKGxvYWRpbmcoKSkge1xyXG48YnN1LW1hc2s+PC9ic3UtbWFzaz5cclxufSBAZWxzZSBpZiAodmFsdWVVcmwpIHsgQHN3aXRjaCAoZmlsZS5UeXBlKSB7IEBjYXNlICgncGRmJykge1xyXG48bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwib2JqZWN0VHBsXCI+PC9uZy1jb250YWluZXI+XHJcbn0gQGNhc2UoJ3R4dCcpe1xyXG48bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwib2JqZWN0VHBsXCI+PC9uZy1jb250YWluZXI+XHJcbn0gQGNhc2UoJ200YScpe1xyXG48bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYXVkaW9cIj48L25nLWNvbnRhaW5lcj5cclxufSBAY2FzZSgneC1tcy13bWEnKXtcclxuPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImF1ZGlvXCI+PC9uZy1jb250YWluZXI+XHJcbn0gQGNhc2UoJ3gtd2F2Jyl7XHJcbjxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhdWRpb1wiPjwvbmctY29udGFpbmVyPlxyXG59IEBjYXNlKCdtcDQnKXtcclxuPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInZpZGVvXCI+PC9uZy1jb250YWluZXI+XHJcbn0gQGNhc2UoJ3dlYm0nKXtcclxuPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInZpZGVvXCI+PC9uZy1jb250YWluZXI+XHJcbn0gfSB9XHJcblxyXG48bmctdGVtcGxhdGUgI29iamVjdFRwbCBsZXQtdHlwZT5cclxuICAgIEBpZighaXNNb2JpbGUpe1xyXG4gICAgPG9iamVjdFxyXG4gICAgICAgIHN0eWxlPVwiZmxleC1ncm93OiAxXCJcclxuICAgICAgICBbYXR0ci5kYXRhXT1cInZhbHVlVXJsXCJcclxuICAgICAgICB0eXBlPVwiYXBwbGljYXRpb24vcGRmXCJcclxuICAgICAgICB3aWR0aD1cIjEwMCVcIlxyXG4gICAgICAgIGhlaWdodD1cIjEwMCVcIlxyXG4gICAgICAgIFthdHRyLmh0bWxdPVwiZmFsbGJhY2tVcmxcIlxyXG4gICAgPjwvb2JqZWN0PlxyXG4gICAgfVxyXG48L25nLXRlbXBsYXRlPlxyXG48bmctdGVtcGxhdGUgI2F1ZGlvPlxyXG4gICAgPGF1ZGlvIGNvbnRyb2xzPlxyXG4gICAgICAgIDxzb3VyY2UgW3NyY109XCJ2YWx1ZVVybFwiIC8+XHJcbiAgICAgICAgWW91ciBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgdGhlIGF1ZGlvIGVsZW1lbnQuXHJcbiAgICA8L2F1ZGlvPlxyXG48L25nLXRlbXBsYXRlPlxyXG48bmctdGVtcGxhdGUgI3ZpZGVvPlxyXG4gICAgPHZpZGVvIGNvbnRyb2xzPlxyXG4gICAgICAgIDxzb3VyY2UgW3NyY109XCJ2YWx1ZVVybFwiIC8+XHJcbiAgICAgICAgWW91ciBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgdGhlIGF1ZGlvIGVsZW1lbnQuXHJcbiAgICA8L3ZpZGVvPlxyXG48L25nLXRlbXBsYXRlPlxyXG5AaWYoYmxvYlVybCAmJiBpc01vYmlsZSl7XHJcbjxkaXYgaW50ZXJzZWN0aW9uT2JzZXJ2ZXIgW2ludGVyc2VjdGlvblRocmVzaG9sZF09XCIwLjFcIiAodmlzaWJpbGl0eUNoYW5nZSk9XCJvblZpc2liaWxpdHlDaGFuZ2UoJGV2ZW50KVwiPjwvZGl2PlxyXG48bmcyLXBkZmpzLXZpZXdlclxyXG4gICAgI3BkZlZpZXdlck9uRGVtYW5kXHJcbiAgICBbZG93bmxvYWRGaWxlTmFtZV09XCJibG9iVXJsXCJcclxuICAgIFtleHRlcm5hbFdpbmRvd109XCJmYWxzZVwiXHJcbiAgICBbb3BlbkZpbGVdPVwiZmFsc2VcIlxyXG4gICAgW3ZpZXdCb29rbWFya109XCJmYWxzZVwiXHJcbiAgICBbc2hvd1NwaW5uZXJdPVwidHJ1ZVwiXHJcbiAgICBbZG93bmxvYWRdPVwidHJ1ZVwiXHJcbiAgICBbcGRmU3JjXT1cImJsb2JVcmxcIlxyXG4+PC9uZzItcGRmanMtdmlld2VyPlxyXG59XHJcbiJdfQ==