barsa-sap-ui 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (346) hide show
  1. package/README.md +25 -0
  2. package/esm2020/barsa-sap-ui.mjs +5 -0
  3. package/esm2020/lib/apply-conditional-formmatings.directive.mjs +84 -0
  4. package/esm2020/lib/barsa-asp-viewer/barsa-asp-viewer.component.mjs +109 -0
  5. package/esm2020/lib/barsa-base-layout/barsa-base-layout.component.mjs +34 -0
  6. package/esm2020/lib/barsa-date-time-picker/barsa-date-time-picker.component.mjs +71 -0
  7. package/esm2020/lib/barsa-list-file-linear/barsa-list-file-linear.component.mjs +28 -0
  8. package/esm2020/lib/barsa-monaco-editor/barsa-monaco-editor.component.mjs +77 -0
  9. package/esm2020/lib/barsa-network-offline/barsa-network-offline.component.mjs +45 -0
  10. package/esm2020/lib/barsa-sap-ui-routing.module.mjs +17 -0
  11. package/esm2020/lib/barsa-sap-ui.module.mjs +277 -0
  12. package/esm2020/lib/barsa-search-form/barsa-search-form.component.mjs +29 -0
  13. package/esm2020/lib/barsa-table-header/barsa-table-header.component.mjs +122 -0
  14. package/esm2020/lib/barsa-table-row/barsa-table-row.component.mjs +57 -0
  15. package/esm2020/lib/barsa-tinyemce/barsa-tinyemce.component.mjs +334 -0
  16. package/esm2020/lib/barsa-tree-item/barsa-tree-item.component.mjs +120 -0
  17. package/esm2020/lib/barsa-tree-item/node-has-one-depth-level.pipe.mjs +19 -0
  18. package/esm2020/lib/barsa-ulv-main/barsa-ulv-main.component.mjs +156 -0
  19. package/esm2020/lib/breadcrumb/breadcrumb.component.mjs +45 -0
  20. package/esm2020/lib/captcha-field/captcha-field.component.mjs +28 -0
  21. package/esm2020/lib/card-item/card-item.component.mjs +60 -0
  22. package/esm2020/lib/card-view-content/card-view-content.component.mjs +23 -0
  23. package/esm2020/lib/col-renderer.directive.mjs +50 -0
  24. package/esm2020/lib/column-matrix-renderer/column-matrix-renderer.component.mjs +56 -0
  25. package/esm2020/lib/column-matrix-renderer/matrix-value.pipe.mjs +60 -0
  26. package/esm2020/lib/column-renderer/column-renderer.component.mjs +84 -0
  27. package/esm2020/lib/constants.mjs +413 -0
  28. package/esm2020/lib/custom-date-time/custom-date-time.component.mjs +41 -0
  29. package/esm2020/lib/device-info-field-base.mjs +23 -0
  30. package/esm2020/lib/dynamic-page-size.pipe.mjs +26 -0
  31. package/esm2020/lib/empty-page/empty-page.component.mjs +38 -0
  32. package/esm2020/lib/file-in-dialog/file-in-dialog.component.mjs +44 -0
  33. package/esm2020/lib/form-dialog/form-dialog.component.mjs +125 -0
  34. package/esm2020/lib/form-dialog-less/form-dialog-less.component.mjs +38 -0
  35. package/esm2020/lib/form-page/form-page.component.mjs +51 -0
  36. package/esm2020/lib/form-page-base.mjs +129 -0
  37. package/esm2020/lib/form-toolbar-button/form-toolbar-button.component.mjs +44 -0
  38. package/esm2020/lib/form-wizard/form-wizard.component.mjs +21 -0
  39. package/esm2020/lib/fullscreen-dialog.directive.mjs +40 -0
  40. package/esm2020/lib/fundamental-dynamic-form/fundamental-dynamic-form.component.mjs +152 -0
  41. package/esm2020/lib/gantt-dhtml-chart-view/gantt-dhtml-chart-view.component.mjs +203 -0
  42. package/esm2020/lib/global-search/global-search.component.mjs +26 -0
  43. package/esm2020/lib/global-search-module/global-search-module.component.mjs +30 -0
  44. package/esm2020/lib/global-search-panel/global-search-panel.component.mjs +30 -0
  45. package/esm2020/lib/header-avatar/header-avatar.component.mjs +19 -0
  46. package/esm2020/lib/header-facet-form/header-facet-form.component.mjs +22 -0
  47. package/esm2020/lib/header-facet-key-value/header-facet-key-value.component.mjs +31 -0
  48. package/esm2020/lib/header-facet-microchart/header-facet-microchart.component.mjs +21 -0
  49. package/esm2020/lib/header-facet-plain-text/header-facet-plain-text.component.mjs +28 -0
  50. package/esm2020/lib/header-facet-progress/header-facet-progress.component.mjs +26 -0
  51. package/esm2020/lib/header-facet-rate/header-facet-rate.component.mjs +26 -0
  52. package/esm2020/lib/htree-create-new/htree-create-new.component.mjs +49 -0
  53. package/esm2020/lib/hyperlink/hyperlink.component.mjs +19 -0
  54. package/esm2020/lib/index.mjs +412 -0
  55. package/esm2020/lib/inline-save-and-cancel/inline-save-and-cancel.component.mjs +32 -0
  56. package/esm2020/lib/layout-actions/layout-actions.component.mjs +65 -0
  57. package/esm2020/lib/layout-control/layout-control.component.mjs +214 -0
  58. package/esm2020/lib/layout-wizard/layout-wizard.component.mjs +133 -0
  59. package/esm2020/lib/list-item/list-item.component.mjs +30 -0
  60. package/esm2020/lib/ly-empty-space/ly-empty-space.component.mjs +37 -0
  61. package/esm2020/lib/ly-horizontal-layout/ly-horizontal-layout.component.mjs +70 -0
  62. package/esm2020/lib/ly-label/ly-label.component.mjs +31 -0
  63. package/esm2020/lib/ly-layout-container/ly-layout-container.component.mjs +83 -0
  64. package/esm2020/lib/ly-layout-container-of-root/ly-layout-container-of-root.component.mjs +17 -0
  65. package/esm2020/lib/ly-layout-field-label/ly-layout-field-label.component.mjs +24 -0
  66. package/esm2020/lib/ly-layout-panel/ly-layout-panel.component.mjs +64 -0
  67. package/esm2020/lib/ly-line/ly-line.component.mjs +56 -0
  68. package/esm2020/lib/ly-simple-label/ly-simple-label.component.mjs +27 -0
  69. package/esm2020/lib/ly-tab-container/ly-tab-container.component.mjs +43 -0
  70. package/esm2020/lib/ly-tab-page/ly-tab-page.component.mjs +35 -0
  71. package/esm2020/lib/ly-vertical-layout/ly-vertical-layout.component.mjs +49 -0
  72. package/esm2020/lib/manage-filters-report/manage-filters-report.component.mjs +45 -0
  73. package/esm2020/lib/mask/mask.component.mjs +22 -0
  74. package/esm2020/lib/message-strip/message-strip.component.mjs +28 -0
  75. package/esm2020/lib/models/grid-data-provider.mjs +219 -0
  76. package/esm2020/lib/models/grid-view.mjs +2 -0
  77. package/esm2020/lib/models/index.mjs +2 -0
  78. package/esm2020/lib/no-data/no-data.component.mjs +20 -0
  79. package/esm2020/lib/page-with-form-handler-base.mjs +42 -0
  80. package/esm2020/lib/page-with-header/page-with-header.component.mjs +76 -0
  81. package/esm2020/lib/progress-indicator/progress-indicator.component.mjs +18 -0
  82. package/esm2020/lib/report-navigator/report-navigator.component.mjs +62 -0
  83. package/esm2020/lib/report-new-top-form/report-new-top-form.component.mjs +60 -0
  84. package/esm2020/lib/report-search-fields-hidden-settings/report-search-fields-hidden-settings.component.mjs +35 -0
  85. package/esm2020/lib/report-search-fields-manage/report-search-fields-manage.component.mjs +99 -0
  86. package/esm2020/lib/report-search-panel-save/report-search-panel-save.component.mjs +90 -0
  87. package/esm2020/lib/report-tree-base.mjs +405 -0
  88. package/esm2020/lib/report-view-renderer.directive.mjs +248 -0
  89. package/esm2020/lib/responsive-toolbar/responsive-toolbar.component.mjs +50 -0
  90. package/esm2020/lib/responsive-toolbar-renderer/responsive-toolbar-renderer.component.mjs +84 -0
  91. package/esm2020/lib/rich-text-static/rich-text-static.component.mjs +35 -0
  92. package/esm2020/lib/sap-font-class.pipe.mjs +29 -0
  93. package/esm2020/lib/sap-font.pipe.mjs +29 -0
  94. package/esm2020/lib/sap-ui-report-base.component.mjs +689 -0
  95. package/esm2020/lib/search-panel/search-panel.component.mjs +40 -0
  96. package/esm2020/lib/static-text/static-text.component.mjs +15 -0
  97. package/esm2020/lib/title/title.component.mjs +15 -0
  98. package/esm2020/lib/ui-asp-report-viewer/ui-asp-report-viewer.component.mjs +14 -0
  99. package/esm2020/lib/ui-button/ui-button.component.mjs +31 -0
  100. package/esm2020/lib/ui-calendar/ui-calendar.component.mjs +46 -0
  101. package/esm2020/lib/ui-card-view/ui-card-view.component.mjs +60 -0
  102. package/esm2020/lib/ui-card-view-horizontal-group/ui-card-view-horizontal-group.component.mjs +27 -0
  103. package/esm2020/lib/ui-check-box/ui-check-box.component.mjs +29 -0
  104. package/esm2020/lib/ui-color-ui/ui-color-ui.component.mjs +50 -0
  105. package/esm2020/lib/ui-container-with-button/ui-container-with-button.component.mjs +34 -0
  106. package/esm2020/lib/ui-date-range-ex/ui-date-range-ex.component.mjs +194 -0
  107. package/esm2020/lib/ui-date-time/ui-date-time.component.mjs +116 -0
  108. package/esm2020/lib/ui-editable-grid/ui-editable-grid.component.mjs +110 -0
  109. package/esm2020/lib/ui-exception-form/ui-exception-form.component.mjs +61 -0
  110. package/esm2020/lib/ui-file-linear-list-box/ui-file-linear-list-box.component.mjs +181 -0
  111. package/esm2020/lib/ui-form-panel/ui-form-panel.component.mjs +43 -0
  112. package/esm2020/lib/ui-form-panel-toolbar/ui-form-panel-toolbar.component.mjs +26 -0
  113. package/esm2020/lib/ui-gantt-chart/ui-gantt-chart.component.mjs +32 -0
  114. package/esm2020/lib/ui-graph/ui-graph.component.mjs +16 -0
  115. package/esm2020/lib/ui-grid/ui-grid.component.mjs +25 -0
  116. package/esm2020/lib/ui-grid-columns/ui-grid-columns.component.mjs +44 -0
  117. package/esm2020/lib/ui-grid-filter-item/ui-grid-filter-item.component.mjs +67 -0
  118. package/esm2020/lib/ui-grid-filter-settings/ui-grid-filter-settings.component.mjs +76 -0
  119. package/esm2020/lib/ui-grid-sort-item/ui-grid-sort-item.component.mjs +59 -0
  120. package/esm2020/lib/ui-grid-sort-setting/ui-grid-sort-setting.component.mjs +156 -0
  121. package/esm2020/lib/ui-info-bar-panel/ui-info-bar-panel.component.mjs +11 -0
  122. package/esm2020/lib/ui-label/ui-label.component.mjs +12 -0
  123. package/esm2020/lib/ui-linear-list-container-with-button/ui-linear-list-container-with-button.component.mjs +299 -0
  124. package/esm2020/lib/ui-list-view/ui-list-view.component.mjs +44 -0
  125. package/esm2020/lib/ui-matrix-view/ui-matrix-view.component.mjs +125 -0
  126. package/esm2020/lib/ui-mo-info-combo-viewer/ui-mo-info-combo-viewer.component.mjs +19 -0
  127. package/esm2020/lib/ui-mo-info-general-object-ui/ui-mo-info-general-object-ui.component.mjs +13 -0
  128. package/esm2020/lib/ui-mo-info-sub-form-ui/ui-mo-info-sub-form-ui.component.mjs +46 -0
  129. package/esm2020/lib/ui-mo-info-ulv-combo/ui-mo-info-ulv-combo.component.mjs +335 -0
  130. package/esm2020/lib/ui-monaco-editor/ui-monaco-editor.component.mjs +18 -0
  131. package/esm2020/lib/ui-multi-select-combo/ui-multi-select-combo.component.mjs +83 -0
  132. package/esm2020/lib/ui-num-decimal-ui/ui-num-decimal-ui.component.mjs +24 -0
  133. package/esm2020/lib/ui-num-int-ui/ui-num-int-ui.component.mjs +21 -0
  134. package/esm2020/lib/ui-pdf-viewer/ui-pdf-viewer.component.mjs +216 -0
  135. package/esm2020/lib/ui-picture-file/ui-picture-file.component.mjs +95 -0
  136. package/esm2020/lib/ui-pictures-info/ui-pictures-info.component.mjs +215 -0
  137. package/esm2020/lib/ui-radio-group/ui-radio-group.component.mjs +24 -0
  138. package/esm2020/lib/ui-read-only-field/ui-read-only-field.component.mjs +29 -0
  139. package/esm2020/lib/ui-report-container/ui-report-container.component.mjs +46 -0
  140. package/esm2020/lib/ui-search-command-info-ui/ui-search-command-info-ui.component.mjs +24 -0
  141. package/esm2020/lib/ui-simple-combo/ui-simple-combo.component.mjs +29 -0
  142. package/esm2020/lib/ui-single-picture/ui-single-picture.component.mjs +36 -0
  143. package/esm2020/lib/ui-switch-button/ui-switch-button.component.mjs +20 -0
  144. package/esm2020/lib/ui-table-view/ui-table-view.component.mjs +106 -0
  145. package/esm2020/lib/ui-text-area/ui-text-area.component.mjs +44 -0
  146. package/esm2020/lib/ui-text-field/ui-text-field.component.mjs +47 -0
  147. package/esm2020/lib/ui-text-field-auto-complete/ui-text-field-auto-complete.component.mjs +47 -0
  148. package/esm2020/lib/ui-time-span/ui-time-span.component.mjs +24 -0
  149. package/esm2020/lib/ui-tinymce/ui-tinymce.component.mjs +53 -0
  150. package/esm2020/lib/ui-tree/ui-tree.component.mjs +69 -0
  151. package/esm2020/lib/ui-tree-view/ui-tree-view.component.mjs +75 -0
  152. package/esm2020/lib/ui-ulv-form-multi-select-ui/ui-ulv-form-multi-select-ui.component.mjs +24 -0
  153. package/esm2020/lib/ui-ulv-main-ui/ui-ulv-main-ui.component.mjs +276 -0
  154. package/esm2020/lib/ui-workflow-panel-ui/ui-workflow-panel-ui.component.mjs +26 -0
  155. package/esm2020/lib/ul-loading-mask-ui/ul-loading-mask-ui.component.mjs +86 -0
  156. package/esm2020/lib/ul-msg-box-adapter/ul-msg-box-adapter.component.mjs +117 -0
  157. package/esm2020/lib/ul-notify-popup/ul-notify-popup.component.mjs +114 -0
  158. package/esm2020/lib/ul-toast-adapter/ul-toast-adapter.component.mjs +44 -0
  159. package/esm2020/lib/ulv-column-settings/ulv-column-settings.component.mjs +53 -0
  160. package/esm2020/lib/ulv-context-menu/ulv-context-menu.component.mjs +74 -0
  161. package/esm2020/lib/ulv-filter-settings/ulv-filter-settings.component.mjs +43 -0
  162. package/esm2020/lib/ulv-form-multi-select/ulv-form-multi-select.component.mjs +183 -0
  163. package/esm2020/lib/ulv-groupby-settings/ulv-groupby-settings.component.mjs +44 -0
  164. package/esm2020/lib/ulv-paging/ulv-paging.component.mjs +73 -0
  165. package/esm2020/lib/ulv-selection/ulv-selection.component.mjs +66 -0
  166. package/esm2020/lib/ulv-settings/ulv-settings.component.mjs +117 -0
  167. package/esm2020/lib/ulv-sort-settings/ulv-sort-settings.component.mjs +44 -0
  168. package/esm2020/lib/ulv-toolbar/ulv-toolbar.component.mjs +110 -0
  169. package/esm2020/lib/upload-file-status.pipe.mjs +28 -0
  170. package/esm2020/lib/wizard-layout.directive.mjs +102 -0
  171. package/esm2020/public-api.mjs +170 -0
  172. package/fesm2015/barsa-sap-ui.mjs +11437 -0
  173. package/fesm2015/barsa-sap-ui.mjs.map +1 -0
  174. package/fesm2020/barsa-sap-ui.mjs +11427 -0
  175. package/fesm2020/barsa-sap-ui.mjs.map +1 -0
  176. package/index.d.ts +5 -0
  177. package/lib/apply-conditional-formmatings.directive.d.ts +25 -0
  178. package/lib/barsa-asp-viewer/barsa-asp-viewer.component.d.ts +26 -0
  179. package/lib/barsa-base-layout/barsa-base-layout.component.d.ts +18 -0
  180. package/lib/barsa-date-time-picker/barsa-date-time-picker.component.d.ts +18 -0
  181. package/lib/barsa-list-file-linear/barsa-list-file-linear.component.d.ts +8 -0
  182. package/lib/barsa-monaco-editor/barsa-monaco-editor.component.d.ts +18 -0
  183. package/lib/barsa-network-offline/barsa-network-offline.component.d.ts +13 -0
  184. package/lib/barsa-sap-ui-routing.module.d.ts +7 -0
  185. package/lib/barsa-sap-ui.module.d.ts +181 -0
  186. package/lib/barsa-search-form/barsa-search-form.component.d.ts +8 -0
  187. package/lib/barsa-table-header/barsa-table-header.component.d.ts +37 -0
  188. package/lib/barsa-table-row/barsa-table-row.component.d.ts +20 -0
  189. package/lib/barsa-tinyemce/barsa-tinyemce.component.d.ts +43 -0
  190. package/lib/barsa-tree-item/barsa-tree-item.component.d.ts +48 -0
  191. package/lib/barsa-tree-item/node-has-one-depth-level.pipe.d.ts +8 -0
  192. package/lib/barsa-ulv-main/barsa-ulv-main.component.d.ts +52 -0
  193. package/lib/breadcrumb/breadcrumb.component.d.ts +17 -0
  194. package/lib/captcha-field/captcha-field.component.d.ts +10 -0
  195. package/lib/card-item/card-item.component.d.ts +17 -0
  196. package/lib/card-view-content/card-view-content.component.d.ts +8 -0
  197. package/lib/col-renderer.directive.d.ts +12 -0
  198. package/lib/column-matrix-renderer/column-matrix-renderer.component.d.ts +23 -0
  199. package/lib/column-matrix-renderer/matrix-value.pipe.d.ts +8 -0
  200. package/lib/column-renderer/column-renderer.component.d.ts +29 -0
  201. package/lib/constants.d.ts +6 -0
  202. package/lib/custom-date-time/custom-date-time.component.d.ts +26 -0
  203. package/lib/device-info-field-base.d.ts +12 -0
  204. package/lib/dynamic-page-size.pipe.d.ts +8 -0
  205. package/lib/empty-page/empty-page.component.d.ts +11 -0
  206. package/lib/file-in-dialog/file-in-dialog.component.d.ts +16 -0
  207. package/lib/form-dialog/form-dialog.component.d.ts +40 -0
  208. package/lib/form-dialog-less/form-dialog-less.component.d.ts +27 -0
  209. package/lib/form-page/form-page.component.d.ts +17 -0
  210. package/lib/form-page-base.d.ts +26 -0
  211. package/lib/form-toolbar-button/form-toolbar-button.component.d.ts +18 -0
  212. package/lib/form-wizard/form-wizard.component.d.ts +8 -0
  213. package/lib/fullscreen-dialog.directive.d.ts +14 -0
  214. package/lib/fundamental-dynamic-form/fundamental-dynamic-form.component.d.ts +58 -0
  215. package/lib/gantt-dhtml-chart-view/gantt-dhtml-chart-view.component.d.ts +18 -0
  216. package/lib/global-search/global-search.component.d.ts +12 -0
  217. package/lib/global-search-module/global-search-module.component.d.ts +18 -0
  218. package/lib/global-search-panel/global-search-panel.component.d.ts +11 -0
  219. package/lib/header-avatar/header-avatar.component.d.ts +8 -0
  220. package/lib/header-facet-form/header-facet-form.component.d.ts +9 -0
  221. package/lib/header-facet-key-value/header-facet-key-value.component.d.ts +11 -0
  222. package/lib/header-facet-microchart/header-facet-microchart.component.d.ts +8 -0
  223. package/lib/header-facet-plain-text/header-facet-plain-text.component.d.ts +11 -0
  224. package/lib/header-facet-progress/header-facet-progress.component.d.ts +11 -0
  225. package/lib/header-facet-rate/header-facet-rate.component.d.ts +11 -0
  226. package/lib/htree-create-new/htree-create-new.component.d.ts +13 -0
  227. package/lib/hyperlink/hyperlink.component.d.ts +7 -0
  228. package/lib/index.d.ts +85 -0
  229. package/lib/inline-save-and-cancel/inline-save-and-cancel.component.d.ts +11 -0
  230. package/lib/layout-actions/layout-actions.component.d.ts +23 -0
  231. package/lib/layout-control/layout-control.component.d.ts +65 -0
  232. package/lib/layout-wizard/layout-wizard.component.d.ts +27 -0
  233. package/lib/list-item/list-item.component.d.ts +13 -0
  234. package/lib/ly-empty-space/ly-empty-space.component.d.ts +14 -0
  235. package/lib/ly-horizontal-layout/ly-horizontal-layout.component.d.ts +22 -0
  236. package/lib/ly-label/ly-label.component.d.ts +15 -0
  237. package/lib/ly-layout-container/ly-layout-container.component.d.ts +26 -0
  238. package/lib/ly-layout-container-of-root/ly-layout-container-of-root.component.d.ts +8 -0
  239. package/lib/ly-layout-field-label/ly-layout-field-label.component.d.ts +13 -0
  240. package/lib/ly-layout-panel/ly-layout-panel.component.d.ts +25 -0
  241. package/lib/ly-line/ly-line.component.d.ts +17 -0
  242. package/lib/ly-simple-label/ly-simple-label.component.d.ts +11 -0
  243. package/lib/ly-tab-container/ly-tab-container.component.d.ts +16 -0
  244. package/lib/ly-tab-page/ly-tab-page.component.d.ts +18 -0
  245. package/lib/ly-vertical-layout/ly-vertical-layout.component.d.ts +18 -0
  246. package/lib/manage-filters-report/manage-filters-report.component.d.ts +24 -0
  247. package/lib/mask/mask.component.d.ts +9 -0
  248. package/lib/message-strip/message-strip.component.d.ts +11 -0
  249. package/lib/models/grid-data-provider.d.ts +26 -0
  250. package/lib/models/grid-view.d.ts +64 -0
  251. package/lib/models/index.d.ts +1 -0
  252. package/lib/no-data/no-data.component.d.ts +8 -0
  253. package/lib/page-with-form-handler-base.d.ts +10 -0
  254. package/lib/page-with-header/page-with-header.component.d.ts +29 -0
  255. package/lib/progress-indicator/progress-indicator.component.d.ts +8 -0
  256. package/lib/report-navigator/report-navigator.component.d.ts +21 -0
  257. package/lib/report-new-top-form/report-new-top-form.component.d.ts +18 -0
  258. package/lib/report-search-fields-hidden-settings/report-search-fields-hidden-settings.component.d.ts +14 -0
  259. package/lib/report-search-fields-manage/report-search-fields-manage.component.d.ts +20 -0
  260. package/lib/report-search-panel-save/report-search-panel-save.component.d.ts +27 -0
  261. package/lib/report-tree-base.d.ts +61 -0
  262. package/lib/report-view-renderer.directive.d.ts +82 -0
  263. package/lib/responsive-toolbar/responsive-toolbar.component.d.ts +19 -0
  264. package/lib/responsive-toolbar-renderer/responsive-toolbar-renderer.component.d.ts +24 -0
  265. package/lib/rich-text-static/rich-text-static.component.d.ts +24 -0
  266. package/lib/sap-font-class.pipe.d.ts +8 -0
  267. package/lib/sap-font.pipe.d.ts +9 -0
  268. package/lib/sap-ui-report-base.component.d.ts +133 -0
  269. package/lib/search-panel/search-panel.component.d.ts +13 -0
  270. package/lib/static-text/static-text.component.d.ts +7 -0
  271. package/lib/title/title.component.d.ts +7 -0
  272. package/lib/ui-asp-report-viewer/ui-asp-report-viewer.component.d.ts +7 -0
  273. package/lib/ui-button/ui-button.component.d.ts +11 -0
  274. package/lib/ui-calendar/ui-calendar.component.d.ts +16 -0
  275. package/lib/ui-card-view/ui-card-view.component.d.ts +16 -0
  276. package/lib/ui-card-view-horizontal-group/ui-card-view-horizontal-group.component.d.ts +9 -0
  277. package/lib/ui-check-box/ui-check-box.component.d.ts +12 -0
  278. package/lib/ui-color-ui/ui-color-ui.component.d.ts +16 -0
  279. package/lib/ui-container-with-button/ui-container-with-button.component.d.ts +11 -0
  280. package/lib/ui-date-range-ex/ui-date-range-ex.component.d.ts +36 -0
  281. package/lib/ui-date-time/ui-date-time.component.d.ts +24 -0
  282. package/lib/ui-editable-grid/ui-editable-grid.component.d.ts +43 -0
  283. package/lib/ui-exception-form/ui-exception-form.component.d.ts +16 -0
  284. package/lib/ui-file-linear-list-box/ui-file-linear-list-box.component.d.ts +51 -0
  285. package/lib/ui-form-panel/ui-form-panel.component.d.ts +24 -0
  286. package/lib/ui-form-panel-toolbar/ui-form-panel-toolbar.component.d.ts +13 -0
  287. package/lib/ui-gantt-chart/ui-gantt-chart.component.d.ts +15 -0
  288. package/lib/ui-graph/ui-graph.component.d.ts +9 -0
  289. package/lib/ui-grid/ui-grid.component.d.ts +12 -0
  290. package/lib/ui-grid-columns/ui-grid-columns.component.d.ts +14 -0
  291. package/lib/ui-grid-filter-item/ui-grid-filter-item.component.d.ts +19 -0
  292. package/lib/ui-grid-filter-settings/ui-grid-filter-settings.component.d.ts +24 -0
  293. package/lib/ui-grid-sort-item/ui-grid-sort-item.component.d.ts +25 -0
  294. package/lib/ui-grid-sort-setting/ui-grid-sort-setting.component.d.ts +28 -0
  295. package/lib/ui-info-bar-panel/ui-info-bar-panel.component.d.ts +5 -0
  296. package/lib/ui-label/ui-label.component.d.ts +6 -0
  297. package/lib/ui-linear-list-container-with-button/ui-linear-list-container-with-button.component.d.ts +62 -0
  298. package/lib/ui-list-view/ui-list-view.component.d.ts +15 -0
  299. package/lib/ui-matrix-view/ui-matrix-view.component.d.ts +45 -0
  300. package/lib/ui-mo-info-combo-viewer/ui-mo-info-combo-viewer.component.d.ts +7 -0
  301. package/lib/ui-mo-info-general-object-ui/ui-mo-info-general-object-ui.component.d.ts +6 -0
  302. package/lib/ui-mo-info-sub-form-ui/ui-mo-info-sub-form-ui.component.d.ts +13 -0
  303. package/lib/ui-mo-info-ulv-combo/ui-mo-info-ulv-combo.component.d.ts +78 -0
  304. package/lib/ui-monaco-editor/ui-monaco-editor.component.d.ts +7 -0
  305. package/lib/ui-multi-select-combo/ui-multi-select-combo.component.d.ts +21 -0
  306. package/lib/ui-num-decimal-ui/ui-num-decimal-ui.component.d.ts +11 -0
  307. package/lib/ui-num-int-ui/ui-num-int-ui.component.d.ts +10 -0
  308. package/lib/ui-pdf-viewer/ui-pdf-viewer.component.d.ts +63 -0
  309. package/lib/ui-picture-file/ui-picture-file.component.d.ts +27 -0
  310. package/lib/ui-pictures-info/ui-pictures-info.component.d.ts +68 -0
  311. package/lib/ui-radio-group/ui-radio-group.component.d.ts +9 -0
  312. package/lib/ui-read-only-field/ui-read-only-field.component.d.ts +11 -0
  313. package/lib/ui-report-container/ui-report-container.component.d.ts +17 -0
  314. package/lib/ui-search-command-info-ui/ui-search-command-info-ui.component.d.ts +9 -0
  315. package/lib/ui-simple-combo/ui-simple-combo.component.d.ts +13 -0
  316. package/lib/ui-single-picture/ui-single-picture.component.d.ts +13 -0
  317. package/lib/ui-switch-button/ui-switch-button.component.d.ts +11 -0
  318. package/lib/ui-table-view/ui-table-view.component.d.ts +29 -0
  319. package/lib/ui-text-area/ui-text-area.component.d.ts +15 -0
  320. package/lib/ui-text-field/ui-text-field.component.d.ts +14 -0
  321. package/lib/ui-text-field-auto-complete/ui-text-field-auto-complete.component.d.ts +13 -0
  322. package/lib/ui-time-span/ui-time-span.component.d.ts +10 -0
  323. package/lib/ui-tinymce/ui-tinymce.component.d.ts +17 -0
  324. package/lib/ui-tree/ui-tree.component.d.ts +32 -0
  325. package/lib/ui-tree-view/ui-tree-view.component.d.ts +41 -0
  326. package/lib/ui-ulv-form-multi-select-ui/ui-ulv-form-multi-select-ui.component.d.ts +9 -0
  327. package/lib/ui-ulv-main-ui/ui-ulv-main-ui.component.d.ts +67 -0
  328. package/lib/ui-workflow-panel-ui/ui-workflow-panel-ui.component.d.ts +16 -0
  329. package/lib/ul-loading-mask-ui/ul-loading-mask-ui.component.d.ts +20 -0
  330. package/lib/ul-msg-box-adapter/ul-msg-box-adapter.component.d.ts +48 -0
  331. package/lib/ul-notify-popup/ul-notify-popup.component.d.ts +41 -0
  332. package/lib/ul-toast-adapter/ul-toast-adapter.component.d.ts +13 -0
  333. package/lib/ulv-column-settings/ulv-column-settings.component.d.ts +19 -0
  334. package/lib/ulv-context-menu/ulv-context-menu.component.d.ts +24 -0
  335. package/lib/ulv-filter-settings/ulv-filter-settings.component.d.ts +19 -0
  336. package/lib/ulv-form-multi-select/ulv-form-multi-select.component.d.ts +26 -0
  337. package/lib/ulv-groupby-settings/ulv-groupby-settings.component.d.ts +16 -0
  338. package/lib/ulv-paging/ulv-paging.component.d.ts +27 -0
  339. package/lib/ulv-selection/ulv-selection.component.d.ts +43 -0
  340. package/lib/ulv-settings/ulv-settings.component.d.ts +43 -0
  341. package/lib/ulv-sort-settings/ulv-sort-settings.component.d.ts +16 -0
  342. package/lib/ulv-toolbar/ulv-toolbar.component.d.ts +47 -0
  343. package/lib/upload-file-status.pipe.d.ts +9 -0
  344. package/lib/wizard-layout.directive.d.ts +39 -0
  345. package/package.json +31 -0
  346. package/public-api.d.ts +166 -0
@@ -0,0 +1,11 @@
1
+ import { ChangeDetectionStrategy, Component } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class UiInfoBarPanelComponent {
4
+ }
5
+ UiInfoBarPanelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UiInfoBarPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6
+ UiInfoBarPanelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: UiInfoBarPanelComponent, selector: "bsu-ui-info-bar-panel", ngImport: i0, template: "<p>ui-info-bar-panel works!</p>\r\n", styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush });
7
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UiInfoBarPanelComponent, decorators: [{
8
+ type: Component,
9
+ args: [{ selector: 'bsu-ui-info-bar-panel', changeDetection: ChangeDetectionStrategy.OnPush, template: "<p>ui-info-bar-panel works!</p>\r\n" }]
10
+ }] });
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktaW5mby1iYXItcGFuZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvdWktaW5mby1iYXItcGFuZWwvdWktaW5mby1iYXItcGFuZWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvdWktaW5mby1iYXItcGFuZWwvdWktaW5mby1iYXItcGFuZWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFRbkUsTUFBTSxPQUFPLHVCQUF1Qjs7b0hBQXZCLHVCQUF1Qjt3R0FBdkIsdUJBQXVCLDZEQ1JwQyxxQ0FDQTsyRkRPYSx1QkFBdUI7a0JBTm5DLFNBQVM7K0JBQ0ksdUJBQXVCLG1CQUdoQix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2JzdS11aS1pbmZvLWJhci1wYW5lbCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3VpLWluZm8tYmFyLXBhbmVsLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi91aS1pbmZvLWJhci1wYW5lbC5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFVpSW5mb0JhclBhbmVsQ29tcG9uZW50IHt9XG4iLCI8cD51aS1pbmZvLWJhci1wYW5lbCB3b3JrcyE8L3A+XHJcbiJdfQ==
@@ -0,0 +1,12 @@
1
+ import { Component, ChangeDetectionStrategy } from '@angular/core';
2
+ import { FieldBaseComponent } from 'barsa-novin-ray-core';
3
+ import * as i0 from "@angular/core";
4
+ export class UiLabelComponent extends FieldBaseComponent {
5
+ }
6
+ UiLabelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UiLabelComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
7
+ UiLabelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: UiLabelComponent, selector: "bsu-ui-label", usesInheritance: true, ngImport: i0, template: "<label fd-label>{{ value }}</label>\n", styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush });
8
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UiLabelComponent, decorators: [{
9
+ type: Component,
10
+ args: [{ selector: 'bsu-ui-label', changeDetection: ChangeDetectionStrategy.OnPush, template: "<label fd-label>{{ value }}</label>\n" }]
11
+ }] });
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktbGFiZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvdWktbGFiZWwvdWktbGFiZWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvdWktbGFiZWwvdWktbGFiZWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7QUFRMUQsTUFBTSxPQUFPLGdCQUFpQixTQUFRLGtCQUFrQjs7NkdBQTNDLGdCQUFnQjtpR0FBaEIsZ0JBQWdCLDJFQ1Q3Qix1Q0FDQTsyRkRRYSxnQkFBZ0I7a0JBTjVCLFNBQVM7K0JBQ0ksY0FBYyxtQkFHUCx1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRmllbGRCYXNlQ29tcG9uZW50IH0gZnJvbSAnYmFyc2Etbm92aW4tcmF5LWNvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2JzdS11aS1sYWJlbCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3VpLWxhYmVsLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi91aS1sYWJlbC5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFVpTGFiZWxDb21wb25lbnQgZXh0ZW5kcyBGaWVsZEJhc2VDb21wb25lbnQge31cbiIsIjxsYWJlbCBmZC1sYWJlbD57eyB2YWx1ZSB9fTwvbGFiZWw+XG4iXX0=
@@ -0,0 +1,299 @@
1
+ import { ChangeDetectionStrategy, Component, HostListener, Input, TemplateRef, ViewChild } from '@angular/core';
2
+ import { BehaviorSubject, Subject } from 'rxjs';
3
+ import { 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/common";
9
+ import * as i2 from "@angular/forms";
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/core/title";
14
+ import * as i7 from "@fundamental-ngx/core/utils";
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 "barsa-novin-ray-core";
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
+ })));
35
+ this.report = null;
36
+ this.term = '';
37
+ this.termSource = new Subject();
38
+ this.rtl = BarsaApi.LoginFormData.IsRtl;
39
+ this.showUlvSource = new Subject();
40
+ /* eslint-disable */
41
+ this.GetTextItemValue = () => this.term;
42
+ /* eslint-disable */
43
+ this.show = () => {
44
+ this._openUlv();
45
+ };
46
+ /* eslint-disable */
47
+ this.hide = () => {
48
+ this._changeDropDownOpenState(false);
49
+ };
50
+ /* eslint-disable */
51
+ this.hidden = () => {
52
+ return this.multiInputComponent && !this.multiInputComponent.open && !this.dialogOpen;
53
+ };
54
+ this.GetSelectionData = () => {
55
+ return this.multiInputComponent.selected;
56
+ /* eslint-disable */
57
+ };
58
+ }
59
+ set UlvUi(val) {
60
+ if (val) {
61
+ const moList = val.Setting.Data.MoDataList;
62
+ this.dropDownValuesSource.next(moList);
63
+ this._ulvUi = val;
64
+ }
65
+ }
66
+ onKeyEnter() {
67
+ if (this.term) {
68
+ if (!this.dropDownValuesSource.getValue().length) {
69
+ this.fireContextEvent('RequestCommand', this.context, 'New');
70
+ }
71
+ }
72
+ }
73
+ onKeyDown() {
74
+ if (!this.term && this.hidden()) {
75
+ this.context.fireEvent('RequestFilter2');
76
+ }
77
+ }
78
+ onKeyEsc() {
79
+ this._changeDropDownOpenState(false);
80
+ }
81
+ ngOnInit() {
82
+ this.showUlvSource
83
+ .asObservable()
84
+ .pipe(takeUntil(this._onDestroy$))
85
+ .subscribe(() => this._openUlv());
86
+ super.ngOnInit();
87
+ this.report = this.Setting.Report;
88
+ this.originalMoList = [...this.value];
89
+ this.termSource
90
+ .asObservable()
91
+ .pipe(takeUntil(this._onDestroy$), tap((term) => {
92
+ this.term = term;
93
+ if (!term) {
94
+ this.dropDownValuesSource.next([]);
95
+ }
96
+ else {
97
+ this.context.fireEvent('RequestFilter', term);
98
+ }
99
+ }))
100
+ .subscribe();
101
+ }
102
+ onSearchTermChange(term) {
103
+ this.termSource.next(term);
104
+ }
105
+ onOpenReport() {
106
+ this._triggerClicked = true;
107
+ this.termSource.next('');
108
+ this.context.fireEvent('TriggerClick', this.context);
109
+ }
110
+ onSelectedChange(arr) {
111
+ this._selectedChanged(arr);
112
+ }
113
+ onRemoveSelected(mo) {
114
+ this._removeFromSelected(mo);
115
+ }
116
+ onDismiss() {
117
+ this._closeDialog();
118
+ }
119
+ onOk() {
120
+ this._selectedChanged(this.dialogRef.data.selectedItems);
121
+ this._closeDialog();
122
+ }
123
+ onClear() {
124
+ this.dialogRef.data.ulvUi.viewerControl.ClearAllSelected();
125
+ this.dialogRef.data.selectedItems = [];
126
+ }
127
+ _trackBySelectedFn(_index, item) {
128
+ return item.Id;
129
+ }
130
+ displayFunc(obj) {
131
+ return obj.Text ?? obj.$Caption;
132
+ }
133
+ _setValue(value) {
134
+ this.originalMoList = [...value];
135
+ super._setValue(value);
136
+ }
137
+ _changeDropDownOpenState(val) {
138
+ if (this.multiInputComponent) {
139
+ this.multiInputComponent.open = val;
140
+ }
141
+ }
142
+ _openUlv() {
143
+ if (this.report && !this.term && this._triggerClicked) {
144
+ if (this.dialogOpen || !this._ulvUi) {
145
+ return;
146
+ }
147
+ const view = this._ulvUi.Setting.View;
148
+ view.IsCheckList = true;
149
+ this.dialogOpen = true;
150
+ const deviceSize = this._portalService.deviceSize;
151
+ const largeScreen = deviceSize === 'l' || deviceSize === 'xl';
152
+ const dialogConfig = {
153
+ data: {
154
+ ulvUi: this._ulvUi,
155
+ title: this._bbbPipe.transform('Select'),
156
+ selectedItems: [...this.originalMoList]
157
+ },
158
+ escKeyCloseable: false,
159
+ dialogPanelClass: `ulv-selection-form-dialog ${deviceSize ? 'ulv-selection-form-dialog-mobile' : ''}`
160
+ };
161
+ if (largeScreen) {
162
+ dialogConfig.width = '60vw';
163
+ dialogConfig.height = '60vh';
164
+ dialogConfig.minWidth = '600';
165
+ dialogConfig.minHeight = '360';
166
+ }
167
+ else {
168
+ dialogConfig.mobile = true;
169
+ dialogConfig.fullScreen = true;
170
+ }
171
+ if (this._ulvUi?.Setting?.Extra?.DefaultCommandsAccess?.View) {
172
+ this._ulvUi.Setting.Extra.DefaultCommandsAccess.View = false;
173
+ }
174
+ const dataSetting = this._ulvUi.Setting.Data;
175
+ if (largeScreen && dataSetting) {
176
+ if (dataSetting.Paging?.HasPaging) {
177
+ dialogConfig.height = '100vh';
178
+ }
179
+ else {
180
+ dialogConfig.height = dataSetting.MoDataList.length > 10 ? '100vh' : '60vh';
181
+ }
182
+ }
183
+ const dialogRef = this._dialogService.open(this.dialogContainer, dialogConfig);
184
+ if (!this._ulvUi.$RegisterEvent) {
185
+ this._ulvUi.$RegisterEvent = true;
186
+ this._ulvUi.viewerControl.on({
187
+ afterrender: () => {
188
+ this._ulvUi.viewerControl.ClearAllSelected();
189
+ this._ulvUi.viewerControl.selectRecords(this.originalMoList);
190
+ },
191
+ rowSelectAll: (context) => {
192
+ context.Setting.Data.MoDataList.forEach((mo) => {
193
+ this._addMoToSelected(mo);
194
+ });
195
+ },
196
+ rowDeselectAll: (context) => {
197
+ context.Setting.Data.MoDataList.forEach((mo) => {
198
+ this._removeFromSelected(mo);
199
+ });
200
+ },
201
+ rowselect: (sender, index, mo) => {
202
+ this._addMoToSelected(mo);
203
+ },
204
+ rowdeselect: (sender, index, mo) => {
205
+ this._removeFromSelected(mo);
206
+ }
207
+ });
208
+ }
209
+ this.dialogRef = dialogRef;
210
+ }
211
+ else {
212
+ this._changeDropDownOpenState(true);
213
+ }
214
+ }
215
+ _closeDialog() {
216
+ this._triggerClicked = false;
217
+ this.dialogOpen = false;
218
+ this.dialogRef.close();
219
+ }
220
+ _addMoToSelected(mo) {
221
+ if (!mo) {
222
+ return;
223
+ }
224
+ const selected = this.dialogRef.data.selectedItems;
225
+ if (!selected.find((c) => c.Id === mo.Id)) {
226
+ selected.push({
227
+ Id: mo.Id,
228
+ Text: mo.$Caption,
229
+ Data: mo,
230
+ $Caption: mo.$Caption
231
+ });
232
+ }
233
+ }
234
+ _removeFromSelected(mo) {
235
+ const selected = this.dialogRef.data.selectedItems.filter((c) => c.Id !== mo.Id);
236
+ this.dialogRef.data.selectedItems = selected;
237
+ }
238
+ _selectedChanged(arr) {
239
+ const deletedItems = [];
240
+ const addedItems = [];
241
+ const value = this.value;
242
+ value.forEach((mo) => {
243
+ const selectedMo = arr.find((c) => c.Id === mo.Id);
244
+ if (!selectedMo) {
245
+ mo.Data.$IsChecked = false;
246
+ deletedItems.push(mo.Data);
247
+ }
248
+ });
249
+ arr.forEach((mo) => {
250
+ const selectedMo = value.find((c) => c.Id === mo.Id);
251
+ if (!selectedMo) {
252
+ addedItems.push(mo.Data || mo);
253
+ mo.$IsChecked = true;
254
+ }
255
+ });
256
+ if (deletedItems.length > 0) {
257
+ this.fireContextEvent('RequestCommand', this.context, 'Delete', deletedItems);
258
+ }
259
+ if (addedItems.length > 0) {
260
+ this.fireContextEvent('RequestCommand', this.context, 'Add', addedItems);
261
+ // this._ulvUi.viewerControl.fireEvent('rowclick');
262
+ }
263
+ this._changeDropDownOpenState(false);
264
+ }
265
+ }
266
+ UiLinearListContainerWithButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UiLinearListContainerWithButtonComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
267
+ UiLinearListContainerWithButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", 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 }, { propertyName: "dialogContainer", first: true, predicate: ["container"], descendants: true, read: TemplateRef }], usesInheritance: true, ngImport: i0, template: "<fd-multi-input\r\n [inputId]=\"id\"\r\n [class.control-readonly]=\"(readonly$ | async) === true\"\r\n [dropdownValues]=\"(dropDownValues$ | async)!!\"\r\n [placeholder]=\"'EnterSearchCriteria' | bbbTranslate\"\r\n [ngModel]=\"originalMoList\"\r\n [displayFn]=\"displayFunc\"\r\n [showAllButton]=\"false\"\r\n [displayAddonButton]=\"false\"\r\n [allowNewTokens]=\"false\"\r\n [includes]=\"false\"\r\n [disabled]=\"(disable$ | async) === true\"\r\n (searchTermChange)=\"onSearchTermChange($event)\"\r\n (selectedChange)=\"onSelectedChange($event)\"\r\n></fd-multi-input>\r\n<!-- <fdp-multi-input\r\n[placeholder]=\"'EnterSearchCriteria'|bbbTranslate\"\r\ntype=\"text\"\r\n[id]=\"id\"\r\n[dataSource]=\"(dropDownValues$ | async)!!\"\r\n(selectionChange)=\"onSelectedChange($event)\"\r\ndisplayKey=\"$Caption\"\r\n[autofocus]=\"true\"\r\n\r\n>\r\n</fdp-multi-input> -->\r\n<button\r\n *ngIf=\"report\"\r\n fd-button\r\n [attr.rtl]=\"rtl\"\r\n [aria-label]=\"'Advanced' | bbbTranslate\"\r\n glyph=\"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 fdTemplate=\"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 <fd-button-bar\r\n *ngIf=\"dialogConfig.height !== '100vh'\"\r\n ariaLabel=\"fullscreen\"\r\n [glyph]=\"dialog.data.fullscreen ? 'exitfullscreen' : 'resize'\"\r\n fullscreenDialog\r\n [dialog]=\"dialog\"\r\n [dialogComponent]=\"dialogTpl\"\r\n ></fd-button-bar>\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 <ng-container *ngIf=\"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 </ng-container>\r\n </fd-dialog-body>\r\n\r\n <fd-dialog-footer class=\"linear-footer\">\r\n <ng-template fdTemplate=\"footer\">\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\r\n <div class=\"ulv-selection-form-dialog__tokens-wrapper\">\r\n <div class=\"ulv-selection-form-dialog__tokens\">\r\n <fd-toolbar *ngIf=\"dialog.data.selectedItems\">\r\n <!-- Selected items -->\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 *ngFor=\"\r\n let item of dialog.data.selectedItems;\r\n index as selectedIndex;\r\n trackBy: _trackBySelectedFn\r\n \"\r\n >{{ item.Text }}\r\n </fd-token>\r\n </fd-toolbar>\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 <div class=\"ulv-selection-form-dialog__actions-row\">\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.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.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", "isTitle"] }, { kind: "component", type: i3.ButtonBarComponent, selector: "fd-button-bar", inputs: ["fullWidth", "fdType", "title", "ariaLabel", "ariaLabelledby", "id"] }, { kind: "component", type: i4.ButtonComponent, selector: "button[fd-button], a[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" }, { kind: "component", type: i5.DialogFooterComponent, selector: "fd-dialog-footer" }, { kind: "component", type: i5.DialogHeaderComponent, selector: "fd-dialog-header" }, { kind: "directive", type: i5.DialogDecisiveButtonDirective, selector: "[fd-dialog-decisive-button]" }, { kind: "component", type: i6.TitleComponent, selector: "h1[fd-title], h2[fd-title], h3[fd-title], h4[fd-title], h5[fd-title], h6[fd-title]", inputs: ["headerSize", "wrap"], exportAs: ["fd-title"] }, { kind: "directive", type: i7.TemplateDirective, selector: "[fdTemplate]", inputs: ["fdTemplate"] }, { kind: "component", type: i8.MultiInputComponent, selector: "fd-multi-input", inputs: ["placeholder", "disabled", "required", "compactCollapse", "maxHeight", "glyph", "dropdownValues", "searchTerm", "inputId", "highlight", "selected", "class", "filterFn", "valueFn", "displayFn", "newTokenParseFn", "newTokenValidateFn", "ariaLabel", "ariaLabelledBy", "fillControlMode", "state", "buttonFocusable", "allowNewTokens", "mobile", "showAllButton", "bodyMaxWidth", "mobileConfig", "includes", "itemTemplate", "title", "autoComplete", "open", "displayAddonButton"], outputs: ["searchTermChange", "selectedChange", "openChange", "allItemsSelectedChange"] }, { kind: "component", type: i9.ToolbarComponent, selector: "fd-toolbar", inputs: ["class", "shouldOverflow", "fdType", "hasTitle", "title", "active", "clearBorder", "forceOverflow", "tabindex"] }, { kind: "directive", type: i9.ToolbarItemDirective, selector: "[fd-toolbar-item]" }, { kind: "directive", type: i9.ToolbarOverflowPriorityDirective, selector: "[fdOverflowPriority]", inputs: ["fdOverflowPriority"] }, { kind: "component", type: i10.TokenComponent, selector: "fd-token", inputs: ["disabled", "selected", "readOnly", "deleteButtonLabel", "ariaRoleDescription"], outputs: ["onCloseClick", "onRemove", "onTokenClick", "onTokenKeydown"] }, { kind: "component", type: i11.UiUlvMainUiComponent, selector: "bsu-ui-ulv-main-ui", inputs: ["context", "isReportPage", "inDialog", "layoutInfo", "fullscreen"] }, { kind: "directive", type: i12.FullscreenDialogDirective, selector: "[fullscreenDialog]", inputs: ["dialog", "dialogComponent"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i13.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
268
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UiLinearListContainerWithButtonComponent, decorators: [{
269
+ type: Component,
270
+ args: [{ selector: 'bsu-ui-linear-list-container-with-button', changeDetection: ChangeDetectionStrategy.OnPush, template: "<fd-multi-input\r\n [inputId]=\"id\"\r\n [class.control-readonly]=\"(readonly$ | async) === true\"\r\n [dropdownValues]=\"(dropDownValues$ | async)!!\"\r\n [placeholder]=\"'EnterSearchCriteria' | bbbTranslate\"\r\n [ngModel]=\"originalMoList\"\r\n [displayFn]=\"displayFunc\"\r\n [showAllButton]=\"false\"\r\n [displayAddonButton]=\"false\"\r\n [allowNewTokens]=\"false\"\r\n [includes]=\"false\"\r\n [disabled]=\"(disable$ | async) === true\"\r\n (searchTermChange)=\"onSearchTermChange($event)\"\r\n (selectedChange)=\"onSelectedChange($event)\"\r\n></fd-multi-input>\r\n<!-- <fdp-multi-input\r\n[placeholder]=\"'EnterSearchCriteria'|bbbTranslate\"\r\ntype=\"text\"\r\n[id]=\"id\"\r\n[dataSource]=\"(dropDownValues$ | async)!!\"\r\n(selectionChange)=\"onSelectedChange($event)\"\r\ndisplayKey=\"$Caption\"\r\n[autofocus]=\"true\"\r\n\r\n>\r\n</fdp-multi-input> -->\r\n<button\r\n *ngIf=\"report\"\r\n fd-button\r\n [attr.rtl]=\"rtl\"\r\n [aria-label]=\"'Advanced' | bbbTranslate\"\r\n glyph=\"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 fdTemplate=\"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 <fd-button-bar\r\n *ngIf=\"dialogConfig.height !== '100vh'\"\r\n ariaLabel=\"fullscreen\"\r\n [glyph]=\"dialog.data.fullscreen ? 'exitfullscreen' : 'resize'\"\r\n fullscreenDialog\r\n [dialog]=\"dialog\"\r\n [dialogComponent]=\"dialogTpl\"\r\n ></fd-button-bar>\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 <ng-container *ngIf=\"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 </ng-container>\r\n </fd-dialog-body>\r\n\r\n <fd-dialog-footer class=\"linear-footer\">\r\n <ng-template fdTemplate=\"footer\">\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\r\n <div class=\"ulv-selection-form-dialog__tokens-wrapper\">\r\n <div class=\"ulv-selection-form-dialog__tokens\">\r\n <fd-toolbar *ngIf=\"dialog.data.selectedItems\">\r\n <!-- Selected items -->\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 *ngFor=\"\r\n let item of dialog.data.selectedItems;\r\n index as selectedIndex;\r\n trackBy: _trackBySelectedFn\r\n \"\r\n >{{ item.Text }}\r\n </fd-token>\r\n </fd-toolbar>\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 <div class=\"ulv-selection-form-dialog__actions-row\">\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"] }]
271
+ }], propDecorators: { multiInputComponent: [{
272
+ type: ViewChild,
273
+ args: [MultiInputComponent]
274
+ }], dialogContainer: [{
275
+ type: ViewChild,
276
+ args: ['container', { read: TemplateRef }]
277
+ }], UlvUi: [{
278
+ type: Input
279
+ }], onKeyEnter: [{
280
+ type: HostListener,
281
+ args: ['keydown.enter', ['$event']]
282
+ }], onKeyDown: [{
283
+ type: HostListener,
284
+ args: ['keydown.arrowdown', ['$event']]
285
+ }], onKeyEsc: [{
286
+ type: HostListener,
287
+ args: ['keydown.esc', ['$event']]
288
+ }], GetTextItemValue: [{
289
+ type: Input
290
+ }], show: [{
291
+ type: Input
292
+ }], hide: [{
293
+ type: Input
294
+ }], hidden: [{
295
+ type: Input
296
+ }], GetSelectionData: [{
297
+ type: Input
298
+ }] } });
299
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktbGluZWFyLWxpc3QtY29udGFpbmVyLXdpdGgtYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLXNhcC11aS9zcmMvbGliL3VpLWxpbmVhci1saXN0LWNvbnRhaW5lci13aXRoLWJ1dHRvbi91aS1saW5lYXItbGlzdC1jb250YWluZXItd2l0aC1idXR0b24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvdWktbGluZWFyLWxpc3QtY29udGFpbmVyLXdpdGgtYnV0dG9uL3VpLWxpbmVhci1saXN0LWNvbnRhaW5lci13aXRoLWJ1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4SCxPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRCxPQUFPLEVBQWEsbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RSxPQUFPLEVBQUUsUUFBUSxFQUFvQyxNQUFNLHNCQUFzQixDQUFDO0FBQ2xGLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUFZekUsTUFBTSxPQUFPLHdDQUF5QyxTQUFRLDRCQUE0QjtJQU4xRjs7UUFrQkksV0FBTSxHQUFHLEtBQUssQ0FBQztRQUNmLHlCQUFvQixHQUFHLElBQUksZUFBZSxDQUF3QixFQUFFLENBQUMsQ0FBQztRQUN0RSxvQkFBZSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FB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dUJBQXVCLENBQUMsTUFBTTs4QkFJL0MsbUJBQW1CO3NCQURsQixTQUFTO3VCQUFDLG1CQUFtQjtnQkFHOUIsZUFBZTtzQkFEZCxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBRWhDLEtBQUs7c0JBQWpCLEtBQUs7Z0JBd0NOLFVBQVU7c0JBRFQsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBU3pDLFNBQVM7c0JBRFIsWUFBWTt1QkFBQyxtQkFBbUIsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFPN0MsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLGFBQWEsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFvRTlCLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFFRyxJQUFJO3NCQUFaLEtBQUs7Z0JBSUcsSUFBSTtzQkFBWixLQUFLO2dCQUlHLE1BQU07c0JBQWQsS0FBSztnQkFHRyxnQkFBZ0I7c0JBQXhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkluaXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IERpYWxvZ1JlZiwgTXVsdGlJbnB1dENvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZSc7XG5cbmltcG9ydCB7IEJhcnNhQXBpLCBSZXBvcnRNb2RlbCwgTWV0YW9iamVjdERhdGFNb2RlbCB9IGZyb20gJ2JhcnNhLW5vdmluLXJheS1jb3JlJztcbmltcG9ydCB7IERldmljZUluZm9GaWVsZEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9kZXZpY2UtaW5mby1maWVsZC1iYXNlJztcbmludGVyZmFjZSBMaW5lYXJJdGVtTW8gZXh0ZW5kcyBNZXRhb2JqZWN0RGF0YU1vZGVsIHtcbiAgICBEYXRhOiBNZXRhb2JqZWN0RGF0YU1vZGVsO1xuICAgIElkOiBzdHJpbmc7XG4gICAgVGV4dDogc3RyaW5nO1xufVxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdic3UtdWktbGluZWFyLWxpc3QtY29udGFpbmVyLXdpdGgtYnV0dG9uJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdWktbGluZWFyLWxpc3QtY29udGFpbmVyLXdpdGgtYnV0dG9uLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi91aS1saW5lYXItbGlzdC1jb250YWluZXItd2l0aC1idXR0b24uY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBVaUxpbmVhckxpc3RDb250YWluZXJXaXRoQnV0dG9uQ29tcG9uZW50IGV4dGVuZHMgRGV2aWNlSW5mb0ZpZWxkQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgQFZpZXdDaGlsZChNdWx0aUlucHV0Q29tcG9uZW50KVxuICAgIG11bHRpSW5wdXRDb21wb25lbnQ6IE11bHRpSW5wdXRDb21wb25lbnQ7XG4gICAgQFZpZXdDaGlsZCgnY29udGFpbmVyJywgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICAgIGRpYWxvZ0NvbnRhaW5lcjogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBASW5wdXQoKSBzZXQgVWx2VWkodmFsOiB7IFNldHRpbmc6IFJlcG9ydE1vZGVsIH0pIHtcbiAgICAgICAgaWYgKHZhbCkge1xuICAgICAgICAgICAgY29uc3QgbW9MaXN0ID0gdmFsLlNldHRpbmcuRGF0YS5Nb0RhdGFMaXN0O1xuICAgICAgICAgICAgdGhpcy5kcm9wRG93blZhbHVlc1NvdXJjZS5uZXh0KG1vTGlzdCk7XG4gICAgICAgICAgICB0aGlzLl91bHZVaSA9IHZhbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBtb2JpbGUgPSBmYWxzZTtcbiAgICBkcm9wRG93blZhbHVlc1NvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWV0YW9iamVjdERhdGFNb2RlbFtdPihbXSk7XG4gICAgZHJvcERvd25WYWx1ZXMkID0gdGhpcy5kcm9wRG93blZhbHVlc1NvdXJjZS5hc09ic2VydmFibGUoKS5waXBlKFxuICAgICAgICBtYXAoKG1vTGlzdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdCA9IG1vTGlzdC5maWx0ZXIoKGMpID0+IHRoaXMudmFsdWUuZmluZCgoZCkgPT4gZC5JZCA9PT0gYy5JZCkgPT09IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICByZXR1cm4gdDtcbiAgICAgICAgfSksXG4gICAgICAgIHRhcChcbiAgICAgICAgICAgIChtb0xpc3QpID0+XG4gICAgICAgICAgICAgICAgKHRoaXMuZmlyc3RJdGVtID0ge1xuICAgICAgICAgICAgICAgICAgICAkQ2FwdGlvbjogbW9MaXN0WzBdPy4kQ2FwdGlvbixcbiAgICAgICAgICAgICAgICAgICAgSWQ6IG1vTGlzdFswXT8uSWQsXG4gICAgICAgICAgICAgICAgICAgIFRleHQ6IG1vTGlzdFswXT8uJENhcHRpb24sXG4gICAgICAgICAgICAgICAgICAgIERhdGE6IG1vTGlzdFswXVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICApO1xuICAgIHNlbGVjdGVkOiBhbnlbXTtcbiAgICByZXBvcnQgPSBudWxsO1xuICAgIHRlcm0gPSAnJztcbiAgICB0ZXJtU291cmNlID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuICAgIG9yaWdpbmFsTW9MaXN0OiBMaW5lYXJJdGVtTW9bXTtcbiAgICB2YWx1ZTogTGluZWFySXRlbU1vW107XG4gICAgcnRsID0gQmFyc2FBcGkuTG9naW5Gb3JtRGF0YS5Jc1J0bDtcbiAgICBkaWFsb2dSZWY6IERpYWxvZ1JlZjtcbiAgICBkaWFsb2dPcGVuOiBib29sZWFuO1xuICAgIGZpcnN0SXRlbTogTGluZWFySXRlbU1vO1xuXG4gICAgcHJpdmF0ZSBzaG93VWx2U291cmNlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICBwcml2YXRlIF91bHZVaTogeyBba2V5OiBzdHJpbmddOiBhbnk7IFNldHRpbmc6IFJlcG9ydE1vZGVsIH07XG4gICAgcHJpdmF0ZSBfdHJpZ2dlckNsaWNrZWQ6IGJvb2xlYW47XG5cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmVudGVyJywgWyckZXZlbnQnXSlcbiAgICBvbktleUVudGVyKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy50ZXJtKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZHJvcERvd25WYWx1ZXNTb3VyY2UuZ2V0VmFsdWUoKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmVDb250ZXh0RXZlbnQoJ1JlcXVlc3RDb21tYW5kJywgdGhpcy5jb250ZXh0LCAnTmV3Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5hcnJvd2Rvd24nLCBbJyRldmVudCddKVxuICAgIG9uS2V5RG93bigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnRlcm0gJiYgdGhpcy5oaWRkZW4oKSkge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpcmVFdmVudCgnUmVxdWVzdEZpbHRlcjInKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmVzYycsIFsnJGV2ZW50J10pXG4gICAgb25LZXlFc2MoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NoYW5nZURyb3BEb3duT3BlblN0YXRlKGZhbHNlKTtcbiAgICB9XG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2hvd1VsdlNvdXJjZVxuICAgICAgICAgICAgLmFzT2JzZXJ2YWJsZSgpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuX29wZW5VbHYoKSk7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIHRoaXMucmVwb3J0ID0gdGhpcy5TZXR0aW5nLlJlcG9ydDtcblxuICAgICAgICB0aGlzLm9yaWdpbmFsTW9MaXN0ID0gWy4uLnRoaXMudmFsdWVdO1xuICAgICAgICB0aGlzLnRlcm1Tb3VyY2VcbiAgICAgICAgICAgIC5hc09ic2VydmFibGUoKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpLFxuICAgICAgICAgICAgICAgIHRhcCgodGVybSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRlcm0gPSB0ZXJtO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRlcm0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHJvcERvd25WYWx1ZXNTb3VyY2UubmV4dChbXSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlyZUV2ZW50KCdSZXF1ZXN0RmlsdGVyJywgdGVybSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIG9uU2VhcmNoVGVybUNoYW5nZSh0ZXJtOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50ZXJtU291cmNlLm5leHQodGVybSk7XG4gICAgfVxuICAgIG9uT3BlblJlcG9ydCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdHJpZ2dlckNsaWNrZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnRlcm1Tb3VyY2UubmV4dCgnJyk7XG4gICAgICAgIHRoaXMuY29udGV4dC5maXJlRXZlbnQoJ1RyaWdnZXJDbGljaycsIHRoaXMuY29udGV4dCk7XG4gICAgfVxuXG4gICAgb25TZWxlY3RlZENoYW5nZShhcnI6IExpbmVhckl0ZW1Nb1tdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkQ2hhbmdlZChhcnIpO1xuICAgIH1cbiAgICBvblJlbW92ZVNlbGVjdGVkKG1vKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3JlbW92ZUZyb21TZWxlY3RlZChtbyk7XG4gICAgfVxuICAgIG9uRGlzbWlzcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2xvc2VEaWFsb2coKTtcbiAgICB9XG5cbiAgICBvbk9rKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zZWxlY3RlZENoYW5nZWQodGhpcy5kaWFsb2dSZWYuZGF0YS5zZWxlY3RlZEl0ZW1zKTtcbiAgICAgICAgdGhpcy5fY2xvc2VEaWFsb2coKTtcbiAgICB9XG4gICAgb25DbGVhcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuZGF0YS51bHZVaS52aWV3ZXJDb250cm9sLkNsZWFyQWxsU2VsZWN0ZWQoKTtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuZGF0YS5zZWxlY3RlZEl0ZW1zID0gW107XG4gICAgfVxuICAgIF90cmFja0J5U2VsZWN0ZWRGbihfaW5kZXg6IG51bWJlciwgaXRlbTogTWV0YW9iamVjdERhdGFNb2RlbCk6IG51bWJlciB8IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBpdGVtLklkO1xuICAgIH1cblxuICAgIGRpc3BsYXlGdW5jKG9iajogYW55KTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIG9iai5UZXh0ID8/IG9iai4kQ2FwdGlvbjtcbiAgICB9XG4gICAgX3NldFZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vcmlnaW5hbE1vTGlzdCA9IFsuLi52YWx1ZV07XG4gICAgICAgIHN1cGVyLl9zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgfVxuICAgIC8qIGVzbGludC1kaXNhYmxlICovXG4gICAgQElucHV0KCkgR2V0VGV4dEl0ZW1WYWx1ZSA9ICgpID0+IHRoaXMudGVybTtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAgIEBJbnB1dCgpIHNob3cgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuX29wZW5VbHYoKTtcbiAgICB9O1xuICAgIC8qIGVzbGludC1kaXNhYmxlICovXG4gICAgQElucHV0KCkgaGlkZSA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbmdlRHJvcERvd25PcGVuU3RhdGUoZmFsc2UpO1xuICAgIH07XG4gICAgLyogZXNsaW50LWRpc2FibGUgKi9cbiAgICBASW5wdXQoKSBoaWRkZW4gPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm11bHRpSW5wdXRDb21wb25lbnQgJiYgIXRoaXMubXVsdGlJbnB1dENvbXBvbmVudC5vcGVuICYmICF0aGlzLmRpYWxvZ09wZW47XG4gICAgfTtcbiAgICBASW5wdXQoKSBHZXRTZWxlY3Rpb25EYXRhID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tdWx0aUlucHV0Q29tcG9uZW50LnNlbGVjdGVkO1xuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAgIH07XG4gICAgcHJpdmF0ZSBfY2hhbmdlRHJvcERvd25PcGVuU3RhdGUodmFsOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLm11bHRpSW5wdXRDb21wb25lbnQpIHtcbiAgICAgICAgICAgIHRoaXMubXVsdGlJbnB1dENvbXBvbmVudC5vcGVuID0gdmFsO1xuICAgICAgICB9XG4gICAgfVxuICAgIHByaXZhdGUgX29wZW5VbHYoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnJlcG9ydCAmJiAhdGhpcy50ZXJtICYmIHRoaXMuX3RyaWdnZXJDbGlja2VkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kaWFsb2dPcGVuIHx8ICF0aGlzLl91bHZVaSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHZpZXc6IGFueSA9IHRoaXMuX3VsdlVpLlNldHRpbmcuVmlldztcbiAgICAgICAgICAgIHZpZXcuSXNDaGVja0xpc3QgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5kaWFsb2dPcGVuID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbnN0IGRldmljZVNpemUgPSB0aGlzLl9wb3J0YWxTZXJ2aWNlLmRldmljZVNpemU7XG4gICAgICAgICAgICBjb25zdCBsYXJnZVNjcmVlbiA9IGRldmljZVNpemUgPT09ICdsJyB8fCBkZXZpY2VTaXplID09PSAneGwnO1xuICAgICAgICAgICAgY29uc3QgZGlhbG9nQ29uZmlnOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge1xuICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgdWx2VWk6IHRoaXMuX3VsdlVpLFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGhpcy5fYmJiUGlwZS50cmFuc2Zvcm0oJ1NlbGVjdCcpLFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW1zOiBbLi4udGhpcy5vcmlnaW5hbE1vTGlzdF1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVzY0tleUNsb3NlYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgZGlhbG9nUGFuZWxDbGFzczogYHVsdi1zZWxlY3Rpb24tZm9ybS1kaWFsb2cgJHtkZXZpY2VTaXplID8gJ3Vsdi1zZWxlY3Rpb24tZm9ybS1kaWFsb2ctbW9iaWxlJyA6ICcnfWBcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAobGFyZ2VTY3JlZW4pIHtcbiAgICAgICAgICAgICAgICBkaWFsb2dDb25maWcud2lkdGggPSAnNjB2dyc7XG4gICAgICAgICAgICAgICAgZGlhbG9nQ29uZmlnLmhlaWdodCA9ICc2MHZoJztcbiAgICAgICAgICAgICAgICBkaWFsb2dDb25maWcubWluV2lkdGggPSAnNjAwJztcbiAgICAgICAgICAgICAgICBkaWFsb2dDb25maWcubWluSGVpZ2h0ID0gJzM2MCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRpYWxvZ0NvbmZpZy5tb2JpbGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGRpYWxvZ0NvbmZpZy5mdWxsU2NyZWVuID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl91bHZVaT8uU2V0dGluZz8uRXh0cmE/LkRlZmF1bHRDb21tYW5kc0FjY2Vzcz8uVmlldykge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VsdlVpLlNldHRpbmcuRXh0cmEuRGVmYXVsdENvbW1hbmRzQWNjZXNzLlZpZXcgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRhdGFTZXR0aW5nID0gdGhpcy5fdWx2VWkuU2V0dGluZy5EYXRhO1xuICAgICAgICAgICAgaWYgKGxhcmdlU2NyZWVuICYmIGRhdGFTZXR0aW5nKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGFTZXR0aW5nLlBhZ2luZz8uSGFzUGFnaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpYWxvZ0NvbmZpZy5oZWlnaHQgPSAnMTAwdmgnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRpYWxvZ0NvbmZpZy5oZWlnaHQgPSBkYXRhU2V0dGluZy5Nb0RhdGFMaXN0Lmxlbmd0aCA+IDEwID8gJzEwMHZoJyA6ICc2MHZoJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLl9kaWFsb2dTZXJ2aWNlLm9wZW4odGhpcy5kaWFsb2dDb250YWluZXIsIGRpYWxvZ0NvbmZpZyk7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5fdWx2VWkuJFJlZ2lzdGVyRXZlbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91bHZVaS4kUmVnaXN0ZXJFdmVudCA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl91bHZVaS52aWV3ZXJDb250cm9sLm9uKHtcbiAgICAgICAgICAgICAgICAgICAgYWZ0ZXJyZW5kZXI6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VsdlVpLnZpZXdlckNvbnRyb2wuQ2xlYXJBbGxTZWxlY3RlZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdWx2VWkudmlld2VyQ29udHJvbC5zZWxlY3RSZWNvcmRzKHRoaXMub3JpZ2luYWxNb0xpc3QpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICByb3dTZWxlY3RBbGw6IChjb250ZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LlNldHRpbmcuRGF0YS5Nb0RhdGFMaXN0LmZvckVhY2goKG1vKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWRkTW9Ub1NlbGVjdGVkKG1vKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICByb3dEZXNlbGVjdEFsbDogKGNvbnRleHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuU2V0dGluZy5EYXRhLk1vRGF0YUxpc3QuZm9yRWFjaCgobW8pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZW1vdmVGcm9tU2VsZWN0ZWQobW8pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHJvd3NlbGVjdDogKHNlbmRlciwgaW5kZXgsIG1vKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZGRNb1RvU2VsZWN0ZWQobW8pO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICByb3dkZXNlbGVjdDogKHNlbmRlciwgaW5kZXgsIG1vKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZW1vdmVGcm9tU2VsZWN0ZWQobW8pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1JlZiA9IGRpYWxvZ1JlZjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZURyb3BEb3duT3BlblN0YXRlKHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY2xvc2VEaWFsb2coKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RyaWdnZXJDbGlja2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZGlhbG9nT3BlbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2FkZE1vVG9TZWxlY3RlZChtbzogYW55KTogdm9pZCB7XG4gICAgICAgIGlmICghbW8pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuZGlhbG9nUmVmLmRhdGEuc2VsZWN0ZWRJdGVtcztcbiAgICAgICAgaWYgKCFzZWxlY3RlZC5maW5kKChjKSA9PiBjLklkID09PSBtby5JZCkpIHtcbiAgICAgICAgICAgIHNlbGVjdGVkLnB1c2goe1xuICAgICAgICAgICAgICAgIElkOiBtby5JZCxcbiAgICAgICAgICAgICAgICBUZXh0OiBtby4kQ2FwdGlvbixcbiAgICAgICAgICAgICAgICBEYXRhOiBtbyxcbiAgICAgICAgICAgICAgICAkQ2FwdGlvbjogbW8uJENhcHRpb25cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVtb3ZlRnJvbVNlbGVjdGVkKG1vOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLmRpYWxvZ1JlZi5kYXRhLnNlbGVjdGVkSXRlbXMuZmlsdGVyKChjKSA9PiBjLklkICE9PSBtby5JZCk7XG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmRhdGEuc2VsZWN0ZWRJdGVtcyA9IHNlbGVjdGVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3NlbGVjdGVkQ2hhbmdlZChhcnI6IExpbmVhckl0ZW1Nb1tdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRlbGV0ZWRJdGVtczogTWV0YW9iamVjdERhdGFNb2RlbFtdID0gW107XG4gICAgICAgIGNvbnN0IGFkZGVkSXRlbXM6IE1ldGFvYmplY3REYXRhTW9kZWxbXSA9IFtdO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgICAgIHZhbHVlLmZvckVhY2goKG1vKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZE1vID0gYXJyLmZpbmQoKGMpID0+IGMuSWQgPT09IG1vLklkKTtcbiAgICAgICAgICAgIGlmICghc2VsZWN0ZWRNbykge1xuICAgICAgICAgICAgICAgIG1vLkRhdGEuJElzQ2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGRlbGV0ZWRJdGVtcy5wdXNoKG1vLkRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgYXJyLmZvckVhY2goKG1vKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZE1vID0gdmFsdWUuZmluZCgoYykgPT4gYy5JZCA9PT0gbW8uSWQpO1xuICAgICAgICAgICAgaWYgKCFzZWxlY3RlZE1vKSB7XG4gICAgICAgICAgICAgICAgYWRkZWRJdGVtcy5wdXNoKG1vLkRhdGEgfHwgbW8pO1xuICAgICAgICAgICAgICAgIG1vLiRJc0NoZWNrZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoZGVsZXRlZEl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZUNvbnRleHRFdmVudCgnUmVxdWVzdENvbW1hbmQnLCB0aGlzLmNvbnRleHQsICdEZWxldGUnLCBkZWxldGVkSXRlbXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhZGRlZEl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZUNvbnRleHRFdmVudCgnUmVxdWVzdENvbW1hbmQnLCB0aGlzLmNvbnRleHQsICdBZGQnLCBhZGRlZEl0ZW1zKTtcbiAgICAgICAgICAgIC8vIHRoaXMuX3VsdlVpLnZpZXdlckNvbnRyb2wuZmlyZUV2ZW50KCdyb3djbGljaycpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NoYW5nZURyb3BEb3duT3BlblN0YXRlKGZhbHNlKTtcbiAgICB9XG59XG4iLCI8ZmQtbXVsdGktaW5wdXRcclxuICAgIFtpbnB1dElkXT1cImlkXCJcclxuICAgIFtjbGFzcy5jb250cm9sLXJlYWRvbmx5XT1cIihyZWFkb25seSQgfCBhc3luYykgPT09IHRydWVcIlxyXG4gICAgW2Ryb3Bkb3duVmFsdWVzXT1cIihkcm9wRG93blZhbHVlcyQgfCBhc3luYykhIVwiXHJcbiAgICBbcGxhY2Vob2xkZXJdPVwiJ0VudGVyU2VhcmNoQ3JpdGVyaWEnIHwgYmJiVHJhbnNsYXRlXCJcclxuICAgIFtuZ01vZGVsXT1cIm9yaWdpbmFsTW9MaXN0XCJcclxuICAgIFtkaXNwbGF5Rm5dPVwiZGlzcGxheUZ1bmNcIlxyXG4gICAgW3Nob3dBbGxCdXR0b25dPVwiZmFsc2VcIlxyXG4gICAgW2Rpc3BsYXlBZGRvbkJ1dHRvbl09XCJmYWxzZVwiXHJcbiAgICBbYWxsb3dOZXdUb2tlbnNdPVwiZmFsc2VcIlxyXG4gICAgW2luY2x1ZGVzXT1cImZhbHNlXCJcclxuICAgIFtkaXNhYmxlZF09XCIoZGlzYWJsZSQgfCBhc3luYykgPT09IHRydWVcIlxyXG4gICAgKHNlYXJjaFRlcm1DaGFuZ2UpPVwib25TZWFyY2hUZXJtQ2hhbmdlKCRldmVudClcIlxyXG4gICAgKHNlbGVjdGVkQ2hhbmdlKT1cIm9uU2VsZWN0ZWRDaGFuZ2UoJGV2ZW50KVwiXHJcbj48L2ZkLW11bHRpLWlucHV0PlxyXG48IS0tIDxmZHAtbXVsdGktaW5wdXRcclxuW3BsYWNlaG9sZGVyXT1cIidFbnRlclNlYXJjaENyaXRlcmlhJ3xiYmJUcmFuc2xhdGVcIlxyXG50eXBlPVwidGV4dFwiXHJcbltpZF09XCJpZFwiXHJcbltkYXRhU291cmNlXT1cIihkcm9wRG93blZhbHVlcyQgfCBhc3luYykhIVwiXHJcbihzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3RlZENoYW5nZSgkZXZlbnQpXCJcclxuZGlzcGxheUtleT1cIiRDYXB0aW9uXCJcclxuW2F1dG9mb2N1c109XCJ0cnVlXCJcclxuXHJcbj5cclxuPC9mZHAtbXVsdGktaW5wdXQ+IC0tPlxyXG48YnV0dG9uXHJcbiAgICAqbmdJZj1cInJlcG9ydFwiXHJcbiAgICBmZC1idXR0b25cclxuICAgIFthdHRyLnJ0bF09XCJydGxcIlxyXG4gICAgW2FyaWEtbGFiZWxdPVwiJ0FkdmFuY2VkJyB8IGJiYlRyYW5zbGF0ZVwiXHJcbiAgICBnbHlwaD1cInZhbHVlLWhlbHBcIlxyXG4gICAgW2Rpc2FibGVkXT1cIihkaXNhYmxlT3JSZWFkb25seSQgfCBhc3luYykhIVwiXHJcbiAgICAoY2xpY2spPVwib25PcGVuUmVwb3J0KClcIlxyXG4+PC9idXR0b24+XHJcblxyXG48bmctdGVtcGxhdGUgbGV0LWRpYWxvZyBsZXQtZGlhbG9nQ29uZmlnPVwiZGlhbG9nQ29uZmlnXCIgI2NvbnRhaW5lcj5cclxuICAgIDxmZC1kaWFsb2cgW2RpYWxvZ0NvbmZpZ109XCJkaWFsb2dDb25maWdcIiBbZGlhbG9nUmVmXT1cImRpYWxvZ1wiICNkaWFsb2dUcGw+XHJcbiAgICAgICAgPGZkLWRpYWxvZy1oZWFkZXI+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBmZFRlbXBsYXRlPVwiaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGZkLWJhci1sZWZ0PlxyXG4gICAgICAgICAgICAgICAgICAgIDxmZC1iYXItZWxlbWVudD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGgxIGlkPVwiZmQtZGlhbG9nLWhlYWRlci0zXCIgZmQtdGl0bGU+e3sgZGlhbG9nLmRhdGEudGl0bGUgfX08L2gxPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZmQtYmFyLWVsZW1lbnQ+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgZmQtYmFyLXJpZ2h0PlxyXG4gICAgICAgICAgICAgICAgICAgIDxmZC1idXR0b24tYmFyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZGlhbG9nQ29uZmlnLmhlaWdodCAhPT0gJzEwMHZoJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWFMYWJlbD1cImZ1bGxzY3JlZW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZ2x5cGhdPVwiZGlhbG9nLmRhdGEuZnVsbHNjcmVlbiA/ICdleGl0ZnVsbHNjcmVlbicgOiAncmVzaXplJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxzY3JlZW5EaWFsb2dcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2RpYWxvZ109XCJkaWFsb2dcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlhbG9nQ29tcG9uZW50XT1cImRpYWxvZ1RwbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgPjwvZmQtYnV0dG9uLWJhcj5cclxuICAgICAgICAgICAgICAgICAgICA8ZmQtYnV0dG9uLWJhciBhcmlhTGFiZWw9XCJjbG9zZVwiIGdseXBoPVwiZGVjbGluZVwiIChjbGljayk9XCJvbkRpc21pc3MoKVwiPjwvZmQtYnV0dG9uLWJhcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8IS0tIDxoMyBmZC10aXRsZT57eyBkaWFsb2cuZGF0YS50aXRsZSB9fTwvaDM+XHJcbiAgICAgIDxidXR0b24gZmQtZGlhbG9nLWNsb3NlLWJ1dHRvbj48L2J1dHRvbj4gLS0+XHJcbiAgICAgICAgPC9mZC1kaWFsb2ctaGVhZGVyPlxyXG4gICAgICAgIDxmZC1kaWFsb2ctYm9keT5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRpYWxvZy5kYXRhLnVsdlVpIGFzIHVsdlVpXCI+XHJcbiAgICAgICAgICAgICAgICA8YnN1LXVpLXVsdi1tYWluLXVpIFtjb250ZXh0XT1cInVsdlVpXCIgY2xhc3M9XCJsaW5lYXItbGlzdC1zZWxlY3Rpb25cIj48L2JzdS11aS11bHYtbWFpbi11aT5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9mZC1kaWFsb2ctYm9keT5cclxuXHJcbiAgICAgICAgPGZkLWRpYWxvZy1mb290ZXIgY2xhc3M9XCJsaW5lYXItZm9vdGVyXCI+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBmZFRlbXBsYXRlPVwiZm9vdGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ1bHYtc2VsZWN0aW9uLWZvcm0tZGlhbG9nX19yb3cgdWx2LXNlbGVjdGlvbi1mb3JtLWRpYWxvZ19fc2VsZWN0aW9uLXJvd1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2FyaWEtbGFiZWxdPVwiJ1NlbGVjdGVkSXRlbXNBbmRDb25kaXRpb25zJyB8IGJiYlRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPGg1IGZkLXRpdGxlIGNsYXNzPVwic2VsZWN0ZWQtYW5kLWNvbmRpdGlvbi10aXRsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj57eyAnU2VsZWN0ZWRJdGVtc0FuZENvbmRpdGlvbnMnIHwgYmJiVHJhbnNsYXRlIH19IDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHt7IGRpYWxvZy5kYXRhLnNlbGVjdGVkSXRlbXM/Lmxlbmd0aCB8fCAwIH19KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2g1PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidWx2LXNlbGVjdGlvbi1mb3JtLWRpYWxvZ19fdG9rZW5zLXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVsdi1zZWxlY3Rpb24tZm9ybS1kaWFsb2dfX3Rva2Vuc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZkLXRvb2xiYXIgKm5nSWY9XCJkaWFsb2cuZGF0YS5zZWxlY3RlZEl0ZW1zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTZWxlY3RlZCBpdGVtcyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmQtdG9rZW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmQtdG9vbGJhci1pdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkT3ZlcmZsb3dQcmlvcml0eT1cImhpZ2hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkcC12YWx1ZS1oZWxwLWRpYWxvZ19fc2VsZWN0aW9uLXRva2VuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2xvc2VDbGljayk9XCJvblJlbW92ZVNlbGVjdGVkKGl0ZW0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaXRlbSBvZiBkaWFsb2cuZGF0YS5zZWxlY3RlZEl0ZW1zO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggYXMgc2VsZWN0ZWRJbmRleDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrQnk6IF90cmFja0J5U2VsZWN0ZWRGblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+e3sgaXRlbS5UZXh0IH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mZC10b2tlbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmQtdG9vbGJhcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidWx2LXNlbGVjdGlvbi1mb3JtLWRpYWxvZ19fdG9rZW5zLWNsZWFyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGg9XCJkZWNsaW5lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcmlhLWxhYmVsXT1cIidDbGVhcicgfCBiYmJUcmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xlYXIoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVsdi1zZWxlY3Rpb24tZm9ybS1kaWFsb2dfX2FjdGlvbnMtcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1zdWNjZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidPSycgfCBiYmJUcmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmZFR5cGU9XCJlbXBoYXNpemVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uT2soKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZGlzbWlzcy1kaWFsb2dcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmQtZGlhbG9nLWRlY2lzaXZlLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ0NhbmNlbCcgfCBiYmJUcmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkRpc21pc3MoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9mZC1kaWFsb2ctZm9vdGVyPlxyXG4gICAgPC9mZC1kaWFsb2c+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
@@ -0,0 +1,44 @@
1
+ import { ChangeDetectionStrategy, Component } from '@angular/core';
2
+ import { ReportViewBaseComponent, enumValueToStringSize } from 'barsa-novin-ray-core';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ import * as i2 from "@angular/forms";
6
+ import * as i3 from "barsa-novin-ray-core";
7
+ import * as i4 from "@fundamental-ngx/core/checkbox";
8
+ import * as i5 from "@fundamental-ngx/core/icon";
9
+ import * as i6 from "@fundamental-ngx/core/layout-panel";
10
+ import * as i7 from "@fundamental-ngx/core/list";
11
+ import * as i8 from "@fundamental-ngx/core/table";
12
+ import * as i9 from "../no-data/no-data.component";
13
+ import * as i10 from "../list-item/list-item.component";
14
+ export class UiListViewComponent extends ReportViewBaseComponent {
15
+ ngOnInit() {
16
+ super.ngOnInit();
17
+ this.isDisplayType = this.viewSetting.ItemType$Caption === 'Display';
18
+ const viewSetting = this.viewSetting;
19
+ const findColumn = this._findColumnByDbName;
20
+ this.avatarSize = enumValueToStringSize(viewSetting.AvatarSize, this.contentDensity === 'compact' ? 's' : 'm');
21
+ this.listSetting = {
22
+ ...viewSetting,
23
+ TitleField: findColumn.transform(this.allColumns, viewSetting.Title),
24
+ SubtitleField: findColumn.transform(this.allColumns, viewSetting.Subtitle) ?? '',
25
+ CounterField: findColumn.transform(this.allColumns, viewSetting.Counter) ?? '',
26
+ AvatarField: findColumn.transform(this.allColumns, viewSetting.Avatar),
27
+ StatusField: findColumn.transform(this.allColumns, viewSetting.Status),
28
+ DescriptionField: findColumn.transform(this.allColumns, viewSetting.Description)
29
+ };
30
+ }
31
+ onListCheckboxClick(mo, index) {
32
+ this.rowCheck.emit({ mo, index });
33
+ }
34
+ onListNavigationClick(mo, index) {
35
+ this.rowClick.emit({ mo, index });
36
+ }
37
+ }
38
+ UiListViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UiListViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
39
+ UiListViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: UiListViewComponent, selector: "bsu-ui-list-view", usesInheritance: true, ngImport: i0, template: "<fd-layout-panel>\n <fd-layout-panel-body [bleed]=\"true\">\n <table fd-table *ngIf=\"isCheckList\">\n <thead fd-table-header>\n <tr fd-table-row>\n <th fd-table-cell>\n <fd-checkbox\n name=\"allCheckbox\"\n [ngModel]=\"allChecked\"\n (ngModelChange)=\"onAllCheckbox($event)\"\n >{{ 'All' | bbbTranslate }}</fd-checkbox\n >\n </th>\n </tr>\n </thead>\n </table>\n <ng-container\n *ngTemplateOutlet=\"\n isDisplayType ? displayListTemplate : standardListTemplate;\n context: {\n $implicit: moDataList,\n isCheckList: isCheckList,\n groupby: groupby,\n conditionalFormats: conditionalFormats,\n deviceName: deviceName,\n viewSetting: viewSetting,\n allColumns: allColumns,\n access: access,\n rtl: rtl\n }\n \"\n >\n </ng-container>\n </fd-layout-panel-body>\n</fd-layout-panel>\n<!--display list-->\n<ng-template\n #displayListTemplate\n let-moDataList\n let-isCheckList=\"isCheckList\"\n let-groupby=\"groupby\"\n let-conditionalFormats=\"conditionalFormats\"\n let-deviceName=\"deviceName\"\n let-allColumns=\"allColumns\"\n let-viewSetting=\"viewSetting\"\n let-access=\"access\"\n let-rtl=\"rtl\"\n>\n <ul\n fd-list\n class=\"display-list fd-list--navigation\"\n *ngIf=\"moDataList && moDataList.length > 0; else noData\"\n ellipsify\n >\n <ng-container *ngFor=\"let mo of moDataList | multipleGroupBy: groupby; let index = index\">\n <ng-container *ngIf=\"!mo.parent || mo.parent?.expanded\">\n <ng-container *ngTemplateOutlet=\"itemTemplate; context: { $implicit: mo, index: index }\"></ng-container>\n </ng-container>\n </ng-container>\n </ul>\n</ng-template>\n<!--standard list-->\n<ng-template\n #standardListTemplate\n let-moDataList\n let-isCheckList=\"isCheckList\"\n let-groupby=\"groupby\"\n let-conditionalFormats=\"conditionalFormats\"\n let-allColumns=\"allColumns\"\n let-deviceName=\"deviceName\"\n let-access=\"access\"\n let-viewSetting=\"viewSetting\"\n let-rtl=\"rtl\"\n>\n <ul\n class=\"fd-list--navigation\"\n [class.fd-list--byline]=\"!isDisplayType\"\n fd-list\n [byline]=\"true\"\n *ngIf=\"moDataList && moDataList.length > 0; else noData\"\n ellipsify\n >\n <ng-container *ngFor=\"let mo of moDataList | multipleGroupBy: groupby; let index = index\">\n <ng-container *ngIf=\"!mo.parent || mo.parent?.expanded\" [isRow]=\"true\">\n <ng-container *ngTemplateOutlet=\"itemTemplate; context: { $implicit: mo, index: index }\"></ng-container>\n </ng-container>\n </ng-container>\n </ul>\n</ng-template>\n\n<!--noData-->\n<ng-template #noData>\n <bsu-no-data></bsu-no-data>\n</ng-template>\n<ng-template #itemTemplate let-mo let-index=\"index\">\n <li\n fd-list-group-header\n *ngIf=\"mo.group || mo.group === ''; else listItemTemplate\"\n [style.padding-right]=\"'calc( 1rem + ' + mo.level * 12 + 'px' + ' )'\"\n [attr.level]=\"mo.level\"\n [class.root-group]=\"mo.level === 0\"\n >\n <fd-icon\n [glyph]=\"mo.expanded ? 'navigation-down-arrow' : 'navigation-left-arrow'\"\n class=\"cell-expand\"\n (click)=\"onExpandClick(mo)\"\n ></fd-icon>\n <span fd-list-title>{{ mo.group }}</span>\n </li>\n <ng-template #listItemTemplate>\n <bsu-list-item\n [isDisplayType]=\"isDisplayType\"\n [mo]=\"mo\"\n [isChecked]=\"mo.$IsChecked\"\n [isNewInlineMo]=\"mo.$NewInlineMo\"\n [index]=\"index\"\n [setting]=\"listSetting\"\n [editMode]=\"inlineEditMode\"\n [rtl]=\"rtl\"\n [deviceName]=\"deviceName\"\n [deviceSize]=\"deviceSize\"\n [index]=\"index\"\n [formSetting]=\"formSetting\"\n [allColumns]=\"allColumns\"\n [contentDensity]=\"contentDensity\"\n [contextMenuItems]=\"contextMenuItems\"\n [canView]=\"canView\"\n [conditionalFormats]=\"conditionalFormats\"\n [disableOverflowContextMenu]=\"disableOverflowContextMenu\"\n [navigationArrow]=\"navigationArrow\"\n [isCheckList]=\"isCheckList\"\n (rowCheck)=\"onRowCheck($event)\"\n (rowClick)=\"onRowClick($event)\"\n (ulvCommand)=\"onUlvCommand($event)\"\n (editFormPanelSave)=\"onEditFormPanelSave($event)\"\n (editFormPanelCancel)=\"onEditFormPanelCancel($event)\"\n >\n </bsu-list-item>\n </ng-template>\n</ng-template>\n", styles: [".fd-list__group-header{column-gap:10px;align-items:center}.display-list .fd-list__secondary{display:flex;justify-content:flex-end;align-items:center;color:var(--sapTile_TextColor, #6a6d70);column-gap:3px;row-gap:3px}.fd-list--navigation-indication .fd-list__item:after{min-width:0!important}li.standard-list-row{padding-top:.2rem;padding-bottom:.2rem;min-height:4rem;justify-content:space-evenly;column-gap:10px}li.standard-list-row:hover:not(.selected){background-color:var(--sapBackgroundColor, #f7f7f7)}li.standard-list-row .fd-list__content{row-gap:.4rem}li.standard-list-row .fd-list__content .fd-list__byline{padding:0;font-size:.775rem}li.standard-list-row ::ng-deep .fd-form-item{position:static}li.standard-list-row ::ng-deep .fd-form-item .fd-checkbox__label--compact{padding:0;margin-left:0}li.standard-list-row ::ng-deep fd-icon{font-size:.75rem!important}fd-layout-panel{height:100%}.li-link.checklink[rtl=true]{padding-right:0!important}.li-link.checklist[rtl=false]{padding-left:0!important}.standard-list-group-label{padding-top:10px;padding-bottom:3px}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.EllipsifyDirective, selector: "[ellipsify]", inputs: ["limitLine"] }, { kind: "component", type: i4.CheckboxComponent, selector: "fd-checkbox", inputs: ["ariaLabel", "value", "ariaLabelledBy", "ariaDescribedBy", "title", "inputId", "state", "name", "label", "disabled", "tristate", "tristateSelectable", "labelClass", "required", "values"], outputs: ["focusChange"] }, { kind: "component", type: i5.IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "class", "ariaLabel"] }, { kind: "component", type: i6.LayoutPanelComponent, selector: "fd-layout-panel", inputs: ["backgroundImage"] }, { kind: "component", type: i6.LayoutPanelBodyComponent, selector: "fd-layout-panel-body", inputs: ["bleed"] }, { kind: "component", type: i7.ListComponent, selector: "[fd-list], [fdList]", inputs: ["dropdownMode", "multiInputMode", "mobileMode", "hasMessage", "noBorder", "navigationIndicator", "selection", "keyboardSupport", "byline"], outputs: ["focusEscapeList"] }, { kind: "directive", type: i7.ListTitleDirective, selector: "[fd-list-title], [fdListTitle]", inputs: ["wrap"] }, { kind: "directive", type: i7.ListGroupHeaderDirective, selector: "[fdListGroupHeader], [fd-list-group-header]", inputs: ["nativeElementId"], outputs: ["keyDown"] }, { kind: "component", type: i8.TableComponent, selector: "table[fd-table]", inputs: ["noBorderX", "noBorderY", "popIn", "responsive", "keys", "allCellsFocusable"], exportAs: ["fd-table"] }, { kind: "directive", type: i8.TableHeaderDirective, selector: "[fdTableHeader], [fd-table-header]", inputs: ["noBorderX", "noBorderY"] }, { kind: "directive", type: i8.TableRowDirective, selector: "[fdTableRow], [fd-table-row]", inputs: ["activable", "highlightActive", "hoverable", "focusable", "main", "secondary", "active"] }, { kind: "directive", type: i8.TableCellDirective, selector: "[fdTableCell], [fd-table-cell]", inputs: ["noBorderX", "noBorderY", "activable", "focusable", "tabindex", "hoverable", "fitContent", "noPadding", "noData", "key", "cellFocusedEventAnnouncer"] }, { kind: "component", type: i9.NoDataComponent, selector: "bsu-no-data" }, { kind: "component", type: i10.ListItemComponent, selector: "bsu-list-item", inputs: ["setting", "isDisplayType"] }, { kind: "pipe", type: i3.MultipleGroupByPipe, name: "multipleGroupBy" }, { kind: "pipe", type: i3.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
40
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UiListViewComponent, decorators: [{
41
+ type: Component,
42
+ args: [{ selector: 'bsu-ui-list-view', changeDetection: ChangeDetectionStrategy.OnPush, template: "<fd-layout-panel>\n <fd-layout-panel-body [bleed]=\"true\">\n <table fd-table *ngIf=\"isCheckList\">\n <thead fd-table-header>\n <tr fd-table-row>\n <th fd-table-cell>\n <fd-checkbox\n name=\"allCheckbox\"\n [ngModel]=\"allChecked\"\n (ngModelChange)=\"onAllCheckbox($event)\"\n >{{ 'All' | bbbTranslate }}</fd-checkbox\n >\n </th>\n </tr>\n </thead>\n </table>\n <ng-container\n *ngTemplateOutlet=\"\n isDisplayType ? displayListTemplate : standardListTemplate;\n context: {\n $implicit: moDataList,\n isCheckList: isCheckList,\n groupby: groupby,\n conditionalFormats: conditionalFormats,\n deviceName: deviceName,\n viewSetting: viewSetting,\n allColumns: allColumns,\n access: access,\n rtl: rtl\n }\n \"\n >\n </ng-container>\n </fd-layout-panel-body>\n</fd-layout-panel>\n<!--display list-->\n<ng-template\n #displayListTemplate\n let-moDataList\n let-isCheckList=\"isCheckList\"\n let-groupby=\"groupby\"\n let-conditionalFormats=\"conditionalFormats\"\n let-deviceName=\"deviceName\"\n let-allColumns=\"allColumns\"\n let-viewSetting=\"viewSetting\"\n let-access=\"access\"\n let-rtl=\"rtl\"\n>\n <ul\n fd-list\n class=\"display-list fd-list--navigation\"\n *ngIf=\"moDataList && moDataList.length > 0; else noData\"\n ellipsify\n >\n <ng-container *ngFor=\"let mo of moDataList | multipleGroupBy: groupby; let index = index\">\n <ng-container *ngIf=\"!mo.parent || mo.parent?.expanded\">\n <ng-container *ngTemplateOutlet=\"itemTemplate; context: { $implicit: mo, index: index }\"></ng-container>\n </ng-container>\n </ng-container>\n </ul>\n</ng-template>\n<!--standard list-->\n<ng-template\n #standardListTemplate\n let-moDataList\n let-isCheckList=\"isCheckList\"\n let-groupby=\"groupby\"\n let-conditionalFormats=\"conditionalFormats\"\n let-allColumns=\"allColumns\"\n let-deviceName=\"deviceName\"\n let-access=\"access\"\n let-viewSetting=\"viewSetting\"\n let-rtl=\"rtl\"\n>\n <ul\n class=\"fd-list--navigation\"\n [class.fd-list--byline]=\"!isDisplayType\"\n fd-list\n [byline]=\"true\"\n *ngIf=\"moDataList && moDataList.length > 0; else noData\"\n ellipsify\n >\n <ng-container *ngFor=\"let mo of moDataList | multipleGroupBy: groupby; let index = index\">\n <ng-container *ngIf=\"!mo.parent || mo.parent?.expanded\" [isRow]=\"true\">\n <ng-container *ngTemplateOutlet=\"itemTemplate; context: { $implicit: mo, index: index }\"></ng-container>\n </ng-container>\n </ng-container>\n </ul>\n</ng-template>\n\n<!--noData-->\n<ng-template #noData>\n <bsu-no-data></bsu-no-data>\n</ng-template>\n<ng-template #itemTemplate let-mo let-index=\"index\">\n <li\n fd-list-group-header\n *ngIf=\"mo.group || mo.group === ''; else listItemTemplate\"\n [style.padding-right]=\"'calc( 1rem + ' + mo.level * 12 + 'px' + ' )'\"\n [attr.level]=\"mo.level\"\n [class.root-group]=\"mo.level === 0\"\n >\n <fd-icon\n [glyph]=\"mo.expanded ? 'navigation-down-arrow' : 'navigation-left-arrow'\"\n class=\"cell-expand\"\n (click)=\"onExpandClick(mo)\"\n ></fd-icon>\n <span fd-list-title>{{ mo.group }}</span>\n </li>\n <ng-template #listItemTemplate>\n <bsu-list-item\n [isDisplayType]=\"isDisplayType\"\n [mo]=\"mo\"\n [isChecked]=\"mo.$IsChecked\"\n [isNewInlineMo]=\"mo.$NewInlineMo\"\n [index]=\"index\"\n [setting]=\"listSetting\"\n [editMode]=\"inlineEditMode\"\n [rtl]=\"rtl\"\n [deviceName]=\"deviceName\"\n [deviceSize]=\"deviceSize\"\n [index]=\"index\"\n [formSetting]=\"formSetting\"\n [allColumns]=\"allColumns\"\n [contentDensity]=\"contentDensity\"\n [contextMenuItems]=\"contextMenuItems\"\n [canView]=\"canView\"\n [conditionalFormats]=\"conditionalFormats\"\n [disableOverflowContextMenu]=\"disableOverflowContextMenu\"\n [navigationArrow]=\"navigationArrow\"\n [isCheckList]=\"isCheckList\"\n (rowCheck)=\"onRowCheck($event)\"\n (rowClick)=\"onRowClick($event)\"\n (ulvCommand)=\"onUlvCommand($event)\"\n (editFormPanelSave)=\"onEditFormPanelSave($event)\"\n (editFormPanelCancel)=\"onEditFormPanelCancel($event)\"\n >\n </bsu-list-item>\n </ng-template>\n</ng-template>\n", styles: [".fd-list__group-header{column-gap:10px;align-items:center}.display-list .fd-list__secondary{display:flex;justify-content:flex-end;align-items:center;color:var(--sapTile_TextColor, #6a6d70);column-gap:3px;row-gap:3px}.fd-list--navigation-indication .fd-list__item:after{min-width:0!important}li.standard-list-row{padding-top:.2rem;padding-bottom:.2rem;min-height:4rem;justify-content:space-evenly;column-gap:10px}li.standard-list-row:hover:not(.selected){background-color:var(--sapBackgroundColor, #f7f7f7)}li.standard-list-row .fd-list__content{row-gap:.4rem}li.standard-list-row .fd-list__content .fd-list__byline{padding:0;font-size:.775rem}li.standard-list-row ::ng-deep .fd-form-item{position:static}li.standard-list-row ::ng-deep .fd-form-item .fd-checkbox__label--compact{padding:0;margin-left:0}li.standard-list-row ::ng-deep fd-icon{font-size:.75rem!important}fd-layout-panel{height:100%}.li-link.checklink[rtl=true]{padding-right:0!important}.li-link.checklist[rtl=false]{padding-left:0!important}.standard-list-group-label{padding-top:10px;padding-bottom:3px}\n"] }]
43
+ }] });
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktbGlzdC12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLXNhcC11aS9zcmMvbGliL3VpLWxpc3Qtdmlldy91aS1saXN0LXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvdWktbGlzdC12aWV3L3VpLWxpc3Qtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRTNFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7Ozs7Ozs7QUFVdEYsTUFBTSxPQUFPLG1CQUFvQixTQUFRLHVCQUEwQztJQUsvRSxRQUFRO1FBQ0osS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTLENBQUM7UUFDckUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUNyQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7UUFDNUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxxQkFBcUIsQ0FDbkMsV0FBVyxDQUFDLFVBQVUsRUFDdEIsSUFBSSxDQUFDLGNBQWMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUN4QyxDQUFDO1FBRVYsSUFBSSxDQUFDLFdBQVcsR0FBRztZQUNmLEdBQUcsV0FBVztZQUNkLFVBQVUsRUFBRSxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQztZQUNwRSxhQUFhLEVBQUUsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFO1lBQ2hGLFlBQVksRUFBRSxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUU7WUFDOUUsV0FBVyxFQUFFLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDO1lBQ3RFLFdBQVcsRUFBRSxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLE1BQU0sQ0FBQztZQUN0RSxnQkFBZ0IsRUFBRSxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLFdBQVcsQ0FBQztTQUNuRixDQUFDO0lBQ04sQ0FBQztJQUVELG1CQUFtQixDQUFDLEVBQUUsRUFBRSxLQUFLO1FBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELHFCQUFxQixDQUFDLEVBQUUsRUFBRSxLQUFLO1FBQzNCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDdEMsQ0FBQzs7Z0hBaENRLG1CQUFtQjtvR0FBbkIsbUJBQW1CLCtFQ1poQyxpaktBNElBOzJGRGhJYSxtQkFBbUI7a0JBTi9CLFNBQVM7K0JBQ0ksa0JBQWtCLG1CQUdYLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNpemUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUnO1xuaW1wb3J0IHsgUmVwb3J0Vmlld0Jhc2VDb21wb25lbnQsIGVudW1WYWx1ZVRvU3RyaW5nU2l6ZSB9IGZyb20gJ2JhcnNhLW5vdmluLXJheS1jb3JlJztcblxuaW1wb3J0IHsgVWlMaXN0Vmlld1NldHRpbmcgfSBmcm9tICcuLi9tb2RlbHMvZ3JpZC12aWV3JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdic3UtdWktbGlzdC12aWV3JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdWktbGlzdC12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi91aS1saXN0LXZpZXcuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBVaUxpc3RWaWV3Q29tcG9uZW50IGV4dGVuZHMgUmVwb3J0Vmlld0Jhc2VDb21wb25lbnQ8VWlMaXN0Vmlld1NldHRpbmc+IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBsaXN0U2V0dGluZzogVWlMaXN0Vmlld1NldHRpbmc7XG4gICAgYXZhdGFyU2l6ZTogU2l6ZTtcbiAgICBpc0Rpc3BsYXlUeXBlOiBib29sZWFuO1xuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIHRoaXMuaXNEaXNwbGF5VHlwZSA9IHRoaXMudmlld1NldHRpbmcuSXRlbVR5cGUkQ2FwdGlvbiA9PT0gJ0Rpc3BsYXknO1xuICAgICAgICBjb25zdCB2aWV3U2V0dGluZyA9IHRoaXMudmlld1NldHRpbmc7XG4gICAgICAgIGNvbnN0IGZpbmRDb2x1bW4gPSB0aGlzLl9maW5kQ29sdW1uQnlEYk5hbWU7XG4gICAgICAgIHRoaXMuYXZhdGFyU2l6ZSA9IGVudW1WYWx1ZVRvU3RyaW5nU2l6ZShcbiAgICAgICAgICAgIHZpZXdTZXR0aW5nLkF2YXRhclNpemUsXG4gICAgICAgICAgICB0aGlzLmNvbnRlbnREZW5zaXR5ID09PSAnY29tcGFjdCcgPyAncycgOiAnbSdcbiAgICAgICAgKSBhcyBTaXplO1xuXG4gICAgICAgIHRoaXMubGlzdFNldHRpbmcgPSB7XG4gICAgICAgICAgICAuLi52aWV3U2V0dGluZyxcbiAgICAgICAgICAgIFRpdGxlRmllbGQ6IGZpbmRDb2x1bW4udHJhbnNmb3JtKHRoaXMuYWxsQ29sdW1ucywgdmlld1NldHRpbmcuVGl0bGUpLFxuICAgICAgICAgICAgU3VidGl0bGVGaWVsZDogZmluZENvbHVtbi50cmFuc2Zvcm0odGhpcy5hbGxDb2x1bW5zLCB2aWV3U2V0dGluZy5TdWJ0aXRsZSkgPz8gJycsXG4gICAgICAgICAgICBDb3VudGVyRmllbGQ6IGZpbmRDb2x1bW4udHJhbnNmb3JtKHRoaXMuYWxsQ29sdW1ucywgdmlld1NldHRpbmcuQ291bnRlcikgPz8gJycsXG4gICAgICAgICAgICBBdmF0YXJGaWVsZDogZmluZENvbHVtbi50cmFuc2Zvcm0odGhpcy5hbGxDb2x1bW5zLCB2aWV3U2V0dGluZy5BdmF0YXIpLFxuICAgICAgICAgICAgU3RhdHVzRmllbGQ6IGZpbmRDb2x1bW4udHJhbnNmb3JtKHRoaXMuYWxsQ29sdW1ucywgdmlld1NldHRpbmcuU3RhdHVzKSxcbiAgICAgICAgICAgIERlc2NyaXB0aW9uRmllbGQ6IGZpbmRDb2x1bW4udHJhbnNmb3JtKHRoaXMuYWxsQ29sdW1ucywgdmlld1NldHRpbmcuRGVzY3JpcHRpb24pXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgb25MaXN0Q2hlY2tib3hDbGljayhtbywgaW5kZXgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yb3dDaGVjay5lbWl0KHsgbW8sIGluZGV4IH0pO1xuICAgIH1cblxuICAgIG9uTGlzdE5hdmlnYXRpb25DbGljayhtbywgaW5kZXgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yb3dDbGljay5lbWl0KHsgbW8sIGluZGV4IH0pO1xuICAgIH1cbn1cbiIsIjxmZC1sYXlvdXQtcGFuZWw+XG4gICAgPGZkLWxheW91dC1wYW5lbC1ib2R5IFtibGVlZF09XCJ0cnVlXCI+XG4gICAgICAgIDx0YWJsZSBmZC10YWJsZSAqbmdJZj1cImlzQ2hlY2tMaXN0XCI+XG4gICAgICAgICAgICA8dGhlYWQgZmQtdGFibGUtaGVhZGVyPlxuICAgICAgICAgICAgICAgIDx0ciBmZC10YWJsZS1yb3c+XG4gICAgICAgICAgICAgICAgICAgIDx0aCBmZC10YWJsZS1jZWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGZkLWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImFsbENoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJhbGxDaGVja2VkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkFsbENoZWNrYm94KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID57eyAnQWxsJyB8IGJiYlRyYW5zbGF0ZSB9fTwvZmQtY2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgPC90YWJsZT5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICBpc0Rpc3BsYXlUeXBlID8gZGlzcGxheUxpc3RUZW1wbGF0ZSA6IHN0YW5kYXJkTGlzdFRlbXBsYXRlO1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBtb0RhdGFMaXN0LFxuICAgICAgICAgICAgICAgICAgICBpc0NoZWNrTGlzdDogaXNDaGVja0xpc3QsXG4gICAgICAgICAgICAgICAgICAgIGdyb3VwYnk6IGdyb3VwYnksXG4gICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbmFsRm9ybWF0czogY29uZGl0aW9uYWxGb3JtYXRzLFxuICAgICAgICAgICAgICAgICAgICBkZXZpY2VOYW1lOiBkZXZpY2VOYW1lLFxuICAgICAgICAgICAgICAgICAgICB2aWV3U2V0dGluZzogdmlld1NldHRpbmcsXG4gICAgICAgICAgICAgICAgICAgIGFsbENvbHVtbnM6IGFsbENvbHVtbnMsXG4gICAgICAgICAgICAgICAgICAgIGFjY2VzczogYWNjZXNzLFxuICAgICAgICAgICAgICAgICAgICBydGw6IHJ0bFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9mZC1sYXlvdXQtcGFuZWwtYm9keT5cbjwvZmQtbGF5b3V0LXBhbmVsPlxuPCEtLWRpc3BsYXkgbGlzdC0tPlxuPG5nLXRlbXBsYXRlXG4gICAgI2Rpc3BsYXlMaXN0VGVtcGxhdGVcbiAgICBsZXQtbW9EYXRhTGlzdFxuICAgIGxldC1pc0NoZWNrTGlzdD1cImlzQ2hlY2tMaXN0XCJcbiAgICBsZXQtZ3JvdXBieT1cImdyb3VwYnlcIlxuICAgIGxldC1jb25kaXRpb25hbEZvcm1hdHM9XCJjb25kaXRpb25hbEZvcm1hdHNcIlxuICAgIGxldC1kZXZpY2VOYW1lPVwiZGV2aWNlTmFtZVwiXG4gICAgbGV0LWFsbENvbHVtbnM9XCJhbGxDb2x1bW5zXCJcbiAgICBsZXQtdmlld1NldHRpbmc9XCJ2aWV3U2V0dGluZ1wiXG4gICAgbGV0LWFjY2Vzcz1cImFjY2Vzc1wiXG4gICAgbGV0LXJ0bD1cInJ0bFwiXG4+XG4gICAgPHVsXG4gICAgICAgIGZkLWxpc3RcbiAgICAgICAgY2xhc3M9XCJkaXNwbGF5LWxpc3QgZmQtbGlzdC0tbmF2aWdhdGlvblwiXG4gICAgICAgICpuZ0lmPVwibW9EYXRhTGlzdCAmJiBtb0RhdGFMaXN0Lmxlbmd0aCA+IDA7IGVsc2Ugbm9EYXRhXCJcbiAgICAgICAgZWxsaXBzaWZ5XG4gICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBtbyBvZiBtb0RhdGFMaXN0IHwgbXVsdGlwbGVHcm91cEJ5OiBncm91cGJ5OyBsZXQgaW5kZXggPSBpbmRleFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFtby5wYXJlbnQgfHwgbW8ucGFyZW50Py5leHBhbmRlZFwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBtbywgaW5kZXg6IGluZGV4IH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L3VsPlxuPC9uZy10ZW1wbGF0ZT5cbjwhLS1zdGFuZGFyZCBsaXN0LS0+XG48bmctdGVtcGxhdGVcbiAgICAjc3RhbmRhcmRMaXN0VGVtcGxhdGVcbiAgICBsZXQtbW9EYXRhTGlzdFxuICAgIGxldC1pc0NoZWNrTGlzdD1cImlzQ2hlY2tMaXN0XCJcbiAgICBsZXQtZ3JvdXBieT1cImdyb3VwYnlcIlxuICAgIGxldC1jb25kaXRpb25hbEZvcm1hdHM9XCJjb25kaXRpb25hbEZvcm1hdHNcIlxuICAgIGxldC1hbGxDb2x1bW5zPVwiYWxsQ29sdW1uc1wiXG4gICAgbGV0LWRldmljZU5hbWU9XCJkZXZpY2VOYW1lXCJcbiAgICBsZXQtYWNjZXNzPVwiYWNjZXNzXCJcbiAgICBsZXQtdmlld1NldHRpbmc9XCJ2aWV3U2V0dGluZ1wiXG4gICAgbGV0LXJ0bD1cInJ0bFwiXG4+XG4gICAgPHVsXG4gICAgICAgIGNsYXNzPVwiZmQtbGlzdC0tbmF2aWdhdGlvblwiXG4gICAgICAgIFtjbGFzcy5mZC1saXN0LS1ieWxpbmVdPVwiIWlzRGlzcGxheVR5cGVcIlxuICAgICAgICBmZC1saXN0XG4gICAgICAgIFtieWxpbmVdPVwidHJ1ZVwiXG4gICAgICAgICpuZ0lmPVwibW9EYXRhTGlzdCAmJiBtb0RhdGFMaXN0Lmxlbmd0aCA+IDA7IGVsc2Ugbm9EYXRhXCJcbiAgICAgICAgZWxsaXBzaWZ5XG4gICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBtbyBvZiBtb0RhdGFMaXN0IHwgbXVsdGlwbGVHcm91cEJ5OiBncm91cGJ5OyBsZXQgaW5kZXggPSBpbmRleFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFtby5wYXJlbnQgfHwgbW8ucGFyZW50Py5leHBhbmRlZFwiIFtpc1Jvd109XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW1UZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IG1vLCBpbmRleDogaW5kZXggfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvdWw+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tbm9EYXRhLS0+XG48bmctdGVtcGxhdGUgI25vRGF0YT5cbiAgICA8YnN1LW5vLWRhdGE+PC9ic3Utbm8tZGF0YT5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2l0ZW1UZW1wbGF0ZSBsZXQtbW8gbGV0LWluZGV4PVwiaW5kZXhcIj5cbiAgICA8bGlcbiAgICAgICAgZmQtbGlzdC1ncm91cC1oZWFkZXJcbiAgICAgICAgKm5nSWY9XCJtby5ncm91cCB8fCBtby5ncm91cCA9PT0gJyc7IGVsc2UgbGlzdEl0ZW1UZW1wbGF0ZVwiXG4gICAgICAgIFtzdHlsZS5wYWRkaW5nLXJpZ2h0XT1cIidjYWxjKCAxcmVtICsgJyArIG1vLmxldmVsICogMTIgKyAncHgnICsgJyApJ1wiXG4gICAgICAgIFthdHRyLmxldmVsXT1cIm1vLmxldmVsXCJcbiAgICAgICAgW2NsYXNzLnJvb3QtZ3JvdXBdPVwibW8ubGV2ZWwgPT09IDBcIlxuICAgID5cbiAgICAgICAgPGZkLWljb25cbiAgICAgICAgICAgIFtnbHlwaF09XCJtby5leHBhbmRlZCA/ICduYXZpZ2F0aW9uLWRvd24tYXJyb3cnIDogJ25hdmlnYXRpb24tbGVmdC1hcnJvdydcIlxuICAgICAgICAgICAgY2xhc3M9XCJjZWxsLWV4cGFuZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25FeHBhbmRDbGljayhtbylcIlxuICAgICAgICA+PC9mZC1pY29uPlxuICAgICAgICA8c3BhbiBmZC1saXN0LXRpdGxlPnt7IG1vLmdyb3VwIH19PC9zcGFuPlxuICAgIDwvbGk+XG4gICAgPG5nLXRlbXBsYXRlICNsaXN0SXRlbVRlbXBsYXRlPlxuICAgICAgICA8YnN1LWxpc3QtaXRlbVxuICAgICAgICAgICAgW2lzRGlzcGxheVR5cGVdPVwiaXNEaXNwbGF5VHlwZVwiXG4gICAgICAgICAgICBbbW9dPVwibW9cIlxuICAgICAgICAgICAgW2lzQ2hlY2tlZF09XCJtby4kSXNDaGVja2VkXCJcbiAgICAgICAgICAgIFtpc05ld0lubGluZU1vXT1cIm1vLiROZXdJbmxpbmVNb1wiXG4gICAgICAgICAgICBbaW5kZXhdPVwiaW5kZXhcIlxuICAgICAgICAgICAgW3NldHRpbmddPVwibGlzdFNldHRpbmdcIlxuICAgICAgICAgICAgW2VkaXRNb2RlXT1cImlubGluZUVkaXRNb2RlXCJcbiAgICAgICAgICAgIFtydGxdPVwicnRsXCJcbiAgICAgICAgICAgIFtkZXZpY2VOYW1lXT1cImRldmljZU5hbWVcIlxuICAgICAgICAgICAgW2RldmljZVNpemVdPVwiZGV2aWNlU2l6ZVwiXG4gICAgICAgICAgICBbaW5kZXhdPVwiaW5kZXhcIlxuICAgICAgICAgICAgW2Zvcm1TZXR0aW5nXT1cImZvcm1TZXR0aW5nXCJcbiAgICAgICAgICAgIFthbGxDb2x1bW5zXT1cImFsbENvbHVtbnNcIlxuICAgICAgICAgICAgW2NvbnRlbnREZW5zaXR5XT1cImNvbnRlbnREZW5zaXR5XCJcbiAgICAgICAgICAgIFtjb250ZXh0TWVudUl0ZW1zXT1cImNvbnRleHRNZW51SXRlbXNcIlxuICAgICAgICAgICAgW2NhblZpZXddPVwiY2FuVmlld1wiXG4gICAgICAgICAgICBbY29uZGl0aW9uYWxGb3JtYXRzXT1cImNvbmRpdGlvbmFsRm9ybWF0c1wiXG4gICAgICAgICAgICBbZGlzYWJsZU92ZXJmbG93Q29udGV4dE1lbnVdPVwiZGlzYWJsZU92ZXJmbG93Q29udGV4dE1lbnVcIlxuICAgICAgICAgICAgW25hdmlnYXRpb25BcnJvd109XCJuYXZpZ2F0aW9uQXJyb3dcIlxuICAgICAgICAgICAgW2lzQ2hlY2tMaXN0XT1cImlzQ2hlY2tMaXN0XCJcbiAgICAgICAgICAgIChyb3dDaGVjayk9XCJvblJvd0NoZWNrKCRldmVudClcIlxuICAgICAgICAgICAgKHJvd0NsaWNrKT1cIm9uUm93Q2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICAodWx2Q29tbWFuZCk9XCJvblVsdkNvbW1hbmQoJGV2ZW50KVwiXG4gICAgICAgICAgICAoZWRpdEZvcm1QYW5lbFNhdmUpPVwib25FZGl0Rm9ybVBhbmVsU2F2ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChlZGl0Rm9ybVBhbmVsQ2FuY2VsKT1cIm9uRWRpdEZvcm1QYW5lbENhbmNlbCgkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICA8L2JzdS1saXN0LWl0ZW0+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvbmctdGVtcGxhdGU+XG4iXX0=