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,379 @@
1
+ import { ChangeDetectionStrategy, Component, HostListener, Input, TemplateRef, ViewChild } from '@angular/core';
2
+ import { BehaviorSubject, Subject } from 'rxjs';
3
+ import { debounceTime, map, takeUntil, tap } from 'rxjs/operators';
4
+ import { MultiInputComponent } from '@fundamental-ngx/core';
5
+ import { BarsaApi } from 'barsa-novin-ray-core';
6
+ import { DeviceInfoFieldBaseComponent } from '../device-info-field-base';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@angular/forms";
9
+ import * as i2 from "barsa-novin-ray-core";
10
+ import * as i3 from "@fundamental-ngx/core/bar";
11
+ import * as i4 from "@fundamental-ngx/core/button";
12
+ import * as i5 from "@fundamental-ngx/core/dialog";
13
+ import * as i6 from "@fundamental-ngx/cdk/utils";
14
+ import * as i7 from "@fundamental-ngx/core/title";
15
+ import * as i8 from "@fundamental-ngx/core/multi-input";
16
+ import * as i9 from "@fundamental-ngx/core/toolbar";
17
+ import * as i10 from "@fundamental-ngx/core/token";
18
+ import * as i11 from "../ui-ulv-main-ui/ui-ulv-main-ui.component";
19
+ import * as i12 from "../fullscreen-dialog.directive";
20
+ import * as i13 from "@angular/common";
21
+ export class UiLinearListContainerWithButtonComponent extends DeviceInfoFieldBaseComponent {
22
+ constructor() {
23
+ super(...arguments);
24
+ this.mobile = false;
25
+ this.dropDownValuesSource = new BehaviorSubject([]);
26
+ this.dropDownValues$ = this.dropDownValuesSource.asObservable().pipe(map((moList) => {
27
+ const t = moList.filter((c) => this.value.find((d) => d.Id === c.Id) === undefined);
28
+ return t;
29
+ }), tap((moList) => (this.firstItem = {
30
+ $Caption: moList[0]?.$Caption,
31
+ Id: moList[0]?.Id,
32
+ Text: moList[0]?.$Caption,
33
+ Data: moList[0]
34
+ })), map((molist) => molist.map((c) => c.Id)));
35
+ this.report = null;
36
+ this.term = '';
37
+ this.termSource = new Subject();
38
+ this.rtl = BarsaApi.LoginFormData.IsRtl;
39
+ this.showUlvSource = new Subject();
40
+ this._setWidth = false;
41
+ this.displayFunc = (id) => {
42
+ const allItems = [...this.value, ...this.dropDownValuesSource.getValue()];
43
+ const existInValue = allItems.find((c) => c.Id === id);
44
+ if (existInValue) {
45
+ return existInValue.Text ?? existInValue.$Caption;
46
+ }
47
+ return '';
48
+ };
49
+ /* eslint-disable */
50
+ this.GetTextItemValue = () => this.term;
51
+ /* eslint-disable */
52
+ this.show = () => {
53
+ this._openUlv();
54
+ };
55
+ /* eslint-disable */
56
+ this.hide = () => {
57
+ this._changeDropDownOpenState(false);
58
+ };
59
+ /* eslint-disable */
60
+ this.hidden = () => {
61
+ return this.multiInputComponent && !this.multiInputComponent.open && !this.dialogOpen;
62
+ };
63
+ this.GetSelectionData = () => {
64
+ return this.multiInputComponent.selected;
65
+ /* eslint-disable */
66
+ };
67
+ }
68
+ set UlvUi(val) {
69
+ if (val) {
70
+ const moList = val.Setting.Data.MoDataList;
71
+ this.dropDownValuesSource.next(moList);
72
+ }
73
+ else {
74
+ const moList = [];
75
+ this.dropDownValuesSource.next(moList);
76
+ }
77
+ this._ulvUi = val;
78
+ }
79
+ onKeyEnter() {
80
+ if (this.term) {
81
+ if (!this.dropDownValuesSource.getValue().length) {
82
+ this.fireContextEvent('RequestCommand', this.context, 'New');
83
+ }
84
+ }
85
+ }
86
+ onKeyDown() {
87
+ if (!this.term && this.hidden()) {
88
+ this.context.fireEvent('RequestFilter2');
89
+ }
90
+ }
91
+ onKeyEsc() {
92
+ this._changeDropDownOpenState(false);
93
+ }
94
+ ngOnInit() {
95
+ this.showUlvSource
96
+ .asObservable()
97
+ .pipe(takeUntil(this._onDestroy$))
98
+ .subscribe(() => this._openUlv());
99
+ super.ngOnInit();
100
+ this.report = this.Setting.Report;
101
+ this.originalMoList = [...this.value];
102
+ this.termSource
103
+ .asObservable()
104
+ .pipe(takeUntil(this._onDestroy$), debounceTime(200), tap((term) => {
105
+ this.term = term;
106
+ if (!term) {
107
+ this.dropDownValuesSource.next([]);
108
+ }
109
+ else {
110
+ this.context.fireEvent('RequestFilter', term);
111
+ }
112
+ }))
113
+ .subscribe();
114
+ // this.multiInputComponent.selected = this.originalMoList;
115
+ this._setIdsOMoByValue();
116
+ // const oldHanlde = this.multiInputComponent._addOnButtonClicked;
117
+ this.multiInputComponent._addOnButtonClicked = () => {
118
+ this._handleAddonButtonClicked();
119
+ };
120
+ }
121
+ ngAfterViewInit() {
122
+ super.ngAfterViewInit();
123
+ this._portalService.windowResize$.pipe(takeUntil(this._onDestroy$)).subscribe((c) => {
124
+ this._resizeTokenizer('100%');
125
+ setTimeout(() => {
126
+ this._resizeTokenizer();
127
+ });
128
+ });
129
+ }
130
+ onVisibilityChange(e) {
131
+ if (e === 'Visible' && !this._setWidth) {
132
+ this._setWidth = true;
133
+ this._resizeTokenizer();
134
+ }
135
+ }
136
+ _resizeTokenizer(width = '') {
137
+ const elDom = this._el.nativeElement;
138
+ const x = elDom.querySelector('fd-tokenizer');
139
+ if (!width && x) {
140
+ const wx = x.getBoundingClientRect().width;
141
+ if (!wx) {
142
+ return;
143
+ }
144
+ width = `${wx}px`;
145
+ }
146
+ this._renderer2.setStyle(x, 'width', `${width}`);
147
+ }
148
+ valueFn(e) {
149
+ return e;
150
+ }
151
+ onSearchTermChange(term) {
152
+ this.termSource.next(term);
153
+ }
154
+ onOpenReport() {
155
+ this._triggerClicked = true;
156
+ if (this.report) {
157
+ this.termSource.next('');
158
+ }
159
+ this.context.fireEvent('TriggerClick', this.context);
160
+ }
161
+ onSelectedChange(arr) {
162
+ this._selectedChanged(arr);
163
+ }
164
+ onRemoveSelected(mo) {
165
+ this._removeFromSelected(mo);
166
+ this._ulvUi.viewerControl.DeSelectRecords([mo]);
167
+ // this._ulvUi.viewerControl.fireEvent('rowdeselect', this._ulvUi.viewerControl, -1, mo);
168
+ }
169
+ onDismiss() {
170
+ this._closeDialog();
171
+ }
172
+ onOk() {
173
+ // this._selectedChanged(this.dialogRef.data.selectedItems);
174
+ this._closeDialog();
175
+ }
176
+ onClear() {
177
+ this.dialogRef.data.ulvUi.viewerControl.ClearAllSelected();
178
+ this.dialogRef.data.selectedItems = [];
179
+ }
180
+ _handleAddonButtonClicked() {
181
+ if (this.parameters?.ExecuteAddonButton) {
182
+ this._executeCommand();
183
+ return;
184
+ }
185
+ this.onOpenReport();
186
+ }
187
+ _executeCommand() {
188
+ const { AddonButtonCommand } = this.parameters;
189
+ this.context.fireEvent('AddonButtonClicked', this.context, AddonButtonCommand);
190
+ }
191
+ _trackBySelectedFn(_index, item) {
192
+ return item.Id;
193
+ }
194
+ _setValue(value) {
195
+ this.originalMoList = [...value];
196
+ this._setIdsOMoByValue();
197
+ super._setValue(value);
198
+ }
199
+ _setIdsOMoByValue() {
200
+ this.idsOfMo = this.originalMoList.map((c) => c.Id);
201
+ }
202
+ _changeDropDownOpenState(val) {
203
+ if (this.multiInputComponent && this.multiInputComponent.open !== val) {
204
+ this.multiInputComponent.open = val;
205
+ }
206
+ }
207
+ _openUlv() {
208
+ if (this.report && !this.term && this._triggerClicked) {
209
+ if (this.dialogOpen || !this._ulvUi) {
210
+ return;
211
+ }
212
+ const view = this._ulvUi.Setting.View;
213
+ view.IsCheckList = true;
214
+ this.dialogOpen = true;
215
+ const deviceSize = this._portalService.deviceSize;
216
+ const largeScreen = deviceSize === 'l' || deviceSize === 'xl';
217
+ const dialogConfig = {
218
+ data: {
219
+ ulvUi: this._ulvUi,
220
+ title: this._bbbPipe.transform('Select'),
221
+ selectedItems: [...this.originalMoList]
222
+ },
223
+ escKeyCloseable: false,
224
+ dialogPanelClass: `ulv-selection-form-dialog ${deviceSize ? 'ulv-selection-form-dialog-mobile' : ''}`
225
+ };
226
+ if (largeScreen) {
227
+ dialogConfig.width = '60vw';
228
+ dialogConfig.height = '60vh';
229
+ dialogConfig.minWidth = '600';
230
+ dialogConfig.minHeight = '360';
231
+ }
232
+ else {
233
+ dialogConfig.mobile = true;
234
+ dialogConfig.fullScreen = true;
235
+ }
236
+ if (this._ulvUi?.Setting?.Extra?.DefaultCommandsAccess?.View) {
237
+ this._ulvUi.Setting.Extra.DefaultCommandsAccess.View = false;
238
+ }
239
+ const dataSetting = this._ulvUi.Setting.Data;
240
+ if (largeScreen && dataSetting) {
241
+ if (dataSetting.Paging?.HasPaging) {
242
+ dialogConfig.height = '100vh';
243
+ }
244
+ else {
245
+ dialogConfig.height = dataSetting.MoDataList.length > 10 ? '100vh' : '60vh';
246
+ }
247
+ }
248
+ const dialogRef = this._dialogService.open(this.dialogContainer, dialogConfig);
249
+ dialogRef.afterClosed.subscribe((value) => {
250
+ this._dialogClose(this.dialogRef.data.selectedItems);
251
+ });
252
+ if (!this._ulvUi.$RegisterEvent) {
253
+ this._ulvUi.$RegisterEvent = true;
254
+ this._ulvUi.viewerControl.on({
255
+ afterrender: () => {
256
+ this._ulvUi.viewerControl.readyToSelect = true;
257
+ this.dialogRef.data.selectedItems = [];
258
+ this._ulvUi.viewerControl.ClearAllSelected();
259
+ this._ulvUi.viewerControl.selectRecords(this.originalMoList);
260
+ this.dialogRef.data.selectedItems = [...this.originalMoList];
261
+ },
262
+ rowSelectAll: (context) => {
263
+ context.Setting.Data.MoDataList.forEach((mo) => {
264
+ this._addMoToSelected(mo);
265
+ });
266
+ },
267
+ rowDeselectAll: (context) => {
268
+ context.Setting.Data.MoDataList.forEach((mo) => {
269
+ this._removeFromSelected(mo);
270
+ });
271
+ },
272
+ rowselect: (sender, index, mo) => {
273
+ //if (this.originalMoList.length > 0) {
274
+ // قبل از رندر شدن این اتفاق می افتاد
275
+ this._addMoToSelected(mo);
276
+ //}
277
+ },
278
+ rowdeselect: (sender, index, mo) => {
279
+ this._removeFromSelected(mo);
280
+ }
281
+ });
282
+ }
283
+ this.dialogRef = dialogRef;
284
+ }
285
+ else {
286
+ this._changeDropDownOpenState(true);
287
+ }
288
+ }
289
+ _closeDialog() {
290
+ this._triggerClicked = false;
291
+ this.dialogOpen = false;
292
+ this.dialogRef.close();
293
+ }
294
+ _addMoToSelected(mo) {
295
+ if (!mo) {
296
+ return;
297
+ }
298
+ const selected = this.dialogRef.data.selectedItems;
299
+ if (!selected.find((c) => c.Id === mo.Id)) {
300
+ selected.push({
301
+ Id: mo.Id,
302
+ Text: mo.$Caption,
303
+ Data: mo,
304
+ $Caption: mo.$Caption
305
+ });
306
+ }
307
+ }
308
+ _removeFromSelected(mo) {
309
+ const selected = this.dialogRef.data.selectedItems.filter((c) => c.Id !== mo.Id);
310
+ this.dialogRef.data.selectedItems = selected;
311
+ }
312
+ _dialogClose(moList) {
313
+ this.dropDownValuesSource.next(moList);
314
+ this._selectedChanged(moList.map((c) => c.Id));
315
+ }
316
+ _selectedChanged(arr) {
317
+ const deletedItems = [];
318
+ const addedItems = [];
319
+ const value = [...this.value];
320
+ value.forEach((mo) => {
321
+ const selectedMo = arr.find((moId) => moId === mo.Id);
322
+ if (!selectedMo) {
323
+ mo.Data.$IsChecked = false;
324
+ deletedItems.push(mo.Data);
325
+ }
326
+ });
327
+ arr.forEach((moId) => {
328
+ const selectedMo = this.originalMoList.find((c) => c.Id === moId);
329
+ if (!selectedMo) {
330
+ const mo2 = this.dropDownValuesSource.getValue().find((c) => c.Id === moId);
331
+ if (mo2) {
332
+ mo2.$IsChecked = true;
333
+ addedItems.push(mo2);
334
+ }
335
+ }
336
+ });
337
+ if (deletedItems.length > 0) {
338
+ this.fireContextEvent('RequestCommand', this.context, 'Delete', deletedItems);
339
+ }
340
+ if (addedItems.length > 0) {
341
+ this.fireContextEvent('RequestCommand', this.context, 'Add', addedItems);
342
+ // this._ulvUi.viewerControl.fireEvent('rowclick');
343
+ }
344
+ }
345
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UiLinearListContainerWithButtonComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
346
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: UiLinearListContainerWithButtonComponent, selector: "bsu-ui-linear-list-container-with-button", inputs: { UlvUi: "UlvUi", GetTextItemValue: "GetTextItemValue", show: "show", hide: "hide", hidden: "hidden", GetSelectionData: "GetSelectionData" }, host: { listeners: { "keydown.enter": "onKeyEnter($event)", "keydown.arrowdown": "onKeyDown($event)", "keydown.esc": "onKeyEsc($event)" } }, viewQueries: [{ propertyName: "multiInputComponent", first: true, predicate: MultiInputComponent, descendants: true, static: true }, { propertyName: "dialogContainer", first: true, predicate: ["container"], descendants: true, read: TemplateRef }], usesInheritance: true, ngImport: i0, template: "<fd-multi-input\r\n [inputId]=\"id\"\r\n intersectionObserver\r\n [intersectionThreshold]=\"0.1\"\r\n (visibilityChange)=\"onVisibilityChange($event)\"\r\n [class.control-readonly]=\"(readonly$ | async) === true\"\r\n [dropdownValues]=\"(dropDownValues$ | async)!!\"\r\n [placeholder]=\"Setting.ControlFieldCaptionTranslated | bbbTranslate\"\r\n [displayFn]=\"displayFunc\"\r\n [showAllButton]=\"false\"\r\n [displayAddonButton]=\"(disableOrReadonly$ | async) !== true\"\r\n [allowNewTokens]=\"false\"\r\n [includes]=\"true\"\r\n [(ngModel)]=\"idsOfMo\"\r\n [disabled]=\"(disable$ | async) === true\"\r\n [valueFn]=\"valueFn\"\r\n (searchTermChange)=\"onSearchTermChange($event)\"\r\n (selectedChange)=\"onSelectedChange($event)\"\r\n (addOnButtonClicked)=\"_handleAddonButtonClicked()\"\r\n></fd-multi-input>\r\n\r\n<!-- <button\r\n*ngIf=\"report\"\r\nfd-button\r\n[attr.rtl]=\"rtl\"\r\n[aria-label]=\"'Advanced' | bbbTranslate\"\r\nglyph=\"value-help\"\r\n[disabled]=\"(disableOrReadonly$ | async)!!\"\r\n(click)=\"onOpenReport()\"\r\n></button> -->\r\n\r\n<ng-template let-dialog let-dialogConfig=\"dialogConfig\" #container>\r\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\" #dialogTpl>\r\n <fd-dialog-header>\r\n <ng-template fdkTemplate=\"header\">\r\n <div fd-bar-left>\r\n <fd-bar-element>\r\n <h1 id=\"fd-dialog-header-3\" fd-title>{{ dialog.data.title }}</h1>\r\n </fd-bar-element>\r\n </div>\r\n <div fd-bar-right>\r\n @if (dialogConfig.height !== '100vh') {\r\n <fd-button-bar\r\n ariaLabel=\"fullscreen\"\r\n [glyph]=\"dialog.data.fullscreen ? 'exitfullscreen' : 'resize'\"\r\n fullscreenDialog\r\n [fullscreen]=\"dialog.data.fullscreen\"\r\n (fullscreenChanged)=\"dialog.data.fullscreen = $event\"\r\n [dialog]=\"dialog\"\r\n [dialogComponent]=\"dialogTpl\"\r\n ></fd-button-bar>\r\n }\r\n <fd-button-bar ariaLabel=\"close\" glyph=\"decline\" (click)=\"onDismiss()\"></fd-button-bar>\r\n </div>\r\n </ng-template>\r\n <!-- <h3 fd-title>{{ dialog.data.title }}</h3>\r\n <button fd-dialog-close-button></button> -->\r\n </fd-dialog-header>\r\n <fd-dialog-body>\r\n @if (dialog.data.ulvUi; as ulvUi) {\r\n <bsu-ui-ulv-main-ui [context]=\"ulvUi\" class=\"linear-list-selection\"></bsu-ui-ulv-main-ui>\r\n\r\n }\r\n <div\r\n class=\"ulv-selection-form-dialog__row ulv-selection-form-dialog__selection-row\"\r\n [aria-label]=\"'SelectedItemsAndConditions' | bbbTranslate\"\r\n >\r\n <h5 fd-title class=\"selected-and-condition-title\">\r\n <ng-container>\r\n <ng-container>{{ 'SelectedItemsAndConditions' | bbbTranslate }} </ng-container>\r\n ({{ dialog.data.selectedItems?.length || 0 }})\r\n </ng-container>\r\n </h5>\r\n <div class=\"ulv-selection-form-dialog__tokens-wrapper\">\r\n <div class=\"ulv-selection-form-dialog__tokens\">\r\n @if (dialog.data.selectedItems) {\r\n <fd-toolbar>\r\n <!-- Selected items -->\r\n @for ( item of dialog.data.selectedItems; track _trackBySelectedFn(selectedIndex, item); let\r\n selectedIndex = $index) {\r\n <fd-token\r\n fd-toolbar-item\r\n fdOverflowPriority=\"high\"\r\n class=\"fdp-value-help-dialog__selection-token\"\r\n (onCloseClick)=\"onRemoveSelected(item)\"\r\n >{{ item.Text }}\r\n </fd-token>\r\n }\r\n </fd-toolbar>\r\n }\r\n </div>\r\n <button\r\n class=\"ulv-selection-form-dialog__tokens-clear\"\r\n fd-button\r\n fdType=\"transparent\"\r\n glyph=\"decline\"\r\n [aria-label]=\"'Clear' | bbbTranslate\"\r\n (click)=\"onClear()\"\r\n ></button>\r\n </div>\r\n </div>\r\n </fd-dialog-body>\r\n\r\n <fd-dialog-footer>\r\n <ng-template fdkTemplate=\"footer\">\r\n <div class=\"fd-bar__right\">\r\n <button\r\n fd-button\r\n data-succes\r\n [label]=\"'OK' | bbbTranslate\"\r\n fdType=\"emphasized\"\r\n (click)=\"onOk()\"\r\n ></button>\r\n <button\r\n fd-button\r\n data-dismiss-dialog\r\n fd-dialog-decisive-button\r\n [label]=\"'Cancel' | bbbTranslate\"\r\n fdType=\"transparent\"\r\n (click)=\"onDismiss()\"\r\n ></button>\r\n </div>\r\n </ng-template>\r\n </fd-dialog-footer>\r\n </fd-dialog>\r\n</ng-template>\r\n", styles: [":host{display:flex;align-items:center}:host ::ng-deep fd-multi-input .fd-input-group{cursor:default}fd-multi-input{flex-grow:1}button[rtl=true]{margin-right:5px}button[rtl=false]{margin-left:5px}::ng-deep .fd-toolbar{display:flex;flex-wrap:wrap;row-gap:5px}\n"], dependencies: [{ kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.IntersectionObserverDirective, selector: "[intersectionObserver]", inputs: ["intersectionDebounce", "intersectionRootMargin", "intersectionRoot", "intersectionThreshold"], outputs: ["visibilityChange"] }, { kind: "directive", type: i3.BarLeftDirective, selector: "[fd-bar-left]" }, { kind: "directive", type: i3.BarRightDirective, selector: "[fd-bar-right]" }, { kind: "directive", type: i3.BarElementDirective, selector: "fd-bar-element", inputs: ["fullWidth"] }, { kind: "component", type: i3.ButtonBarComponent, selector: "fd-button-bar", inputs: ["fullWidth", "fdType", "title", "ariaLabelledby", "id"] }, { kind: "component", type: i4.ButtonComponent, selector: "button[fd-button], a[fd-button], span[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i5.DialogComponent, selector: "fd-dialog", inputs: ["class", "dialogRef", "dialogConfig"] }, { kind: "component", type: i5.DialogBodyComponent, selector: "fd-dialog-body", inputs: ["disablePaddings"] }, { kind: "component", type: i5.DialogFooterComponent, selector: "fd-dialog-footer" }, { kind: "component", type: i5.DialogHeaderComponent, selector: "fd-dialog-header" }, { kind: "directive", type: i6.TemplateDirective, selector: "[fdkTemplate]", inputs: ["fdkTemplate"] }, { kind: "component", type: i7.TitleComponent, selector: "[fd-title], [fdTitle]", inputs: ["headerSize", "wrap"], exportAs: ["fd-title"] }, { kind: "component", type: i8.MultiInputComponent, selector: "fd-multi-input", inputs: ["placeholder", "disabled", "required", "compactCollapse", "maxHeight", "glyph", "glyphFont", "dropdownValues", "openDropdownOnAddOnClicked", "addonIconTitle", "searchTerm", "inputId", "highlight", "selected", "class", "filterFn", "valueFn", "displayFn", "newTokenParseFn", "optionItemIdentifier", "newTokenValidateFn", "ariaLabel", "ariaLabelledBy", "fillControlMode", "state", "buttonFocusable", "allowNewTokens", "mobile", "showAllButton", "bodyMaxWidth", "mobileConfig", "includes", "itemTemplate", "title", "byline", "autoComplete", "open", "displayAddonButton", "addOnButtonAriaLabel", "tokenHiddenId"], outputs: ["searchTermChange", "selectedChange", "openChange", "addOnButtonClicked", "allItemsSelectedChange"] }, { kind: "component", type: i9.ToolbarComponent, selector: "fd-toolbar", inputs: ["titleId", "class", "shouldOverflow", "fdType", "title", "active", "clearBorder", "forceOverflow", "tabindex", "headingLevel", "ariaLabel", "ariaLabelledBy"] }, { kind: "directive", type: i9.ToolbarItemDirective, selector: "[fd-toolbar-item], [fdOverflowGroup], [fdOverflowPriority]", inputs: ["fdOverflowPriority", "fdOverflowGroup"] }, { kind: "component", type: i10.TokenComponent, selector: "fd-token", inputs: ["disabled", "selected", "readOnly"], outputs: ["onCloseClick", "onRemove", "onTokenClick", "onTokenKeydown", "elementFocused"] }, { kind: "component", type: i11.UiUlvMainUiComponent, selector: "bsu-ui-ulv-main-ui", inputs: ["context", "isReportPage", "inDialog", "isMultiSelect", "layoutInfo", "fullscreen"] }, { kind: "directive", type: i12.FullscreenDialogDirective, selector: "[fullscreenDialog]", inputs: ["dialog", "dialogComponent", "fullscreen"], outputs: ["fullscreenChanged"] }, { kind: "pipe", type: i13.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
347
+ }
348
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UiLinearListContainerWithButtonComponent, decorators: [{
349
+ type: Component,
350
+ args: [{ selector: 'bsu-ui-linear-list-container-with-button', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<fd-multi-input\r\n [inputId]=\"id\"\r\n intersectionObserver\r\n [intersectionThreshold]=\"0.1\"\r\n (visibilityChange)=\"onVisibilityChange($event)\"\r\n [class.control-readonly]=\"(readonly$ | async) === true\"\r\n [dropdownValues]=\"(dropDownValues$ | async)!!\"\r\n [placeholder]=\"Setting.ControlFieldCaptionTranslated | bbbTranslate\"\r\n [displayFn]=\"displayFunc\"\r\n [showAllButton]=\"false\"\r\n [displayAddonButton]=\"(disableOrReadonly$ | async) !== true\"\r\n [allowNewTokens]=\"false\"\r\n [includes]=\"true\"\r\n [(ngModel)]=\"idsOfMo\"\r\n [disabled]=\"(disable$ | async) === true\"\r\n [valueFn]=\"valueFn\"\r\n (searchTermChange)=\"onSearchTermChange($event)\"\r\n (selectedChange)=\"onSelectedChange($event)\"\r\n (addOnButtonClicked)=\"_handleAddonButtonClicked()\"\r\n></fd-multi-input>\r\n\r\n<!-- <button\r\n*ngIf=\"report\"\r\nfd-button\r\n[attr.rtl]=\"rtl\"\r\n[aria-label]=\"'Advanced' | bbbTranslate\"\r\nglyph=\"value-help\"\r\n[disabled]=\"(disableOrReadonly$ | async)!!\"\r\n(click)=\"onOpenReport()\"\r\n></button> -->\r\n\r\n<ng-template let-dialog let-dialogConfig=\"dialogConfig\" #container>\r\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\" #dialogTpl>\r\n <fd-dialog-header>\r\n <ng-template fdkTemplate=\"header\">\r\n <div fd-bar-left>\r\n <fd-bar-element>\r\n <h1 id=\"fd-dialog-header-3\" fd-title>{{ dialog.data.title }}</h1>\r\n </fd-bar-element>\r\n </div>\r\n <div fd-bar-right>\r\n @if (dialogConfig.height !== '100vh') {\r\n <fd-button-bar\r\n ariaLabel=\"fullscreen\"\r\n [glyph]=\"dialog.data.fullscreen ? 'exitfullscreen' : 'resize'\"\r\n fullscreenDialog\r\n [fullscreen]=\"dialog.data.fullscreen\"\r\n (fullscreenChanged)=\"dialog.data.fullscreen = $event\"\r\n [dialog]=\"dialog\"\r\n [dialogComponent]=\"dialogTpl\"\r\n ></fd-button-bar>\r\n }\r\n <fd-button-bar ariaLabel=\"close\" glyph=\"decline\" (click)=\"onDismiss()\"></fd-button-bar>\r\n </div>\r\n </ng-template>\r\n <!-- <h3 fd-title>{{ dialog.data.title }}</h3>\r\n <button fd-dialog-close-button></button> -->\r\n </fd-dialog-header>\r\n <fd-dialog-body>\r\n @if (dialog.data.ulvUi; as ulvUi) {\r\n <bsu-ui-ulv-main-ui [context]=\"ulvUi\" class=\"linear-list-selection\"></bsu-ui-ulv-main-ui>\r\n\r\n }\r\n <div\r\n class=\"ulv-selection-form-dialog__row ulv-selection-form-dialog__selection-row\"\r\n [aria-label]=\"'SelectedItemsAndConditions' | bbbTranslate\"\r\n >\r\n <h5 fd-title class=\"selected-and-condition-title\">\r\n <ng-container>\r\n <ng-container>{{ 'SelectedItemsAndConditions' | bbbTranslate }} </ng-container>\r\n ({{ dialog.data.selectedItems?.length || 0 }})\r\n </ng-container>\r\n </h5>\r\n <div class=\"ulv-selection-form-dialog__tokens-wrapper\">\r\n <div class=\"ulv-selection-form-dialog__tokens\">\r\n @if (dialog.data.selectedItems) {\r\n <fd-toolbar>\r\n <!-- Selected items -->\r\n @for ( item of dialog.data.selectedItems; track _trackBySelectedFn(selectedIndex, item); let\r\n selectedIndex = $index) {\r\n <fd-token\r\n fd-toolbar-item\r\n fdOverflowPriority=\"high\"\r\n class=\"fdp-value-help-dialog__selection-token\"\r\n (onCloseClick)=\"onRemoveSelected(item)\"\r\n >{{ item.Text }}\r\n </fd-token>\r\n }\r\n </fd-toolbar>\r\n }\r\n </div>\r\n <button\r\n class=\"ulv-selection-form-dialog__tokens-clear\"\r\n fd-button\r\n fdType=\"transparent\"\r\n glyph=\"decline\"\r\n [aria-label]=\"'Clear' | bbbTranslate\"\r\n (click)=\"onClear()\"\r\n ></button>\r\n </div>\r\n </div>\r\n </fd-dialog-body>\r\n\r\n <fd-dialog-footer>\r\n <ng-template fdkTemplate=\"footer\">\r\n <div class=\"fd-bar__right\">\r\n <button\r\n fd-button\r\n data-succes\r\n [label]=\"'OK' | bbbTranslate\"\r\n fdType=\"emphasized\"\r\n (click)=\"onOk()\"\r\n ></button>\r\n <button\r\n fd-button\r\n data-dismiss-dialog\r\n fd-dialog-decisive-button\r\n [label]=\"'Cancel' | bbbTranslate\"\r\n fdType=\"transparent\"\r\n (click)=\"onDismiss()\"\r\n ></button>\r\n </div>\r\n </ng-template>\r\n </fd-dialog-footer>\r\n </fd-dialog>\r\n</ng-template>\r\n", styles: [":host{display:flex;align-items:center}:host ::ng-deep fd-multi-input .fd-input-group{cursor:default}fd-multi-input{flex-grow:1}button[rtl=true]{margin-right:5px}button[rtl=false]{margin-left:5px}::ng-deep .fd-toolbar{display:flex;flex-wrap:wrap;row-gap:5px}\n"] }]
351
+ }], propDecorators: { multiInputComponent: [{
352
+ type: ViewChild,
353
+ args: [MultiInputComponent, { static: true }]
354
+ }], dialogContainer: [{
355
+ type: ViewChild,
356
+ args: ['container', { read: TemplateRef }]
357
+ }], UlvUi: [{
358
+ type: Input
359
+ }], onKeyEnter: [{
360
+ type: HostListener,
361
+ args: ['keydown.enter', ['$event']]
362
+ }], onKeyDown: [{
363
+ type: HostListener,
364
+ args: ['keydown.arrowdown', ['$event']]
365
+ }], onKeyEsc: [{
366
+ type: HostListener,
367
+ args: ['keydown.esc', ['$event']]
368
+ }], GetTextItemValue: [{
369
+ type: Input
370
+ }], show: [{
371
+ type: Input
372
+ }], hide: [{
373
+ type: Input
374
+ }], hidden: [{
375
+ type: Input
376
+ }], GetSelectionData: [{
377
+ type: Input
378
+ }] } });
379
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktbGluZWFyLWxpc3QtY29udGFpbmVyLXdpdGgtYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLXNhcC11aS9zcmMvbGliL3VpLWxpbmVhci1saXN0LWNvbnRhaW5lci13aXRoLWJ1dHRvbi91aS1saW5lYXItbGlzdC1jb250YWluZXItd2l0aC1idXR0b24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvdWktbGluZWFyLWxpc3QtY29udGFpbmVyLXdpdGgtYnV0dG9uL3VpLWxpbmVhci1saXN0LWNvbnRhaW5lci13aXRoLWJ1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4SCxPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkUsT0FBTyxFQUFhLG1CQUFtQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdkUsT0FBTyxFQUFFLFFBQVEsRUFBb0MsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0FBZXpFLE1BQU0sT0FBTyx3Q0FBeUMsU0FBUSw0QkFBNEI7SUFQMUY7O1FBc0JJLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFDZix5QkFBb0IsR0FBRyxJQUFJLGVBQWUsQ0FBd0IsRUFBRSxDQUFDLENBQUM7UUFDdEUsb0JBQWUsR0FBRyxJQUFJLENBQUMs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O2dCQUdHLGdCQUFnQjtzQkFBeEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uSW5pdCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBtYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBEaWFsb2dSZWYsIE11bHRpSW5wdXRDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUnO1xyXG5pbXBvcnQgeyBCYXJzYUFwaSwgTWV0YW9iamVjdERhdGFNb2RlbCwgUmVwb3J0TW9kZWwgfSBmcm9tICdiYXJzYS1ub3Zpbi1yYXktY29yZSc7XHJcbmltcG9ydCB7IERldmljZUluZm9GaWVsZEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9kZXZpY2UtaW5mby1maWVsZC1iYXNlJztcclxuXHJcbmludGVyZmFjZSBMaW5lYXJJdGVtTW8gZXh0ZW5kcyBNZXRhb2JqZWN0RGF0YU1vZGVsIHtcclxuICAgIERhdGE6IE1ldGFvYmplY3REYXRhTW9kZWw7XHJcbiAgICBJZDogc3RyaW5nO1xyXG4gICAgVGV4dDogc3RyaW5nO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnYnN1LXVpLWxpbmVhci1saXN0LWNvbnRhaW5lci13aXRoLWJ1dHRvbicsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vdWktbGluZWFyLWxpc3QtY29udGFpbmVyLXdpdGgtYnV0dG9uLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL3VpLWxpbmVhci1saXN0LWNvbnRhaW5lci13aXRoLWJ1dHRvbi5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgICBzdGFuZGFsb25lOiBmYWxzZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVWlMaW5lYXJMaXN0Q29udGFpbmVyV2l0aEJ1dHRvbkNvbXBvbmVudCBleHRlbmRzIERldmljZUluZm9GaWVsZEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgQFZpZXdDaGlsZChNdWx0aUlucHV0Q29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gICAgbXVsdGlJbnB1dENvbXBvbmVudDogTXVsdGlJbnB1dENvbXBvbmVudDtcclxuICAgIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcclxuICAgIGRpYWxvZ0NvbnRhaW5lcjogVGVtcGxhdGVSZWY8YW55PjtcclxuICAgIEBJbnB1dCgpIHNldCBVbHZVaSh2YWw6IHsgU2V0dGluZzogUmVwb3J0TW9kZWwgfSkge1xyXG4gICAgICAgIGlmICh2YWwpIHtcclxuICAgICAgICAgICAgY29uc3QgbW9MaXN0ID0gdmFsLlNldHRpbmcuRGF0YS5Nb0RhdGFMaXN0O1xyXG4gICAgICAgICAgICB0aGlzLmRyb3BEb3duVmFsdWVzU291cmNlLm5leHQobW9MaXN0KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBtb0xpc3QgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5kcm9wRG93blZhbHVlc1NvdXJjZS5uZXh0KG1vTGlzdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3VsdlVpID0gdmFsO1xyXG4gICAgfVxyXG4gICAgbW9iaWxlID0gZmFsc2U7XHJcbiAgICBkcm9wRG93blZhbHVlc1NvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWV0YW9iamVjdERhdGFNb2RlbFtdPihbXSk7XHJcbiAgICBkcm9wRG93blZhbHVlcyQgPSB0aGlzLmRyb3BEb3duVmFsdWVzU291cmNlLmFzT2JzZXJ2YWJsZSgpLnBpcGUoXHJcbiAgICAgICAgbWFwKChtb0xpc3QpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgdCA9IG1vTGlzdC5maWx0ZXIoKGMpID0+IHRoaXMudmFsdWUuZmluZCgoZCkgPT4gZC5JZCA9PT0gYy5JZCkgPT09IHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0O1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHRhcChcclxuICAgICAgICAgICAgKG1vTGlzdCkgPT5cclxuICAgICAgICAgICAgICAgICh0aGlzLmZpcnN0SXRlbSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAkQ2FwdGlvbjogbW9MaXN0WzBdPy4kQ2FwdGlvbixcclxuICAgICAgICAgICAgICAgICAgICBJZDogbW9MaXN0WzBdPy5JZCxcclxuICAgICAgICAgICAgICAgICAgICBUZXh0OiBtb0xpc3RbMF0/LiRDYXB0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgIERhdGE6IG1vTGlzdFswXVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICApLFxyXG4gICAgICAgIG1hcCgobW9saXN0KSA9PiBtb2xpc3QubWFwKChjKSA9PiBjLklkKSlcclxuICAgICk7XHJcbiAgICBzZWxlY3RlZDogYW55W107XHJcbiAgICByZXBvcnQgPSBudWxsO1xyXG4gICAgdGVybSA9ICcnO1xyXG4gICAgdGVybVNvdXJjZSA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuICAgIG9yaWdpbmFsTW9MaXN0OiBNZXRhb2JqZWN0RGF0YU1vZGVsW107XHJcbiAgICB2YWx1ZTogTWV0YW9iamVjdERhdGFNb2RlbFtdO1xyXG4gICAgcnRsID0gQmFyc2FBcGkuTG9naW5Gb3JtRGF0YS5Jc1J0bDtcclxuICAgIGRpYWxvZ1JlZjogRGlhbG9nUmVmO1xyXG4gICAgZGlhbG9nT3BlbjogYm9vbGVhbjtcclxuICAgIGZpcnN0SXRlbTogTGluZWFySXRlbU1vO1xyXG4gICAgaWRzT2ZNbzogc3RyaW5nW107XHJcbiAgICBwYXJhbWV0ZXJzOiBVaUxpbmVhckxpc3RDb250YWluZXJTZXR0aW5nO1xyXG4gICAgcHJpdmF0ZSBzaG93VWx2U291cmNlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAgIHByaXZhdGUgX3VsdlVpOiB7IFtrZXk6IHN0cmluZ106IGFueTsgU2V0dGluZzogUmVwb3J0TW9kZWwgfTtcclxuICAgIHByaXZhdGUgX3RyaWdnZXJDbGlja2VkOiBib29sZWFuO1xyXG4gICAgcHJpdmF0ZSBfc2V0V2lkdGggPSBmYWxzZTtcclxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uZW50ZXInLCBbJyRldmVudCddKVxyXG4gICAgb25LZXlFbnRlcigpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy50ZXJtKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5kcm9wRG93blZhbHVlc1NvdXJjZS5nZXRWYWx1ZSgpLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5maXJlQ29udGV4dEV2ZW50KCdSZXF1ZXN0Q29tbWFuZCcsIHRoaXMuY29udGV4dCwgJ05ldycpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5hcnJvd2Rvd24nLCBbJyRldmVudCddKVxyXG4gICAgb25LZXlEb3duKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy50ZXJtICYmIHRoaXMuaGlkZGVuKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpcmVFdmVudCgnUmVxdWVzdEZpbHRlcjInKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmVzYycsIFsnJGV2ZW50J10pXHJcbiAgICBvbktleUVzYygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9jaGFuZ2VEcm9wRG93bk9wZW5TdGF0ZShmYWxzZSk7XHJcbiAgICB9XHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNob3dVbHZTb3VyY2VcclxuICAgICAgICAgICAgLmFzT2JzZXJ2YWJsZSgpXHJcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9vcGVuVWx2KCkpO1xyXG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICAgICAgdGhpcy5yZXBvcnQgPSB0aGlzLlNldHRpbmcuUmVwb3J0O1xyXG4gICAgICAgIHRoaXMub3JpZ2luYWxNb0xpc3QgPSBbLi4udGhpcy52YWx1ZV07XHJcbiAgICAgICAgdGhpcy50ZXJtU291cmNlXHJcbiAgICAgICAgICAgIC5hc09ic2VydmFibGUoKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSxcclxuICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSgyMDApLFxyXG4gICAgICAgICAgICAgICAgdGFwKCh0ZXJtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXJtID0gdGVybTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRlcm0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kcm9wRG93blZhbHVlc1NvdXJjZS5uZXh0KFtdKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlyZUV2ZW50KCdSZXF1ZXN0RmlsdGVyJywgdGVybSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgLy8gdGhpcy5tdWx0aUlucHV0Q29tcG9uZW50LnNlbGVjdGVkID0gdGhpcy5vcmlnaW5hbE1vTGlzdDtcclxuICAgICAgICB0aGlzLl9zZXRJZHNPTW9CeVZhbHVlKCk7XHJcblxyXG4gICAgICAgIC8vIGNvbnN0IG9sZEhhbmxkZSA9IHRoaXMubXVsdGlJbnB1dENvbXBvbmVudC5fYWRkT25CdXR0b25DbGlja2VkO1xyXG4gICAgICAgIHRoaXMubXVsdGlJbnB1dENvbXBvbmVudC5fYWRkT25CdXR0b25DbGlja2VkID0gKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVBZGRvbkJ1dHRvbkNsaWNrZWQoKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcclxuICAgICAgICB0aGlzLl9wb3J0YWxTZXJ2aWNlLndpbmRvd1Jlc2l6ZSQucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpLnN1YnNjcmliZSgoYykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9yZXNpemVUb2tlbml6ZXIoJzEwMCUnKTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXNpemVUb2tlbml6ZXIoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBvblZpc2liaWxpdHlDaGFuZ2UoZSk6IHZvaWQge1xyXG4gICAgICAgIGlmIChlID09PSAnVmlzaWJsZScgJiYgIXRoaXMuX3NldFdpZHRoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3NldFdpZHRoID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5fcmVzaXplVG9rZW5pemVyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgX3Jlc2l6ZVRva2VuaXplcih3aWR0aDogc3RyaW5nID0gJycpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBlbERvbSA9IHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgY29uc3QgeCA9IGVsRG9tLnF1ZXJ5U2VsZWN0b3IoJ2ZkLXRva2VuaXplcicpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgIGlmICghd2lkdGggJiYgeCkge1xyXG4gICAgICAgICAgICBjb25zdCB3eCA9IHguZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XHJcbiAgICAgICAgICAgIGlmICghd3gpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB3aWR0aCA9IGAke3d4fXB4YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIyLnNldFN0eWxlKHgsICd3aWR0aCcsIGAke3dpZHRofWApO1xyXG4gICAgfVxyXG4gICAgdmFsdWVGbihlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBlO1xyXG4gICAgfVxyXG5cclxuICAgIG9uU2VhcmNoVGVybUNoYW5nZSh0ZXJtOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnRlcm1Tb3VyY2UubmV4dCh0ZXJtKTtcclxuICAgIH1cclxuICAgIG9uT3BlblJlcG9ydCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl90cmlnZ2VyQ2xpY2tlZCA9IHRydWU7XHJcbiAgICAgICAgaWYgKHRoaXMucmVwb3J0KSB7XHJcbiAgICAgICAgICAgIHRoaXMudGVybVNvdXJjZS5uZXh0KCcnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jb250ZXh0LmZpcmVFdmVudCgnVHJpZ2dlckNsaWNrJywgdGhpcy5jb250ZXh0KTtcclxuICAgIH1cclxuICAgIG9uU2VsZWN0ZWRDaGFuZ2UoYXJyOiBzdHJpbmdbXSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3NlbGVjdGVkQ2hhbmdlZChhcnIpO1xyXG4gICAgfVxyXG4gICAgb25SZW1vdmVTZWxlY3RlZChtbyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3JlbW92ZUZyb21TZWxlY3RlZChtbyk7XHJcbiAgICAgICAgdGhpcy5fdWx2VWkudmlld2VyQ29udHJvbC5EZVNlbGVjdFJlY29yZHMoW21vXSk7XHJcbiAgICAgICAgLy8gdGhpcy5fdWx2VWkudmlld2VyQ29udHJvbC5maXJlRXZlbnQoJ3Jvd2Rlc2VsZWN0JywgdGhpcy5fdWx2VWkudmlld2VyQ29udHJvbCwgLTEsIG1vKTtcclxuICAgIH1cclxuICAgIG9uRGlzbWlzcygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9jbG9zZURpYWxvZygpO1xyXG4gICAgfVxyXG4gICAgb25PaygpOiB2b2lkIHtcclxuICAgICAgICAvLyB0aGlzLl9zZWxlY3RlZENoYW5nZWQodGhpcy5kaWFsb2dSZWYuZGF0YS5zZWxlY3RlZEl0ZW1zKTtcclxuICAgICAgICB0aGlzLl9jbG9zZURpYWxvZygpO1xyXG4gICAgfVxyXG4gICAgb25DbGVhcigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5kYXRhLnVsdlVpLnZpZXdlckNvbnRyb2wuQ2xlYXJBbGxTZWxlY3RlZCgpO1xyXG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmRhdGEuc2VsZWN0ZWRJdGVtcyA9IFtdO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF9oYW5kbGVBZGRvbkJ1dHRvbkNsaWNrZWQoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMucGFyYW1ldGVycz8uRXhlY3V0ZUFkZG9uQnV0dG9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2V4ZWN1dGVDb21tYW5kKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5vbk9wZW5SZXBvcnQoKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfZXhlY3V0ZUNvbW1hbmQoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgeyBBZGRvbkJ1dHRvbkNvbW1hbmQgfSA9IHRoaXMucGFyYW1ldGVycztcclxuICAgICAgICB0aGlzLmNvbnRleHQuZmlyZUV2ZW50KCdBZGRvbkJ1dHRvbkNsaWNrZWQnLCB0aGlzLmNvbnRleHQsIEFkZG9uQnV0dG9uQ29tbWFuZCk7XHJcbiAgICB9XHJcbiAgICBfdHJhY2tCeVNlbGVjdGVkRm4oX2luZGV4OiBudW1iZXIsIGl0ZW06IE1ldGFvYmplY3REYXRhTW9kZWwpOiBudW1iZXIgfCBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBpdGVtLklkO1xyXG4gICAgfVxyXG4gICAgZGlzcGxheUZ1bmMgPSAoaWQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XHJcbiAgICAgICAgY29uc3QgYWxsSXRlbXMgPSBbLi4udGhpcy52YWx1ZSwgLi4udGhpcy5kcm9wRG93blZhbHVlc1NvdXJjZS5nZXRWYWx1ZSgpXTtcclxuICAgICAgICBjb25zdCBleGlzdEluVmFsdWUgPSBhbGxJdGVtcy5maW5kKChjKSA9PiBjLklkID09PSBpZCk7XHJcbiAgICAgICAgaWYgKGV4aXN0SW5WYWx1ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZXhpc3RJblZhbHVlLlRleHQgPz8gZXhpc3RJblZhbHVlLiRDYXB0aW9uO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICB9O1xyXG4gICAgX3NldFZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9yaWdpbmFsTW9MaXN0ID0gWy4uLnZhbHVlXTtcclxuICAgICAgICB0aGlzLl9zZXRJZHNPTW9CeVZhbHVlKCk7XHJcbiAgICAgICAgc3VwZXIuX3NldFZhbHVlKHZhbHVlKTtcclxuICAgIH1cclxuICAgIC8qIGVzbGludC1kaXNhYmxlICovXHJcbiAgICBASW5wdXQoKSBHZXRUZXh0SXRlbVZhbHVlID0gKCkgPT4gdGhpcy50ZXJtO1xyXG4gICAgLyogZXNsaW50LWRpc2FibGUgKi9cclxuICAgIEBJbnB1dCgpIHNob3cgPSAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fb3BlblVsdigpO1xyXG4gICAgfTtcclxuICAgIC8qIGVzbGludC1kaXNhYmxlICovXHJcbiAgICBASW5wdXQoKSBoaWRlID0gKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuX2NoYW5nZURyb3BEb3duT3BlblN0YXRlKGZhbHNlKTtcclxuICAgIH07XHJcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xyXG4gICAgQElucHV0KCkgaGlkZGVuID0gKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm11bHRpSW5wdXRDb21wb25lbnQgJiYgIXRoaXMubXVsdGlJbnB1dENvbXBvbmVudC5vcGVuICYmICF0aGlzLmRpYWxvZ09wZW47XHJcbiAgICB9O1xyXG4gICAgQElucHV0KCkgR2V0U2VsZWN0aW9uRGF0YSA9ICgpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tdWx0aUlucHV0Q29tcG9uZW50LnNlbGVjdGVkO1xyXG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlICovXHJcbiAgICB9O1xyXG4gICAgcHJpdmF0ZSBfc2V0SWRzT01vQnlWYWx1ZSgpIHtcclxuICAgICAgICB0aGlzLmlkc09mTW8gPSB0aGlzLm9yaWdpbmFsTW9MaXN0Lm1hcCgoYykgPT4gYy5JZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfY2hhbmdlRHJvcERvd25PcGVuU3RhdGUodmFsOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMubXVsdGlJbnB1dENvbXBvbmVudCAmJiB0aGlzLm11bHRpSW5wdXRDb21wb25lbnQub3BlbiAhPT0gdmFsKSB7XHJcbiAgICAgICAgICAgIHRoaXMubXVsdGlJbnB1dENvbXBvbmVudC5vcGVuID0gdmFsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgX29wZW5VbHYoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMucmVwb3J0ICYmICF0aGlzLnRlcm0gJiYgdGhpcy5fdHJpZ2dlckNsaWNrZWQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZGlhbG9nT3BlbiB8fCAhdGhpcy5fdWx2VWkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCB2aWV3OiBhbnkgPSB0aGlzLl91bHZVaS5TZXR0aW5nLlZpZXc7XHJcbiAgICAgICAgICAgIHZpZXcuSXNDaGVja0xpc3QgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmRpYWxvZ09wZW4gPSB0cnVlO1xyXG4gICAgICAgICAgICBjb25zdCBkZXZpY2VTaXplID0gdGhpcy5fcG9ydGFsU2VydmljZS5kZXZpY2VTaXplO1xyXG4gICAgICAgICAgICBjb25zdCBsYXJnZVNjcmVlbiA9IGRldmljZVNpemUgPT09ICdsJyB8fCBkZXZpY2VTaXplID09PSAneGwnO1xyXG4gICAgICAgICAgICBjb25zdCBkaWFsb2dDb25maWc6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7XHJcbiAgICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdWx2VWk6IHRoaXMuX3VsdlVpLFxyXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aGlzLl9iYmJQaXBlLnRyYW5zZm9ybSgnU2VsZWN0JyksXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRJdGVtczogWy4uLnRoaXMub3JpZ2luYWxNb0xpc3RdXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXNjS2V5Q2xvc2VhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGRpYWxvZ1BhbmVsQ2xhc3M6IGB1bHYtc2VsZWN0aW9uLWZvcm0tZGlhbG9nICR7ZGV2aWNlU2l6ZSA/ICd1bHYtc2VsZWN0aW9uLWZvcm0tZGlhbG9nLW1vYmlsZScgOiAnJ31gXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGlmIChsYXJnZVNjcmVlbikge1xyXG4gICAgICAgICAgICAgICAgZGlhbG9nQ29uZmlnLndpZHRoID0gJzYwdncnO1xyXG4gICAgICAgICAgICAgICAgZGlhbG9nQ29uZmlnLmhlaWdodCA9ICc2MHZoJztcclxuICAgICAgICAgICAgICAgIGRpYWxvZ0NvbmZpZy5taW5XaWR0aCA9ICc2MDAnO1xyXG4gICAgICAgICAgICAgICAgZGlhbG9nQ29uZmlnLm1pbkhlaWdodCA9ICczNjAnO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZGlhbG9nQ29uZmlnLm1vYmlsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBkaWFsb2dDb25maWcuZnVsbFNjcmVlbiA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMuX3VsdlVpPy5TZXR0aW5nPy5FeHRyYT8uRGVmYXVsdENvbW1hbmRzQWNjZXNzPy5WaWV3KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl91bHZVaS5TZXR0aW5nLkV4dHJhLkRlZmF1bHRDb21tYW5kc0FjY2Vzcy5WaWV3ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgZGF0YVNldHRpbmcgPSB0aGlzLl91bHZVaS5TZXR0aW5nLkRhdGE7XHJcbiAgICAgICAgICAgIGlmIChsYXJnZVNjcmVlbiAmJiBkYXRhU2V0dGluZykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGRhdGFTZXR0aW5nLlBhZ2luZz8uSGFzUGFnaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlhbG9nQ29uZmlnLmhlaWdodCA9ICcxMDB2aCc7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpYWxvZ0NvbmZpZy5oZWlnaHQgPSBkYXRhU2V0dGluZy5Nb0RhdGFMaXN0Lmxlbmd0aCA+IDEwID8gJzEwMHZoJyA6ICc2MHZoJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLl9kaWFsb2dTZXJ2aWNlLm9wZW4odGhpcy5kaWFsb2dDb250YWluZXIsIGRpYWxvZ0NvbmZpZyk7XHJcbiAgICAgICAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9kaWFsb2dDbG9zZSh0aGlzLmRpYWxvZ1JlZi5kYXRhLnNlbGVjdGVkSXRlbXMpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLl91bHZVaS4kUmVnaXN0ZXJFdmVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdWx2VWkuJFJlZ2lzdGVyRXZlbnQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdWx2VWkudmlld2VyQ29udHJvbC5vbih7XHJcbiAgICAgICAgICAgICAgICAgICAgYWZ0ZXJyZW5kZXI6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdWx2VWkudmlld2VyQ29udHJvbC5yZWFkeVRvU2VsZWN0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dSZWYuZGF0YS5zZWxlY3RlZEl0ZW1zID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VsdlVpLnZpZXdlckNvbnRyb2wuQ2xlYXJBbGxTZWxlY3RlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl91bHZVaS52aWV3ZXJDb250cm9sLnNlbGVjdFJlY29yZHModGhpcy5vcmlnaW5hbE1vTGlzdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nUmVmLmRhdGEuc2VsZWN0ZWRJdGVtcyA9IFsuLi50aGlzLm9yaWdpbmFsTW9MaXN0XTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHJvd1NlbGVjdEFsbDogKGNvbnRleHQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5TZXR0aW5nLkRhdGEuTW9EYXRhTGlzdC5mb3JFYWNoKChtbykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWRkTW9Ub1NlbGVjdGVkKG1vKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICByb3dEZXNlbGVjdEFsbDogKGNvbnRleHQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5TZXR0aW5nLkRhdGEuTW9EYXRhTGlzdC5mb3JFYWNoKChtbykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVtb3ZlRnJvbVNlbGVjdGVkKG1vKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICByb3dzZWxlY3Q6IChzZW5kZXIsIGluZGV4LCBtbykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL2lmICh0aGlzLm9yaWdpbmFsTW9MaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g2YLYqNmEINin2LIg2LHZhtiv2LEg2LTYr9mGINin24zZhiDYp9iq2YHYp9mCINmF24wg2KfZgdiq2KfYr1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZGRNb1RvU2VsZWN0ZWQobW8pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL31cclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHJvd2Rlc2VsZWN0OiAoc2VuZGVyLCBpbmRleCwgbW8pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVtb3ZlRnJvbVNlbGVjdGVkKG1vKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1JlZiA9IGRpYWxvZ1JlZjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEcm9wRG93bk9wZW5TdGF0ZSh0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIF9jbG9zZURpYWxvZygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl90cmlnZ2VyQ2xpY2tlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZGlhbG9nT3BlbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIF9hZGRNb1RvU2VsZWN0ZWQobW86IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGlmICghbW8pIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuZGlhbG9nUmVmLmRhdGEuc2VsZWN0ZWRJdGVtcztcclxuICAgICAgICBpZiAoIXNlbGVjdGVkLmZpbmQoKGMpID0+IGMuSWQgPT09IG1vLklkKSkge1xyXG4gICAgICAgICAgICBzZWxlY3RlZC5wdXNoKHtcclxuICAgICAgICAgICAgICAgIElkOiBtby5JZCxcclxuICAgICAgICAgICAgICAgIFRleHQ6IG1vLiRDYXB0aW9uLFxyXG4gICAgICAgICAgICAgICAgRGF0YTogbW8sXHJcbiAgICAgICAgICAgICAgICAkQ2FwdGlvbjogbW8uJENhcHRpb25cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBfcmVtb3ZlRnJvbVNlbGVjdGVkKG1vOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuZGlhbG9nUmVmLmRhdGEuc2VsZWN0ZWRJdGVtcy5maWx0ZXIoKGMpID0+IGMuSWQgIT09IG1vLklkKTtcclxuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5kYXRhLnNlbGVjdGVkSXRlbXMgPSBzZWxlY3RlZDtcclxuICAgIH1cclxuICAgIHByaXZhdGUgX2RpYWxvZ0Nsb3NlKG1vTGlzdDogTWV0YW9iamVjdERhdGFNb2RlbFtdKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5kcm9wRG93blZhbHVlc1NvdXJjZS5uZXh0KG1vTGlzdCk7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRDaGFuZ2VkKG1vTGlzdC5tYXAoKGMpID0+IGMuSWQpKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgX3NlbGVjdGVkQ2hhbmdlZChhcnI6IHN0cmluZ1tdKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZGVsZXRlZEl0ZW1zOiBNZXRhb2JqZWN0RGF0YU1vZGVsW10gPSBbXTtcclxuICAgICAgICBjb25zdCBhZGRlZEl0ZW1zOiBNZXRhb2JqZWN0RGF0YU1vZGVsW10gPSBbXTtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IFsuLi50aGlzLnZhbHVlXTtcclxuICAgICAgICB2YWx1ZS5mb3JFYWNoKChtbykgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZE1vID0gYXJyLmZpbmQoKG1vSWQpID0+IG1vSWQgPT09IG1vLklkKTtcclxuICAgICAgICAgICAgaWYgKCFzZWxlY3RlZE1vKSB7XHJcbiAgICAgICAgICAgICAgICBtby5EYXRhLiRJc0NoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZWRJdGVtcy5wdXNoKG1vLkRhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgYXJyLmZvckVhY2goKG1vSWQpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRNbyA9IHRoaXMub3JpZ2luYWxNb0xpc3QuZmluZCgoYykgPT4gYy5JZCA9PT0gbW9JZCk7XHJcbiAgICAgICAgICAgIGlmICghc2VsZWN0ZWRNbykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbW8yID0gdGhpcy5kcm9wRG93blZhbHVlc1NvdXJjZS5nZXRWYWx1ZSgpLmZpbmQoKGMpID0+IGMuSWQgPT09IG1vSWQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKG1vMikge1xyXG4gICAgICAgICAgICAgICAgICAgIG1vMi4kSXNDaGVja2VkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBhZGRlZEl0ZW1zLnB1c2gobW8yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChkZWxldGVkSXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmZpcmVDb250ZXh0RXZlbnQoJ1JlcXVlc3RDb21tYW5kJywgdGhpcy5jb250ZXh0LCAnRGVsZXRlJywgZGVsZXRlZEl0ZW1zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGFkZGVkSXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmZpcmVDb250ZXh0RXZlbnQoJ1JlcXVlc3RDb21tYW5kJywgdGhpcy5jb250ZXh0LCAnQWRkJywgYWRkZWRJdGVtcyk7XHJcbiAgICAgICAgICAgIC8vIHRoaXMuX3VsdlVpLnZpZXdlckNvbnRyb2wuZmlyZUV2ZW50KCdyb3djbGljaycpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuaW50ZXJmYWNlIFVpTGluZWFyTGlzdENvbnRhaW5lclNldHRpbmcgZXh0ZW5kcyBNZXRhb2JqZWN0RGF0YU1vZGVsIHtcclxuICAgIEV4ZWN1dGVBZGRvbkJ1dHRvbjogYm9vbGVhbjtcclxuICAgIEFkZG9uQnV0dG9uQ29tbWFuZDogTWV0YW9iamVjdERhdGFNb2RlbDtcclxufVxyXG4iLCI8ZmQtbXVsdGktaW5wdXRcclxuICAgIFtpbnB1dElkXT1cImlkXCJcclxuICAgIGludGVyc2VjdGlvbk9ic2VydmVyXHJcbiAgICBbaW50ZXJzZWN0aW9uVGhyZXNob2xkXT1cIjAuMVwiXHJcbiAgICAodmlzaWJpbGl0eUNoYW5nZSk9XCJvblZpc2liaWxpdHlDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICBbY2xhc3MuY29udHJvbC1yZWFkb25seV09XCIocmVhZG9ubHkkIHwgYXN5bmMpID09PSB0cnVlXCJcclxuICAgIFtkcm9wZG93blZhbHVlc109XCIoZHJvcERvd25WYWx1ZXMkIHwgYXN5bmMpISFcIlxyXG4gICAgW3BsYWNlaG9sZGVyXT1cIlNldHRpbmcuQ29udHJvbEZpZWxkQ2FwdGlvblRyYW5zbGF0ZWQgfCBiYmJUcmFuc2xhdGVcIlxyXG4gICAgW2Rpc3BsYXlGbl09XCJkaXNwbGF5RnVuY1wiXHJcbiAgICBbc2hvd0FsbEJ1dHRvbl09XCJmYWxzZVwiXHJcbiAgICBbZGlzcGxheUFkZG9uQnV0dG9uXT1cIihkaXNhYmxlT3JSZWFkb25seSQgfCBhc3luYykgIT09IHRydWVcIlxyXG4gICAgW2FsbG93TmV3VG9rZW5zXT1cImZhbHNlXCJcclxuICAgIFtpbmNsdWRlc109XCJ0cnVlXCJcclxuICAgIFsobmdNb2RlbCldPVwiaWRzT2ZNb1wiXHJcbiAgICBbZGlzYWJsZWRdPVwiKGRpc2FibGUkIHwgYXN5bmMpID09PSB0cnVlXCJcclxuICAgIFt2YWx1ZUZuXT1cInZhbHVlRm5cIlxyXG4gICAgKHNlYXJjaFRlcm1DaGFuZ2UpPVwib25TZWFyY2hUZXJtQ2hhbmdlKCRldmVudClcIlxyXG4gICAgKHNlbGVjdGVkQ2hhbmdlKT1cIm9uU2VsZWN0ZWRDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAoYWRkT25CdXR0b25DbGlja2VkKT1cIl9oYW5kbGVBZGRvbkJ1dHRvbkNsaWNrZWQoKVwiXHJcbj48L2ZkLW11bHRpLWlucHV0PlxyXG5cclxuPCEtLSA8YnV0dG9uXHJcbipuZ0lmPVwicmVwb3J0XCJcclxuZmQtYnV0dG9uXHJcblthdHRyLnJ0bF09XCJydGxcIlxyXG5bYXJpYS1sYWJlbF09XCInQWR2YW5jZWQnIHwgYmJiVHJhbnNsYXRlXCJcclxuZ2x5cGg9XCJ2YWx1ZS1oZWxwXCJcclxuW2Rpc2FibGVkXT1cIihkaXNhYmxlT3JSZWFkb25seSQgfCBhc3luYykhIVwiXHJcbihjbGljayk9XCJvbk9wZW5SZXBvcnQoKVwiXHJcbj48L2J1dHRvbj4gLS0+XHJcblxyXG48bmctdGVtcGxhdGUgbGV0LWRpYWxvZyBsZXQtZGlhbG9nQ29uZmlnPVwiZGlhbG9nQ29uZmlnXCIgI2NvbnRhaW5lcj5cclxuICAgIDxmZC1kaWFsb2cgW2RpYWxvZ0NvbmZpZ109XCJkaWFsb2dDb25maWdcIiBbZGlhbG9nUmVmXT1cImRpYWxvZ1wiICNkaWFsb2dUcGw+XHJcbiAgICAgICAgPGZkLWRpYWxvZy1oZWFkZXI+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBmZGtUZW1wbGF0ZT1cImhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBmZC1iYXItbGVmdD5cclxuICAgICAgICAgICAgICAgICAgICA8ZmQtYmFyLWVsZW1lbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMSBpZD1cImZkLWRpYWxvZy1oZWFkZXItM1wiIGZkLXRpdGxlPnt7IGRpYWxvZy5kYXRhLnRpdGxlIH19PC9oMT5cclxuICAgICAgICAgICAgICAgICAgICA8L2ZkLWJhci1lbGVtZW50PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGZkLWJhci1yaWdodD5cclxuICAgICAgICAgICAgICAgICAgICBAaWYgKGRpYWxvZ0NvbmZpZy5oZWlnaHQgIT09ICcxMDB2aCcpIHtcclxuICAgICAgICAgICAgICAgICAgICA8ZmQtYnV0dG9uLWJhclxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmlhTGFiZWw9XCJmdWxsc2NyZWVuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2dseXBoXT1cImRpYWxvZy5kYXRhLmZ1bGxzY3JlZW4gPyAnZXhpdGZ1bGxzY3JlZW4nIDogJ3Jlc2l6ZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmdWxsc2NyZWVuRGlhbG9nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmdWxsc2NyZWVuXT1cImRpYWxvZy5kYXRhLmZ1bGxzY3JlZW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoZnVsbHNjcmVlbkNoYW5nZWQpPVwiZGlhbG9nLmRhdGEuZnVsbHNjcmVlbiA9ICRldmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaWFsb2ddPVwiZGlhbG9nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2RpYWxvZ0NvbXBvbmVudF09XCJkaWFsb2dUcGxcIlxyXG4gICAgICAgICAgICAgICAgICAgID48L2ZkLWJ1dHRvbi1iYXI+XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDxmZC1idXR0b24tYmFyIGFyaWFMYWJlbD1cImNsb3NlXCIgZ2x5cGg9XCJkZWNsaW5lXCIgKGNsaWNrKT1cIm9uRGlzbWlzcygpXCI+PC9mZC1idXR0b24tYmFyPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwhLS0gPGgzIGZkLXRpdGxlPnt7IGRpYWxvZy5kYXRhLnRpdGxlIH19PC9oMz5cclxuICAgICAgPGJ1dHRvbiBmZC1kaWFsb2ctY2xvc2UtYnV0dG9uPjwvYnV0dG9uPiAtLT5cclxuICAgICAgICA8L2ZkLWRpYWxvZy1oZWFkZXI+XHJcbiAgICAgICAgPGZkLWRpYWxvZy1ib2R5PlxyXG4gICAgICAgICAgICBAaWYgKGRpYWxvZy5kYXRhLnVsdlVpOyBhcyB1bHZVaSkge1xyXG4gICAgICAgICAgICA8YnN1LXVpLXVsdi1tYWluLXVpIFtjb250ZXh0XT1cInVsdlVpXCIgY2xhc3M9XCJsaW5lYXItbGlzdC1zZWxlY3Rpb25cIj48L2JzdS11aS11bHYtbWFpbi11aT5cclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ1bHYtc2VsZWN0aW9uLWZvcm0tZGlhbG9nX19yb3cgdWx2LXNlbGVjdGlvbi1mb3JtLWRpYWxvZ19fc2VsZWN0aW9uLXJvd1wiXHJcbiAgICAgICAgICAgICAgICBbYXJpYS1sYWJlbF09XCInU2VsZWN0ZWRJdGVtc0FuZENvbmRpdGlvbnMnIHwgYmJiVHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPGg1IGZkLXRpdGxlIGNsYXNzPVwic2VsZWN0ZWQtYW5kLWNvbmRpdGlvbi10aXRsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+e3sgJ1NlbGVjdGVkSXRlbXNBbmRDb25kaXRpb25zJyB8IGJiYlRyYW5zbGF0ZSB9fSA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgKHt7IGRpYWxvZy5kYXRhLnNlbGVjdGVkSXRlbXM/Lmxlbmd0aCB8fCAwIH19KVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9oNT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1bHYtc2VsZWN0aW9uLWZvcm0tZGlhbG9nX190b2tlbnMtd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1bHYtc2VsZWN0aW9uLWZvcm0tZGlhbG9nX190b2tlbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChkaWFsb2cuZGF0YS5zZWxlY3RlZEl0ZW1zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxmZC10b29sYmFyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTZWxlY3RlZCBpdGVtcyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKCBpdGVtIG9mIGRpYWxvZy5kYXRhLnNlbGVjdGVkSXRlbXM7IHRyYWNrIF90cmFja0J5U2VsZWN0ZWRGbihzZWxlY3RlZEluZGV4LCBpdGVtKTsgbGV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZEluZGV4ID0gJGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmQtdG9rZW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZE92ZXJmbG93UHJpb3JpdHk9XCJoaWdoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkcC12YWx1ZS1oZWxwLWRpYWxvZ19fc2VsZWN0aW9uLXRva2VuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25DbG9zZUNsaWNrKT1cIm9uUmVtb3ZlU2VsZWN0ZWQoaXRlbSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID57eyBpdGVtLlRleHQgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmQtdG9rZW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZmQtdG9vbGJhcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ1bHYtc2VsZWN0aW9uLWZvcm0tZGlhbG9nX190b2tlbnMtY2xlYXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBnbHlwaD1cImRlY2xpbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXJpYS1sYWJlbF09XCInQ2xlYXInIHwgYmJiVHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xlYXIoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZmQtZGlhbG9nLWJvZHk+XHJcblxyXG4gICAgICAgIDxmZC1kaWFsb2ctZm9vdGVyPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgZmRrVGVtcGxhdGU9XCJmb290ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmZC1iYXJfX3JpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1zdWNjZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidPSycgfCBiYmJUcmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmZFR5cGU9XCJlbXBoYXNpemVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uT2soKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZGlzbWlzcy1kaWFsb2dcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmQtZGlhbG9nLWRlY2lzaXZlLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ0NhbmNlbCcgfCBiYmJUcmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkRpc21pc3MoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9mZC1kaWFsb2ctZm9vdGVyPlxyXG4gICAgPC9mZC1kaWFsb2c+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==