@colijnit/corecomponents_v12 12.2.20 → 12.2.22

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 (436) hide show
  1. package/bundles/colijnit-corecomponents_v12.umd.js +13656 -13656
  2. package/colijnit-corecomponents_v12.d.ts +43 -43
  3. package/esm2015/colijnit-corecomponents_v12.js +43 -43
  4. package/esm2015/lib/components/article-tile/article-tile.component.js +49 -49
  5. package/esm2015/lib/components/article-tile/article-tile.module.js +34 -34
  6. package/esm2015/lib/components/base/base-input.component.js +833 -833
  7. package/esm2015/lib/components/base/base.module.js +21 -21
  8. package/esm2015/lib/components/base/commit-buttons/commit-buttons.component.js +85 -85
  9. package/esm2015/lib/components/base/commit-buttons/commit-buttons.module.js +20 -20
  10. package/esm2015/lib/components/base/dialog-base.component.js +5 -5
  11. package/esm2015/lib/components/base-input-date-picker/base-input-date-picker.directive.js +24 -24
  12. package/esm2015/lib/components/button/button.component.js +73 -73
  13. package/esm2015/lib/components/button/button.module.js +18 -18
  14. package/esm2015/lib/components/calendar/calendar-template.component.js +281 -281
  15. package/esm2015/lib/components/calendar/calendar.component.js +32 -32
  16. package/esm2015/lib/components/calendar/calendar.module.js +27 -27
  17. package/esm2015/lib/components/card/card.component.js +50 -50
  18. package/esm2015/lib/components/card/card.module.js +34 -34
  19. package/esm2015/lib/components/carousel/carousel.component.js +109 -109
  20. package/esm2015/lib/components/carousel/carousel.module.js +31 -31
  21. package/esm2015/lib/components/carousel-3d/carousel-3d.component.js +293 -293
  22. package/esm2015/lib/components/carousel-3d/carousel-3d.module.js +18 -18
  23. package/esm2015/lib/components/carousel-3d/carouselItem.js +53 -53
  24. package/esm2015/lib/components/checkmark-overlay/checkmark-overlay.component.js +72 -72
  25. package/esm2015/lib/components/checkmark-overlay/checkmark-overlay.module.js +18 -18
  26. package/esm2015/lib/components/co-dialog/co-dialog.component.js +91 -91
  27. package/esm2015/lib/components/co-dialog/co-dialog.module.js +18 -18
  28. package/esm2015/lib/components/co-dialog-wizard/co-dialog-wizard.component.js +35 -35
  29. package/esm2015/lib/components/co-dialog-wizard/co-dialog-wizard.module.js +16 -16
  30. package/esm2015/lib/components/collapsible/collapsible.component.js +67 -67
  31. package/esm2015/lib/components/collapsible/collapsible.module.js +18 -18
  32. package/esm2015/lib/components/color-picker/color-picker.component.js +33 -33
  33. package/esm2015/lib/components/color-picker/color-picker.module.js +20 -20
  34. package/esm2015/lib/components/core-dialog/confirmation-dialog/confirmation-dialog.component.js +46 -46
  35. package/esm2015/lib/components/core-dialog/core-dialog.module.js +38 -38
  36. package/esm2015/lib/components/core-dialog/core-dialog.service.js +66 -66
  37. package/esm2015/lib/components/core-dialog/core-dynamic-component.service.js +92 -92
  38. package/esm2015/lib/components/double-calendar/double-calendar.component.js +62 -62
  39. package/esm2015/lib/components/double-calendar/double-calendar.module.js +24 -24
  40. package/esm2015/lib/components/filter-item/filter-item-viewmodel.js +12 -12
  41. package/esm2015/lib/components/filter-item/filter-item.component.js +496 -496
  42. package/esm2015/lib/components/filter-item/filter-item.module.js +42 -42
  43. package/esm2015/lib/components/filter-item/filter-viewmodel.js +10 -10
  44. package/esm2015/lib/components/form/form.component.js +181 -181
  45. package/esm2015/lib/components/form/form.module.js +22 -22
  46. package/esm2015/lib/components/grid-toolbar/grid-toolbar.component.js +48 -48
  47. package/esm2015/lib/components/grid-toolbar/grid-toolbar.module.js +22 -22
  48. package/esm2015/lib/components/grid-toolbar-button/grid-toolbar-button.component.js +23 -23
  49. package/esm2015/lib/components/grid-toolbar-button/grid-toolbar-button.module.js +18 -18
  50. package/esm2015/lib/components/icon/icon-cache.service.js +51 -51
  51. package/esm2015/lib/components/icon/icon.component.js +47 -47
  52. package/esm2015/lib/components/icon/icon.module.js +24 -24
  53. package/esm2015/lib/components/icon-collapse-handle/icon-collapse-handle.component.js +56 -56
  54. package/esm2015/lib/components/icon-collapse-handle/icon-collapse-handle.module.js +22 -22
  55. package/esm2015/lib/components/image/image.component.js +31 -31
  56. package/esm2015/lib/components/image/image.module.js +13 -13
  57. package/esm2015/lib/components/input-checkbox/input-checkbox.component.js +71 -71
  58. package/esm2015/lib/components/input-checkbox/input-checkbox.module.js +18 -18
  59. package/esm2015/lib/components/input-date-picker/input-date-picker.component.js +74 -74
  60. package/esm2015/lib/components/input-date-picker/input-date-picker.module.js +25 -25
  61. package/esm2015/lib/components/input-date-range-picker/input-date-range-picker.component.js +107 -107
  62. package/esm2015/lib/components/input-date-range-picker/input-date-range-picker.module.js +26 -26
  63. package/esm2015/lib/components/input-number-picker/input-number-picker.component.js +285 -285
  64. package/esm2015/lib/components/input-number-picker/input-number-picker.module.js +22 -22
  65. package/esm2015/lib/components/input-radio-button/input-radio-button.component.js +77 -77
  66. package/esm2015/lib/components/input-radio-button/input-radio-button.module.js +18 -18
  67. package/esm2015/lib/components/input-scanner/bar-code-scanner.js +22 -22
  68. package/esm2015/lib/components/input-scanner/input-scanner.component.js +54 -54
  69. package/esm2015/lib/components/input-scanner/input-scanner.module.js +20 -20
  70. package/esm2015/lib/components/input-scanner/scanner.service.js +27 -27
  71. package/esm2015/lib/components/input-search/input-search.component.js +59 -59
  72. package/esm2015/lib/components/input-search/input-search.module.js +20 -20
  73. package/esm2015/lib/components/input-text/input-text.component.js +179 -179
  74. package/esm2015/lib/components/input-text/input-text.module.js +32 -32
  75. package/esm2015/lib/components/input-textarea/input-textarea.component.js +55 -55
  76. package/esm2015/lib/components/input-textarea/input-textarea.module.js +26 -26
  77. package/esm2015/lib/components/level-indicator/level-indicator-level.enum.js +6 -6
  78. package/esm2015/lib/components/level-indicator/level-indicator.component.js +29 -29
  79. package/esm2015/lib/components/level-indicator/level-indicator.module.js +14 -14
  80. package/esm2015/lib/components/list-of-values/list-of-values-multiselect-popup.component.js +87 -87
  81. package/esm2015/lib/components/list-of-values/list-of-values-popup.component.js +218 -218
  82. package/esm2015/lib/components/list-of-values/list-of-values.component.js +199 -199
  83. package/esm2015/lib/components/list-of-values/list-of-values.module.js +37 -37
  84. package/esm2015/lib/components/loader/loader.component.js +16 -16
  85. package/esm2015/lib/components/loader/loader.module.js +18 -18
  86. package/esm2015/lib/components/pagination/paginate.pipe.js +98 -98
  87. package/esm2015/lib/components/pagination/pagination-instance.js +1 -1
  88. package/esm2015/lib/components/pagination/pagination.component.js +107 -107
  89. package/esm2015/lib/components/pagination/pagination.module.js +27 -27
  90. package/esm2015/lib/components/pagination/pagination.service.js +87 -87
  91. package/esm2015/lib/components/pagination-bar/pagination-bar.component.js +136 -136
  92. package/esm2015/lib/components/pagination-bar/pagination-bar.module.js +18 -18
  93. package/esm2015/lib/components/popup/const/popup-window-token.js +2 -2
  94. package/esm2015/lib/components/popup/interface/popup-button.js +7 -7
  95. package/esm2015/lib/components/popup/interface/popup-close-event.js +1 -1
  96. package/esm2015/lib/components/popup/interface/popup-settings.js +41 -41
  97. package/esm2015/lib/components/popup/interface/popup.js +1 -1
  98. package/esm2015/lib/components/popup/model/popup-button-globals.js +10 -10
  99. package/esm2015/lib/components/popup/model/popup-window.js +37 -37
  100. package/esm2015/lib/components/popup/popup-buttons.component.js +42 -42
  101. package/esm2015/lib/components/popup/popup-message-display.component.js +37 -37
  102. package/esm2015/lib/components/popup/popup-window-shell.component.js +141 -141
  103. package/esm2015/lib/components/popup/popup.module.js +48 -48
  104. package/esm2015/lib/components/popup/service/popup-shower.service.js +89 -89
  105. package/esm2015/lib/components/popup/service/prompt.service.js +126 -126
  106. package/esm2015/lib/components/popup/text-input-popup.component.js +33 -33
  107. package/esm2015/lib/components/responsive-text/responsive-text.component.js +17 -17
  108. package/esm2015/lib/components/responsive-text/responsive-text.module.js +18 -18
  109. package/esm2015/lib/components/simple-grid/base-simple-grid.component.js +163 -163
  110. package/esm2015/lib/components/simple-grid/simple-grid-cell.component.js +141 -141
  111. package/esm2015/lib/components/simple-grid/simple-grid-column.directive.js +110 -110
  112. package/esm2015/lib/components/simple-grid/simple-grid.component.js +378 -378
  113. package/esm2015/lib/components/simple-grid/simple-grid.module.js +40 -40
  114. package/esm2015/lib/components/tile/tile.component.js +44 -44
  115. package/esm2015/lib/components/tile/tile.module.js +22 -22
  116. package/esm2015/lib/components/tile-select/tile-select.component.js +26 -26
  117. package/esm2015/lib/components/tile-select/tile-select.module.js +20 -20
  118. package/esm2015/lib/components/tooltip/tooltip.component.js +74 -74
  119. package/esm2015/lib/components/tooltip/tooltip.module.js +18 -18
  120. package/esm2015/lib/components/validation-error/validation-error.component.js +30 -30
  121. package/esm2015/lib/components/validation-error/validation-error.module.js +24 -24
  122. package/esm2015/lib/components/view-mode-buttons/content-view-mode.enum.js +10 -10
  123. package/esm2015/lib/components/view-mode-buttons/view-mode-buttons.component.js +41 -41
  124. package/esm2015/lib/components/view-mode-buttons/view-mode-buttons.module.js +20 -20
  125. package/esm2015/lib/core/constant/default-upper-bound-for-range-components.js +3 -3
  126. package/esm2015/lib/core/constant/java-max-int.js +1 -1
  127. package/esm2015/lib/core/constant/number-inputs-key-down-white-list.js +44 -44
  128. package/esm2015/lib/core/decorator/input-boolean.decorator.js +33 -33
  129. package/esm2015/lib/core/enum/co-direction.js +8 -8
  130. package/esm2015/lib/core/enum/co-document-image-display-kind.enum.js +6 -6
  131. package/esm2015/lib/core/enum/co-document-type.enum.js +10 -10
  132. package/esm2015/lib/core/enum/co-orientation.js +16 -16
  133. package/esm2015/lib/core/enum/core-components-icon.enum.js +299 -299
  134. package/esm2015/lib/core/enum/file-type-internal.enum.js +16 -16
  135. package/esm2015/lib/core/enum/file-type.enum.js +10 -10
  136. package/esm2015/lib/core/enum/filterItem-mode.enum.js +42 -42
  137. package/esm2015/lib/core/enum/input-number-picker-show-mode.enum.js +7 -7
  138. package/esm2015/lib/core/enum/keyboard-code.enum.js +73 -73
  139. package/esm2015/lib/core/enum/keyboard-key.enum.js +75 -75
  140. package/esm2015/lib/core/enum/object-right-type.enum.js +6 -6
  141. package/esm2015/lib/core/enum/popup-button-type.enum.js +11 -11
  142. package/esm2015/lib/core/enum/popup-type.enum.js +10 -10
  143. package/esm2015/lib/core/enum/table-name.enum.js +80 -80
  144. package/esm2015/lib/core/function/any-nill.function.js +5 -5
  145. package/esm2015/lib/core/function/is-nill.function.js +4 -4
  146. package/esm2015/lib/core/function/none-nill.function.js +16 -16
  147. package/esm2015/lib/core/function/not-nill.function.js +4 -4
  148. package/esm2015/lib/core/model/bounds-constrained-number-value.js +170 -170
  149. package/esm2015/lib/core/model/check-precision-and-scale-result.js +1 -1
  150. package/esm2015/lib/core/model/check-within-stepped-bounds-result.js +1 -1
  151. package/esm2015/lib/core/model/co-document-right.bo.js +2 -2
  152. package/esm2015/lib/core/model/co-document.bo.js +120 -120
  153. package/esm2015/lib/core/model/core-components-icon-svg.js +298 -298
  154. package/esm2015/lib/core/model/element-position.js +9 -9
  155. package/esm2015/lib/core/model/event/string-prompt-result-event.js +7 -7
  156. package/esm2015/lib/core/service/form-input-user-change-listener.service.js +24 -24
  157. package/esm2015/lib/core/service/form-master.service.js +101 -101
  158. package/esm2015/lib/core/service/ng-zone-wrapper.service.js +19 -19
  159. package/esm2015/lib/core/utils/array-utils.js +263 -263
  160. package/esm2015/lib/core/utils/browser-utils.js +99 -99
  161. package/esm2015/lib/core/utils/direction-enum-utils.js +13 -13
  162. package/esm2015/lib/core/utils/event-utils.js +52 -52
  163. package/esm2015/lib/core/utils/file-utils.js +266 -266
  164. package/esm2015/lib/core/utils/number-utils.js +308 -308
  165. package/esm2015/lib/core/utils/object-utils.js +185 -185
  166. package/esm2015/lib/core/utils/string-utils.js +93 -93
  167. package/esm2015/lib/core/validator/email.validator.js +5 -5
  168. package/esm2015/lib/core/validator/equal.validator.js +10 -10
  169. package/esm2015/lib/core/validator/max-string-length.validator.js +9 -9
  170. package/esm2015/lib/core/validator/password.validator.js +30 -30
  171. package/esm2015/lib/core/validator/precision-scale.validator.js +10 -10
  172. package/esm2015/lib/core/validator/required.validator.js +4 -4
  173. package/esm2015/lib/directives/clickoutside/click-outside-master.service.js +56 -56
  174. package/esm2015/lib/directives/clickoutside/click-outside.directive.js +70 -70
  175. package/esm2015/lib/directives/clickoutside/clickoutside.module.js +18 -18
  176. package/esm2015/lib/directives/observe-visibility/observe-visibility.directive.js +52 -52
  177. package/esm2015/lib/directives/observe-visibility/observe-visibility.module.js +14 -14
  178. package/esm2015/lib/directives/overlay/overlay-parent.directive.js +18 -18
  179. package/esm2015/lib/directives/overlay/overlay.directive.js +160 -160
  180. package/esm2015/lib/directives/overlay/overlay.module.js +17 -17
  181. package/esm2015/lib/directives/ripple/ripple-ref.js +25 -25
  182. package/esm2015/lib/directives/ripple/ripple-renderer.js +159 -159
  183. package/esm2015/lib/directives/ripple/ripple.directive.js +79 -79
  184. package/esm2015/lib/directives/ripple/ripple.module.js +23 -23
  185. package/esm2015/lib/directives/ripple/scroll-dispatcher.service.js +107 -107
  186. package/esm2015/lib/directives/ripple/scrollable.directive.js +39 -39
  187. package/esm2015/lib/directives/ripple/viewport-ruler.service.js +72 -72
  188. package/esm2015/lib/directives/screen-configuration/screen-configuration.directive.js +157 -157
  189. package/esm2015/lib/directives/screen-configuration/screen-configuration.module.js +18 -18
  190. package/esm2015/lib/directives/stopclick/stop-click.directive.js +37 -37
  191. package/esm2015/lib/directives/stopclick/stop-click.module.js +14 -14
  192. package/esm2015/lib/directives/template-wrapper/template-wrapper.directive.js +67 -67
  193. package/esm2015/lib/directives/template-wrapper/template-wrapper.module.js +14 -14
  194. package/esm2015/lib/directives/tooltip/tooltip-directive.module.js +18 -18
  195. package/esm2015/lib/directives/tooltip/tooltip.directive.js +77 -77
  196. package/esm2015/lib/interfaces/dialog-response.interface.js +1 -1
  197. package/esm2015/lib/interfaces/scanner-input.interface.js +1 -1
  198. package/esm2015/lib/interfaces/screen-config-adapter-component-interface-name.js +3 -3
  199. package/esm2015/lib/interfaces/screen-config-adapter.component.interface.js +1 -1
  200. package/esm2015/lib/model/enum/app-button-type.enum.js +10 -10
  201. package/esm2015/lib/model/enum/app-popup-type.enum.js +7 -7
  202. package/esm2015/lib/pipes/append.pipe.js +16 -16
  203. package/esm2015/lib/pipes/append.pipe.module.js +14 -14
  204. package/esm2015/lib/pipes/filter.pipe.js +15 -15
  205. package/esm2015/lib/pipes/filter.pipe.module.js +14 -14
  206. package/esm2015/lib/pipes/prepend.pipe.js +16 -16
  207. package/esm2015/lib/pipes/prepend.pipe.module.js +14 -14
  208. package/esm2015/lib/pipes/price-display-pipe.module.js +14 -14
  209. package/esm2015/lib/pipes/price-display.pipe.js +19 -19
  210. package/esm2015/lib/service/base-module-screen-config.service.js +204 -204
  211. package/esm2015/lib/service/base-module.service.js +41 -41
  212. package/esm2015/lib/service/color-sequence.service.js +22 -22
  213. package/esm2015/lib/service/overlay.service.js +72 -72
  214. package/esm2015/lib/translation/core-components-translation.module.js +28 -28
  215. package/esm2015/lib/translation/core-components-translation.service.js +16 -16
  216. package/esm2015/lib/translation/core-dictionary.service.js +28 -28
  217. package/esm2015/lib/translation/core-localize.pipe.js +25 -25
  218. package/esm2015/public-api.js +129 -129
  219. package/fesm2015/colijnit-corecomponents_v12.js +12066 -12066
  220. package/lib/components/article-tile/article-tile.component.d.ts +22 -22
  221. package/lib/components/article-tile/article-tile.module.d.ts +2 -2
  222. package/lib/components/base/base-input.component.d.ts +182 -182
  223. package/lib/components/base/base.module.d.ts +2 -2
  224. package/lib/components/base/commit-buttons/commit-buttons.component.d.ts +21 -21
  225. package/lib/components/base/commit-buttons/commit-buttons.module.d.ts +2 -2
  226. package/lib/components/base/dialog-base.component.d.ts +4 -4
  227. package/lib/components/base-input-date-picker/base-input-date-picker.directive.d.ts +15 -15
  228. package/lib/components/button/button.component.d.ts +29 -29
  229. package/lib/components/button/button.module.d.ts +2 -2
  230. package/lib/components/calendar/calendar-template.component.d.ts +60 -60
  231. package/lib/components/calendar/calendar.component.d.ts +13 -13
  232. package/lib/components/calendar/calendar.module.d.ts +2 -2
  233. package/lib/components/card/card.component.d.ts +23 -23
  234. package/lib/components/card/card.module.d.ts +2 -2
  235. package/lib/components/carousel/carousel.component.d.ts +23 -23
  236. package/lib/components/carousel/carousel.module.d.ts +6 -6
  237. package/lib/components/carousel-3d/carousel-3d.component.d.ts +55 -55
  238. package/lib/components/carousel-3d/carousel-3d.module.d.ts +2 -2
  239. package/lib/components/carousel-3d/carouselItem.d.ts +13 -13
  240. package/lib/components/checkmark-overlay/checkmark-overlay.component.d.ts +17 -17
  241. package/lib/components/checkmark-overlay/checkmark-overlay.module.d.ts +2 -2
  242. package/lib/components/co-dialog/co-dialog.component.d.ts +23 -23
  243. package/lib/components/co-dialog/co-dialog.module.d.ts +2 -2
  244. package/lib/components/co-dialog-wizard/co-dialog-wizard.component.d.ts +9 -9
  245. package/lib/components/co-dialog-wizard/co-dialog-wizard.module.d.ts +2 -2
  246. package/lib/components/collapsible/collapsible.component.d.ts +22 -22
  247. package/lib/components/collapsible/collapsible.module.d.ts +2 -2
  248. package/lib/components/color-picker/color-picker.component.d.ts +6 -6
  249. package/lib/components/color-picker/color-picker.module.d.ts +2 -2
  250. package/lib/components/core-dialog/confirmation-dialog/confirmation-dialog.component.d.ts +20 -20
  251. package/lib/components/core-dialog/core-dialog.module.d.ts +4 -4
  252. package/lib/components/core-dialog/core-dialog.service.d.ts +15 -15
  253. package/lib/components/core-dialog/core-dynamic-component.service.d.ts +12 -12
  254. package/lib/components/double-calendar/double-calendar.component.d.ts +18 -18
  255. package/lib/components/double-calendar/double-calendar.module.d.ts +2 -2
  256. package/lib/components/filter-item/filter-item-viewmodel.d.ts +9 -9
  257. package/lib/components/filter-item/filter-item.component.d.ts +80 -80
  258. package/lib/components/filter-item/filter-item.module.d.ts +2 -2
  259. package/lib/components/filter-item/filter-viewmodel.d.ts +8 -8
  260. package/lib/components/form/form.component.d.ts +39 -39
  261. package/lib/components/form/form.module.d.ts +2 -2
  262. package/lib/components/grid-toolbar/grid-toolbar.component.d.ts +19 -19
  263. package/lib/components/grid-toolbar/grid-toolbar.module.d.ts +2 -2
  264. package/lib/components/grid-toolbar-button/grid-toolbar-button.component.d.ts +8 -8
  265. package/lib/components/grid-toolbar-button/grid-toolbar-button.module.d.ts +2 -2
  266. package/lib/components/icon/icon-cache.service.d.ts +20 -20
  267. package/lib/components/icon/icon.component.d.ts +17 -17
  268. package/lib/components/icon/icon.module.d.ts +2 -2
  269. package/lib/components/icon-collapse-handle/icon-collapse-handle.component.d.ts +21 -21
  270. package/lib/components/icon-collapse-handle/icon-collapse-handle.module.d.ts +2 -2
  271. package/lib/components/image/image.component.d.ts +20 -20
  272. package/lib/components/image/image.module.d.ts +2 -2
  273. package/lib/components/input-checkbox/input-checkbox.component.d.ts +24 -24
  274. package/lib/components/input-checkbox/input-checkbox.module.d.ts +2 -2
  275. package/lib/components/input-date-picker/input-date-picker.component.d.ts +12 -12
  276. package/lib/components/input-date-picker/input-date-picker.module.d.ts +2 -2
  277. package/lib/components/input-date-range-picker/input-date-range-picker.component.d.ts +20 -20
  278. package/lib/components/input-date-range-picker/input-date-range-picker.module.d.ts +2 -2
  279. package/lib/components/input-number-picker/input-number-picker.component.d.ts +73 -73
  280. package/lib/components/input-number-picker/input-number-picker.module.d.ts +2 -2
  281. package/lib/components/input-radio-button/input-radio-button.component.d.ts +19 -19
  282. package/lib/components/input-radio-button/input-radio-button.module.d.ts +2 -2
  283. package/lib/components/input-scanner/bar-code-scanner.d.ts +7 -7
  284. package/lib/components/input-scanner/input-scanner.component.d.ts +23 -23
  285. package/lib/components/input-scanner/input-scanner.module.d.ts +2 -2
  286. package/lib/components/input-scanner/scanner.service.d.ts +11 -11
  287. package/lib/components/input-search/input-search.component.d.ts +18 -18
  288. package/lib/components/input-search/input-search.module.d.ts +2 -2
  289. package/lib/components/input-text/input-text.component.d.ts +62 -62
  290. package/lib/components/input-text/input-text.module.d.ts +2 -2
  291. package/lib/components/input-textarea/input-textarea.component.d.ts +19 -19
  292. package/lib/components/input-textarea/input-textarea.module.d.ts +2 -2
  293. package/lib/components/level-indicator/level-indicator-level.enum.d.ts +5 -5
  294. package/lib/components/level-indicator/level-indicator.component.d.ts +10 -10
  295. package/lib/components/level-indicator/level-indicator.module.d.ts +2 -2
  296. package/lib/components/list-of-values/list-of-values-multiselect-popup.component.d.ts +25 -25
  297. package/lib/components/list-of-values/list-of-values-popup.component.d.ts +47 -47
  298. package/lib/components/list-of-values/list-of-values.component.d.ts +37 -37
  299. package/lib/components/list-of-values/list-of-values.module.d.ts +2 -2
  300. package/lib/components/list-of-values/style/_layout.scss +4 -0
  301. package/lib/components/loader/loader.component.d.ts +3 -3
  302. package/lib/components/loader/loader.module.d.ts +2 -2
  303. package/lib/components/pagination/paginate.pipe.d.ts +15 -15
  304. package/lib/components/pagination/pagination-instance.d.ts +14 -14
  305. package/lib/components/pagination/pagination.component.d.ts +38 -38
  306. package/lib/components/pagination/pagination.module.d.ts +2 -2
  307. package/lib/components/pagination/pagination.service.d.ts +24 -24
  308. package/lib/components/pagination-bar/pagination-bar.component.d.ts +33 -33
  309. package/lib/components/pagination-bar/pagination-bar.module.d.ts +2 -2
  310. package/lib/components/popup/const/popup-window-token.d.ts +3 -3
  311. package/lib/components/popup/interface/popup-button.d.ts +8 -8
  312. package/lib/components/popup/interface/popup-close-event.d.ts +5 -5
  313. package/lib/components/popup/interface/popup-settings.d.ts +21 -21
  314. package/lib/components/popup/interface/popup.d.ts +9 -9
  315. package/lib/components/popup/model/popup-button-globals.d.ts +9 -9
  316. package/lib/components/popup/model/popup-window.d.ts +21 -21
  317. package/lib/components/popup/popup-buttons.component.d.ts +13 -13
  318. package/lib/components/popup/popup-message-display.component.d.ts +12 -12
  319. package/lib/components/popup/popup-window-shell.component.d.ts +42 -42
  320. package/lib/components/popup/popup.module.d.ts +4 -4
  321. package/lib/components/popup/service/popup-shower.service.d.ts +17 -17
  322. package/lib/components/popup/service/prompt.service.d.ts +17 -17
  323. package/lib/components/popup/text-input-popup.component.d.ts +12 -12
  324. package/lib/components/responsive-text/responsive-text.component.d.ts +4 -4
  325. package/lib/components/responsive-text/responsive-text.module.d.ts +2 -2
  326. package/lib/components/simple-grid/base-simple-grid.component.d.ts +52 -52
  327. package/lib/components/simple-grid/simple-grid-cell.component.d.ts +30 -30
  328. package/lib/components/simple-grid/simple-grid-column.directive.d.ts +42 -42
  329. package/lib/components/simple-grid/simple-grid.component.d.ts +64 -64
  330. package/lib/components/simple-grid/simple-grid.module.d.ts +2 -2
  331. package/lib/components/tile/tile.component.d.ts +16 -16
  332. package/lib/components/tile/tile.module.d.ts +2 -2
  333. package/lib/components/tile-select/tile-select.component.d.ts +8 -8
  334. package/lib/components/tile-select/tile-select.module.d.ts +2 -2
  335. package/lib/components/tooltip/tooltip.component.d.ts +18 -18
  336. package/lib/components/tooltip/tooltip.module.d.ts +2 -2
  337. package/lib/components/validation-error/validation-error.component.d.ts +12 -12
  338. package/lib/components/validation-error/validation-error.module.d.ts +2 -2
  339. package/lib/components/view-mode-buttons/content-view-mode.enum.d.ts +8 -8
  340. package/lib/components/view-mode-buttons/view-mode-buttons.component.d.ts +17 -17
  341. package/lib/components/view-mode-buttons/view-mode-buttons.module.d.ts +2 -2
  342. package/lib/core/constant/default-upper-bound-for-range-components.d.ts +2 -2
  343. package/lib/core/constant/java-max-int.d.ts +1 -1
  344. package/lib/core/constant/number-inputs-key-down-white-list.d.ts +2 -2
  345. package/lib/core/decorator/input-boolean.decorator.d.ts +8 -8
  346. package/lib/core/enum/co-direction.d.ts +6 -6
  347. package/lib/core/enum/co-document-image-display-kind.enum.d.ts +5 -5
  348. package/lib/core/enum/co-document-type.enum.d.ts +5 -5
  349. package/lib/core/enum/co-orientation.d.ts +6 -6
  350. package/lib/core/enum/core-components-icon.enum.d.ts +298 -298
  351. package/lib/core/enum/file-type-internal.enum.d.ts +15 -15
  352. package/lib/core/enum/file-type.enum.d.ts +5 -5
  353. package/lib/core/enum/filterItem-mode.enum.d.ts +15 -15
  354. package/lib/core/enum/input-number-picker-show-mode.enum.d.ts +5 -5
  355. package/lib/core/enum/keyboard-code.enum.d.ts +71 -71
  356. package/lib/core/enum/keyboard-key.enum.d.ts +70 -70
  357. package/lib/core/enum/object-right-type.enum.d.ts +5 -5
  358. package/lib/core/enum/popup-button-type.enum.d.ts +9 -9
  359. package/lib/core/enum/popup-type.enum.d.ts +9 -9
  360. package/lib/core/enum/table-name.enum.d.ts +79 -79
  361. package/lib/core/function/any-nill.function.d.ts +1 -1
  362. package/lib/core/function/is-nill.function.d.ts +1 -1
  363. package/lib/core/function/none-nill.function.d.ts +1 -1
  364. package/lib/core/function/not-nill.function.d.ts +1 -1
  365. package/lib/core/model/bounds-constrained-number-value.d.ts +46 -46
  366. package/lib/core/model/check-precision-and-scale-result.d.ts +4 -4
  367. package/lib/core/model/check-within-stepped-bounds-result.d.ts +8 -8
  368. package/lib/core/model/co-document-right.bo.d.ts +6 -6
  369. package/lib/core/model/co-document.bo.d.ts +61 -61
  370. package/lib/core/model/core-components-icon-svg.d.ts +4 -4
  371. package/lib/core/model/element-position.d.ts +7 -7
  372. package/lib/core/model/event/string-prompt-result-event.d.ts +6 -6
  373. package/lib/core/service/form-input-user-change-listener.service.d.ts +10 -10
  374. package/lib/core/service/form-master.service.d.ts +26 -26
  375. package/lib/core/service/ng-zone-wrapper.service.d.ts +6 -6
  376. package/lib/core/utils/array-utils.d.ts +85 -85
  377. package/lib/core/utils/browser-utils.d.ts +15 -15
  378. package/lib/core/utils/direction-enum-utils.d.ts +5 -5
  379. package/lib/core/utils/event-utils.d.ts +12 -12
  380. package/lib/core/utils/file-utils.d.ts +29 -29
  381. package/lib/core/utils/number-utils.d.ts +89 -89
  382. package/lib/core/utils/object-utils.d.ts +31 -31
  383. package/lib/core/utils/string-utils.d.ts +25 -25
  384. package/lib/core/validator/email.validator.d.ts +2 -2
  385. package/lib/core/validator/equal.validator.d.ts +2 -2
  386. package/lib/core/validator/max-string-length.validator.d.ts +2 -2
  387. package/lib/core/validator/password.validator.d.ts +3 -3
  388. package/lib/core/validator/precision-scale.validator.d.ts +2 -2
  389. package/lib/core/validator/required.validator.d.ts +2 -2
  390. package/lib/directives/clickoutside/click-outside-master.service.d.ts +15 -15
  391. package/lib/directives/clickoutside/click-outside.directive.d.ts +18 -18
  392. package/lib/directives/clickoutside/clickoutside.module.d.ts +2 -2
  393. package/lib/directives/observe-visibility/observe-visibility.directive.d.ts +14 -14
  394. package/lib/directives/observe-visibility/observe-visibility.module.d.ts +2 -2
  395. package/lib/directives/overlay/overlay-parent.directive.d.ts +6 -6
  396. package/lib/directives/overlay/overlay.directive.d.ts +25 -25
  397. package/lib/directives/overlay/overlay.module.d.ts +2 -2
  398. package/lib/directives/ripple/ripple-ref.d.ts +21 -21
  399. package/lib/directives/ripple/ripple-renderer.d.ts +56 -56
  400. package/lib/directives/ripple/ripple.directive.d.ts +56 -56
  401. package/lib/directives/ripple/ripple.module.d.ts +2 -2
  402. package/lib/directives/ripple/scroll-dispatcher.service.d.ts +51 -51
  403. package/lib/directives/ripple/scrollable.directive.d.ts +20 -20
  404. package/lib/directives/ripple/viewport-ruler.service.d.ts +29 -29
  405. package/lib/directives/screen-configuration/screen-configuration.directive.d.ts +32 -32
  406. package/lib/directives/screen-configuration/screen-configuration.module.d.ts +2 -2
  407. package/lib/directives/stopclick/stop-click.directive.d.ts +10 -10
  408. package/lib/directives/stopclick/stop-click.module.d.ts +2 -2
  409. package/lib/directives/template-wrapper/template-wrapper.directive.d.ts +13 -13
  410. package/lib/directives/template-wrapper/template-wrapper.module.d.ts +2 -2
  411. package/lib/directives/tooltip/tooltip-directive.module.d.ts +2 -2
  412. package/lib/directives/tooltip/tooltip.directive.d.ts +20 -20
  413. package/lib/interfaces/dialog-response.interface.d.ts +6 -6
  414. package/lib/interfaces/scanner-input.interface.d.ts +3 -3
  415. package/lib/interfaces/screen-config-adapter-component-interface-name.d.ts +3 -3
  416. package/lib/interfaces/screen-config-adapter.component.interface.d.ts +10 -10
  417. package/lib/model/enum/app-button-type.enum.d.ts +9 -9
  418. package/lib/model/enum/app-popup-type.enum.d.ts +6 -6
  419. package/lib/pipes/append.pipe.d.ts +4 -4
  420. package/lib/pipes/append.pipe.module.d.ts +2 -2
  421. package/lib/pipes/filter.pipe.d.ts +4 -4
  422. package/lib/pipes/filter.pipe.module.d.ts +2 -2
  423. package/lib/pipes/prepend.pipe.d.ts +4 -4
  424. package/lib/pipes/prepend.pipe.module.d.ts +2 -2
  425. package/lib/pipes/price-display-pipe.module.d.ts +2 -2
  426. package/lib/pipes/price-display.pipe.d.ts +4 -4
  427. package/lib/service/base-module-screen-config.service.d.ts +47 -47
  428. package/lib/service/base-module.service.d.ts +22 -22
  429. package/lib/service/color-sequence.service.d.ts +4 -4
  430. package/lib/service/overlay.service.d.ts +13 -13
  431. package/lib/translation/core-components-translation.module.d.ts +4 -4
  432. package/lib/translation/core-components-translation.service.d.ts +6 -6
  433. package/lib/translation/core-dictionary.service.d.ts +12 -12
  434. package/lib/translation/core-localize.pipe.d.ts +7 -7
  435. package/package.json +2 -2
  436. package/public-api.d.ts +126 -126
@@ -1,357 +1,357 @@
1
- import { __awaiter } from "tslib";
2
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, HostBinding, HostListener, Input, ViewChildren, ViewEncapsulation } from '@angular/core';
3
- import { FormMasterService } from '../../core/service/form-master.service';
4
- import { BaseSimpleGridComponent } from './base-simple-grid.component';
5
- import { ColumnAlign } from './simple-grid-column.directive';
6
- export class SimpleGridComponent extends BaseSimpleGridComponent {
7
- constructor(_changeDetection, _formMaster) {
8
- super();
9
- this._changeDetection = _changeDetection;
10
- this._formMaster = _formMaster;
11
- this.defaultTextAlign = ColumnAlign.Left;
12
- this.showAdd = false;
13
- this.showDelete = false;
14
- this.editOnCellClick = true;
15
- this.rightToolbar = false;
16
- this.rowsPerPage = 1000;
17
- this.editing = false;
18
- this.editRowIndex = -1;
19
- this.editCellIndex = -1;
20
- this.selectedRowIndex = -1;
21
- this.currentPage = 1;
22
- this._doubleClicked = false;
23
- this._newRow = false;
24
- this.dataChanged.subscribe(() => {
25
- this.currentPage = 1;
26
- });
27
- }
28
- set headerCells(cells) {
29
- const headerElements = cells.toArray();
30
- for (let i = 0; i < headerElements.length; i++) {
31
- this.columns[i].elementRef = headerElements[i];
32
- }
33
- }
34
- showClass() {
35
- return true;
36
- }
37
- handleKeyDown(event) {
38
- if (!this.inlineEdit) {
39
- return;
40
- }
41
- if (event.code === 'Tab') {
42
- event.preventDefault();
43
- this._nextAvailableCellToEdit(!event.shiftKey, this.editCellIndex)
44
- .then((index) => {
45
- this.editCellIndex = index;
46
- this._changeDetection.markForCheck();
47
- });
48
- this._detectChanges();
49
- }
50
- if (event.code === 'Escape') {
51
- this.cancelEditRow();
52
- }
53
- if (event.code === 'Enter') {
54
- this.validateAndSave();
55
- }
56
- }
57
- handleClickOutsideRow() {
58
- this.validateAndSave();
59
- }
60
- getIsRowDisabled(idx) {
61
- return this.disabledRows.indexOf(idx) > -1;
62
- }
63
- isRowDisabled(row, index) {
64
- return __awaiter(this, void 0, void 0, function* () {
65
- if (this.rowDisabledFn && (typeof this.rowDisabledFn === 'function')) {
66
- const disabled = yield this.rowDisabledFn.call(this, row);
67
- const idxRow = this.disabledRows.indexOf(index);
68
- if (disabled) {
69
- if (idxRow < 0) {
70
- this.disabledRows.push(index);
71
- }
72
- }
73
- else {
74
- if (idxRow > -1) {
75
- this.disabledRows.splice(idxRow, 1);
76
- }
77
- }
78
- return disabled;
79
- }
80
- else {
81
- return false;
82
- }
83
- });
84
- }
85
- isSingleColumn(column) {
86
- return column.singleColumn;
87
- }
88
- rowContainsSingleColumn(row, columns) {
89
- const singleColumn = columns.find(column => this.isSingleColumn(column) && !!row[column.field]);
90
- return !!singleColumn;
91
- }
92
- addNewRow() {
93
- return __awaiter(this, void 0, void 0, function* () {
94
- if (this.inlineEdit) {
95
- const valid = this.validateAndSave();
96
- // this._detectChanges();
97
- if (valid) {
98
- this.data.push({});
99
- this._detectChanges();
100
- this._newRow = true;
101
- this.editing = true;
102
- this.editRowIndex = this.data.length - 1;
103
- this.rowToEdit = this.data[this.editRowIndex];
104
- this.editCellIndex = yield this._nextAvailableCellToEdit(true);
105
- this._detectChanges();
106
- }
107
- }
108
- else {
109
- this.addRow.next();
110
- }
111
- });
112
- }
113
- validateAndSave(stopediting = true) {
114
- if (!this.editing) {
115
- return true;
116
- }
117
- const valid = this._formMaster.submitSlaves();
118
- this._detectChanges();
119
- if (valid) {
120
- this._saveRow(stopediting);
121
- return true;
122
- }
123
- return false;
124
- }
125
- cancelEditRow() {
126
- if (!this.editing) {
127
- return;
128
- }
129
- if (this._newRow) {
130
- this.data.splice(this.data.length - 1, 1);
131
- }
132
- else {
133
- this.data[this.editRowIndex] = this.rowToEdit;
134
- }
135
- this._resetEdit();
136
- this._detectChanges();
137
- }
138
- removeRow() {
139
- this.deleteRow.next(this.data[this.selectedRowIndex]);
140
- }
141
- handleClickRow(event, index, row) {
142
- setTimeout(() => {
143
- if (this._doubleClicked) {
144
- return;
145
- }
146
- this.selectTheRow(index);
147
- }, 200);
148
- }
149
- selectTheRow(index, emit = true) {
150
- if (this.selectedRowIndex === -1 || (this.selectedRowIndex !== index && ((this.editing && this.validateAndSave()) || !this.editing))) {
151
- this.selectedRowIndex = index;
152
- }
153
- if (emit) {
154
- this.selectRow.next(this.data[this.selectedRowIndex]);
155
- }
156
- this._detectChanges();
157
- }
158
- handleDblClickRow(event, index, row) {
159
- return __awaiter(this, void 0, void 0, function* () {
160
- if (yield this.isRowDisabled(row, index)) {
161
- this.selectedRowIndex = -1;
162
- return;
163
- }
164
- let canEdit = true;
165
- if (this.canRowBeEdittedFn && typeof this.canRowBeEdittedFn === 'function') {
166
- canEdit = yield this.canRowBeEdittedFn.call(this, row);
167
- }
168
- if (canEdit) {
169
- this._doubleClicked = true;
170
- this.dblClickRow.next(this.data[index]);
171
- this.selectTheRow(index, false);
172
- if (this.inlineEdit) {
173
- this.editRow(event);
174
- }
175
- }
176
- this._resetDblClick();
177
- });
178
- }
179
- editRow(event, selectCell = true) {
180
- this.editRowIndex = this.selectedRowIndex;
181
- this.rowToEdit = this.data[this.editRowIndex];
182
- this.editing = true;
183
- if (selectCell) {
184
- this._nextAvailableCellToEdit(true).then((index) => {
185
- this.editCellIndex = index;
186
- });
187
- }
188
- this._detectChanges();
189
- }
190
- handleCellClick(event, row, rowIndex, cellIndex) {
191
- return __awaiter(this, void 0, void 0, function* () {
192
- if (this.editOnCellClick) {
193
- if (yield this.isRowDisabled(row, rowIndex)) {
194
- this.selectedRowIndex = -1;
195
- return;
196
- }
197
- this.selectTheRow(rowIndex, false);
198
- if (this.inlineEdit) {
199
- this.editRowIndex = rowIndex;
200
- this.editCellIndex = cellIndex;
201
- this.editing = true;
202
- this.editRow(event, false);
203
- }
204
- }
205
- else {
206
- this.editCellIndex = cellIndex;
207
- }
208
- this._detectChanges();
209
- });
210
- }
211
- prepareDataRow(row, index) {
212
- this.isRowDisabled(row, index);
213
- }
214
- _resetDblClick() {
215
- setTimeout(() => {
216
- this._doubleClicked = false;
217
- }, 500);
218
- }
219
- /**
220
- *
221
- * @param next; Move to next or previous cell
222
- * @param start; Start from cellindex
223
- * @private
224
- */
225
- _nextAvailableCellToEdit(next, start = -1) {
226
- return new Promise((resolve, reject) => {
227
- const numEditableColumns = this.columns.filter(c => !c.readonly).length;
228
- const wantedIndex = start + (next ? 1 : -1);
229
- if (wantedIndex >= numEditableColumns) {
230
- this._getNextEditRowIndex()
231
- .then((index) => {
232
- this.editRowIndex = index;
233
- resolve(this._getNextEditCellIndex(0));
234
- })
235
- .catch((e) => {
236
- reject();
237
- });
238
- }
239
- else if (wantedIndex < 0) {
240
- this._getPreviousEditRowIndex()
241
- .then((index) => {
242
- this.editRowIndex = index;
243
- resolve(this._getPreviousEditCellIndex(this.columns.length - 1));
244
- })
245
- .catch((e) => {
246
- reject();
247
- });
248
- }
249
- else {
250
- resolve(next ? this._getNextEditCellIndex(start + 1) : this._getPreviousEditCellIndex(start - 1));
251
- }
252
- });
253
- }
254
- _getNextEditCellIndex(start) {
255
- for (let i = start; i < this.columns.length; i++) {
256
- if (!this.columns[i].readonly) {
257
- return i;
258
- }
259
- }
260
- }
261
- _getPreviousEditCellIndex(start) {
262
- for (let i = start; i >= 0; i--) {
263
- if (!this.columns[i].readonly) {
264
- return i;
265
- }
266
- }
267
- }
268
- _getNextEditRowIndex() {
269
- return new Promise((resolve, reject) => {
270
- let newRowIndex = 0;
271
- if (this.editRowIndex + 1 >= this.data.length) {
272
- if (this.autoAddRow) {
273
- this.addNewRow();
274
- newRowIndex = this.editRowIndex;
275
- }
276
- else {
277
- newRowIndex = 0;
278
- }
279
- }
280
- else {
281
- newRowIndex = this.editRowIndex + 1;
282
- }
283
- if (newRowIndex !== this.editRowIndex) { // go to different row validate current one first
284
- if (this.validateAndSave(false)) {
285
- this.rowToEdit = this.data[newRowIndex];
286
- resolve(newRowIndex);
287
- }
288
- else {
289
- reject();
290
- }
291
- }
292
- else {
293
- resolve(newRowIndex);
294
- }
295
- });
296
- }
297
- _getPreviousEditRowIndex() {
298
- return new Promise((resolve, reject) => {
299
- let newRowIndex = 0;
300
- if (this.editRowIndex - 1 < 0) {
301
- newRowIndex = this.data.length - 1;
302
- }
303
- else {
304
- newRowIndex = this.editRowIndex - 1;
305
- }
306
- if (newRowIndex !== this.editRowIndex) { // go to different row validate current one first
307
- if (this.validateAndSave(false)) {
308
- this.rowToEdit = this.data[newRowIndex];
309
- resolve(newRowIndex);
310
- }
311
- else {
312
- reject();
313
- }
314
- }
315
- else {
316
- resolve(newRowIndex);
317
- }
318
- });
319
- }
320
- _saveRow(stopediting = true) {
321
- // emit saveEvent
322
- if (this.rowToEdit) {
323
- this.saveRow.next(this.rowToEdit);
324
- }
325
- this._newRow = false;
326
- if (stopediting) {
327
- this._resetEdit();
328
- }
329
- this._detectChanges();
330
- }
331
- goToPreviousPage() {
332
- this.currentPage -= 1;
333
- }
334
- goToNextPage() {
335
- this.currentPage += 1;
336
- }
337
- setCurrentPage(page) {
338
- this.currentPage = page;
339
- }
340
- _detectChanges() {
341
- this._changeDetection.detectChanges();
342
- }
343
- _resetEdit() {
344
- this._newRow = false;
345
- this.selectedRowIndex = -1;
346
- this.editRowIndex = -1;
347
- this.editCellIndex = -1;
348
- this.editing = false;
349
- this.rowToEdit = undefined;
350
- }
351
- }
352
- SimpleGridComponent.decorators = [
353
- { type: Component, args: [{
354
- selector: 'co-simple-grid',
1
+ import { __awaiter } from "tslib";
2
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, HostBinding, HostListener, Input, ViewChildren, ViewEncapsulation } from '@angular/core';
3
+ import { FormMasterService } from '../../core/service/form-master.service';
4
+ import { BaseSimpleGridComponent } from './base-simple-grid.component';
5
+ import { ColumnAlign } from './simple-grid-column.directive';
6
+ export class SimpleGridComponent extends BaseSimpleGridComponent {
7
+ constructor(_changeDetection, _formMaster) {
8
+ super();
9
+ this._changeDetection = _changeDetection;
10
+ this._formMaster = _formMaster;
11
+ this.defaultTextAlign = ColumnAlign.Left;
12
+ this.showAdd = false;
13
+ this.showDelete = false;
14
+ this.editOnCellClick = true;
15
+ this.rightToolbar = false;
16
+ this.rowsPerPage = 1000;
17
+ this.editing = false;
18
+ this.editRowIndex = -1;
19
+ this.editCellIndex = -1;
20
+ this.selectedRowIndex = -1;
21
+ this.currentPage = 1;
22
+ this._doubleClicked = false;
23
+ this._newRow = false;
24
+ this.dataChanged.subscribe(() => {
25
+ this.currentPage = 1;
26
+ });
27
+ }
28
+ set headerCells(cells) {
29
+ const headerElements = cells.toArray();
30
+ for (let i = 0; i < headerElements.length; i++) {
31
+ this.columns[i].elementRef = headerElements[i];
32
+ }
33
+ }
34
+ showClass() {
35
+ return true;
36
+ }
37
+ handleKeyDown(event) {
38
+ if (!this.inlineEdit) {
39
+ return;
40
+ }
41
+ if (event.code === 'Tab') {
42
+ event.preventDefault();
43
+ this._nextAvailableCellToEdit(!event.shiftKey, this.editCellIndex)
44
+ .then((index) => {
45
+ this.editCellIndex = index;
46
+ this._changeDetection.markForCheck();
47
+ });
48
+ this._detectChanges();
49
+ }
50
+ if (event.code === 'Escape') {
51
+ this.cancelEditRow();
52
+ }
53
+ if (event.code === 'Enter') {
54
+ this.validateAndSave();
55
+ }
56
+ }
57
+ handleClickOutsideRow() {
58
+ this.validateAndSave();
59
+ }
60
+ getIsRowDisabled(idx) {
61
+ return this.disabledRows.indexOf(idx) > -1;
62
+ }
63
+ isRowDisabled(row, index) {
64
+ return __awaiter(this, void 0, void 0, function* () {
65
+ if (this.rowDisabledFn && (typeof this.rowDisabledFn === 'function')) {
66
+ const disabled = yield this.rowDisabledFn.call(this, row);
67
+ const idxRow = this.disabledRows.indexOf(index);
68
+ if (disabled) {
69
+ if (idxRow < 0) {
70
+ this.disabledRows.push(index);
71
+ }
72
+ }
73
+ else {
74
+ if (idxRow > -1) {
75
+ this.disabledRows.splice(idxRow, 1);
76
+ }
77
+ }
78
+ return disabled;
79
+ }
80
+ else {
81
+ return false;
82
+ }
83
+ });
84
+ }
85
+ isSingleColumn(column) {
86
+ return column.singleColumn;
87
+ }
88
+ rowContainsSingleColumn(row, columns) {
89
+ const singleColumn = columns.find(column => this.isSingleColumn(column) && !!row[column.field]);
90
+ return !!singleColumn;
91
+ }
92
+ addNewRow() {
93
+ return __awaiter(this, void 0, void 0, function* () {
94
+ if (this.inlineEdit) {
95
+ const valid = this.validateAndSave();
96
+ // this._detectChanges();
97
+ if (valid) {
98
+ this.data.push({});
99
+ this._detectChanges();
100
+ this._newRow = true;
101
+ this.editing = true;
102
+ this.editRowIndex = this.data.length - 1;
103
+ this.rowToEdit = this.data[this.editRowIndex];
104
+ this.editCellIndex = yield this._nextAvailableCellToEdit(true);
105
+ this._detectChanges();
106
+ }
107
+ }
108
+ else {
109
+ this.addRow.next();
110
+ }
111
+ });
112
+ }
113
+ validateAndSave(stopediting = true) {
114
+ if (!this.editing) {
115
+ return true;
116
+ }
117
+ const valid = this._formMaster.submitSlaves();
118
+ this._detectChanges();
119
+ if (valid) {
120
+ this._saveRow(stopediting);
121
+ return true;
122
+ }
123
+ return false;
124
+ }
125
+ cancelEditRow() {
126
+ if (!this.editing) {
127
+ return;
128
+ }
129
+ if (this._newRow) {
130
+ this.data.splice(this.data.length - 1, 1);
131
+ }
132
+ else {
133
+ this.data[this.editRowIndex] = this.rowToEdit;
134
+ }
135
+ this._resetEdit();
136
+ this._detectChanges();
137
+ }
138
+ removeRow() {
139
+ this.deleteRow.next(this.data[this.selectedRowIndex]);
140
+ }
141
+ handleClickRow(event, index, row) {
142
+ setTimeout(() => {
143
+ if (this._doubleClicked) {
144
+ return;
145
+ }
146
+ this.selectTheRow(index);
147
+ }, 200);
148
+ }
149
+ selectTheRow(index, emit = true) {
150
+ if (this.selectedRowIndex === -1 || (this.selectedRowIndex !== index && ((this.editing && this.validateAndSave()) || !this.editing))) {
151
+ this.selectedRowIndex = index;
152
+ }
153
+ if (emit) {
154
+ this.selectRow.next(this.data[this.selectedRowIndex]);
155
+ }
156
+ this._detectChanges();
157
+ }
158
+ handleDblClickRow(event, index, row) {
159
+ return __awaiter(this, void 0, void 0, function* () {
160
+ if (yield this.isRowDisabled(row, index)) {
161
+ this.selectedRowIndex = -1;
162
+ return;
163
+ }
164
+ let canEdit = true;
165
+ if (this.canRowBeEdittedFn && typeof this.canRowBeEdittedFn === 'function') {
166
+ canEdit = yield this.canRowBeEdittedFn.call(this, row);
167
+ }
168
+ if (canEdit) {
169
+ this._doubleClicked = true;
170
+ this.dblClickRow.next(this.data[index]);
171
+ this.selectTheRow(index, false);
172
+ if (this.inlineEdit) {
173
+ this.editRow(event);
174
+ }
175
+ }
176
+ this._resetDblClick();
177
+ });
178
+ }
179
+ editRow(event, selectCell = true) {
180
+ this.editRowIndex = this.selectedRowIndex;
181
+ this.rowToEdit = this.data[this.editRowIndex];
182
+ this.editing = true;
183
+ if (selectCell) {
184
+ this._nextAvailableCellToEdit(true).then((index) => {
185
+ this.editCellIndex = index;
186
+ });
187
+ }
188
+ this._detectChanges();
189
+ }
190
+ handleCellClick(event, row, rowIndex, cellIndex) {
191
+ return __awaiter(this, void 0, void 0, function* () {
192
+ if (this.editOnCellClick) {
193
+ if (yield this.isRowDisabled(row, rowIndex)) {
194
+ this.selectedRowIndex = -1;
195
+ return;
196
+ }
197
+ this.selectTheRow(rowIndex, false);
198
+ if (this.inlineEdit) {
199
+ this.editRowIndex = rowIndex;
200
+ this.editCellIndex = cellIndex;
201
+ this.editing = true;
202
+ this.editRow(event, false);
203
+ }
204
+ }
205
+ else {
206
+ this.editCellIndex = cellIndex;
207
+ }
208
+ this._detectChanges();
209
+ });
210
+ }
211
+ prepareDataRow(row, index) {
212
+ this.isRowDisabled(row, index);
213
+ }
214
+ _resetDblClick() {
215
+ setTimeout(() => {
216
+ this._doubleClicked = false;
217
+ }, 500);
218
+ }
219
+ /**
220
+ *
221
+ * @param next; Move to next or previous cell
222
+ * @param start; Start from cellindex
223
+ * @private
224
+ */
225
+ _nextAvailableCellToEdit(next, start = -1) {
226
+ return new Promise((resolve, reject) => {
227
+ const numEditableColumns = this.columns.filter(c => !c.readonly).length;
228
+ const wantedIndex = start + (next ? 1 : -1);
229
+ if (wantedIndex >= numEditableColumns) {
230
+ this._getNextEditRowIndex()
231
+ .then((index) => {
232
+ this.editRowIndex = index;
233
+ resolve(this._getNextEditCellIndex(0));
234
+ })
235
+ .catch((e) => {
236
+ reject();
237
+ });
238
+ }
239
+ else if (wantedIndex < 0) {
240
+ this._getPreviousEditRowIndex()
241
+ .then((index) => {
242
+ this.editRowIndex = index;
243
+ resolve(this._getPreviousEditCellIndex(this.columns.length - 1));
244
+ })
245
+ .catch((e) => {
246
+ reject();
247
+ });
248
+ }
249
+ else {
250
+ resolve(next ? this._getNextEditCellIndex(start + 1) : this._getPreviousEditCellIndex(start - 1));
251
+ }
252
+ });
253
+ }
254
+ _getNextEditCellIndex(start) {
255
+ for (let i = start; i < this.columns.length; i++) {
256
+ if (!this.columns[i].readonly) {
257
+ return i;
258
+ }
259
+ }
260
+ }
261
+ _getPreviousEditCellIndex(start) {
262
+ for (let i = start; i >= 0; i--) {
263
+ if (!this.columns[i].readonly) {
264
+ return i;
265
+ }
266
+ }
267
+ }
268
+ _getNextEditRowIndex() {
269
+ return new Promise((resolve, reject) => {
270
+ let newRowIndex = 0;
271
+ if (this.editRowIndex + 1 >= this.data.length) {
272
+ if (this.autoAddRow) {
273
+ this.addNewRow();
274
+ newRowIndex = this.editRowIndex;
275
+ }
276
+ else {
277
+ newRowIndex = 0;
278
+ }
279
+ }
280
+ else {
281
+ newRowIndex = this.editRowIndex + 1;
282
+ }
283
+ if (newRowIndex !== this.editRowIndex) { // go to different row validate current one first
284
+ if (this.validateAndSave(false)) {
285
+ this.rowToEdit = this.data[newRowIndex];
286
+ resolve(newRowIndex);
287
+ }
288
+ else {
289
+ reject();
290
+ }
291
+ }
292
+ else {
293
+ resolve(newRowIndex);
294
+ }
295
+ });
296
+ }
297
+ _getPreviousEditRowIndex() {
298
+ return new Promise((resolve, reject) => {
299
+ let newRowIndex = 0;
300
+ if (this.editRowIndex - 1 < 0) {
301
+ newRowIndex = this.data.length - 1;
302
+ }
303
+ else {
304
+ newRowIndex = this.editRowIndex - 1;
305
+ }
306
+ if (newRowIndex !== this.editRowIndex) { // go to different row validate current one first
307
+ if (this.validateAndSave(false)) {
308
+ this.rowToEdit = this.data[newRowIndex];
309
+ resolve(newRowIndex);
310
+ }
311
+ else {
312
+ reject();
313
+ }
314
+ }
315
+ else {
316
+ resolve(newRowIndex);
317
+ }
318
+ });
319
+ }
320
+ _saveRow(stopediting = true) {
321
+ // emit saveEvent
322
+ if (this.rowToEdit) {
323
+ this.saveRow.next(this.rowToEdit);
324
+ }
325
+ this._newRow = false;
326
+ if (stopediting) {
327
+ this._resetEdit();
328
+ }
329
+ this._detectChanges();
330
+ }
331
+ goToPreviousPage() {
332
+ this.currentPage -= 1;
333
+ }
334
+ goToNextPage() {
335
+ this.currentPage += 1;
336
+ }
337
+ setCurrentPage(page) {
338
+ this.currentPage = page;
339
+ }
340
+ _detectChanges() {
341
+ this._changeDetection.detectChanges();
342
+ }
343
+ _resetEdit() {
344
+ this._newRow = false;
345
+ this.selectedRowIndex = -1;
346
+ this.editRowIndex = -1;
347
+ this.editCellIndex = -1;
348
+ this.editing = false;
349
+ this.rowToEdit = undefined;
350
+ }
351
+ }
352
+ SimpleGridComponent.decorators = [
353
+ { type: Component, args: [{
354
+ selector: 'co-simple-grid',
355
355
  template: `
356
356
  <co-grid-toolbar *ngIf="showToolbar" [class.right]="rightToolbar"
357
357
  [showEdit]="showEdit"
@@ -438,28 +438,28 @@ SimpleGridComponent.decorators = [
438
438
  (nextClick)="goToNextPage()"
439
439
  (pageClick)="setCurrentPage($event)"
440
440
  ></co-pagination-bar>
441
- `,
442
- providers: [
443
- FormMasterService
444
- ],
445
- changeDetection: ChangeDetectionStrategy.OnPush,
446
- encapsulation: ViewEncapsulation.None
447
- },] }
448
- ];
449
- SimpleGridComponent.ctorParameters = () => [
450
- { type: ChangeDetectorRef },
451
- { type: FormMasterService }
452
- ];
453
- SimpleGridComponent.propDecorators = {
454
- headerCells: [{ type: ViewChildren, args: ['headerCell',] }],
455
- showAdd: [{ type: Input }],
456
- showDelete: [{ type: Input }],
457
- editOnCellClick: [{ type: Input }],
458
- rightToolbar: [{ type: Input }],
459
- rowsPerPage: [{ type: Input }],
460
- rowDisabledFn: [{ type: Input }],
461
- canRowBeEdittedFn: [{ type: Input }],
462
- showClass: [{ type: HostBinding, args: ['class.co-simple-grid',] }],
463
- handleKeyDown: [{ type: HostListener, args: ['keydown', ['$event'],] }]
464
- };
441
+ `,
442
+ providers: [
443
+ FormMasterService
444
+ ],
445
+ changeDetection: ChangeDetectionStrategy.OnPush,
446
+ encapsulation: ViewEncapsulation.None
447
+ },] }
448
+ ];
449
+ SimpleGridComponent.ctorParameters = () => [
450
+ { type: ChangeDetectorRef },
451
+ { type: FormMasterService }
452
+ ];
453
+ SimpleGridComponent.propDecorators = {
454
+ headerCells: [{ type: ViewChildren, args: ['headerCell',] }],
455
+ showAdd: [{ type: Input }],
456
+ showDelete: [{ type: Input }],
457
+ editOnCellClick: [{ type: Input }],
458
+ rightToolbar: [{ type: Input }],
459
+ rowsPerPage: [{ type: Input }],
460
+ rowDisabledFn: [{ type: Input }],
461
+ canRowBeEdittedFn: [{ type: Input }],
462
+ showClass: [{ type: HostBinding, args: ['class.co-simple-grid',] }],
463
+ handleKeyDown: [{ type: HostListener, args: ['keydown', ['$event'],] }]
464
+ };
465
465
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlLWdyaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3NpbXBsZS1ncmlkL3NpbXBsZS1ncmlkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUNMLFlBQVksRUFDWixpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDM0UsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDdkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBaUc3RCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsdUJBQXVCO0lBdUU5RCxZQUNVLGdCQUFtQyxFQUNuQyxXQUE4QjtRQUV0QyxLQUFLLEVBQUUsQ0FBQztRQUhBLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBbUI7UUFDbkMsZ0JBQVcsR0FBWCxXQUFXLENBQW1CO1FBeEV4QixxQkFBZ0IsR0FBZ0IsV0FBVyxDQUFDLElBQUksQ0FBQztRQVUxRCxZQUFPLEdBQVksS0FBSyxDQUFDO1FBR3pCLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFHNUIsb0JBQWUsR0FBWSxJQUFJLENBQUM7UUFHaEMsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFHOUIsZ0JBQVcsR0FBVyxJQUFJLENBQUM7UUFzQzNCLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFDekIsaUJBQVksR0FBVyxDQUFDLENBQUMsQ0FBQztRQUMxQixrQkFBYSxHQUFXLENBQUMsQ0FBQyxDQUFDO1FBQzNCLHFCQUFnQixHQUFXLENBQUMsQ0FBQyxDQUFDO1FBRTlC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dHJhdGVneSxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgSG9zdEJpbmRpbmcsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIElucHV0LFxyXG4gIFZpZXdDaGlsZHJlbixcclxuICBWaWV3RW5jYXBzdWxhdGlvblxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtTWFzdGVyU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZS9mb3JtLW1hc3Rlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmFzZVNpbXBsZUdyaWRDb21wb25lbnQgfSBmcm9tICcuL2Jhc2Utc2ltcGxlLWdyaWQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29sdW1uQWxpZ24gfSBmcm9tICcuL3NpbXBsZS1ncmlkLWNvbHVtbi5kaXJlY3RpdmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjby1zaW1wbGUtZ3JpZCcsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxjby1ncmlkLXRvb2xiYXIgKm5nSWY9XCJzaG93VG9vbGJhclwiIFtjbGFzcy5yaWdodF09XCJyaWdodFRvb2xiYXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbc2hvd0VkaXRdPVwic2hvd0VkaXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbc2hvd0FkZF09XCJzaG93QWRkXCJcclxuICAgICAgICAgICAgICAgICAgICAgW3Nob3dEZWxldGVdPVwic2hvd0RlbGV0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtkZWxldGVFbmFibGVkXT1cInNlbGVjdGVkUm93SW5kZXggPiAtMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIChhZGRDbGljayk9XCJhZGROZXdSb3coKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIChlZGl0Q2xpY2spPVwiZWRpdFJvdygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgKHNhdmVDbGljayk9XCJ2YWxpZGF0ZUFuZFNhdmUoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIChjYW5jZWxDbGljayk9XCJjYW5jZWxFZGl0Um93KClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAoZGVsZXRlQ2xpY2spPVwicmVtb3ZlUm93KClcIlxyXG4gICAgPjwvY28tZ3JpZC10b29sYmFyPlxyXG4gICAgPHRhYmxlIGNsYXNzPVwic2ltcGxlLWdyaWQtdGFibGVcIiBbY2xpY2tPdXRzaWRlXT1cImVkaXRpbmdcIiAoY2xpY2tPdXRzaWRlKT1cImhhbmRsZUNsaWNrT3V0c2lkZVJvdygpXCI+XHJcbiAgICAgIDxjb2xncm91cD5cclxuICAgICAgICA8Y29sICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgaGVhZGVyQ29sdW1uczsgbGV0IGluZGV4ID0gaW5kZXhcIlxyXG4gICAgICAgICAgICAgW2NsYXNzLnNpbXBsZS1ncmlkLWNvbHVtbi1hdXRvLWZpdF09XCJjb2x1bW4uYXV0b0ZpdFwiXHJcbiAgICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiY29sdW1uLndpZHRoXCJcclxuICAgICAgICAgICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwiTUlOX0NPTFVNTl9XSURUSFwiPlxyXG4gICAgICA8L2NvbGdyb3VwPlxyXG4gICAgICA8dGhlYWQ+XHJcbiAgICAgIDx0cj5cclxuICAgICAgICA8dGggc2NvcGU9XCJjb2xcIiAjaGVhZGVyQ2VsbCBjbGFzcz1cInNpbXBsZS1ncmlkLWNvbHVtbi1oZWFkZXJcIiAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGhlYWRlckNvbHVtbnM7IGxldCBpbmRleCA9IGluZGV4XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2ltcGxlLWdyaWQtY29sdW1uLWhlYWRlci13cmFwcGVyXCIgW2NsYXNzLnJlc2l6YWJsZV09XCJyZXNpemFibGVcIlxyXG4gICAgICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW4udGV4dEFsaWduID8gY29sdW1uLnRleHRBbGlnbiA6IGRlZmF1bHRUZXh0QWxpZ25cIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi5oZWFkZXJUZW1wbGF0ZTsgZWxzZSBub0hlYWRlclRlbXBsYXRlXCI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJjb2x1bW4uaGVhZGVyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9IZWFkZXJUZW1wbGF0ZT5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2ltcGxlLWdyaWQtY29sdW1uLWhlYWRlci1sYWJlbFwiIFtuZ0NsYXNzXT1cImNvbHVtbi50ZXh0QWxpZ24gPyBjb2x1bW4udGV4dEFsaWduIDogZGVmYXVsdFRleHRBbGlnblwiXHJcbiAgICAgICAgICAgICAgICAgICBbdGV4dENvbnRlbnRdPVwiY29sdW1uLmhlYWRlclRleHQgfHwgJyZuYnNwOydcIlxyXG4gICAgICAgICAgICAgID48L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInJlc2l6YWJsZSAmJiBjb2x1bW4ucmVzaXphYmxlXCIgY2xhc3M9XCJzaW1wbGUtZ3JpZC1jb2x1bW4tc2l6ZXJcIlxyXG4gICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwiaGFuZGxlU2l6ZXJNb3VzZURvd24oJGV2ZW50LCBjb2x1bW4pXCJcclxuICAgICAgICAgICAgPjwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC90aD5cclxuICAgICAgPC90cj5cclxuICAgICAgPC90aGVhZD5cclxuICAgICAgPHRib2R5ICNkcm9wTGlzdCBjZGtEcm9wTGlzdCBjZGtEcm9wTGlzdE9yaWVudGF0aW9uPVwidmVydGljYWxcIlxyXG4gICAgICAgICAgICAgY2xhc3M9XCJzaW1wbGUtZ3JpZC1kcmFnLWRyb3AtbGlzdFwiXHJcbiAgICAgICAgICAgICBbY2RrRHJvcExpc3REaXNhYmxlZF09XCIhZHJhZ0Ryb3BFbmFibGVkIHx8IGVkaXRpbmdcIlxyXG4gICAgICAgICAgICAgW2Nka0Ryb3BMaXN0RGF0YV09XCJkYXRhXCJcclxuICAgICAgICAgICAgIFtjZGtEcm9wTGlzdEVudGVyUHJlZGljYXRlXT1cImhhbmRsZUNhbkRyYWdEcm9wXCJcclxuICAgICAgICAgICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwiaGFuZGxlRHJvcCgkZXZlbnQpXCI+XHJcbiAgICAgICAgPHRyIGNsYXNzPVwic2ltcGxlLWdyaWQtcm93XCIgW2NsYXNzLnNlbGVjdGVkXT1cInJvd0luZGV4ID09PSBzZWxlY3RlZFJvd0luZGV4ICYmICFlZGl0aW5nXCIgb2JzZXJ2ZVZpc2liaWxpdHlcclxuICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cImdldElzUm93RGlzYWJsZWQocm93SW5kZXgpXCJcclxuICAgICAgICAgIFtjbGFzcy5lZGl0aW5nXT1cInJvd0luZGV4ID09PSBlZGl0Um93SW5kZXhcIiAqbmdGb3I9XCJsZXQgcm93IG9mICghIXJvd3NQZXJQYWdlID8gKGRhdGEgfCBwYWdpbmF0ZToge2l0ZW1zUGVyUGFnZTogcm93c1BlclBhZ2UsIGN1cnJlbnRQYWdlOiBjdXJyZW50UGFnZX0pIDogZGF0YSk7IGxhc3QgYXMgbGFzdDsgbGV0IHJvd0luZGV4ID0gaW5kZXhcIiBjZGtEcmFnXHJcbiAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQ2xpY2tSb3coJGV2ZW50LCByb3dJbmRleCwgcm93KVwiIChkYmxjbGljayk9XCJoYW5kbGVEYmxDbGlja1JvdygkZXZlbnQsIHJvd0luZGV4LCByb3cpXCIgKHZpc2liaWxpdHlDaGFuZ2UpPVwicm93VmlzaWJsZS5uZXh0KHJvdylcIj5cclxuICAgICAgICAgIDxjby1mb3JtIGNsYXNzPVwic2ltcGxlLWdyaWQtcm93LWZvcm1cIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzU2luZ2xlQ29sdW1uUm93KHJvdylcIj5cclxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJzaW1wbGUtZ3JpZC1zaW5nbGUtY29sdW1uLWNlbGxcIiBbYXR0ci5jb2xzcGFuXT1cImhlYWRlckNvbHVtbnMubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICA8Y28tc2ltcGxlLWdyaWQtY2VsbFxyXG4gICAgICAgICAgICAgICAgICBbY29sdW1uXT1cImNvbHVtbnNbc2luZ2xlQ29sdW1uSW5kZXgocm93KV1cIlxyXG4gICAgICAgICAgICAgICAgICBbcm93XT1cInJvd1wiXHJcbiAgICAgICAgICAgICAgICAgIFtlZGl0TW9kZV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICA+PC9jby1zaW1wbGUtZ3JpZC1jZWxsPlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzU2luZ2xlQ29sdW1uUm93KHJvdylcIj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgaGVhZGVyQ29sdW1uczsgbGV0IGNvbHVtbkluZGV4ID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInNpbXBsZS1ncmlkLWNvbHVtbi1jZWxsXCIgKm5nSWY9XCJjb2x1bW5JbmRleCAhPT0gc2luZ2xlQ29sdW1uSW5kZXgocm93KVwiPlxyXG4gICAgICAgICAgICAgICAgICA8Y28tc2ltcGxlLWdyaWQtY2VsbFxyXG4gICAgICAgICAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sdW1uXCJcclxuICAgICAgICAgICAgICAgICAgICBbcm93XT1cInJvd1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2VkaXRNb2RlXT1cImlubGluZUVkaXQgJiYgZWRpdGluZyAmJiByb3dJbmRleCA9PT0gZWRpdFJvd0luZGV4XCJcclxuICAgICAgICAgICAgICAgICAgICBbZmllbGRFZGl0TW9kZV09XCJlZGl0Q2VsbEluZGV4ID09PSBjb2x1bW5JbmRleCAmJiByb3dJbmRleCA9PT0gZWRpdFJvd0luZGV4XCJcclxuICAgICAgICAgICAgICAgICAgICAoY2VsbENsaWNrKT1cImhhbmRsZUNlbGxDbGljaygkZXZlbnQsIHJvdywgcm93SW5kZXgsIGNvbHVtbkluZGV4KVwiXHJcbiAgICAgICAgICAgICAgICAgID48L2NvLXNpbXBsZS1ncmlkLWNlbGw+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb2x1bW4ucmVzaXphYmxlXCIgY2xhc3M9XCJzaW1wbGUtZ3JpZC1jb2x1bW4tc2l6ZXItcGxhY2Vob2xkZXJcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9jby1mb3JtPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICAgIDwvdGJvZHk+XHJcbiAgICA8L3RhYmxlPlxyXG4gICAgPGNvLXBhZ2luYXRpb24tYmFyICpuZ0lmPVwiZGF0YT8ubGVuZ3RoID4gcm93c1BlclBhZ2VcIiBjbGFzcz1cInBhZ2luYXRpb24tYmFyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBbaXRlbXNQZXJQYWdlXT1cInJvd3NQZXJQYWdlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBbY3VycmVudFBhZ2VdPVwiY3VycmVudFBhZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIFt0b3RhbEl0ZW1zXT1cImRhdGEubGVuZ3RoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBbYXV0b0hpZGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgKHByZXZpb3VzQ2xpY2spPVwiZ29Ub1ByZXZpb3VzUGFnZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAobmV4dENsaWNrKT1cImdvVG9OZXh0UGFnZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAocGFnZUNsaWNrKT1cInNldEN1cnJlbnRQYWdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9jby1wYWdpbmF0aW9uLWJhcj5cclxuICBgLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAgRm9ybU1hc3RlclNlcnZpY2VcclxuICBdLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTaW1wbGVHcmlkQ29tcG9uZW50IGV4dGVuZHMgQmFzZVNpbXBsZUdyaWRDb21wb25lbnQge1xyXG4gIHB1YmxpYyByZWFkb25seSBkZWZhdWx0VGV4dEFsaWduOiBDb2x1bW5BbGlnbiA9IENvbHVtbkFsaWduLkxlZnQ7XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oJ2hlYWRlckNlbGwnKSBzZXQgaGVhZGVyQ2VsbHMoY2VsbHMpIHtcclxuICAgIGNvbnN0IGhlYWRlckVsZW1lbnRzID0gY2VsbHMudG9BcnJheSgpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJFbGVtZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICB0aGlzLmNvbHVtbnNbaV0uZWxlbWVudFJlZiA9IGhlYWRlckVsZW1lbnRzW2ldO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2hvd0FkZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzaG93RGVsZXRlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGVkaXRPbkNlbGxDbGljazogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHJpZ2h0VG9vbGJhcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyByb3dzUGVyUGFnZTogbnVtYmVyID0gMTAwMDtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgcm93RGlzYWJsZWRGbjogRnVuY3Rpb247XHJcblxyXG4gIC8qKlxyXG4gICAqIFByb21pc2UgZnVuY3Rpb24sIGlmIHByb3ZpZGVkIHNob3VsZCByZXR1cm4gYm9vbGVhblxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGNhblJvd0JlRWRpdHRlZEZuOiBGdW5jdGlvbjtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5jby1zaW1wbGUtZ3JpZCcpXHJcbiAgcHVibGljIHNob3dDbGFzcygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXHJcbiAgcHVibGljIGhhbmRsZUtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5pbmxpbmVFZGl0KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChldmVudC5jb2RlID09PSAnVGFiJykge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICB0aGlzLl9uZXh0QXZhaWxhYmxlQ2VsbFRvRWRpdCghZXZlbnQuc2hpZnRLZXksIHRoaXMuZWRpdENlbGxJbmRleClcclxuICAgICAgICAudGhlbigoaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5lZGl0Q2VsbEluZGV4ID0gaW5kZXg7XHJcbiAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rpb24ubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgdGhpcy5fZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgaWYgKGV2ZW50LmNvZGUgPT09ICdFc2NhcGUnKSB7XHJcbiAgICAgIHRoaXMuY2FuY2VsRWRpdFJvdygpO1xyXG4gICAgfVxyXG4gICAgaWYgKGV2ZW50LmNvZGUgPT09ICdFbnRlcicpIHtcclxuICAgICAgdGhpcy52YWxpZGF0ZUFuZFNhdmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBlZGl0aW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGVkaXRSb3dJbmRleDogbnVtYmVyID0gLTE7XHJcbiAgcHVibGljIGVkaXRDZWxsSW5kZXg6IG51bWJlciA9IC0xO1xyXG4gIHB1YmxpYyBzZWxlY3RlZFJvd0luZGV4OiBudW1iZXIgPSAtMTtcclxuICBwdWJsaWMgcm93VG9FZGl0OiBhbnk7XHJcbiAgcHVibGljIGN1cnJlbnRQYWdlOiBudW1iZXIgPSAxO1xyXG5cclxuICBwcml2YXRlIF9kb3VibGVDbGlja2VkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfbmV3Um93OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgX2Zvcm1NYXN0ZXI6IEZvcm1NYXN0ZXJTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy5kYXRhQ2hhbmdlZC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlQ2xpY2tPdXRzaWRlUm93KCk6IHZvaWQge1xyXG4gICAgdGhpcy52YWxpZGF0ZUFuZFNhdmUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRJc1Jvd0Rpc2FibGVkKGlkeDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5kaXNhYmxlZFJvd3MuaW5kZXhPZihpZHgpID4gLTE7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgaXNSb3dEaXNhYmxlZChyb3c6IGFueSwgaW5kZXg6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgaWYgKHRoaXMucm93RGlzYWJsZWRGbiAmJiAodHlwZW9mIHRoaXMucm93RGlzYWJsZWRGbiA9PT0gJ2Z1bmN0aW9uJykpIHtcclxuICAgICAgY29uc3QgZGlzYWJsZWQgPSBhd2FpdCB0aGlzLnJvd0Rpc2FibGVkRm4uY2FsbCh0aGlzLCByb3cpO1xyXG4gICAgICBjb25zdCBpZHhSb3c6IG51bWJlciA9IHRoaXMuZGlzYWJsZWRSb3dzLmluZGV4T2YoaW5kZXgpO1xyXG4gICAgICBpZiAoZGlzYWJsZWQpIHtcclxuICAgICAgICBpZiAoaWR4Um93IDwgMCkge1xyXG4gICAgICAgICAgdGhpcy5kaXNhYmxlZFJvd3MucHVzaChpbmRleCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChpZHhSb3cgPiAtMSkge1xyXG4gICAgICAgICAgdGhpcy5kaXNhYmxlZFJvd3Muc3BsaWNlKGlkeFJvdywgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBkaXNhYmxlZDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBpc1NpbmdsZUNvbHVtbihjb2x1bW4pOiBib29sZWFuIHtcclxuICAgIHJldHVybiBjb2x1bW4uc2luZ2xlQ29sdW1uO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJvd0NvbnRhaW5zU2luZ2xlQ29sdW1uKHJvdywgY29sdW1ucyk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3Qgc2luZ2xlQ29sdW1uID0gY29sdW1ucy5maW5kKGNvbHVtbiA9PiB0aGlzLmlzU2luZ2xlQ29sdW1uKGNvbHVtbikgJiYgISFyb3dbY29sdW1uLmZpZWxkXSk7XHJcbiAgICByZXR1cm4gISFzaW5nbGVDb2x1bW47XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgYWRkTmV3Um93KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHRoaXMuaW5saW5lRWRpdCkge1xyXG4gICAgICBjb25zdCB2YWxpZDogYm9vbGVhbiA9IHRoaXMudmFsaWRhdGVBbmRTYXZlKCk7XHJcbiAgICAgIC8vIHRoaXMuX2RldGVjdENoYW5nZXMoKTtcclxuICAgICAgaWYgKHZhbGlkKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhLnB1c2goe30pO1xyXG4gICAgICAgIHRoaXMuX2RldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB0aGlzLl9uZXdSb3cgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZWRpdGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5lZGl0Um93SW5kZXggPSB0aGlzLmRhdGEubGVuZ3RoIC0gMTtcclxuICAgICAgICB0aGlzLnJvd1RvRWRpdCA9IHRoaXMuZGF0YVt0aGlzLmVkaXRSb3dJbmRleF07XHJcbiAgICAgICAgdGhpcy5lZGl0Q2VsbEluZGV4ID0gYXdhaXQgdGhpcy5fbmV4dEF2YWlsYWJsZUNlbGxUb0VkaXQodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5fZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmFkZFJvdy5uZXh0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdmFsaWRhdGVBbmRTYXZlKHN0b3BlZGl0aW5nOiBib29sZWFuID0gdHJ1ZSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLmVkaXRpbmcpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBjb25zdCB2YWxpZDogYm9vbGVhbiA9IHRoaXMuX2Zvcm1NYXN0ZXIuc3VibWl0U2xhdmVzKCk7XHJcbiAgICB0aGlzLl9kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICBpZiAodmFsaWQpIHtcclxuICAgICAgdGhpcy5fc2F2ZVJvdyhzdG9wZWRpdGluZyk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNhbmNlbEVkaXRSb3coKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZWRpdGluZykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5fbmV3Um93KSB7XHJcbiAgICAgIHRoaXMuZGF0YS5zcGxpY2UodGhpcy5kYXRhLmxlbmd0aCAtIDEsIDEpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5kYXRhW3RoaXMuZWRpdFJvd0luZGV4XSA9IHRoaXMucm93VG9FZGl0O1xyXG4gICAgfVxyXG4gICAgdGhpcy5fcmVzZXRFZGl0KCk7XHJcbiAgICB0aGlzLl9kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVtb3ZlUm93KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZWxldGVSb3cubmV4dCh0aGlzLmRhdGFbdGhpcy5zZWxlY3RlZFJvd0luZGV4XSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlQ2xpY2tSb3coZXZlbnQ6IE1vdXNlRXZlbnQsIGluZGV4OiBudW1iZXIsIHJvdzogYW55KTogdm9pZCB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgaWYgKHRoaXMuX2RvdWJsZUNsaWNrZWQpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zZWxlY3RUaGVSb3coaW5kZXgpO1xyXG4gICAgfSwgMjAwKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZWxlY3RUaGVSb3coaW5kZXg6IG51bWJlciwgZW1pdDogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkUm93SW5kZXggPT09IC0xIHx8ICh0aGlzLnNlbGVjdGVkUm93SW5kZXggIT09IGluZGV4ICYmICgodGhpcy5lZGl0aW5nICYmIHRoaXMudmFsaWRhdGVBbmRTYXZlKCkpIHx8ICF0aGlzLmVkaXRpbmcpKSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSBpbmRleDtcclxuICAgIH1cclxuICAgIGlmIChlbWl0KSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0Um93Lm5leHQodGhpcy5kYXRhW3RoaXMuc2VsZWN0ZWRSb3dJbmRleF0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGhhbmRsZURibENsaWNrUm93KGV2ZW50OiBNb3VzZUV2ZW50LCBpbmRleDogbnVtYmVyLCByb3c6IGFueSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKGF3YWl0IHRoaXMuaXNSb3dEaXNhYmxlZChyb3csIGluZGV4KSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSAtMTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IGNhbkVkaXQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMuY2FuUm93QmVFZGl0dGVkRm4gJiYgdHlwZW9mIHRoaXMuY2FuUm93QmVFZGl0dGVkRm4gPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgY2FuRWRpdCA9IGF3YWl0IHRoaXMuY2FuUm93QmVFZGl0dGVkRm4uY2FsbCh0aGlzLCByb3cpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNhbkVkaXQpIHtcclxuICAgICAgdGhpcy5fZG91YmxlQ2xpY2tlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuZGJsQ2xpY2tSb3cubmV4dCh0aGlzLmRhdGFbaW5kZXhdKTtcclxuICAgICAgdGhpcy5zZWxlY3RUaGVSb3coaW5kZXgsIGZhbHNlKTtcclxuICAgICAgaWYgKHRoaXMuaW5saW5lRWRpdCkge1xyXG4gICAgICAgIHRoaXMuZWRpdFJvdyhldmVudCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuX3Jlc2V0RGJsQ2xpY2soKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBlZGl0Um93KGV2ZW50OiBNb3VzZUV2ZW50LCBzZWxlY3RDZWxsOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xyXG4gICAgdGhpcy5lZGl0Um93SW5kZXggPSB0aGlzLnNlbGVjdGVkUm93SW5kZXg7XHJcbiAgICB0aGlzLnJvd1RvRWRpdCA9IHRoaXMuZGF0YVt0aGlzLmVkaXRSb3dJbmRleF07XHJcbiAgICB0aGlzLmVkaXRpbmcgPSB0cnVlO1xyXG4gICAgaWYgKHNlbGVjdENlbGwpIHtcclxuICAgICAgdGhpcy5fbmV4dEF2YWlsYWJsZUNlbGxUb0VkaXQodHJ1ZSkudGhlbigoaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgIHRoaXMuZWRpdENlbGxJbmRleCA9IGluZGV4O1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMuX2RldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBoYW5kbGVDZWxsQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQsIHJvdzogYW55LCByb3dJbmRleDogbnVtYmVyLCBjZWxsSW5kZXg6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHRoaXMuZWRpdE9uQ2VsbENsaWNrKSB7XHJcbiAgICAgIGlmIChhd2FpdCB0aGlzLmlzUm93RGlzYWJsZWQocm93LCByb3dJbmRleCkpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSAtMTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zZWxlY3RUaGVSb3cocm93SW5kZXgsIGZhbHNlKTtcclxuICAgICAgaWYgKHRoaXMuaW5saW5lRWRpdCkge1xyXG4gICAgICAgIHRoaXMuZWRpdFJvd0luZGV4ID0gcm93SW5kZXg7XHJcbiAgICAgICAgdGhpcy5lZGl0Q2VsbEluZGV4ID0gY2VsbEluZGV4O1xyXG4gICAgICAgIHRoaXMuZWRpdGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5lZGl0Um93KGV2ZW50LCBmYWxzZSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZWRpdENlbGxJbmRleCA9IGNlbGxJbmRleDtcclxuICAgIH1cclxuICAgIHRoaXMuX2RldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBwcmVwYXJlRGF0YVJvdyhyb3c6IGFueSwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5pc1Jvd0Rpc2FibGVkKHJvdywgaW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVzZXREYmxDbGljaygpOiB2b2lkIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLl9kb3VibGVDbGlja2VkID0gZmFsc2U7XHJcbiAgICB9LCA1MDApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICpcclxuICAgKiBAcGFyYW0gbmV4dDsgTW92ZSB0byBuZXh0IG9yIHByZXZpb3VzIGNlbGxcclxuICAgKiBAcGFyYW0gc3RhcnQ7IFN0YXJ0IGZyb20gY2VsbGluZGV4XHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBwcml2YXRlIF9uZXh0QXZhaWxhYmxlQ2VsbFRvRWRpdChuZXh0OiBib29sZWFuLCBzdGFydDogbnVtYmVyID0gLTEpOiBQcm9taXNlPG51bWJlcj4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xyXG4gICAgICBjb25zdCBudW1FZGl0YWJsZUNvbHVtbnM6IG51bWJlciA9IHRoaXMuY29sdW1ucy5maWx0ZXIoYyA9PiAhYy5yZWFkb25seSkubGVuZ3RoO1xyXG4gICAgICBjb25zdCB3YW50ZWRJbmRleCA9IHN0YXJ0ICsgKG5leHQgPyAxIDogLTEpO1xyXG4gICAgICBpZiAod2FudGVkSW5kZXggPj0gbnVtRWRpdGFibGVDb2x1bW5zKSB7XHJcbiAgICAgICAgdGhpcy5fZ2V0TmV4dEVkaXRSb3dJbmRleCgpXHJcbiAgICAgICAgICAudGhlbigoaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmVkaXRSb3dJbmRleCA9IGluZGV4O1xyXG4gICAgICAgICAgICByZXNvbHZlKHRoaXMuX2dldE5leHRFZGl0Q2VsbEluZGV4KDApKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcclxuICAgICAgICAgICAgcmVqZWN0KCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIGlmICh3YW50ZWRJbmRleCA8IDApIHtcclxuICAgICAgICB0aGlzLl9nZXRQcmV2aW91c0VkaXRSb3dJbmRleCgpXHJcbiAgICAgICAgICAudGhlbigoaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmVkaXRSb3dJbmRleCA9IGluZGV4O1xyXG4gICAgICAgICAgICByZXNvbHZlKHRoaXMuX2dldFByZXZpb3VzRWRpdENlbGxJbmRleCh0aGlzLmNvbHVtbnMubGVuZ3RoIC0gMSkpO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5jYXRjaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICByZWplY3QoKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJlc29sdmUobmV4dCA/IHRoaXMuX2dldE5leHRFZGl0Q2VsbEluZGV4KHN0YXJ0ICsgMSkgOiB0aGlzLl9nZXRQcmV2aW91c0VkaXRDZWxsSW5kZXgoc3RhcnQgLSAxKSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0TmV4dEVkaXRDZWxsSW5kZXgoc3RhcnQ6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSBzdGFydDsgaSA8IHRoaXMuY29sdW1ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoIXRoaXMuY29sdW1uc1tpXS5yZWFkb25seSkge1xyXG4gICAgICAgIHJldHVybiBpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRQcmV2aW91c0VkaXRDZWxsSW5kZXgoc3RhcnQ6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSBzdGFydDsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgaWYgKCF0aGlzLmNvbHVtbnNbaV0ucmVhZG9ubHkpIHtcclxuICAgICAgICByZXR1cm4gaTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0TmV4dEVkaXRSb3dJbmRleCgpOiBQcm9taXNlPG51bWJlcj4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xyXG4gICAgICBsZXQgbmV3Um93SW5kZXg6IG51bWJlciA9IDA7XHJcbiAgICAgIGlmICh0aGlzLmVkaXRSb3dJbmRleCArIDEgPj0gdGhpcy5kYXRhLmxlbmd0aCkge1xyXG4gICAgICAgIGlmICh0aGlzLmF1dG9BZGRSb3cpIHtcclxuICAgICAgICAgIHRoaXMuYWRkTmV3Um93KCk7XHJcbiAgICAgICAgICBuZXdSb3dJbmRleCA9IHRoaXMuZWRpdFJvd0luZGV4O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBuZXdSb3dJbmRleCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG5ld1Jvd0luZGV4ID0gdGhpcy5lZGl0Um93SW5kZXggKyAxO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChuZXdSb3dJbmRleCAhPT0gdGhpcy5lZGl0Um93SW5kZXgpIHsgLy8gZ28gdG8gZGlmZmVyZW50IHJvdyB2YWxpZGF0ZSBjdXJyZW50IG9uZSBmaXJzdFxyXG4gICAgICAgIGlmICh0aGlzLnZhbGlkYXRlQW5kU2F2ZShmYWxzZSkpIHtcclxuICAgICAgICAgIHRoaXMucm93VG9FZGl0ID0gdGhpcy5kYXRhW25ld1Jvd0luZGV4XTtcclxuICAgICAgICAgIHJlc29sdmUobmV3Um93SW5kZXgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZWplY3QoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmVzb2x2ZShuZXdSb3dJbmRleCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0UHJldmlvdXNFZGl0Um93SW5kZXgoKTogUHJvbWlzZTxudW1iZXI+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcclxuICAgICAgbGV0IG5ld1Jvd0luZGV4OiBudW1iZXIgPSAwO1xyXG4gICAgICBpZiAodGhpcy5lZGl0Um93SW5kZXggLSAxIDwgMCkge1xyXG4gICAgICAgIG5ld1Jvd0luZGV4ID0gdGhpcy5kYXRhLmxlbmd0aCAtIDE7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbmV3Um93SW5kZXggPSB0aGlzLmVkaXRSb3dJbmRleCAtIDE7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG5ld1Jvd0luZGV4ICE9PSB0aGlzLmVkaXRSb3dJbmRleCkgeyAvLyBnbyB0byBkaWZmZXJlbnQgcm93IHZhbGlkYXRlIGN1cnJlbnQgb25lIGZpcnN0XHJcbiAgICAgICAgaWYgKHRoaXMudmFsaWRhdGVBbmRTYXZlKGZhbHNlKSkge1xyXG4gICAgICAgICAgdGhpcy5yb3dUb0VkaXQgPSB0aGlzLmRhdGFbbmV3Um93SW5kZXhdO1xyXG4gICAgICAgICAgcmVzb2x2ZShuZXdSb3dJbmRleCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJlamVjdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXNvbHZlKG5ld1Jvd0luZGV4KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zYXZlUm93KHN0b3BlZGl0aW5nOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xyXG4gICAgLy8gZW1pdCBzYXZlRXZlbnRcclxuICAgIGlmICh0aGlzLnJvd1RvRWRpdCkge1xyXG4gICAgICB0aGlzLnNhdmVSb3cubmV4dCh0aGlzLnJvd1RvRWRpdCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9uZXdSb3cgPSBmYWxzZTtcclxuICAgIGlmIChzdG9wZWRpdGluZykge1xyXG4gICAgICB0aGlzLl9yZXNldEVkaXQoKTtcclxuICAgIH1cclxuICAgIHRoaXMuX2RldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnb1RvUHJldmlvdXNQYWdlKCk6IHZvaWQge1xyXG4gICAgICB0aGlzLmN1cnJlbnRQYWdlIC09IDE7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ29Ub05leHRQYWdlKCk6IHZvaWQge1xyXG4gICAgICB0aGlzLmN1cnJlbnRQYWdlICs9IDE7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0Q3VycmVudFBhZ2UocGFnZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2RldGVjdENoYW5nZXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rpb24uZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVzZXRFZGl0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fbmV3Um93ID0gZmFsc2U7XHJcbiAgICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSAtMTtcclxuICAgIHRoaXMuZWRpdFJvd0luZGV4ID0gLTE7XHJcbiAgICB0aGlzLmVkaXRDZWxsSW5kZXggPSAtMTtcclxuICAgIHRoaXMuZWRpdGluZyA9IGZhbHNlO1xyXG4gICAgdGhpcy5yb3dUb0VkaXQgPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG59XHJcbiJdfQ==