@pepperi-addons/ngx-lib 0.4.1-cards-list-scroll.32 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (752) hide show
  1. package/address/address.component.d.ts +30 -30
  2. package/address/address.module.d.ts +15 -15
  3. package/address/index.d.ts +5 -5
  4. package/address/public-api.d.ts +2 -2
  5. package/attachment/attachment.component.d.ts +85 -85
  6. package/attachment/attachment.module.d.ts +14 -14
  7. package/attachment/index.d.ts +5 -5
  8. package/attachment/public-api.d.ts +2 -2
  9. package/bread-crumbs/bread-crumbs.component.d.ts +27 -27
  10. package/bread-crumbs/bread-crumbs.model.d.ts +11 -11
  11. package/bread-crumbs/bread-crumbs.module.d.ts +15 -15
  12. package/bread-crumbs/index.d.ts +5 -5
  13. package/bread-crumbs/public-api.d.ts +3 -3
  14. package/button/button.component.d.ts +102 -102
  15. package/button/button.model.d.ts +14 -14
  16. package/button/button.module.d.ts +13 -13
  17. package/button/index.d.ts +5 -5
  18. package/button/public-api.d.ts +3 -3
  19. package/carousel/carousel-item.directive.d.ts +12 -12
  20. package/carousel/carousel.component.d.ts +148 -148
  21. package/carousel/carousel.module.d.ts +8 -8
  22. package/carousel/index.d.ts +5 -5
  23. package/carousel/public-api.d.ts +3 -3
  24. package/checkbox/checkbox.component.d.ts +50 -50
  25. package/checkbox/checkbox.module.d.ts +19 -19
  26. package/checkbox/index.d.ts +5 -5
  27. package/checkbox/public-api.d.ts +2 -2
  28. package/chips/chips.component.d.ts +104 -93
  29. package/chips/chips.component.theme.scss +16 -7
  30. package/chips/chips.model.d.ts +14 -14
  31. package/chips/chips.module.d.ts +20 -20
  32. package/chips/chips.service.d.ts +15 -15
  33. package/chips/index.d.ts +5 -5
  34. package/chips/public-api.d.ts +3 -3
  35. package/color/color-picker.component.d.ts +57 -57
  36. package/color/color.component.d.ts +30 -30
  37. package/color/color.model.d.ts +1 -1
  38. package/color/color.module.d.ts +26 -26
  39. package/color/index.d.ts +5 -5
  40. package/color/public-api.d.ts +3 -3
  41. package/core/clipboard/clipboard.directive.d.ts +5 -5
  42. package/core/clipboard/clipboard.service.d.ts +5 -5
  43. package/core/clipboard/index.d.ts +1 -1
  44. package/core/clipboard/public-api.d.ts +2 -2
  45. package/core/common/directives/auto-width.directive.d.ts +19 -19
  46. package/core/common/directives/button-blur.directive.d.ts +9 -9
  47. package/core/common/directives/button-loader.directive.d.ts +26 -26
  48. package/core/common/directives/data-qa.directive.d.ts +11 -11
  49. package/core/common/directives/div-loader.directive.d.ts +21 -21
  50. package/core/common/directives/index.d.ts +1 -1
  51. package/core/common/directives/menu-blur.directive.d.ts +10 -10
  52. package/core/common/directives/prevent-multi-click.directive.d.ts +7 -7
  53. package/core/common/directives/print.directive.d.ts +75 -75
  54. package/core/common/directives/public-api.d.ts +8 -8
  55. package/core/common/index.d.ts +1 -1
  56. package/core/common/model/index.d.ts +1 -1
  57. package/core/common/model/papi.model.d.ts +2 -2
  58. package/core/common/model/public-api.d.ts +3 -3
  59. package/core/common/model/utilities.model.d.ts +5 -5
  60. package/core/common/model/wapi.model.d.ts +202 -202
  61. package/core/common/pipes/common-pipes.d.ts +57 -57
  62. package/core/common/pipes/date-ago.pipe.d.ts +11 -11
  63. package/core/common/pipes/index.d.ts +1 -1
  64. package/core/common/pipes/public-api.d.ts +2 -2
  65. package/core/common/public-api.d.ts +4 -4
  66. package/core/common/services/addon.service.d.ts +50 -48
  67. package/core/common/services/color.service.d.ts +51 -51
  68. package/core/common/services/cookie.service.d.ts +53 -53
  69. package/core/common/services/data-convertor.service.d.ts +45 -45
  70. package/core/common/services/file.service.d.ts +27 -27
  71. package/core/common/services/index.d.ts +1 -1
  72. package/core/common/services/jwt-helper.service.d.ts +13 -13
  73. package/core/common/services/public-api.d.ts +11 -11
  74. package/core/common/services/session.service.d.ts +18 -18
  75. package/core/common/services/translate.service.d.ts +12 -12
  76. package/core/common/services/utilities.service.d.ts +39 -39
  77. package/core/common/services/validator.service.d.ts +31 -31
  78. package/core/common/services/window-scrolling.service.d.ts +10 -10
  79. package/core/customization/customization.model.d.ts +277 -277
  80. package/core/customization/customization.service.d.ts +159 -159
  81. package/core/customization/index.d.ts +1 -1
  82. package/core/customization/public-api.d.ts +2 -2
  83. package/core/http/index.d.ts +1 -1
  84. package/core/http/interceptors/error.interceptor.d.ts +8 -8
  85. package/core/http/interceptors/index.d.ts +11 -11
  86. package/core/http/interceptors/loader.interceptor.d.ts +11 -11
  87. package/core/http/interceptors/profiler.interceptor.d.ts +8 -8
  88. package/core/http/public-api.d.ts +2 -2
  89. package/core/http/services/http.service.d.ts +28 -28
  90. package/core/http/services/loader.service.d.ts +13 -13
  91. package/core/index.d.ts +1 -1
  92. package/core/layout/index.d.ts +1 -1
  93. package/core/layout/layout.service.d.ts +36 -36
  94. package/core/layout/public-api.d.ts +2 -2
  95. package/core/layout/rtl.directive.d.ts +21 -21
  96. package/core/portal/attach.directive.d.ts +13 -13
  97. package/core/portal/index.d.ts +1 -1
  98. package/core/portal/portal.service.d.ts +12 -12
  99. package/core/portal/public-api.d.ts +3 -3
  100. package/core/portal/target.directive.d.ts +12 -12
  101. package/core/public-api.d.ts +7 -7
  102. package/core/scroll-to/index.d.ts +1 -1
  103. package/core/scroll-to/public-api.d.ts +1 -1
  104. package/core/scroll-to/scroll-to.service.d.ts +11 -11
  105. package/date/date.component.d.ts +70 -69
  106. package/date/date.model.d.ts +31 -31
  107. package/date/date.module.d.ts +23 -23
  108. package/date/index.d.ts +5 -5
  109. package/date/public-api.d.ts +2 -2
  110. package/dialog/default-dialog.component.d.ts +12 -12
  111. package/dialog/dialog.component.d.ts +13 -13
  112. package/dialog/dialog.model.d.ts +31 -31
  113. package/dialog/dialog.module.d.ts +18 -18
  114. package/dialog/dialog.service.d.ts +27 -27
  115. package/dialog/index.d.ts +5 -5
  116. package/dialog/public-api.d.ts +4 -4
  117. package/draggable-items/draggable-item/draggable-item.component.d.ts +11 -11
  118. package/draggable-items/draggable-items.component.d.ts +36 -36
  119. package/draggable-items/draggable-items.model.d.ts +11 -11
  120. package/draggable-items/draggable-items.module.d.ts +18 -18
  121. package/draggable-items/index.d.ts +5 -5
  122. package/draggable-items/public-api.d.ts +4 -4
  123. package/esm2020/address/address.component.mjs +108 -108
  124. package/esm2020/address/address.module.mjs +53 -53
  125. package/esm2020/address/pepperi-addons-ngx-lib-address.mjs +4 -4
  126. package/esm2020/address/public-api.mjs +5 -5
  127. package/esm2020/attachment/attachment.component.mjs +219 -219
  128. package/esm2020/attachment/attachment.module.mjs +49 -49
  129. package/esm2020/attachment/pepperi-addons-ngx-lib-attachment.mjs +4 -4
  130. package/esm2020/attachment/public-api.mjs +5 -5
  131. package/esm2020/bread-crumbs/bread-crumbs.component.mjs +84 -84
  132. package/esm2020/bread-crumbs/bread-crumbs.model.mjs +6 -6
  133. package/esm2020/bread-crumbs/bread-crumbs.module.mjs +49 -49
  134. package/esm2020/bread-crumbs/pepperi-addons-ngx-lib-bread-crumbs.mjs +4 -4
  135. package/esm2020/bread-crumbs/public-api.mjs +6 -6
  136. package/esm2020/button/button.component.mjs +137 -137
  137. package/esm2020/button/button.model.mjs +5 -5
  138. package/esm2020/button/button.module.mjs +45 -45
  139. package/esm2020/button/pepperi-addons-ngx-lib-button.mjs +4 -4
  140. package/esm2020/button/public-api.mjs +6 -6
  141. package/esm2020/carousel/carousel-item.directive.mjs +32 -32
  142. package/esm2020/carousel/carousel.component.mjs +736 -736
  143. package/esm2020/carousel/carousel.module.mjs +16 -16
  144. package/esm2020/carousel/pepperi-addons-ngx-lib-carousel.mjs +4 -4
  145. package/esm2020/carousel/public-api.mjs +7 -7
  146. package/esm2020/checkbox/checkbox.component.mjs +167 -167
  147. package/esm2020/checkbox/checkbox.module.mjs +62 -62
  148. package/esm2020/checkbox/pepperi-addons-ngx-lib-checkbox.mjs +4 -4
  149. package/esm2020/checkbox/public-api.mjs +5 -5
  150. package/esm2020/chips/chips.component.mjs +190 -158
  151. package/esm2020/chips/chips.model.mjs +1 -1
  152. package/esm2020/chips/chips.module.mjs +80 -80
  153. package/esm2020/chips/chips.service.mjs +44 -44
  154. package/esm2020/chips/pepperi-addons-ngx-lib-chips.mjs +4 -4
  155. package/esm2020/chips/public-api.mjs +6 -6
  156. package/esm2020/color/color-picker.component.mjs +197 -197
  157. package/esm2020/color/color.component.mjs +89 -89
  158. package/esm2020/color/color.model.mjs +1 -1
  159. package/esm2020/color/color.module.mjs +92 -92
  160. package/esm2020/color/pepperi-addons-ngx-lib-color.mjs +4 -4
  161. package/esm2020/color/public-api.mjs +6 -6
  162. package/esm2020/core/clipboard/clipboard.directive.mjs +23 -23
  163. package/esm2020/core/clipboard/clipboard.service.mjs +13 -13
  164. package/esm2020/core/clipboard/index.mjs +4 -4
  165. package/esm2020/core/clipboard/public-api.mjs +5 -5
  166. package/esm2020/core/common/directives/auto-width.directive.mjs +76 -76
  167. package/esm2020/core/common/directives/button-blur.directive.mjs +23 -23
  168. package/esm2020/core/common/directives/button-loader.directive.mjs +111 -111
  169. package/esm2020/core/common/directives/data-qa.directive.mjs +22 -22
  170. package/esm2020/core/common/directives/div-loader.directive.mjs +60 -60
  171. package/esm2020/core/common/directives/index.mjs +4 -4
  172. package/esm2020/core/common/directives/menu-blur.directive.mjs +31 -31
  173. package/esm2020/core/common/directives/prevent-multi-click.directive.mjs +26 -26
  174. package/esm2020/core/common/directives/print.directive.mjs +144 -144
  175. package/esm2020/core/common/directives/public-api.mjs +12 -12
  176. package/esm2020/core/common/index.mjs +4 -4
  177. package/esm2020/core/common/model/index.mjs +4 -4
  178. package/esm2020/core/common/model/papi.model.mjs +2 -2
  179. package/esm2020/core/common/model/public-api.mjs +6 -6
  180. package/esm2020/core/common/model/utilities.model.mjs +56 -56
  181. package/esm2020/core/common/model/wapi.model.mjs +156 -156
  182. package/esm2020/core/common/pipes/common-pipes.mjs +166 -166
  183. package/esm2020/core/common/pipes/date-ago.pipe.mjs +45 -45
  184. package/esm2020/core/common/pipes/index.mjs +4 -4
  185. package/esm2020/core/common/pipes/public-api.mjs +5 -5
  186. package/esm2020/core/common/public-api.mjs +7 -7
  187. package/esm2020/core/common/services/addon.service.mjs +203 -189
  188. package/esm2020/core/common/services/color.service.mjs +358 -358
  189. package/esm2020/core/common/services/cookie.service.mjs +152 -152
  190. package/esm2020/core/common/services/data-convertor.service.mjs +121 -121
  191. package/esm2020/core/common/services/file.service.mjs +212 -212
  192. package/esm2020/core/common/services/index.mjs +4 -4
  193. package/esm2020/core/common/services/jwt-helper.service.mjs +105 -105
  194. package/esm2020/core/common/services/public-api.mjs +14 -14
  195. package/esm2020/core/common/services/session.service.mjs +70 -70
  196. package/esm2020/core/common/services/translate.service.mjs +45 -45
  197. package/esm2020/core/common/services/utilities.service.mjs +301 -299
  198. package/esm2020/core/common/services/validator.service.mjs +271 -271
  199. package/esm2020/core/common/services/window-scrolling.service.mjs +31 -31
  200. package/esm2020/core/customization/customization.model.mjs +301 -301
  201. package/esm2020/core/customization/customization.service.mjs +770 -770
  202. package/esm2020/core/customization/index.mjs +4 -4
  203. package/esm2020/core/customization/public-api.mjs +5 -5
  204. package/esm2020/core/http/index.mjs +4 -4
  205. package/esm2020/core/http/interceptors/error.interceptor.mjs +26 -26
  206. package/esm2020/core/http/interceptors/index.mjs +23 -23
  207. package/esm2020/core/http/interceptors/loader.interceptor.mjs +31 -31
  208. package/esm2020/core/http/interceptors/profiler.interceptor.mjs +31 -31
  209. package/esm2020/core/http/public-api.mjs +5 -5
  210. package/esm2020/core/http/services/http.service.mjs +154 -154
  211. package/esm2020/core/http/services/loader.service.mjs +49 -49
  212. package/esm2020/core/index.mjs +4 -4
  213. package/esm2020/core/layout/index.mjs +4 -4
  214. package/esm2020/core/layout/layout.service.mjs +167 -167
  215. package/esm2020/core/layout/public-api.mjs +5 -5
  216. package/esm2020/core/layout/rtl.directive.mjs +43 -43
  217. package/esm2020/core/portal/attach.directive.mjs +26 -26
  218. package/esm2020/core/portal/index.mjs +4 -4
  219. package/esm2020/core/portal/portal.service.mjs +35 -35
  220. package/esm2020/core/portal/public-api.mjs +6 -6
  221. package/esm2020/core/portal/target.directive.mjs +23 -23
  222. package/esm2020/core/public-api.mjs +10 -10
  223. package/esm2020/core/scroll-to/index.mjs +4 -4
  224. package/esm2020/core/scroll-to/public-api.mjs +5 -5
  225. package/esm2020/core/scroll-to/scroll-to.service.mjs +83 -83
  226. package/esm2020/date/date.component.mjs +312 -307
  227. package/esm2020/date/date.model.mjs +53 -53
  228. package/esm2020/date/date.module.mjs +87 -87
  229. package/esm2020/date/pepperi-addons-ngx-lib-date.mjs +4 -4
  230. package/esm2020/date/public-api.mjs +5 -5
  231. package/esm2020/dialog/default-dialog.component.mjs +36 -36
  232. package/esm2020/dialog/dialog.component.mjs +35 -35
  233. package/esm2020/dialog/dialog.model.mjs +32 -32
  234. package/esm2020/dialog/dialog.module.mjs +58 -58
  235. package/esm2020/dialog/dialog.service.mjs +81 -81
  236. package/esm2020/dialog/pepperi-addons-ngx-lib-dialog.mjs +4 -4
  237. package/esm2020/dialog/public-api.mjs +7 -7
  238. package/esm2020/draggable-items/draggable-item/draggable-item.component.mjs +26 -26
  239. package/esm2020/draggable-items/draggable-items.component.mjs +101 -101
  240. package/esm2020/draggable-items/draggable-items.model.mjs +1 -1
  241. package/esm2020/draggable-items/draggable-items.module.mjs +59 -59
  242. package/esm2020/draggable-items/pepperi-addons-ngx-lib-draggable-items.mjs +4 -4
  243. package/esm2020/draggable-items/public-api.mjs +7 -7
  244. package/esm2020/field-title/field-title.component.mjs +44 -44
  245. package/esm2020/field-title/field-title.module.mjs +46 -46
  246. package/esm2020/field-title/pepperi-addons-ngx-lib-field-title.mjs +4 -4
  247. package/esm2020/field-title/public-api.mjs +5 -5
  248. package/esm2020/files-uploader/files-uploader.component.mjs +240 -240
  249. package/esm2020/files-uploader/files-uploader.module.mjs +78 -78
  250. package/esm2020/files-uploader/pepperi-addons-ngx-lib-files-uploader.mjs +4 -4
  251. package/esm2020/files-uploader/public-api.mjs +5 -5
  252. package/esm2020/form/field-generator.component.mjs +152 -152
  253. package/esm2020/form/form.component.mjs +1237 -1227
  254. package/esm2020/form/form.model.mjs +1 -1
  255. package/esm2020/form/form.module.mjs +178 -178
  256. package/esm2020/form/indicators.component.mjs +22 -22
  257. package/esm2020/form/internal-button.component.mjs +183 -183
  258. package/esm2020/form/internal-carusel.component.mjs +116 -116
  259. package/esm2020/form/internal-carusel.service.mjs +31 -31
  260. package/esm2020/form/internal-field-generator.component.mjs +145 -145
  261. package/esm2020/form/internal-form.component.mjs +1215 -1215
  262. package/esm2020/form/internal-list.component.mjs +512 -512
  263. package/esm2020/form/internal-menu.component.mjs +65 -65
  264. package/esm2020/form/internal-page.component.mjs +361 -361
  265. package/esm2020/form/internal-page.service.mjs +119 -119
  266. package/esm2020/form/pepperi-addons-ngx-lib-form.mjs +4 -4
  267. package/esm2020/form/public-api.mjs +6 -6
  268. package/esm2020/group-buttons/group-buttons.component.mjs +70 -70
  269. package/esm2020/group-buttons/group-buttons.module.mjs +58 -58
  270. package/esm2020/group-buttons/pepperi-addons-ngx-lib-group-buttons.mjs +4 -4
  271. package/esm2020/group-buttons/public-api.mjs +5 -5
  272. package/esm2020/icon/icon-generated-all.model.mjs +117 -114
  273. package/esm2020/icon/icon-generated.model.mjs +454 -442
  274. package/esm2020/icon/icon-registry.service.mjs +24 -24
  275. package/esm2020/icon/icon.component.mjs +90 -90
  276. package/esm2020/icon/icon.module.mjs +19 -19
  277. package/esm2020/icon/icon.service.mjs +30 -30
  278. package/esm2020/icon/pepperi-addons-ngx-lib-icon.mjs +4 -4
  279. package/esm2020/icon/public-api.mjs +10 -10
  280. package/esm2020/image/image.component.mjs +246 -246
  281. package/esm2020/image/image.module.mjs +73 -73
  282. package/esm2020/image/image.service.mjs +51 -51
  283. package/esm2020/image/pepperi-addons-ngx-lib-image.mjs +4 -4
  284. package/esm2020/image/public-api.mjs +6 -6
  285. package/esm2020/images-filmstrip/images-filmstrip.component.mjs +336 -336
  286. package/esm2020/images-filmstrip/images-filmstrip.module.mjs +82 -82
  287. package/esm2020/images-filmstrip/pepperi-addons-ngx-lib-images-filmstrip.mjs +4 -4
  288. package/esm2020/images-filmstrip/public-api.mjs +5 -5
  289. package/esm2020/link/link.component.mjs +324 -324
  290. package/esm2020/link/link.module.mjs +79 -79
  291. package/esm2020/link/link.pipes.mjs +17 -17
  292. package/esm2020/link/pepperi-addons-ngx-lib-link.mjs +4 -4
  293. package/esm2020/link/public-api.mjs +7 -6
  294. package/esm2020/list/list-actions.component.mjs +43 -43
  295. package/esm2020/list/list-carousel.component.mjs +106 -106
  296. package/esm2020/list/list-chooser.component.mjs +63 -63
  297. package/esm2020/list/list-pager.component.mjs +119 -119
  298. package/esm2020/list/list-sorting.component.mjs +60 -60
  299. package/esm2020/list/list-total.component.mjs +29 -29
  300. package/esm2020/list/list-views.component.mjs +84 -84
  301. package/esm2020/list/list.component.mjs +1193 -1187
  302. package/esm2020/list/list.model.mjs +3 -3
  303. package/esm2020/list/list.module.mjs +143 -143
  304. package/esm2020/list/list.pipes.mjs +46 -46
  305. package/esm2020/list/pepperi-addons-ngx-lib-list.mjs +4 -4
  306. package/esm2020/list/public-api.mjs +14 -14
  307. package/esm2020/list/virtual-scroller.mjs +1070 -1070
  308. package/esm2020/menu/menu-item.component.mjs +114 -114
  309. package/esm2020/menu/menu.component.mjs +212 -212
  310. package/esm2020/menu/menu.model.mjs +18 -18
  311. package/esm2020/menu/menu.module.mjs +58 -58
  312. package/esm2020/menu/pepperi-addons-ngx-lib-menu.mjs +4 -4
  313. package/esm2020/menu/public-api.mjs +6 -6
  314. package/esm2020/ngx-lib.module.mjs +161 -161
  315. package/esm2020/page-layout/page-layout.component.mjs +34 -34
  316. package/esm2020/page-layout/page-layout.module.mjs +33 -33
  317. package/esm2020/page-layout/pepperi-addons-ngx-lib-page-layout.mjs +4 -4
  318. package/esm2020/page-layout/public-api.mjs +5 -5
  319. package/esm2020/pepperi-addons-ngx-lib.mjs +4 -4
  320. package/esm2020/profile-data-views-list/pepperi-addons-ngx-lib-profile-data-views-list.mjs +4 -4
  321. package/esm2020/profile-data-views-list/profile-data-view/profile-data-view.component.mjs +44 -44
  322. package/esm2020/profile-data-views-list/profile-data-views-card/profile-data-views-card.component.mjs +64 -64
  323. package/esm2020/profile-data-views-list/profile-data-views-list.component.mjs +94 -94
  324. package/esm2020/profile-data-views-list/profile-data-views-list.model.mjs +1 -1
  325. package/esm2020/profile-data-views-list/profile-data-views-list.module.mjs +87 -87
  326. package/esm2020/profile-data-views-list/public-api.mjs +8 -8
  327. package/esm2020/public-api.mjs +5 -5
  328. package/esm2020/quantity-selector/pepperi-addons-ngx-lib-quantity-selector.mjs +4 -4
  329. package/esm2020/quantity-selector/public-api.mjs +5 -5
  330. package/esm2020/quantity-selector/quantity-selector-validation.directive.mjs +48 -48
  331. package/esm2020/quantity-selector/quantity-selector.component.mjs +574 -574
  332. package/esm2020/quantity-selector/quantity-selector.module.mjs +81 -81
  333. package/esm2020/quantity-selector/quantity-selector.pipes.mjs +22 -22
  334. package/esm2020/query-builder/common/model/field.mjs +1 -1
  335. package/esm2020/query-builder/common/model/filter.mjs +1 -1
  336. package/esm2020/query-builder/common/model/legacy.mjs +1 -1
  337. package/esm2020/query-builder/common/model/operator-unit.mjs +41 -41
  338. package/esm2020/query-builder/common/model/operator.mjs +265 -265
  339. package/esm2020/query-builder/common/model/structure.mjs +1 -1
  340. package/esm2020/query-builder/common/model/type-map.mjs +27 -27
  341. package/esm2020/query-builder/common/model/type.mjs +5 -5
  342. package/esm2020/query-builder/common/services/output-query.service.mjs +113 -113
  343. package/esm2020/query-builder/common/services/query-structure.service.mjs +225 -225
  344. package/esm2020/query-builder/common/services/type-convertor.service.mjs +41 -41
  345. package/esm2020/query-builder/pepperi-addons-ngx-lib-query-builder.mjs +4 -4
  346. package/esm2020/query-builder/public-api.mjs +8 -8
  347. package/esm2020/query-builder/query-builder-item/query-builder-item.component.mjs +124 -124
  348. package/esm2020/query-builder/query-builder-section/query-builder-section.component.mjs +70 -70
  349. package/esm2020/query-builder/query-builder.component.mjs +109 -109
  350. package/esm2020/query-builder/query-builder.module.mjs +58 -58
  351. package/esm2020/query-builder/query-builder.service.mjs +101 -101
  352. package/esm2020/remote-loader/addon-block-loader.component.mjs +101 -101
  353. package/esm2020/remote-loader/addon-block-loader.service.mjs +61 -61
  354. package/esm2020/remote-loader/pepperi-addons-ngx-lib-remote-loader.mjs +4 -4
  355. package/esm2020/remote-loader/public-api.mjs +10 -10
  356. package/esm2020/remote-loader/remote-loader-element.component.mjs +112 -105
  357. package/esm2020/remote-loader/remote-loader.component.mjs +108 -108
  358. package/esm2020/remote-loader/remote-loader.model.mjs +1 -1
  359. package/esm2020/remote-loader/remote-loader.module.mjs +68 -68
  360. package/esm2020/remote-loader/remote-loader.service.mjs +80 -80
  361. package/esm2020/rich-html-textarea/pepperi-addons-ngx-lib-rich-html-textarea.mjs +4 -4
  362. package/esm2020/rich-html-textarea/public-api.mjs +5 -5
  363. package/esm2020/rich-html-textarea/rich-html-textarea.component.mjs +247 -247
  364. package/esm2020/rich-html-textarea/rich-html-textarea.module.mjs +94 -94
  365. package/esm2020/search/pepperi-addons-ngx-lib-search.mjs +4 -4
  366. package/esm2020/search/public-api.mjs +6 -6
  367. package/esm2020/search/search.component.mjs +316 -316
  368. package/esm2020/search/search.model.mjs +1 -1
  369. package/esm2020/search/search.module.mjs +69 -69
  370. package/esm2020/select/pepperi-addons-ngx-lib-select.mjs +4 -4
  371. package/esm2020/select/public-api.mjs +5 -5
  372. package/esm2020/select/select.component.mjs +263 -263
  373. package/esm2020/select/select.module.mjs +69 -69
  374. package/esm2020/select-panel/pepperi-addons-ngx-lib-select-panel.mjs +4 -4
  375. package/esm2020/select-panel/public-api.mjs +6 -6
  376. package/esm2020/select-panel/select-panel.component.mjs +158 -158
  377. package/esm2020/select-panel/select-panel.model.mjs +1 -1
  378. package/esm2020/select-panel/select-panel.module.mjs +69 -69
  379. package/esm2020/separator/pepperi-addons-ngx-lib-separator.mjs +4 -4
  380. package/esm2020/separator/public-api.mjs +5 -5
  381. package/esm2020/separator/separator.component.mjs +62 -62
  382. package/esm2020/separator/separator.module.mjs +17 -17
  383. package/esm2020/side-bar/pepperi-addons-ngx-lib-side-bar.mjs +4 -4
  384. package/esm2020/side-bar/public-api.mjs +6 -6
  385. package/esm2020/side-bar/side-bar.component.mjs +121 -121
  386. package/esm2020/side-bar/side-bar.model.mjs +1 -1
  387. package/esm2020/side-bar/side-bar.module.mjs +54 -54
  388. package/esm2020/signature/pepperi-addons-ngx-lib-signature.mjs +4 -4
  389. package/esm2020/signature/public-api.mjs +5 -5
  390. package/esm2020/signature/signature.component.mjs +253 -253
  391. package/esm2020/signature/signature.module.mjs +89 -89
  392. package/esm2020/size-detector/pepperi-addons-ngx-lib-size-detector.mjs +4 -4
  393. package/esm2020/size-detector/public-api.mjs +5 -5
  394. package/esm2020/size-detector/size-detector.component.mjs +91 -91
  395. package/esm2020/size-detector/size-detector.module.mjs +34 -34
  396. package/esm2020/slider/pepperi-addons-ngx-lib-slider.mjs +4 -4
  397. package/esm2020/slider/public-api.mjs +5 -5
  398. package/esm2020/slider/slider.component.mjs +100 -100
  399. package/esm2020/slider/slider.module.mjs +41 -41
  400. package/esm2020/smart-filters/boolean-filter/boolean-filter.component.mjs +75 -75
  401. package/esm2020/smart-filters/common/filter-actions.component.mjs +28 -28
  402. package/esm2020/smart-filters/common/model/base-filter-component.mjs +295 -295
  403. package/esm2020/smart-filters/common/model/creator.mjs +75 -75
  404. package/esm2020/smart-filters/common/model/field.mjs +116 -116
  405. package/esm2020/smart-filters/common/model/filter.mjs +1 -1
  406. package/esm2020/smart-filters/common/model/operator.mjs +270 -270
  407. package/esm2020/smart-filters/common/model/type.mjs +1 -1
  408. package/esm2020/smart-filters/date-filter/date-filter.component.mjs +181 -181
  409. package/esm2020/smart-filters/multi-select-filter/multi-select-filter.component.mjs +199 -199
  410. package/esm2020/smart-filters/number-filter/number-filter.component.mjs +135 -135
  411. package/esm2020/smart-filters/pepperi-addons-ngx-lib-smart-filters.mjs +4 -4
  412. package/esm2020/smart-filters/public-api.mjs +18 -18
  413. package/esm2020/smart-filters/smart-filters.component.mjs +140 -140
  414. package/esm2020/smart-filters/smart-filters.module.mjs +157 -157
  415. package/esm2020/smart-filters/text-filter/text-filter.component.mjs +92 -92
  416. package/esm2020/snack-bar/default-snack-bar.component.mjs +28 -28
  417. package/esm2020/snack-bar/pepperi-addons-ngx-lib-snack-bar.mjs +4 -4
  418. package/esm2020/snack-bar/public-api.mjs +7 -7
  419. package/esm2020/snack-bar/snack-bar.component.mjs +25 -25
  420. package/esm2020/snack-bar/snack-bar.model.mjs +6 -6
  421. package/esm2020/snack-bar/snack-bar.module.mjs +62 -62
  422. package/esm2020/snack-bar/snack-bar.service.mjs +59 -59
  423. package/esm2020/textarea/pepperi-addons-ngx-lib-textarea.mjs +4 -4
  424. package/esm2020/textarea/public-api.mjs +5 -5
  425. package/esm2020/textarea/textarea.component.mjs +187 -187
  426. package/esm2020/textarea/textarea.module.mjs +81 -81
  427. package/esm2020/textbox/pepperi-addons-ngx-lib-textbox.mjs +4 -4
  428. package/esm2020/textbox/public-api.mjs +5 -5
  429. package/esm2020/textbox/textbox-validation.directive.mjs +92 -92
  430. package/esm2020/textbox/textbox.component.mjs +576 -551
  431. package/esm2020/textbox/textbox.module.mjs +71 -71
  432. package/esm2020/textbox-icon/pepperi-addons-ngx-lib-textbox-icon.mjs +4 -4
  433. package/esm2020/textbox-icon/public-api.mjs +5 -5
  434. package/esm2020/textbox-icon/textbox-icon.component.mjs +47 -47
  435. package/esm2020/textbox-icon/textbox-icon.module.mjs +63 -63
  436. package/esm2020/top-bar/pepperi-addons-ngx-lib-top-bar.mjs +4 -4
  437. package/esm2020/top-bar/public-api.mjs +6 -6
  438. package/esm2020/top-bar/top-bar.component.mjs +111 -111
  439. package/esm2020/top-bar/top-bar.model.mjs +1 -1
  440. package/esm2020/top-bar/top-bar.module.mjs +61 -61
  441. package/fesm2015/pepperi-addons-ngx-lib-address.mjs +143 -143
  442. package/fesm2015/pepperi-addons-ngx-lib-attachment.mjs +253 -253
  443. package/fesm2015/pepperi-addons-ngx-lib-bread-crumbs.mjs +122 -122
  444. package/fesm2015/pepperi-addons-ngx-lib-button.mjs +171 -171
  445. package/fesm2015/pepperi-addons-ngx-lib-carousel.mjs +780 -780
  446. package/fesm2015/pepperi-addons-ngx-lib-checkbox.mjs +206 -206
  447. package/fesm2015/pepperi-addons-ngx-lib-chips.mjs +289 -258
  448. package/fesm2015/pepperi-addons-ngx-lib-chips.mjs.map +1 -1
  449. package/fesm2015/pepperi-addons-ngx-lib-color.mjs +336 -336
  450. package/fesm2015/pepperi-addons-ngx-lib-date.mjs +414 -409
  451. package/fesm2015/pepperi-addons-ngx-lib-date.mjs.map +1 -1
  452. package/fesm2015/pepperi-addons-ngx-lib-dialog.mjs +207 -207
  453. package/fesm2015/pepperi-addons-ngx-lib-draggable-items.mjs +163 -163
  454. package/fesm2015/pepperi-addons-ngx-lib-field-title.mjs +76 -76
  455. package/fesm2015/pepperi-addons-ngx-lib-files-uploader.mjs +291 -291
  456. package/fesm2015/pepperi-addons-ngx-lib-form.mjs +4129 -4119
  457. package/fesm2015/pepperi-addons-ngx-lib-form.mjs.map +1 -1
  458. package/fesm2015/pepperi-addons-ngx-lib-group-buttons.mjs +109 -109
  459. package/fesm2015/pepperi-addons-ngx-lib-icon.mjs +718 -703
  460. package/fesm2015/pepperi-addons-ngx-lib-icon.mjs.map +1 -1
  461. package/fesm2015/pepperi-addons-ngx-lib-image.mjs +340 -340
  462. package/fesm2015/pepperi-addons-ngx-lib-images-filmstrip.mjs +390 -390
  463. package/fesm2015/pepperi-addons-ngx-lib-link.mjs +388 -388
  464. package/fesm2015/pepperi-addons-ngx-lib-link.mjs.map +1 -1
  465. package/fesm2015/pepperi-addons-ngx-lib-list.mjs +2866 -2859
  466. package/fesm2015/pepperi-addons-ngx-lib-list.mjs.map +1 -1
  467. package/fesm2015/pepperi-addons-ngx-lib-menu.mjs +368 -368
  468. package/fesm2015/pepperi-addons-ngx-lib-page-layout.mjs +59 -59
  469. package/fesm2015/pepperi-addons-ngx-lib-profile-data-views-list.mjs +254 -254
  470. package/fesm2015/pepperi-addons-ngx-lib-quantity-selector.mjs +686 -686
  471. package/fesm2015/pepperi-addons-ngx-lib-query-builder.mjs +1119 -1119
  472. package/fesm2015/pepperi-addons-ngx-lib-query-builder.mjs.map +1 -1
  473. package/fesm2015/pepperi-addons-ngx-lib-remote-loader.mjs +511 -504
  474. package/fesm2015/pepperi-addons-ngx-lib-remote-loader.mjs.map +1 -1
  475. package/fesm2015/pepperi-addons-ngx-lib-rich-html-textarea.mjs +303 -303
  476. package/fesm2015/pepperi-addons-ngx-lib-rich-html-textarea.mjs.map +1 -1
  477. package/fesm2015/pepperi-addons-ngx-lib-search.mjs +356 -356
  478. package/fesm2015/pepperi-addons-ngx-lib-select-panel.mjs +206 -206
  479. package/fesm2015/pepperi-addons-ngx-lib-select.mjs +305 -305
  480. package/fesm2015/pepperi-addons-ngx-lib-separator.mjs +73 -73
  481. package/fesm2015/pepperi-addons-ngx-lib-side-bar.mjs +158 -158
  482. package/fesm2015/pepperi-addons-ngx-lib-signature.mjs +311 -311
  483. package/fesm2015/pepperi-addons-ngx-lib-size-detector.mjs +114 -114
  484. package/fesm2015/pepperi-addons-ngx-lib-slider.mjs +130 -130
  485. package/fesm2015/pepperi-addons-ngx-lib-smart-filters.mjs +1634 -1634
  486. package/fesm2015/pepperi-addons-ngx-lib-smart-filters.mjs.map +1 -1
  487. package/fesm2015/pepperi-addons-ngx-lib-snack-bar.mjs +152 -152
  488. package/fesm2015/pepperi-addons-ngx-lib-textarea.mjs +238 -238
  489. package/fesm2015/pepperi-addons-ngx-lib-textarea.mjs.map +1 -1
  490. package/fesm2015/pepperi-addons-ngx-lib-textbox-icon.mjs +95 -95
  491. package/fesm2015/pepperi-addons-ngx-lib-textbox.mjs +703 -678
  492. package/fesm2015/pepperi-addons-ngx-lib-textbox.mjs.map +1 -1
  493. package/fesm2015/pepperi-addons-ngx-lib-top-bar.mjs +155 -155
  494. package/fesm2015/pepperi-addons-ngx-lib.mjs +4632 -4616
  495. package/fesm2015/pepperi-addons-ngx-lib.mjs.map +1 -1
  496. package/fesm2020/pepperi-addons-ngx-lib-address.mjs +143 -143
  497. package/fesm2020/pepperi-addons-ngx-lib-attachment.mjs +253 -253
  498. package/fesm2020/pepperi-addons-ngx-lib-bread-crumbs.mjs +122 -122
  499. package/fesm2020/pepperi-addons-ngx-lib-button.mjs +171 -171
  500. package/fesm2020/pepperi-addons-ngx-lib-carousel.mjs +776 -776
  501. package/fesm2020/pepperi-addons-ngx-lib-checkbox.mjs +206 -206
  502. package/fesm2020/pepperi-addons-ngx-lib-chips.mjs +288 -257
  503. package/fesm2020/pepperi-addons-ngx-lib-chips.mjs.map +1 -1
  504. package/fesm2020/pepperi-addons-ngx-lib-color.mjs +333 -333
  505. package/fesm2020/pepperi-addons-ngx-lib-date.mjs +410 -405
  506. package/fesm2020/pepperi-addons-ngx-lib-date.mjs.map +1 -1
  507. package/fesm2020/pepperi-addons-ngx-lib-dialog.mjs +203 -203
  508. package/fesm2020/pepperi-addons-ngx-lib-draggable-items.mjs +162 -162
  509. package/fesm2020/pepperi-addons-ngx-lib-field-title.mjs +76 -76
  510. package/fesm2020/pepperi-addons-ngx-lib-files-uploader.mjs +288 -288
  511. package/fesm2020/pepperi-addons-ngx-lib-form.mjs +4128 -4118
  512. package/fesm2020/pepperi-addons-ngx-lib-form.mjs.map +1 -1
  513. package/fesm2020/pepperi-addons-ngx-lib-group-buttons.mjs +109 -109
  514. package/fesm2020/pepperi-addons-ngx-lib-icon.mjs +716 -701
  515. package/fesm2020/pepperi-addons-ngx-lib-icon.mjs.map +1 -1
  516. package/fesm2020/pepperi-addons-ngx-lib-image.mjs +338 -338
  517. package/fesm2020/pepperi-addons-ngx-lib-images-filmstrip.mjs +387 -387
  518. package/fesm2020/pepperi-addons-ngx-lib-link.mjs +388 -388
  519. package/fesm2020/pepperi-addons-ngx-lib-link.mjs.map +1 -1
  520. package/fesm2020/pepperi-addons-ngx-lib-list.mjs +2853 -2846
  521. package/fesm2020/pepperi-addons-ngx-lib-list.mjs.map +1 -1
  522. package/fesm2020/pepperi-addons-ngx-lib-menu.mjs +368 -368
  523. package/fesm2020/pepperi-addons-ngx-lib-page-layout.mjs +59 -59
  524. package/fesm2020/pepperi-addons-ngx-lib-profile-data-views-list.mjs +253 -253
  525. package/fesm2020/pepperi-addons-ngx-lib-quantity-selector.mjs +685 -685
  526. package/fesm2020/pepperi-addons-ngx-lib-query-builder.mjs +1108 -1108
  527. package/fesm2020/pepperi-addons-ngx-lib-query-builder.mjs.map +1 -1
  528. package/fesm2020/pepperi-addons-ngx-lib-remote-loader.mjs +489 -482
  529. package/fesm2020/pepperi-addons-ngx-lib-remote-loader.mjs.map +1 -1
  530. package/fesm2020/pepperi-addons-ngx-lib-rich-html-textarea.mjs +303 -303
  531. package/fesm2020/pepperi-addons-ngx-lib-rich-html-textarea.mjs.map +1 -1
  532. package/fesm2020/pepperi-addons-ngx-lib-search.mjs +355 -355
  533. package/fesm2020/pepperi-addons-ngx-lib-select-panel.mjs +205 -205
  534. package/fesm2020/pepperi-addons-ngx-lib-select.mjs +305 -305
  535. package/fesm2020/pepperi-addons-ngx-lib-separator.mjs +73 -73
  536. package/fesm2020/pepperi-addons-ngx-lib-side-bar.mjs +158 -158
  537. package/fesm2020/pepperi-addons-ngx-lib-signature.mjs +311 -311
  538. package/fesm2020/pepperi-addons-ngx-lib-size-detector.mjs +114 -114
  539. package/fesm2020/pepperi-addons-ngx-lib-slider.mjs +129 -129
  540. package/fesm2020/pepperi-addons-ngx-lib-smart-filters.mjs +1627 -1627
  541. package/fesm2020/pepperi-addons-ngx-lib-smart-filters.mjs.map +1 -1
  542. package/fesm2020/pepperi-addons-ngx-lib-snack-bar.mjs +149 -149
  543. package/fesm2020/pepperi-addons-ngx-lib-textarea.mjs +237 -237
  544. package/fesm2020/pepperi-addons-ngx-lib-textarea.mjs.map +1 -1
  545. package/fesm2020/pepperi-addons-ngx-lib-textbox-icon.mjs +95 -95
  546. package/fesm2020/pepperi-addons-ngx-lib-textbox.mjs +703 -678
  547. package/fesm2020/pepperi-addons-ngx-lib-textbox.mjs.map +1 -1
  548. package/fesm2020/pepperi-addons-ngx-lib-top-bar.mjs +154 -154
  549. package/fesm2020/pepperi-addons-ngx-lib.mjs +4602 -4586
  550. package/fesm2020/pepperi-addons-ngx-lib.mjs.map +1 -1
  551. package/field-title/field-title.component.d.ts +15 -15
  552. package/field-title/field-title.module.d.ts +15 -15
  553. package/field-title/index.d.ts +5 -5
  554. package/field-title/public-api.d.ts +2 -2
  555. package/files-uploader/files-uploader.component.d.ts +57 -57
  556. package/files-uploader/files-uploader.module.d.ts +21 -21
  557. package/files-uploader/index.d.ts +5 -5
  558. package/files-uploader/public-api.d.ts +2 -2
  559. package/form/field-generator.component.d.ts +37 -37
  560. package/form/form.component.d.ts +93 -93
  561. package/form/form.model.d.ts +20 -20
  562. package/form/form.module.d.ts +50 -50
  563. package/form/index.d.ts +5 -5
  564. package/form/indicators.component.d.ts +10 -10
  565. package/form/internal-button.component.d.ts +42 -42
  566. package/form/internal-carusel.component.d.ts +39 -39
  567. package/form/internal-carusel.service.d.ts +10 -10
  568. package/form/internal-field-generator.component.d.ts +33 -33
  569. package/form/internal-form.component.d.ts +89 -89
  570. package/form/internal-list.component.d.ts +95 -95
  571. package/form/internal-menu.component.d.ts +19 -19
  572. package/form/internal-page.component.d.ts +73 -73
  573. package/form/internal-page.service.d.ts +22 -22
  574. package/form/public-api.d.ts +3 -3
  575. package/group-buttons/group-buttons.component.d.ts +24 -24
  576. package/group-buttons/group-buttons.module.d.ts +18 -18
  577. package/group-buttons/index.d.ts +5 -5
  578. package/group-buttons/public-api.d.ts +2 -2
  579. package/icon/icon-generated-all.model.d.ts +115 -112
  580. package/icon/icon-generated.model.d.ts +458 -446
  581. package/icon/icon-registry.service.d.ts +9 -9
  582. package/icon/icon.component.d.ts +49 -49
  583. package/icon/icon.module.d.ts +7 -7
  584. package/icon/icon.service.d.ts +13 -13
  585. package/icon/index.d.ts +5 -5
  586. package/icon/public-api.d.ts +6 -6
  587. package/image/image.component.d.ts +66 -66
  588. package/image/image.module.d.ts +20 -20
  589. package/image/image.service.d.ts +14 -14
  590. package/image/index.d.ts +5 -5
  591. package/image/public-api.d.ts +3 -3
  592. package/images-filmstrip/images-filmstrip.component.d.ts +87 -87
  593. package/images-filmstrip/images-filmstrip.module.d.ts +22 -22
  594. package/images-filmstrip/index.d.ts +5 -5
  595. package/images-filmstrip/public-api.d.ts +2 -2
  596. package/index.d.ts +5 -5
  597. package/link/index.d.ts +5 -5
  598. package/link/link.component.d.ts +125 -125
  599. package/link/link.module.d.ts +22 -22
  600. package/link/link.pipes.d.ts +7 -7
  601. package/link/public-api.d.ts +3 -2
  602. package/list/index.d.ts +5 -5
  603. package/list/list-actions.component.d.ts +18 -18
  604. package/list/list-carousel.component.d.ts +40 -40
  605. package/list/list-chooser.component.d.ts +29 -29
  606. package/list/list-pager.component.d.ts +39 -39
  607. package/list/list-sorting.component.d.ts +30 -30
  608. package/list/list-total.component.d.ts +11 -11
  609. package/list/list-views.component.d.ts +35 -35
  610. package/list/list.component.d.ts +167 -165
  611. package/list/list.model.d.ts +31 -31
  612. package/list/list.module.d.ts +34 -34
  613. package/list/list.pipes.d.ts +16 -16
  614. package/list/public-api.d.ts +10 -10
  615. package/list/virtual-scroller.d.ts +183 -183
  616. package/menu/index.d.ts +5 -5
  617. package/menu/menu-item.component.d.ts +28 -28
  618. package/menu/menu.component.d.ts +48 -48
  619. package/menu/menu.model.d.ts +25 -25
  620. package/menu/menu.module.d.ts +18 -18
  621. package/menu/public-api.d.ts +3 -3
  622. package/ngx-lib.module.d.ts +24 -24
  623. package/package.json +1 -1
  624. package/page-layout/index.d.ts +5 -5
  625. package/page-layout/page-layout.component.d.ts +19 -19
  626. package/page-layout/page-layout.module.d.ts +10 -10
  627. package/page-layout/public-api.d.ts +2 -2
  628. package/profile-data-views-list/index.d.ts +5 -5
  629. package/profile-data-views-list/profile-data-view/profile-data-view.component.d.ts +18 -18
  630. package/profile-data-views-list/profile-data-views-card/profile-data-views-card.component.d.ts +24 -24
  631. package/profile-data-views-list/profile-data-views-list.component.d.ts +35 -35
  632. package/profile-data-views-list/profile-data-views-list.model.d.ts +18 -18
  633. package/profile-data-views-list/profile-data-views-list.module.d.ts +23 -23
  634. package/profile-data-views-list/public-api.d.ts +5 -5
  635. package/public-api.d.ts +2 -2
  636. package/quantity-selector/index.d.ts +5 -5
  637. package/quantity-selector/public-api.d.ts +2 -2
  638. package/quantity-selector/quantity-selector-validation.directive.d.ts +17 -17
  639. package/quantity-selector/quantity-selector.component.d.ts +112 -112
  640. package/quantity-selector/quantity-selector.module.d.ts +23 -23
  641. package/quantity-selector/quantity-selector.pipes.d.ts +7 -7
  642. package/query-builder/common/model/field.d.ts +8 -8
  643. package/query-builder/common/model/filter.d.ts +6 -6
  644. package/query-builder/common/model/legacy.d.ts +29 -29
  645. package/query-builder/common/model/operator-unit.d.ts +13 -13
  646. package/query-builder/common/model/operator.d.ts +21 -21
  647. package/query-builder/common/model/structure.d.ts +4 -4
  648. package/query-builder/common/model/type-map.d.ts +12 -12
  649. package/query-builder/common/model/type.d.ts +4 -4
  650. package/query-builder/common/services/output-query.service.d.ts +47 -47
  651. package/query-builder/common/services/query-structure.service.d.ts +82 -82
  652. package/query-builder/common/services/type-convertor.service.d.ts +13 -13
  653. package/query-builder/index.d.ts +5 -5
  654. package/query-builder/public-api.d.ts +5 -5
  655. package/query-builder/query-builder-item/query-builder-item.component.d.ts +41 -41
  656. package/query-builder/query-builder-section/query-builder-section.component.d.ts +30 -30
  657. package/query-builder/query-builder.component.d.ts +39 -39
  658. package/query-builder/query-builder.module.d.ts +16 -16
  659. package/query-builder/query-builder.service.d.ts +30 -30
  660. package/remote-loader/addon-block-loader.component.d.ts +36 -36
  661. package/remote-loader/addon-block-loader.service.d.ts +15 -15
  662. package/remote-loader/index.d.ts +5 -5
  663. package/remote-loader/public-api.d.ts +7 -7
  664. package/remote-loader/remote-loader-element.component.d.ts +32 -30
  665. package/remote-loader/remote-loader.component.d.ts +25 -25
  666. package/remote-loader/remote-loader.model.d.ts +41 -41
  667. package/remote-loader/remote-loader.module.d.ts +15 -15
  668. package/remote-loader/remote-loader.service.d.ts +15 -15
  669. package/rich-html-textarea/index.d.ts +5 -5
  670. package/rich-html-textarea/public-api.d.ts +2 -2
  671. package/rich-html-textarea/rich-html-textarea.component.d.ts +79 -79
  672. package/rich-html-textarea/rich-html-textarea.module.d.ts +25 -25
  673. package/search/index.d.ts +5 -5
  674. package/search/public-api.d.ts +3 -3
  675. package/search/search.component.d.ts +65 -65
  676. package/search/search.model.d.ts +14 -14
  677. package/search/search.module.d.ts +20 -20
  678. package/select/index.d.ts +5 -5
  679. package/select/public-api.d.ts +2 -2
  680. package/select/select.component.d.ts +59 -59
  681. package/select/select.module.d.ts +20 -20
  682. package/select-panel/index.d.ts +5 -5
  683. package/select-panel/public-api.d.ts +3 -3
  684. package/select-panel/select-panel.component.d.ts +51 -51
  685. package/select-panel/select-panel.model.d.ts +5 -5
  686. package/select-panel/select-panel.module.d.ts +19 -19
  687. package/separator/index.d.ts +5 -5
  688. package/separator/public-api.d.ts +2 -2
  689. package/separator/separator.component.d.ts +22 -22
  690. package/separator/separator.module.d.ts +8 -8
  691. package/side-bar/index.d.ts +5 -5
  692. package/side-bar/public-api.d.ts +3 -3
  693. package/side-bar/side-bar.component.d.ts +42 -42
  694. package/side-bar/side-bar.model.d.ts +4 -4
  695. package/side-bar/side-bar.module.d.ts +16 -16
  696. package/signature/index.d.ts +5 -5
  697. package/signature/public-api.d.ts +2 -2
  698. package/signature/signature.component.d.ts +68 -68
  699. package/signature/signature.module.d.ts +24 -24
  700. package/size-detector/index.d.ts +5 -5
  701. package/size-detector/public-api.d.ts +2 -2
  702. package/size-detector/size-detector.component.d.ts +29 -29
  703. package/size-detector/size-detector.module.d.ts +11 -11
  704. package/slider/index.d.ts +5 -5
  705. package/slider/public-api.d.ts +2 -2
  706. package/slider/slider.component.d.ts +39 -39
  707. package/slider/slider.module.d.ts +12 -12
  708. package/smart-filters/boolean-filter/boolean-filter.component.d.ts +28 -28
  709. package/smart-filters/common/filter-actions.component.d.ts +12 -12
  710. package/smart-filters/common/model/base-filter-component.d.ts +74 -74
  711. package/smart-filters/common/model/creator.d.ts +6 -6
  712. package/smart-filters/common/model/field.d.ts +69 -69
  713. package/smart-filters/common/model/filter.d.ts +11 -11
  714. package/smart-filters/common/model/operator.d.ts +51 -51
  715. package/smart-filters/common/model/type.d.ts +4 -4
  716. package/smart-filters/date-filter/date-filter.component.d.ts +60 -60
  717. package/smart-filters/index.d.ts +5 -5
  718. package/smart-filters/multi-select-filter/multi-select-filter.component.d.ts +56 -56
  719. package/smart-filters/number-filter/number-filter.component.d.ts +52 -52
  720. package/smart-filters/public-api.d.ts +14 -14
  721. package/smart-filters/smart-filters.component.d.ts +35 -35
  722. package/smart-filters/smart-filters.module.d.ts +37 -37
  723. package/smart-filters/text-filter/text-filter.component.d.ts +28 -28
  724. package/snack-bar/default-snack-bar.component.d.ts +13 -13
  725. package/snack-bar/index.d.ts +5 -5
  726. package/snack-bar/public-api.d.ts +4 -4
  727. package/snack-bar/snack-bar.component.d.ts +12 -12
  728. package/snack-bar/snack-bar.model.d.ts +8 -8
  729. package/snack-bar/snack-bar.module.d.ts +19 -19
  730. package/snack-bar/snack-bar.service.d.ts +24 -24
  731. package/src/core/style/base/typography.scss +1 -1
  732. package/src/core/style/components/textarea.scss +4 -2
  733. package/textarea/index.d.ts +5 -5
  734. package/textarea/public-api.d.ts +2 -2
  735. package/textarea/textarea.component.d.ts +56 -56
  736. package/textarea/textarea.module.d.ts +23 -23
  737. package/textbox/index.d.ts +5 -5
  738. package/textbox/public-api.d.ts +2 -2
  739. package/textbox/textbox-validation.directive.d.ts +22 -22
  740. package/textbox/textbox.component.d.ts +157 -154
  741. package/textbox/textbox.module.d.ts +22 -22
  742. package/textbox-icon/index.d.ts +5 -5
  743. package/textbox-icon/public-api.d.ts +2 -2
  744. package/textbox-icon/textbox-icon.component.d.ts +13 -13
  745. package/textbox-icon/textbox-icon.module.d.ts +16 -16
  746. package/theming-offline.scss +79 -0
  747. package/theming.scss +4 -31
  748. package/top-bar/index.d.ts +5 -5
  749. package/top-bar/public-api.d.ts +3 -3
  750. package/top-bar/top-bar.component.d.ts +39 -39
  751. package/top-bar/top-bar.model.d.ts +4 -4
  752. package/top-bar/top-bar.module.d.ts +18 -18
@@ -1,299 +1,301 @@
1
- import { coerceNumberProperty, _isNumberValue } from '@angular/cdk/coercion';
2
- import { Injectable, Optional } from '@angular/core';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@ngx-translate/core";
5
- export class PepUtilitiesService {
6
- constructor(translate = null) {
7
- this.translate = translate;
8
- this.culture = 'en-US';
9
- this.culture = this.translate?.getBrowserCultureLang() || 'en-US';
10
- // try {
11
- // import(`@angular/common/locales/global/${this.culture}`);
12
- // } catch {}
13
- }
14
- prepareNumberToFormat(value, fallbackValue = 0) {
15
- // If the decimal separator is ',' change it to '.'
16
- if (value?.length > 0) {
17
- // If the decimal separator is ',' change it to '.' for let the formatting works.
18
- value = this.changeDecimalSeparatorWhenItsComma(value);
19
- // console.log('coerceNumberProperty after change decimal separator value is', value);
20
- }
21
- return coerceNumberProperty(value, fallbackValue);
22
- }
23
- // adapted from https://github.com/sindresorhus/parse-ms.
24
- // moved to internal function because parse-ms is now pure ESM.
25
- parseMs(milliseconds) {
26
- if (typeof milliseconds !== 'number') {
27
- throw new TypeError('Expected a number');
28
- }
29
- return {
30
- days: Math.trunc(milliseconds / 86400000),
31
- hours: Math.trunc(milliseconds / 3600000) % 24,
32
- minutes: Math.trunc(milliseconds / 60000) % 60,
33
- seconds: Math.trunc(milliseconds / 1000) % 60,
34
- milliseconds: Math.trunc(milliseconds) % 1000
35
- };
36
- }
37
- // adapted from https://github.com/rafaelrinaldi/add-zero.
38
- // moved to internal function b/c addZero is unmaintained (7+ years).
39
- // stripped out negative sign logic since we're already doing it elsewhere.
40
- addZero(value, digits = 2) {
41
- digits = digits || 2;
42
- let str = value.toString();
43
- let size = 0;
44
- size = digits - str.length + 1;
45
- str = new Array(size).join('0').concat(str);
46
- return str;
47
- }
48
- isCurrencyShouldBeOnRight(currencySymbol) {
49
- let res = false;
50
- if (currencySymbol == "€" ||
51
- currencySymbol == "₪" ||
52
- currencySymbol == "Ft" ||
53
- currencySymbol == "Kč" ||
54
- currencySymbol == "руб" ||
55
- currencySymbol == "zł" ||
56
- currencySymbol == "kr.") {
57
- res = true;
58
- }
59
- return res;
60
- }
61
- cutValueByFractionDigits(value, maxFractionDigits) {
62
- let res = value;
63
- maxFractionDigits = maxFractionDigits || 2;
64
- const decimalSeparator = this.getDecimalSeparator();
65
- if (value.includes(decimalSeparator)) {
66
- const valueArr = value.split(decimalSeparator);
67
- // if (valueArr[1].length < maxFractionDigits) {
68
- valueArr[1] = valueArr[1].padEnd(maxFractionDigits, '0');
69
- // }
70
- res = `${valueArr[0]}${decimalSeparator}${valueArr[1].slice(0, maxFractionDigits)}`;
71
- }
72
- return res;
73
- }
74
- parseDate(dateStr, showTime = false) {
75
- let retVal = null;
76
- if (dateStr !== '') {
77
- retVal = new Date(dateStr);
78
- // Convert to date with no offset.
79
- if (!showTime) {
80
- const index = dateStr.indexOf('T');
81
- if (index > 0) {
82
- dateStr = dateStr.substring(0, index);
83
- }
84
- const dateText = dateStr.split('-');
85
- if (dateText.length === 3) {
86
- const year = Number(dateText[0]);
87
- const month = Number(dateText[1]) - 1;
88
- const day = Number(dateText[2]);
89
- retVal = new Date(year, month, day, 0, retVal.getTimezoneOffset() * -1);
90
- }
91
- }
92
- else {
93
- retVal = new Date(retVal.getFullYear(), retVal.getMonth(), retVal.getDate(), retVal.getHours(), retVal.getMinutes() + retVal.getTimezoneOffset() * -1, retVal.getSeconds());
94
- }
95
- }
96
- if (retVal && isNaN(retVal.getTime())) {
97
- retVal = null;
98
- }
99
- return retVal;
100
- }
101
- stringifyDate(date, showTime = false) {
102
- if (date) {
103
- if (showTime) {
104
- return date.toISOString(); // include - offset
105
- }
106
- else {
107
- const dateText = [];
108
- dateText.push(date.getFullYear(), '-', date.getMonth() + 1, '-', date.getDate());
109
- return dateText.join('');
110
- }
111
- }
112
- else {
113
- return '';
114
- }
115
- }
116
- isValueHtml(value) {
117
- let res = false;
118
- const REGEXP = /<\/?[a-z][\s\S]*>/i;
119
- res = REGEXP.test(value);
120
- return res;
121
- }
122
- isJsonString(str) {
123
- try {
124
- JSON.parse(str);
125
- }
126
- catch (e) {
127
- return false;
128
- }
129
- return true;
130
- }
131
- getSvgElementFromString(document, svgContent) {
132
- const div = document.createElement('DIV');
133
- // div.className = 'svg-icon';
134
- // Add class svg-icon
135
- if (svgContent?.length > 0) {
136
- div.innerHTML = svgContent.replace('<svg ', '<svg class="svg-icon" ');
137
- }
138
- return (div.querySelector('svg') ||
139
- document.createElementNS('http://www.w3.org/2000/svg', 'path'));
140
- }
141
- // formatPercent(value: any, digitsInfo = '1.0-2') {
142
- formatPercent(value, minFractionDigits = 0, maxFractionDigits = 2) {
143
- minFractionDigits = coerceNumberProperty(minFractionDigits, null);
144
- maxFractionDigits = coerceNumberProperty(maxFractionDigits, null);
145
- value = this.cutValueByFractionDigits(value?.toString(), maxFractionDigits);
146
- const number = this.prepareNumberToFormat(value);
147
- if (number === 0) {
148
- return '0%';
149
- }
150
- else {
151
- // return formatPercent(number / 100, this.culture, digitsInfo);
152
- return new Intl.NumberFormat(this.culture, {
153
- style: 'percent',
154
- minimumFractionDigits: minFractionDigits || 0,
155
- maximumFractionDigits: maxFractionDigits || Math.max(2, minFractionDigits),
156
- }).format(number / 100);
157
- }
158
- }
159
- // formatCurrency(value: any, currencySign = '', digitsInfo = '1.2-2') {
160
- formatCurrency(value, currencySign = '', minFractionDigits = 2, maxFractionDigits = 2, useGrouping = true) {
161
- minFractionDigits = coerceNumberProperty(minFractionDigits, null);
162
- maxFractionDigits = coerceNumberProperty(maxFractionDigits, null);
163
- let res = '';
164
- // If the decimal separator is the last digit
165
- // if (value.length > 0 && value.indexOf(this.getDecimalSeparator()) === value.length -1) {
166
- // res = value;
167
- // } else {
168
- value = this.cutValueByFractionDigits(value?.toString(), maxFractionDigits);
169
- const number = this.prepareNumberToFormat(value);
170
- const styleOptions = {
171
- // style: 'currency',
172
- // currencySign: currencySign,
173
- useGrouping: useGrouping,
174
- minimumFractionDigits: minFractionDigits || Math.min(2, maxFractionDigits || 2),
175
- maximumFractionDigits: maxFractionDigits || Math.max(2, minFractionDigits),
176
- };
177
- if (number === 0) {
178
- // return formatCurrency(0, this.culture, currencySign, undefined, digitsInfo);
179
- res = new Intl.NumberFormat(this.culture, styleOptions).format(0);
180
- }
181
- else {
182
- // return formatCurrency(value, this.culture, currencySign, undefined, digitsInfo);
183
- res = new Intl.NumberFormat(this.culture, styleOptions).format(number);
184
- }
185
- if (currencySign.length > 0) {
186
- res = this.isCurrencyShouldBeOnRight(currencySign) ? `${res} ${currencySign}` : `${currencySign} ${res}`;
187
- }
188
- // }
189
- return res;
190
- }
191
- // formatDecimal(value: any, digitsInfo = '1.2-2') {
192
- formatDecimal(value, minFractionDigits = 2, maxFractionDigits = 2, useGrouping = true) {
193
- minFractionDigits = coerceNumberProperty(minFractionDigits, null);
194
- // console.log('formatDecimal minFractionDigits value is', minFractionDigits);
195
- maxFractionDigits = coerceNumberProperty(maxFractionDigits, null);
196
- // console.log('formatDecimal minFractionDigits value is', maxFractionDigits);
197
- value = this.cutValueByFractionDigits(value?.toString(), maxFractionDigits);
198
- const number = this.prepareNumberToFormat(value);
199
- // console.log('number value is', number);
200
- if (number === 0) {
201
- return '0';
202
- }
203
- else {
204
- // return formatNumber(value, this.culture, digitsInfo);
205
- const res = new Intl.NumberFormat(this.culture, {
206
- useGrouping: useGrouping,
207
- minimumFractionDigits: minFractionDigits || Math.min(2, maxFractionDigits || 2),
208
- maximumFractionDigits: maxFractionDigits || Math.max(2, minFractionDigits),
209
- }).format(number);
210
- // console.log('Intl.NumberFormat value is', res);
211
- return res;
212
- }
213
- }
214
- // formatNumber(value: any, digitsInfo = '1.0-0'): string {
215
- formatNumber(value, useGrouping = true) {
216
- const number = this.prepareNumberToFormat(value);
217
- if (number === 0) {
218
- return '0';
219
- }
220
- else {
221
- // return formatNumber(value, this.culture, digitsInfo);
222
- return new Intl.NumberFormat(this.culture, {
223
- useGrouping: useGrouping,
224
- minimumFractionDigits: 0,
225
- maximumFractionDigits: 0,
226
- }).format(number);
227
- }
228
- }
229
- /**
230
- * Convert a number in milliseconds to a standard duration string.
231
- * @param {number} value - duration in milliseconds
232
- * @param {object} options - formatDuration options object
233
- * @param {boolean} [options.leading=false] - add leading zero
234
- * @returns string - formatted duration string
235
- */
236
- formatDuration(value, options = {}) {
237
- const isNumber = _isNumberValue(value);
238
- if (!isNumber) {
239
- return value;
240
- }
241
- else {
242
- let number = this.prepareNumberToFormat(value);
243
- const leading = options?.leading || true;
244
- const duration = options?.duration || 'milliseconds';
245
- if (duration === 'seconds') {
246
- number = number * 1000;
247
- }
248
- const unsignedMs = number < 0 ? -number : number;
249
- const sign = number <= -1000 ? '-' : '';
250
- const t = this.parseMs(unsignedMs);
251
- const seconds = this.addZero(t.seconds);
252
- if (t.days) {
253
- return sign + t.days + ':' + this.addZero(t.hours) + ':' + this.addZero(t.minutes) + ':' + seconds;
254
- }
255
- if (t.hours) {
256
- return sign + (leading ? this.addZero(t.hours) : t.hours) + ':' + this.addZero(t.minutes) + ':' + seconds;
257
- }
258
- return sign + (leading ? this.addZero(t.minutes) : t.minutes) + ':' + seconds;
259
- }
260
- }
261
- incrementNumber(value) {
262
- let numberValue = coerceNumberProperty(value, 0);
263
- return (++numberValue).toString();
264
- }
265
- decrementNumber(value) {
266
- let numberValue = coerceNumberProperty(value, 0);
267
- return (--numberValue).toString();
268
- }
269
- getDecimalSeparator() {
270
- const numberWithDecimalSeparator = 1.1;
271
- return numberWithDecimalSeparator
272
- .toLocaleString(this.culture)
273
- .substring(1, 2);
274
- }
275
- changeDecimalSeparatorWhenItsComma(value, reverse = false) {
276
- // If the decimal separator is ','
277
- if (this.getDecimalSeparator() === ',') {
278
- // If reverse change the number from '.' to ',' else do the opposite.
279
- value = reverse ? value.replace('.', ',') : value.replace(',', '.');
280
- }
281
- return value;
282
- }
283
- isEqualNumber(numberAsString, numberAsString2) {
284
- const number = this.prepareNumberToFormat(numberAsString);
285
- const number2 = this.prepareNumberToFormat(numberAsString2);
286
- return number === number2;
287
- }
288
- }
289
- PepUtilitiesService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepUtilitiesService, deps: [{ token: i1.TranslateService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
290
- PepUtilitiesService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepUtilitiesService, providedIn: 'root' });
291
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepUtilitiesService, decorators: [{
292
- type: Injectable,
293
- args: [{
294
- providedIn: 'root',
295
- }]
296
- }], ctorParameters: function () { return [{ type: i1.TranslateService, decorators: [{
297
- type: Optional
298
- }] }]; } });
299
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0aWVzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL3NyYy9jb3JlL2NvbW1vbi9zZXJ2aWNlcy91dGlsaXRpZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFN0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQU1yRCxNQUFNLE9BQU8sbUJBQW1CO0lBRzVCLFlBQWdDLFlBQThCLElBQUk7UUFBbEMsY0FBUyxHQUFULFNBQVMsQ0FBeUI7UUFGMUQsWUFBTyxHQUFHLE9BQU8sQ0FBQztRQUd0QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUscUJBQXFCLEVBQUUsSUFBSSxPQUFPLENBQUM7UUFFbEUsUUFBUTtRQUNSLGdFQUFnRTtRQUNoRSxhQUFhO0lBQ2pCLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxLQUFhLEVBQUUsYUFBYSxHQUFHLENBQUM7UUFDMUQsbURBQW1EO1FBQ25ELElBQUksS0FBSyxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDbkIsaUZBQWlGO1lBQ2pGLEtBQUssR0FBRyxJQUFJLENBQUMsa0NBQWtDLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkQsc0ZBQXNGO1NBQ3pGO1FBRUQsT0FBTyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELHlEQUF5RDtJQUN6RCwrREFBK0Q7SUFDdkQsT0FBTyxDQUFDLFlBQW9CO1FBQ2hDLElBQUksT0FBTyxZQUFZLEtBQUssUUFBUSxFQUFFO1lBQ2xDLE1BQU0sSUFBSSxTQUFTLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtTQUMzQztRQUVELE9BQU87WUFDSCxJQUFJLEVBQUUsSUFB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SWdCLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2VyY2VOdW1iZXJQcm9wZXJ0eSwgX2lzTnVtYmVyVmFsdWUgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgZm9ybWF0Q3VycmVuY3ksIGZvcm1hdE51bWJlciwgZm9ybWF0UGVyY2VudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBQZXBVdGlsaXRpZXNTZXJ2aWNlIHtcbiAgICBwcml2YXRlIGN1bHR1cmUgPSAnZW4tVVMnO1xuXG4gICAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UgPSBudWxsKSB7XG4gICAgICAgIHRoaXMuY3VsdHVyZSA9IHRoaXMudHJhbnNsYXRlPy5nZXRCcm93c2VyQ3VsdHVyZUxhbmcoKSB8fCAnZW4tVVMnO1xuXG4gICAgICAgIC8vIHRyeSB7XG4gICAgICAgIC8vICAgICBpbXBvcnQoYEBhbmd1bGFyL2NvbW1vbi9sb2NhbGVzL2dsb2JhbC8ke3RoaXMuY3VsdHVyZX1gKTtcbiAgICAgICAgLy8gfSBjYXRjaCB7fVxuICAgIH1cblxuICAgIHByaXZhdGUgcHJlcGFyZU51bWJlclRvRm9ybWF0KHZhbHVlOiBzdHJpbmcsIGZhbGxiYWNrVmFsdWUgPSAwKTogbnVtYmVyIHtcbiAgICAgICAgLy8gSWYgdGhlIGRlY2ltYWwgc2VwYXJhdG9yIGlzICcsJyBjaGFuZ2UgaXQgdG8gJy4nXG4gICAgICAgIGlmICh2YWx1ZT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgLy8gSWYgdGhlIGRlY2ltYWwgc2VwYXJhdG9yIGlzICcsJyBjaGFuZ2UgaXQgdG8gJy4nIGZvciBsZXQgdGhlIGZvcm1hdHRpbmcgd29ya3MuXG4gICAgICAgICAgICB2YWx1ZSA9IHRoaXMuY2hhbmdlRGVjaW1hbFNlcGFyYXRvcldoZW5JdHNDb21tYSh2YWx1ZSk7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnY29lcmNlTnVtYmVyUHJvcGVydHkgYWZ0ZXIgY2hhbmdlIGRlY2ltYWwgc2VwYXJhdG9yIHZhbHVlIGlzJywgdmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlLCBmYWxsYmFja1ZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBhZGFwdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9wYXJzZS1tcy5cbiAgICAvLyBtb3ZlZCB0byBpbnRlcm5hbCBmdW5jdGlvbiBiZWNhdXNlIHBhcnNlLW1zIGlzIG5vdyBwdXJlIEVTTS5cbiAgICBwcml2YXRlIHBhcnNlTXMobWlsbGlzZWNvbmRzOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBtaWxsaXNlY29uZHMgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBhIG51bWJlcicpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF5czogTWF0aC50cnVuYyhtaWxsaXNlY29uZHMgLyA4NjQwMDAwMCksXG4gICAgICAgICAgICBob3VyczogTWF0aC50cnVuYyhtaWxsaXNlY29uZHMgLyAzNjAwMDAwKSAlIDI0LFxuICAgICAgICAgICAgbWludXRlczogTWF0aC50cnVuYyhtaWxsaXNlY29uZHMgLyA2MDAwMCkgJSA2MCxcbiAgICAgICAgICAgIHNlY29uZHM6IE1hdGgudHJ1bmMobWlsbGlzZWNvbmRzIC8gMTAwMCkgJSA2MCxcbiAgICAgICAgICAgIG1pbGxpc2Vjb25kczogTWF0aC50cnVuYyhtaWxsaXNlY29uZHMpICUgMTAwMFxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gYWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9yYWZhZWxyaW5hbGRpL2FkZC16ZXJvLlxuICAgIC8vIG1vdmVkIHRvIGludGVybmFsIGZ1bmN0aW9uIGIvYyBhZGRaZXJvIGlzIHVubWFpbnRhaW5lZCAoNysgeWVhcnMpLlxuICAgIC8vIHN0cmlwcGVkIG91dCBuZWdhdGl2ZSBzaWduIGxvZ2ljIHNpbmNlIHdlJ3JlIGFscmVhZHkgZG9pbmcgaXQgZWxzZXdoZXJlLlxuICAgIHByaXZhdGUgYWRkWmVybyh2YWx1ZTogbnVtYmVyLCBkaWdpdHMgPSAyKSB7XG4gICAgICAgIGRpZ2l0cyA9IGRpZ2l0cyB8fCAyXG5cbiAgICAgICAgbGV0IHN0ciA9IHZhbHVlLnRvU3RyaW5nKClcbiAgICAgICAgbGV0IHNpemUgPSAwXG5cbiAgICAgICAgc2l6ZSA9IGRpZ2l0cyAtIHN0ci5sZW5ndGggKyAxXG4gICAgICAgIHN0ciA9IG5ldyBBcnJheShzaXplKS5qb2luKCcwJykuY29uY2F0KHN0cilcblxuICAgICAgICByZXR1cm4gc3RyXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0N1cnJlbmN5U2hvdWxkQmVPblJpZ2h0KGN1cnJlbmN5U3ltYm9sOiBzdHJpbmcpIHtcbiAgICAgICAgbGV0IHJlcyA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChjdXJyZW5jeVN5bWJvbCA9PSBcIuKCrFwiIHx8XG4gICAgICAgICAgICBjdXJyZW5jeVN5bWJvbCA9PSBcIuKCqlwiIHx8XG4gICAgICAgICAgICBjdXJyZW5jeVN5bWJvbCA9PSBcIkZ0XCIgfHxcbiAgICAgICAgICAgIGN1cnJlbmN5U3ltYm9sID09IFwiS8SNXCIgfHxcbiAgICAgICAgICAgIGN1cnJlbmN5U3ltYm9sID09IFwi0YDRg9CxXCIgfHxcbiAgICAgICAgICAgIGN1cnJlbmN5U3ltYm9sID09IFwiesWCXCIgfHxcbiAgICAgICAgICAgIGN1cnJlbmN5U3ltYm9sID09IFwia3IuXCIpIHtcbiAgICAgICAgICAgIHJlcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3V0VmFsdWVCeUZyYWN0aW9uRGlnaXRzKHZhbHVlOiBzdHJpbmcsIG1heEZyYWN0aW9uRGlnaXRzOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICBsZXQgcmVzID0gdmFsdWU7XG4gICAgICAgIG1heEZyYWN0aW9uRGlnaXRzID0gbWF4RnJhY3Rpb25EaWdpdHMgfHwgMjtcbiAgICAgICAgY29uc3QgZGVjaW1hbFNlcGFyYXRvciA9IHRoaXMuZ2V0RGVjaW1hbFNlcGFyYXRvcigpO1xuXG4gICAgICAgIGlmICh2YWx1ZS5pbmNsdWRlcyhkZWNpbWFsU2VwYXJhdG9yKSkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWVBcnIgPSB2YWx1ZS5zcGxpdChkZWNpbWFsU2VwYXJhdG9yKTtcblxuICAgICAgICAgICAgLy8gaWYgKHZhbHVlQXJyWzFdLmxlbmd0aCA8IG1heEZyYWN0aW9uRGlnaXRzKSB7XG4gICAgICAgICAgICB2YWx1ZUFyclsxXSA9IHZhbHVlQXJyWzFdLnBhZEVuZChtYXhGcmFjdGlvbkRpZ2l0cywgJzAnKTtcbiAgICAgICAgICAgIC8vIH1cblxuICAgICAgICAgICAgcmVzID0gYCR7dmFsdWVBcnJbMF19JHtkZWNpbWFsU2VwYXJhdG9yfSR7dmFsdWVBcnJbMV0uc2xpY2UoMCwgbWF4RnJhY3Rpb25EaWdpdHMpfWA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIHBhcnNlRGF0ZShkYXRlU3RyOiBzdHJpbmcsIHNob3dUaW1lID0gZmFsc2UpOiBEYXRlIHtcbiAgICAgICAgbGV0IHJldFZhbDogRGF0ZSA9IG51bGw7XG4gICAgICAgIGlmIChkYXRlU3RyICE9PSAnJykge1xuICAgICAgICAgICAgcmV0VmFsID0gbmV3IERhdGUoZGF0ZVN0cik7XG5cbiAgICAgICAgICAgIC8vIENvbnZlcnQgdG8gZGF0ZSB3aXRoIG5vIG9mZnNldC5cbiAgICAgICAgICAgIGlmICghc2hvd1RpbWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IGRhdGVTdHIuaW5kZXhPZignVCcpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBkYXRlU3RyID0gZGF0ZVN0ci5zdWJzdHJpbmcoMCwgaW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVUZXh0ID0gZGF0ZVN0ci5zcGxpdCgnLScpO1xuICAgICAgICAgICAgICAgIGlmIChkYXRlVGV4dC5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeWVhciA9IE51bWJlcihkYXRlVGV4dFswXSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1vbnRoID0gTnVtYmVyKGRhdGVUZXh0WzFdKSAtIDE7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRheSA9IE51bWJlcihkYXRlVGV4dFsyXSk7XG4gICAgICAgICAgICAgICAgICAgIHJldFZhbCA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCBkYXksIDAsIHJldFZhbC5nZXRUaW1lem9uZU9mZnNldCgpICogLTEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0VmFsID0gbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgICAgIHJldFZhbC5nZXRGdWxsWWVhcigpLCByZXRWYWwuZ2V0TW9udGgoKSwgcmV0VmFsLmdldERhdGUoKSwgcmV0VmFsLmdldEhvdXJzKCksXG4gICAgICAgICAgICAgICAgICAgIHJldFZhbC5nZXRNaW51dGVzKCkgKyByZXRWYWwuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIC0xLCByZXRWYWwuZ2V0U2Vjb25kcygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocmV0VmFsICYmIGlzTmFOKHJldFZhbC5nZXRUaW1lKCkpKSB7XG4gICAgICAgICAgICByZXRWYWwgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXRWYWw7XG4gICAgfVxuXG4gICAgc3RyaW5naWZ5RGF0ZShkYXRlOiBEYXRlLCBzaG93VGltZSA9IGZhbHNlKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKGRhdGUpIHtcbiAgICAgICAgICAgIGlmIChzaG93VGltZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkYXRlLnRvSVNPU3RyaW5nKCk7IC8vIGluY2x1ZGUgLSBvZmZzZXRcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0ZVRleHQgPSBbXTtcbiAgICAgICAgICAgICAgICBkYXRlVGV4dC5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBkYXRlLmdldEZ1bGxZZWFyKCksXG4gICAgICAgICAgICAgICAgICAgICctJyxcbiAgICAgICAgICAgICAgICAgICAgZGF0ZS5nZXRNb250aCgpICsgMSxcbiAgICAgICAgICAgICAgICAgICAgJy0nLFxuICAgICAgICAgICAgICAgICAgICBkYXRlLmdldERhdGUoKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGVUZXh0LmpvaW4oJycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaXNWYWx1ZUh0bWwodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgcmVzID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IFJFR0VYUCA9IC88XFwvP1thLXpdW1xcc1xcU10qPi9pO1xuICAgICAgICByZXMgPSBSRUdFWFAudGVzdCh2YWx1ZSk7XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBpc0pzb25TdHJpbmcoc3RyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIEpTT04ucGFyc2Uoc3RyKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGdldFN2Z0VsZW1lbnRGcm9tU3RyaW5nKGRvY3VtZW50LCBzdmdDb250ZW50OiBzdHJpbmcpOiBTVkdFbGVtZW50IHtcbiAgICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnRElWJyk7XG4gICAgICAgIC8vIGRpdi5jbGFzc05hbWUgPSAnc3ZnLWljb24nO1xuICAgICAgICAvLyBBZGQgY2xhc3Mgc3ZnLWljb25cbiAgICAgICAgaWYgKHN2Z0NvbnRlbnQ/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGRpdi5pbm5lckhUTUwgPSBzdmdDb250ZW50LnJlcGxhY2UoJzxzdmcgJywgJzxzdmcgY2xhc3M9XCJzdmctaWNvblwiICcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBkaXYucXVlcnlTZWxlY3Rvcignc3ZnJykgfHxcbiAgICAgICAgICAgIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAncGF0aCcpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gZm9ybWF0UGVyY2VudCh2YWx1ZTogYW55LCBkaWdpdHNJbmZvID0gJzEuMC0yJykge1xuICAgIGZvcm1hdFBlcmNlbnQodmFsdWU6IGFueSwgbWluRnJhY3Rpb25EaWdpdHMgPSAwLCBtYXhGcmFjdGlvbkRpZ2l0cyA9IDIpIHtcbiAgICAgICAgbWluRnJhY3Rpb25EaWdpdHMgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eShtaW5GcmFjdGlvbkRpZ2l0cywgbnVsbCk7XG4gICAgICAgIG1heEZyYWN0aW9uRGlnaXRzID0gY29lcmNlTnVtYmVyUHJvcGVydHkobWF4RnJhY3Rpb25EaWdpdHMsIG51bGwpO1xuXG4gICAgICAgIHZhbHVlID0gdGhpcy5jdXRWYWx1ZUJ5RnJhY3Rpb25EaWdpdHModmFsdWU/LnRvU3RyaW5nKCksIG1heEZyYWN0aW9uRGlnaXRzKTtcbiAgICAgICAgY29uc3QgbnVtYmVyID0gdGhpcy5wcmVwYXJlTnVtYmVyVG9Gb3JtYXQodmFsdWUpO1xuXG4gICAgICAgIGlmIChudW1iZXIgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiAnMCUnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gcmV0dXJuIGZvcm1hdFBlcmNlbnQobnVtYmVyIC8gMTAwLCB0aGlzLmN1bHR1cmUsIGRpZ2l0c0luZm8pO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnRsLk51bWJlckZvcm1hdCh0aGlzLmN1bHR1cmUsIHtcbiAgICAgICAgICAgICAgICBzdHlsZTogJ3BlcmNlbnQnLFxuICAgICAgICAgICAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogbWluRnJhY3Rpb25EaWdpdHMgfHwgMCxcbiAgICAgICAgICAgICAgICBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IG1heEZyYWN0aW9uRGlnaXRzIHx8IE1hdGgubWF4KDIsIG1pbkZyYWN0aW9uRGlnaXRzKSxcbiAgICAgICAgICAgIH0pLmZvcm1hdChudW1iZXIgLyAxMDApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gZm9ybWF0Q3VycmVuY3kodmFsdWU6IGFueSwgY3VycmVuY3lTaWduID0gJycsIGRpZ2l0c0luZm8gPSAnMS4yLTInKSB7XG4gICAgZm9ybWF0Q3VycmVuY3kodmFsdWU6IGFueSwgY3VycmVuY3lTaWduID0gJycsIG1pbkZyYWN0aW9uRGlnaXRzID0gMiwgbWF4RnJhY3Rpb25EaWdpdHMgPSAyLCB1c2VHcm91cGluZyA9IHRydWUpIHtcbiAgICAgICAgbWluRnJhY3Rpb25EaWdpdHMgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eShtaW5GcmFjdGlvbkRpZ2l0cywgbnVsbCk7XG4gICAgICAgIG1heEZyYWN0aW9uRGlnaXRzID0gY29lcmNlTnVtYmVyUHJvcGVydHkobWF4RnJhY3Rpb25EaWdpdHMsIG51bGwpO1xuXG4gICAgICAgIGxldCByZXMgPSAnJztcblxuICAgICAgICAvLyBJZiB0aGUgZGVjaW1hbCBzZXBhcmF0b3IgaXMgdGhlIGxhc3QgZGlnaXRcbiAgICAgICAgLy8gaWYgKHZhbHVlLmxlbmd0aCA+IDAgJiYgdmFsdWUuaW5kZXhPZih0aGlzLmdldERlY2ltYWxTZXBhcmF0b3IoKSkgPT09IHZhbHVlLmxlbmd0aCAtMSkge1xuICAgICAgICAvLyAgICAgcmVzID0gdmFsdWU7XG4gICAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHRoaXMuY3V0VmFsdWVCeUZyYWN0aW9uRGlnaXRzKHZhbHVlPy50b1N0cmluZygpLCBtYXhGcmFjdGlvbkRpZ2l0cyk7XG4gICAgICAgICAgICBjb25zdCBudW1iZXIgPSB0aGlzLnByZXBhcmVOdW1iZXJUb0Zvcm1hdCh2YWx1ZSk7XG4gICAgICAgICAgICBjb25zdCBzdHlsZU9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgLy8gc3R5bGU6ICdjdXJyZW5jeScsXG4gICAgICAgICAgICAgICAgLy8gY3VycmVuY3lTaWduOiBjdXJyZW5jeVNpZ24sXG4gICAgICAgICAgICAgICAgdXNlR3JvdXBpbmc6IHVzZUdyb3VwaW5nLFxuICAgICAgICAgICAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogbWluRnJhY3Rpb25EaWdpdHMgfHwgTWF0aC5taW4oMiwgbWF4RnJhY3Rpb25EaWdpdHMgfHwgMiksXG4gICAgICAgICAgICAgICAgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiBtYXhGcmFjdGlvbkRpZ2l0cyB8fCBNYXRoLm1heCgyLCBtaW5GcmFjdGlvbkRpZ2l0cyksXG4gICAgICAgICAgICB9O1xuICAgIFxuICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIHJldHVybiBmb3JtYXRDdXJyZW5jeSgwLCB0aGlzLmN1bHR1cmUsIGN1cnJlbmN5U2lnbiwgdW5kZWZpbmVkLCBkaWdpdHNJbmZvKTtcbiAgICAgICAgICAgICAgICByZXMgPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQodGhpcy5jdWx0dXJlLCBzdHlsZU9wdGlvbnMpLmZvcm1hdCgwKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gcmV0dXJuIGZvcm1hdEN1cnJlbmN5KHZhbHVlLCB0aGlzLmN1bHR1cmUsIGN1cnJlbmN5U2lnbiwgdW5kZWZpbmVkLCBkaWdpdHNJbmZvKTtcbiAgICAgICAgICAgICAgICByZXMgPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQodGhpcy5jdWx0dXJlLCBzdHlsZU9wdGlvbnMpLmZvcm1hdChudW1iZXIpO1xuICAgICAgICAgICAgfVxuICAgIFxuICAgICAgICAgICAgaWYgKGN1cnJlbmN5U2lnbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcmVzID0gdGhpcy5pc0N1cnJlbmN5U2hvdWxkQmVPblJpZ2h0KGN1cnJlbmN5U2lnbikgPyBgJHtyZXN9ICR7Y3VycmVuY3lTaWdufWAgOiBgJHtjdXJyZW5jeVNpZ259ICR7cmVzfWBcbiAgICAgICAgICAgIH1cbiAgICAgICAgLy8gfVxuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgLy8gZm9ybWF0RGVjaW1hbCh2YWx1ZTogYW55LCBkaWdpdHNJbmZvID0gJzEuMi0yJykge1xuICAgIGZvcm1hdERlY2ltYWwodmFsdWU6IGFueSwgbWluRnJhY3Rpb25EaWdpdHMgPSAyLCBtYXhGcmFjdGlvbkRpZ2l0cyA9IDIsIHVzZUdyb3VwaW5nID0gdHJ1ZSkge1xuICAgICAgICBtaW5GcmFjdGlvbkRpZ2l0cyA9IGNvZXJjZU51bWJlclByb3BlcnR5KG1pbkZyYWN0aW9uRGlnaXRzLCBudWxsKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ2Zvcm1hdERlY2ltYWwgbWluRnJhY3Rpb25EaWdpdHMgdmFsdWUgaXMnLCBtaW5GcmFjdGlvbkRpZ2l0cyk7XG4gICAgICAgIG1heEZyYWN0aW9uRGlnaXRzID0gY29lcmNlTnVtYmVyUHJvcGVydHkobWF4RnJhY3Rpb25EaWdpdHMsIG51bGwpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnZm9ybWF0RGVjaW1hbCBtaW5GcmFjdGlvbkRpZ2l0cyB2YWx1ZSBpcycsIG1heEZyYWN0aW9uRGlnaXRzKTtcblxuICAgICAgICB2YWx1ZSA9IHRoaXMuY3V0VmFsdWVCeUZyYWN0aW9uRGlnaXRzKHZhbHVlPy50b1N0cmluZygpLCBtYXhGcmFjdGlvbkRpZ2l0cyk7XG4gICAgICAgIGNvbnN0IG51bWJlciA9IHRoaXMucHJlcGFyZU51bWJlclRvRm9ybWF0KHZhbHVlKTtcbiAgICAgICAgXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdudW1iZXIgdmFsdWUgaXMnLCBudW1iZXIpO1xuXG4gICAgICAgIGlmIChudW1iZXIgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiAnMCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyByZXR1cm4gZm9ybWF0TnVtYmVyKHZhbHVlLCB0aGlzLmN1bHR1cmUsIGRpZ2l0c0luZm8pO1xuICAgICAgICAgICAgY29uc3QgcmVzID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KHRoaXMuY3VsdHVyZSwge1xuICAgICAgICAgICAgICAgIHVzZUdyb3VwaW5nOiB1c2VHcm91cGluZyxcbiAgICAgICAgICAgICAgICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IG1pbkZyYWN0aW9uRGlnaXRzIHx8IE1hdGgubWluKDIsIG1heEZyYWN0aW9uRGlnaXRzIHx8IDIpLFxuICAgICAgICAgICAgICAgIG1heGltdW1GcmFjdGlvbkRpZ2l0czogbWF4RnJhY3Rpb25EaWdpdHMgfHwgTWF0aC5tYXgoMiwgbWluRnJhY3Rpb25EaWdpdHMpLFxuICAgICAgICAgICAgfSkuZm9ybWF0KG51bWJlcik7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdJbnRsLk51bWJlckZvcm1hdCB2YWx1ZSBpcycsIHJlcyk7XG5cbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBmb3JtYXROdW1iZXIodmFsdWU6IGFueSwgZGlnaXRzSW5mbyA9ICcxLjAtMCcpOiBzdHJpbmcge1xuICAgIGZvcm1hdE51bWJlcih2YWx1ZTogYW55LCB1c2VHcm91cGluZyA9IHRydWUpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBudW1iZXIgPSB0aGlzLnByZXBhcmVOdW1iZXJUb0Zvcm1hdCh2YWx1ZSk7XG5cbiAgICAgICAgaWYgKG51bWJlciA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuICcwJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHJldHVybiBmb3JtYXROdW1iZXIodmFsdWUsIHRoaXMuY3VsdHVyZSwgZGlnaXRzSW5mbyk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEludGwuTnVtYmVyRm9ybWF0KHRoaXMuY3VsdHVyZSwge1xuICAgICAgICAgICAgICAgIHVzZUdyb3VwaW5nOiB1c2VHcm91cGluZyxcbiAgICAgICAgICAgICAgICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IDAsXG4gICAgICAgICAgICAgICAgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiAwLFxuICAgICAgICAgICAgfSkuZm9ybWF0KG51bWJlcilcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgYSBudW1iZXIgaW4gbWlsbGlzZWNvbmRzIHRvIGEgc3RhbmRhcmQgZHVyYXRpb24gc3RyaW5nLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIGR1cmF0aW9uIGluIG1pbGxpc2Vjb25kc1xuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIC0gZm9ybWF0RHVyYXRpb24gb3B0aW9ucyBvYmplY3RcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmxlYWRpbmc9ZmFsc2VdIC0gYWRkIGxlYWRpbmcgemVyb1xuICAgICAqIEByZXR1cm5zIHN0cmluZyAtIGZvcm1hdHRlZCBkdXJhdGlvbiBzdHJpbmdcbiAgICAqL1xuICAgIGZvcm1hdER1cmF0aW9uKHZhbHVlLCBvcHRpb25zOiB7IGxlYWRpbmc/OiBib29sZWFuLCBkdXJhdGlvbj86ICdtaWxsaXNlY29uZHMnIHwgJ3NlY29uZHMnIH0gPSB7fSk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGlzTnVtYmVyID0gX2lzTnVtYmVyVmFsdWUodmFsdWUpO1xuXG4gICAgICAgIGlmICghaXNOdW1iZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBudW1iZXIgPSB0aGlzLnByZXBhcmVOdW1iZXJUb0Zvcm1hdCh2YWx1ZSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGxlYWRpbmcgPSBvcHRpb25zPy5sZWFkaW5nIHx8IHRydWU7XG4gICAgICAgICAgICBjb25zdCBkdXJhdGlvbiA9IG9wdGlvbnM/LmR1cmF0aW9uIHx8ICdtaWxsaXNlY29uZHMnO1xuICAgICAgICAgICAgaWYgKGR1cmF0aW9uID09PSAnc2Vjb25kcycpIHtcbiAgICAgICAgICAgICAgICBudW1iZXIgPSBudW1iZXIgKiAxMDAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB1bnNpZ25lZE1zID0gbnVtYmVyIDwgMCA/IC1udW1iZXIgOiBudW1iZXI7XG4gICAgICAgICAgICBjb25zdCBzaWduID0gbnVtYmVyIDw9IC0xMDAwID8gJy0nIDogJyc7XG4gICAgICAgICAgICBjb25zdCB0ID0gdGhpcy5wYXJzZU1zKHVuc2lnbmVkTXMpO1xuICAgICAgICAgICAgY29uc3Qgc2Vjb25kcyA9IHRoaXMuYWRkWmVybyh0LnNlY29uZHMpO1xuXG4gICAgICAgICAgICBpZiAodC5kYXlzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNpZ24gKyB0LmRheXMgKyAnOicgKyB0aGlzLmFkZFplcm8odC5ob3VycykgKyAnOicgKyB0aGlzLmFkZFplcm8odC5taW51dGVzKSArICc6JyArIHNlY29uZHNcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHQuaG91cnMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2lnbiArIChsZWFkaW5nID8gdGhpcy5hZGRaZXJvKHQuaG91cnMpIDogdC5ob3VycykgKyAnOicgKyB0aGlzLmFkZFplcm8odC5taW51dGVzKSArICc6JyArIHNlY29uZHNcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHNpZ24gKyAobGVhZGluZyA/IHRoaXMuYWRkWmVybyh0Lm1pbnV0ZXMpIDogdC5taW51dGVzKSArICc6JyArIHNlY29uZHNcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluY3JlbWVudE51bWJlcih2YWx1ZTogYW55KTogc3RyaW5nIHtcbiAgICAgICAgbGV0IG51bWJlclZhbHVlID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUsIDApO1xuICAgICAgICByZXR1cm4gKCsrbnVtYmVyVmFsdWUpLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgZGVjcmVtZW50TnVtYmVyKHZhbHVlOiBhbnkpOiBzdHJpbmcge1xuICAgICAgICBsZXQgbnVtYmVyVmFsdWUgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSwgMCk7XG4gICAgICAgIHJldHVybiAoLS1udW1iZXJWYWx1ZSkudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBnZXREZWNpbWFsU2VwYXJhdG9yKCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IG51bWJlcldpdGhEZWNpbWFsU2VwYXJhdG9yID0gMS4xO1xuXG4gICAgICAgIHJldHVybiBudW1iZXJXaXRoRGVjaW1hbFNlcGFyYXRvclxuICAgICAgICAgICAgLnRvTG9jYWxlU3RyaW5nKHRoaXMuY3VsdHVyZSlcbiAgICAgICAgICAgIC5zdWJzdHJpbmcoMSwgMik7XG4gICAgfVxuXG4gICAgY2hhbmdlRGVjaW1hbFNlcGFyYXRvcldoZW5JdHNDb21tYSh2YWx1ZTogc3RyaW5nLCByZXZlcnNlID0gZmFsc2UpOiBzdHJpbmcge1xuICAgICAgICAvLyBJZiB0aGUgZGVjaW1hbCBzZXBhcmF0b3IgaXMgJywnXG4gICAgICAgIGlmICh0aGlzLmdldERlY2ltYWxTZXBhcmF0b3IoKSA9PT0gJywnKSB7XG4gICAgICAgICAgICAvLyBJZiByZXZlcnNlIGNoYW5nZSB0aGUgbnVtYmVyIGZyb20gJy4nIHRvICcsJyBlbHNlIGRvIHRoZSBvcHBvc2l0ZS5cbiAgICAgICAgICAgIHZhbHVlID0gcmV2ZXJzZSA/IHZhbHVlLnJlcGxhY2UoJy4nLCAnLCcpIDogdmFsdWUucmVwbGFjZSgnLCcsICcuJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgaXNFcXVhbE51bWJlcihudW1iZXJBc1N0cmluZzogc3RyaW5nLCBudW1iZXJBc1N0cmluZzI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBudW1iZXIgPSB0aGlzLnByZXBhcmVOdW1iZXJUb0Zvcm1hdChudW1iZXJBc1N0cmluZyk7XG4gICAgICAgIGNvbnN0IG51bWJlcjIgPSB0aGlzLnByZXBhcmVOdW1iZXJUb0Zvcm1hdChudW1iZXJBc1N0cmluZzIpO1xuXG4gICAgICAgIHJldHVybiBudW1iZXIgPT09IG51bWJlcjI7XG4gICAgfVxufVxuIl19
1
+ import { coerceNumberProperty, _isNumberValue } from '@angular/cdk/coercion';
2
+ import { Injectable, Optional } from '@angular/core';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@ngx-translate/core";
5
+ export class PepUtilitiesService {
6
+ constructor(translate = null) {
7
+ this.translate = translate;
8
+ this.culture = 'en-US';
9
+ this.culture = this.translate?.getBrowserCultureLang() || 'en-US';
10
+ // try {
11
+ // import(`@angular/common/locales/global/${this.culture}`);
12
+ // } catch {}
13
+ }
14
+ prepareNumberToFormat(value, fallbackValue = 0) {
15
+ // If the decimal separator is ',' change it to '.'
16
+ if (value?.length > 0) {
17
+ // If the decimal separator is ',' change it to '.' for let the formatting works.
18
+ value = this.changeDecimalSeparatorWhenItsComma(value);
19
+ // console.log('coerceNumberProperty after change decimal separator value is', value);
20
+ }
21
+ return coerceNumberProperty(value, fallbackValue);
22
+ }
23
+ // adapted from https://github.com/sindresorhus/parse-ms.
24
+ // moved to internal function because parse-ms is now pure ESM.
25
+ parseMs(milliseconds) {
26
+ if (typeof milliseconds !== 'number') {
27
+ throw new TypeError('Expected a number');
28
+ }
29
+ return {
30
+ days: Math.trunc(milliseconds / 86400000),
31
+ hours: Math.trunc(milliseconds / 3600000) % 24,
32
+ minutes: Math.trunc(milliseconds / 60000) % 60,
33
+ seconds: Math.trunc(milliseconds / 1000) % 60,
34
+ milliseconds: Math.trunc(milliseconds) % 1000
35
+ };
36
+ }
37
+ // adapted from https://github.com/rafaelrinaldi/add-zero.
38
+ // moved to internal function b/c addZero is unmaintained (7+ years).
39
+ // stripped out negative sign logic since we're already doing it elsewhere.
40
+ addZero(value, digits = 2) {
41
+ digits = digits || 2;
42
+ let str = value.toString();
43
+ let size = 0;
44
+ size = digits - str.length + 1;
45
+ str = new Array(size).join('0').concat(str);
46
+ return str;
47
+ }
48
+ isCurrencyShouldBeOnRight(currencySymbol) {
49
+ let res = false;
50
+ if (currencySymbol == "€" ||
51
+ currencySymbol == "₪" ||
52
+ currencySymbol == "Ft" ||
53
+ currencySymbol == "Kč" ||
54
+ currencySymbol == "руб" ||
55
+ currencySymbol == "zł" ||
56
+ currencySymbol == "kr.") {
57
+ res = true;
58
+ }
59
+ return res;
60
+ }
61
+ cutValueByFractionDigits(value, maxFractionDigits) {
62
+ let res = value;
63
+ maxFractionDigits = maxFractionDigits || 2;
64
+ const decimalSeparator = this.getDecimalSeparator();
65
+ if (value.includes(decimalSeparator)) {
66
+ const valueArr = value.split(decimalSeparator);
67
+ // if (valueArr[1].length < maxFractionDigits) {
68
+ valueArr[1] = valueArr[1].padEnd(maxFractionDigits, '0');
69
+ // }
70
+ res = `${valueArr[0]}${decimalSeparator}${valueArr[1].slice(0, maxFractionDigits)}`;
71
+ }
72
+ return res;
73
+ }
74
+ parseDate(dateStr, showTime = false) {
75
+ let retVal = null;
76
+ if (dateStr !== '') {
77
+ retVal = new Date(dateStr);
78
+ // Convert to date with no offset.
79
+ if (!showTime) {
80
+ const index = dateStr.indexOf('T');
81
+ if (index > 0) {
82
+ dateStr = dateStr.substring(0, index);
83
+ }
84
+ const dateText = dateStr.split('-');
85
+ if (dateText.length === 3) {
86
+ const year = Number(dateText[0]);
87
+ const month = Number(dateText[1]) - 1;
88
+ const day = Number(dateText[2]);
89
+ retVal = new Date(year, month, day, 0, retVal.getTimezoneOffset() * -1);
90
+ }
91
+ }
92
+ else {
93
+ retVal = new Date(retVal.getFullYear(), retVal.getMonth(), retVal.getDate(), retVal.getHours(), retVal.getMinutes() + retVal.getTimezoneOffset() * -1, retVal.getSeconds());
94
+ }
95
+ }
96
+ if (retVal && isNaN(retVal.getTime())) {
97
+ retVal = null;
98
+ }
99
+ return retVal;
100
+ }
101
+ stringifyDate(date, showTime = false) {
102
+ if (date) {
103
+ if (showTime) {
104
+ return date.toISOString(); // include - offset
105
+ }
106
+ else {
107
+ const dateText = [];
108
+ dateText.push(date.getFullYear(), '-', date.getMonth() + 1, '-', date.getDate());
109
+ return dateText.join('');
110
+ }
111
+ }
112
+ else {
113
+ return '';
114
+ }
115
+ }
116
+ isValueHtml(value) {
117
+ let res = false;
118
+ const REGEXP = /<\/?[a-z][\s\S]*>/i;
119
+ res = REGEXP.test(value);
120
+ return res;
121
+ }
122
+ isJsonString(str) {
123
+ try {
124
+ JSON.parse(str);
125
+ }
126
+ catch (e) {
127
+ return false;
128
+ }
129
+ return true;
130
+ }
131
+ getSvgElementFromString(document, svgContent) {
132
+ const div = document.createElement('DIV');
133
+ // div.className = 'svg-icon';
134
+ // Add class svg-icon
135
+ if (svgContent?.length > 0) {
136
+ div.innerHTML = svgContent.replace('<svg ', '<svg class="svg-icon" ');
137
+ }
138
+ return (div.querySelector('svg') ||
139
+ document.createElementNS('http://www.w3.org/2000/svg', 'path'));
140
+ }
141
+ // formatPercent(value: any, digitsInfo = '1.0-2') {
142
+ formatPercent(value, minFractionDigits = 0, maxFractionDigits = 2) {
143
+ minFractionDigits = coerceNumberProperty(minFractionDigits, null);
144
+ maxFractionDigits = coerceNumberProperty(maxFractionDigits, null);
145
+ value = this.cutValueByFractionDigits(value?.toString(), Math.max(minFractionDigits, maxFractionDigits));
146
+ const number = this.prepareNumberToFormat(value);
147
+ if (number === 0) {
148
+ return '0%';
149
+ }
150
+ else {
151
+ // return formatPercent(number / 100, this.culture, digitsInfo);
152
+ return new Intl.NumberFormat(this.culture, {
153
+ style: 'percent',
154
+ minimumFractionDigits: minFractionDigits || 0,
155
+ maximumFractionDigits: maxFractionDigits || Math.max(2, minFractionDigits),
156
+ }).format(number / 100);
157
+ }
158
+ }
159
+ // formatCurrency(value: any, currencySign = '', digitsInfo = '1.2-2') {
160
+ formatCurrency(value, currencySign = '', minFractionDigits = 2, maxFractionDigits = 2, useGrouping = true) {
161
+ minFractionDigits = coerceNumberProperty(minFractionDigits, null);
162
+ maxFractionDigits = coerceNumberProperty(maxFractionDigits, null);
163
+ let res = '';
164
+ // If the decimal separator is the last digit
165
+ // if (value.length > 0 && value.indexOf(this.getDecimalSeparator()) === value.length -1) {
166
+ // res = value;
167
+ // } else {
168
+ value = this.cutValueByFractionDigits(value?.toString(), Math.max(minFractionDigits, maxFractionDigits));
169
+ const number = this.prepareNumberToFormat(value);
170
+ const styleOptions = {
171
+ // style: 'currency',
172
+ // currencySign: currencySign,
173
+ useGrouping: useGrouping,
174
+ minimumFractionDigits: minFractionDigits || Math.min(2, maxFractionDigits || 2),
175
+ maximumFractionDigits: maxFractionDigits || Math.max(2, minFractionDigits),
176
+ };
177
+ if (number === 0) {
178
+ // return formatCurrency(0, this.culture, currencySign, undefined, digitsInfo);
179
+ res = new Intl.NumberFormat(this.culture, styleOptions).format(0);
180
+ }
181
+ else {
182
+ // return formatCurrency(value, this.culture, currencySign, undefined, digitsInfo);
183
+ res = new Intl.NumberFormat(this.culture, styleOptions).format(number);
184
+ }
185
+ if (currencySign.length > 0) {
186
+ res = this.isCurrencyShouldBeOnRight(currencySign) ? `${res} ${currencySign}` : `${currencySign} ${res}`;
187
+ }
188
+ // }
189
+ return res;
190
+ }
191
+ // formatDecimal(value: any, digitsInfo = '1.2-2') {
192
+ formatDecimal(value, minFractionDigits = 2, maxFractionDigits = 2, useGrouping = true) {
193
+ minFractionDigits = coerceNumberProperty(minFractionDigits, null);
194
+ // console.log('formatDecimal minFractionDigits value is', minFractionDigits);
195
+ maxFractionDigits = coerceNumberProperty(maxFractionDigits, null);
196
+ // console.log('formatDecimal minFractionDigits value is', maxFractionDigits);
197
+ value = this.cutValueByFractionDigits(value?.toString(), Math.max(minFractionDigits, maxFractionDigits));
198
+ const number = this.prepareNumberToFormat(value);
199
+ // console.log('number value is', number);
200
+ if (number === 0) {
201
+ return '0';
202
+ }
203
+ else {
204
+ // return formatNumber(value, this.culture, digitsInfo);
205
+ const res = new Intl.NumberFormat(this.culture, {
206
+ useGrouping: useGrouping,
207
+ minimumFractionDigits: minFractionDigits || Math.min(2, maxFractionDigits || 2),
208
+ maximumFractionDigits: maxFractionDigits || Math.max(2, minFractionDigits),
209
+ }).format(number);
210
+ // console.log('Intl.NumberFormat value is', res);
211
+ return res;
212
+ }
213
+ }
214
+ // formatNumber(value: any, digitsInfo = '1.0-0'): string {
215
+ formatNumber(value, useGrouping = true) {
216
+ const number = this.prepareNumberToFormat(value);
217
+ if (number === 0) {
218
+ return '0';
219
+ }
220
+ else {
221
+ // return formatNumber(value, this.culture, digitsInfo);
222
+ return new Intl.NumberFormat(this.culture, {
223
+ useGrouping: useGrouping,
224
+ minimumFractionDigits: 0,
225
+ maximumFractionDigits: 0,
226
+ }).format(number);
227
+ }
228
+ }
229
+ /**
230
+ * Convert a number in milliseconds to a standard duration string.
231
+ * @param {number} value - duration in milliseconds
232
+ * @param {object} options - formatDuration options object
233
+ * @param {boolean} [options.leading=false] - add leading zero
234
+ * @returns string - formatted duration string
235
+ */
236
+ formatDuration(value, options = {}) {
237
+ const isNumber = _isNumberValue(value);
238
+ if (!isNumber) {
239
+ return value;
240
+ }
241
+ else {
242
+ let number = this.prepareNumberToFormat(value);
243
+ const leading = options?.leading || true;
244
+ const duration = options?.duration || 'milliseconds';
245
+ if (duration === 'seconds') {
246
+ number = number * 1000;
247
+ }
248
+ const unsignedMs = number < 0 ? -number : number;
249
+ const sign = number <= -1000 ? '-' : '';
250
+ const t = this.parseMs(unsignedMs);
251
+ const seconds = this.addZero(t.seconds);
252
+ if (t.days) {
253
+ return sign + t.days + ':' + this.addZero(t.hours) + ':' + this.addZero(t.minutes) + ':' + seconds;
254
+ }
255
+ if (t.hours) {
256
+ return sign + (leading ? this.addZero(t.hours) : t.hours) + ':' + this.addZero(t.minutes) + ':' + seconds;
257
+ }
258
+ return sign + (leading ? this.addZero(t.minutes) : t.minutes) + ':' + seconds;
259
+ }
260
+ }
261
+ incrementNumber(value) {
262
+ let numberValue = coerceNumberProperty(value, 0);
263
+ return (++numberValue).toString();
264
+ }
265
+ decrementNumber(value) {
266
+ let numberValue = coerceNumberProperty(value, 0);
267
+ return (--numberValue).toString();
268
+ }
269
+ getDecimalSeparator() {
270
+ const numberWithDecimalSeparator = 1.1;
271
+ return numberWithDecimalSeparator
272
+ .toLocaleString(this.culture)
273
+ .substring(1, 2);
274
+ }
275
+ changeDecimalSeparatorWhenItsComma(value, reverse = false) {
276
+ // If the decimal separator is ','
277
+ if (this.getDecimalSeparator() === ',') {
278
+ // In case that the value isn't string.
279
+ value = value?.toString() || '';
280
+ // If reverse change the number from '.' to ',' else do the opposite.
281
+ value = reverse ? value.replace('.', ',') : value.replace(',', '.');
282
+ }
283
+ return value;
284
+ }
285
+ isEqualNumber(numberAsString, numberAsString2) {
286
+ const number = this.prepareNumberToFormat(numberAsString);
287
+ const number2 = this.prepareNumberToFormat(numberAsString2);
288
+ return number === number2;
289
+ }
290
+ }
291
+ PepUtilitiesService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepUtilitiesService, deps: [{ token: i1.TranslateService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
292
+ PepUtilitiesService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepUtilitiesService, providedIn: 'root' });
293
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepUtilitiesService, decorators: [{
294
+ type: Injectable,
295
+ args: [{
296
+ providedIn: 'root',
297
+ }]
298
+ }], ctorParameters: function () { return [{ type: i1.TranslateService, decorators: [{
299
+ type: Optional
300
+ }] }]; } });
301
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0aWVzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL3NyYy9jb3JlL2NvbW1vbi9zZXJ2aWNlcy91dGlsaXRpZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFN0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQU1yRCxNQUFNLE9BQU8sbUJBQW1CO0lBRzVCLFlBQWdDLFlBQThCLElBQUk7UUFBbEMsY0FBUyxHQUFULFNBQVMsQ0FBeUI7UUFGMUQsWUFBTyxHQUFHLE9BQU8sQ0FBQztRQUd0QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUscUJBQXFCLEVBQUUsSUFBSSxPQUFPLENBQUM7UUFFbEUsUUFBUTtRQUNSLGdFQUFnRTtRQUNoRSxhQUFhO0lBQ2pCLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxLQUFhLEVBQUUsYUFBYSxHQUFHLENBQUM7UUFDMUQsbURBQW1EO1FBQ25ELElBQUksS0FBSyxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDbkIsaUZBQWlGO1lBQ2pGLEtBQUssR0FBRyxJQUFJLENBQUMsa0NBQWtDLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkQsc0ZBQXNGO1NBQ3pGO1FBRUQsT0FBTyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELHlEQUF5RDtJQUN6RCwrREFBK0Q7SUFDdkQsT0FBTyxDQUFDLFlBQW9CO1FBQ2hDLElBQUksT0FBTyxZQUFZLEtBQUssUUFBUSxFQUFFO1lBQ2xDLE1BQU0sSUFBSSxTQUFTLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtTQUMzQztRQUVELE9BQU87WUFDSCxJQUFJLEVBQUUsSUFB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QUMscUJBQXFCLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFNUQsT0FBTyxNQUFNLEtBQUssT0FBTyxDQUFDO0lBQzlCLENBQUM7O2dIQXhWUSxtQkFBbUI7b0hBQW5CLG1CQUFtQixjQUZoQixNQUFNOzJGQUVULG1CQUFtQjtrQkFIL0IsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckI7OzBCQUlnQixRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29lcmNlTnVtYmVyUHJvcGVydHksIF9pc051bWJlclZhbHVlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IGZvcm1hdEN1cnJlbmN5LCBmb3JtYXROdW1iZXIsIGZvcm1hdFBlcmNlbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgUGVwVXRpbGl0aWVzU2VydmljZSB7XG4gICAgcHJpdmF0ZSBjdWx0dXJlID0gJ2VuLVVTJztcblxuICAgIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlID0gbnVsbCkge1xuICAgICAgICB0aGlzLmN1bHR1cmUgPSB0aGlzLnRyYW5zbGF0ZT8uZ2V0QnJvd3NlckN1bHR1cmVMYW5nKCkgfHwgJ2VuLVVTJztcblxuICAgICAgICAvLyB0cnkge1xuICAgICAgICAvLyAgICAgaW1wb3J0KGBAYW5ndWxhci9jb21tb24vbG9jYWxlcy9nbG9iYWwvJHt0aGlzLmN1bHR1cmV9YCk7XG4gICAgICAgIC8vIH0gY2F0Y2gge31cbiAgICB9XG5cbiAgICBwcml2YXRlIHByZXBhcmVOdW1iZXJUb0Zvcm1hdCh2YWx1ZTogc3RyaW5nLCBmYWxsYmFja1ZhbHVlID0gMCk6IG51bWJlciB7XG4gICAgICAgIC8vIElmIHRoZSBkZWNpbWFsIHNlcGFyYXRvciBpcyAnLCcgY2hhbmdlIGl0IHRvICcuJ1xuICAgICAgICBpZiAodmFsdWU/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSBkZWNpbWFsIHNlcGFyYXRvciBpcyAnLCcgY2hhbmdlIGl0IHRvICcuJyBmb3IgbGV0IHRoZSBmb3JtYXR0aW5nIHdvcmtzLlxuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmNoYW5nZURlY2ltYWxTZXBhcmF0b3JXaGVuSXRzQ29tbWEodmFsdWUpO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2NvZXJjZU51bWJlclByb3BlcnR5IGFmdGVyIGNoYW5nZSBkZWNpbWFsIHNlcGFyYXRvciB2YWx1ZSBpcycsIHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSwgZmFsbGJhY2tWYWx1ZSk7XG4gICAgfVxuXG4gICAgLy8gYWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvcGFyc2UtbXMuXG4gICAgLy8gbW92ZWQgdG8gaW50ZXJuYWwgZnVuY3Rpb24gYmVjYXVzZSBwYXJzZS1tcyBpcyBub3cgcHVyZSBFU00uXG4gICAgcHJpdmF0ZSBwYXJzZU1zKG1pbGxpc2Vjb25kczogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbWlsbGlzZWNvbmRzICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgYSBudW1iZXInKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRheXM6IE1hdGgudHJ1bmMobWlsbGlzZWNvbmRzIC8gODY0MDAwMDApLFxuICAgICAgICAgICAgaG91cnM6IE1hdGgudHJ1bmMobWlsbGlzZWNvbmRzIC8gMzYwMDAwMCkgJSAyNCxcbiAgICAgICAgICAgIG1pbnV0ZXM6IE1hdGgudHJ1bmMobWlsbGlzZWNvbmRzIC8gNjAwMDApICUgNjAsXG4gICAgICAgICAgICBzZWNvbmRzOiBNYXRoLnRydW5jKG1pbGxpc2Vjb25kcyAvIDEwMDApICUgNjAsXG4gICAgICAgICAgICBtaWxsaXNlY29uZHM6IE1hdGgudHJ1bmMobWlsbGlzZWNvbmRzKSAlIDEwMDBcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vcmFmYWVscmluYWxkaS9hZGQtemVyby5cbiAgICAvLyBtb3ZlZCB0byBpbnRlcm5hbCBmdW5jdGlvbiBiL2MgYWRkWmVybyBpcyB1bm1haW50YWluZWQgKDcrIHllYXJzKS5cbiAgICAvLyBzdHJpcHBlZCBvdXQgbmVnYXRpdmUgc2lnbiBsb2dpYyBzaW5jZSB3ZSdyZSBhbHJlYWR5IGRvaW5nIGl0IGVsc2V3aGVyZS5cbiAgICBwcml2YXRlIGFkZFplcm8odmFsdWU6IG51bWJlciwgZGlnaXRzID0gMikge1xuICAgICAgICBkaWdpdHMgPSBkaWdpdHMgfHwgMlxuXG4gICAgICAgIGxldCBzdHIgPSB2YWx1ZS50b1N0cmluZygpXG4gICAgICAgIGxldCBzaXplID0gMFxuXG4gICAgICAgIHNpemUgPSBkaWdpdHMgLSBzdHIubGVuZ3RoICsgMVxuICAgICAgICBzdHIgPSBuZXcgQXJyYXkoc2l6ZSkuam9pbignMCcpLmNvbmNhdChzdHIpXG5cbiAgICAgICAgcmV0dXJuIHN0clxuICAgIH1cblxuICAgIHByaXZhdGUgaXNDdXJyZW5jeVNob3VsZEJlT25SaWdodChjdXJyZW5jeVN5bWJvbDogc3RyaW5nKSB7XG4gICAgICAgIGxldCByZXMgPSBmYWxzZTtcblxuICAgICAgICBpZiAoY3VycmVuY3lTeW1ib2wgPT0gXCLigqxcIiB8fFxuICAgICAgICAgICAgY3VycmVuY3lTeW1ib2wgPT0gXCLigqpcIiB8fFxuICAgICAgICAgICAgY3VycmVuY3lTeW1ib2wgPT0gXCJGdFwiIHx8XG4gICAgICAgICAgICBjdXJyZW5jeVN5bWJvbCA9PSBcIkvEjVwiIHx8XG4gICAgICAgICAgICBjdXJyZW5jeVN5bWJvbCA9PSBcItGA0YPQsVwiIHx8XG4gICAgICAgICAgICBjdXJyZW5jeVN5bWJvbCA9PSBcInrFglwiIHx8XG4gICAgICAgICAgICBjdXJyZW5jeVN5bWJvbCA9PSBcImtyLlwiKSB7XG4gICAgICAgICAgICByZXMgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGN1dFZhbHVlQnlGcmFjdGlvbkRpZ2l0cyh2YWx1ZTogc3RyaW5nLCBtYXhGcmFjdGlvbkRpZ2l0czogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHJlcyA9IHZhbHVlO1xuICAgICAgICBtYXhGcmFjdGlvbkRpZ2l0cyA9IG1heEZyYWN0aW9uRGlnaXRzIHx8IDI7XG4gICAgICAgIGNvbnN0IGRlY2ltYWxTZXBhcmF0b3IgPSB0aGlzLmdldERlY2ltYWxTZXBhcmF0b3IoKTtcblxuICAgICAgICBpZiAodmFsdWUuaW5jbHVkZXMoZGVjaW1hbFNlcGFyYXRvcikpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlQXJyID0gdmFsdWUuc3BsaXQoZGVjaW1hbFNlcGFyYXRvcik7XG5cbiAgICAgICAgICAgIC8vIGlmICh2YWx1ZUFyclsxXS5sZW5ndGggPCBtYXhGcmFjdGlvbkRpZ2l0cykge1xuICAgICAgICAgICAgdmFsdWVBcnJbMV0gPSB2YWx1ZUFyclsxXS5wYWRFbmQobWF4RnJhY3Rpb25EaWdpdHMsICcwJyk7XG4gICAgICAgICAgICAvLyB9XG5cbiAgICAgICAgICAgIHJlcyA9IGAke3ZhbHVlQXJyWzBdfSR7ZGVjaW1hbFNlcGFyYXRvcn0ke3ZhbHVlQXJyWzFdLnNsaWNlKDAsIG1heEZyYWN0aW9uRGlnaXRzKX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBwYXJzZURhdGUoZGF0ZVN0cjogc3RyaW5nLCBzaG93VGltZSA9IGZhbHNlKTogRGF0ZSB7XG4gICAgICAgIGxldCByZXRWYWw6IERhdGUgPSBudWxsO1xuICAgICAgICBpZiAoZGF0ZVN0ciAhPT0gJycpIHtcbiAgICAgICAgICAgIHJldFZhbCA9IG5ldyBEYXRlKGRhdGVTdHIpO1xuXG4gICAgICAgICAgICAvLyBDb252ZXJ0IHRvIGRhdGUgd2l0aCBubyBvZmZzZXQuXG4gICAgICAgICAgICBpZiAoIXNob3dUaW1lKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBkYXRlU3RyLmluZGV4T2YoJ1QnKTtcblxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0ZVN0ciA9IGRhdGVTdHIuc3Vic3RyaW5nKDAsIGluZGV4KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBkYXRlVGV4dCA9IGRhdGVTdHIuc3BsaXQoJy0nKTtcbiAgICAgICAgICAgICAgICBpZiAoZGF0ZVRleHQubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHllYXIgPSBOdW1iZXIoZGF0ZVRleHRbMF0pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtb250aCA9IE51bWJlcihkYXRlVGV4dFsxXSkgLSAxO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXkgPSBOdW1iZXIoZGF0ZVRleHRbMl0pO1xuICAgICAgICAgICAgICAgICAgICByZXRWYWwgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgZGF5LCAwLCByZXRWYWwuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIC0xKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldFZhbCA9IG5ldyBEYXRlKFxuICAgICAgICAgICAgICAgICAgICByZXRWYWwuZ2V0RnVsbFllYXIoKSwgcmV0VmFsLmdldE1vbnRoKCksIHJldFZhbC5nZXREYXRlKCksIHJldFZhbC5nZXRIb3VycygpLFxuICAgICAgICAgICAgICAgICAgICByZXRWYWwuZ2V0TWludXRlcygpICsgcmV0VmFsLmdldFRpbWV6b25lT2Zmc2V0KCkgKiAtMSwgcmV0VmFsLmdldFNlY29uZHMoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJldFZhbCAmJiBpc05hTihyZXRWYWwuZ2V0VGltZSgpKSkge1xuICAgICAgICAgICAgcmV0VmFsID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0VmFsO1xuICAgIH1cblxuICAgIHN0cmluZ2lmeURhdGUoZGF0ZTogRGF0ZSwgc2hvd1RpbWUgPSBmYWxzZSk6IHN0cmluZyB7XG4gICAgICAgIGlmIChkYXRlKSB7XG4gICAgICAgICAgICBpZiAoc2hvd1RpbWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0ZS50b0lTT1N0cmluZygpOyAvLyBpbmNsdWRlIC0gb2Zmc2V0XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVUZXh0ID0gW107XG4gICAgICAgICAgICAgICAgZGF0ZVRleHQucHVzaChcbiAgICAgICAgICAgICAgICAgICAgZGF0ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgICAgICAgICAgICAnLScsXG4gICAgICAgICAgICAgICAgICAgIGRhdGUuZ2V0TW9udGgoKSArIDEsXG4gICAgICAgICAgICAgICAgICAgICctJyxcbiAgICAgICAgICAgICAgICAgICAgZGF0ZS5nZXREYXRlKClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHJldHVybiBkYXRlVGV4dC5qb2luKCcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzVmFsdWVIdG1sKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgbGV0IHJlcyA9IGZhbHNlO1xuICAgICAgICBjb25zdCBSRUdFWFAgPSAvPFxcLz9bYS16XVtcXHNcXFNdKj4vaTtcbiAgICAgICAgcmVzID0gUkVHRVhQLnRlc3QodmFsdWUpO1xuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgaXNKc29uU3RyaW5nKHN0cjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBKU09OLnBhcnNlKHN0cik7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBnZXRTdmdFbGVtZW50RnJvbVN0cmluZyhkb2N1bWVudCwgc3ZnQ29udGVudDogc3RyaW5nKTogU1ZHRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xuICAgICAgICAvLyBkaXYuY2xhc3NOYW1lID0gJ3N2Zy1pY29uJztcbiAgICAgICAgLy8gQWRkIGNsYXNzIHN2Zy1pY29uXG4gICAgICAgIGlmIChzdmdDb250ZW50Py5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0gc3ZnQ29udGVudC5yZXBsYWNlKCc8c3ZnICcsICc8c3ZnIGNsYXNzPVwic3ZnLWljb25cIiAnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgZGl2LnF1ZXJ5U2VsZWN0b3IoJ3N2ZycpIHx8XG4gICAgICAgICAgICBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3BhdGgnKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8vIGZvcm1hdFBlcmNlbnQodmFsdWU6IGFueSwgZGlnaXRzSW5mbyA9ICcxLjAtMicpIHtcbiAgICBmb3JtYXRQZXJjZW50KHZhbHVlOiBhbnksIG1pbkZyYWN0aW9uRGlnaXRzID0gMCwgbWF4RnJhY3Rpb25EaWdpdHMgPSAyKSB7XG4gICAgICAgIG1pbkZyYWN0aW9uRGlnaXRzID0gY29lcmNlTnVtYmVyUHJvcGVydHkobWluRnJhY3Rpb25EaWdpdHMsIG51bGwpO1xuICAgICAgICBtYXhGcmFjdGlvbkRpZ2l0cyA9IGNvZXJjZU51bWJlclByb3BlcnR5KG1heEZyYWN0aW9uRGlnaXRzLCBudWxsKTtcblxuICAgICAgICB2YWx1ZSA9IHRoaXMuY3V0VmFsdWVCeUZyYWN0aW9uRGlnaXRzKHZhbHVlPy50b1N0cmluZygpLCBNYXRoLm1heChtaW5GcmFjdGlvbkRpZ2l0cywgbWF4RnJhY3Rpb25EaWdpdHMpKTtcbiAgICAgICAgY29uc3QgbnVtYmVyID0gdGhpcy5wcmVwYXJlTnVtYmVyVG9Gb3JtYXQodmFsdWUpO1xuXG4gICAgICAgIGlmIChudW1iZXIgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiAnMCUnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gcmV0dXJuIGZvcm1hdFBlcmNlbnQobnVtYmVyIC8gMTAwLCB0aGlzLmN1bHR1cmUsIGRpZ2l0c0luZm8pO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnRsLk51bWJlckZvcm1hdCh0aGlzLmN1bHR1cmUsIHtcbiAgICAgICAgICAgICAgICBzdHlsZTogJ3BlcmNlbnQnLFxuICAgICAgICAgICAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogbWluRnJhY3Rpb25EaWdpdHMgfHwgMCxcbiAgICAgICAgICAgICAgICBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IG1heEZyYWN0aW9uRGlnaXRzIHx8IE1hdGgubWF4KDIsIG1pbkZyYWN0aW9uRGlnaXRzKSxcbiAgICAgICAgICAgIH0pLmZvcm1hdChudW1iZXIgLyAxMDApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gZm9ybWF0Q3VycmVuY3kodmFsdWU6IGFueSwgY3VycmVuY3lTaWduID0gJycsIGRpZ2l0c0luZm8gPSAnMS4yLTInKSB7XG4gICAgZm9ybWF0Q3VycmVuY3kodmFsdWU6IGFueSwgY3VycmVuY3lTaWduID0gJycsIG1pbkZyYWN0aW9uRGlnaXRzID0gMiwgbWF4RnJhY3Rpb25EaWdpdHMgPSAyLCB1c2VHcm91cGluZyA9IHRydWUpIHtcbiAgICAgICAgbWluRnJhY3Rpb25EaWdpdHMgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eShtaW5GcmFjdGlvbkRpZ2l0cywgbnVsbCk7XG4gICAgICAgIG1heEZyYWN0aW9uRGlnaXRzID0gY29lcmNlTnVtYmVyUHJvcGVydHkobWF4RnJhY3Rpb25EaWdpdHMsIG51bGwpO1xuXG4gICAgICAgIGxldCByZXMgPSAnJztcblxuICAgICAgICAvLyBJZiB0aGUgZGVjaW1hbCBzZXBhcmF0b3IgaXMgdGhlIGxhc3QgZGlnaXRcbiAgICAgICAgLy8gaWYgKHZhbHVlLmxlbmd0aCA+IDAgJiYgdmFsdWUuaW5kZXhPZih0aGlzLmdldERlY2ltYWxTZXBhcmF0b3IoKSkgPT09IHZhbHVlLmxlbmd0aCAtMSkge1xuICAgICAgICAvLyAgICAgcmVzID0gdmFsdWU7XG4gICAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHRoaXMuY3V0VmFsdWVCeUZyYWN0aW9uRGlnaXRzKHZhbHVlPy50b1N0cmluZygpLCBNYXRoLm1heChtaW5GcmFjdGlvbkRpZ2l0cywgbWF4RnJhY3Rpb25EaWdpdHMpKTtcbiAgICAgICAgICAgIGNvbnN0IG51bWJlciA9IHRoaXMucHJlcGFyZU51bWJlclRvRm9ybWF0KHZhbHVlKTtcbiAgICAgICAgICAgIGNvbnN0IHN0eWxlT3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAvLyBzdHlsZTogJ2N1cnJlbmN5JyxcbiAgICAgICAgICAgICAgICAvLyBjdXJyZW5jeVNpZ246IGN1cnJlbmN5U2lnbixcbiAgICAgICAgICAgICAgICB1c2VHcm91cGluZzogdXNlR3JvdXBpbmcsXG4gICAgICAgICAgICAgICAgbWluaW11bUZyYWN0aW9uRGlnaXRzOiBtaW5GcmFjdGlvbkRpZ2l0cyB8fCBNYXRoLm1pbigyLCBtYXhGcmFjdGlvbkRpZ2l0cyB8fCAyKSxcbiAgICAgICAgICAgICAgICBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IG1heEZyYWN0aW9uRGlnaXRzIHx8IE1hdGgubWF4KDIsIG1pbkZyYWN0aW9uRGlnaXRzKSxcbiAgICAgICAgICAgIH07XG4gICAgXG4gICAgICAgICAgICBpZiAobnVtYmVyID09PSAwKSB7XG4gICAgICAgICAgICAgICAgLy8gcmV0dXJuIGZvcm1hdEN1cnJlbmN5KDAsIHRoaXMuY3VsdHVyZSwgY3VycmVuY3lTaWduLCB1bmRlZmluZWQsIGRpZ2l0c0luZm8pO1xuICAgICAgICAgICAgICAgIHJlcyA9IG5ldyBJbnRsLk51bWJlckZvcm1hdCh0aGlzLmN1bHR1cmUsIHN0eWxlT3B0aW9ucykuZm9ybWF0KDApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyByZXR1cm4gZm9ybWF0Q3VycmVuY3kodmFsdWUsIHRoaXMuY3VsdHVyZSwgY3VycmVuY3lTaWduLCB1bmRlZmluZWQsIGRpZ2l0c0luZm8pO1xuICAgICAgICAgICAgICAgIHJlcyA9IG5ldyBJbnRsLk51bWJlckZvcm1hdCh0aGlzLmN1bHR1cmUsIHN0eWxlT3B0aW9ucykuZm9ybWF0KG51bWJlcik7XG4gICAgICAgICAgICB9XG4gICAgXG4gICAgICAgICAgICBpZiAoY3VycmVuY3lTaWduLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICByZXMgPSB0aGlzLmlzQ3VycmVuY3lTaG91bGRCZU9uUmlnaHQoY3VycmVuY3lTaWduKSA/IGAke3Jlc30gJHtjdXJyZW5jeVNpZ259YCA6IGAke2N1cnJlbmN5U2lnbn0gJHtyZXN9YFxuICAgICAgICAgICAgfVxuICAgICAgICAvLyB9XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICAvLyBmb3JtYXREZWNpbWFsKHZhbHVlOiBhbnksIGRpZ2l0c0luZm8gPSAnMS4yLTInKSB7XG4gICAgZm9ybWF0RGVjaW1hbCh2YWx1ZTogYW55LCBtaW5GcmFjdGlvbkRpZ2l0cyA9IDIsIG1heEZyYWN0aW9uRGlnaXRzID0gMiwgdXNlR3JvdXBpbmcgPSB0cnVlKSB7XG4gICAgICAgIG1pbkZyYWN0aW9uRGlnaXRzID0gY29lcmNlTnVtYmVyUHJvcGVydHkobWluRnJhY3Rpb25EaWdpdHMsIG51bGwpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnZm9ybWF0RGVjaW1hbCBtaW5GcmFjdGlvbkRpZ2l0cyB2YWx1ZSBpcycsIG1pbkZyYWN0aW9uRGlnaXRzKTtcbiAgICAgICAgbWF4RnJhY3Rpb25EaWdpdHMgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eShtYXhGcmFjdGlvbkRpZ2l0cywgbnVsbCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdmb3JtYXREZWNpbWFsIG1pbkZyYWN0aW9uRGlnaXRzIHZhbHVlIGlzJywgbWF4RnJhY3Rpb25EaWdpdHMpO1xuXG4gICAgICAgIHZhbHVlID0gdGhpcy5jdXRWYWx1ZUJ5RnJhY3Rpb25EaWdpdHModmFsdWU/LnRvU3RyaW5nKCksIE1hdGgubWF4KG1pbkZyYWN0aW9uRGlnaXRzLCBtYXhGcmFjdGlvbkRpZ2l0cykpO1xuICAgICAgICBjb25zdCBudW1iZXIgPSB0aGlzLnByZXBhcmVOdW1iZXJUb0Zvcm1hdCh2YWx1ZSk7XG4gICAgICAgIFxuICAgICAgICAvLyBjb25zb2xlLmxvZygnbnVtYmVyIHZhbHVlIGlzJywgbnVtYmVyKTtcblxuICAgICAgICBpZiAobnVtYmVyID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gJzAnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gcmV0dXJuIGZvcm1hdE51bWJlcih2YWx1ZSwgdGhpcy5jdWx0dXJlLCBkaWdpdHNJbmZvKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IG5ldyBJbnRsLk51bWJlckZvcm1hdCh0aGlzLmN1bHR1cmUsIHtcbiAgICAgICAgICAgICAgICB1c2VHcm91cGluZzogdXNlR3JvdXBpbmcsXG4gICAgICAgICAgICAgICAgbWluaW11bUZyYWN0aW9uRGlnaXRzOiBtaW5GcmFjdGlvbkRpZ2l0cyB8fCBNYXRoLm1pbigyLCBtYXhGcmFjdGlvbkRpZ2l0cyB8fCAyKSxcbiAgICAgICAgICAgICAgICBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IG1heEZyYWN0aW9uRGlnaXRzIHx8IE1hdGgubWF4KDIsIG1pbkZyYWN0aW9uRGlnaXRzKSxcbiAgICAgICAgICAgIH0pLmZvcm1hdChudW1iZXIpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnSW50bC5OdW1iZXJGb3JtYXQgdmFsdWUgaXMnLCByZXMpO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gZm9ybWF0TnVtYmVyKHZhbHVlOiBhbnksIGRpZ2l0c0luZm8gPSAnMS4wLTAnKTogc3RyaW5nIHtcbiAgICBmb3JtYXROdW1iZXIodmFsdWU6IGFueSwgdXNlR3JvdXBpbmcgPSB0cnVlKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgbnVtYmVyID0gdGhpcy5wcmVwYXJlTnVtYmVyVG9Gb3JtYXQodmFsdWUpO1xuXG4gICAgICAgIGlmIChudW1iZXIgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiAnMCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyByZXR1cm4gZm9ybWF0TnVtYmVyKHZhbHVlLCB0aGlzLmN1bHR1cmUsIGRpZ2l0c0luZm8pO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnRsLk51bWJlckZvcm1hdCh0aGlzLmN1bHR1cmUsIHtcbiAgICAgICAgICAgICAgICB1c2VHcm91cGluZzogdXNlR3JvdXBpbmcsXG4gICAgICAgICAgICAgICAgbWluaW11bUZyYWN0aW9uRGlnaXRzOiAwLFxuICAgICAgICAgICAgICAgIG1heGltdW1GcmFjdGlvbkRpZ2l0czogMCxcbiAgICAgICAgICAgIH0pLmZvcm1hdChudW1iZXIpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IGEgbnVtYmVyIGluIG1pbGxpc2Vjb25kcyB0byBhIHN0YW5kYXJkIGR1cmF0aW9uIHN0cmluZy5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBkdXJhdGlvbiBpbiBtaWxsaXNlY29uZHNcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIGZvcm1hdER1cmF0aW9uIG9wdGlvbnMgb2JqZWN0XG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5sZWFkaW5nPWZhbHNlXSAtIGFkZCBsZWFkaW5nIHplcm9cbiAgICAgKiBAcmV0dXJucyBzdHJpbmcgLSBmb3JtYXR0ZWQgZHVyYXRpb24gc3RyaW5nXG4gICAgKi9cbiAgICBmb3JtYXREdXJhdGlvbih2YWx1ZSwgb3B0aW9uczogeyBsZWFkaW5nPzogYm9vbGVhbiwgZHVyYXRpb24/OiAnbWlsbGlzZWNvbmRzJyB8ICdzZWNvbmRzJyB9ID0ge30pOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBpc051bWJlciA9IF9pc051bWJlclZhbHVlKHZhbHVlKTtcblxuICAgICAgICBpZiAoIWlzTnVtYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbnVtYmVyID0gdGhpcy5wcmVwYXJlTnVtYmVyVG9Gb3JtYXQodmFsdWUpO1xuXG4gICAgICAgICAgICBjb25zdCBsZWFkaW5nID0gb3B0aW9ucz8ubGVhZGluZyB8fCB0cnVlO1xuICAgICAgICAgICAgY29uc3QgZHVyYXRpb24gPSBvcHRpb25zPy5kdXJhdGlvbiB8fCAnbWlsbGlzZWNvbmRzJztcbiAgICAgICAgICAgIGlmIChkdXJhdGlvbiA9PT0gJ3NlY29uZHMnKSB7XG4gICAgICAgICAgICAgICAgbnVtYmVyID0gbnVtYmVyICogMTAwMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdW5zaWduZWRNcyA9IG51bWJlciA8IDAgPyAtbnVtYmVyIDogbnVtYmVyO1xuICAgICAgICAgICAgY29uc3Qgc2lnbiA9IG51bWJlciA8PSAtMTAwMCA/ICctJyA6ICcnO1xuICAgICAgICAgICAgY29uc3QgdCA9IHRoaXMucGFyc2VNcyh1bnNpZ25lZE1zKTtcbiAgICAgICAgICAgIGNvbnN0IHNlY29uZHMgPSB0aGlzLmFkZFplcm8odC5zZWNvbmRzKTtcblxuICAgICAgICAgICAgaWYgKHQuZGF5cykge1xuICAgICAgICAgICAgICAgIHJldHVybiBzaWduICsgdC5kYXlzICsgJzonICsgdGhpcy5hZGRaZXJvKHQuaG91cnMpICsgJzonICsgdGhpcy5hZGRaZXJvKHQubWludXRlcykgKyAnOicgKyBzZWNvbmRzXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0LmhvdXJzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNpZ24gKyAobGVhZGluZyA/IHRoaXMuYWRkWmVybyh0LmhvdXJzKSA6IHQuaG91cnMpICsgJzonICsgdGhpcy5hZGRaZXJvKHQubWludXRlcykgKyAnOicgKyBzZWNvbmRzXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBzaWduICsgKGxlYWRpbmcgPyB0aGlzLmFkZFplcm8odC5taW51dGVzKSA6IHQubWludXRlcykgKyAnOicgKyBzZWNvbmRzXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbmNyZW1lbnROdW1iZXIodmFsdWU6IGFueSk6IHN0cmluZyB7XG4gICAgICAgIGxldCBudW1iZXJWYWx1ZSA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlLCAwKTtcbiAgICAgICAgcmV0dXJuICgrK251bWJlclZhbHVlKS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGRlY3JlbWVudE51bWJlcih2YWx1ZTogYW55KTogc3RyaW5nIHtcbiAgICAgICAgbGV0IG51bWJlclZhbHVlID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUsIDApO1xuICAgICAgICByZXR1cm4gKC0tbnVtYmVyVmFsdWUpLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgZ2V0RGVjaW1hbFNlcGFyYXRvcigpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBudW1iZXJXaXRoRGVjaW1hbFNlcGFyYXRvciA9IDEuMTtcblxuICAgICAgICByZXR1cm4gbnVtYmVyV2l0aERlY2ltYWxTZXBhcmF0b3JcbiAgICAgICAgICAgIC50b0xvY2FsZVN0cmluZyh0aGlzLmN1bHR1cmUpXG4gICAgICAgICAgICAuc3Vic3RyaW5nKDEsIDIpO1xuICAgIH1cblxuICAgIGNoYW5nZURlY2ltYWxTZXBhcmF0b3JXaGVuSXRzQ29tbWEodmFsdWU6IHN0cmluZywgcmV2ZXJzZSA9IGZhbHNlKTogc3RyaW5nIHtcbiAgICAgICAgLy8gSWYgdGhlIGRlY2ltYWwgc2VwYXJhdG9yIGlzICcsJ1xuICAgICAgICBpZiAodGhpcy5nZXREZWNpbWFsU2VwYXJhdG9yKCkgPT09ICcsJykge1xuICAgICAgICAgICAgLy8gSW4gY2FzZSB0aGF0IHRoZSB2YWx1ZSBpc24ndCBzdHJpbmcuXG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlPy50b1N0cmluZygpIHx8ICcnO1xuXG4gICAgICAgICAgICAvLyBJZiByZXZlcnNlIGNoYW5nZSB0aGUgbnVtYmVyIGZyb20gJy4nIHRvICcsJyBlbHNlIGRvIHRoZSBvcHBvc2l0ZS5cbiAgICAgICAgICAgIHZhbHVlID0gcmV2ZXJzZSA/IHZhbHVlLnJlcGxhY2UoJy4nLCAnLCcpIDogdmFsdWUucmVwbGFjZSgnLCcsICcuJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgaXNFcXVhbE51bWJlcihudW1iZXJBc1N0cmluZzogc3RyaW5nLCBudW1iZXJBc1N0cmluZzI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBudW1iZXIgPSB0aGlzLnByZXBhcmVOdW1iZXJUb0Zvcm1hdChudW1iZXJBc1N0cmluZyk7XG4gICAgICAgIGNvbnN0IG51bWJlcjIgPSB0aGlzLnByZXBhcmVOdW1iZXJUb0Zvcm1hdChudW1iZXJBc1N0cmluZzIpO1xuXG4gICAgICAgIHJldHVybiBudW1iZXIgPT09IG51bWJlcjI7XG4gICAgfVxufVxuIl19