@tetacom/ng-components 1.1.2 → 1.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (738) hide show
  1. package/assets/color-icons.svg +374 -697
  2. package/assets/file-icons.svg +0 -1
  3. package/assets/icons.svg +205 -138
  4. package/common/contract/auto-close-ignore-case.d.ts +1 -1
  5. package/common/contract/constructor-type.d.ts +1 -1
  6. package/common/model/public-api.d.ts +1 -0
  7. package/common/model/view-type.model.d.ts +1 -0
  8. package/common/public-api.d.ts +1 -0
  9. package/component/accordion/accordion/accordion.component.d.ts +1 -1
  10. package/component/accordion/accordion-content.directive.d.ts +1 -1
  11. package/component/accordion/accordion-head/accordion-head.component.d.ts +1 -1
  12. package/component/accordion/accordion-item/accordion-item.component.d.ts +4 -1
  13. package/component/autocomplete/autocomplete/autocomplete.component.d.ts +1 -1
  14. package/component/avatar/avatar/avatar.component.d.ts +17 -0
  15. package/component/avatar/avatar.module.d.ts +9 -0
  16. package/component/avatar/model/avatar-color.enum.d.ts +20 -0
  17. package/component/avatar/public-api.d.ts +2 -0
  18. package/component/button/button/button.component.d.ts +5 -2
  19. package/component/chart-3d/chart3d/chart3d.component.d.ts +1 -1
  20. package/component/checkbox/checkbox/checkbox.component.d.ts +2 -1
  21. package/component/date-picker/base-calendar.d.ts +49 -0
  22. package/component/date-picker/base-picker.d.ts +60 -0
  23. package/component/date-picker/date-picker/date-calendar/date-calendar.component.d.ts +20 -0
  24. package/component/date-picker/date-picker/date-picker.component.d.ts +38 -68
  25. package/component/date-picker/date-picker.module.d.ts +19 -16
  26. package/component/date-picker/date-range/date-range.component.d.ts +46 -0
  27. package/component/date-picker/date-range/range-calendar/range-calendar.component.d.ts +39 -0
  28. package/component/date-picker/day-picker/day-item/day-item.component.d.ts +9 -0
  29. package/component/date-picker/day-picker/day-picker.component.d.ts +30 -0
  30. package/component/date-picker/model/from-to.model.d.ts +4 -0
  31. package/component/date-picker/model/min-max-date.model.d.ts +4 -0
  32. package/component/date-picker/model/public-api.d.ts +5 -0
  33. package/component/date-picker/month-picker/month-picker.component.d.ts +16 -50
  34. package/component/date-picker/public-api.d.ts +6 -5
  35. package/component/date-picker/year-picker/scroll-to-selected-year.directive.d.ts +11 -0
  36. package/component/date-picker/year-picker/year-picker.component.d.ts +24 -0
  37. package/component/delimiter/delimiter/delimiter.component.d.ts +1 -1
  38. package/component/divider/divider/divider.component.d.ts +10 -0
  39. package/component/divider/divider.module.d.ts +8 -0
  40. package/component/divider/public-api.d.ts +2 -0
  41. package/component/dropdown/dropdown/dropdown.component.d.ts +1 -1
  42. package/component/dropdown/dropdown-base.d.ts +3 -1
  43. package/component/dropdown/dropdown-content.directive.d.ts +1 -1
  44. package/component/dropdown/dropdown-head.directive.d.ts +1 -1
  45. package/component/dropdown/dropdown.directive.d.ts +1 -1
  46. package/component/dynamic-component/popup-content/popup-content.component.d.ts +1 -1
  47. package/component/expand-card/expand-card/expand-card.component.d.ts +1 -1
  48. package/component/expand-card/expand-item/expand-item.component.d.ts +1 -1
  49. package/component/expand-panel/expand-panel/expand-panel.component.d.ts +1 -1
  50. package/component/expand-panel/expand-panel-content.directive.d.ts +1 -1
  51. package/component/expand-panel/expand-panel-head.directive.d.ts +1 -1
  52. package/component/file-upload/file-item/file-item.component.d.ts +1 -1
  53. package/component/file-upload/file-upload-area/file-upload-area.component.d.ts +1 -1
  54. package/component/filter/base/filter-base.d.ts +2 -2
  55. package/component/filter/base/filter-component-base.d.ts +1 -1
  56. package/component/filter/boolean-filter/boolean-filter.component.d.ts +2 -2
  57. package/component/filter/contarct/boolean-filter.d.ts +1 -2
  58. package/component/filter/contarct/date-filter.d.ts +1 -2
  59. package/component/filter/contarct/i-filter.d.ts +2 -2
  60. package/component/filter/contarct/list-filter.d.ts +1 -2
  61. package/component/filter/contarct/numeric-filter.d.ts +1 -2
  62. package/component/filter/contarct/string-filter.d.ts +1 -2
  63. package/component/filter/date-filter/date-filter.component.d.ts +3 -2
  64. package/component/filter/filter-host/filter-host.component.d.ts +2 -2
  65. package/component/filter/list-filter/list-filter.component.d.ts +2 -2
  66. package/component/filter/numeric-filter/numeric-filter.component.d.ts +3 -2
  67. package/component/filter/string-filter/string-filter.component.d.ts +2 -2
  68. package/component/icon/icon/icon.component.d.ts +1 -1
  69. package/component/icon/icon-file/icon-file.component.d.ts +9 -3
  70. package/component/icon/icon-file/icon-file.module.d.ts +9 -0
  71. package/component/icon/icon-sprite.directive.d.ts +1 -1
  72. package/component/icon/icon.module.d.ts +4 -5
  73. package/component/icon/public-api.d.ts +1 -0
  74. package/component/input/color-input/color-input.component.d.ts +1 -1
  75. package/component/input/form-group-title/form-group-title.component.d.ts +1 -1
  76. package/component/input/input/input.component.d.ts +3 -1
  77. package/component/input/text-field/text-field.component.d.ts +1 -1
  78. package/component/message/message/message.component.d.ts +1 -1
  79. package/component/message/message-host/message-host.component.d.ts +1 -1
  80. package/component/message/model/message.d.ts +3 -0
  81. package/component/modal/dialog/dialog.component.d.ts +1 -1
  82. package/component/modal/modal-container/modal-container.component.d.ts +1 -1
  83. package/component/pager/pager/pager.component.d.ts +1 -1
  84. package/component/panel/panel/panel.component.d.ts +1 -1
  85. package/component/progress-bar/progress-bar/progress-bar.component.d.ts +1 -1
  86. package/component/property-grid/property-grid/property-grid-group/property-grid-group.component.d.ts +1 -1
  87. package/component/property-grid/property-grid/property-grid-item/property-grid-item.component.d.ts +1 -1
  88. package/component/property-grid/property-grid/property-grid-item-description.directive.d.ts +1 -1
  89. package/component/property-grid/property-grid/property-grid.component.d.ts +1 -1
  90. package/component/public-api.d.ts +2 -0
  91. package/component/radio/radio/radio.component.d.ts +1 -1
  92. package/component/radio/radio-button/radio-button.component.d.ts +1 -1
  93. package/component/resize-panel/resize-panel/resize-panel.component.d.ts +1 -1
  94. package/component/select/select/select.component.d.ts +4 -1
  95. package/component/select/select-option.directive.d.ts +1 -1
  96. package/component/select/select-value.directive.d.ts +1 -1
  97. package/component/sidebar/sidebar/sidebar.component.d.ts +1 -1
  98. package/component/switch/switch/switch.component.d.ts +4 -1
  99. package/component/switch/switch-button/switch-button.component.d.ts +1 -1
  100. package/component/table/base/cell-component-base.d.ts +1 -1
  101. package/component/table/base/head-cell-component-base.d.ts +1 -1
  102. package/component/table/cell/cell.component.d.ts +1 -1
  103. package/component/table/cell-host/cell-host.component.d.ts +1 -1
  104. package/component/table/contract/table-column.d.ts +0 -2
  105. package/component/table/default/boolean-cell/boolean-cell.component.d.ts +1 -4
  106. package/component/table/default/date-cell/date-cell.component.d.ts +1 -4
  107. package/component/table/default/date-time-cell/date-time-cell.component.d.ts +1 -4
  108. package/component/table/default/default-head-cell/default-head-cell.component.d.ts +1 -1
  109. package/component/table/default/list-cell/list-cell.component.d.ts +1 -5
  110. package/component/table/default/numeric-cell/numeric-cell.component.d.ts +1 -4
  111. package/component/table/default/string-cell/string-cell.component.d.ts +1 -4
  112. package/component/table/head-cell/head-cell.component.d.ts +1 -1
  113. package/component/table/head-cell-dropdown/head-cell-dropdown.component.d.ts +1 -1
  114. package/component/table/head-cell-host/head-cell-host.component.d.ts +1 -1
  115. package/component/table/selection-cell/selection-cell.component.d.ts +1 -1
  116. package/component/table/selection-head-cell/selection-head-cell.component.d.ts +1 -1
  117. package/component/table/table/table.component.d.ts +1 -1
  118. package/component/table/table-body/table-body.component.d.ts +1 -1
  119. package/component/table/table-head/filter-dropdown-tab/filter-dropdown-tab.component.d.ts +1 -1
  120. package/component/table/table-head/main-dropdown-tab/main-dropdown-tab.component.d.ts +1 -1
  121. package/component/table/table-head/table-head.component.d.ts +1 -1
  122. package/component/table/table-head/visibility-dropdown-tab/visibility-dropdown-tab.component.d.ts +1 -1
  123. package/component/table/table-head-group/table-head-group.component.d.ts +1 -1
  124. package/component/tabs/tab/tab.component.d.ts +1 -1
  125. package/component/tabs/tab-content.directive.d.ts +1 -1
  126. package/component/tabs/tab-title.directive.d.ts +1 -1
  127. package/component/tabs/tabs/tabs.component.d.ts +1 -1
  128. package/component/theme-switch/theme-switch/theme-switch.component.d.ts +1 -1
  129. package/component/toggle/toggle/toggle.component.d.ts +1 -1
  130. package/component/toolbar/toolbar/toolbar.component.d.ts +1 -1
  131. package/component/tree/tree/tree.component.d.ts +1 -1
  132. package/component/tree/tree-item/tree-item.component.d.ts +1 -1
  133. package/component/tree/tree-item-toggle/tree-item-toggle.component.d.ts +1 -1
  134. package/directive/auto-position/auto-position.directive.d.ts +1 -1
  135. package/directive/click-outside/click-outside.directive.d.ts +1 -1
  136. package/directive/context-menu/context-menu.directive.d.ts +1 -1
  137. package/directive/disable-control/disable-control.directive.d.ts +1 -1
  138. package/directive/drag-drop/drag-container.directive.d.ts +1 -1
  139. package/directive/drag-drop/drag-placeholder.directive.d.ts +1 -1
  140. package/directive/drag-drop/drag-preview.directive.d.ts +1 -1
  141. package/directive/drag-drop/drag.directive.d.ts +1 -1
  142. package/directive/drag-drop/model/drop-target.d.ts +1 -1
  143. package/directive/drag-sort/drag-sort-container.directive.d.ts +1 -1
  144. package/directive/drag-sort/drag-sort-item.directive.d.ts +1 -1
  145. package/directive/dynamic-content-base.directive.d.ts +1 -1
  146. package/directive/highlight/highlight.directive.d.ts +1 -1
  147. package/directive/hint/hint.directive.d.ts +3 -1
  148. package/directive/let/let.directive.d.ts +1 -1
  149. package/directive/loader/loader.directive.d.ts +1 -1
  150. package/directive/no-autofill/no-autofill.directive.d.ts +1 -1
  151. package/directive/only-number/only-number.directive.d.ts +1 -1
  152. package/directive/resize-drag/resize-drag.directive.d.ts +1 -1
  153. package/directive/scroll-into-view/scroll-into-view.directive.d.ts +1 -1
  154. package/directive/scrollable/scrollable/scrollable.component.d.ts +1 -1
  155. package/directive/scrollable/scrollable.directive.d.ts +1 -1
  156. package/directive/teta-template/teta-template.directive.d.ts +1 -1
  157. package/directive/tooltip/tooltip.directive.d.ts +1 -1
  158. package/esm2022/common/contract/teta-content-ref.mjs +11 -0
  159. package/esm2022/common/model/public-api.mjs +2 -0
  160. package/esm2022/common/model/view-type.model.mjs +2 -0
  161. package/esm2022/common/public-api.mjs +6 -0
  162. package/esm2022/common/service/click.service.mjs +26 -0
  163. package/esm2022/common/service/dynamic-component.service.mjs +97 -0
  164. package/esm2022/common/service/overlay-container.service.mjs +43 -0
  165. package/esm2022/component/accordion/accordion/accordion.component.mjs +19 -0
  166. package/esm2022/component/accordion/accordion-content.directive.mjs +17 -0
  167. package/esm2022/component/accordion/accordion-head/accordion-head.component.mjs +54 -0
  168. package/esm2022/component/accordion/accordion-item/accordion-item.component.mjs +58 -0
  169. package/{esm2020 → esm2022}/component/accordion/accordion.module.mjs +7 -7
  170. package/{esm2020 → esm2022}/component/autocomplete/autocomplete/autocomplete.component.mjs +4 -4
  171. package/{esm2020 → esm2022}/component/autocomplete/autocomplete.module.mjs +5 -5
  172. package/esm2022/component/avatar/avatar/avatar.component.mjs +60 -0
  173. package/esm2022/component/avatar/avatar.module.mjs +28 -0
  174. package/esm2022/component/avatar/model/avatar-color.enum.mjs +22 -0
  175. package/esm2022/component/avatar/public-api.mjs +3 -0
  176. package/esm2022/component/button/button/button.component.mjs +57 -0
  177. package/{esm2020 → esm2022}/component/button/button.module.mjs +5 -5
  178. package/{esm2020 → esm2022}/component/chart-3d/chart-3d.module.mjs +5 -5
  179. package/esm2022/component/chart-3d/chart3d/chart3d.component.mjs +255 -0
  180. package/esm2022/component/chart-3d/model/chart-3d-options.mjs +9 -0
  181. package/esm2022/component/chart-3d/model/series-3d.mjs +9 -0
  182. package/esm2022/component/checkbox/checkbox/checkbox.component.mjs +154 -0
  183. package/{esm2020 → esm2022}/component/checkbox/checkbox.module.mjs +7 -7
  184. package/esm2022/component/date-picker/base-calendar.mjs +100 -0
  185. package/esm2022/component/date-picker/base-picker.mjs +107 -0
  186. package/esm2022/component/date-picker/date-picker/date-calendar/date-calendar.component.mjs +56 -0
  187. package/esm2022/component/date-picker/date-picker/date-picker.component.mjs +206 -0
  188. package/esm2022/component/date-picker/date-picker.module.mjs +65 -0
  189. package/esm2022/component/date-picker/date-range/date-range.component.mjs +218 -0
  190. package/esm2022/component/date-picker/date-range/range-calendar/range-calendar.component.mjs +119 -0
  191. package/esm2022/component/date-picker/day-picker/day-item/day-item.component.mjs +16 -0
  192. package/esm2022/component/date-picker/day-picker/day-picker.component.mjs +120 -0
  193. package/esm2022/component/date-picker/model/date-period.mjs +9 -0
  194. package/esm2022/component/date-picker/model/day-model.mjs +19 -0
  195. package/esm2022/component/date-picker/model/from-to.model.mjs +2 -0
  196. package/esm2022/component/date-picker/model/min-max-date.model.mjs +2 -0
  197. package/esm2022/component/date-picker/model/public-api.mjs +6 -0
  198. package/esm2022/component/date-picker/month-picker/month-picker.component.mjs +53 -0
  199. package/esm2022/component/date-picker/public-api.mjs +7 -0
  200. package/esm2022/component/date-picker/year-picker/scroll-to-selected-year.directive.mjs +27 -0
  201. package/esm2022/component/date-picker/year-picker/year-picker.component.mjs +53 -0
  202. package/esm2022/component/delimiter/delimiter/delimiter.component.mjs +63 -0
  203. package/{esm2020 → esm2022}/component/delimiter/delimiter.module.mjs +5 -5
  204. package/esm2022/component/divider/divider/divider.component.mjs +20 -0
  205. package/esm2022/component/divider/divider.module.mjs +20 -0
  206. package/esm2022/component/divider/public-api.mjs +3 -0
  207. package/esm2022/component/dropdown/dropdown/dropdown.component.mjs +36 -0
  208. package/esm2022/component/dropdown/dropdown-base.mjs +238 -0
  209. package/esm2022/component/dropdown/dropdown-content.directive.mjs +19 -0
  210. package/esm2022/component/dropdown/dropdown-head.directive.mjs +19 -0
  211. package/esm2022/component/dropdown/dropdown.directive.mjs +43 -0
  212. package/{esm2020 → esm2022}/component/dropdown/dropdown.module.mjs +11 -11
  213. package/{esm2020 → esm2022}/component/dynamic-component/dynamic-component.module.mjs +5 -5
  214. package/esm2022/component/dynamic-component/popup-content/popup-content.component.mjs +59 -0
  215. package/{esm2020 → esm2022}/component/expand-card/expand-card/expand-card.component.mjs +8 -8
  216. package/{esm2020 → esm2022}/component/expand-card/expand-card.module.mjs +15 -15
  217. package/{esm2020 → esm2022}/component/expand-card/expand-item/expand-item.component.mjs +6 -6
  218. package/esm2022/component/expand-panel/expand-panel/expand-panel.component.mjs +68 -0
  219. package/esm2022/component/expand-panel/expand-panel-content.directive.mjs +17 -0
  220. package/esm2022/component/expand-panel/expand-panel-head.directive.mjs +17 -0
  221. package/{esm2020 → esm2022}/component/expand-panel/expand-panel.module.mjs +17 -17
  222. package/{esm2020 → esm2022}/component/file-upload/file-item/file-item.component.mjs +4 -4
  223. package/esm2022/component/file-upload/file-upload-area/file-upload-area.component.mjs +87 -0
  224. package/{esm2020 → esm2022}/component/file-upload/file-upload.module.mjs +5 -5
  225. package/esm2022/component/filter/base/filter-base.mjs +13 -0
  226. package/{esm2020 → esm2022}/component/filter/base/filter-component-base.mjs +1 -1
  227. package/esm2022/component/filter/boolean-filter/boolean-filter.component.mjs +67 -0
  228. package/esm2022/component/filter/contarct/boolean-filter.mjs +8 -0
  229. package/esm2022/component/filter/contarct/date-filter-value.mjs +17 -0
  230. package/esm2022/component/filter/contarct/date-filter.mjs +11 -0
  231. package/esm2022/component/filter/contarct/filter-item.mjs +78 -0
  232. package/esm2022/component/filter/contarct/filter-state.mjs +145 -0
  233. package/{esm2020 → esm2022}/component/filter/contarct/i-filter.mjs +1 -1
  234. package/esm2022/component/filter/contarct/list-filter.mjs +13 -0
  235. package/esm2022/component/filter/contarct/numeric-filter-value.mjs +22 -0
  236. package/esm2022/component/filter/contarct/numeric-filter.mjs +10 -0
  237. package/esm2022/component/filter/contarct/sort-param.mjs +26 -0
  238. package/esm2022/component/filter/contarct/string-filter.mjs +13 -0
  239. package/esm2022/component/filter/date-filter/date-filter.component.mjs +67 -0
  240. package/esm2022/component/filter/filter-host/filter-host.component.mjs +85 -0
  241. package/{esm2020 → esm2022}/component/filter/filter.module.mjs +31 -31
  242. package/esm2022/component/filter/list-filter/list-filter.component.mjs +103 -0
  243. package/esm2022/component/filter/numeric-filter/numeric-filter.component.mjs +67 -0
  244. package/esm2022/component/filter/string-filter/string-filter.component.mjs +68 -0
  245. package/esm2022/component/icon/icon/icon.component.mjs +39 -0
  246. package/esm2022/component/icon/icon-file/icon-file.component.mjs +30 -0
  247. package/esm2022/component/icon/icon-file/icon-file.module.mjs +28 -0
  248. package/esm2022/component/icon/icon-sprite.directive.mjs +34 -0
  249. package/esm2022/component/icon/icon.module.mjs +33 -0
  250. package/esm2022/component/icon/icon.service.mjs +64 -0
  251. package/{esm2020 → esm2022}/component/icon/public-api.mjs +2 -1
  252. package/esm2022/component/input/color-input/color-input.component.mjs +75 -0
  253. package/{esm2020 → esm2022}/component/input/form-group-title/form-group-title.component.mjs +6 -7
  254. package/esm2022/component/input/input/input.component.mjs +41 -0
  255. package/esm2022/component/input/input.module.mjs +26 -0
  256. package/esm2022/component/input/text-field/text-field.component.mjs +102 -0
  257. package/esm2022/component/message/message/message.component.mjs +79 -0
  258. package/esm2022/component/message/message-host/message-host.component.mjs +91 -0
  259. package/{esm2020 → esm2022}/component/message/message.module.mjs +9 -9
  260. package/esm2022/component/message/message.service.mjs +37 -0
  261. package/esm2022/component/message/model/message.mjs +29 -0
  262. package/esm2022/component/modal/dialog/dialog.component.mjs +51 -0
  263. package/esm2022/component/modal/dialog.service.mjs +40 -0
  264. package/esm2022/component/modal/modal-container/modal-container.component.mjs +86 -0
  265. package/esm2022/component/modal/modal.module.mjs +50 -0
  266. package/esm2022/component/modal/modal.service.mjs +125 -0
  267. package/{esm2020 → esm2022}/component/modal/model/current-modal.mjs +2 -1
  268. package/esm2022/component/modal/model/modal-instance.mjs +37 -0
  269. package/esm2022/component/pager/model/pager-state.mjs +70 -0
  270. package/{esm2020 → esm2022}/component/pager/pager/pager.component.mjs +4 -4
  271. package/{esm2020 → esm2022}/component/pager/pager.module.mjs +7 -7
  272. package/esm2022/component/panel/panel/panel.component.mjs +50 -0
  273. package/{esm2020 → esm2022}/component/panel/panel.module.mjs +5 -5
  274. package/esm2022/component/progress-bar/progress-bar/progress-bar.component.mjs +139 -0
  275. package/{esm2020 → esm2022}/component/progress-bar/progress-bar.module.mjs +5 -5
  276. package/esm2022/component/property-grid/property-grid/property-grid-group/property-grid-group.component.mjs +45 -0
  277. package/esm2022/component/property-grid/property-grid/property-grid-item/property-grid-item.component.mjs +141 -0
  278. package/esm2022/component/property-grid/property-grid/property-grid-item-description.directive.mjs +21 -0
  279. package/esm2022/component/property-grid/property-grid/property-grid.component.mjs +105 -0
  280. package/esm2022/component/property-grid/property-grid.module.mjs +87 -0
  281. package/esm2022/component/public-api.mjs +68 -0
  282. package/esm2022/component/radio/radio/radio.component.mjs +250 -0
  283. package/esm2022/component/radio/radio-button/radio-button.component.mjs +69 -0
  284. package/{esm2020 → esm2022}/component/radio/radio.module.mjs +5 -5
  285. package/esm2022/component/resize-panel/resize-panel/resize-panel.component.mjs +176 -0
  286. package/{esm2020 → esm2022}/component/resize-panel/resize-panel.module.mjs +5 -5
  287. package/esm2022/component/select/select/select.component.mjs +284 -0
  288. package/esm2022/component/select/select-option.directive.mjs +17 -0
  289. package/esm2022/component/select/select-value.directive.mjs +17 -0
  290. package/{esm2020 → esm2022}/component/select/select.module.mjs +21 -21
  291. package/esm2022/component/sidebar/sidebar/sidebar.component.mjs +56 -0
  292. package/{esm2020 → esm2022}/component/sidebar/sidebar.module.mjs +9 -9
  293. package/esm2022/component/switch/switch/switch.component.mjs +67 -0
  294. package/esm2022/component/switch/switch-button/switch-button.component.mjs +52 -0
  295. package/{esm2020 → esm2022}/component/switch/switch.module.mjs +5 -5
  296. package/esm2022/component/switch/switch.service.mjs +22 -0
  297. package/esm2022/component/table/base/cell-component-base.mjs +108 -0
  298. package/{esm2020 → esm2022}/component/table/base/head-cell-component-base.mjs +4 -4
  299. package/esm2022/component/table/cell/cell.component.mjs +38 -0
  300. package/esm2022/component/table/cell-host/cell-host.component.mjs +56 -0
  301. package/esm2022/component/table/contract/column-reorder-event.mjs +9 -0
  302. package/esm2022/component/table/contract/column-resize-event.mjs +9 -0
  303. package/esm2022/component/table/contract/sort-event.mjs +9 -0
  304. package/esm2022/component/table/contract/table-column-store.mjs +17 -0
  305. package/esm2022/component/table/contract/table-column.mjs +112 -0
  306. package/esm2022/component/table/default/boolean-cell/boolean-cell.component.mjs +44 -0
  307. package/esm2022/component/table/default/date-cell/date-cell.component.mjs +46 -0
  308. package/esm2022/component/table/default/date-time-cell/date-time-cell.component.mjs +45 -0
  309. package/esm2022/component/table/default/default-head-cell/default-head-cell.component.mjs +51 -0
  310. package/esm2022/component/table/default/list-cell/list-cell.component.mjs +71 -0
  311. package/esm2022/component/table/default/numeric-cell/numeric-cell.component.mjs +53 -0
  312. package/esm2022/component/table/default/string-cell/string-cell.component.mjs +53 -0
  313. package/esm2022/component/table/head-cell/head-cell.component.mjs +207 -0
  314. package/esm2022/component/table/head-cell-dropdown/head-cell-dropdown.component.mjs +59 -0
  315. package/esm2022/component/table/head-cell-host/head-cell-host.component.mjs +66 -0
  316. package/esm2022/component/table/selection-cell/selection-cell.component.mjs +49 -0
  317. package/esm2022/component/table/selection-head-cell/selection-head-cell.component.mjs +47 -0
  318. package/esm2022/component/table/service/table.service.mjs +672 -0
  319. package/esm2022/component/table/table/table.component.mjs +491 -0
  320. package/esm2022/component/table/table-body/table-body.component.mjs +224 -0
  321. package/esm2022/component/table/table-head/filter-dropdown-tab/filter-dropdown-tab.component.mjs +66 -0
  322. package/esm2022/component/table/table-head/main-dropdown-tab/main-dropdown-tab.component.mjs +97 -0
  323. package/esm2022/component/table/table-head/table-head.component.mjs +85 -0
  324. package/esm2022/component/table/table-head/visibility-dropdown-tab/visibility-dropdown-tab.component.mjs +153 -0
  325. package/esm2022/component/table/table-head-group/table-head-group.component.mjs +82 -0
  326. package/{esm2020 → esm2022}/component/table/table.module.mjs +74 -74
  327. package/esm2022/component/tabs/tab/tab.component.mjs +46 -0
  328. package/esm2022/component/tabs/tab-content.directive.mjs +17 -0
  329. package/esm2022/component/tabs/tab-title.directive.mjs +17 -0
  330. package/esm2022/component/tabs/tabs/tabs.component.mjs +74 -0
  331. package/{esm2020 → esm2022}/component/tabs/tabs.module.mjs +11 -11
  332. package/esm2022/component/theme-switch/theme-switch/theme-switch.component.mjs +30 -0
  333. package/{esm2020 → esm2022}/component/theme-switch/theme-switch.module.mjs +9 -9
  334. package/esm2022/component/theme-switch/theme-switch.service.mjs +36 -0
  335. package/esm2022/component/toggle/toggle/toggle.component.mjs +89 -0
  336. package/{esm2020 → esm2022}/component/toggle/toggle.module.mjs +5 -5
  337. package/esm2022/component/toolbar/toolbar/toolbar.component.mjs +28 -0
  338. package/{esm2020 → esm2022}/component/toolbar/toolbar.module.mjs +5 -5
  339. package/esm2022/component/tree/tree/tree.component.mjs +150 -0
  340. package/esm2022/component/tree/tree-item/tree-item.component.mjs +90 -0
  341. package/esm2022/component/tree/tree-item-toggle/tree-item-toggle.component.mjs +32 -0
  342. package/{esm2020 → esm2022}/component/tree/tree.module.mjs +5 -5
  343. package/esm2022/component/tree/tree.service.mjs +42 -0
  344. package/esm2022/directive/auto-position/auto-position.directive.mjs +72 -0
  345. package/{esm2020 → esm2022}/directive/auto-position/auto-position.module.mjs +5 -5
  346. package/esm2022/directive/click-outside/click-outside.directive.mjs +67 -0
  347. package/{esm2020 → esm2022}/directive/click-outside/click-outside.module.mjs +5 -5
  348. package/esm2022/directive/context-menu/context-menu.directive.mjs +132 -0
  349. package/{esm2020 → esm2022}/directive/context-menu/context-menu.module.mjs +7 -7
  350. package/esm2022/directive/disable-control/disable-control.directive.mjs +30 -0
  351. package/{esm2020 → esm2022}/directive/disable-control/disable-control.module.mjs +5 -5
  352. package/esm2022/directive/drag-drop/drag-container.directive.mjs +101 -0
  353. package/{esm2020 → esm2022}/directive/drag-drop/drag-drop.module.mjs +11 -11
  354. package/esm2022/directive/drag-drop/drag-drop.service.mjs +152 -0
  355. package/{esm2020 → esm2022}/directive/drag-drop/drag-placeholder.directive.mjs +4 -4
  356. package/esm2022/directive/drag-drop/drag-preview.directive.mjs +17 -0
  357. package/esm2022/directive/drag-drop/drag.directive.mjs +143 -0
  358. package/esm2022/directive/drag-drop/model/drag-container-instance.mjs +11 -0
  359. package/esm2022/directive/drag-drop/model/drag-instance.mjs +9 -0
  360. package/esm2022/directive/drag-sort/drag-sort-container.directive.mjs +68 -0
  361. package/esm2022/directive/drag-sort/drag-sort-item.directive.mjs +121 -0
  362. package/{esm2020 → esm2022}/directive/drag-sort/drag-sort.module.mjs +5 -5
  363. package/esm2022/directive/dynamic-content-base.directive.mjs +91 -0
  364. package/esm2022/directive/highlight/highlight.directive.mjs +73 -0
  365. package/{esm2020 → esm2022}/directive/highlight/highlight.module.mjs +5 -5
  366. package/esm2022/directive/hint/hint.directive.mjs +118 -0
  367. package/{esm2020 → esm2022}/directive/hint/hint.module.mjs +7 -7
  368. package/esm2022/directive/let/let.directive.mjs +40 -0
  369. package/{esm2020 → esm2022}/directive/let/let.module.mjs +5 -5
  370. package/esm2022/directive/loader/loader.directive.mjs +93 -0
  371. package/{esm2020 → esm2022}/directive/loader/loader.module.mjs +5 -5
  372. package/esm2022/directive/no-autofill/no-autofill.directive.mjs +32 -0
  373. package/{esm2020 → esm2022}/directive/no-autofill/no-autofill.module.mjs +5 -5
  374. package/esm2022/directive/only-number/only-number.directive.mjs +200 -0
  375. package/{esm2020 → esm2022}/directive/only-number/only-number.module.mjs +5 -5
  376. package/esm2022/directive/resize-drag/resize-drag.directive.mjs +73 -0
  377. package/{esm2020 → esm2022}/directive/resize-drag/resize-drag.module.mjs +5 -5
  378. package/esm2022/directive/scroll-into-view/scroll-into-view.directive.mjs +43 -0
  379. package/{esm2020 → esm2022}/directive/scroll-into-view/scroll-into-view.module.mjs +5 -5
  380. package/esm2022/directive/scrollable/scrollable/scrollable.component.mjs +107 -0
  381. package/esm2022/directive/scrollable/scrollable.directive.mjs +17 -0
  382. package/{esm2020 → esm2022}/directive/scrollable/scrollable.module.mjs +9 -9
  383. package/esm2022/directive/teta-template/teta-template.directive.mjs +24 -0
  384. package/{esm2020 → esm2022}/directive/teta-template/teta-template.module.mjs +5 -5
  385. package/esm2022/directive/tooltip/tooltip.directive.mjs +88 -0
  386. package/{esm2020 → esm2022}/directive/tooltip/tooltip.module.mjs +5 -5
  387. package/esm2022/locale/en.mjs +62 -0
  388. package/esm2022/locale/ru.mjs +62 -0
  389. package/esm2022/locale/teta-config.service.mjs +28 -0
  390. package/{esm2020 → esm2022}/locale/teta-localisation.mjs +1 -1
  391. package/{esm2020 → esm2022}/pipe/date-pipe/teta-date-pipe.module.mjs +5 -5
  392. package/esm2022/pipe/date-pipe/teta-date.pipe.mjs +35 -0
  393. package/{esm2020 → esm2022}/pipe/number-pipe/number-pipe.module.mjs +5 -5
  394. package/{esm2020 → esm2022}/pipe/number-pipe/number.pipe.mjs +4 -4
  395. package/{esm2020 → esm2022}/util/forms-util.mjs +9 -9
  396. package/{fesm2020 → fesm2022}/tetacom-ng-components.mjs +7287 -6542
  397. package/fesm2022/tetacom-ng-components.mjs.map +1 -0
  398. package/locale/teta-localisation.d.ts +2 -0
  399. package/package.json +13 -14
  400. package/style/accordion.scss +28 -6
  401. package/style/assembly-library.scss +4 -1
  402. package/style/assembly-presets.scss +0 -1
  403. package/style/badge.scss +28 -0
  404. package/style/border.scss +2 -1
  405. package/style/bottombar.scss +5 -0
  406. package/style/button.scss +16 -13
  407. package/style/checkbox.scss +26 -13
  408. package/style/chips.scss +10 -10
  409. package/style/color.scss +1 -36
  410. package/style/datepicker.scss +139 -24
  411. package/style/divider.scss +15 -0
  412. package/style/drag.scss +1 -1
  413. package/style/dropdown.scss +6 -4
  414. package/style/hint.scss +5 -5
  415. package/style/icon.scss +2 -1
  416. package/style/input.scss +32 -23
  417. package/style/layout.scss +6 -2
  418. package/style/list.scss +11 -8
  419. package/style/loader.scss +2 -2
  420. package/style/message.scss +15 -7
  421. package/style/modal.scss +3 -2
  422. package/style/navigation.scss +4 -1
  423. package/style/presets/color-presets.scss +8 -160
  424. package/style/presets/font-presets.scss +26 -25
  425. package/style/presets/view-types.scss +17 -0
  426. package/style/progress.scss +3 -3
  427. package/style/radio.scss +21 -7
  428. package/style/reset.scss +1 -0
  429. package/style/resize-panel.scss +2 -2
  430. package/style/scroll.scss +3 -3
  431. package/style/select.scss +26 -21
  432. package/style/shadow.scss +0 -20
  433. package/style/sidebar.scss +1 -1
  434. package/style/skeleton.scss +1 -1
  435. package/style/switch.scss +15 -10
  436. package/style/table.scss +15 -15
  437. package/style/tabs.scss +11 -11
  438. package/style/tag.scss +37 -0
  439. package/style/toggle.scss +20 -18
  440. package/style/toolbar.scss +1 -1
  441. package/style/tooltip.scss +8 -6
  442. package/style/tree.scss +4 -4
  443. package/util/export-dom-image.d.ts +1 -1
  444. package/component/date-picker/day-select/day-select.component.d.ts +0 -51
  445. package/component/date-picker/month-select/month-select.component.d.ts +0 -40
  446. package/component/date-picker/service/picker-touch.service.d.ts +0 -12
  447. package/component/date-picker/time-part-control/time-part-control.component.d.ts +0 -26
  448. package/component/date-picker/util/date-picker-util.d.ts +0 -15
  449. package/component/date-picker/year-select/year-select.component.d.ts +0 -45
  450. package/esm2020/common/contract/teta-content-ref.mjs +0 -8
  451. package/esm2020/common/public-api.mjs +0 -5
  452. package/esm2020/common/service/click.service.mjs +0 -23
  453. package/esm2020/common/service/dynamic-component.service.mjs +0 -93
  454. package/esm2020/common/service/overlay-container.service.mjs +0 -41
  455. package/esm2020/component/accordion/accordion/accordion.component.mjs +0 -18
  456. package/esm2020/component/accordion/accordion-content.directive.mjs +0 -16
  457. package/esm2020/component/accordion/accordion-head/accordion-head.component.mjs +0 -52
  458. package/esm2020/component/accordion/accordion-item/accordion-item.component.mjs +0 -43
  459. package/esm2020/component/button/button/button.component.mjs +0 -40
  460. package/esm2020/component/chart-3d/chart3d/chart3d.component.mjs +0 -244
  461. package/esm2020/component/chart-3d/model/chart-3d-options.mjs +0 -7
  462. package/esm2020/component/chart-3d/model/series-3d.mjs +0 -7
  463. package/esm2020/component/checkbox/checkbox/checkbox.component.mjs +0 -134
  464. package/esm2020/component/date-picker/date-picker/date-picker.component.mjs +0 -289
  465. package/esm2020/component/date-picker/date-picker.module.mjs +0 -69
  466. package/esm2020/component/date-picker/day-select/day-select.component.mjs +0 -184
  467. package/esm2020/component/date-picker/model/date-period.mjs +0 -7
  468. package/esm2020/component/date-picker/model/day-model.mjs +0 -13
  469. package/esm2020/component/date-picker/month-picker/month-picker.component.mjs +0 -253
  470. package/esm2020/component/date-picker/month-select/month-select.component.mjs +0 -148
  471. package/esm2020/component/date-picker/public-api.mjs +0 -6
  472. package/esm2020/component/date-picker/service/picker-touch.service.mjs +0 -34
  473. package/esm2020/component/date-picker/time-part-control/time-part-control.component.mjs +0 -73
  474. package/esm2020/component/date-picker/util/date-picker-util.mjs +0 -142
  475. package/esm2020/component/date-picker/year-select/year-select.component.mjs +0 -189
  476. package/esm2020/component/delimiter/delimiter/delimiter.component.mjs +0 -63
  477. package/esm2020/component/dropdown/dropdown/dropdown.component.mjs +0 -30
  478. package/esm2020/component/dropdown/dropdown-base.mjs +0 -225
  479. package/esm2020/component/dropdown/dropdown-content.directive.mjs +0 -17
  480. package/esm2020/component/dropdown/dropdown-head.directive.mjs +0 -18
  481. package/esm2020/component/dropdown/dropdown.directive.mjs +0 -38
  482. package/esm2020/component/dynamic-component/popup-content/popup-content.component.mjs +0 -59
  483. package/esm2020/component/expand-panel/expand-panel/expand-panel.component.mjs +0 -65
  484. package/esm2020/component/expand-panel/expand-panel-content.directive.mjs +0 -16
  485. package/esm2020/component/expand-panel/expand-panel-head.directive.mjs +0 -16
  486. package/esm2020/component/file-upload/file-upload-area/file-upload-area.component.mjs +0 -82
  487. package/esm2020/component/filter/base/filter-base.mjs +0 -10
  488. package/esm2020/component/filter/boolean-filter/boolean-filter.component.mjs +0 -60
  489. package/esm2020/component/filter/contarct/boolean-filter.mjs +0 -10
  490. package/esm2020/component/filter/contarct/date-filter-value.mjs +0 -9
  491. package/esm2020/component/filter/contarct/date-filter.mjs +0 -11
  492. package/esm2020/component/filter/contarct/filter-item.mjs +0 -34
  493. package/esm2020/component/filter/contarct/filter-state.mjs +0 -145
  494. package/esm2020/component/filter/contarct/list-filter.mjs +0 -12
  495. package/esm2020/component/filter/contarct/numeric-filter-value.mjs +0 -10
  496. package/esm2020/component/filter/contarct/numeric-filter.mjs +0 -11
  497. package/esm2020/component/filter/contarct/sort-param.mjs +0 -14
  498. package/esm2020/component/filter/contarct/string-filter.mjs +0 -12
  499. package/esm2020/component/filter/date-filter/date-filter.component.mjs +0 -60
  500. package/esm2020/component/filter/filter-host/filter-host.component.mjs +0 -78
  501. package/esm2020/component/filter/list-filter/list-filter.component.mjs +0 -95
  502. package/esm2020/component/filter/numeric-filter/numeric-filter.component.mjs +0 -60
  503. package/esm2020/component/filter/string-filter/string-filter.component.mjs +0 -61
  504. package/esm2020/component/icon/icon/icon.component.mjs +0 -37
  505. package/esm2020/component/icon/icon-file/icon-file.component.mjs +0 -14
  506. package/esm2020/component/icon/icon-sprite.directive.mjs +0 -32
  507. package/esm2020/component/icon/icon.module.mjs +0 -38
  508. package/esm2020/component/icon/icon.service.mjs +0 -59
  509. package/esm2020/component/input/color-input/color-input.component.mjs +0 -73
  510. package/esm2020/component/input/input/input.component.mjs +0 -36
  511. package/esm2020/component/input/input.module.mjs +0 -26
  512. package/esm2020/component/input/text-field/text-field.component.mjs +0 -96
  513. package/esm2020/component/message/message/message.component.mjs +0 -74
  514. package/esm2020/component/message/message-host/message-host.component.mjs +0 -88
  515. package/esm2020/component/message/message.service.mjs +0 -35
  516. package/esm2020/component/message/model/message.mjs +0 -21
  517. package/esm2020/component/modal/dialog/dialog.component.mjs +0 -44
  518. package/esm2020/component/modal/dialog.service.mjs +0 -39
  519. package/esm2020/component/modal/modal-container/modal-container.component.mjs +0 -84
  520. package/esm2020/component/modal/modal.module.mjs +0 -50
  521. package/esm2020/component/modal/modal.service.mjs +0 -121
  522. package/esm2020/component/modal/model/modal-instance.mjs +0 -34
  523. package/esm2020/component/pager/model/pager-state.mjs +0 -50
  524. package/esm2020/component/panel/panel/panel.component.mjs +0 -51
  525. package/esm2020/component/progress-bar/progress-bar/progress-bar.component.mjs +0 -131
  526. package/esm2020/component/property-grid/property-grid/property-grid-group/property-grid-group.component.mjs +0 -38
  527. package/esm2020/component/property-grid/property-grid/property-grid-item/property-grid-item.component.mjs +0 -130
  528. package/esm2020/component/property-grid/property-grid/property-grid-item-description.directive.mjs +0 -19
  529. package/esm2020/component/property-grid/property-grid/property-grid.component.mjs +0 -97
  530. package/esm2020/component/property-grid/property-grid.module.mjs +0 -87
  531. package/esm2020/component/public-api.mjs +0 -65
  532. package/esm2020/component/radio/radio/radio.component.mjs +0 -245
  533. package/esm2020/component/radio/radio-button/radio-button.component.mjs +0 -63
  534. package/esm2020/component/resize-panel/resize-panel/resize-panel.component.mjs +0 -168
  535. package/esm2020/component/select/select/select.component.mjs +0 -260
  536. package/esm2020/component/select/select-option.directive.mjs +0 -16
  537. package/esm2020/component/select/select-value.directive.mjs +0 -16
  538. package/esm2020/component/sidebar/sidebar/sidebar.component.mjs +0 -54
  539. package/esm2020/component/switch/switch/switch.component.mjs +0 -52
  540. package/esm2020/component/switch/switch-button/switch-button.component.mjs +0 -47
  541. package/esm2020/component/switch/switch.service.mjs +0 -21
  542. package/esm2020/component/table/base/cell-component-base.mjs +0 -97
  543. package/esm2020/component/table/cell/cell.component.mjs +0 -33
  544. package/esm2020/component/table/cell-host/cell-host.component.mjs +0 -50
  545. package/esm2020/component/table/contract/column-reorder-event.mjs +0 -7
  546. package/esm2020/component/table/contract/column-resize-event.mjs +0 -7
  547. package/esm2020/component/table/contract/sort-event.mjs +0 -7
  548. package/esm2020/component/table/contract/table-column-store.mjs +0 -12
  549. package/esm2020/component/table/contract/table-column.mjs +0 -38
  550. package/esm2020/component/table/default/boolean-cell/boolean-cell.component.mjs +0 -45
  551. package/esm2020/component/table/default/date-cell/date-cell.component.mjs +0 -47
  552. package/esm2020/component/table/default/date-time-cell/date-time-cell.component.mjs +0 -46
  553. package/esm2020/component/table/default/default-head-cell/default-head-cell.component.mjs +0 -47
  554. package/esm2020/component/table/default/list-cell/list-cell.component.mjs +0 -76
  555. package/esm2020/component/table/default/numeric-cell/numeric-cell.component.mjs +0 -55
  556. package/esm2020/component/table/default/string-cell/string-cell.component.mjs +0 -54
  557. package/esm2020/component/table/head-cell/head-cell.component.mjs +0 -189
  558. package/esm2020/component/table/head-cell-dropdown/head-cell-dropdown.component.mjs +0 -50
  559. package/esm2020/component/table/head-cell-host/head-cell-host.component.mjs +0 -60
  560. package/esm2020/component/table/selection-cell/selection-cell.component.mjs +0 -46
  561. package/esm2020/component/table/selection-head-cell/selection-head-cell.component.mjs +0 -45
  562. package/esm2020/component/table/service/table.service.mjs +0 -648
  563. package/esm2020/component/table/table/table.component.mjs +0 -472
  564. package/esm2020/component/table/table-body/table-body.component.mjs +0 -203
  565. package/esm2020/component/table/table-head/filter-dropdown-tab/filter-dropdown-tab.component.mjs +0 -55
  566. package/esm2020/component/table/table-head/main-dropdown-tab/main-dropdown-tab.component.mjs +0 -86
  567. package/esm2020/component/table/table-head/table-head.component.mjs +0 -77
  568. package/esm2020/component/table/table-head/visibility-dropdown-tab/visibility-dropdown-tab.component.mjs +0 -141
  569. package/esm2020/component/table/table-head-group/table-head-group.component.mjs +0 -76
  570. package/esm2020/component/tabs/tab/tab.component.mjs +0 -42
  571. package/esm2020/component/tabs/tab-content.directive.mjs +0 -16
  572. package/esm2020/component/tabs/tab-title.directive.mjs +0 -16
  573. package/esm2020/component/tabs/tabs/tabs.component.mjs +0 -70
  574. package/esm2020/component/theme-switch/theme-switch/theme-switch.component.mjs +0 -28
  575. package/esm2020/component/theme-switch/theme-switch.service.mjs +0 -34
  576. package/esm2020/component/toggle/toggle/toggle.component.mjs +0 -79
  577. package/esm2020/component/toolbar/toolbar/toolbar.component.mjs +0 -26
  578. package/esm2020/component/tree/tree/tree.component.mjs +0 -138
  579. package/esm2020/component/tree/tree-item/tree-item.component.mjs +0 -85
  580. package/esm2020/component/tree/tree-item-toggle/tree-item-toggle.component.mjs +0 -28
  581. package/esm2020/component/tree/tree.service.mjs +0 -40
  582. package/esm2020/directive/auto-position/auto-position.directive.mjs +0 -69
  583. package/esm2020/directive/click-outside/click-outside.directive.mjs +0 -65
  584. package/esm2020/directive/context-menu/context-menu.directive.mjs +0 -120
  585. package/esm2020/directive/disable-control/disable-control.directive.mjs +0 -29
  586. package/esm2020/directive/drag-drop/drag-container.directive.mjs +0 -92
  587. package/esm2020/directive/drag-drop/drag-drop.service.mjs +0 -142
  588. package/esm2020/directive/drag-drop/drag-preview.directive.mjs +0 -16
  589. package/esm2020/directive/drag-drop/drag.directive.mjs +0 -135
  590. package/esm2020/directive/drag-drop/model/drag-container-instance.mjs +0 -8
  591. package/esm2020/directive/drag-drop/model/drag-instance.mjs +0 -7
  592. package/esm2020/directive/drag-sort/drag-sort-container.directive.mjs +0 -64
  593. package/esm2020/directive/drag-sort/drag-sort-item.directive.mjs +0 -115
  594. package/esm2020/directive/dynamic-content-base.directive.mjs +0 -80
  595. package/esm2020/directive/highlight/highlight.directive.mjs +0 -72
  596. package/esm2020/directive/hint/hint.directive.mjs +0 -103
  597. package/esm2020/directive/let/let.directive.mjs +0 -38
  598. package/esm2020/directive/loader/loader.directive.mjs +0 -85
  599. package/esm2020/directive/no-autofill/no-autofill.directive.mjs +0 -30
  600. package/esm2020/directive/only-number/only-number.directive.mjs +0 -198
  601. package/esm2020/directive/resize-drag/resize-drag.directive.mjs +0 -71
  602. package/esm2020/directive/scroll-into-view/scroll-into-view.directive.mjs +0 -40
  603. package/esm2020/directive/scrollable/scrollable/scrollable.component.mjs +0 -96
  604. package/esm2020/directive/scrollable/scrollable.directive.mjs +0 -19
  605. package/esm2020/directive/teta-template/teta-template.directive.mjs +0 -22
  606. package/esm2020/directive/tooltip/tooltip.directive.mjs +0 -76
  607. package/esm2020/locale/en.mjs +0 -60
  608. package/esm2020/locale/ru.mjs +0 -60
  609. package/esm2020/locale/teta-config.service.mjs +0 -28
  610. package/esm2020/pipe/date-pipe/teta-date.pipe.mjs +0 -34
  611. package/esm2020/pipe/prepend-zero/prepend-zero.module.mjs +0 -18
  612. package/esm2020/pipe/prepend-zero/prepend-zero.pipe.mjs +0 -21
  613. package/fesm2015/tetacom-ng-components.mjs +0 -13042
  614. package/fesm2015/tetacom-ng-components.mjs.map +0 -1
  615. package/fesm2020/tetacom-ng-components.mjs.map +0 -1
  616. package/pipe/prepend-zero/prepend-zero.module.d.ts +0 -8
  617. package/pipe/prepend-zero/prepend-zero.pipe.d.ts +0 -7
  618. package/style/presets/shadow-presets.scss +0 -16
  619. package/style/tokens/basedark.tokens.css +0 -77
  620. package/style/tokens/baselight.tokens.css +0 -61
  621. package/style/tokens/global.tokens.css +0 -235
  622. package/style/tokens/utility.tokens.css +0 -1119
  623. package/style/util/button-util.scss +0 -58
  624. /package/{esm2020 → esm2022}/common/contract/auto-close-ignore-case.mjs +0 -0
  625. /package/{esm2020 → esm2022}/common/contract/constructor-type.mjs +0 -0
  626. /package/{esm2020 → esm2022}/common/contract/dynamic-data.mjs +0 -0
  627. /package/{esm2020 → esm2022}/common/contract/i-dictionary.mjs +0 -0
  628. /package/{esm2020 → esm2022}/common/contract/i-id-name.mjs +0 -0
  629. /package/{esm2020 → esm2022}/common/contract/i-id.mjs +0 -0
  630. /package/{esm2020 → esm2022}/common/contract/i-rect.mjs +0 -0
  631. /package/{esm2020 → esm2022}/common/contract/i-tree-data.mjs +0 -0
  632. /package/{esm2020 → esm2022}/common/contract/public-api.mjs +0 -0
  633. /package/{esm2020 → esm2022}/common/enum/align.enum.mjs +0 -0
  634. /package/{esm2020 → esm2022}/common/enum/public-api.mjs +0 -0
  635. /package/{esm2020 → esm2022}/common/enum/teta-size.enum.mjs +0 -0
  636. /package/{esm2020 → esm2022}/common/enum/vertical-align.enum.mjs +0 -0
  637. /package/{esm2020 → esm2022}/common/service/public-api.mjs +0 -0
  638. /package/{esm2020 → esm2022}/common/util/array-util.mjs +0 -0
  639. /package/{esm2020 → esm2022}/common/util/dom-util.mjs +0 -0
  640. /package/{esm2020 → esm2022}/common/util/position-util.mjs +0 -0
  641. /package/{esm2020 → esm2022}/common/util/public-api.mjs +0 -0
  642. /package/{esm2020 → esm2022}/component/accordion/public-api.mjs +0 -0
  643. /package/{esm2020 → esm2022}/component/autocomplete/public-api.mjs +0 -0
  644. /package/{esm2020 → esm2022}/component/button/public-api.mjs +0 -0
  645. /package/{esm2020 → esm2022}/component/chart-3d/model/base-3d-point.mjs +0 -0
  646. /package/{esm2020 → esm2022}/component/chart-3d/model/public-api.mjs +0 -0
  647. /package/{esm2020 → esm2022}/component/chart-3d/public-api.mjs +0 -0
  648. /package/{esm2020 → esm2022}/component/checkbox/public-api.mjs +0 -0
  649. /package/{esm2020 → esm2022}/component/date-picker/model/date-picker-mode.enum.mjs +0 -0
  650. /package/{esm2020 → esm2022}/component/delimiter/public-api.mjs +0 -0
  651. /package/{esm2020 → esm2022}/component/dropdown/public-api.mjs +0 -0
  652. /package/{esm2020 → esm2022}/component/dynamic-component/public-api.mjs +0 -0
  653. /package/{esm2020 → esm2022}/component/expand-card/public-api.mjs +0 -0
  654. /package/{esm2020 → esm2022}/component/expand-panel/public-api.mjs +0 -0
  655. /package/{esm2020 → esm2022}/component/file-upload/public-api.mjs +0 -0
  656. /package/{esm2020 → esm2022}/component/filter/contarct/filter-component-map.mjs +0 -0
  657. /package/{esm2020 → esm2022}/component/filter/enum/filter-type.enum.mjs +0 -0
  658. /package/{esm2020 → esm2022}/component/filter/enum/list-filter-type.enum.mjs +0 -0
  659. /package/{esm2020 → esm2022}/component/filter/enum/string-filter-type.enum.mjs +0 -0
  660. /package/{esm2020 → esm2022}/component/filter/public-api.mjs +0 -0
  661. /package/{esm2020 → esm2022}/component/input/public-api.mjs +0 -0
  662. /package/{esm2020 → esm2022}/component/message/public-api.mjs +0 -0
  663. /package/{esm2020 → esm2022}/component/modal/model/i-modal-config.mjs +0 -0
  664. /package/{esm2020 → esm2022}/component/modal/model/i-modal-result.mjs +0 -0
  665. /package/{esm2020 → esm2022}/component/modal/model/modal-close-reason.enum.mjs +0 -0
  666. /package/{esm2020 → esm2022}/component/modal/public-api.mjs +0 -0
  667. /package/{esm2020 → esm2022}/component/pager/public-api.mjs +0 -0
  668. /package/{esm2020 → esm2022}/component/pager/util/pager-util.mjs +0 -0
  669. /package/{esm2020 → esm2022}/component/panel/public-api.mjs +0 -0
  670. /package/{esm2020 → esm2022}/component/progress-bar/public-api.mjs +0 -0
  671. /package/{esm2020 → esm2022}/component/property-grid/public-api.mjs +0 -0
  672. /package/{esm2020 → esm2022}/component/radio/public-api.mjs +0 -0
  673. /package/{esm2020 → esm2022}/component/resize-panel/public-api.mjs +0 -0
  674. /package/{esm2020 → esm2022}/component/select/public-api.mjs +0 -0
  675. /package/{esm2020 → esm2022}/component/sidebar/public-api.mjs +0 -0
  676. /package/{esm2020 → esm2022}/component/sidebar/sidebar-position.enum.mjs +0 -0
  677. /package/{esm2020 → esm2022}/component/switch/public-api.mjs +0 -0
  678. /package/{esm2020 → esm2022}/component/table/base/detail-component-base.mjs +0 -0
  679. /package/{esm2020 → esm2022}/component/table/contract/cell-components-map.mjs +0 -0
  680. /package/{esm2020 → esm2022}/component/table/contract/head-dropdown-tab.mjs +0 -0
  681. /package/{esm2020 → esm2022}/component/table/contract/i-cell-coordinates.mjs +0 -0
  682. /package/{esm2020 → esm2022}/component/table/contract/i-cell-event.mjs +0 -0
  683. /package/{esm2020 → esm2022}/component/table/contract/i-cell-instance.mjs +0 -0
  684. /package/{esm2020 → esm2022}/component/table/contract/i-cell-value.mjs +0 -0
  685. /package/{esm2020 → esm2022}/component/table/contract/public-api.mjs +0 -0
  686. /package/{esm2020 → esm2022}/component/table/enum/aggregation-type.enum.mjs +0 -0
  687. /package/{esm2020 → esm2022}/component/table/enum/edit-event.enum.mjs +0 -0
  688. /package/{esm2020 → esm2022}/component/table/enum/edit-type.enum.mjs +0 -0
  689. /package/{esm2020 → esm2022}/component/table/enum/public-api.mjs +0 -0
  690. /package/{esm2020 → esm2022}/component/table/enum/select-type.enum.mjs +0 -0
  691. /package/{esm2020 → esm2022}/component/table/public-api.mjs +0 -0
  692. /package/{esm2020 → esm2022}/component/table/util/public-api.mjs +0 -0
  693. /package/{esm2020 → esm2022}/component/table/util/state-util.mjs +0 -0
  694. /package/{esm2020 → esm2022}/component/table/util/table-util.mjs +0 -0
  695. /package/{esm2020 → esm2022}/component/tabs/public-api.mjs +0 -0
  696. /package/{esm2020 → esm2022}/component/theme-switch/public-api.mjs +0 -0
  697. /package/{esm2020 → esm2022}/component/toggle/public-api.mjs +0 -0
  698. /package/{esm2020 → esm2022}/component/toolbar/public-api.mjs +0 -0
  699. /package/{esm2020 → esm2022}/component/tree/public-api.mjs +0 -0
  700. /package/{esm2020 → esm2022}/directive/auto-position/public-api.mjs +0 -0
  701. /package/{esm2020 → esm2022}/directive/click-outside/public-api.mjs +0 -0
  702. /package/{esm2020 → esm2022}/directive/context-menu/public-api.mjs +0 -0
  703. /package/{esm2020 → esm2022}/directive/disable-control/public-api.mjs +0 -0
  704. /package/{esm2020 → esm2022}/directive/drag-drop/model/drag-process.mjs +0 -0
  705. /package/{esm2020 → esm2022}/directive/drag-drop/model/drag-selection.mjs +0 -0
  706. /package/{esm2020 → esm2022}/directive/drag-drop/model/drop-event.mjs +0 -0
  707. /package/{esm2020 → esm2022}/directive/drag-drop/model/drop-target.mjs +0 -0
  708. /package/{esm2020 → esm2022}/directive/drag-drop/model/point.mjs +0 -0
  709. /package/{esm2020 → esm2022}/directive/drag-drop/model/public-api.mjs +0 -0
  710. /package/{esm2020 → esm2022}/directive/drag-drop/public-api.mjs +0 -0
  711. /package/{esm2020 → esm2022}/directive/drag-sort/drag-sort-event.mjs +0 -0
  712. /package/{esm2020 → esm2022}/directive/drag-sort/public-api.mjs +0 -0
  713. /package/{esm2020 → esm2022}/directive/highlight/public-api.mjs +0 -0
  714. /package/{esm2020 → esm2022}/directive/hint/public-api.mjs +0 -0
  715. /package/{esm2020 → esm2022}/directive/let/public-api.mjs +0 -0
  716. /package/{esm2020 → esm2022}/directive/loader/public-api.mjs +0 -0
  717. /package/{esm2020 → esm2022}/directive/no-autofill/public-api.mjs +0 -0
  718. /package/{esm2020 → esm2022}/directive/only-number/public-api.mjs +0 -0
  719. /package/{esm2020 → esm2022}/directive/public-api.mjs +0 -0
  720. /package/{esm2020 → esm2022}/directive/resize-drag/public-api.mjs +0 -0
  721. /package/{esm2020 → esm2022}/directive/scroll-into-view/public-api.mjs +0 -0
  722. /package/{esm2020 → esm2022}/directive/scrollable/public-api.mjs +0 -0
  723. /package/{esm2020 → esm2022}/directive/teta-template/public-api.mjs +0 -0
  724. /package/{esm2020 → esm2022}/directive/tooltip/public-api.mjs +0 -0
  725. /package/{esm2020 → esm2022}/locale/public-api.mjs +0 -0
  726. /package/{esm2020 → esm2022}/observable/animation-frame.mjs +0 -0
  727. /package/{esm2020 → esm2022}/observable/public-api.mjs +0 -0
  728. /package/{esm2020 → esm2022}/observable/zoneObservable.mjs +0 -0
  729. /package/{esm2020 → esm2022}/pipe/date-pipe/public-api.mjs +0 -0
  730. /package/{esm2020 → esm2022}/pipe/number-pipe/public-api.mjs +0 -0
  731. /package/{esm2020 → esm2022}/pipe/public-api.mjs +0 -0
  732. /package/{esm2020 → esm2022}/pipe/util/number-helper.mjs +0 -0
  733. /package/{esm2020 → esm2022}/public-api.mjs +0 -0
  734. /package/{esm2020 → esm2022}/tetacom-ng-components.mjs +0 -0
  735. /package/{esm2020 → esm2022}/util/date-util.mjs +0 -0
  736. /package/{esm2020 → esm2022}/util/export-dom-image.mjs +0 -0
  737. /package/{esm2020 → esm2022}/util/public-api.mjs +0 -0
  738. /package/{esm2020 → esm2022}/util/string-util.mjs +0 -0
@@ -1,648 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { TableColumn } from '../contract/table-column';
3
- import { FilterState } from '../../filter/contarct/filter-state';
4
- import { BehaviorSubject, Subject } from 'rxjs';
5
- import { ColumnReorderEvent } from '../contract/column-reorder-event';
6
- import { ArrayUtil } from '../../../common/util/array-util';
7
- import { StateUtil } from '../util/state-util';
8
- import { SelectType } from '../enum/select-type.enum';
9
- import { EditType } from '../enum/edit-type.enum';
10
- import { EditEvent } from '../enum/edit-event.enum';
11
- import { ListFilterType } from '../../filter/enum/list-filter-type.enum';
12
- import { ListFilter } from '../../filter/contarct/list-filter';
13
- import { FilterType } from '../../filter/enum/filter-type.enum';
14
- import { NumericFilterValue } from '../../filter/contarct/numeric-filter-value';
15
- import { NumericFilter } from '../../filter/contarct/numeric-filter';
16
- import { StringFilter } from '../../filter/contarct/string-filter';
17
- import { DateFilterValue } from '../../filter/contarct/date-filter-value';
18
- import { DateFilter } from '../../filter/contarct/date-filter';
19
- import { DateUtil } from '../../../util/date-util';
20
- import objectHash from 'object-hash';
21
- import { TableColumnStore } from '../contract/table-column-store';
22
- import * as i0 from "@angular/core";
23
- export class TableService {
24
- constructor() {
25
- this.selectType = SelectType.mouse;
26
- this.editType = EditType.cell;
27
- this.editEvent = EditEvent.doubleClick;
28
- this.trackRow = (index, row) => {
29
- if (row['id']) {
30
- return row['id'];
31
- }
32
- return index;
33
- };
34
- this.initialColumns = [];
35
- this.displayColumns = [];
36
- this._columns = new BehaviorSubject([]);
37
- this._hiddenColumns = new BehaviorSubject([]);
38
- this._displayData = new BehaviorSubject([]);
39
- this._dict = new BehaviorSubject({});
40
- this._filterOptions = new BehaviorSubject({});
41
- this._state = new BehaviorSubject(new FilterState());
42
- this._editRowStart = new Subject();
43
- this._editRowStop = new Subject();
44
- this._editCellStart = new Subject();
45
- this._editCellStop = new Subject();
46
- this._valueChanged = new Subject();
47
- this._valueSet = new Subject();
48
- this._stateChanged = new Subject();
49
- this._filterClear = new Subject();
50
- this._selectedRows = new BehaviorSubject([]);
51
- this._activeRow = new BehaviorSubject(null);
52
- this._scrollIndex = new Subject();
53
- this.columns = this._columns.asObservable();
54
- this.displayData = this._displayData.asObservable();
55
- this.dict = this._dict.asObservable();
56
- this.filterOptions = this._filterOptions.asObservable();
57
- this.state = this._state.asObservable();
58
- this.editRowStart = this._editRowStart.asObservable();
59
- this.editRowStop = this._editRowStop.asObservable();
60
- this.editCellStart = this._editCellStart.asObservable();
61
- this.editCellStop = this._editCellStop.asObservable();
62
- this.valueChanged = this._valueChanged.asObservable();
63
- this.valueSet = this._valueSet.asObservable();
64
- this.stateChanged = this._stateChanged.asObservable();
65
- this.filterClear = this._filterClear.asObservable();
66
- this.selectedRows = this._selectedRows.asObservable();
67
- this.activeRow = this._activeRow.asObservable();
68
- this.hiddenColumns = this._hiddenColumns.asObservable();
69
- this.scrollIndex = this._scrollIndex.asObservable();
70
- }
71
- get dragSource() {
72
- return this._dragSource;
73
- }
74
- get currentEditCell() {
75
- return this._currentEditCell;
76
- }
77
- setData(data) {
78
- this._displayData.next(data ? [...data] : []);
79
- }
80
- setDict(dict) {
81
- this._dict.next(dict);
82
- }
83
- setFilterOptions(filterOptions) {
84
- this._filterOptions.next(filterOptions);
85
- }
86
- setColumns(columns) {
87
- this.initialColumns = columns ? columns.map((_) => new TableColumn(_)) : [];
88
- const excludeKeys = [
89
- 'editable',
90
- 'cellComponent',
91
- 'headCellComponent',
92
- 'headDropdownConfig'
93
- ];
94
- this.initialColumnsHash = objectHash(this.initialColumns, {
95
- algorithm: 'sha1',
96
- ignoreUnknown: true,
97
- excludeKeys: (key) => {
98
- return excludeKeys.indexOf(key) >= 0;
99
- },
100
- });
101
- const restored = this.restoreColumns();
102
- if (restored) {
103
- this.setDisplayColumns(restored);
104
- }
105
- else {
106
- this.setDisplayColumns(this.initialColumns);
107
- }
108
- }
109
- restoreDefaultColumns() {
110
- this.setDisplayColumns(this.initialColumns);
111
- this.clearColumnsState();
112
- }
113
- updateColumns(columns) {
114
- this.setDisplayColumns(columns);
115
- this.saveColumnsState();
116
- }
117
- saveColumnsState() {
118
- if (this._cookieName) {
119
- localStorage.setItem(this._columnsCookieName, JSON.stringify({
120
- hash: this.initialColumnsHash,
121
- columns: this.displayColumns.map((_) => new TableColumnStore(_)),
122
- }));
123
- }
124
- }
125
- clearColumnsState() {
126
- localStorage.removeItem(this._columnsCookieName);
127
- }
128
- setDisplayColumns(columns) {
129
- this.displayColumns = columns ? columns.map((_) => new TableColumn(_)) : [];
130
- this._columns.next(this.displayColumns);
131
- }
132
- restoreColumns() {
133
- const savedColumns = JSON.parse(localStorage.getItem(this._columnsCookieName));
134
- if (savedColumns && savedColumns.hash === this.initialColumnsHash) {
135
- return this.restoreColumnsState(savedColumns.columns);
136
- }
137
- return null;
138
- }
139
- restoreColumnsState(columns) {
140
- return columns.map((column) => {
141
- const found = ArrayUtil.findRecursive(this.initialColumns, (item) => item.name === column.name, 'columns');
142
- const resultColumn = new TableColumn(found);
143
- resultColumn.width = column.width;
144
- resultColumn.flex = column.flex;
145
- resultColumn.locked = column.locked;
146
- if (column.columns?.length > 0) {
147
- resultColumn.columns = this.restoreColumnsState(column.columns);
148
- }
149
- return resultColumn;
150
- });
151
- }
152
- setState(state) {
153
- state.save(this._cookieName);
154
- this._state.next(state);
155
- }
156
- setCookieName(name) {
157
- this._cookieName = name;
158
- this._hiddenCookieName = `${this._cookieName}_hidden_columns`;
159
- this._columnsCookieName = `${this._cookieName}_columns`;
160
- }
161
- restoreState() {
162
- let state;
163
- if (this._cookieName?.length > 0 && FilterState.restore(this._cookieName)) {
164
- let newState = Object.assign(this._state.value, FilterState.restore(this._cookieName));
165
- newState = DateUtil.convertDateStringsToDates(newState);
166
- state = new FilterState(newState);
167
- }
168
- else {
169
- state = new FilterState();
170
- }
171
- this.setState(state);
172
- }
173
- saveHiddenColumns(hiddenColumns) {
174
- localStorage.setItem(this._hiddenCookieName, JSON.stringify(hiddenColumns));
175
- }
176
- restoreHiddenColumns() {
177
- const hiddenColumns = localStorage.getItem(this._hiddenCookieName) || '[]';
178
- this._hiddenColumns.next(JSON.parse(hiddenColumns));
179
- }
180
- sortAsc(sortEvent) {
181
- if (sortEvent.column.sortable) {
182
- this.setState(StateUtil.sortAsc(sortEvent, this._state.value));
183
- }
184
- }
185
- sortDesc(sortEvent) {
186
- if (sortEvent.column.sortable) {
187
- this.setState(StateUtil.sortDesc(sortEvent, this._state.value));
188
- }
189
- }
190
- clearSort(column) {
191
- this.setState(StateUtil.clearSort(column, this._state.value));
192
- }
193
- clearAllSort() {
194
- this.setState(StateUtil.clearAllSort(this._state.value));
195
- }
196
- clearFilter(column) {
197
- const state = this._state.value;
198
- if (column !== null && column !== undefined && column.filterable) {
199
- switch (column.filterType) {
200
- case FilterType.date:
201
- state.addDateFilter(new DateFilter({
202
- name: column.name,
203
- field: column.filterField,
204
- value: new DateFilterValue(),
205
- }));
206
- break;
207
- case FilterType.string:
208
- state.addStringFilter(new StringFilter({
209
- name: column.name,
210
- field: column.filterField,
211
- value: '',
212
- }));
213
- break;
214
- case FilterType.number:
215
- state.addNumericFilter(new NumericFilter({
216
- name: column.name,
217
- field: column.filterField,
218
- value: new NumericFilterValue(),
219
- }));
220
- break;
221
- case FilterType.list:
222
- state.addListFilter(new ListFilter({
223
- name: column.name,
224
- field: column.filterField,
225
- value: [],
226
- type: ListFilterType.None,
227
- }));
228
- break;
229
- }
230
- this.setState(new FilterState(state));
231
- }
232
- }
233
- clearAllFilters() {
234
- const state = this._state.value;
235
- state.stringFilters = [];
236
- state.listFilters = [];
237
- state.numericFilters = [];
238
- state.dateFilters = [];
239
- this.setState(new FilterState(state));
240
- }
241
- pinColumn(column) {
242
- this.displayColumns.forEach((col) => {
243
- if (col.name === column.name) {
244
- col.locked = !col.locked;
245
- }
246
- });
247
- this.updateColumns(this.displayColumns);
248
- }
249
- dragStart(column) {
250
- this._dragSource = column;
251
- }
252
- lockPreviousColumns(column, element) {
253
- const flat = ArrayUtil.flatten(this.displayColumns, 'columns', true).sort((a, b) => Number(b.locked) - Number(a.locked));
254
- const index = flat.indexOf(column);
255
- const previous = flat.slice(0, index).filter((_) => _.flex > 0);
256
- if (previous?.length > 0) {
257
- const tableElement = this.getTableElement(element);
258
- previous.forEach((item) => {
259
- const itemCol = tableElement.querySelector(`teta-head-cell[data-column=${item.name}]`);
260
- if (itemCol) {
261
- item.flex = 0;
262
- item.width = itemCol.clientWidth;
263
- }
264
- });
265
- }
266
- }
267
- resizeColumn(event) {
268
- if (event.column !== null && event.column !== undefined) {
269
- event.column.width = event.newWidth < 50 ? 50 : event.newWidth;
270
- event.column.flex = 0;
271
- }
272
- this._columns.next(this.displayColumns);
273
- this.saveColumnsState();
274
- }
275
- autosizeColumn(column, target) {
276
- const tableElement = this.getTableElement(target);
277
- this.setColumnAutoWidth(column, tableElement);
278
- this._columns.next(this.displayColumns);
279
- this.saveColumnsState();
280
- }
281
- autosizeAllColumns(target) {
282
- const tableElement = this.getTableElement(target);
283
- const flat = ArrayUtil.flatten(this.displayColumns, 'columns', true);
284
- flat.forEach((col) => this.setColumnAutoWidth(col, tableElement));
285
- this._columns.next(this.displayColumns);
286
- this.saveColumnsState();
287
- }
288
- reorderColumn(column, insertBefore) {
289
- const event = new ColumnReorderEvent(this._dragSource, column);
290
- if (event.source !== event.target) {
291
- const sourceParent = this.findParent(event.source, this.displayColumns);
292
- const targetParent = this.findParent(event.target, this.displayColumns);
293
- if (sourceParent && targetParent) {
294
- const sourceIndex = sourceParent.indexOf(event.source);
295
- sourceParent.splice(sourceIndex, 1);
296
- let targetIndex = targetParent.indexOf(event.target);
297
- if (!insertBefore) {
298
- targetIndex = targetIndex + 1;
299
- }
300
- targetParent.splice(targetIndex, 0, event.source);
301
- event.source.locked = event.target.locked;
302
- this.updateColumns(this.displayColumns);
303
- }
304
- }
305
- }
306
- getColumnParent(column) {
307
- return this.findParentColumn(column, this.displayColumns);
308
- }
309
- startEditRow(cellEvent) {
310
- if (this._currentEditCell?.row !== cellEvent?.row) {
311
- if (this._currentEditCell != null) {
312
- this._editRowStop.next(this._currentEditCell);
313
- }
314
- if (cellEvent === null) {
315
- this._editRowStart.next(cellEvent);
316
- this._currentEditCell = cellEvent;
317
- }
318
- else {
319
- if (this.boolOrFuncCallback(this.rowEditable)(this.getRowByIndex(cellEvent?.row))) {
320
- this._editRowStart.next(cellEvent);
321
- this._currentEditCell = cellEvent;
322
- }
323
- }
324
- }
325
- }
326
- startEditCell(cellEvent) {
327
- if (this._currentEditCell?.column !== cellEvent?.column ||
328
- this._currentEditCell?.row !== cellEvent?.row) {
329
- if (this._currentEditCell != null) {
330
- this._editCellStop.next(this._currentEditCell);
331
- }
332
- const column = this.getColumnByName(cellEvent?.column);
333
- if (this.boolOrFuncCallback(column?.editable)({
334
- row: this.getRowByIndex(cellEvent?.row),
335
- column: column
336
- })) {
337
- this._editCellStart.next(cellEvent);
338
- this._currentEditCell = cellEvent;
339
- const key = cellEvent?.event?.key;
340
- if (key && (key.length === 1 || (key === 'Delete' && !column.required))) {
341
- this.clearValue(cellEvent);
342
- }
343
- }
344
- }
345
- }
346
- setActiveRow(row) {
347
- this._activeRow.next(row);
348
- }
349
- selectRows(rows) {
350
- this._selectedRows.next(rows);
351
- }
352
- selectOrDeselectRow(row) {
353
- if (this._selectedRows.value.indexOf(row) >= 0) {
354
- this._selectedRows.next(this._selectedRows.value.filter((_) => _ !== row));
355
- }
356
- else {
357
- this._selectedRows.next([...this._selectedRows.value, row]);
358
- }
359
- }
360
- selectRange(row) {
361
- const index = this._displayData.value.indexOf(row);
362
- let minIndex = this._selectedRows.value.reduce((prev, curr) => {
363
- const newIndex = this._displayData.value.indexOf(curr);
364
- if (newIndex < prev) {
365
- return newIndex;
366
- }
367
- return prev;
368
- }, this._displayData.value.length);
369
- let maxIndex = this._selectedRows.value.reduce((prev, curr) => {
370
- const newIndex = this._displayData.value.indexOf(curr);
371
- if (newIndex > prev) {
372
- return newIndex;
373
- }
374
- return prev;
375
- }, 0);
376
- if (index > maxIndex) {
377
- maxIndex = index;
378
- }
379
- if (index < minIndex) {
380
- minIndex = index;
381
- }
382
- if (minIndex < index && index < maxIndex) {
383
- maxIndex = index;
384
- }
385
- this._selectedRows.next([...this._displayData.value.slice(minIndex, maxIndex + 1)]);
386
- }
387
- selectRow(row) {
388
- if (this.selectType === SelectType.none) {
389
- return;
390
- }
391
- this._selectedRows.next([...this._selectedRows.value, row]);
392
- }
393
- deselectRow(row) {
394
- if (this.selectType === SelectType.none) {
395
- return;
396
- }
397
- this._selectedRows.next(this._selectedRows.value.filter((_) => _ !== row));
398
- }
399
- selectAll() {
400
- this._selectedRows.next(this._displayData.value);
401
- }
402
- deselectAll() {
403
- this._selectedRows.next([]);
404
- }
405
- allRowsSelected() {
406
- if (this._displayData.value?.length &&
407
- this._selectedRows.value?.length &&
408
- this._displayData.value.every((_) => this._selectedRows.value.indexOf(_) >= 0)) {
409
- return true;
410
- }
411
- else if (this._selectedRows.value == null ||
412
- this._selectedRows.value.length === 0) {
413
- return false;
414
- }
415
- return null;
416
- }
417
- setHiddenColumns(value) {
418
- this.saveHiddenColumns(value);
419
- this._hiddenColumns.next(value);
420
- }
421
- columnIsHidden(column) {
422
- return this._hiddenColumns.value.indexOf(column.name) >= 0;
423
- }
424
- changeValue(coordinates) {
425
- this._valueChanged.next(coordinates);
426
- }
427
- setValue(cellValue) {
428
- let value;
429
- if (typeof cellValue.row === 'object' && typeof cellValue.column === 'object') {
430
- value = {
431
- row: this.getRowIndex(cellValue.row),
432
- column: cellValue.column.name,
433
- value: cellValue.value
434
- };
435
- }
436
- else {
437
- value = cellValue;
438
- }
439
- this._valueSet.next(value);
440
- }
441
- getRowByIndex(rowIndex) {
442
- return this._displayData?.value[rowIndex];
443
- }
444
- getRowIndex(row) {
445
- return this._displayData.value.indexOf(row);
446
- }
447
- getEventCell(event) {
448
- return event.composedPath().find((target) => {
449
- return target.tagName?.toLowerCase() === 'teta-cell';
450
- });
451
- }
452
- getEventRow(event) {
453
- return event.composedPath().find((target) => {
454
- return target?.getAttribute && target?.getAttribute('data-row');
455
- });
456
- }
457
- getNextEditableCell(coords) {
458
- const nextCell = this.getNextCell(coords);
459
- if (!nextCell) {
460
- return null;
461
- }
462
- const column = this.getColumnByName(nextCell?.column);
463
- if (this.boolOrFuncCallback(column.editable)({
464
- row: this.getRowByIndex(nextCell.row),
465
- column
466
- })) {
467
- return nextCell;
468
- }
469
- return this.getNextEditableCell(nextCell);
470
- }
471
- getPreviousEditableCell(coords) {
472
- const prevCell = this.getPreviousCell(coords);
473
- if (!prevCell) {
474
- return null;
475
- }
476
- const column = this.getColumnByName(prevCell?.column);
477
- if (this.boolOrFuncCallback(column.editable)({
478
- row: this.getRowByIndex(prevCell.row),
479
- column
480
- })) {
481
- return prevCell;
482
- }
483
- return this.getPreviousEditableCell(prevCell);
484
- }
485
- getNextCell(coords) {
486
- const columns = this.getFlatColumns();
487
- let colIndex = columns.findIndex((col) => col.name === coords?.column);
488
- let rowIndex = coords?.row;
489
- if (colIndex >= 0 && rowIndex >= 0) {
490
- if (colIndex === columns.length - 1) {
491
- colIndex = 0;
492
- rowIndex = rowIndex + 1;
493
- }
494
- else {
495
- colIndex = colIndex + 1;
496
- }
497
- return {
498
- column: columns[colIndex]?.name,
499
- row: rowIndex
500
- };
501
- }
502
- return null;
503
- }
504
- getPreviousCell(coords) {
505
- const columns = this.getFlatColumns();
506
- let colIndex = columns.findIndex((col) => col.name === coords?.column);
507
- let rowIndex = coords?.row;
508
- if (colIndex >= 0 && rowIndex >= 0) {
509
- if (colIndex === 0) {
510
- colIndex = columns.length - 1;
511
- rowIndex = rowIndex - 1;
512
- }
513
- else {
514
- colIndex = colIndex - 1;
515
- }
516
- return {
517
- column: columns[colIndex]?.name,
518
- row: rowIndex
519
- };
520
- }
521
- return null;
522
- }
523
- getNextRowCell(coords) {
524
- const columns = this.getFlatColumns();
525
- let colIndex = columns.findIndex((col) => col.name === coords?.column);
526
- let rowIndex = coords?.row;
527
- if (colIndex >= 0 && rowIndex >= 0 && rowIndex < this._displayData.value.length - 1) {
528
- return {
529
- column: columns[colIndex]?.name,
530
- row: rowIndex + 1
531
- };
532
- }
533
- return null;
534
- }
535
- getPreviousRowCell(coords) {
536
- const columns = this.getFlatColumns();
537
- let colIndex = columns.findIndex((col) => col.name === coords?.column);
538
- let rowIndex = coords?.row;
539
- if (colIndex >= 0 && rowIndex > 1) {
540
- return {
541
- column: columns[colIndex]?.name,
542
- row: rowIndex - 1
543
- };
544
- }
545
- return null;
546
- }
547
- getColumnByName(columnName) {
548
- return ArrayUtil.findRecursive(this.displayColumns, (iterableNode) => columnName === iterableNode.name, 'columns');
549
- }
550
- scrollToIndex(index) {
551
- this._scrollIndex.next(null);
552
- this._scrollIndex.next(index);
553
- }
554
- boolOrFuncCallback(variable) {
555
- return (args) => {
556
- if (typeof variable === 'boolean') {
557
- return variable;
558
- }
559
- else if (this.isFunction(variable)) {
560
- return variable(args);
561
- }
562
- return true;
563
- };
564
- }
565
- getVisibleColumns() {
566
- const visible = ArrayUtil.flatten(this._columns.value, 'columns', true).filter((_) => this._hiddenColumns.value.indexOf(_.name) < 0);
567
- return visible.sort((a, b) => Number(b.locked) - Number(a.locked));
568
- }
569
- getCellInstance(coords) {
570
- return coords ? {
571
- row: this.getRowByIndex(coords.row),
572
- column: this.getColumnByName(coords.column)
573
- } : null;
574
- }
575
- getFlatColumns() {
576
- return ArrayUtil.flatten(this.displayColumns, 'columns', true).sort((a, b) => Number(b.locked) - Number(a.locked));
577
- }
578
- findParent(column, columns) {
579
- const found = columns.find((x) => x.name === column.name);
580
- if (found !== null && found !== undefined) {
581
- return columns;
582
- }
583
- for (let i = 0, l = columns.length; i < l; i++) {
584
- const col = columns[i];
585
- if (col.columns && col.columns.length) {
586
- const result = this.findParent(column, col.columns);
587
- if (result !== null && result !== undefined) {
588
- return result;
589
- }
590
- }
591
- }
592
- return null;
593
- }
594
- findParentColumn(column, columns) {
595
- const found = columns.find((x) => x.columns.indexOf(column) >= 0);
596
- if (found !== null && found !== undefined) {
597
- return found;
598
- }
599
- for (let i = 0, l = columns.length; i < l; i++) {
600
- const col = columns[i];
601
- if (col.columns && col.columns.length) {
602
- const result = this.findParentColumn(column, col.columns);
603
- if (result !== null && result !== undefined) {
604
- return result;
605
- }
606
- }
607
- }
608
- return null;
609
- }
610
- getTableElement(element) {
611
- return element.closest('teta-table');
612
- }
613
- isFunction(obj) {
614
- return !!(obj && obj?.constructor && obj?.call && obj?.apply);
615
- }
616
- setColumnAutoWidth(column, table) {
617
- const cells = table.querySelectorAll(`teta-cell[data-column="${column.name}"] .cell-text`);
618
- let maxWidth = 0;
619
- cells.forEach((cell) => {
620
- if (cell.scrollWidth > maxWidth) {
621
- maxWidth = cell.scrollWidth;
622
- }
623
- });
624
- const aggCells = table.querySelectorAll(`.aggregate-cell[data-column="${column.name}"] .cell-text`);
625
- aggCells?.forEach((cell) => {
626
- if (cell.scrollWidth > maxWidth) {
627
- maxWidth = cell.scrollWidth;
628
- }
629
- });
630
- column.flex = 0;
631
- column.width = maxWidth + 20;
632
- }
633
- clearValue(event) {
634
- this.setValue({
635
- ...event,
636
- value: null
637
- });
638
- }
639
- }
640
- TableService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: TableService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
641
- TableService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: TableService, providedIn: 'root' });
642
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: TableService, decorators: [{
643
- type: Injectable,
644
- args: [{
645
- providedIn: 'root',
646
- }]
647
- }], ctorParameters: function () { return []; } });
648
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnQvdGFibGUvc2VydmljZS90YWJsZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFekMsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUMvRCxPQUFPLEVBQUMsZUFBZSxFQUFjLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUUxRCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUVwRSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDMUQsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDaEQsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ2xELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSx5Q0FBeUMsQ0FBQztBQUN2RSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDN0QsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBQzlELE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDRDQUE0QyxDQUFDO0FBQzlFLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUNuRSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFDakUsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHlDQUF5QyxDQUFDO0FBQ3hFLE9B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QVUsQ0FBQyxLQUFpQjtRQUNsQyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ1osR0FBRyxLQUFLO1lBQ1IsS0FBSyxFQUFFLElBQUk7U0FDWixDQUFDLENBQUM7SUFDTCxDQUFDOzt5R0Fyd0JVLFlBQVk7NkdBQVosWUFBWSxjQUZYLE1BQU07MkZBRVAsWUFBWTtrQkFIeEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtJQ2VsbENvb3JkaW5hdGVzfSBmcm9tICcuLi9jb250cmFjdC9pLWNlbGwtY29vcmRpbmF0ZXMnO1xuaW1wb3J0IHtUYWJsZUNvbHVtbn0gZnJvbSAnLi4vY29udHJhY3QvdGFibGUtY29sdW1uJztcbmltcG9ydCB7RmlsdGVyU3RhdGV9IGZyb20gJy4uLy4uL2ZpbHRlci9jb250YXJjdC9maWx0ZXItc3RhdGUnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtDb2x1bW5SZXNpemVFdmVudH0gZnJvbSAnLi4vY29udHJhY3QvY29sdW1uLXJlc2l6ZS1ldmVudCc7XG5pbXBvcnQge0NvbHVtblJlb3JkZXJFdmVudH0gZnJvbSAnLi4vY29udHJhY3QvY29sdW1uLXJlb3JkZXItZXZlbnQnO1xuaW1wb3J0IHtTb3J0RXZlbnR9IGZyb20gJy4uL2NvbnRyYWN0L3NvcnQtZXZlbnQnO1xuaW1wb3J0IHtBcnJheVV0aWx9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi91dGlsL2FycmF5LXV0aWwnO1xuaW1wb3J0IHtTdGF0ZVV0aWx9IGZyb20gJy4uL3V0aWwvc3RhdGUtdXRpbCc7XG5pbXBvcnQge1NlbGVjdFR5cGV9IGZyb20gJy4uL2VudW0vc2VsZWN0LXR5cGUuZW51bSc7XG5pbXBvcnQge0VkaXRUeXBlfSBmcm9tICcuLi9lbnVtL2VkaXQtdHlwZS5lbnVtJztcbmltcG9ydCB7RWRpdEV2ZW50fSBmcm9tICcuLi9lbnVtL2VkaXQtZXZlbnQuZW51bSc7XG5pbXBvcnQge0xpc3RGaWx0ZXJUeXBlfSBmcm9tICcuLi8uLi9maWx0ZXIvZW51bS9saXN0LWZpbHRlci10eXBlLmVudW0nO1xuaW1wb3J0IHtMaXN0RmlsdGVyfSBmcm9tICcuLi8uLi9maWx0ZXIvY29udGFyY3QvbGlzdC1maWx0ZXInO1xuaW1wb3J0IHtGaWx0ZXJUeXBlfSBmcm9tICcuLi8uLi9maWx0ZXIvZW51bS9maWx0ZXItdHlwZS5lbnVtJztcbmltcG9ydCB7TnVtZXJpY0ZpbHRlclZhbHVlfSBmcm9tICcuLi8uLi9maWx0ZXIvY29udGFyY3QvbnVtZXJpYy1maWx0ZXItdmFsdWUnO1xuaW1wb3J0IHtOdW1lcmljRmlsdGVyfSBmcm9tICcuLi8uLi9maWx0ZXIvY29udGFyY3QvbnVtZXJpYy1maWx0ZXInO1xuaW1wb3J0IHtTdHJpbmdGaWx0ZXJ9IGZyb20gJy4uLy4uL2ZpbHRlci9jb250YXJjdC9zdHJpbmctZmlsdGVyJztcbmltcG9ydCB7RGF0ZUZpbHRlclZhbHVlfSBmcm9tICcuLi8uLi9maWx0ZXIvY29udGFyY3QvZGF0ZS1maWx0ZXItdmFsdWUnO1xuaW1wb3J0IHtEYXRlRmlsdGVyfSBmcm9tICcuLi8uLi9maWx0ZXIvY29udGFyY3QvZGF0ZS1maWx0ZXInO1xuaW1wb3J0IHtJRGljdGlvbmFyeX0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL2NvbnRyYWN0L2ktZGljdGlvbmFyeSc7XG5pbXBvcnQge0lJZE5hbWV9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9jb250cmFjdC9pLWlkLW5hbWUnO1xuaW1wb3J0IHtEYXRlVXRpbH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9kYXRlLXV0aWwnO1xuaW1wb3J0IG9iamVjdEhhc2ggZnJvbSAnb2JqZWN0LWhhc2gnO1xuaW1wb3J0IHtUYWJsZUNvbHVtblN0b3JlfSBmcm9tICcuLi9jb250cmFjdC90YWJsZS1jb2x1bW4tc3RvcmUnO1xuaW1wb3J0IHtJQ2VsbFZhbHVlfSBmcm9tICcuLi9jb250cmFjdC9pLWNlbGwtdmFsdWUnO1xuaW1wb3J0IHtJQ2VsbEV2ZW50fSBmcm9tICcuLi9jb250cmFjdC9pLWNlbGwtZXZlbnQnO1xuaW1wb3J0IHtJQ2VsbEluc3RhbmNlLCBJQ2VsbEluc3RhbmNlVmFsdWV9IGZyb20gJy4uL2NvbnRyYWN0L2ktY2VsbC1pbnN0YW5jZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZVNlcnZpY2U8VD4ge1xuICBjb2x1bW5zOiBPYnNlcnZhYmxlPFRhYmxlQ29sdW1uW10+O1xuICBkaXNwbGF5RGF0YTogT2JzZXJ2YWJsZTxUW10+O1xuICBkaWN0OiBPYnNlcnZhYmxlPElEaWN0aW9uYXJ5PElJZE5hbWU8YW55PltdPj47XG4gIGZpbHRlck9wdGlvbnM6IE9ic2VydmFibGU8SURpY3Rpb25hcnk8SUlkTmFtZTxhbnk+W10+PjtcbiAgc3RhdGU6IE9ic2VydmFibGU8RmlsdGVyU3RhdGU+O1xuICBzZWxlY3RUeXBlOiBTZWxlY3RUeXBlID0gU2VsZWN0VHlwZS5tb3VzZTtcbiAgZWRpdFJvd1N0YXJ0OiBPYnNlcnZhYmxlPElDZWxsRXZlbnQ+O1xuICBlZGl0Um93U3RvcDogT2JzZXJ2YWJsZTxJQ2VsbENvb3JkaW5hdGVzPjtcbiAgZWRpdENlbGxTdGFydDogT2JzZXJ2YWJsZTxJQ2VsbEV2ZW50PjtcbiAgZWRpdENlbGxTdG9wOiBPYnNlcnZhYmxlPElDZWxsQ29vcmRpbmF0ZXM+O1xuICB2YWx1ZUNoYW5nZWQ6IE9ic2VydmFibGU8SUNlbGxDb29yZGluYXRlcz47XG4gIHZhbHVlU2V0OiBPYnNlcnZhYmxlPElDZWxsVmFsdWU+O1xuICBzdGF0ZUNoYW5nZWQ6IE9ic2VydmFibGU8RmlsdGVyU3RhdGU+O1xuICBmaWx0ZXJDbGVhcjogT2JzZXJ2YWJsZTxUYWJsZUNvbHVtbj47XG4gIHNlbGVjdGVkUm93czogT2JzZXJ2YWJsZTxUW10+O1xuICBhY3RpdmVSb3c6IE9ic2VydmFibGU8VD47XG4gIGhpZGRlbkNvbHVtbnM6IE9ic2VydmFibGU8c3RyaW5nW10+O1xuICBzY3JvbGxJbmRleDogT2JzZXJ2YWJsZTxudW1iZXI+O1xuXG4gIGVkaXRUeXBlOiBFZGl0VHlwZSA9IEVkaXRUeXBlLmNlbGw7XG4gIGVkaXRFdmVudDogRWRpdEV2ZW50ID0gRWRpdEV2ZW50LmRvdWJsZUNsaWNrO1xuICByb3dFZGl0YWJsZTogYm9vbGVhbiB8ICgocm93OiBUKSA9PiBib29sZWFuKTtcbiAgdHJhY2tSb3c6IChpbmRleDogbnVtYmVyLCByb3c6IFQpID0+IGFueSA9IChpbmRleDogbnVtYmVyLCByb3c6IFQpID0+IHtcbiAgICBpZiAocm93WydpZCddKSB7XG4gICAgICByZXR1cm4gcm93WydpZCddO1xuICAgIH1cbiAgICByZXR1cm4gaW5kZXg7XG4gIH07XG5cbiAgZ2V0IGRyYWdTb3VyY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RyYWdTb3VyY2U7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxDb2x1bW5zSGFzaDogc3RyaW5nO1xuICBwcml2YXRlIGluaXRpYWxDb2x1bW5zOiBUYWJsZUNvbHVtbltdID0gW107XG4gIHByaXZhdGUgZGlzcGxheUNvbHVtbnM6IFRhYmxlQ29sdW1uW10gPSBbXTtcbiAgcHJpdmF0ZSBfY29sdW1uczogQmVoYXZpb3JTdWJqZWN0PFRhYmxlQ29sdW1uW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUYWJsZUNvbHVtbltdPihbXSk7XG4gIHByaXZhdGUgX2hpZGRlbkNvbHVtbnMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZ1tdPihbXSk7XG4gIHByaXZhdGUgX2Rpc3BsYXlEYXRhOiBCZWhhdmlvclN1YmplY3Q8VFtdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VFtdPihbXSk7XG4gIHByaXZhdGUgX2RpY3Q6IEJlaGF2aW9yU3ViamVjdDxJRGljdGlvbmFyeTxJSWROYW1lPGFueT5bXT4+ID1cbiAgICBuZXcgQmVoYXZpb3JTdWJqZWN0PElEaWN0aW9uYXJ5PElJZE5hbWU8YW55PltdPj4oe30pO1xuICBwcml2YXRlIF9maWx0ZXJPcHRpb25zOiBCZWhhdmlvclN1YmplY3Q8SURpY3Rpb25hcnk8SUlkTmFtZTxhbnk+W10+PiA9XG4gICAgbmV3IEJlaGF2aW9yU3ViamVjdDxJRGljdGlvbmFyeTxJSWROYW1lPGFueT5bXT4+KHt9KTtcbiAgcHJpdmF0ZSBfc3RhdGU6IEJlaGF2aW9yU3ViamVjdDxGaWx0ZXJTdGF0ZT4gPVxuICAgIG5ldyBCZWhhdmlvclN1YmplY3Q8RmlsdGVyU3RhdGU+KG5ldyBGaWx0ZXJTdGF0ZSgpKTtcbiAgcHJpdmF0ZSBfY29va2llTmFtZTogc3RyaW5nO1xuICBwcml2YXRlIF9oaWRkZW5Db29raWVOYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgX2NvbHVtbnNDb29raWVOYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgX2VkaXRSb3dTdGFydCA9IG5ldyBTdWJqZWN0PElDZWxsRXZlbnQgfCBudWxsPigpO1xuICBwcml2YXRlIF9lZGl0Um93U3RvcCA9IG5ldyBTdWJqZWN0PElDZWxsQ29vcmRpbmF0ZXMgfCBudWxsPigpO1xuICBwcml2YXRlIF9lZGl0Q2VsbFN0YXJ0ID0gbmV3IFN1YmplY3Q8SUNlbGxFdmVudCB8IG51bGw+KCk7XG4gIHByaXZhdGUgX2VkaXRDZWxsU3RvcCA9IG5ldyBTdWJqZWN0PElDZWxsQ29vcmRpbmF0ZXMgfCBudWxsPigpO1xuICBwcml2YXRlIF92YWx1ZUNoYW5nZWQgPSBuZXcgU3ViamVjdDxJQ2VsbENvb3JkaW5hdGVzIHwgbnVsbD4oKTtcbiAgcHJpdmF0ZSBfdmFsdWVTZXQgPSBuZXcgU3ViamVjdDxJQ2VsbFZhbHVlPigpO1xuICBwcml2YXRlIF9zdGF0ZUNoYW5nZWQgPSBuZXcgU3ViamVjdDxGaWx0ZXJTdGF0ZT4oKTtcbiAgcHJpdmF0ZSBfZmlsdGVyQ2xlYXIgPSBuZXcgU3ViamVjdDxUYWJsZUNvbHVtbj4oKTtcbiAgcHJpdmF0ZSBfZHJhZ1NvdXJjZTogVGFibGVDb2x1bW47XG4gIHByaXZhdGUgX3NlbGVjdGVkUm93cyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VFtdPihbXSk7XG4gIHByaXZhdGUgX2FjdGl2ZVJvdyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VD4obnVsbCk7XG4gIHByaXZhdGUgX3Njcm9sbEluZGV4ID0gbmV3IFN1YmplY3Q8bnVtYmVyPigpO1xuXG4gIHByaXZhdGUgX2N1cnJlbnRFZGl0Q2VsbDogSUNlbGxDb29yZGluYXRlcztcblxuICBnZXQgY3VycmVudEVkaXRDZWxsKCk6IElDZWxsQ29vcmRpbmF0ZXMge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50RWRpdENlbGw7XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLl9jb2x1bW5zLmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuZGlzcGxheURhdGEgPSB0aGlzLl9kaXNwbGF5RGF0YS5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLmRpY3QgPSB0aGlzLl9kaWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuZmlsdGVyT3B0aW9ucyA9IHRoaXMuX2ZpbHRlck9wdGlvbnMuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5zdGF0ZSA9IHRoaXMuX3N0YXRlLmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuZWRpdFJvd1N0YXJ0ID0gdGhpcy5fZWRpdFJvd1N0YXJ0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuZWRpdFJvd1N0b3AgPSB0aGlzLl9lZGl0Um93U3RvcC5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLmVkaXRDZWxsU3RhcnQgPSB0aGlzLl9lZGl0Q2VsbFN0YXJ0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuZWRpdENlbGxTdG9wID0gdGhpcy5fZWRpdENlbGxTdG9wLmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMudmFsdWVDaGFuZ2VkID0gdGhpcy5fdmFsdWVDaGFuZ2VkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMudmFsdWVTZXQgPSB0aGlzLl92YWx1ZVNldC5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLnN0YXRlQ2hhbmdlZCA9IHRoaXMuX3N0YXRlQ2hhbmdlZC5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLmZpbHRlckNsZWFyID0gdGhpcy5fZmlsdGVyQ2xlYXIuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5zZWxlY3RlZFJvd3MgPSB0aGlzLl9zZWxlY3RlZFJvd3MuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5hY3RpdmVSb3cgPSB0aGlzLl9hY3RpdmVSb3cuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5oaWRkZW5Db2x1bW5zID0gdGhpcy5faGlkZGVuQ29sdW1ucy5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLnNjcm9sbEluZGV4ID0gdGhpcy5fc2Nyb2xsSW5kZXguYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBzZXREYXRhKGRhdGE6IFRbXSk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3BsYXlEYXRhLm5leHQoZGF0YSA/IFsuLi5kYXRhXSA6IFtdKTtcbiAgfVxuXG4gIHNldERpY3QoZGljdDogSURpY3Rpb25hcnk8SUlkTmFtZTxhbnk+W10+KTogdm9pZCB7XG4gICAgdGhpcy5fZGljdC5uZXh0KGRpY3QpO1xuICB9XG5cbiAgc2V0RmlsdGVyT3B0aW9ucyhmaWx0ZXJPcHRpb25zOiBJRGljdGlvbmFyeTxJSWROYW1lPGFueT5bXT4pOiB2b2lkIHtcbiAgICB0aGlzLl9maWx0ZXJPcHRpb25zLm5leHQoZmlsdGVyT3B0aW9ucyk7XG4gIH1cblxuICBzZXRDb2x1bW5zKGNvbHVtbnM6IFRhYmxlQ29sdW1uW10pOiB2b2lkIHtcbiAgICB0aGlzLmluaXRpYWxDb2x1bW5zID0gY29sdW1ucyA/IGNvbHVtbnMubWFwKChfKSA9PiBuZXcgVGFibGVDb2x1bW4oXykpIDogW107XG4gICAgY29uc3QgZXhjbHVkZUtleXMgPSBbXG4gICAgICAnZWRpdGFibGUnLFxuICAgICAgJ2NlbGxDb21wb25lbnQnLFxuICAgICAgJ2hlYWRDZWxsQ29tcG9uZW50JyxcbiAgICAgICdoZWFkRHJvcGRvd25Db25maWcnXG4gICAgXTtcbiAgICB0aGlzLmluaXRpYWxDb2x1bW5zSGFzaCA9IG9iamVjdEhhc2godGhpcy5pbml0aWFsQ29sdW1ucywge1xuICAgICAgYWxnb3JpdGhtOiAnc2hhMScsXG4gICAgICBpZ25vcmVVbmtub3duOiB0cnVlLFxuICAgICAgZXhjbHVkZUtleXM6IChrZXkpID0+IHtcbiAgICAgICAgcmV0dXJuIGV4Y2x1ZGVLZXlzLmluZGV4T2Yoa2V5KSA+PSAwO1xuICAgICAgfSxcbiAgICB9KTtcbiAgICBjb25zdCByZXN0b3JlZCA9IHRoaXMucmVzdG9yZUNvbHVtbnMoKTtcblxuICAgIGlmIChyZXN0b3JlZCkge1xuICAgICAgdGhpcy5zZXREaXNwbGF5Q29sdW1ucyhyZXN0b3JlZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0RGlzcGxheUNvbHVtbnModGhpcy5pbml0aWFsQ29sdW1ucyk7XG4gICAgfVxuICB9XG5cbiAgcmVzdG9yZURlZmF1bHRDb2x1bW5zKCkge1xuICAgIHRoaXMuc2V0RGlzcGxheUNvbHVtbnModGhpcy5pbml0aWFsQ29sdW1ucyk7XG4gICAgdGhpcy5jbGVhckNvbHVtbnNTdGF0ZSgpO1xuICB9XG5cbiAgdXBkYXRlQ29sdW1ucyhjb2x1bW5zOiBUYWJsZUNvbHVtbltdKTogdm9pZCB7XG4gICAgdGhpcy5zZXREaXNwbGF5Q29sdW1ucyhjb2x1bW5zKTtcbiAgICB0aGlzLnNhdmVDb2x1bW5zU3RhdGUoKTtcbiAgfVxuXG4gIHNhdmVDb2x1bW5zU3RhdGUoKSB7XG4gICAgaWYgKHRoaXMuX2Nvb2tpZU5hbWUpIHtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFxuICAgICAgICB0aGlzLl9jb2x1bW5zQ29va2llTmFtZSxcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIGhhc2g6IHRoaXMuaW5pdGlhbENvbHVtbnNIYXNoLFxuICAgICAgICAgIGNvbHVtbnM6IHRoaXMuZGlzcGxheUNvbHVtbnMubWFwKChfKSA9PiBuZXcgVGFibGVDb2x1bW5TdG9yZShfKSksXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyQ29sdW1uc1N0YXRlKCkge1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuX2NvbHVtbnNDb29raWVOYW1lKTtcbiAgfVxuXG4gIHNldERpc3BsYXlDb2x1bW5zKGNvbHVtbnM6IFRhYmxlQ29sdW1uW10pOiB2b2lkIHtcbiAgICB0aGlzLmRpc3BsYXlDb2x1bW5zID0gY29sdW1ucyA/IGNvbHVtbnMubWFwKChfKSA9PiBuZXcgVGFibGVDb2x1bW4oXykpIDogW107XG4gICAgdGhpcy5fY29sdW1ucy5uZXh0KHRoaXMuZGlzcGxheUNvbHVtbnMpO1xuICB9XG5cbiAgcmVzdG9yZUNvbHVtbnMoKSB7XG4gICAgY29uc3Qgc2F2ZWRDb2x1bW5zID0gSlNPTi5wYXJzZShcbiAgICAgIGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuX2NvbHVtbnNDb29raWVOYW1lKVxuICAgICk7XG4gICAgaWYgKHNhdmVkQ29sdW1ucyAmJiBzYXZlZENvbHVtbnMuaGFzaCA9PT0gdGhpcy5pbml0aWFsQ29sdW1uc0hhc2gpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc3RvcmVDb2x1bW5zU3RhdGUoc2F2ZWRDb2x1bW5zLmNvbHVtbnMpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJlc3RvcmVDb2x1bW5zU3RhdGUoY29sdW1uczogVGFibGVDb2x1bW5TdG9yZVtdKSB7XG4gICAgcmV0dXJuIGNvbHVtbnMubWFwKChjb2x1bW46IFRhYmxlQ29sdW1uU3RvcmUpID0+IHtcbiAgICAgIGNvbnN0IGZvdW5kID0gQXJyYXlVdGlsLmZpbmRSZWN1cnNpdmUoXG4gICAgICAgIHRoaXMuaW5pdGlhbENvbHVtbnMsXG4gICAgICAgIChpdGVtKSA9PiBpdGVtLm5hbWUgPT09IGNvbHVtbi5uYW1lLFxuICAgICAgICAnY29sdW1ucydcbiAgICAgICk7XG4gICAgICBjb25zdCByZXN1bHRDb2x1bW4gPSBuZXcgVGFibGVDb2x1bW4oZm91bmQpO1xuICAgICAgcmVzdWx0Q29sdW1uLndpZHRoID0gY29sdW1uLndpZHRoO1xuICAgICAgcmVzdWx0Q29sdW1uLmZsZXggPSBjb2x1bW4uZmxleDtcbiAgICAgIHJlc3VsdENvbHVtbi5sb2NrZWQgPSBjb2x1bW4ubG9ja2VkO1xuICAgICAgaWYgKGNvbHVtbi5jb2x1bW5zPy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlc3VsdENvbHVtbi5jb2x1bW5zID0gdGhpcy5yZXN0b3JlQ29sdW1uc1N0YXRlKGNvbHVtbi5jb2x1bW5zKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHRDb2x1bW47XG4gICAgfSk7XG4gIH1cblxuICBzZXRTdGF0ZShzdGF0ZTogRmlsdGVyU3RhdGUpOiB2b2lkIHtcbiAgICBzdGF0ZS5zYXZlKHRoaXMuX2Nvb2tpZU5hbWUpO1xuICAgIHRoaXMuX3N0YXRlLm5leHQoc3RhdGUpO1xuICB9XG5cbiAgc2V0Q29va2llTmFtZShuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9jb29raWVOYW1lID0gbmFtZTtcbiAgICB0aGlzLl9oaWRkZW5Db29raWVOYW1lID0gYCR7dGhpcy5fY29va2llTmFtZX1faGlkZGVuX2NvbHVtbnNgO1xuICAgIHRoaXMuX2NvbHVtbnNDb29raWVOYW1lID0gYCR7dGhpcy5fY29va2llTmFtZX1fY29sdW1uc2A7XG4gIH1cblxuICByZXN0b3JlU3RhdGUoKTogdm9pZCB7XG4gICAgbGV0IHN0YXRlOiBGaWx0ZXJTdGF0ZTtcbiAgICBpZiAodGhpcy5fY29va2llTmFtZT8ubGVuZ3RoID4gMCAmJiBGaWx0ZXJTdGF0ZS5yZXN0b3JlKHRoaXMuX2Nvb2tpZU5hbWUpKSB7XG4gICAgICBsZXQgbmV3U3RhdGUgPSBPYmplY3QuYXNzaWduKFxuICAgICAgICB0aGlzLl9zdGF0ZS52YWx1ZSxcbiAgICAgICAgRmlsdGVyU3RhdGUucmVzdG9yZSh0aGlzLl9jb29raWVOYW1lKVxuICAgICAgKTtcbiAgICAgIG5ld1N0YXRlID0gRGF0ZVV0aWwuY29udmVydERhdGVTdHJpbmdzVG9EYXRlcyhuZXdTdGF0ZSk7XG4gICAgICBzdGF0ZSA9IG5ldyBGaWx0ZXJTdGF0ZShuZXdTdGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlID0gbmV3IEZpbHRlclN0YXRlKCk7XG4gICAgfVxuICAgIHRoaXMuc2V0U3RhdGUoc3RhdGUpO1xuICB9XG5cbiAgc2F2ZUhpZGRlbkNvbHVtbnMoaGlkZGVuQ29sdW1uczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLl9oaWRkZW5Db29raWVOYW1lLCBKU09OLnN0cmluZ2lmeShoaWRkZW5Db2x1bW5zKSk7XG4gIH1cblxuICByZXN0b3JlSGlkZGVuQ29sdW1ucygpOiB2b2lkIHtcbiAgICBjb25zdCBoaWRkZW5Db2x1bW5zID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5faGlkZGVuQ29va2llTmFtZSkgfHwgJ1tdJztcbiAgICB0aGlzLl9oaWRkZW5Db2x1bW5zLm5leHQoSlNPTi5wYXJzZShoaWRkZW5Db2x1bW5zKSk7XG4gIH1cblxuICBzb3J0QXNjKHNvcnRFdmVudDogU29ydEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHNvcnRFdmVudC5jb2x1bW4uc29ydGFibGUpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoU3RhdGVVdGlsLnNvcnRBc2Moc29ydEV2ZW50LCB0aGlzLl9zdGF0ZS52YWx1ZSkpO1xuICAgIH1cbiAgfVxuXG4gIHNvcnREZXNjKHNvcnRFdmVudDogU29ydEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHNvcnRFdmVudC5jb2x1bW4uc29ydGFibGUpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoU3RhdGVVdGlsLnNvcnREZXNjKHNvcnRFdmVudCwgdGhpcy5fc3RhdGUudmFsdWUpKTtcbiAgICB9XG4gIH1cblxuICBjbGVhclNvcnQoY29sdW1uOiBUYWJsZUNvbHVtbik6IHZvaWQge1xuICAgIHRoaXMuc2V0U3RhdGUoU3RhdGVVdGlsLmNsZWFyU29ydChjb2x1bW4sIHRoaXMuX3N0YXRlLnZhbHVlKSk7XG4gIH1cblxuICBjbGVhckFsbFNvcnQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRTdGF0ZShTdGF0ZVV0aWwuY2xlYXJBbGxTb3J0KHRoaXMuX3N0YXRlLnZhbHVlKSk7XG4gIH1cblxuICBjbGVhckZpbHRlcihjb2x1bW46IFRhYmxlQ29sdW1uKSB7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLl9zdGF0ZS52YWx1ZTtcbiAgICBpZiAoY29sdW1uICE9PSBudWxsICYmIGNvbHVtbiAhPT0gdW5kZWZpbmVkICYmIGNvbHVtbi5maWx0ZXJhYmxlKSB7XG4gICAgICBzd2l0Y2ggKGNvbHVtbi5maWx0ZXJUeXBlKSB7XG4gICAgICAgIGNhc2UgRmlsdGVyVHlwZS5kYXRlOlxuICAgICAgICAgIHN0YXRlLmFkZERhdGVGaWx0ZXIoXG4gICAgICAgICAgICBuZXcgRGF0ZUZpbHRlcih7XG4gICAgICAgICAgICAgIG5hbWU6IGNvbHVtbi5uYW1lLFxuICAgICAgICAgICAgICBmaWVsZDogY29sdW1uLmZpbHRlckZpZWxkLFxuICAgICAgICAgICAgICB2YWx1ZTogbmV3IERhdGVGaWx0ZXJWYWx1ZSgpLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEZpbHRlclR5cGUuc3RyaW5nOlxuICAgICAgICAgIHN0YXRlLmFkZFN0cmluZ0ZpbHRlcihcbiAgICAgICAgICAgIG5ldyBTdHJpbmdGaWx0ZXIoe1xuICAgICAgICAgICAgICBuYW1lOiBjb2x1bW4ubmFtZSxcbiAgICAgICAgICAgICAgZmllbGQ6IGNvbHVtbi5maWx0ZXJGaWVsZCxcbiAgICAgICAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEZpbHRlclR5cGUubnVtYmVyOlxuICAgICAgICAgIHN0YXRlLmFkZE51bWVyaWNGaWx0ZXIoXG4gICAgICAgICAgICBuZXcgTnVtZXJpY0ZpbHRlcih7XG4gICAgICAgICAgICAgIG5hbWU6IGNvbHVtbi5uYW1lLFxuICAgICAgICAgICAgICBmaWVsZDogY29sdW1uLmZpbHRlckZpZWxkLFxuICAgICAgICAgICAgICB2YWx1ZTogbmV3IE51bWVyaWNGaWx0ZXJWYWx1ZSgpLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEZpbHRlclR5cGUubGlzdDpcbiAgICAgICAgICBzdGF0ZS5hZGRMaXN0RmlsdGVyKFxuICAgICAgICAgICAgbmV3IExpc3RGaWx0ZXIoe1xuICAgICAgICAgICAgICBuYW1lOiBjb2x1bW4ubmFtZSxcbiAgICAgICAgICAgICAgZmllbGQ6IGNvbHVtbi5maWx0ZXJGaWVsZCxcbiAgICAgICAgICAgICAgdmFsdWU6IFtdLFxuICAgICAgICAgICAgICB0eXBlOiBMaXN0RmlsdGVyVHlwZS5Ob25lLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRTdGF0ZShuZXcgRmlsdGVyU3RhdGUoc3RhdGUpKTtcbiAgICB9XG4gIH1cblxuICBjbGVhckFsbEZpbHRlcnMoKSB7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLl9zdGF0ZS52YWx1ZTtcbiAgICBzdGF0ZS5zdHJpbmdGaWx0ZXJzID0gW107XG4gICAgc3RhdGUubGlzdEZpbHRlcnMgPSBbXTtcbiAgICBzdGF0ZS5udW1lcmljRmlsdGVycyA9IFtdO1xuICAgIHN0YXRlLmRhdGVGaWx0ZXJzID0gW107XG4gICAgdGhpcy5zZXRTdGF0ZShuZXcgRmlsdGVyU3RhdGUoc3RhdGUpKTtcbiAgfVxuXG4gIHBpbkNvbHVtbihjb2x1bW46IFRhYmxlQ29sdW1uKTogdm9pZCB7XG4gICAgdGhpcy5kaXNwbGF5Q29sdW1ucy5mb3JFYWNoKChjb2w6IFRhYmxlQ29sdW1uKSA9PiB7XG4gICAgICBpZiAoY29sLm5hbWUgPT09IGNvbHVtbi5uYW1lKSB7XG4gICAgICAgIGNvbC5sb2NrZWQgPSAhY29sLmxvY2tlZDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnVwZGF0ZUNvbHVtbnModGhpcy5kaXNwbGF5Q29sdW1ucyk7XG4gIH1cblxuICBkcmFnU3RhcnQoY29sdW1uOiBUYWJsZUNvbHVtbik6IHZvaWQge1xuICAgIHRoaXMuX2RyYWdTb3VyY2UgPSBjb2x1bW47XG4gIH1cblxuICBsb2NrUHJldmlvdXNDb2x1bW5zKGNvbHVtbjogVGFibGVDb2x1bW4sIGVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG4gICAgY29uc3QgZmxhdCA9IEFycmF5VXRpbC5mbGF0dGVuKHRoaXMuZGlzcGxheUNvbHVtbnMsICdjb2x1bW5zJywgdHJ1ZSkuc29ydChcbiAgICAgIChhLCBiKSA9PiBOdW1iZXIoYi5sb2NrZWQpIC0gTnVtYmVyKGEubG9ja2VkKVxuICAgICk7XG4gICAgY29uc3QgaW5kZXggPSBmbGF0LmluZGV4T2YoY29sdW1uKTtcbiAgICBjb25zdCBwcmV2aW91cyA9IGZsYXQuc2xpY2UoMCwgaW5kZXgpLmZpbHRlcigoXykgPT4gXy5mbGV4ID4gMCk7XG4gICAgaWYgKHByZXZpb3VzPy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCB0YWJsZUVsZW1lbnQgPSB0aGlzLmdldFRhYmxlRWxlbWVudChlbGVtZW50KTtcbiAgICAgIHByZXZpb3VzLmZvckVhY2goKGl0ZW06IFRhYmxlQ29sdW1uKSA9PiB7XG4gICAgICAgIGNvbnN0IGl0ZW1Db2wgPSB0YWJsZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICBgdGV0YS1oZWFkLWNlbGxbZGF0YS1jb2x1bW49JHtpdGVtLm5hbWV9XWBcbiAgICAgICAgKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgaWYgKGl0ZW1Db2wpIHtcbiAgICAgICAgICBpdGVtLmZsZXggPSAwO1xuICAgICAgICAgIGl0ZW0ud2lkdGggPSBpdGVtQ29sLmNsaWVudFdpZHRoO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXNpemVDb2x1bW4oZXZlbnQ6IENvbHVtblJlc2l6ZUV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmNvbHVtbiAhPT0gbnVsbCAmJiBldmVudC5jb2x1bW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgZXZlbnQuY29sdW1uLndpZHRoID0gZXZlbnQubmV3V2lkdGggPCA1MCA/IDUwIDogZXZlbnQubmV3V2lkdGg7XG4gICAgICBldmVudC5jb2x1bW4uZmxleCA9IDA7XG4gICAgfVxuICAgIHRoaXMuX2NvbHVtbnMubmV4dCh0aGlzLmRpc3BsYXlDb2x1bW5zKTtcbiAgICB0aGlzLnNhdmVDb2x1bW5zU3RhdGUoKTtcbiAgfVxuXG4gIGF1dG9zaXplQ29sdW1uKGNvbHVtbjogVGFibGVDb2x1bW4sIHRhcmdldDogSFRNTEVsZW1lbnQpIHtcbiAgICBjb25zdCB0YWJsZUVsZW1lbnQgPSB0aGlzLmdldFRhYmxlRWxlbWVudCh0YXJnZXQpO1xuICAgIHRoaXMuc2V0Q29sdW1uQXV0b1dpZHRoKGNvbHVtbiwgdGFibGVFbGVtZW50IGFzIEhUTUxFbGVtZW50KTtcbiAgICB0aGlzLl9jb2x1bW5zLm5leHQodGhpcy5kaXNwbGF5Q29sdW1ucyk7XG4gICAgdGhpcy5zYXZlQ29sdW1uc1N0YXRlKCk7XG4gIH1cblxuICBhdXRvc2l6ZUFsbENvbHVtbnModGFyZ2V0OiBIVE1MRWxlbWVudCkge1xuICAgIGNvbnN0IHRhYmxlRWxlbWVudCA9IHRoaXMuZ2V0VGFibGVFbGVtZW50KHRhcmdldCk7XG4gICAgY29uc3QgZmxhdCA9IEFycmF5VXRpbC5mbGF0dGVuKHRoaXMuZGlzcGxheUNvbHVtbnMsICdjb2x1bW5zJywgdHJ1ZSk7XG4gICAgZmxhdC5mb3JFYWNoKChjb2wpID0+XG4gICAgICB0aGlzLnNldENvbHVtbkF1dG9XaWR0aChjb2wsIHRhYmxlRWxlbWVudCBhcyBIVE1MRWxlbWVudClcbiAgICApO1xuICAgIHRoaXMuX2NvbHVtbnMubmV4dCh0aGlzLmRpc3BsYXlDb2x1bW5zKTtcbiAgICB0aGlzLnNhdmVDb2x1bW5zU3RhdGUoKTtcbiAgfVxuXG4gIHJlb3JkZXJDb2x1bW4oY29sdW1uOiBUYWJsZUNvbHVtbiwgaW5zZXJ0QmVmb3JlOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgZXZlbnQgPSBuZXcgQ29sdW1uUmVvcmRlckV2ZW50KHRoaXMuX2RyYWdTb3VyY2UsIGNvbHVtbik7XG4gICAgaWYgKGV2ZW50LnNvdXJjZSAhPT0gZXZlbnQudGFyZ2V0KSB7XG4gICAgICBjb25zdCBzb3VyY2VQYXJlbnQgPSB0aGlzLmZpbmRQYXJlbnQoZXZlbnQuc291cmNlLCB0aGlzLmRpc3BsYXlDb2x1bW5zKTtcbiAgICAgIGNvbnN0IHRhcmdldFBhcmVudCA9IHRoaXMuZmluZFBhcmVudChldmVudC50YXJnZXQsIHRoaXMuZGlzcGxheUNvbHVtbnMpO1xuXG4gICAgICBpZiAoc291cmNlUGFyZW50ICYmIHRhcmdldFBhcmVudCkge1xuICAgICAgICBjb25zdCBzb3VyY2VJbmRleCA9IHNvdXJjZVBhcmVudC5pbmRleE9mKGV2ZW50LnNvdXJjZSk7XG4gICAgICAgIHNvdXJjZVBhcmVudC5zcGxpY2Uoc291cmNlSW5kZXgsIDEpO1xuICAgICAgICBsZXQgdGFyZ2V0SW5kZXggPSB0YXJnZXRQYXJlbnQuaW5kZXhPZihldmVudC50YXJnZXQpO1xuICAgICAgICBpZiAoIWluc2VydEJlZm9yZSkge1xuICAgICAgICAgIHRhcmdldEluZGV4ID0gdGFyZ2V0SW5kZXggKyAxO1xuICAgICAgICB9XG4gICAgICAgIHRhcmdldFBhcmVudC5zcGxpY2UodGFyZ2V0SW5kZXgsIDAsIGV2ZW50LnNvdXJjZSk7XG4gICAgICAgIGV2ZW50LnNvdXJjZS5sb2NrZWQgPSBldmVudC50YXJnZXQubG9ja2VkO1xuXG4gICAgICAgIHRoaXMudXBkYXRlQ29sdW1ucyh0aGlzLmRpc3BsYXlDb2x1bW5zKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRDb2x1bW5QYXJlbnQoY29sdW1uOiBUYWJsZUNvbHVtbikge1xuICAgIHJldHVybiB0aGlzLmZpbmRQYXJlbnRDb2x1bW4oY29sdW1uLCB0aGlzLmRpc3BsYXlDb2x1bW5zKTtcbiAgfVxuXG4gIHN0YXJ0RWRpdFJvdyhjZWxsRXZlbnQ6IElDZWxsRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY3VycmVudEVkaXRDZWxsPy5yb3cgIT09IGNlbGxFdmVudD8ucm93KSB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudEVkaXRDZWxsICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5fZWRpdFJvd1N0b3AubmV4dCh0aGlzLl9jdXJyZW50RWRpdENlbGwpO1xuICAgICAgfVxuICAgICAgaWYgKGNlbGxFdmVudCA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLl9lZGl0Um93U3RhcnQubmV4dChjZWxsRXZlbnQpO1xuICAgICAgICB0aGlzLl9jdXJyZW50RWRpdENlbGwgPSBjZWxsRXZlbnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5ib29sT3JGdW5jQ2FsbGJhY2s8VD4odGhpcy5yb3dFZGl0YWJsZSkoXG4gICAgICAgICAgICB0aGlzLmdldFJvd0J5SW5kZXgoY2VsbEV2ZW50Py5yb3cpXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLl9lZGl0Um93U3RhcnQubmV4dChjZWxsRXZlbnQpO1xuICAgICAgICAgIHRoaXMuX2N1cnJlbnRFZGl0Q2VsbCA9IGNlbGxFdmVudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXJ0RWRpdENlbGwoY2VsbEV2ZW50OiBJQ2VsbEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5fY3VycmVudEVkaXRDZWxsPy5jb2x1bW4gIT09IGNlbGxFdmVudD8uY29sdW1uIHx8XG4gICAgICB0aGlzLl9jdXJyZW50RWRpdENlbGw/LnJvdyAhPT0gY2VsbEV2ZW50Py5yb3dcbiAgICApIHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50RWRpdENlbGwgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLl9lZGl0Q2VsbFN0b3AubmV4dCh0aGlzLl9jdXJyZW50RWRpdENlbGwpO1xuICAgICAgfVxuICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5nZXRDb2x1bW5CeU5hbWUoY2VsbEV2ZW50Py5jb2x1bW4pO1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmJvb2xPckZ1bmNDYWxsYmFjazxJQ2VsbEluc3RhbmNlPFQ+Pihjb2x1bW4/LmVkaXRhYmxlKSh7XG4gICAgICAgICAgcm93OiB0aGlzLmdldFJvd0J5SW5kZXgoY2VsbEV2ZW50Py5yb3cpLFxuICAgICAgICAgIGNvbHVtbjogY29sdW1uXG4gICAgICAgIH0pXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5fZWRpdENlbGxTdGFydC5uZXh0KGNlbGxFdmVudCk7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRFZGl0Q2VsbCA9IGNlbGxFdmVudDtcbiAgICAgICAgY29uc3Qga2V5ID0gKGNlbGxFdmVudD8uZXZlbnQgYXMgS2V5Ym9hcmRFdmVudCk/LmtleTtcbiAgICAgICAgaWYgKGtleSAmJiAoa2V5Lmxlbmd0aCA9PT0gMSB8fCAoa2V5ID09PSAnRGVsZXRlJyAmJiAhY29sdW1uLnJlcXVpcmVkKSkpIHtcbiAgICAgICAgICB0aGlzLmNsZWFyVmFsdWUoY2VsbEV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNldEFjdGl2ZVJvdyhyb3c6IFQpOiB2b2lkIHtcbiAgICB0aGlzLl9hY3RpdmVSb3cubmV4dChyb3cpO1xuICB9XG5cbiAgc2VsZWN0Um93cyhyb3dzOiBUW10pOiB2b2lkIHtcbiAgICB0aGlzLl9zZWxlY3RlZFJvd3MubmV4dChyb3dzKTtcbiAgfVxuXG4gIHNlbGVjdE9yRGVzZWxlY3RSb3cocm93OiBUKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3NlbGVjdGVkUm93cy52YWx1ZS5pbmRleE9mKHJvdykgPj0gMCkge1xuICAgICAgdGhpcy5fc2VsZWN0ZWRSb3dzLm5leHQoXG4gICAgICAgIHRoaXMuX3NlbGVjdGVkUm93cy52YWx1ZS5maWx0ZXIoKF8pID0+IF8gIT09IHJvdylcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3NlbGVjdGVkUm93cy5uZXh0KFsuLi50aGlzLl9zZWxlY3RlZFJvd3MudmFsdWUsIHJvd10pO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdFJhbmdlKHJvdzogVCk6IHZvaWQge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fZGlzcGxheURhdGEudmFsdWUuaW5kZXhPZihyb3cpO1xuICAgIGxldCBtaW5JbmRleCA9IHRoaXMuX3NlbGVjdGVkUm93cy52YWx1ZS5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHtcbiAgICAgIGNvbnN0IG5ld0luZGV4ID0gdGhpcy5fZGlzcGxheURhdGEudmFsdWUuaW5kZXhPZihjdXJyKTtcbiAgICAgIGlmIChuZXdJbmRleCA8IHByZXYpIHtcbiAgICAgICAgcmV0dXJuIG5ld0luZGV4O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHByZXY7XG4gICAgfSwgdGhpcy5fZGlzcGxheURhdGEudmFsdWUubGVuZ3RoKTtcbiAgICBsZXQgbWF4SW5kZXggPSB0aGlzLl9zZWxlY3RlZFJvd3MudmFsdWUucmVkdWNlKChwcmV2LCBjdXJyKSA9PiB7XG4gICAgICBjb25zdCBuZXdJbmRleCA9IHRoaXMuX2Rpc3BsYXlEYXRhLnZhbHVlLmluZGV4T2YoY3Vycik7XG4gICAgICBpZiAobmV3SW5kZXggPiBwcmV2KSB7XG4gICAgICAgIHJldHVybiBuZXdJbmRleDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwcmV2O1xuICAgIH0sIDApO1xuICAgIGlmIChpbmRleCA+IG1heEluZGV4KSB7XG4gICAgICBtYXhJbmRleCA9IGluZGV4O1xuICAgIH1cbiAgICBpZiAoaW5kZXggPCBtaW5JbmRleCkge1xuICAgICAgbWluSW5kZXggPSBpbmRleDtcbiAgICB9XG4gICAgaWYgKG1pbkluZGV4IDwgaW5kZXggJiYgaW5kZXggPCBtYXhJbmRleCkge1xuICAgICAgbWF4SW5kZXggPSBpbmRleDtcbiAgICB9XG4gICAgdGhpcy5fc2VsZWN0ZWRSb3dzLm5leHQoWy4uLnRoaXMuX2Rpc3BsYXlEYXRhLnZhbHVlLnNsaWNlKG1pbkluZGV4LCBtYXhJbmRleCArIDEpXSk7XG4gIH1cblxuICBzZWxlY3RSb3cocm93OiBUKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0VHlwZSA9PT0gU2VsZWN0VHlwZS5ub25lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX3NlbGVjdGVkUm93cy5uZXh0KFsuLi50aGlzLl9zZWxlY3RlZFJvd3MudmFsdWUsIHJvd10pO1xuICB9XG5cbiAgZGVzZWxlY3RSb3cocm93OiBUKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0VHlwZSA9PT0gU2VsZWN0VHlwZS5ub25lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX3NlbGVjdGVkUm93cy5uZXh0KFxuICAgICAgdGhpcy5fc2VsZWN0ZWRSb3dzLnZhbHVlLmZpbHRlcigoXykgPT4gXyAhPT0gcm93KVxuICAgICk7XG4gIH1cblxuICBzZWxlY3RBbGwoKSB7XG4gICAgdGhpcy5fc2VsZWN0ZWRSb3dzLm5leHQodGhpcy5fZGlzcGxheURhdGEudmFsdWUpO1xuICB9XG5cbiAgZGVzZWxlY3RBbGwoKSB7XG4gICAgdGhpcy5fc2VsZWN0ZWRSb3dzLm5leHQoW10pO1xuICB9XG5cbiAgYWxsUm93c1NlbGVjdGVkKCk6IGJvb2xlYW4gfCBudWxsIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLl9kaXNwbGF5RGF0YS52YWx1ZT8ubGVuZ3RoICYmXG4gICAgICB0aGlzLl9zZWxlY3RlZFJvd3MudmFsdWU/Lmxlbmd0aCAmJlxuICAgICAgdGhpcy5fZGlzcGxheURhdGEudmFsdWUuZXZlcnkoXG4gICAgICAgIChfKSA9PiB0aGlzLl9zZWxlY3RlZFJvd3MudmFsdWUuaW5kZXhPZihfKSA+PSAwXG4gICAgICApXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy5fc2VsZWN0ZWRSb3dzLnZhbHVlID09IG51bGwgfHxcbiAgICAgIHRoaXMuX3NlbGVjdGVkUm93cy52YWx1ZS5sZW5ndGggPT09IDBcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzZXRIaWRkZW5Db2x1bW5zKHZhbHVlOiBzdHJpbmdbXSkge1xuICAgIHRoaXMuc2F2ZUhpZGRlbkNvbHVtbnModmFsdWUpO1xuICAgIHRoaXMuX2hpZGRlbkNvbHVtbnMubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBjb2x1bW5Jc0hpZGRlbihjb2x1bW46IFRhYmxlQ29sdW1uKSB7XG4gICAgcmV0dXJuIHRoaXMuX2hpZGRlbkNvbHVtbnMudmFsdWUuaW5kZXhPZihjb2x1bW4ubmFtZSkgPj0gMDtcbiAgfVxuXG4gIGNoYW5nZVZhbHVlKGNvb3JkaW5hdGVzOiBJQ2VsbENvb3JkaW5hdGVzKTogdm9pZCB7XG4gICAgdGhpcy5fdmFsdWVDaGFuZ2VkLm5leHQoY29vcmRpbmF0ZXMpO1xuICB9XG5cbiAgc2V0VmFsdWUoY2VsbFZhbHVlOiBJQ2VsbFZhbHVlKTogdm9pZDtcbiAgc2V0VmFsdWUoY2VsbFZhbHVlOiBJQ2VsbEluc3RhbmNlVmFsdWU8VD4pOiB2b2lkO1xuICBzZXRWYWx1ZShjZWxsVmFsdWU6IElDZWxsVmFsdWUgfCBJQ2VsbEluc3RhbmNlVmFsdWU8VD4pOiB2b2lkIHtcbiAgICBsZXQgdmFsdWU6IElDZWxsVmFsdWU7XG4gICAgaWYgKHR5cGVvZiBjZWxsVmFsdWUucm93ID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgY2VsbFZhbHVlLmNvbHVtbiA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHZhbHVlID0ge1xuICAgICAgICByb3c6IHRoaXMuZ2V0Um93SW5kZXgoY2VsbFZhbHVlLnJvdyksXG4gICAgICAgIGNvbHVtbjogY2VsbFZhbHVlLmNvbHVtbi5uYW1lLFxuICAgICAgICB2YWx1ZTogY2VsbFZhbHVlLnZhbHVlXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IGNlbGxWYWx1ZSBhcyBJQ2VsbFZhbHVlO1xuICAgIH1cbiAgICB0aGlzLl92YWx1ZVNldC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIGdldFJvd0J5SW5kZXgocm93SW5kZXg6IG51bWJlcikge1xuICAgIHJldHVybiB0aGlzLl9kaXNwbGF5RGF0YT8udmFsdWVbcm93SW5kZXhdO1xuICB9XG5cbiAgZ2V0Um93SW5kZXgocm93OiBUKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc3BsYXlEYXRhLnZhbHVlLmluZGV4T2Yocm93KTtcbiAgfVxuXG4gIGdldEV2ZW50Q2VsbChldmVudDogRXZlbnQpOiBIVE1MRWxlbWVudCB8IG51bGwge1xuICAgIHJldHVybiBldmVudC5jb21wb3NlZFBhdGgoKS5maW5kKCh0YXJnZXQ6IEhUTUxFbGVtZW50KSA9PiB7XG4gICAgICByZXR1cm4gdGFyZ2V0LnRhZ05hbWU/LnRvTG93ZXJDYXNlKCkgPT09ICd0ZXRhLWNlbGwnO1xuICAgIH0pIGFzIEhUTUxFbGVtZW50O1xuICB9XG5cbiAgZ2V0RXZlbnRSb3coZXZlbnQ6IEV2ZW50KTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICByZXR1cm4gZXZlbnQuY29tcG9zZWRQYXRoKCkuZmluZCgodGFyZ2V0OiBIVE1MRWxlbWVudCkgPT4ge1xuICAgICAgcmV0dXJuIHRhcmdldD8uZ2V0QXR0cmlidXRlICYmIHRhcmdldD8uZ2V0QXR0cmlidXRlKCdkYXRhLXJvdycpO1xuICAgIH0pIGFzIEhUTUxFbGVtZW50O1xuICB9XG5cbiAgZ2V0TmV4dEVkaXRhYmxlQ2VsbChjb29yZHM6IElDZWxsQ29vcmRpbmF0ZXMpOiBJQ2VsbENvb3JkaW5hdGVzIHtcbiAgICBjb25zdCBuZXh0Q2VsbCA9IHRoaXMuZ2V0TmV4dENlbGwoY29vcmRzKTtcbiAgICBpZiAoIW5leHRDZWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5nZXRDb2x1bW5CeU5hbWUobmV4dENlbGw/LmNvbHVtbik7XG4gICAgaWYgKHRoaXMuYm9vbE9yRnVuY0NhbGxiYWNrPElDZWxsSW5zdGFuY2U8VD4+KGNvbHVtbi5lZGl0YWJsZSkoe1xuICAgICAgcm93OiB0aGlzLmdldFJvd0J5SW5kZXgobmV4dENlbGwucm93KSxcbiAgICAgIGNvbHVtblxuICAgIH0pKSB7XG4gICAgICByZXR1cm4gbmV4dENlbGw7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldE5leHRFZGl0YWJsZUNlbGwobmV4dENlbGwpO1xuICB9XG5cbiAgZ2V0UHJldmlvdXNFZGl0YWJsZUNlbGwoY29vcmRzOiBJQ2VsbENvb3JkaW5hdGVzKTogSUNlbGxDb29yZGluYXRlcyB7XG4gICAgY29uc3QgcHJldkNlbGwgPSB0aGlzLmdldFByZXZpb3VzQ2VsbChjb29yZHMpO1xuICAgIGlmICghcHJldkNlbGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmdldENvbHVtbkJ5TmFtZShwcmV2Q2VsbD8uY29sdW1uKTtcbiAgICBpZiAodGhpcy5ib29sT3JGdW5jQ2FsbGJhY2s8SUNlbGxJbnN0YW5jZTxUPj4oY29sdW1uLmVkaXRhYmxlKSh7XG4gICAgICByb3c6IHRoaXMuZ2V0Um93QnlJbmRleChwcmV2Q2VsbC5yb3cpLFxuICAgICAgY29sdW1uXG4gICAgfSkpIHtcbiAgICAgIHJldHVybiBwcmV2Q2VsbDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJldmlvdXNFZGl0YWJsZUNlbGwocHJldkNlbGwpO1xuICB9XG5cbiAgZ2V0TmV4dENlbGwoY29vcmRzOiBJQ2VsbENvb3JkaW5hdGVzKTogSUNlbGxDb29yZGluYXRlcyB7XG4gICAgY29uc3QgY29sdW1ucyA9IHRoaXMuZ2V0RmxhdENvbHVtbnMoKTtcbiAgICBsZXQgY29sSW5kZXggPSBjb2x1bW5zLmZpbmRJbmRleCgoY29sOiBUYWJsZUNvbHVtbikgPT4gY29sLm5hbWUgPT09IGNvb3Jkcz8uY29sdW1uKTtcbiAgICBsZXQgcm93SW5kZXggPSBjb29yZHM/LnJvdztcbiAgICBpZiAoY29sSW5kZXggPj0gMCAmJiByb3dJbmRleCA+PSAwKSB7XG4gICAgICBpZiAoY29sSW5kZXggPT09IGNvbHVtbnMubGVuZ3RoIC0gMSkge1xuICAgICAgICBjb2xJbmRleCA9IDA7XG4gICAgICAgIHJvd0luZGV4ID0gcm93SW5kZXggKyAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29sSW5kZXggPSBjb2xJbmRleCArIDE7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2x1bW46IGNvbHVtbnNbY29sSW5kZXhdPy5uYW1lLFxuICAgICAgICByb3c6IHJvd0luZGV4XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGdldFByZXZpb3VzQ2VsbChjb29yZHM6IElDZWxsQ29vcmRpbmF0ZXMpOiBJQ2VsbENvb3JkaW5hdGVzIHtcbiAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5nZXRGbGF0Q29sdW1ucygpO1xuICAgIGxldCBjb2xJbmRleCA9IGNvbHVtbnMuZmluZEluZGV4KChjb2w6IFRhYmxlQ29sdW1uKSA9PiBjb2wubmFtZSA9PT0gY29vcmRzPy5jb2x1bW4pO1xuICAgIGxldCByb3dJbmRleCA9IGNvb3Jkcz8ucm93O1xuICAgIGlmIChjb2xJbmRleCA+PSAwICYmIHJvd0luZGV4ID49IDApIHtcbiAgICAgIGlmIChjb2xJbmRleCA9PT0gMCkge1xuICAgICAgICBjb2xJbmRleCA9IGNvbHVtbnMubGVuZ3RoIC0gMTtcbiAgICAgICAgcm93SW5kZXggPSByb3dJbmRleCAtIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb2xJbmRleCA9IGNvbEluZGV4IC0gMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbHVtbjogY29sdW1uc1tjb2xJbmRleF0/Lm5hbWUsXG4gICAgICAgIHJvdzogcm93SW5kZXhcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZ2V0TmV4dFJvd0NlbGwoY29vcmRzOiBJQ2VsbENvb3JkaW5hdGVzKTogSUNlbGxDb29yZGluYXRlcyB7XG4gICAgY29uc3QgY29sdW1ucyA9IHRoaXMuZ2V0RmxhdENvbHVtbnMoKTtcbiAgICBsZXQgY29sSW5kZXggPSBjb2x1bW5zLmZpbmRJbmRleCgoY29sOiBUYWJsZUNvbHVtbikgPT4gY29sLm5hbWUgPT09IGNvb3Jkcz8uY29sdW1uKTtcbiAgICBsZXQgcm93SW5kZXggPSBjb29yZHM/LnJvdztcbiAgICBpZiAoY29sSW5kZXggPj0gMCAmJiByb3dJbmRleCA+PSAwICYmIHJvd0luZGV4IDwgdGhpcy5fZGlzcGxheURhdGEudmFsdWUubGVuZ3RoIC0gMSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29sdW1uOiBjb2x1bW5zW2NvbEluZGV4XT8ubmFtZSxcbiAgICAgICAgcm93OiByb3dJbmRleCArIDFcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZ2V0UHJldmlvdXNSb3dDZWxsKGNvb3JkczogSUNlbGxDb29yZGluYXRlcykge1xuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmdldEZsYXRDb2x1bW5zKCk7XG4gICAgbGV0IGNvbEluZGV4ID0gY29sdW1ucy5maW5kSW5kZXgoKGNvbDogVGFibGVDb2x1bW4pID0+IGNvbC5uYW1lID09PSBjb29yZHM/LmNvbHVtbik7XG4gICAgbGV0IHJvd0luZGV4ID0gY29vcmRzPy5yb3c7XG4gICAgaWYgKGNvbEluZGV4ID49IDAgJiYgcm93SW5kZXggPiAxKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2x1bW46IGNvbHVtbnNbY29sSW5kZXhdPy5uYW1lLFxuICAgICAgICByb3c6IHJvd0luZGV4IC0gMVxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXRDb2x1bW5CeU5hbWUoY29sdW1uTmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIEFycmF5VXRpbC5maW5kUmVjdXJzaXZlKFxuICAgICAgdGhpcy5kaXNwbGF5Q29sdW1ucyxcbiAgICAgIChpdGVyYWJsZU5vZGUpID0+IGNvbHVtbk5hbWUgPT09IGl0ZXJhYmxlTm9kZS5uYW1lLFxuICAgICAgJ2NvbHVtbnMnXG4gICAgKTtcbiAgfVxuXG4gIHNjcm9sbFRvSW5kZXgoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuX3Njcm9sbEluZGV4Lm5leHQobnVsbCk7XG4gICAgdGhpcy5fc2Nyb2xsSW5kZXgubmV4dChpbmRleCk7XG4gIH1cblxuICBib29sT3JGdW5jQ2FsbGJhY2s8TT4odmFyaWFibGU6IGJvb2xlYW4gfCAoKHJvdzogTSkgPT4gYm9vbGVhbikpIHtcbiAgICByZXR1cm4gKGFyZ3M6IE0pID0+IHtcbiAgICAgIGlmICh0eXBlb2YgdmFyaWFibGUgPT09ICdib29sZWFuJykge1xuICAgICAgICByZXR1cm4gdmFyaWFibGU7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaXNGdW5jdGlvbih2YXJpYWJsZSkpIHtcbiAgICAgICAgcmV0dXJuICh2YXJpYWJsZSBhcyAocm93OiBNKSA9PiBib29sZWFuKShhcmdzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gIH1cblxuICBnZXRWaXNpYmxlQ29sdW1ucygpIHtcbiAgICBjb25zdCB2aXNpYmxlID0gQXJyYXlVdGlsLmZsYXR0ZW4odGhpcy5fY29sdW1ucy52YWx1ZSwgJ2NvbHVtbnMnLCB0cnVlKS5maWx0ZXIoXG4gICAgICAoXykgPT4gdGhpcy5faGlkZGVuQ29sdW1ucy52YWx1ZS5pbmRleE9mKF8ubmFtZSkgPCAwXG4gICAgKTtcbiAgICByZXR1cm4gdmlzaWJsZS5zb3J0KChhLCBiKSA9PiBOdW1iZXIoYi5sb2NrZWQpIC0gTnVtYmVyKGEubG9ja2VkKSk7XG4gIH1cblxuICBnZXRDZWxsSW5zdGFuY2UoY29vcmRzOiBJQ2VsbENvb3JkaW5hdGVzKTogSUNlbGxJbnN0YW5jZTxUPiB7XG4gICAgcmV0dXJuIGNvb3JkcyA/IHtcbiAgICAgIHJvdzogdGhpcy5nZXRSb3dCeUluZGV4KGNvb3Jkcy5yb3cpLFxuICAgICAgY29sdW1uOiB0aGlzLmdldENvbHVtbkJ5TmFtZShjb29yZHMuY29sdW1uKVxuICAgIH0gOiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRGbGF0Q29sdW1ucygpIHtcbiAgICByZXR1cm4gQXJyYXlVdGlsLmZsYXR0ZW4odGhpcy5kaXNwbGF5Q29sdW1ucywgJ2NvbHVtbnMnLCB0cnVlKS5zb3J0KFxuICAgICAgKGEsIGIpID0+IE51bWJlcihiLmxvY2tlZCkgLSBOdW1iZXIoYS5sb2NrZWQpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZmluZFBhcmVudChcbiAgICBjb2x1bW46IFRhYmxlQ29sdW1uLFxuICAgIGNvbHVtbnM6IFRhYmxlQ29sdW1uW11cbiAgKTogVGFibGVDb2x1bW5bXSB8IG51bGwge1xuICAgIGNvbnN0IGZvdW5kID0gY29sdW1ucy5maW5kKCh4KSA9PiB4Lm5hbWUgPT09IGNvbHVtbi5uYW1lKTtcbiAgICBpZiAoZm91bmQgIT09IG51bGwgJiYgZm91bmQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGNvbHVtbnM7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwLCBsID0gY29sdW1ucy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGNvbnN0IGNvbCA9IGNvbHVtbnNbaV07XG4gICAgICBpZiAoY29sLmNvbHVtbnMgJiYgY29sLmNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZmluZFBhcmVudChjb2x1bW4sIGNvbC5jb2x1bW5zKTtcbiAgICAgICAgaWYgKHJlc3VsdCAhPT0gbnVsbCAmJiByZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIGZpbmRQYXJlbnRDb2x1bW4oXG4gICAgY29sdW1uOiBUYWJsZUNvbHVtbixcbiAgICBjb2x1bW5zOiBUYWJsZUNvbHVtbltdXG4gICk6IFRhYmxlQ29sdW1uIHwgbnVsbCB7XG4gICAgY29uc3QgZm91bmQgPSBjb2x1bW5zLmZpbmQoKHgpID0+IHguY29sdW1ucy5pbmRleE9mKGNvbHVtbikgPj0gMCk7XG4gICAgaWYgKGZvdW5kICE9PSBudWxsICYmIGZvdW5kICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmb3VuZDtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSBjb2x1bW5zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgY29uc3QgY29sID0gY29sdW1uc1tpXTtcbiAgICAgIGlmIChjb2wuY29sdW1ucyAmJiBjb2wuY29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5maW5kUGFyZW50Q29sdW1uKGNvbHVtbiwgY29sLmNvbHVtbnMpO1xuICAgICAgICBpZiAocmVzdWx0ICE9PSBudWxsICYmIHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGdldFRhYmxlRWxlbWVudChlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgIHJldHVybiBlbGVtZW50LmNsb3Nlc3QoJ3RldGEtdGFibGUnKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNGdW5jdGlvbihvYmo6IGFueSkge1xuICAgIHJldHVybiAhIShvYmogJiYgb2JqPy5jb25zdHJ1Y3RvciAmJiBvYmo/LmNhbGwgJiYgb2JqPy5hcHBseSk7XG4gIH1cblxuICBwcml2YXRlIHNldENvbHVtbkF1dG9XaWR0aChjb2x1bW46IFRhYmxlQ29sdW1uLCB0YWJsZTogSFRNTEVsZW1lbnQpIHtcbiAgICBjb25zdCBjZWxscyA9IHRhYmxlLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBgdGV0YS1jZWxsW2RhdGEtY29sdW1uPVwiJHtjb2x1bW4ubmFtZX1cIl0gLmNlbGwtdGV4dGBcbiAgICApO1xuICAgIGxldCBtYXhXaWR0aCA9IDA7XG4gICAgY2VsbHMuZm9yRWFjaCgoY2VsbCkgPT4ge1xuICAgICAgaWYgKGNlbGwuc2Nyb2xsV2lkdGggPiBtYXhXaWR0aCkge1xuICAgICAgICBtYXhXaWR0aCA9IGNlbGwuc2Nyb2xsV2lkdGg7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgYWdnQ2VsbHMgPSB0YWJsZS5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgYC5hZ2dyZWdhdGUtY2VsbFtkYXRhLWNvbHVtbj1cIiR7Y29sdW1uLm5hbWV9XCJdIC5jZWxsLXRleHRgXG4gICAgKTtcbiAgICBhZ2dDZWxscz8uZm9yRWFjaCgoY2VsbCkgPT4ge1xuICAgICAgaWYgKGNlbGwuc2Nyb2xsV2lkdGggPiBtYXhXaWR0aCkge1xuICAgICAgICBtYXhXaWR0aCA9IGNlbGwuc2Nyb2xsV2lkdGg7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29sdW1uLmZsZXggPSAwO1xuICAgIGNvbHVtbi53aWR0aCA9IG1heFdpZHRoICsgMjA7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyVmFsdWUoZXZlbnQ6IElDZWxsRXZlbnQpIHtcbiAgICB0aGlzLnNldFZhbHVlKHtcbiAgICAgIC4uLmV2ZW50LFxuICAgICAgdmFsdWU6IG51bGxcbiAgICB9KTtcbiAgfVxufVxuIl19