@sapphire-ion/framework 1.3.5 → 1.3.8

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 (498) hide show
  1. package/esm2022/lib/classes/comparison/comparison-operator.mjs +18 -0
  2. package/esm2022/lib/classes/comparison/comparison-value-type.mjs +25 -0
  3. package/esm2022/lib/classes/comparison/comparison.mjs +41 -0
  4. package/esm2022/lib/classes/comparison/properties/bool-property.mjs +15 -0
  5. package/esm2022/lib/classes/comparison/properties/date-property.mjs +27 -0
  6. package/esm2022/lib/classes/comparison/properties/datetime-property.mjs +27 -0
  7. package/esm2022/lib/classes/comparison/properties/decimal-property.mjs +27 -0
  8. package/esm2022/lib/classes/comparison/properties/enum-property.mjs +27 -0
  9. package/esm2022/lib/classes/comparison/properties/implicit-property.mjs +12 -0
  10. package/esm2022/lib/classes/comparison/properties/int-property.mjs +27 -0
  11. package/esm2022/lib/classes/comparison/properties/long-property.mjs +27 -0
  12. package/esm2022/lib/classes/comparison/properties/string-property.mjs +15 -0
  13. package/esm2022/lib/classes/comparison/properties/time-property.mjs +27 -0
  14. package/esm2022/lib/classes/credentials.mjs +2 -0
  15. package/esm2022/lib/classes/environment.mjs +34 -0
  16. package/esm2022/lib/classes/filters/view-filtros.mjs +18 -0
  17. package/esm2022/lib/classes/infinite-scroll.mjs +90 -0
  18. package/esm2022/lib/classes/inputs/table-field-form-builder.mjs +10 -0
  19. package/esm2022/lib/classes/inputs/table-field.mjs +79 -0
  20. package/esm2022/lib/classes/page-option.mjs +2 -0
  21. package/esm2022/lib/classes/routes/default-routing-factory.mjs +23 -0
  22. package/esm2022/lib/classes/routes/id-preloader-configuration.mjs +22 -0
  23. package/esm2022/lib/classes/routes/route-data.mjs +9 -0
  24. package/esm2022/lib/components/carousel/carousel-image/carousel-image.component.mjs +18 -0
  25. package/esm2022/lib/components/carousel/carousel-item/carousel-item.component.mjs +15 -0
  26. package/esm2022/lib/components/carousel/carousel.component.mjs +79 -0
  27. package/esm2022/lib/components/carousel/carousel.module.mjs +31 -0
  28. package/esm2022/lib/components/carousel/i-carousel-item.component.mjs +16 -0
  29. package/esm2022/lib/components/content-block/content-block.component.mjs +27 -0
  30. package/esm2022/lib/components/default/default-list/abstract-list.mjs +49 -0
  31. package/esm2022/lib/components/default/default-list/default-list.component.mjs +95 -0
  32. package/esm2022/lib/components/default/default-list/header-list/header-list.component.mjs +98 -0
  33. package/esm2022/lib/components/default/default-list/list.mjs +120 -0
  34. package/esm2022/lib/components/default/default-pagination/default-pagination.component.mjs +123 -0
  35. package/esm2022/lib/components/default/default-table/default-table.component.mjs +216 -0
  36. package/esm2022/lib/components/default/default-table/th-filter/th-filter.component.mjs +212 -0
  37. package/esm2022/lib/components/default/default-view/abstract-view.mjs +22 -0
  38. package/esm2022/lib/components/default/default-view/default-view.component.mjs +76 -0
  39. package/esm2022/lib/components/default/default-view/header-view/header-view.component.mjs +81 -0
  40. package/esm2022/lib/components/default/default-view/view.mjs +198 -0
  41. package/esm2022/lib/components/default/default.module.mjs +98 -0
  42. package/esm2022/lib/components/default-page/default.page.mjs +75 -0
  43. package/esm2022/lib/components/drag-drop-file/drag-drop-file.directive.mjs +60 -0
  44. package/esm2022/lib/components/drag-drop-file/drag-drop-file.module.mjs +31 -0
  45. package/esm2022/lib/components/drag-drop-file/drag-drop-overlay/drag-drop-overlay.component.mjs +15 -0
  46. package/esm2022/lib/components/drawer/default-drawer-end/default-drawer-end.component.mjs +34 -0
  47. package/esm2022/lib/components/drawer/drawer-group/drawer-group.component.mjs +52 -0
  48. package/esm2022/lib/components/drawer/drawer.component.mjs +156 -0
  49. package/esm2022/lib/components/drawer/menu.mjs +15 -0
  50. package/esm2022/lib/components/filter/filter.component.mjs +145 -0
  51. package/esm2022/lib/components/http-responses-pages/forbidden-403/forbidden-403.component.mjs +17 -0
  52. package/esm2022/lib/components/image/image.component.mjs +91 -0
  53. package/esm2022/lib/components/info-popover/info-popover.component.mjs +91 -0
  54. package/esm2022/lib/components/inputs/custom-input.mjs +85 -0
  55. package/esm2022/lib/components/inputs/input-bool/input-bool.component.mjs +46 -0
  56. package/esm2022/lib/components/inputs/input-bool/input-bool.configuration.mjs +16 -0
  57. package/esm2022/lib/components/inputs/input-cep/input-cep.component.mjs +50 -0
  58. package/esm2022/lib/components/inputs/input-cep/input-cep.configuration.mjs +4 -0
  59. package/esm2022/lib/components/inputs/input-color/input-color.component.mjs +481 -0
  60. package/esm2022/lib/components/inputs/input-configuration.mjs +2 -0
  61. package/esm2022/lib/components/inputs/input-cpf-cnpj/input-cpf-cnpj.component.mjs +116 -0
  62. package/esm2022/lib/components/inputs/input-cpf-cnpj/input-cpf-cnpj.configuration.mjs +6 -0
  63. package/esm2022/lib/components/inputs/input-date/input-date.component.mjs +263 -0
  64. package/esm2022/lib/components/inputs/input-date/input-date.configuration.mjs +11 -0
  65. package/esm2022/lib/components/inputs/input-decimal/input-decimal.component.mjs +276 -0
  66. package/esm2022/lib/components/inputs/input-decimal/input-decimal.configuration.mjs +50 -0
  67. package/esm2022/lib/components/inputs/input-default-configurations.mjs +14 -0
  68. package/esm2022/lib/components/inputs/input-file/download-button/download-button.component.mjs +102 -0
  69. package/esm2022/lib/components/inputs/input-file/input-file.component.mjs +100 -0
  70. package/esm2022/lib/components/inputs/input-file/input-file.configuration.mjs +24 -0
  71. package/esm2022/lib/components/inputs/input-icon/fluenticons.mjs +3734 -0
  72. package/esm2022/lib/components/inputs/input-icon/input-icon.component.mjs +60 -0
  73. package/esm2022/lib/components/inputs/input-icon/ionicons.mjs +1360 -0
  74. package/esm2022/lib/components/inputs/input-provider-factory.mjs +12 -0
  75. package/esm2022/lib/components/inputs/input-select/directives/sion-label-template.directive.mjs +16 -0
  76. package/esm2022/lib/components/inputs/input-select/directives/sion-option-template.directive.mjs +16 -0
  77. package/esm2022/lib/components/inputs/input-select/directives/sion-placeholder-template.directive.mjs +16 -0
  78. package/esm2022/lib/components/inputs/input-select/input-select.component.mjs +376 -0
  79. package/esm2022/lib/components/inputs/input-select/input.select.configuration.mjs +233 -0
  80. package/esm2022/lib/components/inputs/input-string/input-string.component.mjs +41 -0
  81. package/esm2022/lib/components/inputs/input-string/input-string.configuration.mjs +20 -0
  82. package/esm2022/lib/components/inputs/input-telefone/input-telefone.component.mjs +74 -0
  83. package/esm2022/lib/components/inputs/input-telefone/input-telefone.configuration.mjs +12 -0
  84. package/esm2022/lib/components/inputs/input-textarea/input-textarea.component.mjs +82 -0
  85. package/esm2022/lib/components/inputs/input-textarea/input-textarea.configuration.mjs +7 -0
  86. package/esm2022/lib/components/inputs/input-type.mjs +24 -0
  87. package/esm2022/lib/components/inputs/input-validators.mjs +121 -0
  88. package/esm2022/lib/components/inputs/inputs.module.mjs +133 -0
  89. package/esm2022/lib/components/loading/loading.component.mjs +34 -0
  90. package/esm2022/lib/components/login/login-admin/login-admin.component.mjs +52 -0
  91. package/esm2022/lib/components/login/login.component.mjs +99 -0
  92. package/esm2022/lib/components/main-content/main-content.component.mjs +100 -0
  93. package/esm2022/lib/components/popover/sion-popover/sion-popover.component.mjs +182 -0
  94. package/esm2022/lib/components/popover/sion-popover.module.mjs +21 -0
  95. package/esm2022/lib/components/sion-card/sion-card.component.mjs +26 -0
  96. package/esm2022/lib/components/stepper/step/step.component.mjs +43 -0
  97. package/esm2022/lib/components/stepper/stepper.component.mjs +36 -0
  98. package/esm2022/lib/components/stepper/stepper.module.mjs +25 -0
  99. package/esm2022/lib/components/tabs/tab/tab.component.mjs +41 -0
  100. package/esm2022/lib/components/tabs/tabs/tabs.component.mjs +56 -0
  101. package/esm2022/lib/components/tabs/tabs.module.mjs +22 -0
  102. package/esm2022/lib/components/text-tooltip/text-tooltip.component.mjs +51 -0
  103. package/esm2022/lib/components/tooltip/tooltip.component.mjs +21 -0
  104. package/esm2022/lib/core.module.mjs +38 -0
  105. package/esm2022/lib/directives/ng-var.directive.mjs +29 -0
  106. package/esm2022/lib/guards/auth.guard.mjs +26 -0
  107. package/esm2022/lib/guards/error.interceptor.mjs +107 -0
  108. package/esm2022/lib/guards/token.interceptor.mjs +25 -0
  109. package/esm2022/lib/index.mjs +188 -0
  110. package/esm2022/lib/pipes/secure.pipe.mjs +42 -0
  111. package/esm2022/lib/services/auth.service.mjs +146 -0
  112. package/esm2022/lib/services/environment.service.mjs +26 -0
  113. package/esm2022/lib/services/generic.service.mjs +84 -0
  114. package/esm2022/lib/services/modal-focus-trap.service.mjs +62 -0
  115. package/esm2022/lib/services/navigation-context.service.mjs +111 -0
  116. package/esm2022/lib/services/popover-focus-trap.service.mjs +62 -0
  117. package/esm2022/lib/services/route/route.cache.service.mjs +15 -0
  118. package/esm2022/lib/services/route/route.provider.service.mjs +42 -0
  119. package/esm2022/lib/services/usuario.service.mjs +49 -0
  120. package/esm2022/lib/services/utils.service.mjs +190 -0
  121. package/esm2022/lib/services/web/api-url-provider.service.mjs +29 -0
  122. package/esm2022/lib/services/web/http.ativo.service.mjs +37 -0
  123. package/esm2022/lib/services/web/http.service.mjs +184 -0
  124. package/esm2022/lib/services/web/storage.service.mjs +186 -0
  125. package/esm2022/public-api.mjs +5 -0
  126. package/esm2022/sapphire-ion-framework.mjs +5 -0
  127. package/fesm2022/sapphire-ion-framework.mjs +12491 -0
  128. package/fesm2022/sapphire-ion-framework.mjs.map +1 -0
  129. package/index.d.ts +5 -0
  130. package/lib/classes/comparison/comparison-operator.d.ts +9 -0
  131. package/lib/classes/comparison/comparison-value-type.d.ts +23 -0
  132. package/lib/classes/comparison/comparison.d.ts +25 -0
  133. package/lib/classes/comparison/properties/bool-property.d.ts +7 -0
  134. package/lib/classes/comparison/properties/date-property.d.ts +11 -0
  135. package/lib/classes/comparison/properties/datetime-property.d.ts +11 -0
  136. package/lib/classes/comparison/properties/decimal-property.d.ts +11 -0
  137. package/lib/classes/comparison/properties/enum-property.d.ts +11 -0
  138. package/lib/classes/comparison/properties/implicit-property.d.ts +6 -0
  139. package/lib/classes/comparison/properties/int-property.d.ts +11 -0
  140. package/lib/classes/comparison/properties/long-property.d.ts +11 -0
  141. package/lib/classes/comparison/properties/string-property.d.ts +7 -0
  142. package/lib/classes/comparison/properties/time-property.d.ts +11 -0
  143. package/{src/lib/classes/credentials.ts → lib/classes/credentials.d.ts} +5 -5
  144. package/lib/classes/environment.d.ts +14 -0
  145. package/lib/classes/filters/view-filtros.d.ts +10 -0
  146. package/lib/classes/infinite-scroll.d.ts +26 -0
  147. package/lib/classes/inputs/table-field-form-builder.d.ts +5 -0
  148. package/lib/classes/inputs/table-field.d.ts +20 -0
  149. package/lib/classes/page-option.d.ts +7 -0
  150. package/lib/classes/routes/default-routing-factory.d.ts +8 -0
  151. package/lib/classes/routes/id-preloader-configuration.d.ts +28 -0
  152. package/lib/classes/routes/route-data.d.ts +5 -0
  153. package/lib/components/carousel/carousel-image/carousel-image.component.d.ts +10 -0
  154. package/lib/components/carousel/carousel-item/carousel-item.component.d.ts +9 -0
  155. package/lib/components/carousel/carousel.component.d.ts +32 -0
  156. package/lib/components/carousel/carousel.module.d.ts +12 -0
  157. package/lib/components/carousel/i-carousel-item.component.d.ts +9 -0
  158. package/lib/components/content-block/content-block.component.d.ts +15 -0
  159. package/lib/components/default/default-list/abstract-list.d.ts +21 -0
  160. package/lib/components/default/default-list/default-list.component.d.ts +47 -0
  161. package/lib/components/default/default-list/header-list/header-list.component.d.ts +45 -0
  162. package/lib/components/default/default-list/list.d.ts +40 -0
  163. package/lib/components/default/default-pagination/default-pagination.component.d.ts +36 -0
  164. package/lib/components/default/default-table/default-table.component.d.ts +90 -0
  165. package/lib/components/default/default-table/th-filter/th-filter.component.d.ts +23 -0
  166. package/lib/components/default/default-view/abstract-view.d.ts +18 -0
  167. package/lib/components/default/default-view/default-view.component.d.ts +40 -0
  168. package/lib/components/default/default-view/header-view/header-view.component.d.ts +36 -0
  169. package/lib/components/default/default-view/view.d.ts +67 -0
  170. package/lib/components/default/default.module.d.ts +31 -0
  171. package/lib/components/default-page/default.page.d.ts +35 -0
  172. package/lib/components/drag-drop-file/drag-drop-file.directive.d.ts +14 -0
  173. package/lib/components/drag-drop-file/drag-drop-file.module.d.ts +10 -0
  174. package/lib/components/drag-drop-file/drag-drop-overlay/drag-drop-overlay.component.d.ts +9 -0
  175. package/lib/components/drawer/default-drawer-end/default-drawer-end.component.d.ts +13 -0
  176. package/lib/components/drawer/drawer-group/drawer-group.component.d.ts +22 -0
  177. package/lib/components/drawer/drawer.component.d.ts +31 -0
  178. package/lib/components/drawer/menu.d.ts +9 -0
  179. package/lib/components/filter/filter.component.d.ts +29 -0
  180. package/lib/components/http-responses-pages/forbidden-403/forbidden-403.component.d.ts +8 -0
  181. package/lib/components/image/image.component.d.ts +23 -0
  182. package/lib/components/info-popover/info-popover.component.d.ts +15 -0
  183. package/lib/components/inputs/custom-input.d.ts +40 -0
  184. package/lib/components/inputs/input-bool/input-bool.component.d.ts +16 -0
  185. package/lib/components/inputs/input-bool/input-bool.configuration.d.ts +17 -0
  186. package/lib/components/inputs/input-cep/input-cep.component.d.ts +18 -0
  187. package/lib/components/inputs/input-cep/input-cep.configuration.d.ts +3 -0
  188. package/lib/components/inputs/input-color/input-color.component.d.ts +77 -0
  189. package/{src/lib/components/inputs/input-configuration.ts → lib/components/inputs/input-configuration.d.ts} +10 -23
  190. package/lib/components/inputs/input-cpf-cnpj/input-cpf-cnpj.component.d.ts +19 -0
  191. package/lib/components/inputs/input-cpf-cnpj/input-cpf-cnpj.configuration.d.ts +5 -0
  192. package/lib/components/inputs/input-date/input-date.component.d.ts +61 -0
  193. package/lib/components/inputs/input-date/input-date.configuration.d.ts +11 -0
  194. package/lib/components/inputs/input-decimal/input-decimal.component.d.ts +27 -0
  195. package/lib/components/inputs/input-decimal/input-decimal.configuration.d.ts +28 -0
  196. package/lib/components/inputs/input-default-configurations.d.ts +13 -0
  197. package/lib/components/inputs/input-file/download-button/download-button.component.d.ts +40 -0
  198. package/lib/components/inputs/input-file/input-file.component.d.ts +28 -0
  199. package/lib/components/inputs/input-file/input-file.configuration.d.ts +8 -0
  200. package/lib/components/inputs/input-icon/fluenticons.d.ts +1 -0
  201. package/lib/components/inputs/input-icon/input-icon.component.d.ts +20 -0
  202. package/lib/components/inputs/input-icon/ionicons.d.ts +1 -0
  203. package/lib/components/inputs/input-provider-factory.d.ts +4 -0
  204. package/lib/components/inputs/input-select/directives/sion-label-template.directive.d.ts +18 -0
  205. package/lib/components/inputs/input-select/directives/sion-option-template.directive.d.ts +14 -0
  206. package/lib/components/inputs/input-select/directives/sion-placeholder-template.directive.d.ts +18 -0
  207. package/lib/components/inputs/input-select/input-select.component.d.ts +83 -0
  208. package/lib/components/inputs/input-select/input.select.configuration.d.ts +127 -0
  209. package/lib/components/inputs/input-string/input-string.component.d.ts +14 -0
  210. package/lib/components/inputs/input-string/input-string.configuration.d.ts +15 -0
  211. package/lib/components/inputs/input-telefone/input-telefone.component.d.ts +19 -0
  212. package/lib/components/inputs/input-telefone/input-telefone.configuration.d.ts +9 -0
  213. package/lib/components/inputs/input-textarea/input-textarea.component.d.ts +17 -0
  214. package/lib/components/inputs/input-textarea/input-textarea.configuration.d.ts +4 -0
  215. package/lib/components/inputs/input-type.d.ts +22 -0
  216. package/lib/components/inputs/input-validators.d.ts +25 -0
  217. package/lib/components/inputs/inputs.module.d.ts +33 -0
  218. package/lib/components/loading/loading.component.d.ts +18 -0
  219. package/lib/components/login/login-admin/login-admin.component.d.ts +20 -0
  220. package/lib/components/login/login.component.d.ts +29 -0
  221. package/lib/components/main-content/main-content.component.d.ts +27 -0
  222. package/lib/components/popover/sion-popover/sion-popover.component.d.ts +43 -0
  223. package/lib/components/popover/sion-popover.module.d.ts +9 -0
  224. package/lib/components/sion-card/sion-card.component.d.ts +11 -0
  225. package/lib/components/stepper/step/step.component.d.ts +15 -0
  226. package/lib/components/stepper/stepper.component.d.ts +14 -0
  227. package/lib/components/stepper/stepper.module.d.ts +10 -0
  228. package/lib/components/tabs/tab/tab.component.d.ts +19 -0
  229. package/lib/components/tabs/tabs/tabs.component.d.ts +18 -0
  230. package/lib/components/tabs/tabs.module.d.ts +12 -0
  231. package/lib/components/text-tooltip/text-tooltip.component.d.ts +16 -0
  232. package/lib/components/tooltip/tooltip.component.d.ts +7 -0
  233. package/lib/core.module.d.ts +16 -0
  234. package/lib/directives/ng-var.directive.d.ts +12 -0
  235. package/lib/guards/auth.guard.d.ts +11 -0
  236. package/lib/guards/error.interceptor.d.ts +32 -0
  237. package/lib/guards/token.interceptor.d.ts +11 -0
  238. package/lib/index.d.ts +118 -0
  239. package/lib/pipes/secure.pipe.d.ts +15 -0
  240. package/lib/services/auth.service.d.ts +47 -0
  241. package/lib/services/environment.service.d.ts +10 -0
  242. package/lib/services/generic.service.d.ts +22 -0
  243. package/lib/services/modal-focus-trap.service.d.ts +13 -0
  244. package/lib/services/navigation-context.service.d.ts +14 -0
  245. package/lib/services/popover-focus-trap.service.d.ts +13 -0
  246. package/lib/services/route/route.cache.service.d.ts +7 -0
  247. package/lib/services/route/route.provider.service.d.ts +13 -0
  248. package/lib/services/usuario.service.d.ts +21 -0
  249. package/lib/services/utils.service.d.ts +53 -0
  250. package/lib/services/web/api-url-provider.service.d.ts +13 -0
  251. package/lib/services/web/http.ativo.service.d.ts +20 -0
  252. package/lib/services/web/http.service.d.ts +59 -0
  253. package/lib/services/web/storage.service.d.ts +46 -0
  254. package/package.json +47 -44
  255. package/public-api.d.ts +1 -0
  256. package/build.ps1 +0 -39
  257. package/ng-package.json +0 -10
  258. package/src/lib/classes/comparison/comparison-operator.ts +0 -17
  259. package/src/lib/classes/comparison/comparison-value-type.ts +0 -34
  260. package/src/lib/classes/comparison/comparison.ts +0 -45
  261. package/src/lib/classes/comparison/properties/bool-property.ts +0 -16
  262. package/src/lib/classes/comparison/properties/date-property.ts +0 -28
  263. package/src/lib/classes/comparison/properties/datetime-property.ts +0 -28
  264. package/src/lib/classes/comparison/properties/decimal-property.ts +0 -28
  265. package/src/lib/classes/comparison/properties/enum-property.ts +0 -28
  266. package/src/lib/classes/comparison/properties/implicit-property.ts +0 -13
  267. package/src/lib/classes/comparison/properties/int-property.ts +0 -28
  268. package/src/lib/classes/comparison/properties/long-property.ts +0 -28
  269. package/src/lib/classes/comparison/properties/string-property.ts +0 -16
  270. package/src/lib/classes/comparison/properties/time-property.ts +0 -28
  271. package/src/lib/classes/environment.ts +0 -37
  272. package/src/lib/classes/filters/view-filtros.ts +0 -18
  273. package/src/lib/classes/infinite-scroll.ts +0 -112
  274. package/src/lib/classes/inputs/table-field-form-builder.ts +0 -12
  275. package/src/lib/classes/inputs/table-field.ts +0 -62
  276. package/src/lib/classes/page-option.ts +0 -8
  277. package/src/lib/classes/routes/default-routing-factory.ts +0 -24
  278. package/src/lib/classes/routes/id-preloader-configuration.ts +0 -21
  279. package/src/lib/classes/routes/route-data.ts +0 -9
  280. package/src/lib/components/carousel/carousel-image/carousel-image.component.html +0 -4
  281. package/src/lib/components/carousel/carousel-image/carousel-image.component.ts +0 -15
  282. package/src/lib/components/carousel/carousel-item/carousel-item.component.html +0 -3
  283. package/src/lib/components/carousel/carousel-item/carousel-item.component.ts +0 -14
  284. package/src/lib/components/carousel/carousel.component.html +0 -22
  285. package/src/lib/components/carousel/carousel.component.ts +0 -83
  286. package/src/lib/components/carousel/carousel.module.ts +0 -20
  287. package/src/lib/components/carousel/i-carousel-item.component.ts +0 -8
  288. package/src/lib/components/content-block/content-block.component.html +0 -6
  289. package/src/lib/components/content-block/content-block.component.ts +0 -25
  290. package/src/lib/components/default/default-list/abstract-list.ts +0 -56
  291. package/src/lib/components/default/default-list/default-list.component.html +0 -60
  292. package/src/lib/components/default/default-list/default-list.component.ts +0 -72
  293. package/src/lib/components/default/default-list/header-list/header-list.component.html +0 -32
  294. package/src/lib/components/default/default-list/header-list/header-list.component.ts +0 -85
  295. package/src/lib/components/default/default-list/list.ts +0 -127
  296. package/src/lib/components/default/default-pagination/default-pagination.component.html +0 -52
  297. package/src/lib/components/default/default-pagination/default-pagination.component.ts +0 -118
  298. package/src/lib/components/default/default-table/default-table.component.html +0 -104
  299. package/src/lib/components/default/default-table/default-table.component.ts +0 -255
  300. package/src/lib/components/default/default-table/th-filter/th-filter.component.html +0 -69
  301. package/src/lib/components/default/default-table/th-filter/th-filter.component.ts +0 -205
  302. package/src/lib/components/default/default-view/abstract-view.ts +0 -25
  303. package/src/lib/components/default/default-view/default-view.component.html +0 -111
  304. package/src/lib/components/default/default-view/default-view.component.ts +0 -56
  305. package/src/lib/components/default/default-view/header-view/header-view.component.html +0 -64
  306. package/src/lib/components/default/default-view/header-view/header-view.component.ts +0 -62
  307. package/src/lib/components/default/default-view/view.ts +0 -195
  308. package/src/lib/components/default/default.module.ts +0 -61
  309. package/src/lib/components/default-page/default.page.html +0 -63
  310. package/src/lib/components/default-page/default.page.ts +0 -84
  311. package/src/lib/components/drag-drop-file/drag-drop-file.directive.ts +0 -44
  312. package/src/lib/components/drag-drop-file/drag-drop-file.module.ts +0 -21
  313. package/src/lib/components/drag-drop-file/drag-drop-overlay/drag-drop-overlay.component.html +0 -5
  314. package/src/lib/components/drag-drop-file/drag-drop-overlay/drag-drop-overlay.component.ts +0 -17
  315. package/src/lib/components/drawer/default-drawer-end/default-drawer-end.component.html +0 -12
  316. package/src/lib/components/drawer/default-drawer-end/default-drawer-end.component.ts +0 -35
  317. package/src/lib/components/drawer/drawer-group/drawer-group.component.html +0 -79
  318. package/src/lib/components/drawer/drawer-group/drawer-group.component.ts +0 -49
  319. package/src/lib/components/drawer/drawer.component.html +0 -120
  320. package/src/lib/components/drawer/drawer.component.ts +0 -157
  321. package/src/lib/components/drawer/menu.ts +0 -20
  322. package/src/lib/components/filter/filter.component.html +0 -43
  323. package/src/lib/components/filter/filter.component.ts +0 -141
  324. package/src/lib/components/http-responses-pages/forbidden-403/forbidden-403.component.html +0 -35
  325. package/src/lib/components/http-responses-pages/forbidden-403/forbidden-403.component.ts +0 -19
  326. package/src/lib/components/image/image.component.html +0 -17
  327. package/src/lib/components/image/image.component.ts +0 -95
  328. package/src/lib/components/info-popover/info-popover.component.html +0 -23
  329. package/src/lib/components/info-popover/info-popover.component.ts +0 -75
  330. package/src/lib/components/inputs/custom-input.ts +0 -94
  331. package/src/lib/components/inputs/input-bool/input-bool.component.html +0 -26
  332. package/src/lib/components/inputs/input-bool/input-bool.component.ts +0 -39
  333. package/src/lib/components/inputs/input-bool/input-bool.configuration.ts +0 -14
  334. package/src/lib/components/inputs/input-cep/input-cep.component.html +0 -27
  335. package/src/lib/components/inputs/input-cep/input-cep.component.ts +0 -41
  336. package/src/lib/components/inputs/input-cep/input-cep.configuration.ts +0 -4
  337. package/src/lib/components/inputs/input-color/input-color.component.html +0 -79
  338. package/src/lib/components/inputs/input-color/input-color.component.ts +0 -544
  339. package/src/lib/components/inputs/input-color/input-color.configuration.ts +0 -0
  340. package/src/lib/components/inputs/input-cpf-cnpj/input-cpf-cnpj.component.html +0 -28
  341. package/src/lib/components/inputs/input-cpf-cnpj/input-cpf-cnpj.component.ts +0 -99
  342. package/src/lib/components/inputs/input-cpf-cnpj/input-cpf-cnpj.configuration.ts +0 -4
  343. package/src/lib/components/inputs/input-date/input-date.component.html +0 -89
  344. package/src/lib/components/inputs/input-date/input-date.component.ts +0 -269
  345. package/src/lib/components/inputs/input-date/input-date.configuration.ts +0 -8
  346. package/src/lib/components/inputs/input-decimal/input-decimal.component.html +0 -32
  347. package/src/lib/components/inputs/input-decimal/input-decimal.component.ts +0 -283
  348. package/src/lib/components/inputs/input-decimal/input-decimal.configuration.ts +0 -47
  349. package/src/lib/components/inputs/input-default-configurations.ts +0 -15
  350. package/src/lib/components/inputs/input-file/download-button/download-button.component.html +0 -56
  351. package/src/lib/components/inputs/input-file/download-button/download-button.component.ts +0 -91
  352. package/src/lib/components/inputs/input-file/input-file.component.html +0 -56
  353. package/src/lib/components/inputs/input-file/input-file.component.ts +0 -97
  354. package/src/lib/components/inputs/input-file/input-file.configuration.ts +0 -25
  355. package/src/lib/components/inputs/input-icon/fluenticons.ts +0 -3733
  356. package/src/lib/components/inputs/input-icon/input-icon.component.html +0 -8
  357. package/src/lib/components/inputs/input-icon/input-icon.component.ts +0 -52
  358. package/src/lib/components/inputs/input-icon/ionicons.ts +0 -1359
  359. package/src/lib/components/inputs/input-provider-factory.ts +0 -12
  360. package/src/lib/components/inputs/input-select/directives/sion-label-template.directive.ts +0 -19
  361. package/src/lib/components/inputs/input-select/directives/sion-option-template.directive.ts +0 -16
  362. package/src/lib/components/inputs/input-select/directives/sion-placeholder-template.directive.ts +0 -19
  363. package/src/lib/components/inputs/input-select/input-select.component.html +0 -176
  364. package/src/lib/components/inputs/input-select/input-select.component.ts +0 -366
  365. package/src/lib/components/inputs/input-select/input.select.configuration.ts +0 -300
  366. package/src/lib/components/inputs/input-string/input-string.component.html +0 -27
  367. package/src/lib/components/inputs/input-string/input-string.component.ts +0 -31
  368. package/src/lib/components/inputs/input-string/input-string.configuration.ts +0 -20
  369. package/src/lib/components/inputs/input-telefone/input-telefone.component.html +0 -29
  370. package/src/lib/components/inputs/input-telefone/input-telefone.component.ts +0 -63
  371. package/src/lib/components/inputs/input-telefone/input-telefone.configuration.ts +0 -8
  372. package/src/lib/components/inputs/input-textarea/input-textarea.component.html +0 -27
  373. package/src/lib/components/inputs/input-textarea/input-textarea.component.ts +0 -75
  374. package/src/lib/components/inputs/input-textarea/input-textarea.configuration.ts +0 -7
  375. package/src/lib/components/inputs/input-type.ts +0 -22
  376. package/src/lib/components/inputs/input-validators.ts +0 -111
  377. package/src/lib/components/inputs/inputs.module.ts +0 -74
  378. package/src/lib/components/loading/loading.component.html +0 -28
  379. package/src/lib/components/loading/loading.component.ts +0 -29
  380. package/src/lib/components/login/login-admin/login-admin.component.html +0 -28
  381. package/src/lib/components/login/login-admin/login-admin.component.ts +0 -51
  382. package/src/lib/components/login/login.component.html +0 -104
  383. package/src/lib/components/login/login.component.ts +0 -96
  384. package/src/lib/components/main-content/main-content.component.html +0 -145
  385. package/src/lib/components/main-content/main-content.component.ts +0 -93
  386. package/src/lib/components/popover/sion-popover/sion-popover.component.html +0 -21
  387. package/src/lib/components/popover/sion-popover/sion-popover.component.ts +0 -182
  388. package/src/lib/components/popover/sion-popover.module.ts +0 -12
  389. package/src/lib/components/sion-card/sion-card.component.html +0 -12
  390. package/src/lib/components/sion-card/sion-card.component.ts +0 -23
  391. package/src/lib/components/stepper/step/step.component.html +0 -11
  392. package/src/lib/components/stepper/step/step.component.ts +0 -44
  393. package/src/lib/components/stepper/stepper.component.html +0 -3
  394. package/src/lib/components/stepper/stepper.component.ts +0 -37
  395. package/src/lib/components/stepper/stepper.module.ts +0 -15
  396. package/src/lib/components/tabs/tab/tab.component.html +0 -8
  397. package/src/lib/components/tabs/tab/tab.component.ts +0 -28
  398. package/src/lib/components/tabs/tabs/tabs.component.html +0 -14
  399. package/src/lib/components/tabs/tabs/tabs.component.ts +0 -42
  400. package/src/lib/components/tabs/tabs.module.ts +0 -15
  401. package/src/lib/components/text-tooltip/text-tooltip.component.html +0 -8
  402. package/src/lib/components/text-tooltip/text-tooltip.component.ts +0 -45
  403. package/src/lib/components/tooltip/tooltip.component.html +0 -53
  404. package/src/lib/components/tooltip/tooltip.component.ts +0 -16
  405. package/src/lib/core.module.ts +0 -29
  406. package/src/lib/directives/ng-var.directive.ts +0 -26
  407. package/src/lib/guards/auth.guard.ts +0 -19
  408. package/src/lib/guards/error.interceptor.ts +0 -108
  409. package/src/lib/guards/token.interceptor.ts +0 -28
  410. package/src/lib/index.ts +0 -191
  411. package/src/lib/pipes/secure.pipe.ts +0 -39
  412. package/src/lib/services/auth.service.ts +0 -150
  413. package/src/lib/services/crypto.service.ts +0 -164
  414. package/src/lib/services/environment.service.ts +0 -17
  415. package/src/lib/services/generic.service.ts +0 -85
  416. package/src/lib/services/modal-focus-trap.service.ts +0 -65
  417. package/src/lib/services/navigation-context.service.ts +0 -121
  418. package/src/lib/services/popover-focus-trap.service.ts +0 -65
  419. package/src/lib/services/route/route.cache.service.ts +0 -17
  420. package/src/lib/services/route/route.provider.service.ts +0 -49
  421. package/src/lib/services/usuario.service.ts +0 -44
  422. package/src/lib/services/utils.service.ts +0 -216
  423. package/src/lib/services/web/api-url-provider.service.ts +0 -48
  424. package/src/lib/services/web/http.ativo.service.ts +0 -37
  425. package/src/lib/services/web/http.service.ts +0 -206
  426. package/src/lib/services/web/storage.service.ts +0 -210
  427. package/src/public-api.ts +0 -5
  428. package/tailwind.config.js +0 -27
  429. package/tsconfig.lib.json +0 -31
  430. package/tsconfig.lib.prod.json +0 -23
  431. package/tsconfig.spec.json +0 -27
  432. /package/{src/lib → themes}/compiled-styles.scss +0 -0
  433. /package/{src/lib → themes}/components/carousel/carousel-image/carousel-image.component.scss +0 -0
  434. /package/{src/lib → themes}/components/carousel/carousel-item/carousel-item.component.scss +0 -0
  435. /package/{src/lib → themes}/components/carousel/carousel.component.scss +0 -0
  436. /package/{src/lib → themes}/components/content-block/content-block.component.scss +0 -0
  437. /package/{src/lib → themes}/components/default/default-list/default-list.component.scss +0 -0
  438. /package/{src/lib → themes}/components/default/default-list/header-list/header-list.component.scss +0 -0
  439. /package/{src/lib → themes}/components/default/default-pagination/default-pagination.component.scss +0 -0
  440. /package/{src/lib → themes}/components/default/default-table/default-table.component.scss +0 -0
  441. /package/{src/lib → themes}/components/default/default-table/th-filter/th-filter.component.scss +0 -0
  442. /package/{src/lib → themes}/components/default/default-view/default-view.component.scss +0 -0
  443. /package/{src/lib → themes}/components/default/default-view/header-view/header-view.component.scss +0 -0
  444. /package/{src/lib → themes}/components/default-page/default.page.scss +0 -0
  445. /package/{src/lib → themes}/components/drag-drop-file/drag-drop-overlay/drag-drop-overlay.component.scss +0 -0
  446. /package/{src/lib → themes}/components/drawer/default-drawer-end/default-drawer-end.component.scss +0 -0
  447. /package/{src/lib → themes}/components/drawer/drawer-group/drawer-group.component.scss +0 -0
  448. /package/{src/lib → themes}/components/drawer/drawer.component.scss +0 -0
  449. /package/{src/lib → themes}/components/filter/filter.component.scss +0 -0
  450. /package/{src/lib → themes}/components/http-responses-pages/forbidden-403/forbidden-403.component.scss +0 -0
  451. /package/{src/lib → themes}/components/image/image.component.scss +0 -0
  452. /package/{src/lib → themes}/components/info-popover/info-popover.component.scss +0 -0
  453. /package/{src/lib → themes}/components/inputs/input-bool/input-bool.component.scss +0 -0
  454. /package/{src/lib → themes}/components/inputs/input-cep/input-cep.component.scss +0 -0
  455. /package/{src/lib → themes}/components/inputs/input-color/input-color.component.scss +0 -0
  456. /package/{src/lib → themes}/components/inputs/input-cpf-cnpj/input-cpf-cnpj.component.scss +0 -0
  457. /package/{src/lib → themes}/components/inputs/input-date/input-date.component.scss +0 -0
  458. /package/{src/lib → themes}/components/inputs/input-decimal/input-decimal.component.scss +0 -0
  459. /package/{src/lib → themes}/components/inputs/input-file/download-button/download-button.component.scss +0 -0
  460. /package/{src/lib → themes}/components/inputs/input-file/input-file.component.scss +0 -0
  461. /package/{src/lib → themes}/components/inputs/input-icon/input-icon.component.scss +0 -0
  462. /package/{src/lib → themes}/components/inputs/input-select/input-select.component.scss +0 -0
  463. /package/{src/lib → themes}/components/inputs/input-string/input-string.component.scss +0 -0
  464. /package/{src/lib → themes}/components/inputs/input-telefone/input-telefone.component.scss +0 -0
  465. /package/{src/lib → themes}/components/inputs/input-textarea/input-textarea.component.scss +0 -0
  466. /package/{src/lib → themes}/components/inputs/inputs.scss +0 -0
  467. /package/{src/lib → themes}/components/loading/loading.component.scss +0 -0
  468. /package/{src/lib → themes}/components/login/login-admin/login-admin.component.scss +0 -0
  469. /package/{src/lib → themes}/components/login/login.component.scss +0 -0
  470. /package/{src/lib → themes}/components/main-content/main-content.component.scss +0 -0
  471. /package/{src/lib → themes}/components/popover/sion-popover/sion-popover.component.scss +0 -0
  472. /package/{src/lib → themes}/components/sion-card/sion-card.component.scss +0 -0
  473. /package/{src/lib → themes}/components/stepper/step/step.component.scss +0 -0
  474. /package/{src/lib → themes}/components/stepper/stepper.component.scss +0 -0
  475. /package/{src/lib → themes}/components/tabs/tab/tab.component.scss +0 -0
  476. /package/{src/lib → themes}/components/tabs/tabs/tabs.component.scss +0 -0
  477. /package/{src/lib → themes}/components/text-tooltip/text-tooltip.component.scss +0 -0
  478. /package/{src/lib → themes}/components/tooltip/tooltip.component.scss +0 -0
  479. /package/{src/lib → themes}/styles/components.scss +0 -0
  480. /package/{src/lib → themes}/styles/core.styles.scss +0 -0
  481. /package/{src/lib → themes}/styles/ionic/ion-action-sheet.scss +0 -0
  482. /package/{src/lib → themes}/styles/ionic/ion-alert.scss +0 -0
  483. /package/{src/lib → themes}/styles/ionic/ion-button.scss +0 -0
  484. /package/{src/lib → themes}/styles/ionic/ion-card.scss +0 -0
  485. /package/{src/lib → themes}/styles/ionic/ion-content.scss +0 -0
  486. /package/{src/lib → themes}/styles/ionic/ion-datetime.scss +0 -0
  487. /package/{src/lib → themes}/styles/ionic/ion-item.scss +0 -0
  488. /package/{src/lib → themes}/styles/ionic/ion-list.scss +0 -0
  489. /package/{src/lib → themes}/styles/ionic/ion-modal.scss +0 -0
  490. /package/{src/lib → themes}/styles/ionic/ion-popover.scss +0 -0
  491. /package/{src/lib → themes}/styles/ionic/ion-progress-bar.scss +0 -0
  492. /package/{src/lib → themes}/styles/ionic/ion-searchbar.scss +0 -0
  493. /package/{src/lib → themes}/styles/ionic/ion-toast.scss +0 -0
  494. /package/{src/lib → themes}/styles/ionic.scss +0 -0
  495. /package/{src/lib → themes}/styles/login-default.scss +0 -0
  496. /package/{src/lib → themes}/styles/mixins.scss +0 -0
  497. /package/{src/lib → themes}/styles/styles.scss +0 -0
  498. /package/{src/lib → themes}/styles/translucid.scss +0 -0
@@ -0,0 +1,216 @@
1
+ import { formatNumber } from '@angular/common';
2
+ import { Component, computed, effect, Input, input, model, output, TemplateRef } from '@angular/core';
3
+ import { ActivatedRoute, Router } from '@angular/router';
4
+ import { FormatTelefoneCelular } from '../../inputs/input-telefone/input-telefone.component';
5
+ import { StorageService } from '../../../services/web/storage.service';
6
+ import { FormatCpfCnpj } from '../../inputs/input-cpf-cnpj/input-cpf-cnpj.component';
7
+ import { CompileLstTableField } from '../../../classes/comparison/comparison';
8
+ import { FormatCep } from '../../inputs/input-cep/input-cep.component';
9
+ import { InputType } from '../../inputs/input-type';
10
+ import { Utils } from '../../../services/utils.service';
11
+ import * as i0 from "@angular/core";
12
+ import * as i1 from "../../../services/web/storage.service";
13
+ import * as i2 from "@angular/router";
14
+ import * as i3 from "@ionic/angular";
15
+ import * as i4 from "@angular/common";
16
+ import * as i5 from "../../inputs/input-file/download-button/download-button.component";
17
+ import * as i6 from "@angular/forms";
18
+ import * as i7 from "../../loading/loading.component";
19
+ import * as i8 from "../../content-block/content-block.component";
20
+ import * as i9 from "../default-pagination/default-pagination.component";
21
+ import * as i10 from "./th-filter/th-filter.component";
22
+ export class DefaultTableComponent {
23
+ constructor(storageService, activatedRoute, router) {
24
+ this.storageService = storageService;
25
+ this.activatedRoute = activatedRoute;
26
+ this.router = router;
27
+ /** Template de ações, deve ser um elemento ```<ng-template>``` */
28
+ // acoesTemplate: InputSignal<TemplateRef<any>> = input<TemplateRef<any>>();
29
+ /** Service a ser utilizado na listagem */
30
+ this.service = input();
31
+ this.total = model(0);
32
+ /** Número de items máximo (usando two way data binding) */
33
+ this.limit = model();
34
+ /** Valor da pagina, setado = 1 quando troca-se o valor de limite de paginas (usando two way data binding) */
35
+ this.page = model(1);
36
+ /** Propriedade de ordenação (usando two way data binding) */
37
+ this.orderByProperty = model(null);
38
+ /** Propriedade de ordenação
39
+ * Se = true Ordenará de menor ao maior
40
+ * Se = false Ordenará de maior ao menor (usando two way data binding) */
41
+ this.ascending = model(true);
42
+ /** Filtros (usando two way data binding) */
43
+ this.filter = model([]);
44
+ /** Evento emitido quando um dos dados é ativado. Emite o id do dado */
45
+ this.ativar = output();
46
+ this.refresh = output();
47
+ this.loading = model(false);
48
+ /** Lista de dados a ser exibidos */
49
+ this.items = model([]);
50
+ /** Lista de campos a ser exibidos */
51
+ this.lstTableFields = model([]);
52
+ this.lstTableFieldsAvailable = computed(() => {
53
+ return this.lstTableFields().filter(p => !p.hidden).map(tf => {
54
+ return new AvailableTableField(tf, this.ascending() && this.orderByProperty() == tf.index, !this.ascending() && this.orderByProperty() == tf.index);
55
+ });
56
+ });
57
+ /** Remove os filtros no cabeçalho da tabela */
58
+ this.noFilters = input(false);
59
+ /** Aplica classes de CSS na coluna de acirdo com o retorno da função passada como parametro */
60
+ this.columnClass = input(null);
61
+ /** Aplica style de CSS na coluna de acirco com o retorno da função passada como parametro */
62
+ this.columnStyle = input(null);
63
+ /** Remove a paginação da listagem */
64
+ this.noPagination = input(false);
65
+ /** Caminho de redirecionamento do item */
66
+ this.itemPath = input('view/:id');
67
+ this.itemClick = output();
68
+ this.InputType = InputType;
69
+ this.lstRows = [];
70
+ effect(() => {
71
+ for (const tf of this.lstTableFields().filter(p => p.type == InputType.Select)) {
72
+ tf.configuration.loader.Refresh().then(() => this.SetLstRows());
73
+ }
74
+ this.SetLstRows();
75
+ });
76
+ }
77
+ Redirect(field, item) {
78
+ if (field == null) {
79
+ return;
80
+ }
81
+ this.itemClick.emit({ item, field });
82
+ if (field.index == 'ativo') {
83
+ return;
84
+ }
85
+ if (field.type == 'File') {
86
+ return;
87
+ }
88
+ if (this.itemPath()) {
89
+ const id = item['id'];
90
+ const path = this.itemPath().replace(":id", id.toString());
91
+ this.router.navigate([`./${path}`], { relativeTo: this.activatedRoute });
92
+ }
93
+ }
94
+ SetLstRows() {
95
+ this.lstRows = this.items().map(item => {
96
+ return new DefaultTableRow(item, item['id'], this.GetColumns(item), '', '');
97
+ });
98
+ }
99
+ GetColumns(item) {
100
+ return this.lstTableFields().filter(p => !p.hidden).map(tf => {
101
+ const value = item[tf.index];
102
+ const column = new DefaultTableColumn(value, tf);
103
+ column.class = this.columnClass() ? this.columnClass()(tf.index, item) : '';
104
+ column.style = this.columnStyle() ? this.columnStyle()(tf.index, item) : '';
105
+ if (!value) {
106
+ column.label = '-';
107
+ return column;
108
+ }
109
+ if (tf.type == InputType.Bool) {
110
+ column.label = "<bool>";
111
+ }
112
+ else if (tf.type == InputType.Cep) {
113
+ column.label = FormatCep(value);
114
+ }
115
+ else if (tf.type == InputType.Color) {
116
+ column.label = value;
117
+ }
118
+ else if ([InputType.Cpf, InputType.Cnpj, InputType.CpfCnpj].includes(tf.type)) {
119
+ column.label = FormatCpfCnpj(value);
120
+ }
121
+ else if (tf.type == InputType.DateTime) {
122
+ column.class += ' font-mono';
123
+ column.label = Utils.DateISOToDDMMYYYYHHMM(value);
124
+ }
125
+ else if (tf.type == InputType.Date) {
126
+ column.class += ' font-mono';
127
+ column.label = Utils.DateISOToDDMMYYYY(value);
128
+ }
129
+ else if (tf.type == InputType.Time) {
130
+ column.class += ' font-mono';
131
+ column.label = value;
132
+ }
133
+ else if ([InputType.Decimal, InputType.Decimal, InputType.Currency, InputType.Number].includes(tf.type)) {
134
+ const configuration = tf.configuration;
135
+ column.label = [
136
+ configuration.prefix,
137
+ formatNumber(value, 'pt-BR', `1.${configuration.precision}-${configuration.precision}`),
138
+ configuration.sufix,
139
+ ].join(' ');
140
+ }
141
+ else if (tf.type == InputType.File) {
142
+ column.label = '<file>';
143
+ }
144
+ else if (tf.type == InputType.Icon) {
145
+ column.label = 'icon';
146
+ }
147
+ else if (tf.type == InputType.Select) {
148
+ column.label = tf.configuration.loader.GetLabel(value);
149
+ column.loading = !tf.configuration.loader.isLoaded;
150
+ }
151
+ else if ([InputType.String, InputType.TextArea].includes(tf.type)) {
152
+ column.label = value;
153
+ }
154
+ else if ([InputType.Telefone, InputType.Celular, InputType.TelefoneCelular].includes(tf.type)) {
155
+ column.label = FormatTelefoneCelular(value);
156
+ }
157
+ return column;
158
+ });
159
+ }
160
+ ngOnInit() { this.SetLstRows(); }
161
+ SwitchOrder(tf) {
162
+ if (this.orderByProperty() != tf.index) {
163
+ this.orderByProperty.set(tf.index);
164
+ this.ascending.set(true);
165
+ }
166
+ else if (this.ascending()) {
167
+ this.ascending.set(false);
168
+ }
169
+ else {
170
+ this.orderByProperty.set(null);
171
+ }
172
+ this.refresh.emit();
173
+ }
174
+ ChangeFilter() {
175
+ this.filter.set(CompileLstTableField(this.lstTableFields()));
176
+ this.page.set(1);
177
+ this.refresh.emit();
178
+ }
179
+ Ativar(id) {
180
+ this.ativar.emit(id);
181
+ }
182
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DefaultTableComponent, deps: [{ token: i1.StorageService }, { token: i2.ActivatedRoute }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Component }); }
183
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: DefaultTableComponent, selector: "default-table", inputs: { acoesTemplate: { classPropertyName: "acoesTemplate", publicName: "acoesTemplate", isSignal: false, isRequired: false, transformFunction: null }, service: { classPropertyName: "service", publicName: "service", isSignal: true, isRequired: false, transformFunction: null }, total: { classPropertyName: "total", publicName: "total", isSignal: true, isRequired: false, transformFunction: null }, limit: { classPropertyName: "limit", publicName: "limit", isSignal: true, isRequired: false, transformFunction: null }, page: { classPropertyName: "page", publicName: "page", isSignal: true, isRequired: false, transformFunction: null }, orderByProperty: { classPropertyName: "orderByProperty", publicName: "orderByProperty", isSignal: true, isRequired: false, transformFunction: null }, ascending: { classPropertyName: "ascending", publicName: "ascending", isSignal: true, isRequired: false, transformFunction: null }, filter: { classPropertyName: "filter", publicName: "filter", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, lstTableFields: { classPropertyName: "lstTableFields", publicName: "lstTableFields", isSignal: true, isRequired: false, transformFunction: null }, noFilters: { classPropertyName: "noFilters", publicName: "noFilters", isSignal: true, isRequired: false, transformFunction: null }, columnClass: { classPropertyName: "columnClass", publicName: "columnClass", isSignal: true, isRequired: false, transformFunction: null }, columnStyle: { classPropertyName: "columnStyle", publicName: "columnStyle", isSignal: true, isRequired: false, transformFunction: null }, noPagination: { classPropertyName: "noPagination", publicName: "noPagination", isSignal: true, isRequired: false, transformFunction: null }, itemPath: { classPropertyName: "itemPath", publicName: "itemPath", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { total: "totalChange", limit: "limitChange", page: "pageChange", orderByProperty: "orderByPropertyChange", ascending: "ascendingChange", filter: "filterChange", ativar: "ativar", refresh: "refresh", loading: "loadingChange", items: "itemsChange", lstTableFields: "lstTableFieldsChange", itemClick: "itemClick" }, ngImport: i0, template: "<div class=\"size-full rounded-xl flex flex-col overflow-hidden relative\">\r\n <loading [type]=\"3\" [loading]=\"loading()\"></loading>\r\n <content-block text=\"Sem Dados\" [value]=\"!(items.length != 0 || loading)\"></content-block>\r\n\r\n <div class=\"size-full shrink relative overflow-y-auto\">\r\n <table>\r\n <thead>\r\n <tr>\r\n @if(acoesTemplate){\r\n <th scope=\"col\" class=\"p-2\"> \r\n A\u00E7\u00F5es \r\n </th>\r\n }\r\n\r\n @for (tfa of lstTableFieldsAvailable(); track tfa.tf.index) {\r\n <th scope=\"col\" class=\"p-2\"> \r\n <div class=\"flex gap-2 items-center justify-start th\">\r\n @if(!noFilters()){\r\n <th-filter class=\"!text-base\" style=\"text-transform: none !important\" \r\n *ngIf=\"((tfa.tf.type != InputType.File || (tfa.tf.filter && tfa.tf.disabledChange())) && !noFilters())\"\r\n [field]=\"tfa.tf\"\r\n (change)=\"ChangeFilter()\"\r\n ></th-filter>\r\n }\r\n\r\n {{tfa.tf.header}} \r\n\r\n @if((tfa.tf.type != InputType.File || (tfa.tf.filter && tfa.tf.disabledChange())) && !noFilters()){\r\n <a [ngClass]=\"{ 'bg-light/10 !opacity-100': tfa.ascending || tfa.descending }\"\r\n class=\"order h-4 w-5 relative cursor-pointer rounded-lg opacity-0 default-transition\" \r\n (click)=\"SwitchOrder(tfa.tf)\"\r\n >\r\n <ion-icon \r\n [class.text-primary]=\"tfa.ascending\"\r\n class=\"absolute left-0 top-0\" \r\n name=\"arrow-up\"\r\n ></ion-icon> \r\n <ion-icon \r\n [class.text-primary]=\"tfa.descending\"\r\n class=\"absolute right-0 bottom-0\" \r\n name=\"arrow-down\"\r\n ></ion-icon> \r\n </a>\r\n }\r\n </div>\r\n </th>\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (row of lstRows; track row.id || $index) {\r\n <tr [hidden]=\"loading()\">\r\n @if(acoesTemplate){\r\n <td (click)=\"Redirect(undefined, row.item)\" class=\"whitespace-nowrap py-1 px-3 {{row.acoesClass}}\" [style]=\"row.acoesStyle\" >\r\n <ng-container *ngTemplateOutlet=\"acoesTemplate; context: { $implicit: row.item }\"></ng-container>\r\n </td>\r\n }\r\n\r\n @for (col of row.lstColumns; track col.tf.index) {\r\n <td class=\"{{col.class}} p-2 cursor-pointer\" (click)=\"Redirect(col.tf, row.item)\" [style]=\"'white-space: var(--ion-table-row-wrap);' + col.style\">\r\n @if(col.tf.index == 'ativo') {\r\n <div class=\"size-full flex items-center justify-start\" [routerLink]=\"null\">\r\n <ion-toggle [checked]=\"col.value\" [disabled]=\"loading()\" (ionChange)=\"Ativar(row.id)\" ></ion-toggle>\r\n </div>\r\n }\r\n @else if (col.tf.type == InputType.Bool){\r\n <div class=\"h-full flex items-center justify-start\">\r\n @if(col.tf.configuration.type == 'toggle') {\r\n <ion-toggle [checked]=\"col.value\" [disabled]=\"true\"></ion-toggle>\r\n }\r\n @else {\r\n <ion-checkbox [checked]=\"col.value\" [disabled]=\"true\"></ion-checkbox>\r\n }\r\n </div>\r\n }\r\n @else if (col.tf.type == InputType.File) {\r\n <download-button [(ngModel)]=\"col.value\" [configuration]=\"col.tf.configuration\"></download-button>\r\n }\r\n @else if (col.loading){\r\n <ion-spinner name=\"dots\"></ion-spinner>\r\n } @else {\r\n <span [ngClass]=\"col.class\">{{ col.label }}</span>\r\n }\r\n </td>\r\n }\r\n </tr>\r\n <ng-content select=\"[slot=item-end]\"></ng-content>\r\n }\r\n </tbody>\r\n </table>\r\n </div>\r\n @if(!noPagination()){\r\n <div class=\"shrink-0 z-[100]\">\r\n <default-pagination\r\n [page]=\"page()\"\r\n (pageChange)=\"page.set($event); refresh.emit()\"\r\n [total]=\"total()\"\r\n [limit]=\"limit()\"\r\n [length]=\"items().length\"\r\n [loading]=\"loading()\"\r\n ></default-pagination>\r\n </div>\r\n }\r\n</div>", styles: [".th:hover>.order{opacity:1;background-color:color-mix(in srgb,var(--ion-color-light) 10%,transparent)}\n"], dependencies: [{ kind: "component", type: i3.IonCheckbox, selector: "ion-checkbox", inputs: ["alignment", "checked", "color", "disabled", "errorText", "helperText", "indeterminate", "justify", "labelPlacement", "mode", "name", "required", "value"] }, { kind: "component", type: i3.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i3.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: i3.IonToggle, selector: "ion-toggle", inputs: ["alignment", "checked", "color", "disabled", "enableOnOffLabels", "errorText", "helperText", "justify", "labelPlacement", "mode", "name", "required", "value"] }, { kind: "directive", type: i3.BooleanValueAccessor, selector: "ion-checkbox,ion-toggle" }, { kind: "directive", type: i3.RouterLinkDelegate, selector: ":not(a):not(area)[routerLink]" }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.DownloadButtonComponent, selector: "download-button", inputs: ["expand", "value", "size", "color", "params", "disabled", "post", "configuration", "customLabel", "label", "fileName"], outputs: ["valueChange"] }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i7.LoadingComponent, selector: "loading", inputs: ["text", "type", "loading"] }, { kind: "component", type: i8.ContentBlockComponent, selector: "content-block", inputs: ["text", "value"] }, { kind: "component", type: i9.DefaultPaginationComponent, selector: "default-pagination", inputs: ["total", "limit", "length", "loading", "page"], outputs: ["pageChange", "change"] }, { kind: "component", type: i10.ThFilterComponent, selector: "th-filter", inputs: ["field"], outputs: ["change"] }] }); }
184
+ }
185
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DefaultTableComponent, decorators: [{
186
+ type: Component,
187
+ args: [{ selector: 'default-table', template: "<div class=\"size-full rounded-xl flex flex-col overflow-hidden relative\">\r\n <loading [type]=\"3\" [loading]=\"loading()\"></loading>\r\n <content-block text=\"Sem Dados\" [value]=\"!(items.length != 0 || loading)\"></content-block>\r\n\r\n <div class=\"size-full shrink relative overflow-y-auto\">\r\n <table>\r\n <thead>\r\n <tr>\r\n @if(acoesTemplate){\r\n <th scope=\"col\" class=\"p-2\"> \r\n A\u00E7\u00F5es \r\n </th>\r\n }\r\n\r\n @for (tfa of lstTableFieldsAvailable(); track tfa.tf.index) {\r\n <th scope=\"col\" class=\"p-2\"> \r\n <div class=\"flex gap-2 items-center justify-start th\">\r\n @if(!noFilters()){\r\n <th-filter class=\"!text-base\" style=\"text-transform: none !important\" \r\n *ngIf=\"((tfa.tf.type != InputType.File || (tfa.tf.filter && tfa.tf.disabledChange())) && !noFilters())\"\r\n [field]=\"tfa.tf\"\r\n (change)=\"ChangeFilter()\"\r\n ></th-filter>\r\n }\r\n\r\n {{tfa.tf.header}} \r\n\r\n @if((tfa.tf.type != InputType.File || (tfa.tf.filter && tfa.tf.disabledChange())) && !noFilters()){\r\n <a [ngClass]=\"{ 'bg-light/10 !opacity-100': tfa.ascending || tfa.descending }\"\r\n class=\"order h-4 w-5 relative cursor-pointer rounded-lg opacity-0 default-transition\" \r\n (click)=\"SwitchOrder(tfa.tf)\"\r\n >\r\n <ion-icon \r\n [class.text-primary]=\"tfa.ascending\"\r\n class=\"absolute left-0 top-0\" \r\n name=\"arrow-up\"\r\n ></ion-icon> \r\n <ion-icon \r\n [class.text-primary]=\"tfa.descending\"\r\n class=\"absolute right-0 bottom-0\" \r\n name=\"arrow-down\"\r\n ></ion-icon> \r\n </a>\r\n }\r\n </div>\r\n </th>\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (row of lstRows; track row.id || $index) {\r\n <tr [hidden]=\"loading()\">\r\n @if(acoesTemplate){\r\n <td (click)=\"Redirect(undefined, row.item)\" class=\"whitespace-nowrap py-1 px-3 {{row.acoesClass}}\" [style]=\"row.acoesStyle\" >\r\n <ng-container *ngTemplateOutlet=\"acoesTemplate; context: { $implicit: row.item }\"></ng-container>\r\n </td>\r\n }\r\n\r\n @for (col of row.lstColumns; track col.tf.index) {\r\n <td class=\"{{col.class}} p-2 cursor-pointer\" (click)=\"Redirect(col.tf, row.item)\" [style]=\"'white-space: var(--ion-table-row-wrap);' + col.style\">\r\n @if(col.tf.index == 'ativo') {\r\n <div class=\"size-full flex items-center justify-start\" [routerLink]=\"null\">\r\n <ion-toggle [checked]=\"col.value\" [disabled]=\"loading()\" (ionChange)=\"Ativar(row.id)\" ></ion-toggle>\r\n </div>\r\n }\r\n @else if (col.tf.type == InputType.Bool){\r\n <div class=\"h-full flex items-center justify-start\">\r\n @if(col.tf.configuration.type == 'toggle') {\r\n <ion-toggle [checked]=\"col.value\" [disabled]=\"true\"></ion-toggle>\r\n }\r\n @else {\r\n <ion-checkbox [checked]=\"col.value\" [disabled]=\"true\"></ion-checkbox>\r\n }\r\n </div>\r\n }\r\n @else if (col.tf.type == InputType.File) {\r\n <download-button [(ngModel)]=\"col.value\" [configuration]=\"col.tf.configuration\"></download-button>\r\n }\r\n @else if (col.loading){\r\n <ion-spinner name=\"dots\"></ion-spinner>\r\n } @else {\r\n <span [ngClass]=\"col.class\">{{ col.label }}</span>\r\n }\r\n </td>\r\n }\r\n </tr>\r\n <ng-content select=\"[slot=item-end]\"></ng-content>\r\n }\r\n </tbody>\r\n </table>\r\n </div>\r\n @if(!noPagination()){\r\n <div class=\"shrink-0 z-[100]\">\r\n <default-pagination\r\n [page]=\"page()\"\r\n (pageChange)=\"page.set($event); refresh.emit()\"\r\n [total]=\"total()\"\r\n [limit]=\"limit()\"\r\n [length]=\"items().length\"\r\n [loading]=\"loading()\"\r\n ></default-pagination>\r\n </div>\r\n }\r\n</div>", styles: [".th:hover>.order{opacity:1;background-color:color-mix(in srgb,var(--ion-color-light) 10%,transparent)}\n"] }]
188
+ }], ctorParameters: () => [{ type: i1.StorageService }, { type: i2.ActivatedRoute }, { type: i2.Router }], propDecorators: { acoesTemplate: [{
189
+ type: Input
190
+ }] } });
191
+ class DefaultTableRow {
192
+ constructor(item, id, lstColumns, acoesClass = '', acoesStyle = '') {
193
+ this.item = item;
194
+ this.id = id;
195
+ this.lstColumns = lstColumns;
196
+ this.acoesClass = acoesClass;
197
+ this.acoesStyle = acoesStyle;
198
+ }
199
+ }
200
+ class DefaultTableColumn {
201
+ constructor(value = null, tf) {
202
+ this.value = value;
203
+ this.tf = tf;
204
+ this.loading = false;
205
+ this.class = '';
206
+ this.style = '';
207
+ }
208
+ }
209
+ class AvailableTableField {
210
+ constructor(tf, ascending, descending) {
211
+ this.tf = tf;
212
+ this.ascending = ascending;
213
+ this.descending = descending;
214
+ }
215
+ }
216
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvZGVmYXVsdC9kZWZhdWx0LXRhYmxlL2RlZmF1bHQtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2RlZmF1bHQvZGVmYXVsdC10YWJsZS9kZWZhdWx0LXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBZSxLQUFLLEVBQXVCLE1BQU0sRUFBdUMsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdLLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFJekQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDN0YsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUdyRixPQUFPLEVBQWMsb0JBQW9CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUMxRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDdkUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7Ozs7Ozs7O0FBU3hELE1BQU0sT0FBTyxxQkFBcUI7SUFvRWhDLFlBQ1MsY0FBK0IsRUFDOUIsY0FBOEIsRUFDOUIsTUFBc0I7UUFGdkIsbUJBQWMsR0FBZCxjQUFjLENBQWlCO1FBQzlC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ME1SLE1BQU0sZUFBZTtJQUNuQixZQUNTLElBQU8sRUFDUCxFQUFzQixFQUN0QixVQUFnQyxFQUNoQyxhQUFxQixFQUFFLEVBQ3ZCLGFBQXFCLEVBQUU7UUFKdkIsU0FBSSxHQUFKLElBQUksQ0FBRztRQUNQLE9BQUUsR0FBRixFQUFFLENBQW9CO1FBQ3RCLGVBQVUsR0FBVixVQUFVLENBQXNCO1FBQ2hDLGVBQVUsR0FBVixVQUFVLENBQWE7UUFDdkIsZUFBVSxHQUFWLFVBQVUsQ0FBYTtJQUM5QixDQUFDO0NBQ0o7QUFFRCxNQUFNLGtCQUFrQjtJQUt0QixZQUNTLFFBQWEsSUFBSSxFQUNqQixFQUFjO1FBRGQsVUFBSyxHQUFMLEtBQUssQ0FBWTtRQUNqQixPQUFFLEdBQUYsRUFBRSxDQUFZO1FBTGhCLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFDekIsVUFBSyxHQUFXLEVBQUUsQ0FBQztRQUNuQixVQUFLLEdBQVcsRUFBRSxDQUFDO0lBSXhCLENBQUM7Q0FDSjtBQUVELE1BQU0sbUJBQW1CO0lBQ3ZCLFlBQ1MsRUFBYyxFQUNkLFNBQWtCLEVBQ2xCLFVBQW1CO1FBRm5CLE9BQUUsR0FBRixFQUFFLENBQVk7UUFDZCxjQUFTLEdBQVQsU0FBUyxDQUFTO1FBQ2xCLGVBQVUsR0FBVixVQUFVLENBQVM7SUFDMUIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZm9ybWF0TnVtYmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgZWZmZWN0LCBJbnB1dCwgaW5wdXQsIElucHV0U2lnbmFsLCBtb2RlbCwgTW9kZWxTaWduYWwsIE9uSW5pdCwgb3V0cHV0LCBPdXRwdXRFbWl0dGVyUmVmLCBPdXRwdXRSZWYsIFNpZ25hbCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5pbXBvcnQgeyBJbnB1dERlY2ltYWxDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vLi4vaW5wdXRzL2lucHV0LWRlY2ltYWwvaW5wdXQtZGVjaW1hbC5jb25maWd1cmF0aW9uJztcclxuaW1wb3J0IHsgSW5wdXRTZWxlY3RDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vLi4vaW5wdXRzL2lucHV0LXNlbGVjdC9pbnB1dC5zZWxlY3QuY29uZmlndXJhdGlvbic7XHJcbmltcG9ydCB7IEZvcm1hdFRlbGVmb25lQ2VsdWxhciB9IGZyb20gJy4uLy4uL2lucHV0cy9pbnB1dC10ZWxlZm9uZS9pbnB1dC10ZWxlZm9uZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3dlYi9zdG9yYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGb3JtYXRDcGZDbnBqIH0gZnJvbSAnLi4vLi4vaW5wdXRzL2lucHV0LWNwZi1jbnBqL2lucHV0LWNwZi1jbnBqLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEh0dHBTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvd2ViL2h0dHAuc2VydmljZSdcclxuaW1wb3J0IHsgVGFibGVGaWVsZCB9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvaW5wdXRzL3RhYmxlLWZpZWxkJztcclxuaW1wb3J0IHsgQ29tcGFyaXNvbiwgQ29tcGlsZUxzdFRhYmxlRmllbGQgfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2NvbXBhcmlzb24vY29tcGFyaXNvbic7XHJcbmltcG9ydCB7IEZvcm1hdENlcCB9IGZyb20gJy4uLy4uL2lucHV0cy9pbnB1dC1jZXAvaW5wdXQtY2VwLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IElucHV0VHlwZSB9IGZyb20gJy4uLy4uL2lucHV0cy9pbnB1dC10eXBlJztcclxuaW1wb3J0IHsgVXRpbHMgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy91dGlscy5zZXJ2aWNlJztcclxuXHJcbnR5cGUgQ1NTU3R5bGVTdHJpbmdHZW5lcmF0b3IgPSAoaW5kZXg6IHN0cmluZywgb2JqZWN0OiBhbnkpID0+IHN0cmluZztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZGVmYXVsdC10YWJsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2RlZmF1bHQtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2RlZmF1bHQtdGFibGUuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIERlZmF1bHRUYWJsZUNvbXBvbmVudDxTZXJ2aWNlIGV4dGVuZHMgSHR0cFNlcnZpY2UsIFQgPSBhbnk+IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgQElucHV0KCkgYWNvZXNUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICAvKiogVGVtcGxhdGUgZGUgYcOnw7VlcywgZGV2ZSBzZXIgdW0gZWxlbWVudG8gYGBgPG5nLXRlbXBsYXRlPmBgYCAqL1xyXG4gIC8vIGFjb2VzVGVtcGxhdGU6IElucHV0U2lnbmFsPFRlbXBsYXRlUmVmPGFueT4+ID0gaW5wdXQ8VGVtcGxhdGVSZWY8YW55Pj4oKTtcclxuXHJcbiAgLyoqIFNlcnZpY2UgYSBzZXIgdXRpbGl6YWRvIG5hIGxpc3RhZ2VtICovXHJcbiAgc2VydmljZTogSW5wdXRTaWduYWw8U2VydmljZT4gPSBpbnB1dDxTZXJ2aWNlPigpO1xyXG5cclxuICB0b3RhbDogTW9kZWxTaWduYWw8bnVtYmVyPiA9IG1vZGVsPG51bWJlcj4oMCk7XHJcblxyXG4gIC8qKiBOw7ptZXJvIGRlIGl0ZW1zIG3DoXhpbW8gKHVzYW5kbyB0d28gd2F5IGRhdGEgYmluZGluZykgKi9cclxuICBsaW1pdDogTW9kZWxTaWduYWw8bnVtYmVyPiA9IG1vZGVsPG51bWJlcj4oKTtcclxuXHJcbiAgLyoqIFZhbG9yIGRhIHBhZ2luYSwgc2V0YWRvID0gMSBxdWFuZG8gdHJvY2Etc2UgbyB2YWxvciBkZSBsaW1pdGUgZGUgcGFnaW5hcyAodXNhbmRvIHR3byB3YXkgZGF0YSBiaW5kaW5nKSAqL1xyXG4gIHBhZ2U6IE1vZGVsU2lnbmFsPG51bWJlcj4gPSBtb2RlbDxudW1iZXI+KDEpO1xyXG5cclxuICAvKiogUHJvcHJpZWRhZGUgZGUgb3JkZW5hw6fDo28gKHVzYW5kbyB0d28gd2F5IGRhdGEgYmluZGluZykgKi9cclxuICBvcmRlckJ5UHJvcGVydHk6IE1vZGVsU2lnbmFsPHN0cmluZyB8IG51bGw+ID0gbW9kZWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XHJcbiAgICBcclxuICAvKiogUHJvcHJpZWRhZGUgZGUgb3JkZW5hw6fDo29cclxuICAgKiBTZSA9IHRydWUgIE9yZGVuYXLDoSBkZSBtZW5vciBhbyBtYWlvciBcclxuICAgKiBTZSA9IGZhbHNlIE9yZGVuYXLDoSBkZSBtYWlvciBhbyBtZW5vciAodXNhbmRvIHR3byB3YXkgZGF0YSBiaW5kaW5nKSAqL1xyXG4gIGFzY2VuZGluZzogTW9kZWxTaWduYWw8Ym9vbGVhbj4gPSBtb2RlbDxib29sZWFuPih0cnVlKTtcclxuXHJcbiAgLyoqIEZpbHRyb3MgKHVzYW5kbyB0d28gd2F5IGRhdGEgYmluZGluZykgKi8gXHJcbiAgZmlsdGVyOiBNb2RlbFNpZ25hbDxDb21wYXJpc29uW10+ID0gbW9kZWw8Q29tcGFyaXNvbltdPihbXSk7XHJcblxyXG4gIC8qKiBFdmVudG8gZW1pdGlkbyBxdWFuZG8gdW0gZG9zIGRhZG9zIMOpIGF0aXZhZG8uIEVtaXRlIG8gaWQgZG8gZGFkbyAqLyAgXHJcbiAgYXRpdmFyIDogT3V0cHV0RW1pdHRlclJlZjxudW1iZXI+ID0gb3V0cHV0PG51bWJlcj4oKTtcclxuICByZWZyZXNoOiBPdXRwdXRFbWl0dGVyUmVmPHZvaWQ+ID0gb3V0cHV0PHZvaWQ+KCk7XHJcblxyXG5cclxuICBsb2FkaW5nOiBNb2RlbFNpZ25hbDxib29sZWFuPiA9IG1vZGVsPGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgLyoqIExpc3RhIGRlIGRhZG9zIGEgc2VyIGV4aWJpZG9zICovXHJcbiAgaXRlbXM6IE1vZGVsU2lnbmFsPFRbXT4gPSBtb2RlbDxUW10+KFtdKTtcclxuXHJcbiAgLyoqIExpc3RhIGRlIGNhbXBvcyBhIHNlciBleGliaWRvcyAqL1xyXG4gIGxzdFRhYmxlRmllbGRzOiBNb2RlbFNpZ25hbDxUYWJsZUZpZWxkW10+ID0gbW9kZWw8VGFibGVGaWVsZFtdPihbXSk7XHJcbiAgbHN0VGFibGVGaWVsZHNBdmFpbGFibGU6IFNpZ25hbDxBdmFpbGFibGVUYWJsZUZpZWxkW10+ID0gY29tcHV0ZWQ8QXZhaWxhYmxlVGFibGVGaWVsZFtdPigoKSA9PiB7IFxyXG4gICAgcmV0dXJuIHRoaXMubHN0VGFibGVGaWVsZHMoKS5maWx0ZXIocCA9PiAhcC5oaWRkZW4pLm1hcCh0ZiA9PiB7XHJcbiAgICAgIHJldHVybiBuZXcgQXZhaWxhYmxlVGFibGVGaWVsZChcclxuICAgICAgICB0ZiwgXHJcbiAgICAgICAgdGhpcy5hc2NlbmRpbmcoKSAmJiB0aGlzLm9yZGVyQnlQcm9wZXJ0eSgpID09IHRmLmluZGV4LCBcclxuICAgICAgICAhdGhpcy5hc2NlbmRpbmcoKSAmJiB0aGlzLm9yZGVyQnlQcm9wZXJ0eSgpID09IHRmLmluZGV4XHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICB9KTtcclxuXHJcbiAgLyoqIFJlbW92ZSBvcyBmaWx0cm9zIG5vIGNhYmXDp2FsaG8gZGEgdGFiZWxhICAqL1xyXG4gIG5vRmlsdGVyczogSW5wdXRTaWduYWw8Ym9vbGVhbj4gPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIC8qKiBBcGxpY2EgY2xhc3NlcyBkZSBDU1MgbmEgY29sdW5hIGRlIGFjaXJkbyBjb20gbyByZXRvcm5vIGRhIGZ1bsOnw6NvIHBhc3NhZGEgY29tbyBwYXJhbWV0cm8gICovXHJcbiAgY29sdW1uQ2xhc3M6IElucHV0U2lnbmFsPENTU1N0eWxlU3RyaW5nR2VuZXJhdG9yIHwgbnVsbD4gPSBpbnB1dDxDU1NTdHlsZVN0cmluZ0dlbmVyYXRvciB8IG51bGw+KG51bGwpO1xyXG5cclxuICAvKiogQXBsaWNhIHN0eWxlIGRlIENTUyBuYSBjb2x1bmEgZGUgYWNpcmNvIGNvbSBvIHJldG9ybm8gZGEgZnVuw6fDo28gcGFzc2FkYSBjb21vIHBhcmFtZXRybyAgKi9cclxuICBjb2x1bW5TdHlsZTogSW5wdXRTaWduYWw8Q1NTU3R5bGVTdHJpbmdHZW5lcmF0b3IgfCBudWxsPiA9IGlucHV0PENTU1N0eWxlU3RyaW5nR2VuZXJhdG9yIHwgbnVsbD4obnVsbCk7XHJcblxyXG4gIC8qKiBSZW1vdmUgYSBwYWdpbmHDp8OjbyBkYSBsaXN0YWdlbSAqL1xyXG4gIG5vUGFnaW5hdGlvbjogSW5wdXRTaWduYWw8Ym9vbGVhbj4gPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIC8qKiBDYW1pbmhvIGRlIHJlZGlyZWNpb25hbWVudG8gZG8gaXRlbSAqL1xyXG4gIGl0ZW1QYXRoOiBJbnB1dFNpZ25hbDxzdHJpbmc+ID0gaW5wdXQ8c3RyaW5nPigndmlldy86aWQnKTtcclxuICBpdGVtQ2xpY2s6IE91dHB1dEVtaXR0ZXJSZWY8e2l0ZW06IFQsIGZpZWxkOiBUYWJsZUZpZWxkfT4gPSBvdXRwdXQ8e2l0ZW06IFQsIGZpZWxkOiBUYWJsZUZpZWxkfT4oKTtcclxuXHJcbiAgSW5wdXRUeXBlID0gSW5wdXRUeXBlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBzdG9yYWdlU2VydmljZSA6IFN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIHJvdXRlciAgICAgICAgOiBSb3V0ZXIsXHJcbiAgKSB7IFxyXG4gICAgZWZmZWN0KCgpID0+IHtcclxuICAgICAgZm9yIChjb25zdCB0ZiBvZiB0aGlzLmxzdFRhYmxlRmllbGRzKCkuZmlsdGVyKHAgPT4gcC50eXBlID09IElucHV0VHlwZS5TZWxlY3QpKSB7XHJcbiAgICAgICAgKHRmLmNvbmZpZ3VyYXRpb24gYXMgSW5wdXRTZWxlY3RDb25maWd1cmF0aW9uKS5sb2FkZXIuUmVmcmVzaCgpLnRoZW4oKCkgPT4gdGhpcy5TZXRMc3RSb3dzKCkpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuU2V0THN0Um93cygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuUmVkaXJlY3QoZmllbGQ6IFRhYmxlRmllbGQgfCB1bmRlZmluZWQsIGl0ZW06IFQpOiB2b2lkIHtcclxuICBpZiAoZmllbGQgPT0gbnVsbCkge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuICB0aGlzLml0ZW1DbGljay5lbWl0KHsgaXRlbSwgZmllbGQgfSk7XHJcbiAgaWYgKGZpZWxkLmluZGV4ID09ICdhdGl2bycpIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcbiAgaWYgKGZpZWxkLnR5cGUgPT0gJ0ZpbGUnKSB7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG4gIGlmICh0aGlzLml0ZW1QYXRoKCkpIHtcclxuICAgIGNvbnN0IGlkID0gaXRlbVsnaWQnXTtcclxuICAgIGNvbnN0IHBhdGggPSB0aGlzLml0ZW1QYXRoKCkucmVwbGFjZShcIjppZFwiLCBpZC50b1N0cmluZygpKTtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtgLi8ke3BhdGh9YF0sIHsgcmVsYXRpdmVUbzogdGhpcy5hY3RpdmF0ZWRSb3V0ZSB9KVxyXG4gIH1cclxufVxyXG5cclxuICBTZXRMc3RSb3dzKCl7IFxyXG4gICAgdGhpcy5sc3RSb3dzID0gdGhpcy5pdGVtcygpLm1hcChpdGVtID0+IHtcclxuICAgICAgcmV0dXJuIG5ldyBEZWZhdWx0VGFibGVSb3c8VD4oXHJcbiAgICAgICAgaXRlbSwgXHJcbiAgICAgICAgaXRlbVsnaWQnXSxcclxuICAgICAgICB0aGlzLkdldENvbHVtbnMoaXRlbSksXHJcbiAgICAgICAgJycsXHJcbiAgICAgICAgJycsXHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgXHJcbiAgbHN0Um93czogRGVmYXVsdFRhYmxlUm93PFQ+W10gPSBbXTsgXHJcblxyXG4gIEdldENvbHVtbnMoaXRlbTogVCk6IERlZmF1bHRUYWJsZUNvbHVtbltdIHtcclxuICAgIHJldHVybiB0aGlzLmxzdFRhYmxlRmllbGRzKCkuZmlsdGVyKHAgPT4gIXAuaGlkZGVuKS5tYXAodGYgPT4ge1xyXG4gICAgICBjb25zdCB2YWx1ZSA9IGl0ZW1bdGYuaW5kZXhdO1xyXG4gICAgICBjb25zdCBjb2x1bW4gPSBuZXcgRGVmYXVsdFRhYmxlQ29sdW1uKHZhbHVlLCB0Zik7XHJcbiAgICAgIGNvbHVtbi5jbGFzcyA9IHRoaXMuY29sdW1uQ2xhc3MoKSA/IHRoaXMuY29sdW1uQ2xhc3MoKSh0Zi5pbmRleCwgaXRlbSkgOiAnJztcclxuICAgICAgY29sdW1uLnN0eWxlID0gdGhpcy5jb2x1bW5TdHlsZSgpID8gdGhpcy5jb2x1bW5TdHlsZSgpKHRmLmluZGV4LCBpdGVtKSA6ICcnO1xyXG4gICAgICBcclxuICAgICAgaWYoIXZhbHVlKXsgXHJcbiAgICAgICAgY29sdW1uLmxhYmVsID0gJy0nIFxyXG4gICAgICAgIHJldHVybiBjb2x1bW47XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIGlmKHRmLnR5cGUgPT0gSW5wdXRUeXBlLkJvb2wpe1xyXG4gICAgICAgIGNvbHVtbi5sYWJlbCA9IFwiPGJvb2w+XCJcclxuICAgICAgfSBlbHNlXHJcbiAgICAgIGlmKHRmLnR5cGUgPT0gSW5wdXRUeXBlLkNlcCl7XHJcbiAgICAgICAgY29sdW1uLmxhYmVsID0gRm9ybWF0Q2VwKHZhbHVlKTtcclxuICAgICAgfSBlbHNlXHJcbiAgICAgIGlmKHRmLnR5cGUgPT0gSW5wdXRUeXBlLkNvbG9yKXtcclxuICAgICAgICBjb2x1bW4ubGFiZWwgPSB2YWx1ZTtcclxuICAgICAgfSBlbHNlXHJcbiAgICAgIGlmKFtJbnB1dFR5cGUuQ3BmLCBJbnB1dFR5cGUuQ25waiwgSW5wdXRUeXBlLkNwZkNucGpdLmluY2x1ZGVzKHRmLnR5cGUpKXtcclxuICAgICAgICBjb2x1bW4ubGFiZWwgPSBGb3JtYXRDcGZDbnBqKHZhbHVlKTtcclxuICAgICAgfSBlbHNlXHJcbiAgICAgIGlmKHRmLnR5cGUgPT0gSW5wdXRUeXBlLkRhdGVUaW1lKXtcclxuICAgICAgICBjb2x1bW4uY2xhc3MgKz0gJyBmb250LW1vbm8nO1xyXG4gICAgICAgIGNvbHVtbi5sYWJlbCA9IFV0aWxzLkRhdGVJU09Ub0RETU1ZWVlZSEhNTSh2YWx1ZSk7XHJcbiAgICAgIH0gZWxzZVxyXG4gICAgICBpZih0Zi50eXBlID09IElucHV0VHlwZS5EYXRlKXtcclxuICAgICAgICBjb2x1bW4uY2xhc3MgKz0gJyBmb250LW1vbm8nO1xyXG4gICAgICAgIGNvbHVtbi5sYWJlbCA9IFV0aWxzLkRhdGVJU09Ub0RETU1ZWVlZKHZhbHVlKTtcclxuICAgICAgfSBlbHNlXHJcbiAgICAgIGlmKHRmLnR5cGUgPT0gSW5wdXRUeXBlLlRpbWUpe1xyXG4gICAgICAgIGNvbHVtbi5jbGFzcyArPSAnIGZvbnQtbW9ubyc7XHJcbiAgICAgICAgY29sdW1uLmxhYmVsID0gdmFsdWU7XHJcbiAgICAgIH0gZWxzZVxyXG4gICAgICBpZihbSW5wdXRUeXBlLkRlY2ltYWwsIElucHV0VHlwZS5EZWNpbWFsLCBJbnB1dFR5cGUuQ3VycmVuY3ksIElucHV0VHlwZS5OdW1iZXJdLmluY2x1ZGVzKHRmLnR5cGUpKXtcclxuICAgICAgICBjb25zdCBjb25maWd1cmF0aW9uOiBJbnB1dERlY2ltYWxDb25maWd1cmF0aW9uID0gdGYuY29uZmlndXJhdGlvbjtcclxuICAgICAgICBjb2x1bW4ubGFiZWwgPSBbXHJcbiAgICAgICAgICBjb25maWd1cmF0aW9uLnByZWZpeCwgXHJcbiAgICAgICAgICBmb3JtYXROdW1iZXIodmFsdWUgYXMgbnVtYmVyLCAncHQtQlInLCBgMS4ke2NvbmZpZ3VyYXRpb24ucHJlY2lzaW9ufS0ke2NvbmZpZ3VyYXRpb24ucHJlY2lzaW9ufWApLFxyXG4gICAgICAgICAgY29uZmlndXJhdGlvbi5zdWZpeCwgXHJcbiAgICAgICAgXS5qb2luKCcgJyk7XHJcbiAgICAgIH0gZWxzZVxyXG4gICAgICBpZih0Zi50eXBlID09IElucHV0VHlwZS5GaWxlKXtcclxuICAgICAgICBjb2x1bW4ubGFiZWwgPSAnPGZpbGU+JztcclxuICAgICAgfSBlbHNlXHJcbiAgICAgIGlmKHRmLnR5cGUgPT0gSW5wdXRUeXBlLkljb24pe1xyXG4gICAgICAgIGNvbHVtbi5sYWJlbCA9ICdpY29uJztcclxuICAgICAgfSBlbHNlXHJcbiAgICAgIGlmKHRmLnR5cGUgPT0gSW5wdXRUeXBlLlNlbGVjdCl7XHJcbiAgICAgICAgY29sdW1uLmxhYmVsID0gKHRmLmNvbmZpZ3VyYXRpb24gYXMgSW5wdXRTZWxlY3RDb25maWd1cmF0aW9uKS5sb2FkZXIuR2V0TGFiZWwodmFsdWUpO1xyXG4gICAgICAgIGNvbHVtbi5sb2FkaW5nID0gISh0Zi5jb25maWd1cmF0aW9uIGFzIElucHV0U2VsZWN0Q29uZmlndXJhdGlvbikubG9hZGVyLmlzTG9hZGVkO1xyXG4gICAgICB9IGVsc2VcclxuICAgICAgaWYoW0lucHV0VHlwZS5TdHJpbmcsIElucHV0VHlwZS5UZXh0QXJlYV0uaW5jbHVkZXModGYudHlwZSkpe1xyXG4gICAgICAgIGNvbHVtbi5sYWJlbCA9IHZhbHVlXHJcbiAgICAgIH0gZWxzZVxyXG4gICAgICBpZihbSW5wdXRUeXBlLlRlbGVmb25lLCBJbnB1dFR5cGUuQ2VsdWxhciwgSW5wdXRUeXBlLlRlbGVmb25lQ2VsdWxhcl0uaW5jbHVkZXModGYudHlwZSkpe1xyXG4gICAgICAgIGNvbHVtbi5sYWJlbCA9IEZvcm1hdFRlbGVmb25lQ2VsdWxhcih2YWx1ZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBjb2x1bW47XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkgeyB0aGlzLlNldExzdFJvd3MoKTsgfVxyXG5cclxuICBTd2l0Y2hPcmRlcih0ZjogVGFibGVGaWVsZCk6IHZvaWR7XHJcbiAgICBpZih0aGlzLm9yZGVyQnlQcm9wZXJ0eSgpICE9IHRmLmluZGV4KXtcclxuICAgICAgdGhpcy5vcmRlckJ5UHJvcGVydHkuc2V0KHRmLmluZGV4KTtcclxuICAgICAgdGhpcy5hc2NlbmRpbmcuc2V0KHRydWUpO1xyXG4gICAgfSBlbHNlIFxyXG4gICAgaWYodGhpcy5hc2NlbmRpbmcoKSl7XHJcbiAgICAgIHRoaXMuYXNjZW5kaW5nLnNldChmYWxzZSk7XHJcbiAgICB9IGVsc2V7IFxyXG4gICAgICB0aGlzLm9yZGVyQnlQcm9wZXJ0eS5zZXQobnVsbCk7IFxyXG4gICAgfVxyXG4gICAgdGhpcy5yZWZyZXNoLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIENoYW5nZUZpbHRlcigpOiB2b2lke1xyXG4gICAgdGhpcy5maWx0ZXIuc2V0KENvbXBpbGVMc3RUYWJsZUZpZWxkKHRoaXMubHN0VGFibGVGaWVsZHMoKSkpO1xyXG4gICAgdGhpcy5wYWdlLnNldCgxKTtcclxuICAgIHRoaXMucmVmcmVzaC5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBBdGl2YXIoaWQ6IG51bWJlcik6IHZvaWR7XHJcbiAgICB0aGlzLmF0aXZhci5lbWl0KGlkKTtcclxuICB9XHJcbn1cclxuXHJcbmNsYXNzIERlZmF1bHRUYWJsZVJvdzxUPntcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBpdGVtOiBULFxyXG4gICAgcHVibGljIGlkOiBudW1iZXIgfCB1bmRlZmluZWQsXHJcbiAgICBwdWJsaWMgbHN0Q29sdW1uczogRGVmYXVsdFRhYmxlQ29sdW1uW10sXHJcbiAgICBwdWJsaWMgYWNvZXNDbGFzczogc3RyaW5nID0gJycsXHJcbiAgICBwdWJsaWMgYWNvZXNTdHlsZTogc3RyaW5nID0gJycsXHJcbiAgKXt9XHJcbn0gXHJcblxyXG5jbGFzcyBEZWZhdWx0VGFibGVDb2x1bW57XHJcbiAgcHVibGljIGxhYmVsOiBzdHJpbmcgfCBudWxsXHJcbiAgcHVibGljIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgY2xhc3M6IHN0cmluZyA9ICcnO1xyXG4gIHB1YmxpYyBzdHlsZTogc3RyaW5nID0gJyc7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgdmFsdWU6IGFueSA9IG51bGwsXHJcbiAgICBwdWJsaWMgdGY6IFRhYmxlRmllbGQsXHJcbiAgKXt9XHJcbn1cclxuXHJcbmNsYXNzIEF2YWlsYWJsZVRhYmxlRmllbGR7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgdGY6IFRhYmxlRmllbGQsXHJcbiAgICBwdWJsaWMgYXNjZW5kaW5nOiBib29sZWFuLFxyXG4gICAgcHVibGljIGRlc2NlbmRpbmc6IGJvb2xlYW4sXHJcbiAgKXt9XHJcbn0iLCI8ZGl2IGNsYXNzPVwic2l6ZS1mdWxsIHJvdW5kZWQteGwgZmxleCBmbGV4LWNvbCBvdmVyZmxvdy1oaWRkZW4gcmVsYXRpdmVcIj5cclxuICAgIDxsb2FkaW5nIFt0eXBlXT1cIjNcIiBbbG9hZGluZ109XCJsb2FkaW5nKClcIj48L2xvYWRpbmc+XHJcbiAgICA8Y29udGVudC1ibG9jayB0ZXh0PVwiU2VtIERhZG9zXCIgW3ZhbHVlXT1cIiEoaXRlbXMubGVuZ3RoICE9IDAgfHwgbG9hZGluZylcIj48L2NvbnRlbnQtYmxvY2s+XHJcblxyXG4gICAgIDxkaXYgY2xhc3M9XCJzaXplLWZ1bGwgc2hyaW5rIHJlbGF0aXZlIG92ZXJmbG93LXktYXV0b1wiPlxyXG4gICAgICAgIDx0YWJsZT5cclxuICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgIEBpZihhY29lc1RlbXBsYXRlKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCIgY2xhc3M9XCJwLTJcIj4gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBw6fDtWVzIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgQGZvciAodGZhIG9mIGxzdFRhYmxlRmllbGRzQXZhaWxhYmxlKCk7IHRyYWNrIHRmYS50Zi5pbmRleCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIiBjbGFzcz1cInAtMlwiPiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC0yIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LXN0YXJ0IHRoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmKCFub0ZpbHRlcnMoKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aC1maWx0ZXIgY2xhc3M9XCIhdGV4dC1iYXNlXCIgc3R5bGU9XCJ0ZXh0LXRyYW5zZm9ybTogbm9uZSAhaW1wb3J0YW50XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiKCh0ZmEudGYudHlwZSAhPSBJbnB1dFR5cGUuRmlsZSB8fCAodGZhLnRmLmZpbHRlciAmJiB0ZmEudGYuZGlzYWJsZWRDaGFuZ2UoKSkpICYmICFub0ZpbHRlcnMoKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpZWxkXT1cInRmYS50ZlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIkNoYW5nZUZpbHRlcigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvdGgtZmlsdGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3t0ZmEudGYuaGVhZGVyfX0gXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZigodGZhLnRmLnR5cGUgIT0gSW5wdXRUeXBlLkZpbGUgfHwgKHRmYS50Zi5maWx0ZXIgJiYgdGZhLnRmLmRpc2FibGVkQ2hhbmdlKCkpKSAmJiAhbm9GaWx0ZXJzKCkpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBbbmdDbGFzc109XCJ7ICdiZy1saWdodC8xMCAhb3BhY2l0eS0xMDAnOiB0ZmEuYXNjZW5kaW5nIHx8IHRmYS5kZXNjZW5kaW5nIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJvcmRlciBoLTQgdy01IHJlbGF0aXZlIGN1cnNvci1wb2ludGVyIHJvdW5kZWQtbGcgb3BhY2l0eS0wIGRlZmF1bHQtdHJhbnNpdGlvblwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlN3aXRjaE9yZGVyKHRmYS50ZilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW9uLWljb24gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnRleHQtcHJpbWFyeV09XCJ0ZmEuYXNjZW5kaW5nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFic29sdXRlIGxlZnQtMCB0b3AtMFwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJhcnJvdy11cFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9pb24taWNvbj4gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW9uLWljb24gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnRleHQtcHJpbWFyeV09XCJ0ZmEuZGVzY2VuZGluZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSByaWdodC0wIGJvdHRvbS0wXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImFycm93LWRvd25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvaW9uLWljb24+IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgPHRib2R5PlxyXG4gICAgICAgICAgICAgICAgQGZvciAocm93IG9mIGxzdFJvd3M7IHRyYWNrIHJvdy5pZCB8fCAkaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgICAgICA8dHIgW2hpZGRlbl09XCJsb2FkaW5nKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmKGFjb2VzVGVtcGxhdGUpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIChjbGljayk9XCJSZWRpcmVjdCh1bmRlZmluZWQsIHJvdy5pdGVtKVwiIGNsYXNzPVwid2hpdGVzcGFjZS1ub3dyYXAgcHktMSBweC0zIHt7cm93LmFjb2VzQ2xhc3N9fVwiIFtzdHlsZV09XCJyb3cuYWNvZXNTdHlsZVwiID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYWNvZXNUZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IHJvdy5pdGVtIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGNvbCBvZiByb3cubHN0Q29sdW1uczsgdHJhY2sgY29sLnRmLmluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ7e2NvbC5jbGFzc319IHAtMiBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJSZWRpcmVjdChjb2wudGYsIHJvdy5pdGVtKVwiIFtzdHlsZV09XCInd2hpdGUtc3BhY2U6IHZhcigtLWlvbi10YWJsZS1yb3ctd3JhcCk7JyArIGNvbC5zdHlsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZihjb2wudGYuaW5kZXggPT0gJ2F0aXZvJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2l6ZS1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktc3RhcnRcIiBbcm91dGVyTGlua109XCJudWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW9uLXRvZ2dsZSBbY2hlY2tlZF09XCJjb2wudmFsdWVcIiBbZGlzYWJsZWRdPVwibG9hZGluZygpXCIgKGlvbkNoYW5nZSk9XCJBdGl2YXIocm93LmlkKVwiID48L2lvbi10b2dnbGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZWxzZSBpZiAoY29sLnRmLnR5cGUgPT0gSW5wdXRUeXBlLkJvb2wpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktc3RhcnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZihjb2wudGYuY29uZmlndXJhdGlvbi50eXBlID09ICd0b2dnbGUnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlvbi10b2dnbGUgW2NoZWNrZWRdPVwiY29sLnZhbHVlXCIgW2Rpc2FibGVkXT1cInRydWVcIj48L2lvbi10b2dnbGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlvbi1jaGVja2JveCBbY2hlY2tlZF09XCJjb2wudmFsdWVcIiBbZGlzYWJsZWRdPVwidHJ1ZVwiPjwvaW9uLWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGVsc2UgaWYgKGNvbC50Zi50eXBlID09IElucHV0VHlwZS5GaWxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkb3dubG9hZC1idXR0b24gWyhuZ01vZGVsKV09XCJjb2wudmFsdWVcIiBbY29uZmlndXJhdGlvbl09XCJjb2wudGYuY29uZmlndXJhdGlvblwiPjwvZG93bmxvYWQtYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZWxzZSBpZiAoY29sLmxvYWRpbmcpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW9uLXNwaW5uZXIgbmFtZT1cImRvdHNcIj48L2lvbi1zcGlubmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbbmdDbGFzc109XCJjb2wuY2xhc3NcIj57eyBjb2wubGFiZWwgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3Nsb3Q9aXRlbS1lbmRdXCI+PC9uZy1jb250ZW50PlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgIDwvdGFibGU+XHJcbiAgICAgPC9kaXY+XHJcbiAgICAgQGlmKCFub1BhZ2luYXRpb24oKSl7XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNocmluay0wIHotWzEwMF1cIj5cclxuICAgICAgICAgICAgPGRlZmF1bHQtcGFnaW5hdGlvblxyXG4gICAgICAgICAgICAgICAgW3BhZ2VdPVwicGFnZSgpXCJcclxuICAgICAgICAgICAgICAgIChwYWdlQ2hhbmdlKT1cInBhZ2Uuc2V0KCRldmVudCk7IHJlZnJlc2guZW1pdCgpXCJcclxuICAgICAgICAgICAgICAgIFt0b3RhbF09XCJ0b3RhbCgpXCJcclxuICAgICAgICAgICAgICAgIFtsaW1pdF09XCJsaW1pdCgpXCJcclxuICAgICAgICAgICAgICAgIFtsZW5ndGhdPVwiaXRlbXMoKS5sZW5ndGhcIlxyXG4gICAgICAgICAgICAgICAgW2xvYWRpbmddPVwibG9hZGluZygpXCJcclxuICAgICAgICAgICAgPjwvZGVmYXVsdC1wYWdpbmF0aW9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgfVxyXG48L2Rpdj4iXX0=