@sapphire-ion/framework 1.2.43 → 1.2.45

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 (495) hide show
  1. package/esm2022/lib/classes/comparison/comparison-operator.mjs +18 -0
  2. package/esm2022/lib/classes/comparison/comparison-value-type.mjs +25 -0
  3. package/esm2022/lib/classes/comparison/comparison.mjs +41 -0
  4. package/esm2022/lib/classes/comparison/properties/bool-property.mjs +15 -0
  5. package/esm2022/lib/classes/comparison/properties/date-property.mjs +27 -0
  6. package/esm2022/lib/classes/comparison/properties/datetime-property.mjs +27 -0
  7. package/esm2022/lib/classes/comparison/properties/decimal-property.mjs +27 -0
  8. package/esm2022/lib/classes/comparison/properties/enum-property.mjs +27 -0
  9. package/esm2022/lib/classes/comparison/properties/implicit-property.mjs +12 -0
  10. package/esm2022/lib/classes/comparison/properties/int-property.mjs +27 -0
  11. package/esm2022/lib/classes/comparison/properties/long-property.mjs +27 -0
  12. package/esm2022/lib/classes/comparison/properties/string-property.mjs +15 -0
  13. package/esm2022/lib/classes/comparison/properties/time-property.mjs +27 -0
  14. package/esm2022/lib/classes/credentials.mjs +2 -0
  15. package/esm2022/lib/classes/environment.mjs +34 -0
  16. package/esm2022/lib/classes/filters/view-filtros.mjs +18 -0
  17. package/esm2022/lib/classes/infinite-scroll.mjs +90 -0
  18. package/esm2022/lib/classes/inputs/table-field-form-builder.mjs +10 -0
  19. package/esm2022/lib/classes/inputs/table-field.mjs +79 -0
  20. package/esm2022/lib/classes/page-option.mjs +2 -0
  21. package/esm2022/lib/classes/routes/default-routing-factory.mjs +23 -0
  22. package/esm2022/lib/classes/routes/id-preloader-configuration.mjs +22 -0
  23. package/esm2022/lib/classes/routes/route-data.mjs +9 -0
  24. package/esm2022/lib/components/carousel/carousel-image/carousel-image.component.mjs +18 -0
  25. package/esm2022/lib/components/carousel/carousel-item/carousel-item.component.mjs +15 -0
  26. package/esm2022/lib/components/carousel/carousel.component.mjs +79 -0
  27. package/esm2022/lib/components/carousel/carousel.module.mjs +31 -0
  28. package/esm2022/lib/components/carousel/i-carousel-item.component.mjs +16 -0
  29. package/esm2022/lib/components/content-block/content-block.component.mjs +27 -0
  30. package/esm2022/lib/components/default/default-list/abstract-list.mjs +49 -0
  31. package/esm2022/lib/components/default/default-list/default-list.component.mjs +95 -0
  32. package/esm2022/lib/components/default/default-list/header-list/header-list.component.mjs +98 -0
  33. package/esm2022/lib/components/default/default-list/list.mjs +120 -0
  34. package/esm2022/lib/components/default/default-pagination/default-pagination.component.mjs +123 -0
  35. package/esm2022/lib/components/default/default-table/default-table.component.mjs +216 -0
  36. package/esm2022/lib/components/default/default-table/th-filter/th-filter.component.mjs +206 -0
  37. package/esm2022/lib/components/default/default-view/abstract-view.mjs +22 -0
  38. package/esm2022/lib/components/default/default-view/default-view.component.mjs +63 -0
  39. package/esm2022/lib/components/default/default-view/header-view/header-view.component.mjs +78 -0
  40. package/esm2022/lib/components/default/default-view/view.mjs +188 -0
  41. package/esm2022/lib/components/default/default.module.mjs +98 -0
  42. package/esm2022/lib/components/default-page/default.page.mjs +75 -0
  43. package/esm2022/lib/components/drag-drop-file/drag-drop-file.directive.mjs +60 -0
  44. package/esm2022/lib/components/drag-drop-file/drag-drop-file.module.mjs +31 -0
  45. package/esm2022/lib/components/drag-drop-file/drag-drop-overlay/drag-drop-overlay.component.mjs +15 -0
  46. package/esm2022/lib/components/drawer/default-drawer-end/default-drawer-end.component.mjs +34 -0
  47. package/esm2022/lib/components/drawer/drawer-group/drawer-group.component.mjs +52 -0
  48. package/esm2022/lib/components/drawer/drawer.component.mjs +156 -0
  49. package/esm2022/lib/components/drawer/menu.mjs +15 -0
  50. package/esm2022/lib/components/filter/filter.component.mjs +145 -0
  51. package/esm2022/lib/components/http-responses-pages/forbidden-403/forbidden-403.component.mjs +17 -0
  52. package/esm2022/lib/components/image/image.component.mjs +91 -0
  53. package/esm2022/lib/components/info-popover/info-popover.component.mjs +91 -0
  54. package/esm2022/lib/components/inputs/custom-input.mjs +85 -0
  55. package/esm2022/lib/components/inputs/input-bool/input-bool.component.mjs +46 -0
  56. package/esm2022/lib/components/inputs/input-bool/input-bool.configuration.mjs +16 -0
  57. package/esm2022/lib/components/inputs/input-cep/input-cep.component.mjs +50 -0
  58. package/esm2022/lib/components/inputs/input-cep/input-cep.configuration.mjs +4 -0
  59. package/esm2022/lib/components/inputs/input-color/input-color.component.mjs +481 -0
  60. package/esm2022/lib/components/inputs/input-configuration.mjs +2 -0
  61. package/esm2022/lib/components/inputs/input-cpf-cnpj/input-cpf-cnpj.component.mjs +116 -0
  62. package/esm2022/lib/components/inputs/input-cpf-cnpj/input-cpf-cnpj.configuration.mjs +6 -0
  63. package/esm2022/lib/components/inputs/input-date/input-date.component.mjs +235 -0
  64. package/esm2022/lib/components/inputs/input-date/input-date.configuration.mjs +8 -0
  65. package/esm2022/lib/components/inputs/input-decimal/input-decimal.component.mjs +243 -0
  66. package/esm2022/lib/components/inputs/input-decimal/input-decimal.configuration.mjs +50 -0
  67. package/esm2022/lib/components/inputs/input-default-configurations.mjs +14 -0
  68. package/esm2022/lib/components/inputs/input-file/download-button/download-button.component.mjs +99 -0
  69. package/esm2022/lib/components/inputs/input-file/input-file.component.mjs +101 -0
  70. package/esm2022/lib/components/inputs/input-file/input-file.configuration.mjs +24 -0
  71. package/esm2022/lib/components/inputs/input-icon/fluenticons.mjs +3734 -0
  72. package/esm2022/lib/components/inputs/input-icon/input-icon.component.mjs +60 -0
  73. package/esm2022/lib/components/inputs/input-icon/ionicons.mjs +1360 -0
  74. package/esm2022/lib/components/inputs/input-provider-factory.mjs +12 -0
  75. package/esm2022/lib/components/inputs/input-select/directives/sion-label-template.directive.mjs +16 -0
  76. package/esm2022/lib/components/inputs/input-select/directives/sion-option-template.directive.mjs +16 -0
  77. package/esm2022/lib/components/inputs/input-select/directives/sion-placeholder-template.directive.mjs +16 -0
  78. package/esm2022/lib/components/inputs/input-select/input-select.component.mjs +373 -0
  79. package/esm2022/lib/components/inputs/input-select/input.select.configuration.mjs +229 -0
  80. package/esm2022/lib/components/inputs/input-string/input-string.component.mjs +41 -0
  81. package/esm2022/lib/components/inputs/input-string/input-string.configuration.mjs +20 -0
  82. package/esm2022/lib/components/inputs/input-telefone/input-telefone.component.mjs +74 -0
  83. package/esm2022/lib/components/inputs/input-telefone/input-telefone.configuration.mjs +12 -0
  84. package/esm2022/lib/components/inputs/input-textarea/input-textarea.component.mjs +74 -0
  85. package/esm2022/lib/components/inputs/input-textarea/input-textarea.configuration.mjs +7 -0
  86. package/esm2022/lib/components/inputs/input-type.mjs +24 -0
  87. package/esm2022/lib/components/inputs/input-validators.mjs +121 -0
  88. package/esm2022/lib/components/inputs/inputs.module.mjs +133 -0
  89. package/esm2022/lib/components/loading/loading.component.mjs +34 -0
  90. package/esm2022/lib/components/login/login-admin/login-admin.component.mjs +52 -0
  91. package/esm2022/lib/components/login/login.component.mjs +99 -0
  92. package/esm2022/lib/components/main-content/main-content.component.mjs +100 -0
  93. package/esm2022/lib/components/popover/sion-popover/sion-popover.component.mjs +182 -0
  94. package/esm2022/lib/components/popover/sion-popover.module.mjs +21 -0
  95. package/esm2022/lib/components/sion-card/sion-card.component.mjs +26 -0
  96. package/esm2022/lib/components/stepper/step/step.component.mjs +43 -0
  97. package/esm2022/lib/components/stepper/stepper.component.mjs +36 -0
  98. package/esm2022/lib/components/stepper/stepper.module.mjs +25 -0
  99. package/esm2022/lib/components/tabs/tab/tab.component.mjs +41 -0
  100. package/esm2022/lib/components/tabs/tabs/tabs.component.mjs +56 -0
  101. package/esm2022/lib/components/tabs/tabs.module.mjs +22 -0
  102. package/esm2022/lib/components/text-tooltip/text-tooltip.component.mjs +51 -0
  103. package/esm2022/lib/components/tooltip/tooltip.component.mjs +21 -0
  104. package/esm2022/lib/core.module.mjs +38 -0
  105. package/esm2022/lib/directives/ng-var.directive.mjs +29 -0
  106. package/esm2022/lib/guards/auth.guard.mjs +26 -0
  107. package/esm2022/lib/guards/error.interceptor.mjs +107 -0
  108. package/esm2022/lib/guards/token.interceptor.mjs +25 -0
  109. package/esm2022/lib/index.mjs +187 -0
  110. package/esm2022/lib/pipes/secure.pipe.mjs +42 -0
  111. package/esm2022/lib/services/auth.service.mjs +146 -0
  112. package/esm2022/lib/services/environment.service.mjs +26 -0
  113. package/esm2022/lib/services/generic.service.mjs +84 -0
  114. package/esm2022/lib/services/modal-focus-trap.service.mjs +62 -0
  115. package/esm2022/lib/services/popover-focus-trap.service.mjs +62 -0
  116. package/esm2022/lib/services/route/route.cache.service.mjs +15 -0
  117. package/esm2022/lib/services/route/route.provider.service.mjs +42 -0
  118. package/esm2022/lib/services/usuario.service.mjs +49 -0
  119. package/esm2022/lib/services/utils.service.mjs +190 -0
  120. package/esm2022/lib/services/web/api-url-provider.service.mjs +29 -0
  121. package/esm2022/lib/services/web/http.ativo.service.mjs +37 -0
  122. package/esm2022/lib/services/web/http.service.mjs +177 -0
  123. package/esm2022/lib/services/web/storage.service.mjs +183 -0
  124. package/esm2022/public-api.mjs +5 -0
  125. package/esm2022/sapphire-ion-framework.mjs +5 -0
  126. package/fesm2022/sapphire-ion-framework.mjs +12265 -0
  127. package/fesm2022/sapphire-ion-framework.mjs.map +1 -0
  128. package/index.d.ts +5 -0
  129. package/lib/classes/comparison/comparison-operator.d.ts +9 -0
  130. package/lib/classes/comparison/comparison-value-type.d.ts +23 -0
  131. package/lib/classes/comparison/comparison.d.ts +25 -0
  132. package/lib/classes/comparison/properties/bool-property.d.ts +7 -0
  133. package/lib/classes/comparison/properties/date-property.d.ts +11 -0
  134. package/lib/classes/comparison/properties/datetime-property.d.ts +11 -0
  135. package/lib/classes/comparison/properties/decimal-property.d.ts +11 -0
  136. package/lib/classes/comparison/properties/enum-property.d.ts +11 -0
  137. package/lib/classes/comparison/properties/implicit-property.d.ts +6 -0
  138. package/lib/classes/comparison/properties/int-property.d.ts +11 -0
  139. package/lib/classes/comparison/properties/long-property.d.ts +11 -0
  140. package/lib/classes/comparison/properties/string-property.d.ts +7 -0
  141. package/lib/classes/comparison/properties/time-property.d.ts +11 -0
  142. package/{src/lib/classes/credentials.ts → lib/classes/credentials.d.ts} +5 -5
  143. package/lib/classes/environment.d.ts +14 -0
  144. package/lib/classes/filters/view-filtros.d.ts +10 -0
  145. package/lib/classes/infinite-scroll.d.ts +26 -0
  146. package/lib/classes/inputs/table-field-form-builder.d.ts +5 -0
  147. package/lib/classes/inputs/table-field.d.ts +20 -0
  148. package/lib/classes/page-option.d.ts +7 -0
  149. package/lib/classes/routes/default-routing-factory.d.ts +8 -0
  150. package/lib/classes/routes/id-preloader-configuration.d.ts +28 -0
  151. package/lib/classes/routes/route-data.d.ts +5 -0
  152. package/lib/components/carousel/carousel-image/carousel-image.component.d.ts +10 -0
  153. package/lib/components/carousel/carousel-item/carousel-item.component.d.ts +9 -0
  154. package/lib/components/carousel/carousel.component.d.ts +32 -0
  155. package/lib/components/carousel/carousel.module.d.ts +12 -0
  156. package/lib/components/carousel/i-carousel-item.component.d.ts +9 -0
  157. package/lib/components/content-block/content-block.component.d.ts +15 -0
  158. package/lib/components/default/default-list/abstract-list.d.ts +21 -0
  159. package/lib/components/default/default-list/default-list.component.d.ts +47 -0
  160. package/lib/components/default/default-list/header-list/header-list.component.d.ts +45 -0
  161. package/lib/components/default/default-list/list.d.ts +40 -0
  162. package/lib/components/default/default-pagination/default-pagination.component.d.ts +36 -0
  163. package/lib/components/default/default-table/default-table.component.d.ts +90 -0
  164. package/lib/components/default/default-table/th-filter/th-filter.component.d.ts +23 -0
  165. package/lib/components/default/default-view/abstract-view.d.ts +18 -0
  166. package/lib/components/default/default-view/default-view.component.d.ts +32 -0
  167. package/lib/components/default/default-view/header-view/header-view.component.d.ts +29 -0
  168. package/lib/components/default/default-view/view.d.ts +59 -0
  169. package/lib/components/default/default.module.d.ts +31 -0
  170. package/lib/components/default-page/default.page.d.ts +35 -0
  171. package/lib/components/drag-drop-file/drag-drop-file.directive.d.ts +14 -0
  172. package/lib/components/drag-drop-file/drag-drop-file.module.d.ts +10 -0
  173. package/lib/components/drag-drop-file/drag-drop-overlay/drag-drop-overlay.component.d.ts +9 -0
  174. package/lib/components/drawer/default-drawer-end/default-drawer-end.component.d.ts +13 -0
  175. package/lib/components/drawer/drawer-group/drawer-group.component.d.ts +22 -0
  176. package/lib/components/drawer/drawer.component.d.ts +31 -0
  177. package/lib/components/drawer/menu.d.ts +9 -0
  178. package/lib/components/filter/filter.component.d.ts +29 -0
  179. package/lib/components/http-responses-pages/forbidden-403/forbidden-403.component.d.ts +8 -0
  180. package/lib/components/image/image.component.d.ts +23 -0
  181. package/lib/components/info-popover/info-popover.component.d.ts +15 -0
  182. package/lib/components/inputs/custom-input.d.ts +40 -0
  183. package/lib/components/inputs/input-bool/input-bool.component.d.ts +16 -0
  184. package/lib/components/inputs/input-bool/input-bool.configuration.d.ts +17 -0
  185. package/lib/components/inputs/input-cep/input-cep.component.d.ts +18 -0
  186. package/lib/components/inputs/input-cep/input-cep.configuration.d.ts +3 -0
  187. package/lib/components/inputs/input-color/input-color.component.d.ts +77 -0
  188. package/{src/lib/components/inputs/input-configuration.ts → lib/components/inputs/input-configuration.d.ts} +10 -23
  189. package/lib/components/inputs/input-cpf-cnpj/input-cpf-cnpj.component.d.ts +19 -0
  190. package/lib/components/inputs/input-cpf-cnpj/input-cpf-cnpj.configuration.d.ts +5 -0
  191. package/lib/components/inputs/input-date/input-date.component.d.ts +60 -0
  192. package/lib/components/inputs/input-date/input-date.configuration.d.ts +7 -0
  193. package/lib/components/inputs/input-decimal/input-decimal.component.d.ts +26 -0
  194. package/lib/components/inputs/input-decimal/input-decimal.configuration.d.ts +28 -0
  195. package/lib/components/inputs/input-default-configurations.d.ts +13 -0
  196. package/lib/components/inputs/input-file/download-button/download-button.component.d.ts +39 -0
  197. package/lib/components/inputs/input-file/input-file.component.d.ts +27 -0
  198. package/lib/components/inputs/input-file/input-file.configuration.d.ts +8 -0
  199. package/lib/components/inputs/input-icon/fluenticons.d.ts +1 -0
  200. package/lib/components/inputs/input-icon/input-icon.component.d.ts +20 -0
  201. package/lib/components/inputs/input-icon/ionicons.d.ts +1 -0
  202. package/lib/components/inputs/input-provider-factory.d.ts +4 -0
  203. package/lib/components/inputs/input-select/directives/sion-label-template.directive.d.ts +18 -0
  204. package/lib/components/inputs/input-select/directives/sion-option-template.directive.d.ts +14 -0
  205. package/lib/components/inputs/input-select/directives/sion-placeholder-template.directive.d.ts +18 -0
  206. package/lib/components/inputs/input-select/input-select.component.d.ts +83 -0
  207. package/lib/components/inputs/input-select/input.select.configuration.d.ts +122 -0
  208. package/lib/components/inputs/input-string/input-string.component.d.ts +14 -0
  209. package/lib/components/inputs/input-string/input-string.configuration.d.ts +15 -0
  210. package/lib/components/inputs/input-telefone/input-telefone.component.d.ts +19 -0
  211. package/lib/components/inputs/input-telefone/input-telefone.configuration.d.ts +9 -0
  212. package/lib/components/inputs/input-textarea/input-textarea.component.d.ts +16 -0
  213. package/lib/components/inputs/input-textarea/input-textarea.configuration.d.ts +4 -0
  214. package/lib/components/inputs/input-type.d.ts +22 -0
  215. package/lib/components/inputs/input-validators.d.ts +25 -0
  216. package/lib/components/inputs/inputs.module.d.ts +33 -0
  217. package/lib/components/loading/loading.component.d.ts +18 -0
  218. package/lib/components/login/login-admin/login-admin.component.d.ts +20 -0
  219. package/lib/components/login/login.component.d.ts +29 -0
  220. package/lib/components/main-content/main-content.component.d.ts +27 -0
  221. package/lib/components/popover/sion-popover/sion-popover.component.d.ts +43 -0
  222. package/lib/components/popover/sion-popover.module.d.ts +9 -0
  223. package/lib/components/sion-card/sion-card.component.d.ts +11 -0
  224. package/lib/components/stepper/step/step.component.d.ts +15 -0
  225. package/lib/components/stepper/stepper.component.d.ts +14 -0
  226. package/lib/components/stepper/stepper.module.d.ts +10 -0
  227. package/lib/components/tabs/tab/tab.component.d.ts +19 -0
  228. package/lib/components/tabs/tabs/tabs.component.d.ts +18 -0
  229. package/lib/components/tabs/tabs.module.d.ts +12 -0
  230. package/lib/components/text-tooltip/text-tooltip.component.d.ts +16 -0
  231. package/lib/components/tooltip/tooltip.component.d.ts +7 -0
  232. package/lib/core.module.d.ts +16 -0
  233. package/lib/directives/ng-var.directive.d.ts +12 -0
  234. package/lib/guards/auth.guard.d.ts +11 -0
  235. package/lib/guards/error.interceptor.d.ts +32 -0
  236. package/lib/guards/token.interceptor.d.ts +11 -0
  237. package/lib/index.d.ts +117 -0
  238. package/lib/pipes/secure.pipe.d.ts +15 -0
  239. package/lib/services/auth.service.d.ts +47 -0
  240. package/lib/services/environment.service.d.ts +10 -0
  241. package/lib/services/generic.service.d.ts +22 -0
  242. package/lib/services/modal-focus-trap.service.d.ts +13 -0
  243. package/lib/services/popover-focus-trap.service.d.ts +13 -0
  244. package/lib/services/route/route.cache.service.d.ts +7 -0
  245. package/lib/services/route/route.provider.service.d.ts +13 -0
  246. package/lib/services/usuario.service.d.ts +21 -0
  247. package/lib/services/utils.service.d.ts +53 -0
  248. package/lib/services/web/api-url-provider.service.d.ts +13 -0
  249. package/lib/services/web/http.ativo.service.d.ts +20 -0
  250. package/lib/services/web/http.service.d.ts +59 -0
  251. package/lib/services/web/storage.service.d.ts +46 -0
  252. package/package.json +47 -43
  253. package/public-api.d.ts +1 -0
  254. package/{src/lib → themes}/compiled-styles.scss +2551 -2551
  255. package/build.ps1 +0 -39
  256. package/ng-package.json +0 -10
  257. package/src/lib/classes/comparison/comparison-operator.ts +0 -17
  258. package/src/lib/classes/comparison/comparison-value-type.ts +0 -34
  259. package/src/lib/classes/comparison/comparison.ts +0 -45
  260. package/src/lib/classes/comparison/properties/bool-property.ts +0 -16
  261. package/src/lib/classes/comparison/properties/date-property.ts +0 -28
  262. package/src/lib/classes/comparison/properties/datetime-property.ts +0 -28
  263. package/src/lib/classes/comparison/properties/decimal-property.ts +0 -28
  264. package/src/lib/classes/comparison/properties/enum-property.ts +0 -28
  265. package/src/lib/classes/comparison/properties/implicit-property.ts +0 -13
  266. package/src/lib/classes/comparison/properties/int-property.ts +0 -28
  267. package/src/lib/classes/comparison/properties/long-property.ts +0 -28
  268. package/src/lib/classes/comparison/properties/string-property.ts +0 -16
  269. package/src/lib/classes/comparison/properties/time-property.ts +0 -28
  270. package/src/lib/classes/environment.ts +0 -37
  271. package/src/lib/classes/filters/view-filtros.ts +0 -18
  272. package/src/lib/classes/infinite-scroll.ts +0 -112
  273. package/src/lib/classes/inputs/table-field-form-builder.ts +0 -12
  274. package/src/lib/classes/inputs/table-field.ts +0 -62
  275. package/src/lib/classes/page-option.ts +0 -8
  276. package/src/lib/classes/routes/default-routing-factory.ts +0 -24
  277. package/src/lib/classes/routes/id-preloader-configuration.ts +0 -21
  278. package/src/lib/classes/routes/route-data.ts +0 -9
  279. package/src/lib/components/carousel/carousel-image/carousel-image.component.html +0 -4
  280. package/src/lib/components/carousel/carousel-image/carousel-image.component.ts +0 -15
  281. package/src/lib/components/carousel/carousel-item/carousel-item.component.html +0 -3
  282. package/src/lib/components/carousel/carousel-item/carousel-item.component.ts +0 -14
  283. package/src/lib/components/carousel/carousel.component.html +0 -22
  284. package/src/lib/components/carousel/carousel.component.ts +0 -83
  285. package/src/lib/components/carousel/carousel.module.ts +0 -20
  286. package/src/lib/components/carousel/i-carousel-item.component.ts +0 -8
  287. package/src/lib/components/content-block/content-block.component.html +0 -6
  288. package/src/lib/components/content-block/content-block.component.ts +0 -25
  289. package/src/lib/components/default/default-list/abstract-list.ts +0 -56
  290. package/src/lib/components/default/default-list/default-list.component.html +0 -60
  291. package/src/lib/components/default/default-list/default-list.component.ts +0 -72
  292. package/src/lib/components/default/default-list/header-list/header-list.component.html +0 -32
  293. package/src/lib/components/default/default-list/header-list/header-list.component.ts +0 -85
  294. package/src/lib/components/default/default-list/list.ts +0 -127
  295. package/src/lib/components/default/default-pagination/default-pagination.component.html +0 -52
  296. package/src/lib/components/default/default-pagination/default-pagination.component.ts +0 -118
  297. package/src/lib/components/default/default-table/default-table.component.html +0 -104
  298. package/src/lib/components/default/default-table/default-table.component.ts +0 -255
  299. package/src/lib/components/default/default-table/th-filter/th-filter.component.html +0 -69
  300. package/src/lib/components/default/default-table/th-filter/th-filter.component.ts +0 -183
  301. package/src/lib/components/default/default-view/abstract-view.ts +0 -25
  302. package/src/lib/components/default/default-view/default-view.component.html +0 -111
  303. package/src/lib/components/default/default-view/default-view.component.ts +0 -44
  304. package/src/lib/components/default/default-view/header-view/header-view.component.html +0 -64
  305. package/src/lib/components/default/default-view/header-view/header-view.component.ts +0 -57
  306. package/src/lib/components/default/default-view/view.ts +0 -183
  307. package/src/lib/components/default/default.module.ts +0 -61
  308. package/src/lib/components/default-page/default.page.html +0 -63
  309. package/src/lib/components/default-page/default.page.ts +0 -84
  310. package/src/lib/components/drag-drop-file/drag-drop-file.directive.ts +0 -44
  311. package/src/lib/components/drag-drop-file/drag-drop-file.module.ts +0 -21
  312. package/src/lib/components/drag-drop-file/drag-drop-overlay/drag-drop-overlay.component.html +0 -5
  313. package/src/lib/components/drag-drop-file/drag-drop-overlay/drag-drop-overlay.component.ts +0 -17
  314. package/src/lib/components/drawer/default-drawer-end/default-drawer-end.component.html +0 -12
  315. package/src/lib/components/drawer/default-drawer-end/default-drawer-end.component.ts +0 -35
  316. package/src/lib/components/drawer/drawer-group/drawer-group.component.html +0 -79
  317. package/src/lib/components/drawer/drawer-group/drawer-group.component.ts +0 -49
  318. package/src/lib/components/drawer/drawer.component.html +0 -120
  319. package/src/lib/components/drawer/drawer.component.ts +0 -157
  320. package/src/lib/components/drawer/menu.ts +0 -20
  321. package/src/lib/components/filter/filter.component.html +0 -43
  322. package/src/lib/components/filter/filter.component.ts +0 -141
  323. package/src/lib/components/http-responses-pages/forbidden-403/forbidden-403.component.html +0 -35
  324. package/src/lib/components/http-responses-pages/forbidden-403/forbidden-403.component.ts +0 -19
  325. package/src/lib/components/image/image.component.html +0 -17
  326. package/src/lib/components/image/image.component.ts +0 -95
  327. package/src/lib/components/info-popover/info-popover.component.html +0 -23
  328. package/src/lib/components/info-popover/info-popover.component.ts +0 -75
  329. package/src/lib/components/inputs/custom-input.ts +0 -94
  330. package/src/lib/components/inputs/input-bool/input-bool.component.html +0 -26
  331. package/src/lib/components/inputs/input-bool/input-bool.component.ts +0 -39
  332. package/src/lib/components/inputs/input-bool/input-bool.configuration.ts +0 -14
  333. package/src/lib/components/inputs/input-cep/input-cep.component.html +0 -27
  334. package/src/lib/components/inputs/input-cep/input-cep.component.ts +0 -41
  335. package/src/lib/components/inputs/input-cep/input-cep.configuration.ts +0 -4
  336. package/src/lib/components/inputs/input-color/input-color.component.html +0 -79
  337. package/src/lib/components/inputs/input-color/input-color.component.ts +0 -544
  338. package/src/lib/components/inputs/input-color/input-color.configuration.ts +0 -0
  339. package/src/lib/components/inputs/input-cpf-cnpj/input-cpf-cnpj.component.html +0 -28
  340. package/src/lib/components/inputs/input-cpf-cnpj/input-cpf-cnpj.component.ts +0 -99
  341. package/src/lib/components/inputs/input-cpf-cnpj/input-cpf-cnpj.configuration.ts +0 -4
  342. package/src/lib/components/inputs/input-date/input-date.component.html +0 -88
  343. package/src/lib/components/inputs/input-date/input-date.component.ts +0 -241
  344. package/src/lib/components/inputs/input-date/input-date.configuration.ts +0 -6
  345. package/src/lib/components/inputs/input-decimal/input-decimal.component.html +0 -31
  346. package/src/lib/components/inputs/input-decimal/input-decimal.component.ts +0 -249
  347. package/src/lib/components/inputs/input-decimal/input-decimal.configuration.ts +0 -47
  348. package/src/lib/components/inputs/input-default-configurations.ts +0 -15
  349. package/src/lib/components/inputs/input-file/download-button/download-button.component.html +0 -56
  350. package/src/lib/components/inputs/input-file/download-button/download-button.component.ts +0 -89
  351. package/src/lib/components/inputs/input-file/input-file.component.html +0 -59
  352. package/src/lib/components/inputs/input-file/input-file.component.ts +0 -96
  353. package/src/lib/components/inputs/input-file/input-file.configuration.ts +0 -25
  354. package/src/lib/components/inputs/input-icon/fluenticons.ts +0 -3733
  355. package/src/lib/components/inputs/input-icon/input-icon.component.html +0 -8
  356. package/src/lib/components/inputs/input-icon/input-icon.component.ts +0 -52
  357. package/src/lib/components/inputs/input-icon/ionicons.ts +0 -1359
  358. package/src/lib/components/inputs/input-provider-factory.ts +0 -12
  359. package/src/lib/components/inputs/input-select/directives/sion-label-template.directive.ts +0 -19
  360. package/src/lib/components/inputs/input-select/directives/sion-option-template.directive.ts +0 -16
  361. package/src/lib/components/inputs/input-select/directives/sion-placeholder-template.directive.ts +0 -19
  362. package/src/lib/components/inputs/input-select/input-select.component.html +0 -176
  363. package/src/lib/components/inputs/input-select/input-select.component.ts +0 -361
  364. package/src/lib/components/inputs/input-select/input.select.configuration.ts +0 -292
  365. package/src/lib/components/inputs/input-string/input-string.component.html +0 -27
  366. package/src/lib/components/inputs/input-string/input-string.component.ts +0 -31
  367. package/src/lib/components/inputs/input-string/input-string.configuration.ts +0 -18
  368. package/src/lib/components/inputs/input-telefone/input-telefone.component.html +0 -29
  369. package/src/lib/components/inputs/input-telefone/input-telefone.component.ts +0 -63
  370. package/src/lib/components/inputs/input-telefone/input-telefone.configuration.ts +0 -8
  371. package/src/lib/components/inputs/input-textarea/input-textarea.component.html +0 -27
  372. package/src/lib/components/inputs/input-textarea/input-textarea.component.ts +0 -31
  373. package/src/lib/components/inputs/input-textarea/input-textarea.configuration.ts +0 -7
  374. package/src/lib/components/inputs/input-type.ts +0 -22
  375. package/src/lib/components/inputs/input-validators.ts +0 -111
  376. package/src/lib/components/inputs/inputs.module.ts +0 -74
  377. package/src/lib/components/loading/loading.component.html +0 -28
  378. package/src/lib/components/loading/loading.component.ts +0 -29
  379. package/src/lib/components/login/login-admin/login-admin.component.html +0 -28
  380. package/src/lib/components/login/login-admin/login-admin.component.ts +0 -51
  381. package/src/lib/components/login/login.component.html +0 -104
  382. package/src/lib/components/login/login.component.ts +0 -96
  383. package/src/lib/components/main-content/main-content.component.html +0 -145
  384. package/src/lib/components/main-content/main-content.component.ts +0 -93
  385. package/src/lib/components/popover/sion-popover/sion-popover.component.html +0 -21
  386. package/src/lib/components/popover/sion-popover/sion-popover.component.ts +0 -182
  387. package/src/lib/components/popover/sion-popover.module.ts +0 -12
  388. package/src/lib/components/sion-card/sion-card.component.html +0 -12
  389. package/src/lib/components/sion-card/sion-card.component.ts +0 -23
  390. package/src/lib/components/stepper/step/step.component.html +0 -11
  391. package/src/lib/components/stepper/step/step.component.ts +0 -44
  392. package/src/lib/components/stepper/stepper.component.html +0 -3
  393. package/src/lib/components/stepper/stepper.component.ts +0 -37
  394. package/src/lib/components/stepper/stepper.module.ts +0 -15
  395. package/src/lib/components/tabs/tab/tab.component.html +0 -8
  396. package/src/lib/components/tabs/tab/tab.component.ts +0 -28
  397. package/src/lib/components/tabs/tabs/tabs.component.html +0 -14
  398. package/src/lib/components/tabs/tabs/tabs.component.ts +0 -42
  399. package/src/lib/components/tabs/tabs.module.ts +0 -15
  400. package/src/lib/components/text-tooltip/text-tooltip.component.html +0 -8
  401. package/src/lib/components/text-tooltip/text-tooltip.component.ts +0 -45
  402. package/src/lib/components/tooltip/tooltip.component.html +0 -53
  403. package/src/lib/components/tooltip/tooltip.component.ts +0 -16
  404. package/src/lib/core.module.ts +0 -29
  405. package/src/lib/directives/ng-var.directive.ts +0 -26
  406. package/src/lib/guards/auth.guard.ts +0 -19
  407. package/src/lib/guards/error.interceptor.ts +0 -108
  408. package/src/lib/guards/token.interceptor.ts +0 -28
  409. package/src/lib/index.ts +0 -190
  410. package/src/lib/pipes/secure.pipe.ts +0 -39
  411. package/src/lib/services/auth.service.ts +0 -153
  412. package/src/lib/services/crypto.service.ts +0 -164
  413. package/src/lib/services/environment.service.ts +0 -17
  414. package/src/lib/services/generic.service.ts +0 -85
  415. package/src/lib/services/modal-focus-trap.service.ts +0 -65
  416. package/src/lib/services/popover-focus-trap.service.ts +0 -65
  417. package/src/lib/services/route/route.cache.service.ts +0 -17
  418. package/src/lib/services/route/route.provider.service.ts +0 -49
  419. package/src/lib/services/usuario.service.ts +0 -44
  420. package/src/lib/services/utils.service.ts +0 -216
  421. package/src/lib/services/web/api-url-provider.service.ts +0 -48
  422. package/src/lib/services/web/http.ativo.service.ts +0 -37
  423. package/src/lib/services/web/http.service.ts +0 -193
  424. package/src/lib/services/web/storage.service.ts +0 -206
  425. package/src/public-api.ts +0 -5
  426. package/tailwind.config.js +0 -27
  427. package/tsconfig.lib.json +0 -29
  428. package/tsconfig.lib.prod.json +0 -23
  429. package/tsconfig.spec.json +0 -27
  430. /package/{src/lib → themes}/components/carousel/carousel-image/carousel-image.component.scss +0 -0
  431. /package/{src/lib → themes}/components/carousel/carousel-item/carousel-item.component.scss +0 -0
  432. /package/{src/lib → themes}/components/carousel/carousel.component.scss +0 -0
  433. /package/{src/lib → themes}/components/content-block/content-block.component.scss +0 -0
  434. /package/{src/lib → themes}/components/default/default-list/default-list.component.scss +0 -0
  435. /package/{src/lib → themes}/components/default/default-list/header-list/header-list.component.scss +0 -0
  436. /package/{src/lib → themes}/components/default/default-pagination/default-pagination.component.scss +0 -0
  437. /package/{src/lib → themes}/components/default/default-table/default-table.component.scss +0 -0
  438. /package/{src/lib → themes}/components/default/default-table/th-filter/th-filter.component.scss +0 -0
  439. /package/{src/lib → themes}/components/default/default-view/default-view.component.scss +0 -0
  440. /package/{src/lib → themes}/components/default/default-view/header-view/header-view.component.scss +0 -0
  441. /package/{src/lib → themes}/components/default-page/default.page.scss +0 -0
  442. /package/{src/lib → themes}/components/drag-drop-file/drag-drop-overlay/drag-drop-overlay.component.scss +0 -0
  443. /package/{src/lib → themes}/components/drawer/default-drawer-end/default-drawer-end.component.scss +0 -0
  444. /package/{src/lib → themes}/components/drawer/drawer-group/drawer-group.component.scss +0 -0
  445. /package/{src/lib → themes}/components/drawer/drawer.component.scss +0 -0
  446. /package/{src/lib → themes}/components/filter/filter.component.scss +0 -0
  447. /package/{src/lib → themes}/components/http-responses-pages/forbidden-403/forbidden-403.component.scss +0 -0
  448. /package/{src/lib → themes}/components/image/image.component.scss +0 -0
  449. /package/{src/lib → themes}/components/info-popover/info-popover.component.scss +0 -0
  450. /package/{src/lib → themes}/components/inputs/input-bool/input-bool.component.scss +0 -0
  451. /package/{src/lib → themes}/components/inputs/input-cep/input-cep.component.scss +0 -0
  452. /package/{src/lib → themes}/components/inputs/input-color/input-color.component.scss +0 -0
  453. /package/{src/lib → themes}/components/inputs/input-cpf-cnpj/input-cpf-cnpj.component.scss +0 -0
  454. /package/{src/lib → themes}/components/inputs/input-date/input-date.component.scss +0 -0
  455. /package/{src/lib → themes}/components/inputs/input-decimal/input-decimal.component.scss +0 -0
  456. /package/{src/lib → themes}/components/inputs/input-file/download-button/download-button.component.scss +0 -0
  457. /package/{src/lib → themes}/components/inputs/input-file/input-file.component.scss +0 -0
  458. /package/{src/lib → themes}/components/inputs/input-icon/input-icon.component.scss +0 -0
  459. /package/{src/lib → themes}/components/inputs/input-select/input-select.component.scss +0 -0
  460. /package/{src/lib → themes}/components/inputs/input-string/input-string.component.scss +0 -0
  461. /package/{src/lib → themes}/components/inputs/input-telefone/input-telefone.component.scss +0 -0
  462. /package/{src/lib → themes}/components/inputs/input-textarea/input-textarea.component.scss +0 -0
  463. /package/{src/lib → themes}/components/inputs/inputs.scss +0 -0
  464. /package/{src/lib → themes}/components/loading/loading.component.scss +0 -0
  465. /package/{src/lib → themes}/components/login/login-admin/login-admin.component.scss +0 -0
  466. /package/{src/lib → themes}/components/login/login.component.scss +0 -0
  467. /package/{src/lib → themes}/components/main-content/main-content.component.scss +0 -0
  468. /package/{src/lib → themes}/components/popover/sion-popover/sion-popover.component.scss +0 -0
  469. /package/{src/lib → themes}/components/sion-card/sion-card.component.scss +0 -0
  470. /package/{src/lib → themes}/components/stepper/step/step.component.scss +0 -0
  471. /package/{src/lib → themes}/components/stepper/stepper.component.scss +0 -0
  472. /package/{src/lib → themes}/components/tabs/tab/tab.component.scss +0 -0
  473. /package/{src/lib → themes}/components/tabs/tabs/tabs.component.scss +0 -0
  474. /package/{src/lib → themes}/components/text-tooltip/text-tooltip.component.scss +0 -0
  475. /package/{src/lib → themes}/components/tooltip/tooltip.component.scss +0 -0
  476. /package/{src/lib → themes}/styles/components.scss +0 -0
  477. /package/{src/lib → themes}/styles/core.styles.scss +0 -0
  478. /package/{src/lib → themes}/styles/ionic/ion-action-sheet.scss +0 -0
  479. /package/{src/lib → themes}/styles/ionic/ion-alert.scss +0 -0
  480. /package/{src/lib → themes}/styles/ionic/ion-button.scss +0 -0
  481. /package/{src/lib → themes}/styles/ionic/ion-card.scss +0 -0
  482. /package/{src/lib → themes}/styles/ionic/ion-content.scss +0 -0
  483. /package/{src/lib → themes}/styles/ionic/ion-datetime.scss +0 -0
  484. /package/{src/lib → themes}/styles/ionic/ion-item.scss +0 -0
  485. /package/{src/lib → themes}/styles/ionic/ion-list.scss +0 -0
  486. /package/{src/lib → themes}/styles/ionic/ion-modal.scss +0 -0
  487. /package/{src/lib → themes}/styles/ionic/ion-popover.scss +0 -0
  488. /package/{src/lib → themes}/styles/ionic/ion-progress-bar.scss +0 -0
  489. /package/{src/lib → themes}/styles/ionic/ion-searchbar.scss +0 -0
  490. /package/{src/lib → themes}/styles/ionic/ion-toast.scss +0 -0
  491. /package/{src/lib → themes}/styles/ionic.scss +0 -0
  492. /package/{src/lib → themes}/styles/login-default.scss +0 -0
  493. /package/{src/lib → themes}/styles/mixins.scss +0 -0
  494. /package/{src/lib → themes}/styles/styles.scss +0 -0
  495. /package/{src/lib → themes}/styles/translucid.scss +0 -0
@@ -0,0 +1,243 @@
1
+ import { Component, computed, ElementRef, forwardRef, HostListener, model, ViewChild } from '@angular/core';
2
+ import { formatNumber } from '@angular/common';
3
+ import { InputCurrencyConfiguration, InputDecimalConfiguration, InputNumberConfiguration, InputPercentageConfiguration } from './input-decimal.configuration';
4
+ import { InputProviderFactory } from '../input-provider-factory';
5
+ import { CustomInput } from '../custom-input';
6
+ import { Timeout } from '../../../services/utils.service';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@ionic/angular";
9
+ import * as i2 from "@angular/common";
10
+ export class InputDecimalComponent extends CustomInput {
11
+ setFocus(event) {
12
+ if (this.input && event.target == this.inputContainer.nativeElement) {
13
+ this.input.nativeElement.focus();
14
+ this.input.nativeElement.setSelectionRange(this.valueString.length, this.valueString.length);
15
+ }
16
+ }
17
+ constructor(elementRef) {
18
+ super();
19
+ this.elementRef = elementRef;
20
+ this.configuration = model();
21
+ this.digitsInfo = computed(() => `1.${this.configuration().precision}-${this.configuration().precision}`);
22
+ this.divider = computed(() => Math.pow(10, this.configuration().precision));
23
+ this.value.set(0);
24
+ const selector = this.elementRef.nativeElement.tagName.toLowerCase().split('-').at(-1);
25
+ if (selector == "number" && !this.configuration()) {
26
+ this.configuration.set(new InputNumberConfiguration());
27
+ }
28
+ else if (selector == "decimal" && !this.configuration()) {
29
+ this.configuration.set(new InputDecimalConfiguration());
30
+ }
31
+ else if (selector == "currency" && !this.configuration()) {
32
+ this.configuration.set(new InputCurrencyConfiguration());
33
+ }
34
+ else if (selector == "percentage" && !this.configuration()) {
35
+ this.configuration.set(new InputPercentageConfiguration());
36
+ }
37
+ this.SetValueString();
38
+ }
39
+ writeValue(obj) {
40
+ this.value.set(obj);
41
+ this.SetValueString();
42
+ this.runValidation();
43
+ }
44
+ SetValue(obj) {
45
+ this.value.set(obj);
46
+ this.SetValueString();
47
+ this.runValidation();
48
+ this.propagateChange(obj);
49
+ }
50
+ SetValueString() {
51
+ this.valueString = formatNumber(this.value(), "pt-BR", this.digitsInfo());
52
+ }
53
+ onPaste(event) {
54
+ event.preventDefault();
55
+ let clipboardData = event.clipboardData || window['clipboardData'];
56
+ let pastedText = clipboardData.getData('text');
57
+ const s = pastedText.replaceAll('.', '').replaceAll(',', '.');
58
+ const n = Number(s);
59
+ if (Number(s) && isFinite(n)) {
60
+ this.SetValue(n);
61
+ }
62
+ event.preventDefault();
63
+ }
64
+ async onKeyDown(event) {
65
+ const value = this.input.nativeElement.value;
66
+ const selectionStart = this.input.nativeElement.selectionStart;
67
+ const selectionEnd = this.input.nativeElement.selectionEnd;
68
+ const atLeft = value.slice(0, selectionStart);
69
+ const atRight = value.slice(selectionEnd, value.length);
70
+ if (["-"].includes(event.key)) {
71
+ return await this.HandleNegative(event, selectionStart, selectionEnd, value, atLeft, atRight);
72
+ }
73
+ else if (lstNumbers.includes(event.key)) {
74
+ return await this.HandleNumber(event, selectionStart, selectionEnd, value, atLeft, atRight);
75
+ }
76
+ else if (lstEspecialCases.includes(event.key)) {
77
+ return await this.HandleEspecial(event, selectionStart, selectionEnd, value, atLeft, atRight);
78
+ }
79
+ else if (["A", "a"].includes(event.key) && event.ctrlKey) {
80
+ return;
81
+ }
82
+ else if (["C", "c"].includes(event.key) && event.ctrlKey) {
83
+ return;
84
+ }
85
+ else if (["V", "v"].includes(event.key) && event.ctrlKey) {
86
+ return;
87
+ }
88
+ else if (lstIgnoreNotPrevent.includes(event.key)) {
89
+ return;
90
+ }
91
+ else {
92
+ event.preventDefault();
93
+ }
94
+ }
95
+ async HandleNegative(event, selectionStart, selectionEnd, value, atLeft, atRight) {
96
+ event.preventDefault();
97
+ let focusEnd = (selectionStart == 0 && selectionEnd == this.valueString.length);
98
+ /** [ Remove decimalSeparator & thousandSeparator ] */
99
+ let f;
100
+ if (!atLeft.includes('-')) {
101
+ f = event.key + atLeft + atRight;
102
+ }
103
+ else {
104
+ f = (atLeft + atRight).replace('-', '');
105
+ }
106
+ if (f == "-") {
107
+ if (value.includes('-')) {
108
+ f = value.replace('-', '');
109
+ }
110
+ else {
111
+ f = `-${value}`;
112
+ }
113
+ }
114
+ const CurrentValue = this.SanitizeValue(f);
115
+ if (CurrentValue == this.value()) {
116
+ return;
117
+ }
118
+ //[ Handle Set Cursor Position]
119
+ this.SetValue(CurrentValue);
120
+ const newPos = selectionStart + 1 + this.valueString.split('.').length - value.split('.').length;
121
+ //Horrivel, mas nao tem uma alternativa boa, https://stackoverflow.com/questions/511088/use-javascript-to-place-cursor-at-end-of-text-in-text-input-element
122
+ await Timeout(0);
123
+ this.input.nativeElement.setSelectionRange(newPos, newPos);
124
+ if (focusEnd) {
125
+ this.input.nativeElement.setSelectionRange(this.valueString.length, this.valueString.length);
126
+ }
127
+ return;
128
+ }
129
+ async HandleNumber(event, selectionStart, selectionEnd, value, atLeft, atRight) {
130
+ event.preventDefault();
131
+ let focusEnd = (selectionStart == 0 && selectionEnd == this.valueString.length);
132
+ /** [ Remove decimalSeparator & thousandSeparator ] */
133
+ const f = atLeft + event.key + atRight;
134
+ const CurrentValue = this.SanitizeValue(f);
135
+ if (CurrentValue == this.value()) {
136
+ return;
137
+ }
138
+ if (CurrentValue > decimalMaxValue) {
139
+ return;
140
+ }
141
+ //[ Handle Set Cursor Position]
142
+ this.SetValue(CurrentValue);
143
+ const newPosition = selectionStart + 1 + this.valueString.split('.').length - value.split('.').length;
144
+ //Horrivel, mas nao sem uma alternativa boa, https://stackoverflow.com/questions/511088/use-javascript-to-place-cursor-at-end-of-text-in-text-input-element
145
+ await Timeout(0);
146
+ this.input.nativeElement.setSelectionRange(newPosition, newPosition);
147
+ if (focusEnd) {
148
+ this.input.nativeElement.setSelectionRange(this.valueString.length, this.valueString.length);
149
+ }
150
+ return;
151
+ }
152
+ SanitizeValue(f) {
153
+ var CurrentValue = Number(Sanitize(f)) / this.divider();
154
+ if (CurrentValue >= decimalMaxValue) {
155
+ return this.value();
156
+ }
157
+ return CurrentValue;
158
+ }
159
+ async HandleEspecial(event, selectionStart, selectionEnd, value, atLeft, atRight) {
160
+ event.preventDefault();
161
+ if (selectionStart == selectionEnd) {
162
+ if (event.key == "Backspace") {
163
+ if (selectionStart == selectionEnd && selectionStart == 0) {
164
+ return;
165
+ }
166
+ const previousChar = atLeft.at(-1);
167
+ const isNumber = lstNumbers.includes(previousChar);
168
+ const f = atLeft.slice(0, atLeft.length - (isNumber ? 1 : 2)) + atRight;
169
+ const CurrentValue = this.SanitizeValue(f);
170
+ //[ Handle Set Cursor Position]
171
+ this.SetValue(CurrentValue);
172
+ await Timeout(0);
173
+ let pos = isNumber ? selectionStart - 1 : selectionStart - 2;
174
+ if (selectionEnd == this.valueString.length) {
175
+ pos++;
176
+ }
177
+ this.input.nativeElement.setSelectionRange(pos, pos);
178
+ return;
179
+ }
180
+ else if (event.key == "Delete") {
181
+ const nextChar = atRight[0];
182
+ const isNumber = lstNumbers.includes(nextChar);
183
+ const f = atLeft + atRight.slice(isNumber ? 1 : 2);
184
+ const CurrentValue = this.SanitizeValue(f);
185
+ //[ Handle Set Cursor Position]
186
+ this.SetValue(CurrentValue);
187
+ var pos = selectionStart;
188
+ if (pos <= -1) {
189
+ pos = 0;
190
+ }
191
+ if (CurrentValue < 1) {
192
+ pos++;
193
+ }
194
+ if (!isNumber) {
195
+ pos++;
196
+ }
197
+ await Timeout(0);
198
+ this.input.nativeElement.setSelectionRange(pos, pos);
199
+ return;
200
+ }
201
+ }
202
+ else {
203
+ const f = atLeft + atRight;
204
+ const CurrentValue = this.SanitizeValue(f);
205
+ this.SetValue(CurrentValue);
206
+ await Timeout(0);
207
+ this.input.nativeElement.setSelectionRange(this.valueString.length, this.valueString.length);
208
+ return;
209
+ }
210
+ }
211
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: InputDecimalComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
212
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.14", type: InputDecimalComponent, selector: "input-decimal, input-number, input-currency, input-percentage", inputs: { configuration: { classPropertyName: "configuration", publicName: "configuration", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { configuration: "configurationChange" }, host: { listeners: { "paste": "onPaste($event)" } }, providers: [
213
+ ...InputProviderFactory.GetProviders(InputDecimalComponent),
214
+ { provide: CustomInput, useExisting: forwardRef(() => InputDecimalComponent) },
215
+ ], viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }, { propertyName: "inputContainer", first: true, predicate: ["inputContainer"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div \r\n #inputContainer\r\n class=\"input-container\" \r\n (click)=\"setFocus($event)\"\r\n [class.required]=\"required()\" \r\n [class.submitted]=\"submitted()\" \r\n [class.invalid]=\"invalid\" \r\n [class.disabled]=\"disabled() || loading()\"\r\n [class.loading]=\"loading()\"\r\n>\r\n <div class=\"input-label\"> \r\n <span class=\"truncate\">\r\n {{label()}} \r\n </span>\r\n </div>\r\n\r\n <div class=\"decimal-input-container text-dark\">\r\n <span *ngIf=\"configuration().prefix\" slot=\"start\">{{configuration().prefix}}</span>\r\n <input #input\r\n inputmode=\"numeric\"\r\n [value]=\"valueString\" \r\n (keydown)=\"onKeyDown($event)\"\r\n [disabled]=\"disabled() || loading()\"\r\n (blur)=\"blur.emit($event)\"\r\n />\r\n <span *ngIf=\"configuration().sufix\" slot=\"end\" >{{configuration().sufix}}</span>\r\n </div>\r\n <div class=\"loading-container\" [class.loading]=\"loading()\">\r\n <ion-spinner></ion-spinner>\r\n </div>\r\n</div>", styles: ["input{text-align:right;width:100%}.decimal-input-container{display:flex;width:100%;align-items:center;justify-content:center;gap:.25rem}.decimal-input-container span{flex-shrink:0}\n", "@property --input-color{syntax: \"<color>\"; initial-value: transparent; inherits: false;}.input-container{position:relative;--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));cursor:text;border-radius:.75rem;padding:.25rem .75rem;--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);transition:--input-color .2s ease-in-out,box-shadow .2s ease-in-out,opacity .2s ease-in-out,filter .2s ease-in-out;--color: var(--ion-color-dark);--input-color: var(--input-background, var(--ion-color-step-250));--shadow: 0 3px 4px -1px rgb(0 0 0 / .1);--inset-shadow: var(--input-color) 0px 1.75px 2px 0px inset;--focused-shadow: 0 0 1px 2px color-mix(in srgb, var(--ion-color-medium) 35%, transparent);box-shadow:var(--inset-shadow),var(--shadow);will-change:box-shadow,filter opacity;display:flex;flex-direction:column;justify-content:center;align-items:flex-start;background:radial-gradient(ellipse at 0px top,hsl(from var(--input-color) h s l/.5),hsl(from var(--input-color) h s l/.4)),hsl(from var(--ion-color-light) h s l/.8)}.input-container:hover{--tw-brightness: brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.input-container:focus-within,.input-container:focus,.input-container.manual-focus{box-shadow:var(--inset-shadow),var(--shadow),var(--focused-shadow);--tw-brightness: brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.input-container .input-label{pointer-events:none;display:flex;height:1rem;width:100%;min-width:0px;max-width:100%;align-items:center;justify-content:flex-start;gap:.25rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.75rem;line-height:1rem;color:var(--color)}.input-container input,.input-container textarea{height:1.5rem;width:100%;border-radius:.375rem;background-color:transparent;font-size:.875rem;line-height:1.25rem;color:var(--ion-color-dark);outline:2px solid transparent;outline-offset:2px}.input-container.loading{cursor:wait!important}.input-container.required .input-label:after{content:\"*\";color:var(--ion-color-danger);vertical-align:bottom}.input-container.submitted.invalid{--input-color: color-mix(in srgb, var(--ion-color-danger) 50%, transparent)}.input-container.disabled{cursor:not-allowed;opacity:.5;--tw-brightness: brightness(1);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.input-container.disabled *{pointer-events:none}.loading-container{position:absolute;pointer-events:none;width:100%;height:100%;top:0;left:0;display:flex;justify-content:end;align-items:center;padding-right:.5rem;will-change:opacity;transition:opacity .2s ease-in-out;overflow:hidden;opacity:0;z-index:10}.loading-container ion-spinner{will-change:auto;transition:transform .2s ease-in-out;transform:translateY(-100%)}.loading-container.loading{opacity:1}.loading-container.loading ion-spinner{transform:translateY(0)}ion-modal::part(content){border-radius:.75rem;border:1px solid var(--ion-color-step-250)}\n"], dependencies: [{ kind: "component", type: i1.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
216
+ }
217
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: InputDecimalComponent, decorators: [{
218
+ type: Component,
219
+ args: [{ selector: 'input-decimal, input-number, input-currency, input-percentage', providers: [
220
+ ...InputProviderFactory.GetProviders(InputDecimalComponent),
221
+ { provide: CustomInput, useExisting: forwardRef(() => InputDecimalComponent) },
222
+ ], template: "<div \r\n #inputContainer\r\n class=\"input-container\" \r\n (click)=\"setFocus($event)\"\r\n [class.required]=\"required()\" \r\n [class.submitted]=\"submitted()\" \r\n [class.invalid]=\"invalid\" \r\n [class.disabled]=\"disabled() || loading()\"\r\n [class.loading]=\"loading()\"\r\n>\r\n <div class=\"input-label\"> \r\n <span class=\"truncate\">\r\n {{label()}} \r\n </span>\r\n </div>\r\n\r\n <div class=\"decimal-input-container text-dark\">\r\n <span *ngIf=\"configuration().prefix\" slot=\"start\">{{configuration().prefix}}</span>\r\n <input #input\r\n inputmode=\"numeric\"\r\n [value]=\"valueString\" \r\n (keydown)=\"onKeyDown($event)\"\r\n [disabled]=\"disabled() || loading()\"\r\n (blur)=\"blur.emit($event)\"\r\n />\r\n <span *ngIf=\"configuration().sufix\" slot=\"end\" >{{configuration().sufix}}</span>\r\n </div>\r\n <div class=\"loading-container\" [class.loading]=\"loading()\">\r\n <ion-spinner></ion-spinner>\r\n </div>\r\n</div>", styles: ["input{text-align:right;width:100%}.decimal-input-container{display:flex;width:100%;align-items:center;justify-content:center;gap:.25rem}.decimal-input-container span{flex-shrink:0}\n", "@property --input-color{syntax: \"<color>\"; initial-value: transparent; inherits: false;}.input-container{position:relative;--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));cursor:text;border-radius:.75rem;padding:.25rem .75rem;--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);transition:--input-color .2s ease-in-out,box-shadow .2s ease-in-out,opacity .2s ease-in-out,filter .2s ease-in-out;--color: var(--ion-color-dark);--input-color: var(--input-background, var(--ion-color-step-250));--shadow: 0 3px 4px -1px rgb(0 0 0 / .1);--inset-shadow: var(--input-color) 0px 1.75px 2px 0px inset;--focused-shadow: 0 0 1px 2px color-mix(in srgb, var(--ion-color-medium) 35%, transparent);box-shadow:var(--inset-shadow),var(--shadow);will-change:box-shadow,filter opacity;display:flex;flex-direction:column;justify-content:center;align-items:flex-start;background:radial-gradient(ellipse at 0px top,hsl(from var(--input-color) h s l/.5),hsl(from var(--input-color) h s l/.4)),hsl(from var(--ion-color-light) h s l/.8)}.input-container:hover{--tw-brightness: brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.input-container:focus-within,.input-container:focus,.input-container.manual-focus{box-shadow:var(--inset-shadow),var(--shadow),var(--focused-shadow);--tw-brightness: brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.input-container .input-label{pointer-events:none;display:flex;height:1rem;width:100%;min-width:0px;max-width:100%;align-items:center;justify-content:flex-start;gap:.25rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.75rem;line-height:1rem;color:var(--color)}.input-container input,.input-container textarea{height:1.5rem;width:100%;border-radius:.375rem;background-color:transparent;font-size:.875rem;line-height:1.25rem;color:var(--ion-color-dark);outline:2px solid transparent;outline-offset:2px}.input-container.loading{cursor:wait!important}.input-container.required .input-label:after{content:\"*\";color:var(--ion-color-danger);vertical-align:bottom}.input-container.submitted.invalid{--input-color: color-mix(in srgb, var(--ion-color-danger) 50%, transparent)}.input-container.disabled{cursor:not-allowed;opacity:.5;--tw-brightness: brightness(1);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.input-container.disabled *{pointer-events:none}.loading-container{position:absolute;pointer-events:none;width:100%;height:100%;top:0;left:0;display:flex;justify-content:end;align-items:center;padding-right:.5rem;will-change:opacity;transition:opacity .2s ease-in-out;overflow:hidden;opacity:0;z-index:10}.loading-container ion-spinner{will-change:auto;transition:transform .2s ease-in-out;transform:translateY(-100%)}.loading-container.loading{opacity:1}.loading-container.loading ion-spinner{transform:translateY(0)}ion-modal::part(content){border-radius:.75rem;border:1px solid var(--ion-color-step-250)}\n"] }]
223
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { input: [{
224
+ type: ViewChild,
225
+ args: ['input']
226
+ }], inputContainer: [{
227
+ type: ViewChild,
228
+ args: ['inputContainer']
229
+ }], onPaste: [{
230
+ type: HostListener,
231
+ args: ['paste', ['$event']]
232
+ }] } });
233
+ const decimalMaxValue = 9_000_000_000_000.00;
234
+ const decimalSeparator = ",";
235
+ const thousandSeparator = ".";
236
+ const Sanitize = ((v) => {
237
+ return v.replaceAll(thousandSeparator, '')
238
+ .replace(decimalSeparator, '');
239
+ });
240
+ const lstNumbers = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"];
241
+ const lstIgnoreNotPrevent = ["Tab", "CapsLock", "Shift", "Control", "Alt", "ArrowRight", "ArrowUp", "ArrowDown", "ArrowLeft"];
242
+ const lstEspecialCases = ["Backspace", "Delete"];
243
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtZGVjaW1hbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0LWRlY2ltYWwvaW5wdXQtZGVjaW1hbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0LWRlY2ltYWwvaW5wdXQtZGVjaW1hbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXVCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqSSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLDBCQUEwQixFQUFFLHlCQUF5QixFQUFFLHdCQUF3QixFQUFFLDRCQUE0QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDOUosT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDakUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7OztBQVcxRCxNQUFNLE9BQU8scUJBQXNCLFNBQVEsV0FBbUI7SUFRbkQsUUFBUSxDQUFDLEtBQXdCO1FBQ3hDLElBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDbkUsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFN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Q0FBQyxDQUFDO0FBQy9ILE1BQU0sZ0JBQWdCLEdBQU0sQ0FBRSxXQUFXLEVBQUUsUUFBUSxDQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGNvbXB1dGVkLCBFbGVtZW50UmVmLCBmb3J3YXJkUmVmLCBIb3N0TGlzdGVuZXIsIG1vZGVsLCBNb2RlbFNpZ25hbCwgU2lnbmFsLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgZm9ybWF0TnVtYmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgSW5wdXRDdXJyZW5jeUNvbmZpZ3VyYXRpb24sIElucHV0RGVjaW1hbENvbmZpZ3VyYXRpb24sIElucHV0TnVtYmVyQ29uZmlndXJhdGlvbiwgSW5wdXRQZXJjZW50YWdlQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vaW5wdXQtZGVjaW1hbC5jb25maWd1cmF0aW9uJztcclxuaW1wb3J0IHsgSW5wdXRQcm92aWRlckZhY3RvcnkgfSBmcm9tICcuLi9pbnB1dC1wcm92aWRlci1mYWN0b3J5JztcclxuaW1wb3J0IHsgQ3VzdG9tSW5wdXQgfSBmcm9tICcuLi9jdXN0b20taW5wdXQnO1xyXG5pbXBvcnQgeyBUaW1lb3V0IH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdXRpbHMuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2lucHV0LWRlY2ltYWwsIGlucHV0LW51bWJlciwgaW5wdXQtY3VycmVuY3ksIGlucHV0LXBlcmNlbnRhZ2UnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9pbnB1dC1kZWNpbWFsLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9pbnB1dC1kZWNpbWFsLmNvbXBvbmVudC5zY3NzJywgJy4uL2lucHV0cy5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICAuLi5JbnB1dFByb3ZpZGVyRmFjdG9yeS5HZXRQcm92aWRlcnMoSW5wdXREZWNpbWFsQ29tcG9uZW50KSxcclxuICAgIHsgcHJvdmlkZTogQ3VzdG9tSW5wdXQsIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IElucHV0RGVjaW1hbENvbXBvbmVudCkgfSxcclxuICBdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSW5wdXREZWNpbWFsQ29tcG9uZW50IGV4dGVuZHMgQ3VzdG9tSW5wdXQ8bnVtYmVyPiB7XHJcblxyXG4gIGNvbmZpZ3VyYXRpb246IE1vZGVsU2lnbmFsPElucHV0RGVjaW1hbENvbmZpZ3VyYXRpb24+ID0gbW9kZWw8SW5wdXREZWNpbWFsQ29uZmlndXJhdGlvbj4oKTtcclxuICBkaWdpdHNJbmZvOiBTaWduYWw8c3RyaW5nPiA9IGNvbXB1dGVkKCgpID0+IGAxLiR7dGhpcy5jb25maWd1cmF0aW9uKCkucHJlY2lzaW9ufS0ke3RoaXMuY29uZmlndXJhdGlvbigpLnByZWNpc2lvbn1gKTtcclxuICBkaXZpZGVyOiBTaWduYWw8bnVtYmVyPiA9IGNvbXB1dGVkKCgpID0+IE1hdGgucG93KDEwLCB0aGlzLmNvbmZpZ3VyYXRpb24oKS5wcmVjaXNpb24pKTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnaW5wdXQnKSBpbnB1dDogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcclxuICBAVmlld0NoaWxkKCdpbnB1dENvbnRhaW5lcicpIGlucHV0Q29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcclxuICBvdmVycmlkZSBzZXRGb2N1cyhldmVudDogTW91c2VFdmVudCB8IG51bGwpOiB2b2lkIHtcclxuICAgIGlmKHRoaXMuaW5wdXQgJiYgZXZlbnQudGFyZ2V0ID09IHRoaXMuaW5wdXRDb250YWluZXIubmF0aXZlRWxlbWVudCkgeyBcclxuICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7IFxyXG4gICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UodGhpcy52YWx1ZVN0cmluZy5sZW5ndGgsIHRoaXMudmFsdWVTdHJpbmcubGVuZ3RoKTsgXHJcbiAgICB9ICAgICAgXHJcbiAgfVxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgb3ZlcnJpZGUgZWxlbWVudFJlZjogRWxlbWVudFJlZlxyXG4gICkgeyBcclxuICAgIHN1cGVyKCk7IFxyXG4gICAgdGhpcy52YWx1ZS5zZXQoMCk7XHJcbiAgICBjb25zdCBzZWxlY3Rvcjogc3RyaW5nID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpLnNwbGl0KCctJykuYXQoLTEpO1xyXG4gICAgaWYoc2VsZWN0b3IgPT0gXCJudW1iZXJcIiAgICAgJiYgIXRoaXMuY29uZmlndXJhdGlvbigpKXsgdGhpcy5jb25maWd1cmF0aW9uLnNldChuZXcgSW5wdXROdW1iZXJDb25maWd1cmF0aW9uKCkpOyAgICAgfSBlbHNlXHJcbiAgICBpZihzZWxlY3RvciA9PSBcImRlY2ltYWxcIiAgICAmJiAhdGhpcy5jb25maWd1cmF0aW9uKCkpeyB0aGlzLmNvbmZpZ3VyYXRpb24uc2V0KG5ldyBJbnB1dERlY2ltYWxDb25maWd1cmF0aW9uKCkpOyAgICB9IGVsc2VcclxuICAgIGlmKHNlbGVjdG9yID09IFwiY3VycmVuY3lcIiAgICYmICF0aGlzLmNvbmZpZ3VyYXRpb24oKSl7IHRoaXMuY29uZmlndXJhdGlvbi5zZXQobmV3IElucHV0Q3VycmVuY3lDb25maWd1cmF0aW9uKCkpOyAgIH0gZWxzZVxyXG4gICAgaWYoc2VsZWN0b3IgPT0gXCJwZXJjZW50YWdlXCIgJiYgIXRoaXMuY29uZmlndXJhdGlvbigpKXsgdGhpcy5jb25maWd1cmF0aW9uLnNldChuZXcgSW5wdXRQZXJjZW50YWdlQ29uZmlndXJhdGlvbigpKTsgfVxyXG4gICAgdGhpcy5TZXRWYWx1ZVN0cmluZygpOyBcclxuICB9XHJcbiAgXHJcbiAgb3ZlcnJpZGUgd3JpdGVWYWx1ZShvYmo6IG51bWJlcik6IHZvaWQgfCBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMudmFsdWUuc2V0KG9iaik7XHJcbiAgICB0aGlzLlNldFZhbHVlU3RyaW5nKCk7XHJcbiAgICB0aGlzLnJ1blZhbGlkYXRpb24oKTtcclxuICB9XHJcbiAgb3ZlcnJpZGUgU2V0VmFsdWUob2JqOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMudmFsdWUuc2V0KG9iaik7XHJcbiAgICB0aGlzLlNldFZhbHVlU3RyaW5nKCk7XHJcbiAgICB0aGlzLnJ1blZhbGlkYXRpb24oKTtcclxuICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKG9iaik7IFxyXG4gIH1cclxuICBTZXRWYWx1ZVN0cmluZygpOiB2b2lkIHtcclxuICAgIHRoaXMudmFsdWVTdHJpbmcgPSBmb3JtYXROdW1iZXIodGhpcy52YWx1ZSgpLCBcInB0LUJSXCIsIHRoaXMuZGlnaXRzSW5mbygpKTtcclxuICB9XHJcbiAgXHJcbiAgdmFsdWVTdHJpbmc6IHN0cmluZztcclxuXHJcbiAgQEhvc3RMaXN0ZW5lcigncGFzdGUnLCBbJyRldmVudCddKVxyXG4gIG9uUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgXHJcbiAgICBsZXQgY2xpcGJvYXJkRGF0YSA9IGV2ZW50LmNsaXBib2FyZERhdGEgfHwgd2luZG93WydjbGlwYm9hcmREYXRhJ107XHJcbiAgICBsZXQgcGFzdGVkVGV4dCAgICA9IGNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dCcpO1xyXG5cclxuICAgIGNvbnN0IHMgPSBwYXN0ZWRUZXh0LnJlcGxhY2VBbGwoJy4nLCAnJykucmVwbGFjZUFsbCgnLCcsICcuJyk7XHJcbiAgICBjb25zdCBuID0gTnVtYmVyKHMpO1xyXG5cclxuICAgIGlmKE51bWJlcihzKSAmJiBpc0Zpbml0ZShuKSl7IFxyXG4gICAgICB0aGlzLlNldFZhbHVlKG4pO1xyXG4gICAgfVxyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IFByb21pc2U8dm9pZD57XHJcbiAgICBjb25zdCB2YWx1ZTogc3RyaW5nID0gdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlO1xyXG5cclxuICAgIGNvbnN0IHNlbGVjdGlvblN0YXJ0OiBudW1iZXIgPSB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICBjb25zdCBzZWxlY3Rpb25FbmQgIDogbnVtYmVyID0gdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdGlvbkVuZDtcclxuXHJcbiAgICBjb25zdCBhdExlZnQgID0gdmFsdWUuc2xpY2UoMCwgc2VsZWN0aW9uU3RhcnQpOyBcclxuICAgIGNvbnN0IGF0UmlnaHQgPSB2YWx1ZS5zbGljZShzZWxlY3Rpb25FbmQsIHZhbHVlLmxlbmd0aCk7IFxyXG4gICAgaWYoW1wiLVwiXS5pbmNsdWRlcyhldmVudC5rZXkpKXsgXHJcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLkhhbmRsZU5lZ2F0aXZlKGV2ZW50LCBzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kLCB2YWx1ZSwgYXRMZWZ0LCBhdFJpZ2h0KTtcclxuICAgIH1lbHNlXHJcbiAgICBpZihsc3ROdW1iZXJzLmluY2x1ZGVzKGV2ZW50LmtleSkpeyBcclxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuSGFuZGxlTnVtYmVyKGV2ZW50LCBzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kLCB2YWx1ZSwgYXRMZWZ0LCBhdFJpZ2h0KTsgXHJcbiAgICB9ZWxzZVxyXG4gICAgaWYobHN0RXNwZWNpYWxDYXNlcy5pbmNsdWRlcyhldmVudC5rZXkpKXsgXHJcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLkhhbmRsZUVzcGVjaWFsKGV2ZW50LCBzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kLCB2YWx1ZSwgYXRMZWZ0LCBhdFJpZ2h0KTsgXHJcbiAgICB9ZWxzZVxyXG4gICAgaWYoW1wiQVwiLCBcImFcIl0uaW5jbHVkZXMoZXZlbnQua2V5KSAmJiBldmVudC5jdHJsS2V5KXsgXHJcbiAgICAgIHJldHVybjsgXHJcbiAgICB9ZWxzZVxyXG4gICAgaWYoW1wiQ1wiLCBcImNcIl0uaW5jbHVkZXMoZXZlbnQua2V5KSAmJiBldmVudC5jdHJsS2V5KXsgXHJcbiAgICAgIHJldHVybjsgXHJcbiAgICB9ZWxzZVxyXG4gICAgaWYoW1wiVlwiLCBcInZcIl0uaW5jbHVkZXMoZXZlbnQua2V5KSAmJiBldmVudC5jdHJsS2V5KXsgXHJcbiAgICAgIHJldHVybjsgXHJcbiAgICB9ZWxzZVxyXG4gICAgaWYobHN0SWdub3JlTm90UHJldmVudC5pbmNsdWRlcyhldmVudC5rZXkpKXsgXHJcbiAgICAgIHJldHVybjsgXHJcbiAgICB9ZWxzZXtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIEhhbmRsZU5lZ2F0aXZlKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBzZWxlY3Rpb25TdGFydDogbnVtYmVyLCBzZWxlY3Rpb25FbmQ6IG51bWJlciwgdmFsdWU6IHN0cmluZywgYXRMZWZ0OiBzdHJpbmcsIGF0UmlnaHQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD57XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIGxldCBmb2N1c0VuZCA9IChzZWxlY3Rpb25TdGFydCA9PSAwICYmIHNlbGVjdGlvbkVuZCA9PSB0aGlzLnZhbHVlU3RyaW5nLmxlbmd0aCk7XHJcbiAgICAvKiogWyBSZW1vdmUgZGVjaW1hbFNlcGFyYXRvciAmIHRob3VzYW5kU2VwYXJhdG9yIF0gKi9cclxuICAgIGxldCBmO1xyXG4gICAgaWYoIWF0TGVmdC5pbmNsdWRlcygnLScpKXtcclxuICAgICAgZiA9IGV2ZW50LmtleSArIGF0TGVmdCArIGF0UmlnaHQ7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgZiA9IChhdExlZnQgKyBhdFJpZ2h0KS5yZXBsYWNlKCctJywgJycpXHJcbiAgICB9XHJcblxyXG4gICAgaWYoZiA9PSBcIi1cIil7IFxyXG4gICAgICBpZih2YWx1ZS5pbmNsdWRlcygnLScpKXtcclxuICAgICAgICBmID0gdmFsdWUucmVwbGFjZSgnLScsICcnKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNle1xyXG4gICAgICAgIGYgPSBgLSR7dmFsdWV9YDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IEN1cnJlbnRWYWx1ZTogbnVtYmVyID0gdGhpcy5TYW5pdGl6ZVZhbHVlKGYpO1xyXG4gICAgaWYoQ3VycmVudFZhbHVlID09IHRoaXMudmFsdWUoKSl7IHJldHVybjsgfVxyXG4gICAgXHJcbiAgICAvL1sgSGFuZGxlIFNldCBDdXJzb3IgUG9zaXRpb25dXHJcbiAgICB0aGlzLlNldFZhbHVlKEN1cnJlbnRWYWx1ZSk7XHJcbiAgICBjb25zdCBuZXdQb3MgPSBzZWxlY3Rpb25TdGFydCArIDEgKyB0aGlzLnZhbHVlU3RyaW5nLnNwbGl0KCcuJykubGVuZ3RoIC0gdmFsdWUuc3BsaXQoJy4nKS5sZW5ndGg7XHJcbiAgICBcclxuICAgIC8vSG9ycml2ZWwsIG1hcyBuYW8gdGVtIHVtYSBhbHRlcm5hdGl2YSBib2EsIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzUxMTA4OC91c2UtamF2YXNjcmlwdC10by1wbGFjZS1jdXJzb3ItYXQtZW5kLW9mLXRleHQtaW4tdGV4dC1pbnB1dC1lbGVtZW50XHJcbiAgICBhd2FpdCBUaW1lb3V0KDApO1xyXG4gICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnNldFNlbGVjdGlvblJhbmdlKG5ld1BvcywgbmV3UG9zKTsgXHJcbiAgICBpZihmb2N1c0VuZCl7XHJcbiAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5zZXRTZWxlY3Rpb25SYW5nZSh0aGlzLnZhbHVlU3RyaW5nLmxlbmd0aCwgdGhpcy52YWx1ZVN0cmluZy5sZW5ndGgpOyBcclxuICAgIH1cclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGFzeW5jIEhhbmRsZU51bWJlcihldmVudDogS2V5Ym9hcmRFdmVudCwgc2VsZWN0aW9uU3RhcnQ6IG51bWJlciwgc2VsZWN0aW9uRW5kOiBudW1iZXIsIHZhbHVlOiBzdHJpbmcsIGF0TGVmdDogc3RyaW5nLCBhdFJpZ2h0OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBcclxuICAgIGxldCBmb2N1c0VuZCA9IChzZWxlY3Rpb25TdGFydCA9PSAwICYmIHNlbGVjdGlvbkVuZCA9PSB0aGlzLnZhbHVlU3RyaW5nLmxlbmd0aCk7XHJcbiAgICAvKiogWyBSZW1vdmUgZGVjaW1hbFNlcGFyYXRvciAmIHRob3VzYW5kU2VwYXJhdG9yIF0gKi9cclxuICAgIGNvbnN0IGYgPSBhdExlZnQgKyBldmVudC5rZXkgKyBhdFJpZ2h0O1xyXG4gICAgY29uc3QgQ3VycmVudFZhbHVlOiBudW1iZXIgPSB0aGlzLlNhbml0aXplVmFsdWUoZik7XHJcbiAgICBpZihDdXJyZW50VmFsdWUgPT0gdGhpcy52YWx1ZSgpKXsgcmV0dXJuOyB9XHJcbiAgICBpZihDdXJyZW50VmFsdWUgPiBkZWNpbWFsTWF4VmFsdWUpeyByZXR1cm47IH1cclxuICAgIFxyXG4gICAgLy9bIEhhbmRsZSBTZXQgQ3Vyc29yIFBvc2l0aW9uXVxyXG4gICAgdGhpcy5TZXRWYWx1ZShDdXJyZW50VmFsdWUpO1xyXG4gICAgY29uc3QgbmV3UG9zaXRpb24gPSBzZWxlY3Rpb25TdGFydCArIDEgKyB0aGlzLnZhbHVlU3RyaW5nLnNwbGl0KCcuJykubGVuZ3RoIC0gdmFsdWUuc3BsaXQoJy4nKS5sZW5ndGg7XHJcbiAgICBcclxuICAgIC8vSG9ycml2ZWwsIG1hcyBuYW8gc2VtIHVtYSBhbHRlcm5hdGl2YSBib2EsIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzUxMTA4OC91c2UtamF2YXNjcmlwdC10by1wbGFjZS1jdXJzb3ItYXQtZW5kLW9mLXRleHQtaW4tdGV4dC1pbnB1dC1lbGVtZW50XHJcbiAgICBhd2FpdCBUaW1lb3V0KDApO1xyXG4gICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnNldFNlbGVjdGlvblJhbmdlKG5ld1Bvc2l0aW9uLCBuZXdQb3NpdGlvbik7IFxyXG4gICAgaWYoZm9jdXNFbmQpe1xyXG4gICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UodGhpcy52YWx1ZVN0cmluZy5sZW5ndGgsIHRoaXMudmFsdWVTdHJpbmcubGVuZ3RoKTsgXHJcbiAgICB9XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBTYW5pdGl6ZVZhbHVlKGY6IHN0cmluZyk6IG51bWJlcntcclxuICAgIHZhciBDdXJyZW50VmFsdWU6IG51bWJlciA9IE51bWJlcihTYW5pdGl6ZShmKSkgLyB0aGlzLmRpdmlkZXIoKTtcclxuICAgIGlmKEN1cnJlbnRWYWx1ZSA+PSBkZWNpbWFsTWF4VmFsdWUpeyBcclxuICAgICAgcmV0dXJuIHRoaXMudmFsdWUoKTsgXHJcbiAgICB9XHJcbiAgICByZXR1cm4gQ3VycmVudFZhbHVlO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgSGFuZGxlRXNwZWNpYWwoZXZlbnQ6IEtleWJvYXJkRXZlbnQsIHNlbGVjdGlvblN0YXJ0OiBudW1iZXIsIHNlbGVjdGlvbkVuZDogbnVtYmVyLCB2YWx1ZTogc3RyaW5nLCBhdExlZnQ6IHN0cmluZywgYXRSaWdodDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgaWYoc2VsZWN0aW9uU3RhcnQgPT0gc2VsZWN0aW9uRW5kKXtcclxuICAgICAgaWYoZXZlbnQua2V5ID09IFwiQmFja3NwYWNlXCIpe1xyXG4gICAgICAgIGlmKHNlbGVjdGlvblN0YXJ0ID09ICBzZWxlY3Rpb25FbmQgJiYgc2VsZWN0aW9uU3RhcnQgPT0gMCl7IFxyXG4gICAgICAgICAgcmV0dXJuOyBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHByZXZpb3VzQ2hhcjogc3RyaW5nID0gYXRMZWZ0LmF0KC0xKTtcclxuICAgICAgICBjb25zdCBpc051bWJlciA9IGxzdE51bWJlcnMuaW5jbHVkZXMocHJldmlvdXNDaGFyKTtcclxuICAgICAgICBjb25zdCBmID0gYXRMZWZ0LnNsaWNlKDAsIGF0TGVmdC5sZW5ndGggLSAoaXNOdW1iZXIgPyAxIDogMikpICsgYXRSaWdodDtcclxuICAgICAgICBjb25zdCBDdXJyZW50VmFsdWUgPSB0aGlzLlNhbml0aXplVmFsdWUoZik7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy9bIEhhbmRsZSBTZXQgQ3Vyc29yIFBvc2l0aW9uXVxyXG4gICAgICAgIHRoaXMuU2V0VmFsdWUoQ3VycmVudFZhbHVlKTtcclxuICAgICAgICBhd2FpdCBUaW1lb3V0KDApO1xyXG4gICAgICAgIGxldCBwb3MgPSBpc051bWJlciA/IHNlbGVjdGlvblN0YXJ0IC0gMSA6IHNlbGVjdGlvblN0YXJ0IC0gMjtcclxuXHJcbiAgICAgICAgaWYgKHNlbGVjdGlvbkVuZCA9PSB0aGlzLnZhbHVlU3RyaW5nLmxlbmd0aCkge1xyXG4gICAgICAgICAgcG9zKys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5zZXRTZWxlY3Rpb25SYW5nZShwb3MsIHBvcyk7IFxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfWVsc2VcclxuICAgICAgaWYoZXZlbnQua2V5ID09IFwiRGVsZXRlXCIpe1xyXG4gICAgICAgIGNvbnN0IG5leHRDaGFyOiBzdHJpbmcgPSAgYXRSaWdodFswXTtcclxuICAgICAgICBjb25zdCBpc051bWJlciA9IGxzdE51bWJlcnMuaW5jbHVkZXMobmV4dENoYXIpO1xyXG4gICAgICAgIGNvbnN0IGYgPSBhdExlZnQgKyBhdFJpZ2h0LnNsaWNlKGlzTnVtYmVyID8gMSA6IDIpO1xyXG4gICAgICAgIGNvbnN0IEN1cnJlbnRWYWx1ZSA9ICB0aGlzLlNhbml0aXplVmFsdWUoZik7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy9bIEhhbmRsZSBTZXQgQ3Vyc29yIFBvc2l0aW9uXVxyXG4gICAgICAgIHRoaXMuU2V0VmFsdWUoQ3VycmVudFZhbHVlKTtcclxuICAgICAgICB2YXIgcG9zOiBudW1iZXIgPSBzZWxlY3Rpb25TdGFydDtcclxuICAgICAgICBpZihwb3MgPD0gLTEpeyBwb3MgPSAwOyB9XHJcbiAgICAgICAgaWYoQ3VycmVudFZhbHVlIDwgMSl7XHJcbiAgICAgICAgICBwb3MrKztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoIWlzTnVtYmVyKXtcclxuICAgICAgICAgIHBvcysrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXdhaXQgVGltZW91dCgwKTtcclxuICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UocG9zLCBwb3MpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfWVsc2V7XHJcbiAgICAgIGNvbnN0IGYgPSBhdExlZnQgKyBhdFJpZ2h0O1xyXG4gICAgICBjb25zdCBDdXJyZW50VmFsdWUgPSB0aGlzLlNhbml0aXplVmFsdWUoZik7XHJcbiAgICAgIHRoaXMuU2V0VmFsdWUoQ3VycmVudFZhbHVlKTtcclxuICAgICAgXHJcbiAgICAgIGF3YWl0IFRpbWVvdXQoMCk7XHJcbiAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5zZXRTZWxlY3Rpb25SYW5nZSh0aGlzLnZhbHVlU3RyaW5nLmxlbmd0aCwgdGhpcy52YWx1ZVN0cmluZy5sZW5ndGgpOyBcclxuXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcblxyXG5jb25zdCBkZWNpbWFsTWF4VmFsdWUgPSA5XzAwMF8wMDBfMDAwXzAwMC4wMFxyXG5cclxuY29uc3QgZGVjaW1hbFNlcGFyYXRvciA6IHN0cmluZyA9IFwiLFwiO1xyXG5jb25zdCB0aG91c2FuZFNlcGFyYXRvcjogc3RyaW5nID0gXCIuXCI7XHJcblxyXG5jb25zdCBTYW5pdGl6ZTogRnVuY3Rpb24gPSAoKHY6IHN0cmluZyk6IHN0cmluZyA9PiB7IFxyXG4gIHJldHVybiB2LnJlcGxhY2VBbGwodGhvdXNhbmRTZXBhcmF0b3IsICcnKVxyXG4gICAgICAgICAgLnJlcGxhY2UgICAoZGVjaW1hbFNlcGFyYXRvciAsICcnKSBcclxuICAgICAgICB9KTtcclxuXHJcbmNvbnN0IGxzdE51bWJlcnMgICAgICAgICAgPSBbIFwiMFwiLFwiMVwiLFwiMlwiLFwiM1wiLFwiNFwiLFwiNVwiLFwiNlwiLFwiN1wiLFwiOFwiLFwiOVwiIF07XHJcbmNvbnN0IGxzdElnbm9yZU5vdFByZXZlbnQgPSBbIFwiVGFiXCIsIFwiQ2Fwc0xvY2tcIiwgXCJTaGlmdFwiLCBcIkNvbnRyb2xcIiwgXCJBbHRcIiwgXCJBcnJvd1JpZ2h0XCIsIFwiQXJyb3dVcFwiLCBcIkFycm93RG93blwiLCBcIkFycm93TGVmdFwiXTtcclxuY29uc3QgbHN0RXNwZWNpYWxDYXNlcyAgICA9IFsgXCJCYWNrc3BhY2VcIiwgXCJEZWxldGVcIiBdOyIsIjxkaXYgXHJcbiAgI2lucHV0Q29udGFpbmVyXHJcbiAgY2xhc3M9XCJpbnB1dC1jb250YWluZXJcIiBcclxuICAoY2xpY2spPVwic2V0Rm9jdXMoJGV2ZW50KVwiXHJcbiAgW2NsYXNzLnJlcXVpcmVkXT1cInJlcXVpcmVkKClcIiBcclxuICBbY2xhc3Muc3VibWl0dGVkXT1cInN1Ym1pdHRlZCgpXCIgXHJcbiAgW2NsYXNzLmludmFsaWRdPVwiaW52YWxpZFwiIFxyXG4gIFtjbGFzcy5kaXNhYmxlZF09XCJkaXNhYmxlZCgpIHx8IGxvYWRpbmcoKVwiXHJcbiAgW2NsYXNzLmxvYWRpbmddPVwibG9hZGluZygpXCJcclxuPlxyXG4gIDxkaXYgY2xhc3M9XCJpbnB1dC1sYWJlbFwiPiBcclxuICAgIDxzcGFuIGNsYXNzPVwidHJ1bmNhdGVcIj5cclxuICAgICAge3tsYWJlbCgpfX0gXHJcbiAgICA8L3NwYW4+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJkZWNpbWFsLWlucHV0LWNvbnRhaW5lciB0ZXh0LWRhcmtcIj5cclxuICAgIDxzcGFuICpuZ0lmPVwiY29uZmlndXJhdGlvbigpLnByZWZpeFwiIHNsb3Q9XCJzdGFydFwiPnt7Y29uZmlndXJhdGlvbigpLnByZWZpeH19PC9zcGFuPlxyXG4gICAgPGlucHV0ICNpbnB1dFxyXG4gICAgICBpbnB1dG1vZGU9XCJudW1lcmljXCJcclxuICAgICAgW3ZhbHVlXT1cInZhbHVlU3RyaW5nXCIgXHJcbiAgICAgIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQpXCJcclxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkKCkgfHwgbG9hZGluZygpXCJcclxuICAgICAgKGJsdXIpPVwiYmx1ci5lbWl0KCRldmVudClcIlxyXG4gICAgLz5cclxuICAgIDxzcGFuICpuZ0lmPVwiY29uZmlndXJhdGlvbigpLnN1Zml4XCIgIHNsb3Q9XCJlbmRcIiAgPnt7Y29uZmlndXJhdGlvbigpLnN1Zml4fX08L3NwYW4+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cImxvYWRpbmctY29udGFpbmVyXCIgW2NsYXNzLmxvYWRpbmddPVwibG9hZGluZygpXCI+XHJcbiAgICA8aW9uLXNwaW5uZXI+PC9pb24tc3Bpbm5lcj5cclxuICA8L2Rpdj5cclxuPC9kaXY+Il19
@@ -0,0 +1,50 @@
1
+ export class InputDecimalConfiguration {
2
+ constructor(
3
+ /** Declara a quantidade de numeros apos o ponto */
4
+ precision = 2,
5
+ /** Texto no inicio do input */
6
+ prefix = null,
7
+ /** Texto no fim do input */
8
+ sufix = null,
9
+ /** Se = false não aplica virgulas no lugar do separador a cada 3 unidades */
10
+ thousandSeparator = '.', decimalSeparator = ',') {
11
+ this.precision = precision;
12
+ this.thousandSeparator = thousandSeparator;
13
+ this.decimalSeparator = decimalSeparator;
14
+ if (!prefix) {
15
+ this.prefix = '';
16
+ }
17
+ else {
18
+ this.prefix = prefix;
19
+ }
20
+ if (!sufix) {
21
+ this.sufix = '';
22
+ }
23
+ else {
24
+ this.sufix = sufix;
25
+ }
26
+ this.placeholder = "-";
27
+ if (precision > 0) {
28
+ this.placeholder += this.decimalSeparator;
29
+ for (let i = precision; i > 0; i--) {
30
+ this.placeholder += "-";
31
+ }
32
+ }
33
+ }
34
+ }
35
+ export class InputNumberConfiguration extends InputDecimalConfiguration {
36
+ constructor(prefix = "", sufix = "", thousandSeparator = '.') {
37
+ super(0, prefix, sufix, thousandSeparator);
38
+ }
39
+ }
40
+ export class InputCurrencyConfiguration extends InputDecimalConfiguration {
41
+ constructor(prefix = "R$", sufix = "", thousandSeparator = '.') {
42
+ super(2, prefix, sufix, thousandSeparator);
43
+ }
44
+ }
45
+ export class InputPercentageConfiguration extends InputDecimalConfiguration {
46
+ constructor(prefix = "", sufix = "%", thousandSeparator = '.') {
47
+ super(2, prefix, sufix, thousandSeparator);
48
+ }
49
+ }
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtZGVjaW1hbC5jb25maWd1cmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2lucHV0cy9pbnB1dC1kZWNpbWFsL2lucHV0LWRlY2ltYWwuY29uZmlndXJhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8seUJBQXlCO0lBS3BDO0lBQ0Usb0RBQW9EO0lBQzdDLFlBQW9CLENBQUM7SUFDNUIsK0JBQStCO0lBQy9CLFNBQXdCLElBQUk7SUFDNUIsNEJBQTRCO0lBQzVCLFFBQXVCLElBQUk7SUFDM0IsNkVBQTZFO0lBQ3RFLG9CQUE0QixHQUFHLEVBQy9CLG1CQUE0QixHQUFHO1FBUC9CLGNBQVMsR0FBVCxTQUFTLENBQVk7UUFNckIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFjO1FBQy9CLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBZTtRQUV0QyxJQUFHLENBQUMsTUFBTSxFQUFDLENBQUM7WUFBQyxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUFDLENBQUM7YUFBSSxDQUFDO1lBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFBQyxDQUFDO1FBQzdELElBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUFDLElBQUksQ0FBQyxLQUFLLEdBQUksRUFBRSxDQUFDO1FBQUMsQ0FBQzthQUFJLENBQUM7WUFBQyxJQUFJLENBQUMsS0FBSyxHQUFJLEtBQUssQ0FBQztRQUFDLENBQUM7UUFFNUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7UUFDdkIsSUFBRyxTQUFTLEdBQUcsQ0FBQyxFQUFDLENBQUM7WUFDaEIsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUM7WUFDMUMsS0FBSSxJQUFJLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBQyxDQUFDO2dCQUNqQyxJQUFJLENBQUMsV0FBVyxJQUFJLEdBQUcsQ0FBQztZQUMxQixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7Q0FDRjtBQUNELE1BQU0sT0FBTyx3QkFBeUIsU0FBUSx5QkFBeUI7SUFDckUsWUFDRSxTQUFpQixFQUFFLEVBQ25CLFFBQWlCLEVBQUUsRUFDbkIsb0JBQTRCLEdBQUc7UUFFL0IsS0FBSyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFDN0MsQ0FBQztDQUNGO0FBQ0QsTUFBTSxPQUFPLDBCQUEyQixTQUFRLHlCQUF5QjtJQUN2RSxZQUFZLFNBQWlCLElBQUksRUFBRSxRQUFnQixFQUFFLEVBQUUsb0JBQTRCLEdBQUc7UUFDcEYsS0FBSyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFDN0MsQ0FBQztDQUNGO0FBQ0QsTUFBTSxPQUFPLDRCQUE2QixTQUFRLHlCQUF5QjtJQUN6RSxZQUFZLFNBQWlCLEVBQUUsRUFBRSxRQUFnQixHQUFHLEVBQUUsb0JBQTRCLEdBQUc7UUFDbkYsS0FBSyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFDN0MsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIElucHV0RGVjaW1hbENvbmZpZ3VyYXRpb257XHJcbiAgcHJlZml4ICAgICAgOiBzdHJpbmc7XHJcbiAgc3VmaXggICAgICAgOiBzdHJpbmc7XHJcbiAgcGxhY2Vob2xkZXIgOiBzdHJpbmc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgLyoqIERlY2xhcmEgYSBxdWFudGlkYWRlIGRlIG51bWVyb3MgYXBvcyBvIHBvbnRvICAqL1xyXG4gICAgcHVibGljIHByZWNpc2lvbjogbnVtYmVyID0gMiwgXHJcbiAgICAvKiogVGV4dG8gbm8gaW5pY2lvIGRvIGlucHV0ICovXHJcbiAgICBwcmVmaXg6IHN0cmluZyB8IG51bGwgPSBudWxsLCBcclxuICAgIC8qKiBUZXh0byBubyBmaW0gZG8gaW5wdXQgKi9cclxuICAgIHN1Zml4OiBzdHJpbmcgfCBudWxsID0gbnVsbCwgXHJcbiAgICAvKiogU2UgPSBmYWxzZSBuw6NvIGFwbGljYSB2aXJndWxhcyBubyBsdWdhciBkbyBzZXBhcmFkb3IgYSBjYWRhIDMgdW5pZGFkZXMgKi9cclxuICAgIHB1YmxpYyB0aG91c2FuZFNlcGFyYXRvcjogc3RyaW5nID0gJy4nLFxyXG4gICAgcHVibGljIGRlY2ltYWxTZXBhcmF0b3IgOiBzdHJpbmcgPSAnLCdcclxuICApe1xyXG4gICAgaWYoIXByZWZpeCl7IHRoaXMucHJlZml4ID0gJyc7IH1lbHNleyB0aGlzLnByZWZpeCA9IHByZWZpeDsgfVxyXG4gICAgaWYoIXN1Zml4ICl7IHRoaXMuc3VmaXggID0gJyc7IH1lbHNleyB0aGlzLnN1Zml4ICA9IHN1Zml4OyB9XHJcblxyXG4gICAgdGhpcy5wbGFjZWhvbGRlciA9IFwiLVwiO1xyXG4gICAgaWYocHJlY2lzaW9uID4gMCl7XHJcbiAgICAgIHRoaXMucGxhY2Vob2xkZXIgKz0gdGhpcy5kZWNpbWFsU2VwYXJhdG9yO1xyXG4gICAgICBmb3IobGV0IGkgPSBwcmVjaXNpb247IGkgPiAwOyBpLS0pe1xyXG4gICAgICAgIHRoaXMucGxhY2Vob2xkZXIgKz0gXCItXCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn0gXHJcbmV4cG9ydCBjbGFzcyBJbnB1dE51bWJlckNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBJbnB1dERlY2ltYWxDb25maWd1cmF0aW9uIHtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByZWZpeDogc3RyaW5nID0gXCJcIiwgXHJcbiAgICBzdWZpeCA6IHN0cmluZyA9IFwiXCIsIFxyXG4gICAgdGhvdXNhbmRTZXBhcmF0b3I6IHN0cmluZyA9ICcuJ1xyXG4gICl7XHJcbiAgICBzdXBlcigwLCBwcmVmaXgsIHN1Zml4LCB0aG91c2FuZFNlcGFyYXRvcik7XHJcbiAgfVxyXG59XHJcbmV4cG9ydCBjbGFzcyBJbnB1dEN1cnJlbmN5Q29uZmlndXJhdGlvbiBleHRlbmRzIElucHV0RGVjaW1hbENvbmZpZ3VyYXRpb24ge1xyXG4gIGNvbnN0cnVjdG9yKHByZWZpeDogc3RyaW5nID0gXCJSJFwiLCBzdWZpeDogc3RyaW5nID0gXCJcIiwgdGhvdXNhbmRTZXBhcmF0b3I6IHN0cmluZyA9ICcuJyl7XHJcbiAgICBzdXBlcigyLCBwcmVmaXgsIHN1Zml4LCB0aG91c2FuZFNlcGFyYXRvcik7XHJcbiAgfVxyXG59XHJcbmV4cG9ydCBjbGFzcyBJbnB1dFBlcmNlbnRhZ2VDb25maWd1cmF0aW9uIGV4dGVuZHMgSW5wdXREZWNpbWFsQ29uZmlndXJhdGlvbiB7XHJcbiAgY29uc3RydWN0b3IocHJlZml4OiBzdHJpbmcgPSBcIlwiLCBzdWZpeDogc3RyaW5nID0gXCIlXCIsIHRob3VzYW5kU2VwYXJhdG9yOiBzdHJpbmcgPSAnLicpe1xyXG4gICAgc3VwZXIoMiwgcHJlZml4LCBzdWZpeCwgdGhvdXNhbmRTZXBhcmF0b3IpO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,14 @@
1
+ import { InputDecimalConfiguration, InputNumberConfiguration } from "./input-decimal/input-decimal.configuration";
2
+ export class InputsDefaultConfigurations {
3
+ static { this.configurationDecimalPercentage = new InputDecimalConfiguration(2, null, '%'); }
4
+ static { this.configurationDecimalDegree = new InputDecimalConfiguration(2, null, "°C"); }
5
+ static { this.configurationDecimalM3H = new InputDecimalConfiguration(2, null, "m³/h"); }
6
+ static { this.configurationDecimalMeters = new InputDecimalConfiguration(2, null, "m"); }
7
+ static { this.configurationDecimalMilimeters = new InputDecimalConfiguration(2, null, "mm"); }
8
+ static { this.configurationNumberPercentage = new InputNumberConfiguration(null, '%'); }
9
+ static { this.configurationNumberDegree = new InputNumberConfiguration(null, "°C"); }
10
+ static { this.configurationNumberM3H = new InputNumberConfiguration(null, "m³/h"); }
11
+ static { this.configurationNumberMeters = new InputNumberConfiguration(null, "m"); }
12
+ static { this.configurationNumberMilimeters = new InputNumberConfiguration(null, "mm"); }
13
+ }
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtZGVmYXVsdC1jb25maWd1cmF0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9pbnB1dHMvaW5wdXQtZGVmYXVsdC1jb25maWd1cmF0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUVsSCxNQUFNLE9BQU8sMkJBQTJCO2FBQ3RCLG1DQUE4QixHQUE4QixJQUFJLHlCQUF5QixDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFDeEcsK0JBQTBCLEdBQWtDLElBQUkseUJBQXlCLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQzthQUN6Ryw0QkFBdUIsR0FBcUMsSUFBSSx5QkFBeUIsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2FBQzNHLCtCQUEwQixHQUFrQyxJQUFJLHlCQUF5QixDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFDeEcsbUNBQThCLEdBQThCLElBQUkseUJBQXlCLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQzthQUV6RyxrQ0FBNkIsR0FBNkIsSUFBSSx3QkFBd0IsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFDbEcsOEJBQXlCLEdBQWlDLElBQUksd0JBQXdCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQ25HLDJCQUFzQixHQUFvQyxJQUFJLHdCQUF3QixDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQzthQUNyRyw4QkFBeUIsR0FBaUMsSUFBSSx3QkFBd0IsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFDbEcsa0NBQTZCLEdBQTZCLElBQUksd0JBQXdCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5wdXREZWNpbWFsQ29uZmlndXJhdGlvbiwgSW5wdXROdW1iZXJDb25maWd1cmF0aW9uIH0gZnJvbSBcIi4vaW5wdXQtZGVjaW1hbC9pbnB1dC1kZWNpbWFsLmNvbmZpZ3VyYXRpb25cIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBJbnB1dHNEZWZhdWx0Q29uZmlndXJhdGlvbnMge1xyXG4gIHN0YXRpYyByZWFkb25seSBjb25maWd1cmF0aW9uRGVjaW1hbFBlcmNlbnRhZ2U6IElucHV0RGVjaW1hbENvbmZpZ3VyYXRpb24gPSBuZXcgSW5wdXREZWNpbWFsQ29uZmlndXJhdGlvbigyLCBudWxsLCAnJScpO1xyXG4gIHN0YXRpYyByZWFkb25seSBjb25maWd1cmF0aW9uRGVjaW1hbERlZ3JlZSAgICA6IElucHV0RGVjaW1hbENvbmZpZ3VyYXRpb24gPSBuZXcgSW5wdXREZWNpbWFsQ29uZmlndXJhdGlvbigyLCBudWxsLCBcIsKwQ1wiKTtcclxuICBzdGF0aWMgcmVhZG9ubHkgY29uZmlndXJhdGlvbkRlY2ltYWxNM0ggICAgICAgOiBJbnB1dERlY2ltYWxDb25maWd1cmF0aW9uID0gbmV3IElucHV0RGVjaW1hbENvbmZpZ3VyYXRpb24oMiwgbnVsbCwgXCJtwrMvaFwiKTtcclxuICBzdGF0aWMgcmVhZG9ubHkgY29uZmlndXJhdGlvbkRlY2ltYWxNZXRlcnMgICAgOiBJbnB1dERlY2ltYWxDb25maWd1cmF0aW9uID0gbmV3IElucHV0RGVjaW1hbENvbmZpZ3VyYXRpb24oMiwgbnVsbCwgXCJtXCIpO1xyXG4gIHN0YXRpYyByZWFkb25seSBjb25maWd1cmF0aW9uRGVjaW1hbE1pbGltZXRlcnM6IElucHV0RGVjaW1hbENvbmZpZ3VyYXRpb24gPSBuZXcgSW5wdXREZWNpbWFsQ29uZmlndXJhdGlvbigyLCBudWxsLCBcIm1tXCIpO1xyXG5cclxuICBzdGF0aWMgcmVhZG9ubHkgY29uZmlndXJhdGlvbk51bWJlclBlcmNlbnRhZ2U6IElucHV0TnVtYmVyQ29uZmlndXJhdGlvbiA9IG5ldyBJbnB1dE51bWJlckNvbmZpZ3VyYXRpb24obnVsbCwgJyUnKTtcclxuICBzdGF0aWMgcmVhZG9ubHkgY29uZmlndXJhdGlvbk51bWJlckRlZ3JlZSAgICA6IElucHV0TnVtYmVyQ29uZmlndXJhdGlvbiA9IG5ldyBJbnB1dE51bWJlckNvbmZpZ3VyYXRpb24obnVsbCwgXCLCsENcIik7XHJcbiAgc3RhdGljIHJlYWRvbmx5IGNvbmZpZ3VyYXRpb25OdW1iZXJNM0ggICAgICAgOiBJbnB1dE51bWJlckNvbmZpZ3VyYXRpb24gPSBuZXcgSW5wdXROdW1iZXJDb25maWd1cmF0aW9uKG51bGwsIFwibcKzL2hcIik7XHJcbiAgc3RhdGljIHJlYWRvbmx5IGNvbmZpZ3VyYXRpb25OdW1iZXJNZXRlcnMgICAgOiBJbnB1dE51bWJlckNvbmZpZ3VyYXRpb24gPSBuZXcgSW5wdXROdW1iZXJDb25maWd1cmF0aW9uKG51bGwsIFwibVwiKTtcclxuICBzdGF0aWMgcmVhZG9ubHkgY29uZmlndXJhdGlvbk51bWJlck1pbGltZXRlcnM6IElucHV0TnVtYmVyQ29uZmlndXJhdGlvbiA9IG5ldyBJbnB1dE51bWJlckNvbmZpZ3VyYXRpb24obnVsbCwgXCJtbVwiKTtcclxufSJdfQ==
@@ -0,0 +1,99 @@
1
+ import { Component, computed, ElementRef, Input, model } from '@angular/core';
2
+ import { InputFileConfiguration } from '../input-file.configuration';
3
+ import { ApiUrlProviderService } from '../../../../services/web/api-url-provider.service';
4
+ import { InputProviderFactory } from '../../input-provider-factory';
5
+ import { StorageService } from '../../../../services/web/storage.service';
6
+ import { lstImageTypes } from '../input-file.configuration';
7
+ import { Utils } from '../../../../services/utils.service';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "../../../../services/web/storage.service";
10
+ import * as i2 from "../../../../services/web/api-url-provider.service";
11
+ import * as i3 from "@ionic/angular";
12
+ import * as i4 from "@angular/common";
13
+ import * as i5 from "../../../loading/loading.component";
14
+ import * as i6 from "../../../../directives/ng-var.directive";
15
+ export class DownloadButtonComponent {
16
+ constructor(storageService, elementRef, apiUrlProviderService) {
17
+ this.storageService = storageService;
18
+ this.elementRef = elementRef;
19
+ this.apiUrlProviderService = apiUrlProviderService;
20
+ this.expand = "";
21
+ this.value = model();
22
+ this.size = "small";
23
+ this.color = "primary";
24
+ this.post = false;
25
+ this.configuration = new InputFileConfiguration();
26
+ this.customLabel = false;
27
+ this.label = "";
28
+ this.guid = "";
29
+ this.lstFiles = computed(() => {
30
+ if (typeof (this.value()) == "string") {
31
+ return this.value().split(';');
32
+ }
33
+ else {
34
+ return [];
35
+ }
36
+ });
37
+ this.lstLoading = [];
38
+ }
39
+ registerOnChange(fn) {
40
+ //throw new Error('Method not implemented.');
41
+ }
42
+ registerOnTouched(fn) {
43
+ //throw new Error('Method not implemented.');
44
+ }
45
+ setDisabledState(isDisabled) {
46
+ //throw new Error('Method not implemented.');
47
+ }
48
+ ngOnInit() {
49
+ this.apiUrl = this.apiUrlProviderService.apiUrl;
50
+ this.guid = `${Utils.GenerateGUID()}${this.elementRef.nativeElement.tagName.toLowerCase()}`;
51
+ }
52
+ writeValue(value) { this.value.set(value); }
53
+ Download(value) {
54
+ this.storageService.StartDownload(value, this.params, this.post);
55
+ }
56
+ Sanitize(v) {
57
+ return StorageService.SanitizeFileName(v);
58
+ }
59
+ ExtensionIsImage(v) {
60
+ try {
61
+ return lstImageTypes.includes(v.split('.')[v.split('.').length - 1]);
62
+ }
63
+ catch { }
64
+ }
65
+ SetLoading(path) {
66
+ this.lstLoading.push(path);
67
+ }
68
+ SetNotLoading(path) {
69
+ this.lstLoading.splice(this.lstLoading.indexOf(path), 1);
70
+ }
71
+ isLoading(path) {
72
+ return this.lstLoading.indexOf(path) != -1;
73
+ }
74
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DownloadButtonComponent, deps: [{ token: i1.StorageService }, { token: i0.ElementRef }, { token: i2.ApiUrlProviderService }], target: i0.ɵɵFactoryTarget.Component }); }
75
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: DownloadButtonComponent, selector: "download-button", inputs: { expand: { classPropertyName: "expand", publicName: "expand", isSignal: false, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: false, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: false, isRequired: false, transformFunction: null }, params: { classPropertyName: "params", publicName: "params", isSignal: false, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: false, isRequired: false, transformFunction: null }, post: { classPropertyName: "post", publicName: "post", isSignal: false, isRequired: false, transformFunction: null }, configuration: { classPropertyName: "configuration", publicName: "configuration", isSignal: false, isRequired: false, transformFunction: null }, customLabel: { classPropertyName: "customLabel", publicName: "customLabel", isSignal: false, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, providers: InputProviderFactory.GetProviders(DownloadButtonComponent), ngImport: i0, template: "@if(lstFiles().length == 0){\r\n <ion-button [color]=\"color\" fill=\"outline\" [disabled]=\"true\" [size]=\"size\"> \r\n <ion-icon name=\"close-circle\" slot=\"start\"></ion-icon> \r\n <ion-label> Sem arquivos... </ion-label>\r\n </ion-button>\r\n}\r\n@else if(lstFiles().length == 1){\r\n <ion-button [color]=\"color\" *ngVar=\"storageService.GetProgress(lstFiles()[0]) as val\" class=\"relative block {{expand == 'block' ? 'size-full' : ''}}\" [disabled]=\"val != 0 || disabled\" (click)=\"Download(lstFiles()[0])\" fill=\"outline\" [size]=\"size\"> \r\n <ion-icon name=\"download\" slot=\"start\"></ion-icon> \r\n <ion-label> {{customLabel ? label : Sanitize(lstFiles()[0])}} </ion-label>\r\n <div class=\"absolute size-full h-[calc(100%+var(--padding-top)+var(--padding-bottom))] w-[calc(100%+var(--padding-end)+var(--padding-start))]\">\r\n <loading [type]=\"3\" [loading]=\"val != 0\"></loading>\r\n <div class=\"size-full flex flex-row-reverse relative\">\r\n <ion-progress-bar class=\"absolute bottom-0 left-0 w-full h-1 default-transition\" [ngClass]=\"{'-translate-y-4 opacity-0': (!val || val == 0)}\" [value]=\"val\"></ion-progress-bar>\r\n </div>\r\n </div>\r\n </ion-button>\r\n}\r\n@else{\r\n <ion-button [color]=\"color\" [id]=\"guid\" fill=\"outline\" [size]=\"size\"> \r\n <ion-icon name=\"download\" slot=\"start\"></ion-icon> \r\n <ion-label> {{lstFiles().length}} Arquivos </ion-label>\r\n </ion-button>\r\n\r\n <ion-popover [trigger]=\"guid\" [keepContentsMounted]=\"true\" triggerAction=\"click\">\r\n <ng-template>\r\n <ion-content class=\"p-0 bg-transparent\">\r\n <ion-list>\r\n @for (item of lstFiles(); track item; let i = $index; let l = $last) {\r\n <section *ngVar=\"storageService.GetProgress(item) as val\">\r\n <ion-item style=\"--background: transparent\" lines=\"{{l ? 'none' : 'full'}}\" button [detail]=\"false\">\r\n\r\n <ion-icon name=\"download\" (click)=\"Download(item)\" slot=\"start\"></ion-icon> \r\n @if (ExtensionIsImage(item)) {\r\n <ion-icon [id]=\"guid + '-' + i + '-nested-popover'\" name=\"image\" slot=\"start\"></ion-icon> \r\n }\r\n\r\n <ion-label>{{Sanitize(item)}}</ion-label>\r\n <ion-text *ngIf=\"val != 0\" slot=\"end\" class=\"text-sm\"><b>{{val * 100 | number : '1.2-2'}}%</b></ion-text>\r\n </ion-item>\r\n <ion-progress-bar class=\"h-0 default-transition\" [ngClass]=\"{'h-1': val != 0 }\" [value]=\"val\"></ion-progress-bar>\r\n <ion-popover *ngIf=\"ExtensionIsImage(item)\" side=\"end\" alignment=\"center\" [trigger]=\"guid + '-' + i + '-nested-popover'\" [dismissOnSelect]=\"true\" triggerAction=\"click\">\r\n <ng-template>\r\n <ion-content *ngVar=\"isLoading(item) as isLoading\">\r\n <loading [hidden]=\"!isLoading\"></loading>\r\n <ion-img [hidden]=\"isLoading\" [src]=\"apiUrl + item\" (ionImgWillLoad)=\"SetLoading(item)\" (ionImgDidLoad)=\"SetNotLoading(item)\"></ion-img>\r\n </ion-content>\r\n </ng-template>\r\n </ion-popover>\r\n </section>\r\n }\r\n </ion-list>\r\n </ion-content>\r\n </ng-template>\r\n </ion-popover>\r\n}", styles: ["ion-popover{--width: 30rem }\n"], dependencies: [{ kind: "component", type: i3.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i3.IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i3.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i3.IonImg, selector: "ion-img", inputs: ["alt", "src"] }, { kind: "component", type: i3.IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i3.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i3.IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: i3.IonProgressBar, selector: "ion-progress-bar", inputs: ["buffer", "color", "mode", "reversed", "type", "value"] }, { kind: "component", type: i3.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: i3.IonPopover, selector: "ion-popover" }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.LoadingComponent, selector: "loading", inputs: ["text", "type", "loading"] }, { kind: "directive", type: i6.NgVarDirective, selector: "[ngVar]", inputs: ["ngVar"] }, { kind: "pipe", type: i4.DecimalPipe, name: "number" }] }); }
76
+ }
77
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DownloadButtonComponent, decorators: [{
78
+ type: Component,
79
+ args: [{ selector: 'download-button', providers: InputProviderFactory.GetProviders(DownloadButtonComponent), template: "@if(lstFiles().length == 0){\r\n <ion-button [color]=\"color\" fill=\"outline\" [disabled]=\"true\" [size]=\"size\"> \r\n <ion-icon name=\"close-circle\" slot=\"start\"></ion-icon> \r\n <ion-label> Sem arquivos... </ion-label>\r\n </ion-button>\r\n}\r\n@else if(lstFiles().length == 1){\r\n <ion-button [color]=\"color\" *ngVar=\"storageService.GetProgress(lstFiles()[0]) as val\" class=\"relative block {{expand == 'block' ? 'size-full' : ''}}\" [disabled]=\"val != 0 || disabled\" (click)=\"Download(lstFiles()[0])\" fill=\"outline\" [size]=\"size\"> \r\n <ion-icon name=\"download\" slot=\"start\"></ion-icon> \r\n <ion-label> {{customLabel ? label : Sanitize(lstFiles()[0])}} </ion-label>\r\n <div class=\"absolute size-full h-[calc(100%+var(--padding-top)+var(--padding-bottom))] w-[calc(100%+var(--padding-end)+var(--padding-start))]\">\r\n <loading [type]=\"3\" [loading]=\"val != 0\"></loading>\r\n <div class=\"size-full flex flex-row-reverse relative\">\r\n <ion-progress-bar class=\"absolute bottom-0 left-0 w-full h-1 default-transition\" [ngClass]=\"{'-translate-y-4 opacity-0': (!val || val == 0)}\" [value]=\"val\"></ion-progress-bar>\r\n </div>\r\n </div>\r\n </ion-button>\r\n}\r\n@else{\r\n <ion-button [color]=\"color\" [id]=\"guid\" fill=\"outline\" [size]=\"size\"> \r\n <ion-icon name=\"download\" slot=\"start\"></ion-icon> \r\n <ion-label> {{lstFiles().length}} Arquivos </ion-label>\r\n </ion-button>\r\n\r\n <ion-popover [trigger]=\"guid\" [keepContentsMounted]=\"true\" triggerAction=\"click\">\r\n <ng-template>\r\n <ion-content class=\"p-0 bg-transparent\">\r\n <ion-list>\r\n @for (item of lstFiles(); track item; let i = $index; let l = $last) {\r\n <section *ngVar=\"storageService.GetProgress(item) as val\">\r\n <ion-item style=\"--background: transparent\" lines=\"{{l ? 'none' : 'full'}}\" button [detail]=\"false\">\r\n\r\n <ion-icon name=\"download\" (click)=\"Download(item)\" slot=\"start\"></ion-icon> \r\n @if (ExtensionIsImage(item)) {\r\n <ion-icon [id]=\"guid + '-' + i + '-nested-popover'\" name=\"image\" slot=\"start\"></ion-icon> \r\n }\r\n\r\n <ion-label>{{Sanitize(item)}}</ion-label>\r\n <ion-text *ngIf=\"val != 0\" slot=\"end\" class=\"text-sm\"><b>{{val * 100 | number : '1.2-2'}}%</b></ion-text>\r\n </ion-item>\r\n <ion-progress-bar class=\"h-0 default-transition\" [ngClass]=\"{'h-1': val != 0 }\" [value]=\"val\"></ion-progress-bar>\r\n <ion-popover *ngIf=\"ExtensionIsImage(item)\" side=\"end\" alignment=\"center\" [trigger]=\"guid + '-' + i + '-nested-popover'\" [dismissOnSelect]=\"true\" triggerAction=\"click\">\r\n <ng-template>\r\n <ion-content *ngVar=\"isLoading(item) as isLoading\">\r\n <loading [hidden]=\"!isLoading\"></loading>\r\n <ion-img [hidden]=\"isLoading\" [src]=\"apiUrl + item\" (ionImgWillLoad)=\"SetLoading(item)\" (ionImgDidLoad)=\"SetNotLoading(item)\"></ion-img>\r\n </ion-content>\r\n </ng-template>\r\n </ion-popover>\r\n </section>\r\n }\r\n </ion-list>\r\n </ion-content>\r\n </ng-template>\r\n </ion-popover>\r\n}", styles: ["ion-popover{--width: 30rem }\n"] }]
80
+ }], ctorParameters: () => [{ type: i1.StorageService }, { type: i0.ElementRef }, { type: i2.ApiUrlProviderService }], propDecorators: { expand: [{
81
+ type: Input
82
+ }], size: [{
83
+ type: Input
84
+ }], color: [{
85
+ type: Input
86
+ }], params: [{
87
+ type: Input
88
+ }], disabled: [{
89
+ type: Input
90
+ }], post: [{
91
+ type: Input
92
+ }], configuration: [{
93
+ type: Input
94
+ }], customLabel: [{
95
+ type: Input
96
+ }], label: [{
97
+ type: Input
98
+ }] } });
99
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG93bmxvYWQtYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9pbnB1dHMvaW5wdXQtZmlsZS9kb3dubG9hZC1idXR0b24vZG93bmxvYWQtYnV0dG9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9pbnB1dHMvaW5wdXQtZmlsZS9kb3dubG9hZC1idXR0b24vZG93bmxvYWQtYnV0dG9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUF1QixNQUFNLGVBQWUsQ0FBQztBQUduRyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUMxRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDMUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzVELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7Ozs7Ozs7QUFRM0QsTUFBTSxPQUFPLHVCQUF1QjtJQWNsQyxZQUNTLGNBQThCLEVBQzdCLFVBQXNCLEVBQ3RCLHFCQUE0QztRQUY3QyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDN0IsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QiwwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBZjdDLFdBQU0sR0FBVyxFQUFFLENBQUM7UUFDN0IsVUFBSyxHQUF3QixLQUFLLEVBQVUsQ0FBQztRQUNwQyxTQUFJLEdBQVcsT0FBTyxDQUFD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QkFBYixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUVHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUcsS0FBSztzQkFBYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgRWxlbWVudFJlZiwgSW5wdXQsIG1vZGVsLCBNb2RlbFNpZ25hbCwgU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuaW1wb3J0IHsgSW5wdXRGaWxlQ29uZmlndXJhdGlvbiB9IGZyb20gJy4uL2lucHV0LWZpbGUuY29uZmlndXJhdGlvbic7XHJcbmltcG9ydCB7IEFwaVVybFByb3ZpZGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3dlYi9hcGktdXJsLXByb3ZpZGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJbnB1dFByb3ZpZGVyRmFjdG9yeSB9IGZyb20gJy4uLy4uL2lucHV0LXByb3ZpZGVyLWZhY3RvcnknO1xyXG5pbXBvcnQgeyBTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3dlYi9zdG9yYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBsc3RJbWFnZVR5cGVzIH0gZnJvbSAnLi4vaW5wdXQtZmlsZS5jb25maWd1cmF0aW9uJztcclxuaW1wb3J0IHsgVXRpbHMgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy91dGlscy5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZG93bmxvYWQtYnV0dG9uJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZG93bmxvYWQtYnV0dG9uLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9kb3dubG9hZC1idXR0b24uY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IElucHV0UHJvdmlkZXJGYWN0b3J5LkdldFByb3ZpZGVycyhEb3dubG9hZEJ1dHRvbkNvbXBvbmVudClcclxufSlcclxuZXhwb3J0IGNsYXNzIERvd25sb2FkQnV0dG9uQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG5cclxuICBASW5wdXQoKSBleHBhbmQ6IHN0cmluZyA9IFwiXCI7XHJcbiAgdmFsdWU6IE1vZGVsU2lnbmFsPHN0cmluZz4gPSBtb2RlbDxzdHJpbmc+KCk7XHJcbiAgQElucHV0KCkgc2l6ZTogc3RyaW5nID0gXCJzbWFsbFwiO1xyXG4gIEBJbnB1dCgpIGNvbG9yOiBzdHJpbmcgPSBcInByaW1hcnlcIjtcclxuICBASW5wdXQoKSBwYXJhbXM6IGFueTtcclxuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbjtcclxuICBASW5wdXQoKSBwb3N0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgY29uZmlndXJhdGlvbjogSW5wdXRGaWxlQ29uZmlndXJhdGlvbiA9IG5ldyBJbnB1dEZpbGVDb25maWd1cmF0aW9uKCk7XHJcbiAgXHJcbiAgQElucHV0KCkgY3VzdG9tTGFiZWw6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgbGFiZWwgOiBzdHJpbmcgPSBcIlwiO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIHN0b3JhZ2VTZXJ2aWNlOiBTdG9yYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcclxuICAgIHByaXZhdGUgYXBpVXJsUHJvdmlkZXJTZXJ2aWNlOiBBcGlVcmxQcm92aWRlclNlcnZpY2VcclxuICApIHsgfVxyXG5cclxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIC8vdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xyXG4gIH1cclxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgICAvL3Rocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcclxuICB9XHJcbiAgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgLy90aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XHJcbiAgfVxyXG5cclxuICBndWlkIDogc3RyaW5nID0gXCJcIjtcclxuICBhcGlVcmw6IHN0cmluZztcclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmFwaVVybCA9IHRoaXMuYXBpVXJsUHJvdmlkZXJTZXJ2aWNlLmFwaVVybDtcclxuICAgIHRoaXMuZ3VpZCAgPSBgJHtVdGlscy5HZW5lcmF0ZUdVSUQoKX0ke3RoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKX1gXHJcbiAgfVxyXG5cclxuICBsc3RGaWxlczogU2lnbmFsPHN0cmluZ1tdPiA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIGlmKHR5cGVvZih0aGlzLnZhbHVlKCkpID09IFwic3RyaW5nXCIpe1xyXG4gICAgICByZXR1cm4gdGhpcy52YWx1ZSgpLnNwbGl0KCc7Jyk7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHsgdGhpcy52YWx1ZS5zZXQodmFsdWUpOyB9XHJcblxyXG4gIERvd25sb2FkKHZhbHVlOiBzdHJpbmcpOiB2b2lke1xyXG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5TdGFydERvd25sb2FkKHZhbHVlLCB0aGlzLnBhcmFtcywgdGhpcy5wb3N0KTtcclxuICB9XHJcblxyXG4gIFNhbml0aXplKHYpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIFN0b3JhZ2VTZXJ2aWNlLlNhbml0aXplRmlsZU5hbWUodik7XHJcbiAgfVxyXG5cclxuICBFeHRlbnNpb25Jc0ltYWdlKHYpe1xyXG4gICAgdHJ5e1xyXG4gICAgICByZXR1cm4gbHN0SW1hZ2VUeXBlcy5pbmNsdWRlcyh2LnNwbGl0KCcuJylbdi5zcGxpdCgnLicpLmxlbmd0aCAtIDFdKVxyXG4gICAgfWNhdGNoe31cclxuICB9XHJcblxyXG4gIGxzdExvYWRpbmc6IHN0cmluZ1tdID0gW107XHJcbiAgU2V0TG9hZGluZyhwYXRoOiBzdHJpbmcpe1xyXG4gICAgdGhpcy5sc3RMb2FkaW5nLnB1c2gocGF0aCk7XHJcbiAgfVxyXG4gIFNldE5vdExvYWRpbmcocGF0aDogc3RyaW5nKXtcclxuICAgIHRoaXMubHN0TG9hZGluZy5zcGxpY2UodGhpcy5sc3RMb2FkaW5nLmluZGV4T2YocGF0aCksIDEpO1xyXG4gIH1cclxuICBpc0xvYWRpbmcocGF0aDogc3RyaW5nKXtcclxuICAgIHJldHVybiB0aGlzLmxzdExvYWRpbmcuaW5kZXhPZihwYXRoKSAhPSAtMTtcclxuICB9XHJcbn1cclxuIiwiQGlmKGxzdEZpbGVzKCkubGVuZ3RoID09IDApe1xyXG4gIDxpb24tYnV0dG9uIFtjb2xvcl09XCJjb2xvclwiIGZpbGw9XCJvdXRsaW5lXCIgW2Rpc2FibGVkXT1cInRydWVcIiBbc2l6ZV09XCJzaXplXCI+IFxyXG4gICAgPGlvbi1pY29uIG5hbWU9XCJjbG9zZS1jaXJjbGVcIiBzbG90PVwic3RhcnRcIj48L2lvbi1pY29uPiAgXHJcbiAgICA8aW9uLWxhYmVsPiBTZW0gYXJxdWl2b3MuLi4gPC9pb24tbGFiZWw+XHJcbiAgPC9pb24tYnV0dG9uPlxyXG59XHJcbkBlbHNlIGlmKGxzdEZpbGVzKCkubGVuZ3RoID09IDEpe1xyXG4gIDxpb24tYnV0dG9uIFtjb2xvcl09XCJjb2xvclwiICpuZ1Zhcj1cInN0b3JhZ2VTZXJ2aWNlLkdldFByb2dyZXNzKGxzdEZpbGVzKClbMF0pIGFzIHZhbFwiIGNsYXNzPVwicmVsYXRpdmUgYmxvY2sge3tleHBhbmQgPT0gJ2Jsb2NrJyA/ICdzaXplLWZ1bGwnIDogJyd9fVwiIFtkaXNhYmxlZF09XCJ2YWwgIT0gMCB8fCBkaXNhYmxlZFwiIChjbGljayk9XCJEb3dubG9hZChsc3RGaWxlcygpWzBdKVwiIGZpbGw9XCJvdXRsaW5lXCIgW3NpemVdPVwic2l6ZVwiPiBcclxuICAgIDxpb24taWNvbiBuYW1lPVwiZG93bmxvYWRcIiBzbG90PVwic3RhcnRcIj48L2lvbi1pY29uPiAgXHJcbiAgICA8aW9uLWxhYmVsPiAge3tjdXN0b21MYWJlbCA/IGxhYmVsIDogU2FuaXRpemUobHN0RmlsZXMoKVswXSl9fSA8L2lvbi1sYWJlbD5cclxuICAgIDxkaXYgY2xhc3M9XCJhYnNvbHV0ZSBzaXplLWZ1bGwgaC1bY2FsYygxMDAlK3ZhcigtLXBhZGRpbmctdG9wKSt2YXIoLS1wYWRkaW5nLWJvdHRvbSkpXSB3LVtjYWxjKDEwMCUrdmFyKC0tcGFkZGluZy1lbmQpK3ZhcigtLXBhZGRpbmctc3RhcnQpKV1cIj5cclxuICAgICAgPGxvYWRpbmcgW3R5cGVdPVwiM1wiIFtsb2FkaW5nXT1cInZhbCAhPSAwXCI+PC9sb2FkaW5nPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic2l6ZS1mdWxsIGZsZXggZmxleC1yb3ctcmV2ZXJzZSByZWxhdGl2ZVwiPlxyXG4gICAgICAgIDxpb24tcHJvZ3Jlc3MtYmFyIGNsYXNzPVwiYWJzb2x1dGUgYm90dG9tLTAgbGVmdC0wIHctZnVsbCBoLTEgZGVmYXVsdC10cmFuc2l0aW9uXCIgW25nQ2xhc3NdPVwieyctdHJhbnNsYXRlLXktNCBvcGFjaXR5LTAnOiAoIXZhbCB8fCB2YWwgPT0gMCl9XCIgW3ZhbHVlXT1cInZhbFwiPjwvaW9uLXByb2dyZXNzLWJhcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2lvbi1idXR0b24+XHJcbn1cclxuQGVsc2V7XHJcbiAgPGlvbi1idXR0b24gW2NvbG9yXT1cImNvbG9yXCIgW2lkXT1cImd1aWRcIiBmaWxsPVwib3V0bGluZVwiIFtzaXplXT1cInNpemVcIj4gXHJcbiAgICA8aW9uLWljb24gbmFtZT1cImRvd25sb2FkXCIgc2xvdD1cInN0YXJ0XCI+PC9pb24taWNvbj4gIFxyXG4gICAgPGlvbi1sYWJlbD4ge3tsc3RGaWxlcygpLmxlbmd0aH19IEFycXVpdm9zIDwvaW9uLWxhYmVsPlxyXG4gIDwvaW9uLWJ1dHRvbj5cclxuXHJcbiAgPGlvbi1wb3BvdmVyIFt0cmlnZ2VyXT1cImd1aWRcIiBba2VlcENvbnRlbnRzTW91bnRlZF09XCJ0cnVlXCIgdHJpZ2dlckFjdGlvbj1cImNsaWNrXCI+XHJcbiAgICA8bmctdGVtcGxhdGU+XHJcbiAgICAgIDxpb24tY29udGVudCBjbGFzcz1cInAtMCBiZy10cmFuc3BhcmVudFwiPlxyXG4gICAgICAgIDxpb24tbGlzdD5cclxuICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgbHN0RmlsZXMoKTsgdHJhY2sgaXRlbTsgbGV0IGkgPSAkaW5kZXg7IGxldCBsID0gJGxhc3QpIHtcclxuICAgICAgICAgICAgPHNlY3Rpb24gKm5nVmFyPVwic3RvcmFnZVNlcnZpY2UuR2V0UHJvZ3Jlc3MoaXRlbSkgYXMgdmFsXCI+XHJcbiAgICAgICAgICAgICAgPGlvbi1pdGVtIHN0eWxlPVwiLS1iYWNrZ3JvdW5kOiB0cmFuc3BhcmVudFwiIGxpbmVzPVwie3tsID8gJ25vbmUnIDogJ2Z1bGwnfX1cIiBidXR0b24gW2RldGFpbF09XCJmYWxzZVwiPlxyXG5cclxuICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiZG93bmxvYWRcIiAoY2xpY2spPVwiRG93bmxvYWQoaXRlbSlcIiBzbG90PVwic3RhcnRcIj48L2lvbi1pY29uPiBcclxuICAgICAgICAgICAgICAgIEBpZiAoRXh0ZW5zaW9uSXNJbWFnZShpdGVtKSkge1xyXG4gICAgICAgICAgICAgICAgICA8aW9uLWljb24gW2lkXT1cImd1aWQgKyAnLScgKyBpICsgJy1uZXN0ZWQtcG9wb3ZlcidcIiBuYW1lPVwiaW1hZ2VcIiBzbG90PVwic3RhcnRcIj48L2lvbi1pY29uPiBcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICA8aW9uLWxhYmVsPnt7U2FuaXRpemUoaXRlbSl9fTwvaW9uLWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGlvbi10ZXh0ICpuZ0lmPVwidmFsICE9IDBcIiBzbG90PVwiZW5kXCIgY2xhc3M9XCJ0ZXh0LXNtXCI+PGI+e3t2YWwgKiAxMDAgfCBudW1iZXIgOiAnMS4yLTInfX0lPC9iPjwvaW9uLXRleHQ+XHJcbiAgICAgICAgICAgICAgPC9pb24taXRlbT5cclxuICAgICAgICAgICAgICA8aW9uLXByb2dyZXNzLWJhciBjbGFzcz1cImgtMCBkZWZhdWx0LXRyYW5zaXRpb25cIiBbbmdDbGFzc109XCJ7J2gtMSc6IHZhbCAhPSAwIH1cIiBbdmFsdWVdPVwidmFsXCI+PC9pb24tcHJvZ3Jlc3MtYmFyPlxyXG4gICAgICAgICAgICAgIDxpb24tcG9wb3ZlciAqbmdJZj1cIkV4dGVuc2lvbklzSW1hZ2UoaXRlbSlcIiBzaWRlPVwiZW5kXCIgYWxpZ25tZW50PVwiY2VudGVyXCIgW3RyaWdnZXJdPVwiZ3VpZCArICctJyArIGkgKyAnLW5lc3RlZC1wb3BvdmVyJ1wiIFtkaXNtaXNzT25TZWxlY3RdPVwidHJ1ZVwiIHRyaWdnZXJBY3Rpb249XCJjbGlja1wiPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICA8aW9uLWNvbnRlbnQgKm5nVmFyPVwiaXNMb2FkaW5nKGl0ZW0pIGFzIGlzTG9hZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsb2FkaW5nICAgIFtoaWRkZW5dPVwiIWlzTG9hZGluZ1wiPjwvbG9hZGluZz5cclxuICAgICAgICAgICAgICAgICAgICA8aW9uLWltZyAgICBbaGlkZGVuXT1cImlzTG9hZGluZ1wiIFtzcmNdPVwiYXBpVXJsICsgaXRlbVwiIChpb25JbWdXaWxsTG9hZCk9XCJTZXRMb2FkaW5nKGl0ZW0pXCIgKGlvbkltZ0RpZExvYWQpPVwiU2V0Tm90TG9hZGluZyhpdGVtKVwiPjwvaW9uLWltZz5cclxuICAgICAgICAgICAgICAgICAgPC9pb24tY29udGVudD5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgPC9pb24tcG9wb3Zlcj5cclxuICAgICAgICAgICAgPC9zZWN0aW9uPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgPC9pb24tbGlzdD5cclxuICAgICAgPC9pb24tY29udGVudD5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9pb24tcG9wb3Zlcj5cclxufSJdfQ==