@colijnit/corecomponents_v12 12.2.26 → 12.2.28

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 (439) hide show
  1. package/bundles/colijnit-corecomponents_v12.umd.js +13792 -13682
  2. package/bundles/colijnit-corecomponents_v12.umd.js.map +1 -1
  3. package/colijnit-corecomponents_v12.d.ts +43 -43
  4. package/colijnit-corecomponents_v12.metadata.json +1 -1
  5. package/esm2015/colijnit-corecomponents_v12.js +43 -43
  6. package/esm2015/lib/components/article-tile/article-tile.component.js +49 -49
  7. package/esm2015/lib/components/article-tile/article-tile.module.js +34 -34
  8. package/esm2015/lib/components/base/base-input.component.js +833 -833
  9. package/esm2015/lib/components/base/base.module.js +21 -21
  10. package/esm2015/lib/components/base/commit-buttons/commit-buttons.component.js +85 -85
  11. package/esm2015/lib/components/base/commit-buttons/commit-buttons.module.js +20 -20
  12. package/esm2015/lib/components/base/dialog-base.component.js +5 -5
  13. package/esm2015/lib/components/base-input-date-picker/base-input-date-picker.directive.js +24 -24
  14. package/esm2015/lib/components/button/button.component.js +73 -73
  15. package/esm2015/lib/components/button/button.module.js +18 -18
  16. package/esm2015/lib/components/calendar/calendar-template.component.js +281 -281
  17. package/esm2015/lib/components/calendar/calendar.component.js +32 -32
  18. package/esm2015/lib/components/calendar/calendar.module.js +27 -27
  19. package/esm2015/lib/components/card/card.component.js +50 -50
  20. package/esm2015/lib/components/card/card.module.js +34 -34
  21. package/esm2015/lib/components/carousel/carousel.component.js +109 -109
  22. package/esm2015/lib/components/carousel/carousel.module.js +31 -31
  23. package/esm2015/lib/components/carousel-3d/carousel-3d.component.js +293 -293
  24. package/esm2015/lib/components/carousel-3d/carousel-3d.module.js +18 -18
  25. package/esm2015/lib/components/carousel-3d/carouselItem.js +53 -53
  26. package/esm2015/lib/components/checkmark-overlay/checkmark-overlay.component.js +72 -72
  27. package/esm2015/lib/components/checkmark-overlay/checkmark-overlay.module.js +18 -18
  28. package/esm2015/lib/components/co-dialog/co-dialog.component.js +91 -91
  29. package/esm2015/lib/components/co-dialog/co-dialog.module.js +18 -18
  30. package/esm2015/lib/components/co-dialog-wizard/co-dialog-wizard.component.js +35 -35
  31. package/esm2015/lib/components/co-dialog-wizard/co-dialog-wizard.module.js +16 -16
  32. package/esm2015/lib/components/collapsible/collapsible.component.js +67 -67
  33. package/esm2015/lib/components/collapsible/collapsible.module.js +18 -18
  34. package/esm2015/lib/components/color-picker/color-picker.component.js +33 -33
  35. package/esm2015/lib/components/color-picker/color-picker.module.js +20 -20
  36. package/esm2015/lib/components/core-dialog/confirmation-dialog/confirmation-dialog.component.js +46 -46
  37. package/esm2015/lib/components/core-dialog/core-dialog.module.js +38 -38
  38. package/esm2015/lib/components/core-dialog/core-dialog.service.js +66 -66
  39. package/esm2015/lib/components/core-dialog/core-dynamic-component.service.js +92 -92
  40. package/esm2015/lib/components/double-calendar/double-calendar.component.js +62 -62
  41. package/esm2015/lib/components/double-calendar/double-calendar.module.js +24 -24
  42. package/esm2015/lib/components/filter-item/filter-item-viewmodel.js +12 -12
  43. package/esm2015/lib/components/filter-item/filter-item.component.js +496 -496
  44. package/esm2015/lib/components/filter-item/filter-item.module.js +42 -42
  45. package/esm2015/lib/components/filter-item/filter-viewmodel.js +10 -10
  46. package/esm2015/lib/components/form/form.component.js +181 -181
  47. package/esm2015/lib/components/form/form.module.js +22 -22
  48. package/esm2015/lib/components/grid-toolbar/grid-toolbar.component.js +48 -48
  49. package/esm2015/lib/components/grid-toolbar/grid-toolbar.module.js +22 -22
  50. package/esm2015/lib/components/grid-toolbar-button/grid-toolbar-button.component.js +23 -23
  51. package/esm2015/lib/components/grid-toolbar-button/grid-toolbar-button.module.js +18 -18
  52. package/esm2015/lib/components/icon/icon-cache.service.js +51 -51
  53. package/esm2015/lib/components/icon/icon.component.js +47 -47
  54. package/esm2015/lib/components/icon/icon.module.js +24 -24
  55. package/esm2015/lib/components/icon-collapse-handle/icon-collapse-handle.component.js +56 -56
  56. package/esm2015/lib/components/icon-collapse-handle/icon-collapse-handle.module.js +22 -22
  57. package/esm2015/lib/components/image/image.component.js +31 -31
  58. package/esm2015/lib/components/image/image.module.js +13 -13
  59. package/esm2015/lib/components/input-checkbox/input-checkbox.component.js +71 -71
  60. package/esm2015/lib/components/input-checkbox/input-checkbox.module.js +18 -18
  61. package/esm2015/lib/components/input-date-picker/input-date-picker.component.js +74 -74
  62. package/esm2015/lib/components/input-date-picker/input-date-picker.module.js +25 -25
  63. package/esm2015/lib/components/input-date-range-picker/input-date-range-picker.component.js +107 -107
  64. package/esm2015/lib/components/input-date-range-picker/input-date-range-picker.module.js +26 -26
  65. package/esm2015/lib/components/input-number-picker/input-number-picker.component.js +285 -285
  66. package/esm2015/lib/components/input-number-picker/input-number-picker.module.js +22 -22
  67. package/esm2015/lib/components/input-radio-button/input-radio-button.component.js +77 -77
  68. package/esm2015/lib/components/input-radio-button/input-radio-button.module.js +18 -18
  69. package/esm2015/lib/components/input-scanner/bar-code-scanner.js +22 -22
  70. package/esm2015/lib/components/input-scanner/input-scanner.component.js +56 -56
  71. package/esm2015/lib/components/input-scanner/input-scanner.module.js +20 -20
  72. package/esm2015/lib/components/input-scanner/scanner.service.js +27 -27
  73. package/esm2015/lib/components/input-search/input-search.component.js +67 -63
  74. package/esm2015/lib/components/input-search/input-search.module.js +20 -20
  75. package/esm2015/lib/components/input-text/input-text.component.js +198 -194
  76. package/esm2015/lib/components/input-text/input-text.module.js +32 -32
  77. package/esm2015/lib/components/input-textarea/input-textarea.component.js +55 -55
  78. package/esm2015/lib/components/input-textarea/input-textarea.module.js +26 -26
  79. package/esm2015/lib/components/level-indicator/level-indicator-level.enum.js +6 -6
  80. package/esm2015/lib/components/level-indicator/level-indicator.component.js +29 -29
  81. package/esm2015/lib/components/level-indicator/level-indicator.module.js +14 -14
  82. package/esm2015/lib/components/list-of-values/list-of-values-multiselect-popup.component.js +87 -87
  83. package/esm2015/lib/components/list-of-values/list-of-values-popup.component.js +218 -218
  84. package/esm2015/lib/components/list-of-values/list-of-values.component.js +199 -199
  85. package/esm2015/lib/components/list-of-values/list-of-values.module.js +37 -37
  86. package/esm2015/lib/components/loader/loader.component.js +16 -16
  87. package/esm2015/lib/components/loader/loader.module.js +18 -18
  88. package/esm2015/lib/components/pagination/paginate.pipe.js +98 -98
  89. package/esm2015/lib/components/pagination/pagination-instance.js +1 -1
  90. package/esm2015/lib/components/pagination/pagination.component.js +107 -107
  91. package/esm2015/lib/components/pagination/pagination.module.js +27 -27
  92. package/esm2015/lib/components/pagination/pagination.service.js +87 -87
  93. package/esm2015/lib/components/pagination-bar/pagination-bar.component.js +136 -136
  94. package/esm2015/lib/components/pagination-bar/pagination-bar.module.js +18 -18
  95. package/esm2015/lib/components/popup/const/popup-window-token.js +2 -2
  96. package/esm2015/lib/components/popup/interface/popup-button.js +7 -7
  97. package/esm2015/lib/components/popup/interface/popup-close-event.js +1 -1
  98. package/esm2015/lib/components/popup/interface/popup-settings.js +41 -41
  99. package/esm2015/lib/components/popup/interface/popup.js +1 -1
  100. package/esm2015/lib/components/popup/model/popup-button-globals.js +10 -10
  101. package/esm2015/lib/components/popup/model/popup-window.js +37 -37
  102. package/esm2015/lib/components/popup/popup-buttons.component.js +42 -42
  103. package/esm2015/lib/components/popup/popup-message-display.component.js +37 -37
  104. package/esm2015/lib/components/popup/popup-window-shell.component.js +141 -141
  105. package/esm2015/lib/components/popup/popup.module.js +48 -48
  106. package/esm2015/lib/components/popup/service/popup-shower.service.js +89 -89
  107. package/esm2015/lib/components/popup/service/prompt.service.js +126 -126
  108. package/esm2015/lib/components/popup/text-input-popup.component.js +33 -33
  109. package/esm2015/lib/components/responsive-text/responsive-text.component.js +17 -17
  110. package/esm2015/lib/components/responsive-text/responsive-text.module.js +18 -18
  111. package/esm2015/lib/components/simple-grid/base-simple-grid.component.js +166 -164
  112. package/esm2015/lib/components/simple-grid/simple-grid-cell.component.js +141 -141
  113. package/esm2015/lib/components/simple-grid/simple-grid-column.directive.js +113 -111
  114. package/esm2015/lib/components/simple-grid/simple-grid.component.js +553 -412
  115. package/esm2015/lib/components/simple-grid/simple-grid.module.js +45 -41
  116. package/esm2015/lib/components/tile/tile.component.js +44 -44
  117. package/esm2015/lib/components/tile/tile.module.js +22 -22
  118. package/esm2015/lib/components/tile-select/tile-select.component.js +26 -26
  119. package/esm2015/lib/components/tile-select/tile-select.module.js +20 -20
  120. package/esm2015/lib/components/tooltip/tooltip.component.js +74 -74
  121. package/esm2015/lib/components/tooltip/tooltip.module.js +18 -18
  122. package/esm2015/lib/components/validation-error/validation-error.component.js +30 -30
  123. package/esm2015/lib/components/validation-error/validation-error.module.js +24 -24
  124. package/esm2015/lib/components/view-mode-buttons/content-view-mode.enum.js +10 -10
  125. package/esm2015/lib/components/view-mode-buttons/view-mode-buttons.component.js +41 -41
  126. package/esm2015/lib/components/view-mode-buttons/view-mode-buttons.module.js +20 -20
  127. package/esm2015/lib/core/constant/default-upper-bound-for-range-components.js +3 -3
  128. package/esm2015/lib/core/constant/java-max-int.js +1 -1
  129. package/esm2015/lib/core/constant/number-inputs-key-down-white-list.js +44 -44
  130. package/esm2015/lib/core/decorator/input-boolean.decorator.js +33 -33
  131. package/esm2015/lib/core/enum/co-direction.js +8 -8
  132. package/esm2015/lib/core/enum/co-document-image-display-kind.enum.js +6 -6
  133. package/esm2015/lib/core/enum/co-document-type.enum.js +10 -10
  134. package/esm2015/lib/core/enum/co-orientation.js +16 -16
  135. package/esm2015/lib/core/enum/core-components-icon.enum.js +299 -299
  136. package/esm2015/lib/core/enum/file-type-internal.enum.js +16 -16
  137. package/esm2015/lib/core/enum/file-type.enum.js +10 -10
  138. package/esm2015/lib/core/enum/filterItem-mode.enum.js +42 -42
  139. package/esm2015/lib/core/enum/input-number-picker-show-mode.enum.js +7 -7
  140. package/esm2015/lib/core/enum/keyboard-code.enum.js +73 -73
  141. package/esm2015/lib/core/enum/keyboard-key.enum.js +75 -75
  142. package/esm2015/lib/core/enum/object-right-type.enum.js +6 -6
  143. package/esm2015/lib/core/enum/popup-button-type.enum.js +11 -11
  144. package/esm2015/lib/core/enum/popup-type.enum.js +10 -10
  145. package/esm2015/lib/core/enum/table-name.enum.js +80 -80
  146. package/esm2015/lib/core/function/any-nill.function.js +5 -5
  147. package/esm2015/lib/core/function/is-nill.function.js +4 -4
  148. package/esm2015/lib/core/function/none-nill.function.js +16 -16
  149. package/esm2015/lib/core/function/not-nill.function.js +4 -4
  150. package/esm2015/lib/core/model/bounds-constrained-number-value.js +170 -170
  151. package/esm2015/lib/core/model/check-precision-and-scale-result.js +1 -1
  152. package/esm2015/lib/core/model/check-within-stepped-bounds-result.js +1 -1
  153. package/esm2015/lib/core/model/co-document-right.bo.js +2 -2
  154. package/esm2015/lib/core/model/co-document.bo.js +120 -120
  155. package/esm2015/lib/core/model/core-components-icon-svg.js +298 -298
  156. package/esm2015/lib/core/model/element-position.js +9 -9
  157. package/esm2015/lib/core/model/event/string-prompt-result-event.js +7 -7
  158. package/esm2015/lib/core/service/form-input-user-change-listener.service.js +24 -24
  159. package/esm2015/lib/core/service/form-master.service.js +101 -101
  160. package/esm2015/lib/core/service/ng-zone-wrapper.service.js +19 -19
  161. package/esm2015/lib/core/utils/array-utils.js +263 -263
  162. package/esm2015/lib/core/utils/browser-utils.js +99 -99
  163. package/esm2015/lib/core/utils/direction-enum-utils.js +13 -13
  164. package/esm2015/lib/core/utils/event-utils.js +52 -52
  165. package/esm2015/lib/core/utils/file-utils.js +266 -266
  166. package/esm2015/lib/core/utils/number-utils.js +308 -308
  167. package/esm2015/lib/core/utils/object-utils.js +185 -185
  168. package/esm2015/lib/core/utils/string-utils.js +93 -93
  169. package/esm2015/lib/core/validator/email.validator.js +5 -5
  170. package/esm2015/lib/core/validator/equal.validator.js +10 -10
  171. package/esm2015/lib/core/validator/max-string-length.validator.js +9 -9
  172. package/esm2015/lib/core/validator/password.validator.js +30 -30
  173. package/esm2015/lib/core/validator/precision-scale.validator.js +10 -10
  174. package/esm2015/lib/core/validator/required.validator.js +4 -4
  175. package/esm2015/lib/directives/clickoutside/click-outside-master.service.js +56 -56
  176. package/esm2015/lib/directives/clickoutside/click-outside.directive.js +70 -70
  177. package/esm2015/lib/directives/clickoutside/clickoutside.module.js +18 -18
  178. package/esm2015/lib/directives/observe-visibility/observe-visibility.directive.js +52 -52
  179. package/esm2015/lib/directives/observe-visibility/observe-visibility.module.js +14 -14
  180. package/esm2015/lib/directives/overlay/overlay-parent.directive.js +18 -18
  181. package/esm2015/lib/directives/overlay/overlay.directive.js +160 -160
  182. package/esm2015/lib/directives/overlay/overlay.module.js +17 -17
  183. package/esm2015/lib/directives/ripple/ripple-ref.js +25 -25
  184. package/esm2015/lib/directives/ripple/ripple-renderer.js +159 -159
  185. package/esm2015/lib/directives/ripple/ripple.directive.js +79 -79
  186. package/esm2015/lib/directives/ripple/ripple.module.js +23 -23
  187. package/esm2015/lib/directives/ripple/scroll-dispatcher.service.js +107 -107
  188. package/esm2015/lib/directives/ripple/scrollable.directive.js +39 -39
  189. package/esm2015/lib/directives/ripple/viewport-ruler.service.js +72 -72
  190. package/esm2015/lib/directives/screen-configuration/screen-configuration.directive.js +157 -157
  191. package/esm2015/lib/directives/screen-configuration/screen-configuration.module.js +18 -18
  192. package/esm2015/lib/directives/stopclick/stop-click.directive.js +37 -37
  193. package/esm2015/lib/directives/stopclick/stop-click.module.js +14 -14
  194. package/esm2015/lib/directives/template-wrapper/template-wrapper.directive.js +67 -67
  195. package/esm2015/lib/directives/template-wrapper/template-wrapper.module.js +14 -14
  196. package/esm2015/lib/directives/tooltip/tooltip-directive.module.js +18 -18
  197. package/esm2015/lib/directives/tooltip/tooltip.directive.js +77 -77
  198. package/esm2015/lib/interfaces/dialog-response.interface.js +1 -1
  199. package/esm2015/lib/interfaces/scanner-input.interface.js +1 -1
  200. package/esm2015/lib/interfaces/screen-config-adapter-component-interface-name.js +3 -3
  201. package/esm2015/lib/interfaces/screen-config-adapter.component.interface.js +1 -1
  202. package/esm2015/lib/model/enum/app-button-type.enum.js +10 -10
  203. package/esm2015/lib/model/enum/app-popup-type.enum.js +7 -7
  204. package/esm2015/lib/pipes/append.pipe.js +16 -16
  205. package/esm2015/lib/pipes/append.pipe.module.js +14 -14
  206. package/esm2015/lib/pipes/filter.pipe.js +15 -15
  207. package/esm2015/lib/pipes/filter.pipe.module.js +14 -14
  208. package/esm2015/lib/pipes/prepend.pipe.js +16 -16
  209. package/esm2015/lib/pipes/prepend.pipe.module.js +14 -14
  210. package/esm2015/lib/pipes/price-display-pipe.module.js +14 -14
  211. package/esm2015/lib/pipes/price-display.pipe.js +19 -19
  212. package/esm2015/lib/service/base-module-screen-config.service.js +204 -204
  213. package/esm2015/lib/service/base-module.service.js +41 -41
  214. package/esm2015/lib/service/color-sequence.service.js +22 -22
  215. package/esm2015/lib/service/overlay.service.js +72 -72
  216. package/esm2015/lib/translation/core-components-translation.module.js +28 -28
  217. package/esm2015/lib/translation/core-components-translation.service.js +16 -16
  218. package/esm2015/lib/translation/core-dictionary.service.js +28 -28
  219. package/esm2015/lib/translation/core-localize.pipe.js +25 -25
  220. package/esm2015/public-api.js +129 -129
  221. package/fesm2015/colijnit-corecomponents_v12.js +12271 -12118
  222. package/fesm2015/colijnit-corecomponents_v12.js.map +1 -1
  223. package/lib/components/article-tile/article-tile.component.d.ts +22 -22
  224. package/lib/components/article-tile/article-tile.module.d.ts +2 -2
  225. package/lib/components/base/base-input.component.d.ts +182 -182
  226. package/lib/components/base/base.module.d.ts +2 -2
  227. package/lib/components/base/commit-buttons/commit-buttons.component.d.ts +21 -21
  228. package/lib/components/base/commit-buttons/commit-buttons.module.d.ts +2 -2
  229. package/lib/components/base/dialog-base.component.d.ts +4 -4
  230. package/lib/components/base-input-date-picker/base-input-date-picker.directive.d.ts +15 -15
  231. package/lib/components/button/button.component.d.ts +29 -29
  232. package/lib/components/button/button.module.d.ts +2 -2
  233. package/lib/components/calendar/calendar-template.component.d.ts +60 -60
  234. package/lib/components/calendar/calendar.component.d.ts +13 -13
  235. package/lib/components/calendar/calendar.module.d.ts +2 -2
  236. package/lib/components/card/card.component.d.ts +23 -23
  237. package/lib/components/card/card.module.d.ts +2 -2
  238. package/lib/components/carousel/carousel.component.d.ts +23 -23
  239. package/lib/components/carousel/carousel.module.d.ts +6 -6
  240. package/lib/components/carousel-3d/carousel-3d.component.d.ts +55 -55
  241. package/lib/components/carousel-3d/carousel-3d.module.d.ts +2 -2
  242. package/lib/components/carousel-3d/carouselItem.d.ts +13 -13
  243. package/lib/components/checkmark-overlay/checkmark-overlay.component.d.ts +17 -17
  244. package/lib/components/checkmark-overlay/checkmark-overlay.module.d.ts +2 -2
  245. package/lib/components/co-dialog/co-dialog.component.d.ts +23 -23
  246. package/lib/components/co-dialog/co-dialog.module.d.ts +2 -2
  247. package/lib/components/co-dialog-wizard/co-dialog-wizard.component.d.ts +9 -9
  248. package/lib/components/co-dialog-wizard/co-dialog-wizard.module.d.ts +2 -2
  249. package/lib/components/collapsible/collapsible.component.d.ts +22 -22
  250. package/lib/components/collapsible/collapsible.module.d.ts +2 -2
  251. package/lib/components/color-picker/color-picker.component.d.ts +6 -6
  252. package/lib/components/color-picker/color-picker.module.d.ts +2 -2
  253. package/lib/components/core-dialog/confirmation-dialog/confirmation-dialog.component.d.ts +20 -20
  254. package/lib/components/core-dialog/core-dialog.module.d.ts +4 -4
  255. package/lib/components/core-dialog/core-dialog.service.d.ts +15 -15
  256. package/lib/components/core-dialog/core-dynamic-component.service.d.ts +12 -12
  257. package/lib/components/double-calendar/double-calendar.component.d.ts +18 -18
  258. package/lib/components/double-calendar/double-calendar.module.d.ts +2 -2
  259. package/lib/components/filter-item/filter-item-viewmodel.d.ts +9 -9
  260. package/lib/components/filter-item/filter-item.component.d.ts +80 -80
  261. package/lib/components/filter-item/filter-item.module.d.ts +2 -2
  262. package/lib/components/filter-item/filter-viewmodel.d.ts +8 -8
  263. package/lib/components/form/form.component.d.ts +39 -39
  264. package/lib/components/form/form.module.d.ts +2 -2
  265. package/lib/components/grid-toolbar/grid-toolbar.component.d.ts +19 -19
  266. package/lib/components/grid-toolbar/grid-toolbar.module.d.ts +2 -2
  267. package/lib/components/grid-toolbar-button/grid-toolbar-button.component.d.ts +8 -8
  268. package/lib/components/grid-toolbar-button/grid-toolbar-button.module.d.ts +2 -2
  269. package/lib/components/icon/icon-cache.service.d.ts +20 -20
  270. package/lib/components/icon/icon.component.d.ts +17 -17
  271. package/lib/components/icon/icon.module.d.ts +2 -2
  272. package/lib/components/icon-collapse-handle/icon-collapse-handle.component.d.ts +21 -21
  273. package/lib/components/icon-collapse-handle/icon-collapse-handle.module.d.ts +2 -2
  274. package/lib/components/image/image.component.d.ts +20 -20
  275. package/lib/components/image/image.module.d.ts +2 -2
  276. package/lib/components/input-checkbox/input-checkbox.component.d.ts +24 -24
  277. package/lib/components/input-checkbox/input-checkbox.module.d.ts +2 -2
  278. package/lib/components/input-date-picker/input-date-picker.component.d.ts +12 -12
  279. package/lib/components/input-date-picker/input-date-picker.module.d.ts +2 -2
  280. package/lib/components/input-date-range-picker/input-date-range-picker.component.d.ts +20 -20
  281. package/lib/components/input-date-range-picker/input-date-range-picker.module.d.ts +2 -2
  282. package/lib/components/input-number-picker/input-number-picker.component.d.ts +73 -73
  283. package/lib/components/input-number-picker/input-number-picker.module.d.ts +2 -2
  284. package/lib/components/input-radio-button/input-radio-button.component.d.ts +19 -19
  285. package/lib/components/input-radio-button/input-radio-button.module.d.ts +2 -2
  286. package/lib/components/input-scanner/bar-code-scanner.d.ts +7 -7
  287. package/lib/components/input-scanner/input-scanner.component.d.ts +24 -24
  288. package/lib/components/input-scanner/input-scanner.module.d.ts +2 -2
  289. package/lib/components/input-scanner/scanner.service.d.ts +11 -11
  290. package/lib/components/input-search/input-search.component.d.ts +20 -19
  291. package/lib/components/input-search/input-search.module.d.ts +2 -2
  292. package/lib/components/input-text/input-text.component.d.ts +66 -65
  293. package/lib/components/input-text/input-text.module.d.ts +2 -2
  294. package/lib/components/input-textarea/input-textarea.component.d.ts +19 -19
  295. package/lib/components/input-textarea/input-textarea.module.d.ts +2 -2
  296. package/lib/components/level-indicator/level-indicator-level.enum.d.ts +5 -5
  297. package/lib/components/level-indicator/level-indicator.component.d.ts +10 -10
  298. package/lib/components/level-indicator/level-indicator.module.d.ts +2 -2
  299. package/lib/components/list-of-values/list-of-values-multiselect-popup.component.d.ts +25 -25
  300. package/lib/components/list-of-values/list-of-values-popup.component.d.ts +47 -47
  301. package/lib/components/list-of-values/list-of-values.component.d.ts +37 -37
  302. package/lib/components/list-of-values/list-of-values.module.d.ts +2 -2
  303. package/lib/components/loader/loader.component.d.ts +3 -3
  304. package/lib/components/loader/loader.module.d.ts +2 -2
  305. package/lib/components/pagination/paginate.pipe.d.ts +15 -15
  306. package/lib/components/pagination/pagination-instance.d.ts +14 -14
  307. package/lib/components/pagination/pagination.component.d.ts +38 -38
  308. package/lib/components/pagination/pagination.module.d.ts +2 -2
  309. package/lib/components/pagination/pagination.service.d.ts +24 -24
  310. package/lib/components/pagination-bar/pagination-bar.component.d.ts +33 -33
  311. package/lib/components/pagination-bar/pagination-bar.module.d.ts +2 -2
  312. package/lib/components/popup/const/popup-window-token.d.ts +3 -3
  313. package/lib/components/popup/interface/popup-button.d.ts +8 -8
  314. package/lib/components/popup/interface/popup-close-event.d.ts +5 -5
  315. package/lib/components/popup/interface/popup-settings.d.ts +21 -21
  316. package/lib/components/popup/interface/popup.d.ts +9 -9
  317. package/lib/components/popup/model/popup-button-globals.d.ts +9 -9
  318. package/lib/components/popup/model/popup-window.d.ts +21 -21
  319. package/lib/components/popup/popup-buttons.component.d.ts +13 -13
  320. package/lib/components/popup/popup-message-display.component.d.ts +12 -12
  321. package/lib/components/popup/popup-window-shell.component.d.ts +42 -42
  322. package/lib/components/popup/popup.module.d.ts +4 -4
  323. package/lib/components/popup/service/popup-shower.service.d.ts +17 -17
  324. package/lib/components/popup/service/prompt.service.d.ts +17 -17
  325. package/lib/components/popup/text-input-popup.component.d.ts +12 -12
  326. package/lib/components/responsive-text/responsive-text.component.d.ts +4 -4
  327. package/lib/components/responsive-text/responsive-text.module.d.ts +2 -2
  328. package/lib/components/simple-grid/base-simple-grid.component.d.ts +53 -52
  329. package/lib/components/simple-grid/simple-grid-cell.component.d.ts +30 -30
  330. package/lib/components/simple-grid/simple-grid-column.directive.d.ts +43 -42
  331. package/lib/components/simple-grid/simple-grid.component.d.ts +77 -64
  332. package/lib/components/simple-grid/simple-grid.module.d.ts +2 -2
  333. package/lib/components/simple-grid/style/_layout.scss +68 -0
  334. package/lib/components/tile/tile.component.d.ts +16 -16
  335. package/lib/components/tile/tile.module.d.ts +2 -2
  336. package/lib/components/tile-select/tile-select.component.d.ts +8 -8
  337. package/lib/components/tile-select/tile-select.module.d.ts +2 -2
  338. package/lib/components/tooltip/tooltip.component.d.ts +18 -18
  339. package/lib/components/tooltip/tooltip.module.d.ts +2 -2
  340. package/lib/components/validation-error/validation-error.component.d.ts +12 -12
  341. package/lib/components/validation-error/validation-error.module.d.ts +2 -2
  342. package/lib/components/view-mode-buttons/content-view-mode.enum.d.ts +8 -8
  343. package/lib/components/view-mode-buttons/view-mode-buttons.component.d.ts +17 -17
  344. package/lib/components/view-mode-buttons/view-mode-buttons.module.d.ts +2 -2
  345. package/lib/core/constant/default-upper-bound-for-range-components.d.ts +2 -2
  346. package/lib/core/constant/java-max-int.d.ts +1 -1
  347. package/lib/core/constant/number-inputs-key-down-white-list.d.ts +2 -2
  348. package/lib/core/decorator/input-boolean.decorator.d.ts +8 -8
  349. package/lib/core/enum/co-direction.d.ts +6 -6
  350. package/lib/core/enum/co-document-image-display-kind.enum.d.ts +5 -5
  351. package/lib/core/enum/co-document-type.enum.d.ts +5 -5
  352. package/lib/core/enum/co-orientation.d.ts +6 -6
  353. package/lib/core/enum/core-components-icon.enum.d.ts +298 -298
  354. package/lib/core/enum/file-type-internal.enum.d.ts +15 -15
  355. package/lib/core/enum/file-type.enum.d.ts +5 -5
  356. package/lib/core/enum/filterItem-mode.enum.d.ts +15 -15
  357. package/lib/core/enum/input-number-picker-show-mode.enum.d.ts +5 -5
  358. package/lib/core/enum/keyboard-code.enum.d.ts +71 -71
  359. package/lib/core/enum/keyboard-key.enum.d.ts +70 -70
  360. package/lib/core/enum/object-right-type.enum.d.ts +5 -5
  361. package/lib/core/enum/popup-button-type.enum.d.ts +9 -9
  362. package/lib/core/enum/popup-type.enum.d.ts +9 -9
  363. package/lib/core/enum/table-name.enum.d.ts +79 -79
  364. package/lib/core/function/any-nill.function.d.ts +1 -1
  365. package/lib/core/function/is-nill.function.d.ts +1 -1
  366. package/lib/core/function/none-nill.function.d.ts +1 -1
  367. package/lib/core/function/not-nill.function.d.ts +1 -1
  368. package/lib/core/model/bounds-constrained-number-value.d.ts +46 -46
  369. package/lib/core/model/check-precision-and-scale-result.d.ts +4 -4
  370. package/lib/core/model/check-within-stepped-bounds-result.d.ts +8 -8
  371. package/lib/core/model/co-document-right.bo.d.ts +6 -6
  372. package/lib/core/model/co-document.bo.d.ts +61 -61
  373. package/lib/core/model/core-components-icon-svg.d.ts +4 -4
  374. package/lib/core/model/element-position.d.ts +7 -7
  375. package/lib/core/model/event/string-prompt-result-event.d.ts +6 -6
  376. package/lib/core/service/form-input-user-change-listener.service.d.ts +10 -10
  377. package/lib/core/service/form-master.service.d.ts +26 -26
  378. package/lib/core/service/ng-zone-wrapper.service.d.ts +6 -6
  379. package/lib/core/utils/array-utils.d.ts +85 -85
  380. package/lib/core/utils/browser-utils.d.ts +15 -15
  381. package/lib/core/utils/direction-enum-utils.d.ts +5 -5
  382. package/lib/core/utils/event-utils.d.ts +12 -12
  383. package/lib/core/utils/file-utils.d.ts +29 -29
  384. package/lib/core/utils/number-utils.d.ts +89 -89
  385. package/lib/core/utils/object-utils.d.ts +31 -31
  386. package/lib/core/utils/string-utils.d.ts +25 -25
  387. package/lib/core/validator/email.validator.d.ts +2 -2
  388. package/lib/core/validator/equal.validator.d.ts +2 -2
  389. package/lib/core/validator/max-string-length.validator.d.ts +2 -2
  390. package/lib/core/validator/password.validator.d.ts +3 -3
  391. package/lib/core/validator/precision-scale.validator.d.ts +2 -2
  392. package/lib/core/validator/required.validator.d.ts +2 -2
  393. package/lib/directives/clickoutside/click-outside-master.service.d.ts +15 -15
  394. package/lib/directives/clickoutside/click-outside.directive.d.ts +18 -18
  395. package/lib/directives/clickoutside/clickoutside.module.d.ts +2 -2
  396. package/lib/directives/observe-visibility/observe-visibility.directive.d.ts +14 -14
  397. package/lib/directives/observe-visibility/observe-visibility.module.d.ts +2 -2
  398. package/lib/directives/overlay/overlay-parent.directive.d.ts +6 -6
  399. package/lib/directives/overlay/overlay.directive.d.ts +25 -25
  400. package/lib/directives/overlay/overlay.module.d.ts +2 -2
  401. package/lib/directives/ripple/ripple-ref.d.ts +21 -21
  402. package/lib/directives/ripple/ripple-renderer.d.ts +56 -56
  403. package/lib/directives/ripple/ripple.directive.d.ts +56 -56
  404. package/lib/directives/ripple/ripple.module.d.ts +2 -2
  405. package/lib/directives/ripple/scroll-dispatcher.service.d.ts +51 -51
  406. package/lib/directives/ripple/scrollable.directive.d.ts +20 -20
  407. package/lib/directives/ripple/viewport-ruler.service.d.ts +29 -29
  408. package/lib/directives/screen-configuration/screen-configuration.directive.d.ts +32 -32
  409. package/lib/directives/screen-configuration/screen-configuration.module.d.ts +2 -2
  410. package/lib/directives/stopclick/stop-click.directive.d.ts +10 -10
  411. package/lib/directives/stopclick/stop-click.module.d.ts +2 -2
  412. package/lib/directives/template-wrapper/template-wrapper.directive.d.ts +13 -13
  413. package/lib/directives/template-wrapper/template-wrapper.module.d.ts +2 -2
  414. package/lib/directives/tooltip/tooltip-directive.module.d.ts +2 -2
  415. package/lib/directives/tooltip/tooltip.directive.d.ts +20 -20
  416. package/lib/interfaces/dialog-response.interface.d.ts +6 -6
  417. package/lib/interfaces/scanner-input.interface.d.ts +3 -3
  418. package/lib/interfaces/screen-config-adapter-component-interface-name.d.ts +3 -3
  419. package/lib/interfaces/screen-config-adapter.component.interface.d.ts +10 -10
  420. package/lib/model/enum/app-button-type.enum.d.ts +9 -9
  421. package/lib/model/enum/app-popup-type.enum.d.ts +6 -6
  422. package/lib/pipes/append.pipe.d.ts +4 -4
  423. package/lib/pipes/append.pipe.module.d.ts +2 -2
  424. package/lib/pipes/filter.pipe.d.ts +4 -4
  425. package/lib/pipes/filter.pipe.module.d.ts +2 -2
  426. package/lib/pipes/prepend.pipe.d.ts +4 -4
  427. package/lib/pipes/prepend.pipe.module.d.ts +2 -2
  428. package/lib/pipes/price-display-pipe.module.d.ts +2 -2
  429. package/lib/pipes/price-display.pipe.d.ts +4 -4
  430. package/lib/service/base-module-screen-config.service.d.ts +47 -47
  431. package/lib/service/base-module.service.d.ts +22 -22
  432. package/lib/service/color-sequence.service.d.ts +4 -4
  433. package/lib/service/overlay.service.d.ts +13 -13
  434. package/lib/translation/core-components-translation.module.d.ts +4 -4
  435. package/lib/translation/core-components-translation.service.d.ts +6 -6
  436. package/lib/translation/core-dictionary.service.d.ts +12 -12
  437. package/lib/translation/core-localize.pipe.d.ts +7 -7
  438. package/package.json +1 -1
  439. package/public-api.d.ts +126 -126
@@ -1,242 +1,242 @@
1
- import { __decorate } from "tslib";
2
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ComponentFactoryResolver, ElementRef, EventEmitter, forwardRef, HostBinding, Inject, Input, NgZone, Optional, Output, ViewEncapsulation } from '@angular/core';
3
- import { BaseInputComponent } from '../base/base-input.component';
4
- import { InputBoolean } from '../../core/decorator/input-boolean.decorator';
5
- import { BoundsConstrainedNumberValue } from '../../core/model/bounds-constrained-number-value';
6
- import { NUMBER_INPUTS_KEY_DOWN_WHITE_LIST } from '../../core/constant/number-inputs-key-down-white-list';
7
- import { FormInputUserModelChangeListenerService } from '../../core/service/form-input-user-change-listener.service';
8
- import { InputNumberPickerButtonShowMode } from '../../core/enum/input-number-picker-show-mode.enum';
9
- import { IconCacheService } from '../icon/icon-cache.service';
10
- import { CoreComponentsIcon } from '../../core/enum/core-components-icon.enum';
11
- import { SCREEN_CONFIG_ADAPTER_COMPONENT_INTERFACE_NAME } from '../../interfaces/screen-config-adapter-component-interface-name';
12
- import { FormComponent } from '../form/form.component';
13
- import { OverlayService } from '../../service/overlay.service';
14
- import { NgZoneWrapperService } from '../../core/service/ng-zone-wrapper.service';
15
- // A component that lets users pick a number by increasing and decreasing it with buttons, or by typing.
16
- export class InputNumberPickerComponent extends BaseInputComponent {
17
- constructor(formComponent, iconCacheService, overlayService, _ngZone, componentFactoryResolver, changeDetector, formUserChangeListener, ngZoneWrapper, elementRef) {
18
- super(changeDetector, componentFactoryResolver, overlayService, formUserChangeListener, ngZoneWrapper, elementRef);
19
- this.formComponent = formComponent;
20
- this.iconCacheService = iconCacheService;
21
- this.overlayService = overlayService;
22
- this._ngZone = _ngZone;
23
- this.componentFactoryResolver = componentFactoryResolver;
24
- this.ngZoneWrapper = ngZoneWrapper;
25
- this.elementRef = elementRef;
26
- this.modelChangeOnEnter = true;
27
- this.minusIcon = CoreComponentsIcon.MinusSimple;
28
- this.plusIcon = CoreComponentsIcon.PlusSimple;
29
- // Whether to show buttons 'always', 'onFocusOnly', or 'never'
30
- this.buttonShowMode = InputNumberPickerButtonShowMode.Always;
31
- // @override Default true for us.
32
- this.noValidation = true;
33
- // @override
34
- this.modelChange = new EventEmitter();
35
- this.iconClick = new EventEmitter();
36
- this.myKeyDownWhiteList = NUMBER_INPUTS_KEY_DOWN_WHITE_LIST;
37
- this.numberLogic = new BoundsConstrainedNumberValue();
38
- this.minSelected = false;
39
- this.plusSelected = false;
40
- this._numberInputHasFocus = false;
41
- this._changeFromButton = false;
42
- this._delayBeforeStartAutoCountMs = 666;
43
- // the 'speed gears' for auto counting
44
- this._stepFactors = [1, 10, 20];
45
- // increase step size timing
46
- this._msChangeStepFactor = 1000;
47
- // step speed
48
- this._msDoStep = 5;
49
- // hold the mouse down and this increases for a faster auto increment
50
- this._stepFactor = this._stepFactors[0];
51
- this._mayAutoCount = false;
52
- this._numberLogicValueChangeSub = this.numberLogic.valueChange.subscribe((value) => {
53
- if (!this._mayAutoCount) {
54
- this.model = value;
55
- if (!this.modelChangeOnEnter || this._changeFromButton) {
56
- this.modelChange.emit(value);
57
- }
58
- // custom form user chagne listener .next because we don't user super.updateModel() which normally does that for us
59
- if (this._markedAsUserTouched) {
60
- this.formUserChangeListener.userModelChange.next(value);
61
- this.userModelChange.next(value);
62
- }
63
- }
64
- });
65
- }
66
- // @override
67
- set model(model) {
68
- this.setValue(model, true);
69
- super.model = model;
70
- }
71
- get model() {
72
- return super.model;
73
- }
74
- set min(min) {
75
- this.numberLogic.min = min;
76
- }
77
- set step(step) {
78
- this.numberLogic.step = step;
79
- }
80
- set max(max) {
81
- this.numberLogic.max = max;
82
- }
83
- set decimals(decimals) {
84
- this.numberLogic.decimals = decimals;
85
- }
86
- get showButtonsOnFocusOnly() {
87
- return this.buttonShowMode === InputNumberPickerButtonShowMode.OnFocusOnly;
88
- }
89
- get hasLabel() {
90
- return !!this.label;
91
- }
92
- showClass() {
93
- return true;
94
- }
95
- ngOnInit() {
96
- // this.numberLogic.setValue(this.model, true);
97
- // this.numberLogic.init(true);
98
- this._updateButtonsShowState();
99
- }
100
- ngOnDestroy() {
101
- this._numberLogicValueChangeSub.unsubscribe();
102
- clearTimeout(this._autoCountTimeout);
103
- clearTimeout(this._stepIncrementTimeout);
104
- clearTimeout(this._startAutocountTimeout);
105
- }
106
- // Note: recursive through setTimeout().
107
- doIncrementAuto() {
108
- this._mayAutoCount = true;
109
- this.increment(this._stepFactor);
110
- this._ngZone.runOutsideAngular(() => {
111
- this._autoCountTimeout = window.setTimeout(() => {
112
- if (this._mayAutoCount) {
113
- this.doIncrementAuto();
114
- this.changeDetector.detectChanges();
115
- }
116
- }, this._msDoStep);
117
- });
118
- }
119
- handleInputKeyDown(event) {
120
- // event.preventDefault();
121
- if (event.code === 'Enter' || event.code === 'NumpadEnter') {
122
- this.modelChange.next(this.model);
123
- return false;
124
- }
125
- if (this.myKeyDownWhiteList.find((k) => k === event.keyCode) === undefined) {
126
- return false;
127
- }
128
- }
129
- handleBlur() {
130
- this.modelChange.next(this.model);
131
- }
132
- handleChangeModel(value) {
133
- this._changeFromButton = false;
134
- this.numberLogic.setValue(value);
135
- }
136
- // Note: recursive through setTimeout().
137
- doDecrementAuto() {
138
- this._mayAutoCount = true;
139
- this.decrement(this._stepFactor);
140
- this._ngZone.runOutsideAngular(() => {
141
- this._autoCountTimeout = window.setTimeout(() => {
142
- if (this._mayAutoCount) {
143
- this.doDecrementAuto();
144
- this.changeDetector.detectChanges();
145
- }
146
- }, this._msDoStep);
147
- });
148
- }
149
- stopAutoCounting() {
150
- this.minSelected = false;
151
- this.plusSelected = false;
152
- this._mayAutoCount = false;
153
- this._stepFactor = this._stepFactors[0];
154
- }
155
- // Sets the current number value with given newValue, optionally silent (no valueChange event fired).
156
- setValue(newValue, silent = false) {
157
- this.numberLogic.setValue(newValue, silent);
158
- }
159
- increment(steps = 1) {
160
- this._changeFromButton = true;
161
- this.numberLogic.increment(steps);
162
- }
163
- decrement(steps = 1) {
164
- this._changeFromButton = true;
165
- this.numberLogic.decrement(steps);
166
- }
167
- onPlusMouseDown(event) {
168
- if (this.readonly) {
169
- event.preventDefault();
170
- return;
171
- }
172
- this.plusSelected = true;
173
- this._markedAsUserTouched = true;
174
- // keeps focus on input text instead of button
175
- event.preventDefault();
176
- this.increment();
177
- this._mayAutoCount = true;
178
- clearTimeout(this._startAutocountTimeout);
179
- this._startAutocountTimeout = window.setTimeout(() => {
180
- if (this._mayAutoCount) {
181
- this.doIncrementAuto();
182
- this._doIncreaseStepFactor();
183
- }
184
- }, this._delayBeforeStartAutoCountMs);
185
- }
186
- onMinusMouseDown(event) {
187
- if (this.readonly) {
188
- event.preventDefault();
189
- return;
190
- }
191
- this.minSelected = true;
192
- this._markedAsUserTouched = true;
193
- // keeps focus on input text instead of button
194
- event.preventDefault();
195
- this.decrement();
196
- this._mayAutoCount = true;
197
- clearTimeout(this._startAutocountTimeout);
198
- this._startAutocountTimeout = window.setTimeout(() => {
199
- if (this._mayAutoCount) {
200
- this.doDecrementAuto();
201
- this._doIncreaseStepFactor();
202
- }
203
- }, this._delayBeforeStartAutoCountMs);
204
- }
205
- // Note: recursive.
206
- _doIncreaseStepFactor() {
207
- this._stepIncrementTimeout = window.setTimeout(() => {
208
- if (this._mayAutoCount) {
209
- this._stepFactor = this._getNextStepFactorMouseDown();
210
- this._doIncreaseStepFactor();
211
- }
212
- }, this._msChangeStepFactor);
213
- }
214
- _getNextStepFactorMouseDown() {
215
- const curIdx = this._stepFactors.indexOf(this._stepFactor);
216
- if (curIdx < this._stepFactors.length - 1) {
217
- return this._stepFactors[curIdx + 1];
218
- }
219
- return this._stepFactor;
220
- }
221
- // Show or hide + and - buttons. Might hide buttons if number input lost focus and button show mode is on focus only.
222
- _updateButtonsShowState() {
223
- switch (this.buttonShowMode) {
224
- case InputNumberPickerButtonShowMode.Always:
225
- default:
226
- this.showButtons = true;
227
- break;
228
- case InputNumberPickerButtonShowMode.OnFocusOnly:
229
- this.showButtons = this._numberInputHasFocus;
230
- break;
231
- case InputNumberPickerButtonShowMode.Never:
232
- this.showButtons = false;
233
- break;
234
- }
235
- }
236
- }
237
- InputNumberPickerComponent.decorators = [
238
- { type: Component, args: [{
239
- selector: 'co-input-number-picker',
1
+ import { __decorate } from "tslib";
2
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ComponentFactoryResolver, ElementRef, EventEmitter, forwardRef, HostBinding, Inject, Input, NgZone, Optional, Output, ViewEncapsulation } from '@angular/core';
3
+ import { BaseInputComponent } from '../base/base-input.component';
4
+ import { InputBoolean } from '../../core/decorator/input-boolean.decorator';
5
+ import { BoundsConstrainedNumberValue } from '../../core/model/bounds-constrained-number-value';
6
+ import { NUMBER_INPUTS_KEY_DOWN_WHITE_LIST } from '../../core/constant/number-inputs-key-down-white-list';
7
+ import { FormInputUserModelChangeListenerService } from '../../core/service/form-input-user-change-listener.service';
8
+ import { InputNumberPickerButtonShowMode } from '../../core/enum/input-number-picker-show-mode.enum';
9
+ import { IconCacheService } from '../icon/icon-cache.service';
10
+ import { CoreComponentsIcon } from '../../core/enum/core-components-icon.enum';
11
+ import { SCREEN_CONFIG_ADAPTER_COMPONENT_INTERFACE_NAME } from '../../interfaces/screen-config-adapter-component-interface-name';
12
+ import { FormComponent } from '../form/form.component';
13
+ import { OverlayService } from '../../service/overlay.service';
14
+ import { NgZoneWrapperService } from '../../core/service/ng-zone-wrapper.service';
15
+ // A component that lets users pick a number by increasing and decreasing it with buttons, or by typing.
16
+ export class InputNumberPickerComponent extends BaseInputComponent {
17
+ constructor(formComponent, iconCacheService, overlayService, _ngZone, componentFactoryResolver, changeDetector, formUserChangeListener, ngZoneWrapper, elementRef) {
18
+ super(changeDetector, componentFactoryResolver, overlayService, formUserChangeListener, ngZoneWrapper, elementRef);
19
+ this.formComponent = formComponent;
20
+ this.iconCacheService = iconCacheService;
21
+ this.overlayService = overlayService;
22
+ this._ngZone = _ngZone;
23
+ this.componentFactoryResolver = componentFactoryResolver;
24
+ this.ngZoneWrapper = ngZoneWrapper;
25
+ this.elementRef = elementRef;
26
+ this.modelChangeOnEnter = true;
27
+ this.minusIcon = CoreComponentsIcon.MinusSimple;
28
+ this.plusIcon = CoreComponentsIcon.PlusSimple;
29
+ // Whether to show buttons 'always', 'onFocusOnly', or 'never'
30
+ this.buttonShowMode = InputNumberPickerButtonShowMode.Always;
31
+ // @override Default true for us.
32
+ this.noValidation = true;
33
+ // @override
34
+ this.modelChange = new EventEmitter();
35
+ this.iconClick = new EventEmitter();
36
+ this.myKeyDownWhiteList = NUMBER_INPUTS_KEY_DOWN_WHITE_LIST;
37
+ this.numberLogic = new BoundsConstrainedNumberValue();
38
+ this.minSelected = false;
39
+ this.plusSelected = false;
40
+ this._numberInputHasFocus = false;
41
+ this._changeFromButton = false;
42
+ this._delayBeforeStartAutoCountMs = 666;
43
+ // the 'speed gears' for auto counting
44
+ this._stepFactors = [1, 10, 20];
45
+ // increase step size timing
46
+ this._msChangeStepFactor = 1000;
47
+ // step speed
48
+ this._msDoStep = 5;
49
+ // hold the mouse down and this increases for a faster auto increment
50
+ this._stepFactor = this._stepFactors[0];
51
+ this._mayAutoCount = false;
52
+ this._numberLogicValueChangeSub = this.numberLogic.valueChange.subscribe((value) => {
53
+ if (!this._mayAutoCount) {
54
+ this.model = value;
55
+ if (!this.modelChangeOnEnter || this._changeFromButton) {
56
+ this.modelChange.emit(value);
57
+ }
58
+ // custom form user chagne listener .next because we don't user super.updateModel() which normally does that for us
59
+ if (this._markedAsUserTouched) {
60
+ this.formUserChangeListener.userModelChange.next(value);
61
+ this.userModelChange.next(value);
62
+ }
63
+ }
64
+ });
65
+ }
66
+ // @override
67
+ set model(model) {
68
+ this.setValue(model, true);
69
+ super.model = model;
70
+ }
71
+ get model() {
72
+ return super.model;
73
+ }
74
+ set min(min) {
75
+ this.numberLogic.min = min;
76
+ }
77
+ set step(step) {
78
+ this.numberLogic.step = step;
79
+ }
80
+ set max(max) {
81
+ this.numberLogic.max = max;
82
+ }
83
+ set decimals(decimals) {
84
+ this.numberLogic.decimals = decimals;
85
+ }
86
+ get showButtonsOnFocusOnly() {
87
+ return this.buttonShowMode === InputNumberPickerButtonShowMode.OnFocusOnly;
88
+ }
89
+ get hasLabel() {
90
+ return !!this.label;
91
+ }
92
+ showClass() {
93
+ return true;
94
+ }
95
+ ngOnInit() {
96
+ // this.numberLogic.setValue(this.model, true);
97
+ // this.numberLogic.init(true);
98
+ this._updateButtonsShowState();
99
+ }
100
+ ngOnDestroy() {
101
+ this._numberLogicValueChangeSub.unsubscribe();
102
+ clearTimeout(this._autoCountTimeout);
103
+ clearTimeout(this._stepIncrementTimeout);
104
+ clearTimeout(this._startAutocountTimeout);
105
+ }
106
+ // Note: recursive through setTimeout().
107
+ doIncrementAuto() {
108
+ this._mayAutoCount = true;
109
+ this.increment(this._stepFactor);
110
+ this._ngZone.runOutsideAngular(() => {
111
+ this._autoCountTimeout = window.setTimeout(() => {
112
+ if (this._mayAutoCount) {
113
+ this.doIncrementAuto();
114
+ this.changeDetector.detectChanges();
115
+ }
116
+ }, this._msDoStep);
117
+ });
118
+ }
119
+ handleInputKeyDown(event) {
120
+ // event.preventDefault();
121
+ if (event.code === 'Enter' || event.code === 'NumpadEnter') {
122
+ this.modelChange.next(this.model);
123
+ return false;
124
+ }
125
+ if (this.myKeyDownWhiteList.find((k) => k === event.keyCode) === undefined) {
126
+ return false;
127
+ }
128
+ }
129
+ handleBlur() {
130
+ this.modelChange.next(this.model);
131
+ }
132
+ handleChangeModel(value) {
133
+ this._changeFromButton = false;
134
+ this.numberLogic.setValue(value);
135
+ }
136
+ // Note: recursive through setTimeout().
137
+ doDecrementAuto() {
138
+ this._mayAutoCount = true;
139
+ this.decrement(this._stepFactor);
140
+ this._ngZone.runOutsideAngular(() => {
141
+ this._autoCountTimeout = window.setTimeout(() => {
142
+ if (this._mayAutoCount) {
143
+ this.doDecrementAuto();
144
+ this.changeDetector.detectChanges();
145
+ }
146
+ }, this._msDoStep);
147
+ });
148
+ }
149
+ stopAutoCounting() {
150
+ this.minSelected = false;
151
+ this.plusSelected = false;
152
+ this._mayAutoCount = false;
153
+ this._stepFactor = this._stepFactors[0];
154
+ }
155
+ // Sets the current number value with given newValue, optionally silent (no valueChange event fired).
156
+ setValue(newValue, silent = false) {
157
+ this.numberLogic.setValue(newValue, silent);
158
+ }
159
+ increment(steps = 1) {
160
+ this._changeFromButton = true;
161
+ this.numberLogic.increment(steps);
162
+ }
163
+ decrement(steps = 1) {
164
+ this._changeFromButton = true;
165
+ this.numberLogic.decrement(steps);
166
+ }
167
+ onPlusMouseDown(event) {
168
+ if (this.readonly) {
169
+ event.preventDefault();
170
+ return;
171
+ }
172
+ this.plusSelected = true;
173
+ this._markedAsUserTouched = true;
174
+ // keeps focus on input text instead of button
175
+ event.preventDefault();
176
+ this.increment();
177
+ this._mayAutoCount = true;
178
+ clearTimeout(this._startAutocountTimeout);
179
+ this._startAutocountTimeout = window.setTimeout(() => {
180
+ if (this._mayAutoCount) {
181
+ this.doIncrementAuto();
182
+ this._doIncreaseStepFactor();
183
+ }
184
+ }, this._delayBeforeStartAutoCountMs);
185
+ }
186
+ onMinusMouseDown(event) {
187
+ if (this.readonly) {
188
+ event.preventDefault();
189
+ return;
190
+ }
191
+ this.minSelected = true;
192
+ this._markedAsUserTouched = true;
193
+ // keeps focus on input text instead of button
194
+ event.preventDefault();
195
+ this.decrement();
196
+ this._mayAutoCount = true;
197
+ clearTimeout(this._startAutocountTimeout);
198
+ this._startAutocountTimeout = window.setTimeout(() => {
199
+ if (this._mayAutoCount) {
200
+ this.doDecrementAuto();
201
+ this._doIncreaseStepFactor();
202
+ }
203
+ }, this._delayBeforeStartAutoCountMs);
204
+ }
205
+ // Note: recursive.
206
+ _doIncreaseStepFactor() {
207
+ this._stepIncrementTimeout = window.setTimeout(() => {
208
+ if (this._mayAutoCount) {
209
+ this._stepFactor = this._getNextStepFactorMouseDown();
210
+ this._doIncreaseStepFactor();
211
+ }
212
+ }, this._msChangeStepFactor);
213
+ }
214
+ _getNextStepFactorMouseDown() {
215
+ const curIdx = this._stepFactors.indexOf(this._stepFactor);
216
+ if (curIdx < this._stepFactors.length - 1) {
217
+ return this._stepFactors[curIdx + 1];
218
+ }
219
+ return this._stepFactor;
220
+ }
221
+ // Show or hide + and - buttons. Might hide buttons if number input lost focus and button show mode is on focus only.
222
+ _updateButtonsShowState() {
223
+ switch (this.buttonShowMode) {
224
+ case InputNumberPickerButtonShowMode.Always:
225
+ default:
226
+ this.showButtons = true;
227
+ break;
228
+ case InputNumberPickerButtonShowMode.OnFocusOnly:
229
+ this.showButtons = this._numberInputHasFocus;
230
+ break;
231
+ case InputNumberPickerButtonShowMode.Never:
232
+ this.showButtons = false;
233
+ break;
234
+ }
235
+ }
236
+ }
237
+ InputNumberPickerComponent.decorators = [
238
+ { type: Component, args: [{
239
+ selector: 'co-input-number-picker',
240
240
  template: `
241
241
  <div class="icon-wrapper" *ngIf="leftIconData">
242
242
  <co-icon class="input-number-picker-icon" [iconData]="leftIconData" (click)="iconClick.emit($event)"></co-icon>
@@ -265,50 +265,50 @@ InputNumberPickerComponent.decorators = [
265
265
  (mousedown)="onPlusMouseDown($event)"
266
266
  (mouseup)="stopAutoCounting()" (mouseleave)="stopAutoCounting()"></co-button>
267
267
  </div>
268
- `,
269
- providers: [
270
- OverlayService, {
271
- provide: SCREEN_CONFIG_ADAPTER_COMPONENT_INTERFACE_NAME, useExisting: forwardRef(() => InputNumberPickerComponent)
272
- }, {
273
- provide: BaseInputComponent,
274
- useExisting: InputNumberPickerComponent
275
- }
276
- ],
277
- changeDetection: ChangeDetectionStrategy.OnPush,
278
- encapsulation: ViewEncapsulation.None
279
- },] }
280
- ];
281
- InputNumberPickerComponent.ctorParameters = () => [
282
- { type: FormComponent, decorators: [{ type: Optional }] },
283
- { type: IconCacheService, decorators: [{ type: Inject, args: [IconCacheService,] }] },
284
- { type: OverlayService },
285
- { type: NgZone },
286
- { type: ComponentFactoryResolver },
287
- { type: ChangeDetectorRef },
288
- { type: FormInputUserModelChangeListenerService },
289
- { type: NgZoneWrapperService },
290
- { type: ElementRef }
291
- ];
292
- InputNumberPickerComponent.propDecorators = {
293
- model: [{ type: Input }],
294
- modelChangeOnEnter: [{ type: Input }],
295
- leftIconData: [{ type: HostBinding, args: ['class.has-icon',] }, { type: Input }],
296
- min: [{ type: Input }],
297
- step: [{ type: Input }],
298
- max: [{ type: Input }],
299
- ngModelOptions: [{ type: Input }],
300
- minusIcon: [{ type: Input }],
301
- plusIcon: [{ type: Input }],
302
- buttonShowMode: [{ type: Input }],
303
- noValidation: [{ type: Input }],
304
- decimals: [{ type: Input }],
305
- modelChange: [{ type: Output }],
306
- iconClick: [{ type: Output }],
307
- showButtonsOnFocusOnly: [{ type: HostBinding, args: ['class.show-buttons-on-focus-only',] }],
308
- hasLabel: [{ type: HostBinding, args: ['class.has-label',] }],
309
- showClass: [{ type: HostBinding, args: ['class.co-input-number-picker',] }]
310
- };
311
- __decorate([
312
- InputBoolean()
313
- ], InputNumberPickerComponent.prototype, "noValidation", void 0);
268
+ `,
269
+ providers: [
270
+ OverlayService, {
271
+ provide: SCREEN_CONFIG_ADAPTER_COMPONENT_INTERFACE_NAME, useExisting: forwardRef(() => InputNumberPickerComponent)
272
+ }, {
273
+ provide: BaseInputComponent,
274
+ useExisting: InputNumberPickerComponent
275
+ }
276
+ ],
277
+ changeDetection: ChangeDetectionStrategy.OnPush,
278
+ encapsulation: ViewEncapsulation.None
279
+ },] }
280
+ ];
281
+ InputNumberPickerComponent.ctorParameters = () => [
282
+ { type: FormComponent, decorators: [{ type: Optional }] },
283
+ { type: IconCacheService, decorators: [{ type: Inject, args: [IconCacheService,] }] },
284
+ { type: OverlayService },
285
+ { type: NgZone },
286
+ { type: ComponentFactoryResolver },
287
+ { type: ChangeDetectorRef },
288
+ { type: FormInputUserModelChangeListenerService },
289
+ { type: NgZoneWrapperService },
290
+ { type: ElementRef }
291
+ ];
292
+ InputNumberPickerComponent.propDecorators = {
293
+ model: [{ type: Input }],
294
+ modelChangeOnEnter: [{ type: Input }],
295
+ leftIconData: [{ type: HostBinding, args: ['class.has-icon',] }, { type: Input }],
296
+ min: [{ type: Input }],
297
+ step: [{ type: Input }],
298
+ max: [{ type: Input }],
299
+ ngModelOptions: [{ type: Input }],
300
+ minusIcon: [{ type: Input }],
301
+ plusIcon: [{ type: Input }],
302
+ buttonShowMode: [{ type: Input }],
303
+ noValidation: [{ type: Input }],
304
+ decimals: [{ type: Input }],
305
+ modelChange: [{ type: Output }],
306
+ iconClick: [{ type: Output }],
307
+ showButtonsOnFocusOnly: [{ type: HostBinding, args: ['class.show-buttons-on-focus-only',] }],
308
+ hasLabel: [{ type: HostBinding, args: ['class.has-label',] }],
309
+ showClass: [{ type: HostBinding, args: ['class.co-input-number-picker',] }]
310
+ };
311
+ __decorate([
312
+ InputBoolean()
313
+ ], InputNumberPickerComponent.prototype, "noValidation", void 0);
314
314
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtbnVtYmVyLXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvaW5wdXQtbnVtYmVyLXBpY2tlci9pbnB1dC1udW1iZXItcGlja2VyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULHdCQUF3QixFQUFFLFVBQVUsRUFDcEMsWUFBWSxFQUNaLFVBQVUsRUFDVixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBR04sUUFBUSxFQUNSLE1BQU0sRUFFTixpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLDhDQUE4QyxDQUFDO0FBRTFFLE9BQU8sRUFBQyw0QkFBNEIsRUFBQyxNQUFNLGtEQUFrRCxDQUFDO0FBQzlGLE9BQU8sRUFBQyxpQ0FBaUMsRUFBQyxNQUFNLHVEQUF1RCxDQUFDO0FBR3hHLE9BQU8sRUFBQyx1Q0FBdUMsRUFBQyxNQUFNLDREQUE0RCxDQUFDO0FBQ25ILE9BQU8sRUFBQywrQkFBK0IsRUFBQyxNQUFNLG9EQUFvRCxDQUFDO0FBQ25HLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDJDQUEyQyxDQUFDO0FBQzdFLE9BQU8sRUFBQyw4Q0FBOEMsRUFBQyxNQUFNLGlFQUFpRSxDQUFDO0FBQy9ILE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFFN0Qs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Q0FBa0M7dUJBSzlDLFdBQVcsU0FBQyxpQkFBaUI7d0JBSzdCLFdBQVcsU0FBQyw4QkFBOEI7O0FBeEIzQztJQURVLFlBQVksRUFBRTtnRUFDWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgZm9yd2FyZFJlZixcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgTmdab25lLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QmFzZUlucHV0Q29tcG9uZW50fSBmcm9tICcuLi9iYXNlL2Jhc2UtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7SW5wdXRCb29sZWFufSBmcm9tICcuLi8uLi9jb3JlL2RlY29yYXRvci9pbnB1dC1ib29sZWFuLmRlY29yYXRvcic7XG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0JvdW5kc0NvbnN0cmFpbmVkTnVtYmVyVmFsdWV9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWwvYm91bmRzLWNvbnN0cmFpbmVkLW51bWJlci12YWx1ZSc7XG5pbXBvcnQge05VTUJFUl9JTlBVVFNfS0VZX0RPV05fV0hJVEVfTElTVH0gZnJvbSAnLi4vLi4vY29yZS9jb25zdGFudC9udW1iZXItaW5wdXRzLWtleS1kb3duLXdoaXRlLWxpc3QnO1xuaW1wb3J0IHtLZXlib2FyZENvZGV9IGZyb20gJy4uLy4uL2NvcmUvZW51bS9rZXlib2FyZC1jb2RlLmVudW0nO1xuaW1wb3J0IHtJbnB1dFRleHRDb21wb25lbnR9IGZyb20gJy4uL2lucHV0LXRleHQvaW5wdXQtdGV4dC5jb21wb25lbnQnO1xuaW1wb3J0IHtGb3JtSW5wdXRVc2VyTW9kZWxDaGFuZ2VMaXN0ZW5lclNlcnZpY2V9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZS9mb3JtLWlucHV0LXVzZXItY2hhbmdlLWxpc3RlbmVyLnNlcnZpY2UnO1xuaW1wb3J0IHtJbnB1dE51bWJlclBpY2tlckJ1dHRvblNob3dNb2RlfSBmcm9tICcuLi8uLi9jb3JlL2VudW0vaW5wdXQtbnVtYmVyLXBpY2tlci1zaG93LW1vZGUuZW51bSc7XG5pbXBvcnQge0ljb25DYWNoZVNlcnZpY2V9IGZyb20gJy4uL2ljb24vaWNvbi1jYWNoZS5zZXJ2aWNlJztcbmltcG9ydCB7Q29yZUNvbXBvbmVudHNJY29ufSBmcm9tICcuLi8uLi9jb3JlL2VudW0vY29yZS1jb21wb25lbnRzLWljb24uZW51bSc7XG5pbXBvcnQge1NDUkVFTl9DT05GSUdfQURBUFRFUl9DT01QT05FTlRfSU5URVJGQUNFX05BTUV9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvc2NyZWVuLWNvbmZpZy1hZGFwdGVyLWNvbXBvbmVudC1pbnRlcmZhY2UtbmFtZSc7XG5pbXBvcnQge0Zvcm1Db21wb25lbnR9IGZyb20gJy4uL2Zvcm0vZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHtPdmVybGF5U2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZS9vdmVybGF5LnNlcnZpY2UnO1xuaW1wb3J0IHtTYWZlSHRtbH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQge05nWm9uZVdyYXBwZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2Uvbmctem9uZS13cmFwcGVyLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2NvLWlucHV0LW51bWJlci1waWNrZXInLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpY29uLXdyYXBwZXJcIiAqbmdJZj1cImxlZnRJY29uRGF0YVwiPlxuICAgICAgICAgICAgPGNvLWljb24gY2xhc3M9XCJpbnB1dC1udW1iZXItcGlja2VyLWljb25cIiBbaWNvbkRhdGFdPVwibGVmdEljb25EYXRhXCIgKGNsaWNrKT1cImljb25DbGljay5lbWl0KCRldmVudClcIj48L2NvLWljb24+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3BhY2VyXCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uLXdyYXBwZXJcIj5cbiAgICAgICAgICAgIDxjby1idXR0b24gKm5nSWY9XCJzaG93QnV0dG9uc1wiIGNsYXNzPVwibWludXMtb3BlcmF0b3JcIiBbY2xhc3Muc2VsZWN0XT1cIm1pblNlbGVjdGVkXCIgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJyZWFkb25seVwiXG4gICAgICAgICAgICAgICAgICAgICAgIFtpY29uRGF0YV09XCJpY29uQ2FjaGVTZXJ2aWNlLmdldEljb24obWludXNJY29uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwib25NaW51c01vdXNlRG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNldXApPVwic3RvcEF1dG9Db3VudGluZygpXCIgKG1vdXNlbGVhdmUpPVwic3RvcEF1dG9Db3VudGluZygpXCI+PC9jby1idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgW3RhYkluZGV4XT1cInJlYWRvbmx5ID8gLTEgOiAwXCJcbiAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm1vZGVsXCJcbiAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImhhbmRsZUNoYW5nZU1vZGVsKCRldmVudClcIlxuICAgICAgICAgICAgICAgKGtleWRvd24pPVwiaGFuZGxlSW5wdXRLZXlEb3duKCRldmVudClcIlxuICAgICAgICAgICAgICAgKGJsdXIpPVwiaGFuZGxlQmx1cigpXCIvPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uLXdyYXBwZXJcIj5cbiAgICAgICAgICAgIDxjby1idXR0b24gKm5nSWY9XCJzaG93QnV0dG9uc1wiIGNsYXNzPVwicGx1cy1vcGVyYXRvclwiIFtjbGFzcy5zZWxlY3RdPVwicGx1c1NlbGVjdGVkXCIgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJyZWFkb25seVwiXG4gICAgICAgICAgICAgICAgICAgICAgIFtpY29uRGF0YV09XCJpY29uQ2FjaGVTZXJ2aWNlLmdldEljb24ocGx1c0ljb24pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCJvblBsdXNNb3VzZURvd24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgIChtb3VzZXVwKT1cInN0b3BBdXRvQ291bnRpbmcoKVwiIChtb3VzZWxlYXZlKT1cInN0b3BBdXRvQ291bnRpbmcoKVwiPjwvY28tYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICBgLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBPdmVybGF5U2VydmljZSwge1xuICAgICAgICAgICAgcHJvdmlkZTogU0NSRUVOX0NPTkZJR19BREFQVEVSX0NPTVBPTkVOVF9JTlRFUkZBQ0VfTkFNRSwgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gSW5wdXROdW1iZXJQaWNrZXJDb21wb25lbnQpXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEJhc2VJbnB1dENvbXBvbmVudCxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBJbnB1dE51bWJlclBpY2tlckNvbXBvbmVudFxuICAgICAgICB9XSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbi8vIEEgY29tcG9uZW50IHRoYXQgbGV0cyB1c2VycyBwaWNrIGEgbnVtYmVyIGJ5IGluY3JlYXNpbmcgYW5kIGRlY3JlYXNpbmcgaXQgd2l0aCBidXR0b25zLCBvciBieSB0eXBpbmcuXG5leHBvcnQgY2xhc3MgSW5wdXROdW1iZXJQaWNrZXJDb21wb25lbnQgZXh0ZW5kcyBCYXNlSW5wdXRDb21wb25lbnQ8bnVtYmVyPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICAgIC8vIEBvdmVycmlkZVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBtb2RlbChtb2RlbDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0VmFsdWUobW9kZWwsIHRydWUpO1xuICAgICAgICBzdXBlci5tb2RlbCA9IG1vZGVsO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbW9kZWwoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLm1vZGVsO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG1vZGVsQ2hhbmdlT25FbnRlcjogYm9vbGVhbiA9IHRydWU7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmhhcy1pY29uJylcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBsZWZ0SWNvbkRhdGE6IFNhZmVIdG1sIHwgdW5kZWZpbmVkO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IG1pbihtaW46IG51bWJlcikge1xuICAgICAgICB0aGlzLm51bWJlckxvZ2ljLm1pbiA9IG1pbjtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgc3RlcChzdGVwOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5udW1iZXJMb2dpYy5zdGVwID0gc3RlcDtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgbWF4KG1heDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMubnVtYmVyTG9naWMubWF4ID0gbWF4O1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG5nTW9kZWxPcHRpb25zOiBhbnk7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBtaW51c0ljb246IENvcmVDb21wb25lbnRzSWNvbiA9IENvcmVDb21wb25lbnRzSWNvbi5NaW51c1NpbXBsZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHBsdXNJY29uOiBDb3JlQ29tcG9uZW50c0ljb24gPSBDb3JlQ29tcG9uZW50c0ljb24uUGx1c1NpbXBsZTtcblxuICAgIC8vIFdoZXRoZXIgdG8gc2hvdyBidXR0b25zICdhbHdheXMnLCAnb25Gb2N1c09ubHknLCBvciAnbmV2ZXInXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgYnV0dG9uU2hvd01vZGU6IElucHV0TnVtYmVyUGlja2VyQnV0dG9uU2hvd01vZGUgPSBJbnB1dE51bWJlclBpY2tlckJ1dHRvblNob3dNb2RlLkFsd2F5cztcblxuICAgIC8vIEBvdmVycmlkZSBEZWZhdWx0IHRydWUgZm9yIHVzLlxuICAgIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKVxuICAgIHB1YmxpYyBub1ZhbGlkYXRpb246IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGRlY2ltYWxzKGRlY2ltYWxzOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5udW1iZXJMb2dpYy5kZWNpbWFscyA9IGRlY2ltYWxzO1xuICAgIH1cblxuICAgIC8vIEBvdmVycmlkZVxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyByZWFkb25seSBtb2RlbENoYW5nZTogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyByZWFkb25seSBpY29uQ2xpY2s6IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8TW91c2VFdmVudD4oKTtcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3Muc2hvdy1idXR0b25zLW9uLWZvY3VzLW9ubHknKVxuICAgIHB1YmxpYyBnZXQgc2hvd0J1dHRvbnNPbkZvY3VzT25seSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnV0dG9uU2hvd01vZGUgPT09IElucHV0TnVtYmVyUGlja2VyQnV0dG9uU2hvd01vZGUuT25Gb2N1c09ubHk7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5oYXMtbGFiZWwnKVxuICAgIHB1YmxpYyBnZXQgaGFzTGFiZWwoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMubGFiZWw7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5jby1pbnB1dC1udW1iZXItcGlja2VyJylcbiAgICBwdWJsaWMgc2hvd0NsYXNzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvd0J1dHRvbnM6IGJvb2xlYW47XG5cbiAgICBwdWJsaWMgcmVhZG9ubHkgbXlLZXlEb3duV2hpdGVMaXN0OiBLZXlib2FyZENvZGVbXSA9IE5VTUJFUl9JTlBVVFNfS0VZX0RPV05fV0hJVEVfTElTVDtcblxuICAgIHB1YmxpYyByZWFkb25seSBudW1iZXJMb2dpYzogQm91bmRzQ29uc3RyYWluZWROdW1iZXJWYWx1ZSA9IG5ldyBCb3VuZHNDb25zdHJhaW5lZE51bWJlclZhbHVlKCk7XG5cbiAgICBwdWJsaWMgbWluU2VsZWN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgcGx1c1NlbGVjdGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIF9udW1iZXJJbnB1dEhhc0ZvY3VzOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfY2hhbmdlRnJvbUJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBfbnVtYmVyTG9naWNWYWx1ZUNoYW5nZVN1YjogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2RlbGF5QmVmb3JlU3RhcnRBdXRvQ291bnRNczogbnVtYmVyID0gNjY2O1xuICAgIC8vIHRoZSAnc3BlZWQgZ2VhcnMnIGZvciBhdXRvIGNvdW50aW5nXG4gICAgcHJpdmF0ZSByZWFkb25seSBfc3RlcEZhY3RvcnM6IG51bWJlcltdID0gWzEsIDEwLCAyMF07XG4gICAgLy8gaW5jcmVhc2Ugc3RlcCBzaXplIHRpbWluZ1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX21zQ2hhbmdlU3RlcEZhY3RvcjogbnVtYmVyID0gMTAwMDtcbiAgICAvLyBzdGVwIHNwZWVkXG4gICAgcHJpdmF0ZSByZWFkb25seSBfbXNEb1N0ZXA6IG51bWJlciA9IDU7XG4gICAgLy8gaG9sZCB0aGUgbW91c2UgZG93biBhbmQgdGhpcyBpbmNyZWFzZXMgZm9yIGEgZmFzdGVyIGF1dG8gaW5jcmVtZW50XG4gICAgcHJpdmF0ZSBfc3RlcEZhY3RvcjogbnVtYmVyID0gdGhpcy5fc3RlcEZhY3RvcnNbMF07XG4gICAgcHJpdmF0ZSBfbWF5QXV0b0NvdW50OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIF9hdXRvQ291bnRUaW1lb3V0OiBudW1iZXI7XG4gICAgcHJpdmF0ZSBfc3RlcEluY3JlbWVudFRpbWVvdXQ6IG51bWJlcjtcbiAgICBwcml2YXRlIF9zdGFydEF1dG9jb3VudFRpbWVvdXQ6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBAT3B0aW9uYWwoKSBwdWJsaWMgZm9ybUNvbXBvbmVudDogRm9ybUNvbXBvbmVudCxcbiAgICAgICAgQEluamVjdChJY29uQ2FjaGVTZXJ2aWNlKSBwdWJsaWMgaWNvbkNhY2hlU2VydmljZTogSWNvbkNhY2hlU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIG92ZXJsYXlTZXJ2aWNlOiBPdmVybGF5U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfbmdab25lOiBOZ1pvbmUsXG4gICAgICAgIHByb3RlY3RlZCBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICAgICAgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBmb3JtVXNlckNoYW5nZUxpc3RlbmVyOiBGb3JtSW5wdXRVc2VyTW9kZWxDaGFuZ2VMaXN0ZW5lclNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBuZ1pvbmVXcmFwcGVyPzogTmdab25lV3JhcHBlclNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBlbGVtZW50UmVmPzogRWxlbWVudFJlZixcbiAgICApIHtcbiAgICAgICAgc3VwZXIoY2hhbmdlRGV0ZWN0b3IsIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgb3ZlcmxheVNlcnZpY2UsIGZvcm1Vc2VyQ2hhbmdlTGlzdGVuZXIsIG5nWm9uZVdyYXBwZXIsIGVsZW1lbnRSZWYpO1xuXG4gICAgICAgIHRoaXMuX251bWJlckxvZ2ljVmFsdWVDaGFuZ2VTdWIgPSB0aGlzLm51bWJlckxvZ2ljLnZhbHVlQ2hhbmdlLnN1YnNjcmliZSgodmFsdWU6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9tYXlBdXRvQ291bnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm1vZGVsQ2hhbmdlT25FbnRlciB8fCB0aGlzLl9jaGFuZ2VGcm9tQnV0dG9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWxDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGN1c3RvbSBmb3JtIHVzZXIgY2hhZ25lIGxpc3RlbmVyIC5uZXh0IGJlY2F1c2Ugd2UgZG9uJ3QgdXNlciBzdXBlci51cGRhdGVNb2RlbCgpIHdoaWNoIG5vcm1hbGx5IGRvZXMgdGhhdCBmb3IgdXNcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fbWFya2VkQXNVc2VyVG91Y2hlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Vc2VyQ2hhbmdlTGlzdGVuZXIudXNlck1vZGVsQ2hhbmdlLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZXJNb2RlbENoYW5nZS5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICAvLyB0aGlzLm51bWJlckxvZ2ljLnNldFZhbHVlKHRoaXMubW9kZWwsIHRydWUpO1xuICAgICAgICAvLyB0aGlzLm51bWJlckxvZ2ljLmluaXQodHJ1ZSk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUJ1dHRvbnNTaG93U3RhdGUoKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbnVtYmVyTG9naWNWYWx1ZUNoYW5nZVN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fYXV0b0NvdW50VGltZW91dCk7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9zdGVwSW5jcmVtZW50VGltZW91dCk7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9zdGFydEF1dG9jb3VudFRpbWVvdXQpO1xuICAgIH1cblxuICAgIC8vIE5vdGU6IHJlY3Vyc2l2ZSB0aHJvdWdoIHNldFRpbWVvdXQoKS5cbiAgICBwdWJsaWMgZG9JbmNyZW1lbnRBdXRvKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9tYXlBdXRvQ291bnQgPSB0cnVlO1xuXG4gICAgICAgIHRoaXMuaW5jcmVtZW50KHRoaXMuX3N0ZXBGYWN0b3IpO1xuXG4gICAgICAgIHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9hdXRvQ291bnRUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9tYXlBdXRvQ291bnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kb0luY3JlbWVudEF1dG8oKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgdGhpcy5fbXNEb1N0ZXApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGFuZGxlSW5wdXRLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogYm9vbGVhbiB7XG4gICAgICAgIC8vIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmIChldmVudC5jb2RlID09PSAnRW50ZXInIHx8IGV2ZW50LmNvZGUgPT09ICdOdW1wYWRFbnRlcicpIHtcbiAgICAgICAgICAgIHRoaXMubW9kZWxDaGFuZ2UubmV4dCh0aGlzLm1vZGVsKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5teUtleURvd25XaGl0ZUxpc3QuZmluZCgoaykgPT4gayA9PT0gZXZlbnQua2V5Q29kZSkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGhhbmRsZUJsdXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubW9kZWxDaGFuZ2UubmV4dCh0aGlzLm1vZGVsKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGFuZGxlQ2hhbmdlTW9kZWwodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9jaGFuZ2VGcm9tQnV0dG9uID0gZmFsc2U7XG4gICAgICAgIHRoaXMubnVtYmVyTG9naWMuc2V0VmFsdWUodmFsdWUpO1xuICAgIH1cblxuICAgIC8vIE5vdGU6IHJlY3Vyc2l2ZSB0aHJvdWdoIHNldFRpbWVvdXQoKS5cbiAgICBwdWJsaWMgZG9EZWNyZW1lbnRBdXRvKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9tYXlBdXRvQ291bnQgPSB0cnVlO1xuXG4gICAgICAgIHRoaXMuZGVjcmVtZW50KHRoaXMuX3N0ZXBGYWN0b3IpO1xuXG4gICAgICAgIHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9hdXRvQ291bnRUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9tYXlBdXRvQ291bnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kb0RlY3JlbWVudEF1dG8oKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgdGhpcy5fbXNEb1N0ZXApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RvcEF1dG9Db3VudGluZygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5taW5TZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnBsdXNTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9tYXlBdXRvQ291bnQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RlcEZhY3RvciA9IHRoaXMuX3N0ZXBGYWN0b3JzWzBdO1xuICAgIH1cblxuICAgIC8vIFNldHMgdGhlIGN1cnJlbnQgbnVtYmVyIHZhbHVlIHdpdGggZ2l2ZW4gbmV3VmFsdWUsIG9wdGlvbmFsbHkgc2lsZW50IChubyB2YWx1ZUNoYW5nZSBldmVudCBmaXJlZCkuXG4gICAgcHVibGljIHNldFZhbHVlKG5ld1ZhbHVlOiBudW1iZXIsIHNpbGVudDogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIHRoaXMubnVtYmVyTG9naWMuc2V0VmFsdWUobmV3VmFsdWUsIHNpbGVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIGluY3JlbWVudChzdGVwczogbnVtYmVyID0gMSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jaGFuZ2VGcm9tQnV0dG9uID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5udW1iZXJMb2dpYy5pbmNyZW1lbnQoc3RlcHMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBkZWNyZW1lbnQoc3RlcHM6IG51bWJlciA9IDEpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2hhbmdlRnJvbUJ1dHRvbiA9IHRydWU7XG4gICAgICAgIHRoaXMubnVtYmVyTG9naWMuZGVjcmVtZW50KHN0ZXBzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25QbHVzTW91c2VEb3duKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5yZWFkb25seSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBsdXNTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX21hcmtlZEFzVXNlclRvdWNoZWQgPSB0cnVlO1xuXG4gICAgICAgIC8vIGtlZXBzIGZvY3VzIG9uIGlucHV0IHRleHQgaW5zdGVhZCBvZiBidXR0b25cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICB0aGlzLmluY3JlbWVudCgpO1xuICAgICAgICB0aGlzLl9tYXlBdXRvQ291bnQgPSB0cnVlO1xuXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9zdGFydEF1dG9jb3VudFRpbWVvdXQpO1xuICAgICAgICB0aGlzLl9zdGFydEF1dG9jb3VudFRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5fbWF5QXV0b0NvdW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kb0luY3JlbWVudEF1dG8oKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9kb0luY3JlYXNlU3RlcEZhY3RvcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCB0aGlzLl9kZWxheUJlZm9yZVN0YXJ0QXV0b0NvdW50TXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbk1pbnVzTW91c2VEb3duKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5yZWFkb25seSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1pblNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fbWFya2VkQXNVc2VyVG91Y2hlZCA9IHRydWU7XG4gICAgICAgIC8vIGtlZXBzIGZvY3VzIG9uIGlucHV0IHRleHQgaW5zdGVhZCBvZiBidXR0b25cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICB0aGlzLmRlY3JlbWVudCgpO1xuICAgICAgICB0aGlzLl9tYXlBdXRvQ291bnQgPSB0cnVlO1xuXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9zdGFydEF1dG9jb3VudFRpbWVvdXQpO1xuICAgICAgICB0aGlzLl9zdGFydEF1dG9jb3VudFRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5fbWF5QXV0b0NvdW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kb0RlY3JlbWVudEF1dG8oKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9kb0luY3JlYXNlU3RlcEZhY3RvcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCB0aGlzLl9kZWxheUJlZm9yZVN0YXJ0QXV0b0NvdW50TXMpO1xuICAgIH1cblxuICAgIC8vIE5vdGU6IHJlY3Vyc2l2ZS5cbiAgICBwcml2YXRlIF9kb0luY3JlYXNlU3RlcEZhY3RvcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3RlcEluY3JlbWVudFRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5fbWF5QXV0b0NvdW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RlcEZhY3RvciA9IHRoaXMuX2dldE5leHRTdGVwRmFjdG9yTW91c2VEb3duKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZG9JbmNyZWFzZVN0ZXBGYWN0b3IoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgdGhpcy5fbXNDaGFuZ2VTdGVwRmFjdG9yKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9nZXROZXh0U3RlcEZhY3Rvck1vdXNlRG93bigpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBjdXJJZHg6IG51bWJlciA9IHRoaXMuX3N0ZXBGYWN0b3JzLmluZGV4T2YodGhpcy5fc3RlcEZhY3Rvcik7XG4gICAgICAgIGlmIChjdXJJZHggPCB0aGlzLl9zdGVwRmFjdG9ycy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RlcEZhY3RvcnNbY3VySWR4ICsgMV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0ZXBGYWN0b3I7XG4gICAgfVxuXG4gICAgLy8gU2hvdyBvciBoaWRlICsgYW5kIC0gYnV0dG9ucy4gTWlnaHQgaGlkZSBidXR0b25zIGlmIG51bWJlciBpbnB1dCBsb3N0IGZvY3VzIGFuZCBidXR0b24gc2hvdyBtb2RlIGlzIG9uIGZvY3VzIG9ubHkuXG4gICAgcHJpdmF0ZSBfdXBkYXRlQnV0dG9uc1Nob3dTdGF0ZSgpOiB2b2lkIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLmJ1dHRvblNob3dNb2RlKSB7XG4gICAgICAgICAgICBjYXNlIElucHV0TnVtYmVyUGlja2VyQnV0dG9uU2hvd01vZGUuQWx3YXlzOlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dCdXR0b25zID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgSW5wdXROdW1iZXJQaWNrZXJCdXR0b25TaG93TW9kZS5PbkZvY3VzT25seTpcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dCdXR0b25zID0gdGhpcy5fbnVtYmVySW5wdXRIYXNGb2N1cztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgSW5wdXROdW1iZXJQaWNrZXJCdXR0b25TaG93TW9kZS5OZXZlcjpcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dCdXR0b25zID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=