barsa-sap-ui 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (346) hide show
  1. package/README.md +25 -0
  2. package/esm2020/barsa-sap-ui.mjs +5 -0
  3. package/esm2020/lib/apply-conditional-formmatings.directive.mjs +84 -0
  4. package/esm2020/lib/barsa-asp-viewer/barsa-asp-viewer.component.mjs +109 -0
  5. package/esm2020/lib/barsa-base-layout/barsa-base-layout.component.mjs +34 -0
  6. package/esm2020/lib/barsa-date-time-picker/barsa-date-time-picker.component.mjs +71 -0
  7. package/esm2020/lib/barsa-list-file-linear/barsa-list-file-linear.component.mjs +28 -0
  8. package/esm2020/lib/barsa-monaco-editor/barsa-monaco-editor.component.mjs +77 -0
  9. package/esm2020/lib/barsa-network-offline/barsa-network-offline.component.mjs +45 -0
  10. package/esm2020/lib/barsa-sap-ui-routing.module.mjs +17 -0
  11. package/esm2020/lib/barsa-sap-ui.module.mjs +277 -0
  12. package/esm2020/lib/barsa-search-form/barsa-search-form.component.mjs +29 -0
  13. package/esm2020/lib/barsa-table-header/barsa-table-header.component.mjs +122 -0
  14. package/esm2020/lib/barsa-table-row/barsa-table-row.component.mjs +57 -0
  15. package/esm2020/lib/barsa-tinyemce/barsa-tinyemce.component.mjs +334 -0
  16. package/esm2020/lib/barsa-tree-item/barsa-tree-item.component.mjs +120 -0
  17. package/esm2020/lib/barsa-tree-item/node-has-one-depth-level.pipe.mjs +19 -0
  18. package/esm2020/lib/barsa-ulv-main/barsa-ulv-main.component.mjs +156 -0
  19. package/esm2020/lib/breadcrumb/breadcrumb.component.mjs +45 -0
  20. package/esm2020/lib/captcha-field/captcha-field.component.mjs +28 -0
  21. package/esm2020/lib/card-item/card-item.component.mjs +60 -0
  22. package/esm2020/lib/card-view-content/card-view-content.component.mjs +23 -0
  23. package/esm2020/lib/col-renderer.directive.mjs +50 -0
  24. package/esm2020/lib/column-matrix-renderer/column-matrix-renderer.component.mjs +56 -0
  25. package/esm2020/lib/column-matrix-renderer/matrix-value.pipe.mjs +60 -0
  26. package/esm2020/lib/column-renderer/column-renderer.component.mjs +84 -0
  27. package/esm2020/lib/constants.mjs +413 -0
  28. package/esm2020/lib/custom-date-time/custom-date-time.component.mjs +41 -0
  29. package/esm2020/lib/device-info-field-base.mjs +23 -0
  30. package/esm2020/lib/dynamic-page-size.pipe.mjs +26 -0
  31. package/esm2020/lib/empty-page/empty-page.component.mjs +38 -0
  32. package/esm2020/lib/file-in-dialog/file-in-dialog.component.mjs +44 -0
  33. package/esm2020/lib/form-dialog/form-dialog.component.mjs +125 -0
  34. package/esm2020/lib/form-dialog-less/form-dialog-less.component.mjs +38 -0
  35. package/esm2020/lib/form-page/form-page.component.mjs +51 -0
  36. package/esm2020/lib/form-page-base.mjs +129 -0
  37. package/esm2020/lib/form-toolbar-button/form-toolbar-button.component.mjs +44 -0
  38. package/esm2020/lib/form-wizard/form-wizard.component.mjs +21 -0
  39. package/esm2020/lib/fullscreen-dialog.directive.mjs +40 -0
  40. package/esm2020/lib/fundamental-dynamic-form/fundamental-dynamic-form.component.mjs +152 -0
  41. package/esm2020/lib/gantt-dhtml-chart-view/gantt-dhtml-chart-view.component.mjs +203 -0
  42. package/esm2020/lib/global-search/global-search.component.mjs +26 -0
  43. package/esm2020/lib/global-search-module/global-search-module.component.mjs +30 -0
  44. package/esm2020/lib/global-search-panel/global-search-panel.component.mjs +30 -0
  45. package/esm2020/lib/header-avatar/header-avatar.component.mjs +19 -0
  46. package/esm2020/lib/header-facet-form/header-facet-form.component.mjs +22 -0
  47. package/esm2020/lib/header-facet-key-value/header-facet-key-value.component.mjs +31 -0
  48. package/esm2020/lib/header-facet-microchart/header-facet-microchart.component.mjs +21 -0
  49. package/esm2020/lib/header-facet-plain-text/header-facet-plain-text.component.mjs +28 -0
  50. package/esm2020/lib/header-facet-progress/header-facet-progress.component.mjs +26 -0
  51. package/esm2020/lib/header-facet-rate/header-facet-rate.component.mjs +26 -0
  52. package/esm2020/lib/htree-create-new/htree-create-new.component.mjs +49 -0
  53. package/esm2020/lib/hyperlink/hyperlink.component.mjs +19 -0
  54. package/esm2020/lib/index.mjs +412 -0
  55. package/esm2020/lib/inline-save-and-cancel/inline-save-and-cancel.component.mjs +32 -0
  56. package/esm2020/lib/layout-actions/layout-actions.component.mjs +65 -0
  57. package/esm2020/lib/layout-control/layout-control.component.mjs +214 -0
  58. package/esm2020/lib/layout-wizard/layout-wizard.component.mjs +133 -0
  59. package/esm2020/lib/list-item/list-item.component.mjs +30 -0
  60. package/esm2020/lib/ly-empty-space/ly-empty-space.component.mjs +37 -0
  61. package/esm2020/lib/ly-horizontal-layout/ly-horizontal-layout.component.mjs +70 -0
  62. package/esm2020/lib/ly-label/ly-label.component.mjs +31 -0
  63. package/esm2020/lib/ly-layout-container/ly-layout-container.component.mjs +83 -0
  64. package/esm2020/lib/ly-layout-container-of-root/ly-layout-container-of-root.component.mjs +17 -0
  65. package/esm2020/lib/ly-layout-field-label/ly-layout-field-label.component.mjs +24 -0
  66. package/esm2020/lib/ly-layout-panel/ly-layout-panel.component.mjs +64 -0
  67. package/esm2020/lib/ly-line/ly-line.component.mjs +56 -0
  68. package/esm2020/lib/ly-simple-label/ly-simple-label.component.mjs +27 -0
  69. package/esm2020/lib/ly-tab-container/ly-tab-container.component.mjs +43 -0
  70. package/esm2020/lib/ly-tab-page/ly-tab-page.component.mjs +35 -0
  71. package/esm2020/lib/ly-vertical-layout/ly-vertical-layout.component.mjs +49 -0
  72. package/esm2020/lib/manage-filters-report/manage-filters-report.component.mjs +45 -0
  73. package/esm2020/lib/mask/mask.component.mjs +22 -0
  74. package/esm2020/lib/message-strip/message-strip.component.mjs +28 -0
  75. package/esm2020/lib/models/grid-data-provider.mjs +219 -0
  76. package/esm2020/lib/models/grid-view.mjs +2 -0
  77. package/esm2020/lib/models/index.mjs +2 -0
  78. package/esm2020/lib/no-data/no-data.component.mjs +20 -0
  79. package/esm2020/lib/page-with-form-handler-base.mjs +42 -0
  80. package/esm2020/lib/page-with-header/page-with-header.component.mjs +76 -0
  81. package/esm2020/lib/progress-indicator/progress-indicator.component.mjs +18 -0
  82. package/esm2020/lib/report-navigator/report-navigator.component.mjs +62 -0
  83. package/esm2020/lib/report-new-top-form/report-new-top-form.component.mjs +60 -0
  84. package/esm2020/lib/report-search-fields-hidden-settings/report-search-fields-hidden-settings.component.mjs +35 -0
  85. package/esm2020/lib/report-search-fields-manage/report-search-fields-manage.component.mjs +99 -0
  86. package/esm2020/lib/report-search-panel-save/report-search-panel-save.component.mjs +90 -0
  87. package/esm2020/lib/report-tree-base.mjs +405 -0
  88. package/esm2020/lib/report-view-renderer.directive.mjs +248 -0
  89. package/esm2020/lib/responsive-toolbar/responsive-toolbar.component.mjs +50 -0
  90. package/esm2020/lib/responsive-toolbar-renderer/responsive-toolbar-renderer.component.mjs +84 -0
  91. package/esm2020/lib/rich-text-static/rich-text-static.component.mjs +35 -0
  92. package/esm2020/lib/sap-font-class.pipe.mjs +29 -0
  93. package/esm2020/lib/sap-font.pipe.mjs +29 -0
  94. package/esm2020/lib/sap-ui-report-base.component.mjs +689 -0
  95. package/esm2020/lib/search-panel/search-panel.component.mjs +40 -0
  96. package/esm2020/lib/static-text/static-text.component.mjs +15 -0
  97. package/esm2020/lib/title/title.component.mjs +15 -0
  98. package/esm2020/lib/ui-asp-report-viewer/ui-asp-report-viewer.component.mjs +14 -0
  99. package/esm2020/lib/ui-button/ui-button.component.mjs +31 -0
  100. package/esm2020/lib/ui-calendar/ui-calendar.component.mjs +46 -0
  101. package/esm2020/lib/ui-card-view/ui-card-view.component.mjs +60 -0
  102. package/esm2020/lib/ui-card-view-horizontal-group/ui-card-view-horizontal-group.component.mjs +27 -0
  103. package/esm2020/lib/ui-check-box/ui-check-box.component.mjs +29 -0
  104. package/esm2020/lib/ui-color-ui/ui-color-ui.component.mjs +50 -0
  105. package/esm2020/lib/ui-container-with-button/ui-container-with-button.component.mjs +34 -0
  106. package/esm2020/lib/ui-date-range-ex/ui-date-range-ex.component.mjs +194 -0
  107. package/esm2020/lib/ui-date-time/ui-date-time.component.mjs +116 -0
  108. package/esm2020/lib/ui-editable-grid/ui-editable-grid.component.mjs +110 -0
  109. package/esm2020/lib/ui-exception-form/ui-exception-form.component.mjs +61 -0
  110. package/esm2020/lib/ui-file-linear-list-box/ui-file-linear-list-box.component.mjs +181 -0
  111. package/esm2020/lib/ui-form-panel/ui-form-panel.component.mjs +43 -0
  112. package/esm2020/lib/ui-form-panel-toolbar/ui-form-panel-toolbar.component.mjs +26 -0
  113. package/esm2020/lib/ui-gantt-chart/ui-gantt-chart.component.mjs +32 -0
  114. package/esm2020/lib/ui-graph/ui-graph.component.mjs +16 -0
  115. package/esm2020/lib/ui-grid/ui-grid.component.mjs +25 -0
  116. package/esm2020/lib/ui-grid-columns/ui-grid-columns.component.mjs +44 -0
  117. package/esm2020/lib/ui-grid-filter-item/ui-grid-filter-item.component.mjs +67 -0
  118. package/esm2020/lib/ui-grid-filter-settings/ui-grid-filter-settings.component.mjs +76 -0
  119. package/esm2020/lib/ui-grid-sort-item/ui-grid-sort-item.component.mjs +59 -0
  120. package/esm2020/lib/ui-grid-sort-setting/ui-grid-sort-setting.component.mjs +156 -0
  121. package/esm2020/lib/ui-info-bar-panel/ui-info-bar-panel.component.mjs +11 -0
  122. package/esm2020/lib/ui-label/ui-label.component.mjs +12 -0
  123. package/esm2020/lib/ui-linear-list-container-with-button/ui-linear-list-container-with-button.component.mjs +299 -0
  124. package/esm2020/lib/ui-list-view/ui-list-view.component.mjs +44 -0
  125. package/esm2020/lib/ui-matrix-view/ui-matrix-view.component.mjs +125 -0
  126. package/esm2020/lib/ui-mo-info-combo-viewer/ui-mo-info-combo-viewer.component.mjs +19 -0
  127. package/esm2020/lib/ui-mo-info-general-object-ui/ui-mo-info-general-object-ui.component.mjs +13 -0
  128. package/esm2020/lib/ui-mo-info-sub-form-ui/ui-mo-info-sub-form-ui.component.mjs +46 -0
  129. package/esm2020/lib/ui-mo-info-ulv-combo/ui-mo-info-ulv-combo.component.mjs +335 -0
  130. package/esm2020/lib/ui-monaco-editor/ui-monaco-editor.component.mjs +18 -0
  131. package/esm2020/lib/ui-multi-select-combo/ui-multi-select-combo.component.mjs +83 -0
  132. package/esm2020/lib/ui-num-decimal-ui/ui-num-decimal-ui.component.mjs +24 -0
  133. package/esm2020/lib/ui-num-int-ui/ui-num-int-ui.component.mjs +21 -0
  134. package/esm2020/lib/ui-pdf-viewer/ui-pdf-viewer.component.mjs +216 -0
  135. package/esm2020/lib/ui-picture-file/ui-picture-file.component.mjs +95 -0
  136. package/esm2020/lib/ui-pictures-info/ui-pictures-info.component.mjs +215 -0
  137. package/esm2020/lib/ui-radio-group/ui-radio-group.component.mjs +24 -0
  138. package/esm2020/lib/ui-read-only-field/ui-read-only-field.component.mjs +29 -0
  139. package/esm2020/lib/ui-report-container/ui-report-container.component.mjs +46 -0
  140. package/esm2020/lib/ui-search-command-info-ui/ui-search-command-info-ui.component.mjs +24 -0
  141. package/esm2020/lib/ui-simple-combo/ui-simple-combo.component.mjs +29 -0
  142. package/esm2020/lib/ui-single-picture/ui-single-picture.component.mjs +36 -0
  143. package/esm2020/lib/ui-switch-button/ui-switch-button.component.mjs +20 -0
  144. package/esm2020/lib/ui-table-view/ui-table-view.component.mjs +106 -0
  145. package/esm2020/lib/ui-text-area/ui-text-area.component.mjs +44 -0
  146. package/esm2020/lib/ui-text-field/ui-text-field.component.mjs +47 -0
  147. package/esm2020/lib/ui-text-field-auto-complete/ui-text-field-auto-complete.component.mjs +47 -0
  148. package/esm2020/lib/ui-time-span/ui-time-span.component.mjs +24 -0
  149. package/esm2020/lib/ui-tinymce/ui-tinymce.component.mjs +53 -0
  150. package/esm2020/lib/ui-tree/ui-tree.component.mjs +69 -0
  151. package/esm2020/lib/ui-tree-view/ui-tree-view.component.mjs +75 -0
  152. package/esm2020/lib/ui-ulv-form-multi-select-ui/ui-ulv-form-multi-select-ui.component.mjs +24 -0
  153. package/esm2020/lib/ui-ulv-main-ui/ui-ulv-main-ui.component.mjs +276 -0
  154. package/esm2020/lib/ui-workflow-panel-ui/ui-workflow-panel-ui.component.mjs +26 -0
  155. package/esm2020/lib/ul-loading-mask-ui/ul-loading-mask-ui.component.mjs +86 -0
  156. package/esm2020/lib/ul-msg-box-adapter/ul-msg-box-adapter.component.mjs +117 -0
  157. package/esm2020/lib/ul-notify-popup/ul-notify-popup.component.mjs +114 -0
  158. package/esm2020/lib/ul-toast-adapter/ul-toast-adapter.component.mjs +44 -0
  159. package/esm2020/lib/ulv-column-settings/ulv-column-settings.component.mjs +53 -0
  160. package/esm2020/lib/ulv-context-menu/ulv-context-menu.component.mjs +74 -0
  161. package/esm2020/lib/ulv-filter-settings/ulv-filter-settings.component.mjs +43 -0
  162. package/esm2020/lib/ulv-form-multi-select/ulv-form-multi-select.component.mjs +183 -0
  163. package/esm2020/lib/ulv-groupby-settings/ulv-groupby-settings.component.mjs +44 -0
  164. package/esm2020/lib/ulv-paging/ulv-paging.component.mjs +73 -0
  165. package/esm2020/lib/ulv-selection/ulv-selection.component.mjs +66 -0
  166. package/esm2020/lib/ulv-settings/ulv-settings.component.mjs +117 -0
  167. package/esm2020/lib/ulv-sort-settings/ulv-sort-settings.component.mjs +44 -0
  168. package/esm2020/lib/ulv-toolbar/ulv-toolbar.component.mjs +110 -0
  169. package/esm2020/lib/upload-file-status.pipe.mjs +28 -0
  170. package/esm2020/lib/wizard-layout.directive.mjs +102 -0
  171. package/esm2020/public-api.mjs +170 -0
  172. package/fesm2015/barsa-sap-ui.mjs +11437 -0
  173. package/fesm2015/barsa-sap-ui.mjs.map +1 -0
  174. package/fesm2020/barsa-sap-ui.mjs +11427 -0
  175. package/fesm2020/barsa-sap-ui.mjs.map +1 -0
  176. package/index.d.ts +5 -0
  177. package/lib/apply-conditional-formmatings.directive.d.ts +25 -0
  178. package/lib/barsa-asp-viewer/barsa-asp-viewer.component.d.ts +26 -0
  179. package/lib/barsa-base-layout/barsa-base-layout.component.d.ts +18 -0
  180. package/lib/barsa-date-time-picker/barsa-date-time-picker.component.d.ts +18 -0
  181. package/lib/barsa-list-file-linear/barsa-list-file-linear.component.d.ts +8 -0
  182. package/lib/barsa-monaco-editor/barsa-monaco-editor.component.d.ts +18 -0
  183. package/lib/barsa-network-offline/barsa-network-offline.component.d.ts +13 -0
  184. package/lib/barsa-sap-ui-routing.module.d.ts +7 -0
  185. package/lib/barsa-sap-ui.module.d.ts +181 -0
  186. package/lib/barsa-search-form/barsa-search-form.component.d.ts +8 -0
  187. package/lib/barsa-table-header/barsa-table-header.component.d.ts +37 -0
  188. package/lib/barsa-table-row/barsa-table-row.component.d.ts +20 -0
  189. package/lib/barsa-tinyemce/barsa-tinyemce.component.d.ts +43 -0
  190. package/lib/barsa-tree-item/barsa-tree-item.component.d.ts +48 -0
  191. package/lib/barsa-tree-item/node-has-one-depth-level.pipe.d.ts +8 -0
  192. package/lib/barsa-ulv-main/barsa-ulv-main.component.d.ts +52 -0
  193. package/lib/breadcrumb/breadcrumb.component.d.ts +17 -0
  194. package/lib/captcha-field/captcha-field.component.d.ts +10 -0
  195. package/lib/card-item/card-item.component.d.ts +17 -0
  196. package/lib/card-view-content/card-view-content.component.d.ts +8 -0
  197. package/lib/col-renderer.directive.d.ts +12 -0
  198. package/lib/column-matrix-renderer/column-matrix-renderer.component.d.ts +23 -0
  199. package/lib/column-matrix-renderer/matrix-value.pipe.d.ts +8 -0
  200. package/lib/column-renderer/column-renderer.component.d.ts +29 -0
  201. package/lib/constants.d.ts +6 -0
  202. package/lib/custom-date-time/custom-date-time.component.d.ts +26 -0
  203. package/lib/device-info-field-base.d.ts +12 -0
  204. package/lib/dynamic-page-size.pipe.d.ts +8 -0
  205. package/lib/empty-page/empty-page.component.d.ts +11 -0
  206. package/lib/file-in-dialog/file-in-dialog.component.d.ts +16 -0
  207. package/lib/form-dialog/form-dialog.component.d.ts +40 -0
  208. package/lib/form-dialog-less/form-dialog-less.component.d.ts +27 -0
  209. package/lib/form-page/form-page.component.d.ts +17 -0
  210. package/lib/form-page-base.d.ts +26 -0
  211. package/lib/form-toolbar-button/form-toolbar-button.component.d.ts +18 -0
  212. package/lib/form-wizard/form-wizard.component.d.ts +8 -0
  213. package/lib/fullscreen-dialog.directive.d.ts +14 -0
  214. package/lib/fundamental-dynamic-form/fundamental-dynamic-form.component.d.ts +58 -0
  215. package/lib/gantt-dhtml-chart-view/gantt-dhtml-chart-view.component.d.ts +18 -0
  216. package/lib/global-search/global-search.component.d.ts +12 -0
  217. package/lib/global-search-module/global-search-module.component.d.ts +18 -0
  218. package/lib/global-search-panel/global-search-panel.component.d.ts +11 -0
  219. package/lib/header-avatar/header-avatar.component.d.ts +8 -0
  220. package/lib/header-facet-form/header-facet-form.component.d.ts +9 -0
  221. package/lib/header-facet-key-value/header-facet-key-value.component.d.ts +11 -0
  222. package/lib/header-facet-microchart/header-facet-microchart.component.d.ts +8 -0
  223. package/lib/header-facet-plain-text/header-facet-plain-text.component.d.ts +11 -0
  224. package/lib/header-facet-progress/header-facet-progress.component.d.ts +11 -0
  225. package/lib/header-facet-rate/header-facet-rate.component.d.ts +11 -0
  226. package/lib/htree-create-new/htree-create-new.component.d.ts +13 -0
  227. package/lib/hyperlink/hyperlink.component.d.ts +7 -0
  228. package/lib/index.d.ts +85 -0
  229. package/lib/inline-save-and-cancel/inline-save-and-cancel.component.d.ts +11 -0
  230. package/lib/layout-actions/layout-actions.component.d.ts +23 -0
  231. package/lib/layout-control/layout-control.component.d.ts +65 -0
  232. package/lib/layout-wizard/layout-wizard.component.d.ts +27 -0
  233. package/lib/list-item/list-item.component.d.ts +13 -0
  234. package/lib/ly-empty-space/ly-empty-space.component.d.ts +14 -0
  235. package/lib/ly-horizontal-layout/ly-horizontal-layout.component.d.ts +22 -0
  236. package/lib/ly-label/ly-label.component.d.ts +15 -0
  237. package/lib/ly-layout-container/ly-layout-container.component.d.ts +26 -0
  238. package/lib/ly-layout-container-of-root/ly-layout-container-of-root.component.d.ts +8 -0
  239. package/lib/ly-layout-field-label/ly-layout-field-label.component.d.ts +13 -0
  240. package/lib/ly-layout-panel/ly-layout-panel.component.d.ts +25 -0
  241. package/lib/ly-line/ly-line.component.d.ts +17 -0
  242. package/lib/ly-simple-label/ly-simple-label.component.d.ts +11 -0
  243. package/lib/ly-tab-container/ly-tab-container.component.d.ts +16 -0
  244. package/lib/ly-tab-page/ly-tab-page.component.d.ts +18 -0
  245. package/lib/ly-vertical-layout/ly-vertical-layout.component.d.ts +18 -0
  246. package/lib/manage-filters-report/manage-filters-report.component.d.ts +24 -0
  247. package/lib/mask/mask.component.d.ts +9 -0
  248. package/lib/message-strip/message-strip.component.d.ts +11 -0
  249. package/lib/models/grid-data-provider.d.ts +26 -0
  250. package/lib/models/grid-view.d.ts +64 -0
  251. package/lib/models/index.d.ts +1 -0
  252. package/lib/no-data/no-data.component.d.ts +8 -0
  253. package/lib/page-with-form-handler-base.d.ts +10 -0
  254. package/lib/page-with-header/page-with-header.component.d.ts +29 -0
  255. package/lib/progress-indicator/progress-indicator.component.d.ts +8 -0
  256. package/lib/report-navigator/report-navigator.component.d.ts +21 -0
  257. package/lib/report-new-top-form/report-new-top-form.component.d.ts +18 -0
  258. package/lib/report-search-fields-hidden-settings/report-search-fields-hidden-settings.component.d.ts +14 -0
  259. package/lib/report-search-fields-manage/report-search-fields-manage.component.d.ts +20 -0
  260. package/lib/report-search-panel-save/report-search-panel-save.component.d.ts +27 -0
  261. package/lib/report-tree-base.d.ts +61 -0
  262. package/lib/report-view-renderer.directive.d.ts +82 -0
  263. package/lib/responsive-toolbar/responsive-toolbar.component.d.ts +19 -0
  264. package/lib/responsive-toolbar-renderer/responsive-toolbar-renderer.component.d.ts +24 -0
  265. package/lib/rich-text-static/rich-text-static.component.d.ts +24 -0
  266. package/lib/sap-font-class.pipe.d.ts +8 -0
  267. package/lib/sap-font.pipe.d.ts +9 -0
  268. package/lib/sap-ui-report-base.component.d.ts +133 -0
  269. package/lib/search-panel/search-panel.component.d.ts +13 -0
  270. package/lib/static-text/static-text.component.d.ts +7 -0
  271. package/lib/title/title.component.d.ts +7 -0
  272. package/lib/ui-asp-report-viewer/ui-asp-report-viewer.component.d.ts +7 -0
  273. package/lib/ui-button/ui-button.component.d.ts +11 -0
  274. package/lib/ui-calendar/ui-calendar.component.d.ts +16 -0
  275. package/lib/ui-card-view/ui-card-view.component.d.ts +16 -0
  276. package/lib/ui-card-view-horizontal-group/ui-card-view-horizontal-group.component.d.ts +9 -0
  277. package/lib/ui-check-box/ui-check-box.component.d.ts +12 -0
  278. package/lib/ui-color-ui/ui-color-ui.component.d.ts +16 -0
  279. package/lib/ui-container-with-button/ui-container-with-button.component.d.ts +11 -0
  280. package/lib/ui-date-range-ex/ui-date-range-ex.component.d.ts +36 -0
  281. package/lib/ui-date-time/ui-date-time.component.d.ts +24 -0
  282. package/lib/ui-editable-grid/ui-editable-grid.component.d.ts +43 -0
  283. package/lib/ui-exception-form/ui-exception-form.component.d.ts +16 -0
  284. package/lib/ui-file-linear-list-box/ui-file-linear-list-box.component.d.ts +51 -0
  285. package/lib/ui-form-panel/ui-form-panel.component.d.ts +24 -0
  286. package/lib/ui-form-panel-toolbar/ui-form-panel-toolbar.component.d.ts +13 -0
  287. package/lib/ui-gantt-chart/ui-gantt-chart.component.d.ts +15 -0
  288. package/lib/ui-graph/ui-graph.component.d.ts +9 -0
  289. package/lib/ui-grid/ui-grid.component.d.ts +12 -0
  290. package/lib/ui-grid-columns/ui-grid-columns.component.d.ts +14 -0
  291. package/lib/ui-grid-filter-item/ui-grid-filter-item.component.d.ts +19 -0
  292. package/lib/ui-grid-filter-settings/ui-grid-filter-settings.component.d.ts +24 -0
  293. package/lib/ui-grid-sort-item/ui-grid-sort-item.component.d.ts +25 -0
  294. package/lib/ui-grid-sort-setting/ui-grid-sort-setting.component.d.ts +28 -0
  295. package/lib/ui-info-bar-panel/ui-info-bar-panel.component.d.ts +5 -0
  296. package/lib/ui-label/ui-label.component.d.ts +6 -0
  297. package/lib/ui-linear-list-container-with-button/ui-linear-list-container-with-button.component.d.ts +62 -0
  298. package/lib/ui-list-view/ui-list-view.component.d.ts +15 -0
  299. package/lib/ui-matrix-view/ui-matrix-view.component.d.ts +45 -0
  300. package/lib/ui-mo-info-combo-viewer/ui-mo-info-combo-viewer.component.d.ts +7 -0
  301. package/lib/ui-mo-info-general-object-ui/ui-mo-info-general-object-ui.component.d.ts +6 -0
  302. package/lib/ui-mo-info-sub-form-ui/ui-mo-info-sub-form-ui.component.d.ts +13 -0
  303. package/lib/ui-mo-info-ulv-combo/ui-mo-info-ulv-combo.component.d.ts +78 -0
  304. package/lib/ui-monaco-editor/ui-monaco-editor.component.d.ts +7 -0
  305. package/lib/ui-multi-select-combo/ui-multi-select-combo.component.d.ts +21 -0
  306. package/lib/ui-num-decimal-ui/ui-num-decimal-ui.component.d.ts +11 -0
  307. package/lib/ui-num-int-ui/ui-num-int-ui.component.d.ts +10 -0
  308. package/lib/ui-pdf-viewer/ui-pdf-viewer.component.d.ts +63 -0
  309. package/lib/ui-picture-file/ui-picture-file.component.d.ts +27 -0
  310. package/lib/ui-pictures-info/ui-pictures-info.component.d.ts +68 -0
  311. package/lib/ui-radio-group/ui-radio-group.component.d.ts +9 -0
  312. package/lib/ui-read-only-field/ui-read-only-field.component.d.ts +11 -0
  313. package/lib/ui-report-container/ui-report-container.component.d.ts +17 -0
  314. package/lib/ui-search-command-info-ui/ui-search-command-info-ui.component.d.ts +9 -0
  315. package/lib/ui-simple-combo/ui-simple-combo.component.d.ts +13 -0
  316. package/lib/ui-single-picture/ui-single-picture.component.d.ts +13 -0
  317. package/lib/ui-switch-button/ui-switch-button.component.d.ts +11 -0
  318. package/lib/ui-table-view/ui-table-view.component.d.ts +29 -0
  319. package/lib/ui-text-area/ui-text-area.component.d.ts +15 -0
  320. package/lib/ui-text-field/ui-text-field.component.d.ts +14 -0
  321. package/lib/ui-text-field-auto-complete/ui-text-field-auto-complete.component.d.ts +13 -0
  322. package/lib/ui-time-span/ui-time-span.component.d.ts +10 -0
  323. package/lib/ui-tinymce/ui-tinymce.component.d.ts +17 -0
  324. package/lib/ui-tree/ui-tree.component.d.ts +32 -0
  325. package/lib/ui-tree-view/ui-tree-view.component.d.ts +41 -0
  326. package/lib/ui-ulv-form-multi-select-ui/ui-ulv-form-multi-select-ui.component.d.ts +9 -0
  327. package/lib/ui-ulv-main-ui/ui-ulv-main-ui.component.d.ts +67 -0
  328. package/lib/ui-workflow-panel-ui/ui-workflow-panel-ui.component.d.ts +16 -0
  329. package/lib/ul-loading-mask-ui/ul-loading-mask-ui.component.d.ts +20 -0
  330. package/lib/ul-msg-box-adapter/ul-msg-box-adapter.component.d.ts +48 -0
  331. package/lib/ul-notify-popup/ul-notify-popup.component.d.ts +41 -0
  332. package/lib/ul-toast-adapter/ul-toast-adapter.component.d.ts +13 -0
  333. package/lib/ulv-column-settings/ulv-column-settings.component.d.ts +19 -0
  334. package/lib/ulv-context-menu/ulv-context-menu.component.d.ts +24 -0
  335. package/lib/ulv-filter-settings/ulv-filter-settings.component.d.ts +19 -0
  336. package/lib/ulv-form-multi-select/ulv-form-multi-select.component.d.ts +26 -0
  337. package/lib/ulv-groupby-settings/ulv-groupby-settings.component.d.ts +16 -0
  338. package/lib/ulv-paging/ulv-paging.component.d.ts +27 -0
  339. package/lib/ulv-selection/ulv-selection.component.d.ts +43 -0
  340. package/lib/ulv-settings/ulv-settings.component.d.ts +43 -0
  341. package/lib/ulv-sort-settings/ulv-sort-settings.component.d.ts +16 -0
  342. package/lib/ulv-toolbar/ulv-toolbar.component.d.ts +47 -0
  343. package/lib/upload-file-status.pipe.d.ts +9 -0
  344. package/lib/wizard-layout.directive.d.ts +39 -0
  345. package/package.json +31 -0
  346. package/public-api.d.ts +166 -0
@@ -0,0 +1,21 @@
1
+ import { Component, ElementRef, ViewChild } from '@angular/core';
2
+ import { NumberBaseComponent } from 'barsa-novin-ray-core';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@fundamental-ngx/core/form";
5
+ import * as i2 from "@angular/common";
6
+ export class UiNumIntUiComponent extends NumberBaseComponent {
7
+ ngOnInit() {
8
+ this.inputElement = this.inputRef.nativeElement;
9
+ super.ngOnInit();
10
+ }
11
+ }
12
+ UiNumIntUiComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UiNumIntUiComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
13
+ UiNumIntUiComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: UiNumIntUiComponent, selector: "bsu-ui-num-int-ui", viewQueries: [{ propertyName: "inputRef", first: true, predicate: ["inputRef"], descendants: true, read: ElementRef, static: true }], usesInheritance: true, ngImport: i0, template: "<input\r\n #inputRef\r\n fd-form-control\r\n [placeholder]=\"Setting.NullText || ''\"\r\n [attr.readonly]=\"(readonly$ | async) === true ? true : null\"\r\n [attr.disabled]=\"(disable$ | async) === true ? true : null\"\r\n [type]=\"Setting.IsPassword ? 'password' : 'text'\"\r\n [type]=\"hasMask ? 'text' : 'number'\"\r\n [id]=\"id\"\r\n [style.direction]=\"Setting.IsLtr === true ? 'ltr' : null\"\r\n (keydown)=\"onKeyDown($event)\"\r\n (input)=\"onValueChange($event)\"\r\n/>\r\n", styles: [":host{display:block}.number-input{display:block}\n"], dependencies: [{ kind: "component", type: i1.FormControlComponent, selector: "[fd-form-control]", inputs: ["state", "type", "class"] }, { kind: "directive", type: i1.InputFormControlDirective, selector: "input[fd-form-control]" }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }] });
14
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UiNumIntUiComponent, decorators: [{
15
+ type: Component,
16
+ args: [{ selector: 'bsu-ui-num-int-ui', template: "<input\r\n #inputRef\r\n fd-form-control\r\n [placeholder]=\"Setting.NullText || ''\"\r\n [attr.readonly]=\"(readonly$ | async) === true ? true : null\"\r\n [attr.disabled]=\"(disable$ | async) === true ? true : null\"\r\n [type]=\"Setting.IsPassword ? 'password' : 'text'\"\r\n [type]=\"hasMask ? 'text' : 'number'\"\r\n [id]=\"id\"\r\n [style.direction]=\"Setting.IsLtr === true ? 'ltr' : null\"\r\n (keydown)=\"onKeyDown($event)\"\r\n (input)=\"onValueChange($event)\"\r\n/>\r\n", styles: [":host{display:block}.number-input{display:block}\n"] }]
17
+ }], propDecorators: { inputRef: [{
18
+ type: ViewChild,
19
+ args: ['inputRef', { read: ElementRef, static: true }]
20
+ }] } });
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktbnVtLWludC11aS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1zYXAtdWkvc3JjL2xpYi91aS1udW0taW50LXVpL3VpLW51bS1pbnQtdWkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvdWktbnVtLWludC11aS91aS1udW0taW50LXVpLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7OztBQU0zRCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsbUJBQW1CO0lBS3hELFFBQVE7UUFDSixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDO1FBQ2hELEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNyQixDQUFDOztnSEFSUSxtQkFBbUI7b0dBQW5CLG1CQUFtQiwwSUFDRyxVQUFVLGtFQ1Q3QyxvZ0JBYUE7MkZETGEsbUJBQW1CO2tCQUwvQixTQUFTOytCQUNJLG1CQUFtQjs4QkFNN0IsUUFBUTtzQkFEUCxTQUFTO3VCQUFDLFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IE51bWJlckJhc2VDb21wb25lbnQgfSBmcm9tICdiYXJzYS1ub3Zpbi1yYXktY29yZSc7XHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdic3UtdWktbnVtLWludC11aScsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vdWktbnVtLWludC11aS5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi91aS1udW0taW50LXVpLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFVpTnVtSW50VWlDb21wb25lbnQgZXh0ZW5kcyBOdW1iZXJCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIEBWaWV3Q2hpbGQoJ2lucHV0UmVmJywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSlcclxuICAgIGlucHV0UmVmOiBFbGVtZW50UmVmO1xyXG4gICAgaW5wdXRFbGVtZW50OiBIVE1MSW5wdXRFbGVtZW50IHwgbnVsbCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlucHV0RWxlbWVudCA9IHRoaXMuaW5wdXRSZWYubmF0aXZlRWxlbWVudDtcclxuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG4gICAgfVxyXG59XHJcbiIsIjxpbnB1dFxyXG4gICAgI2lucHV0UmVmXHJcbiAgICBmZC1mb3JtLWNvbnRyb2xcclxuICAgIFtwbGFjZWhvbGRlcl09XCJTZXR0aW5nLk51bGxUZXh0IHx8ICcnXCJcclxuICAgIFthdHRyLnJlYWRvbmx5XT1cIihyZWFkb25seSQgfCBhc3luYykgPT09IHRydWUgPyB0cnVlIDogbnVsbFwiXHJcbiAgICBbYXR0ci5kaXNhYmxlZF09XCIoZGlzYWJsZSQgfCBhc3luYykgPT09IHRydWUgPyB0cnVlIDogbnVsbFwiXHJcbiAgICBbdHlwZV09XCJTZXR0aW5nLklzUGFzc3dvcmQgPyAncGFzc3dvcmQnIDogJ3RleHQnXCJcclxuICAgIFt0eXBlXT1cImhhc01hc2sgPyAndGV4dCcgOiAnbnVtYmVyJ1wiXHJcbiAgICBbaWRdPVwiaWRcIlxyXG4gICAgW3N0eWxlLmRpcmVjdGlvbl09XCJTZXR0aW5nLklzTHRyID09PSB0cnVlID8gJ2x0cicgOiBudWxsXCJcclxuICAgIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQpXCJcclxuICAgIChpbnB1dCk9XCJvblZhbHVlQ2hhbmdlKCRldmVudClcIlxyXG4vPlxyXG4iXX0=
@@ -0,0 +1,216 @@
1
+ import { ChangeDetectionStrategy, Component } from '@angular/core';
2
+ import { exhaustMap, filter, takeUntil, tap } from 'rxjs/operators';
3
+ import { BarsaApi, UploadService, FilesValidationHelper, isImage, getImagePath, getIcon, getValidExtension } from 'barsa-novin-ray-core';
4
+ import { DeviceInfoFieldBaseComponent } from '../device-info-field-base';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/common";
7
+ import * as i2 from "@angular/forms";
8
+ import * as i3 from "barsa-novin-ray-core";
9
+ import * as i4 from "@fundamental-ngx/core/busy-indicator";
10
+ import * as i5 from "@fundamental-ngx/core/button";
11
+ import * as i6 from "@fundamental-ngx/core/file-uploader";
12
+ import * as i7 from "@fundamental-ngx/core/object-identifier";
13
+ import * as i8 from "@fundamental-ngx/core/toolbar";
14
+ export class UiPdfViewerComponent extends DeviceInfoFieldBaseComponent {
15
+ constructor() {
16
+ super(...arguments);
17
+ this.canDelete = true;
18
+ this.canSave = true;
19
+ }
20
+ ngOnInit() {
21
+ this.progress$ = this._uploadService.progress$;
22
+ this.uploadState$ = this._uploadService.uploadState$;
23
+ this.uploading$ = this._uploadService.uploading$;
24
+ super.ngOnInit();
25
+ this.value$.subscribe((value) => {
26
+ this.value = value;
27
+ this._refresh();
28
+ });
29
+ this.refresh$.subscribe((fromServer) => {
30
+ this._refresh(fromServer);
31
+ });
32
+ this.filesValidationHelper = new FilesValidationHelper(this.Setting.MaxFileCount, this.Setting.MaxFileSizeKb, this.Setting.MaxTotalFileSizeKb);
33
+ this._refreshButtons();
34
+ this._refresh();
35
+ this.validExtension = this.context.useWordEditor
36
+ ? '.doc,.docx'
37
+ : getValidExtension(this.Setting.ValidExtensions);
38
+ this.singleControl = this.Setting.ViewType === 'SingleFileControl';
39
+ }
40
+ onEdit() {
41
+ this._commandClickHandler('Edit');
42
+ }
43
+ onView(event) {
44
+ const e = { ctrlKey: event.ctrlKey };
45
+ this._commandClickHandler('OOView', e);
46
+ }
47
+ onDownload() {
48
+ this._commandClickHandler('Download');
49
+ }
50
+ onFileSelection(files) {
51
+ this._uploadToServer(files);
52
+ }
53
+ onDelete() {
54
+ this._commandClickHandler('Delete');
55
+ }
56
+ onEditInWord() {
57
+ this._commandClickHandler('ODEdit');
58
+ }
59
+ onOfficeOnline(event) {
60
+ const e = { ctrlKey: event.ctrlKey };
61
+ this._commandClickHandler('OOEdit', e);
62
+ }
63
+ onRefresh() {
64
+ this._commandClickHandler('Refresh');
65
+ }
66
+ DownloadFileId(fileId, viewInBrowser, convertTo, forOcx, isOfficeOnline) {
67
+ setTimeout(() => {
68
+ BarsaApi.Ul.LoadingMask.Mask(this._el.nativeElement);
69
+ }, 30);
70
+ BarsaApi.Common.File.DownloadFileContent.bind(this)({
71
+ fileId,
72
+ fileUrl: null,
73
+ viewInBrowser,
74
+ convertTo,
75
+ isOfficeOnline,
76
+ forOcx
77
+ }, (response) => {
78
+ if (response.succeed) {
79
+ const blob = BarsaApi.Common.File.B64toBlob(response.content, response.contentType);
80
+ const url = window.URL || window.webkitURL;
81
+ this.pdfSource = this._domSanitizer.bypassSecurityTrustResourceUrl(url.createObjectURL(blob));
82
+ this.hasPdf = true;
83
+ this._cdr.detectChanges();
84
+ this._hideMask();
85
+ }
86
+ }, (error) => {
87
+ this._hideMask();
88
+ alert(error);
89
+ });
90
+ }
91
+ _uploadToServer(selectedFiles) {
92
+ this.filesValidationHelper
93
+ .validateFiles(selectedFiles)
94
+ .pipe(takeUntil(this._onDestroy$), filter((files) => files.length > 0), exhaustMap((files) => this._uploadFile(files)))
95
+ .subscribe();
96
+ }
97
+ _refreshButtons() {
98
+ this._refreshButtonsHelper(false);
99
+ BarsaApi.Common.Async.Waterfall('Common.File.IsAgentActive', [
100
+ // Common.FileAgent.IsAgentActive.bind(Common.FileAgent),
101
+ BarsaApi.Common.AgentHelper.Init.bind(BarsaApi.Common.AgentHelper)
102
+ ], (err, result) => {
103
+ const agentIsActive = result === 'OK';
104
+ this._refreshButtonsHelper(agentIsActive);
105
+ });
106
+ }
107
+ _refreshButtonsHelper(isAgentActive) {
108
+ this.disableOrReadonly$.subscribe((disableOrReadonly) => {
109
+ const canSave = this.canSave;
110
+ this.canDelete = !disableOrReadonly;
111
+ const hasValue = !BarsaApi.Ext.isEmpty(this.value);
112
+ const edit0 = canSave && disableOrReadonly !== true;
113
+ this.canEdit = edit0 && isAgentActive;
114
+ this.canDownload = !this.Setting.IsWordViewer || (!isAgentActive && edit0);
115
+ this.canUpload = this.canDownload && canSave && disableOrReadonly !== true;
116
+ this.hasFileName = !this.context.Setting.IsWordViewer;
117
+ this.canRemove = this.canDownload && canSave && disableOrReadonly !== true;
118
+ this.officeOnline = hasValue && canSave && disableOrReadonly !== true && this.context.OfficeOnline;
119
+ this.useWordEditor = hasValue && canSave && disableOrReadonly !== true && this.context.useWordEditor;
120
+ });
121
+ }
122
+ _commandClickHandler(itemId, keyboardEvent) {
123
+ const commandId = itemId;
124
+ let files = this.value;
125
+ if (BarsaApi.Ext.isArray(files)) {
126
+ files = files[0];
127
+ }
128
+ const fileId = files?.Id;
129
+ this.context.fireEvent('CommandRequest', this, commandId, fileId, keyboardEvent);
130
+ }
131
+ _refresh(fromServer) {
132
+ const officeOnline = fromServer === false;
133
+ this.fileName = '';
134
+ if (BarsaApi.Ext.isEmpty(this.value)) {
135
+ this.hasPdf = false;
136
+ return;
137
+ }
138
+ let files = this.value;
139
+ if (BarsaApi.Ext.isArray(files)) {
140
+ files = files[0];
141
+ }
142
+ const fileId = files.Id;
143
+ if (!fileId || files.IsDeleted) {
144
+ if (files.IsDeleted) {
145
+ this.hasPdf = false;
146
+ }
147
+ return;
148
+ }
149
+ this.fallbackLink = `امکان نمایش فایل در این مرورگر وجود ندارد.
150
+ برای باز کردن فایل از لینک زیر استفاده کنید: </br> <a href='${BarsaApi.Common.File.CreateAttachmentUrl(fileId, false, true)}'>دانلود فایل بصورت pdf</a> </br> <a href='${BarsaApi.Common.File.CreateAttachmentUrl(fileId, false, false)}'>دانلود فایل بصورت بصورت اصلی</a>`;
151
+ if (!BarsaApi.Ext.isIE) {
152
+ // const options = {
153
+ // fallbackLink: this.fallbackLink,
154
+ // pdfOpenParams: {
155
+ // view: 'FitH',
156
+ // scrollbar: '0',
157
+ // toolbar: '0',
158
+ // statusbar: '0',
159
+ // messages: '0',
160
+ // navpanes: '0'
161
+ // }
162
+ // };
163
+ let convertTo = isImage(files.Type) ? files.Type : '';
164
+ convertTo = 'pdf,doc,docx,word'.indexOf(files.Type) > -1 ? 'pdf' : convertTo;
165
+ if (!convertTo) {
166
+ this.singleControl = true;
167
+ this.updateSingleControl(files);
168
+ return;
169
+ }
170
+ this.singleControl = false;
171
+ this.DownloadFileId(fileId, true, convertTo, null, officeOnline);
172
+ }
173
+ else {
174
+ // const url = Common.File.CreateAttachmentUrl(fileId, false);
175
+ this.canNotRenderPdf = true;
176
+ }
177
+ }
178
+ _uploadFile(files) {
179
+ const formData = new FormData();
180
+ files.forEach((file) => {
181
+ formData.append('unicFileName', 'x' + BarsaApi.Common.Util.GetNewMetaGuid() + ';;;' + file.name);
182
+ formData.append('file', file);
183
+ });
184
+ return this._uploadService.upload(formData, this.Setting.ControlFieldDefId).pipe(tap((res) => {
185
+ if (Array.isArray(res)) {
186
+ this._updateValue(res);
187
+ }
188
+ }));
189
+ }
190
+ _updateValue(res) {
191
+ if (this.Setting.ViewType !== 'LinearListBox') {
192
+ this.updateSingleControl(res[0]);
193
+ }
194
+ this.fireContextEvent('Change', this.context, res);
195
+ }
196
+ updateSingleControl(val) {
197
+ if (isImage(val.Type)) {
198
+ this.singleFileThumbnailUrl = getImagePath('ID', '', val.Id);
199
+ }
200
+ else {
201
+ this.singleFileThumbnailUrl = getIcon(val.Type);
202
+ }
203
+ }
204
+ _hideMask() {
205
+ setTimeout(() => {
206
+ BarsaApi.Ul.LoadingMask.Unmask(this._el.nativeElement);
207
+ }, 30);
208
+ }
209
+ }
210
+ UiPdfViewerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UiPdfViewerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
211
+ UiPdfViewerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: UiPdfViewerComponent, selector: "bsu-ui-pdf-viewer", providers: [UploadService], usesInheritance: true, ngImport: i0, template: "<ng-container *untilInView=\"el\">\r\n <fd-toolbar [transparent]=\"true\" [shouldOverflow]=\"true\">\r\n <fd-file-uploader\r\n #uploader\r\n [style.display]=\"'none'\"\r\n fd-toolbar-item\r\n [id]=\"id\"\r\n [name]=\"'pdf_' + id\"\r\n [placeholder]=\"'AttachFile' | bbbTranslate\"\r\n [buttonLabel]=\"'AttachFile' | bbbTranslate\"\r\n [buttonAriaLabel]=\"'AttachFile' | bbbTranslate\"\r\n [accept]=\"validExtension\"\r\n [(ngModel)]=\"files\"\r\n [multiple]=\"false\"\r\n (selectedFilesChanged)=\"onFileSelection($event)\"\r\n [contentDensity]=\"(contentDensity$ | async)!!\"\r\n ></fd-file-uploader>\r\n <button\r\n fd-button\r\n fd-toolbar-item\r\n glyph=\"attachment\"\r\n [fdType]=\"'transparent'\"\r\n [disabled]=\"!canUpload\"\r\n (click)=\"uploader.open()\"\r\n ></button>\r\n <button\r\n [disabled]=\"!(canDelete && value)\"\r\n fd-button\r\n fd-toolbar-item\r\n class=\"delete\"\r\n glyph=\"delete\"\r\n [fdType]=\"'transparent'\"\r\n (click)=\"onDelete()\"\r\n ></button>\r\n <button\r\n *ngIf=\"canEdit\"\r\n fd-toolbar-item\r\n fd-button\r\n glyph=\"edit\"\r\n [fdType]=\"'transparent'\"\r\n (click)=\"onEdit()\"\r\n ></button>\r\n <button\r\n *ngIf=\"canDownload\"\r\n fd-toolbar-item\r\n fd-button\r\n glyph=\"download\"\r\n [fdType]=\"'transparent'\"\r\n (click)=\"onDownload()\"\r\n ></button>\r\n\r\n <button\r\n *ngIf=\"useWordEditor\"\r\n fd-toolbar-item\r\n fd-button\r\n glyph=\"doc-attachment\"\r\n [fdType]=\"'transparent'\"\r\n [label]=\"'EditInWord' | bbbTranslate\"\r\n (click)=\"onEditInWord()\"\r\n ></button>\r\n <button\r\n *ngIf=\"officeOnline\"\r\n fd-toolbar-item\r\n fd-button\r\n glyph=\"doc-attachment\"\r\n [fdType]=\"'transparent'\"\r\n [label]=\"'OfficeOnline' | bbbTranslate\"\r\n (click)=\"onOfficeOnline($event)\"\r\n ></button>\r\n <button fd-toolbar-item fd-button glyph=\"refresh\" [fdType]=\"'transparent'\" (click)=\"onRefresh()\"></button>\r\n\r\n <fd-busy-indicator fd-toolbar-item [loading]=\"(uploading$ | async)!!\"></fd-busy-indicator>\r\n </fd-toolbar>\r\n <object\r\n *ngIf=\"hasPdf; else HatchBackground\"\r\n style=\"flex-grow: 1\"\r\n [attr.data]=\"pdfSource\"\r\n type=\"application/pdf\"\r\n width=\"100%\"\r\n height=\"100%\"\r\n [attr.html]=\"fallbackLink\"\r\n ></object>\r\n <ng-template #HatchBackground>\r\n <ng-container *ngIf=\"singleControl && value && !value.IsDeleted; else noFile\">\r\n <div style=\"display: flex\">\r\n <img *ngIf=\"singleFileThumbnailUrl\" [src]=\"singleFileThumbnailUrl\" />\r\n <fd-object-identifier>\r\n {{ value.FileName }}\r\n </fd-object-identifier>\r\n </div>\r\n </ng-container>\r\n <ng-template #noFile>\r\n <div class=\"hatchBackground\"></div>\r\n </ng-template>\r\n </ng-template>\r\n</ng-container>\r\n", styles: [":host{display:flex;flex-direction:column;min-height:calc(100vh - 250px)}:host ::ng-deep .delete button{border-color:transparent!important;background-color:transparent!important}:host ::ng-deep .fd-file-uploader input{display:none}.single-control{height:50px}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.UntilInViewDirective, selector: "[untilInView]", inputs: ["untilInView", "intersectionDebounce"] }, { kind: "component", type: i4.BusyIndicatorComponent, selector: "fd-busy-indicator", inputs: ["loading", "size", "block", "ariaLabel", "title", "label", "ariaLive"] }, { kind: "component", type: i5.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i6.FileUploaderComponent, selector: "fd-file-uploader", inputs: ["disabled", "required", "multiple", "accept", "dragndrop", "maxFileSize", "minFileSize", "id", "ariaLabel", "ariaLabelledBy", "placeholder", "buttonLabel", "buttonAriaLabel", "state", "fileLimit", "inputHidden", "width"], outputs: ["selectedFilesChanged", "selectedInvalidFiles", "onDragEnter", "onDragLeave"] }, { kind: "component", type: i7.ObjectIdentifierComponent, selector: "fd-object-identifier", inputs: ["description", "bold", "medium"] }, { kind: "component", type: i8.ToolbarComponent, selector: "fd-toolbar", inputs: ["class", "shouldOverflow", "fdType", "hasTitle", "title", "active", "clearBorder", "forceOverflow", "tabindex"] }, { kind: "directive", type: i8.ToolbarItemDirective, selector: "[fd-toolbar-item]" }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
212
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UiPdfViewerComponent, decorators: [{
213
+ type: Component,
214
+ args: [{ selector: 'bsu-ui-pdf-viewer', providers: [UploadService], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *untilInView=\"el\">\r\n <fd-toolbar [transparent]=\"true\" [shouldOverflow]=\"true\">\r\n <fd-file-uploader\r\n #uploader\r\n [style.display]=\"'none'\"\r\n fd-toolbar-item\r\n [id]=\"id\"\r\n [name]=\"'pdf_' + id\"\r\n [placeholder]=\"'AttachFile' | bbbTranslate\"\r\n [buttonLabel]=\"'AttachFile' | bbbTranslate\"\r\n [buttonAriaLabel]=\"'AttachFile' | bbbTranslate\"\r\n [accept]=\"validExtension\"\r\n [(ngModel)]=\"files\"\r\n [multiple]=\"false\"\r\n (selectedFilesChanged)=\"onFileSelection($event)\"\r\n [contentDensity]=\"(contentDensity$ | async)!!\"\r\n ></fd-file-uploader>\r\n <button\r\n fd-button\r\n fd-toolbar-item\r\n glyph=\"attachment\"\r\n [fdType]=\"'transparent'\"\r\n [disabled]=\"!canUpload\"\r\n (click)=\"uploader.open()\"\r\n ></button>\r\n <button\r\n [disabled]=\"!(canDelete && value)\"\r\n fd-button\r\n fd-toolbar-item\r\n class=\"delete\"\r\n glyph=\"delete\"\r\n [fdType]=\"'transparent'\"\r\n (click)=\"onDelete()\"\r\n ></button>\r\n <button\r\n *ngIf=\"canEdit\"\r\n fd-toolbar-item\r\n fd-button\r\n glyph=\"edit\"\r\n [fdType]=\"'transparent'\"\r\n (click)=\"onEdit()\"\r\n ></button>\r\n <button\r\n *ngIf=\"canDownload\"\r\n fd-toolbar-item\r\n fd-button\r\n glyph=\"download\"\r\n [fdType]=\"'transparent'\"\r\n (click)=\"onDownload()\"\r\n ></button>\r\n\r\n <button\r\n *ngIf=\"useWordEditor\"\r\n fd-toolbar-item\r\n fd-button\r\n glyph=\"doc-attachment\"\r\n [fdType]=\"'transparent'\"\r\n [label]=\"'EditInWord' | bbbTranslate\"\r\n (click)=\"onEditInWord()\"\r\n ></button>\r\n <button\r\n *ngIf=\"officeOnline\"\r\n fd-toolbar-item\r\n fd-button\r\n glyph=\"doc-attachment\"\r\n [fdType]=\"'transparent'\"\r\n [label]=\"'OfficeOnline' | bbbTranslate\"\r\n (click)=\"onOfficeOnline($event)\"\r\n ></button>\r\n <button fd-toolbar-item fd-button glyph=\"refresh\" [fdType]=\"'transparent'\" (click)=\"onRefresh()\"></button>\r\n\r\n <fd-busy-indicator fd-toolbar-item [loading]=\"(uploading$ | async)!!\"></fd-busy-indicator>\r\n </fd-toolbar>\r\n <object\r\n *ngIf=\"hasPdf; else HatchBackground\"\r\n style=\"flex-grow: 1\"\r\n [attr.data]=\"pdfSource\"\r\n type=\"application/pdf\"\r\n width=\"100%\"\r\n height=\"100%\"\r\n [attr.html]=\"fallbackLink\"\r\n ></object>\r\n <ng-template #HatchBackground>\r\n <ng-container *ngIf=\"singleControl && value && !value.IsDeleted; else noFile\">\r\n <div style=\"display: flex\">\r\n <img *ngIf=\"singleFileThumbnailUrl\" [src]=\"singleFileThumbnailUrl\" />\r\n <fd-object-identifier>\r\n {{ value.FileName }}\r\n </fd-object-identifier>\r\n </div>\r\n </ng-container>\r\n <ng-template #noFile>\r\n <div class=\"hatchBackground\"></div>\r\n </ng-template>\r\n </ng-template>\r\n</ng-container>\r\n", styles: [":host{display:flex;flex-direction:column;min-height:calc(100vh - 250px)}:host ::ng-deep .delete button{border-color:transparent!important;background-color:transparent!important}:host ::ng-deep .fd-file-uploader input{display:none}.single-control{height:50px}\n"] }]
215
+ }] });
216
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktcGRmLXZpZXdlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1zYXAtdWkvc3JjL2xpYi91aS1wZGYtdmlld2VyL3VpLXBkZi12aWV3ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvdWktcGRmLXZpZXdlci91aS1wZGYtdmlld2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFHM0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXBFLE9BQU8sRUFDSCxRQUFRLEVBQ1IsYUFBYSxFQUNiLHFCQUFxQixFQUNyQixPQUFPLEVBQ1AsWUFBWSxFQUNaLE9BQU8sRUFDUCxpQkFBaUIsRUFDcEIsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7Ozs7OztBQVN6RSxNQUFNLE9BQU8sb0JBQXFCLFNBQVEsNEJBQTRCO0lBUHRFOztRQW9DSSxjQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLFlBQU8sR0FBRyxJQUFJLENBQUM7S0E0T2xCO0lBdE9HLFFBQVE7UUFDSixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDO1FBQy9DLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUM7UUFDckQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQztRQUNqRCxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLE1BQU0sQ0FB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QUM7U0FDcEM7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVPLG1CQUFtQixDQUFDLEdBQVE7UUFDaEMsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ25CLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxZQUFZLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDaEU7YUFBTTtZQUNILElBQUksQ0FBQyxzQkFBc0IsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ25EO0lBQ0wsQ0FBQztJQUNPLFNBQVM7UUFDYixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ1osUUFBUSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDM0QsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ1gsQ0FBQzs7aUhBelFRLG9CQUFvQjtxR0FBcEIsb0JBQW9CLDRDQUhsQixDQUFDLGFBQWEsQ0FBQyxpRENwQjlCLGdnSEFnR0E7MkZEekVhLG9CQUFvQjtrQkFQaEMsU0FBUzsrQkFDSSxtQkFBbUIsYUFHbEIsQ0FBQyxhQUFhLENBQUMsbUJBQ1QsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2FmZVJlc291cmNlVXJsIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBleGhhdXN0TWFwLCBmaWx0ZXIsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ29udGVudERlbnNpdHkgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUnO1xuaW1wb3J0IHtcbiAgICBCYXJzYUFwaSxcbiAgICBVcGxvYWRTZXJ2aWNlLFxuICAgIEZpbGVzVmFsaWRhdGlvbkhlbHBlcixcbiAgICBpc0ltYWdlLFxuICAgIGdldEltYWdlUGF0aCxcbiAgICBnZXRJY29uLFxuICAgIGdldFZhbGlkRXh0ZW5zaW9uXG59IGZyb20gJ2JhcnNhLW5vdmluLXJheS1jb3JlJztcbmltcG9ydCB7IERldmljZUluZm9GaWVsZEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9kZXZpY2UtaW5mby1maWVsZC1iYXNlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdic3UtdWktcGRmLXZpZXdlcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3VpLXBkZi12aWV3ZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3VpLXBkZi12aWV3ZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgICBwcm92aWRlcnM6IFtVcGxvYWRTZXJ2aWNlXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBVaVBkZlZpZXdlckNvbXBvbmVudCBleHRlbmRzIERldmljZUluZm9GaWVsZEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIGZpbGVOYW1lOiBzdHJpbmc7XG4gICAgZmFsbGJhY2tMaW5rOiBhbnk7XG4gICAgY2FuTm90UmVuZGVyUGRmOiBib29sZWFuO1xuICAgIHBkZlNvdXJjZTogU2FmZVJlc291cmNlVXJsO1xuICAgIGhhc1BkZjogYm9vbGVhbjtcbiAgICBwZGZPYmplY3Q6IHtcbiAgICAgICAgYXV0b0VsOiB7XG4gICAgICAgICAgICB0YWc6IHN0cmluZztcbiAgICAgICAgICAgIGRhdGE6IHN0cmluZztcbiAgICAgICAgICAgIHR5cGU6IHN0cmluZztcbiAgICAgICAgICAgIHdpZHRoOiBzdHJpbmc7XG4gICAgICAgICAgICBoZWlnaHQ6IHN0cmluZztcbiAgICAgICAgICAgIGh0bWw6IGFueTtcbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgdXBsb2FkU3RhdGUkOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gICAgcHJvZ3Jlc3MkOiBPYnNlcnZhYmxlPGFueT47XG4gICAgdXBsb2FkaW5nJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgICBmaWxlczogRmlsZVtdO1xuICAgIGNvbnRlbnREZW5zaXR5JDogT2JzZXJ2YWJsZTxDb250ZW50RGVuc2l0eT47XG4gICAgb2ZmaWNlT25saW5lOiBhbnk7XG4gICAgdXNlV29yZEVkaXRvcjogYW55O1xuICAgIGhhc0ZpbGVOYW1lOiBib29sZWFuO1xuICAgIGNhblJlbW92ZTogYm9vbGVhbjtcbiAgICBjYW5VcGxvYWQ6IGJvb2xlYW47XG4gICAgY2FuRWRpdDogYm9vbGVhbjtcbiAgICBjYW5Eb3dubG9hZDogYm9vbGVhbjtcbiAgICBjYW5EZWxldGUgPSB0cnVlO1xuICAgIGNhblNhdmUgPSB0cnVlO1xuICAgIHZhbGlkRXh0ZW5zaW9uOiBzdHJpbmc7XG4gICAgZmlsZXNWYWxpZGF0aW9uSGVscGVyOiBGaWxlc1ZhbGlkYXRpb25IZWxwZXI7XG4gICAgc2luZ2xlQ29udHJvbDogYm9vbGVhbjtcbiAgICBzaW5nbGVGaWxlVGh1bWJuYWlsVXJsOiBzdHJpbmc7XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wcm9ncmVzcyQgPSB0aGlzLl91cGxvYWRTZXJ2aWNlLnByb2dyZXNzJDtcbiAgICAgICAgdGhpcy51cGxvYWRTdGF0ZSQgPSB0aGlzLl91cGxvYWRTZXJ2aWNlLnVwbG9hZFN0YXRlJDtcbiAgICAgICAgdGhpcy51cGxvYWRpbmckID0gdGhpcy5fdXBsb2FkU2VydmljZS51cGxvYWRpbmckO1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICB0aGlzLnZhbHVlJC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLl9yZWZyZXNoKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJlZnJlc2gkLnN1YnNjcmliZSgoZnJvbVNlcnZlcjogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgdGhpcy5fcmVmcmVzaChmcm9tU2VydmVyKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZmlsZXNWYWxpZGF0aW9uSGVscGVyID0gbmV3IEZpbGVzVmFsaWRhdGlvbkhlbHBlcihcbiAgICAgICAgICAgIHRoaXMuU2V0dGluZy5NYXhGaWxlQ291bnQsXG4gICAgICAgICAgICB0aGlzLlNldHRpbmcuTWF4RmlsZVNpemVLYixcbiAgICAgICAgICAgIHRoaXMuU2V0dGluZy5NYXhUb3RhbEZpbGVTaXplS2JcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fcmVmcmVzaEJ1dHRvbnMoKTtcbiAgICAgICAgdGhpcy5fcmVmcmVzaCgpO1xuICAgICAgICB0aGlzLnZhbGlkRXh0ZW5zaW9uID0gdGhpcy5jb250ZXh0LnVzZVdvcmRFZGl0b3JcbiAgICAgICAgICAgID8gJy5kb2MsLmRvY3gnXG4gICAgICAgICAgICA6IGdldFZhbGlkRXh0ZW5zaW9uKHRoaXMuU2V0dGluZy5WYWxpZEV4dGVuc2lvbnMpO1xuICAgICAgICB0aGlzLnNpbmdsZUNvbnRyb2wgPSB0aGlzLlNldHRpbmcuVmlld1R5cGUgPT09ICdTaW5nbGVGaWxlQ29udHJvbCc7XG4gICAgfVxuICAgIG9uRWRpdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY29tbWFuZENsaWNrSGFuZGxlcignRWRpdCcpO1xuICAgIH1cbiAgICBvblZpZXcoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZSA9IHsgY3RybEtleTogZXZlbnQuY3RybEtleSB9O1xuICAgICAgICB0aGlzLl9jb21tYW5kQ2xpY2tIYW5kbGVyKCdPT1ZpZXcnLCBlKTtcbiAgICB9XG4gICAgb25Eb3dubG9hZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY29tbWFuZENsaWNrSGFuZGxlcignRG93bmxvYWQnKTtcbiAgICB9XG4gICAgb25GaWxlU2VsZWN0aW9uKGZpbGVzOiBGaWxlW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdXBsb2FkVG9TZXJ2ZXIoZmlsZXMpO1xuICAgIH1cbiAgICBvbkRlbGV0ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY29tbWFuZENsaWNrSGFuZGxlcignRGVsZXRlJyk7XG4gICAgfVxuICAgIG9uRWRpdEluV29yZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY29tbWFuZENsaWNrSGFuZGxlcignT0RFZGl0Jyk7XG4gICAgfVxuICAgIG9uT2ZmaWNlT25saW5lKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGUgPSB7IGN0cmxLZXk6IGV2ZW50LmN0cmxLZXkgfTtcblxuICAgICAgICB0aGlzLl9jb21tYW5kQ2xpY2tIYW5kbGVyKCdPT0VkaXQnLCBlKTtcbiAgICB9XG4gICAgb25SZWZyZXNoKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jb21tYW5kQ2xpY2tIYW5kbGVyKCdSZWZyZXNoJyk7XG4gICAgfVxuICAgIERvd25sb2FkRmlsZUlkKGZpbGVJZCwgdmlld0luQnJvd3NlciwgY29udmVydFRvLCBmb3JPY3gsIGlzT2ZmaWNlT25saW5lKTogdm9pZCB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgQmFyc2FBcGkuVWwuTG9hZGluZ01hc2suTWFzayh0aGlzLl9lbC5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgfSwgMzApO1xuXG4gICAgICAgIEJhcnNhQXBpLkNvbW1vbi5GaWxlLkRvd25sb2FkRmlsZUNvbnRlbnQuYmluZCh0aGlzKShcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBmaWxlSWQsXG4gICAgICAgICAgICAgICAgZmlsZVVybDogbnVsbCxcbiAgICAgICAgICAgICAgICB2aWV3SW5Ccm93c2VyLFxuICAgICAgICAgICAgICAgIGNvbnZlcnRUbyxcbiAgICAgICAgICAgICAgICBpc09mZmljZU9ubGluZSxcbiAgICAgICAgICAgICAgICBmb3JPY3hcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2VlZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9iID0gQmFyc2FBcGkuQ29tbW9uLkZpbGUuQjY0dG9CbG9iKHJlc3BvbnNlLmNvbnRlbnQsIHJlc3BvbnNlLmNvbnRlbnRUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsID0gd2luZG93LlVSTCB8fCB3aW5kb3cud2Via2l0VVJMO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBkZlNvdXJjZSA9IHRoaXMuX2RvbVNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwodXJsLmNyZWF0ZU9iamVjdFVSTChibG9iKSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFzUGRmID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faGlkZU1hc2soKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5faGlkZU1hc2soKTtcbiAgICAgICAgICAgICAgICBhbGVydChlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBfdXBsb2FkVG9TZXJ2ZXIoc2VsZWN0ZWRGaWxlczogRmlsZVtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZmlsZXNWYWxpZGF0aW9uSGVscGVyXG4gICAgICAgICAgICAudmFsaWRhdGVGaWxlcyhzZWxlY3RlZEZpbGVzKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpLFxuICAgICAgICAgICAgICAgIGZpbHRlcigoZmlsZXMpID0+IGZpbGVzLmxlbmd0aCA+IDApLFxuICAgICAgICAgICAgICAgIGV4aGF1c3RNYXAoKGZpbGVzOiBGaWxlW10pID0+IHRoaXMuX3VwbG9hZEZpbGUoZmlsZXMpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfcmVmcmVzaEJ1dHRvbnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3JlZnJlc2hCdXR0b25zSGVscGVyKGZhbHNlKTtcbiAgICAgICAgQmFyc2FBcGkuQ29tbW9uLkFzeW5jLldhdGVyZmFsbChcbiAgICAgICAgICAgICdDb21tb24uRmlsZS5Jc0FnZW50QWN0aXZlJyxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAvLyBDb21tb24uRmlsZUFnZW50LklzQWdlbnRBY3RpdmUuYmluZChDb21tb24uRmlsZUFnZW50KSxcbiAgICAgICAgICAgICAgICBCYXJzYUFwaS5Db21tb24uQWdlbnRIZWxwZXIuSW5pdC5iaW5kKEJhcnNhQXBpLkNvbW1vbi5BZ2VudEhlbHBlcilcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAoZXJyLCByZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZ2VudElzQWN0aXZlID0gcmVzdWx0ID09PSAnT0snO1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hCdXR0b25zSGVscGVyKGFnZW50SXNBY3RpdmUpO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX3JlZnJlc2hCdXR0b25zSGVscGVyKGlzQWdlbnRBY3RpdmUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlT3JSZWFkb25seSQuc3Vic2NyaWJlKChkaXNhYmxlT3JSZWFkb25seSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2FuU2F2ZSA9IHRoaXMuY2FuU2F2ZTtcbiAgICAgICAgICAgIHRoaXMuY2FuRGVsZXRlID0gIWRpc2FibGVPclJlYWRvbmx5O1xuICAgICAgICAgICAgY29uc3QgaGFzVmFsdWUgPSAhQmFyc2FBcGkuRXh0LmlzRW1wdHkodGhpcy52YWx1ZSk7XG4gICAgICAgICAgICBjb25zdCBlZGl0MCA9IGNhblNhdmUgJiYgZGlzYWJsZU9yUmVhZG9ubHkgIT09IHRydWU7XG4gICAgICAgICAgICB0aGlzLmNhbkVkaXQgPSBlZGl0MCAmJiBpc0FnZW50QWN0aXZlO1xuICAgICAgICAgICAgdGhpcy5jYW5Eb3dubG9hZCA9ICF0aGlzLlNldHRpbmcuSXNXb3JkVmlld2VyIHx8ICghaXNBZ2VudEFjdGl2ZSAmJiBlZGl0MCk7XG4gICAgICAgICAgICB0aGlzLmNhblVwbG9hZCA9IHRoaXMuY2FuRG93bmxvYWQgJiYgY2FuU2F2ZSAmJiBkaXNhYmxlT3JSZWFkb25seSAhPT0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuaGFzRmlsZU5hbWUgPSAhdGhpcy5jb250ZXh0LlNldHRpbmcuSXNXb3JkVmlld2VyO1xuICAgICAgICAgICAgdGhpcy5jYW5SZW1vdmUgPSB0aGlzLmNhbkRvd25sb2FkICYmIGNhblNhdmUgJiYgZGlzYWJsZU9yUmVhZG9ubHkgIT09IHRydWU7XG5cbiAgICAgICAgICAgIHRoaXMub2ZmaWNlT25saW5lID0gaGFzVmFsdWUgJiYgY2FuU2F2ZSAmJiBkaXNhYmxlT3JSZWFkb25seSAhPT0gdHJ1ZSAmJiB0aGlzLmNvbnRleHQuT2ZmaWNlT25saW5lO1xuICAgICAgICAgICAgdGhpcy51c2VXb3JkRWRpdG9yID0gaGFzVmFsdWUgJiYgY2FuU2F2ZSAmJiBkaXNhYmxlT3JSZWFkb25seSAhPT0gdHJ1ZSAmJiB0aGlzLmNvbnRleHQudXNlV29yZEVkaXRvcjtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBfY29tbWFuZENsaWNrSGFuZGxlcihpdGVtSWQsIGtleWJvYXJkRXZlbnQ/KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbW1hbmRJZCA9IGl0ZW1JZDtcblxuICAgICAgICBsZXQgZmlsZXMgPSB0aGlzLnZhbHVlO1xuICAgICAgICBpZiAoQmFyc2FBcGkuRXh0LmlzQXJyYXkoZmlsZXMpKSB7XG4gICAgICAgICAgICBmaWxlcyA9IGZpbGVzWzBdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsZUlkID0gZmlsZXM/LklkO1xuICAgICAgICB0aGlzLmNvbnRleHQuZmlyZUV2ZW50KCdDb21tYW5kUmVxdWVzdCcsIHRoaXMsIGNvbW1hbmRJZCwgZmlsZUlkLCBrZXlib2FyZEV2ZW50KTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9yZWZyZXNoKGZyb21TZXJ2ZXI/OiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG9mZmljZU9ubGluZSA9IGZyb21TZXJ2ZXIgPT09IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuZmlsZU5hbWUgPSAnJztcblxuICAgICAgICBpZiAoQmFyc2FBcGkuRXh0LmlzRW1wdHkodGhpcy52YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuaGFzUGRmID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZmlsZXMgPSB0aGlzLnZhbHVlO1xuICAgICAgICBpZiAoQmFyc2FBcGkuRXh0LmlzQXJyYXkoZmlsZXMpKSB7XG4gICAgICAgICAgICBmaWxlcyA9IGZpbGVzWzBdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsZUlkID0gZmlsZXMuSWQ7XG4gICAgICAgIGlmICghZmlsZUlkIHx8IGZpbGVzLklzRGVsZXRlZCkge1xuICAgICAgICAgICAgaWYgKGZpbGVzLklzRGVsZXRlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFzUGRmID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mYWxsYmFja0xpbmsgPSBg2KfZhdqp2KfZhiDZhtmF2KfbjNi0INmB2KfbjNmEINiv2LEg2KfbjNmGINmF2LHZiNix2q/YsSDZiNis2YjYryDZhtiv2KfYsdivLlxuICAgICAgICAg2KjYsdin24wg2KjYp9iyINqp2LHYr9mGINmB2KfbjNmEINin2LIg2YTbjNmG2qkg2LLbjNixINin2LPYqtmB2KfYr9mHINqp2YbbjNivOiAgPC9icj4gPGEgaHJlZj0nJHtCYXJzYUFwaS5Db21tb24uRmlsZS5DcmVhdGVBdHRhY2htZW50VXJsKFxuICAgICAgICAgICAgIGZpbGVJZCxcbiAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICB0cnVlXG4gICAgICAgICApfSc+2K/Yp9mG2YTZiNivINmB2KfbjNmEINio2LXZiNix2KogcGRmPC9hPiAgPC9icj4gIDxhIGhyZWY9JyR7QmFyc2FBcGkuQ29tbW9uLkZpbGUuQ3JlYXRlQXR0YWNobWVudFVybChcbiAgICAgICAgICAgIGZpbGVJZCxcbiAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgKX0nPtiv2KfZhtmE2YjYryDZgdin24zZhCDYqNi12YjYsdiqINio2LXZiNix2Kog2KfYtdmE24w8L2E+YDtcblxuICAgICAgICBpZiAoIUJhcnNhQXBpLkV4dC5pc0lFKSB7XG4gICAgICAgICAgICAvLyBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgLy8gICAgIGZhbGxiYWNrTGluazogdGhpcy5mYWxsYmFja0xpbmssXG4gICAgICAgICAgICAvLyAgICAgcGRmT3BlblBhcmFtczoge1xuICAgICAgICAgICAgLy8gICAgICAgICB2aWV3OiAnRml0SCcsXG4gICAgICAgICAgICAvLyAgICAgICAgIHNjcm9sbGJhcjogJzAnLFxuICAgICAgICAgICAgLy8gICAgICAgICB0b29sYmFyOiAnMCcsXG4gICAgICAgICAgICAvLyAgICAgICAgIHN0YXR1c2JhcjogJzAnLFxuICAgICAgICAgICAgLy8gICAgICAgICBtZXNzYWdlczogJzAnLFxuICAgICAgICAgICAgLy8gICAgICAgICBuYXZwYW5lczogJzAnXG4gICAgICAgICAgICAvLyAgICAgfVxuICAgICAgICAgICAgLy8gfTtcbiAgICAgICAgICAgIGxldCBjb252ZXJ0VG8gPSBpc0ltYWdlKGZpbGVzLlR5cGUpID8gZmlsZXMuVHlwZSA6ICcnO1xuICAgICAgICAgICAgY29udmVydFRvID0gJ3BkZixkb2MsZG9jeCx3b3JkJy5pbmRleE9mKGZpbGVzLlR5cGUpID4gLTEgPyAncGRmJyA6IGNvbnZlcnRUbztcblxuICAgICAgICAgICAgaWYgKCFjb252ZXJ0VG8pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNpbmdsZUNvbnRyb2wgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU2luZ2xlQ29udHJvbChmaWxlcyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zaW5nbGVDb250cm9sID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHRoaXMuRG93bmxvYWRGaWxlSWQoZmlsZUlkLCB0cnVlLCBjb252ZXJ0VG8sIG51bGwsIG9mZmljZU9ubGluZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBjb25zdCB1cmwgPSBDb21tb24uRmlsZS5DcmVhdGVBdHRhY2htZW50VXJsKGZpbGVJZCwgZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5jYW5Ob3RSZW5kZXJQZGYgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF91cGxvYWRGaWxlKGZpbGVzOiBGaWxlW10pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICBmaWxlcy5mb3JFYWNoKChmaWxlKSA9PiB7XG4gICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ3VuaWNGaWxlTmFtZScsICd4JyArIEJhcnNhQXBpLkNvbW1vbi5VdGlsLkdldE5ld01ldGFHdWlkKCkgKyAnOzs7JyArIGZpbGUubmFtZSk7XG4gICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX3VwbG9hZFNlcnZpY2UudXBsb2FkKGZvcm1EYXRhLCB0aGlzLlNldHRpbmcuQ29udHJvbEZpZWxkRGVmSWQpLnBpcGUoXG4gICAgICAgICAgICB0YXAoKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlcykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlVmFsdWUocmVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfdXBkYXRlVmFsdWUocmVzOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5TZXR0aW5nLlZpZXdUeXBlICE9PSAnTGluZWFyTGlzdEJveCcpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU2luZ2xlQ29udHJvbChyZXNbMF0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmlyZUNvbnRleHRFdmVudCgnQ2hhbmdlJywgdGhpcy5jb250ZXh0LCByZXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlU2luZ2xlQ29udHJvbCh2YWw6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAoaXNJbWFnZSh2YWwuVHlwZSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2luZ2xlRmlsZVRodW1ibmFpbFVybCA9IGdldEltYWdlUGF0aCgnSUQnLCAnJywgdmFsLklkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2luZ2xlRmlsZVRodW1ibmFpbFVybCA9IGdldEljb24odmFsLlR5cGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHByaXZhdGUgX2hpZGVNYXNrKCk6IHZvaWQge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIEJhcnNhQXBpLlVsLkxvYWRpbmdNYXNrLlVubWFzayh0aGlzLl9lbC5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgfSwgMzApO1xuICAgIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKnVudGlsSW5WaWV3PVwiZWxcIj5cclxuICAgIDxmZC10b29sYmFyIFt0cmFuc3BhcmVudF09XCJ0cnVlXCIgW3Nob3VsZE92ZXJmbG93XT1cInRydWVcIj5cclxuICAgICAgICA8ZmQtZmlsZS11cGxvYWRlclxyXG4gICAgICAgICAgICAjdXBsb2FkZXJcclxuICAgICAgICAgICAgW3N0eWxlLmRpc3BsYXldPVwiJ25vbmUnXCJcclxuICAgICAgICAgICAgZmQtdG9vbGJhci1pdGVtXHJcbiAgICAgICAgICAgIFtpZF09XCJpZFwiXHJcbiAgICAgICAgICAgIFtuYW1lXT1cIidwZGZfJyArIGlkXCJcclxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidBdHRhY2hGaWxlJyB8IGJiYlRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgIFtidXR0b25MYWJlbF09XCInQXR0YWNoRmlsZScgfCBiYmJUcmFuc2xhdGVcIlxyXG4gICAgICAgICAgICBbYnV0dG9uQXJpYUxhYmVsXT1cIidBdHRhY2hGaWxlJyB8IGJiYlRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgIFthY2NlcHRdPVwidmFsaWRFeHRlbnNpb25cIlxyXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpbGVzXCJcclxuICAgICAgICAgICAgW211bHRpcGxlXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgKHNlbGVjdGVkRmlsZXNDaGFuZ2VkKT1cIm9uRmlsZVNlbGVjdGlvbigkZXZlbnQpXCJcclxuICAgICAgICAgICAgW2NvbnRlbnREZW5zaXR5XT1cIihjb250ZW50RGVuc2l0eSQgfCBhc3luYykhIVwiXHJcbiAgICAgICAgPjwvZmQtZmlsZS11cGxvYWRlcj5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIGZkLWJ1dHRvblxyXG4gICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cclxuICAgICAgICAgICAgZ2x5cGg9XCJhdHRhY2htZW50XCJcclxuICAgICAgICAgICAgW2ZkVHlwZV09XCIndHJhbnNwYXJlbnQnXCJcclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFjYW5VcGxvYWRcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwidXBsb2FkZXIub3BlbigpXCJcclxuICAgICAgICA+PC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiIShjYW5EZWxldGUgJiYgdmFsdWUpXCJcclxuICAgICAgICAgICAgZmQtYnV0dG9uXHJcbiAgICAgICAgICAgIGZkLXRvb2xiYXItaXRlbVxyXG4gICAgICAgICAgICBjbGFzcz1cImRlbGV0ZVwiXHJcbiAgICAgICAgICAgIGdseXBoPVwiZGVsZXRlXCJcclxuICAgICAgICAgICAgW2ZkVHlwZV09XCIndHJhbnNwYXJlbnQnXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uRGVsZXRlKClcIlxyXG4gICAgICAgID48L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICpuZ0lmPVwiY2FuRWRpdFwiXHJcbiAgICAgICAgICAgIGZkLXRvb2xiYXItaXRlbVxyXG4gICAgICAgICAgICBmZC1idXR0b25cclxuICAgICAgICAgICAgZ2x5cGg9XCJlZGl0XCJcclxuICAgICAgICAgICAgW2ZkVHlwZV09XCIndHJhbnNwYXJlbnQnXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uRWRpdCgpXCJcclxuICAgICAgICA+PC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAqbmdJZj1cImNhbkRvd25sb2FkXCJcclxuICAgICAgICAgICAgZmQtdG9vbGJhci1pdGVtXHJcbiAgICAgICAgICAgIGZkLWJ1dHRvblxyXG4gICAgICAgICAgICBnbHlwaD1cImRvd25sb2FkXCJcclxuICAgICAgICAgICAgW2ZkVHlwZV09XCIndHJhbnNwYXJlbnQnXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uRG93bmxvYWQoKVwiXHJcbiAgICAgICAgPjwvYnV0dG9uPlxyXG5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICpuZ0lmPVwidXNlV29yZEVkaXRvclwiXHJcbiAgICAgICAgICAgIGZkLXRvb2xiYXItaXRlbVxyXG4gICAgICAgICAgICBmZC1idXR0b25cclxuICAgICAgICAgICAgZ2x5cGg9XCJkb2MtYXR0YWNobWVudFwiXHJcbiAgICAgICAgICAgIFtmZFR5cGVdPVwiJ3RyYW5zcGFyZW50J1wiXHJcbiAgICAgICAgICAgIFtsYWJlbF09XCInRWRpdEluV29yZCcgfCBiYmJUcmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwib25FZGl0SW5Xb3JkKClcIlxyXG4gICAgICAgID48L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICpuZ0lmPVwib2ZmaWNlT25saW5lXCJcclxuICAgICAgICAgICAgZmQtdG9vbGJhci1pdGVtXHJcbiAgICAgICAgICAgIGZkLWJ1dHRvblxyXG4gICAgICAgICAgICBnbHlwaD1cImRvYy1hdHRhY2htZW50XCJcclxuICAgICAgICAgICAgW2ZkVHlwZV09XCIndHJhbnNwYXJlbnQnXCJcclxuICAgICAgICAgICAgW2xhYmVsXT1cIidPZmZpY2VPbmxpbmUnIHwgYmJiVHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uT2ZmaWNlT25saW5lKCRldmVudClcIlxyXG4gICAgICAgID48L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIGZkLXRvb2xiYXItaXRlbSBmZC1idXR0b24gZ2x5cGg9XCJyZWZyZXNoXCIgW2ZkVHlwZV09XCIndHJhbnNwYXJlbnQnXCIgKGNsaWNrKT1cIm9uUmVmcmVzaCgpXCI+PC9idXR0b24+XHJcblxyXG4gICAgICAgIDxmZC1idXN5LWluZGljYXRvciBmZC10b29sYmFyLWl0ZW0gW2xvYWRpbmddPVwiKHVwbG9hZGluZyQgfCBhc3luYykhIVwiPjwvZmQtYnVzeS1pbmRpY2F0b3I+XHJcbiAgICA8L2ZkLXRvb2xiYXI+XHJcbiAgICA8b2JqZWN0XHJcbiAgICAgICAgKm5nSWY9XCJoYXNQZGY7IGVsc2UgSGF0Y2hCYWNrZ3JvdW5kXCJcclxuICAgICAgICBzdHlsZT1cImZsZXgtZ3JvdzogMVwiXHJcbiAgICAgICAgW2F0dHIuZGF0YV09XCJwZGZTb3VyY2VcIlxyXG4gICAgICAgIHR5cGU9XCJhcHBsaWNhdGlvbi9wZGZcIlxyXG4gICAgICAgIHdpZHRoPVwiMTAwJVwiXHJcbiAgICAgICAgaGVpZ2h0PVwiMTAwJVwiXHJcbiAgICAgICAgW2F0dHIuaHRtbF09XCJmYWxsYmFja0xpbmtcIlxyXG4gICAgPjwvb2JqZWN0PlxyXG4gICAgPG5nLXRlbXBsYXRlICNIYXRjaEJhY2tncm91bmQ+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNpbmdsZUNvbnRyb2wgJiYgdmFsdWUgJiYgIXZhbHVlLklzRGVsZXRlZDsgZWxzZSBub0ZpbGVcIj5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXhcIj5cclxuICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJzaW5nbGVGaWxlVGh1bWJuYWlsVXJsXCIgW3NyY109XCJzaW5nbGVGaWxlVGh1bWJuYWlsVXJsXCIgLz5cclxuICAgICAgICAgICAgICAgIDxmZC1vYmplY3QtaWRlbnRpZmllcj5cclxuICAgICAgICAgICAgICAgICAgICB7eyB2YWx1ZS5GaWxlTmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9mZC1vYmplY3QtaWRlbnRpZmllcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICNub0ZpbGU+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoYXRjaEJhY2tncm91bmRcIj48L2Rpdj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuPC9uZy1jb250YWluZXI+XHJcbiJdfQ==
@@ -0,0 +1,95 @@
1
+ import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
2
+ import { FieldBaseComponent, BarsaApi, UploadService, getValidExtension } from 'barsa-novin-ray-core';
3
+ import { of, Subject } from 'rxjs';
4
+ import { exhaustMap, takeUntil, tap } from 'rxjs/operators';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/common";
7
+ import * as i2 from "@angular/forms";
8
+ import * as i3 from "@fundamental-ngx/core/avatar";
9
+ import * as i4 from "@fundamental-ngx/core/button";
10
+ import * as i5 from "@fundamental-ngx/core/file-uploader";
11
+ import * as i6 from "@fundamental-ngx/core/toolbar";
12
+ import * as i7 from "@fundamental-ngx/platform/slider";
13
+ import * as i8 from "../mask/mask.component";
14
+ import * as i9 from "barsa-novin-ray-core";
15
+ export class UiPictureFileComponent extends FieldBaseComponent {
16
+ constructor() {
17
+ super(...arguments);
18
+ this.files = [];
19
+ this.cancelation$ = new Subject();
20
+ }
21
+ ngOnInit() {
22
+ super.ngOnInit();
23
+ this.progress$ = this._uploadService.progress$;
24
+ this.uploadState$ = this._uploadService.uploadState$;
25
+ this.uploading$ = this._uploadService.uploading$;
26
+ this.context.on({
27
+ DispalyImage: this._displayImage.bind(this)
28
+ });
29
+ this.imageUrl = this.context.imageUrl;
30
+ this.value = this.context._value;
31
+ this.validExtensions = this.Setting.ValidExtension
32
+ ? getValidExtension(this.Setting.ValidExtensions)
33
+ : '.jpeg,.jpg,.gif,.png,.bmp,.tif';
34
+ }
35
+ ngOnDestroy() {
36
+ super.ngOnDestroy();
37
+ this.context.un('DisplayImage', this._displayImage);
38
+ }
39
+ onFileSelection(files) {
40
+ this.files = files;
41
+ this._upload(files);
42
+ }
43
+ onFileDeleted(uploaderComponent) {
44
+ uploaderComponent.inputRef.nativeElement.value = null;
45
+ this.value = null;
46
+ this.fireContextEvent('Change', this.context, null);
47
+ }
48
+ onDownloadFile() {
49
+ BarsaApi.Common.File.OpenFile(this.value.FileId, false, this, true, false);
50
+ }
51
+ onRetry() {
52
+ this._upload(this.files);
53
+ }
54
+ onTerminate() {
55
+ this.cancelation$.next();
56
+ }
57
+ _displayImage(imageUrl, sizeMode, value) {
58
+ this.imageUrl = imageUrl;
59
+ this.value = value;
60
+ this.sizeMode = sizeMode;
61
+ }
62
+ _upload(files) {
63
+ of(true)
64
+ .pipe(takeUntil(this._onDestroy$), exhaustMap(() => this.uploadFile(files)))
65
+ .subscribe();
66
+ }
67
+ uploadFile(files) {
68
+ const formData = new FormData();
69
+ files.forEach((file) => {
70
+ formData.append('unicFileName', 'x' + BarsaApi.Common.Util.GetNewMetaGuid() + ';;;' + file.name);
71
+ formData.append('file', file);
72
+ });
73
+ return this._uploadService.upload(formData, this.Setting.ControlFieldDefId).pipe(tap((res) => {
74
+ if (Array.isArray(res)) {
75
+ const picture = res[0];
76
+ const value = {
77
+ ...picture,
78
+ FileId: picture.FileId
79
+ };
80
+ this.fireContextEvent('Change', this.context, value);
81
+ }
82
+ }));
83
+ }
84
+ }
85
+ UiPictureFileComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UiPictureFileComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
86
+ UiPictureFileComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: UiPictureFileComponent, selector: "bsu-ui-picture-file", inputs: { imageUrl: "imageUrl", sizeMode: "sizeMode" }, providers: [UploadService], usesInheritance: true, ngImport: i0, template: "<div\n [style.max-height.px]=\"Setting.SizeMode === '2' ? null : layoutInfo.ControlBounds.height\"\n [class.no-inlineEdit]=\"!inlineEdit\"\n [class.inlineEdit]=\"inlineEdit\"\n>\n <div *ngIf=\"!((disableOrReadonly$ | async) === true || Setting.IsReadOnly === true)\">\n <fd-toolbar [fdType]=\"'transparent'\">\n <fd-file-uploader\n #uploader\n fd-toolbar-item\n [style.display]=\"'none'\"\n [id]=\"id\"\n [name]=\"'uploader_' + id\"\n [placeholder]=\"'AttachPicture' | bbbTranslate\"\n [buttonLabel]=\"'AttachPicture' | bbbTranslate\"\n [buttonAriaLabel]=\"'AttachPicture' | bbbTranslate\"\n [accept]=\"validExtensions\"\n [(ngModel)]=\"files\"\n [multiple]=\"false\"\n (selectedFilesChanged)=\"onFileSelection($event)\"\n ></fd-file-uploader>\n <button\n fd-toolbar-item\n fd-button\n [disabled]=\"this.value && value?.IsDeleted !== true\"\n glyph=\"attachment\"\n [fdType]=\"'transparent'\"\n (click)=\"uploader.open()\"\n ></button>\n <button\n class=\"delete\"\n fd-button\n fd-toolbar-item\n [disabled]=\"!this.value || value?.IsDeleted\"\n glyph=\"delete\"\n [fdType]=\"'transparent'\"\n (click)=\"onFileDeleted(uploader)\"\n ></button>\n\n <ng-container *ngIf=\"uploadState$ | async as uploadState\">\n <ng-container *ngIf=\"uploadState !== 'Complete'\">\n <fdp-slider\n fd-toolbar-item\n [id]=\"id + '1'\"\n [name]=\"'slider_' + id\"\n [value]=\"progress$ | async\"\n [min]=\"0\"\n [max]=\"100\"\n [step]=\"1\"\n >\n </fdp-slider>\n <button\n *ngIf=\"uploadState === 'Uploading'\"\n fd-toolbar-item\n fd-button\n glyph=\"stop\"\n fdType=\"transparent\"\n (click)=\"onTerminate()\"\n ></button>\n <button\n *ngIf=\"uploadState === 'Error'\"\n fd-toolbar-item\n fd-button\n glyph=\"refresh\"\n [fdType]=\"'transparent'\"\n (click)=\"onRetry()\"\n ></button>\n </ng-container>\n </ng-container>\n </fd-toolbar>\n </div>\n <div\n *ngIf=\"!inlineEdit; else avatarTemplate\"\n [style.max-height.px]=\"Setting.SizeMode === '0' ? layoutInfo.ControlBounds.height : null\"\n [style.max-width.px]=\"Setting.SizeMode === '0' ? layoutInfo.ControlBounds.width : null\"\n [style.text-align]=\"Setting.SizeMode === '3' ? 'center' : null\"\n >\n <img\n *ngIf=\"(value && imageUrl) || Setting.HasDefaultPicture\"\n [src]=\"imageUrl\"\n [ngClass]=\"Setting.SizeMode === '1' ? 'cover' : 'contain'\"\n [style.height.px]=\"Setting.SizeMode !== '2' ? layoutInfo.ControlBounds.height : null\"\n />\n </div>\n <ng-template #avatarTemplate>\n <fd-avatar [size]=\"'m'\" [image]=\"imageUrl\"></fd-avatar>\n </ng-template>\n</div>\n<bsu-mask *ngIf=\"uploading$ | async\"></bsu-mask>\n", styles: [":host{width:100%;height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;position:relative;overflow:hidden;margin-bottom:.25rem;margin-top:.1875rem}:host ::ng-deep .fd-slider__handle{display:none}:host ::ng-deep .delete button{border-color:transparent!important;background-color:transparent!important}img{width:100%}.pic-wrapper{background-repeat:no-repeat;background-position:center}.cover{max-width:100%;max-height:100%;min-height:100%;width:100%;height:100%;background-size:cover}.contain{max-width:100%;max-height:100%;min-height:100%;width:auto;height:100%;background-size:contain}.no-inlineEdit{min-height:140px;width:100%;position:relative;display:flex;flex-direction:column}.inlineEdit{width:100%;position:relative;display:flex;flex-direction:row-reverse;align-items:end;justify-content:start}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.AvatarComponent, selector: "fd-avatar", inputs: ["class", "id", "ariaLabel", "ariaLabelledby", "label", "size", "glyph", "zoomGlyph", "circle", "transparent", "contain", "placeholder", "tile", "border", "colorAccent", "random", "clickable", "backgroundImage", "image", "alterIcon", "backupImage"], outputs: ["avatarClicked", "zoomGlyphClicked"] }, { kind: "component", type: i4.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i5.FileUploaderComponent, selector: "fd-file-uploader", inputs: ["disabled", "required", "multiple", "accept", "dragndrop", "maxFileSize", "minFileSize", "id", "ariaLabel", "ariaLabelledBy", "placeholder", "buttonLabel", "buttonAriaLabel", "state", "fileLimit", "inputHidden", "width"], outputs: ["selectedFilesChanged", "selectedInvalidFiles", "onDragEnter", "onDragLeave"] }, { kind: "component", type: i6.ToolbarComponent, selector: "fd-toolbar", inputs: ["class", "shouldOverflow", "fdType", "hasTitle", "title", "active", "clearBorder", "forceOverflow", "tabindex"] }, { kind: "directive", type: i6.ToolbarItemDirective, selector: "[fd-toolbar-item]" }, { kind: "component", type: i7.SliderComponent, selector: "fdp-slider", inputs: ["class", "min", "max", "step", "jump", "tickmarksBetweenLabels", "mode", "showTicks", "showTicksLabels", "customValues", "tooltipMode", "hideProgressBar", "value"], outputs: ["sliderChange"] }, { kind: "component", type: i8.MaskComponent, selector: "bsu-mask", inputs: ["size", "marginTop"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i9.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
87
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UiPictureFileComponent, decorators: [{
88
+ type: Component,
89
+ args: [{ selector: 'bsu-ui-picture-file', changeDetection: ChangeDetectionStrategy.OnPush, providers: [UploadService], template: "<div\n [style.max-height.px]=\"Setting.SizeMode === '2' ? null : layoutInfo.ControlBounds.height\"\n [class.no-inlineEdit]=\"!inlineEdit\"\n [class.inlineEdit]=\"inlineEdit\"\n>\n <div *ngIf=\"!((disableOrReadonly$ | async) === true || Setting.IsReadOnly === true)\">\n <fd-toolbar [fdType]=\"'transparent'\">\n <fd-file-uploader\n #uploader\n fd-toolbar-item\n [style.display]=\"'none'\"\n [id]=\"id\"\n [name]=\"'uploader_' + id\"\n [placeholder]=\"'AttachPicture' | bbbTranslate\"\n [buttonLabel]=\"'AttachPicture' | bbbTranslate\"\n [buttonAriaLabel]=\"'AttachPicture' | bbbTranslate\"\n [accept]=\"validExtensions\"\n [(ngModel)]=\"files\"\n [multiple]=\"false\"\n (selectedFilesChanged)=\"onFileSelection($event)\"\n ></fd-file-uploader>\n <button\n fd-toolbar-item\n fd-button\n [disabled]=\"this.value && value?.IsDeleted !== true\"\n glyph=\"attachment\"\n [fdType]=\"'transparent'\"\n (click)=\"uploader.open()\"\n ></button>\n <button\n class=\"delete\"\n fd-button\n fd-toolbar-item\n [disabled]=\"!this.value || value?.IsDeleted\"\n glyph=\"delete\"\n [fdType]=\"'transparent'\"\n (click)=\"onFileDeleted(uploader)\"\n ></button>\n\n <ng-container *ngIf=\"uploadState$ | async as uploadState\">\n <ng-container *ngIf=\"uploadState !== 'Complete'\">\n <fdp-slider\n fd-toolbar-item\n [id]=\"id + '1'\"\n [name]=\"'slider_' + id\"\n [value]=\"progress$ | async\"\n [min]=\"0\"\n [max]=\"100\"\n [step]=\"1\"\n >\n </fdp-slider>\n <button\n *ngIf=\"uploadState === 'Uploading'\"\n fd-toolbar-item\n fd-button\n glyph=\"stop\"\n fdType=\"transparent\"\n (click)=\"onTerminate()\"\n ></button>\n <button\n *ngIf=\"uploadState === 'Error'\"\n fd-toolbar-item\n fd-button\n glyph=\"refresh\"\n [fdType]=\"'transparent'\"\n (click)=\"onRetry()\"\n ></button>\n </ng-container>\n </ng-container>\n </fd-toolbar>\n </div>\n <div\n *ngIf=\"!inlineEdit; else avatarTemplate\"\n [style.max-height.px]=\"Setting.SizeMode === '0' ? layoutInfo.ControlBounds.height : null\"\n [style.max-width.px]=\"Setting.SizeMode === '0' ? layoutInfo.ControlBounds.width : null\"\n [style.text-align]=\"Setting.SizeMode === '3' ? 'center' : null\"\n >\n <img\n *ngIf=\"(value && imageUrl) || Setting.HasDefaultPicture\"\n [src]=\"imageUrl\"\n [ngClass]=\"Setting.SizeMode === '1' ? 'cover' : 'contain'\"\n [style.height.px]=\"Setting.SizeMode !== '2' ? layoutInfo.ControlBounds.height : null\"\n />\n </div>\n <ng-template #avatarTemplate>\n <fd-avatar [size]=\"'m'\" [image]=\"imageUrl\"></fd-avatar>\n </ng-template>\n</div>\n<bsu-mask *ngIf=\"uploading$ | async\"></bsu-mask>\n", styles: [":host{width:100%;height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;position:relative;overflow:hidden;margin-bottom:.25rem;margin-top:.1875rem}:host ::ng-deep .fd-slider__handle{display:none}:host ::ng-deep .delete button{border-color:transparent!important;background-color:transparent!important}img{width:100%}.pic-wrapper{background-repeat:no-repeat;background-position:center}.cover{max-width:100%;max-height:100%;min-height:100%;width:100%;height:100%;background-size:cover}.contain{max-width:100%;max-height:100%;min-height:100%;width:auto;height:100%;background-size:contain}.no-inlineEdit{min-height:140px;width:100%;position:relative;display:flex;flex-direction:column}.inlineEdit{width:100%;position:relative;display:flex;flex-direction:row-reverse;align-items:end;justify-content:start}\n"] }]
90
+ }], propDecorators: { imageUrl: [{
91
+ type: Input
92
+ }], sizeMode: [{
93
+ type: Input
94
+ }] } });
95
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktcGljdHVyZS1maWxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLXNhcC11aS9zcmMvbGliL3VpLXBpY3R1cmUtZmlsZS91aS1waWN0dXJlLWZpbGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvdWktcGljdHVyZS1maWxlL3VpLXBpY3R1cmUtZmlsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFHN0YsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RyxPQUFPLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7QUFTNUQsTUFBTSxPQUFPLHNCQUF1QixTQUFRLGtCQUFrQjtJQVA5RDs7UUFVSSxVQUFLLEdBQVcsRUFBRSxDQUFDO1FBSW5CLGlCQUFZLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztLQTZFdEM7SUExRUcsUUFBUTtRQUNKLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDO1FBQy9DLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUM7UUFDckQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQztRQUNqRCxJQUFJLENBQUMsT0FBTyxDQUFDLEVB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RyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDUixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ3BCLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdkIsTUFBTSxLQUFLLEdBQUc7b0JBQ1YsR0FBRyxPQUFPO29CQUNWLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtpQkFDekIsQ0FBQztnQkFDRixJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDeEQ7UUFDTCxDQUFDLENBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQzs7bUhBbkZRLHNCQUFzQjt1R0FBdEIsc0JBQXNCLHNHQUZwQixDQUFDLGFBQWEsQ0FBQyxpRENaOUIscXJIQXlGQTsyRkQzRWEsc0JBQXNCO2tCQVBsQyxTQUFTOytCQUNJLHFCQUFxQixtQkFHZCx1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDLENBQUMsYUFBYSxDQUFDOzhCQUdqQixRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZpbGVVcGxvYWRlckNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZSc7XG5cbmltcG9ydCB7IEZpZWxkQmFzZUNvbXBvbmVudCwgQmFyc2FBcGksIFVwbG9hZFNlcnZpY2UsIGdldFZhbGlkRXh0ZW5zaW9uIH0gZnJvbSAnYmFyc2Etbm92aW4tcmF5LWNvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGV4aGF1c3RNYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2JzdS11aS1waWN0dXJlLWZpbGUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi91aS1waWN0dXJlLWZpbGUuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3VpLXBpY3R1cmUtZmlsZS5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW1VwbG9hZFNlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIFVpUGljdHVyZUZpbGVDb21wb25lbnQgZXh0ZW5kcyBGaWVsZEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgQElucHV0KCkgaW1hZ2VVcmw6IGFueTtcbiAgICBASW5wdXQoKSBzaXplTW9kZTogYW55O1xuICAgIGZpbGVzOiBGaWxlW10gPSBbXTtcbiAgICB1cGxvYWRTdGF0ZSQ6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgICBwcm9ncmVzcyQ6IE9ic2VydmFibGU8YW55PjtcbiAgICB1cGxvYWRpbmckOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAgIGNhbmNlbGF0aW9uJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgdmFsaWRFeHRlbnNpb25zOiBhbnk7XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgdGhpcy5wcm9ncmVzcyQgPSB0aGlzLl91cGxvYWRTZXJ2aWNlLnByb2dyZXNzJDtcbiAgICAgICAgdGhpcy51cGxvYWRTdGF0ZSQgPSB0aGlzLl91cGxvYWRTZXJ2aWNlLnVwbG9hZFN0YXRlJDtcbiAgICAgICAgdGhpcy51cGxvYWRpbmckID0gdGhpcy5fdXBsb2FkU2VydmljZS51cGxvYWRpbmckO1xuICAgICAgICB0aGlzLmNvbnRleHQub24oe1xuICAgICAgICAgICAgRGlzcGFseUltYWdlOiB0aGlzLl9kaXNwbGF5SW1hZ2UuYmluZCh0aGlzKVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5pbWFnZVVybCA9IHRoaXMuY29udGV4dC5pbWFnZVVybDtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuY29udGV4dC5fdmFsdWU7XG4gICAgICAgIHRoaXMudmFsaWRFeHRlbnNpb25zID0gdGhpcy5TZXR0aW5nLlZhbGlkRXh0ZW5zaW9uXG4gICAgICAgICAgICA/IGdldFZhbGlkRXh0ZW5zaW9uKHRoaXMuU2V0dGluZy5WYWxpZEV4dGVuc2lvbnMpXG4gICAgICAgICAgICA6ICcuanBlZywuanBnLC5naWYsLnBuZywuYm1wLC50aWYnO1xuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5jb250ZXh0LnVuKCdEaXNwbGF5SW1hZ2UnLCB0aGlzLl9kaXNwbGF5SW1hZ2UpO1xuICAgIH1cbiAgICBvbkZpbGVTZWxlY3Rpb24oZmlsZXM6IEZpbGVbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLmZpbGVzID0gZmlsZXM7XG4gICAgICAgIHRoaXMuX3VwbG9hZChmaWxlcyk7XG4gICAgfVxuICAgIG9uRmlsZURlbGV0ZWQodXBsb2FkZXJDb21wb25lbnQ6IEZpbGVVcGxvYWRlckNvbXBvbmVudCk6IHZvaWQge1xuICAgICAgICB1cGxvYWRlckNvbXBvbmVudC5pbnB1dFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlID0gbnVsbDtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG51bGw7XG4gICAgICAgIHRoaXMuZmlyZUNvbnRleHRFdmVudCgnQ2hhbmdlJywgdGhpcy5jb250ZXh0LCBudWxsKTtcbiAgICB9XG5cbiAgICBvbkRvd25sb2FkRmlsZSgpOiB2b2lkIHtcbiAgICAgICAgQmFyc2FBcGkuQ29tbW9uLkZpbGUuT3BlbkZpbGUodGhpcy52YWx1ZS5GaWxlSWQsIGZhbHNlLCB0aGlzLCB0cnVlLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgb25SZXRyeSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdXBsb2FkKHRoaXMuZmlsZXMpO1xuICAgIH1cblxuICAgIG9uVGVybWluYXRlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNhbmNlbGF0aW9uJC5uZXh0KCk7XG4gICAgfVxuICAgIHByaXZhdGUgX2Rpc3BsYXlJbWFnZShpbWFnZVVybCwgc2l6ZU1vZGUsIHZhbHVlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW1hZ2VVcmwgPSBpbWFnZVVybDtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLnNpemVNb2RlID0gc2l6ZU1vZGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdXBsb2FkKGZpbGVzOiBGaWxlW10pOiB2b2lkIHtcbiAgICAgICAgb2YodHJ1ZSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgICBleGhhdXN0TWFwKCgpID0+IHRoaXMudXBsb2FkRmlsZShmaWxlcykpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGxvYWRGaWxlKGZpbGVzOiBGaWxlW10pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICBmaWxlcy5mb3JFYWNoKChmaWxlKSA9PiB7XG4gICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ3VuaWNGaWxlTmFtZScsICd4JyArIEJhcnNhQXBpLkNvbW1vbi5VdGlsLkdldE5ld01ldGFHdWlkKCkgKyAnOzs7JyArIGZpbGUubmFtZSk7XG4gICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX3VwbG9hZFNlcnZpY2UudXBsb2FkKGZvcm1EYXRhLCB0aGlzLlNldHRpbmcuQ29udHJvbEZpZWxkRGVmSWQpLnBpcGUoXG4gICAgICAgICAgICB0YXAoKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlcykpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGljdHVyZSA9IHJlc1swXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5waWN0dXJlLFxuICAgICAgICAgICAgICAgICAgICAgICAgRmlsZUlkOiBwaWN0dXJlLkZpbGVJZFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcmVDb250ZXh0RXZlbnQoJ0NoYW5nZScsIHRoaXMuY29udGV4dCwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxufVxuIiwiPGRpdlxuICAgIFtzdHlsZS5tYXgtaGVpZ2h0LnB4XT1cIlNldHRpbmcuU2l6ZU1vZGUgPT09ICcyJyA/IG51bGwgOiBsYXlvdXRJbmZvLkNvbnRyb2xCb3VuZHMuaGVpZ2h0XCJcbiAgICBbY2xhc3Mubm8taW5saW5lRWRpdF09XCIhaW5saW5lRWRpdFwiXG4gICAgW2NsYXNzLmlubGluZUVkaXRdPVwiaW5saW5lRWRpdFwiXG4+XG4gICAgPGRpdiAqbmdJZj1cIiEoKGRpc2FibGVPclJlYWRvbmx5JCB8IGFzeW5jKSA9PT0gdHJ1ZSB8fCBTZXR0aW5nLklzUmVhZE9ubHkgPT09IHRydWUpXCI+XG4gICAgICAgIDxmZC10b29sYmFyIFtmZFR5cGVdPVwiJ3RyYW5zcGFyZW50J1wiPlxuICAgICAgICAgICAgPGZkLWZpbGUtdXBsb2FkZXJcbiAgICAgICAgICAgICAgICAjdXBsb2FkZXJcbiAgICAgICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cbiAgICAgICAgICAgICAgICBbc3R5bGUuZGlzcGxheV09XCInbm9uZSdcIlxuICAgICAgICAgICAgICAgIFtpZF09XCJpZFwiXG4gICAgICAgICAgICAgICAgW25hbWVdPVwiJ3VwbG9hZGVyXycgKyBpZFwiXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidBdHRhY2hQaWN0dXJlJyB8IGJiYlRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgW2J1dHRvbkxhYmVsXT1cIidBdHRhY2hQaWN0dXJlJyB8IGJiYlRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgW2J1dHRvbkFyaWFMYWJlbF09XCInQXR0YWNoUGljdHVyZScgfCBiYmJUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIFthY2NlcHRdPVwidmFsaWRFeHRlbnNpb25zXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpbGVzXCJcbiAgICAgICAgICAgICAgICBbbXVsdGlwbGVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgIChzZWxlY3RlZEZpbGVzQ2hhbmdlZCk9XCJvbkZpbGVTZWxlY3Rpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9mZC1maWxlLXVwbG9hZGVyPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGZkLXRvb2xiYXItaXRlbVxuICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ0aGlzLnZhbHVlICYmIHZhbHVlPy5Jc0RlbGV0ZWQgIT09IHRydWVcIlxuICAgICAgICAgICAgICAgIGdseXBoPVwiYXR0YWNobWVudFwiXG4gICAgICAgICAgICAgICAgW2ZkVHlwZV09XCIndHJhbnNwYXJlbnQnXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidXBsb2FkZXIub3BlbigpXCJcbiAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImRlbGV0ZVwiXG4gICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgZmQtdG9vbGJhci1pdGVtXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiF0aGlzLnZhbHVlIHx8IHZhbHVlPy5Jc0RlbGV0ZWRcIlxuICAgICAgICAgICAgICAgIGdseXBoPVwiZGVsZXRlXCJcbiAgICAgICAgICAgICAgICBbZmRUeXBlXT1cIid0cmFuc3BhcmVudCdcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkZpbGVEZWxldGVkKHVwbG9hZGVyKVwiXG4gICAgICAgICAgICA+PC9idXR0b24+XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ1cGxvYWRTdGF0ZSQgfCBhc3luYyBhcyB1cGxvYWRTdGF0ZVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ1cGxvYWRTdGF0ZSAhPT0gJ0NvbXBsZXRlJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZmRwLXNsaWRlclxuICAgICAgICAgICAgICAgICAgICAgICAgZmQtdG9vbGJhci1pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiaWQgKyAnMSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiJ3NsaWRlcl8nICsgaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInByb2dyZXNzJCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttaW5dPVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF4XT1cIjEwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3RlcF09XCIxXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8L2ZkcC1zbGlkZXI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwidXBsb2FkU3RhdGUgPT09ICdVcGxvYWRpbmcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZkLXRvb2xiYXItaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBnbHlwaD1cInN0b3BcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uVGVybWluYXRlKClcIlxuICAgICAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwidXBsb2FkU3RhdGUgPT09ICdFcnJvcidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZmQtdG9vbGJhci1pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoPVwicmVmcmVzaFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZmRUeXBlXT1cIid0cmFuc3BhcmVudCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUmV0cnkoKVwiXG4gICAgICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2ZkLXRvb2xiYXI+XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgICAqbmdJZj1cIiFpbmxpbmVFZGl0OyBlbHNlIGF2YXRhclRlbXBsYXRlXCJcbiAgICAgICAgW3N0eWxlLm1heC1oZWlnaHQucHhdPVwiU2V0dGluZy5TaXplTW9kZSA9PT0gJzAnID8gbGF5b3V0SW5mby5Db250cm9sQm91bmRzLmhlaWdodCA6IG51bGxcIlxuICAgICAgICBbc3R5bGUubWF4LXdpZHRoLnB4XT1cIlNldHRpbmcuU2l6ZU1vZGUgPT09ICcwJyA/IGxheW91dEluZm8uQ29udHJvbEJvdW5kcy53aWR0aCA6IG51bGxcIlxuICAgICAgICBbc3R5bGUudGV4dC1hbGlnbl09XCJTZXR0aW5nLlNpemVNb2RlID09PSAnMycgPyAnY2VudGVyJyA6IG51bGxcIlxuICAgID5cbiAgICAgICAgPGltZ1xuICAgICAgICAgICAgKm5nSWY9XCIodmFsdWUgJiYgaW1hZ2VVcmwpIHx8IFNldHRpbmcuSGFzRGVmYXVsdFBpY3R1cmVcIlxuICAgICAgICAgICAgW3NyY109XCJpbWFnZVVybFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJTZXR0aW5nLlNpemVNb2RlID09PSAnMScgPyAnY292ZXInIDogJ2NvbnRhaW4nXCJcbiAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiU2V0dGluZy5TaXplTW9kZSAhPT0gJzInID8gbGF5b3V0SW5mby5Db250cm9sQm91bmRzLmhlaWdodCA6IG51bGxcIlxuICAgICAgICAvPlxuICAgIDwvZGl2PlxuICAgIDxuZy10ZW1wbGF0ZSAjYXZhdGFyVGVtcGxhdGU+XG4gICAgICAgIDxmZC1hdmF0YXIgW3NpemVdPVwiJ20nXCIgW2ltYWdlXT1cImltYWdlVXJsXCI+PC9mZC1hdmF0YXI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuPGJzdS1tYXNrICpuZ0lmPVwidXBsb2FkaW5nJCB8IGFzeW5jXCI+PC9ic3UtbWFzaz5cbiJdfQ==