barsa-sap-ui 2.1.1 → 2.1.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 (239) hide show
  1. package/fesm2022/barsa-sap-ui.mjs +289 -257
  2. package/fesm2022/barsa-sap-ui.mjs.map +1 -1
  3. package/lib/ui-map/ui-map.component.d.ts +2 -0
  4. package/package.json +3 -5
  5. package/esm2022/barsa-sap-ui.mjs +0 -5
  6. package/esm2022/lib/apply-conditional-formmatings.directive.mjs +0 -89
  7. package/esm2022/lib/avatar-size.pipe.mjs +0 -40
  8. package/esm2022/lib/barsa-answer-card/barsa-answer-card.component.mjs +0 -41
  9. package/esm2022/lib/barsa-asp-viewer/barsa-asp-viewer.component.mjs +0 -145
  10. package/esm2022/lib/barsa-bar-panel/barsa-bar-panel.component.mjs +0 -23
  11. package/esm2022/lib/barsa-base-panel/barsa-base-layout-panel.component.mjs +0 -29
  12. package/esm2022/lib/barsa-breadcrumbs/barsa-breadcrumbs.component.mjs +0 -24
  13. package/esm2022/lib/barsa-card-layout-panel/barsa-card-layout-panel.component.mjs +0 -24
  14. package/esm2022/lib/barsa-card-row-payam/barsa-card-row-payam.component.mjs +0 -31
  15. package/esm2022/lib/barsa-cartable-form/barsa-cartable-form.component.mjs +0 -41
  16. package/esm2022/lib/barsa-cartable-template/barsa-cartable-template.component.mjs +0 -24
  17. package/esm2022/lib/barsa-chat/barsa-chat.component.mjs +0 -242
  18. package/esm2022/lib/barsa-chat/chat.model.mjs +0 -8
  19. package/esm2022/lib/barsa-chat-content/barsa-chat-content.component.mjs +0 -13
  20. package/esm2022/lib/barsa-chat-content-toolbar/barsa-chat-content-toolbar.component.mjs +0 -22
  21. package/esm2022/lib/barsa-chat-list/barsa-chat-list.component.mjs +0 -66
  22. package/esm2022/lib/barsa-chat-message/barsa-chat-message.component.mjs +0 -78
  23. package/esm2022/lib/barsa-chat-thread/barsa-chat-thread.component.mjs +0 -22
  24. package/esm2022/lib/barsa-chat-threads-list/barsa-chat-threads-list.component.mjs +0 -13
  25. package/esm2022/lib/barsa-chat-threads-list-toolbar/barsa-chat-threads-list-toolbar.component.mjs +0 -15
  26. package/esm2022/lib/barsa-chip/barsa-chip.component.mjs +0 -72
  27. package/esm2022/lib/barsa-column-indicator/barsa-column-indicator.component.mjs +0 -23
  28. package/esm2022/lib/barsa-column-rownumber/barsa-column-rownumber.component.mjs +0 -14
  29. package/esm2022/lib/barsa-custom-inline-edit/barsa-custom-inline-edit.component.mjs +0 -14
  30. package/esm2022/lib/barsa-custom-inline-edit-row/barsa-custom-inline-edit-row.component.mjs +0 -26
  31. package/esm2022/lib/barsa-date-time-picker/barsa-date-time-picker.component.mjs +0 -71
  32. package/esm2022/lib/barsa-dynamic-field/barsa-dynamic-field.component.mjs +0 -40
  33. package/esm2022/lib/barsa-enum-menu-button/barsa-enum-menu-button.component.mjs +0 -61
  34. package/esm2022/lib/barsa-field-key-value/barsa-field-key-value.component.mjs +0 -45
  35. package/esm2022/lib/barsa-form-side-content/barsa-form-side-content.component.mjs +0 -58
  36. package/esm2022/lib/barsa-grid-layout-panel/barsa-grid-layout-panel.component.mjs +0 -27
  37. package/esm2022/lib/barsa-group-cartable/barsa-cartable-group.component.mjs +0 -94
  38. package/esm2022/lib/barsa-horizontal-flex-panel/barsa-horizontal-flex-panel.component.mjs +0 -22
  39. package/esm2022/lib/barsa-linkable-items-panel/barsa-linkable-items-panel.component.mjs +0 -37
  40. package/esm2022/lib/barsa-list-file-linear/barsa-list-file-linear.component.mjs +0 -41
  41. package/esm2022/lib/barsa-list-file-linear-gmail/barsa-list-file-linear-gmail.component.mjs +0 -29
  42. package/esm2022/lib/barsa-list-layout-panel/barsa-list-layout-panel.component.mjs +0 -23
  43. package/esm2022/lib/barsa-modal/barsa-modal.component.mjs +0 -43
  44. package/esm2022/lib/barsa-monaco-editor/barsa-monaco-editor.component.mjs +0 -83
  45. package/esm2022/lib/barsa-network-offline/barsa-network-offline.component.mjs +0 -57
  46. package/esm2022/lib/barsa-pishnamayesh-payam/barsa-pishnamayesh-payam.component.mjs +0 -159
  47. package/esm2022/lib/barsa-question-answer-comments-section/barsa-question-answer-comments-section.component.mjs +0 -17
  48. package/esm2022/lib/barsa-question-answer-content-actions-section/barsa-question-answer-content-actions-section.component.mjs +0 -30
  49. package/esm2022/lib/barsa-question-answer-creator-time-section/barsa-question-answer-creator-time-section.component.mjs +0 -14
  50. package/esm2022/lib/barsa-question-answer-form/barsa-question-answer-form.component.mjs +0 -34
  51. package/esm2022/lib/barsa-question-answer-form-add-comment/barsa-question-answer-form-add-comment.component.mjs +0 -46
  52. package/esm2022/lib/barsa-question-answer-vote-section/barsa-question-answer-vote-section.component.mjs +0 -79
  53. package/esm2022/lib/barsa-question-post/barsa-question-post.component.mjs +0 -30
  54. package/esm2022/lib/barsa-report-card-flex-view/barsa-report-card-flex-view.component.mjs +0 -31
  55. package/esm2022/lib/barsa-report-checkbox-switch-button/barsa-report-checkbox-switch-button.component.mjs +0 -28
  56. package/esm2022/lib/barsa-report-one-of-list/barsa-report-one-of-list.component.mjs +0 -102
  57. package/esm2022/lib/barsa-row-inline-actionlist/barsa-row-inline-actionlist.component.mjs +0 -26
  58. package/esm2022/lib/barsa-sap-ui-routing.module.mjs +0 -18
  59. package/esm2022/lib/barsa-sap-ui.module.mjs +0 -374
  60. package/esm2022/lib/barsa-search-form/barsa-search-form.component.mjs +0 -29
  61. package/esm2022/lib/barsa-simple-form/barsa-simple-form.component.mjs +0 -170
  62. package/esm2022/lib/barsa-tab-route-manager/barsa-tab-route-manager.component.mjs +0 -18
  63. package/esm2022/lib/barsa-table-column/barsa-table-column.component.mjs +0 -29
  64. package/esm2022/lib/barsa-table-header/barsa-table-header.component.mjs +0 -222
  65. package/esm2022/lib/barsa-table-row/barsa-table-row.component.mjs +0 -87
  66. package/esm2022/lib/barsa-tag-categories/barsa-tag-categories.component.mjs +0 -60
  67. package/esm2022/lib/barsa-tag-chip/barsa-tag-chip.component.mjs +0 -26
  68. package/esm2022/lib/barsa-tags-category-row/barsa-tags-category-row.component.mjs +0 -23
  69. package/esm2022/lib/barsa-text-ellipsis/barsa-text-ellipsis.component.mjs +0 -37
  70. package/esm2022/lib/barsa-tinyemce/barsa-tinyemce.component.mjs +0 -418
  71. package/esm2022/lib/barsa-toolbaritem-search/barsa-toolbaritem-search.component.mjs +0 -36
  72. package/esm2022/lib/barsa-tree-item/barsa-tree-item.component.mjs +0 -153
  73. package/esm2022/lib/barsa-tree-item/node-has-one-depth-level.pipe.mjs +0 -19
  74. package/esm2022/lib/barsa-ulv-main/barsa-ulv-main.component.mjs +0 -216
  75. package/esm2022/lib/blob-viewer/blob-viewer.component.mjs +0 -74
  76. package/esm2022/lib/breadcrumb/breadcrumb.component.mjs +0 -50
  77. package/esm2022/lib/captcha-field/captcha-field.component.mjs +0 -28
  78. package/esm2022/lib/card-item/card-item.component.mjs +0 -64
  79. package/esm2022/lib/card-view-content/card-view-content.component.mjs +0 -46
  80. package/esm2022/lib/col-renderer.directive.mjs +0 -46
  81. package/esm2022/lib/column-matrix-renderer/column-matrix-renderer.component.mjs +0 -56
  82. package/esm2022/lib/column-matrix-renderer/matrix-value.pipe.mjs +0 -60
  83. package/esm2022/lib/column-renderer/column-renderer.component.mjs +0 -88
  84. package/esm2022/lib/constants.mjs +0 -425
  85. package/esm2022/lib/custom-date-time/custom-date-time.component.mjs +0 -41
  86. package/esm2022/lib/device-info-field-base.mjs +0 -23
  87. package/esm2022/lib/dialog-handler.directive.mjs +0 -28
  88. package/esm2022/lib/download-files.directive.mjs +0 -33
  89. package/esm2022/lib/dynamic-page-size.pipe.mjs +0 -26
  90. package/esm2022/lib/file-in-dialog/file-in-dialog.component.mjs +0 -44
  91. package/esm2022/lib/file-viewer/file-viewer.component.mjs +0 -47
  92. package/esm2022/lib/file-viewer-content/file-viewer-content.component.mjs +0 -71
  93. package/esm2022/lib/file-viewer-popover/file-viewer-popover.component.mjs +0 -39
  94. package/esm2022/lib/form-dialog/form-dialog.component.mjs +0 -171
  95. package/esm2022/lib/form-dialog-less/form-dialog-less.component.mjs +0 -50
  96. package/esm2022/lib/form-toolbar/form-toolbar.component.mjs +0 -62
  97. package/esm2022/lib/form-toolbar-button/form-toolbar-button.component.mjs +0 -45
  98. package/esm2022/lib/form-wizard/form-wizard.component.mjs +0 -21
  99. package/esm2022/lib/fullscreen-dialog.directive.mjs +0 -59
  100. package/esm2022/lib/fullscreen-files.directive.mjs +0 -42
  101. package/esm2022/lib/fundamental-dynamic-form/fundamental-dynamic-form.component.mjs +0 -213
  102. package/esm2022/lib/gantt-dhtml-chart-view/gantt-dhtml-chart-view.component.mjs +0 -215
  103. package/esm2022/lib/global-search/global-search.component.mjs +0 -27
  104. package/esm2022/lib/global-search-module/global-search-module.component.mjs +0 -29
  105. package/esm2022/lib/global-search-panel/global-search-panel.component.mjs +0 -25
  106. package/esm2022/lib/header-avatar/header-avatar.component.mjs +0 -18
  107. package/esm2022/lib/htree-create-new/htree-create-new.component.mjs +0 -48
  108. package/esm2022/lib/hyperlink/hyperlink.component.mjs +0 -23
  109. package/esm2022/lib/index.mjs +0 -543
  110. package/esm2022/lib/inline-save-and-cancel/inline-save-and-cancel.component.mjs +0 -32
  111. package/esm2022/lib/layout-actions/layout-actions.component.mjs +0 -70
  112. package/esm2022/lib/layout-control/layout-control.component.mjs +0 -302
  113. package/esm2022/lib/layout-wizard/layout-wizard.component.mjs +0 -183
  114. package/esm2022/lib/list-item/list-item.component.mjs +0 -34
  115. package/esm2022/lib/ly-empty-space/ly-empty-space.component.mjs +0 -42
  116. package/esm2022/lib/ly-horizontal-layout/ly-horizontal-layout.component.mjs +0 -82
  117. package/esm2022/lib/ly-label/ly-label.component.mjs +0 -37
  118. package/esm2022/lib/ly-layout-container/ly-layout-container.component.mjs +0 -83
  119. package/esm2022/lib/ly-layout-container-of-root/ly-layout-container-of-root.component.mjs +0 -17
  120. package/esm2022/lib/ly-layout-field-label/ly-layout-field-label.component.mjs +0 -24
  121. package/esm2022/lib/ly-layout-panel/ly-layout-panel.component.mjs +0 -83
  122. package/esm2022/lib/ly-line/ly-line.component.mjs +0 -56
  123. package/esm2022/lib/ly-simple-label/ly-simple-label.component.mjs +0 -22
  124. package/esm2022/lib/ly-tab-container/ly-tab-container.component.mjs +0 -45
  125. package/esm2022/lib/ly-tab-page/ly-tab-page.component.mjs +0 -44
  126. package/esm2022/lib/ly-vertical-layout/ly-vertical-layout.component.mjs +0 -51
  127. package/esm2022/lib/manage-filters-report/manage-filters-report.component.mjs +0 -43
  128. package/esm2022/lib/mask/mask.component.mjs +0 -22
  129. package/esm2022/lib/message-strip/message-strip.component.mjs +0 -28
  130. package/esm2022/lib/models/grid-data-provider.mjs +0 -114
  131. package/esm2022/lib/models/grid-view.mjs +0 -2
  132. package/esm2022/lib/models/index.mjs +0 -2
  133. package/esm2022/lib/no-data/no-data.component.mjs +0 -31
  134. package/esm2022/lib/notification-item/notification-item.component.mjs +0 -57
  135. package/esm2022/lib/notification-popup.service.mjs +0 -92
  136. package/esm2022/lib/object-status-icon.pipe.mjs +0 -26
  137. package/esm2022/lib/progress-indicator/progress-indicator.component.mjs +0 -18
  138. package/esm2022/lib/report-navigator/report-navigator.component.mjs +0 -68
  139. package/esm2022/lib/report-new-top-form/report-new-top-form.component.mjs +0 -60
  140. package/esm2022/lib/report-search-fields-hidden-settings/report-search-fields-hidden-settings.component.mjs +0 -35
  141. package/esm2022/lib/report-search-fields-manage/report-search-fields-manage.component.mjs +0 -97
  142. package/esm2022/lib/report-search-panel-save/report-search-panel-save.component.mjs +0 -88
  143. package/esm2022/lib/report-tree-base.mjs +0 -386
  144. package/esm2022/lib/report-view-renderer.directive.mjs +0 -385
  145. package/esm2022/lib/responsive-toolbar/responsive-toolbar.component.mjs +0 -50
  146. package/esm2022/lib/responsive-toolbar-renderer/responsive-toolbar-renderer.component.mjs +0 -84
  147. package/esm2022/lib/rich-text-static/rich-text-static.component.mjs +0 -72
  148. package/esm2022/lib/sap-font-class.pipe.mjs +0 -29
  149. package/esm2022/lib/sap-font.pipe.mjs +0 -29
  150. package/esm2022/lib/sap-size.pipe.mjs +0 -27
  151. package/esm2022/lib/sap-ui-report-base.component.mjs +0 -805
  152. package/esm2022/lib/search-panel/search-panel.component.mjs +0 -63
  153. package/esm2022/lib/static-text/static-text.component.mjs +0 -15
  154. package/esm2022/lib/table-th.directive.mjs +0 -86
  155. package/esm2022/lib/title/title.component.mjs +0 -15
  156. package/esm2022/lib/ui-asp-report-viewer/ui-asp-report-viewer.component.mjs +0 -34
  157. package/esm2022/lib/ui-bpmn-viewer/ui-bpmn-viewer.component.mjs +0 -33
  158. package/esm2022/lib/ui-button/ui-button.component.mjs +0 -32
  159. package/esm2022/lib/ui-calendar/ui-calendar.component.mjs +0 -53
  160. package/esm2022/lib/ui-card-view/ui-card-view.component.mjs +0 -57
  161. package/esm2022/lib/ui-card-view-horizontal-group/ui-card-view-horizontal-group.component.mjs +0 -42
  162. package/esm2022/lib/ui-check-box/ui-check-box.component.mjs +0 -39
  163. package/esm2022/lib/ui-color-ui/ui-color-ui.component.mjs +0 -50
  164. package/esm2022/lib/ui-container-with-button/ui-container-with-button.component.mjs +0 -38
  165. package/esm2022/lib/ui-date-range-ex/ui-date-range-ex.component.mjs +0 -191
  166. package/esm2022/lib/ui-date-time/ui-date-time.component.mjs +0 -150
  167. package/esm2022/lib/ui-editable-grid/ui-editable-grid.component.mjs +0 -110
  168. package/esm2022/lib/ui-exception-form/ui-exception-form.component.mjs +0 -53
  169. package/esm2022/lib/ui-file-linear-list-box/ui-file-linear-list-box.component.mjs +0 -121
  170. package/esm2022/lib/ui-form-panel/ui-form-panel.component.mjs +0 -100
  171. package/esm2022/lib/ui-gantt-chart/ui-gantt-chart.component.mjs +0 -32
  172. package/esm2022/lib/ui-graph/ui-graph.component.mjs +0 -17
  173. package/esm2022/lib/ui-grid/ui-grid.component.mjs +0 -25
  174. package/esm2022/lib/ui-grid-columns/ui-grid-columns.component.mjs +0 -43
  175. package/esm2022/lib/ui-grid-filter-item/ui-grid-filter-item.component.mjs +0 -66
  176. package/esm2022/lib/ui-grid-filter-settings/ui-grid-filter-settings.component.mjs +0 -75
  177. package/esm2022/lib/ui-grid-sort-item/ui-grid-sort-item.component.mjs +0 -58
  178. package/esm2022/lib/ui-grid-sort-setting/ui-grid-sort-setting.component.mjs +0 -123
  179. package/esm2022/lib/ui-html-viewer/ui-html-viewer.component.mjs +0 -16
  180. package/esm2022/lib/ui-info-bar-panel/ui-info-bar-panel.component.mjs +0 -11
  181. package/esm2022/lib/ui-label/ui-label.component.mjs +0 -12
  182. package/esm2022/lib/ui-linear-list-container-with-button/ui-linear-list-container-with-button.component.mjs +0 -379
  183. package/esm2022/lib/ui-list-view/ui-list-view.component.mjs +0 -84
  184. package/esm2022/lib/ui-map/ui-map.component.mjs +0 -58
  185. package/esm2022/lib/ui-matrix-view/ui-matrix-view.component.mjs +0 -124
  186. package/esm2022/lib/ui-mo-info-combo-viewer/ui-mo-info-combo-viewer.component.mjs +0 -19
  187. package/esm2022/lib/ui-mo-info-general-object-ui/ui-mo-info-general-object-ui.component.mjs +0 -14
  188. package/esm2022/lib/ui-mo-info-sub-form-ui/ui-mo-info-sub-form-ui.component.mjs +0 -55
  189. package/esm2022/lib/ui-mo-info-ulv-combo/ui-mo-info-ulv-combo.component.mjs +0 -429
  190. package/esm2022/lib/ui-monaco-editor/ui-monaco-editor.component.mjs +0 -28
  191. package/esm2022/lib/ui-multi-select-card/ui-multi-select-card.component.mjs +0 -37
  192. package/esm2022/lib/ui-multi-select-checkbox/ui-multi-select-checkbox.component.mjs +0 -59
  193. package/esm2022/lib/ui-multi-select-combo/ui-multi-select-combo.component.mjs +0 -93
  194. package/esm2022/lib/ui-multi-select-radio/ui-multi-select-radio.component.mjs +0 -36
  195. package/esm2022/lib/ui-multi-select-slider/ui-multi-select-slider.component.mjs +0 -56
  196. package/esm2022/lib/ui-multi-select-smile/ui-multi-select-smile.component.mjs +0 -28
  197. package/esm2022/lib/ui-num-decimal-ui/ui-num-decimal-ui.component.mjs +0 -33
  198. package/esm2022/lib/ui-num-int-slider/ui-num-int-slider.component.mjs +0 -27
  199. package/esm2022/lib/ui-num-int-ui/ui-num-int-ui.component.mjs +0 -21
  200. package/esm2022/lib/ui-pdf-viewer/ui-pdf-viewer.component.mjs +0 -268
  201. package/esm2022/lib/ui-picture-file/ui-picture-file.component.mjs +0 -101
  202. package/esm2022/lib/ui-pictures-info/ui-pictures-info.component.mjs +0 -261
  203. package/esm2022/lib/ui-radio-group/ui-radio-group.component.mjs +0 -48
  204. package/esm2022/lib/ui-read-only-field/ui-read-only-field.component.mjs +0 -36
  205. package/esm2022/lib/ui-report-container/ui-report-container.component.mjs +0 -46
  206. package/esm2022/lib/ui-search-command-info-ui/ui-search-command-info-ui.component.mjs +0 -24
  207. package/esm2022/lib/ui-simple-combo/ui-simple-combo.component.mjs +0 -55
  208. package/esm2022/lib/ui-single-picture/ui-single-picture.component.mjs +0 -36
  209. package/esm2022/lib/ui-switch-button/ui-switch-button.component.mjs +0 -20
  210. package/esm2022/lib/ui-table-view/ui-table-view.component.mjs +0 -289
  211. package/esm2022/lib/ui-text-area/ui-text-area.component.mjs +0 -49
  212. package/esm2022/lib/ui-text-field/ui-text-field.component.mjs +0 -52
  213. package/esm2022/lib/ui-text-field-auto-complete/ui-text-field-auto-complete.component.mjs +0 -48
  214. package/esm2022/lib/ui-time-span/ui-time-span.component.mjs +0 -24
  215. package/esm2022/lib/ui-tinymce/ui-tinymce.component.mjs +0 -53
  216. package/esm2022/lib/ui-tree/ui-tree.component.mjs +0 -114
  217. package/esm2022/lib/ui-tree-view/ui-tree-view.component.mjs +0 -100
  218. package/esm2022/lib/ui-ulv-form-multi-select-ui/ui-ulv-form-multi-select-ui.component.mjs +0 -23
  219. package/esm2022/lib/ui-ulv-main-ui/ui-ulv-main-ui.component.mjs +0 -306
  220. package/esm2022/lib/ui-workflow-panel-ui/ui-workflow-panel-ui.component.mjs +0 -25
  221. package/esm2022/lib/ul-loading-mask-ui/ul-loading-mask-ui.component.mjs +0 -93
  222. package/esm2022/lib/ul-msg-box-adapter/ul-msg-box-adapter.component.mjs +0 -119
  223. package/esm2022/lib/ul-notify-popup/ul-notify-popup.component.mjs +0 -32
  224. package/esm2022/lib/ul-toast-adapter/ul-toast-adapter.component.mjs +0 -48
  225. package/esm2022/lib/ulv-column-settings/ulv-column-settings.component.mjs +0 -53
  226. package/esm2022/lib/ulv-context-menu/ulv-context-menu.component.mjs +0 -114
  227. package/esm2022/lib/ulv-filter-settings/ulv-filter-settings.component.mjs +0 -43
  228. package/esm2022/lib/ulv-form-multi-select/ulv-form-multi-select.component.mjs +0 -196
  229. package/esm2022/lib/ulv-groupby-settings/ulv-groupby-settings.component.mjs +0 -44
  230. package/esm2022/lib/ulv-paging/ulv-paging.component.mjs +0 -84
  231. package/esm2022/lib/ulv-selection/ulv-selection.component.mjs +0 -65
  232. package/esm2022/lib/ulv-settings/ulv-settings.component.mjs +0 -116
  233. package/esm2022/lib/ulv-sort-settings/ulv-sort-settings.component.mjs +0 -54
  234. package/esm2022/lib/ulv-toolbar/ulv-toolbar.component.mjs +0 -174
  235. package/esm2022/lib/upload-file-status.pipe.mjs +0 -28
  236. package/esm2022/lib/util-chat-time-badge.pipe.mjs +0 -18
  237. package/esm2022/lib/util-date-to-hh-mm.pipe.mjs +0 -23
  238. package/esm2022/lib/wizard-layout.directive.mjs +0 -103
  239. package/esm2022/public-api.mjs +0 -233
@@ -1,418 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
2
- import { concatMap, takeUntil, tap } from 'rxjs';
3
- import { BaseComponent, BarsaApi, getUniqueId, isFunction, UploadService } from 'barsa-novin-ray-core';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "barsa-novin-ray-core";
6
- import * as i2 from "@fundamental-ngx/core/file-uploader";
7
- export class BarsaTinyemceComponent extends BaseComponent {
8
- constructor(_uploadService, _el) {
9
- super();
10
- this._uploadService = _uploadService;
11
- this._el = _el;
12
- this.valueChange = new EventEmitter();
13
- this.tinyInit = new EventEmitter();
14
- this.tinyHostId = this._generateTinyHostId();
15
- this.tinyMCEConfig = {};
16
- this._onLoadIframe = () => {
17
- this.value = this.editorValue;
18
- // const ed = tinymce.get(this.tinyHostId);
19
- // ed.execCommand('mceInsertContent', false, this.value);
20
- // ed.insertContent(this.value, { format: 'raw' });
21
- // this._removeOverflow(ed);
22
- this.destroyTinymce();
23
- this.prepare();
24
- };
25
- }
26
- ngOnChanges(simpleChanges) {
27
- super.ngOnChanges(simpleChanges);
28
- if (simpleChanges.value && !simpleChanges.value.firstChange) {
29
- this.setValue(simpleChanges.value.currentValue);
30
- }
31
- if (simpleChanges.disable && !simpleChanges.disable.firstChange) {
32
- const disbale = simpleChanges.disable.currentValue;
33
- if (disbale) {
34
- this.setDisable();
35
- }
36
- else {
37
- this.setEnable();
38
- }
39
- }
40
- if (simpleChanges.readonly && !simpleChanges.readonly.firstChange) {
41
- this.setReadOnly(simpleChanges.readonly.currentValue);
42
- }
43
- }
44
- ngOnInit() {
45
- super.ngOnInit();
46
- this.height = this._el.nativeElement.clientHeight;
47
- }
48
- ngOnDestroy() {
49
- super.ngOnDestroy();
50
- this.destroyTinymce();
51
- }
52
- onFileSelection(files) {
53
- this.uploadFile(files).pipe(takeUntil(this._onDestroy$)).subscribe();
54
- }
55
- loadTinyMce() {
56
- if (!this.Setting.IsHtmlViewer) {
57
- head.load(['Lib/tinymce/tinymce.min.js'], () => {
58
- setTimeout(() => {
59
- this.prepare();
60
- });
61
- });
62
- }
63
- }
64
- onVisibilityChange(e) {
65
- if (e === 'Visible') {
66
- this.loadTinyMce();
67
- }
68
- }
69
- initilize() {
70
- if (this.tinyMCEConfig.setup) {
71
- return;
72
- }
73
- this.tinyMCEConfig.height = '100%';
74
- this.tinyMCEConfig.width = '100%';
75
- this.tinyMCEConfig.selector = '#' + this.tinyHostId;
76
- this.tinyMCEConfig.placeholder = this.Setting.ControlFieldCaptionTranslated;
77
- this.tinyMCEConfig.content_css = 'assets/Resources/fonts/Iran.css';
78
- this.tinyMCEConfig.directionality = 'rtl';
79
- this.tinyMCEConfig.language = 'fa_IR';
80
- this.tinyMCEConfig.promotion = false;
81
- this.tinyMCEConfig.skin = 'oxide';
82
- this.tinyMCEConfig.paste_data_images = true;
83
- this.tinyMCEConfig.defaultFontName = 'BarsaFont';
84
- this.tinyMCEConfig.defaultFontSize = '12px';
85
- this.tinyMCEConfig.statusbar = false;
86
- this.tinyMCEConfig.resize = false;
87
- this.tinyMCEConfig.inline = false;
88
- this.tinyMCEConfig.menubar = false;
89
- this.tinyMCEConfig.toolbar_location = 'top';
90
- this.tinyMCEConfig.toolbar_mode = 'floating';
91
- // this.tinyMCEConfig.toolbar_sticky = true;
92
- // this.tinyMCEConfig.toolbar_sticky_offset = 100;
93
- this.tinyMCEConfig.font_family_formats =
94
- 'BarsaFont=BarsaFont;Arial=arial,helvetica,sans-serif; Courier New=courier new,courier,monospace;';
95
- this.tinyMCEConfig.font_size_formats = '8pt 10pt 12pt 14pt 18pt 24pt 36pt';
96
- this.tinyMCEConfig.plugins = [
97
- 'advlist',
98
- 'anchor',
99
- 'autolink',
100
- 'autosave',
101
- 'charmap',
102
- 'code',
103
- 'codesample',
104
- 'directionality',
105
- 'emoticons',
106
- 'fullscreen',
107
- 'help',
108
- 'image',
109
- 'importcss',
110
- 'insertdatetime',
111
- 'link',
112
- 'lists',
113
- 'media',
114
- 'nonbreaking',
115
- 'pagebreak',
116
- 'preview',
117
- 'quickbars',
118
- 'save',
119
- 'searchreplace',
120
- 'table',
121
- 'template',
122
- 'visualblocks',
123
- 'visualchars',
124
- 'wordcount',
125
- 'autoresize'
126
- ];
127
- this.tinyMCEConfig.toolbar =
128
- `defaultVerbs barsaImage | insert | forecolor backcolor fontfamily fontsize | bullist numlist outdent indent | removeformat` +
129
- ` | undo redo | copy cut paste | blocks | bold italic | alignleft aligncenter alignright alignjustify ltr rtl`;
130
- this.tinyMCEConfig.quickbars_selection_toolbar =
131
- 'bold italic fontsize | forecolor backcolor|defaultVerbs barsaImage';
132
- const tinymceSettingsGlobal = window.tinymceSettings;
133
- let tinymceSettings = BarsaApi.Common.Util.TryGetValue(this.Setting, 'JsonExtraProp.tinymceSettings');
134
- tinymceSettings = BarsaApi.Common.Merger.Merge(tinymceSettingsGlobal, tinymceSettings);
135
- if (!tinymceSettings && Array.isArray(tinymceSettings)) {
136
- for (const item of tinymceSettings) {
137
- this.tinyMCEConfig[item.key] = item.value;
138
- }
139
- }
140
- if (this.isReadonly) {
141
- this.tinyMCEConfig.menubar = false;
142
- this.tinyMCEConfig.statusbar = false;
143
- this.tinyMCEConfig.plugins = ['autoresize'];
144
- // this.tinyMCEConfig.plugins = [];
145
- this.tinyMCEConfig.toolbar = false;
146
- }
147
- let userSetup;
148
- if (this.tinyMCEConfig.setup) {
149
- userSetup = this.tinyMCEConfig.setup;
150
- }
151
- let defaultVerbsMenu = [];
152
- // BEGIN: setup
153
- this.tinyMCEConfig.setup = (ed) => {
154
- this.editor = ed;
155
- if (!this.isReadonly) {
156
- if (this.defaultVerbs) {
157
- defaultVerbsMenu = [];
158
- this.defaultVerbs.forEach((item) => {
159
- defaultVerbsMenu.push({
160
- value: item.Html,
161
- type: 'menuitem',
162
- text: item.Title || item.Html.replace(/<br\s*\/?>/gi, ' '),
163
- onAction: () => {
164
- // ed.execCommand('mceInsertRawHTML', false, item.Html);
165
- ed.insertContent(item.Html, { format: 'raw' });
166
- }
167
- });
168
- });
169
- }
170
- ed.ui.registry.addSplitButton('barsaImage', {
171
- text: 'insert',
172
- icon: 'image',
173
- tooltip: 'Insert Image As Base64',
174
- onAction: () => {
175
- BarsaApi.Common.Async.Waterfall('Tinemce.EmbedImage', {
176
- openFileDialog: this.ShowOpenFileDialog.bind(this),
177
- insertBase64: this.InsertBase64.bind(this)
178
- }, (err, result) => {
179
- BarsaApi.Common.Async.Finalize(err, result);
180
- });
181
- },
182
- onItemAction: () => {
183
- BarsaApi.Common.Async.Waterfall('Tinemce.UploadToDatabase', {
184
- openFileDialog: this.ShowUploadWindow.bind(this)
185
- }, (err, result) => {
186
- BarsaApi.Common.Async.Finalize(err, result);
187
- });
188
- },
189
- fetch: (callback) => {
190
- const items = [
191
- {
192
- type: 'choiceitem',
193
- text: 'upload',
194
- icon: 'image',
195
- tooltip: 'Upload Image',
196
- value: 'upload'
197
- }
198
- ];
199
- callback(items);
200
- }
201
- });
202
- ed.ui.registry.addMenuButton('defaultVerbs', {
203
- text: 'عبارتهای پیش فرض',
204
- fetch: (callback) => {
205
- callback(defaultVerbsMenu);
206
- }
207
- });
208
- if (isFunction(window.tinymceSetup)) {
209
- window.tinymceSetup.call(this, this, ed);
210
- }
211
- }
212
- let hasInit = false;
213
- ed.on('init', () => {
214
- this.wysiwygIntialized = true;
215
- this.intializationInProgress = false;
216
- if (typeof this.value !== 'undefined') {
217
- this.setValue(this.value);
218
- }
219
- if (this.tinyMCEConfig.defaultFontName) {
220
- ed.execCommand('FontName', false, this.tinyMCEConfig.defaultFontName);
221
- }
222
- if (this.tinyMCEConfig.defaultFontSize) {
223
- ed.execCommand('FontSize', false, this.tinyMCEConfig.defaultFontSize);
224
- }
225
- if (this.isReadonly) {
226
- this.setReadOnly(this.isReadonly);
227
- }
228
- // This piece of code solves the problem of change propagation so that
229
- // there is no need to call triggerSave
230
- const setContent = ed.setContent;
231
- ed.setContent = (...args) => {
232
- setContent.apply(ed, args);
233
- ed.dispatch('change', {});
234
- };
235
- hasInit = true;
236
- this.tinyInit.emit();
237
- const iframEl = ed.iframeElement;
238
- if (iframEl) {
239
- iframEl.addEventListener('load', this._onLoadIframe);
240
- }
241
- });
242
- // Catch and propagate the change event
243
- let oldContent = null;
244
- ed.on('change keyup', () => {
245
- const newval = ed.getContent();
246
- if (newval === oldContent) {
247
- return;
248
- }
249
- oldContent = newval;
250
- if (!hasInit) {
251
- return;
252
- }
253
- ed.save();
254
- this.editorValue = newval;
255
- this.valueChange.emit(newval);
256
- // this.context.fireEvent('change', this, newval, oldval, {});
257
- });
258
- ed.on('focus', () => {
259
- // TODO
260
- });
261
- if (userSetup) {
262
- userSetup(ed);
263
- }
264
- };
265
- }
266
- ShowUploadWindow() {
267
- this._uploader.open();
268
- }
269
- ShowOpenFileDialog(doReturn) {
270
- const input = document.createElement('input');
271
- input.setAttribute('type', 'file');
272
- input.setAttribute('accept', 'image/*');
273
- input.onchange = () => {
274
- const file = input.files[0];
275
- const reader = new FileReader();
276
- reader.onload = () => {
277
- let base64 = reader.result;
278
- base64 = base64.split(',')[1];
279
- doReturn(null, base64);
280
- };
281
- reader.readAsDataURL(file);
282
- };
283
- input.click();
284
- }
285
- InsertBase64(base64, doReturn) {
286
- this.editor.execCommand('mceInsertContent', false, '<img src=data:image/png;base64,' + base64 + ' />');
287
- doReturn();
288
- }
289
- getValue() {
290
- let res = null;
291
- if (this.wysiwygIntialized) {
292
- const ed = tinymce.get(this.tinyHostId);
293
- if (ed) {
294
- res = ed.getContent();
295
- }
296
- }
297
- return res;
298
- }
299
- setValue(value) {
300
- this.value = value;
301
- this.setValueTiny();
302
- }
303
- setValueTiny() {
304
- if (this.wysiwygIntialized) {
305
- const ed = tinymce.get(this.tinyHostId);
306
- if (ed) {
307
- ed.setContent(this.value);
308
- }
309
- }
310
- return this.value;
311
- }
312
- focus() {
313
- if (this.isReadonly) {
314
- return this;
315
- }
316
- if (this.wysiwygIntialized) {
317
- tinymce.execCommand('mceFocus', false, 'id_of_textarea');
318
- }
319
- return this;
320
- }
321
- setEnable() {
322
- if (this.wysiwygIntialized) {
323
- const ed = tinymce.get(this.tinyHostId);
324
- ed.getBody().setAttribute('contenteditable', true);
325
- }
326
- }
327
- setDisable() {
328
- if (this.wysiwygIntialized) {
329
- const ed = tinymce.get(this.tinyHostId);
330
- ed.getBody().setAttribute('contenteditable', false);
331
- }
332
- }
333
- setReadOnly(readOnly) {
334
- if (this.wysiwygIntialized) {
335
- const ed = tinymce.get(this.tinyHostId);
336
- ed.getBody().setAttribute('contenteditable', !readOnly);
337
- if (readOnly) {
338
- $('.tox-editor-header').hide();
339
- }
340
- else {
341
- $('.tox-editor-header').hide();
342
- }
343
- }
344
- }
345
- destroyTinymce() {
346
- if (this.Setting.IsHtmlViewer) {
347
- return;
348
- }
349
- const ed = tinymce.get(this.tinyHostId);
350
- if (ed) {
351
- // tinymce.execCommand('mceRemoveControl', true, this.tinyHostId);
352
- if (ed.iframeElement) {
353
- ed.iframeElement.removeEventListener('load', this._onLoadIframe);
354
- }
355
- ed.destroy(false);
356
- }
357
- }
358
- uploadFile(files) {
359
- return this._uploadService.compressFiles$(files).pipe(concatMap((formData) => this._uploadService.upload(formData, this.Setting.StorageFileFieldId).pipe(tap((res) => {
360
- if (Array.isArray(res)) {
361
- const picture = res[0];
362
- if (picture.ErrorMsg) {
363
- BarsaApi.Bw.Msg.Error(picture.ErrorMsg);
364
- return;
365
- }
366
- const value = {
367
- ...picture,
368
- FileId: picture.FileId
369
- };
370
- this._addImages(value);
371
- }
372
- }))));
373
- }
374
- _addImages(file) {
375
- const url = '/IH.ashx?ty=StorageFile&key=' + file.FileId;
376
- const html = '<img src=' + url + ' />';
377
- this.editor.execCommand('mceInsertContent', false, html);
378
- }
379
- prepare() {
380
- this.initilize();
381
- tinymce.init(this.tinyMCEConfig);
382
- this.intializationInProgress = false;
383
- this.wysiwygIntialized = true;
384
- }
385
- _generateTinyHostId() {
386
- return `a_${getUniqueId(2)}`;
387
- }
388
- _removeOverflow(ed) {
389
- const html = ed.iframeElement?.contentDocument?.querySelector('html');
390
- if (html) {
391
- html.style.overflow = 'hidden';
392
- }
393
- }
394
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BarsaTinyemceComponent, deps: [{ token: i1.UploadService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
395
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: BarsaTinyemceComponent, selector: "bsu-barsa-tinyemce", inputs: { Setting: "Setting", isReadonly: "isReadonly", value: "value", IsInline: "IsInline", defaultVerbs: "defaultVerbs" }, outputs: { valueChange: "valueChange", tinyInit: "tinyInit" }, providers: [UploadService], viewQueries: [{ propertyName: "_uploader", first: true, predicate: ["uploader"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"fd-input tinywrapper\"\n [style.min-height.px]=\"height\"\n [id]=\"tinyHostId\"\n intersectionObserver\n [intersectionThreshold]=\"0.1\"\n (visibilityChange)=\"onVisibilityChange($event)\"\n></div>\n<fd-file-uploader\n #uploader\n [style.display]=\"'none'\"\n [accept]=\"''\"\n [multiple]=\"false\"\n (selectedFilesChanged)=\"onFileSelection($event)\"\n></fd-file-uploader>\n<!-- <textarea [id]=\"tinyHostId\" style=\"height: 100%; visibility: hidden\"></textarea> -->\n", styles: [":host{display:block;width:100%;height:100%}.tinywrapper{overflow:auto}\n"], dependencies: [{ kind: "directive", type: i1.IntersectionObserverDirective, selector: "[intersectionObserver]", inputs: ["intersectionDebounce", "intersectionRootMargin", "intersectionRoot", "intersectionThreshold"], outputs: ["visibilityChange"] }, { kind: "component", type: i2.FileUploaderComponent, selector: "fd-file-uploader", inputs: ["disabled", "required", "multiple", "accept", "dragndrop", "maxFileSize", "minFileSize", "id", "ariaLabel", "ariaLabelledBy", "placeholder", "buttonLabel", "buttonAriaLabel", "state", "fileLimit", "inputHidden", "width"], outputs: ["selectedFilesChanged", "selectedInvalidFiles", "onDragEnter", "onDragLeave"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
396
- }
397
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BarsaTinyemceComponent, decorators: [{
398
- type: Component,
399
- args: [{ selector: 'bsu-barsa-tinyemce', changeDetection: ChangeDetectionStrategy.OnPush, providers: [UploadService], template: "<div\n class=\"fd-input tinywrapper\"\n [style.min-height.px]=\"height\"\n [id]=\"tinyHostId\"\n intersectionObserver\n [intersectionThreshold]=\"0.1\"\n (visibilityChange)=\"onVisibilityChange($event)\"\n></div>\n<fd-file-uploader\n #uploader\n [style.display]=\"'none'\"\n [accept]=\"''\"\n [multiple]=\"false\"\n (selectedFilesChanged)=\"onFileSelection($event)\"\n></fd-file-uploader>\n<!-- <textarea [id]=\"tinyHostId\" style=\"height: 100%; visibility: hidden\"></textarea> -->\n", styles: [":host{display:block;width:100%;height:100%}.tinywrapper{overflow:auto}\n"] }]
400
- }], ctorParameters: () => [{ type: i1.UploadService }, { type: i0.ElementRef }], propDecorators: { _uploader: [{
401
- type: ViewChild,
402
- args: ['uploader']
403
- }], Setting: [{
404
- type: Input
405
- }], isReadonly: [{
406
- type: Input
407
- }], value: [{
408
- type: Input
409
- }], IsInline: [{
410
- type: Input
411
- }], defaultVerbs: [{
412
- type: Input
413
- }], valueChange: [{
414
- type: Output
415
- }], tinyInit: [{
416
- type: Output
417
- }] } });
418
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFyc2EtdGlueWVtY2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvYmFyc2EtdGlueWVtY2UvYmFyc2EtdGlueWVtY2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvYmFyc2EtdGlueWVtY2UvYmFyc2EtdGlueWVtY2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILHVCQUF1QixFQUN2QixTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBRU4sU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBYyxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU3RCxPQUFPLEVBQ0gsYUFBYSxFQUNiLFFBQVEsRUFDUixXQUFXLEVBQ1gsVUFBVSxFQUNWLGFBQWEsRUFFaEIsTUFBTSxzQkFBc0IsQ0FBQzs7OztBQWE5QixNQUFNLE9BQU8sc0JBQXVCLFNBQVEsYUFBYTtJQW1CckQsWUFBc0IsY0FBNkIsRUFBWSxHQUFlO1FBQzFFLEtBQUssRUFBRSxDQUFDO1FBRFUsbUJBQWMsR0FBZCxjQUFjLENBQWU7UUFBWSxRQUFHLEdBQUgsR0FBRyxDQUFZO1FBWnBFLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUN0QyxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUN4QyxlQUFVLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDeEMsa0JBQWEsR0FBUSxFQUFFLENBQUM7UUF5WmhCLGtCQUFhLEdBQUcsR0FBUyxFQUFFO1lBQy9CLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUM5QiwyQ0FBMkM7WUFDM0MseURBQXlE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O3NCQUEvQixTQUFTO3VCQUFDLFVBQVU7Z0JBQ1osT0FBTztzQkFBZixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDSSxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRmlsZVVwbG9hZGVyQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIGNvbmNhdE1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtcbiAgICBCYXNlQ29tcG9uZW50LFxuICAgIEJhcnNhQXBpLFxuICAgIGdldFVuaXF1ZUlkLFxuICAgIGlzRnVuY3Rpb24sXG4gICAgVXBsb2FkU2VydmljZSxcbiAgICBHZW5lcmFsQ29udHJvbEluZm9Nb2RlbFxufSBmcm9tICdiYXJzYS1ub3Zpbi1yYXktY29yZSc7XG5cbmRlY2xhcmUgY29uc3Qgd2luZG93OiBhbnk7XG5kZWNsYXJlIGNvbnN0IHRpbnltY2U6IGFueTtcbmRlY2xhcmUgY29uc3QgaGVhZDogYW55O1xuZGVjbGFyZSBjb25zdCAkOiBhbnk7XG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2JzdS1iYXJzYS10aW55ZW1jZScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2JhcnNhLXRpbnllbWNlLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9iYXJzYS10aW55ZW1jZS5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW1VwbG9hZFNlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIEJhcnNhVGlueWVtY2VDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuICAgIEBWaWV3Q2hpbGQoJ3VwbG9hZGVyJykgX3VwbG9hZGVyOiBGaWxlVXBsb2FkZXJDb21wb25lbnQ7XG4gICAgQElucHV0KCkgU2V0dGluZzogR2VuZXJhbENvbnRyb2xJbmZvTW9kZWw7XG4gICAgQElucHV0KCkgaXNSZWFkb25seTogYm9vbGVhbjtcbiAgICBASW5wdXQoKSB2YWx1ZTogYW55O1xuICAgIEBJbnB1dCgpIElzSW5saW5lOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGRlZmF1bHRWZXJiczogeyBUaXRsZTogc3RyaW5nOyBIdG1sOiBzdHJpbmcgfVtdO1xuICAgIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSB0aW55SW5pdCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICB0aW55SG9zdElkID0gdGhpcy5fZ2VuZXJhdGVUaW55SG9zdElkKCk7XG4gICAgdGlueU1DRUNvbmZpZzogYW55ID0ge307XG4gICAgZWRpdG9yOiBhbnk7XG4gICAgd3lzaXd5Z0ludGlhbGl6ZWQ6IGJvb2xlYW47XG4gICAgaW50aWFsaXphdGlvbkluUHJvZ3Jlc3M6IGJvb2xlYW47XG4gICAgZWRpdG9yVmFsdWU6IHN0cmluZztcblxuICAgIGlmcmFtQm9keUlubmVySHRtbDogc3RyaW5nO1xuICAgIGhlaWdodDogbnVtYmVyO1xuXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIF91cGxvYWRTZXJ2aWNlOiBVcGxvYWRTZXJ2aWNlLCBwcm90ZWN0ZWQgX2VsOiBFbGVtZW50UmVmKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuICAgIG5nT25DaGFuZ2VzKHNpbXBsZUNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkNoYW5nZXMoc2ltcGxlQ2hhbmdlcyk7XG4gICAgICAgIGlmIChzaW1wbGVDaGFuZ2VzLnZhbHVlICYmICFzaW1wbGVDaGFuZ2VzLnZhbHVlLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKHNpbXBsZUNoYW5nZXMudmFsdWUuY3VycmVudFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2ltcGxlQ2hhbmdlcy5kaXNhYmxlICYmICFzaW1wbGVDaGFuZ2VzLmRpc2FibGUuZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpc2JhbGUgPSBzaW1wbGVDaGFuZ2VzLmRpc2FibGUuY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgaWYgKGRpc2JhbGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldERpc2FibGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRFbmFibGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc2ltcGxlQ2hhbmdlcy5yZWFkb25seSAmJiAhc2ltcGxlQ2hhbmdlcy5yZWFkb25seS5maXJzdENoYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRSZWFkT25seShzaW1wbGVDaGFuZ2VzLnJlYWRvbmx5LmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gKHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLmNsaWVudEhlaWdodDtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5kZXN0cm95VGlueW1jZSgpO1xuICAgIH1cblxuICAgIG9uRmlsZVNlbGVjdGlvbihmaWxlczogRmlsZVtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMudXBsb2FkRmlsZShmaWxlcykucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpLnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBsb2FkVGlueU1jZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLlNldHRpbmcuSXNIdG1sVmlld2VyKSB7XG4gICAgICAgICAgICBoZWFkLmxvYWQoWydMaWIvdGlueW1jZS90aW55bWNlLm1pbi5qcyddLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJlcGFyZSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb25WaXNpYmlsaXR5Q2hhbmdlKGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKGUgPT09ICdWaXNpYmxlJykge1xuICAgICAgICAgICAgdGhpcy5sb2FkVGlueU1jZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGluaXRpbGl6ZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudGlueU1DRUNvbmZpZy5zZXR1cCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudGlueU1DRUNvbmZpZy5oZWlnaHQgPSAnMTAwJSc7XG4gICAgICAgIHRoaXMudGlueU1DRUNvbmZpZy53aWR0aCA9ICcxMDAlJztcbiAgICAgICAgdGhpcy50aW55TUNFQ29uZmlnLnNlbGVjdG9yID0gJyMnICsgdGhpcy50aW55SG9zdElkO1xuICAgICAgICB0aGlzLnRpbnlNQ0VDb25maWcucGxhY2Vob2xkZXIgPSB0aGlzLlNldHRpbmcuQ29udHJvbEZpZWxkQ2FwdGlvblRyYW5zbGF0ZWQ7XG4gICAgICAgIHRoaXMudGlueU1DRUNvbmZpZy5jb250ZW50X2NzcyA9ICdhc3NldHMvUmVzb3VyY2VzL2ZvbnRzL0lyYW4uY3NzJztcbiAgICAgICAgdGhpcy50aW55TUNFQ29uZmlnLmRpcmVjdGlvbmFsaXR5ID0gJ3J0bCc7XG4gICAgICAgIHRoaXMudGlueU1DRUNvbmZpZy5sYW5ndWFnZSA9ICdmYV9JUic7XG4gICAgICAgIHRoaXMudGlueU1DRUNvbmZpZy5wcm9tb3Rpb24gPSBmYWxzZTtcbiAgICAgICAgdGhpcy50aW55TUNFQ29uZmlnLnNraW4gPSAnb3hpZGUnO1xuICAgICAgICB0aGlzLnRpbnlNQ0VDb25maWcucGFzdGVfZGF0YV9pbWFnZXMgPSB0cnVlO1xuICAgICAgICB0aGlzLnRpbnlNQ0VDb25maWcuZGVmYXVsdEZvbnROYW1lID0gJ0JhcnNhRm9udCc7XG4gICAgICAgIHRoaXMudGlueU1DRUNvbmZpZy5kZWZhdWx0Rm9udFNpemUgPSAnMTJweCc7XG4gICAgICAgIHRoaXMudGlueU1DRUNvbmZpZy5zdGF0dXNiYXIgPSBmYWxzZTtcbiAgICAgICAgdGhpcy50aW55TUNFQ29uZmlnLnJlc2l6ZSA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMudGlueU1DRUNvbmZpZy5pbmxpbmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy50aW55TUNFQ29uZmlnLm1lbnViYXIgPSBmYWxzZTtcbiAgICAgICAgdGhpcy50aW55TUNFQ29uZmlnLnRvb2xiYXJfbG9jYXRpb24gPSAndG9wJztcblxuICAgICAgICB0aGlzLnRpbnlNQ0VDb25maWcudG9vbGJhcl9tb2RlID0gJ2Zsb2F0aW5nJztcbiAgICAgICAgLy8gdGhpcy50aW55TUNFQ29uZmlnLnRvb2xiYXJfc3RpY2t5ID0gdHJ1ZTtcbiAgICAgICAgLy8gdGhpcy50aW55TUNFQ29uZmlnLnRvb2xiYXJfc3RpY2t5X29mZnNldCA9IDEwMDtcbiAgICAgICAgdGhpcy50aW55TUNFQ29uZmlnLmZvbnRfZmFtaWx5X2Zvcm1hdHMgPVxuICAgICAgICAgICAgJ0JhcnNhRm9udD1CYXJzYUZvbnQ7QXJpYWw9YXJpYWwsaGVsdmV0aWNhLHNhbnMtc2VyaWY7IENvdXJpZXIgTmV3PWNvdXJpZXIgbmV3LGNvdXJpZXIsbW9ub3NwYWNlOyc7XG4gICAgICAgIHRoaXMudGlueU1DRUNvbmZpZy5mb250X3NpemVfZm9ybWF0cyA9ICc4cHQgMTBwdCAxMnB0IDE0cHQgMThwdCAyNHB0IDM2cHQnO1xuXG4gICAgICAgIHRoaXMudGlueU1DRUNvbmZpZy5wbHVnaW5zID0gW1xuICAgICAgICAgICAgJ2Fkdmxpc3QnLFxuICAgICAgICAgICAgJ2FuY2hvcicsXG4gICAgICAgICAgICAnYXV0b2xpbmsnLFxuICAgICAgICAgICAgJ2F1dG9zYXZlJyxcbiAgICAgICAgICAgICdjaGFybWFwJyxcbiAgICAgICAgICAgICdjb2RlJyxcbiAgICAgICAgICAgICdjb2Rlc2FtcGxlJyxcbiAgICAgICAgICAgICdkaXJlY3Rpb25hbGl0eScsXG4gICAgICAgICAgICAnZW1vdGljb25zJyxcbiAgICAgICAgICAgICdmdWxsc2NyZWVuJyxcbiAgICAgICAgICAgICdoZWxwJyxcbiAgICAgICAgICAgICdpbWFnZScsXG4gICAgICAgICAgICAnaW1wb3J0Y3NzJyxcbiAgICAgICAgICAgICdpbnNlcnRkYXRldGltZScsXG4gICAgICAgICAgICAnbGluaycsXG4gICAgICAgICAgICAnbGlzdHMnLFxuICAgICAgICAgICAgJ21lZGlhJyxcbiAgICAgICAgICAgICdub25icmVha2luZycsXG4gICAgICAgICAgICAncGFnZWJyZWFrJyxcbiAgICAgICAgICAgICdwcmV2aWV3JyxcbiAgICAgICAgICAgICdxdWlja2JhcnMnLFxuICAgICAgICAgICAgJ3NhdmUnLFxuICAgICAgICAgICAgJ3NlYXJjaHJlcGxhY2UnLFxuICAgICAgICAgICAgJ3RhYmxlJyxcbiAgICAgICAgICAgICd0ZW1wbGF0ZScsXG4gICAgICAgICAgICAndmlzdWFsYmxvY2tzJyxcbiAgICAgICAgICAgICd2aXN1YWxjaGFycycsXG4gICAgICAgICAgICAnd29yZGNvdW50JyxcbiAgICAgICAgICAgICdhdXRvcmVzaXplJ1xuICAgICAgICBdO1xuICAgICAgICB0aGlzLnRpbnlNQ0VDb25maWcudG9vbGJhciA9XG4gICAgICAgICAgICBgZGVmYXVsdFZlcmJzIGJhcnNhSW1hZ2UgfCBpbnNlcnQgfCBmb3JlY29sb3IgYmFja2NvbG9yIGZvbnRmYW1pbHkgZm9udHNpemUgfCBidWxsaXN0IG51bWxpc3Qgb3V0ZGVudCBpbmRlbnQgfCByZW1vdmVmb3JtYXRgICtcbiAgICAgICAgICAgIGAgfCB1bmRvIHJlZG8gfCBjb3B5IGN1dCBwYXN0ZSB8IGJsb2NrcyB8IGJvbGQgaXRhbGljIHwgYWxpZ25sZWZ0IGFsaWduY2VudGVyIGFsaWducmlnaHQgYWxpZ25qdXN0aWZ5IGx0ciBydGxgO1xuXG4gICAgICAgIHRoaXMudGlueU1DRUNvbmZpZy5xdWlja2JhcnNfc2VsZWN0aW9uX3Rvb2xiYXIgPVxuICAgICAgICAgICAgJ2JvbGQgaXRhbGljIGZvbnRzaXplIHwgZm9yZWNvbG9yIGJhY2tjb2xvcnxkZWZhdWx0VmVyYnMgYmFyc2FJbWFnZSc7XG4gICAgICAgIGNvbnN0IHRpbnltY2VTZXR0aW5nc0dsb2JhbCA9IHdpbmRvdy50aW55bWNlU2V0dGluZ3M7XG4gICAgICAgIGxldCB0aW55bWNlU2V0dGluZ3MgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZSh0aGlzLlNldHRpbmcsICdKc29uRXh0cmFQcm9wLnRpbnltY2VTZXR0aW5ncycpO1xuICAgICAgICB0aW55bWNlU2V0dGluZ3MgPSBCYXJzYUFwaS5Db21tb24uTWVyZ2VyLk1lcmdlKHRpbnltY2VTZXR0aW5nc0dsb2JhbCwgdGlueW1jZVNldHRpbmdzKTtcbiAgICAgICAgaWYgKCF0aW55bWNlU2V0dGluZ3MgJiYgQXJyYXkuaXNBcnJheSh0aW55bWNlU2V0dGluZ3MpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGlueW1jZVNldHRpbmdzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50aW55TUNFQ29uZmlnW2l0ZW0ua2V5XSA9IGl0ZW0udmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc1JlYWRvbmx5KSB7XG4gICAgICAgICAgICB0aGlzLnRpbnlNQ0VDb25maWcubWVudWJhciA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy50aW55TUNFQ29uZmlnLnN0YXR1c2JhciA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy50aW55TUNFQ29uZmlnLnBsdWdpbnMgPSBbJ2F1dG9yZXNpemUnXTtcbiAgICAgICAgICAgIC8vIHRoaXMudGlueU1DRUNvbmZpZy5wbHVnaW5zID0gW107XG4gICAgICAgICAgICB0aGlzLnRpbnlNQ0VDb25maWcudG9vbGJhciA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHVzZXJTZXR1cDogKGVkaXRvcjogYW55KSA9PiB2b2lkO1xuXG4gICAgICAgIGlmICh0aGlzLnRpbnlNQ0VDb25maWcuc2V0dXApIHtcbiAgICAgICAgICAgIHVzZXJTZXR1cCA9IHRoaXMudGlueU1DRUNvbmZpZy5zZXR1cDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgZGVmYXVsdFZlcmJzTWVudTogYW55ID0gW107XG5cbiAgICAgICAgLy8gQkVHSU46IHNldHVwXG4gICAgICAgIHRoaXMudGlueU1DRUNvbmZpZy5zZXR1cCA9IChlZCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5lZGl0b3IgPSBlZDtcbiAgICAgICAgICAgIGlmICghdGhpcy5pc1JlYWRvbmx5KSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVmYXVsdFZlcmJzKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWZXJic01lbnUgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0VmVyYnMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZlcmJzTWVudS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaXRlbS5IdG1sLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdtZW51aXRlbScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogaXRlbS5UaXRsZSB8fCBpdGVtLkh0bWwucmVwbGFjZSgvPGJyXFxzKlxcLz8+L2dpLCAnICcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQWN0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVkLmV4ZWNDb21tYW5kKCdtY2VJbnNlcnRSYXdIVE1MJywgZmFsc2UsIGl0ZW0uSHRtbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkLmluc2VydENvbnRlbnQoaXRlbS5IdG1sLCB7IGZvcm1hdDogJ3JhdycgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlZC51aS5yZWdpc3RyeS5hZGRTcGxpdEJ1dHRvbignYmFyc2FJbWFnZScsIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogJ2luc2VydCcsXG4gICAgICAgICAgICAgICAgICAgIGljb246ICdpbWFnZScsXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXA6ICdJbnNlcnQgSW1hZ2UgQXMgQmFzZTY0JyxcbiAgICAgICAgICAgICAgICAgICAgb25BY3Rpb246ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEJhcnNhQXBpLkNvbW1vbi5Bc3luYy5XYXRlcmZhbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RpbmVtY2UuRW1iZWRJbWFnZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuRmlsZURpYWxvZzogdGhpcy5TaG93T3BlbkZpbGVEaWFsb2cuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0QmFzZTY0OiB0aGlzLkluc2VydEJhc2U2NC5iaW5kKHRoaXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyLCByZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFyc2FBcGkuQ29tbW9uLkFzeW5jLkZpbmFsaXplKGVyciwgcmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBvbkl0ZW1BY3Rpb246ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEJhcnNhQXBpLkNvbW1vbi5Bc3luYy5XYXRlcmZhbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RpbmVtY2UuVXBsb2FkVG9EYXRhYmFzZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuRmlsZURpYWxvZzogdGhpcy5TaG93VXBsb2FkV2luZG93LmJpbmQodGhpcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcnIsIHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYXJzYUFwaS5Db21tb24uQXN5bmMuRmluYWxpemUoZXJyLCByZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGZldGNoOiAoY2FsbGJhY2spID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2Nob2ljZWl0ZW0nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAndXBsb2FkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2ltYWdlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcDogJ1VwbG9hZCBJbWFnZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAndXBsb2FkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhpdGVtcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGVkLnVpLnJlZ2lzdHJ5LmFkZE1lbnVCdXR0b24oJ2RlZmF1bHRWZXJicycsIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogJ9i52KjYp9ix2KrZh9in24wg2b7bjNi0INmB2LHYticsXG4gICAgICAgICAgICAgICAgICAgIGZldGNoOiAoY2FsbGJhY2spID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGRlZmF1bHRWZXJic01lbnUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24od2luZG93LnRpbnltY2VTZXR1cCkpIHtcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LnRpbnltY2VTZXR1cC5jYWxsKHRoaXMsIHRoaXMsIGVkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgaGFzSW5pdCA9IGZhbHNlO1xuICAgICAgICAgICAgZWQub24oJ2luaXQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy53eXNpd3lnSW50aWFsaXplZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnRpYWxpemF0aW9uSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy52YWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudGlueU1DRUNvbmZpZy5kZWZhdWx0Rm9udE5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgZWQuZXhlY0NvbW1hbmQoJ0ZvbnROYW1lJywgZmFsc2UsIHRoaXMudGlueU1DRUNvbmZpZy5kZWZhdWx0Rm9udE5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy50aW55TUNFQ29uZmlnLmRlZmF1bHRGb250U2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICBlZC5leGVjQ29tbWFuZCgnRm9udFNpemUnLCBmYWxzZSwgdGhpcy50aW55TUNFQ29uZmlnLmRlZmF1bHRGb250U2l6ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzUmVhZG9ubHkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRSZWFkT25seSh0aGlzLmlzUmVhZG9ubHkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBUaGlzIHBpZWNlIG9mIGNvZGUgc29sdmVzIHRoZSBwcm9ibGVtIG9mIGNoYW5nZSBwcm9wYWdhdGlvbiBzbyB0aGF0XG4gICAgICAgICAgICAgICAgLy8gdGhlcmUgaXMgbm8gbmVlZCB0byBjYWxsIHRyaWdnZXJTYXZlXG4gICAgICAgICAgICAgICAgY29uc3Qgc2V0Q29udGVudCA9IGVkLnNldENvbnRlbnQ7XG4gICAgICAgICAgICAgICAgZWQuc2V0Q29udGVudCA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHNldENvbnRlbnQuYXBwbHkoZWQsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICBlZC5kaXNwYXRjaCgnY2hhbmdlJywge30pO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgaGFzSW5pdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy50aW55SW5pdC5lbWl0KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgaWZyYW1FbDogSFRNTElGcmFtZUVsZW1lbnQgPSBlZC5pZnJhbWVFbGVtZW50O1xuICAgICAgICAgICAgICAgIGlmIChpZnJhbUVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmcmFtRWwuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRoaXMuX29uTG9hZElmcmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIENhdGNoIGFuZCBwcm9wYWdhdGUgdGhlIGNoYW5nZSBldmVudFxuICAgICAgICAgICAgbGV0IG9sZENvbnRlbnQgPSBudWxsO1xuICAgICAgICAgICAgZWQub24oJ2NoYW5nZSBrZXl1cCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXd2YWwgPSBlZC5nZXRDb250ZW50KCk7XG4gICAgICAgICAgICAgICAgaWYgKG5ld3ZhbCA9PT0gb2xkQ29udGVudCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgb2xkQ29udGVudCA9IG5ld3ZhbDtcbiAgICAgICAgICAgICAgICBpZiAoIWhhc0luaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGVkLnNhdmUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmVkaXRvclZhbHVlID0gbmV3dmFsO1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdChuZXd2YWwpO1xuICAgICAgICAgICAgICAgIC8vIHRoaXMuY29udGV4dC5maXJlRXZlbnQoJ2NoYW5nZScsIHRoaXMsIG5ld3ZhbCwgb2xkdmFsLCB7fSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZWQub24oJ2ZvY3VzJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFRPRE9cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAodXNlclNldHVwKSB7XG4gICAgICAgICAgICAgICAgdXNlclNldHVwKGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBTaG93VXBsb2FkV2luZG93KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl91cGxvYWRlci5vcGVuKCk7XG4gICAgfVxuICAgIFNob3dPcGVuRmlsZURpYWxvZyhkb1JldHVybik6IHZvaWQge1xuICAgICAgICBjb25zdCBpbnB1dDogYW55ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCd0eXBlJywgJ2ZpbGUnKTtcbiAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCdhY2NlcHQnLCAnaW1hZ2UvKicpO1xuXG4gICAgICAgIGlucHV0Lm9uY2hhbmdlID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGlucHV0LmZpbGVzWzBdO1xuXG4gICAgICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgYmFzZTY0ID0gcmVhZGVyLnJlc3VsdCBhcyBzdHJpbmc7XG4gICAgICAgICAgICAgICAgYmFzZTY0ID0gYmFzZTY0LnNwbGl0KCcsJylbMV07XG4gICAgICAgICAgICAgICAgZG9SZXR1cm4obnVsbCwgYmFzZTY0KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcbiAgICAgICAgfTtcblxuICAgICAgICBpbnB1dC5jbGljaygpO1xuICAgIH1cbiAgICBJbnNlcnRCYXNlNjQoYmFzZTY0LCBkb1JldHVybik6IHZvaWQge1xuICAgICAgICB0aGlzLmVkaXRvci5leGVjQ29tbWFuZCgnbWNlSW5zZXJ0Q29udGVudCcsIGZhbHNlLCAnPGltZyBzcmM9ZGF0YTppbWFnZS9wbmc7YmFzZTY0LCcgKyBiYXNlNjQgKyAnIC8+Jyk7XG4gICAgICAgIGRvUmV0dXJuKCk7XG4gICAgfVxuICAgIGdldFZhbHVlKCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICBsZXQgcmVzID0gbnVsbDtcbiAgICAgICAgaWYgKHRoaXMud3lzaXd5Z0ludGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGVkID0gdGlueW1jZS5nZXQodGhpcy50aW55SG9zdElkKTtcbiAgICAgICAgICAgIGlmIChlZCkge1xuICAgICAgICAgICAgICAgIHJlcyA9IGVkLmdldENvbnRlbnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIHNldFZhbHVlKHZhbHVlKTogdm9pZCB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5zZXRWYWx1ZVRpbnkoKTtcbiAgICB9XG4gICAgc2V0VmFsdWVUaW55KCk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLnd5c2l3eWdJbnRpYWxpemVkKSB7XG4gICAgICAgICAgICBjb25zdCBlZCA9IHRpbnltY2UuZ2V0KHRoaXMudGlueUhvc3RJZCk7XG4gICAgICAgICAgICBpZiAoZWQpIHtcbiAgICAgICAgICAgICAgICBlZC5zZXRDb250ZW50KHRoaXMudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICAgIH1cbiAgICBmb2N1cygpOiBhbnkge1xuICAgICAgICBpZiAodGhpcy5pc1JlYWRvbmx5KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnd5c2l3eWdJbnRpYWxpemVkKSB7XG4gICAgICAgICAgICB0aW55bWNlLmV4ZWNDb21tYW5kKCdtY2VGb2N1cycsIGZhbHNlLCAnaWRfb2ZfdGV4dGFyZWEnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBzZXRFbmFibGUoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnd5c2l3eWdJbnRpYWxpemVkKSB7XG4gICAgICAgICAgICBjb25zdCBlZCA9IHRpbnltY2UuZ2V0KHRoaXMudGlueUhvc3RJZCk7XG4gICAgICAgICAgICBlZC5nZXRCb2R5KCkuc2V0QXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnLCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldERpc2FibGUoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnd5c2l3eWdJbnRpYWxpemVkKSB7XG4gICAgICAgICAgICBjb25zdCBlZCA9IHRpbnltY2UuZ2V0KHRoaXMudGlueUhvc3RJZCk7XG4gICAgICAgICAgICBlZC5nZXRCb2R5KCkuc2V0QXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0UmVhZE9ubHkocmVhZE9ubHkpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMud3lzaXd5Z0ludGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGVkID0gdGlueW1jZS5nZXQodGhpcy50aW55SG9zdElkKTtcbiAgICAgICAgICAgIGVkLmdldEJvZHkoKS5zZXRBdHRyaWJ1dGUoJ2NvbnRlbnRlZGl0YWJsZScsICFyZWFkT25seSk7XG4gICAgICAgICAgICBpZiAocmVhZE9ubHkpIHtcbiAgICAgICAgICAgICAgICAkKCcudG94LWVkaXRvci1oZWFkZXInKS5oaWRlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICQoJy50b3gtZWRpdG9yLWhlYWRlcicpLmhpZGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRlc3Ryb3lUaW55bWNlKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5TZXR0aW5nLklzSHRtbFZpZXdlcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVkID0gdGlueW1jZS5nZXQodGhpcy50aW55SG9zdElkKTtcbiAgICAgICAgaWYgKGVkKSB7XG4gICAgICAgICAgICAvLyB0aW55bWNlLmV4ZWNDb21tYW5kKCdtY2VSZW1vdmVDb250cm9sJywgdHJ1ZSwgdGhpcy50aW55SG9zdElkKTtcbiAgICAgICAgICAgIGlmIChlZC5pZnJhbWVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgZWQuaWZyYW1lRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5fb25Mb2FkSWZyYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVkLmRlc3Ryb3koZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHByaXZhdGUgdXBsb2FkRmlsZShmaWxlczogRmlsZVtdKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VwbG9hZFNlcnZpY2UuY29tcHJlc3NGaWxlcyQoZmlsZXMpLnBpcGUoXG4gICAgICAgICAgICBjb25jYXRNYXAoKGZvcm1EYXRhOiBGb3JtRGF0YSkgPT5cbiAgICAgICAgICAgICAgICB0aGlzLl91cGxvYWRTZXJ2aWNlLnVwbG9hZChmb3JtRGF0YSwgdGhpcy5TZXR0aW5nLlN0b3JhZ2VGaWxlRmllbGRJZCkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgdGFwKChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwaWN0dXJlID0gcmVzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwaWN0dXJlLkVycm9yTXNnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhcnNhQXBpLkJ3Lk1zZy5FcnJvcihwaWN0dXJlLkVycm9yTXNnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucGljdHVyZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsZUlkOiBwaWN0dXJlLkZpbGVJZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWRkSW1hZ2VzKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuICAgIHByaXZhdGUgX2FkZEltYWdlcyhmaWxlOiB7IEZpbGVJZDogc3RyaW5nIH0pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdXJsID0gJy9JSC5hc2h4P3R5PVN0b3JhZ2VGaWxlJmtleT0nICsgZmlsZS5GaWxlSWQ7XG4gICAgICAgIGNvbnN0IGh0bWwgPSAnPGltZyBzcmM9JyArIHVybCArICcgLz4nO1xuXG4gICAgICAgIHRoaXMuZWRpdG9yLmV4ZWNDb21tYW5kKCdtY2VJbnNlcnRDb250ZW50JywgZmFsc2UsIGh0bWwpO1xuICAgIH1cbiAgICBwcml2YXRlIHByZXBhcmUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5pdGlsaXplKCk7XG4gICAgICAgIHRpbnltY2UuaW5pdCh0aGlzLnRpbnlNQ0VDb25maWcpO1xuICAgICAgICB0aGlzLmludGlhbGl6YXRpb25JblByb2dyZXNzID0gZmFsc2U7XG4gICAgICAgIHRoaXMud3lzaXd5Z0ludGlhbGl6ZWQgPSB0cnVlO1xuICAgIH1cbiAgICBwcml2YXRlIF9vbkxvYWRJZnJhbWUgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmVkaXRvclZhbHVlO1xuICAgICAgICAvLyBjb25zdCBlZCA9IHRpbnltY2UuZ2V0KHRoaXMudGlueUhvc3RJZCk7XG4gICAgICAgIC8vIGVkLmV4ZWNDb21tYW5kKCdtY2VJbnNlcnRDb250ZW50JywgZmFsc2UsIHRoaXMudmFsdWUpO1xuXG4gICAgICAgIC8vIGVkLmluc2VydENvbnRlbnQodGhpcy52YWx1ZSwgeyBmb3JtYXQ6ICdyYXcnIH0pO1xuICAgICAgICAvLyB0aGlzLl9yZW1vdmVPdmVyZmxvdyhlZCk7XG4gICAgICAgIHRoaXMuZGVzdHJveVRpbnltY2UoKTtcbiAgICAgICAgdGhpcy5wcmVwYXJlKCk7XG4gICAgfTtcbiAgICBwcml2YXRlIF9nZW5lcmF0ZVRpbnlIb3N0SWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGBhXyR7Z2V0VW5pcXVlSWQoMil9YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZW1vdmVPdmVyZmxvdyhlZDogYW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGh0bWwgPSBlZC5pZnJhbWVFbGVtZW50Py5jb250ZW50RG9jdW1lbnQ/LnF1ZXJ5U2VsZWN0b3IoJ2h0bWwnKTtcbiAgICAgICAgaWYgKGh0bWwpIHtcbiAgICAgICAgICAgIGh0bWwuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIjxkaXZcbiAgICBjbGFzcz1cImZkLWlucHV0IHRpbnl3cmFwcGVyXCJcbiAgICBbc3R5bGUubWluLWhlaWdodC5weF09XCJoZWlnaHRcIlxuICAgIFtpZF09XCJ0aW55SG9zdElkXCJcbiAgICBpbnRlcnNlY3Rpb25PYnNlcnZlclxuICAgIFtpbnRlcnNlY3Rpb25UaHJlc2hvbGRdPVwiMC4xXCJcbiAgICAodmlzaWJpbGl0eUNoYW5nZSk9XCJvblZpc2liaWxpdHlDaGFuZ2UoJGV2ZW50KVwiXG4+PC9kaXY+XG48ZmQtZmlsZS11cGxvYWRlclxuICAgICN1cGxvYWRlclxuICAgIFtzdHlsZS5kaXNwbGF5XT1cIidub25lJ1wiXG4gICAgW2FjY2VwdF09XCInJ1wiXG4gICAgW211bHRpcGxlXT1cImZhbHNlXCJcbiAgICAoc2VsZWN0ZWRGaWxlc0NoYW5nZWQpPVwib25GaWxlU2VsZWN0aW9uKCRldmVudClcIlxuPjwvZmQtZmlsZS11cGxvYWRlcj5cbjwhLS0gPHRleHRhcmVhIFtpZF09XCJ0aW55SG9zdElkXCIgc3R5bGU9XCJoZWlnaHQ6IDEwMCU7IHZpc2liaWxpdHk6IGhpZGRlblwiPjwvdGV4dGFyZWE+IC0tPlxuIl19
@@ -1,36 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, HostListener } from '@angular/core';
2
- import { PreventDefaulEvent, BaseFormToolbaritemPropsComponent, executeUlvCommandHandler } 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 "@fundamental-ngx/core/button";
7
- import * as i4 from "@fundamental-ngx/core/input-group";
8
- import * as i5 from "@fundamental-ngx/core/toolbar";
9
- import * as i6 from "barsa-novin-ray-core";
10
- export class BarsaToolbaritemSearchComponent extends BaseFormToolbaritemPropsComponent {
11
- constructor() {
12
- super(...arguments);
13
- this.searchMode = false;
14
- this.searchTerm = '';
15
- }
16
- onClick(e) {
17
- PreventDefaulEvent(e);
18
- }
19
- onSearchSubmit() {
20
- executeUlvCommandHandler(this.context, { searchText: this.searchTerm });
21
- }
22
- onSearchModeChange() {
23
- this.searchMode = !this.searchMode;
24
- this._cdr.detectChanges();
25
- }
26
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BarsaToolbaritemSearchComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
27
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: BarsaToolbaritemSearchComponent, selector: "bsu-barsa-toolbaritem-search", host: { listeners: { "click": "onClick($event)" } }, usesInheritance: true, ngImport: i0, template: "<ng-container *ngTemplateOutlet=\"searchTpl\"> </ng-container>\n<!-- <ng-container *ngTemplateOutlet=\"deviceSize !== 's' ? searchTpl : btnTpl\"> </ng-container> -->\n\n<ng-template #btnTpl>\n <button fd-button glyph=\"search\" fdType=\"transparent\" (click)=\"onSearchModeChange()\"></button>\n @if (searchMode) {\n <div style=\"z-index: 1; position: absolute; left: 0; top: 0; bottom: 0; right: 0\">\n <ng-container *ngTemplateOutlet=\"searchTpl\"></ng-container>\n </div>\n }\n</ng-template>\n<ng-template #searchTpl>\n <!-- <button fd-button glyph=\"arrow-right\" fdType=\"transparent\"></button> -->\n <!-- <fd-input-group placement=\"before\" glyph=\"arrow-right\" glyphAriaLabel=\"search\" placeholder=\"Search\">\n</fd-input-group> -->\n <fd-input-group\n [style.width]=\"deviceSize === 's' ? '100%' : '220px'\"\n fd-toolbar-item\n type=\"search\"\n glyph=\"search\"\n [glyphAriaLabel]=\"'Search' | bbbTranslate\"\n [placeholder]=\"'Search' | bbbTranslate\"\n [button]=\"true\"\n [disabled]=\"false\"\n [(ngModel)]=\"searchTerm\"\n (addOnButtonClicked)=\"onSearchSubmit()\"\n (keydown.enter)=\"onSearchSubmit()\"\n >\n </fd-input-group>\n</ng-template>\n", styles: [":host{display:block;width:100%;height:100%;min-width:180px}\n"], dependencies: [{ 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: "component", type: i3.ButtonComponent, selector: "button[fd-button], a[fd-button], span[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i4.InputGroupComponent, selector: "fd-input-group", inputs: ["placement", "required", "inline", "addOnText", "buttonFocusable", "type", "glyph", "glyphFont", "button", "isControl", "showFocus", "isExpanded", "glyphAriaLabel", "addonButtonAriaHidden", "iconTitle", "ariaLabelledBy", "ariaLabel"], outputs: ["addOnButtonClicked", "search"] }, { kind: "directive", type: i5.ToolbarItemDirective, selector: "[fd-toolbar-item], [fdOverflowGroup], [fdOverflowPriority]", inputs: ["fdOverflowPriority", "fdOverflowGroup"] }, { kind: "pipe", type: i6.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
28
- }
29
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BarsaToolbaritemSearchComponent, decorators: [{
30
- type: Component,
31
- args: [{ selector: 'bsu-barsa-toolbaritem-search', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngTemplateOutlet=\"searchTpl\"> </ng-container>\n<!-- <ng-container *ngTemplateOutlet=\"deviceSize !== 's' ? searchTpl : btnTpl\"> </ng-container> -->\n\n<ng-template #btnTpl>\n <button fd-button glyph=\"search\" fdType=\"transparent\" (click)=\"onSearchModeChange()\"></button>\n @if (searchMode) {\n <div style=\"z-index: 1; position: absolute; left: 0; top: 0; bottom: 0; right: 0\">\n <ng-container *ngTemplateOutlet=\"searchTpl\"></ng-container>\n </div>\n }\n</ng-template>\n<ng-template #searchTpl>\n <!-- <button fd-button glyph=\"arrow-right\" fdType=\"transparent\"></button> -->\n <!-- <fd-input-group placement=\"before\" glyph=\"arrow-right\" glyphAriaLabel=\"search\" placeholder=\"Search\">\n</fd-input-group> -->\n <fd-input-group\n [style.width]=\"deviceSize === 's' ? '100%' : '220px'\"\n fd-toolbar-item\n type=\"search\"\n glyph=\"search\"\n [glyphAriaLabel]=\"'Search' | bbbTranslate\"\n [placeholder]=\"'Search' | bbbTranslate\"\n [button]=\"true\"\n [disabled]=\"false\"\n [(ngModel)]=\"searchTerm\"\n (addOnButtonClicked)=\"onSearchSubmit()\"\n (keydown.enter)=\"onSearchSubmit()\"\n >\n </fd-input-group>\n</ng-template>\n", styles: [":host{display:block;width:100%;height:100%;min-width:180px}\n"] }]
32
- }], propDecorators: { onClick: [{
33
- type: HostListener,
34
- args: ['click', ['$event']]
35
- }] } });
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFyc2EtdG9vbGJhcml0ZW0tc2VhcmNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLXNhcC11aS9zcmMvbGliL2JhcnNhLXRvb2xiYXJpdGVtLXNlYXJjaC9iYXJzYS10b29sYmFyaXRlbS1zZWFyY2guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvYmFyc2EtdG9vbGJhcml0ZW0tc2VhcmNoL2JhcnNhLXRvb2xiYXJpdGVtLXNlYXJjaC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUN6RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsaUNBQWlDLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7Ozs7QUFRdkgsTUFBTSxPQUFPLCtCQUFnQyxTQUFRLGlDQUFpQztJQU50Rjs7UUFPSSxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25CLGVBQVUsR0FBRyxFQUFFLENBQUM7S0FZbkI7SUFWRyxPQUFPLENBQUMsQ0FBQztRQUNMLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFDRCxjQUFjO1FBQ1Ysd0JBQXdCLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBQ0Qsa0JBQWtCO1FBQ2QsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUM5QixDQUFDOytHQWJRLCtCQUErQjttR0FBL0IsK0JBQStCLGdKQ1Q1Qyw4dkNBOEJBOzs0RkRyQmEsK0JBQStCO2tCQU4zQyxTQUFTOytCQUNJLDhCQUE4QixtQkFHdkIsdUJBQXVCLENBQUMsTUFBTTs4QkFNL0MsT0FBTztzQkFETixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEhvc3RMaXN0ZW5lciwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQcmV2ZW50RGVmYXVsRXZlbnQsIEJhc2VGb3JtVG9vbGJhcml0ZW1Qcm9wc0NvbXBvbmVudCwgZXhlY3V0ZVVsdkNvbW1hbmRIYW5kbGVyIH0gZnJvbSAnYmFyc2Etbm92aW4tcmF5LWNvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2JzdS1iYXJzYS10b29sYmFyaXRlbS1zZWFyY2gnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9iYXJzYS10b29sYmFyaXRlbS1zZWFyY2guY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2JhcnNhLXRvb2xiYXJpdGVtLXNlYXJjaC5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEJhcnNhVG9vbGJhcml0ZW1TZWFyY2hDb21wb25lbnQgZXh0ZW5kcyBCYXNlRm9ybVRvb2xiYXJpdGVtUHJvcHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIHNlYXJjaE1vZGUgPSBmYWxzZTtcbiAgICBzZWFyY2hUZXJtID0gJyc7XG4gICAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxuICAgIG9uQ2xpY2soZSk6IHZvaWQge1xuICAgICAgICBQcmV2ZW50RGVmYXVsRXZlbnQoZSk7XG4gICAgfVxuICAgIG9uU2VhcmNoU3VibWl0KCk6IHZvaWQge1xuICAgICAgICBleGVjdXRlVWx2Q29tbWFuZEhhbmRsZXIodGhpcy5jb250ZXh0LCB7IHNlYXJjaFRleHQ6IHRoaXMuc2VhcmNoVGVybSB9KTtcbiAgICB9XG4gICAgb25TZWFyY2hNb2RlQ2hhbmdlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlYXJjaE1vZGUgPSAhdGhpcy5zZWFyY2hNb2RlO1xuICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzZWFyY2hUcGxcIj4gPC9uZy1jb250YWluZXI+XG48IS0tIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkZXZpY2VTaXplICE9PSAncycgPyBzZWFyY2hUcGwgOiBidG5UcGxcIj4gPC9uZy1jb250YWluZXI+IC0tPlxuXG48bmctdGVtcGxhdGUgI2J0blRwbD5cbiAgICA8YnV0dG9uIGZkLWJ1dHRvbiBnbHlwaD1cInNlYXJjaFwiIGZkVHlwZT1cInRyYW5zcGFyZW50XCIgKGNsaWNrKT1cIm9uU2VhcmNoTW9kZUNoYW5nZSgpXCI+PC9idXR0b24+XG4gICAgQGlmIChzZWFyY2hNb2RlKSB7XG4gICAgPGRpdiBzdHlsZT1cInotaW5kZXg6IDE7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogMDsgdG9wOiAwOyBib3R0b206IDA7IHJpZ2h0OiAwXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzZWFyY2hUcGxcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNzZWFyY2hUcGw+XG4gICAgPCEtLSA8YnV0dG9uIGZkLWJ1dHRvbiBnbHlwaD1cImFycm93LXJpZ2h0XCIgZmRUeXBlPVwidHJhbnNwYXJlbnRcIj48L2J1dHRvbj4gLS0+XG4gICAgPCEtLSA8ZmQtaW5wdXQtZ3JvdXAgcGxhY2VtZW50PVwiYmVmb3JlXCIgZ2x5cGg9XCJhcnJvdy1yaWdodFwiIGdseXBoQXJpYUxhYmVsPVwic2VhcmNoXCIgcGxhY2Vob2xkZXI9XCJTZWFyY2hcIj5cbjwvZmQtaW5wdXQtZ3JvdXA+IC0tPlxuICAgIDxmZC1pbnB1dC1ncm91cFxuICAgICAgICBbc3R5bGUud2lkdGhdPVwiZGV2aWNlU2l6ZSA9PT0gJ3MnID8gJzEwMCUnIDogJzIyMHB4J1wiXG4gICAgICAgIGZkLXRvb2xiYXItaXRlbVxuICAgICAgICB0eXBlPVwic2VhcmNoXCJcbiAgICAgICAgZ2x5cGg9XCJzZWFyY2hcIlxuICAgICAgICBbZ2x5cGhBcmlhTGFiZWxdPVwiJ1NlYXJjaCcgfCBiYmJUcmFuc2xhdGVcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NlYXJjaCcgfCBiYmJUcmFuc2xhdGVcIlxuICAgICAgICBbYnV0dG9uXT1cInRydWVcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgICBbKG5nTW9kZWwpXT1cInNlYXJjaFRlcm1cIlxuICAgICAgICAoYWRkT25CdXR0b25DbGlja2VkKT1cIm9uU2VhcmNoU3VibWl0KClcIlxuICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJvblNlYXJjaFN1Ym1pdCgpXCJcbiAgICA+XG4gICAgPC9mZC1pbnB1dC1ncm91cD5cbjwvbmctdGVtcGxhdGU+XG4iXX0=