barsa-sap-ui 2.2.1 → 2.2.3

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 (242) hide show
  1. package/esm2022/barsa-sap-ui.mjs +5 -0
  2. package/esm2022/lib/apply-conditional-formmatings.directive.mjs +90 -0
  3. package/esm2022/lib/avatar-size.pipe.mjs +41 -0
  4. package/esm2022/lib/barsa-answer-card/barsa-answer-card.component.mjs +41 -0
  5. package/esm2022/lib/barsa-asp-viewer/barsa-asp-viewer.component.mjs +145 -0
  6. package/esm2022/lib/barsa-bar-download-file/barsa-bar-download-file.component.mjs +23 -0
  7. package/esm2022/lib/barsa-bar-panel/barsa-bar-panel.component.mjs +23 -0
  8. package/esm2022/lib/barsa-base-panel/barsa-base-layout-panel.component.mjs +29 -0
  9. package/esm2022/lib/barsa-breadcrumbs/barsa-breadcrumbs.component.mjs +24 -0
  10. package/esm2022/lib/barsa-card-layout-panel/barsa-card-layout-panel.component.mjs +24 -0
  11. package/esm2022/lib/barsa-card-row-payam/barsa-card-row-payam.component.mjs +31 -0
  12. package/esm2022/lib/barsa-cartable-form/barsa-cartable-form.component.mjs +41 -0
  13. package/esm2022/lib/barsa-cartable-template/barsa-cartable-template.component.mjs +24 -0
  14. package/esm2022/lib/barsa-chat/barsa-chat.component.mjs +242 -0
  15. package/esm2022/lib/barsa-chat/chat.model.mjs +8 -0
  16. package/esm2022/lib/barsa-chat-content/barsa-chat-content.component.mjs +13 -0
  17. package/esm2022/lib/barsa-chat-content-toolbar/barsa-chat-content-toolbar.component.mjs +22 -0
  18. package/esm2022/lib/barsa-chat-list/barsa-chat-list.component.mjs +66 -0
  19. package/esm2022/lib/barsa-chat-message/barsa-chat-message.component.mjs +78 -0
  20. package/esm2022/lib/barsa-chat-thread/barsa-chat-thread.component.mjs +22 -0
  21. package/esm2022/lib/barsa-chat-threads-list/barsa-chat-threads-list.component.mjs +13 -0
  22. package/esm2022/lib/barsa-chat-threads-list-toolbar/barsa-chat-threads-list-toolbar.component.mjs +15 -0
  23. package/esm2022/lib/barsa-chip/barsa-chip.component.mjs +72 -0
  24. package/esm2022/lib/barsa-column-indicator/barsa-column-indicator.component.mjs +23 -0
  25. package/esm2022/lib/barsa-column-rownumber/barsa-column-rownumber.component.mjs +14 -0
  26. package/esm2022/lib/barsa-custom-inline-edit/barsa-custom-inline-edit.component.mjs +14 -0
  27. package/esm2022/lib/barsa-custom-inline-edit-row/barsa-custom-inline-edit-row.component.mjs +26 -0
  28. package/esm2022/lib/barsa-date-time-picker/barsa-date-time-picker.component.mjs +71 -0
  29. package/esm2022/lib/barsa-dynamic-field/barsa-dynamic-field.component.mjs +40 -0
  30. package/esm2022/lib/barsa-enum-menu-button/barsa-enum-menu-button.component.mjs +61 -0
  31. package/esm2022/lib/barsa-field-key-value/barsa-field-key-value.component.mjs +45 -0
  32. package/esm2022/lib/barsa-form-side-content/barsa-form-side-content.component.mjs +58 -0
  33. package/esm2022/lib/barsa-grid-layout-panel/barsa-grid-layout-panel.component.mjs +27 -0
  34. package/esm2022/lib/barsa-group-cartable/barsa-cartable-group.component.mjs +94 -0
  35. package/esm2022/lib/barsa-horizontal-flex-panel/barsa-horizontal-flex-panel.component.mjs +22 -0
  36. package/esm2022/lib/barsa-linkable-items-panel/barsa-linkable-items-panel.component.mjs +37 -0
  37. package/esm2022/lib/barsa-list-file-linear/barsa-list-file-linear.component.mjs +41 -0
  38. package/esm2022/lib/barsa-list-file-linear-gmail/barsa-list-file-linear-gmail.component.mjs +29 -0
  39. package/esm2022/lib/barsa-list-layout-panel/barsa-list-layout-panel.component.mjs +23 -0
  40. package/esm2022/lib/barsa-modal/barsa-modal.component.mjs +43 -0
  41. package/esm2022/lib/barsa-monaco-editor/barsa-monaco-editor.component.mjs +83 -0
  42. package/esm2022/lib/barsa-network-offline/barsa-network-offline.component.mjs +57 -0
  43. package/esm2022/lib/barsa-pishnamayesh-payam/barsa-pishnamayesh-payam.component.mjs +159 -0
  44. package/esm2022/lib/barsa-question-answer-comments-section/barsa-question-answer-comments-section.component.mjs +17 -0
  45. package/esm2022/lib/barsa-question-answer-content-actions-section/barsa-question-answer-content-actions-section.component.mjs +30 -0
  46. package/esm2022/lib/barsa-question-answer-creator-time-section/barsa-question-answer-creator-time-section.component.mjs +14 -0
  47. package/esm2022/lib/barsa-question-answer-form/barsa-question-answer-form.component.mjs +34 -0
  48. package/esm2022/lib/barsa-question-answer-form-add-comment/barsa-question-answer-form-add-comment.component.mjs +46 -0
  49. package/esm2022/lib/barsa-question-answer-vote-section/barsa-question-answer-vote-section.component.mjs +79 -0
  50. package/esm2022/lib/barsa-question-post/barsa-question-post.component.mjs +30 -0
  51. package/esm2022/lib/barsa-report-card-flex-view/barsa-report-card-flex-view.component.mjs +31 -0
  52. package/esm2022/lib/barsa-report-checkbox-switch-button/barsa-report-checkbox-switch-button.component.mjs +28 -0
  53. package/esm2022/lib/barsa-report-one-of-list/barsa-report-one-of-list.component.mjs +102 -0
  54. package/esm2022/lib/barsa-row-inline-actionlist/barsa-row-inline-actionlist.component.mjs +26 -0
  55. package/esm2022/lib/barsa-sap-ui-routing.module.mjs +18 -0
  56. package/esm2022/lib/barsa-sap-ui.module.mjs +377 -0
  57. package/esm2022/lib/barsa-search-form/barsa-search-form.component.mjs +29 -0
  58. package/esm2022/lib/barsa-simple-form/barsa-simple-form.component.mjs +170 -0
  59. package/esm2022/lib/barsa-tab-route-manager/barsa-tab-route-manager.component.mjs +18 -0
  60. package/esm2022/lib/barsa-table-column/barsa-table-column.component.mjs +29 -0
  61. package/esm2022/lib/barsa-table-header/barsa-table-header.component.mjs +222 -0
  62. package/esm2022/lib/barsa-table-row/barsa-table-row.component.mjs +87 -0
  63. package/esm2022/lib/barsa-tag-categories/barsa-tag-categories.component.mjs +60 -0
  64. package/esm2022/lib/barsa-tag-chip/barsa-tag-chip.component.mjs +26 -0
  65. package/esm2022/lib/barsa-tags-category-row/barsa-tags-category-row.component.mjs +23 -0
  66. package/esm2022/lib/barsa-text-ellipsis/barsa-text-ellipsis.component.mjs +37 -0
  67. package/esm2022/lib/barsa-tinyemce/barsa-tinyemce.component.mjs +418 -0
  68. package/esm2022/lib/barsa-toolbaritem-search/barsa-toolbaritem-search.component.mjs +36 -0
  69. package/esm2022/lib/barsa-tree-item/barsa-tree-item.component.mjs +153 -0
  70. package/esm2022/lib/barsa-tree-item/node-has-one-depth-level.pipe.mjs +20 -0
  71. package/esm2022/lib/barsa-ulv-main/barsa-ulv-main.component.mjs +216 -0
  72. package/esm2022/lib/blob-viewer/blob-viewer.component.mjs +74 -0
  73. package/esm2022/lib/breadcrumb/breadcrumb.component.mjs +50 -0
  74. package/esm2022/lib/captcha-field/captcha-field.component.mjs +28 -0
  75. package/esm2022/lib/card-item/card-item.component.mjs +74 -0
  76. package/esm2022/lib/card-view-content/card-view-content.component.mjs +46 -0
  77. package/esm2022/lib/col-renderer.directive.mjs +47 -0
  78. package/esm2022/lib/column-matrix-renderer/column-matrix-renderer.component.mjs +56 -0
  79. package/esm2022/lib/column-matrix-renderer/matrix-value.pipe.mjs +61 -0
  80. package/esm2022/lib/column-renderer/column-renderer.component.mjs +97 -0
  81. package/esm2022/lib/constants.mjs +450 -0
  82. package/esm2022/lib/custom-date-time/custom-date-time.component.mjs +41 -0
  83. package/esm2022/lib/device-info-field-base.mjs +24 -0
  84. package/esm2022/lib/dialog-handler.directive.mjs +29 -0
  85. package/esm2022/lib/download-files.directive.mjs +34 -0
  86. package/esm2022/lib/dynamic-page-size.pipe.mjs +27 -0
  87. package/esm2022/lib/file-in-dialog/file-in-dialog.component.mjs +44 -0
  88. package/esm2022/lib/file-viewer/file-viewer.component.mjs +47 -0
  89. package/esm2022/lib/file-viewer-content/file-viewer-content.component.mjs +71 -0
  90. package/esm2022/lib/file-viewer-popover/file-viewer-popover.component.mjs +37 -0
  91. package/esm2022/lib/form-dialog/form-dialog.component.mjs +171 -0
  92. package/esm2022/lib/form-dialog-less/form-dialog-less.component.mjs +50 -0
  93. package/esm2022/lib/form-toolbar/form-toolbar.component.mjs +62 -0
  94. package/esm2022/lib/form-toolbar-button/form-toolbar-button.component.mjs +45 -0
  95. package/esm2022/lib/form-wizard/form-wizard.component.mjs +21 -0
  96. package/esm2022/lib/fullscreen-dialog.directive.mjs +60 -0
  97. package/esm2022/lib/fullscreen-files.directive.mjs +43 -0
  98. package/esm2022/lib/fundamental-dynamic-form/fundamental-dynamic-form.component.mjs +217 -0
  99. package/esm2022/lib/gantt-dhtml-chart-view/gantt-dhtml-chart-view.component.mjs +215 -0
  100. package/esm2022/lib/global-search/global-search.component.mjs +27 -0
  101. package/esm2022/lib/global-search-module/global-search-module.component.mjs +29 -0
  102. package/esm2022/lib/global-search-panel/global-search-panel.component.mjs +25 -0
  103. package/esm2022/lib/header-avatar/header-avatar.component.mjs +18 -0
  104. package/esm2022/lib/htree-create-new/htree-create-new.component.mjs +48 -0
  105. package/esm2022/lib/hyperlink/hyperlink.component.mjs +23 -0
  106. package/esm2022/lib/index.mjs +549 -0
  107. package/esm2022/lib/inline-save-and-cancel/inline-save-and-cancel.component.mjs +32 -0
  108. package/esm2022/lib/layout-actions/layout-actions.component.mjs +70 -0
  109. package/esm2022/lib/layout-control/layout-control.component.mjs +302 -0
  110. package/esm2022/lib/layout-wizard/layout-wizard.component.mjs +180 -0
  111. package/esm2022/lib/list-item/list-item.component.mjs +34 -0
  112. package/esm2022/lib/ly-empty-space/ly-empty-space.component.mjs +42 -0
  113. package/esm2022/lib/ly-horizontal-layout/ly-horizontal-layout.component.mjs +82 -0
  114. package/esm2022/lib/ly-label/ly-label.component.mjs +37 -0
  115. package/esm2022/lib/ly-layout-container/ly-layout-container.component.mjs +83 -0
  116. package/esm2022/lib/ly-layout-container-of-root/ly-layout-container-of-root.component.mjs +17 -0
  117. package/esm2022/lib/ly-layout-field-label/ly-layout-field-label.component.mjs +24 -0
  118. package/esm2022/lib/ly-layout-panel/ly-layout-panel.component.mjs +83 -0
  119. package/esm2022/lib/ly-line/ly-line.component.mjs +56 -0
  120. package/esm2022/lib/ly-simple-label/ly-simple-label.component.mjs +22 -0
  121. package/esm2022/lib/ly-tab-container/ly-tab-container.component.mjs +44 -0
  122. package/esm2022/lib/ly-tab-page/ly-tab-page.component.mjs +44 -0
  123. package/esm2022/lib/ly-vertical-layout/ly-vertical-layout.component.mjs +51 -0
  124. package/esm2022/lib/manage-filters-report/manage-filters-report.component.mjs +43 -0
  125. package/esm2022/lib/mask/mask.component.mjs +22 -0
  126. package/esm2022/lib/message-strip/message-strip.component.mjs +28 -0
  127. package/esm2022/lib/models/grid-data-provider.mjs +114 -0
  128. package/esm2022/lib/models/grid-view.mjs +2 -0
  129. package/esm2022/lib/models/index.mjs +2 -0
  130. package/esm2022/lib/no-data/no-data.component.mjs +31 -0
  131. package/esm2022/lib/notification-item/notification-item.component.mjs +57 -0
  132. package/esm2022/lib/notification-item-actions/notification-item-actions.component.mjs +79 -0
  133. package/esm2022/lib/notification-popup.service.mjs +92 -0
  134. package/esm2022/lib/object-status-icon.pipe.mjs +27 -0
  135. package/esm2022/lib/progress-indicator/progress-indicator.component.mjs +18 -0
  136. package/esm2022/lib/report-navigator/report-navigator.component.mjs +68 -0
  137. package/esm2022/lib/report-new-top-form/report-new-top-form.component.mjs +60 -0
  138. package/esm2022/lib/report-search-fields-hidden-settings/report-search-fields-hidden-settings.component.mjs +35 -0
  139. package/esm2022/lib/report-search-fields-manage/report-search-fields-manage.component.mjs +97 -0
  140. package/esm2022/lib/report-search-panel-save/report-search-panel-save.component.mjs +88 -0
  141. package/esm2022/lib/report-tree-base.mjs +387 -0
  142. package/esm2022/lib/report-view-renderer.directive.mjs +392 -0
  143. package/esm2022/lib/responsive-toolbar/responsive-toolbar.component.mjs +50 -0
  144. package/esm2022/lib/responsive-toolbar-renderer/responsive-toolbar-renderer.component.mjs +84 -0
  145. package/esm2022/lib/rich-text-static/rich-text-static.component.mjs +72 -0
  146. package/esm2022/lib/sap-font-class.pipe.mjs +30 -0
  147. package/esm2022/lib/sap-font.pipe.mjs +30 -0
  148. package/esm2022/lib/sap-size.pipe.mjs +28 -0
  149. package/esm2022/lib/sap-ui-report-base.component.mjs +809 -0
  150. package/esm2022/lib/search-panel/search-panel.component.mjs +63 -0
  151. package/esm2022/lib/static-text/static-text.component.mjs +15 -0
  152. package/esm2022/lib/table-th.directive.mjs +87 -0
  153. package/esm2022/lib/title/title.component.mjs +15 -0
  154. package/esm2022/lib/ui-asp-report-viewer/ui-asp-report-viewer.component.mjs +34 -0
  155. package/esm2022/lib/ui-bpmn-viewer/ui-bpmn-viewer.component.mjs +33 -0
  156. package/esm2022/lib/ui-button/ui-button.component.mjs +32 -0
  157. package/esm2022/lib/ui-calendar/ui-calendar.component.mjs +53 -0
  158. package/esm2022/lib/ui-card-view/ui-card-view.component.mjs +58 -0
  159. package/esm2022/lib/ui-card-view-horizontal-group/ui-card-view-horizontal-group.component.mjs +42 -0
  160. package/esm2022/lib/ui-check-box/ui-check-box.component.mjs +39 -0
  161. package/esm2022/lib/ui-color-ui/ui-color-ui.component.mjs +50 -0
  162. package/esm2022/lib/ui-container-with-button/ui-container-with-button.component.mjs +38 -0
  163. package/esm2022/lib/ui-date-range-ex/ui-date-range-ex.component.mjs +191 -0
  164. package/esm2022/lib/ui-date-time/ui-date-time.component.mjs +150 -0
  165. package/esm2022/lib/ui-editable-grid/ui-editable-grid.component.mjs +108 -0
  166. package/esm2022/lib/ui-exception-form/ui-exception-form.component.mjs +53 -0
  167. package/esm2022/lib/ui-file-linear-list-box/ui-file-linear-list-box.component.mjs +124 -0
  168. package/esm2022/lib/ui-form-panel/ui-form-panel.component.mjs +103 -0
  169. package/esm2022/lib/ui-gantt-chart/ui-gantt-chart.component.mjs +32 -0
  170. package/esm2022/lib/ui-graph/ui-graph.component.mjs +17 -0
  171. package/esm2022/lib/ui-grid/ui-grid.component.mjs +25 -0
  172. package/esm2022/lib/ui-grid-columns/ui-grid-columns.component.mjs +43 -0
  173. package/esm2022/lib/ui-grid-filter-item/ui-grid-filter-item.component.mjs +66 -0
  174. package/esm2022/lib/ui-grid-filter-settings/ui-grid-filter-settings.component.mjs +75 -0
  175. package/esm2022/lib/ui-grid-sort-item/ui-grid-sort-item.component.mjs +58 -0
  176. package/esm2022/lib/ui-grid-sort-setting/ui-grid-sort-setting.component.mjs +123 -0
  177. package/esm2022/lib/ui-html-viewer/ui-html-viewer.component.mjs +16 -0
  178. package/esm2022/lib/ui-info-bar-panel/ui-info-bar-panel.component.mjs +11 -0
  179. package/esm2022/lib/ui-label/ui-label.component.mjs +12 -0
  180. package/esm2022/lib/ui-linear-list-container-with-button/ui-linear-list-container-with-button.component.mjs +379 -0
  181. package/esm2022/lib/ui-list-view/ui-list-view.component.mjs +84 -0
  182. package/esm2022/lib/ui-map/ui-map.component.mjs +68 -0
  183. package/esm2022/lib/ui-matrix-view/ui-matrix-view.component.mjs +124 -0
  184. package/esm2022/lib/ui-mo-info-combo-viewer/ui-mo-info-combo-viewer.component.mjs +19 -0
  185. package/esm2022/lib/ui-mo-info-general-object-ui/ui-mo-info-general-object-ui.component.mjs +14 -0
  186. package/esm2022/lib/ui-mo-info-sub-form-ui/ui-mo-info-sub-form-ui.component.mjs +55 -0
  187. package/esm2022/lib/ui-mo-info-ulv-combo/ui-mo-info-ulv-combo.component.mjs +429 -0
  188. package/esm2022/lib/ui-monaco-editor/ui-monaco-editor.component.mjs +28 -0
  189. package/esm2022/lib/ui-multi-select-card/ui-multi-select-card.component.mjs +37 -0
  190. package/esm2022/lib/ui-multi-select-checkbox/ui-multi-select-checkbox.component.mjs +59 -0
  191. package/esm2022/lib/ui-multi-select-combo/ui-multi-select-combo.component.mjs +93 -0
  192. package/esm2022/lib/ui-multi-select-radio/ui-multi-select-radio.component.mjs +36 -0
  193. package/esm2022/lib/ui-multi-select-slider/ui-multi-select-slider.component.mjs +56 -0
  194. package/esm2022/lib/ui-multi-select-smile/ui-multi-select-smile.component.mjs +28 -0
  195. package/esm2022/lib/ui-notification-view/ui-notification-view.component.mjs +47 -0
  196. package/esm2022/lib/ui-num-decimal-ui/ui-num-decimal-ui.component.mjs +33 -0
  197. package/esm2022/lib/ui-num-int-slider/ui-num-int-slider.component.mjs +27 -0
  198. package/esm2022/lib/ui-num-int-ui/ui-num-int-ui.component.mjs +21 -0
  199. package/esm2022/lib/ui-pdf-viewer/ui-pdf-viewer.component.mjs +268 -0
  200. package/esm2022/lib/ui-picture-file/ui-picture-file.component.mjs +101 -0
  201. package/esm2022/lib/ui-pictures-info/ui-pictures-info.component.mjs +261 -0
  202. package/esm2022/lib/ui-radio-group/ui-radio-group.component.mjs +48 -0
  203. package/esm2022/lib/ui-read-only-field/ui-read-only-field.component.mjs +36 -0
  204. package/esm2022/lib/ui-report-container/ui-report-container.component.mjs +46 -0
  205. package/esm2022/lib/ui-search-command-info-ui/ui-search-command-info-ui.component.mjs +24 -0
  206. package/esm2022/lib/ui-simple-combo/ui-simple-combo.component.mjs +55 -0
  207. package/esm2022/lib/ui-single-picture/ui-single-picture.component.mjs +36 -0
  208. package/esm2022/lib/ui-switch-button/ui-switch-button.component.mjs +20 -0
  209. package/esm2022/lib/ui-table-view/ui-table-view.component.mjs +296 -0
  210. package/esm2022/lib/ui-text-area/ui-text-area.component.mjs +49 -0
  211. package/esm2022/lib/ui-text-field/ui-text-field.component.mjs +52 -0
  212. package/esm2022/lib/ui-text-field-auto-complete/ui-text-field-auto-complete.component.mjs +48 -0
  213. package/esm2022/lib/ui-time-span/ui-time-span.component.mjs +24 -0
  214. package/esm2022/lib/ui-tinymce/ui-tinymce.component.mjs +53 -0
  215. package/esm2022/lib/ui-tree/ui-tree.component.mjs +114 -0
  216. package/esm2022/lib/ui-tree-view/ui-tree-view.component.mjs +100 -0
  217. package/esm2022/lib/ui-ulv-form-multi-select-ui/ui-ulv-form-multi-select-ui.component.mjs +23 -0
  218. package/esm2022/lib/ui-ulv-main-ui/ui-ulv-main-ui.component.mjs +310 -0
  219. package/esm2022/lib/ui-workflow-panel-ui/ui-workflow-panel-ui.component.mjs +25 -0
  220. package/esm2022/lib/ul-loading-mask-ui/ul-loading-mask-ui.component.mjs +93 -0
  221. package/esm2022/lib/ul-msg-box-adapter/ul-msg-box-adapter.component.mjs +119 -0
  222. package/esm2022/lib/ul-notify-popup/ul-notify-popup.component.mjs +32 -0
  223. package/esm2022/lib/ul-toast-adapter/ul-toast-adapter.component.mjs +48 -0
  224. package/esm2022/lib/ulv-column-settings/ulv-column-settings.component.mjs +53 -0
  225. package/esm2022/lib/ulv-context-menu/ulv-context-menu.component.mjs +116 -0
  226. package/esm2022/lib/ulv-filter-settings/ulv-filter-settings.component.mjs +43 -0
  227. package/esm2022/lib/ulv-form-multi-select/ulv-form-multi-select.component.mjs +196 -0
  228. package/esm2022/lib/ulv-groupby-settings/ulv-groupby-settings.component.mjs +44 -0
  229. package/esm2022/lib/ulv-paging/ulv-paging.component.mjs +84 -0
  230. package/esm2022/lib/ulv-selection/ulv-selection.component.mjs +65 -0
  231. package/esm2022/lib/ulv-settings/ulv-settings.component.mjs +116 -0
  232. package/esm2022/lib/ulv-sort-settings/ulv-sort-settings.component.mjs +54 -0
  233. package/esm2022/lib/ulv-toolbar/ulv-toolbar.component.mjs +177 -0
  234. package/esm2022/lib/upload-file-status.pipe.mjs +29 -0
  235. package/esm2022/lib/util-chat-time-badge.pipe.mjs +18 -0
  236. package/esm2022/lib/util-date-to-hh-mm.pipe.mjs +23 -0
  237. package/esm2022/lib/wizard-layout.directive.mjs +104 -0
  238. package/esm2022/public-api.mjs +236 -0
  239. package/fesm2022/barsa-sap-ui.mjs +6 -13
  240. package/fesm2022/barsa-sap-ui.mjs.map +1 -1
  241. package/lib/layout-wizard/layout-wizard.component.d.ts +0 -1
  242. package/package.json +3 -1
@@ -0,0 +1,392 @@
1
+ import { Directive, EventEmitter, Input, Output } from '@angular/core';
2
+ import { takeUntil } from 'rxjs/operators';
3
+ import { BaseDirective } from 'barsa-novin-ray-core';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "barsa-novin-ray-core";
6
+ export class ReportViewRendererDirective extends BaseDirective {
7
+ constructor(_portalService, _ulvMainService, _vcr, _injector, _el) {
8
+ super(_el);
9
+ this._portalService = _portalService;
10
+ this._ulvMainService = _ulvMainService;
11
+ this._vcr = _vcr;
12
+ this._injector = _injector;
13
+ this._el = _el;
14
+ this.editFormPanelCancel = new EventEmitter();
15
+ this.editFormPanelValueChange = new EventEmitter();
16
+ this.resetWorkflowState = new EventEmitter();
17
+ this.ulvCommandClick = new EventEmitter();
18
+ this.sortAscending = new EventEmitter();
19
+ this.sortDescending = new EventEmitter();
20
+ this.filter = new EventEmitter();
21
+ this.deselectAll = new EventEmitter();
22
+ this.rowCheck = new EventEmitter();
23
+ this.rowClick = new EventEmitter();
24
+ this.executeToolbarButton = new EventEmitter();
25
+ this.expandClick = new EventEmitter();
26
+ this.trackBySelectedFn = new EventEmitter();
27
+ this.cartableFormClosed = new EventEmitter();
28
+ this.createNewMo = new EventEmitter();
29
+ this.updateMo = new EventEmitter();
30
+ this.hasDetailsInRow = new EventEmitter();
31
+ this.allCheckbox = new EventEmitter();
32
+ this.mandatory = new EventEmitter();
33
+ this.editFormPanelSave = new EventEmitter();
34
+ this.columnResized = new EventEmitter();
35
+ this.selectNextInlineRecord = new EventEmitter();
36
+ this.workflowShareButtons = new EventEmitter();
37
+ this.escapeKey = new EventEmitter();
38
+ this.resetGridSettings = new EventEmitter();
39
+ this.sortSettingsChange = new EventEmitter();
40
+ }
41
+ ngOnChanges(changes) {
42
+ const { view } = changes;
43
+ if (view && !view.firstChange) {
44
+ this._reportViewRef.destroy();
45
+ this._vcr.clear();
46
+ this._insertView(view.currentValue);
47
+ }
48
+ else {
49
+ if (this._reportViewRef) {
50
+ this._reportViewRef.instance.ngOnChanges(changes);
51
+ }
52
+ }
53
+ }
54
+ ngOnInit() {
55
+ super.ngOnInit();
56
+ this._insertView(this.view);
57
+ }
58
+ ngOnDestroy() {
59
+ super.ngOnDestroy();
60
+ this._reportViewRef?.destroy();
61
+ }
62
+ _insertView(view) {
63
+ if (!view) {
64
+ return;
65
+ }
66
+ const { Module, ModuleFileName, Name, Selector } = view.UiComponent;
67
+ this._ulvMainService.setUiViewerClass(Selector);
68
+ this._portalService
69
+ .getComponent(Module, ModuleFileName, Name, Selector, this._injector)
70
+ .pipe(takeUntil(this._onDestroy$))
71
+ .subscribe((componentRef) => {
72
+ const instance = componentRef.instance;
73
+ instance.cartableTemplates = this.cartableTemplates;
74
+ instance.cartableChildsMo = this.cartableChildsMo;
75
+ instance.moDataList = this.moDataList;
76
+ instance.contextSetting = this.contextSetting;
77
+ instance.groupby = this.groupby;
78
+ instance.groupSummary = this.groupSummary;
79
+ instance.simpleInlineEdit = this.simpleInlineEdit;
80
+ instance.UlvMainCtrlr = this.UlvMainCtrlr;
81
+ instance.pagingSetting = this.pagingSetting;
82
+ instance.hideSearchpanel = this.hideSearchpanel;
83
+ instance.customFieldInfo = this.customFieldInfo;
84
+ instance.disableResponsive = this.disableResponsive;
85
+ instance.toolbarButtons = this.toolbarButtons;
86
+ instance.popin = this.popin;
87
+ instance.contextView = this.contextView;
88
+ instance.isCheckList = this.isCheckList;
89
+ instance.toolbarButtons = this.toolbarButtons;
90
+ instance.columns = this.columns;
91
+ instance.listEditViewId = this.listEditViewId;
92
+ instance.typeViewId = this.typeViewId;
93
+ instance.gridFreeColumnSizing = this.gridFreeColumnSizing;
94
+ instance.inDialog = this.inDialog;
95
+ instance.hasInlineDeleteButton = this.hasInlineDeleteButton;
96
+ instance.hasInlineEditButton = this.hasInlineEditButton;
97
+ instance.isMultiSelect = this.isMultiSelect;
98
+ instance.columnsCount = this.columnsCount;
99
+ instance.hideToolbar = this.hideToolbar;
100
+ instance.hideTitle = this.hideTitle;
101
+ instance.extraRelation = this.extraRelation;
102
+ instance.secondaryColumns = this.secondaryColumns;
103
+ instance.contextMenuItems = this.contextMenuItems;
104
+ instance.conditionalFormats = this.conditionalFormats;
105
+ instance.disableOverflowContextMenu = this.disableOverflowContextMenu;
106
+ instance.typeDefId = this.typeDefId;
107
+ instance.reportId = this.reportId;
108
+ instance.deviceName = this.deviceName;
109
+ instance.deviceSize = this.deviceSize;
110
+ instance.mobileOrTablet = this.mobileOrTablet;
111
+ instance.containerWidth = this.containerWidth;
112
+ instance.columnsCount = this.columnsCount;
113
+ instance.selectedCount = this.selectedCount;
114
+ instance.hideOpenIcon = this.hideOpenIcon;
115
+ instance.openOnClick = this.openOnClick;
116
+ instance.access = this.access;
117
+ instance.title = this.title;
118
+ instance.hasSummary = this.hasSummary;
119
+ instance.contentDensity = this.contentDensity;
120
+ instance.relationList = this.relationList;
121
+ instance.allColumns = this.allColumns ?? this.columns;
122
+ instance.viewSetting = view.UiComponent.Settings;
123
+ instance.inlineEditMode = this.inlineEditMode;
124
+ instance.onlyInlineEdit = this.onlyInlineEdit;
125
+ instance.allowInlineEdit = this.allowInlineEdit;
126
+ instance.formSetting = this.formSetting;
127
+ instance.navigationArrow = this.navigationArrow;
128
+ instance.selectedMo = this.selectedMo;
129
+ instance.hasSelected = this.hasSelected;
130
+ instance.rtl = this.rtl;
131
+ instance.escapeKey?.pipe(takeUntil(this._onDestroy$)).subscribe((mo) => {
132
+ this.escapeKey.emit(mo);
133
+ });
134
+ instance.resetWorkflowState?.pipe(takeUntil(this._onDestroy$)).subscribe((mo) => {
135
+ this.resetWorkflowState.emit(mo);
136
+ });
137
+ instance.editFormPanelValueChange
138
+ ?.pipe(takeUntil(this._onDestroy$))
139
+ .subscribe(({ mo, fieldDbName }) => {
140
+ this.editFormPanelValueChange.emit({ mo, fieldDbName });
141
+ });
142
+ instance.selectNextInlineRecord?.pipe(takeUntil(this._onDestroy$)).subscribe((mo) => {
143
+ this.selectNextInlineRecord.emit(mo);
144
+ });
145
+ instance.editFormPanelCancel?.pipe(takeUntil(this._onDestroy$)).subscribe((mo) => {
146
+ this.editFormPanelCancel.emit(mo);
147
+ });
148
+ instance.ulvCommandClick?.pipe(takeUntil(this._onDestroy$)).subscribe((e) => {
149
+ this.ulvCommandClick.emit(e);
150
+ });
151
+ instance.sortAscending?.pipe(takeUntil(this._onDestroy$)).subscribe((e) => {
152
+ this.sortAscending.emit(e);
153
+ });
154
+ instance.sortDescending?.pipe(takeUntil(this._onDestroy$)).subscribe((e) => {
155
+ this.sortDescending.emit(e);
156
+ });
157
+ instance.filter?.pipe(takeUntil(this._onDestroy$)).subscribe((e) => {
158
+ this.filter.emit(e);
159
+ });
160
+ instance.columnResized?.pipe(takeUntil(this._onDestroy$)).subscribe((e) => {
161
+ this.columnResized.emit(e);
162
+ });
163
+ instance.rowCheck?.pipe(takeUntil(this._onDestroy$)).subscribe((e) => {
164
+ this.rowCheck.emit(e);
165
+ });
166
+ instance.deselectAll?.pipe(takeUntil(this._onDestroy$)).subscribe(() => {
167
+ this.deselectAll.emit();
168
+ });
169
+ instance.rowClick?.pipe(takeUntil(this._onDestroy$)).subscribe((e) => {
170
+ this.rowClick.emit(e);
171
+ });
172
+ instance.expandClick?.pipe(takeUntil(this._onDestroy$)).subscribe((e) => {
173
+ this.expandClick.emit(e);
174
+ });
175
+ instance.allCheckbox?.pipe(takeUntil(this._onDestroy$)).subscribe((e) => {
176
+ this.allCheckbox.emit(e);
177
+ });
178
+ instance.editFormPanelSave?.pipe(takeUntil(this._onDestroy$)).subscribe((mo) => {
179
+ this.editFormPanelSave.emit(mo);
180
+ });
181
+ instance.cartableFormClosed?.pipe(takeUntil(this._onDestroy$)).subscribe((e) => {
182
+ this.cartableFormClosed.emit(e);
183
+ });
184
+ instance.createNewMo?.pipe(takeUntil(this._onDestroy$)).subscribe(() => {
185
+ this.createNewMo.emit();
186
+ });
187
+ instance.hasDetailsInRow?.pipe(takeUntil(this._onDestroy$)).subscribe((mo) => {
188
+ this.hasDetailsInRow.emit(mo);
189
+ });
190
+ instance.updateMo?.pipe(takeUntil(this._onDestroy$)).subscribe((mo) => {
191
+ this.updateMo.emit(mo);
192
+ });
193
+ instance.mandatory?.pipe(takeUntil(this._onDestroy$)).subscribe((isValid) => {
194
+ this.mandatory.emit(isValid);
195
+ });
196
+ instance.executeToolbarButton?.pipe(takeUntil(this._onDestroy$)).subscribe((e) => {
197
+ this.executeToolbarButton.emit(e);
198
+ });
199
+ instance.resetGridSettings?.pipe(takeUntil(this._onDestroy$)).subscribe((e) => {
200
+ this.resetGridSettings.emit();
201
+ });
202
+ instance.sortSettingsChange?.pipe(takeUntil(this._onDestroy$)).subscribe((e) => {
203
+ this.sortSettingsChange.emit(e);
204
+ });
205
+ instance.workflowShareButtons
206
+ ?.pipe(takeUntil(this._onDestroy$))
207
+ .subscribe((e) => {
208
+ this.workflowShareButtons.emit(e);
209
+ });
210
+ this._vcr.insert(componentRef.hostView);
211
+ this._reportViewRef = componentRef;
212
+ });
213
+ }
214
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ReportViewRendererDirective, deps: [{ token: i1.PortalService }, { token: i1.UlvMainService }, { token: i0.ViewContainerRef }, { token: i0.Injector }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
215
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: ReportViewRendererDirective, selector: "[reportViewRenderer]", inputs: { view: "view", moDataList: "moDataList", allChecked: "allChecked", contextSetting: "contextSetting", groupby: "groupby", isCheckList: "isCheckList", hasInlineDeleteButton: "hasInlineDeleteButton", hasInlineEditButton: "hasInlineEditButton", selectedCount: "selectedCount", hideToolbar: "hideToolbar", toolbarButtons: "toolbarButtons", pagingSetting: "pagingSetting", UlvMainCtrlr: "UlvMainCtrlr", hasSummary: "hasSummary", relationList: "relationList", columns: "columns", columnsCount: "columnsCount", secondaryColumns: "secondaryColumns", contextMenuItems: "contextMenuItems", conditionalFormats: "conditionalFormats", deviceName: "deviceName", deviceSize: "deviceSize", mobileOrTablet: "mobileOrTablet", access: "access", title: "title", customFieldInfo: "customFieldInfo", selectedMo: "selectedMo", allColumns: "allColumns", viewSetting: "viewSetting", inlineEditMode: "inlineEditMode", onlyInlineEdit: "onlyInlineEdit", allowInlineEdit: "allowInlineEdit", popin: "popin", hasSelected: "hasSelected", formSetting: "formSetting", disableOverflowContextMenu: "disableOverflowContextMenu", navigationArrow: "navigationArrow", typeDefId: "typeDefId", reportId: "reportId", listEditViewId: "listEditViewId", typeViewId: "typeViewId", containerWidth: "containerWidth", extraRelation: "extraRelation", contextView: "contextView", contentDensity: "contentDensity", hideOpenIcon: "hideOpenIcon", hideTitle: "hideTitle", groupSummary: "groupSummary", openOnClick: "openOnClick", inDialog: "inDialog", isMultiSelect: "isMultiSelect", rtl: "rtl", disableResponsive: "disableResponsive", simpleInlineEdit: "simpleInlineEdit", hideSearchpanel: "hideSearchpanel", gridFreeColumnSizing: "gridFreeColumnSizing", cartableTemplates: "cartableTemplates", cartableChildsMo: "cartableChildsMo" }, outputs: { editFormPanelCancel: "editFormPanelCancel", editFormPanelValueChange: "editFormPanelValueChange", resetWorkflowState: "resetWorkflowState", ulvCommandClick: "ulvCommandClick", sortAscending: "sortAscending", sortDescending: "sortDescending", filter: "filter", deselectAll: "deselectAll", rowCheck: "rowCheck", rowClick: "rowClick", executeToolbarButton: "executeToolbarButton", expandClick: "expandClick", trackBySelectedFn: "trackBySelectedFn", cartableFormClosed: "cartableFormClosed", createNewMo: "createNewMo", updateMo: "updateMo", hasDetailsInRow: "hasDetailsInRow", allCheckbox: "allCheckbox", mandatory: "mandatory", editFormPanelSave: "editFormPanelSave", columnResized: "columnResized", selectNextInlineRecord: "selectNextInlineRecord", workflowShareButtons: "workflowShareButtons", escapeKey: "escapeKey", resetGridSettings: "resetGridSettings", sortSettingsChange: "sortSettingsChange" }, usesInheritance: true, usesOnChanges: true, ngImport: i0 }); }
216
+ }
217
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ReportViewRendererDirective, decorators: [{
218
+ type: Directive,
219
+ args: [{
220
+ selector: '[reportViewRenderer]',
221
+ standalone: false
222
+ }]
223
+ }], ctorParameters: () => [{ type: i1.PortalService }, { type: i1.UlvMainService }, { type: i0.ViewContainerRef }, { type: i0.Injector }, { type: i0.ElementRef }], propDecorators: { view: [{
224
+ type: Input
225
+ }], moDataList: [{
226
+ type: Input
227
+ }], allChecked: [{
228
+ type: Input
229
+ }], contextSetting: [{
230
+ type: Input
231
+ }], groupby: [{
232
+ type: Input
233
+ }], isCheckList: [{
234
+ type: Input
235
+ }], hasInlineDeleteButton: [{
236
+ type: Input
237
+ }], hasInlineEditButton: [{
238
+ type: Input
239
+ }], selectedCount: [{
240
+ type: Input
241
+ }], hideToolbar: [{
242
+ type: Input
243
+ }], toolbarButtons: [{
244
+ type: Input
245
+ }], pagingSetting: [{
246
+ type: Input
247
+ }], UlvMainCtrlr: [{
248
+ type: Input
249
+ }], hasSummary: [{
250
+ type: Input
251
+ }], relationList: [{
252
+ type: Input
253
+ }], columns: [{
254
+ type: Input
255
+ }], columnsCount: [{
256
+ type: Input
257
+ }], secondaryColumns: [{
258
+ type: Input
259
+ }], contextMenuItems: [{
260
+ type: Input
261
+ }], conditionalFormats: [{
262
+ type: Input
263
+ }], deviceName: [{
264
+ type: Input
265
+ }], deviceSize: [{
266
+ type: Input
267
+ }], mobileOrTablet: [{
268
+ type: Input
269
+ }], access: [{
270
+ type: Input
271
+ }], title: [{
272
+ type: Input
273
+ }], customFieldInfo: [{
274
+ type: Input
275
+ }], selectedMo: [{
276
+ type: Input
277
+ }], allColumns: [{
278
+ type: Input
279
+ }], viewSetting: [{
280
+ type: Input
281
+ }], inlineEditMode: [{
282
+ type: Input
283
+ }], onlyInlineEdit: [{
284
+ type: Input
285
+ }], allowInlineEdit: [{
286
+ type: Input
287
+ }], popin: [{
288
+ type: Input
289
+ }], hasSelected: [{
290
+ type: Input
291
+ }], formSetting: [{
292
+ type: Input
293
+ }], disableOverflowContextMenu: [{
294
+ type: Input
295
+ }], navigationArrow: [{
296
+ type: Input
297
+ }], typeDefId: [{
298
+ type: Input
299
+ }], reportId: [{
300
+ type: Input
301
+ }], listEditViewId: [{
302
+ type: Input
303
+ }], typeViewId: [{
304
+ type: Input
305
+ }], containerWidth: [{
306
+ type: Input
307
+ }], extraRelation: [{
308
+ type: Input
309
+ }], contextView: [{
310
+ type: Input
311
+ }], contentDensity: [{
312
+ type: Input
313
+ }], hideOpenIcon: [{
314
+ type: Input
315
+ }], hideTitle: [{
316
+ type: Input
317
+ }], groupSummary: [{
318
+ type: Input
319
+ }], openOnClick: [{
320
+ type: Input
321
+ }], inDialog: [{
322
+ type: Input
323
+ }], isMultiSelect: [{
324
+ type: Input
325
+ }], rtl: [{
326
+ type: Input
327
+ }], disableResponsive: [{
328
+ type: Input
329
+ }], simpleInlineEdit: [{
330
+ type: Input
331
+ }], hideSearchpanel: [{
332
+ type: Input
333
+ }], gridFreeColumnSizing: [{
334
+ type: Input
335
+ }], cartableTemplates: [{
336
+ type: Input
337
+ }], cartableChildsMo: [{
338
+ type: Input
339
+ }], editFormPanelCancel: [{
340
+ type: Output
341
+ }], editFormPanelValueChange: [{
342
+ type: Output
343
+ }], resetWorkflowState: [{
344
+ type: Output
345
+ }], ulvCommandClick: [{
346
+ type: Output
347
+ }], sortAscending: [{
348
+ type: Output
349
+ }], sortDescending: [{
350
+ type: Output
351
+ }], filter: [{
352
+ type: Output
353
+ }], deselectAll: [{
354
+ type: Output
355
+ }], rowCheck: [{
356
+ type: Output
357
+ }], rowClick: [{
358
+ type: Output
359
+ }], executeToolbarButton: [{
360
+ type: Output
361
+ }], expandClick: [{
362
+ type: Output
363
+ }], trackBySelectedFn: [{
364
+ type: Output
365
+ }], cartableFormClosed: [{
366
+ type: Output
367
+ }], createNewMo: [{
368
+ type: Output
369
+ }], updateMo: [{
370
+ type: Output
371
+ }], hasDetailsInRow: [{
372
+ type: Output
373
+ }], allCheckbox: [{
374
+ type: Output
375
+ }], mandatory: [{
376
+ type: Output
377
+ }], editFormPanelSave: [{
378
+ type: Output
379
+ }], columnResized: [{
380
+ type: Output
381
+ }], selectNextInlineRecord: [{
382
+ type: Output
383
+ }], workflowShareButtons: [{
384
+ type: Output
385
+ }], escapeKey: [{
386
+ type: Output
387
+ }], resetGridSettings: [{
388
+ type: Output
389
+ }], sortSettingsChange: [{
390
+ type: Output
391
+ }] } });
392
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXZpZXctcmVuZGVyZXIuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvcmVwb3J0LXZpZXctcmVuZGVyZXIuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxTQUFTLEVBRVQsWUFBWSxFQUVaLEtBQUssRUFJTCxNQUFNLEVBR1QsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFFSCxhQUFhLEVBa0JoQixNQUFNLHNCQUFzQixDQUFDOzs7QUFNOUIsTUFBTSxPQUFPLDJCQUE0QixTQUFRLGFBQWE7SUF5RjFELFlBQ1ksY0FBNkIsRUFDN0IsZUFBK0IsRUFDL0IsSUFBc0IsRUFDdEIsU0FBbUIsRUFDakIsR0FBZTtRQUV6QixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFOSCxtQkFBYyxHQUFkLGNBQWMsQ0FBZTtRQUM3QixvQkFBZSxHQUFmLGVBQWUsQ0FBZ0I7UUFDL0IsU0FBSSxHQUFKLElBQUksQ0FBa0I7UUFDdEIsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQUNqQixRQUFHLEdBQUgsR0FBRyxDQUFZO1FBbENuQix3QkFBbUIsR0FBRyxJQUFJLFlBQVksRUFBdUIsQ0FBQztRQUM5RCw2QkFBd0IsR0FBRyxJQUFJLFlBQVksRUFBcUQsQ0FBQztRQUVqRyx1QkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQzdDLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUMxQyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDeEMsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3pDLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ2pDLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVB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QjtzQkFBN0IsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFDRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLHNCQUFzQjtzQkFBL0IsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIENvbXBvbmVudFJlZixcclxuICAgIERpcmVjdGl2ZSxcclxuICAgIEVsZW1lbnRSZWYsXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBJbmplY3RvcixcclxuICAgIElucHV0LFxyXG4gICAgT25DaGFuZ2VzLFxyXG4gICAgT25EZXN0cm95LFxyXG4gICAgT25Jbml0LFxyXG4gICAgT3V0cHV0LFxyXG4gICAgU2ltcGxlQ2hhbmdlcyxcclxuICAgIFZpZXdDb250YWluZXJSZWZcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udGVudERlbnNpdHkgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7XHJcbiAgICBBYmJyZXZhdGlvbkRldmljZVNpemUsXHJcbiAgICBCYXNlRGlyZWN0aXZlLFxyXG4gICAgY29sdW1uc1Jlc2l6ZWRFdmVudEFyZ3MsXHJcbiAgICBEZWZhdWx0Q29tbWFuZHNBY2Nlc3MsXHJcbiAgICBEZXZpY2VTaXplLFxyXG4gICAgRm9ybVNldHRpbmcsXHJcbiAgICBNZW51SXRlbSxcclxuICAgIE1ldGFvYmplY3REYXRhTW9kZWwsXHJcbiAgICBQb3J0YWxTZXJ2aWNlLFxyXG4gICAgUmVsYXRpb25JdGVtVHlwZSxcclxuICAgIFJlcG9ydFZpZXdCYXNlQ29tcG9uZW50LFxyXG4gICAgUmVwb3J0Vmlld0NvbHVtbixcclxuICAgIFNvcnRTZXR0aW5nLFxyXG4gICAgVWlSZXBvcnRWaWV3QmFzZSxcclxuICAgIFVpUmVwb3J0Vmlld0Jhc2VTZXR0aW5nLFxyXG4gICAgU2hhcmVCdXR0b25zQ2hvaWNlRGVmLFxyXG4gICAgVHlwZVVsdk1haW5DdHJscixcclxuICAgIFBhZ2luZ1NldHRpbmcsXHJcbiAgICBVbHZNYWluU2VydmljZVxyXG59IGZyb20gJ2JhcnNhLW5vdmluLXJheS1jb3JlJztcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gICAgc2VsZWN0b3I6ICdbcmVwb3J0Vmlld1JlbmRlcmVyXScsXHJcbiAgICBzdGFuZGFsb25lOiBmYWxzZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUmVwb3J0Vmlld1JlbmRlcmVyRGlyZWN0aXZlIGV4dGVuZHMgQmFzZURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gICAgQElucHV0KCkgdmlldzogVWlSZXBvcnRWaWV3QmFzZTtcclxuICAgIEBJbnB1dCgpIG1vRGF0YUxpc3Q6IE1ldGFvYmplY3REYXRhTW9kZWxbXTtcclxuICAgIEBJbnB1dCgpIGFsbENoZWNrZWQ6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBjb250ZXh0U2V0dGluZzogYW55O1xyXG4gICAgQElucHV0KCkgZ3JvdXBieTogU29ydFNldHRpbmdbXTtcclxuICAgIEBJbnB1dCgpIGlzQ2hlY2tMaXN0OiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgaGFzSW5saW5lRGVsZXRlQnV0dG9uOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgaGFzSW5saW5lRWRpdEJ1dHRvbjogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIHNlbGVjdGVkQ291bnQ6IG51bWJlcjtcclxuICAgIEBJbnB1dCgpIGhpZGVUb29sYmFyOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgdG9vbGJhckJ1dHRvbnM6IE1lbnVJdGVtW107XHJcbiAgICBASW5wdXQoKSBwYWdpbmdTZXR0aW5nOiBQYWdpbmdTZXR0aW5nO1xyXG4gICAgQElucHV0KCkgVWx2TWFpbkN0cmxyOiBUeXBlVWx2TWFpbkN0cmxyO1xyXG4gICAgQElucHV0KCkgaGFzU3VtbWFyeTogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIHJlbGF0aW9uTGlzdDogQXJyYXk8UmVsYXRpb25JdGVtVHlwZT47XHJcbiAgICBASW5wdXQoKSBjb2x1bW5zOiBSZXBvcnRWaWV3Q29sdW1uW107XHJcbiAgICBASW5wdXQoKSBjb2x1bW5zQ291bnQ6IG51bWJlcjtcclxuICAgIEBJbnB1dCgpIHNlY29uZGFyeUNvbHVtbnM6IFJlcG9ydFZpZXdDb2x1bW5bXTtcclxuICAgIEBJbnB1dCgpIGNvbnRleHRNZW51SXRlbXM6IE1lbnVJdGVtW107XHJcbiAgICBASW5wdXQoKSBjb25kaXRpb25hbEZvcm1hdHM6IGFueVtdO1xyXG4gICAgQElucHV0KCkgZGV2aWNlTmFtZTogRGV2aWNlU2l6ZTtcclxuICAgIEBJbnB1dCgpIGRldmljZVNpemU6IEFiYnJldmF0aW9uRGV2aWNlU2l6ZTtcclxuICAgIEBJbnB1dCgpIG1vYmlsZU9yVGFibGV0OiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgYWNjZXNzOiBEZWZhdWx0Q29tbWFuZHNBY2Nlc3M7XHJcbiAgICBASW5wdXQoKSB0aXRsZTogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgY3VzdG9tRmllbGRJbmZvOiBNZXRhb2JqZWN0RGF0YU1vZGVsIHwgYW55O1xyXG4gICAgQElucHV0KCkgc2VsZWN0ZWRNbzogTWV0YW9iamVjdERhdGFNb2RlbDtcclxuICAgIEBJbnB1dCgpIGFsbENvbHVtbnM6IFJlcG9ydFZpZXdDb2x1bW5bXTtcclxuICAgIEBJbnB1dCgpIHZpZXdTZXR0aW5nOiBVaVJlcG9ydFZpZXdCYXNlU2V0dGluZztcclxuICAgIEBJbnB1dCgpIGlubGluZUVkaXRNb2RlOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgb25seUlubGluZUVkaXQ6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBhbGxvd0lubGluZUVkaXQ6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBwb3BpbjogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIGhhc1NlbGVjdGVkOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgZm9ybVNldHRpbmc6IEZvcm1TZXR0aW5nO1xyXG4gICAgQElucHV0KCkgZGlzYWJsZU92ZXJmbG93Q29udGV4dE1lbnU6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBuYXZpZ2F0aW9uQXJyb3c6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIHR5cGVEZWZJZDogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgcmVwb3J0SWQ6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIGxpc3RFZGl0Vmlld0lkOiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSB0eXBlVmlld0lkOiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBjb250YWluZXJXaWR0aDogbnVtYmVyO1xyXG4gICAgQElucHV0KCkgZXh0cmFSZWxhdGlvbjogYW55O1xyXG4gICAgQElucHV0KCkgY29udGV4dFZpZXc6IGFueTtcclxuICAgIEBJbnB1dCgpIGNvbnRlbnREZW5zaXR5OiBDb250ZW50RGVuc2l0eTtcclxuICAgIEBJbnB1dCgpIGhpZGVPcGVuSWNvbjogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIGhpZGVUaXRsZTogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIGdyb3VwU3VtbWFyeTogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIG9wZW5PbkNsaWNrOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgaW5EaWFsb2c6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBpc011bHRpU2VsZWN0OiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgcnRsOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgZGlzYWJsZVJlc3BvbnNpdmU6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBzaW1wbGVJbmxpbmVFZGl0OiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgaGlkZVNlYXJjaHBhbmVsOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgZ3JpZEZyZWVDb2x1bW5TaXppbmc6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBjYXJ0YWJsZVRlbXBsYXRlczogeyBba2V5OiBzdHJpbmddOiBGb3JtU2V0dGluZyB9O1xyXG4gICAgQElucHV0KCkgY2FydGFibGVDaGlsZHNNbzogeyBba2V5OiBzdHJpbmddOiBNZXRhb2JqZWN0RGF0YU1vZGVsIH07XHJcblxyXG4gICAgQE91dHB1dCgpIGVkaXRGb3JtUGFuZWxDYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyPE1ldGFvYmplY3REYXRhTW9kZWw+KCk7XHJcbiAgICBAT3V0cHV0KCkgZWRpdEZvcm1QYW5lbFZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx7IG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsOyBmaWVsZERiTmFtZT86IHN0cmluZyB9PigpO1xyXG5cclxuICAgIEBPdXRwdXQoKSByZXNldFdvcmtmbG93U3RhdGUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSB1bHZDb21tYW5kQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBzb3J0QXNjZW5kaW5nID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgc29ydERlc2NlbmRpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBmaWx0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBkZXNlbGVjdEFsbCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICAgIEBPdXRwdXQoKSByb3dDaGVjayA9IG5ldyBFdmVudEVtaXR0ZXI8eyBtbzsgaW5kZXg7IGNhdXNlPyB9PigpO1xyXG4gICAgQE91dHB1dCgpIHJvd0NsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjx7IG1vOyBpbmRleCB9PigpO1xyXG4gICAgQE91dHB1dCgpIGV4ZWN1dGVUb29sYmFyQnV0dG9uID0gbmV3IEV2ZW50RW1pdHRlcjx7IGl0ZW1JZDogc3RyaW5nOyBvcHRpb25zPzogYW55IH0+KCk7XHJcbiAgICBAT3V0cHV0KCkgZXhwYW5kQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPE1ldGFvYmplY3REYXRhTW9kZWw+KCk7XHJcbiAgICBAT3V0cHV0KCkgdHJhY2tCeVNlbGVjdGVkRm4gPSBuZXcgRXZlbnRFbWl0dGVyPHsgaW5kZXg7IHJlY29yZCB9PigpO1xyXG4gICAgQE91dHB1dCgpIGNhcnRhYmxlRm9ybUNsb3NlZCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBpbmRleDsgbW8gfT4oKTtcclxuICAgIEBPdXRwdXQoKSBjcmVhdGVOZXdNbyA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICAgIEBPdXRwdXQoKSB1cGRhdGVNbyA9IG5ldyBFdmVudEVtaXR0ZXI8TWV0YW9iamVjdERhdGFNb2RlbD4oKTtcclxuICAgIEBPdXRwdXQoKSBoYXNEZXRhaWxzSW5Sb3cgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcbiAgICBAT3V0cHV0KCkgYWxsQ2hlY2tib3ggPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcbiAgICBAT3V0cHV0KCkgbWFuZGF0b3J5ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG4gICAgQE91dHB1dCgpIGVkaXRGb3JtUGFuZWxTYXZlID0gbmV3IEV2ZW50RW1pdHRlcjxNZXRhb2JqZWN0RGF0YU1vZGVsPigpO1xyXG4gICAgQE91dHB1dCgpIGNvbHVtblJlc2l6ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGNvbHVtbnNSZXNpemVkRXZlbnRBcmdzPigpO1xyXG4gICAgQE91dHB1dCgpIHNlbGVjdE5leHRJbmxpbmVSZWNvcmQgPSBuZXcgRXZlbnRFbWl0dGVyPE1ldGFvYmplY3REYXRhTW9kZWw+KCk7XHJcbiAgICBAT3V0cHV0KCkgd29ya2Zsb3dTaGFyZUJ1dHRvbnMgPSBuZXcgRXZlbnRFbWl0dGVyPFNoYXJlQnV0dG9uc0Nob2ljZURlZj4oKTtcclxuICAgIEBPdXRwdXQoKSBlc2NhcGVLZXkgPSBuZXcgRXZlbnRFbWl0dGVyPE1ldGFvYmplY3REYXRhTW9kZWw+KCk7XHJcbiAgICBAT3V0cHV0KCkgcmVzZXRHcmlkU2V0dGluZ3MgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgICBAT3V0cHV0KCkgc29ydFNldHRpbmdzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxTb3J0U2V0dGluZ1tdPigpO1xyXG5cclxuICAgIF9yZXBvcnRWaWV3UmVmOiBDb21wb25lbnRSZWY8UmVwb3J0Vmlld0Jhc2VDb21wb25lbnQ8VWlSZXBvcnRWaWV3QmFzZVNldHRpbmc+PjtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgX3BvcnRhbFNlcnZpY2U6IFBvcnRhbFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfdWx2TWFpblNlcnZpY2U6IFVsdk1haW5TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX3ZjcjogVmlld0NvbnRhaW5lclJlZixcclxuICAgICAgICBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICAgICAgcHJvdGVjdGVkIF9lbDogRWxlbWVudFJlZlxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoX2VsKTtcclxuICAgIH1cclxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB7IHZpZXcgfSA9IGNoYW5nZXM7XHJcblxyXG4gICAgICAgIGlmICh2aWV3ICYmICF2aWV3LmZpcnN0Q2hhbmdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlcG9ydFZpZXdSZWYuZGVzdHJveSgpO1xyXG4gICAgICAgICAgICB0aGlzLl92Y3IuY2xlYXIoKTtcclxuICAgICAgICAgICAgdGhpcy5faW5zZXJ0Vmlldyh2aWV3LmN1cnJlbnRWYWx1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX3JlcG9ydFZpZXdSZWYpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3JlcG9ydFZpZXdSZWYuaW5zdGFuY2UubmdPbkNoYW5nZXMoY2hhbmdlcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG4gICAgICAgIHRoaXMuX2luc2VydFZpZXcodGhpcy52aWV3KTtcclxuICAgIH1cclxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XHJcbiAgICAgICAgdGhpcy5fcmVwb3J0Vmlld1JlZj8uZGVzdHJveSgpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBfaW5zZXJ0Vmlldyh2aWV3KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF2aWV3KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgeyBNb2R1bGUsIE1vZHVsZUZpbGVOYW1lLCBOYW1lLCBTZWxlY3RvciB9ID0gdmlldy5VaUNvbXBvbmVudDtcclxuICAgICAgICB0aGlzLl91bHZNYWluU2VydmljZS5zZXRVaVZpZXdlckNsYXNzKFNlbGVjdG9yKTtcclxuICAgICAgICB0aGlzLl9wb3J0YWxTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5nZXRDb21wb25lbnQoTW9kdWxlLCBNb2R1bGVGaWxlTmFtZSwgTmFtZSwgU2VsZWN0b3IsIHRoaXMuX2luamVjdG9yKVxyXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGNvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPFJlcG9ydFZpZXdCYXNlQ29tcG9uZW50PFVpUmVwb3J0Vmlld0Jhc2VTZXR0aW5nPj4pID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gY29tcG9uZW50UmVmLmluc3RhbmNlO1xyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UuY2FydGFibGVUZW1wbGF0ZXMgPSB0aGlzLmNhcnRhYmxlVGVtcGxhdGVzO1xyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UuY2FydGFibGVDaGlsZHNNbyA9IHRoaXMuY2FydGFibGVDaGlsZHNNbztcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlLm1vRGF0YUxpc3QgPSB0aGlzLm1vRGF0YUxpc3Q7XHJcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5jb250ZXh0U2V0dGluZyA9IHRoaXMuY29udGV4dFNldHRpbmc7XHJcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5ncm91cGJ5ID0gdGhpcy5ncm91cGJ5O1xyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UuZ3JvdXBTdW1tYXJ5ID0gdGhpcy5ncm91cFN1bW1hcnk7XHJcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5zaW1wbGVJbmxpbmVFZGl0ID0gdGhpcy5zaW1wbGVJbmxpbmVFZGl0O1xyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UuVWx2TWFpbkN0cmxyID0gdGhpcy5VbHZNYWluQ3RybHI7XHJcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5wYWdpbmdTZXR0aW5nID0gdGhpcy5wYWdpbmdTZXR0aW5nO1xyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UuaGlkZVNlYXJjaHBhbmVsID0gdGhpcy5oaWRlU2VhcmNocGFuZWw7XHJcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5jdXN0b21GaWVsZEluZm8gPSB0aGlzLmN1c3RvbUZpZWxkSW5mbztcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlLmRpc2FibGVSZXNwb25zaXZlID0gdGhpcy5kaXNhYmxlUmVzcG9uc2l2ZTtcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlLnRvb2xiYXJCdXR0b25zID0gdGhpcy50b29sYmFyQnV0dG9ucztcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlLnBvcGluID0gdGhpcy5wb3BpbjtcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlLmNvbnRleHRWaWV3ID0gdGhpcy5jb250ZXh0VmlldztcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlLmlzQ2hlY2tMaXN0ID0gdGhpcy5pc0NoZWNrTGlzdDtcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlLnRvb2xiYXJCdXR0b25zID0gdGhpcy50b29sYmFyQnV0dG9ucztcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XHJcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5saXN0RWRpdFZpZXdJZCA9IHRoaXMubGlzdEVkaXRWaWV3SWQ7XHJcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS50eXBlVmlld0lkID0gdGhpcy50eXBlVmlld0lkO1xyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UuZ3JpZEZyZWVDb2x1bW5TaXppbmcgPSB0aGlzLmdyaWRGcmVlQ29sdW1uU2l6aW5nO1xyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UuaW5EaWFsb2cgPSB0aGlzLmluRGlhbG9nO1xyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UuaGFzSW5saW5lRGVsZXRlQnV0dG9uID0gdGhpcy5oYXNJbmxpbmVEZWxldGVCdXR0b247XHJcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5oYXNJbmxpbmVFZGl0QnV0dG9uID0gdGhpcy5oYXNJbmxpbmVFZGl0QnV0dG9uO1xyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UuaXNNdWx0aVNlbGVjdCA9IHRoaXMuaXNNdWx0aVNlbGVjdDtcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlLmNvbHVtbnNDb3VudCA9IHRoaXMuY29sdW1uc0NvdW50O1xyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UuaGlkZVRvb2xiYXIgPSB0aGlzLmhpZGVUb29sYmFyO1xyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UuaGlkZVRpdGxlID0gdGhpcy5oaWRlVGl0bGU7XHJcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5leHRyYVJlbGF0aW9uID0gdGhpcy5leHRyYVJlbGF0aW9uO1xyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2Uuc2Vjb25kYXJ5Q29sdW1ucyA9IHRoaXMuc2Vjb25kYXJ5Q29sdW1ucztcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlLmNvbnRleHRNZW51SXRlbXMgPSB0aGlzLmNvbnRleHRNZW51SXRlbXM7XHJcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5jb25kaXRpb25hbEZvcm1hdHMgPSB0aGlzLmNvbmRpdGlvbmFsRm9ybWF0cztcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlLmRpc2FibGVPdmVyZmxvd0NvbnRleHRNZW51ID0gdGhpcy5kaXNhYmxlT3ZlcmZsb3dDb250ZXh0TWVudTtcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlLnR5cGVEZWZJZCA9IHRoaXMudHlwZURlZklkO1xyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UucmVwb3J0SWQgPSB0aGlzLnJlcG9ydElkO1xyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UuZGV2aWNlTmFtZSA9IHRoaXMuZGV2aWNlTmFtZTtcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlLmRldmljZVNpemUgPSB0aGlzLmRldmljZVNpemU7XHJcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5tb2JpbGVPclRhYmxldCA9IHRoaXMubW9iaWxlT3JUYWJsZXQ7XHJcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5jb250YWluZXJXaWR0aCA9IHRoaXMuY29udGFpbmVyV2lkdGg7XHJcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5jb2x1bW5zQ291bnQgPSB0aGlzLmNvbHVtbnNDb3VudDtcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlLnNlbGVjdGVkQ291bnQgPSB0aGlzLnNlbGVjdGVkQ291bnQ7XHJcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5oaWRlT3Blbkljb24gPSB0aGlzLmhpZGVPcGVuSWNvbjtcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlLm9wZW5PbkNsaWNrID0gdGhpcy5vcGVuT25DbGljaztcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlLmFjY2VzcyA9IHRoaXMuYWNjZXNzO1xyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UudGl0bGUgPSB0aGlzLnRpdGxlO1xyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UuaGFzU3VtbWFyeSA9IHRoaXMuaGFzU3VtbWFyeTtcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlLmNvbnRlbnREZW5zaXR5ID0gdGhpcy5jb250ZW50RGVuc2l0eTtcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlLnJlbGF0aW9uTGlzdCA9IHRoaXMucmVsYXRpb25MaXN0O1xyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UuYWxsQ29sdW1ucyA9IHRoaXMuYWxsQ29sdW1ucyA/PyB0aGlzLmNvbHVtbnM7XHJcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS52aWV3U2V0dGluZyA9IHZpZXcuVWlDb21wb25lbnQuU2V0dGluZ3M7XHJcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5pbmxpbmVFZGl0TW9kZSA9IHRoaXMuaW5saW5lRWRpdE1vZGU7XHJcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5vbmx5SW5saW5lRWRpdCA9IHRoaXMub25seUlubGluZUVkaXQ7XHJcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5hbGxvd0lubGluZUVkaXQgPSB0aGlzLmFsbG93SW5saW5lRWRpdDtcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlLmZvcm1TZXR0aW5nID0gdGhpcy5mb3JtU2V0dGluZztcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlLm5hdmlnYXRpb25BcnJvdyA9IHRoaXMubmF2aWdhdGlvbkFycm93O1xyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2Uuc2VsZWN0ZWRNbyA9IHRoaXMuc2VsZWN0ZWRNbztcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlLmhhc1NlbGVjdGVkID0gdGhpcy5oYXNTZWxlY3RlZDtcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlLnJ0bCA9IHRoaXMucnRsO1xyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UuZXNjYXBlS2V5Py5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSkuc3Vic2NyaWJlKChtbykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXNjYXBlS2V5LmVtaXQobW8pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5yZXNldFdvcmtmbG93U3RhdGU/LnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKG1vKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNldFdvcmtmbG93U3RhdGUuZW1pdChtbyk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlLmVkaXRGb3JtUGFuZWxWYWx1ZUNoYW5nZVxyXG4gICAgICAgICAgICAgICAgICAgID8ucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpXHJcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoeyBtbywgZmllbGREYk5hbWUgfSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVkaXRGb3JtUGFuZWxWYWx1ZUNoYW5nZS5lbWl0KHsgbW8sIGZpZWxkRGJOYW1lIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2Uuc2VsZWN0TmV4dElubGluZVJlY29yZD8ucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpLnN1YnNjcmliZSgobW8pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdE5leHRJbmxpbmVSZWNvcmQuZW1pdChtbyk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlLmVkaXRGb3JtUGFuZWxDYW5jZWw/LnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKG1vKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lZGl0Rm9ybVBhbmVsQ2FuY2VsLmVtaXQobW8pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS51bHZDb21tYW5kQ2xpY2s/LnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVsdkNvbW1hbmRDbGljay5lbWl0KGUpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5zb3J0QXNjZW5kaW5nPy5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3J0QXNjZW5kaW5nLmVtaXQoZSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlLnNvcnREZXNjZW5kaW5nPy5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3J0RGVzY2VuZGluZy5lbWl0KGUpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5maWx0ZXI/LnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlci5lbWl0KGUpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UuY29sdW1uUmVzaXplZD8ucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpLnN1YnNjcmliZSgoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uUmVzaXplZC5lbWl0KGUpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2Uucm93Q2hlY2s/LnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKGU6IHsgbW87IGluZGV4OyBjYXVzZT8gfSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm93Q2hlY2suZW1pdChlKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UuZGVzZWxlY3RBbGw/LnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVzZWxlY3RBbGwuZW1pdCgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5yb3dDbGljaz8ucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpLnN1YnNjcmliZSgoZTogeyBtbzsgaW5kZXggfSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm93Q2xpY2suZW1pdChlKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UuZXhwYW5kQ2xpY2s/LnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKGU6IE1ldGFvYmplY3REYXRhTW9kZWwpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGFuZENsaWNrLmVtaXQoZSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlLmFsbENoZWNrYm94Py5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGxDaGVja2JveC5lbWl0KGUpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5lZGl0Rm9ybVBhbmVsU2F2ZT8ucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpLnN1YnNjcmliZSgobW8pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVkaXRGb3JtUGFuZWxTYXZlLmVtaXQobW8pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5jYXJ0YWJsZUZvcm1DbG9zZWQ/LnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKGU6IHsgbW87IGluZGV4IH0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhcnRhYmxlRm9ybUNsb3NlZC5lbWl0KGUpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5jcmVhdGVOZXdNbz8ucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVOZXdNby5lbWl0KCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlLmhhc0RldGFpbHNJblJvdz8ucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpLnN1YnNjcmliZSgobW8pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc0RldGFpbHNJblJvdy5lbWl0KG1vKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UudXBkYXRlTW8/LnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKG1vKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVNby5lbWl0KG1vKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UubWFuZGF0b3J5Py5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSkuc3Vic2NyaWJlKChpc1ZhbGlkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYW5kYXRvcnkuZW1pdChpc1ZhbGlkKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UuZXhlY3V0ZVRvb2xiYXJCdXR0b24/LnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmV4ZWN1dGVUb29sYmFyQnV0dG9uLmVtaXQoZSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlLnJlc2V0R3JpZFNldHRpbmdzPy5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNldEdyaWRTZXR0aW5ncy5lbWl0KCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlLnNvcnRTZXR0aW5nc0NoYW5nZT8ucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpLnN1YnNjcmliZSgoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc29ydFNldHRpbmdzQ2hhbmdlLmVtaXQoZSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlLndvcmtmbG93U2hhcmVCdXR0b25zXHJcbiAgICAgICAgICAgICAgICAgICAgPy5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSlcclxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChlOiBTaGFyZUJ1dHRvbnNDaG9pY2VEZWYpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53b3JrZmxvd1NoYXJlQnV0dG9ucy5lbWl0KGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdmNyLmluc2VydChjb21wb25lbnRSZWYuaG9zdFZpZXcpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcmVwb3J0Vmlld1JlZiA9IGNvbXBvbmVudFJlZjtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -0,0 +1,50 @@
1
+ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewChildren } from '@angular/core';
2
+ import { BaseComponent } from 'barsa-novin-ray-core';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "barsa-novin-ray-core";
5
+ import * as i2 from "@fundamental-ngx/core/button";
6
+ import * as i3 from "@fundamental-ngx/core/toolbar";
7
+ import * as i4 from "@angular/common";
8
+ export class ResponsiveToolbarComponent extends BaseComponent {
9
+ constructor(portalService) {
10
+ super();
11
+ this.portalService = portalService;
12
+ this.btnClick = new EventEmitter();
13
+ this.dirValue$ = this.portalService.dirValue$;
14
+ }
15
+ ngOnInit() {
16
+ super.ngOnInit();
17
+ this.btns = this.buttons;
18
+ }
19
+ calculateWidthOfButtons() {
20
+ const tempList = [];
21
+ this.btnListRef.toArray().forEach((btnRef, i) => {
22
+ let btnTemp = this.buttons[i];
23
+ if (this.buttons[i] === '-') {
24
+ btnTemp = { text: '-', width: btnRef.nativeElement.offsetWidth };
25
+ }
26
+ else {
27
+ btnTemp.width = btnRef.nativeElement.offsetWidth + 10;
28
+ }
29
+ tempList.push(btnTemp);
30
+ });
31
+ this.buttonsCalculated = [...tempList];
32
+ }
33
+ onButtonClick(button) {
34
+ this.btnClick.emit(button);
35
+ }
36
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ResponsiveToolbarComponent, deps: [{ token: i1.PortalService }], target: i0.ɵɵFactoryTarget.Component }); }
37
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ResponsiveToolbarComponent, selector: "bsu-responsive-toolbar", inputs: { buttons: "buttons" }, outputs: { btnClick: "btnClick" }, viewQueries: [{ propertyName: "btnListRef", predicate: ["btnRef"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<!-- <div style=\"width: 100%; height: 0; visibility: hidden\" #containerRef>\r\n<ng-container\r\n *ngTemplateOutlet=\"renderToolbar; context: { $implicit: buttons }\"\r\n></ng-container>\r\n</div>\r\n<bsu-responsive-toolbar-renderer\r\n *ngIf=\"buttonsCalculated\"\r\n [buttons]=\"buttonsCalculated\"\r\n (btnClick)=\"onButtonClick($event)\"\r\n [renderToolbar]=\"renderToolbar\"\r\n></bsu-responsive-toolbar-renderer>\r\n\r\n<ng-template #renderToolbar let-btnList>\r\n <ng-container *ngFor=\"let btn of btnList\">\r\n <ng-container *ngIf=\"btn === '-' || btn.text === '-'; else btnCommand\">\r\n <span #btnRef class=\"toolbar-btn toolbar-vseperator\"></span>\r\n </ng-container>\r\n <ng-template #btnCommand>\r\n <ui5-button\r\n #btnRef\r\n (click)=\"onButtonClick(btn)\"\r\n [attr.disabled]=\"btn.enable === false ? true : null\"\r\n [attr.disabled]=\"btn.readonly === true ? true : null\"\r\n class=\"toolbar-btn\"\r\n [attr.design]=\"btn.emphasized ? 'Emphasized' : 'Transparent'\"\r\n [attr.icon]=\"btn.newIcon ? btn.newIcon : null\"\r\n >{{ btn.text }}\r\n <img *ngIf=\"!btn.newIcon && !btn.isBuiltin\" width=\"16\" [src]=\"btn.icon\"\r\n /></ui5-button>\r\n </ng-template>\r\n </ng-container>\r\n </ng-template> -->\r\n\r\n<fd-toolbar [shouldOverflow]=\"true\" [style.direction]=\"dirValue$ | async\">\r\n @for (btn of btns; track btn) { @if (btn === '-' || btn.text === '-') {\r\n <fd-toolbar-separator></fd-toolbar-separator>\r\n } @else {\r\n <button\r\n fd-toolbar-item\r\n fd-button\r\n (click)=\"onButtonClick(btn)\"\r\n [attr.disabled]=\"btn.enable === false ? true : null\"\r\n [attr.disabled]=\"btn.readonly === true ? true : null\"\r\n [fdType]=\"btn.emphasized ? 'emphasized' : 'transparent'\"\r\n [label]=\"btn.text\"\r\n [glyph]=\"btn.newIcon ? btn.newIcon : null\"\r\n >\r\n @if (!btn.newIcon && !btn.isBuiltin) {\r\n <img width=\"16\" [src]=\"btn.icon\" />\r\n }\r\n </button>\r\n }\r\n <ng-template #btnCommand>\r\n <button\r\n fd-toolbar-item\r\n fd-button\r\n (click)=\"onButtonClick(btn)\"\r\n [attr.disabled]=\"btn.enable === false ? true : null\"\r\n [attr.disabled]=\"btn.readonly === true ? true : null\"\r\n [fdType]=\"btn.emphasized ? 'emphasized' : 'transparent'\"\r\n [label]=\"btn.text\"\r\n [glyph]=\"btn.newIcon ? btn.newIcon : null\"\r\n >\r\n @if (!btn.newIcon && !btn.isBuiltin) {\r\n <img width=\"16\" [src]=\"btn.icon\" />\r\n }\r\n </button>\r\n </ng-template>\r\n }\r\n</fd-toolbar>\r\n", styles: [":host{display:block;width:100%;position:relative}:host ::ng-deep .fd-toolbar--solid{background-color:var(--sapBackgroundColor, #f7f7f7);border:none}\n"], dependencies: [{ kind: "component", type: i2.ButtonComponent, selector: "button[fd-button], a[fd-button], span[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i3.ToolbarComponent, selector: "fd-toolbar", inputs: ["titleId", "class", "shouldOverflow", "fdType", "title", "active", "clearBorder", "forceOverflow", "tabindex", "headingLevel", "ariaLabel", "ariaLabelledBy"] }, { kind: "directive", type: i3.ToolbarItemDirective, selector: "[fd-toolbar-item], [fdOverflowGroup], [fdOverflowPriority]", inputs: ["fdOverflowPriority", "fdOverflowGroup"] }, { kind: "component", type: i3.ToolbarSeparatorComponent, selector: "fd-toolbar-separator" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
38
+ }
39
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ResponsiveToolbarComponent, decorators: [{
40
+ type: Component,
41
+ args: [{ selector: 'bsu-responsive-toolbar', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<!-- <div style=\"width: 100%; height: 0; visibility: hidden\" #containerRef>\r\n<ng-container\r\n *ngTemplateOutlet=\"renderToolbar; context: { $implicit: buttons }\"\r\n></ng-container>\r\n</div>\r\n<bsu-responsive-toolbar-renderer\r\n *ngIf=\"buttonsCalculated\"\r\n [buttons]=\"buttonsCalculated\"\r\n (btnClick)=\"onButtonClick($event)\"\r\n [renderToolbar]=\"renderToolbar\"\r\n></bsu-responsive-toolbar-renderer>\r\n\r\n<ng-template #renderToolbar let-btnList>\r\n <ng-container *ngFor=\"let btn of btnList\">\r\n <ng-container *ngIf=\"btn === '-' || btn.text === '-'; else btnCommand\">\r\n <span #btnRef class=\"toolbar-btn toolbar-vseperator\"></span>\r\n </ng-container>\r\n <ng-template #btnCommand>\r\n <ui5-button\r\n #btnRef\r\n (click)=\"onButtonClick(btn)\"\r\n [attr.disabled]=\"btn.enable === false ? true : null\"\r\n [attr.disabled]=\"btn.readonly === true ? true : null\"\r\n class=\"toolbar-btn\"\r\n [attr.design]=\"btn.emphasized ? 'Emphasized' : 'Transparent'\"\r\n [attr.icon]=\"btn.newIcon ? btn.newIcon : null\"\r\n >{{ btn.text }}\r\n <img *ngIf=\"!btn.newIcon && !btn.isBuiltin\" width=\"16\" [src]=\"btn.icon\"\r\n /></ui5-button>\r\n </ng-template>\r\n </ng-container>\r\n </ng-template> -->\r\n\r\n<fd-toolbar [shouldOverflow]=\"true\" [style.direction]=\"dirValue$ | async\">\r\n @for (btn of btns; track btn) { @if (btn === '-' || btn.text === '-') {\r\n <fd-toolbar-separator></fd-toolbar-separator>\r\n } @else {\r\n <button\r\n fd-toolbar-item\r\n fd-button\r\n (click)=\"onButtonClick(btn)\"\r\n [attr.disabled]=\"btn.enable === false ? true : null\"\r\n [attr.disabled]=\"btn.readonly === true ? true : null\"\r\n [fdType]=\"btn.emphasized ? 'emphasized' : 'transparent'\"\r\n [label]=\"btn.text\"\r\n [glyph]=\"btn.newIcon ? btn.newIcon : null\"\r\n >\r\n @if (!btn.newIcon && !btn.isBuiltin) {\r\n <img width=\"16\" [src]=\"btn.icon\" />\r\n }\r\n </button>\r\n }\r\n <ng-template #btnCommand>\r\n <button\r\n fd-toolbar-item\r\n fd-button\r\n (click)=\"onButtonClick(btn)\"\r\n [attr.disabled]=\"btn.enable === false ? true : null\"\r\n [attr.disabled]=\"btn.readonly === true ? true : null\"\r\n [fdType]=\"btn.emphasized ? 'emphasized' : 'transparent'\"\r\n [label]=\"btn.text\"\r\n [glyph]=\"btn.newIcon ? btn.newIcon : null\"\r\n >\r\n @if (!btn.newIcon && !btn.isBuiltin) {\r\n <img width=\"16\" [src]=\"btn.icon\" />\r\n }\r\n </button>\r\n </ng-template>\r\n }\r\n</fd-toolbar>\r\n", styles: [":host{display:block;width:100%;position:relative}:host ::ng-deep .fd-toolbar--solid{background-color:var(--sapBackgroundColor, #f7f7f7);border:none}\n"] }]
42
+ }], ctorParameters: () => [{ type: i1.PortalService }], propDecorators: { buttons: [{
43
+ type: Input
44
+ }], btnClick: [{
45
+ type: Output
46
+ }], btnListRef: [{
47
+ type: ViewChildren,
48
+ args: ['btnRef']
49
+ }] } });
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2l2ZS10b29sYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLXNhcC11aS9zcmMvbGliL3Jlc3BvbnNpdmUtdG9vbGJhci9yZXNwb25zaXZlLXRvb2xiYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvcmVzcG9uc2l2ZS10b29sYmFyL3Jlc3BvbnNpdmUtdG9vbGJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFFTixZQUFZLEVBQ2YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBaUIsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7O0FBVXBFLE1BQU0sT0FBTywwQkFBMkIsU0FBUSxhQUFhO0lBU3pELFlBQW9CLGFBQTRCO1FBQzVDLEtBQUssRUFBRSxDQUFDO1FBRFEsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFQdEMsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFTekMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQztJQUNsRCxDQUFDO0lBQ0QsUUFBUTtRQUNKLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDN0IsQ0FBQztJQUNELHVCQUF1QjtRQUNuQixNQUFNLFFBQVEsR0FBUSxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDNUMsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM5QixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7Z0JBQzFCLE9BQU8sR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckUsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLE9BQU8sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1lBQzFELENBQUM7WUFDRCxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBQ0QsYUFBYSxDQUFDLE1BQU07UUFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0IsQ0FBQzsrR0FoQ1EsMEJBQTBCO21HQUExQiwwQkFBMEIsaVBDckJ2QyxtdUZBc0VBOzs0RkRqRGEsMEJBQTBCO2tCQVB0QyxTQUFTOytCQUNJLHdCQUF3QixtQkFHakIsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxLQUFLO2tGQUdSLE9BQU87c0JBQWYsS0FBSztnQkFDSSxRQUFRO3NCQUFqQixNQUFNO2dCQUNpQixVQUFVO3NCQUFqQyxZQUFZO3VCQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBFbGVtZW50UmVmLFxyXG4gICAgRXZlbnRFbWl0dGVyLFxyXG4gICAgSW5wdXQsXHJcbiAgICBPbkluaXQsXHJcbiAgICBPdXRwdXQsXHJcbiAgICBRdWVyeUxpc3QsXHJcbiAgICBWaWV3Q2hpbGRyZW5cclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQmFzZUNvbXBvbmVudCwgUG9ydGFsU2VydmljZSB9IGZyb20gJ2JhcnNhLW5vdmluLXJheS1jb3JlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2JzdS1yZXNwb25zaXZlLXRvb2xiYXInLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3Jlc3BvbnNpdmUtdG9vbGJhci5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9yZXNwb25zaXZlLXRvb2xiYXIuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gICAgc3RhbmRhbG9uZTogZmFsc2VcclxufSlcclxuZXhwb3J0IGNsYXNzIFJlc3BvbnNpdmVUb29sYmFyQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBASW5wdXQoKSBidXR0b25zOiBhbnlbXTtcclxuICAgIEBPdXRwdXQoKSBidG5DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQFZpZXdDaGlsZHJlbignYnRuUmVmJykgYnRuTGlzdFJlZjogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xyXG5cclxuICAgIGRpclZhbHVlJDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xyXG4gICAgYnV0dG9uc0NhbGN1bGF0ZWQ6IGFueVtdO1xyXG4gICAgYnRuczogYW55W107XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBwb3J0YWxTZXJ2aWNlOiBQb3J0YWxTZXJ2aWNlKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLmRpclZhbHVlJCA9IHRoaXMucG9ydGFsU2VydmljZS5kaXJWYWx1ZSQ7XHJcbiAgICB9XHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG4gICAgICAgIHRoaXMuYnRucyA9IHRoaXMuYnV0dG9ucztcclxuICAgIH1cclxuICAgIGNhbGN1bGF0ZVdpZHRoT2ZCdXR0b25zKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHRlbXBMaXN0OiBhbnkgPSBbXTtcclxuICAgICAgICB0aGlzLmJ0bkxpc3RSZWYudG9BcnJheSgpLmZvckVhY2goKGJ0blJlZiwgaSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgYnRuVGVtcCA9IHRoaXMuYnV0dG9uc1tpXTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuYnV0dG9uc1tpXSA9PT0gJy0nKSB7XHJcbiAgICAgICAgICAgICAgICBidG5UZW1wID0geyB0ZXh0OiAnLScsIHdpZHRoOiBidG5SZWYubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCB9O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYnRuVGVtcC53aWR0aCA9IGJ0blJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoICsgMTA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGVtcExpc3QucHVzaChidG5UZW1wKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmJ1dHRvbnNDYWxjdWxhdGVkID0gWy4uLnRlbXBMaXN0XTtcclxuICAgIH1cclxuICAgIG9uQnV0dG9uQ2xpY2soYnV0dG9uKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5idG5DbGljay5lbWl0KGJ1dHRvbik7XHJcbiAgICB9XHJcbn1cclxuIiwiPCEtLSA8ZGl2IHN0eWxlPVwid2lkdGg6IDEwMCU7IGhlaWdodDogMDsgdmlzaWJpbGl0eTogaGlkZGVuXCIgI2NvbnRhaW5lclJlZj5cclxuPG5nLWNvbnRhaW5lclxyXG4gICpuZ1RlbXBsYXRlT3V0bGV0PVwicmVuZGVyVG9vbGJhcjsgY29udGV4dDogeyAkaW1wbGljaXQ6IGJ1dHRvbnMgfVwiXHJcbj48L25nLWNvbnRhaW5lcj5cclxuPC9kaXY+XHJcbjxic3UtcmVzcG9uc2l2ZS10b29sYmFyLXJlbmRlcmVyXHJcbiAgKm5nSWY9XCJidXR0b25zQ2FsY3VsYXRlZFwiXHJcbiAgW2J1dHRvbnNdPVwiYnV0dG9uc0NhbGN1bGF0ZWRcIlxyXG4gIChidG5DbGljayk9XCJvbkJ1dHRvbkNsaWNrKCRldmVudClcIlxyXG4gIFtyZW5kZXJUb29sYmFyXT1cInJlbmRlclRvb2xiYXJcIlxyXG4+PC9ic3UtcmVzcG9uc2l2ZS10b29sYmFyLXJlbmRlcmVyPlxyXG5cclxuPG5nLXRlbXBsYXRlICNyZW5kZXJUb29sYmFyIGxldC1idG5MaXN0PlxyXG4gIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGJ0biBvZiBidG5MaXN0XCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYnRuID09PSAnLScgfHwgYnRuLnRleHQgPT09ICctJzsgZWxzZSBidG5Db21tYW5kXCI+XHJcbiAgICAgIDxzcGFuICNidG5SZWYgY2xhc3M9XCJ0b29sYmFyLWJ0biB0b29sYmFyLXZzZXBlcmF0b3JcIj48L3NwYW4+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDxuZy10ZW1wbGF0ZSAjYnRuQ29tbWFuZD5cclxuICAgICAgPHVpNS1idXR0b25cclxuICAgICAgICAjYnRuUmVmXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uQnV0dG9uQ2xpY2soYnRuKVwiXHJcbiAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiYnRuLmVuYWJsZSA9PT0gZmFsc2UgPyB0cnVlIDogbnVsbFwiXHJcbiAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiYnRuLnJlYWRvbmx5ID09PSB0cnVlID8gdHJ1ZSA6IG51bGxcIlxyXG4gICAgICAgIGNsYXNzPVwidG9vbGJhci1idG5cIlxyXG4gICAgICAgIFthdHRyLmRlc2lnbl09XCJidG4uZW1waGFzaXplZCA/ICdFbXBoYXNpemVkJyA6ICdUcmFuc3BhcmVudCdcIlxyXG4gICAgICAgIFthdHRyLmljb25dPVwiYnRuLm5ld0ljb24gPyBidG4ubmV3SWNvbiA6IG51bGxcIlxyXG4gICAgICAgID57eyBidG4udGV4dCB9fVxyXG4gICAgICAgIDxpbWcgKm5nSWY9XCIhYnRuLm5ld0ljb24gJiYgIWJ0bi5pc0J1aWx0aW5cIiB3aWR0aD1cIjE2XCIgW3NyY109XCJidG4uaWNvblwiXHJcbiAgICAgICAgLz48L3VpNS1idXR0b24+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L25nLXRlbXBsYXRlPiAtLT5cclxuXHJcbjxmZC10b29sYmFyIFtzaG91bGRPdmVyZmxvd109XCJ0cnVlXCIgW3N0eWxlLmRpcmVjdGlvbl09XCJkaXJWYWx1ZSQgfCBhc3luY1wiPlxyXG4gICAgQGZvciAoYnRuIG9mIGJ0bnM7IHRyYWNrIGJ0bikgeyBAaWYgKGJ0biA9PT0gJy0nIHx8IGJ0bi50ZXh0ID09PSAnLScpIHtcclxuICAgIDxmZC10b29sYmFyLXNlcGFyYXRvcj48L2ZkLXRvb2xiYXItc2VwYXJhdG9yPlxyXG4gICAgfSBAZWxzZSB7XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgICAgZmQtdG9vbGJhci1pdGVtXHJcbiAgICAgICAgZmQtYnV0dG9uXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uQnV0dG9uQ2xpY2soYnRuKVwiXHJcbiAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiYnRuLmVuYWJsZSA9PT0gZmFsc2UgPyB0cnVlIDogbnVsbFwiXHJcbiAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiYnRuLnJlYWRvbmx5ID09PSB0cnVlID8gdHJ1ZSA6IG51bGxcIlxyXG4gICAgICAgIFtmZFR5cGVdPVwiYnRuLmVtcGhhc2l6ZWQgPyAnZW1waGFzaXplZCcgOiAndHJhbnNwYXJlbnQnXCJcclxuICAgICAgICBbbGFiZWxdPVwiYnRuLnRleHRcIlxyXG4gICAgICAgIFtnbHlwaF09XCJidG4ubmV3SWNvbiA/IGJ0bi5uZXdJY29uIDogbnVsbFwiXHJcbiAgICA+XHJcbiAgICAgICAgQGlmICghYnRuLm5ld0ljb24gJiYgIWJ0bi5pc0J1aWx0aW4pIHtcclxuICAgICAgICA8aW1nIHdpZHRoPVwiMTZcIiBbc3JjXT1cImJ0bi5pY29uXCIgLz5cclxuICAgICAgICB9XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIH1cclxuICAgIDxuZy10ZW1wbGF0ZSAjYnRuQ29tbWFuZD5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIGZkLXRvb2xiYXItaXRlbVxyXG4gICAgICAgICAgICBmZC1idXR0b25cclxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uQnV0dG9uQ2xpY2soYnRuKVwiXHJcbiAgICAgICAgICAgIFthdHRyLmRpc2FibGVkXT1cImJ0bi5lbmFibGUgPT09IGZhbHNlID8gdHJ1ZSA6IG51bGxcIlxyXG4gICAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJidG4ucmVhZG9ubHkgPT09IHRydWUgPyB0cnVlIDogbnVsbFwiXHJcbiAgICAgICAgICAgIFtmZFR5cGVdPVwiYnRuLmVtcGhhc2l6ZWQgPyAnZW1waGFzaXplZCcgOiAndHJhbnNwYXJlbnQnXCJcclxuICAgICAgICAgICAgW2xhYmVsXT1cImJ0bi50ZXh0XCJcclxuICAgICAgICAgICAgW2dseXBoXT1cImJ0bi5uZXdJY29uID8gYnRuLm5ld0ljb24gOiBudWxsXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIEBpZiAoIWJ0bi5uZXdJY29uICYmICFidG4uaXNCdWlsdGluKSB7XHJcbiAgICAgICAgICAgIDxpbWcgd2lkdGg9XCIxNlwiIFtzcmNdPVwiYnRuLmljb25cIiAvPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgfVxyXG48L2ZkLXRvb2xiYXI+XHJcbiJdfQ==