@tetacom/ng-components 1.4.22 → 1.5.1

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 (325) hide show
  1. package/.eslintrc.json +3 -5
  2. package/component/dropdown/dropdown-base.d.ts +1 -1
  3. package/directive/dynamic-content-base.directive.d.ts +1 -1
  4. package/directive/only-number/only-number.directive.d.ts +1 -0
  5. package/fesm2022/tetacom-ng-components.mjs +533 -497
  6. package/fesm2022/tetacom-ng-components.mjs.map +1 -1
  7. package/package.json +3 -5
  8. package/pipe/prepend-zero/prepend-zero.pipe.d.ts +7 -0
  9. package/pipe/prepend-zero/public-api.d.ts +1 -0
  10. package/pipe/public-api.d.ts +1 -0
  11. package/style/badge.scss +6 -4
  12. package/style/checkbox.scss +3 -1
  13. package/style/chips.scss +3 -1
  14. package/style/icon.scss +3 -1
  15. package/style/message.scss +3 -1
  16. package/style/navigation.scss +3 -1
  17. package/style/presets/view-types.scss +3 -1
  18. package/style/toggle.scss +3 -1
  19. package/style/toolbar.scss +3 -1
  20. package/esm2022/common/contract/auto-close-ignore-case.mjs +0 -2
  21. package/esm2022/common/contract/constructor-type.mjs +0 -2
  22. package/esm2022/common/contract/dynamic-data.mjs +0 -10
  23. package/esm2022/common/contract/i-dictionary.mjs +0 -2
  24. package/esm2022/common/contract/i-id-name.mjs +0 -2
  25. package/esm2022/common/contract/i-id.mjs +0 -2
  26. package/esm2022/common/contract/i-rect.mjs +0 -2
  27. package/esm2022/common/contract/i-tree-data.mjs +0 -2
  28. package/esm2022/common/contract/public-api.mjs +0 -10
  29. package/esm2022/common/contract/teta-content-ref.mjs +0 -8
  30. package/esm2022/common/enum/align.enum.mjs +0 -13
  31. package/esm2022/common/enum/public-api.mjs +0 -4
  32. package/esm2022/common/enum/teta-size.enum.mjs +0 -9
  33. package/esm2022/common/enum/vertical-align.enum.mjs +0 -11
  34. package/esm2022/common/model/public-api.mjs +0 -2
  35. package/esm2022/common/model/view-type.model.mjs +0 -2
  36. package/esm2022/common/public-api.mjs +0 -6
  37. package/esm2022/common/service/click.service.mjs +0 -23
  38. package/esm2022/common/service/dynamic-component.service.mjs +0 -93
  39. package/esm2022/common/service/overlay-container.service.mjs +0 -41
  40. package/esm2022/common/service/public-api.mjs +0 -4
  41. package/esm2022/common/util/array-util.mjs +0 -121
  42. package/esm2022/common/util/dom-util.mjs +0 -19
  43. package/esm2022/common/util/position-util.mjs +0 -136
  44. package/esm2022/common/util/public-api.mjs +0 -4
  45. package/esm2022/component/accordion/accordion/accordion.component.mjs +0 -17
  46. package/esm2022/component/accordion/accordion-content.directive.mjs +0 -17
  47. package/esm2022/component/accordion/accordion-head/accordion-head.component.mjs +0 -51
  48. package/esm2022/component/accordion/accordion-item/accordion-item.component.mjs +0 -62
  49. package/esm2022/component/accordion/public-api.mjs +0 -5
  50. package/esm2022/component/autocomplete/autocomplete/autocomplete.component.mjs +0 -13
  51. package/esm2022/component/autocomplete/public-api.mjs +0 -2
  52. package/esm2022/component/avatar/avatar/avatar.component.mjs +0 -55
  53. package/esm2022/component/avatar/model/avatar-color.enum.mjs +0 -22
  54. package/esm2022/component/avatar/public-api.mjs +0 -2
  55. package/esm2022/component/button/button/button.component.mjs +0 -67
  56. package/esm2022/component/button/public-api.mjs +0 -2
  57. package/esm2022/component/chart-3d/chart3d/chart3d.component.mjs +0 -241
  58. package/esm2022/component/chart-3d/model/base-3d-point.mjs +0 -2
  59. package/esm2022/component/chart-3d/model/chart-3d-options.mjs +0 -7
  60. package/esm2022/component/chart-3d/model/public-api.mjs +0 -3
  61. package/esm2022/component/chart-3d/model/series-3d.mjs +0 -7
  62. package/esm2022/component/chart-3d/public-api.mjs +0 -3
  63. package/esm2022/component/checkbox/checkbox/checkbox.component.mjs +0 -137
  64. package/esm2022/component/checkbox/public-api.mjs +0 -2
  65. package/esm2022/component/date-picker/base-calendar.mjs +0 -121
  66. package/esm2022/component/date-picker/base-picker.mjs +0 -109
  67. package/esm2022/component/date-picker/date-picker/date-calendar/date-calendar.component.mjs +0 -50
  68. package/esm2022/component/date-picker/date-picker/date-picker.component.mjs +0 -228
  69. package/esm2022/component/date-picker/date-range/date-range.component.mjs +0 -233
  70. package/esm2022/component/date-picker/date-range/range-calendar/range-calendar.component.mjs +0 -118
  71. package/esm2022/component/date-picker/day-picker/day-item/day-item.component.mjs +0 -15
  72. package/esm2022/component/date-picker/day-picker/day-picker.component.mjs +0 -118
  73. package/esm2022/component/date-picker/model/date-period.mjs +0 -7
  74. package/esm2022/component/date-picker/model/date-picker-mode.enum.mjs +0 -7
  75. package/esm2022/component/date-picker/model/day-model.mjs +0 -13
  76. package/esm2022/component/date-picker/model/from-to.model.mjs +0 -2
  77. package/esm2022/component/date-picker/model/min-max-date.model.mjs +0 -2
  78. package/esm2022/component/date-picker/model/public-api.mjs +0 -6
  79. package/esm2022/component/date-picker/month-picker/month-picker.component.mjs +0 -47
  80. package/esm2022/component/date-picker/public-api.mjs +0 -6
  81. package/esm2022/component/date-picker/year-picker/scroll-to-selected-year.directive.mjs +0 -27
  82. package/esm2022/component/date-picker/year-picker/year-picker.component.mjs +0 -48
  83. package/esm2022/component/delimiter/delimiter/delimiter.component.mjs +0 -63
  84. package/esm2022/component/delimiter/public-api.mjs +0 -2
  85. package/esm2022/component/divider/divider/divider.component.mjs +0 -18
  86. package/esm2022/component/divider/public-api.mjs +0 -2
  87. package/esm2022/component/dropdown/dropdown/dropdown.component.mjs +0 -30
  88. package/esm2022/component/dropdown/dropdown-base.mjs +0 -224
  89. package/esm2022/component/dropdown/dropdown-content.directive.mjs +0 -18
  90. package/esm2022/component/dropdown/dropdown-head.directive.mjs +0 -19
  91. package/esm2022/component/dropdown/dropdown.directive.mjs +0 -38
  92. package/esm2022/component/dropdown/public-api.mjs +0 -5
  93. package/esm2022/component/dynamic-component/popup-content/popup-content.component.mjs +0 -53
  94. package/esm2022/component/dynamic-component/public-api.mjs +0 -2
  95. package/esm2022/component/expand-card/expand-card/expand-card.component.mjs +0 -34
  96. package/esm2022/component/expand-card/expand-item/expand-item.component.mjs +0 -25
  97. package/esm2022/component/expand-card/public-api.mjs +0 -3
  98. package/esm2022/component/expand-panel/expand-panel/expand-panel.component.mjs +0 -65
  99. package/esm2022/component/expand-panel/expand-panel-content.directive.mjs +0 -17
  100. package/esm2022/component/expand-panel/expand-panel-head.directive.mjs +0 -17
  101. package/esm2022/component/expand-panel/public-api.mjs +0 -4
  102. package/esm2022/component/file-upload/file-item/file-item.component.mjs +0 -13
  103. package/esm2022/component/file-upload/file-upload-area/file-upload-area.component.mjs +0 -87
  104. package/esm2022/component/file-upload/public-api.mjs +0 -3
  105. package/esm2022/component/filter/base/filter-base.mjs +0 -10
  106. package/esm2022/component/filter/base/filter-component-base.mjs +0 -3
  107. package/esm2022/component/filter/boolean-filter/boolean-filter.component.mjs +0 -63
  108. package/esm2022/component/filter/contarct/boolean-filter.mjs +0 -8
  109. package/esm2022/component/filter/contarct/date-filter-value.mjs +0 -9
  110. package/esm2022/component/filter/contarct/date-filter.mjs +0 -11
  111. package/esm2022/component/filter/contarct/filter-component-map.mjs +0 -15
  112. package/esm2022/component/filter/contarct/filter-item.mjs +0 -34
  113. package/esm2022/component/filter/contarct/filter-state.mjs +0 -145
  114. package/esm2022/component/filter/contarct/i-filter.mjs +0 -2
  115. package/esm2022/component/filter/contarct/list-filter.mjs +0 -12
  116. package/esm2022/component/filter/contarct/numeric-filter-value.mjs +0 -10
  117. package/esm2022/component/filter/contarct/numeric-filter.mjs +0 -9
  118. package/esm2022/component/filter/contarct/sort-param.mjs +0 -14
  119. package/esm2022/component/filter/contarct/string-filter.mjs +0 -12
  120. package/esm2022/component/filter/date-filter/date-filter.component.mjs +0 -64
  121. package/esm2022/component/filter/enum/filter-type.enum.mjs +0 -10
  122. package/esm2022/component/filter/enum/list-filter-type.enum.mjs +0 -6
  123. package/esm2022/component/filter/enum/string-filter-type.enum.mjs +0 -20
  124. package/esm2022/component/filter/filter-host/filter-host.component.mjs +0 -79
  125. package/esm2022/component/filter/list-filter/list-filter.component.mjs +0 -96
  126. package/esm2022/component/filter/numeric-filter/numeric-filter.component.mjs +0 -64
  127. package/esm2022/component/filter/public-api.mjs +0 -23
  128. package/esm2022/component/filter/string-filter/string-filter.component.mjs +0 -64
  129. package/esm2022/component/icon/icon/icon.component.mjs +0 -54
  130. package/esm2022/component/icon/icon-file/icon-file.component.mjs +0 -27
  131. package/esm2022/component/icon/icon-sprite.directive.mjs +0 -34
  132. package/esm2022/component/icon/icon.service.mjs +0 -58
  133. package/esm2022/component/icon/public-api.mjs +0 -5
  134. package/esm2022/component/input/color-input/color-input.component.mjs +0 -71
  135. package/esm2022/component/input/form-group-title/form-group-title.component.mjs +0 -18
  136. package/esm2022/component/input/input/input.component.mjs +0 -38
  137. package/esm2022/component/input/public-api.mjs +0 -6
  138. package/esm2022/component/input/text-field/text-field.component.mjs +0 -94
  139. package/esm2022/component/message/message/message.component.mjs +0 -76
  140. package/esm2022/component/message/message-host/message-host.component.mjs +0 -84
  141. package/esm2022/component/message/message.service.mjs +0 -35
  142. package/esm2022/component/message/model/message.mjs +0 -23
  143. package/esm2022/component/message/public-api.mjs +0 -5
  144. package/esm2022/component/modal/dialog/dialog.component.mjs +0 -46
  145. package/esm2022/component/modal/dialog.service.mjs +0 -40
  146. package/esm2022/component/modal/modal-container/modal-container.component.mjs +0 -77
  147. package/esm2022/component/modal/modal.module.mjs +0 -32
  148. package/esm2022/component/modal/modal.service.mjs +0 -122
  149. package/esm2022/component/modal/model/current-modal.mjs +0 -3
  150. package/esm2022/component/modal/model/i-modal-config.mjs +0 -2
  151. package/esm2022/component/modal/model/i-modal-result.mjs +0 -2
  152. package/esm2022/component/modal/model/modal-close-reason.enum.mjs +0 -8
  153. package/esm2022/component/modal/model/modal-instance.mjs +0 -34
  154. package/esm2022/component/modal/public-api.mjs +0 -11
  155. package/esm2022/component/pager/model/pager-state.mjs +0 -51
  156. package/esm2022/component/pager/pager/pager.component.mjs +0 -13
  157. package/esm2022/component/pager/public-api.mjs +0 -4
  158. package/esm2022/component/pager/util/pager-util.mjs +0 -6
  159. package/esm2022/component/panel/panel/panel.component.mjs +0 -45
  160. package/esm2022/component/panel/public-api.mjs +0 -2
  161. package/esm2022/component/progress-bar/progress-bar/progress-bar.component.mjs +0 -130
  162. package/esm2022/component/progress-bar/public-api.mjs +0 -2
  163. package/esm2022/component/property-grid/property-grid/property-grid-group/property-grid-group.component.mjs +0 -24
  164. package/esm2022/component/property-grid/property-grid/property-grid-item/property-grid-item.component.mjs +0 -133
  165. package/esm2022/component/property-grid/property-grid/property-grid-item-description.directive.mjs +0 -20
  166. package/esm2022/component/property-grid/property-grid/property-grid.component.mjs +0 -97
  167. package/esm2022/component/property-grid/public-api.mjs +0 -4
  168. package/esm2022/component/public-api.mjs +0 -72
  169. package/esm2022/component/radio/public-api.mjs +0 -3
  170. package/esm2022/component/radio/radio/radio.component.mjs +0 -240
  171. package/esm2022/component/radio/radio-button/radio-button.component.mjs +0 -63
  172. package/esm2022/component/resize-panel/public-api.mjs +0 -2
  173. package/esm2022/component/resize-panel/resize-panel/resize-panel.component.mjs +0 -166
  174. package/esm2022/component/select/public-api.mjs +0 -4
  175. package/esm2022/component/select/select/select.component.mjs +0 -272
  176. package/esm2022/component/select/select-option.directive.mjs +0 -17
  177. package/esm2022/component/select/select-value.directive.mjs +0 -17
  178. package/esm2022/component/sidebar/public-api.mjs +0 -3
  179. package/esm2022/component/sidebar/sidebar/sidebar.component.mjs +0 -48
  180. package/esm2022/component/sidebar/sidebar-position.enum.mjs +0 -8
  181. package/esm2022/component/stepper/public-api.mjs +0 -2
  182. package/esm2022/component/stepper/stepper/stepper.component.mjs +0 -16
  183. package/esm2022/component/switch/public-api.mjs +0 -3
  184. package/esm2022/component/switch/switch/switch.component.mjs +0 -61
  185. package/esm2022/component/switch/switch-button/switch-button.component.mjs +0 -47
  186. package/esm2022/component/switch/switch.service.mjs +0 -21
  187. package/esm2022/component/table/base/cell-component-base.mjs +0 -158
  188. package/esm2022/component/table/base/detail-component-base.mjs +0 -3
  189. package/esm2022/component/table/base/head-cell-component-base.mjs +0 -18
  190. package/esm2022/component/table/cell/cell.component.mjs +0 -28
  191. package/esm2022/component/table/cell-host/cell-host.component.mjs +0 -56
  192. package/esm2022/component/table/contract/cell-components-map.mjs +0 -15
  193. package/esm2022/component/table/contract/column-reorder-event.mjs +0 -7
  194. package/esm2022/component/table/contract/column-resize-event.mjs +0 -7
  195. package/esm2022/component/table/contract/head-dropdown-tab.mjs +0 -2
  196. package/esm2022/component/table/contract/i-cell-coordinates.mjs +0 -2
  197. package/esm2022/component/table/contract/i-cell-event.mjs +0 -2
  198. package/esm2022/component/table/contract/i-cell-instance.mjs +0 -2
  199. package/esm2022/component/table/contract/i-cell-value.mjs +0 -2
  200. package/esm2022/component/table/contract/public-api.mjs +0 -13
  201. package/esm2022/component/table/contract/sort-event.mjs +0 -7
  202. package/esm2022/component/table/contract/table-column-store.mjs +0 -12
  203. package/esm2022/component/table/contract/table-column.mjs +0 -44
  204. package/esm2022/component/table/contract/table-row.mjs +0 -7
  205. package/esm2022/component/table/default/boolean-cell/boolean-cell.component.mjs +0 -39
  206. package/esm2022/component/table/default/date-cell/date-cell.component.mjs +0 -40
  207. package/esm2022/component/table/default/date-time-cell/date-time-cell.component.mjs +0 -40
  208. package/esm2022/component/table/default/default-head-cell/default-head-cell.component.mjs +0 -49
  209. package/esm2022/component/table/default/list-cell/list-cell.component.mjs +0 -60
  210. package/esm2022/component/table/default/numeric-cell/numeric-cell.component.mjs +0 -39
  211. package/esm2022/component/table/default/string-cell/string-cell.component.mjs +0 -40
  212. package/esm2022/component/table/enum/aggregation-type.enum.mjs +0 -9
  213. package/esm2022/component/table/enum/edit-event.enum.mjs +0 -7
  214. package/esm2022/component/table/enum/edit-type.enum.mjs +0 -7
  215. package/esm2022/component/table/enum/public-api.mjs +0 -5
  216. package/esm2022/component/table/enum/select-type.enum.mjs +0 -7
  217. package/esm2022/component/table/head-cell/head-cell.component.mjs +0 -204
  218. package/esm2022/component/table/head-cell-dropdown/head-cell-dropdown.component.mjs +0 -50
  219. package/esm2022/component/table/head-cell-host/head-cell-host.component.mjs +0 -60
  220. package/esm2022/component/table/public-api.mjs +0 -42
  221. package/esm2022/component/table/selection-cell/selection-cell.component.mjs +0 -46
  222. package/esm2022/component/table/selection-head-cell/selection-head-cell.component.mjs +0 -45
  223. package/esm2022/component/table/service/table.service.mjs +0 -650
  224. package/esm2022/component/table/table/table.component.mjs +0 -470
  225. package/esm2022/component/table/table-body/table-body.component.mjs +0 -210
  226. package/esm2022/component/table/table-head/filter-dropdown-tab/filter-dropdown-tab.component.mjs +0 -57
  227. package/esm2022/component/table/table-head/main-dropdown-tab/main-dropdown-tab.component.mjs +0 -89
  228. package/esm2022/component/table/table-head/table-head.component.mjs +0 -76
  229. package/esm2022/component/table/table-head/visibility-dropdown-tab/visibility-dropdown-tab.component.mjs +0 -154
  230. package/esm2022/component/table/table-head-group/table-head-group.component.mjs +0 -72
  231. package/esm2022/component/table/table-row/table-row.component.mjs +0 -42
  232. package/esm2022/component/table/util/public-api.mjs +0 -3
  233. package/esm2022/component/table/util/state-util.mjs +0 -146
  234. package/esm2022/component/table/util/table-util.mjs +0 -133
  235. package/esm2022/component/tabs/public-api.mjs +0 -11
  236. package/esm2022/component/tabs/tab/tab.component.mjs +0 -42
  237. package/esm2022/component/tabs/tab-content.directive.mjs +0 -17
  238. package/esm2022/component/tabs/tab-title.directive.mjs +0 -17
  239. package/esm2022/component/tabs/tabs/tabs.component.mjs +0 -82
  240. package/esm2022/component/theme-switch/public-api.mjs +0 -3
  241. package/esm2022/component/theme-switch/theme-switch/theme-switch.component.mjs +0 -30
  242. package/esm2022/component/theme-switch/theme-switch.service.mjs +0 -34
  243. package/esm2022/component/toggle/public-api.mjs +0 -2
  244. package/esm2022/component/toggle/toggle/toggle.component.mjs +0 -79
  245. package/esm2022/component/toolbar/public-api.mjs +0 -5
  246. package/esm2022/component/toolbar/toolbar/toolbar.component.mjs +0 -26
  247. package/esm2022/component/tree/public-api.mjs +0 -4
  248. package/esm2022/component/tree/tree/tree.component.mjs +0 -143
  249. package/esm2022/component/tree/tree-item/tree-item.component.mjs +0 -75
  250. package/esm2022/component/tree/tree-item-toggle/tree-item-toggle.component.mjs +0 -28
  251. package/esm2022/component/tree/tree.service.mjs +0 -40
  252. package/esm2022/directive/auto-position/auto-position.directive.mjs +0 -71
  253. package/esm2022/directive/auto-position/public-api.mjs +0 -2
  254. package/esm2022/directive/click-outside/click-outside.directive.mjs +0 -66
  255. package/esm2022/directive/click-outside/public-api.mjs +0 -2
  256. package/esm2022/directive/context-menu/context-menu.directive.mjs +0 -119
  257. package/esm2022/directive/context-menu/public-api.mjs +0 -2
  258. package/esm2022/directive/disable-control/disable-control.directive.mjs +0 -35
  259. package/esm2022/directive/disable-control/public-api.mjs +0 -2
  260. package/esm2022/directive/drag-drop/drag-container.directive.mjs +0 -92
  261. package/esm2022/directive/drag-drop/drag-drop.service.mjs +0 -145
  262. package/esm2022/directive/drag-drop/drag-placeholder.directive.mjs +0 -15
  263. package/esm2022/directive/drag-drop/drag-preview.directive.mjs +0 -17
  264. package/esm2022/directive/drag-drop/drag.directive.mjs +0 -138
  265. package/esm2022/directive/drag-drop/model/drag-container-instance.mjs +0 -8
  266. package/esm2022/directive/drag-drop/model/drag-instance.mjs +0 -7
  267. package/esm2022/directive/drag-drop/model/drag-process.mjs +0 -2
  268. package/esm2022/directive/drag-drop/model/drag-selection.mjs +0 -2
  269. package/esm2022/directive/drag-drop/model/drop-event.mjs +0 -2
  270. package/esm2022/directive/drag-drop/model/drop-target.mjs +0 -2
  271. package/esm2022/directive/drag-drop/model/point.mjs +0 -2
  272. package/esm2022/directive/drag-drop/model/public-api.mjs +0 -8
  273. package/esm2022/directive/drag-drop/public-api.mjs +0 -7
  274. package/esm2022/directive/drag-sort/drag-sort-container.directive.mjs +0 -65
  275. package/esm2022/directive/drag-sort/drag-sort-event.mjs +0 -2
  276. package/esm2022/directive/drag-sort/drag-sort-item.directive.mjs +0 -111
  277. package/esm2022/directive/drag-sort/public-api.mjs +0 -4
  278. package/esm2022/directive/dynamic-content-base.directive.mjs +0 -80
  279. package/esm2022/directive/highlight/highlight.directive.mjs +0 -72
  280. package/esm2022/directive/highlight/public-api.mjs +0 -2
  281. package/esm2022/directive/hint/hint.directive.mjs +0 -102
  282. package/esm2022/directive/hint/public-api.mjs +0 -2
  283. package/esm2022/directive/let/let.directive.mjs +0 -39
  284. package/esm2022/directive/let/public-api.mjs +0 -2
  285. package/esm2022/directive/loader/loader.directive.mjs +0 -85
  286. package/esm2022/directive/loader/public-api.mjs +0 -2
  287. package/esm2022/directive/no-autofill/no-autofill.directive.mjs +0 -31
  288. package/esm2022/directive/no-autofill/public-api.mjs +0 -2
  289. package/esm2022/directive/only-number/only-number.directive.mjs +0 -184
  290. package/esm2022/directive/only-number/public-api.mjs +0 -2
  291. package/esm2022/directive/public-api.mjs +0 -19
  292. package/esm2022/directive/resize-drag/public-api.mjs +0 -2
  293. package/esm2022/directive/resize-drag/resize-drag.directive.mjs +0 -72
  294. package/esm2022/directive/scroll-into-view/public-api.mjs +0 -2
  295. package/esm2022/directive/scroll-into-view/scroll-into-view.directive.mjs +0 -41
  296. package/esm2022/directive/scrollable/public-api.mjs +0 -3
  297. package/esm2022/directive/scrollable/scrollable/scrollable.component.mjs +0 -98
  298. package/esm2022/directive/scrollable/scrollable.directive.mjs +0 -20
  299. package/esm2022/directive/teta-template/public-api.mjs +0 -2
  300. package/esm2022/directive/teta-template/teta-template.directive.mjs +0 -23
  301. package/esm2022/directive/tooltip/public-api.mjs +0 -2
  302. package/esm2022/directive/tooltip/tooltip.directive.mjs +0 -81
  303. package/esm2022/index.mjs +0 -22
  304. package/esm2022/locale/en.mjs +0 -50
  305. package/esm2022/locale/public-api.mjs +0 -5
  306. package/esm2022/locale/ru.mjs +0 -50
  307. package/esm2022/locale/teta-config.service.mjs +0 -28
  308. package/esm2022/locale/teta-localisation.mjs +0 -2
  309. package/esm2022/observable/animation-frame.mjs +0 -30
  310. package/esm2022/observable/public-api.mjs +0 -3
  311. package/esm2022/observable/zone-observable.mjs +0 -15
  312. package/esm2022/pipe/date-pipe/public-api.mjs +0 -2
  313. package/esm2022/pipe/date-pipe/teta-date.pipe.mjs +0 -43
  314. package/esm2022/pipe/number-pipe/number.pipe.mjs +0 -28
  315. package/esm2022/pipe/number-pipe/public-api.mjs +0 -2
  316. package/esm2022/pipe/public-api.mjs +0 -4
  317. package/esm2022/pipe/util/number-helper.mjs +0 -25
  318. package/esm2022/tetacom-ng-components.mjs +0 -5
  319. package/esm2022/util/bool-or-func.mjs +0 -13
  320. package/esm2022/util/date-util.mjs +0 -231
  321. package/esm2022/util/export-dom-image.mjs +0 -22
  322. package/esm2022/util/forms-util.mjs +0 -85
  323. package/esm2022/util/is-function.mjs +0 -4
  324. package/esm2022/util/public-api.mjs +0 -7
  325. package/esm2022/util/string-util.mjs +0 -9
@@ -1,210 +0,0 @@
1
- import { CdkVirtualScrollViewport, CdkFixedSizeVirtualScroll, CdkVirtualForOf } from '@angular/cdk/scrolling';
2
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, HostBinding, input, Input, Output, Type, ViewChild, } from '@angular/core';
3
- import { combineLatest } from 'rxjs';
4
- import { takeWhile } from 'rxjs/operators';
5
- import { ArrayUtil } from '../../../common/util/array-util';
6
- import { TetaConfigService } from '../../../locale/teta-config.service';
7
- import { AggregationType } from '../enum/aggregation-type.enum';
8
- import { SelectType } from '../enum/select-type.enum';
9
- import { TableService } from '../service/table.service';
10
- import { NumberPipe } from '../../../pipe/number-pipe/number.pipe';
11
- import { IconComponent } from '../../icon/icon/icon.component';
12
- import { CellComponent } from '../cell/cell.component';
13
- import { SelectionCellComponent } from '../selection-cell/selection-cell.component';
14
- import { FormsModule } from '@angular/forms';
15
- import { NgTemplateOutlet, NgClass, AsyncPipe } from '@angular/common';
16
- import { ScrollableDirective } from '../../../directive/scrollable/scrollable.directive';
17
- import { ScrollableComponent } from '../../../directive/scrollable/scrollable/scrollable.component';
18
- import { TableRowComponent } from '../table-row/table-row.component';
19
- import * as i0 from "@angular/core";
20
- import * as i1 from "../service/table.service";
21
- import * as i2 from "../../../locale/teta-config.service";
22
- import * as i3 from "@angular/forms";
23
- export class TableBodyComponent {
24
- set data(data) {
25
- this._data = data;
26
- }
27
- get data() {
28
- return this._data;
29
- }
30
- set columns(columns) {
31
- this._columns = columns;
32
- this.locked = this._columns?.filter((_) => _.locked === true);
33
- this.unlocked = this._columns?.filter((_) => _.locked === false);
34
- const startWidth = this.selectType === SelectType.checkBox ? 28 : 0;
35
- this.lockedFlex = this.locked.reduce((prev, curr) => prev + curr.flex, 0);
36
- this.lockedWidth = this.locked.reduce((prev, curr) => prev + curr.width, startWidth);
37
- this.totalFlex = this._columns.reduce((prev, curr) => prev + curr.flex, 0);
38
- this.totalWidth = this._columns.reduce((prev, curr) => prev + curr.width, startWidth);
39
- }
40
- get columns() {
41
- return this._columns;
42
- }
43
- constructor(_svc, _elementRef, _config, _cdr) {
44
- this._svc = _svc;
45
- this._elementRef = _elementRef;
46
- this._config = _config;
47
- this._cdr = _cdr;
48
- this.selectedRows = [];
49
- this.rowHeight = input(28);
50
- this.tableBodyClass = true;
51
- this.scrollChange = new EventEmitter();
52
- this.locked = [];
53
- this.unlocked = [];
54
- this.selectTypeEnum = SelectType;
55
- this.aggregationType = AggregationType;
56
- this._columns = [];
57
- this._alive = true;
58
- this._hiddenColumns = [];
59
- this.trackTableRow = (index, row) => {
60
- return this.trackRow ? this.trackRow(index, row.data) : row.data['id'];
61
- };
62
- }
63
- setActiveRow(row, event) {
64
- if (!event.shiftKey && !event.ctrlKey) {
65
- this._svc.setActiveRow(row);
66
- }
67
- }
68
- ngOnInit() {
69
- this.locale = this._config.locale;
70
- combineLatest([this._svc.columns, this._svc.hiddenColumns])
71
- .pipe(takeWhile((_) => this._alive))
72
- .subscribe((values) => {
73
- const [columns, hiddenColumns] = values;
74
- this._hiddenColumns = hiddenColumns;
75
- this.columns = ArrayUtil.flatten(columns, 'columns', true).filter((_) => this._hiddenColumns.indexOf(_.name) < 0);
76
- this._cdr.markForCheck();
77
- });
78
- this._svc.displayData.pipe(takeWhile((_) => this._alive)).subscribe((_) => {
79
- this.data = _;
80
- this._cdr.markForCheck();
81
- this.viewport?.checkViewportSize();
82
- });
83
- this._svc.dict.pipe(takeWhile((_) => this._alive)).subscribe((_) => {
84
- this.dict = _;
85
- this._cdr.markForCheck();
86
- });
87
- this._svc.scrollIndex.pipe(takeWhile(() => this._alive)).subscribe(async (index) => {
88
- if (this.viewport) {
89
- this.viewport.scrollToIndex(index, 'auto');
90
- }
91
- else {
92
- const row = this._elementRef.nativeElement.querySelector(`.table-row[data-row="${index}"]`);
93
- row?.scrollIntoView();
94
- }
95
- this._cdr.markForCheck();
96
- });
97
- this._svc.activeRow.pipe(takeWhile((_) => this._alive)).subscribe(async (_) => {
98
- this.activeRow = _;
99
- this._cdr.markForCheck();
100
- });
101
- this.addResizeObserver();
102
- }
103
- ngOnDestroy() {
104
- this._alive = false;
105
- this.removeResizeObserver();
106
- }
107
- getAggregateValue(column) {
108
- if (column.aggregate === AggregationType.sum) {
109
- return this.getSum(column.name);
110
- }
111
- if (column.aggregate === AggregationType.avg) {
112
- return this.getSum(column.name) / this.data.length;
113
- }
114
- if (column.aggregate === AggregationType.min) {
115
- return this.getMin(column.name);
116
- }
117
- if (column.aggregate === AggregationType.max) {
118
- return this.getMax(column.name);
119
- }
120
- return null;
121
- }
122
- getAggregateText(column) {
123
- if (column.aggregate === AggregationType.sum) {
124
- return 'sum';
125
- }
126
- if (column.aggregate === AggregationType.avg) {
127
- return 'avg';
128
- }
129
- if (column.aggregate === AggregationType.min) {
130
- return 'min';
131
- }
132
- if (column.aggregate === AggregationType.max) {
133
- return 'max';
134
- }
135
- return '';
136
- }
137
- emitScroll(event) {
138
- this.scrollChange.emit(event);
139
- }
140
- addResizeObserver() {
141
- this._obs = new ResizeObserver((_) => {
142
- this.viewport?.checkViewportSize();
143
- });
144
- this._obs.observe(this._elementRef.nativeElement);
145
- }
146
- removeResizeObserver() {
147
- this._obs.unobserve(this._elementRef.nativeElement);
148
- this._obs.disconnect();
149
- }
150
- getSum(columnName) {
151
- return this.data?.reduce((accum, current) => {
152
- const val = parseFloat(current.data[columnName]);
153
- return accum + (isNaN(val) ? 0 : val);
154
- }, 0);
155
- }
156
- getMin(columnName) {
157
- return this.data?.reduce((accum, current) => accum != null && accum <= current.data[columnName] ? accum : current.data[columnName], null);
158
- }
159
- getMax(columnName) {
160
- return this.data?.reduce((accum, current) => (accum != null && accum >= current.data[columnName] ? accum : current.data[columnName]), null);
161
- }
162
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: TableBodyComponent, deps: [{ token: i1.TableService }, { token: i0.ElementRef }, { token: i2.TetaConfigService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
163
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.1", type: TableBodyComponent, isStandalone: true, selector: "teta-table-body", inputs: { virtual: { classPropertyName: "virtual", publicName: "virtual", isSignal: false, isRequired: false, transformFunction: null }, activeRow: { classPropertyName: "activeRow", publicName: "activeRow", isSignal: false, isRequired: false, transformFunction: null }, selectedRows: { classPropertyName: "selectedRows", publicName: "selectedRows", isSignal: false, isRequired: false, transformFunction: null }, additionalComponent: { classPropertyName: "additionalComponent", publicName: "additionalComponent", isSignal: false, isRequired: false, transformFunction: null }, aggregate: { classPropertyName: "aggregate", publicName: "aggregate", isSignal: false, isRequired: false, transformFunction: null }, selectType: { classPropertyName: "selectType", publicName: "selectType", isSignal: false, isRequired: false, transformFunction: null }, rowClass: { classPropertyName: "rowClass", publicName: "rowClass", isSignal: false, isRequired: false, transformFunction: null }, trackRow: { classPropertyName: "trackRow", publicName: "trackRow", isSignal: false, isRequired: false, transformFunction: null }, trackColumns: { classPropertyName: "trackColumns", publicName: "trackColumns", isSignal: false, isRequired: false, transformFunction: null }, rowHeight: { classPropertyName: "rowHeight", publicName: "rowHeight", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { scrollChange: "scrollChange" }, host: { properties: { "class.table-body": "this.tableBodyClass" } }, viewQueries: [{ propertyName: "viewport", first: true, predicate: CdkVirtualScrollViewport, descendants: true }], ngImport: i0, template: "@if (virtual && data.length > 0) {\n <teta-scrollable class=\"table-body-container\" style=\"padding-bottom: 12px\" [showScrollbars]=\"true\">\n <cdk-virtual-scroll-viewport\n tetaScrollable\n class=\"table-body-container\"\n (scroll)=\"emitScroll($event)\"\n [itemSize]=\"rowHeight()\"\n >\n <ng-container\n *cdkVirtualFor=\"let row of data; templateCacheSize: 0; let rowIndex = index; trackBy: trackTableRow\"\n >\n <ng-container *ngTemplateOutlet=\"bodyTemplate; context: { row: row, rowIndex: rowIndex }\"></ng-container>\n </ng-container>\n </cdk-virtual-scroll-viewport>\n </teta-scrollable>\n} @else {\n <teta-scrollable\n class=\"table-body-container\"\n style=\"padding-bottom: 12px\"\n direction=\"column\"\n [showScrollbars]=\"true\"\n (scroll)=\"emitScroll($event)\"\n >\n <div class=\"table-body-container\">\n @if (!data?.length) {\n <div class=\"column column_auto\" style=\"position: absolute; top: 0; bottom: 16px; left: 0; right: 0\">\n <ng-content></ng-content>\n </div>\n }\n @for (row of data; track trackTableRow(rowIndex, row); let rowIndex = $index) {\n <ng-container *ngTemplateOutlet=\"bodyTemplate; context: { row: row, rowIndex: rowIndex }\"></ng-container>\n }\n @if (aggregate) {\n <ng-container *ngTemplateOutlet=\"aggTemplate\"></ng-container>\n }\n <ng-container *ngTemplateOutlet=\"emptyRow\"></ng-container>\n </div>\n </teta-scrollable>\n}\n\n<ng-template #bodyTemplate let-row=\"row\" let-rowIndex=\"rowIndex\">\n <teta-table-row\n class=\"table-row\"\n ngForm\n [style.height.px]=\"rowHeight()\"\n [row]=\"row\"\n (click)=\"setActiveRow(row.data, $event)\"\n [attr.data-row]=\"rowIndex\"\n [class.table-row_odd]=\"rowIndex % 2 === 1\"\n [ngClass]=\"rowClass ? rowClass(row.data, rowIndex) : ''\"\n [class.table-row_selected]=\"selectedRows && selectedRows.indexOf(row.data) >= 0\"\n [style.flex-grow]=\"totalFlex\"\n [style.flex-basis.px]=\"totalWidth\"\n [style.min-width.px]=\"totalWidth\"\n >\n @if (locked.length > 0) {\n <div\n class=\"table-row_locked\"\n [style.flex-grow]=\"lockedFlex\"\n [style.flex-basis.px]=\"lockedWidth\"\n [style.min-width.px]=\"lockedWidth\"\n [style.zIndex]=\"row.data === activeRow ? 2 : 1\"\n >\n @if (selectType === selectTypeEnum.checkBox && locked.length) {\n <teta-selection-cell [row]=\"row.data\" style=\"width: 28px\"></teta-selection-cell>\n }\n @for (column of locked; track trackColumns(colIndex, column); let colIndex = $index) {\n <teta-cell\n [attr.data-row]=\"rowIndex\"\n [attr.data-column]=\"column.name\"\n [column]=\"column\"\n [filterOptions]=\"dict ? dict[column.name] : []\"\n [dict]=\"dict\"\n [row]=\"row\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\"\n ></teta-cell>\n }\n </div>\n }\n @if (selectType === selectTypeEnum.checkBox && locked.length < 1) {\n <teta-selection-cell [row]=\"row.data\" style=\"width: 28px\"></teta-selection-cell>\n }\n @for (column of unlocked; track trackColumns(colIndex, column); let colIndex = $index) {\n <teta-cell\n [attr.data-row]=\"rowIndex\"\n [attr.data-column]=\"column.name\"\n [column]=\"column\"\n [filterOptions]=\"dict ? dict[column.name] : []\"\n [dict]=\"dict\"\n [row]=\"row\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\"\n ></teta-cell>\n }\n </teta-table-row>\n</ng-template>\n\n<ng-template #aggTemplate>\n @if (locale | async; as loc) {\n @if (aggregate) {\n <div\n class=\"table-row\"\n [style.height.px]=\"rowHeight()\"\n [class.table-row_virtual]=\"virtual\"\n [style.flex-grow]=\"totalFlex\"\n [style.flex-basis.px]=\"totalWidth\"\n [style.min-width.px]=\"totalWidth\"\n >\n @if (locked.length > 0) {\n <div\n class=\"table-row_locked\"\n [style.flex-grow]=\"lockedFlex\"\n [style.flex-basis.px]=\"lockedWidth\"\n [style.min-width.px]=\"lockedWidth\"\n >\n @if (selectType === selectTypeEnum.checkBox && locked.length < 1) {\n <div class=\"cell align-center justify-content-center\" style=\"width: 28px\">\n <teta-icon [name]=\"'sumColor'\"></teta-icon>\n </div>\n }\n @for (column of locked; track trackColumns(colIndex, column); let colIndex = $index) {\n <div\n class=\"cell cell-component aggregate-cell\"\n [attr.data-column]=\"column.name\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\"\n >\n @if (column.aggregate !== aggregationType.none) {\n <span class=\"cell-text cell-text_numeric font-title-3\">\n {{ loc[getAggregateText(column)] }}:\n {{ getAggregateValue(column) | tetaNumber: 2 }}\n </span>\n }\n </div>\n }\n </div>\n }\n @if (selectType === selectTypeEnum.checkBox && locked.length < 1) {\n <div class=\"cell align-center justify-content-center\" style=\"width: 28px\">\n <teta-icon [name]=\"'sumColor'\"></teta-icon>\n </div>\n }\n @for (column of unlocked; track trackColumns(colIndex, column); let colIndex = $index) {\n <div\n class=\"cell cell-component aggregate-cell\"\n [attr.data-column]=\"column.name\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\"\n >\n @if (column.aggregate !== aggregationType.none) {\n <span class=\"cell-text cell-text_numeric font-title-3\">\n {{ loc[getAggregateText(column)] }}:\n {{ getAggregateValue(column) | tetaNumber: 2 }}\n </span>\n }\n </div>\n }\n </div>\n }\n }\n</ng-template>\n<ng-template #emptyRow>\n <div\n class=\"empty-table-row\"\n style=\"height: 0.1px\"\n [style.flex-grow]=\"totalFlex\"\n [style.flex-basis.px]=\"totalWidth\"\n [style.min-width.px]=\"totalWidth\"\n ></div>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "component", type: ScrollableComponent, selector: "teta-scrollable", inputs: ["direction", "showScrollbars", "contentClass"], outputs: ["scroll"] }, { kind: "component", type: CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: ScrollableDirective, selector: "[tetaScrollable]" }, { kind: "directive", type: CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: SelectionCellComponent, selector: "teta-selection-cell", inputs: ["row"] }, { kind: "component", type: CellComponent, selector: "teta-cell", inputs: ["column", "filterOptions", "dict", "row"] }, { kind: "component", type: IconComponent, selector: "teta-icon", inputs: ["name", "size", "palette", "class"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: NumberPipe, name: "tetaNumber" }, { kind: "component", type: TableRowComponent, selector: "teta-table-row", inputs: ["row"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
164
- }
165
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: TableBodyComponent, decorators: [{
166
- type: Component,
167
- args: [{ selector: 'teta-table-body', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
168
- ScrollableComponent,
169
- CdkVirtualScrollViewport,
170
- CdkFixedSizeVirtualScroll,
171
- ScrollableDirective,
172
- CdkVirtualForOf,
173
- NgTemplateOutlet,
174
- FormsModule,
175
- NgClass,
176
- SelectionCellComponent,
177
- CellComponent,
178
- IconComponent,
179
- AsyncPipe,
180
- NumberPipe,
181
- TableRowComponent,
182
- ], template: "@if (virtual && data.length > 0) {\n <teta-scrollable class=\"table-body-container\" style=\"padding-bottom: 12px\" [showScrollbars]=\"true\">\n <cdk-virtual-scroll-viewport\n tetaScrollable\n class=\"table-body-container\"\n (scroll)=\"emitScroll($event)\"\n [itemSize]=\"rowHeight()\"\n >\n <ng-container\n *cdkVirtualFor=\"let row of data; templateCacheSize: 0; let rowIndex = index; trackBy: trackTableRow\"\n >\n <ng-container *ngTemplateOutlet=\"bodyTemplate; context: { row: row, rowIndex: rowIndex }\"></ng-container>\n </ng-container>\n </cdk-virtual-scroll-viewport>\n </teta-scrollable>\n} @else {\n <teta-scrollable\n class=\"table-body-container\"\n style=\"padding-bottom: 12px\"\n direction=\"column\"\n [showScrollbars]=\"true\"\n (scroll)=\"emitScroll($event)\"\n >\n <div class=\"table-body-container\">\n @if (!data?.length) {\n <div class=\"column column_auto\" style=\"position: absolute; top: 0; bottom: 16px; left: 0; right: 0\">\n <ng-content></ng-content>\n </div>\n }\n @for (row of data; track trackTableRow(rowIndex, row); let rowIndex = $index) {\n <ng-container *ngTemplateOutlet=\"bodyTemplate; context: { row: row, rowIndex: rowIndex }\"></ng-container>\n }\n @if (aggregate) {\n <ng-container *ngTemplateOutlet=\"aggTemplate\"></ng-container>\n }\n <ng-container *ngTemplateOutlet=\"emptyRow\"></ng-container>\n </div>\n </teta-scrollable>\n}\n\n<ng-template #bodyTemplate let-row=\"row\" let-rowIndex=\"rowIndex\">\n <teta-table-row\n class=\"table-row\"\n ngForm\n [style.height.px]=\"rowHeight()\"\n [row]=\"row\"\n (click)=\"setActiveRow(row.data, $event)\"\n [attr.data-row]=\"rowIndex\"\n [class.table-row_odd]=\"rowIndex % 2 === 1\"\n [ngClass]=\"rowClass ? rowClass(row.data, rowIndex) : ''\"\n [class.table-row_selected]=\"selectedRows && selectedRows.indexOf(row.data) >= 0\"\n [style.flex-grow]=\"totalFlex\"\n [style.flex-basis.px]=\"totalWidth\"\n [style.min-width.px]=\"totalWidth\"\n >\n @if (locked.length > 0) {\n <div\n class=\"table-row_locked\"\n [style.flex-grow]=\"lockedFlex\"\n [style.flex-basis.px]=\"lockedWidth\"\n [style.min-width.px]=\"lockedWidth\"\n [style.zIndex]=\"row.data === activeRow ? 2 : 1\"\n >\n @if (selectType === selectTypeEnum.checkBox && locked.length) {\n <teta-selection-cell [row]=\"row.data\" style=\"width: 28px\"></teta-selection-cell>\n }\n @for (column of locked; track trackColumns(colIndex, column); let colIndex = $index) {\n <teta-cell\n [attr.data-row]=\"rowIndex\"\n [attr.data-column]=\"column.name\"\n [column]=\"column\"\n [filterOptions]=\"dict ? dict[column.name] : []\"\n [dict]=\"dict\"\n [row]=\"row\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\"\n ></teta-cell>\n }\n </div>\n }\n @if (selectType === selectTypeEnum.checkBox && locked.length < 1) {\n <teta-selection-cell [row]=\"row.data\" style=\"width: 28px\"></teta-selection-cell>\n }\n @for (column of unlocked; track trackColumns(colIndex, column); let colIndex = $index) {\n <teta-cell\n [attr.data-row]=\"rowIndex\"\n [attr.data-column]=\"column.name\"\n [column]=\"column\"\n [filterOptions]=\"dict ? dict[column.name] : []\"\n [dict]=\"dict\"\n [row]=\"row\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\"\n ></teta-cell>\n }\n </teta-table-row>\n</ng-template>\n\n<ng-template #aggTemplate>\n @if (locale | async; as loc) {\n @if (aggregate) {\n <div\n class=\"table-row\"\n [style.height.px]=\"rowHeight()\"\n [class.table-row_virtual]=\"virtual\"\n [style.flex-grow]=\"totalFlex\"\n [style.flex-basis.px]=\"totalWidth\"\n [style.min-width.px]=\"totalWidth\"\n >\n @if (locked.length > 0) {\n <div\n class=\"table-row_locked\"\n [style.flex-grow]=\"lockedFlex\"\n [style.flex-basis.px]=\"lockedWidth\"\n [style.min-width.px]=\"lockedWidth\"\n >\n @if (selectType === selectTypeEnum.checkBox && locked.length < 1) {\n <div class=\"cell align-center justify-content-center\" style=\"width: 28px\">\n <teta-icon [name]=\"'sumColor'\"></teta-icon>\n </div>\n }\n @for (column of locked; track trackColumns(colIndex, column); let colIndex = $index) {\n <div\n class=\"cell cell-component aggregate-cell\"\n [attr.data-column]=\"column.name\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\"\n >\n @if (column.aggregate !== aggregationType.none) {\n <span class=\"cell-text cell-text_numeric font-title-3\">\n {{ loc[getAggregateText(column)] }}:\n {{ getAggregateValue(column) | tetaNumber: 2 }}\n </span>\n }\n </div>\n }\n </div>\n }\n @if (selectType === selectTypeEnum.checkBox && locked.length < 1) {\n <div class=\"cell align-center justify-content-center\" style=\"width: 28px\">\n <teta-icon [name]=\"'sumColor'\"></teta-icon>\n </div>\n }\n @for (column of unlocked; track trackColumns(colIndex, column); let colIndex = $index) {\n <div\n class=\"cell cell-component aggregate-cell\"\n [attr.data-column]=\"column.name\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\"\n >\n @if (column.aggregate !== aggregationType.none) {\n <span class=\"cell-text cell-text_numeric font-title-3\">\n {{ loc[getAggregateText(column)] }}:\n {{ getAggregateValue(column) | tetaNumber: 2 }}\n </span>\n }\n </div>\n }\n </div>\n }\n }\n</ng-template>\n<ng-template #emptyRow>\n <div\n class=\"empty-table-row\"\n style=\"height: 0.1px\"\n [style.flex-grow]=\"totalFlex\"\n [style.flex-basis.px]=\"totalWidth\"\n [style.min-width.px]=\"totalWidth\"\n ></div>\n</ng-template>\n" }]
183
- }], ctorParameters: () => [{ type: i1.TableService }, { type: i0.ElementRef }, { type: i2.TetaConfigService }, { type: i0.ChangeDetectorRef }], propDecorators: { virtual: [{
184
- type: Input
185
- }], activeRow: [{
186
- type: Input
187
- }], selectedRows: [{
188
- type: Input
189
- }], additionalComponent: [{
190
- type: Input
191
- }], aggregate: [{
192
- type: Input
193
- }], selectType: [{
194
- type: Input
195
- }], rowClass: [{
196
- type: Input
197
- }], trackRow: [{
198
- type: Input
199
- }], trackColumns: [{
200
- type: Input
201
- }], viewport: [{
202
- type: ViewChild,
203
- args: [CdkVirtualScrollViewport, { static: false }]
204
- }], tableBodyClass: [{
205
- type: HostBinding,
206
- args: ['class.table-body']
207
- }], scrollChange: [{
208
- type: Output
209
- }] } });
210
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtYm9keS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L3RhYmxlL3RhYmxlLWJvZHkvdGFibGUtYm9keS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L3RhYmxlL3RhYmxlLWJvZHkvdGFibGUtYm9keS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUseUJBQXlCLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDOUcsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLEtBQUssRUFDTCxLQUFLLEVBR0wsTUFBTSxFQUNOLElBQUksRUFDSixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUNqRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzVELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBS3hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDL0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFB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QUFDLHdCQUF3QixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFLSixjQUFjO3NCQUEvRCxXQUFXO3VCQUFDLGtCQUFrQjtnQkFDckIsWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCwgQ2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbCwgQ2RrVmlydHVhbEZvck9mIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgaW5wdXQsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBUeXBlLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVdoaWxlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBJRGljdGlvbmFyeSB9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9jb250cmFjdC9pLWRpY3Rpb25hcnknO1xuaW1wb3J0IHsgSUlkTmFtZSB9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9jb250cmFjdC9pLWlkLW5hbWUnO1xuaW1wb3J0IHsgQXJyYXlVdGlsIH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL3V0aWwvYXJyYXktdXRpbCc7XG5pbXBvcnQgeyBUZXRhQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2xvY2FsZS90ZXRhLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IFRldGFMb2NhbGlzYXRpb24gfSBmcm9tICcuLi8uLi8uLi9sb2NhbGUvdGV0YS1sb2NhbGlzYXRpb24nO1xuaW1wb3J0IHsgRGV0YWlsQ29tcG9uZW50QmFzZSB9IGZyb20gJy4uL2Jhc2UvZGV0YWlsLWNvbXBvbmVudC1iYXNlJztcbmltcG9ydCB7IFRhYmxlQ29sdW1uIH0gZnJvbSAnLi4vY29udHJhY3QvdGFibGUtY29sdW1uJztcbmltcG9ydCB7IFRhYmxlUm93IH0gZnJvbSAnLi4vY29udHJhY3QvdGFibGUtcm93JztcbmltcG9ydCB7IEFnZ3JlZ2F0aW9uVHlwZSB9IGZyb20gJy4uL2VudW0vYWdncmVnYXRpb24tdHlwZS5lbnVtJztcbmltcG9ydCB7IFNlbGVjdFR5cGUgfSBmcm9tICcuLi9lbnVtL3NlbGVjdC10eXBlLmVudW0nO1xuaW1wb3J0IHsgVGFibGVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZS90YWJsZS5zZXJ2aWNlJztcbmltcG9ydCB7IE51bWJlclBpcGUgfSBmcm9tICcuLi8uLi8uLi9waXBlL251bWJlci1waXBlL251bWJlci5waXBlJztcbmltcG9ydCB7IEljb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9pY29uL2ljb24vaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2VsbENvbXBvbmVudCB9IGZyb20gJy4uL2NlbGwvY2VsbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2VsZWN0aW9uQ2VsbENvbXBvbmVudCB9IGZyb20gJy4uL3NlbGVjdGlvbi1jZWxsL3NlbGVjdGlvbi1jZWxsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE5nVGVtcGxhdGVPdXRsZXQsIE5nQ2xhc3MsIEFzeW5jUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBTY3JvbGxhYmxlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL3Njcm9sbGFibGUvc2Nyb2xsYWJsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgU2Nyb2xsYWJsZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9zY3JvbGxhYmxlL3Njcm9sbGFibGUvc2Nyb2xsYWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGFibGVSb3dDb21wb25lbnQgfSBmcm9tICcuLi90YWJsZS1yb3cvdGFibGUtcm93LmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RldGEtdGFibGUtYm9keScsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS1ib2R5LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGFibGUtYm9keS5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIFNjcm9sbGFibGVDb21wb25lbnQsXG4gICAgQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0LFxuICAgIENka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGwsXG4gICAgU2Nyb2xsYWJsZURpcmVjdGl2ZSxcbiAgICBDZGtWaXJ0dWFsRm9yT2YsXG4gICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBOZ0NsYXNzLFxuICAgIFNlbGVjdGlvbkNlbGxDb21wb25lbnQsXG4gICAgQ2VsbENvbXBvbmVudCxcbiAgICBJY29uQ29tcG9uZW50LFxuICAgIEFzeW5jUGlwZSxcbiAgICBOdW1iZXJQaXBlLFxuICAgIFRhYmxlUm93Q29tcG9uZW50LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUJvZHlDb21wb25lbnQ8VD4gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIHZpcnR1YWw6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGFjdGl2ZVJvdzogVDtcbiAgQElucHV0KCkgc2VsZWN0ZWRSb3dzOiBUW10gPSBbXTtcbiAgQElucHV0KCkgYWRkaXRpb25hbENvbXBvbmVudDogVHlwZTxEZXRhaWxDb21wb25lbnRCYXNlPFQ+PjtcbiAgQElucHV0KCkgYWdncmVnYXRlOiBib29sZWFuO1xuICBASW5wdXQoKSBzZWxlY3RUeXBlOiBTZWxlY3RUeXBlO1xuICBASW5wdXQoKSByb3dDbGFzczogKHJvdzogVCwgaW5kZXg/OiBudW1iZXIpID0+IHN0cmluZztcbiAgQElucHV0KCkgdHJhY2tSb3c6IChpbmRleDogbnVtYmVyLCByb3c6IFQpID0+IGFueTtcbiAgQElucHV0KCkgdHJhY2tDb2x1bW5zOiAoaW5kZXg6IG51bWJlciwgY29sdW1uOiBUYWJsZUNvbHVtbikgPT4gYW55O1xuICBAVmlld0NoaWxkKENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCwgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIHZpZXdwb3J0OiBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQ7XG5cbiAgcm93SGVpZ2h0ID0gaW5wdXQ8bnVtYmVyPigyOCk7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy50YWJsZS1ib2R5JykgcHJpdmF0ZSByZWFkb25seSB0YWJsZUJvZHlDbGFzcyA9IHRydWU7XG4gIEBPdXRwdXQoKSBzY3JvbGxDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xuXG4gIHNldCBkYXRhKGRhdGE6IFRhYmxlUm93PFQ+W10pIHtcbiAgICB0aGlzLl9kYXRhID0gZGF0YTtcbiAgfVxuXG4gIGdldCBkYXRhKCkge1xuICAgIHJldHVybiB0aGlzLl9kYXRhO1xuICB9XG5cbiAgZGljdDogSURpY3Rpb25hcnk8SUlkTmFtZTxhbnk+W10+O1xuICBsb2NrZWQ6IFRhYmxlQ29sdW1uW10gPSBbXTtcbiAgdW5sb2NrZWQ6IFRhYmxlQ29sdW1uW10gPSBbXTtcbiAgc2VsZWN0VHlwZUVudW0gPSBTZWxlY3RUeXBlO1xuICBhZ2dyZWdhdGlvblR5cGUgPSBBZ2dyZWdhdGlvblR5cGU7XG4gIGxvY2tlZEZsZXg6IG51bWJlcjtcbiAgbG9ja2VkV2lkdGg6IG51bWJlcjtcbiAgdG90YWxGbGV4OiBudW1iZXI7XG4gIHRvdGFsV2lkdGg6IG51bWJlcjtcblxuICBwcml2YXRlIF9jb2x1bW5zOiBUYWJsZUNvbHVtbltdID0gW107XG4gIHByaXZhdGUgX2FsaXZlID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfZGF0YTogVGFibGVSb3c8VD5bXTtcbiAgcHJpdmF0ZSBfaGlkZGVuQ29sdW1uczogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSBfb2JzOiBSZXNpemVPYnNlcnZlcjtcblxuICBzZXQgY29sdW1ucyhjb2x1bW5zOiBUYWJsZUNvbHVtbltdKSB7XG4gICAgdGhpcy5fY29sdW1ucyA9IGNvbHVtbnM7XG4gICAgdGhpcy5sb2NrZWQgPSB0aGlzLl9jb2x1bW5zPy5maWx0ZXIoKF8pID0+IF8ubG9ja2VkID09PSB0cnVlKTtcbiAgICB0aGlzLnVubG9ja2VkID0gdGhpcy5fY29sdW1ucz8uZmlsdGVyKChfKSA9PiBfLmxvY2tlZCA9PT0gZmFsc2UpO1xuICAgIGNvbnN0IHN0YXJ0V2lkdGggPSB0aGlzLnNlbGVjdFR5cGUgPT09IFNlbGVjdFR5cGUuY2hlY2tCb3ggPyAyOCA6IDA7XG4gICAgdGhpcy5sb2NrZWRGbGV4ID0gdGhpcy5sb2NrZWQucmVkdWNlKChwcmV2OiBudW1iZXIsIGN1cnI6IFRhYmxlQ29sdW1uKSA9PiBwcmV2ICsgY3Vyci5mbGV4LCAwKTtcbiAgICB0aGlzLmxvY2tlZFdpZHRoID0gdGhpcy5sb2NrZWQucmVkdWNlKChwcmV2OiBudW1iZXIsIGN1cnI6IFRhYmxlQ29sdW1uKSA9PiBwcmV2ICsgY3Vyci53aWR0aCwgc3RhcnRXaWR0aCk7XG4gICAgdGhpcy50b3RhbEZsZXggPSB0aGlzLl9jb2x1bW5zLnJlZHVjZSgocHJldjogbnVtYmVyLCBjdXJyOiBUYWJsZUNvbHVtbikgPT4gcHJldiArIGN1cnIuZmxleCwgMCk7XG4gICAgdGhpcy50b3RhbFdpZHRoID0gdGhpcy5fY29sdW1ucy5yZWR1Y2UoKHByZXY6IG51bWJlciwgY3VycjogVGFibGVDb2x1bW4pID0+IHByZXYgKyBjdXJyLndpZHRoLCBzdGFydFdpZHRoKTtcbiAgfVxuXG4gIGdldCBjb2x1bW5zKCk6IFRhYmxlQ29sdW1uW10ge1xuICAgIHJldHVybiB0aGlzLl9jb2x1bW5zO1xuICB9XG5cbiAgbG9jYWxlOiBPYnNlcnZhYmxlPFRldGFMb2NhbGlzYXRpb24+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX3N2YzogVGFibGVTZXJ2aWNlPFQ+LFxuICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBfY29uZmlnOiBUZXRhQ29uZmlnU2VydmljZSxcbiAgICBwcml2YXRlIF9jZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICApIHt9XG5cbiAgc2V0QWN0aXZlUm93KHJvdzogVCwgZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50LnNoaWZ0S2V5ICYmICFldmVudC5jdHJsS2V5KSB7XG4gICAgICB0aGlzLl9zdmMuc2V0QWN0aXZlUm93KHJvdyk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5sb2NhbGUgPSB0aGlzLl9jb25maWcubG9jYWxlO1xuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuX3N2Yy5jb2x1bW5zLCB0aGlzLl9zdmMuaGlkZGVuQ29sdW1uc10pXG4gICAgICAucGlwZSh0YWtlV2hpbGUoKF8pID0+IHRoaXMuX2FsaXZlKSlcbiAgICAgIC5zdWJzY3JpYmUoKHZhbHVlczogW1RhYmxlQ29sdW1uW10sIHN0cmluZ1tdXSkgPT4ge1xuICAgICAgICBjb25zdCBbY29sdW1ucywgaGlkZGVuQ29sdW1uc10gPSB2YWx1ZXM7XG4gICAgICAgIHRoaXMuX2hpZGRlbkNvbHVtbnMgPSBoaWRkZW5Db2x1bW5zO1xuICAgICAgICB0aGlzLmNvbHVtbnMgPSBBcnJheVV0aWwuZmxhdHRlbihjb2x1bW5zLCAnY29sdW1ucycsIHRydWUpLmZpbHRlcihcbiAgICAgICAgICAoXykgPT4gdGhpcy5faGlkZGVuQ29sdW1ucy5pbmRleE9mKF8ubmFtZSkgPCAwLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuX3N2Yy5kaXNwbGF5RGF0YS5waXBlKHRha2VXaGlsZSgoXykgPT4gdGhpcy5fYWxpdmUpKS5zdWJzY3JpYmUoKF8pID0+IHtcbiAgICAgIHRoaXMuZGF0YSA9IF87XG4gICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB0aGlzLnZpZXdwb3J0Py5jaGVja1ZpZXdwb3J0U2l6ZSgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fc3ZjLmRpY3QucGlwZSh0YWtlV2hpbGUoKF8pID0+IHRoaXMuX2FsaXZlKSkuc3Vic2NyaWJlKChfKSA9PiB7XG4gICAgICB0aGlzLmRpY3QgPSBfO1xuICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fc3ZjLnNjcm9sbEluZGV4LnBpcGUodGFrZVdoaWxlKCgpID0+IHRoaXMuX2FsaXZlKSkuc3Vic2NyaWJlKGFzeW5jIChpbmRleCkgPT4ge1xuICAgICAgaWYgKHRoaXMudmlld3BvcnQpIHtcbiAgICAgICAgdGhpcy52aWV3cG9ydC5zY3JvbGxUb0luZGV4KGluZGV4LCAnYXV0bycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYC50YWJsZS1yb3dbZGF0YS1yb3c9XCIke2luZGV4fVwiXWApIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICByb3c/LnNjcm9sbEludG9WaWV3KCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9zdmMuYWN0aXZlUm93LnBpcGUodGFrZVdoaWxlKChfKSA9PiB0aGlzLl9hbGl2ZSkpLnN1YnNjcmliZShhc3luYyAoXykgPT4ge1xuICAgICAgdGhpcy5hY3RpdmVSb3cgPSBfO1xuICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuICAgIHRoaXMuYWRkUmVzaXplT2JzZXJ2ZXIoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2FsaXZlID0gZmFsc2U7XG4gICAgdGhpcy5yZW1vdmVSZXNpemVPYnNlcnZlcigpO1xuICB9XG5cbiAgZ2V0QWdncmVnYXRlVmFsdWUoY29sdW1uOiBUYWJsZUNvbHVtbik6IG51bWJlciB7XG4gICAgaWYgKGNvbHVtbi5hZ2dyZWdhdGUgPT09IEFnZ3JlZ2F0aW9uVHlwZS5zdW0pIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFN1bShjb2x1bW4ubmFtZSk7XG4gICAgfVxuICAgIGlmIChjb2x1bW4uYWdncmVnYXRlID09PSBBZ2dyZWdhdGlvblR5cGUuYXZnKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRTdW0oY29sdW1uLm5hbWUpIC8gdGhpcy5kYXRhLmxlbmd0aDtcbiAgICB9XG4gICAgaWYgKGNvbHVtbi5hZ2dyZWdhdGUgPT09IEFnZ3JlZ2F0aW9uVHlwZS5taW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmdldE1pbihjb2x1bW4ubmFtZSk7XG4gICAgfVxuICAgIGlmIChjb2x1bW4uYWdncmVnYXRlID09PSBBZ2dyZWdhdGlvblR5cGUubWF4KSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRNYXgoY29sdW1uLm5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGdldEFnZ3JlZ2F0ZVRleHQoY29sdW1uOiBUYWJsZUNvbHVtbik6IHN0cmluZyB7XG4gICAgaWYgKGNvbHVtbi5hZ2dyZWdhdGUgPT09IEFnZ3JlZ2F0aW9uVHlwZS5zdW0pIHtcbiAgICAgIHJldHVybiAnc3VtJztcbiAgICB9XG4gICAgaWYgKGNvbHVtbi5hZ2dyZWdhdGUgPT09IEFnZ3JlZ2F0aW9uVHlwZS5hdmcpIHtcbiAgICAgIHJldHVybiAnYXZnJztcbiAgICB9XG4gICAgaWYgKGNvbHVtbi5hZ2dyZWdhdGUgPT09IEFnZ3JlZ2F0aW9uVHlwZS5taW4pIHtcbiAgICAgIHJldHVybiAnbWluJztcbiAgICB9XG4gICAgaWYgKGNvbHVtbi5hZ2dyZWdhdGUgPT09IEFnZ3JlZ2F0aW9uVHlwZS5tYXgpIHtcbiAgICAgIHJldHVybiAnbWF4JztcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgZW1pdFNjcm9sbChldmVudCkge1xuICAgIHRoaXMuc2Nyb2xsQ2hhbmdlLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgdHJhY2tUYWJsZVJvdyA9IChpbmRleDogbnVtYmVyLCByb3c6IFRhYmxlUm93PFQ+KTogYW55ID0+IHtcbiAgICByZXR1cm4gdGhpcy50cmFja1JvdyA/IHRoaXMudHJhY2tSb3coaW5kZXgsIHJvdy5kYXRhKSA6IHJvdy5kYXRhWydpZCddO1xuICB9O1xuXG4gIHByaXZhdGUgYWRkUmVzaXplT2JzZXJ2ZXIoKSB7XG4gICAgdGhpcy5fb2JzID0gbmV3IFJlc2l6ZU9ic2VydmVyKChfKSA9PiB7XG4gICAgICB0aGlzLnZpZXdwb3J0Py5jaGVja1ZpZXdwb3J0U2l6ZSgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fb2JzLm9ic2VydmUodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlUmVzaXplT2JzZXJ2ZXIoKSB7XG4gICAgdGhpcy5fb2JzLnVub2JzZXJ2ZSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgIHRoaXMuX29icy5kaXNjb25uZWN0KCk7XG4gIH1cblxuICBwcml2YXRlIGdldFN1bShjb2x1bW5OYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhPy5yZWR1Y2UoKGFjY3VtLCBjdXJyZW50KSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSBwYXJzZUZsb2F0KGN1cnJlbnQuZGF0YVtjb2x1bW5OYW1lXSk7XG4gICAgICByZXR1cm4gYWNjdW0gKyAoaXNOYU4odmFsKSA/IDAgOiB2YWwpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNaW4oY29sdW1uTmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gKHRoaXMuZGF0YSBhcyBhbnkpPy5yZWR1Y2UoXG4gICAgICAoYWNjdW0sIGN1cnJlbnQ6IFRhYmxlUm93PFQ+KSA9PlxuICAgICAgICBhY2N1bSAhPSBudWxsICYmIGFjY3VtIDw9IGN1cnJlbnQuZGF0YVtjb2x1bW5OYW1lXSA/IGFjY3VtIDogY3VycmVudC5kYXRhW2NvbHVtbk5hbWVdLFxuICAgICAgbnVsbCxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNYXgoY29sdW1uTmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gKHRoaXMuZGF0YSBhcyBhbnkpPy5yZWR1Y2UoXG4gICAgICAoYWNjdW0sIGN1cnJlbnQpID0+IChhY2N1bSAhPSBudWxsICYmIGFjY3VtID49IGN1cnJlbnQuZGF0YVtjb2x1bW5OYW1lXSA/IGFjY3VtIDogY3VycmVudC5kYXRhW2NvbHVtbk5hbWVdKSxcbiAgICAgIG51bGwsXG4gICAgKTtcbiAgfVxufVxuIiwiQGlmICh2aXJ0dWFsICYmIGRhdGEubGVuZ3RoID4gMCkge1xuICA8dGV0YS1zY3JvbGxhYmxlIGNsYXNzPVwidGFibGUtYm9keS1jb250YWluZXJcIiBzdHlsZT1cInBhZGRpbmctYm90dG9tOiAxMnB4XCIgW3Nob3dTY3JvbGxiYXJzXT1cInRydWVcIj5cbiAgICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0XG4gICAgICB0ZXRhU2Nyb2xsYWJsZVxuICAgICAgY2xhc3M9XCJ0YWJsZS1ib2R5LWNvbnRhaW5lclwiXG4gICAgICAoc2Nyb2xsKT1cImVtaXRTY3JvbGwoJGV2ZW50KVwiXG4gICAgICBbaXRlbVNpemVdPVwicm93SGVpZ2h0KClcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKmNka1ZpcnR1YWxGb3I9XCJsZXQgcm93IG9mIGRhdGE7IHRlbXBsYXRlQ2FjaGVTaXplOiAwOyBsZXQgcm93SW5kZXggPSBpbmRleDsgdHJhY2tCeTogdHJhY2tUYWJsZVJvd1wiXG4gICAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJib2R5VGVtcGxhdGU7IGNvbnRleHQ6IHsgcm93OiByb3csIHJvd0luZGV4OiByb3dJbmRleCB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cbiAgPC90ZXRhLXNjcm9sbGFibGU+XG59IEBlbHNlIHtcbiAgPHRldGEtc2Nyb2xsYWJsZVxuICAgIGNsYXNzPVwidGFibGUtYm9keS1jb250YWluZXJcIlxuICAgIHN0eWxlPVwicGFkZGluZy1ib3R0b206IDEycHhcIlxuICAgIGRpcmVjdGlvbj1cImNvbHVtblwiXG4gICAgW3Nob3dTY3JvbGxiYXJzXT1cInRydWVcIlxuICAgIChzY3JvbGwpPVwiZW1pdFNjcm9sbCgkZXZlbnQpXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1ib2R5LWNvbnRhaW5lclwiPlxuICAgICAgQGlmICghZGF0YT8ubGVuZ3RoKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW4gY29sdW1uX2F1dG9cIiBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAwOyBib3R0b206IDE2cHg7IGxlZnQ6IDA7IHJpZ2h0OiAwXCI+XG4gICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIEBmb3IgKHJvdyBvZiBkYXRhOyB0cmFjayB0cmFja1RhYmxlUm93KHJvd0luZGV4LCByb3cpOyBsZXQgcm93SW5kZXggPSAkaW5kZXgpIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJvZHlUZW1wbGF0ZTsgY29udGV4dDogeyByb3c6IHJvdywgcm93SW5kZXg6IHJvd0luZGV4IH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIH1cbiAgICAgIEBpZiAoYWdncmVnYXRlKSB7XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhZ2dUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgfVxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImVtcHR5Um93XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvdGV0YS1zY3JvbGxhYmxlPlxufVxuXG48bmctdGVtcGxhdGUgI2JvZHlUZW1wbGF0ZSBsZXQtcm93PVwicm93XCIgbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIj5cbiAgPHRldGEtdGFibGUtcm93XG4gICAgY2xhc3M9XCJ0YWJsZS1yb3dcIlxuICAgIG5nRm9ybVxuICAgIFtzdHlsZS5oZWlnaHQucHhdPVwicm93SGVpZ2h0KClcIlxuICAgIFtyb3ddPVwicm93XCJcbiAgICAoY2xpY2spPVwic2V0QWN0aXZlUm93KHJvdy5kYXRhLCAkZXZlbnQpXCJcbiAgICBbYXR0ci5kYXRhLXJvd109XCJyb3dJbmRleFwiXG4gICAgW2NsYXNzLnRhYmxlLXJvd19vZGRdPVwicm93SW5kZXggJSAyID09PSAxXCJcbiAgICBbbmdDbGFzc109XCJyb3dDbGFzcyA/IHJvd0NsYXNzKHJvdy5kYXRhLCByb3dJbmRleCkgOiAnJ1wiXG4gICAgW2NsYXNzLnRhYmxlLXJvd19zZWxlY3RlZF09XCJzZWxlY3RlZFJvd3MgJiYgc2VsZWN0ZWRSb3dzLmluZGV4T2Yocm93LmRhdGEpID49IDBcIlxuICAgIFtzdHlsZS5mbGV4LWdyb3ddPVwidG90YWxGbGV4XCJcbiAgICBbc3R5bGUuZmxleC1iYXNpcy5weF09XCJ0b3RhbFdpZHRoXCJcbiAgICBbc3R5bGUubWluLXdpZHRoLnB4XT1cInRvdGFsV2lkdGhcIlxuICA+XG4gICAgQGlmIChsb2NrZWQubGVuZ3RoID4gMCkge1xuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInRhYmxlLXJvd19sb2NrZWRcIlxuICAgICAgICBbc3R5bGUuZmxleC1ncm93XT1cImxvY2tlZEZsZXhcIlxuICAgICAgICBbc3R5bGUuZmxleC1iYXNpcy5weF09XCJsb2NrZWRXaWR0aFwiXG4gICAgICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwibG9ja2VkV2lkdGhcIlxuICAgICAgICBbc3R5bGUuekluZGV4XT1cInJvdy5kYXRhID09PSBhY3RpdmVSb3cgPyAyIDogMVwiXG4gICAgICA+XG4gICAgICAgIEBpZiAoc2VsZWN0VHlwZSA9PT0gc2VsZWN0VHlwZUVudW0uY2hlY2tCb3ggJiYgbG9ja2VkLmxlbmd0aCkge1xuICAgICAgICAgIDx0ZXRhLXNlbGVjdGlvbi1jZWxsIFtyb3ddPVwicm93LmRhdGFcIiBzdHlsZT1cIndpZHRoOiAyOHB4XCI+PC90ZXRhLXNlbGVjdGlvbi1jZWxsPlxuICAgICAgICB9XG4gICAgICAgIEBmb3IgKGNvbHVtbiBvZiBsb2NrZWQ7IHRyYWNrIHRyYWNrQ29sdW1ucyhjb2xJbmRleCwgY29sdW1uKTsgbGV0IGNvbEluZGV4ID0gJGluZGV4KSB7XG4gICAgICAgICAgPHRldGEtY2VsbFxuICAgICAgICAgICAgW2F0dHIuZGF0YS1yb3ddPVwicm93SW5kZXhcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1jb2x1bW5dPVwiY29sdW1uLm5hbWVcIlxuICAgICAgICAgICAgW2NvbHVtbl09XCJjb2x1bW5cIlxuICAgICAgICAgICAgW2ZpbHRlck9wdGlvbnNdPVwiZGljdCA/IGRpY3RbY29sdW1uLm5hbWVdIDogW11cIlxuICAgICAgICAgICAgW2RpY3RdPVwiZGljdFwiXG4gICAgICAgICAgICBbcm93XT1cInJvd1wiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW4uY2VsbENsYXNzXCJcbiAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cIjBcIlxuICAgICAgICAgICAgW3N0eWxlLmZsZXgtZ3Jvd109XCJjb2x1bW4uZmxleFwiXG4gICAgICAgICAgICBbc3R5bGUuZmxleC1iYXNpcy5weF09XCJjb2x1bW4ud2lkdGhcIlxuICAgICAgICAgID48L3RldGEtY2VsbD5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgfVxuICAgIEBpZiAoc2VsZWN0VHlwZSA9PT0gc2VsZWN0VHlwZUVudW0uY2hlY2tCb3ggJiYgbG9ja2VkLmxlbmd0aCA8IDEpIHtcbiAgICAgIDx0ZXRhLXNlbGVjdGlvbi1jZWxsIFtyb3ddPVwicm93LmRhdGFcIiBzdHlsZT1cIndpZHRoOiAyOHB4XCI+PC90ZXRhLXNlbGVjdGlvbi1jZWxsPlxuICAgIH1cbiAgICBAZm9yIChjb2x1bW4gb2YgdW5sb2NrZWQ7IHRyYWNrIHRyYWNrQ29sdW1ucyhjb2xJbmRleCwgY29sdW1uKTsgbGV0IGNvbEluZGV4ID0gJGluZGV4KSB7XG4gICAgICA8dGV0YS1jZWxsXG4gICAgICAgIFthdHRyLmRhdGEtcm93XT1cInJvd0luZGV4XCJcbiAgICAgICAgW2F0dHIuZGF0YS1jb2x1bW5dPVwiY29sdW1uLm5hbWVcIlxuICAgICAgICBbY29sdW1uXT1cImNvbHVtblwiXG4gICAgICAgIFtmaWx0ZXJPcHRpb25zXT1cImRpY3QgPyBkaWN0W2NvbHVtbi5uYW1lXSA6IFtdXCJcbiAgICAgICAgW2RpY3RdPVwiZGljdFwiXG4gICAgICAgIFtyb3ddPVwicm93XCJcbiAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uLmNlbGxDbGFzc1wiXG4gICAgICAgIFthdHRyLnRhYmluZGV4XT1cIjBcIlxuICAgICAgICBbc3R5bGUuZmxleC1ncm93XT1cImNvbHVtbi5mbGV4XCJcbiAgICAgICAgW3N0eWxlLmZsZXgtYmFzaXMucHhdPVwiY29sdW1uLndpZHRoXCJcbiAgICAgID48L3RldGEtY2VsbD5cbiAgICB9XG4gIDwvdGV0YS10YWJsZS1yb3c+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2FnZ1RlbXBsYXRlPlxuICBAaWYgKGxvY2FsZSB8IGFzeW5jOyBhcyBsb2MpIHtcbiAgICBAaWYgKGFnZ3JlZ2F0ZSkge1xuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInRhYmxlLXJvd1wiXG4gICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwicm93SGVpZ2h0KClcIlxuICAgICAgICBbY2xhc3MudGFibGUtcm93X3ZpcnR1YWxdPVwidmlydHVhbFwiXG4gICAgICAgIFtzdHlsZS5mbGV4LWdyb3ddPVwidG90YWxGbGV4XCJcbiAgICAgICAgW3N0eWxlLmZsZXgtYmFzaXMucHhdPVwidG90YWxXaWR0aFwiXG4gICAgICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwidG90YWxXaWR0aFwiXG4gICAgICA+XG4gICAgICAgIEBpZiAobG9ja2VkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInRhYmxlLXJvd19sb2NrZWRcIlxuICAgICAgICAgICAgW3N0eWxlLmZsZXgtZ3Jvd109XCJsb2NrZWRGbGV4XCJcbiAgICAgICAgICAgIFtzdHlsZS5mbGV4LWJhc2lzLnB4XT1cImxvY2tlZFdpZHRoXCJcbiAgICAgICAgICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwibG9ja2VkV2lkdGhcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIEBpZiAoc2VsZWN0VHlwZSA9PT0gc2VsZWN0VHlwZUVudW0uY2hlY2tCb3ggJiYgbG9ja2VkLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNlbGwgYWxpZ24tY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIiBzdHlsZT1cIndpZHRoOiAyOHB4XCI+XG4gICAgICAgICAgICAgICAgPHRldGEtaWNvbiBbbmFtZV09XCInc3VtQ29sb3InXCI+PC90ZXRhLWljb24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGZvciAoY29sdW1uIG9mIGxvY2tlZDsgdHJhY2sgdHJhY2tDb2x1bW5zKGNvbEluZGV4LCBjb2x1bW4pOyBsZXQgY29sSW5kZXggPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2VsbCBjZWxsLWNvbXBvbmVudCBhZ2dyZWdhdGUtY2VsbFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1jb2x1bW5dPVwiY29sdW1uLm5hbWVcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbi5jZWxsQ2xhc3NcIlxuICAgICAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cIjBcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5mbGV4LWdyb3ddPVwiY29sdW1uLmZsZXhcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5mbGV4LWJhc2lzLnB4XT1cImNvbHVtbi53aWR0aFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBAaWYgKGNvbHVtbi5hZ2dyZWdhdGUgIT09IGFnZ3JlZ2F0aW9uVHlwZS5ub25lKSB7XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNlbGwtdGV4dCBjZWxsLXRleHRfbnVtZXJpYyBmb250LXRpdGxlLTNcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgbG9jW2dldEFnZ3JlZ2F0ZVRleHQoY29sdW1uKV0gfX06XG4gICAgICAgICAgICAgICAgICAgIHt7IGdldEFnZ3JlZ2F0ZVZhbHVlKGNvbHVtbikgfCB0ZXRhTnVtYmVyOiAyIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKHNlbGVjdFR5cGUgPT09IHNlbGVjdFR5cGVFbnVtLmNoZWNrQm94ICYmIGxvY2tlZC5sZW5ndGggPCAxKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNlbGwgYWxpZ24tY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIiBzdHlsZT1cIndpZHRoOiAyOHB4XCI+XG4gICAgICAgICAgICA8dGV0YS1pY29uIFtuYW1lXT1cIidzdW1Db2xvcidcIj48L3RldGEtaWNvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICBAZm9yIChjb2x1bW4gb2YgdW5sb2NrZWQ7IHRyYWNrIHRyYWNrQ29sdW1ucyhjb2xJbmRleCwgY29sdW1uKTsgbGV0IGNvbEluZGV4ID0gJGluZGV4KSB7XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJjZWxsIGNlbGwtY29tcG9uZW50IGFnZ3JlZ2F0ZS1jZWxsXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtY29sdW1uXT1cImNvbHVtbi5uYW1lXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbi5jZWxsQ2xhc3NcIlxuICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiMFwiXG4gICAgICAgICAgICBbc3R5bGUuZmxleC1ncm93XT1cImNvbHVtbi5mbGV4XCJcbiAgICAgICAgICAgIFtzdHlsZS5mbGV4LWJhc2lzLnB4XT1cImNvbHVtbi53aWR0aFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgQGlmIChjb2x1bW4uYWdncmVnYXRlICE9PSBhZ2dyZWdhdGlvblR5cGUubm9uZSkge1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNlbGwtdGV4dCBjZWxsLXRleHRfbnVtZXJpYyBmb250LXRpdGxlLTNcIj5cbiAgICAgICAgICAgICAgICB7eyBsb2NbZ2V0QWdncmVnYXRlVGV4dChjb2x1bW4pXSB9fTpcbiAgICAgICAgICAgICAgICB7eyBnZXRBZ2dyZWdhdGVWYWx1ZShjb2x1bW4pIHwgdGV0YU51bWJlcjogMiB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgfVxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjZW1wdHlSb3c+XG4gIDxkaXZcbiAgICBjbGFzcz1cImVtcHR5LXRhYmxlLXJvd1wiXG4gICAgc3R5bGU9XCJoZWlnaHQ6IDAuMXB4XCJcbiAgICBbc3R5bGUuZmxleC1ncm93XT1cInRvdGFsRmxleFwiXG4gICAgW3N0eWxlLmZsZXgtYmFzaXMucHhdPVwidG90YWxXaWR0aFwiXG4gICAgW3N0eWxlLm1pbi13aWR0aC5weF09XCJ0b3RhbFdpZHRoXCJcbiAgPjwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -1,57 +0,0 @@
1
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, HostListener, Input, } from '@angular/core';
2
- import { TableColumn } from '../../contract/table-column';
3
- import { FilterState } from '../../../filter/contarct/filter-state';
4
- import { TableService } from '../../service/table.service';
5
- import { TetaConfigService } from '../../../../locale/teta-config.service';
6
- import { AsyncPipe } from '@angular/common';
7
- import { IconComponent } from '../../../icon/icon/icon.component';
8
- import { ButtonComponent } from '../../../button/button/button.component';
9
- import { ToolbarComponent } from '../../../toolbar/toolbar/toolbar.component';
10
- import { FilterHostComponent } from '../../../filter/filter-host/filter-host.component';
11
- import * as i0 from "@angular/core";
12
- import * as i1 from "../../service/table.service";
13
- import * as i2 from "../../../../locale/teta-config.service";
14
- export class FilterDropdownTabComponent {
15
- enter() {
16
- this.applyFilter();
17
- }
18
- constructor(_svc, _config, _elementRef, _cdr) {
19
- this._svc = _svc;
20
- this._config = _config;
21
- this._elementRef = _elementRef;
22
- this._cdr = _cdr;
23
- this.locale = this._config.locale;
24
- this.filterOptions = this._svc.filterOptions;
25
- }
26
- clearFilter() {
27
- this._svc.clearFilter(this.column);
28
- this.close();
29
- this._cdr.markForCheck();
30
- }
31
- applyFilter() {
32
- this._svc.setState(new FilterState(this.state));
33
- this.close();
34
- this._cdr.markForCheck();
35
- }
36
- ngOnInit() { }
37
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: FilterDropdownTabComponent, deps: [{ token: i1.TableService }, { token: i2.TetaConfigService }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
38
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.1", type: FilterDropdownTabComponent, isStandalone: true, selector: "teta-filter-dropdown-tab", inputs: { columns: "columns", column: "column", state: "state", data: "data", close: "close" }, host: { listeners: { "keydown.enter": "enter()" } }, ngImport: i0, template: "@if (locale | async; as loc) {\n @if (filterOptions | async; as options) {\n <teta-filter-host\n [column]=\"column\"\n [data]=\"data\"\n [state]=\"state\"\n [filterOptions]=\"options[column.name]\"\n ></teta-filter-host>\n }\n <teta-toolbar class=\"justify-content-between\">\n <button type=\"button\" teta-button [palette]=\"'text'\" [view]=\"'ghost'\" (click)=\"clearFilter()\">\n {{ loc.clear }}\n </button>\n <button type=\"button\" teta-button [palette]=\"'primary'\" (click)=\"applyFilter()\">\n <teta-icon [name]=\"'tick'\" [palette]=\"'white'\"></teta-icon>\n {{ loc.apply }}\n </button>\n </teta-toolbar>\n}\n", styles: [":host{display:flex;flex-direction:column;min-height:0;min-width:0}\n"], dependencies: [{ kind: "component", type: FilterHostComponent, selector: "teta-filter-host", inputs: ["column", "state", "data", "filterOptions"], outputs: ["filterChanged"] }, { kind: "component", type: ToolbarComponent, selector: "teta-toolbar", inputs: ["palette", "class"] }, { kind: "component", type: ButtonComponent, selector: "button[teta-button], teta-button", inputs: ["palette", "class", "view", "square", "viewType", "size"] }, { kind: "component", type: IconComponent, selector: "teta-icon", inputs: ["name", "size", "palette", "class"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
39
- }
40
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: FilterDropdownTabComponent, decorators: [{
41
- type: Component,
42
- args: [{ selector: 'teta-filter-dropdown-tab', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [FilterHostComponent, ToolbarComponent, ButtonComponent, IconComponent, AsyncPipe], template: "@if (locale | async; as loc) {\n @if (filterOptions | async; as options) {\n <teta-filter-host\n [column]=\"column\"\n [data]=\"data\"\n [state]=\"state\"\n [filterOptions]=\"options[column.name]\"\n ></teta-filter-host>\n }\n <teta-toolbar class=\"justify-content-between\">\n <button type=\"button\" teta-button [palette]=\"'text'\" [view]=\"'ghost'\" (click)=\"clearFilter()\">\n {{ loc.clear }}\n </button>\n <button type=\"button\" teta-button [palette]=\"'primary'\" (click)=\"applyFilter()\">\n <teta-icon [name]=\"'tick'\" [palette]=\"'white'\"></teta-icon>\n {{ loc.apply }}\n </button>\n </teta-toolbar>\n}\n", styles: [":host{display:flex;flex-direction:column;min-height:0;min-width:0}\n"] }]
43
- }], ctorParameters: () => [{ type: i1.TableService }, { type: i2.TetaConfigService }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }], propDecorators: { columns: [{
44
- type: Input
45
- }], column: [{
46
- type: Input
47
- }], state: [{
48
- type: Input
49
- }], data: [{
50
- type: Input
51
- }], close: [{
52
- type: Input
53
- }], enter: [{
54
- type: HostListener,
55
- args: ['keydown.enter']
56
- }] } });
57
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWRyb3Bkb3duLXRhYi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L3RhYmxlL3RhYmxlLWhlYWQvZmlsdGVyLWRyb3Bkb3duLXRhYi9maWx0ZXItZHJvcGRvd24tdGFiLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnQvdGFibGUvdGFibGUtaGVhZC9maWx0ZXItZHJvcGRvd24tdGFiL2ZpbHRlci1kcm9wZG93bi10YWIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxHQUVOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFHcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBSTNFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDOzs7O0FBVXhGLE1BQU0sT0FBTywwQkFBMEI7SUFVTixLQUFLO1FBQ2xDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsWUFDVSxJQUFxQixFQUNyQixPQUEwQixFQUMxQixXQUF1QixFQUN2QixJQUF1QjtRQUh2QixTQUFJLEdBQUosSUFBSSxDQUFpQjtRQUNyQixZQUFPLEdBQVAsT0FBTyxDQUFtQjtRQUMxQixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUN2QixTQUFJLEdBQUosSUFBSSxDQUFtQjtRQUUvQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDL0MsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELFFBQVEsS0FBVSxDQUFDOzhHQXBDUiwwQkFBMEI7a0dBQTFCLDBCQUEwQix5T0NoQ3ZDLHFxQkFtQkEsOEhEV1ksbUJBQW1CLCtJQUFFLGdCQUFnQix1RkFBRSxlQUFlLGlKQUFFLGFBQWEsK0ZBQUUsU0FBUzs7MkZBRS9FLDBCQUEwQjtrQkFSdEMsU0FBUzsrQkFDRSwwQkFBMEIsbUJBR25CLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxXQUNQLENBQUMsbUJBQW1CLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxTQUFTLENBQUM7MEtBR2xGLE9BQU87c0JBQWYsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBS3lCLEtBQUs7c0JBQW5DLFlBQVk7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGFibGVDb2x1bW4gfSBmcm9tICcuLi8uLi9jb250cmFjdC90YWJsZS1jb2x1bW4nO1xuaW1wb3J0IHsgRmlsdGVyU3RhdGUgfSBmcm9tICcuLi8uLi8uLi9maWx0ZXIvY29udGFyY3QvZmlsdGVyLXN0YXRlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRldGFMb2NhbGlzYXRpb24gfSBmcm9tICcuLi8uLi8uLi8uLi9sb2NhbGUvdGV0YS1sb2NhbGlzYXRpb24nO1xuaW1wb3J0IHsgVGFibGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS90YWJsZS5zZXJ2aWNlJztcbmltcG9ydCB7IFRldGFDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vbG9jYWxlL3RldGEtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgSURpY3Rpb25hcnkgfSBmcm9tICcuLi8uLi8uLi8uLi9jb21tb24vY29udHJhY3QvaS1kaWN0aW9uYXJ5JztcbmltcG9ydCB7IElJZE5hbWUgfSBmcm9tICcuLi8uLi8uLi8uLi9jb21tb24vY29udHJhY3QvaS1pZC1uYW1lJztcbmltcG9ydCB7IElUcmVlRGF0YSB9IGZyb20gJy4uLy4uLy4uLy4uL2NvbW1vbi9jb250cmFjdC9pLXRyZWUtZGF0YSc7XG5pbXBvcnQgeyBBc3luY1BpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2ljb24vaWNvbi9pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9idXR0b24vYnV0dG9uL2J1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgVG9vbGJhckNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3Rvb2xiYXIvdG9vbGJhci90b29sYmFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGaWx0ZXJIb3N0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vZmlsdGVyL2ZpbHRlci1ob3N0L2ZpbHRlci1ob3N0LmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RldGEtZmlsdGVyLWRyb3Bkb3duLXRhYicsXG4gIHRlbXBsYXRlVXJsOiAnLi9maWx0ZXItZHJvcGRvd24tdGFiLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZmlsdGVyLWRyb3Bkb3duLXRhYi5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0ZpbHRlckhvc3RDb21wb25lbnQsIFRvb2xiYXJDb21wb25lbnQsIEJ1dHRvbkNvbXBvbmVudCwgSWNvbkNvbXBvbmVudCwgQXN5bmNQaXBlXSxcbn0pXG5leHBvcnQgY2xhc3MgRmlsdGVyRHJvcGRvd25UYWJDb21wb25lbnQ8VD4gaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBjb2x1bW5zOiBJVHJlZURhdGFbXTtcbiAgQElucHV0KCkgY29sdW1uOiBUYWJsZUNvbHVtbjtcbiAgQElucHV0KCkgc3RhdGU6IEZpbHRlclN0YXRlO1xuICBASW5wdXQoKSBkYXRhOiBUW107XG4gIEBJbnB1dCgpIGNsb3NlOiAoKSA9PiB2b2lkO1xuXG4gIGxvY2FsZTogT2JzZXJ2YWJsZTxUZXRhTG9jYWxpc2F0aW9uPjtcbiAgZmlsdGVyT3B0aW9uczogT2JzZXJ2YWJsZTxJRGljdGlvbmFyeTxJSWROYW1lPGFueT5bXT4+O1xuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uZW50ZXInKSBlbnRlcigpIHtcbiAgICB0aGlzLmFwcGx5RmlsdGVyKCk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9zdmM6IFRhYmxlU2VydmljZTxUPixcbiAgICBwcml2YXRlIF9jb25maWc6IFRldGFDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBfY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgKSB7XG4gICAgdGhpcy5sb2NhbGUgPSB0aGlzLl9jb25maWcubG9jYWxlO1xuICAgIHRoaXMuZmlsdGVyT3B0aW9ucyA9IHRoaXMuX3N2Yy5maWx0ZXJPcHRpb25zO1xuICB9XG5cbiAgY2xlYXJGaWx0ZXIoKSB7XG4gICAgdGhpcy5fc3ZjLmNsZWFyRmlsdGVyKHRoaXMuY29sdW1uKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgYXBwbHlGaWx0ZXIoKSB7XG4gICAgdGhpcy5fc3ZjLnNldFN0YXRlKG5ldyBGaWx0ZXJTdGF0ZSh0aGlzLnN0YXRlKSk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge31cbn1cbiIsIkBpZiAobG9jYWxlIHwgYXN5bmM7IGFzIGxvYykge1xuICBAaWYgKGZpbHRlck9wdGlvbnMgfCBhc3luYzsgYXMgb3B0aW9ucykge1xuICAgIDx0ZXRhLWZpbHRlci1ob3N0XG4gICAgICBbY29sdW1uXT1cImNvbHVtblwiXG4gICAgICBbZGF0YV09XCJkYXRhXCJcbiAgICAgIFtzdGF0ZV09XCJzdGF0ZVwiXG4gICAgICBbZmlsdGVyT3B0aW9uc109XCJvcHRpb25zW2NvbHVtbi5uYW1lXVwiXG4gICAgPjwvdGV0YS1maWx0ZXItaG9zdD5cbiAgfVxuICA8dGV0YS10b29sYmFyIGNsYXNzPVwianVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0ZXRhLWJ1dHRvbiBbcGFsZXR0ZV09XCIndGV4dCdcIiBbdmlld109XCInZ2hvc3QnXCIgKGNsaWNrKT1cImNsZWFyRmlsdGVyKClcIj5cbiAgICAgIHt7IGxvYy5jbGVhciB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRldGEtYnV0dG9uIFtwYWxldHRlXT1cIidwcmltYXJ5J1wiIChjbGljayk9XCJhcHBseUZpbHRlcigpXCI+XG4gICAgICA8dGV0YS1pY29uIFtuYW1lXT1cIid0aWNrJ1wiIFtwYWxldHRlXT1cIid3aGl0ZSdcIj48L3RldGEtaWNvbj5cbiAgICAgIHt7IGxvYy5hcHBseSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L3RldGEtdG9vbGJhcj5cbn1cbiJdfQ==
@@ -1,89 +0,0 @@
1
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, Input } from '@angular/core';
2
- import { TableService } from '../../service/table.service';
3
- import { TetaConfigService } from '../../../../locale/teta-config.service';
4
- import { TableColumn } from '../../contract/table-column';
5
- import { StateUtil } from '../../util/state-util';
6
- import { FilterState } from '../../../filter/contarct/filter-state';
7
- import { SortEvent } from '../../contract/sort-event';
8
- import { AsyncPipe } from '@angular/common';
9
- import * as i0 from "@angular/core";
10
- import * as i1 from "../../service/table.service";
11
- import * as i2 from "../../../../locale/teta-config.service";
12
- export class MainDropdownTabComponent {
13
- constructor(_svc, _config, _elementRef, _cdr) {
14
- this._svc = _svc;
15
- this._config = _config;
16
- this._elementRef = _elementRef;
17
- this._cdr = _cdr;
18
- this.locale = this._config.locale;
19
- }
20
- get sortParam() {
21
- return StateUtil.getSortState(this.state, this.column);
22
- }
23
- get filtered() {
24
- return StateUtil.isColumnFiltered(this.state, this.column);
25
- }
26
- get parent() {
27
- return this._svc.getColumnParent(this.column);
28
- }
29
- pinColumn() {
30
- this._svc.pinColumn(this.column);
31
- }
32
- sortAsc(event) {
33
- this._svc.sortAsc(new SortEvent(this.column, event.shiftKey));
34
- }
35
- sortDesc(event) {
36
- this._svc.sortDesc(new SortEvent(this.column, event.shiftKey));
37
- }
38
- clearSort() {
39
- this._svc.clearSort(this.column);
40
- }
41
- clearAllSort() {
42
- this._svc.clearAllSort();
43
- }
44
- hasFilteredColumns() {
45
- return StateUtil.hasFilteredColumns(this.state);
46
- }
47
- hasSortedColumns() {
48
- return StateUtil.hasSortedColumns(this.state);
49
- }
50
- restoreDefaultColumns() {
51
- this._svc.restoreDefaultColumns();
52
- }
53
- clearFilter() {
54
- this._svc.clearFilter(this.column);
55
- this.close();
56
- this._cdr.markForCheck();
57
- }
58
- clearAllFilters() {
59
- this._svc.clearAllFilters();
60
- this.close();
61
- this._cdr.markForCheck();
62
- }
63
- autosizeColumn() {
64
- this._svc.autosizeColumn(this.column, this.headCellElementRef.nativeElement);
65
- }
66
- autosizeAllColumns() {
67
- this._svc.autosizeAllColumns(this.headCellElementRef.nativeElement);
68
- }
69
- ngOnInit() { }
70
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: MainDropdownTabComponent, deps: [{ token: i1.TableService }, { token: i2.TetaConfigService }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
71
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.1", type: MainDropdownTabComponent, isStandalone: true, selector: "teta-main-dropdown-tab", inputs: { columns: "columns", column: "column", state: "state", data: "data", close: "close", headCellElementRef: "headCellElementRef" }, ngImport: i0, template: "@if (locale | async; as loc) {\n <div class=\"list column_auto\">\n @if (!parent) {\n <div class=\"list-item list-item_interactive\" (click)=\"pinColumn()\">\n {{ column.locked ? loc.unpin : loc.pin }}\n </div>\n <div class=\"list-divider\"></div>\n }\n @if (column.sortable) {\n <div class=\"list-item list-item_interactive\" (click)=\"sortAsc($event)\">\n {{ loc.sortAsc }}\n </div>\n <div class=\"list-item list-item_interactive\" (click)=\"sortDesc($event)\">\n {{ loc.sortDesc }}\n </div>\n @if (hasSortedColumns()) {\n @if (sortParam) {\n <div class=\"list-item list-item_interactive\" (click)=\"clearSort()\">\n {{ loc.clearSort }}\n </div>\n }\n <div class=\"list-item list-item_interactive\" (click)=\"clearAllSort()\">\n {{ loc.clearAllSort }}\n </div>\n <div class=\"list-divider\"></div>\n }\n }\n @if (hasFilteredColumns()) {\n @if (filtered) {\n <div class=\"list-item list-item_interactive\" (click)=\"clearFilter()\">\n {{ loc.clearFilter }}\n </div>\n }\n <div class=\"list-item list-item_interactive\" (click)=\"clearAllFilters()\">\n {{ loc.clearAllFilters }}\n </div>\n <div class=\"list-divider\"></div>\n }\n <div class=\"list-item list-item_interactive\" (click)=\"autosizeColumn()\">\n {{ loc.autosizeColumn }}\n </div>\n <div class=\"list-item list-item_interactive\" (click)=\"autosizeAllColumns()\">\n {{ loc.autosizeAll }}\n </div>\n <div class=\"list-divider\"></div>\n <div class=\"list-item list-item_interactive\" (click)=\"restoreDefaultColumns()\">\n {{ loc.resetColumnsSize }}\n </div>\n </div>\n}\n", styles: [":host{display:flex;flex-direction:column}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
72
- }
73
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: MainDropdownTabComponent, decorators: [{
74
- type: Component,
75
- args: [{ selector: 'teta-main-dropdown-tab', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [AsyncPipe], template: "@if (locale | async; as loc) {\n <div class=\"list column_auto\">\n @if (!parent) {\n <div class=\"list-item list-item_interactive\" (click)=\"pinColumn()\">\n {{ column.locked ? loc.unpin : loc.pin }}\n </div>\n <div class=\"list-divider\"></div>\n }\n @if (column.sortable) {\n <div class=\"list-item list-item_interactive\" (click)=\"sortAsc($event)\">\n {{ loc.sortAsc }}\n </div>\n <div class=\"list-item list-item_interactive\" (click)=\"sortDesc($event)\">\n {{ loc.sortDesc }}\n </div>\n @if (hasSortedColumns()) {\n @if (sortParam) {\n <div class=\"list-item list-item_interactive\" (click)=\"clearSort()\">\n {{ loc.clearSort }}\n </div>\n }\n <div class=\"list-item list-item_interactive\" (click)=\"clearAllSort()\">\n {{ loc.clearAllSort }}\n </div>\n <div class=\"list-divider\"></div>\n }\n }\n @if (hasFilteredColumns()) {\n @if (filtered) {\n <div class=\"list-item list-item_interactive\" (click)=\"clearFilter()\">\n {{ loc.clearFilter }}\n </div>\n }\n <div class=\"list-item list-item_interactive\" (click)=\"clearAllFilters()\">\n {{ loc.clearAllFilters }}\n </div>\n <div class=\"list-divider\"></div>\n }\n <div class=\"list-item list-item_interactive\" (click)=\"autosizeColumn()\">\n {{ loc.autosizeColumn }}\n </div>\n <div class=\"list-item list-item_interactive\" (click)=\"autosizeAllColumns()\">\n {{ loc.autosizeAll }}\n </div>\n <div class=\"list-divider\"></div>\n <div class=\"list-item list-item_interactive\" (click)=\"restoreDefaultColumns()\">\n {{ loc.resetColumnsSize }}\n </div>\n </div>\n}\n", styles: [":host{display:flex;flex-direction:column}\n"] }]
76
- }], ctorParameters: () => [{ type: i1.TableService }, { type: i2.TetaConfigService }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }], propDecorators: { columns: [{
77
- type: Input
78
- }], column: [{
79
- type: Input
80
- }], state: [{
81
- type: Input
82
- }], data: [{
83
- type: Input
84
- }], close: [{
85
- type: Input
86
- }], headCellElementRef: [{
87
- type: Input
88
- }] } });
89
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi1kcm9wZG93bi10YWIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudC90YWJsZS90YWJsZS1oZWFkL21haW4tZHJvcGRvd24tdGFiL21haW4tZHJvcGRvd24tdGFiLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnQvdGFibGUvdGFibGUtaGVhZC9tYWluLWRyb3Bkb3duLXRhYi9tYWluLWRyb3Bkb3duLXRhYi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDakgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUkxRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7QUFVNUMsTUFBTSxPQUFPLHdCQUF3QjtJQVVuQyxZQUNVLElBQXFCLEVBQ3JCLE9BQTBCLEVBQzFCLFdBQXVCLEVBQ3ZCLElBQXVCO1FBSHZCLFNBQUksR0FBSixJQUFJLENBQWlCO1FBQ3JCLFlBQU8sR0FBUCxPQUFPLENBQW1CO1FBQzFCLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBQ3ZCLFNBQUksR0FBSixJQUFJLENBQW1CO1FBRS9CLElBQUksQ0FBQyxNQUFN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c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRhYmxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2UvdGFibGUuc2VydmljZSc7XG5pbXBvcnQgeyBUZXRhQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL2xvY2FsZS90ZXRhLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IFRhYmxlQ29sdW1uIH0gZnJvbSAnLi4vLi4vY29udHJhY3QvdGFibGUtY29sdW1uJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRldGFMb2NhbGlzYXRpb24gfSBmcm9tICcuLi8uLi8uLi8uLi9sb2NhbGUvdGV0YS1sb2NhbGlzYXRpb24nO1xuaW1wb3J0IHsgU29ydFBhcmFtIH0gZnJvbSAnLi4vLi4vLi4vZmlsdGVyL2NvbnRhcmN0L3NvcnQtcGFyYW0nO1xuaW1wb3J0IHsgU3RhdGVVdGlsIH0gZnJvbSAnLi4vLi4vdXRpbC9zdGF0ZS11dGlsJztcbmltcG9ydCB7IEZpbHRlclN0YXRlIH0gZnJvbSAnLi4vLi4vLi4vZmlsdGVyL2NvbnRhcmN0L2ZpbHRlci1zdGF0ZSc7XG5pbXBvcnQgeyBTb3J0RXZlbnQgfSBmcm9tICcuLi8uLi9jb250cmFjdC9zb3J0LWV2ZW50JztcbmltcG9ydCB7IElUcmVlRGF0YSB9IGZyb20gJy4uLy4uLy4uLy4uL2NvbW1vbi9jb250cmFjdC9pLXRyZWUtZGF0YSc7XG5pbXBvcnQgeyBBc3luY1BpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0ZXRhLW1haW4tZHJvcGRvd24tdGFiJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21haW4tZHJvcGRvd24tdGFiLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbWFpbi1kcm9wZG93bi10YWIuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtBc3luY1BpcGVdLFxufSlcbmV4cG9ydCBjbGFzcyBNYWluRHJvcGRvd25UYWJDb21wb25lbnQ8VD4gaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBjb2x1bW5zOiBJVHJlZURhdGFbXTtcbiAgQElucHV0KCkgY29sdW1uOiBUYWJsZUNvbHVtbjtcbiAgQElucHV0KCkgc3RhdGU6IEZpbHRlclN0YXRlO1xuICBASW5wdXQoKSBkYXRhOiBUW107XG4gIEBJbnB1dCgpIGNsb3NlOiAoKSA9PiB2b2lkO1xuICBASW5wdXQoKSBoZWFkQ2VsbEVsZW1lbnRSZWY6IEVsZW1lbnRSZWY7XG5cbiAgbG9jYWxlOiBPYnNlcnZhYmxlPFRldGFMb2NhbGlzYXRpb24+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX3N2YzogVGFibGVTZXJ2aWNlPFQ+LFxuICAgIHByaXZhdGUgX2NvbmZpZzogVGV0YUNvbmZpZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIF9jZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICApIHtcbiAgICB0aGlzLmxvY2FsZSA9IHRoaXMuX2NvbmZpZy5sb2NhbGU7XG4gIH1cblxuICBnZXQgc29ydFBhcmFtKCk6IFNvcnRQYXJhbSB7XG4gICAgcmV0dXJuIFN0YXRlVXRpbC5nZXRTb3J0U3RhdGUodGhpcy5zdGF0ZSwgdGhpcy5jb2x1bW4pO1xuICB9XG5cbiAgZ2V0IGZpbHRlcmVkKCkge1xuICAgIHJldHVybiBTdGF0ZVV0aWwuaXNDb2x1bW5GaWx0ZXJlZCh0aGlzLnN0YXRlLCB0aGlzLmNvbHVtbik7XG4gIH1cblxuICBnZXQgcGFyZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9zdmMuZ2V0Q29sdW1uUGFyZW50KHRoaXMuY29sdW1uKTtcbiAgfVxuXG4gIHBpbkNvbHVtbigpIHtcbiAgICB0aGlzLl9zdmMucGluQ29sdW1uKHRoaXMuY29sdW1uKTtcbiAgfVxuXG4gIHNvcnRBc2MoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLl9zdmMuc29ydEFzYyhuZXcgU29ydEV2ZW50KHRoaXMuY29sdW1uLCBldmVudC5zaGlmdEtleSkpO1xuICB9XG5cbiAgc29ydERlc2MoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLl9zdmMuc29ydERlc2MobmV3IFNvcnRFdmVudCh0aGlzLmNvbHVtbiwgZXZlbnQuc2hpZnRLZXkpKTtcbiAgfVxuXG4gIGNsZWFyU29ydCgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdmMuY2xlYXJTb3J0KHRoaXMuY29sdW1uKTtcbiAgfVxuXG4gIGNsZWFyQWxsU29ydCgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdmMuY2xlYXJBbGxTb3J0KCk7XG4gIH1cblxuICBoYXNGaWx0ZXJlZENvbHVtbnMoKSB7XG4gICAgcmV0dXJuIFN0YXRlVXRpbC5oYXNGaWx0ZXJlZENvbHVtbnModGhpcy5zdGF0ZSk7XG4gIH1cblxuICBoYXNTb3J0ZWRDb2x1bW5zKCkge1xuICAgIHJldHVybiBTdGF0ZVV0aWwuaGFzU29ydGVkQ29sdW1ucyh0aGlzLnN0YXRlKTtcbiAgfVxuXG4gIHJlc3RvcmVEZWZhdWx0Q29sdW1ucygpIHtcbiAgICB0aGlzLl9zdmMucmVzdG9yZURlZmF1bHRDb2x1bW5zKCk7XG4gIH1cblxuICBjbGVhckZpbHRlcigpIHtcbiAgICB0aGlzLl9zdmMuY2xlYXJGaWx0ZXIodGhpcy5jb2x1bW4pO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBjbGVhckFsbEZpbHRlcnMoKSB7XG4gICAgdGhpcy5fc3ZjLmNsZWFyQWxsRmlsdGVycygpO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBhdXRvc2l6ZUNvbHVtbigpIHtcbiAgICB0aGlzLl9zdmMuYXV0b3NpemVDb2x1bW4odGhpcy5jb2x1bW4sIHRoaXMuaGVhZENlbGxFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgYXV0b3NpemVBbGxDb2x1bW5zKCkge1xuICAgIHRoaXMuX3N2Yy5hdXRvc2l6ZUFsbENvbHVtbnModGhpcy5oZWFkQ2VsbEVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHt9XG59XG4iLCJAaWYgKGxvY2FsZSB8IGFzeW5jOyBhcyBsb2MpIHtcbiAgPGRpdiBjbGFzcz1cImxpc3QgY29sdW1uX2F1dG9cIj5cbiAgICBAaWYgKCFwYXJlbnQpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWl0ZW0gbGlzdC1pdGVtX2ludGVyYWN0aXZlXCIgKGNsaWNrKT1cInBpbkNvbHVtbigpXCI+XG4gICAgICAgIHt7IGNvbHVtbi5sb2NrZWQgPyBsb2MudW5waW4gOiBsb2MucGluIH19XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWRpdmlkZXJcIj48L2Rpdj5cbiAgICB9XG4gICAgQGlmIChjb2x1bW4uc29ydGFibGUpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWl0ZW0gbGlzdC1pdGVtX2ludGVyYWN0aXZlXCIgKGNsaWNrKT1cInNvcnRBc2MoJGV2ZW50KVwiPlxuICAgICAgICB7eyBsb2Muc29ydEFzYyB9fVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwibGlzdC1pdGVtIGxpc3QtaXRlbV9pbnRlcmFjdGl2ZVwiIChjbGljayk9XCJzb3J0RGVzYygkZXZlbnQpXCI+XG4gICAgICAgIHt7IGxvYy5zb3J0RGVzYyB9fVxuICAgICAgPC9kaXY+XG4gICAgICBAaWYgKGhhc1NvcnRlZENvbHVtbnMoKSkge1xuICAgICAgICBAaWYgKHNvcnRQYXJhbSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWl0ZW0gbGlzdC1pdGVtX2ludGVyYWN0aXZlXCIgKGNsaWNrKT1cImNsZWFyU29ydCgpXCI+XG4gICAgICAgICAgICB7eyBsb2MuY2xlYXJTb3J0IH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtaXRlbSBsaXN0LWl0ZW1faW50ZXJhY3RpdmVcIiAoY2xpY2spPVwiY2xlYXJBbGxTb3J0KClcIj5cbiAgICAgICAgICB7eyBsb2MuY2xlYXJBbGxTb3J0IH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1kaXZpZGVyXCI+PC9kaXY+XG4gICAgICB9XG4gICAgfVxuICAgIEBpZiAoaGFzRmlsdGVyZWRDb2x1bW5zKCkpIHtcbiAgICAgIEBpZiAoZmlsdGVyZWQpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtaXRlbSBsaXN0LWl0ZW1faW50ZXJhY3RpdmVcIiAoY2xpY2spPVwiY2xlYXJGaWx0ZXIoKVwiPlxuICAgICAgICAgIHt7IGxvYy5jbGVhckZpbHRlciB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWl0ZW0gbGlzdC1pdGVtX2ludGVyYWN0aXZlXCIgKGNsaWNrKT1cImNsZWFyQWxsRmlsdGVycygpXCI+XG4gICAgICAgIHt7IGxvYy5jbGVhckFsbEZpbHRlcnMgfX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImxpc3QtZGl2aWRlclwiPjwvZGl2PlxuICAgIH1cbiAgICA8ZGl2IGNsYXNzPVwibGlzdC1pdGVtIGxpc3QtaXRlbV9pbnRlcmFjdGl2ZVwiIChjbGljayk9XCJhdXRvc2l6ZUNvbHVtbigpXCI+XG4gICAgICB7eyBsb2MuYXV0b3NpemVDb2x1bW4gfX1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibGlzdC1pdGVtIGxpc3QtaXRlbV9pbnRlcmFjdGl2ZVwiIChjbGljayk9XCJhdXRvc2l6ZUFsbENvbHVtbnMoKVwiPlxuICAgICAge3sgbG9jLmF1dG9zaXplQWxsIH19XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImxpc3QtZGl2aWRlclwiPjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJsaXN0LWl0ZW0gbGlzdC1pdGVtX2ludGVyYWN0aXZlXCIgKGNsaWNrKT1cInJlc3RvcmVEZWZhdWx0Q29sdW1ucygpXCI+XG4gICAgICB7eyBsb2MucmVzZXRDb2x1bW5zU2l6ZSB9fVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbn1cbiJdfQ==
@@ -1,76 +0,0 @@
1
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, HostBinding, Input, } from '@angular/core';
2
- import { combineLatest } from 'rxjs';
3
- import { takeWhile } from 'rxjs/operators';
4
- import { ArrayUtil } from '../../../common/util/array-util';
5
- import { SelectType } from '../enum/select-type.enum';
6
- import { TableService } from '../service/table.service';
7
- import { TableHeadGroupComponent } from '../table-head-group/table-head-group.component';
8
- import { SelectionHeadCellComponent } from '../selection-head-cell/selection-head-cell.component';
9
- import * as i0 from "@angular/core";
10
- import * as i1 from "../service/table.service";
11
- export class TableHeadComponent {
12
- set columns(columns) {
13
- this._columns = columns;
14
- this._cdr.markForCheck();
15
- }
16
- get columns() {
17
- return this._columns;
18
- }
19
- get locked() {
20
- return this._columns.filter((_) => _.locked === true && this._hiddenColumns.indexOf(_.name) < 0);
21
- }
22
- get unlocked() {
23
- return this._columns.filter((_) => _.locked === false && this._hiddenColumns.indexOf(_.name) < 0);
24
- }
25
- constructor(_svc, _cdr) {
26
- this._svc = _svc;
27
- this._cdr = _cdr;
28
- this.tableHeadClass = true;
29
- this.selectTypeEnum = SelectType;
30
- this._alive = true;
31
- this._columns = [];
32
- this._hiddenColumns = [];
33
- }
34
- track(index, item) {
35
- return item.name;
36
- }
37
- ngOnInit() {
38
- combineLatest([this._svc.columns, this._svc.hiddenColumns])
39
- .pipe(takeWhile((_) => this._alive))
40
- .subscribe((values) => {
41
- const [columns, hiddenColumns] = values;
42
- this._hiddenColumns = hiddenColumns;
43
- this.columns = columns;
44
- const locked = ArrayUtil.flatten(columns, 'columns', true).filter((_) => this._hiddenColumns.indexOf(_.name) < 0 && _.locked);
45
- const startWidth = this.selectType === SelectType.checkBox ? 28 : 0;
46
- this.lockedFlex = locked.reduce((prev, curr) => prev + curr.flex, 0);
47
- this.lockedWidth = locked.reduce((prev, curr) => prev + curr.width, startWidth);
48
- this._cdr.markForCheck();
49
- });
50
- this._svc.state.pipe(takeWhile((_) => this._alive)).subscribe((_) => {
51
- this.state = _;
52
- this._cdr.markForCheck();
53
- });
54
- this._svc.displayData.pipe(takeWhile((_) => this._alive)).subscribe((_) => {
55
- this.data = _.map((_) => _.data);
56
- this._cdr.markForCheck();
57
- });
58
- }
59
- ngOnDestroy() {
60
- this._alive = false;
61
- }
62
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: TableHeadComponent, deps: [{ token: i1.TableService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
63
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.1", type: TableHeadComponent, isStandalone: true, selector: "teta-table-head", inputs: { selectType: "selectType", showHeadCellMenu: "showHeadCellMenu" }, host: { properties: { "class.table-head": "this.tableHeadClass" } }, ngImport: i0, template: "@if (locked?.length) {\n <div\n class=\"table-head_locked\"\n [style.flex-grow]=\"lockedFlex\"\n [style.flex-basis.px]=\"lockedWidth\"\n [style.min-width.px]=\"lockedWidth\"\n >\n @if (selectType === selectTypeEnum.checkBox) {\n <teta-selection-head-cell style=\"width: 28px\"></teta-selection-head-cell>\n }\n @for (column of locked; track track($index, column)) {\n <teta-table-head-group\n class=\"table-head__group\"\n [data]=\"data\"\n [showHeadCellMenu]=\"showHeadCellMenu\"\n [column]=\"column\"\n ></teta-table-head-group>\n }\n </div>\n}\n@if (unlocked?.length) {\n @if (selectType === selectTypeEnum.checkBox && locked?.length < 1) {\n <teta-selection-head-cell style=\"width: 28px\"></teta-selection-head-cell>\n }\n @for (column of unlocked; track track($index, column)) {\n <teta-table-head-group\n class=\"table-head__group\"\n [data]=\"data\"\n [showHeadCellMenu]=\"showHeadCellMenu\"\n [column]=\"column\"\n ></teta-table-head-group>\n }\n}\n", styles: [""], dependencies: [{ kind: "component", type: SelectionHeadCellComponent, selector: "teta-selection-head-cell" }, { kind: "component", type: TableHeadGroupComponent, selector: "teta-table-head-group", inputs: ["showHeadCellMenu", "data", "column"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
64
- }
65
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: TableHeadComponent, decorators: [{
66
- type: Component,
67
- args: [{ selector: 'teta-table-head', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [SelectionHeadCellComponent, TableHeadGroupComponent], template: "@if (locked?.length) {\n <div\n class=\"table-head_locked\"\n [style.flex-grow]=\"lockedFlex\"\n [style.flex-basis.px]=\"lockedWidth\"\n [style.min-width.px]=\"lockedWidth\"\n >\n @if (selectType === selectTypeEnum.checkBox) {\n <teta-selection-head-cell style=\"width: 28px\"></teta-selection-head-cell>\n }\n @for (column of locked; track track($index, column)) {\n <teta-table-head-group\n class=\"table-head__group\"\n [data]=\"data\"\n [showHeadCellMenu]=\"showHeadCellMenu\"\n [column]=\"column\"\n ></teta-table-head-group>\n }\n </div>\n}\n@if (unlocked?.length) {\n @if (selectType === selectTypeEnum.checkBox && locked?.length < 1) {\n <teta-selection-head-cell style=\"width: 28px\"></teta-selection-head-cell>\n }\n @for (column of unlocked; track track($index, column)) {\n <teta-table-head-group\n class=\"table-head__group\"\n [data]=\"data\"\n [showHeadCellMenu]=\"showHeadCellMenu\"\n [column]=\"column\"\n ></teta-table-head-group>\n }\n}\n" }]
68
- }], ctorParameters: () => [{ type: i1.TableService }, { type: i0.ChangeDetectorRef }], propDecorators: { selectType: [{
69
- type: Input
70
- }], showHeadCellMenu: [{
71
- type: Input
72
- }], tableHeadClass: [{
73
- type: HostBinding,
74
- args: ['class.table-head']
75
- }] } });
76
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtaGVhZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L3RhYmxlL3RhYmxlLWhlYWQvdGFibGUtaGVhZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L3RhYmxlL3RhYmxlLWhlYWQvdGFibGUtaGVhZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsV0FBVyxFQUNYLEtBQUssR0FHTixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFHNUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUN6RixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQzs7O0FBVWxHLE1BQU0sT0FBTyxrQkFBa0I7SUFjN0IsSUFBSSxPQUFPLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7UUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVB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RUgsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDeEUsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDdEIsQ0FBQzs4R0F2RVUsa0JBQWtCO2tHQUFsQixrQkFBa0IsNE5DNUIvQix1aUNBaUNBLDBERFBZLDBCQUEwQixxRUFBRSx1QkFBdUI7OzJGQUVsRCxrQkFBa0I7a0JBUjlCLFNBQVM7K0JBQ0UsaUJBQWlCLG1CQUdWLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxXQUNQLENBQUMsMEJBQTBCLEVBQUUsdUJBQXVCLENBQUM7aUhBR3JELFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUM0QyxjQUFjO3NCQUEvRCxXQUFXO3VCQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VXaGlsZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQXJyYXlVdGlsIH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL3V0aWwvYXJyYXktdXRpbCc7XG5pbXBvcnQgeyBGaWx0ZXJTdGF0ZSB9IGZyb20gJy4uLy4uL2ZpbHRlci9jb250YXJjdC9maWx0ZXItc3RhdGUnO1xuaW1wb3J0IHsgVGFibGVDb2x1bW4gfSBmcm9tICcuLi9jb250cmFjdC90YWJsZS1jb2x1bW4nO1xuaW1wb3J0IHsgU2VsZWN0VHlwZSB9IGZyb20gJy4uL2VudW0vc2VsZWN0LXR5cGUuZW51bSc7XG5pbXBvcnQgeyBUYWJsZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlL3RhYmxlLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGFibGVIZWFkR3JvdXBDb21wb25lbnQgfSBmcm9tICcuLi90YWJsZS1oZWFkLWdyb3VwL3RhYmxlLWhlYWQtZ3JvdXAuY29tcG9uZW50JztcbmltcG9ydCB7IFNlbGVjdGlvbkhlYWRDZWxsQ29tcG9uZW50IH0gZnJvbSAnLi4vc2VsZWN0aW9uLWhlYWQtY2VsbC9zZWxlY3Rpb24taGVhZC1jZWxsLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RldGEtdGFibGUtaGVhZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS1oZWFkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGFibGUtaGVhZC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1NlbGVjdGlvbkhlYWRDZWxsQ29tcG9uZW50LCBUYWJsZUhlYWRHcm91cENvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlSGVhZENvbXBvbmVudDxUPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgc2VsZWN0VHlwZTogU2VsZWN0VHlwZTtcbiAgQElucHV0KCkgc2hvd0hlYWRDZWxsTWVudTogYm9vbGVhbjtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy50YWJsZS1oZWFkJykgcHJpdmF0ZSByZWFkb25seSB0YWJsZUhlYWRDbGFzcyA9IHRydWU7XG5cbiAgc3RhdGU6IEZpbHRlclN0YXRlO1xuICBzZWxlY3RUeXBlRW51bSA9IFNlbGVjdFR5cGU7XG4gIGxvY2tlZEZsZXg6IG51bWJlcjtcbiAgbG9ja2VkV2lkdGg6IG51bWJlcjtcblxuICBwcml2YXRlIF9hbGl2ZSA9IHRydWU7XG4gIHByaXZhdGUgX2NvbHVtbnM6IFRhYmxlQ29sdW1uW10gPSBbXTtcbiAgcHJpdmF0ZSBfaGlkZGVuQ29sdW1uczogc3RyaW5nW10gPSBbXTtcblxuICBzZXQgY29sdW1ucyhjb2x1bW5zOiBUYWJsZUNvbHVtbltdKSB7XG4gICAgdGhpcy5fY29sdW1ucyA9IGNvbHVtbnM7XG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgZ2V0IGNvbHVtbnMoKTogVGFibGVDb2x1bW5bXSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbHVtbnM7XG4gIH1cblxuICBnZXQgbG9ja2VkKCk6IFRhYmxlQ29sdW1uW10ge1xuICAgIHJldHVybiB0aGlzLl9jb2x1bW5zLmZpbHRlcigoXykgPT4gXy5sb2NrZWQgPT09IHRydWUgJiYgdGhpcy5faGlkZGVuQ29sdW1ucy5pbmRleE9mKF8ubmFtZSkgPCAwKTtcbiAgfVxuXG4gIGdldCB1bmxvY2tlZCgpOiBUYWJsZUNvbHVtbltdIHtcbiAgICByZXR1cm4gdGhpcy5fY29sdW1ucy5maWx0ZXIoKF8pID0+IF8ubG9ja2VkID09PSBmYWxzZSAmJiB0aGlzLl9oaWRkZW5Db2x1bW5zLmluZGV4T2YoXy5uYW1lKSA8IDApO1xuICB9XG5cbiAgZGF0YTogVFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX3N2YzogVGFibGVTZXJ2aWNlPFQ+LFxuICAgIHByaXZhdGUgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICkge31cblxuICB0cmFjayhpbmRleDogbnVtYmVyLCBpdGVtOiBUYWJsZUNvbHVtbik6IGFueSB7XG4gICAgcmV0dXJuIGl0ZW0ubmFtZTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuX3N2Yy5jb2x1bW5zLCB0aGlzLl9zdmMuaGlkZGVuQ29sdW1uc10pXG4gICAgICAucGlwZSh0YWtlV2hpbGUoKF8pID0+IHRoaXMuX2FsaXZlKSlcbiAgICAgIC5zdWJzY3JpYmUoKHZhbHVlczogW1RhYmxlQ29sdW1uW10sIHN0cmluZ1tdXSkgPT4ge1xuICAgICAgICBjb25zdCBbY29sdW1ucywgaGlkZGVuQ29sdW1uc10gPSB2YWx1ZXM7XG4gICAgICAgIHRoaXMuX2hpZGRlbkNvbHVtbnMgPSBoaWRkZW5Db2x1bW5zO1xuICAgICAgICB0aGlzLmNvbHVtbnMgPSBjb2x1bW5zO1xuICAgICAgICBjb25zdCBsb2NrZWQgPSBBcnJheVV0aWwuZmxhdHRlbihjb2x1bW5zLCAnY29sdW1ucycsIHRydWUpLmZpbHRlcihcbiAgICAgICAgICAoXykgPT4gdGhpcy5faGlkZGVuQ29sdW1ucy5pbmRleE9mKF8ubmFtZSkgPCAwICYmIF8ubG9ja2VkLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBzdGFydFdpZHRoID0gdGhpcy5zZWxlY3RUeXBlID09PSBTZWxlY3RUeXBlLmNoZWNrQm94ID8gMjggOiAwO1xuICAgICAgICB0aGlzLmxvY2tlZEZsZXggPSBsb2NrZWQucmVkdWNlKChwcmV2OiBudW1iZXIsIGN1cnI6IFRhYmxlQ29sdW1uKSA9PiBwcmV2ICsgY3Vyci5mbGV4LCAwKTtcbiAgICAgICAgdGhpcy5sb2NrZWRXaWR0aCA9IGxvY2tlZC5yZWR1Y2UoKHByZXY6IG51bWJlciwgY3VycjogVGFibGVDb2x1bW4pID0+IHByZXYgKyBjdXJyLndpZHRoLCBzdGFydFdpZHRoKTtcbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLl9zdmMuc3RhdGUucGlwZSh0YWtlV2hpbGUoKF8pID0+IHRoaXMuX2FsaXZlKSkuc3Vic2NyaWJlKChfKSA9PiB7XG4gICAgICB0aGlzLnN0YXRlID0gXztcbiAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX3N2Yy5kaXNwbGF5RGF0YS5waXBlKHRha2VXaGlsZSgoXykgPT4gdGhpcy5fYWxpdmUpKS5zdWJzY3JpYmUoKF8pID0+IHtcbiAgICAgIHRoaXMuZGF0YSA9IF8ubWFwKChfKSA9PiBfLmRhdGEpO1xuICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fYWxpdmUgPSBmYWxzZTtcbiAgfVxufVxuIiwiQGlmIChsb2NrZWQ/Lmxlbmd0aCkge1xuICA8ZGl2XG4gICAgY2xhc3M9XCJ0YWJsZS1oZWFkX2xvY2tlZFwiXG4gICAgW3N0eWxlLmZsZXgtZ3Jvd109XCJsb2NrZWRGbGV4XCJcbiAgICBbc3R5bGUuZmxleC1iYXNpcy5weF09XCJsb2NrZWRXaWR0aFwiXG4gICAgW3N0eWxlLm1pbi13aWR0aC5weF09XCJsb2NrZWRXaWR0aFwiXG4gID5cbiAgICBAaWYgKHNlbGVjdFR5cGUgPT09IHNlbGVjdFR5cGVFbnVtLmNoZWNrQm94KSB7XG4gICAgICA8dGV0YS1zZWxlY3Rpb24taGVhZC1jZWxsIHN0eWxlPVwid2lkdGg6IDI4cHhcIj48L3RldGEtc2VsZWN0aW9uLWhlYWQtY2VsbD5cbiAgICB9XG4gICAgQGZvciAoY29sdW1uIG9mIGxvY2tlZDsgdHJhY2sgdHJhY2soJGluZGV4LCBjb2x1bW4pKSB7XG4gICAgICA8dGV0YS10YWJsZS1oZWFkLWdyb3VwXG4gICAgICAgIGNsYXNzPVwidGFibGUtaGVhZF9fZ3JvdXBcIlxuICAgICAgICBbZGF0YV09XCJkYXRhXCJcbiAgICAgICAgW3Nob3dIZWFkQ2VsbE1lbnVdPVwic2hvd0hlYWRDZWxsTWVudVwiXG4gICAgICAgIFtjb2x1bW5dPVwiY29sdW1uXCJcbiAgICAgID48L3RldGEtdGFibGUtaGVhZC1ncm91cD5cbiAgICB9XG4gIDwvZGl2PlxufVxuQGlmICh1bmxvY2tlZD8ubGVuZ3RoKSB7XG4gIEBpZiAoc2VsZWN0VHlwZSA9PT0gc2VsZWN0VHlwZUVudW0uY2hlY2tCb3ggJiYgbG9ja2VkPy5sZW5ndGggPCAxKSB7XG4gICAgPHRldGEtc2VsZWN0aW9uLWhlYWQtY2VsbCBzdHlsZT1cIndpZHRoOiAyOHB4XCI+PC90ZXRhLXNlbGVjdGlvbi1oZWFkLWNlbGw+XG4gIH1cbiAgQGZvciAoY29sdW1uIG9mIHVubG9ja2VkOyB0cmFjayB0cmFjaygkaW5kZXgsIGNvbHVtbikpIHtcbiAgICA8dGV0YS10YWJsZS1oZWFkLWdyb3VwXG4gICAgICBjbGFzcz1cInRhYmxlLWhlYWRfX2dyb3VwXCJcbiAgICAgIFtkYXRhXT1cImRhdGFcIlxuICAgICAgW3Nob3dIZWFkQ2VsbE1lbnVdPVwic2hvd0hlYWRDZWxsTWVudVwiXG4gICAgICBbY29sdW1uXT1cImNvbHVtblwiXG4gICAgPjwvdGV0YS10YWJsZS1oZWFkLWdyb3VwPlxuICB9XG59XG4iXX0=