@sapphire-ion/framework 0.30.0

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 (299) hide show
  1. package/README.md +24 -0
  2. package/esm2022/lib/classes/comparison/comparison-operator.mjs +18 -0
  3. package/esm2022/lib/classes/comparison/comparison-value-type.mjs +25 -0
  4. package/esm2022/lib/classes/comparison/comparison.mjs +41 -0
  5. package/esm2022/lib/classes/comparison/properties/bool-property.mjs +15 -0
  6. package/esm2022/lib/classes/comparison/properties/date-property.mjs +27 -0
  7. package/esm2022/lib/classes/comparison/properties/datetime-property.mjs +27 -0
  8. package/esm2022/lib/classes/comparison/properties/decimal-property.mjs +27 -0
  9. package/esm2022/lib/classes/comparison/properties/enum-property.mjs +27 -0
  10. package/esm2022/lib/classes/comparison/properties/implicit-property.mjs +12 -0
  11. package/esm2022/lib/classes/comparison/properties/int-property.mjs +27 -0
  12. package/esm2022/lib/classes/comparison/properties/long-property.mjs +27 -0
  13. package/esm2022/lib/classes/comparison/properties/string-property.mjs +15 -0
  14. package/esm2022/lib/classes/comparison/properties/time-property.mjs +27 -0
  15. package/esm2022/lib/classes/credentials.mjs +2 -0
  16. package/esm2022/lib/classes/environment.mjs +32 -0
  17. package/esm2022/lib/classes/filters/view-filtros.mjs +18 -0
  18. package/esm2022/lib/classes/inputs/table-field-form-builder.mjs +10 -0
  19. package/esm2022/lib/classes/inputs/table-field.mjs +63 -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 +94 -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 +110 -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 +206 -0
  36. package/esm2022/lib/components/default/default-table/th-filter/th-filter.component.mjs +182 -0
  37. package/esm2022/lib/components/default/default-view/abstract-view.mjs +18 -0
  38. package/esm2022/lib/components/default/default-view/default-view.component.mjs +51 -0
  39. package/esm2022/lib/components/default/default-view/header-view/header-view.component.mjs +72 -0
  40. package/esm2022/lib/components/default/default-view/view.mjs +170 -0
  41. package/esm2022/lib/components/default/default.module.mjs +87 -0
  42. package/esm2022/lib/components/default-page/default.page.mjs +73 -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 +49 -0
  48. package/esm2022/lib/components/drawer/drawer.component.mjs +117 -0
  49. package/esm2022/lib/components/drawer/menu.mjs +15 -0
  50. package/esm2022/lib/components/filter/filter.component.mjs +124 -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 +77 -0
  55. package/esm2022/lib/components/inputs/custom-signal-input.mjs +74 -0
  56. package/esm2022/lib/components/inputs/input-bool/input-bool.component.mjs +43 -0
  57. package/esm2022/lib/components/inputs/input-bool/input-bool.configuration.mjs +16 -0
  58. package/esm2022/lib/components/inputs/input-color/input-color.component.mjs +487 -0
  59. package/esm2022/lib/components/inputs/input-configuration.mjs +2 -0
  60. package/esm2022/lib/components/inputs/input-cpf-cnpj/input-cpf-cnpj.component.mjs +93 -0
  61. package/esm2022/lib/components/inputs/input-cpf-cnpj/input-cpf-cnpj.configuration.mjs +6 -0
  62. package/esm2022/lib/components/inputs/input-date/input-date.component.mjs +119 -0
  63. package/esm2022/lib/components/inputs/input-date/input-date.configuration.mjs +8 -0
  64. package/esm2022/lib/components/inputs/input-decimal/input-decimal.component.mjs +269 -0
  65. package/esm2022/lib/components/inputs/input-decimal/input-decimal.configuration.mjs +45 -0
  66. package/esm2022/lib/components/inputs/input-default-configurations.mjs +14 -0
  67. package/esm2022/lib/components/inputs/input-file/download-button/download-button.component.mjs +91 -0
  68. package/esm2022/lib/components/inputs/input-file/input-file.component.mjs +128 -0
  69. package/esm2022/lib/components/inputs/input-file/input-file.configuration.mjs +11 -0
  70. package/esm2022/lib/components/inputs/input-loading/input-loading.component.mjs +16 -0
  71. package/esm2022/lib/components/inputs/input-provider-factory.mjs +15 -0
  72. package/esm2022/lib/components/inputs/input-select/ISelect.mjs +11 -0
  73. package/esm2022/lib/components/inputs/input-select/input-select-internal-option/input-select-internal-option.component.mjs +42 -0
  74. package/esm2022/lib/components/inputs/input-select/input-select-option/input-select-option.component.mjs +46 -0
  75. package/esm2022/lib/components/inputs/input-select/input-select-template.directive.mjs +16 -0
  76. package/esm2022/lib/components/inputs/input-select/input-select.component.mjs +322 -0
  77. package/esm2022/lib/components/inputs/input-select/input.select.configuration.mjs +164 -0
  78. package/esm2022/lib/components/inputs/input-string/input-string.component.mjs +50 -0
  79. package/esm2022/lib/components/inputs/input-string/input-string.configuration.mjs +18 -0
  80. package/esm2022/lib/components/inputs/input-textarea/input-textarea.component.mjs +47 -0
  81. package/esm2022/lib/components/inputs/input-type.mjs +18 -0
  82. package/esm2022/lib/components/inputs/input-validators.mjs +90 -0
  83. package/esm2022/lib/components/inputs/inputs.module.mjs +101 -0
  84. package/esm2022/lib/components/loading/loading.component.mjs +34 -0
  85. package/esm2022/lib/components/login/login-admin/login-admin.component.mjs +52 -0
  86. package/esm2022/lib/components/login/login.component.mjs +93 -0
  87. package/esm2022/lib/components/main-content/main-content.component.mjs +62 -0
  88. package/esm2022/lib/components/stepper/step/step.component.mjs +43 -0
  89. package/esm2022/lib/components/stepper/stepper.component.mjs +36 -0
  90. package/esm2022/lib/components/stepper/stepper.module.mjs +25 -0
  91. package/esm2022/lib/components/tabs/tab/tab.component.mjs +41 -0
  92. package/esm2022/lib/components/tabs/tabs/tabs.component.mjs +56 -0
  93. package/esm2022/lib/components/tabs/tabs.module.mjs +22 -0
  94. package/esm2022/lib/components/text-tooltip/text-tooltip.component.mjs +51 -0
  95. package/esm2022/lib/components/tooltip/tooltip.component.mjs +21 -0
  96. package/esm2022/lib/core.module.mjs +29 -0
  97. package/esm2022/lib/directives/ng-var.directive.mjs +29 -0
  98. package/esm2022/lib/guards/auth.guard.mjs +26 -0
  99. package/esm2022/lib/guards/error.interceptor.mjs +106 -0
  100. package/esm2022/lib/guards/token.interceptor.mjs +25 -0
  101. package/esm2022/lib/index.mjs +172 -0
  102. package/esm2022/lib/pipes/secure.pipe.mjs +42 -0
  103. package/esm2022/lib/services/auth.service.mjs +149 -0
  104. package/esm2022/lib/services/environment.service.mjs +26 -0
  105. package/esm2022/lib/services/generics.service.mjs +84 -0
  106. package/esm2022/lib/services/route/route.cache.service.mjs +15 -0
  107. package/esm2022/lib/services/route/route.provider.service.mjs +42 -0
  108. package/esm2022/lib/services/usuario.service.mjs +49 -0
  109. package/esm2022/lib/services/utils.service.mjs +149 -0
  110. package/esm2022/lib/services/web/api-url-provider.service.mjs +29 -0
  111. package/esm2022/lib/services/web/http.ativo.service.mjs +55 -0
  112. package/esm2022/lib/services/web/http.service.mjs +175 -0
  113. package/esm2022/lib/services/web/storage.service.mjs +115 -0
  114. package/esm2022/public-api.mjs +5 -0
  115. package/esm2022/sapphire-ion-framework.mjs +5 -0
  116. package/fesm2022/sapphire-ion-framework.mjs +6080 -0
  117. package/fesm2022/sapphire-ion-framework.mjs.map +1 -0
  118. package/index.d.ts +5 -0
  119. package/lib/classes/comparison/comparison-operator.d.ts +9 -0
  120. package/lib/classes/comparison/comparison-value-type.d.ts +23 -0
  121. package/lib/classes/comparison/comparison.d.ts +25 -0
  122. package/lib/classes/comparison/properties/bool-property.d.ts +7 -0
  123. package/lib/classes/comparison/properties/date-property.d.ts +11 -0
  124. package/lib/classes/comparison/properties/datetime-property.d.ts +11 -0
  125. package/lib/classes/comparison/properties/decimal-property.d.ts +11 -0
  126. package/lib/classes/comparison/properties/enum-property.d.ts +11 -0
  127. package/lib/classes/comparison/properties/implicit-property.d.ts +6 -0
  128. package/lib/classes/comparison/properties/int-property.d.ts +11 -0
  129. package/lib/classes/comparison/properties/long-property.d.ts +11 -0
  130. package/lib/classes/comparison/properties/string-property.d.ts +7 -0
  131. package/lib/classes/comparison/properties/time-property.d.ts +11 -0
  132. package/lib/classes/credentials.d.ts +5 -0
  133. package/lib/classes/environment.d.ts +13 -0
  134. package/lib/classes/filters/view-filtros.d.ts +10 -0
  135. package/lib/classes/inputs/table-field-form-builder.d.ts +5 -0
  136. package/lib/classes/inputs/table-field.d.ts +19 -0
  137. package/lib/classes/page-option.d.ts +7 -0
  138. package/lib/classes/routes/default-routing-factory.d.ts +8 -0
  139. package/lib/classes/routes/id-preloader-configuration.d.ts +28 -0
  140. package/lib/classes/routes/route-data.d.ts +5 -0
  141. package/lib/components/carousel/carousel-image/carousel-image.component.d.ts +10 -0
  142. package/lib/components/carousel/carousel-item/carousel-item.component.d.ts +9 -0
  143. package/lib/components/carousel/carousel.component.d.ts +32 -0
  144. package/lib/components/carousel/carousel.module.d.ts +12 -0
  145. package/lib/components/carousel/i-carousel-item.component.d.ts +9 -0
  146. package/lib/components/content-block/content-block.component.d.ts +15 -0
  147. package/lib/components/default/default-list/abstract-list.d.ts +21 -0
  148. package/lib/components/default/default-list/default-list.component.d.ts +42 -0
  149. package/lib/components/default/default-list/header-list/header-list.component.d.ts +45 -0
  150. package/lib/components/default/default-list/list.d.ts +37 -0
  151. package/lib/components/default/default-pagination/default-pagination.component.d.ts +36 -0
  152. package/lib/components/default/default-table/default-table.component.d.ts +71 -0
  153. package/lib/components/default/default-table/th-filter/th-filter.component.d.ts +20 -0
  154. package/lib/components/default/default-view/abstract-view.d.ts +16 -0
  155. package/lib/components/default/default-view/default-view.component.d.ts +26 -0
  156. package/lib/components/default/default-view/header-view/header-view.component.d.ts +25 -0
  157. package/lib/components/default/default-view/view.d.ts +55 -0
  158. package/lib/components/default/default.module.d.ts +28 -0
  159. package/lib/components/default-page/default.page.d.ts +35 -0
  160. package/lib/components/drag-drop-file/drag-drop-file.directive.d.ts +14 -0
  161. package/lib/components/drag-drop-file/drag-drop-file.module.d.ts +10 -0
  162. package/lib/components/drag-drop-file/drag-drop-overlay/drag-drop-overlay.component.d.ts +9 -0
  163. package/lib/components/drawer/default-drawer-end/default-drawer-end.component.d.ts +13 -0
  164. package/lib/components/drawer/drawer-group/drawer-group.component.d.ts +22 -0
  165. package/lib/components/drawer/drawer.component.d.ts +23 -0
  166. package/lib/components/drawer/menu.d.ts +9 -0
  167. package/lib/components/filter/filter.component.d.ts +29 -0
  168. package/lib/components/http-responses-pages/forbidden-403/forbidden-403.component.d.ts +8 -0
  169. package/lib/components/image/image.component.d.ts +23 -0
  170. package/lib/components/info-popover/info-popover.component.d.ts +15 -0
  171. package/lib/components/inputs/custom-input.d.ts +36 -0
  172. package/lib/components/inputs/custom-signal-input.d.ts +38 -0
  173. package/lib/components/inputs/input-bool/input-bool.component.d.ts +19 -0
  174. package/lib/components/inputs/input-bool/input-bool.configuration.d.ts +17 -0
  175. package/lib/components/inputs/input-color/input-color.component.d.ts +80 -0
  176. package/lib/components/inputs/input-configuration.d.ts +8 -0
  177. package/lib/components/inputs/input-cpf-cnpj/input-cpf-cnpj.component.d.ts +24 -0
  178. package/lib/components/inputs/input-cpf-cnpj/input-cpf-cnpj.configuration.d.ts +5 -0
  179. package/lib/components/inputs/input-date/input-date.component.d.ts +30 -0
  180. package/lib/components/inputs/input-date/input-date.configuration.d.ts +7 -0
  181. package/lib/components/inputs/input-decimal/input-decimal.component.d.ts +41 -0
  182. package/lib/components/inputs/input-decimal/input-decimal.configuration.d.ts +25 -0
  183. package/lib/components/inputs/input-default-configurations.d.ts +13 -0
  184. package/lib/components/inputs/input-file/download-button/download-button.component.d.ts +36 -0
  185. package/lib/components/inputs/input-file/input-file.component.d.ts +39 -0
  186. package/lib/components/inputs/input-file/input-file.configuration.d.ts +11 -0
  187. package/lib/components/inputs/input-loading/input-loading.component.d.ts +7 -0
  188. package/lib/components/inputs/input-provider-factory.d.ts +4 -0
  189. package/lib/components/inputs/input-select/ISelect.d.ts +21 -0
  190. package/lib/components/inputs/input-select/input-select-internal-option/input-select-internal-option.component.d.ts +18 -0
  191. package/lib/components/inputs/input-select/input-select-option/input-select-option.component.d.ts +24 -0
  192. package/lib/components/inputs/input-select/input-select-template.directive.d.ts +8 -0
  193. package/lib/components/inputs/input-select/input-select.component.d.ts +66 -0
  194. package/lib/components/inputs/input-select/input.select.configuration.d.ts +87 -0
  195. package/lib/components/inputs/input-string/input-string.component.d.ts +19 -0
  196. package/lib/components/inputs/input-string/input-string.configuration.d.ts +14 -0
  197. package/lib/components/inputs/input-textarea/input-textarea.component.d.ts +18 -0
  198. package/lib/components/inputs/input-type.d.ts +16 -0
  199. package/lib/components/inputs/input-validators.d.ts +19 -0
  200. package/lib/components/inputs/inputs.module.d.ts +28 -0
  201. package/lib/components/loading/loading.component.d.ts +18 -0
  202. package/lib/components/login/login-admin/login-admin.component.d.ts +20 -0
  203. package/lib/components/login/login.component.d.ts +28 -0
  204. package/lib/components/main-content/main-content.component.d.ts +17 -0
  205. package/lib/components/stepper/step/step.component.d.ts +15 -0
  206. package/lib/components/stepper/stepper.component.d.ts +17 -0
  207. package/lib/components/stepper/stepper.module.d.ts +10 -0
  208. package/lib/components/tabs/tab/tab.component.d.ts +19 -0
  209. package/lib/components/tabs/tabs/tabs.component.d.ts +18 -0
  210. package/lib/components/tabs/tabs.module.d.ts +12 -0
  211. package/lib/components/text-tooltip/text-tooltip.component.d.ts +16 -0
  212. package/lib/components/tooltip/tooltip.component.d.ts +7 -0
  213. package/lib/core.module.d.ts +11 -0
  214. package/lib/directives/ng-var.directive.d.ts +12 -0
  215. package/lib/guards/auth.guard.d.ts +11 -0
  216. package/lib/guards/error.interceptor.d.ts +32 -0
  217. package/lib/guards/token.interceptor.d.ts +11 -0
  218. package/lib/index.d.ts +108 -0
  219. package/lib/pipes/secure.pipe.d.ts +15 -0
  220. package/lib/services/auth.service.d.ts +47 -0
  221. package/lib/services/environment.service.d.ts +10 -0
  222. package/lib/services/generics.service.d.ts +22 -0
  223. package/lib/services/route/route.cache.service.d.ts +7 -0
  224. package/lib/services/route/route.provider.service.d.ts +13 -0
  225. package/lib/services/usuario.service.d.ts +21 -0
  226. package/lib/services/utils.service.d.ts +36 -0
  227. package/lib/services/web/api-url-provider.service.d.ts +13 -0
  228. package/lib/services/web/http.ativo.service.d.ts +31 -0
  229. package/lib/services/web/http.service.d.ts +51 -0
  230. package/lib/services/web/storage.service.d.ts +25 -0
  231. package/package.json +41 -0
  232. package/public-api.d.ts +1 -0
  233. package/themes/compiled-styles.scss +2291 -0
  234. package/themes/components/_inputs_new/input-string/input-string.component.scss +0 -0
  235. package/themes/components/_inputs_new/inputs.scss +15 -0
  236. package/themes/components/carousel/carousel-image/carousel-image.component.scss +0 -0
  237. package/themes/components/carousel/carousel-item/carousel-item.component.scss +0 -0
  238. package/themes/components/carousel/carousel.component.scss +9 -0
  239. package/themes/components/content-block/content-block.component.scss +0 -0
  240. package/themes/components/default/default-list/default-list.component.scss +0 -0
  241. package/themes/components/default/default-list/header-list/header-list.component.scss +0 -0
  242. package/themes/components/default/default-pagination/default-pagination.component.scss +22 -0
  243. package/themes/components/default/default-table/default-table.component.scss +33 -0
  244. package/themes/components/default/default-table/th-filter/th-filter.component.scss +24 -0
  245. package/themes/components/default/default-view/default-view.component.scss +5 -0
  246. package/themes/components/default/default-view/header-view/header-view.component.scss +7 -0
  247. package/themes/components/default-page/default.page.scss +4 -0
  248. package/themes/components/drag-drop-file/drag-drop-overlay/drag-drop-overlay.component.scss +9 -0
  249. package/themes/components/drawer/default-drawer-end/default-drawer-end.component.scss +0 -0
  250. package/themes/components/drawer/drawer-group/drawer-group.component.scss +22 -0
  251. package/themes/components/drawer/drawer.component.scss +46 -0
  252. package/themes/components/filter/filter.component.scss +0 -0
  253. package/themes/components/http-responses-pages/forbidden-403/forbidden-403.component.scss +19 -0
  254. package/themes/components/image/image.component.scss +0 -0
  255. package/themes/components/info-popover/info-popover.component.scss +3 -0
  256. package/themes/components/inputs/input-bool/input-bool.component.scss +14 -0
  257. package/themes/components/inputs/input-color/input-color.component.scss +48 -0
  258. package/themes/components/inputs/input-cpf-cnpj/input-cpf-cnpj.component.scss +0 -0
  259. package/themes/components/inputs/input-date/input-date.component.scss +41 -0
  260. package/themes/components/inputs/input-decimal/input-decimal.component.scss +44 -0
  261. package/themes/components/inputs/input-file/download-button/download-button.component.scss +3 -0
  262. package/themes/components/inputs/input-file/input-file.component.scss +3 -0
  263. package/themes/components/inputs/input-loading/input-loading.component.scss +0 -0
  264. package/themes/components/inputs/input-select/input-select-internal-option/input-select-internal-option.component.scss +0 -0
  265. package/themes/components/inputs/input-select/input-select-option/input-select-option.component.scss +0 -0
  266. package/themes/components/inputs/input-select/input-select.component.scss +28 -0
  267. package/themes/components/inputs/input-string/input-string.component.scss +0 -0
  268. package/themes/components/inputs/input-textarea/input-textarea.component.scss +0 -0
  269. package/themes/components/inputs/inputs.scss +67 -0
  270. package/themes/components/loading/loading.component.scss +0 -0
  271. package/themes/components/login/login-admin/login-admin.component.scss +3 -0
  272. package/themes/components/login/login.component.scss +40 -0
  273. package/themes/components/main-content/main-content.component.scss +9 -0
  274. package/themes/components/stepper/step/step.component.scss +48 -0
  275. package/themes/components/stepper/stepper.component.scss +0 -0
  276. package/themes/components/tabs/tab/tab.component.scss +0 -0
  277. package/themes/components/tabs/tabs/tabs.component.scss +23 -0
  278. package/themes/components/text-tooltip/text-tooltip.component.scss +0 -0
  279. package/themes/components/tooltip/tooltip.component.scss +23 -0
  280. package/themes/styles/components.scss +52 -0
  281. package/themes/styles/core.styles.scss +409 -0
  282. package/themes/styles/ionic/ion-action-sheet.scss +8 -0
  283. package/themes/styles/ionic/ion-alert.scss +9 -0
  284. package/themes/styles/ionic/ion-button.scss +3 -0
  285. package/themes/styles/ionic/ion-card.scss +3 -0
  286. package/themes/styles/ionic/ion-content.scss +3 -0
  287. package/themes/styles/ionic/ion-datetime.scss +6 -0
  288. package/themes/styles/ionic/ion-item.scss +10 -0
  289. package/themes/styles/ionic/ion-list.scss +4 -0
  290. package/themes/styles/ionic/ion-modal.scss +8 -0
  291. package/themes/styles/ionic/ion-popover.scss +31 -0
  292. package/themes/styles/ionic/ion-progress-bar.scss +3 -0
  293. package/themes/styles/ionic/ion-searchbar.scss +4 -0
  294. package/themes/styles/ionic/ion-toast.scss +14 -0
  295. package/themes/styles/ionic.scss +13 -0
  296. package/themes/styles/login-default.scss +87 -0
  297. package/themes/styles/mixins.scss +467 -0
  298. package/themes/styles/styles.scss +1 -0
  299. package/themes/styles/translucid.scss +21 -0
@@ -0,0 +1,269 @@
1
+ import { Component, ElementRef, Host, HostListener, Input, Optional, SkipSelf } from '@angular/core';
2
+ import { ControlContainer } from '@angular/forms';
3
+ import { formatNumber } from '@angular/common';
4
+ import { InputCurrencyConfiguration, InputDecimalConfiguration, InputNumberConfiguration } from './input-decimal.configuration';
5
+ import { InputProviderFactory } from '../input-provider-factory';
6
+ import { Timeout } from '../../../services/utils.service';
7
+ import { CustomInput } from '../custom-input';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "@angular/forms";
10
+ import * as i2 from "@angular/common";
11
+ import * as i3 from "@ionic/angular";
12
+ import * as i4 from "../input-loading/input-loading.component";
13
+ export class InputDecimalComponent extends CustomInput {
14
+ constructor(controlContainer, elementRef) {
15
+ super();
16
+ this.controlContainer = controlContainer;
17
+ this.elementRef = elementRef;
18
+ this.digitsInfo = "1.2-2";
19
+ this.altKey = false;
20
+ this.ctrlKey = false;
21
+ this.shiftKey = false;
22
+ this._model = 0;
23
+ }
24
+ async ngOnInit() {
25
+ super.ngOnInit();
26
+ this.HandleSelector();
27
+ this.setDivider();
28
+ }
29
+ setDigitsInfo() { this.digitsInfo = `1.${this.configuration.precision}-${this.configuration.precision}`; }
30
+ HandleSelector() {
31
+ const selector = this.elementRef.nativeElement.tagName.toLowerCase().split('-')[1];
32
+ if (selector == "number" && !this.configuration) {
33
+ this.configuration = new InputNumberConfiguration();
34
+ }
35
+ else if (selector == "decimal" && !this.configuration) {
36
+ this.configuration = new InputDecimalConfiguration();
37
+ }
38
+ else if (selector == "currency" && !this.configuration) {
39
+ this.configuration = new InputCurrencyConfiguration();
40
+ }
41
+ this.setDigitsInfo();
42
+ }
43
+ writeValue(value) { this._model = value; }
44
+ get model() {
45
+ var formated = formatNumber(this._model, "pt-BR", this.digitsInfo);
46
+ if (this.configuration.thousandSeparator) {
47
+ return formated;
48
+ }
49
+ else {
50
+ return formated.replaceAll(thousandSeparator, '');
51
+ }
52
+ }
53
+ set model(value) { this._model = value; this.propagateChange(this._model); }
54
+ //#region [ Event Handler ]
55
+ onKeyDown(event) {
56
+ this.eventType = 0;
57
+ this.event = event;
58
+ this.key = event.key;
59
+ this.altKey = this.event.altKey;
60
+ this.ctrlKey = this.event.ctrlKey;
61
+ this.shiftKey = this.event.shiftKey;
62
+ this.startPosition = event.target.selectionStart;
63
+ this.endPosition = event.target.selectionEnd;
64
+ this.value = event.target.value;
65
+ this.HandleBrowser();
66
+ }
67
+ onPaste(event) {
68
+ this.event.preventDefault();
69
+ let clipboardData = event.clipboardData || window['clipboardData'];
70
+ let pastedText = clipboardData.getData('text');
71
+ const s = pastedText.replaceAll('.', '').replaceAll(',', '.');
72
+ const n = Number(s);
73
+ if (Number(s) && isFinite(n)) {
74
+ this.model = n;
75
+ }
76
+ else {
77
+ }
78
+ event.preventDefault();
79
+ }
80
+ HandleBrowser() {
81
+ this.atLeft = this.value.slice(0, this.startPosition);
82
+ this.atRight = this.value.slice(this.endPosition, this.value.length);
83
+ if (["-"].includes(this.key)) {
84
+ return this.HandleNegative();
85
+ }
86
+ else if (["V", "v"].includes(this.key) && this.ctrlKey) {
87
+ //@HostListener('paste', ['$event'])
88
+ }
89
+ else if (lstNumbers.includes(this.key)) {
90
+ return this.HandleNumber();
91
+ }
92
+ else if (lstEspecialCases.includes(this.key)) {
93
+ return this.HandleEspecial();
94
+ }
95
+ else if (["A", "a"].includes(this.key) && this.ctrlKey) {
96
+ return;
97
+ }
98
+ else if (["C", "c"].includes(this.key) && this.ctrlKey) {
99
+ return this.HandleCopy();
100
+ }
101
+ else if (lstIgnoreNotPrevent.includes(this.key)) {
102
+ return;
103
+ }
104
+ else
105
+ this.event.preventDefault();
106
+ }
107
+ setDivider() {
108
+ var d = "1";
109
+ for (let i = 0; i < this.configuration.precision; i++) {
110
+ d += "0";
111
+ }
112
+ this.divider = Number(d);
113
+ }
114
+ async HandleNumber() {
115
+ this.event.preventDefault();
116
+ var focusEnd = this.startPosition == 0 && this.endPosition == this.model.length;
117
+ /** [ Remove decimalSeparator & thousandSeparator ] */
118
+ const f = this.atLeft + this.key + this.atRight;
119
+ const CurrentValue = this.SanitizeValue(f);
120
+ if (CurrentValue == this._model) {
121
+ return false;
122
+ }
123
+ if (CurrentValue > decimalMaxValue) {
124
+ return false;
125
+ }
126
+ //[ Handle Set Cursor Position]
127
+ this.model = CurrentValue;
128
+ const newPos = this.startPosition + 1 + this.model.split('.').length - this.value.split('.').length;
129
+ //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
130
+ await Timeout(0);
131
+ this.event.target.setSelectionRange(newPos, newPos);
132
+ if (focusEnd) {
133
+ this.event.target.setSelectionRange(this.model.length, this.model.length);
134
+ }
135
+ return false;
136
+ }
137
+ async HandleNegative() {
138
+ this.event.preventDefault();
139
+ var focusEnd = this.startPosition == 0 && this.endPosition == this.model.length;
140
+ /** [ Remove decimalSeparator & thousandSeparator ] */
141
+ var f;
142
+ if (!this.atLeft.includes('-')) {
143
+ f = this.key + this.atLeft + this.atRight;
144
+ }
145
+ else {
146
+ f = (this.atLeft + this.atRight).replace('-', '');
147
+ }
148
+ if (f == "-") {
149
+ if (this.value.includes('-')) {
150
+ f = this.value.replace('-', '');
151
+ }
152
+ else {
153
+ f = `-${this.value}`;
154
+ }
155
+ }
156
+ const CurrentValue = this.SanitizeValue(f);
157
+ if (CurrentValue == this._model) {
158
+ return false;
159
+ }
160
+ //[ Handle Set Cursor Position]
161
+ this.model = CurrentValue;
162
+ const newPos = this.startPosition + 1 + this.model.split('.').length - this.value.split('.').length;
163
+ //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
164
+ await Timeout(0);
165
+ this.event.target.setSelectionRange(newPos, newPos);
166
+ if (focusEnd) {
167
+ this.event.target.setSelectionRange(this.model.length, this.model.length);
168
+ }
169
+ return false;
170
+ }
171
+ async HandleEspecial() {
172
+ this.event.preventDefault();
173
+ if (this.startPosition == this.endPosition) {
174
+ if (this.key == "Backspace") {
175
+ if (this.startPosition == this.endPosition && this.startPosition == 0) {
176
+ return false;
177
+ }
178
+ const previousChar = this.atLeft[this.atLeft.length - 1];
179
+ const isNumber = lstNumbers.includes(previousChar);
180
+ const f = this.atLeft.slice(0, this.atLeft.length - (isNumber ? 1 : 2)) + this.atRight;
181
+ const CurrentValue = this.SanitizeValue(f);
182
+ //[ Handle Set Cursor Position]
183
+ this.model = CurrentValue;
184
+ await Timeout(0);
185
+ this.event.target.setSelectionRange(this.startPosition, this.startPosition);
186
+ return false;
187
+ }
188
+ else if (this.key == "Delete") {
189
+ const nextChar = this.atRight[0];
190
+ const isNumber = lstNumbers.includes(nextChar);
191
+ const f = this.atLeft + this.atRight.slice(isNumber ? 1 : 2);
192
+ const CurrentValue = this.SanitizeValue(f);
193
+ //[ Handle Set Cursor Position]
194
+ this.model = CurrentValue;
195
+ var newPos = this.startPosition - 1;
196
+ if (newPos <= -1) {
197
+ newPos = 0;
198
+ }
199
+ await Timeout(0);
200
+ this.event.target.setSelectionRange(newPos, newPos);
201
+ return false;
202
+ }
203
+ }
204
+ else {
205
+ const f = this.atLeft + this.atRight;
206
+ const CurrentValue = this.SanitizeValue(f);
207
+ this.model = CurrentValue;
208
+ await Timeout(0);
209
+ this.event.target.setSelectionRange(this.model.length, this.model.length);
210
+ return false;
211
+ }
212
+ }
213
+ async HandleCopy() {
214
+ //[ Not necessary, default behaviour might work ]
215
+ // this.event.preventDefault();
216
+ // var str = this.model;
217
+ // var lst = str.split('');
218
+ // lst.splice(this.endPosition, str.length - this.endPosition);
219
+ // lst.splice(0, this.startPosition)
220
+ // var copy = lst.join('').replaceAll(this.configuration.thousandSeparator, '').replace(this.configuration.decimalSeparator, '.');
221
+ // console.log(copy)
222
+ // Clipboard.write({string: copy}).catch(() => {
223
+ // navigator.clipboard.writeText(copy);
224
+ // });
225
+ }
226
+ SanitizeValue(f) {
227
+ var CurrentValue = Number(Sanitize(f)) / this.divider;
228
+ //[ Cancela se o valor for muito alto ]
229
+ if (CurrentValue >= decimalMaxValue) {
230
+ return this._model;
231
+ }
232
+ return CurrentValue;
233
+ }
234
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: InputDecimalComponent, deps: [{ token: i1.ControlContainer, host: true, optional: true, skipSelf: true }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
235
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: InputDecimalComponent, selector: "input-decimal, input-number, input-currency, inout-percentage", inputs: { configuration: "configuration" }, host: { listeners: { "keydown": "onKeyDown($event)", "paste": "onPaste($event)" } }, providers: InputProviderFactory.GetProvider(InputDecimalComponent), usesInheritance: true, ngImport: i0, template: "<div class=\"flex relative overflow-hidden\">\r\n <ion-card class=\"focus-within:on-focus ion-card-input\" [disabled]=\"loading || disabled\"\r\n [ngClass]=\"{\r\n 'invalid' : invalid,\r\n 'submitted': submitted,\r\n 'disabled': disabled,\r\n }\"\r\n >\r\n <ion-card-content>\r\n <div class=\"relative flex\">\r\n <ion-item class=\"w-full shrink-0\" [ngClass]=\"{'required' : required}\" lines=\"none\">\r\n <ion-input\r\n class=\"default-transition\" [value]=\"model\" labelPlacement=\"stacked\"\r\n >\r\n <ion-text [ngClass]=\"{'required': required}\" slot=\"label\"> {{label}} </ion-text>\r\n <span *ngIf=\"configuration.prefix\" slot=\"start\">{{configuration.prefix}}</span>\r\n <span *ngIf=\"configuration.sufix\" slot=\"end\" >{{configuration.sufix}}</span>\r\n </ion-input>\r\n </ion-item>\r\n </div>\r\n </ion-card-content>\r\n </ion-card>\r\n <input-loading [loading]=\"loading\"></input-loading>\r\n</div>", styles: ["ion-input{text-align:right}ion-item::part(native){transition-property:all;transition-duration:.3s;transition-timing-function:cubic-bezier(.4,0,.2,1)}ion-card{border-width:1px 1px 2px 1px!important;border-color:color-mix(in srgb,var(--ion-color-dark) 50%,transparent 50%);border-right-color:color-mix(in srgb,var(--ion-color-medium) 30%,transparent 70%);border-top-color:color-mix(in srgb,var(--ion-color-medium) 30%,transparent 70%);border-left-color:color-mix(in srgb,var(--ion-color-medium) 30%,transparent 70%);border-style:solid;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}ion-card.submitted.invalid{border-color:color-mix(in srgb,var(--ion-color-danger) 50%,transparent 50%)!important}ion-text.required:after{content:\"*\";color:var(--ion-color-danger);vertical-align:text-bottom;font-size:small}ion-text:not(.required):after{content:var(--input-opcional-label, \"(Opcional)\");color:var(--ion-color-medium);vertical-align:text-bottom;font-size:small}\n", ".on-hover{background:color-mix(in srgb,var(--ion-color-light) 97%,transparent 3%)}.on-hover:hover{transition-property:all;transition-duration:.3s;transition-timing-function:cubic-bezier(.4,0,.2,1);background:color-mix(in srgb,var(--ion-color-dark) 15%,transparent 93%)}ion-card.ion-card-input{margin:0;display:flex;height:100%;width:100%;align-items:center;justify-content:center;overflow:hidden;border-radius:1rem;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);transition-property:all;transition-duration:.3s;transition-timing-function:cubic-bezier(.4,0,.2,1);background:color-mix(in srgb,var(--ion-color-light) 97%,transparent 3%);border-bottom-color:var(--ion-color-medium);border-right-color:color-mix(in srgb,var(--ion-color-medium) 30%,transparent 70%);border-top-color:color-mix(in srgb,var(--ion-color-medium) 30%,transparent 70%);border-left-color:color-mix(in srgb,var(--ion-color-medium) 30%,transparent 70%);border-width:1px 1px 2px 1px;min-height:58px;max-height:58px;height:58px}ion-card.ion-card-input:hover{background:color-mix(in srgb,var(--ion-color-dark) 15%,transparent 93%)}ion-card.ion-card-input.submitted.invalid{border-color:color-mix(in srgb,var(--ion-color-danger) 75%,transparent 25%)!important}ion-card.ion-card-input.disabled{background-color:color-mix(in srgb,var(--ion-color-medium) 30%,transparent 70%)!important}ion-card.ion-card-input ion-card-content{width:100%;height:100%;background-color:transparent;padding:0}ion-item{--background: transparent}ion-text#label.required:after{content:\"*\";color:var(--ion-color-danger);vertical-align:text-bottom;font-size:small}ion-text#label:not(.required):after{content:var(--input-opcional-label, \"(Opcional)\");color:var(--ion-color-medium);vertical-align:text-bottom;font-size:small}.on-focus{border-bottom-color:var(--ion-color-primary)}.focus-within\\:on-focus:focus-within{border-bottom-color:var(--ion-color-primary)}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i3.IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: i3.IonInput, selector: "ion-input", inputs: ["autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearInputIcon", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "spellcheck", "step", "type", "value"] }, { 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.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "directive", type: i3.TextValueAccessor, selector: "ion-input:not([type=number]),ion-textarea,ion-searchbar" }, { kind: "component", type: i4.InputLoadingComponent, selector: "input-loading", inputs: ["loading"] }] }); }
236
+ }
237
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: InputDecimalComponent, decorators: [{
238
+ type: Component,
239
+ args: [{ selector: 'input-decimal, input-number, input-currency, inout-percentage', providers: InputProviderFactory.GetProvider(InputDecimalComponent), template: "<div class=\"flex relative overflow-hidden\">\r\n <ion-card class=\"focus-within:on-focus ion-card-input\" [disabled]=\"loading || disabled\"\r\n [ngClass]=\"{\r\n 'invalid' : invalid,\r\n 'submitted': submitted,\r\n 'disabled': disabled,\r\n }\"\r\n >\r\n <ion-card-content>\r\n <div class=\"relative flex\">\r\n <ion-item class=\"w-full shrink-0\" [ngClass]=\"{'required' : required}\" lines=\"none\">\r\n <ion-input\r\n class=\"default-transition\" [value]=\"model\" labelPlacement=\"stacked\"\r\n >\r\n <ion-text [ngClass]=\"{'required': required}\" slot=\"label\"> {{label}} </ion-text>\r\n <span *ngIf=\"configuration.prefix\" slot=\"start\">{{configuration.prefix}}</span>\r\n <span *ngIf=\"configuration.sufix\" slot=\"end\" >{{configuration.sufix}}</span>\r\n </ion-input>\r\n </ion-item>\r\n </div>\r\n </ion-card-content>\r\n </ion-card>\r\n <input-loading [loading]=\"loading\"></input-loading>\r\n</div>", styles: ["ion-input{text-align:right}ion-item::part(native){transition-property:all;transition-duration:.3s;transition-timing-function:cubic-bezier(.4,0,.2,1)}ion-card{border-width:1px 1px 2px 1px!important;border-color:color-mix(in srgb,var(--ion-color-dark) 50%,transparent 50%);border-right-color:color-mix(in srgb,var(--ion-color-medium) 30%,transparent 70%);border-top-color:color-mix(in srgb,var(--ion-color-medium) 30%,transparent 70%);border-left-color:color-mix(in srgb,var(--ion-color-medium) 30%,transparent 70%);border-style:solid;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}ion-card.submitted.invalid{border-color:color-mix(in srgb,var(--ion-color-danger) 50%,transparent 50%)!important}ion-text.required:after{content:\"*\";color:var(--ion-color-danger);vertical-align:text-bottom;font-size:small}ion-text:not(.required):after{content:var(--input-opcional-label, \"(Opcional)\");color:var(--ion-color-medium);vertical-align:text-bottom;font-size:small}\n", ".on-hover{background:color-mix(in srgb,var(--ion-color-light) 97%,transparent 3%)}.on-hover:hover{transition-property:all;transition-duration:.3s;transition-timing-function:cubic-bezier(.4,0,.2,1);background:color-mix(in srgb,var(--ion-color-dark) 15%,transparent 93%)}ion-card.ion-card-input{margin:0;display:flex;height:100%;width:100%;align-items:center;justify-content:center;overflow:hidden;border-radius:1rem;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);transition-property:all;transition-duration:.3s;transition-timing-function:cubic-bezier(.4,0,.2,1);background:color-mix(in srgb,var(--ion-color-light) 97%,transparent 3%);border-bottom-color:var(--ion-color-medium);border-right-color:color-mix(in srgb,var(--ion-color-medium) 30%,transparent 70%);border-top-color:color-mix(in srgb,var(--ion-color-medium) 30%,transparent 70%);border-left-color:color-mix(in srgb,var(--ion-color-medium) 30%,transparent 70%);border-width:1px 1px 2px 1px;min-height:58px;max-height:58px;height:58px}ion-card.ion-card-input:hover{background:color-mix(in srgb,var(--ion-color-dark) 15%,transparent 93%)}ion-card.ion-card-input.submitted.invalid{border-color:color-mix(in srgb,var(--ion-color-danger) 75%,transparent 25%)!important}ion-card.ion-card-input.disabled{background-color:color-mix(in srgb,var(--ion-color-medium) 30%,transparent 70%)!important}ion-card.ion-card-input ion-card-content{width:100%;height:100%;background-color:transparent;padding:0}ion-item{--background: transparent}ion-text#label.required:after{content:\"*\";color:var(--ion-color-danger);vertical-align:text-bottom;font-size:small}ion-text#label:not(.required):after{content:var(--input-opcional-label, \"(Opcional)\");color:var(--ion-color-medium);vertical-align:text-bottom;font-size:small}.on-focus{border-bottom-color:var(--ion-color-primary)}.focus-within\\:on-focus:focus-within{border-bottom-color:var(--ion-color-primary)}\n"] }]
240
+ }], ctorParameters: () => [{ type: i1.ControlContainer, decorators: [{
241
+ type: Optional
242
+ }, {
243
+ type: Host
244
+ }, {
245
+ type: SkipSelf
246
+ }] }, { type: i0.ElementRef }], propDecorators: { configuration: [{
247
+ type: Input
248
+ }], onKeyDown: [{
249
+ type: HostListener,
250
+ args: ['keydown', ['$event']]
251
+ }], onPaste: [{
252
+ type: HostListener,
253
+ args: ['paste', ['$event']]
254
+ }] } });
255
+ const decimalMaxValue = 9_000_000_000_000.00;
256
+ const decimalSeparator = ",";
257
+ const thousandSeparator = ".";
258
+ const Sanitize = ((v) => {
259
+ return v.replaceAll(thousandSeparator, '')
260
+ .replace(decimalSeparator, '');
261
+ });
262
+ const lstNumbers = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"];
263
+ const lstIgnoreNotPrevent = [
264
+ "Tab", "CapsLock", "Shift", "Control", "Alt", "ArrowRight", "ArrowUp", "ArrowDown", "ArrowLeft"
265
+ ];
266
+ const lstEspecialCases = [
267
+ "Backspace", "Delete"
268
+ ];
269
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtZGVjaW1hbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zYXBwaGlyZS1pb24tZnJhbWV3b3JrL3NyYy9saWIvY29tcG9uZW50cy9pbnB1dHMvaW5wdXQtZGVjaW1hbC9pbnB1dC1kZWNpbWFsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NhcHBoaXJlLWlvbi1mcmFtZXdvcmsvc3JjL2xpYi9jb21wb25lbnRzL2lucHV0cy9pbnB1dC1kZWNpbWFsL2lucHV0LWRlY2ltYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsT0FBTyxFQUFFLDBCQUEwQixFQUFFLHlCQUF5QixFQUFFLHdCQUF3QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDaEksT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDakUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzFELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7O0FBUTlDLE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxXQUFtQjtJQUk1RCxZQUVXLGdCQUFrQyxFQUNsQyxVQUFzQjtRQUM3QixLQUFLLEVBQUUsQ0FBQztRQUZELHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQVVqQyxlQUFVLEdBQVcsT0FB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R0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLENBQUMsQ0FBQztBQUM3RCxNQUFNLG1CQUFtQixHQUFHO0lBQzFCLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsV0FBVztDQUNoRyxDQUFDO0FBQ0YsTUFBTSxnQkFBZ0IsR0FBRztJQUN2QixXQUFXLEVBQUUsUUFBUTtDQUN0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBIb3N0LCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkluaXQsIE9wdGlvbmFsLCBTa2lwU2VsZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb250cm9sQ29udGFpbmVyIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBmb3JtYXROdW1iZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5cclxuaW1wb3J0IHsgSW5wdXRDdXJyZW5jeUNvbmZpZ3VyYXRpb24sIElucHV0RGVjaW1hbENvbmZpZ3VyYXRpb24sIElucHV0TnVtYmVyQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vaW5wdXQtZGVjaW1hbC5jb25maWd1cmF0aW9uJztcclxuaW1wb3J0IHsgSW5wdXRQcm92aWRlckZhY3RvcnkgfSBmcm9tICcuLi9pbnB1dC1wcm92aWRlci1mYWN0b3J5JztcclxuaW1wb3J0IHsgVGltZW91dCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDdXN0b21JbnB1dCB9IGZyb20gJy4uL2N1c3RvbS1pbnB1dCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2lucHV0LWRlY2ltYWwsIGlucHV0LW51bWJlciwgaW5wdXQtY3VycmVuY3ksIGlub3V0LXBlcmNlbnRhZ2UnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9pbnB1dC1kZWNpbWFsLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9pbnB1dC1kZWNpbWFsLmNvbXBvbmVudC5zY3NzJywgJy4uL2lucHV0cy5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBJbnB1dFByb3ZpZGVyRmFjdG9yeS5HZXRQcm92aWRlcihJbnB1dERlY2ltYWxDb21wb25lbnQpXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJbnB1dERlY2ltYWxDb21wb25lbnQgZXh0ZW5kcyBDdXN0b21JbnB1dDxudW1iZXI+IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgQElucHV0KCkgY29uZmlndXJhdGlvbjogSW5wdXREZWNpbWFsQ29uZmlndXJhdGlvbiB8IElucHV0TnVtYmVyQ29uZmlndXJhdGlvbiB8IElucHV0Q3VycmVuY3lDb25maWd1cmF0aW9uO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBPcHRpb25hbCgpIEBIb3N0KCkgQFNraXBTZWxmKClcclxuICAgIG92ZXJyaWRlIGNvbnRyb2xDb250YWluZXI6IENvbnRyb2xDb250YWluZXIsXHJcbiAgICBvdmVycmlkZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmXHJcbiAgKSB7IHN1cGVyKCk7IHRoaXMuX21vZGVsID0gMDsgfVxyXG5cclxuICBvdmVycmlkZSBhc3luYyBuZ09uSW5pdCgpIHtcclxuICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcblxyXG4gICAgdGhpcy5IYW5kbGVTZWxlY3RvcigpO1xyXG4gICAgdGhpcy5zZXREaXZpZGVyKCk7XHJcbiAgfVxyXG5cclxuICBkaWdpdHNJbmZvOiBzdHJpbmcgPSBcIjEuMi0yXCI7XHJcbiAgc2V0RGlnaXRzSW5mbygpOiB2b2lkIHsgdGhpcy5kaWdpdHNJbmZvID0gYDEuJHt0aGlzLmNvbmZpZ3VyYXRpb24ucHJlY2lzaW9ufS0ke3RoaXMuY29uZmlndXJhdGlvbi5wcmVjaXNpb259YDsgfVxyXG4gIEhhbmRsZVNlbGVjdG9yKCk6IHZvaWR7XHJcbiAgICBjb25zdCBzZWxlY3Rvcjogc3RyaW5nID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpLnNwbGl0KCctJylbMV07XHJcblxyXG4gICAgaWYoc2VsZWN0b3IgPT0gXCJudW1iZXJcIiAgICYmICF0aGlzLmNvbmZpZ3VyYXRpb24peyB0aGlzLmNvbmZpZ3VyYXRpb24gPSBuZXcgSW5wdXROdW1iZXJDb25maWd1cmF0aW9uKCk7ICAgfSBlbHNlXHJcbiAgICBpZihzZWxlY3RvciA9PSBcImRlY2ltYWxcIiAgJiYgIXRoaXMuY29uZmlndXJhdGlvbil7IHRoaXMuY29uZmlndXJhdGlvbiA9IG5ldyBJbnB1dERlY2ltYWxDb25maWd1cmF0aW9uKCk7ICB9IGVsc2VcclxuICAgIGlmKHNlbGVjdG9yID09IFwiY3VycmVuY3lcIiAmJiAhdGhpcy5jb25maWd1cmF0aW9uKXsgdGhpcy5jb25maWd1cmF0aW9uID0gbmV3IElucHV0Q3VycmVuY3lDb25maWd1cmF0aW9uKCk7IH1cclxuICAgIHRoaXMuc2V0RGlnaXRzSW5mbygpO1xyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgd3JpdGVWYWx1ZSh2YWx1ZTogbnVtYmVyKXsgdGhpcy5fbW9kZWwgPSB2YWx1ZTsgfVxyXG5cclxuICBvdmVycmlkZSBnZXQgbW9kZWwoKTogc3RyaW5nICAgICAgeyBcclxuICAgIHZhciBmb3JtYXRlZCA9IGZvcm1hdE51bWJlcih0aGlzLl9tb2RlbCwgXCJwdC1CUlwiLCB0aGlzLmRpZ2l0c0luZm8pO1xyXG4gICAgaWYodGhpcy5jb25maWd1cmF0aW9uLnRob3VzYW5kU2VwYXJhdG9yKXsgIFxyXG4gICAgICByZXR1cm4gZm9ybWF0ZWQ7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgcmV0dXJuIGZvcm1hdGVkLnJlcGxhY2VBbGwodGhvdXNhbmRTZXBhcmF0b3IsICcnKVxyXG4gICAgfSBcclxuICB9XHJcbiAgb3ZlcnJpZGUgc2V0IG1vZGVsKHZhbHVlOiBudW1iZXIpIHsgdGhpcy5fbW9kZWwgPSB2YWx1ZTsgdGhpcy5wcm9wYWdhdGVDaGFuZ2UodGhpcy5fbW9kZWwpOyB9XHJcblxyXG4gIC8vI3JlZ2lvbiBbIEV2ZW50IEhhbmRsZXIgXVxyXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxyXG4gIG9uS2V5RG93bihldmVudDogYW55KSB7XHJcbiAgICB0aGlzLmV2ZW50VHlwZSA9IDA7XHJcbiAgICB0aGlzLmV2ZW50ID0gZXZlbnQ7XHJcbiAgICB0aGlzLmtleSAgID0gZXZlbnQua2V5O1xyXG4gICAgXHJcbiAgICB0aGlzLmFsdEtleSAgID0gdGhpcy5ldmVudC5hbHRLZXk7XHJcbiAgICB0aGlzLmN0cmxLZXkgID0gdGhpcy5ldmVudC5jdHJsS2V5O1xyXG4gICAgdGhpcy5zaGlmdEtleSA9IHRoaXMuZXZlbnQuc2hpZnRLZXk7XHJcblxyXG4gICAgdGhpcy5zdGFydFBvc2l0aW9uID0gZXZlbnQudGFyZ2V0LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgdGhpcy5lbmRQb3NpdGlvbiAgID0gZXZlbnQudGFyZ2V0LnNlbGVjdGlvbkVuZDtcclxuXHJcbiAgICB0aGlzLnZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xyXG5cclxuICAgIHRoaXMuSGFuZGxlQnJvd3NlcigpO1xyXG4gIH1cclxuICBcclxuICBASG9zdExpc3RlbmVyKCdwYXN0ZScsIFsnJGV2ZW50J10pXHJcbiAgb25QYXN0ZShldmVudDogYW55KSB7XHJcbiAgICB0aGlzLmV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBcclxuICAgIGxldCBjbGlwYm9hcmREYXRhID0gZXZlbnQuY2xpcGJvYXJkRGF0YSB8fCB3aW5kb3dbJ2NsaXBib2FyZERhdGEnXTtcclxuICAgIGxldCBwYXN0ZWRUZXh0ID0gY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0Jyk7XHJcblxyXG4gICAgY29uc3QgcyA9IHBhc3RlZFRleHQucmVwbGFjZUFsbCgnLicsICcnKS5yZXBsYWNlQWxsKCcsJywgJy4nKTtcclxuICAgIGNvbnN0IG4gPSBOdW1iZXIocyk7XHJcblxyXG4gICAgaWYoTnVtYmVyKHMpICYmIGlzRmluaXRlKG4pKXsgXHJcbiAgICAgIHRoaXMubW9kZWwgPSBuO1xyXG4gICAgfSBlbHNle1xyXG5cclxuICAgIH1cclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgfVxyXG5cclxuICBrZXk6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XHJcbiAgXHJcbiAgYWx0S2V5ICA6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBjdHJsS2V5IDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNoaWZ0S2V5OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHN0YXJ0UG9zaXRpb24gOiBudW1iZXI7XHJcbiAgZW5kUG9zaXRpb24gICA6IG51bWJlcjtcclxuXHJcbiAgdmFsdWU6IHN0cmluZztcclxuXHJcbiAgZXZlbnQgICAgOiBhbnk7XHJcbiAgZXZlbnRUeXBlOiBudW1iZXI7XHJcbiAgXHJcbiAgYXRMZWZ0OiBzdHJpbmc7XHJcbiAgYXRSaWdodDogc3RyaW5nO1xyXG5cclxuICBIYW5kbGVCcm93c2VyKCl7XHJcbiAgICB0aGlzLmF0TGVmdCAgPSB0aGlzLnZhbHVlLnNsaWNlKDAsIHRoaXMuc3RhcnRQb3NpdGlvbik7IFxyXG4gICAgdGhpcy5hdFJpZ2h0ID0gdGhpcy52YWx1ZS5zbGljZSh0aGlzLmVuZFBvc2l0aW9uLCB0aGlzLnZhbHVlLmxlbmd0aCk7IFxyXG4gICAgaWYoW1wiLVwiXS5pbmNsdWRlcyh0aGlzLmtleSkpeyBcclxuICAgICAgcmV0dXJuIHRoaXMuSGFuZGxlTmVnYXRpdmUoKTtcclxuICAgIH1lbHNlXHJcbiAgICBpZihbXCJWXCIsIFwidlwiXS5pbmNsdWRlcyh0aGlzLmtleSkgJiYgdGhpcy5jdHJsS2V5KXsgXHJcbiAgICAgIC8vQEhvc3RMaXN0ZW5lcigncGFzdGUnLCBbJyRldmVudCddKVxyXG4gICAgfWVsc2VcclxuICAgIGlmKGxzdE51bWJlcnMuaW5jbHVkZXModGhpcy5rZXkpKXsgXHJcbiAgICAgIHJldHVybiB0aGlzLkhhbmRsZU51bWJlcigpOyBcclxuICAgIH1lbHNlXHJcbiAgICBpZihsc3RFc3BlY2lhbENhc2VzLmluY2x1ZGVzKHRoaXMua2V5KSl7IFxyXG4gICAgICByZXR1cm4gdGhpcy5IYW5kbGVFc3BlY2lhbCgpOyBcclxuICAgIH1lbHNlXHJcbiAgICBpZihbXCJBXCIsIFwiYVwiXS5pbmNsdWRlcyh0aGlzLmtleSkgJiYgdGhpcy5jdHJsS2V5KXsgXHJcbiAgICAgIHJldHVybjsgXHJcbiAgICB9ZWxzZVxyXG4gICAgaWYoW1wiQ1wiLCBcImNcIl0uaW5jbHVkZXModGhpcy5rZXkpICYmIHRoaXMuY3RybEtleSl7IFxyXG4gICAgICByZXR1cm4gdGhpcy5IYW5kbGVDb3B5KCk7IFxyXG4gICAgfWVsc2VcclxuICAgIGlmKGxzdElnbm9yZU5vdFByZXZlbnQuaW5jbHVkZXModGhpcy5rZXkpKXsgXHJcbiAgICAgIHJldHVybjsgXHJcbiAgICB9ZWxzZVxyXG4gICAgdGhpcy5ldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gIH1cclxuXHJcbiAgZGl2aWRlcjogbnVtYmVyO1xyXG4gIHNldERpdmlkZXIoKXtcclxuICAgIHZhciBkID0gXCIxXCI7XHJcbiAgICBmb3IobGV0IGkgPSAwOyBpIDwgdGhpcy5jb25maWd1cmF0aW9uLnByZWNpc2lvbjsgaSsrKXtcclxuICAgICAgZCArPSBcIjBcIjsgXHJcbiAgICB9XHJcbiAgICB0aGlzLmRpdmlkZXIgPSBOdW1iZXIoZCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBIYW5kbGVOdW1iZXIoKXtcclxuICAgIHRoaXMuZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICB2YXIgZm9jdXNFbmQgPSB0aGlzLnN0YXJ0UG9zaXRpb24gPT0gMCAmJiB0aGlzLmVuZFBvc2l0aW9uID09IHRoaXMubW9kZWwubGVuZ3RoO1xyXG4gICAgLyoqIFsgUmVtb3ZlIGRlY2ltYWxTZXBhcmF0b3IgJiB0aG91c2FuZFNlcGFyYXRvciBdICovXHJcbiAgICBjb25zdCBmID0gdGhpcy5hdExlZnQgKyB0aGlzLmtleSArIHRoaXMuYXRSaWdodDtcclxuICAgIGNvbnN0IEN1cnJlbnRWYWx1ZTogbnVtYmVyID0gdGhpcy5TYW5pdGl6ZVZhbHVlKGYpO1xyXG4gICAgaWYoQ3VycmVudFZhbHVlID09IHRoaXMuX21vZGVsKXsgcmV0dXJuIGZhbHNlOyB9XHJcbiAgICBpZihDdXJyZW50VmFsdWUgPiBkZWNpbWFsTWF4VmFsdWUpe1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vWyBIYW5kbGUgU2V0IEN1cnNvciBQb3NpdGlvbl1cclxuICAgIHRoaXMubW9kZWwgPSBDdXJyZW50VmFsdWU7XHJcbiAgICBjb25zdCBuZXdQb3MgPSB0aGlzLnN0YXJ0UG9zaXRpb24gKyAxICsgdGhpcy5tb2RlbC5zcGxpdCgnLicpLmxlbmd0aCAtIHRoaXMudmFsdWUuc3BsaXQoJy4nKS5sZW5ndGg7XHJcbiAgICBcclxuICAgIC8vSG9ycml2ZWwsIG1hcyBuYW8gc2VtIHVtYSBhbHRlcm5hdGl2YSBib2EsIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzUxMTA4OC91c2UtamF2YXNjcmlwdC10by1wbGFjZS1jdXJzb3ItYXQtZW5kLW9mLXRleHQtaW4tdGV4dC1pbnB1dC1lbGVtZW50XHJcbiAgICBhd2FpdCBUaW1lb3V0KDApO1xyXG4gICAgdGhpcy5ldmVudC50YXJnZXQuc2V0U2VsZWN0aW9uUmFuZ2UobmV3UG9zLCBuZXdQb3MpOyBcclxuICAgIGlmKGZvY3VzRW5kKXtcclxuICAgICAgdGhpcy5ldmVudC50YXJnZXQuc2V0U2VsZWN0aW9uUmFuZ2UodGhpcy5tb2RlbC5sZW5ndGgsIHRoaXMubW9kZWwubGVuZ3RoKTsgXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuIFxyXG4gIGFzeW5jIEhhbmRsZU5lZ2F0aXZlKCl7XHJcbiAgICB0aGlzLmV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgdmFyIGZvY3VzRW5kID0gdGhpcy5zdGFydFBvc2l0aW9uID09IDAgJiYgdGhpcy5lbmRQb3NpdGlvbiA9PSB0aGlzLm1vZGVsLmxlbmd0aDtcclxuICAgIC8qKiBbIFJlbW92ZSBkZWNpbWFsU2VwYXJhdG9yICYgdGhvdXNhbmRTZXBhcmF0b3IgXSAqL1xyXG4gICAgdmFyIGY7XHJcbiAgICBpZighdGhpcy5hdExlZnQuaW5jbHVkZXMoJy0nKSl7XHJcbiAgICAgIGYgPSB0aGlzLmtleSArIHRoaXMuYXRMZWZ0ICsgdGhpcy5hdFJpZ2h0O1xyXG4gICAgfWVsc2V7XHJcbiAgICAgIGYgPSAodGhpcy5hdExlZnQgKyB0aGlzLmF0UmlnaHQpLnJlcGxhY2UoJy0nLCAnJylcclxuICAgIH1cclxuICAgIGlmKGYgPT0gXCItXCIpeyBcclxuICAgICAgaWYodGhpcy52YWx1ZS5pbmNsdWRlcygnLScpKXtcclxuICAgICAgICBmID0gdGhpcy52YWx1ZS5yZXBsYWNlKCctJywgJycpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2V7XHJcbiAgICAgICAgZiA9IGAtJHt0aGlzLnZhbHVlfWA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBDdXJyZW50VmFsdWU6IG51bWJlciA9IHRoaXMuU2FuaXRpemVWYWx1ZShmKTtcclxuICAgIGlmKEN1cnJlbnRWYWx1ZSA9PSB0aGlzLl9tb2RlbCl7IHJldHVybiBmYWxzZTsgfVxyXG4gICAgXHJcbiAgICAvL1sgSGFuZGxlIFNldCBDdXJzb3IgUG9zaXRpb25dXHJcbiAgICB0aGlzLm1vZGVsID0gQ3VycmVudFZhbHVlO1xyXG4gICAgY29uc3QgbmV3UG9zID0gdGhpcy5zdGFydFBvc2l0aW9uICsgMSArIHRoaXMubW9kZWwuc3BsaXQoJy4nKS5sZW5ndGggLSB0aGlzLnZhbHVlLnNwbGl0KCcuJykubGVuZ3RoO1xyXG4gICAgXHJcbiAgICAvL0hvcnJpdmVsLCBtYXMgbmFvIHNlbSB1bWEgYWx0ZXJuYXRpdmEgYm9hLCBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy81MTEwODgvdXNlLWphdmFzY3JpcHQtdG8tcGxhY2UtY3Vyc29yLWF0LWVuZC1vZi10ZXh0LWluLXRleHQtaW5wdXQtZWxlbWVudFxyXG4gICAgYXdhaXQgVGltZW91dCgwKTtcclxuICAgIHRoaXMuZXZlbnQudGFyZ2V0LnNldFNlbGVjdGlvblJhbmdlKG5ld1BvcywgbmV3UG9zKTsgXHJcbiAgICBpZihmb2N1c0VuZCl7XHJcbiAgICAgIHRoaXMuZXZlbnQudGFyZ2V0LnNldFNlbGVjdGlvblJhbmdlKHRoaXMubW9kZWwubGVuZ3RoLCB0aGlzLm1vZGVsLmxlbmd0aCk7IFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgSGFuZGxlRXNwZWNpYWwoKXtcclxuICAgIHRoaXMuZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGlmKHRoaXMuc3RhcnRQb3NpdGlvbiA9PSB0aGlzLmVuZFBvc2l0aW9uKXtcclxuICAgICAgaWYodGhpcy5rZXkgPT0gXCJCYWNrc3BhY2VcIil7XHJcbiAgICAgICAgaWYodGhpcy5zdGFydFBvc2l0aW9uID09IHRoaXMuZW5kUG9zaXRpb24gJiYgdGhpcy5zdGFydFBvc2l0aW9uID09IDApeyByZXR1cm4gZmFsc2U7IH1cclxuXHJcbiAgICAgICAgY29uc3QgcHJldmlvdXNDaGFyOiBzdHJpbmcgPSB0aGlzLmF0TGVmdFt0aGlzLmF0TGVmdC5sZW5ndGggLSAxXTtcclxuICAgICAgICBjb25zdCBpc051bWJlciA9IGxzdE51bWJlcnMuaW5jbHVkZXMocHJldmlvdXNDaGFyKTtcclxuICAgICAgICBjb25zdCBmID0gdGhpcy5hdExlZnQuc2xpY2UoMCwgdGhpcy5hdExlZnQubGVuZ3RoIC0gKGlzTnVtYmVyID8gMSA6IDIpKSArIHRoaXMuYXRSaWdodDtcclxuICAgICAgICBjb25zdCBDdXJyZW50VmFsdWUgPSB0aGlzLlNhbml0aXplVmFsdWUoZik7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy9bIEhhbmRsZSBTZXQgQ3Vyc29yIFBvc2l0aW9uXVxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBDdXJyZW50VmFsdWU7XHJcbiAgICAgICAgYXdhaXQgVGltZW91dCgwKTtcclxuICAgICAgICB0aGlzLmV2ZW50LnRhcmdldC5zZXRTZWxlY3Rpb25SYW5nZSh0aGlzLnN0YXJ0UG9zaXRpb24sIHRoaXMuc3RhcnRQb3NpdGlvbik7IFxyXG4gICAgICAgIFxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfWVsc2VcclxuICAgICAgaWYodGhpcy5rZXkgPT0gXCJEZWxldGVcIil7XHJcbiAgICAgICAgY29uc3QgbmV4dENoYXI6IHN0cmluZyA9IHRoaXMuYXRSaWdodFswXTtcclxuICAgICAgICBjb25zdCBpc051bWJlciA9IGxzdE51bWJlcnMuaW5jbHVkZXMobmV4dENoYXIpO1xyXG4gICAgICAgIGNvbnN0IGYgPSB0aGlzLmF0TGVmdCArIHRoaXMuYXRSaWdodC5zbGljZShpc051bWJlciA/IDEgOiAyKTtcclxuICAgICAgICBjb25zdCBDdXJyZW50VmFsdWUgPSB0aGlzLlNhbml0aXplVmFsdWUoZik7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy9bIEhhbmRsZSBTZXQgQ3Vyc29yIFBvc2l0aW9uXVxyXG4gICAgICAgIHRoaXMubW9kZWwgPSBDdXJyZW50VmFsdWU7XHJcbiAgICAgICAgdmFyIG5ld1BvczogbnVtYmVyID0gdGhpcy5zdGFydFBvc2l0aW9uIC0gMVxyXG4gICAgICAgIGlmKG5ld1BvcyA8PSAtMSl7IG5ld1BvcyA9IDA7IH1cclxuXHJcbiAgICAgICAgYXdhaXQgVGltZW91dCgwKTtcclxuICAgICAgICB0aGlzLmV2ZW50LnRhcmdldC5zZXRTZWxlY3Rpb25SYW5nZShuZXdQb3MsIG5ld1Bvcyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9ZWxzZXtcclxuICAgICAgY29uc3QgZiA9IHRoaXMuYXRMZWZ0ICsgdGhpcy5hdFJpZ2h0O1xyXG4gICAgICBjb25zdCBDdXJyZW50VmFsdWUgPSB0aGlzLlNhbml0aXplVmFsdWUoZik7XHJcbiAgICAgIHRoaXMubW9kZWwgPSBDdXJyZW50VmFsdWU7XHJcbiAgICAgIFxyXG4gICAgICBhd2FpdCBUaW1lb3V0KDApO1xyXG4gICAgICB0aGlzLmV2ZW50LnRhcmdldC5zZXRTZWxlY3Rpb25SYW5nZSh0aGlzLm1vZGVsLmxlbmd0aCwgdGhpcy5tb2RlbC5sZW5ndGgpOyBcclxuXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIEhhbmRsZUNvcHkoKXtcclxuICAgIC8vWyBOb3QgbmVjZXNzYXJ5LCBkZWZhdWx0IGJlaGF2aW91ciBtaWdodCB3b3JrIF1cclxuICAgIC8vIHRoaXMuZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICAvLyB2YXIgc3RyID0gdGhpcy5tb2RlbDtcclxuICAgIC8vIHZhciBsc3QgPSBzdHIuc3BsaXQoJycpO1xyXG4gICAgLy8gbHN0LnNwbGljZSh0aGlzLmVuZFBvc2l0aW9uLCBzdHIubGVuZ3RoIC0gdGhpcy5lbmRQb3NpdGlvbik7XHJcbiAgICAvLyBsc3Quc3BsaWNlKDAsIHRoaXMuc3RhcnRQb3NpdGlvbilcclxuICAgIC8vIHZhciBjb3B5ID0gbHN0LmpvaW4oJycpLnJlcGxhY2VBbGwodGhpcy5jb25maWd1cmF0aW9uLnRob3VzYW5kU2VwYXJhdG9yLCAnJykucmVwbGFjZSh0aGlzLmNvbmZpZ3VyYXRpb24uZGVjaW1hbFNlcGFyYXRvciwgJy4nKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKGNvcHkpXHJcbiAgICAvLyBDbGlwYm9hcmQud3JpdGUoe3N0cmluZzogY29weX0pLmNhdGNoKCgpID0+IHtcclxuICAgIC8vICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoY29weSk7XHJcbiAgICAvLyB9KTtcclxuICB9XHJcblxyXG4gIFNhbml0aXplVmFsdWUoZjogc3RyaW5nKTogbnVtYmVye1xyXG4gICAgdmFyIEN1cnJlbnRWYWx1ZTogbnVtYmVyID0gTnVtYmVyKFNhbml0aXplKGYpKSAvIHRoaXMuZGl2aWRlcjtcclxuICAgIC8vWyBDYW5jZWxhIHNlIG8gdmFsb3IgZm9yIG11aXRvIGFsdG8gXVxyXG4gICAgaWYoQ3VycmVudFZhbHVlID49IGRlY2ltYWxNYXhWYWx1ZSl7IFxyXG4gICAgICByZXR1cm4gdGhpcy5fbW9kZWw7IFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIEN1cnJlbnRWYWx1ZTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIFsgRXZlbnQgSGFuZGxlciBdXHJcbn1cclxuXHJcbmNvbnN0IGRlY2ltYWxNYXhWYWx1ZSA9IDlfMDAwXzAwMF8wMDBfMDAwLjAwXHJcblxyXG5jb25zdCBkZWNpbWFsU2VwYXJhdG9yIDogc3RyaW5nID0gXCIsXCI7XHJcbmNvbnN0IHRob3VzYW5kU2VwYXJhdG9yOiBzdHJpbmcgPSBcIi5cIjtcclxuXHJcbmNvbnN0IFNhbml0aXplOiBGdW5jdGlvbiA9ICgodjogc3RyaW5nKTogc3RyaW5nID0+IHsgXHJcbiAgcmV0dXJuIHYucmVwbGFjZUFsbCh0aG91c2FuZFNlcGFyYXRvciwgJycpXHJcbiAgICAgICAgICAucmVwbGFjZSAgIChkZWNpbWFsU2VwYXJhdG9yICwgJycpIFxyXG4gICAgICAgIH0pO1xyXG5cclxuY29uc3QgbHN0TnVtYmVycyA9IFtcIjBcIixcIjFcIixcIjJcIixcIjNcIixcIjRcIixcIjVcIixcIjZcIixcIjdcIixcIjhcIixcIjlcIl07XHJcbmNvbnN0IGxzdElnbm9yZU5vdFByZXZlbnQgPSBbXHJcbiAgXCJUYWJcIiwgXCJDYXBzTG9ja1wiLCBcIlNoaWZ0XCIsIFwiQ29udHJvbFwiLCBcIkFsdFwiLCBcIkFycm93UmlnaHRcIiwgXCJBcnJvd1VwXCIsIFwiQXJyb3dEb3duXCIsIFwiQXJyb3dMZWZ0XCJcclxuXTtcclxuY29uc3QgbHN0RXNwZWNpYWxDYXNlcyA9IFtcclxuICBcIkJhY2tzcGFjZVwiLCBcIkRlbGV0ZVwiXHJcbl07IiwiPGRpdiBjbGFzcz1cImZsZXggcmVsYXRpdmUgb3ZlcmZsb3ctaGlkZGVuXCI+XHJcbiAgPGlvbi1jYXJkIGNsYXNzPVwiZm9jdXMtd2l0aGluOm9uLWZvY3VzIGlvbi1jYXJkLWlucHV0XCIgW2Rpc2FibGVkXT1cImxvYWRpbmcgfHwgZGlzYWJsZWRcIlxyXG4gICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgJ2ludmFsaWQnICA6IGludmFsaWQsXHJcbiAgICAgICAgJ3N1Ym1pdHRlZCc6IHN1Ym1pdHRlZCxcclxuICAgICAgICAnZGlzYWJsZWQnOiBkaXNhYmxlZCxcclxuICAgICAgfVwiXHJcbiAgICA+XHJcbiAgICA8aW9uLWNhcmQtY29udGVudD5cclxuICAgICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIGZsZXhcIj5cclxuICAgICAgICA8aW9uLWl0ZW0gY2xhc3M9XCJ3LWZ1bGwgc2hyaW5rLTBcIiBbbmdDbGFzc109XCJ7J3JlcXVpcmVkJyA6IHJlcXVpcmVkfVwiIGxpbmVzPVwibm9uZVwiPlxyXG4gICAgICAgICAgPGlvbi1pbnB1dFxyXG4gICAgICAgICAgICBjbGFzcz1cImRlZmF1bHQtdHJhbnNpdGlvblwiIFt2YWx1ZV09XCJtb2RlbFwiIGxhYmVsUGxhY2VtZW50PVwic3RhY2tlZFwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxpb24tdGV4dCBbbmdDbGFzc109XCJ7J3JlcXVpcmVkJzogcmVxdWlyZWR9XCIgc2xvdD1cImxhYmVsXCI+IHt7bGFiZWx9fSA8L2lvbi10ZXh0PlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbmZpZ3VyYXRpb24ucHJlZml4XCIgc2xvdD1cInN0YXJ0XCI+e3tjb25maWd1cmF0aW9uLnByZWZpeH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbmZpZ3VyYXRpb24uc3VmaXhcIiAgc2xvdD1cImVuZFwiICA+e3tjb25maWd1cmF0aW9uLnN1Zml4fX08L3NwYW4+XHJcbiAgICAgICAgICA8L2lvbi1pbnB1dD5cclxuICAgICAgICA8L2lvbi1pdGVtPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvaW9uLWNhcmQtY29udGVudD5cclxuICA8L2lvbi1jYXJkPlxyXG4gIDxpbnB1dC1sb2FkaW5nIFtsb2FkaW5nXT1cImxvYWRpbmdcIj48L2lucHV0LWxvYWRpbmc+XHJcbjwvZGl2PiJdfQ==
@@ -0,0 +1,45 @@
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
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtZGVjaW1hbC5jb25maWd1cmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2FwcGhpcmUtaW9uLWZyYW1ld29yay9zcmMvbGliL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0LWRlY2ltYWwvaW5wdXQtZGVjaW1hbC5jb25maWd1cmF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sT0FBTyx5QkFBeUI7SUFLcEM7SUFDRSxvREFBb0Q7SUFDN0MsWUFBb0IsQ0FBQztJQUM1QiwrQkFBK0I7SUFDL0IsU0FBd0IsSUFBSTtJQUM1Qiw0QkFBNEI7SUFDNUIsUUFBdUIsSUFBSTtJQUMzQiw2RUFBNkU7SUFDdEUsb0JBQTRCLEdBQUcsRUFDL0IsbUJBQTRCLEdBQUc7UUFQL0IsY0FBUyxHQUFULFNBQVMsQ0FBWTtRQU1yQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQWM7UUFDL0IscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFlO1FBRXRDLElBQUcsQ0FBQyxNQUFNLEVBQUMsQ0FBQztZQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQUMsQ0FBQzthQUFJLENBQUM7WUFBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUFDLENBQUM7UUFDN0QsSUFBRyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQUMsSUFBSSxDQUFDLEtBQUssR0FBSSxFQUFFLENBQUM7UUFBQyxDQUFDO2FBQUksQ0FBQztZQUFDLElBQUksQ0FBQyxLQUFLLEdBQUksS0FBSyxDQUFDO1FBQUMsQ0FBQztRQUU1RCxJQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztRQUN2QixJQUFHLFNBQVMsR0FBRyxDQUFDLEVBQUMsQ0FBQztZQUNoQixJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztZQUMxQyxLQUFJLElBQUksQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFDLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxXQUFXLElBQUksR0FBRyxDQUFDO1lBQzFCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBQ0QsTUFBTSxPQUFPLHdCQUF5QixTQUFRLHlCQUF5QjtJQUNyRSxZQUNFLFNBQWlCLEVBQUUsRUFDbkIsUUFBaUIsRUFBRSxFQUNuQixvQkFBNEIsR0FBRztRQUUvQixLQUFLLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztJQUM3QyxDQUFDO0NBQ0Y7QUFDRCxNQUFNLE9BQU8sMEJBQTJCLFNBQVEseUJBQXlCO0lBQ3ZFLFlBQVksU0FBaUIsSUFBSSxFQUFFLFFBQWdCLEVBQUUsRUFBRSxvQkFBNEIsR0FBRztRQUNwRixLQUFLLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztJQUM3QyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgSW5wdXREZWNpbWFsQ29uZmlndXJhdGlvbntcclxuICBwcmVmaXggICAgICA6IHN0cmluZztcclxuICBzdWZpeCAgICAgICA6IHN0cmluZztcclxuICBwbGFjZWhvbGRlciA6IHN0cmluZztcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICAvKiogRGVjbGFyYSBhIHF1YW50aWRhZGUgZGUgbnVtZXJvcyBhcG9zIG8gcG9udG8gICovXHJcbiAgICBwdWJsaWMgcHJlY2lzaW9uOiBudW1iZXIgPSAyLCBcclxuICAgIC8qKiBUZXh0byBubyBpbmljaW8gZG8gaW5wdXQgKi9cclxuICAgIHByZWZpeDogc3RyaW5nIHwgbnVsbCA9IG51bGwsIFxyXG4gICAgLyoqIFRleHRvIG5vIGZpbSBkbyBpbnB1dCAqL1xyXG4gICAgc3VmaXg6IHN0cmluZyB8IG51bGwgPSBudWxsLCBcclxuICAgIC8qKiBTZSA9IGZhbHNlIG7Do28gYXBsaWNhIHZpcmd1bGFzIG5vIGx1Z2FyIGRvIHNlcGFyYWRvciBhIGNhZGEgMyB1bmlkYWRlcyAqL1xyXG4gICAgcHVibGljIHRob3VzYW5kU2VwYXJhdG9yOiBzdHJpbmcgPSAnLicsXHJcbiAgICBwdWJsaWMgZGVjaW1hbFNlcGFyYXRvciA6IHN0cmluZyA9ICcsJ1xyXG4gICl7XHJcbiAgICBpZighcHJlZml4KXsgdGhpcy5wcmVmaXggPSAnJzsgfWVsc2V7IHRoaXMucHJlZml4ID0gcHJlZml4OyB9XHJcbiAgICBpZighc3VmaXggKXsgdGhpcy5zdWZpeCAgPSAnJzsgfWVsc2V7IHRoaXMuc3VmaXggID0gc3VmaXg7IH1cclxuXHJcbiAgICB0aGlzLnBsYWNlaG9sZGVyID0gXCItXCI7XHJcbiAgICBpZihwcmVjaXNpb24gPiAwKXtcclxuICAgICAgdGhpcy5wbGFjZWhvbGRlciArPSB0aGlzLmRlY2ltYWxTZXBhcmF0b3I7XHJcbiAgICAgIGZvcihsZXQgaSA9IHByZWNpc2lvbjsgaSA+IDA7IGktLSl7XHJcbiAgICAgICAgdGhpcy5wbGFjZWhvbGRlciArPSBcIi1cIjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufSBcclxuZXhwb3J0IGNsYXNzIElucHV0TnVtYmVyQ29uZmlndXJhdGlvbiBleHRlbmRzIElucHV0RGVjaW1hbENvbmZpZ3VyYXRpb24ge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJlZml4OiBzdHJpbmcgPSBcIlwiLCBcclxuICAgIHN1Zml4IDogc3RyaW5nID0gXCJcIiwgXHJcbiAgICB0aG91c2FuZFNlcGFyYXRvcjogc3RyaW5nID0gJy4nXHJcbiAgKXtcclxuICAgIHN1cGVyKDAsIHByZWZpeCwgc3VmaXgsIHRob3VzYW5kU2VwYXJhdG9yKTtcclxuICB9XHJcbn1cclxuZXhwb3J0IGNsYXNzIElucHV0Q3VycmVuY3lDb25maWd1cmF0aW9uIGV4dGVuZHMgSW5wdXREZWNpbWFsQ29uZmlndXJhdGlvbiB7XHJcbiAgY29uc3RydWN0b3IocHJlZml4OiBzdHJpbmcgPSBcIlIkXCIsIHN1Zml4OiBzdHJpbmcgPSBcIlwiLCB0aG91c2FuZFNlcGFyYXRvcjogc3RyaW5nID0gJy4nKXtcclxuICAgIHN1cGVyKDIsIHByZWZpeCwgc3VmaXgsIHRob3VzYW5kU2VwYXJhdG9yKTtcclxuICB9XHJcbn1cclxuIl19
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtZGVmYXVsdC1jb25maWd1cmF0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NhcHBoaXJlLWlvbi1mcmFtZXdvcmsvc3JjL2xpYi9jb21wb25lbnRzL2lucHV0cy9pbnB1dC1kZWZhdWx0LWNvbmZpZ3VyYXRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBRWxILE1BQU0sT0FBTywyQkFBMkI7YUFDdEIsbUNBQThCLEdBQThCLElBQUkseUJBQXlCLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQzthQUN4RywrQkFBMEIsR0FBa0MsSUFBSSx5QkFBeUIsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQ3pHLDRCQUF1QixHQUFxQyxJQUFJLHlCQUF5QixDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7YUFDM0csK0JBQTBCLEdBQWtDLElBQUkseUJBQXlCLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQzthQUN4RyxtQ0FBOEIsR0FBOEIsSUFBSSx5QkFBeUIsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO2FBRXpHLGtDQUE2QixHQUE2QixJQUFJLHdCQUF3QixDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQzthQUNsRyw4QkFBeUIsR0FBaUMsSUFBSSx3QkFBd0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDbkcsMkJBQXNCLEdBQW9DLElBQUksd0JBQXdCLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2FBQ3JHLDhCQUF5QixHQUFpQyxJQUFJLHdCQUF3QixDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQzthQUNsRyxrQ0FBNkIsR0FBNkIsSUFBSSx3QkFBd0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbnB1dERlY2ltYWxDb25maWd1cmF0aW9uLCBJbnB1dE51bWJlckNvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi9pbnB1dC1kZWNpbWFsL2lucHV0LWRlY2ltYWwuY29uZmlndXJhdGlvblwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIElucHV0c0RlZmF1bHRDb25maWd1cmF0aW9ucyB7XHJcbiAgc3RhdGljIHJlYWRvbmx5IGNvbmZpZ3VyYXRpb25EZWNpbWFsUGVyY2VudGFnZTogSW5wdXREZWNpbWFsQ29uZmlndXJhdGlvbiA9IG5ldyBJbnB1dERlY2ltYWxDb25maWd1cmF0aW9uKDIsIG51bGwsICclJyk7XHJcbiAgc3RhdGljIHJlYWRvbmx5IGNvbmZpZ3VyYXRpb25EZWNpbWFsRGVncmVlICAgIDogSW5wdXREZWNpbWFsQ29uZmlndXJhdGlvbiA9IG5ldyBJbnB1dERlY2ltYWxDb25maWd1cmF0aW9uKDIsIG51bGwsIFwiwrBDXCIpO1xyXG4gIHN0YXRpYyByZWFkb25seSBjb25maWd1cmF0aW9uRGVjaW1hbE0zSCAgICAgICA6IElucHV0RGVjaW1hbENvbmZpZ3VyYXRpb24gPSBuZXcgSW5wdXREZWNpbWFsQ29uZmlndXJhdGlvbigyLCBudWxsLCBcIm3Csy9oXCIpO1xyXG4gIHN0YXRpYyByZWFkb25seSBjb25maWd1cmF0aW9uRGVjaW1hbE1ldGVycyAgICA6IElucHV0RGVjaW1hbENvbmZpZ3VyYXRpb24gPSBuZXcgSW5wdXREZWNpbWFsQ29uZmlndXJhdGlvbigyLCBudWxsLCBcIm1cIik7XHJcbiAgc3RhdGljIHJlYWRvbmx5IGNvbmZpZ3VyYXRpb25EZWNpbWFsTWlsaW1ldGVyczogSW5wdXREZWNpbWFsQ29uZmlndXJhdGlvbiA9IG5ldyBJbnB1dERlY2ltYWxDb25maWd1cmF0aW9uKDIsIG51bGwsIFwibW1cIik7XHJcblxyXG4gIHN0YXRpYyByZWFkb25seSBjb25maWd1cmF0aW9uTnVtYmVyUGVyY2VudGFnZTogSW5wdXROdW1iZXJDb25maWd1cmF0aW9uID0gbmV3IElucHV0TnVtYmVyQ29uZmlndXJhdGlvbihudWxsLCAnJScpO1xyXG4gIHN0YXRpYyByZWFkb25seSBjb25maWd1cmF0aW9uTnVtYmVyRGVncmVlICAgIDogSW5wdXROdW1iZXJDb25maWd1cmF0aW9uID0gbmV3IElucHV0TnVtYmVyQ29uZmlndXJhdGlvbihudWxsLCBcIsKwQ1wiKTtcclxuICBzdGF0aWMgcmVhZG9ubHkgY29uZmlndXJhdGlvbk51bWJlck0zSCAgICAgICA6IElucHV0TnVtYmVyQ29uZmlndXJhdGlvbiA9IG5ldyBJbnB1dE51bWJlckNvbmZpZ3VyYXRpb24obnVsbCwgXCJtwrMvaFwiKTtcclxuICBzdGF0aWMgcmVhZG9ubHkgY29uZmlndXJhdGlvbk51bWJlck1ldGVycyAgICA6IElucHV0TnVtYmVyQ29uZmlndXJhdGlvbiA9IG5ldyBJbnB1dE51bWJlckNvbmZpZ3VyYXRpb24obnVsbCwgXCJtXCIpO1xyXG4gIHN0YXRpYyByZWFkb25seSBjb25maWd1cmF0aW9uTnVtYmVyTWlsaW1ldGVyczogSW5wdXROdW1iZXJDb25maWd1cmF0aW9uID0gbmV3IElucHV0TnVtYmVyQ29uZmlndXJhdGlvbihudWxsLCBcIm1tXCIpO1xyXG59Il19
@@ -0,0 +1,91 @@
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 { imageTypes } from '../input-file.component';
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 "@angular/common";
12
+ import * as i4 from "@ionic/angular";
13
+ import * as i5 from "../../../../directives/ng-var.directive";
14
+ import * as i6 from "../../../loading/loading.component";
15
+ import * as i7 from "../../input-loading/input-loading.component";
16
+ export class DownloadButtonComponent {
17
+ constructor(storageService, elementRef, apiUrlProviderService) {
18
+ this.storageService = storageService;
19
+ this.elementRef = elementRef;
20
+ this.apiUrlProviderService = apiUrlProviderService;
21
+ this.expand = "";
22
+ this.value = model();
23
+ this.size = "small";
24
+ this.post = false;
25
+ this.configuration = new InputFileConfiguration();
26
+ this.guid = "";
27
+ this.lstFiles = computed(() => {
28
+ if (typeof (this.value()) == "string") {
29
+ return this.value().split(';');
30
+ }
31
+ else {
32
+ return [];
33
+ }
34
+ });
35
+ this.lstLoading = [];
36
+ }
37
+ registerOnChange(fn) {
38
+ //throw new Error('Method not implemented.');
39
+ }
40
+ registerOnTouched(fn) {
41
+ //throw new Error('Method not implemented.');
42
+ }
43
+ setDisabledState(isDisabled) {
44
+ //throw new Error('Method not implemented.');
45
+ }
46
+ ngOnInit() {
47
+ this.apiUrl = this.apiUrlProviderService.apiUrl;
48
+ this.guid = `${Utils.GenerateGUID()}${this.elementRef.nativeElement.tagName.toLowerCase()}`;
49
+ }
50
+ writeValue(value) { this.value.set(value); }
51
+ Download(value) {
52
+ this.storageService.StartDownload(value, this.params, this.post);
53
+ }
54
+ Sanitize(v) {
55
+ return StorageService.SanitizeFileName(v);
56
+ }
57
+ ExtensionIsImage(v) {
58
+ try {
59
+ return imageTypes.includes(v.split('.')[v.split('.').length - 1]);
60
+ }
61
+ catch { }
62
+ }
63
+ SetLoading(path) {
64
+ this.lstLoading.push(path);
65
+ }
66
+ SetNotLoading(path) {
67
+ this.lstLoading.splice(this.lstLoading.indexOf(path), 1);
68
+ }
69
+ isLoading(path) {
70
+ return this.lstLoading.indexOf(path) != -1;
71
+ }
72
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DownloadButtonComponent, deps: [{ token: i1.StorageService }, { token: i0.ElementRef }, { token: i2.ApiUrlProviderService }], target: i0.ɵɵFactoryTarget.Component }); }
73
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", 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 }, 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 } }, outputs: { value: "valueChange" }, providers: InputProviderFactory.GetProvider(DownloadButtonComponent), ngImport: i0, template: "@if(lstFiles().length == 0){\r\n <ion-button 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 *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> {{Sanitize(lstFiles()[0])}} </ion-label>\r\n <input-loading [loading]=\"val != 0\"></input-loading>\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 <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 [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: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.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: i4.IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i4.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i4.IonImg, selector: "ion-img", inputs: ["alt", "src"] }, { kind: "component", type: i4.IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i4.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i4.IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: i4.IonProgressBar, selector: "ion-progress-bar", inputs: ["buffer", "color", "mode", "reversed", "type", "value"] }, { kind: "component", type: i4.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: i4.IonPopover, selector: "ion-popover" }, { kind: "directive", type: i5.NgVarDirective, selector: "[ngVar]", inputs: ["ngVar"] }, { kind: "component", type: i6.LoadingComponent, selector: "loading", inputs: ["text", "type", "loading"] }, { kind: "component", type: i7.InputLoadingComponent, selector: "input-loading", inputs: ["loading"] }, { kind: "pipe", type: i3.DecimalPipe, name: "number" }] }); }
74
+ }
75
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DownloadButtonComponent, decorators: [{
76
+ type: Component,
77
+ args: [{ selector: 'download-button', providers: InputProviderFactory.GetProvider(DownloadButtonComponent), template: "@if(lstFiles().length == 0){\r\n <ion-button 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 *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> {{Sanitize(lstFiles()[0])}} </ion-label>\r\n <input-loading [loading]=\"val != 0\"></input-loading>\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 <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 [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"] }]
78
+ }], ctorParameters: () => [{ type: i1.StorageService }, { type: i0.ElementRef }, { type: i2.ApiUrlProviderService }], propDecorators: { expand: [{
79
+ type: Input
80
+ }], size: [{
81
+ type: Input
82
+ }], params: [{
83
+ type: Input
84
+ }], disabled: [{
85
+ type: Input
86
+ }], post: [{
87
+ type: Input
88
+ }], configuration: [{
89
+ type: Input
90
+ }] } });
91
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG93bmxvYWQtYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NhcHBoaXJlLWlvbi1mcmFtZXdvcmsvc3JjL2xpYi9jb21wb25lbnRzL2lucHV0cy9pbnB1dC1maWxlL2Rvd25sb2FkLWJ1dHRvbi9kb3dubG9hZC1idXR0b24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2FwcGhpcmUtaW9uLWZyYW1ld29yay9zcmMvbGliL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0LWZpbGUvZG93bmxvYWQtYnV0dG9uL2Rvd25sb2FkLWJ1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFHbkcsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDckUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDMUYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7Ozs7Ozs7OztBQVEzRCxNQUFNLE9BQU8sdUJBQXVCO0lBVWxDLFlBQ1MsY0FBOEIsRUFDN0IsVUFBc0IsRUFDdEIscUJBQTRDO1FBRjdDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM3QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBdUI7UUFYN0MsV0FBTSxH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SztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgRWxlbWVudFJlZiwgSW5wdXQsIG1vZGVsLCBNb2RlbFNpZ25hbCwgU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuaW1wb3J0IHsgSW5wdXRGaWxlQ29uZmlndXJhdGlvbiB9IGZyb20gJy4uL2lucHV0LWZpbGUuY29uZmlndXJhdGlvbic7XHJcbmltcG9ydCB7IEFwaVVybFByb3ZpZGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3dlYi9hcGktdXJsLXByb3ZpZGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJbnB1dFByb3ZpZGVyRmFjdG9yeSB9IGZyb20gJy4uLy4uL2lucHV0LXByb3ZpZGVyLWZhY3RvcnknO1xyXG5pbXBvcnQgeyBTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3dlYi9zdG9yYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBpbWFnZVR5cGVzIH0gZnJvbSAnLi4vaW5wdXQtZmlsZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBVdGlscyB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxzLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdkb3dubG9hZC1idXR0b24nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kb3dubG9hZC1idXR0b24uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2Rvd25sb2FkLWJ1dHRvbi5jb21wb25lbnQuc2NzcyddLFxyXG4gIHByb3ZpZGVyczogSW5wdXRQcm92aWRlckZhY3RvcnkuR2V0UHJvdmlkZXIoRG93bmxvYWRCdXR0b25Db21wb25lbnQpXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEb3dubG9hZEJ1dHRvbkNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuXHJcbiAgQElucHV0KCkgZXhwYW5kOiBzdHJpbmcgPSBcIlwiO1xyXG4gIHZhbHVlOiBNb2RlbFNpZ25hbDxzdHJpbmc+ID0gbW9kZWw8c3RyaW5nPigpO1xyXG4gIEBJbnB1dCgpIHNpemU6IHN0cmluZyA9IFwic21hbGxcIjtcclxuICBASW5wdXQoKSBwYXJhbXM6IGFueTtcclxuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbjtcclxuICBASW5wdXQoKSBwb3N0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgY29uZmlndXJhdGlvbjogSW5wdXRGaWxlQ29uZmlndXJhdGlvbiA9IG5ldyBJbnB1dEZpbGVDb25maWd1cmF0aW9uKCk7XHJcbiAgXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgc3RvcmFnZVNlcnZpY2U6IFN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxyXG4gICAgcHJpdmF0ZSBhcGlVcmxQcm92aWRlclNlcnZpY2U6IEFwaVVybFByb3ZpZGVyU2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgLy90aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XHJcbiAgfVxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIC8vdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xyXG4gIH1cclxuICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAvL3Rocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcclxuICB9XHJcblxyXG4gIGd1aWQgOiBzdHJpbmcgPSBcIlwiO1xyXG4gIGFwaVVybDogc3RyaW5nO1xyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuYXBpVXJsID0gdGhpcy5hcGlVcmxQcm92aWRlclNlcnZpY2UuYXBpVXJsO1xyXG4gICAgdGhpcy5ndWlkICA9IGAke1V0aWxzLkdlbmVyYXRlR1VJRCgpfSR7dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpfWBcclxuICB9XHJcblxyXG4gIGxzdEZpbGVzOiBTaWduYWw8c3RyaW5nW10+ID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgaWYodHlwZW9mKHRoaXMudmFsdWUoKSkgPT0gXCJzdHJpbmdcIil7XHJcbiAgICAgIHJldHVybiB0aGlzLnZhbHVlKCkuc3BsaXQoJzsnKTtcclxuICAgIH1lbHNle1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIHdyaXRlVmFsdWUodmFsdWU6IHN0cmluZyk6IHZvaWQgeyB0aGlzLnZhbHVlLnNldCh2YWx1ZSk7IH1cclxuXHJcbiAgRG93bmxvYWQodmFsdWU6IHN0cmluZyk6IHZvaWR7XHJcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLlN0YXJ0RG93bmxvYWQodmFsdWUsIHRoaXMucGFyYW1zLCB0aGlzLnBvc3QpO1xyXG4gIH1cclxuXHJcbiAgU2FuaXRpemUodik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gU3RvcmFnZVNlcnZpY2UuU2FuaXRpemVGaWxlTmFtZSh2KTtcclxuICB9XHJcblxyXG4gIEV4dGVuc2lvbklzSW1hZ2Uodil7XHJcbiAgICB0cnl7XHJcbiAgICAgIHJldHVybiBpbWFnZVR5cGVzLmluY2x1ZGVzKHYuc3BsaXQoJy4nKVt2LnNwbGl0KCcuJykubGVuZ3RoIC0gMV0pXHJcbiAgICB9Y2F0Y2h7fVxyXG4gIH1cclxuXHJcbiAgbHN0TG9hZGluZzogc3RyaW5nW10gPSBbXTtcclxuICBTZXRMb2FkaW5nKHBhdGg6IHN0cmluZyl7XHJcbiAgICB0aGlzLmxzdExvYWRpbmcucHVzaChwYXRoKTtcclxuICB9XHJcbiAgU2V0Tm90TG9hZGluZyhwYXRoOiBzdHJpbmcpe1xyXG4gICAgdGhpcy5sc3RMb2FkaW5nLnNwbGljZSh0aGlzLmxzdExvYWRpbmcuaW5kZXhPZihwYXRoKSwgMSk7XHJcbiAgfVxyXG4gIGlzTG9hZGluZyhwYXRoOiBzdHJpbmcpe1xyXG4gICAgcmV0dXJuIHRoaXMubHN0TG9hZGluZy5pbmRleE9mKHBhdGgpICE9IC0xO1xyXG4gIH1cclxufVxyXG4iLCJAaWYobHN0RmlsZXMoKS5sZW5ndGggPT0gMCl7XHJcbiAgPGlvbi1idXR0b24gZmlsbD1cIm91dGxpbmVcIiBbZGlzYWJsZWRdPVwidHJ1ZVwiIFtzaXplXT1cInNpemVcIj4gXHJcbiAgICA8aW9uLWljb24gbmFtZT1cImNsb3NlLWNpcmNsZVwiIHNsb3Q9XCJzdGFydFwiPjwvaW9uLWljb24+ICBcclxuICAgIDxpb24tbGFiZWw+IFNlbSBhcnF1aXZvcy4uLiA8L2lvbi1sYWJlbD5cclxuICA8L2lvbi1idXR0b24+XHJcbn1cclxuQGVsc2UgaWYobHN0RmlsZXMoKS5sZW5ndGggPT0gMSl7XHJcbiAgPGlvbi1idXR0b24gKm5nVmFyPVwic3RvcmFnZVNlcnZpY2UuR2V0UHJvZ3Jlc3MobHN0RmlsZXMoKVswXSkgYXMgdmFsXCIgY2xhc3M9XCJyZWxhdGl2ZSBibG9jayB7e2V4cGFuZCA9PSAnYmxvY2snID8gJ3NpemUtZnVsbCcgOiAnJ319XCIgW2Rpc2FibGVkXT1cInZhbCAhPSAwIHx8IGRpc2FibGVkXCIgKGNsaWNrKT1cIkRvd25sb2FkKGxzdEZpbGVzKClbMF0pXCIgZmlsbD1cIm91dGxpbmVcIiBbc2l6ZV09XCJzaXplXCI+IFxyXG4gICAgPGlvbi1pY29uIG5hbWU9XCJkb3dubG9hZFwiIHNsb3Q9XCJzdGFydFwiPjwvaW9uLWljb24+ICBcclxuICAgIDxpb24tbGFiZWw+IHt7U2FuaXRpemUobHN0RmlsZXMoKVswXSl9fSA8L2lvbi1sYWJlbD5cclxuICAgIDxpbnB1dC1sb2FkaW5nIFtsb2FkaW5nXT1cInZhbCAhPSAwXCI+PC9pbnB1dC1sb2FkaW5nPlxyXG4gICAgPGRpdiBjbGFzcz1cImFic29sdXRlIHNpemUtZnVsbCBoLVtjYWxjKDEwMCUrdmFyKC0tcGFkZGluZy10b3ApK3ZhcigtLXBhZGRpbmctYm90dG9tKSldIHctW2NhbGMoMTAwJSt2YXIoLS1wYWRkaW5nLWVuZCkrdmFyKC0tcGFkZGluZy1zdGFydCkpXVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic2l6ZS1mdWxsIGZsZXggZmxleC1yb3ctcmV2ZXJzZSByZWxhdGl2ZVwiPlxyXG4gICAgICAgIDxpb24tcHJvZ3Jlc3MtYmFyIGNsYXNzPVwiYWJzb2x1dGUgYm90dG9tLTAgbGVmdC0wIHctZnVsbCBoLTEgZGVmYXVsdC10cmFuc2l0aW9uXCIgW25nQ2xhc3NdPVwieyctdHJhbnNsYXRlLXktNCBvcGFjaXR5LTAnOiAoIXZhbCB8fCB2YWwgPT0gMCl9XCIgW3ZhbHVlXT1cInZhbFwiPjwvaW9uLXByb2dyZXNzLWJhcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2lvbi1idXR0b24+XHJcbn1cclxuQGVsc2V7XHJcbiAgPGlvbi1idXR0b24gW2lkXT1cImd1aWRcIiBmaWxsPVwib3V0bGluZVwiIFtzaXplXT1cInNpemVcIj4gXHJcbiAgICA8aW9uLWljb24gbmFtZT1cImRvd25sb2FkXCIgc2xvdD1cInN0YXJ0XCI+PC9pb24taWNvbj4gIFxyXG4gICAgPGlvbi1sYWJlbD4ge3tsc3RGaWxlcygpLmxlbmd0aH19IEFycXVpdm9zIDwvaW9uLWxhYmVsPlxyXG4gIDwvaW9uLWJ1dHRvbj5cclxuXHJcbiAgPGlvbi1wb3BvdmVyIFt0cmlnZ2VyXT1cImd1aWRcIiBba2VlcENvbnRlbnRzTW91bnRlZF09XCJ0cnVlXCIgdHJpZ2dlckFjdGlvbj1cImNsaWNrXCI+XHJcbiAgICA8bmctdGVtcGxhdGU+XHJcbiAgICAgIDxpb24tY29udGVudCBjbGFzcz1cInAtMCBiZy10cmFuc3BhcmVudFwiPlxyXG4gICAgICAgIDxpb24tbGlzdD5cclxuICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgbHN0RmlsZXMoKTsgdHJhY2sgaXRlbTsgbGV0IGkgPSAkaW5kZXg7IGxldCBsID0gJGxhc3QpIHtcclxuICAgICAgICAgICAgPHNlY3Rpb24gKm5nVmFyPVwic3RvcmFnZVNlcnZpY2UuR2V0UHJvZ3Jlc3MoaXRlbSkgYXMgdmFsXCI+XHJcbiAgICAgICAgICAgICAgPGlvbi1pdGVtIHN0eWxlPVwiLS1iYWNrZ3JvdW5kOiB0cmFuc3BhcmVudFwiIGxpbmVzPVwie3tsID8gJ25vbmUnIDogJ2Z1bGwnfX1cIiBidXR0b24gW2RldGFpbF09XCJmYWxzZVwiPlxyXG5cclxuICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiZG93bmxvYWRcIiAoY2xpY2spPVwiRG93bmxvYWQoaXRlbSlcIiBzbG90PVwic3RhcnRcIj48L2lvbi1pY29uPiBcclxuICAgICAgICAgICAgICAgIEBpZiAoRXh0ZW5zaW9uSXNJbWFnZShpdGVtKSkge1xyXG4gICAgICAgICAgICAgICAgICA8aW9uLWljb24gW2lkXT1cImd1aWQgKyAnLScgKyBpICsgJy1uZXN0ZWQtcG9wb3ZlcidcIiBuYW1lPVwiaW1hZ2VcIiBzbG90PVwic3RhcnRcIj48L2lvbi1pY29uPiBcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICA8aW9uLWxhYmVsPnt7U2FuaXRpemUoaXRlbSl9fTwvaW9uLWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGlvbi10ZXh0ICpuZ0lmPVwidmFsICE9IDBcIiBzbG90PVwiZW5kXCIgY2xhc3M9XCJ0ZXh0LXNtXCI+PGI+e3t2YWwgKiAxMDAgfCBudW1iZXIgOiAnMS4yLTInfX0lPC9iPjwvaW9uLXRleHQ+XHJcbiAgICAgICAgICAgICAgPC9pb24taXRlbT5cclxuICAgICAgICAgICAgICA8aW9uLXByb2dyZXNzLWJhciBjbGFzcz1cImgtMCBkZWZhdWx0LXRyYW5zaXRpb25cIiBbbmdDbGFzc109XCJ7J2gtMSc6IHZhbCAhPSAwIH1cIiBbdmFsdWVdPVwidmFsXCI+PC9pb24tcHJvZ3Jlc3MtYmFyPlxyXG4gICAgICAgICAgICAgIDxpb24tcG9wb3ZlciAqbmdJZj1cIkV4dGVuc2lvbklzSW1hZ2UoaXRlbSlcIiBzaWRlPVwiZW5kXCIgYWxpZ25tZW50PVwiY2VudGVyXCIgW3RyaWdnZXJdPVwiZ3VpZCArICctJyArIGkgKyAnLW5lc3RlZC1wb3BvdmVyJ1wiIFtkaXNtaXNzT25TZWxlY3RdPVwidHJ1ZVwiIHRyaWdnZXJBY3Rpb249XCJjbGlja1wiPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICA8aW9uLWNvbnRlbnQgKm5nVmFyPVwiaXNMb2FkaW5nKGl0ZW0pIGFzIGlzTG9hZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsb2FkaW5nICAgIFtoaWRkZW5dPVwiIWlzTG9hZGluZ1wiPjwvbG9hZGluZz5cclxuICAgICAgICAgICAgICAgICAgICA8aW9uLWltZyAgICBbaGlkZGVuXT1cImlzTG9hZGluZ1wiIFtzcmNdPVwiYXBpVXJsICsgaXRlbVwiIChpb25JbWdXaWxsTG9hZCk9XCJTZXRMb2FkaW5nKGl0ZW0pXCIgKGlvbkltZ0RpZExvYWQpPVwiU2V0Tm90TG9hZGluZyhpdGVtKVwiPjwvaW9uLWltZz5cclxuICAgICAgICAgICAgICAgICAgPC9pb24tY29udGVudD5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgPC9pb24tcG9wb3Zlcj5cclxuICAgICAgICAgICAgPC9zZWN0aW9uPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgPC9pb24tbGlzdD5cclxuICAgICAgPC9pb24tY29udGVudD5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9pb24tcG9wb3Zlcj5cclxufSJdfQ==