@koalarx/ui 14.0.6 → 14.0.9

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 (346) hide show
  1. package/alert/esm2020/index.mjs +6 -6
  2. package/alert/esm2020/koalarx-ui-alert.mjs +4 -4
  3. package/alert/esm2020/lib/dialog-alert.component.mjs +48 -48
  4. package/alert/esm2020/lib/koala.alert-config.interface.mjs +1 -1
  5. package/alert/esm2020/lib/koala.alert.enum.mjs +8 -8
  6. package/alert/esm2020/lib/koala.alert.module.mjs +46 -46
  7. package/alert/esm2020/lib/koala.alert.service.mjs +19 -19
  8. package/alert/esm2020/lib/koala.request-code-to-alert-enum.translate.mjs +17 -17
  9. package/alert/fesm2015/koalarx-ui-alert.mjs +111 -111
  10. package/alert/fesm2015/koalarx-ui-alert.mjs.map +1 -1
  11. package/alert/fesm2020/koalarx-ui-alert.mjs +109 -109
  12. package/alert/fesm2020/koalarx-ui-alert.mjs.map +1 -1
  13. package/alert/index.d.ts +6 -6
  14. package/alert/lib/dialog-alert.component.d.ts +10 -10
  15. package/alert/lib/koala.alert-config.interface.d.ts +14 -14
  16. package/alert/lib/koala.alert.enum.d.ts +7 -7
  17. package/alert/lib/koala.alert.module.d.ts +12 -12
  18. package/alert/lib/koala.alert.service.d.ts +10 -10
  19. package/alert/lib/koala.request-code-to-alert-enum.translate.d.ts +4 -4
  20. package/button/esm2020/index.mjs +2 -2
  21. package/button/esm2020/koalarx-ui-button.mjs +4 -4
  22. package/button/esm2020/lib/button.component.mjs +44 -44
  23. package/button/esm2020/lib/koala.button.module.mjs +40 -40
  24. package/button/fesm2015/koalarx-ui-button.mjs +67 -67
  25. package/button/fesm2015/koalarx-ui-button.mjs.map +1 -1
  26. package/button/fesm2020/koalarx-ui-button.mjs +67 -67
  27. package/button/fesm2020/koalarx-ui-button.mjs.map +1 -1
  28. package/button/index.d.ts +2 -2
  29. package/button/lib/button.component.d.ts +18 -18
  30. package/button/lib/koala.button.module.d.ts +12 -12
  31. package/common/esm2020/index.mjs +4 -4
  32. package/common/esm2020/koalarx-ui-common.mjs +4 -4
  33. package/common/esm2020/lib/mask-options.mjs +3 -3
  34. package/common/esm2020/lib/services/csv/koala.csv.service.mjs +36 -36
  35. package/common/esm2020/lib/services/xlsx/koala.xlsx-config.interface.mjs +1 -1
  36. package/common/esm2020/lib/services/xlsx/koala.xlsx.service.mjs +127 -127
  37. package/common/fesm2015/koalarx-ui-common.mjs +160 -160
  38. package/common/fesm2015/koalarx-ui-common.mjs.map +1 -1
  39. package/common/fesm2020/koalarx-ui-common.mjs +155 -155
  40. package/common/fesm2020/koalarx-ui-common.mjs.map +1 -1
  41. package/common/index.d.ts +4 -4
  42. package/common/lib/mask-options.d.ts +2 -2
  43. package/common/lib/services/csv/koala.csv.service.d.ts +10 -10
  44. package/common/lib/services/xlsx/koala.xlsx-config.interface.d.ts +11 -11
  45. package/common/lib/services/xlsx/koala.xlsx.service.d.ts +12 -12
  46. package/core/esm2020/index.mjs +36 -36
  47. package/core/esm2020/koalarx-ui-core.mjs +4 -4
  48. package/core/esm2020/lib/environments/koalaEnvironment.mjs +3 -3
  49. package/core/esm2020/lib/helpers/mat-form-field.helper.mjs +16 -16
  50. package/core/esm2020/lib/loader/loader-bar-page.component.mjs +24 -24
  51. package/core/esm2020/lib/loader/loader-bar-page.interface.mjs +1 -1
  52. package/core/esm2020/lib/loader/loader-config.interface.mjs +1 -1
  53. package/core/esm2020/lib/ngx-koala.module.mjs +47 -47
  54. package/core/esm2020/lib/page/koala-language.helper.mjs +113 -113
  55. package/core/esm2020/lib/page/koala-page-pallet-colors.interface.mjs +1 -1
  56. package/core/esm2020/lib/page/koala.page.module.mjs +76 -76
  57. package/core/esm2020/lib/page/koala.user-menu-options.interface.mjs +1 -1
  58. package/core/esm2020/lib/page/notifications/koala.notification.interface.mjs +1 -1
  59. package/core/esm2020/lib/page/notifications/notification.component.mjs +43 -43
  60. package/core/esm2020/lib/page/page.component.mjs +302 -302
  61. package/core/esm2020/lib/router/koala.parameter-hash-location-stategy.mjs +18 -18
  62. package/core/esm2020/lib/services/api-requester/factory/koala.response.factory.mjs +43 -43
  63. package/core/esm2020/lib/services/api-requester/helpers/error/koala.client.error.mjs +2 -2
  64. package/core/esm2020/lib/services/api-requester/helpers/error/koala.errors.helper.mjs +45 -45
  65. package/core/esm2020/lib/services/api-requester/helpers/error/koala.not-found.error.mjs +2 -2
  66. package/core/esm2020/lib/services/api-requester/helpers/error/koala.success.error.mjs +2 -2
  67. package/core/esm2020/lib/services/api-requester/helpers/error/koala.unhautorized.error.mjs +2 -2
  68. package/core/esm2020/lib/services/api-requester/helpers/service/koala.request-header.helper.mjs +14 -14
  69. package/core/esm2020/lib/services/api-requester/koala.api-requester.base.mjs +86 -86
  70. package/core/esm2020/lib/services/api-requester/koala.api-requester.cache.mjs +37 -37
  71. package/core/esm2020/lib/services/api-requester/koala.api-requester.service.mjs +158 -158
  72. package/core/esm2020/lib/services/loader/koala.loader.service.mjs +34 -34
  73. package/core/esm2020/lib/services/openid/koala-oauth2-config.interface.mjs +1 -1
  74. package/core/esm2020/lib/services/openid/koala.oauth.config.mjs +29 -29
  75. package/core/esm2020/lib/services/openid/koala.oauth2.service.mjs +188 -188
  76. package/core/esm2020/lib/services/request/koala.request.service.mjs +52 -52
  77. package/core/esm2020/lib/services/token/koala.token.service.mjs +55 -55
  78. package/core/esm2020/lib/services/token/token.factory.mjs +26 -26
  79. package/core/fesm2015/koalarx-ui-core.mjs +1294 -1294
  80. package/core/fesm2015/koalarx-ui-core.mjs.map +1 -1
  81. package/core/fesm2020/koalarx-ui-core.mjs +1256 -1256
  82. package/core/fesm2020/koalarx-ui-core.mjs.map +1 -1
  83. package/core/index.d.ts +30 -30
  84. package/core/lib/environments/koalaEnvironment.d.ts +15 -15
  85. package/core/lib/helpers/mat-form-field.helper.d.ts +3 -3
  86. package/core/lib/loader/loader-bar-page.component.d.ts +9 -9
  87. package/core/lib/loader/loader-bar-page.interface.d.ts +5 -5
  88. package/core/lib/loader/loader-config.interface.d.ts +7 -7
  89. package/core/lib/ngx-koala.module.d.ts +12 -12
  90. package/core/lib/page/koala-language.helper.d.ts +19 -19
  91. package/core/lib/page/koala-page-pallet-colors.interface.d.ts +38 -38
  92. package/core/lib/page/koala.page.module.d.ts +21 -21
  93. package/core/lib/page/koala.user-menu-options.interface.d.ts +5 -5
  94. package/core/lib/page/notifications/koala.notification.interface.d.ts +6 -6
  95. package/core/lib/page/notifications/notification.component.d.ts +15 -15
  96. package/core/lib/page/page.component.d.ts +58 -58
  97. package/core/lib/router/koala.parameter-hash-location-stategy.d.ts +7 -7
  98. package/core/lib/services/api-requester/factory/koala.response.factory.d.ts +5 -5
  99. package/core/lib/services/api-requester/helpers/error/koala.client.error.d.ts +2 -2
  100. package/core/lib/services/api-requester/helpers/error/koala.errors.helper.d.ts +13 -13
  101. package/core/lib/services/api-requester/helpers/error/koala.not-found.error.d.ts +2 -2
  102. package/core/lib/services/api-requester/helpers/error/koala.success.error.d.ts +2 -2
  103. package/core/lib/services/api-requester/helpers/error/koala.unhautorized.error.d.ts +2 -2
  104. package/core/lib/services/api-requester/helpers/service/koala.request-header.helper.d.ts +4 -4
  105. package/core/lib/services/api-requester/koala.api-requester.base.d.ts +19 -19
  106. package/core/lib/services/api-requester/koala.api-requester.cache.d.ts +13 -13
  107. package/core/lib/services/api-requester/koala.api-requester.service.d.ts +24 -24
  108. package/core/lib/services/loader/koala.loader.service.d.ts +14 -14
  109. package/core/lib/services/openid/koala-oauth2-config.interface.d.ts +11 -11
  110. package/core/lib/services/openid/koala.oauth.config.d.ts +9 -9
  111. package/core/lib/services/openid/koala.oauth2.service.d.ts +82 -82
  112. package/core/lib/services/request/koala.request.service.d.ts +11 -11
  113. package/core/lib/services/token/koala.token.service.d.ts +26 -26
  114. package/core/lib/services/token/token.factory.d.ts +9 -9
  115. package/dialog/esm2020/index.mjs +3 -3
  116. package/dialog/esm2020/koalarx-ui-dialog.mjs +4 -4
  117. package/dialog/esm2020/lib/dialog.component.mjs +25 -25
  118. package/dialog/esm2020/lib/koala.dialog-template.interface.mjs +1 -1
  119. package/dialog/esm2020/lib/koala.dialog.module.mjs +36 -36
  120. package/dialog/esm2020/lib/koala.dialog.service.mjs +57 -57
  121. package/dialog/fesm2015/koalarx-ui-dialog.mjs +96 -96
  122. package/dialog/fesm2015/koalarx-ui-dialog.mjs.map +1 -1
  123. package/dialog/fesm2020/koalarx-ui-dialog.mjs +96 -96
  124. package/dialog/fesm2020/koalarx-ui-dialog.mjs.map +1 -1
  125. package/dialog/index.d.ts +3 -3
  126. package/dialog/lib/dialog.component.d.ts +11 -11
  127. package/dialog/lib/koala.dialog-template.interface.d.ts +9 -9
  128. package/dialog/lib/koala.dialog.module.d.ts +11 -11
  129. package/dialog/lib/koala.dialog.service.d.ts +14 -14
  130. package/dynamic-component/esm2020/index.mjs +5 -5
  131. package/dynamic-component/esm2020/koalarx-ui-dynamic-component.mjs +4 -4
  132. package/dynamic-component/esm2020/lib/koala-dynamic-component.component.mjs +1 -1
  133. package/dynamic-component/esm2020/lib/koala-dynamic-component.directive.mjs +16 -16
  134. package/dynamic-component/esm2020/lib/koala-dynamic-component.factory.mjs +40 -40
  135. package/dynamic-component/esm2020/lib/koala-dynamic-component.mjs +6 -6
  136. package/dynamic-component/esm2020/lib/koala-dynamic-component.module.mjs +23 -23
  137. package/dynamic-component/fesm2015/koalarx-ui-dynamic-component.mjs +71 -71
  138. package/dynamic-component/fesm2015/koalarx-ui-dynamic-component.mjs.map +1 -1
  139. package/dynamic-component/fesm2020/koalarx-ui-dynamic-component.mjs +70 -70
  140. package/dynamic-component/fesm2020/koalarx-ui-dynamic-component.mjs.map +1 -1
  141. package/dynamic-component/index.d.ts +5 -5
  142. package/dynamic-component/lib/koala-dynamic-component.component.d.ts +3 -3
  143. package/dynamic-component/lib/koala-dynamic-component.d.ts +6 -6
  144. package/dynamic-component/lib/koala-dynamic-component.directive.d.ts +8 -8
  145. package/dynamic-component/lib/koala-dynamic-component.factory.d.ts +14 -14
  146. package/dynamic-component/lib/koala-dynamic-component.module.d.ts +8 -8
  147. package/file-button/esm2020/index.mjs +4 -4
  148. package/file-button/esm2020/koalarx-ui-file-button.mjs +4 -4
  149. package/file-button/esm2020/lib/file-button.component.mjs +125 -125
  150. package/file-button/esm2020/lib/koala.btn-file.service.mjs +25 -25
  151. package/file-button/esm2020/lib/koala.file-button.module.mjs +36 -36
  152. package/file-button/esm2020/lib/koala.file.interface.mjs +1 -1
  153. package/file-button/fesm2015/koalarx-ui-file-button.mjs +174 -174
  154. package/file-button/fesm2015/koalarx-ui-file-button.mjs.map +1 -1
  155. package/file-button/fesm2020/koalarx-ui-file-button.mjs +165 -165
  156. package/file-button/fesm2020/koalarx-ui-file-button.mjs.map +1 -1
  157. package/file-button/index.d.ts +4 -4
  158. package/file-button/lib/file-button.component.d.ts +29 -29
  159. package/file-button/lib/koala.btn-file.service.d.ts +11 -11
  160. package/file-button/lib/koala.file-button.module.d.ts +11 -11
  161. package/file-button/lib/koala.file.interface.d.ts +5 -5
  162. package/folder-page/esm2020/index.mjs +3 -3
  163. package/folder-page/esm2020/koalarx-ui-folder-page.mjs +4 -4
  164. package/folder-page/esm2020/lib/folder.component.mjs +70 -70
  165. package/folder-page/esm2020/lib/koala-navigate-history.interface.mjs +1 -1
  166. package/folder-page/esm2020/lib/koala.folder-page.module.mjs +40 -40
  167. package/folder-page/fesm2015/koalarx-ui-folder-page.mjs +95 -95
  168. package/folder-page/fesm2015/koalarx-ui-folder-page.mjs.map +1 -1
  169. package/folder-page/fesm2020/koalarx-ui-folder-page.mjs +94 -94
  170. package/folder-page/fesm2020/koalarx-ui-folder-page.mjs.map +1 -1
  171. package/folder-page/index.d.ts +3 -3
  172. package/folder-page/lib/folder.component.d.ts +21 -21
  173. package/folder-page/lib/koala-navigate-history.interface.d.ts +4 -4
  174. package/folder-page/lib/koala.folder-page.module.d.ts +12 -12
  175. package/form/esm2020/index.mjs +19 -19
  176. package/form/esm2020/koalarx-ui-form.mjs +4 -4
  177. package/form/esm2020/lib/btn-submit/btn-submit.component.mjs +49 -49
  178. package/form/esm2020/lib/directives/koala-autofocus.directive.mjs +25 -25
  179. package/form/esm2020/lib/dynamic-form/builder/dynamic-form.builder.mjs +139 -138
  180. package/form/esm2020/lib/dynamic-form/builder/fields/autocomplete.builder.mjs +37 -37
  181. package/form/esm2020/lib/dynamic-form/builder/fields/field.base.mjs +147 -147
  182. package/form/esm2020/lib/dynamic-form/builder/fields/field.builder.mjs +6 -6
  183. package/form/esm2020/lib/dynamic-form/builder/fields/more-items.builder.mjs +56 -56
  184. package/form/esm2020/lib/dynamic-form/dynamic-form.component.mjs +598 -598
  185. package/form/esm2020/lib/dynamic-form/enums/dynamic-form-type-field.enum.mjs +34 -34
  186. package/form/esm2020/lib/dynamic-form/interfaces/koala-custom-validator-fn.interface.mjs +1 -1
  187. package/form/esm2020/lib/dynamic-form/interfaces/koala.dynamic-autocomplete-options.interface.mjs +1 -1
  188. package/form/esm2020/lib/dynamic-form/interfaces/koala.dynamic-form-autocomplete-multiple-config.interface.mjs +1 -1
  189. package/form/esm2020/lib/dynamic-form/interfaces/koala.dynamic-form-config.interface.mjs +2 -2
  190. package/form/esm2020/lib/dynamic-form/interfaces/koala.dynamic-form-field.interface.mjs +1 -1
  191. package/form/esm2020/lib/dynamic-form/interfaces/koala.dynamic-form-more-itens-show-field-config.interface.mjs +1 -1
  192. package/form/esm2020/lib/dynamic-form/interfaces/koala.dynamic-form-show-field.interface.mjs +1 -1
  193. package/form/esm2020/lib/dynamic-form/interfaces/koala.dynamic-set-value.interface.mjs +1 -1
  194. package/form/esm2020/lib/dynamic-form/koala.dynamic-form.service.mjs +212 -212
  195. package/form/esm2020/lib/dynamic-form/validators/autocomplete-selected.validator.mjs +9 -9
  196. package/form/esm2020/lib/dynamic-form/validators/cnpj.validator.mjs +9 -9
  197. package/form/esm2020/lib/dynamic-form/validators/cpf.validator.mjs +9 -9
  198. package/form/esm2020/lib/dynamic-form/validators/date-max.validator.mjs +10 -10
  199. package/form/esm2020/lib/dynamic-form/validators/date-min.validator.mjs +10 -10
  200. package/form/esm2020/lib/dynamic-form/validators/koala-dynamic-form-validator-result.helper.mjs +9 -9
  201. package/form/esm2020/lib/dynamic-form/validators/validation.helper.mjs +85 -85
  202. package/form/esm2020/lib/form.abstract.mjs +41 -41
  203. package/form/esm2020/lib/koala.form.module.mjs +132 -132
  204. package/form/esm2020/lib/show-invalid-fields/show-invalid-fields.mjs +8 -8
  205. package/form/fesm2015/koalarx-ui-form.mjs +1517 -1516
  206. package/form/fesm2015/koalarx-ui-form.mjs.map +1 -1
  207. package/form/fesm2020/koalarx-ui-form.mjs +1499 -1498
  208. package/form/fesm2020/koalarx-ui-form.mjs.map +1 -1
  209. package/form/index.d.ts +19 -19
  210. package/form/lib/btn-submit/btn-submit.component.d.ts +20 -20
  211. package/form/lib/directives/koala-autofocus.directive.d.ts +10 -10
  212. package/form/lib/dynamic-form/builder/dynamic-form.builder.d.ts +21 -21
  213. package/form/lib/dynamic-form/builder/fields/autocomplete.builder.d.ts +16 -16
  214. package/form/lib/dynamic-form/builder/fields/field.base.d.ts +42 -42
  215. package/form/lib/dynamic-form/builder/fields/field.builder.d.ts +8 -8
  216. package/form/lib/dynamic-form/builder/fields/more-items.builder.d.ts +17 -17
  217. package/form/lib/dynamic-form/dynamic-form.component.d.ts +54 -54
  218. package/form/lib/dynamic-form/enums/dynamic-form-type-field.enum.d.ts +33 -33
  219. package/form/lib/dynamic-form/interfaces/koala-custom-validator-fn.interface.d.ts +4 -4
  220. package/form/lib/dynamic-form/interfaces/koala.dynamic-autocomplete-options.interface.d.ts +4 -4
  221. package/form/lib/dynamic-form/interfaces/koala.dynamic-form-autocomplete-multiple-config.interface.d.ts +4 -4
  222. package/form/lib/dynamic-form/interfaces/koala.dynamic-form-config.interface.d.ts +12 -11
  223. package/form/lib/dynamic-form/interfaces/koala.dynamic-form-field.interface.d.ts +69 -69
  224. package/form/lib/dynamic-form/interfaces/koala.dynamic-form-more-itens-show-field-config.interface.d.ts +8 -8
  225. package/form/lib/dynamic-form/interfaces/koala.dynamic-form-show-field.interface.d.ts +5 -5
  226. package/form/lib/dynamic-form/interfaces/koala.dynamic-set-value.interface.d.ts +4 -4
  227. package/form/lib/dynamic-form/koala.dynamic-form.service.d.ts +28 -28
  228. package/form/lib/dynamic-form/validators/autocomplete-selected.validator.d.ts +4 -4
  229. package/form/lib/dynamic-form/validators/cnpj.validator.d.ts +4 -4
  230. package/form/lib/dynamic-form/validators/cpf.validator.d.ts +4 -4
  231. package/form/lib/dynamic-form/validators/date-max.validator.d.ts +2 -2
  232. package/form/lib/dynamic-form/validators/date-min.validator.d.ts +2 -2
  233. package/form/lib/dynamic-form/validators/koala-dynamic-form-validator-result.helper.d.ts +7 -7
  234. package/form/lib/dynamic-form/validators/validation.helper.d.ts +4 -4
  235. package/form/lib/form.abstract.d.ts +16 -16
  236. package/form/lib/koala.form.module.d.ts +25 -25
  237. package/form/lib/show-invalid-fields/show-invalid-fields.d.ts +6 -6
  238. package/icon/esm2020/index.mjs +3 -3
  239. package/icon/esm2020/koalarx-ui-icon.mjs +4 -4
  240. package/icon/esm2020/lib/icon.component.mjs +41 -41
  241. package/icon/esm2020/lib/koala.icon.module.mjs +24 -24
  242. package/icon/esm2020/lib/koala.icon.type.mjs +1 -1
  243. package/icon/fesm2015/koalarx-ui-icon.mjs +56 -56
  244. package/icon/fesm2015/koalarx-ui-icon.mjs.map +1 -1
  245. package/icon/fesm2020/koalarx-ui-icon.mjs +55 -55
  246. package/icon/fesm2020/koalarx-ui-icon.mjs.map +1 -1
  247. package/icon/index.d.ts +3 -3
  248. package/icon/lib/icon.component.d.ts +14 -14
  249. package/icon/lib/koala.icon.module.d.ts +8 -8
  250. package/icon/lib/koala.icon.type.d.ts +1 -1
  251. package/icons-animated/esm2020/index.mjs +4 -4
  252. package/icons-animated/esm2020/koalarx-ui-icons-animated.mjs +4 -4
  253. package/icons-animated/esm2020/lib/icons/downloading/downloading-icon-animated.component.mjs +23 -23
  254. package/icons-animated/esm2020/lib/icons/loading/loading-icon-animated.component.mjs +23 -23
  255. package/icons-animated/esm2020/lib/icons-animated.component.mjs +20 -20
  256. package/icons-animated/esm2020/lib/icons-animated.service.mjs +27 -27
  257. package/icons-animated/esm2020/lib/koala-icons-animated.module.mjs +30 -30
  258. package/icons-animated/fesm2015/koalarx-ui-icons-animated.mjs +95 -95
  259. package/icons-animated/fesm2015/koalarx-ui-icons-animated.mjs.map +1 -1
  260. package/icons-animated/fesm2020/koalarx-ui-icons-animated.mjs +93 -93
  261. package/icons-animated/fesm2020/koalarx-ui-icons-animated.mjs.map +1 -1
  262. package/icons-animated/index.d.ts +4 -4
  263. package/icons-animated/lib/icons/downloading/downloading-icon-animated.component.d.ts +12 -12
  264. package/icons-animated/lib/icons/loading/loading-icon-animated.component.d.ts +12 -12
  265. package/icons-animated/lib/icons-animated.component.d.ts +8 -8
  266. package/icons-animated/lib/icons-animated.service.d.ts +9 -9
  267. package/icons-animated/lib/koala-icons-animated.module.d.ts +10 -10
  268. package/list/esm2020/index.mjs +11 -11
  269. package/list/esm2020/koalarx-ui-list.mjs +4 -4
  270. package/list/esm2020/lib/koala-list-btn-collapse-sub-list-config.interface.mjs +1 -1
  271. package/list/esm2020/lib/koala-list-filter.interface.mjs +1 -1
  272. package/list/esm2020/lib/koala-list-form-filter.interface.mjs +1 -1
  273. package/list/esm2020/lib/koala-list-item-menu-option.interface.mjs +1 -1
  274. package/list/esm2020/lib/koala-list-item.interface.mjs +1 -1
  275. package/list/esm2020/lib/koala.list-config.interface.mjs +1 -1
  276. package/list/esm2020/lib/koala.list.module.mjs +68 -68
  277. package/list/esm2020/lib/koala.list.service.mjs +15 -15
  278. package/list/esm2020/lib/list-builder/list.builder.mjs +104 -104
  279. package/list/esm2020/lib/list.abstract.mjs +163 -163
  280. package/list/esm2020/lib/list.component.mjs +172 -172
  281. package/list/esm2020/lib/providers/pagination/pagination.provider.mjs +32 -32
  282. package/list/fesm2015/koalarx-ui-list.mjs +521 -521
  283. package/list/fesm2015/koalarx-ui-list.mjs.map +1 -1
  284. package/list/fesm2020/koalarx-ui-list.mjs +491 -491
  285. package/list/fesm2020/koalarx-ui-list.mjs.map +1 -1
  286. package/list/index.d.ts +11 -11
  287. package/list/lib/koala-list-btn-collapse-sub-list-config.interface.d.ts +8 -8
  288. package/list/lib/koala-list-filter.interface.d.ts +10 -10
  289. package/list/lib/koala-list-form-filter.interface.d.ts +8 -8
  290. package/list/lib/koala-list-item-menu-option.interface.d.ts +7 -7
  291. package/list/lib/koala-list-item.interface.d.ts +13 -13
  292. package/list/lib/koala.list-config.interface.d.ts +37 -37
  293. package/list/lib/koala.list.module.d.ts +17 -17
  294. package/list/lib/koala.list.service.d.ts +7 -7
  295. package/list/lib/list-builder/list.builder.d.ts +32 -32
  296. package/list/lib/list.abstract.d.ts +44 -44
  297. package/list/lib/list.component.d.ts +54 -54
  298. package/list/lib/providers/pagination/pagination.provider.d.ts +9 -9
  299. package/menu/esm2020/index.mjs +5 -5
  300. package/menu/esm2020/koalarx-ui-menu.mjs +4 -4
  301. package/menu/esm2020/lib/koala.menu-module.interface.mjs +1 -1
  302. package/menu/esm2020/lib/koala.menu-tool.interface.mjs +1 -1
  303. package/menu/esm2020/lib/koala.menu.module.mjs +36 -36
  304. package/menu/esm2020/lib/koala.menu.service.mjs +24 -24
  305. package/menu/esm2020/lib/menu.component.mjs +100 -100
  306. package/menu/fesm2015/koalarx-ui-menu.mjs +139 -139
  307. package/menu/fesm2015/koalarx-ui-menu.mjs.map +1 -1
  308. package/menu/fesm2020/koalarx-ui-menu.mjs +135 -135
  309. package/menu/fesm2020/koalarx-ui-menu.mjs.map +1 -1
  310. package/menu/index.d.ts +5 -5
  311. package/menu/lib/koala.menu-module.interface.d.ts +12 -12
  312. package/menu/lib/koala.menu-tool.interface.d.ts +6 -6
  313. package/menu/lib/koala.menu.module.d.ts +11 -11
  314. package/menu/lib/koala.menu.service.d.ts +10 -10
  315. package/menu/lib/menu.component.d.ts +22 -22
  316. package/package.json +2 -2
  317. package/question/esm2020/index.mjs +4 -4
  318. package/question/esm2020/koalarx-ui-question.mjs +4 -4
  319. package/question/esm2020/lib/dialog-question.component.mjs +25 -25
  320. package/question/esm2020/lib/koala-question-config.interface.mjs +1 -1
  321. package/question/esm2020/lib/koala.question.module.mjs +40 -40
  322. package/question/esm2020/lib/koala.question.service.mjs +26 -26
  323. package/question/fesm2015/koalarx-ui-question.mjs +68 -68
  324. package/question/fesm2015/koalarx-ui-question.mjs.map +1 -1
  325. package/question/fesm2020/koalarx-ui-question.mjs +66 -66
  326. package/question/fesm2020/koalarx-ui-question.mjs.map +1 -1
  327. package/question/index.d.ts +4 -4
  328. package/question/lib/dialog-question.component.d.ts +10 -10
  329. package/question/lib/koala-question-config.interface.d.ts +5 -5
  330. package/question/lib/koala.question.module.d.ts +12 -12
  331. package/question/lib/koala.question.service.d.ts +10 -10
  332. package/snackbar/esm2020/index.mjs +4 -4
  333. package/snackbar/esm2020/koalarx-ui-snackbar.mjs +4 -4
  334. package/snackbar/esm2020/lib/koala.snackbar.component.mjs +22 -22
  335. package/snackbar/esm2020/lib/koala.snackbar.interface.mjs +1 -1
  336. package/snackbar/esm2020/lib/koala.snackbar.module.mjs +36 -36
  337. package/snackbar/esm2020/lib/koala.snackbar.service.mjs +35 -35
  338. package/snackbar/fesm2015/koalarx-ui-snackbar.mjs +74 -74
  339. package/snackbar/fesm2015/koalarx-ui-snackbar.mjs.map +1 -1
  340. package/snackbar/fesm2020/koalarx-ui-snackbar.mjs +72 -72
  341. package/snackbar/fesm2020/koalarx-ui-snackbar.mjs.map +1 -1
  342. package/snackbar/index.d.ts +4 -4
  343. package/snackbar/lib/koala.snackbar.component.d.ts +10 -10
  344. package/snackbar/lib/koala.snackbar.interface.d.ts +4 -4
  345. package/snackbar/lib/koala.snackbar.module.d.ts +10 -10
  346. package/snackbar/lib/koala.snackbar.service.d.ts +12 -12
@@ -1,164 +1,164 @@
1
- import { SelectionModel } from '@angular/cdk/collections';
2
- import { BehaviorSubject, merge, Observable } from 'rxjs';
3
- import { FormAbstract } from '@koalarx/ui/form';
4
- import { debounceTime, first, map, startWith, switchMap } from 'rxjs/operators';
5
- import { MatTableDataSource } from '@angular/material/table';
6
- import { delay } from "@koalarx/utils/operators/delay";
7
- import { randomString } from "@koalarx/utils/operators/string";
8
- export class ListAbstract extends FormAbstract {
9
- constructor(requestFunction, requestResponseFunction, formSearch) {
10
- super(formSearch);
11
- this.requestFunction = requestFunction;
12
- this.requestResponseFunction = requestResponseFunction;
13
- this.selection = new SelectionModel(true, []);
14
- this.limitOptions = [10, 20, 30, 50, 100];
15
- this.showMenuList = false;
16
- this.allSelected$ = new BehaviorSubject(false);
17
- this.dataSource = new MatTableDataSource([]);
18
- this.typeRequest = 'onDemand';
19
- this.filterParams = new BehaviorSubject(null);
20
- this.filterError$ = new BehaviorSubject(null);
21
- this.tableId = randomString(20, { uppercase: true, lowercase: true });
22
- }
23
- selectAll() {
24
- this.isAllSelected() ?
25
- this.selection.clear() :
26
- this.dataSource.data.forEach(item => {
27
- if ((this.config?.disabledCheckboxItemList && !this.config.disabledCheckboxItemList(item)) ||
28
- !this.config?.disabledCheckboxItemList) {
29
- this.selection.select(item);
30
- }
31
- });
32
- this.isAllSelected();
33
- }
34
- defineStatusSelectAll(status) {
35
- this.allSelected$.next(status);
36
- return this.allSelected$.getValue();
37
- }
38
- selectItem() {
39
- setTimeout(() => {
40
- this.showMenuList = this.selection.hasValue();
41
- this.isAllSelected();
42
- }, 50);
43
- }
44
- async search(filter) {
45
- this.loading(true);
46
- this.selection.clear();
47
- if (this.paginator) {
48
- this.paginator.firstPage();
49
- }
50
- this.filterParams.next({
51
- params: filter,
52
- sort: this.sort?.active ?? '',
53
- order: this.sort?.direction ?? 'asc',
54
- page: this.paginator?.pageIndex ?? 0,
55
- limit: this.paginator?.pageSize ?? 30
56
- });
57
- }
58
- onDestroy() {
59
- this.subscriptionSortList?.unsubscribe();
60
- this.subscriptionList?.unsubscribe();
61
- clearInterval(this.intervalSortList);
62
- }
63
- async afterViewInit() {
64
- let tentativas = 0;
65
- let stop = false;
66
- do {
67
- tentativas++;
68
- await delay(400);
69
- if (this.sort || this.emptyListComponent) {
70
- this.prepareSearch().then();
71
- if (this.emptyListComponent)
72
- stop = true;
73
- }
74
- else if (tentativas > 10) {
75
- stop = true;
76
- }
77
- } while (!this.sort && !stop);
78
- }
79
- async prepareSearch() {
80
- this.intervalSortList = setInterval(() => {
81
- if (this.sort && !this.subscriptionSortList) {
82
- this.subscriptionSortList = this.sort.sortChange.subscribe(() => {
83
- const filter = this.filterParams.value ?? {};
84
- filter.sort = this.sort?.active ?? '';
85
- filter.order = this.sort?.direction ?? '';
86
- this.filterParams.next(filter);
87
- });
88
- }
89
- else if (!this.sort && this.subscriptionSortList) {
90
- this.subscriptionSortList.unsubscribe();
91
- }
92
- }, 50);
93
- if (this.typeRequest === 'onDemand') {
94
- this.subscriptionList = merge(this.paginator?.page ?? new Observable(), this.filterParams).pipe(startWith({}), switchMap(() => new Observable(observe => {
95
- this.loading(true);
96
- this.selection.clear();
97
- if (this.filterParams.value) {
98
- this.filterParams.value.sort = this.sort?.active ?? this.config?.columnSort ?? '';
99
- this.filterParams.value.order = this.sort?.direction ?? this.config?.sortDirection ?? '';
100
- this.filterParams.value.page = this.paginator?.pageIndex ?? 0;
101
- this.filterParams.value.limit = this.paginator?.pageSize ?? 30;
102
- }
103
- observe.next(true);
104
- })), debounceTime(300), switchMap(() => this.runRequestFunction()), map((response) => {
105
- this.loading(false);
106
- this.scrollTableToTop();
107
- return this.requestResponseFunction(response);
108
- })).subscribe();
109
- }
110
- else {
111
- if (this.paginator)
112
- this.dataSource.paginator = this.paginator;
113
- this.subscriptionList = this.filterParams.pipe(startWith({}), debounceTime(300), switchMap(() => this.runRequestFunction()), map((response) => {
114
- this.loading(false);
115
- this.scrollTableToTop();
116
- return this.requestResponseFunction(response);
117
- })).subscribe();
118
- }
119
- if (this.emptyListComponent) {
120
- do {
121
- await delay(301);
122
- if (this.sort) {
123
- if (this.typeRequest === "onDemand") {
124
- this.sort.sortChange.subscribe(() => {
125
- if (this.paginator)
126
- this.paginator.pageIndex = 0;
127
- });
128
- }
129
- else {
130
- this.dataSource.sort = this.sort;
131
- }
132
- }
133
- } while (!this.sort);
134
- }
135
- }
136
- isAllSelected() {
137
- const numSelected = this.selection.selected.length;
138
- const numRows = (this.config?.disabledCheckboxItemList ?
139
- this.dataSource.data.filter(item => !(this.config?.disabledCheckboxItemList
140
- ? this.config.disabledCheckboxItemList(item)
141
- : '')) :
142
- this.dataSource.data).length;
143
- return this.defineStatusSelectAll(numSelected === numRows);
144
- }
145
- runRequestFunction() {
146
- return new Observable(observe => {
147
- this.requestFunction().pipe(first()).subscribe({
148
- next: response => observe.next(response),
149
- error: err => {
150
- if (this.errorListComponent) {
151
- this.filterError$.next(err);
152
- this.errorListComponent.data = err;
153
- }
154
- this.loading(false);
155
- observe.next([]);
156
- }
157
- });
158
- });
159
- }
160
- scrollTableToTop() {
161
- document.getElementById(this.tableId)?.parentElement?.scrollTo({ top: 0 });
162
- }
163
- }
1
+ import { SelectionModel } from '@angular/cdk/collections';
2
+ import { BehaviorSubject, merge, Observable } from 'rxjs';
3
+ import { FormAbstract } from '@koalarx/ui/form';
4
+ import { debounceTime, first, map, startWith, switchMap } from 'rxjs/operators';
5
+ import { MatTableDataSource } from '@angular/material/table';
6
+ import { delay } from "@koalarx/utils/operators/delay";
7
+ import { randomString } from "@koalarx/utils/operators/string";
8
+ export class ListAbstract extends FormAbstract {
9
+ constructor(requestFunction, requestResponseFunction, formSearch) {
10
+ super(formSearch);
11
+ this.requestFunction = requestFunction;
12
+ this.requestResponseFunction = requestResponseFunction;
13
+ this.selection = new SelectionModel(true, []);
14
+ this.limitOptions = [10, 20, 30, 50, 100];
15
+ this.showMenuList = false;
16
+ this.allSelected$ = new BehaviorSubject(false);
17
+ this.dataSource = new MatTableDataSource([]);
18
+ this.typeRequest = 'onDemand';
19
+ this.filterParams = new BehaviorSubject(null);
20
+ this.filterError$ = new BehaviorSubject(null);
21
+ this.tableId = randomString(20, { uppercase: true, lowercase: true });
22
+ }
23
+ selectAll() {
24
+ this.isAllSelected() ?
25
+ this.selection.clear() :
26
+ this.dataSource.data.forEach(item => {
27
+ if ((this.config?.disabledCheckboxItemList && !this.config.disabledCheckboxItemList(item)) ||
28
+ !this.config?.disabledCheckboxItemList) {
29
+ this.selection.select(item);
30
+ }
31
+ });
32
+ this.isAllSelected();
33
+ }
34
+ defineStatusSelectAll(status) {
35
+ this.allSelected$.next(status);
36
+ return this.allSelected$.getValue();
37
+ }
38
+ selectItem() {
39
+ setTimeout(() => {
40
+ this.showMenuList = this.selection.hasValue();
41
+ this.isAllSelected();
42
+ }, 50);
43
+ }
44
+ async search(filter) {
45
+ this.loading(true);
46
+ this.selection.clear();
47
+ if (this.paginator) {
48
+ this.paginator.firstPage();
49
+ }
50
+ this.filterParams.next({
51
+ params: filter,
52
+ sort: this.sort?.active ?? '',
53
+ order: this.sort?.direction ?? 'asc',
54
+ page: this.paginator?.pageIndex ?? 0,
55
+ limit: this.paginator?.pageSize ?? 30
56
+ });
57
+ }
58
+ onDestroy() {
59
+ this.subscriptionSortList?.unsubscribe();
60
+ this.subscriptionList?.unsubscribe();
61
+ clearInterval(this.intervalSortList);
62
+ }
63
+ async afterViewInit() {
64
+ let tentativas = 0;
65
+ let stop = false;
66
+ do {
67
+ tentativas++;
68
+ await delay(400);
69
+ if (this.sort || this.emptyListComponent) {
70
+ this.prepareSearch().then();
71
+ if (this.emptyListComponent)
72
+ stop = true;
73
+ }
74
+ else if (tentativas > 10) {
75
+ stop = true;
76
+ }
77
+ } while (!this.sort && !stop);
78
+ }
79
+ async prepareSearch() {
80
+ this.intervalSortList = setInterval(() => {
81
+ if (this.sort && !this.subscriptionSortList) {
82
+ this.subscriptionSortList = this.sort.sortChange.subscribe(() => {
83
+ const filter = this.filterParams.value ?? {};
84
+ filter.sort = this.sort?.active ?? '';
85
+ filter.order = this.sort?.direction ?? '';
86
+ this.filterParams.next(filter);
87
+ });
88
+ }
89
+ else if (!this.sort && this.subscriptionSortList) {
90
+ this.subscriptionSortList.unsubscribe();
91
+ }
92
+ }, 50);
93
+ if (this.typeRequest === 'onDemand') {
94
+ this.subscriptionList = merge(this.paginator?.page ?? new Observable(), this.filterParams).pipe(startWith({}), switchMap(() => new Observable(observe => {
95
+ this.loading(true);
96
+ this.selection.clear();
97
+ if (this.filterParams.value) {
98
+ this.filterParams.value.sort = this.sort?.active ?? this.config?.columnSort ?? '';
99
+ this.filterParams.value.order = this.sort?.direction ?? this.config?.sortDirection ?? '';
100
+ this.filterParams.value.page = this.paginator?.pageIndex ?? 0;
101
+ this.filterParams.value.limit = this.paginator?.pageSize ?? 30;
102
+ }
103
+ observe.next(true);
104
+ })), debounceTime(300), switchMap(() => this.runRequestFunction()), map((response) => {
105
+ this.loading(false);
106
+ this.scrollTableToTop();
107
+ return this.requestResponseFunction(response);
108
+ })).subscribe();
109
+ }
110
+ else {
111
+ if (this.paginator)
112
+ this.dataSource.paginator = this.paginator;
113
+ this.subscriptionList = this.filterParams.pipe(startWith({}), debounceTime(300), switchMap(() => this.runRequestFunction()), map((response) => {
114
+ this.loading(false);
115
+ this.scrollTableToTop();
116
+ return this.requestResponseFunction(response);
117
+ })).subscribe();
118
+ }
119
+ if (this.emptyListComponent) {
120
+ do {
121
+ await delay(301);
122
+ if (this.sort) {
123
+ if (this.typeRequest === "onDemand") {
124
+ this.sort.sortChange.subscribe(() => {
125
+ if (this.paginator)
126
+ this.paginator.pageIndex = 0;
127
+ });
128
+ }
129
+ else {
130
+ this.dataSource.sort = this.sort;
131
+ }
132
+ }
133
+ } while (!this.sort);
134
+ }
135
+ }
136
+ isAllSelected() {
137
+ const numSelected = this.selection.selected.length;
138
+ const numRows = (this.config?.disabledCheckboxItemList ?
139
+ this.dataSource.data.filter(item => !(this.config?.disabledCheckboxItemList
140
+ ? this.config.disabledCheckboxItemList(item)
141
+ : '')) :
142
+ this.dataSource.data).length;
143
+ return this.defineStatusSelectAll(numSelected === numRows);
144
+ }
145
+ runRequestFunction() {
146
+ return new Observable(observe => {
147
+ this.requestFunction().pipe(first()).subscribe({
148
+ next: response => observe.next(response),
149
+ error: err => {
150
+ if (this.errorListComponent) {
151
+ this.filterError$.next(err);
152
+ this.errorListComponent.data = err;
153
+ }
154
+ this.loading(false);
155
+ observe.next([]);
156
+ }
157
+ });
158
+ });
159
+ }
160
+ scrollTableToTop() {
161
+ document.getElementById(this.tableId)?.parentElement?.scrollTo({ top: 0 });
162
+ }
163
+ }
164
164
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5hYnN0cmFjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2xpc3Qvc3JjL2xpYi9saXN0LmFic3RyYWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUcxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVoRCxPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRzdELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFJL0QsTUFBTSxPQUFnQixZQUFhLFNBQVEsWUFBWTtJQXNCckQsWUFDVSxlQUFzQyxFQUN0Qyx1QkFBa0QsRUFDMUQsVUFBa0M7UUFFbEMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBSlYsb0JBQWUsR0FBZixlQUFlLENBQXVCO1FBQ3RDLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBMkI7UUF2QnJELGNBQVMsR0FBRyxJQUFJLGNBQWMsQ0FBUyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakQsaUJBQVksR0FBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMvQyxpQkFBWSxHQUFZLEtBQUssQ0FBQztRQUM5QixpQkFBWSxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ25ELGVBQVUsR0FBRyxJQUFJLGtC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QVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBQzVCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO3FCQUNwQztvQkFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNwQixPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNuQixDQUFDO2FBQ0YsQ0FBQyxDQUFBO1FBQ0osQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLGFBQWEsRUFBRSxRQUFRLENBQUMsRUFBQyxHQUFHLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQztJQUMzRSxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xuaW1wb3J0IHsgTWF0U29ydCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBtZXJnZSwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGb3JtQWJzdHJhY3QgfSBmcm9tICdAa29hbGFyeC91aS9mb3JtJztcbmltcG9ydCB7IFVudHlwZWRGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGZpcnN0LCBtYXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTWF0VGFibGVEYXRhU291cmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xuaW1wb3J0IHsgS29hbGFMaXN0Rm9ybUZpbHRlckludGVyZmFjZSB9IGZyb20gJy4va29hbGEtbGlzdC1mb3JtLWZpbHRlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgS29hbGFEeW5hbWljQ29tcG9uZW50IH0gZnJvbSBcIkBrb2FsYXJ4L3VpL2R5bmFtaWMtY29tcG9uZW50XCI7XG5pbXBvcnQgeyBkZWxheSB9IGZyb20gXCJAa29hbGFyeC91dGlscy9vcGVyYXRvcnMvZGVsYXlcIjtcbmltcG9ydCB7IEtvYWxhTGlzdENvbmZpZ0ludGVyZmFjZSB9IGZyb20gXCIuL2tvYWxhLmxpc3QtY29uZmlnLmludGVyZmFjZVwiO1xuaW1wb3J0IHsgcmFuZG9tU3RyaW5nIH0gZnJvbSBcIkBrb2FsYXJ4L3V0aWxzL29wZXJhdG9ycy9zdHJpbmdcIjtcblxuZXhwb3J0IHR5cGUgS29hbGFMaXN0UGFnZVNpemUgPSAxMCB8IDIwIHwgMzAgfCA1MCB8IDEwMDtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIExpc3RBYnN0cmFjdCBleHRlbmRzIEZvcm1BYnN0cmFjdCB7XG4gIHB1YmxpYyBzZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uTW9kZWw8b2JqZWN0Pih0cnVlLCBbXSk7XG4gIHB1YmxpYyBsaW1pdE9wdGlvbnM6IG51bWJlcltdID0gWzEwLCAyMCwgMzAsIDUwLCAxMDBdO1xuICBwdWJsaWMgc2hvd01lbnVMaXN0OiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBhbGxTZWxlY3RlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIGRhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlPGFueT4oW10pO1xuICBwdWJsaWMgdHlwZVJlcXVlc3Q6ICdhbGwnIHwgJ29uRGVtYW5kJyA9ICdvbkRlbWFuZCc7XG4gIHB1YmxpYyBmaWx0ZXJQYXJhbXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEtvYWxhTGlzdEZvcm1GaWx0ZXJJbnRlcmZhY2V8bnVsbD4obnVsbCk7XG4gIHB1YmxpYyBmaWx0ZXJFcnJvciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XG4gIHB1YmxpYyBlbXB0eUxpc3RDb21wb25lbnQ/OiBLb2FsYUR5bmFtaWNDb21wb25lbnQ7XG4gIHB1YmxpYyBlcnJvckxpc3RDb21wb25lbnQ/OiBLb2FsYUR5bmFtaWNDb21wb25lbnQ7XG4gIHB1YmxpYyBwYWdlU2l6ZTogS29hbGFMaXN0UGFnZVNpemU7XG4gIHB1YmxpYyB0YWJsZUlkID0gcmFuZG9tU3RyaW5nKDIwLCB7dXBwZXJjYXNlOiB0cnVlLCBsb3dlcmNhc2U6IHRydWV9KTtcblxuICBwcm90ZWN0ZWQgY29uZmlnPzogS29hbGFMaXN0Q29uZmlnSW50ZXJmYWNlO1xuICBwcm90ZWN0ZWQgcGFnaW5hdG9yPzogTWF0UGFnaW5hdG9yO1xuICBwcm90ZWN0ZWQgc29ydD86IE1hdFNvcnQ7XG5cbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25MaXN0PzogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvblNvcnRMaXN0PzogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIGludGVydmFsU29ydExpc3Q6IGFueTtcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZXF1ZXN0RnVuY3Rpb246ICgpID0+IE9ic2VydmFibGU8YW55PixcbiAgICBwcml2YXRlIHJlcXVlc3RSZXNwb25zZUZ1bmN0aW9uOiA8VD4ocmVzdWx0czogVFtdKSA9PiB2b2lkLFxuICAgIGZvcm1TZWFyY2g6ICgpID0+IFVudHlwZWRGb3JtR3JvdXBcbiAgKSB7XG4gICAgc3VwZXIoZm9ybVNlYXJjaCk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0QWxsKCkge1xuICAgIHRoaXMuaXNBbGxTZWxlY3RlZCgpID9cbiAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpIDpcbiAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgaWYgKFxuICAgICAgICAodGhpcy5jb25maWc/LmRpc2FibGVkQ2hlY2tib3hJdGVtTGlzdCAmJiAhdGhpcy5jb25maWcuZGlzYWJsZWRDaGVja2JveEl0ZW1MaXN0KGl0ZW0pKSB8fFxuICAgICAgICAhdGhpcy5jb25maWc/LmRpc2FibGVkQ2hlY2tib3hJdGVtTGlzdFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdChpdGVtKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuaXNBbGxTZWxlY3RlZCgpO1xuICB9XG5cbiAgcHVibGljIGRlZmluZVN0YXR1c1NlbGVjdEFsbChzdGF0dXM6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmFsbFNlbGVjdGVkJC5uZXh0KHN0YXR1cyk7XG4gICAgcmV0dXJuIHRoaXMuYWxsU2VsZWN0ZWQkLmdldFZhbHVlKCk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0SXRlbSgpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2hvd01lbnVMaXN0ID0gdGhpcy5zZWxlY3Rpb24uaGFzVmFsdWUoKTtcbiAgICAgIHRoaXMuaXNBbGxTZWxlY3RlZCgpO1xuICAgIH0sIDUwKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzZWFyY2goZmlsdGVyPzogYW55KSB7XG4gICAgdGhpcy5sb2FkaW5nKHRydWUpO1xuICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgaWYgKHRoaXMucGFnaW5hdG9yKSB7XG4gICAgICB0aGlzLnBhZ2luYXRvci5maXJzdFBhZ2UoKTtcbiAgICB9XG4gICAgdGhpcy5maWx0ZXJQYXJhbXMubmV4dCh7XG4gICAgICBwYXJhbXM6IGZpbHRlcixcbiAgICAgIHNvcnQ6IHRoaXMuc29ydD8uYWN0aXZlID8/ICcnLFxuICAgICAgb3JkZXI6IHRoaXMuc29ydD8uZGlyZWN0aW9uID8/ICdhc2MnLFxuICAgICAgcGFnZTogdGhpcy5wYWdpbmF0b3I/LnBhZ2VJbmRleCA/PyAwLFxuICAgICAgbGltaXQ6IHRoaXMucGFnaW5hdG9yPy5wYWdlU2l6ZSA/PyAzMFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uRGVzdHJveSgpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvblNvcnRMaXN0Py51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uTGlzdD8udW5zdWJzY3JpYmUoKTtcbiAgICBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWxTb3J0TGlzdCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgYWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBsZXQgdGVudGF0aXZhcyA9IDA7XG4gICAgbGV0IHN0b3AgPSBmYWxzZTtcbiAgICBkbyB7XG4gICAgICB0ZW50YXRpdmFzKys7XG4gICAgICBhd2FpdCBkZWxheSg0MDApO1xuICAgICAgaWYgKHRoaXMuc29ydCB8fCB0aGlzLmVtcHR5TGlzdENvbXBvbmVudCkge1xuICAgICAgICB0aGlzLnByZXBhcmVTZWFyY2goKS50aGVuKCk7XG4gICAgICAgIGlmICh0aGlzLmVtcHR5TGlzdENvbXBvbmVudCkgc3RvcCA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHRlbnRhdGl2YXMgPiAxMCkge1xuICAgICAgICBzdG9wID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IHdoaWxlICghdGhpcy5zb3J0ICYmICFzdG9wKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZVNlYXJjaCgpIHtcbiAgICB0aGlzLmludGVydmFsU29ydExpc3QgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5zb3J0ICYmICF0aGlzLnN1YnNjcmlwdGlvblNvcnRMaXN0KSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uU29ydExpc3QgPSB0aGlzLnNvcnQuc29ydENoYW5nZS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuZmlsdGVyUGFyYW1zLnZhbHVlID8/IHt9IGFzIGFueTtcbiAgICAgICAgICBmaWx0ZXIuc29ydCA9IHRoaXMuc29ydD8uYWN0aXZlID8/ICcnO1xuICAgICAgICAgIGZpbHRlci5vcmRlciA9IHRoaXMuc29ydD8uZGlyZWN0aW9uID8/ICcnO1xuICAgICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLm5leHQoZmlsdGVyKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLnNvcnQgJiYgdGhpcy5zdWJzY3JpcHRpb25Tb3J0TGlzdCkge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvblNvcnRMaXN0LnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfSwgNTApO1xuXG4gICAgaWYgKHRoaXMudHlwZVJlcXVlc3QgPT09ICdvbkRlbWFuZCcpIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uTGlzdCA9IG1lcmdlKHRoaXMucGFnaW5hdG9yPy5wYWdlID8/IG5ldyBPYnNlcnZhYmxlKCksIHRoaXMuZmlsdGVyUGFyYW1zKS5waXBlKFxuICAgICAgICBzdGFydFdpdGgoe30pLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gbmV3IE9ic2VydmFibGUob2JzZXJ2ZSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nKHRydWUpO1xuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgICAgaWYgKHRoaXMuZmlsdGVyUGFyYW1zLnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy52YWx1ZS5zb3J0ID0gdGhpcy5zb3J0Py5hY3RpdmUgPz8gdGhpcy5jb25maWc/LmNvbHVtblNvcnQgPz8gJyc7XG4gICAgICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy52YWx1ZS5vcmRlciA9IHRoaXMuc29ydD8uZGlyZWN0aW9uID8/IHRoaXMuY29uZmlnPy5zb3J0RGlyZWN0aW9uID8/ICcnO1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMudmFsdWUucGFnZSA9IHRoaXMucGFnaW5hdG9yPy5wYWdlSW5kZXggPz8gMDtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLnZhbHVlLmxpbWl0ID0gdGhpcy5wYWdpbmF0b3I/LnBhZ2VTaXplID8/IDMwO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvYnNlcnZlLm5leHQodHJ1ZSk7XG4gICAgICAgIH0pKSxcbiAgICAgICAgZGVib3VuY2VUaW1lKDMwMCksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLnJ1blJlcXVlc3RGdW5jdGlvbigpKSxcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIHRoaXMubG9hZGluZyhmYWxzZSk7XG4gICAgICAgICAgdGhpcy5zY3JvbGxUYWJsZVRvVG9wKCk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdFJlc3BvbnNlRnVuY3Rpb24ocmVzcG9uc2UpO1xuICAgICAgICB9KVxuICAgICAgKS5zdWJzY3JpYmUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMucGFnaW5hdG9yKSB0aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yID0gdGhpcy5wYWdpbmF0b3I7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbkxpc3QgPSB0aGlzLmZpbHRlclBhcmFtcy5waXBlKFxuICAgICAgICBzdGFydFdpdGgoe30pLFxuICAgICAgICBkZWJvdW5jZVRpbWUoMzAwKSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMucnVuUmVxdWVzdEZ1bmN0aW9uKCkpLFxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgICB0aGlzLnNjcm9sbFRhYmxlVG9Ub3AoKTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0UmVzcG9uc2VGdW5jdGlvbihyZXNwb25zZSk7XG4gICAgICAgIH0pXG4gICAgICApLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmVtcHR5TGlzdENvbXBvbmVudCkge1xuICAgICAgZG8ge1xuICAgICAgICBhd2FpdCBkZWxheSgzMDEpO1xuICAgICAgICBpZiAodGhpcy5zb3J0KSB7XG4gICAgICAgICAgaWYgKHRoaXMudHlwZVJlcXVlc3QgPT09IFwib25EZW1hbmRcIikge1xuICAgICAgICAgICAgdGhpcy5zb3J0LnNvcnRDaGFuZ2Uuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMucGFnaW5hdG9yKSB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggPSAwXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlLnNvcnQgPSB0aGlzLnNvcnQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IHdoaWxlICghdGhpcy5zb3J0KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzQWxsU2VsZWN0ZWQoKSB7XG4gICAgY29uc3QgbnVtU2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGg7XG4gICAgY29uc3QgbnVtUm93cyA9ICh0aGlzLmNvbmZpZz8uZGlzYWJsZWRDaGVja2JveEl0ZW1MaXN0ID9cbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhLmZpbHRlcihpdGVtID0+ICEodGhpcy5jb25maWc/LmRpc2FibGVkQ2hlY2tib3hJdGVtTGlzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuY29uZmlnLmRpc2FibGVkQ2hlY2tib3hJdGVtTGlzdChpdGVtKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICcnKSkgOlxuICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEpLmxlbmd0aDtcblxuICAgIHJldHVybiB0aGlzLmRlZmluZVN0YXR1c1NlbGVjdEFsbChudW1TZWxlY3RlZCA9PT0gbnVtUm93cyk7XG4gIH1cblxuICBwcml2YXRlIHJ1blJlcXVlc3RGdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8dW5rbm93bltdPihvYnNlcnZlID0+IHtcbiAgICAgIHRoaXMucmVxdWVzdEZ1bmN0aW9uKCkucGlwZShmaXJzdCgpKS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiByZXNwb25zZSA9PiBvYnNlcnZlLm5leHQocmVzcG9uc2UpLFxuICAgICAgICBlcnJvcjogZXJyID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5lcnJvckxpc3RDb21wb25lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyRXJyb3IkLm5leHQoZXJyKTtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JMaXN0Q29tcG9uZW50LmRhdGEgPSBlcnI7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMubG9hZGluZyhmYWxzZSk7XG4gICAgICAgICAgb2JzZXJ2ZS5uZXh0KFtdKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgcHJpdmF0ZSBzY3JvbGxUYWJsZVRvVG9wKCkge1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMudGFibGVJZCk/LnBhcmVudEVsZW1lbnQ/LnNjcm9sbFRvKHt0b3A6IDB9KTtcbiAgfVxufVxuIl19