ng-easycommerce-v18 0.0.1 → 0.0.3

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 (508) hide show
  1. package/README.md +9 -12
  2. package/esm2022/lib/api/connection.service.mjs +75 -0
  3. package/esm2022/lib/api/index.mjs +2 -0
  4. package/esm2022/lib/classes/checkout/index.mjs +2 -0
  5. package/esm2022/lib/classes/checkout/steps.mjs +29 -0
  6. package/esm2022/lib/classes/filters/attributes-filter.mjs +73 -0
  7. package/esm2022/lib/classes/filters/category-filter.mjs +59 -0
  8. package/esm2022/lib/classes/filters/dynamics-filter.mjs +58 -0
  9. package/esm2022/lib/classes/filters/filter-factory.mjs +21 -0
  10. package/esm2022/lib/classes/filters/filter.mjs +83 -0
  11. package/esm2022/lib/classes/filters/index.mjs +7 -0
  12. package/esm2022/lib/classes/filters/sort-filter.mjs +88 -0
  13. package/esm2022/lib/classes/index.mjs +4 -0
  14. package/esm2022/lib/classes/user.mjs +59 -0
  15. package/esm2022/lib/constants/api.constants.service.mjs +71 -0
  16. package/esm2022/lib/constants/core.constants.service.mjs +205 -0
  17. package/esm2022/lib/constants/index.mjs +3 -0
  18. package/esm2022/lib/ec-components/abstractions-components/block-ec.component.mjs +110 -0
  19. package/esm2022/lib/ec-components/abstractions-components/index.mjs +3 -0
  20. package/esm2022/lib/ec-components/abstractions-components/menu-ec.component.mjs +97 -0
  21. package/esm2022/lib/ec-components/account-ec/account-ec.component.mjs +22 -0
  22. package/esm2022/lib/ec-components/account-ec/index.mjs +4 -0
  23. package/esm2022/lib/ec-components/account-ec/order-ec/order-ec.component.mjs +16 -0
  24. package/esm2022/lib/ec-components/account-ec/orders-list-ec/orders-list-ec.component.mjs +150 -0
  25. package/esm2022/lib/ec-components/auth-ec/auth-ec.component.mjs +12 -0
  26. package/esm2022/lib/ec-components/auth-ec/confirm-account-ec/confirm-account-ec.component.mjs +30 -0
  27. package/esm2022/lib/ec-components/auth-ec/forgot-password-ec/forgot-password-ec.component.mjs +54 -0
  28. package/esm2022/lib/ec-components/auth-ec/index.mjs +7 -0
  29. package/esm2022/lib/ec-components/auth-ec/login-form-ec/login-form-ec.component.mjs +91 -0
  30. package/esm2022/lib/ec-components/auth-ec/register-form-ec/register-form-ec.component.mjs +105 -0
  31. package/esm2022/lib/ec-components/auth-ec/register-wholesaler-form-ec/register-wholesaler-form-ec.component.mjs +153 -0
  32. package/esm2022/lib/ec-components/blocks-ec/block-banner-box-ec/block-banner-box-ec.component.mjs +109 -0
  33. package/esm2022/lib/ec-components/blocks-ec/block-banner-full-ec/block-banner-full-ec.component.mjs +87 -0
  34. package/esm2022/lib/ec-components/blocks-ec/block-form-contact-ec/block-form-contact-ec.component.mjs +87 -0
  35. package/esm2022/lib/ec-components/blocks-ec/block-html-ec/block-html-ec.component.mjs +37 -0
  36. package/esm2022/lib/ec-components/blocks-ec/block-newsletter-ec/block-newsletter-ec.component.mjs +86 -0
  37. package/esm2022/lib/ec-components/blocks-ec/block-products-ec/block-products-ec.component.mjs +109 -0
  38. package/esm2022/lib/ec-components/blocks-ec/blocks-ec.component.mjs +99 -0
  39. package/esm2022/lib/ec-components/blocks-ec/index.mjs +5 -0
  40. package/esm2022/lib/ec-components/breadcrumb-ec/breadcrumb-ec.component.mjs +27 -0
  41. package/esm2022/lib/ec-components/cart-ec/cart-ec.component.mjs +21 -0
  42. package/esm2022/lib/ec-components/cart-ec/cart-item-ec/cart-item-ec.component.mjs +47 -0
  43. package/esm2022/lib/ec-components/cart-ec/index.mjs +3 -0
  44. package/esm2022/lib/ec-components/checkout-ec/checkout-ec.component.mjs +60 -0
  45. package/esm2022/lib/ec-components/checkout-ec/dataform-ec/dataform-ec.component.mjs +271 -0
  46. package/esm2022/lib/ec-components/checkout-ec/dataform-ec/input-ec/input-ec.component.mjs +51 -0
  47. package/esm2022/lib/ec-components/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.mjs +45 -0
  48. package/esm2022/lib/ec-components/checkout-ec/payment-ec/payment-ec.component.mjs +92 -0
  49. package/esm2022/lib/ec-components/checkout-ec/payment-ec/payment-methods/bank-transfer-ec/bank-transfer-ec.component.mjs +30 -0
  50. package/esm2022/lib/ec-components/checkout-ec/payment-ec/payment-methods/index.mjs +4 -0
  51. package/esm2022/lib/ec-components/checkout-ec/payment-ec/payment-methods/mp-redirect-ec/mp-redirect-ec.component.mjs +119 -0
  52. package/esm2022/lib/ec-components/checkout-ec/payment-ec/payment-methods/offline-ec/offline-ec.component.mjs +32 -0
  53. package/esm2022/lib/ec-components/checkout-ec/shipment-ec/shipment-ec.component.mjs +96 -0
  54. package/esm2022/lib/ec-components/checkout-ec/step-container-ec/step-container-ec.component.mjs +35 -0
  55. package/esm2022/lib/ec-components/checkout-ec/success-ec/success-ec.component.mjs +55 -0
  56. package/esm2022/lib/ec-components/collection-ec/collection-ec.component.mjs +72 -0
  57. package/esm2022/lib/ec-components/coupon-ec/coupon-ec.component.mjs +29 -0
  58. package/esm2022/lib/ec-components/filters-ec/filters-ec.component.mjs +38 -0
  59. package/esm2022/lib/ec-components/filters-sort-ec/filters-sort-ec.component.mjs +36 -0
  60. package/esm2022/lib/ec-components/footer-ec/footer-ec.component.mjs +17 -0
  61. package/esm2022/lib/ec-components/header-ec/header-ec.component.mjs +20 -0
  62. package/esm2022/lib/ec-components/home-ec/home-ec.component.mjs +14 -0
  63. package/esm2022/lib/ec-components/index.mjs +25 -0
  64. package/esm2022/lib/ec-components/product-detail-ec/product-detail-ec.component.mjs +86 -0
  65. package/esm2022/lib/ec-components/product-ec/product-ec.component.mjs +51 -0
  66. package/esm2022/lib/ec-components/variants-ec/variants-ec.component.mjs +18 -0
  67. package/esm2022/lib/ec-components/widgets-ec/index.mjs +5 -0
  68. package/esm2022/lib/ec-components/widgets-ec/loading/index.mjs +4 -0
  69. package/esm2022/lib/ec-components/widgets-ec/loading/loading-full-ec/loading-full-ec.component.mjs +11 -0
  70. package/esm2022/lib/ec-components/widgets-ec/loading/loading-inline-ec/loading-inline-ec.component.mjs +16 -0
  71. package/esm2022/lib/ec-components/widgets-ec/loading/loading-section-ec/loading-section-ec.component.mjs +12 -0
  72. package/esm2022/lib/ec-components/widgets-ec/magnizoom-ec/magnizoom-ec.component.mjs +178 -0
  73. package/esm2022/lib/ec-components/widgets-ec/price-ec/price-ec.component.mjs +27 -0
  74. package/esm2022/lib/ec-components/widgets-ec/re-captcha-ec/re-captcha-ec.component.mjs +71 -0
  75. package/esm2022/lib/ec-guards/auth.guard.mjs +18 -0
  76. package/esm2022/lib/ec-guards/index.mjs +2 -0
  77. package/esm2022/lib/ec-pipe/ec-currency-symbol.pipe.mjs +104 -0
  78. package/esm2022/lib/ec-pipe/index.mjs +2 -0
  79. package/esm2022/lib/ec-services/addressing.service.mjs +185 -0
  80. package/esm2022/lib/ec-services/analytics/analytics.service.mjs +80 -0
  81. package/esm2022/lib/ec-services/analytics/doppler.service.mjs +47 -0
  82. package/esm2022/lib/ec-services/analytics/facebook-pixel.service.mjs +212 -0
  83. package/esm2022/lib/ec-services/analytics/google-analytics.service.mjs +283 -0
  84. package/esm2022/lib/ec-services/analytics/gtm.service.mjs +414 -0
  85. package/esm2022/lib/ec-services/analytics/index.mjs +7 -0
  86. package/esm2022/lib/ec-services/analytics/metricool-pixel.service.mjs +55 -0
  87. package/esm2022/lib/ec-services/auth.service.mjs +440 -0
  88. package/esm2022/lib/ec-services/auth.storage.service.mjs +54 -0
  89. package/esm2022/lib/ec-services/blocks-repository.service.mjs +64 -0
  90. package/esm2022/lib/ec-services/blocks.service.mjs +52 -0
  91. package/esm2022/lib/ec-services/cart.service.mjs +465 -0
  92. package/esm2022/lib/ec-services/channel.service.mjs +83 -0
  93. package/esm2022/lib/ec-services/checkout.service.mjs +180 -0
  94. package/esm2022/lib/ec-services/currency.service.mjs +177 -0
  95. package/esm2022/lib/ec-services/filters.service.mjs +134 -0
  96. package/esm2022/lib/ec-services/form.service.mjs +81 -0
  97. package/esm2022/lib/ec-services/index.mjs +27 -0
  98. package/esm2022/lib/ec-services/local-storage.service.mjs +58 -0
  99. package/esm2022/lib/ec-services/ngx-local-storage.service.mjs +66 -0
  100. package/esm2022/lib/ec-services/options.service.mjs +273 -0
  101. package/esm2022/lib/ec-services/order-utility.service.mjs +61 -0
  102. package/esm2022/lib/ec-services/orders.service.mjs +48 -0
  103. package/esm2022/lib/ec-services/pagination.service.mjs +163 -0
  104. package/esm2022/lib/ec-services/parameters.service.mjs +65 -0
  105. package/esm2022/lib/ec-services/payment.service.mjs +54 -0
  106. package/esm2022/lib/ec-services/product-detail.service.mjs +285 -0
  107. package/esm2022/lib/ec-services/products.service.mjs +148 -0
  108. package/esm2022/lib/ec-services/re-captcha.service.mjs +114 -0
  109. package/esm2022/lib/ec-services/shipment.service.mjs +158 -0
  110. package/esm2022/lib/ec-services/stores.service.mjs +27 -0
  111. package/esm2022/lib/ec-services/test.service.mjs +16 -0
  112. package/esm2022/lib/ec-services/toast.service.mjs +81 -0
  113. package/esm2022/lib/interceptors/auth.interceptor.mjs +35 -0
  114. package/esm2022/lib/interceptors/index.mjs +2 -0
  115. package/esm2022/lib/interfaces/analytics/event-key.mjs +2 -0
  116. package/esm2022/lib/interfaces/analytics/facebook-pixel-data.mjs +2 -0
  117. package/esm2022/lib/interfaces/analytics/gtm-config.mjs +2 -0
  118. package/esm2022/lib/interfaces/analytics/index.mjs +4 -0
  119. package/esm2022/lib/interfaces/blocks.mjs +2 -0
  120. package/esm2022/lib/interfaces/checkout.mjs +2 -0
  121. package/esm2022/lib/interfaces/connection.mjs +2 -0
  122. package/esm2022/lib/interfaces/coupon.mjs +2 -0
  123. package/esm2022/lib/interfaces/currency.mjs +2 -0
  124. package/esm2022/lib/interfaces/deserializable.mjs +2 -0
  125. package/esm2022/lib/interfaces/environment.mjs +2 -0
  126. package/esm2022/lib/interfaces/filter.mjs +2 -0
  127. package/esm2022/lib/interfaces/index.mjs +19 -0
  128. package/esm2022/lib/interfaces/options.mjs +2 -0
  129. package/esm2022/lib/interfaces/pagination.mjs +2 -0
  130. package/esm2022/lib/interfaces/parameter.mjs +2 -0
  131. package/esm2022/lib/interfaces/product.mjs +2 -0
  132. package/esm2022/lib/interfaces/step.mjs +2 -0
  133. package/esm2022/lib/interfaces/storage.mjs +2 -0
  134. package/esm2022/lib/interfaces/store.mjs +2 -0
  135. package/esm2022/lib/interfaces/types/index.mjs +2 -0
  136. package/esm2022/lib/interfaces/types/user.type.mjs +2 -0
  137. package/esm2022/lib/providers/index.mjs +2 -0
  138. package/esm2022/lib/providers/provideEnvironment.mjs +20 -0
  139. package/esm2022/lib/stores/currency.store.mjs +10 -0
  140. package/esm2022/lib/stores/index.mjs +2 -0
  141. package/esm2022/ng-easycommerce-v18.mjs +5 -0
  142. package/esm2022/public-api.mjs +20 -0
  143. package/fesm2022/ng-easycommerce-v18.mjs +8228 -0
  144. package/fesm2022/ng-easycommerce-v18.mjs.map +1 -0
  145. package/index.d.ts +5 -0
  146. package/lib/api/connection.service.d.ts +52 -0
  147. package/lib/api/index.d.ts +1 -0
  148. package/lib/classes/checkout/index.d.ts +1 -0
  149. package/lib/classes/checkout/steps.d.ts +15 -0
  150. package/lib/classes/filters/attributes-filter.d.ts +14 -0
  151. package/lib/classes/filters/category-filter.d.ts +14 -0
  152. package/lib/classes/filters/dynamics-filter.d.ts +13 -0
  153. package/lib/classes/filters/filter-factory.d.ts +5 -0
  154. package/lib/classes/filters/filter.d.ts +19 -0
  155. package/lib/classes/filters/index.d.ts +6 -0
  156. package/lib/classes/filters/sort-filter.d.ts +14 -0
  157. package/{projects/ng-easycommerce/src/lib/classes/index.ts → lib/classes/index.d.ts} +3 -3
  158. package/lib/classes/user.d.ts +50 -0
  159. package/lib/constants/api.constants.service.d.ts +54 -0
  160. package/lib/constants/core.constants.service.d.ts +116 -0
  161. package/lib/constants/index.d.ts +2 -0
  162. package/lib/ec-components/abstractions-components/block-ec.component.d.ts +62 -0
  163. package/lib/ec-components/abstractions-components/index.d.ts +2 -0
  164. package/lib/ec-components/abstractions-components/menu-ec.component.d.ts +67 -0
  165. package/lib/ec-components/account-ec/account-ec.component.d.ts +10 -0
  166. package/lib/ec-components/account-ec/index.d.ts +3 -0
  167. package/lib/ec-components/account-ec/order-ec/order-ec.component.d.ts +8 -0
  168. package/lib/ec-components/account-ec/orders-list-ec/orders-list-ec.component.d.ts +55 -0
  169. package/lib/ec-components/auth-ec/auth-ec.component.d.ts +5 -0
  170. package/lib/ec-components/auth-ec/confirm-account-ec/confirm-account-ec.component.d.ts +11 -0
  171. package/lib/ec-components/auth-ec/forgot-password-ec/forgot-password-ec.component.d.ts +27 -0
  172. package/{projects/ng-easycommerce/src/lib/ec-components/auth-ec/index.ts → lib/ec-components/auth-ec/index.d.ts} +6 -6
  173. package/lib/ec-components/auth-ec/login-form-ec/login-form-ec.component.d.ts +42 -0
  174. package/lib/ec-components/auth-ec/register-form-ec/register-form-ec.component.d.ts +39 -0
  175. package/lib/ec-components/auth-ec/register-wholesaler-form-ec/register-wholesaler-form-ec.component.d.ts +62 -0
  176. package/lib/ec-components/blocks-ec/block-banner-box-ec/block-banner-box-ec.component.d.ts +47 -0
  177. package/lib/ec-components/blocks-ec/block-banner-full-ec/block-banner-full-ec.component.d.ts +54 -0
  178. package/lib/ec-components/blocks-ec/block-form-contact-ec/block-form-contact-ec.component.d.ts +21 -0
  179. package/lib/ec-components/blocks-ec/block-html-ec/block-html-ec.component.d.ts +25 -0
  180. package/lib/ec-components/blocks-ec/block-newsletter-ec/block-newsletter-ec.component.d.ts +19 -0
  181. package/lib/ec-components/blocks-ec/block-products-ec/block-products-ec.component.d.ts +51 -0
  182. package/lib/ec-components/blocks-ec/blocks-ec.component.d.ts +59 -0
  183. package/{projects/ng-easycommerce/src/lib/ec-components/blocks-ec/index.ts → lib/ec-components/blocks-ec/index.d.ts} +4 -4
  184. package/lib/ec-components/breadcrumb-ec/breadcrumb-ec.component.d.ts +11 -0
  185. package/lib/ec-components/cart-ec/cart-ec.component.d.ts +12 -0
  186. package/lib/ec-components/cart-ec/cart-item-ec/cart-item-ec.component.d.ts +17 -0
  187. package/lib/ec-components/cart-ec/index.d.ts +2 -0
  188. package/lib/ec-components/checkout-ec/checkout-ec.component.d.ts +20 -0
  189. package/lib/ec-components/checkout-ec/dataform-ec/dataform-ec.component.d.ts +83 -0
  190. package/lib/ec-components/checkout-ec/dataform-ec/input-ec/input-ec.component.d.ts +14 -0
  191. package/lib/ec-components/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.d.ts +11 -0
  192. package/lib/ec-components/checkout-ec/payment-ec/payment-ec.component.d.ts +37 -0
  193. package/lib/ec-components/checkout-ec/payment-ec/payment-methods/bank-transfer-ec/bank-transfer-ec.component.d.ts +11 -0
  194. package/{projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/index.ts → lib/ec-components/checkout-ec/payment-ec/payment-methods/index.d.ts} +3 -3
  195. package/lib/ec-components/checkout-ec/payment-ec/payment-methods/mp-redirect-ec/mp-redirect-ec.component.d.ts +30 -0
  196. package/lib/ec-components/checkout-ec/payment-ec/payment-methods/offline-ec/offline-ec.component.d.ts +11 -0
  197. package/lib/ec-components/checkout-ec/shipment-ec/shipment-ec.component.d.ts +30 -0
  198. package/lib/ec-components/checkout-ec/step-container-ec/step-container-ec.component.d.ts +11 -0
  199. package/lib/ec-components/checkout-ec/success-ec/success-ec.component.d.ts +30 -0
  200. package/lib/ec-components/collection-ec/collection-ec.component.d.ts +37 -0
  201. package/lib/ec-components/coupon-ec/coupon-ec.component.d.ts +12 -0
  202. package/lib/ec-components/filters-ec/filters-ec.component.d.ts +14 -0
  203. package/lib/ec-components/filters-sort-ec/filters-sort-ec.component.d.ts +14 -0
  204. package/lib/ec-components/footer-ec/footer-ec.component.d.ts +10 -0
  205. package/lib/ec-components/header-ec/header-ec.component.d.ts +15 -0
  206. package/lib/ec-components/home-ec/home-ec.component.d.ts +8 -0
  207. package/{projects/ng-easycommerce/src/lib/ec-components/index.ts → lib/ec-components/index.d.ts} +24 -17
  208. package/lib/ec-components/product-detail-ec/product-detail-ec.component.d.ts +31 -0
  209. package/lib/ec-components/product-ec/product-ec.component.d.ts +31 -0
  210. package/lib/ec-components/variants-ec/variants-ec.component.d.ts +8 -0
  211. package/{projects/ng-easycommerce/src/lib/ec-components/widgets-ec/index.ts → lib/ec-components/widgets-ec/index.d.ts} +4 -4
  212. package/{projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/index.ts → lib/ec-components/widgets-ec/loading/index.d.ts} +3 -3
  213. package/lib/ec-components/widgets-ec/loading/loading-full-ec/loading-full-ec.component.d.ts +5 -0
  214. package/lib/ec-components/widgets-ec/loading/loading-inline-ec/loading-inline-ec.component.d.ts +6 -0
  215. package/lib/ec-components/widgets-ec/loading/loading-section-ec/loading-section-ec.component.d.ts +5 -0
  216. package/lib/ec-components/widgets-ec/magnizoom-ec/magnizoom-ec.component.d.ts +70 -0
  217. package/lib/ec-components/widgets-ec/price-ec/price-ec.component.d.ts +16 -0
  218. package/lib/ec-components/widgets-ec/re-captcha-ec/re-captcha-ec.component.d.ts +26 -0
  219. package/lib/ec-guards/auth.guard.d.ts +8 -0
  220. package/lib/ec-guards/index.d.ts +1 -0
  221. package/lib/ec-pipe/ec-currency-symbol.pipe.d.ts +56 -0
  222. package/lib/ec-pipe/index.d.ts +1 -0
  223. package/lib/ec-services/addressing.service.d.ts +233 -0
  224. package/lib/ec-services/analytics/analytics.service.d.ts +50 -0
  225. package/lib/ec-services/analytics/doppler.service.d.ts +26 -0
  226. package/lib/ec-services/analytics/facebook-pixel.service.d.ts +102 -0
  227. package/lib/ec-services/analytics/google-analytics.service.d.ts +118 -0
  228. package/lib/ec-services/analytics/gtm.service.d.ts +153 -0
  229. package/{projects/ng-easycommerce/src/lib/ec-services/analytics/index.ts → lib/ec-services/analytics/index.d.ts} +6 -6
  230. package/lib/ec-services/analytics/metricool-pixel.service.d.ts +26 -0
  231. package/lib/ec-services/auth.service.d.ts +229 -0
  232. package/lib/ec-services/auth.storage.service.d.ts +24 -0
  233. package/lib/ec-services/blocks-repository.service.d.ts +40 -0
  234. package/lib/ec-services/blocks.service.d.ts +38 -0
  235. package/lib/ec-services/cart.service.d.ts +211 -0
  236. package/lib/ec-services/channel.service.d.ts +59 -0
  237. package/lib/ec-services/checkout.service.d.ts +49 -0
  238. package/lib/ec-services/currency.service.d.ts +108 -0
  239. package/lib/ec-services/filters.service.d.ts +56 -0
  240. package/lib/ec-services/form.service.d.ts +50 -0
  241. package/{projects/ng-easycommerce/src/lib/ec-services/index.ts → lib/ec-services/index.d.ts} +26 -24
  242. package/lib/ec-services/local-storage.service.d.ts +40 -0
  243. package/lib/ec-services/ngx-local-storage.service.d.ts +42 -0
  244. package/lib/ec-services/options.service.d.ts +121 -0
  245. package/lib/ec-services/order-utility.service.d.ts +15 -0
  246. package/lib/ec-services/orders.service.d.ts +14 -0
  247. package/lib/ec-services/pagination.service.d.ts +89 -0
  248. package/lib/ec-services/parameters.service.d.ts +41 -0
  249. package/lib/ec-services/payment.service.d.ts +22 -0
  250. package/lib/ec-services/product-detail.service.d.ts +97 -0
  251. package/lib/ec-services/products.service.d.ts +48 -0
  252. package/lib/ec-services/re-captcha.service.d.ts +65 -0
  253. package/lib/ec-services/shipment.service.d.ts +49 -0
  254. package/lib/ec-services/stores.service.d.ts +12 -0
  255. package/lib/ec-services/test.service.d.ts +6 -0
  256. package/lib/ec-services/toast.service.d.ts +59 -0
  257. package/lib/interceptors/auth.interceptor.d.ts +2 -0
  258. package/lib/interceptors/index.d.ts +1 -0
  259. package/lib/interfaces/analytics/event-key.d.ts +1 -0
  260. package/lib/interfaces/analytics/facebook-pixel-data.d.ts +5 -0
  261. package/{projects/ng-easycommerce/src/lib/interfaces/analytics/gtm-config.ts → lib/interfaces/analytics/gtm-config.d.ts} +6 -6
  262. package/{projects/ng-easycommerce/src/lib/interfaces/analytics/index.ts → lib/interfaces/analytics/index.d.ts} +3 -3
  263. package/lib/interfaces/blocks.d.ts +41 -0
  264. package/{projects/ng-easycommerce/src/lib/interfaces/checkout.ts → lib/interfaces/checkout.d.ts} +12 -14
  265. package/{projects/ng-easycommerce/src/lib/interfaces/connection.ts → lib/interfaces/connection.d.ts} +7 -8
  266. package/lib/interfaces/coupon.d.ts +5 -0
  267. package/lib/interfaces/currency.d.ts +9 -0
  268. package/{projects/ng-easycommerce/src/lib/interfaces/deserializable.ts → lib/interfaces/deserializable.d.ts} +3 -3
  269. package/{projects/ng-easycommerce/src/lib/interfaces/environment.ts → lib/interfaces/environment.d.ts} +6 -6
  270. package/{projects/ng-easycommerce/src/lib/interfaces/filter.ts → lib/interfaces/filter.d.ts} +38 -59
  271. package/{projects/ng-easycommerce/src/lib/interfaces/index.ts → lib/interfaces/index.d.ts} +16 -18
  272. package/lib/interfaces/options.d.ts +26 -0
  273. package/lib/interfaces/pagination.d.ts +24 -0
  274. package/lib/interfaces/parameter.d.ts +14 -0
  275. package/{projects/ng-easycommerce/src/lib/interfaces/product.ts → lib/interfaces/product.d.ts} +73 -81
  276. package/lib/interfaces/step.d.ts +15 -0
  277. package/lib/interfaces/storage.d.ts +7 -0
  278. package/{projects/ng-easycommerce/src/lib/interfaces/store.ts → lib/interfaces/store.d.ts} +17 -17
  279. package/lib/interfaces/types/index.d.ts +1 -0
  280. package/lib/interfaces/types/user.type.d.ts +5 -0
  281. package/lib/providers/index.d.ts +1 -0
  282. package/lib/providers/provideEnvironment.d.ts +13 -0
  283. package/lib/stores/currency.store.d.ts +7 -0
  284. package/lib/stores/index.d.ts +1 -0
  285. package/package.json +29 -58
  286. package/{projects/ng-easycommerce/src/public-api.ts → public-api.d.ts} +8 -24
  287. package/.editorconfig +0 -16
  288. package/angular.json +0 -48
  289. package/projects/ng-easycommerce/README.md +0 -24
  290. package/projects/ng-easycommerce/ng-package.json +0 -7
  291. package/projects/ng-easycommerce/package.json +0 -12
  292. package/projects/ng-easycommerce/src/lib/api/connection.service.ts +0 -79
  293. package/projects/ng-easycommerce/src/lib/api/index.ts +0 -1
  294. package/projects/ng-easycommerce/src/lib/classes/checkout/index.ts +0 -1
  295. package/projects/ng-easycommerce/src/lib/classes/checkout/steps.ts +0 -37
  296. package/projects/ng-easycommerce/src/lib/classes/filters/attributes-filter.ts +0 -74
  297. package/projects/ng-easycommerce/src/lib/classes/filters/category-filter.ts +0 -57
  298. package/projects/ng-easycommerce/src/lib/classes/filters/dynamics-filter.ts +0 -57
  299. package/projects/ng-easycommerce/src/lib/classes/filters/filter-factory.ts +0 -23
  300. package/projects/ng-easycommerce/src/lib/classes/filters/filter.ts +0 -89
  301. package/projects/ng-easycommerce/src/lib/classes/filters/index.ts +0 -6
  302. package/projects/ng-easycommerce/src/lib/classes/filters/sort-filter.ts +0 -93
  303. package/projects/ng-easycommerce/src/lib/classes/user.ts +0 -68
  304. package/projects/ng-easycommerce/src/lib/constants/api.constants.service.ts +0 -69
  305. package/projects/ng-easycommerce/src/lib/constants/core.constants.service.ts +0 -210
  306. package/projects/ng-easycommerce/src/lib/constants/index.ts +0 -2
  307. package/projects/ng-easycommerce/src/lib/ec-components/abstractions-components/block-ec.component.ts +0 -107
  308. package/projects/ng-easycommerce/src/lib/ec-components/abstractions-components/index.ts +0 -2
  309. package/projects/ng-easycommerce/src/lib/ec-components/abstractions-components/menu-ec.component.ts +0 -102
  310. package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/auth-ec.component.html +0 -10
  311. package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/auth-ec.component.scss +0 -0
  312. package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/auth-ec.component.ts +0 -13
  313. package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/confirm-account-ec/confirm-account-ec.component.html +0 -19
  314. package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/confirm-account-ec/confirm-account-ec.component.scss +0 -0
  315. package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/confirm-account-ec/confirm-account-ec.component.ts +0 -34
  316. package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/forgot-password-ec/forgot-password-ec.component.html +0 -31
  317. package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/forgot-password-ec/forgot-password-ec.component.scss +0 -0
  318. package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/forgot-password-ec/forgot-password-ec.component.ts +0 -55
  319. package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/login-form-ec/login-form-ec.component.html +0 -30
  320. package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/login-form-ec/login-form-ec.component.scss +0 -0
  321. package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/login-form-ec/login-form-ec.component.ts +0 -92
  322. package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/register-form-ec/register-form-ec.component.html +0 -55
  323. package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/register-form-ec/register-form-ec.component.scss +0 -0
  324. package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/register-form-ec/register-form-ec.component.ts +0 -102
  325. package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/register-wholesaler-form-ec/register-wholesaler-form-ec.component.html +0 -233
  326. package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/register-wholesaler-form-ec/register-wholesaler-form-ec.component.scss +0 -0
  327. package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/register-wholesaler-form-ec/register-wholesaler-form-ec.component.ts +0 -149
  328. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-banner-box-ec/block-banner-box-ec.component.html +0 -113
  329. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-banner-box-ec/block-banner-box-ec.component.scss +0 -12
  330. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-banner-box-ec/block-banner-box-ec.component.ts +0 -100
  331. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-banner-full-ec/block-banner-full-ec.component.html +0 -111
  332. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-banner-full-ec/block-banner-full-ec.component.scss +0 -0
  333. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-banner-full-ec/block-banner-full-ec.component.ts +0 -77
  334. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-form-contact-ec/block-form-contact-ec.component.html +0 -62
  335. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-form-contact-ec/block-form-contact-ec.component.scss +0 -0
  336. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-form-contact-ec/block-form-contact-ec.component.ts +0 -89
  337. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-html-ec/block-html-ec.component.html +0 -1
  338. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-html-ec/block-html-ec.component.scss +0 -0
  339. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-html-ec/block-html-ec.component.ts +0 -33
  340. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-newsletter-ec/block-newsletter-ec.component.html +0 -1
  341. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-newsletter-ec/block-newsletter-ec.component.scss +0 -0
  342. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-newsletter-ec/block-newsletter-ec.component.ts +0 -81
  343. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-products-ec/block-products-ec.component.html +0 -40
  344. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-products-ec/block-products-ec.component.scss +0 -0
  345. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-products-ec/block-products-ec.component.ts +0 -97
  346. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/blocks-ec.component.html +0 -41
  347. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/blocks-ec.component.scss +0 -0
  348. package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/blocks-ec.component.ts +0 -86
  349. package/projects/ng-easycommerce/src/lib/ec-components/breadcrumb-ec/breadcrumb-ec.component.html +0 -20
  350. package/projects/ng-easycommerce/src/lib/ec-components/breadcrumb-ec/breadcrumb-ec.component.scss +0 -0
  351. package/projects/ng-easycommerce/src/lib/ec-components/breadcrumb-ec/breadcrumb-ec.component.ts +0 -30
  352. package/projects/ng-easycommerce/src/lib/ec-components/cart-ec/cart-ec.component.html +0 -1
  353. package/projects/ng-easycommerce/src/lib/ec-components/cart-ec/cart-ec.component.scss +0 -0
  354. package/projects/ng-easycommerce/src/lib/ec-components/cart-ec/cart-ec.component.ts +0 -24
  355. package/projects/ng-easycommerce/src/lib/ec-components/cart-ec/cart-item-ec/cart-item-ec.component.html +0 -1
  356. package/projects/ng-easycommerce/src/lib/ec-components/cart-ec/cart-item-ec/cart-item-ec.component.scss +0 -0
  357. package/projects/ng-easycommerce/src/lib/ec-components/cart-ec/cart-item-ec/cart-item-ec.component.ts +0 -51
  358. package/projects/ng-easycommerce/src/lib/ec-components/cart-ec/index.ts +0 -2
  359. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/checkout-ec.component.html +0 -56
  360. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/checkout-ec.component.scss +0 -38
  361. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/checkout-ec.component.ts +0 -67
  362. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/dataform-ec/dataform-ec.component.html +0 -836
  363. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/dataform-ec/dataform-ec.component.scss +0 -0
  364. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/dataform-ec/dataform-ec.component.ts +0 -302
  365. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/dataform-ec/input-ec/input-ec.component.html +0 -32
  366. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/dataform-ec/input-ec/input-ec.component.scss +0 -0
  367. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/dataform-ec/input-ec/input-ec.component.ts +0 -52
  368. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.html +0 -12
  369. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.scss +0 -0
  370. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.ts +0 -48
  371. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-ec.component.html +0 -195
  372. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-ec.component.scss +0 -0
  373. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-ec.component.ts +0 -103
  374. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/bank-transfer-ec/bank-transfer-ec.component.html +0 -28
  375. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/bank-transfer-ec/bank-transfer-ec.component.scss +0 -0
  376. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/bank-transfer-ec/bank-transfer-ec.component.ts +0 -26
  377. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/mp-redirect-ec/mp-redirect-ec.component.html +0 -33
  378. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/mp-redirect-ec/mp-redirect-ec.component.scss +0 -0
  379. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/mp-redirect-ec/mp-redirect-ec.component.ts +0 -116
  380. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/offline-ec/offline-ec.component.html +0 -13
  381. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/offline-ec/offline-ec.component.scss +0 -0
  382. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/offline-ec/offline-ec.component.ts +0 -26
  383. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/shipment-ec/shipment-ec.component.html +0 -111
  384. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/shipment-ec/shipment-ec.component.scss +0 -0
  385. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/shipment-ec/shipment-ec.component.ts +0 -111
  386. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/step-container-ec/step-container-ec.component.html +0 -33
  387. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/step-container-ec/step-container-ec.component.scss +0 -0
  388. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/step-container-ec/step-container-ec.component.ts +0 -39
  389. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/success-ec/success-ec.component.html +0 -59
  390. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/success-ec/success-ec.component.scss +0 -0
  391. package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/success-ec/success-ec.component.ts +0 -65
  392. package/projects/ng-easycommerce/src/lib/ec-components/collection-ec/collection-ec.component.html +0 -16
  393. package/projects/ng-easycommerce/src/lib/ec-components/collection-ec/collection-ec.component.scss +0 -0
  394. package/projects/ng-easycommerce/src/lib/ec-components/collection-ec/collection-ec.component.ts +0 -83
  395. package/projects/ng-easycommerce/src/lib/ec-components/coupon-ec/coupon-ec.component.html +0 -1
  396. package/projects/ng-easycommerce/src/lib/ec-components/coupon-ec/coupon-ec.component.scss +0 -0
  397. package/projects/ng-easycommerce/src/lib/ec-components/coupon-ec/coupon-ec.component.ts +0 -32
  398. package/projects/ng-easycommerce/src/lib/ec-components/filters-ec/filters-ec.component.html +0 -1
  399. package/projects/ng-easycommerce/src/lib/ec-components/filters-ec/filters-ec.component.scss +0 -0
  400. package/projects/ng-easycommerce/src/lib/ec-components/filters-ec/filters-ec.component.ts +0 -45
  401. package/projects/ng-easycommerce/src/lib/ec-components/filters-sort-ec/filters-sort-ec.component.html +0 -1
  402. package/projects/ng-easycommerce/src/lib/ec-components/filters-sort-ec/filters-sort-ec.component.scss +0 -0
  403. package/projects/ng-easycommerce/src/lib/ec-components/filters-sort-ec/filters-sort-ec.component.ts +0 -49
  404. package/projects/ng-easycommerce/src/lib/ec-components/footer-ec/footer-ec.component.html +0 -1
  405. package/projects/ng-easycommerce/src/lib/ec-components/footer-ec/footer-ec.component.scss +0 -0
  406. package/projects/ng-easycommerce/src/lib/ec-components/footer-ec/footer-ec.component.spec.ts +0 -23
  407. package/projects/ng-easycommerce/src/lib/ec-components/footer-ec/footer-ec.component.ts +0 -18
  408. package/projects/ng-easycommerce/src/lib/ec-components/header-ec/header-ec.component.html +0 -1
  409. package/projects/ng-easycommerce/src/lib/ec-components/header-ec/header-ec.component.scss +0 -0
  410. package/projects/ng-easycommerce/src/lib/ec-components/header-ec/header-ec.component.spec.ts +0 -23
  411. package/projects/ng-easycommerce/src/lib/ec-components/header-ec/header-ec.component.ts +0 -22
  412. package/projects/ng-easycommerce/src/lib/ec-components/home-ec/home-ec.component.html +0 -1
  413. package/projects/ng-easycommerce/src/lib/ec-components/home-ec/home-ec.component.scss +0 -0
  414. package/projects/ng-easycommerce/src/lib/ec-components/home-ec/home-ec.component.spec.ts +0 -23
  415. package/projects/ng-easycommerce/src/lib/ec-components/home-ec/home-ec.component.ts +0 -16
  416. package/projects/ng-easycommerce/src/lib/ec-components/product-detail-ec/product-detail-ec.component.html +0 -0
  417. package/projects/ng-easycommerce/src/lib/ec-components/product-detail-ec/product-detail-ec.component.scss +0 -0
  418. package/projects/ng-easycommerce/src/lib/ec-components/product-detail-ec/product-detail-ec.component.ts +0 -82
  419. package/projects/ng-easycommerce/src/lib/ec-components/product-ec/product-ec.component.html +0 -31
  420. package/projects/ng-easycommerce/src/lib/ec-components/product-ec/product-ec.component.scss +0 -0
  421. package/projects/ng-easycommerce/src/lib/ec-components/product-ec/product-ec.component.ts +0 -46
  422. package/projects/ng-easycommerce/src/lib/ec-components/variants-ec/variants-ec.component.html +0 -65
  423. package/projects/ng-easycommerce/src/lib/ec-components/variants-ec/variants-ec.component.scss +0 -8
  424. package/projects/ng-easycommerce/src/lib/ec-components/variants-ec/variants-ec.component.ts +0 -20
  425. package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/loading-full-ec/loading-full-ec.component.html +0 -7
  426. package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/loading-full-ec/loading-full-ec.component.scss +0 -0
  427. package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/loading-full-ec/loading-full-ec.component.ts +0 -13
  428. package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/loading-inline-ec/loading-inline-ec.component.html +0 -5
  429. package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/loading-inline-ec/loading-inline-ec.component.scss +0 -0
  430. package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/loading-inline-ec/loading-inline-ec.component.ts +0 -13
  431. package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/loading-section-ec/loading-section-ec.component.html +0 -3
  432. package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/loading-section-ec/loading-section-ec.component.scss +0 -0
  433. package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/loading-section-ec/loading-section-ec.component.ts +0 -13
  434. package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/magnizoom-ec/magnizoom-ec.component.html +0 -11
  435. package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/magnizoom-ec/magnizoom-ec.component.scss +0 -0
  436. package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/magnizoom-ec/magnizoom-ec.component.ts +0 -177
  437. package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/price-ec/price-ec.component.html +0 -47
  438. package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/price-ec/price-ec.component.scss +0 -0
  439. package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/price-ec/price-ec.component.ts +0 -22
  440. package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/re-captcha-ec/re-captcha-ec.component.html +0 -6
  441. package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/re-captcha-ec/re-captcha-ec.component.scss +0 -0
  442. package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/re-captcha-ec/re-captcha-ec.component.ts +0 -70
  443. package/projects/ng-easycommerce/src/lib/ec-guards/auth.guard.ts +0 -19
  444. package/projects/ng-easycommerce/src/lib/ec-guards/index.ts +0 -1
  445. package/projects/ng-easycommerce/src/lib/ec-pipe/ec-currency-symbol.pipe.ts +0 -99
  446. package/projects/ng-easycommerce/src/lib/ec-pipe/index.ts +0 -1
  447. package/projects/ng-easycommerce/src/lib/ec-services/addressing.service.ts +0 -199
  448. package/projects/ng-easycommerce/src/lib/ec-services/analytics/analytics.service.ts +0 -76
  449. package/projects/ng-easycommerce/src/lib/ec-services/analytics/doppler.service.ts +0 -38
  450. package/projects/ng-easycommerce/src/lib/ec-services/analytics/facebook-pixel.service.ts +0 -214
  451. package/projects/ng-easycommerce/src/lib/ec-services/analytics/google-analytics.service.ts +0 -284
  452. package/projects/ng-easycommerce/src/lib/ec-services/analytics/gtm.service.ts +0 -413
  453. package/projects/ng-easycommerce/src/lib/ec-services/analytics/metricool-pixel.service.ts +0 -46
  454. package/projects/ng-easycommerce/src/lib/ec-services/auth.service.ts +0 -438
  455. package/projects/ng-easycommerce/src/lib/ec-services/auth.storage.service.ts +0 -54
  456. package/projects/ng-easycommerce/src/lib/ec-services/blocks-repository.service.ts +0 -67
  457. package/projects/ng-easycommerce/src/lib/ec-services/blocks.service.ts +0 -48
  458. package/projects/ng-easycommerce/src/lib/ec-services/cart.service.ts +0 -492
  459. package/projects/ng-easycommerce/src/lib/ec-services/channel.service.ts +0 -81
  460. package/projects/ng-easycommerce/src/lib/ec-services/checkout.service.ts +0 -196
  461. package/projects/ng-easycommerce/src/lib/ec-services/currency.service.ts +0 -179
  462. package/projects/ng-easycommerce/src/lib/ec-services/filters.service.ts +0 -133
  463. package/projects/ng-easycommerce/src/lib/ec-services/form.service.ts +0 -82
  464. package/projects/ng-easycommerce/src/lib/ec-services/local-storage.service.ts +0 -54
  465. package/projects/ng-easycommerce/src/lib/ec-services/ngx-local-storage.service.ts +0 -66
  466. package/projects/ng-easycommerce/src/lib/ec-services/options.service.ts +0 -274
  467. package/projects/ng-easycommerce/src/lib/ec-services/order-utility.service.ts +0 -52
  468. package/projects/ng-easycommerce/src/lib/ec-services/pagination.service.ts +0 -172
  469. package/projects/ng-easycommerce/src/lib/ec-services/parameters.service.ts +0 -67
  470. package/projects/ng-easycommerce/src/lib/ec-services/payment.service.ts +0 -63
  471. package/projects/ng-easycommerce/src/lib/ec-services/product-detail.service.ts +0 -288
  472. package/projects/ng-easycommerce/src/lib/ec-services/products.service.ts +0 -162
  473. package/projects/ng-easycommerce/src/lib/ec-services/re-captcha.service.ts +0 -126
  474. package/projects/ng-easycommerce/src/lib/ec-services/shipment.service.ts +0 -174
  475. package/projects/ng-easycommerce/src/lib/ec-services/stores.service.ts +0 -27
  476. package/projects/ng-easycommerce/src/lib/ec-services/toast.service.ts +0 -84
  477. package/projects/ng-easycommerce/src/lib/interceptors/auth.interceptor.ts +0 -43
  478. package/projects/ng-easycommerce/src/lib/interceptors/index.ts +0 -1
  479. package/projects/ng-easycommerce/src/lib/interfaces/analytics/event-key.ts +0 -14
  480. package/projects/ng-easycommerce/src/lib/interfaces/analytics/facebook-pixel-data.ts +0 -5
  481. package/projects/ng-easycommerce/src/lib/interfaces/blocks.ts +0 -56
  482. package/projects/ng-easycommerce/src/lib/interfaces/coupon.ts +0 -5
  483. package/projects/ng-easycommerce/src/lib/interfaces/currency.ts +0 -10
  484. package/projects/ng-easycommerce/src/lib/interfaces/options.ts +0 -28
  485. package/projects/ng-easycommerce/src/lib/interfaces/pagination.ts +0 -27
  486. package/projects/ng-easycommerce/src/lib/interfaces/parameter.ts +0 -15
  487. package/projects/ng-easycommerce/src/lib/interfaces/step.ts +0 -19
  488. package/projects/ng-easycommerce/src/lib/interfaces/storage.ts +0 -7
  489. package/projects/ng-easycommerce/src/lib/interfaces/types/index.ts +0 -1
  490. package/projects/ng-easycommerce/src/lib/interfaces/types/user.type.ts +0 -5
  491. package/projects/ng-easycommerce/src/lib/providers/index.ts +0 -1
  492. package/projects/ng-easycommerce/src/lib/providers/provideEnvironment.ts +0 -24
  493. package/projects/ng-easycommerce/src/lib/stores/currency.store.ts +0 -20
  494. package/projects/ng-easycommerce/src/lib/stores/index.ts +0 -1
  495. package/projects/ng-easycommerce/tsconfig.lib.json +0 -15
  496. package/projects/ng-easycommerce/tsconfig.lib.prod.json +0 -11
  497. package/projects/ng-easycommerce/tsconfig.spec.json +0 -15
  498. package/tsconfig.doc.json +0 -4
  499. package/tsconfig.json +0 -37
  500. /package/{projects/ng-easycommerce/src/lib/assets → assets}/ec-i18n/ct.json +0 -0
  501. /package/{projects/ng-easycommerce/src/lib/assets → assets}/ec-i18n/en.json +0 -0
  502. /package/{projects/ng-easycommerce/src/lib/assets → assets}/ec-i18n/es.json +0 -0
  503. /package/{projects/ng-easycommerce/src/lib/assets → assets}/ec-i18n/fr.json +0 -0
  504. /package/{projects/ng-easycommerce/src/lib/assets → assets}/ec-i18n/gl.json +0 -0
  505. /package/{projects/ng-easycommerce/src/lib/assets → assets}/ec-i18n/pr.json +0 -0
  506. /package/{projects/ng-easycommerce/src/lib/assets → assets}/recaptcha/recaptcha-site-keys.json +0 -0
  507. /package/{projects/ng-easycommerce/src/lib/assets → assets}/recaptcha/recaptcha-sites-prod.json +0 -0
  508. /package/{projects/ng-easycommerce/src/lib/assets → assets}/recaptcha/recaptcha-sites.json +0 -0
@@ -0,0 +1,109 @@
1
+ import { CommonModule, isPlatformBrowser } from '@angular/common';
2
+ import { afterNextRender, Component, CUSTOM_ELEMENTS_SCHEMA, inject, Input, PLATFORM_ID, signal } from '@angular/core';
3
+ import { BlockEcComponent } from '../../abstractions-components';
4
+ import { AnalyticsService } from '../../../ec-services';
5
+ import { register } from 'swiper/element';
6
+ import { RouterModule } from '@angular/router';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@angular/common";
9
+ import * as i2 from "@angular/router";
10
+ register();
11
+ /**
12
+ * Componente para manejar los banner de tipo box.
13
+ * @class BlockBannerBoxEcComponent
14
+ * @extends {BlockEcComponent}
15
+ */
16
+ export class BlockBannerBoxEcComponent extends BlockEcComponent {
17
+ /**
18
+ * Banners de tipo Box.
19
+ */
20
+ banners;
21
+ /**
22
+ * Datos del bloque que contiene a los banners
23
+ */
24
+ meta;
25
+ /**
26
+ * Servicio para Analytics
27
+ */
28
+ analyticsService = inject(AnalyticsService);
29
+ /**
30
+ * Signal utlizado para guarda el contenedor del carrusel
31
+ */
32
+ swiperElement = signal(null);
33
+ document;
34
+ platformId = inject(PLATFORM_ID);
35
+ /**
36
+ * Ejecuta el método `afterNextRender`para cargar las configuraciones necesarias
37
+ * para el carrusel del banners. Esto debe ser asi debido a que ya debe estar presente
38
+ * en el Dom el element `<swiper-container>` para poder configurarlo.
39
+ */
40
+ constructor() {
41
+ super();
42
+ if (isPlatformBrowser(this.platformId)) {
43
+ this.document = document;
44
+ }
45
+ afterNextRender(() => {
46
+ const swiperElemConstructor = this.document?.querySelector('#' + this.meta?.code);
47
+ Object.assign(swiperElemConstructor, this.swiperOptions());
48
+ this.swiperElement.set(swiperElemConstructor);
49
+ //swiperElemConstructor?.initialize();
50
+ this.swiperElement()?.initialize();
51
+ });
52
+ }
53
+ /**
54
+ * Método original en: {@link BlockEcComponent}
55
+ */
56
+ swiperOptions() {
57
+ return {
58
+ slidesPerView: 1,
59
+ autoplay: true,
60
+ loop: true,
61
+ speed: 1050,
62
+ pagination: false,
63
+ navigation: true,
64
+ autoHeight: true,
65
+ breakpoints: {
66
+ 0: {
67
+ slidesPerView: 1
68
+ },
69
+ 576: {
70
+ slidesPerView: 2
71
+ },
72
+ 768: {
73
+ slidesPerView: 4,
74
+ },
75
+ 992: {
76
+ slidesPerView: 5,
77
+ },
78
+ 1200: {
79
+ slidesPerView: 5,
80
+ }
81
+ }
82
+ };
83
+ }
84
+ /**
85
+ * Aplica el evento `select_promotion` junto con el banner que interactua.
86
+ * @param banner
87
+ */
88
+ selectPromotion(banner) {
89
+ this.analyticsService.callEvent('select_promotion', banner);
90
+ }
91
+ redirectRoute(url) {
92
+ // this.router.navigate(['/collection/categories'])
93
+ }
94
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BlockBannerBoxEcComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
95
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: BlockBannerBoxEcComponent, isStandalone: true, selector: "app-block-banner-box-ec", inputs: { banners: "banners", meta: "meta" }, usesInheritance: true, ngImport: i0, template: "@if(banners.length){\r\n <section [ngClass]=\"trimClassBlock(meta.code) + ' container-fluid'\" \r\n [style.background-color]=\"meta.styles?.backgroundColor\"\r\n [style.background-image]=\"meta.styles?.backgroundImage ? 'url(' + mediaUrl + meta.styles?.backgroundImage +')' : 'inherit'\">\r\n\r\n <div class=\"block-boxes\" style=\"background-color: white;\">\r\n @if(meta.name){\r\n <div class=\"row\">\r\n a\r\n <div class=\"col-12 mt-4\">\r\n <h2 class=\"font-weight-normal font-gd\">\r\n <span>{{meta.name}}</span>\r\n </h2>\r\n </div>\r\n </div> \r\n }\r\n \r\n @if(meta.styles && meta.styles.carrousel == false){\r\n <!-- Si es formato fijo -->\r\n <div class=\"banner-content\">\r\n <div class=\"row g-0\">\r\n @for (banner of banners; track $index) {\r\n <div [ngClass]=\"'item '+'col-md-6 '+'col-lg-'+(12/banners.length) \" [id]=\"$index\">\r\n <img class=\"img-fluid\" [src]=\" mediaBannerUrl+getImage(banner)\" alt=\"\" />\r\n <div class=\"position-absolute w-100 top-0 start-0 h-100\">\r\n <h2 [ngClass]=\"'item-title px-2 item-position-vertical-'+ (banner.styles?.description?.position)\"\r\n [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#000'\">\r\n {{banner.title}}\r\n </h2>\r\n @if(banner.subtitle){\r\n <p [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#000' \"\r\n [class]=\"'px-4 item-subtitle item-position-vertical-' + (banner.styles?.description?.position)\">\r\n {{banner.subtitle}}\r\n </p>\r\n }\r\n </div>\r\n <div [class]=\"'item-position-vertical-' + (banner.styles?.button?.position)\">\r\n @if(banner.styles?.button?.text){\r\n <a href=\"{{banner.url}}\" [class]=\"'item-button btn btn-light'\">\r\n {{banner.styles.button.text}}\r\n </a>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }@else {\r\n <!-- Si es Carrousel -->\r\n <swiper-container init=\"false\" [id]=\"meta?.code\">\r\n @for (banner of banners; track $index) {\r\n <!-- Si es de Categorias -->\r\n @if (banner.taxons[0]) {\r\n <swiper-slide>\r\n\r\n <a class=\"banner-content carrousel item\" (click)='redirectRoute(banner.taxons[0].slug)' [routerLink]=\"['/collection/categories/', banner.taxons[0].slug]\" routerLinkActive=\"router-link-active\" style=\"text-decoration: none; cursor: pointer; background-color: white;\">\r\n <div class=\"image-container\">\r\n <img [src]=\"mediaBannerUrl+getImage(banner)\" alt=\"Banner Image\" class=\"banner-image\">\r\n </div>\r\n @if(banner.title){\r\n <h2 [class]=\"'box-text item-title-full px-2 item-position-vertical-'+ (banner.styles?.description?.position)\"\r\n style=\"color:#fff\">\r\n {{banner.title}}\r\n </h2>\r\n }\r\n @if(banner.taxons && banner.taxons.length){\r\n <h5 class=\"item-subtitle-full item-position-vertical-center text-center box-text\">\r\n {{banner.translations.es_AR.title}}\r\n </h5>\r\n }\r\n @if(banner.subtitle){\r\n <p [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#000' \"\r\n [class]=\"'box-text px-4 item-subtitle-full item-position-vertical-' + (banner.styles?.description?.position)\">\r\n {{banner.subtitle}}\r\n </p>\r\n }\r\n </a>\r\n </swiper-slide>\r\n } @else {\r\n <swiper-slide>\r\n\r\n <a class=\"banner-content carrousel item\" style=\"cursor: pointer;\">\r\n <div class=\"image-container\">\r\n <img [src]=\"mediaBannerUrl+getImage(banner)\" alt=\"Banner Image\" class=\"banner-image\">\r\n </div>\r\n @if(banner.title){\r\n <h2 [class]=\"'box-text item-title-full px-2 item-position-vertical-'+ (banner.styles?.description?.position)\"\r\n style=\"color:#fff\">\r\n {{banner.title}}\r\n </h2>\r\n }\r\n @if(banner.taxons && banner.taxons.length){\r\n <h5 class=\"item-subtitle-full item-position-vertical-center text-center box-text\">\r\n {{banner.translations.es_AR.title}}\r\n </h5>\r\n }\r\n @if(banner.subtitle){\r\n <p [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#000' \"\r\n [class]=\"'box-text px-4 item-subtitle-full item-position-vertical-' + (banner.styles?.description?.position)\">\r\n {{banner.subtitle}}\r\n </p>\r\n }\r\n </a>\r\n </swiper-slide>\r\n }\r\n \r\n }\r\n </swiper-container> \r\n }\r\n </div>\r\n\r\n </section>\r\n}", styles: ["@charset \"UTF-8\";.banner-container{text-align:center}.banner-image{display:block;margin:0 auto}.item-subtitle-full{margin-top:10px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i2.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }] });
96
+ }
97
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BlockBannerBoxEcComponent, decorators: [{
98
+ type: Component,
99
+ args: [{ selector: 'app-block-banner-box-ec', standalone: true, imports: [CommonModule, RouterModule], schemas: [CUSTOM_ELEMENTS_SCHEMA], template: "@if(banners.length){\r\n <section [ngClass]=\"trimClassBlock(meta.code) + ' container-fluid'\" \r\n [style.background-color]=\"meta.styles?.backgroundColor\"\r\n [style.background-image]=\"meta.styles?.backgroundImage ? 'url(' + mediaUrl + meta.styles?.backgroundImage +')' : 'inherit'\">\r\n\r\n <div class=\"block-boxes\" style=\"background-color: white;\">\r\n @if(meta.name){\r\n <div class=\"row\">\r\n a\r\n <div class=\"col-12 mt-4\">\r\n <h2 class=\"font-weight-normal font-gd\">\r\n <span>{{meta.name}}</span>\r\n </h2>\r\n </div>\r\n </div> \r\n }\r\n \r\n @if(meta.styles && meta.styles.carrousel == false){\r\n <!-- Si es formato fijo -->\r\n <div class=\"banner-content\">\r\n <div class=\"row g-0\">\r\n @for (banner of banners; track $index) {\r\n <div [ngClass]=\"'item '+'col-md-6 '+'col-lg-'+(12/banners.length) \" [id]=\"$index\">\r\n <img class=\"img-fluid\" [src]=\" mediaBannerUrl+getImage(banner)\" alt=\"\" />\r\n <div class=\"position-absolute w-100 top-0 start-0 h-100\">\r\n <h2 [ngClass]=\"'item-title px-2 item-position-vertical-'+ (banner.styles?.description?.position)\"\r\n [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#000'\">\r\n {{banner.title}}\r\n </h2>\r\n @if(banner.subtitle){\r\n <p [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#000' \"\r\n [class]=\"'px-4 item-subtitle item-position-vertical-' + (banner.styles?.description?.position)\">\r\n {{banner.subtitle}}\r\n </p>\r\n }\r\n </div>\r\n <div [class]=\"'item-position-vertical-' + (banner.styles?.button?.position)\">\r\n @if(banner.styles?.button?.text){\r\n <a href=\"{{banner.url}}\" [class]=\"'item-button btn btn-light'\">\r\n {{banner.styles.button.text}}\r\n </a>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }@else {\r\n <!-- Si es Carrousel -->\r\n <swiper-container init=\"false\" [id]=\"meta?.code\">\r\n @for (banner of banners; track $index) {\r\n <!-- Si es de Categorias -->\r\n @if (banner.taxons[0]) {\r\n <swiper-slide>\r\n\r\n <a class=\"banner-content carrousel item\" (click)='redirectRoute(banner.taxons[0].slug)' [routerLink]=\"['/collection/categories/', banner.taxons[0].slug]\" routerLinkActive=\"router-link-active\" style=\"text-decoration: none; cursor: pointer; background-color: white;\">\r\n <div class=\"image-container\">\r\n <img [src]=\"mediaBannerUrl+getImage(banner)\" alt=\"Banner Image\" class=\"banner-image\">\r\n </div>\r\n @if(banner.title){\r\n <h2 [class]=\"'box-text item-title-full px-2 item-position-vertical-'+ (banner.styles?.description?.position)\"\r\n style=\"color:#fff\">\r\n {{banner.title}}\r\n </h2>\r\n }\r\n @if(banner.taxons && banner.taxons.length){\r\n <h5 class=\"item-subtitle-full item-position-vertical-center text-center box-text\">\r\n {{banner.translations.es_AR.title}}\r\n </h5>\r\n }\r\n @if(banner.subtitle){\r\n <p [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#000' \"\r\n [class]=\"'box-text px-4 item-subtitle-full item-position-vertical-' + (banner.styles?.description?.position)\">\r\n {{banner.subtitle}}\r\n </p>\r\n }\r\n </a>\r\n </swiper-slide>\r\n } @else {\r\n <swiper-slide>\r\n\r\n <a class=\"banner-content carrousel item\" style=\"cursor: pointer;\">\r\n <div class=\"image-container\">\r\n <img [src]=\"mediaBannerUrl+getImage(banner)\" alt=\"Banner Image\" class=\"banner-image\">\r\n </div>\r\n @if(banner.title){\r\n <h2 [class]=\"'box-text item-title-full px-2 item-position-vertical-'+ (banner.styles?.description?.position)\"\r\n style=\"color:#fff\">\r\n {{banner.title}}\r\n </h2>\r\n }\r\n @if(banner.taxons && banner.taxons.length){\r\n <h5 class=\"item-subtitle-full item-position-vertical-center text-center box-text\">\r\n {{banner.translations.es_AR.title}}\r\n </h5>\r\n }\r\n @if(banner.subtitle){\r\n <p [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#000' \"\r\n [class]=\"'box-text px-4 item-subtitle-full item-position-vertical-' + (banner.styles?.description?.position)\">\r\n {{banner.subtitle}}\r\n </p>\r\n }\r\n </a>\r\n </swiper-slide>\r\n }\r\n \r\n }\r\n </swiper-container> \r\n }\r\n </div>\r\n\r\n </section>\r\n}", styles: ["@charset \"UTF-8\";.banner-container{text-align:center}.banner-image{display:block;margin:0 auto}.item-subtitle-full{margin-top:10px}\n"] }]
100
+ }], ctorParameters: () => [], propDecorators: { banners: [{
101
+ type: Input,
102
+ args: [{
103
+ required: true
104
+ }]
105
+ }], meta: [{
106
+ type: Input,
107
+ args: [{ required: true }]
108
+ }] } });
109
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2stYmFubmVyLWJveC1lYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvZWMtY29tcG9uZW50cy9ibG9ja3MtZWMvYmxvY2stYmFubmVyLWJveC1lYy9ibG9jay1iYW5uZXItYm94LWVjLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWVhc3ljb21tZXJjZS12MTgvc3JjL2xpYi9lYy1jb21wb25lbnRzL2Jsb2Nrcy1lYy9ibG9jay1iYW5uZXItYm94LWVjL2Jsb2NrLWJhbm5lci1ib3gtZWMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFhLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzdFLE9BQU8sRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2SCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsUUFBUSxFQUFtQixNQUFNLGdCQUFnQixDQUFDO0FBRTNELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7OztBQUUvQyxRQUFRLEVBQUUsQ0FBQTtBQUNWOzs7O0dBSUc7QUFTSCxNQUFNLE9BQU8seUJBQTBCLFNBQVEsZ0JBQWdCO0lBQzlEOztPQUVHO0lBR0EsT0FBTyxDQUFNO0lBQ2hCOztPQUVHO0lBQ3dCLElBQUksQ0FBTTtJQUNyQzs7T0FFRztJQUNLLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO0lBQ25EOztPQUVHO0lBQ0gsYUFBYSxHQUFHLE1BQU0sQ0FBeUIsSUFBSSxDQUFDLENBQUE7SUFFNUMsUUFBUSxDQUFZO0lBQ3BCLFVBQVUsR0FBUSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUE7SUFFN0M7Ozs7T0FJRztJQUNIO1FBQ0MsS0FBSyxFQUFFLENBQUE7UUFDUCxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFBO1FBQ3pCLENBQUM7UUFDRCxlQUFlLENBQUMsR0FBRyxFQUFFO1lBQ3BCLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxhQUFhLENBQUMsR0FBRyxHQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUE7WUFDL0UsTUFBTSxDQUFDLE1BQU0sQ0FBQyxxQkFBc0IsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQTtZQUMzRCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxxQkFBd0MsQ0FBQyxDQUFBO1lBQ2hFLHNDQUFzQztZQUN0QyxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQUE7SUFDSCxDQUFDO0lBQ0Q7O09BRUc7SUFDTSxhQUFhO1FBQ3JCLE9BQU87WUFDRyxhQUFhLEVBQUUsQ0FBQztZQUNoQixRQUFRLEVBQUUsSUFBSTtZQUNkLElBQUksRUFBRSxJQUFJO1lBQ1YsS0FBSyxFQUFFLElBQUk7WUFDWCxVQUFVLEVBQUUsS0FBSztZQUNqQixVQUFVLEVBQUUsSUFBSTtZQUNoQixVQUFVLEVBQUUsSUFBSTtZQUNoQixXQUFXLEVBQUU7Z0JBQ1QsQ0FBQyxFQUFFO29CQUNDLGFBQWEsRUFBRSxDQUFDO2lCQUNuQjtnQkFDRCxHQUFHLEVBQUM7b0JBQ0EsYUFBYSxFQUFFLENBQUM7aUJBQ25CO2dCQUNELEdBQUcsRUFBRTtvQkFDRCxhQUFhLEVBQUUsQ0FBQztpQkFDbkI7Z0JBQ0QsR0FBRyxFQUFFO29CQUNELGFBQWEsRUFBRSxDQUFDO2lCQUNuQjtnQkFDRCxJQUFJLEVBQUU7b0JBQ0YsYUFBYSxFQUFFLENBQUM7aUJBQ25CO2FBQ0o7U0FDSixDQUFBO0lBQ1IsQ0FBQztJQUNEOzs7T0FHRztJQUNILGVBQWUsQ0FBQyxNQUFXO1FBQzFCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDNUQsQ0FBQztJQUVELGFBQWEsQ0FBQyxHQUFXO1FBQ3hCLG1EQUFtRDtJQUNsRCxDQUFDO3VHQWxGUyx5QkFBeUI7MkZBQXpCLHlCQUF5Qix3SkN0QnRDLGl5TkFnSEMsZ01EL0ZVLFlBQVksNEhBQUUsWUFBWTs7MkZBS3hCLHlCQUF5QjtrQkFSckMsU0FBUzsrQkFDQyx5QkFBeUIsY0FDdkIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxXQUc3QixDQUFDLHNCQUFzQixDQUFDO3dEQVE3QixPQUFPO3NCQUZULEtBQUs7dUJBQUM7d0JBQ04sUUFBUSxFQUFFLElBQUk7cUJBQ2Q7Z0JBSTBCLElBQUk7c0JBQTlCLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXN5bmNQaXBlLCBDb21tb25Nb2R1bGUsIGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgYWZ0ZXJOZXh0UmVuZGVyLCBDb21wb25lbnQsIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIGluamVjdCwgSW5wdXQsIFBMQVRGT1JNX0lELCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQmxvY2tFY0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL2Fic3RyYWN0aW9ucy1jb21wb25lbnRzJztcclxuaW1wb3J0IHsgQW5hbHl0aWNzU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2VjLXNlcnZpY2VzJztcclxuaW1wb3J0IHsgcmVnaXN0ZXIsIFN3aXBlckNvbnRhaW5lciB9IGZyb20gJ3N3aXBlci9lbGVtZW50JztcclxuaW1wb3J0IHsgU3dpcGVyT3B0aW9ucyB9IGZyb20gJ3N3aXBlci90eXBlcyc7XHJcbmltcG9ydCB7IFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5yZWdpc3RlcigpXHJcbi8qKlxyXG4gKiBDb21wb25lbnRlIHBhcmEgbWFuZWphciBsb3MgYmFubmVyIGRlIHRpcG8gYm94LlxyXG4gKiBAY2xhc3MgQmxvY2tCYW5uZXJCb3hFY0NvbXBvbmVudFxyXG4gKiBAZXh0ZW5kcyB7QmxvY2tFY0NvbXBvbmVudH1cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG5cdHNlbGVjdG9yOiAnYXBwLWJsb2NrLWJhbm5lci1ib3gtZWMnLFxyXG5cdHN0YW5kYWxvbmU6IHRydWUsXHJcblx0aW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUm91dGVyTW9kdWxlXSxcclxuXHR0ZW1wbGF0ZVVybDogJy4vYmxvY2stYmFubmVyLWJveC1lYy5jb21wb25lbnQuaHRtbCcsXHJcblx0c3R5bGVVcmw6ICcuL2Jsb2NrLWJhbm5lci1ib3gtZWMuY29tcG9uZW50LnNjc3MnLFxyXG5cdHNjaGVtYXM6W0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCbG9ja0Jhbm5lckJveEVjQ29tcG9uZW50IGV4dGVuZHMgQmxvY2tFY0NvbXBvbmVudCB7XHJcblx0LyoqXHJcblx0ICogQmFubmVycyBkZSB0aXBvIEJveC5cclxuXHQgKi9cclxuXHRASW5wdXQoe1xyXG5cdFx0cmVxdWlyZWQ6IHRydWVcclxuXHR9KSBiYW5uZXJzOiBhbnk7XHJcblx0LyoqXHJcblx0ICogRGF0b3MgZGVsIGJsb3F1ZSBxdWUgY29udGllbmUgYSBsb3MgYmFubmVyc1xyXG5cdCAqL1xyXG5cdEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIG1ldGE6IGFueTtcclxuXHQvKipcclxuXHQgKiBTZXJ2aWNpbyBwYXJhIEFuYWx5dGljc1xyXG5cdCAqL1xyXG5cdHByaXZhdGUgYW5hbHl0aWNzU2VydmljZSA9IGluamVjdChBbmFseXRpY3NTZXJ2aWNlKVxyXG5cdC8qKlxyXG5cdCAqIFNpZ25hbCB1dGxpemFkbyBwYXJhIGd1YXJkYSBlbCBjb250ZW5lZG9yIGRlbCBjYXJydXNlbFxyXG5cdCAqL1xyXG5cdHN3aXBlckVsZW1lbnQgPSBzaWduYWw8U3dpcGVyQ29udGFpbmVyIHwgbnVsbD4obnVsbClcclxuXHRcclxuXHRwcml2YXRlIGRvY3VtZW50PzogRG9jdW1lbnQ7XHJcblx0cHJpdmF0ZSBwbGF0Zm9ybUlkOiBhbnkgPSBpbmplY3QoUExBVEZPUk1fSUQpXHJcblx0XHJcblx0LyoqXHJcblx0ICogRWplY3V0YSBlbCBtw6l0b2RvIGBhZnRlck5leHRSZW5kZXJgcGFyYSBjYXJnYXIgbGFzIGNvbmZpZ3VyYWNpb25lcyBuZWNlc2FyaWFzIFxyXG5cdCAqIHBhcmEgZWwgY2FycnVzZWwgZGVsIGJhbm5lcnMuIEVzdG8gZGViZSBzZXIgYXNpIGRlYmlkbyBhIHF1ZSB5YSBkZWJlIGVzdGFyIHByZXNlbnRlXHJcblx0ICogZW4gZWwgRG9tIGVsIGVsZW1lbnQgYDxzd2lwZXItY29udGFpbmVyPmAgcGFyYSBwb2RlciBjb25maWd1cmFybG8uXHJcblx0ICovXHJcblx0Y29uc3RydWN0b3IoKSB7XHJcblx0XHRzdXBlcigpXHJcblx0XHRpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xyXG5cdFx0XHR0aGlzLmRvY3VtZW50ID0gZG9jdW1lbnRcclxuXHRcdH1cclxuXHRcdGFmdGVyTmV4dFJlbmRlcigoKSA9PiB7XHJcblx0XHRcdGNvbnN0IHN3aXBlckVsZW1Db25zdHJ1Y3RvciA9IHRoaXMuZG9jdW1lbnQ/LnF1ZXJ5U2VsZWN0b3IoJyMnK3RoaXMubWV0YT8uY29kZSlcclxuXHRcdFx0T2JqZWN0LmFzc2lnbihzd2lwZXJFbGVtQ29uc3RydWN0b3IhLCB0aGlzLnN3aXBlck9wdGlvbnMoKSlcclxuXHRcdFx0dGhpcy5zd2lwZXJFbGVtZW50LnNldChzd2lwZXJFbGVtQ29uc3RydWN0b3IgYXMgU3dpcGVyQ29udGFpbmVyKVxyXG5cdFx0XHQvL3N3aXBlckVsZW1Db25zdHJ1Y3Rvcj8uaW5pdGlhbGl6ZSgpO1xyXG5cdFx0XHR0aGlzLnN3aXBlckVsZW1lbnQoKT8uaW5pdGlhbGl6ZSgpO1xyXG5cdFx0fSlcclxuXHR9XHJcblx0LyoqXHJcblx0ICogTcOpdG9kbyBvcmlnaW5hbCBlbjoge0BsaW5rIEJsb2NrRWNDb21wb25lbnR9XHJcblx0ICovXHJcblx0b3ZlcnJpZGUgc3dpcGVyT3B0aW9ucyAoKTpTd2lwZXJPcHRpb25zIHtcclxuXHRcdHJldHVybiB7XHJcbiAgICAgICAgICAgIHNsaWRlc1BlclZpZXc6IDEsXHJcbiAgICAgICAgICAgIGF1dG9wbGF5OiB0cnVlLFxyXG4gICAgICAgICAgICBsb29wOiB0cnVlLFxyXG4gICAgICAgICAgICBzcGVlZDogMTA1MCxcclxuICAgICAgICAgICAgcGFnaW5hdGlvbjogZmFsc2UsXHJcbiAgICAgICAgICAgIG5hdmlnYXRpb246IHRydWUsXHJcbiAgICAgICAgICAgIGF1dG9IZWlnaHQ6IHRydWUsXHJcbiAgICAgICAgICAgIGJyZWFrcG9pbnRzOiB7XHJcbiAgICAgICAgICAgICAgICAwOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVzUGVyVmlldzogMVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIDU3Njp7XHJcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVzUGVyVmlldzogMiBcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICA3Njg6IHtcclxuICAgICAgICAgICAgICAgICAgICBzbGlkZXNQZXJWaWV3OiA0LFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIDk5Mjoge1xyXG4gICAgICAgICAgICAgICAgICAgIHNsaWRlc1BlclZpZXc6IDUsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgMTIwMDoge1xyXG4gICAgICAgICAgICAgICAgICAgIHNsaWRlc1BlclZpZXc6IDUsXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIEFwbGljYSBlbCBldmVudG8gYHNlbGVjdF9wcm9tb3Rpb25gIGp1bnRvIGNvbiBlbCBiYW5uZXIgcXVlIGludGVyYWN0dWEuXHJcblx0ICogQHBhcmFtIGJhbm5lciBcclxuXHQgKi9cclxuXHRzZWxlY3RQcm9tb3Rpb24oYmFubmVyOiBhbnkpOiB2b2lkIHtcclxuXHRcdHRoaXMuYW5hbHl0aWNzU2VydmljZS5jYWxsRXZlbnQoJ3NlbGVjdF9wcm9tb3Rpb24nLCBiYW5uZXIpXHJcblx0fVxyXG5cclxuXHRyZWRpcmVjdFJvdXRlKHVybDogc3RyaW5nKTogdm9pZCB7XHJcblx0XHQvLyB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9jb2xsZWN0aW9uL2NhdGVnb3JpZXMnXSlcclxuXHQgIH1cclxufVxyXG4iLCJAaWYoYmFubmVycy5sZW5ndGgpe1xyXG4gICAgPHNlY3Rpb24gW25nQ2xhc3NdPVwidHJpbUNsYXNzQmxvY2sobWV0YS5jb2RlKSArICcgY29udGFpbmVyLWZsdWlkJ1wiIFxyXG4gICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwibWV0YS5zdHlsZXM/LmJhY2tncm91bmRDb2xvclwiXHJcbiAgICBbc3R5bGUuYmFja2dyb3VuZC1pbWFnZV09XCJtZXRhLnN0eWxlcz8uYmFja2dyb3VuZEltYWdlID8gJ3VybCgnICsgbWVkaWFVcmwgKyBtZXRhLnN0eWxlcz8uYmFja2dyb3VuZEltYWdlICsnKScgOiAnaW5oZXJpdCdcIj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJsb2NrLWJveGVzXCIgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcIj5cclxuICAgICAgICAgICAgQGlmKG1ldGEubmFtZSl7XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgYVxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgbXQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJmb250LXdlaWdodC1ub3JtYWwgZm9udC1nZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3ttZXRhLm5hbWV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PiBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgXHJcbiAgICAgICAgICAgIEBpZihtZXRhLnN0eWxlcyAmJiBtZXRhLnN0eWxlcy5jYXJyb3VzZWwgPT0gZmFsc2Upe1xyXG4gICAgICAgICAgICAgICAgPCEtLSBTaSBlcyBmb3JtYXRvIGZpam8gLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFubmVyLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGctMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChiYW5uZXIgb2YgYmFubmVyczsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwiJ2l0ZW0gJysnY29sLW1kLTYgJysnY29sLWxnLScrKDEyL2Jhbm5lcnMubGVuZ3RoKSBcIiBbaWRdPVwiJGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1nLWZsdWlkXCIgW3NyY109XCIgbWVkaWFCYW5uZXJVcmwrZ2V0SW1hZ2UoYmFubmVyKVwiIGFsdD1cIlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGUgdy0xMDAgdG9wLTAgc3RhcnQtMCBoLTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMiBbbmdDbGFzc109XCInaXRlbS10aXRsZSBweC0yIGl0ZW0tcG9zaXRpb24tdmVydGljYWwtJysgKGJhbm5lci5zdHlsZXM/LmRlc2NyaXB0aW9uPy5wb3NpdGlvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCIoYmFubmVyLnN0eWxlcz8uZGVzY3JpcHRpb24/LmNvbG9yKSA/IGJhbm5lci5zdHlsZXM/LmRlc2NyaXB0aW9uPy5jb2xvciA6ICcjMDAwJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2Jhbm5lci50aXRsZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYoYmFubmVyLnN1YnRpdGxlKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgW3N0eWxlLmNvbG9yXT1cIihiYW5uZXIuc3R5bGVzPy5kZXNjcmlwdGlvbj8uY29sb3IpID8gYmFubmVyLnN0eWxlcz8uZGVzY3JpcHRpb24/LmNvbG9yIDogJyMwMDAnIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCIncHgtNCBpdGVtLXN1YnRpdGxlIGl0ZW0tcG9zaXRpb24tdmVydGljYWwtJyArIChiYW5uZXIuc3R5bGVzPy5kZXNjcmlwdGlvbj8ucG9zaXRpb24pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2Jhbm5lci5zdWJ0aXRsZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2NsYXNzXT1cIidpdGVtLXBvc2l0aW9uLXZlcnRpY2FsLScgKyAoYmFubmVyLnN0eWxlcz8uYnV0dG9uPy5wb3NpdGlvbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYoYmFubmVyLnN0eWxlcz8uYnV0dG9uPy50ZXh0KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cInt7YmFubmVyLnVybH19XCIgW2NsYXNzXT1cIidpdGVtLWJ1dHRvbiBidG4gYnRuLWxpZ2h0J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tiYW5uZXIuc3R5bGVzLmJ1dHRvbi50ZXh0fX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIH1AZWxzZSB7XHJcbiAgICAgICAgICAgICAgIDwhLS0gU2kgZXMgQ2Fycm91c2VsIC0tPlxyXG4gICAgICAgICAgICAgICA8c3dpcGVyLWNvbnRhaW5lciBpbml0PVwiZmFsc2VcIiBbaWRdPVwibWV0YT8uY29kZVwiPlxyXG4gICAgICAgICAgICAgICAgQGZvciAoYmFubmVyIG9mIGJhbm5lcnM7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gU2kgZXMgZGUgQ2F0ZWdvcmlhcyAtLT5cclxuICAgICAgICAgICAgICAgICAgICBAaWYgKGJhbm5lci50YXhvbnNbMF0pIHtcclxuICAgICAgICAgICAgICAgICAgICA8c3dpcGVyLXNsaWRlPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJiYW5uZXItY29udGVudCBjYXJyb3VzZWwgaXRlbVwiIChjbGljayk9J3JlZGlyZWN0Um91dGUoYmFubmVyLnRheG9uc1swXS5zbHVnKScgW3JvdXRlckxpbmtdPVwiWycvY29sbGVjdGlvbi9jYXRlZ29yaWVzLycsIGJhbm5lci50YXhvbnNbMF0uc2x1Z11cIiByb3V0ZXJMaW5rQWN0aXZlPVwicm91dGVyLWxpbmstYWN0aXZlXCIgIHN0eWxlPVwidGV4dC1kZWNvcmF0aW9uOiBub25lOyBjdXJzb3I6IHBvaW50ZXI7IGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltYWdlLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJtZWRpYUJhbm5lclVybCtnZXRJbWFnZShiYW5uZXIpXCIgYWx0PVwiQmFubmVyIEltYWdlXCIgY2xhc3M9XCJiYW5uZXItaW1hZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmKGJhbm5lci50aXRsZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyIFtjbGFzc109XCInYm94LXRleHQgaXRlbS10aXRsZS1mdWxsIHB4LTIgaXRlbS1wb3NpdGlvbi12ZXJ0aWNhbC0nKyAoYmFubmVyLnN0eWxlcz8uZGVzY3JpcHRpb24/LnBvc2l0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiY29sb3I6I2ZmZlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2Jhbm5lci50aXRsZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZihiYW5uZXIudGF4b25zICYmIGJhbm5lci50YXhvbnMubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJpdGVtLXN1YnRpdGxlLWZ1bGwgaXRlbS1wb3NpdGlvbi12ZXJ0aWNhbC1jZW50ZXIgdGV4dC1jZW50ZXIgYm94LXRleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tiYW5uZXIudHJhbnNsYXRpb25zLmVzX0FSLnRpdGxlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g1PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmKGJhbm5lci5zdWJ0aXRsZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgW3N0eWxlLmNvbG9yXT1cIihiYW5uZXIuc3R5bGVzPy5kZXNjcmlwdGlvbj8uY29sb3IpID8gYmFubmVyLnN0eWxlcz8uZGVzY3JpcHRpb24/LmNvbG9yIDogJyMwMDAnIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCInYm94LXRleHQgcHgtNCBpdGVtLXN1YnRpdGxlLWZ1bGwgaXRlbS1wb3NpdGlvbi12ZXJ0aWNhbC0nICsgKGJhbm5lci5zdHlsZXM/LmRlc2NyaXB0aW9uPy5wb3NpdGlvbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tiYW5uZXIuc3VidGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3dpcGVyLXNsaWRlPlxyXG4gICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3dpcGVyLXNsaWRlPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiYmFubmVyLWNvbnRlbnQgY2Fycm91c2VsIGl0ZW1cIiBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1hZ2UtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJtZWRpYUJhbm5lclVybCtnZXRJbWFnZShiYW5uZXIpXCIgYWx0PVwiQmFubmVyIEltYWdlXCIgY2xhc3M9XCJiYW5uZXItaW1hZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYoYmFubmVyLnRpdGxlKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyIFtjbGFzc109XCInYm94LXRleHQgaXRlbS10aXRsZS1mdWxsIHB4LTIgaXRlbS1wb3NpdGlvbi12ZXJ0aWNhbC0nKyAoYmFubmVyLnN0eWxlcz8uZGVzY3JpcHRpb24/LnBvc2l0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImNvbG9yOiNmZmZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7YmFubmVyLnRpdGxlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmKGJhbm5lci50YXhvbnMgJiYgYmFubmVyLnRheG9ucy5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJpdGVtLXN1YnRpdGxlLWZ1bGwgaXRlbS1wb3NpdGlvbi12ZXJ0aWNhbC1jZW50ZXIgdGV4dC1jZW50ZXIgYm94LXRleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7YmFubmVyLnRyYW5zbGF0aW9ucy5lc19BUi50aXRsZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZihiYW5uZXIuc3VidGl0bGUpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBbc3R5bGUuY29sb3JdPVwiKGJhbm5lci5zdHlsZXM/LmRlc2NyaXB0aW9uPy5jb2xvcikgPyBiYW5uZXIuc3R5bGVzPy5kZXNjcmlwdGlvbj8uY29sb3IgOiAnIzAwMCcgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCInYm94LXRleHQgcHgtNCBpdGVtLXN1YnRpdGxlLWZ1bGwgaXRlbS1wb3NpdGlvbi12ZXJ0aWNhbC0nICsgKGJhbm5lci5zdHlsZXM/LmRlc2NyaXB0aW9uPy5wb3NpdGlvbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7YmFubmVyLnN1YnRpdGxlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zd2lwZXItc2xpZGU+XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICA8L3N3aXBlci1jb250YWluZXI+IFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9zZWN0aW9uPlxyXG59Il19
@@ -0,0 +1,87 @@
1
+ import { afterNextRender, Component, CUSTOM_ELEMENTS_SCHEMA, inject, Input, PLATFORM_ID, signal } from '@angular/core';
2
+ import { BlockEcComponent } from '../../abstractions-components';
3
+ import { register } from 'swiper/element/bundle';
4
+ import { CommonModule, isPlatformBrowser } from '@angular/common';
5
+ import { RouterLink } from '@angular/router';
6
+ import { AnalyticsService } from '../../../ec-services';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@angular/common";
9
+ register();
10
+ /**
11
+ * Componente para manejar los banners de tipo full
12
+ * @extends {BlockEcComponent}
13
+ * @implements {OnInit}
14
+ * @class BlockBannerFullEcComponent
15
+ */
16
+ export class BlockBannerFullEcComponent extends BlockEcComponent {
17
+ /**
18
+ * Banners tipo full
19
+ */
20
+ banners;
21
+ /**
22
+ * Datos del bloque que contiene a los banners
23
+ */
24
+ meta;
25
+ /**
26
+ * Servicio para Analytics
27
+ */
28
+ analyticsService = inject(AnalyticsService);
29
+ /**
30
+ * Signal utlizado para guarda el contenedor del carrusel
31
+ */
32
+ swiperElement = signal(null);
33
+ /**
34
+ * Método original en: {@link BlockEcComponent}
35
+ * @param banner
36
+ * @returns
37
+ */
38
+ getImage = (banner) => this.getBannerImage(banner);
39
+ /**
40
+ * Se mappea los banners para sumarle el objeto de translations y que
41
+ * sean mas amigables para su uso.
42
+ */
43
+ ngOnInit() {
44
+ this.banners = this.banners.map((banner) => { return { ...banner, ...banner.translations[this.apiConsts.LOCALE] }; });
45
+ }
46
+ document;
47
+ platformId = inject(PLATFORM_ID);
48
+ /**
49
+ * Ejecuta el método `afterNextRender`para cargar las configuraciones necesarias
50
+ * para el carrusel del banners. Esto debe ser asi debido a que ya debe estar presente
51
+ * en el Dom el element `<swiper-container>` para poder configurarlo.
52
+ */
53
+ constructor() {
54
+ super();
55
+ if (isPlatformBrowser(this.platformId)) {
56
+ this.document = document;
57
+ }
58
+ afterNextRender(() => {
59
+ const swiperElemConstructor = this.document?.querySelector('#' + this.meta?.code);
60
+ Object.assign(swiperElemConstructor, this.swiperOptions());
61
+ this.swiperElement.set(swiperElemConstructor);
62
+ this.swiperElement()?.initialize();
63
+ });
64
+ }
65
+ /**
66
+ * Aplica el evento `select_promotion` junto con el banner que interactua.
67
+ * @param banner
68
+ */
69
+ selectPromotion(banner) {
70
+ this.analyticsService.callEvent('select_promotion', banner);
71
+ }
72
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BlockBannerFullEcComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
73
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: BlockBannerFullEcComponent, isStandalone: true, selector: "app-block-banner-full-ec", inputs: { banners: "banners", meta: "meta" }, usesInheritance: true, ngImport: i0, template: "@if(banners.length > 0) {\r\n <section [ngClass]=\"trimClassBlock(meta?.code)+' container-fluid px-0'\"\r\n [style.background-color]=\"meta.styles?.backgroundColor\"\r\n [style.background-image]=\"meta.styles?.backgroundImage ? 'url(' + mediaUrl + meta.styles?.backgroundImage +')' : 'inherit'\">\r\n\r\n @if (banners.length == 1) {\r\n <!-- si es formato fijo -->\r\n <div class=\"row justify-content-center\">\r\n @let banner = banners[0];\r\n @if(!banners.styles?.button?.text){\r\n <!-- banner sin boton -->\r\n <a [href]=\"banner.url\" >\r\n <div class=\"item col-12\">\r\n <img class=\"img-fluid\" [src]=\"mediaBannerUrl + getImage(banner)\" alt=\"\">\r\n <div class=\"position-absolute w-100 h-100 start-0 top-0\">\r\n @if(banner.title){\r\n <h2 [class]=\"'item-title-full px-2 item-position-vertical-' + (banner.styles?.description?.position)\"\r\n [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#fff' \">\r\n {{banner.title}}\r\n </h2>\r\n }\r\n @if(banner.subtitle){\r\n <p [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#000' \"\r\n [class]=\"'px-4 item-subtitle-full item-position-vertical-' + (banner.styles?.description?.position)\">\r\n {{banner.subtitle}}\r\n </p>\r\n }\r\n </div>\r\n </div>\r\n </a>\r\n }@else {\r\n <!-- banner fijo con boton -->\r\n <div class=\"item col-12\">\r\n <img class=\"img-fluid\" [src]=\"mediaBannerUrl + getImage(banner)\" alt=\"\">\r\n <div class=\"position-absolute w-100 h-100 start-0 top-0\">\r\n @if(banner.title){\r\n <h2 [class]=\"'item-title-full px-2 item-position-vertical-' + (banner.styles?.description?.position)\"\r\n [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#000' \">\r\n {{banner.title}}\r\n </h2>\r\n }\r\n @if(banner.subtitle){\r\n <p \r\n [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#000' \"\r\n [class]=\"'px-4 item-subtitle-full item-position-vertical-' + (banner.styles?.description?.position)\">\r\n {{banner.subtitle}}\r\n </p>\r\n <div [class]=\"'item-position-vertical-' + (banner.styles?.button?.position)\">\r\n @if(banner.styles?.button?.text){\r\n <a href=\"{{banner.url}}\"\r\n [class]=\"'item-button-full btn btn-light '\">\r\n {{banner.styles.button.text}}\r\n </a> \r\n }\r\n \r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }@else {\r\n <!-- si es carrousel -->\r\n <!-- @if(swiperElement() != null){ -->\r\n <swiper-container init=\"false\" [id]=\"meta?.code\">\r\n @for (banner of banners; track $index) {\r\n <swiper-slide>\r\n <div class=\"item\">\r\n @if (!banner.styles?.button?.text) {\r\n <!-- banner sin boton -->\r\n @if(banner.url){\r\n <a [href]=\"banner.url\" class=\"\">\r\n <img [src]=\"mediaBannerUrl + getImage(banner)\" alt=\"\" class=\"img-fluid w-100\" />\r\n </a>\r\n }@else {\r\n <img [src]=\"mediaBannerUrl + getImage(banner)\" alt=\"\" class=\"img-fluid w-100\" />\r\n }\r\n }@else {\r\n <!-- banner con boton -->\r\n <img [src]=\"mediaBannerUrl + getImage(banner)\" alt=\"\" />\r\n <div class=\"position-absolute w-100 h-100 start-0 top-0\">\r\n @if(banner.title){\r\n <h2 [class]=\"'item-title-full px-2 item-position-vertical-'+ (banner.styles?.description?.position)\"\r\n [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#000' \">\r\n {{banner.title}}\r\n </h2>\r\n }\r\n @if(banner.subtitle){\r\n <p [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#000' \"\r\n [class]=\"'px-4 item-subtitle-full item-position-vertical-' + (banner.styles?.description?.position)\">\r\n {{banner.subtitle}}\r\n </p>\r\n }\r\n <div [class]=\"'item-position-vertical-' + (banner.styles?.button?.position)\">\r\n @if(banner.styles?.button?.text){\r\n <a href=\"{{banner.url}}\" [class]=\"'item-button-full btn btn-light'\">\r\n {{banner.styles.button.text}}\r\n </a>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </swiper-slide>\r\n }\r\n </swiper-container>\r\n <!-- } -->\r\n \r\n }\r\n </section>\r\n}", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
74
+ }
75
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BlockBannerFullEcComponent, decorators: [{
76
+ type: Component,
77
+ args: [{ selector: 'app-block-banner-full-ec', standalone: true, imports: [CommonModule, RouterLink], schemas: [CUSTOM_ELEMENTS_SCHEMA], template: "@if(banners.length > 0) {\r\n <section [ngClass]=\"trimClassBlock(meta?.code)+' container-fluid px-0'\"\r\n [style.background-color]=\"meta.styles?.backgroundColor\"\r\n [style.background-image]=\"meta.styles?.backgroundImage ? 'url(' + mediaUrl + meta.styles?.backgroundImage +')' : 'inherit'\">\r\n\r\n @if (banners.length == 1) {\r\n <!-- si es formato fijo -->\r\n <div class=\"row justify-content-center\">\r\n @let banner = banners[0];\r\n @if(!banners.styles?.button?.text){\r\n <!-- banner sin boton -->\r\n <a [href]=\"banner.url\" >\r\n <div class=\"item col-12\">\r\n <img class=\"img-fluid\" [src]=\"mediaBannerUrl + getImage(banner)\" alt=\"\">\r\n <div class=\"position-absolute w-100 h-100 start-0 top-0\">\r\n @if(banner.title){\r\n <h2 [class]=\"'item-title-full px-2 item-position-vertical-' + (banner.styles?.description?.position)\"\r\n [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#fff' \">\r\n {{banner.title}}\r\n </h2>\r\n }\r\n @if(banner.subtitle){\r\n <p [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#000' \"\r\n [class]=\"'px-4 item-subtitle-full item-position-vertical-' + (banner.styles?.description?.position)\">\r\n {{banner.subtitle}}\r\n </p>\r\n }\r\n </div>\r\n </div>\r\n </a>\r\n }@else {\r\n <!-- banner fijo con boton -->\r\n <div class=\"item col-12\">\r\n <img class=\"img-fluid\" [src]=\"mediaBannerUrl + getImage(banner)\" alt=\"\">\r\n <div class=\"position-absolute w-100 h-100 start-0 top-0\">\r\n @if(banner.title){\r\n <h2 [class]=\"'item-title-full px-2 item-position-vertical-' + (banner.styles?.description?.position)\"\r\n [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#000' \">\r\n {{banner.title}}\r\n </h2>\r\n }\r\n @if(banner.subtitle){\r\n <p \r\n [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#000' \"\r\n [class]=\"'px-4 item-subtitle-full item-position-vertical-' + (banner.styles?.description?.position)\">\r\n {{banner.subtitle}}\r\n </p>\r\n <div [class]=\"'item-position-vertical-' + (banner.styles?.button?.position)\">\r\n @if(banner.styles?.button?.text){\r\n <a href=\"{{banner.url}}\"\r\n [class]=\"'item-button-full btn btn-light '\">\r\n {{banner.styles.button.text}}\r\n </a> \r\n }\r\n \r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }@else {\r\n <!-- si es carrousel -->\r\n <!-- @if(swiperElement() != null){ -->\r\n <swiper-container init=\"false\" [id]=\"meta?.code\">\r\n @for (banner of banners; track $index) {\r\n <swiper-slide>\r\n <div class=\"item\">\r\n @if (!banner.styles?.button?.text) {\r\n <!-- banner sin boton -->\r\n @if(banner.url){\r\n <a [href]=\"banner.url\" class=\"\">\r\n <img [src]=\"mediaBannerUrl + getImage(banner)\" alt=\"\" class=\"img-fluid w-100\" />\r\n </a>\r\n }@else {\r\n <img [src]=\"mediaBannerUrl + getImage(banner)\" alt=\"\" class=\"img-fluid w-100\" />\r\n }\r\n }@else {\r\n <!-- banner con boton -->\r\n <img [src]=\"mediaBannerUrl + getImage(banner)\" alt=\"\" />\r\n <div class=\"position-absolute w-100 h-100 start-0 top-0\">\r\n @if(banner.title){\r\n <h2 [class]=\"'item-title-full px-2 item-position-vertical-'+ (banner.styles?.description?.position)\"\r\n [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#000' \">\r\n {{banner.title}}\r\n </h2>\r\n }\r\n @if(banner.subtitle){\r\n <p [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#000' \"\r\n [class]=\"'px-4 item-subtitle-full item-position-vertical-' + (banner.styles?.description?.position)\">\r\n {{banner.subtitle}}\r\n </p>\r\n }\r\n <div [class]=\"'item-position-vertical-' + (banner.styles?.button?.position)\">\r\n @if(banner.styles?.button?.text){\r\n <a href=\"{{banner.url}}\" [class]=\"'item-button-full btn btn-light'\">\r\n {{banner.styles.button.text}}\r\n </a>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </swiper-slide>\r\n }\r\n </swiper-container>\r\n <!-- } -->\r\n \r\n }\r\n </section>\r\n}" }]
78
+ }], ctorParameters: () => [], propDecorators: { banners: [{
79
+ type: Input,
80
+ args: [{
81
+ required: true
82
+ }]
83
+ }], meta: [{
84
+ type: Input,
85
+ args: [{ required: true }]
86
+ }] } });
87
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2stYmFubmVyLWZ1bGwtZWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvYmxvY2tzLWVjL2Jsb2NrLWJhbm5lci1mdWxsLWVjL2Jsb2NrLWJhbm5lci1mdWxsLWVjLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWVhc3ljb21tZXJjZS12MTgvc3JjL2xpYi9lYy1jb21wb25lbnRzL2Jsb2Nrcy1lYy9ibG9jay1iYW5uZXItZnVsbC1lYy9ibG9jay1iYW5uZXItZnVsbC1lYy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFlLFNBQVMsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLFdBQVcsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFNUksT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxFQUFFLFFBQVEsRUFBbUIsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7QUFFeEQsUUFBUSxFQUFFLENBQUM7QUFDWDs7Ozs7R0FLRztBQVNILE1BQU0sT0FBTywwQkFBMkIsU0FBUSxnQkFBZ0I7SUFDL0Q7O09BRUc7SUFHQSxPQUFPLENBQU07SUFDaEI7O09BRUc7SUFDd0IsSUFBSSxDQUFNO0lBQ3JDOztPQUVHO0lBQ0ssZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUE7SUFDbkQ7O09BRUc7SUFDSCxhQUFhLEdBQUcsTUFBTSxDQUF5QixJQUFJLENBQUMsQ0FBQTtJQUNwRDs7OztPQUlHO0lBQ2EsUUFBUSxHQUFHLENBQUMsTUFBVyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hFOzs7T0FHRztJQUNILFFBQVE7UUFDUCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBVyxFQUFFLEVBQUUsR0FBRyxPQUFPLEVBQUUsR0FBRyxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzFILENBQUM7SUFDTyxRQUFRLENBQVk7SUFDcEIsVUFBVSxHQUFRLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQTtJQUU3Qzs7OztPQUlHO0lBQ0g7UUFDQyxLQUFLLEVBQUUsQ0FBQTtRQUNQLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDeEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUE7UUFDekIsQ0FBQztRQUNELGVBQWUsQ0FBQyxHQUFHLEVBQUU7WUFDcEIsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQTtZQUNqRixNQUFNLENBQUMsTUFBTSxDQUFDLHFCQUFzQixFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFBO1lBQzNELElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLHFCQUF3QyxDQUFDLENBQUE7WUFDaEUsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFBO0lBQ0gsQ0FBQztJQUNEOzs7T0FHRztJQUNILGVBQWUsQ0FBQyxNQUFXO1FBQzFCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDNUQsQ0FBQzt1R0ExRFcsMEJBQTBCOzJGQUExQiwwQkFBMEIseUpDdkJ2QyxzM05BOEdDLHlERDVGVSxZQUFZOzsyRkFLViwwQkFBMEI7a0JBUnRDLFNBQVM7K0JBQ0MsMEJBQTBCLGNBQ3hCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxVQUFVLENBQUMsV0FDMUIsQ0FBQyxzQkFBc0IsQ0FBQzt3REFVOUIsT0FBTztzQkFGVCxLQUFLO3VCQUFDO3dCQUNOLFFBQVEsRUFBRSxJQUFJO3FCQUNkO2dCQUkwQixJQUFJO3NCQUE5QixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFmdGVyTmV4dFJlbmRlciwgYWZ0ZXJSZW5kZXIsIENvbXBvbmVudCwgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgaW5qZWN0LCBJbnB1dCwgT25Jbml0LCBQTEFURk9STV9JRCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IElCbG9jayB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBCbG9ja0VjQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYWJzdHJhY3Rpb25zLWNvbXBvbmVudHMnO1xyXG5pbXBvcnQgeyByZWdpc3RlciwgU3dpcGVyQ29udGFpbmVyIH0gZnJvbSAnc3dpcGVyL2VsZW1lbnQvYnVuZGxlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFJvdXRlckxpbmsgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBBbmFseXRpY3NTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vZWMtc2VydmljZXMnO1xyXG5cclxucmVnaXN0ZXIoKTtcclxuLyoqXHJcbiAqIENvbXBvbmVudGUgcGFyYSBtYW5lamFyIGxvcyBiYW5uZXJzIGRlIHRpcG8gZnVsbFxyXG4gKiBAZXh0ZW5kcyB7QmxvY2tFY0NvbXBvbmVudH1cclxuICogQGltcGxlbWVudHMge09uSW5pdH1cclxuICogQGNsYXNzIEJsb2NrQmFubmVyRnVsbEVjQ29tcG9uZW50XHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuXHRzZWxlY3RvcjogJ2FwcC1ibG9jay1iYW5uZXItZnVsbC1lYycsXHJcblx0c3RhbmRhbG9uZTogdHJ1ZSxcclxuXHRpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBSb3V0ZXJMaW5rXSxcclxuXHRzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXHJcblx0dGVtcGxhdGVVcmw6ICcuL2Jsb2NrLWJhbm5lci1mdWxsLWVjLmNvbXBvbmVudC5odG1sJyxcclxuXHRzdHlsZVVybDogJy4vYmxvY2stYmFubmVyLWZ1bGwtZWMuY29tcG9uZW50LnNjc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCbG9ja0Jhbm5lckZ1bGxFY0NvbXBvbmVudCBleHRlbmRzIEJsb2NrRWNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cdC8qKlxyXG5cdCAqIEJhbm5lcnMgdGlwbyBmdWxsXHJcblx0ICovXHJcblx0QElucHV0KHtcclxuXHRcdHJlcXVpcmVkOiB0cnVlXHJcblx0fSkgYmFubmVyczogYW55O1xyXG5cdC8qKlxyXG5cdCAqIERhdG9zIGRlbCBibG9xdWUgcXVlIGNvbnRpZW5lIGEgbG9zIGJhbm5lcnNcclxuXHQgKi9cclxuXHRASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBtZXRhOiBhbnk7XHJcblx0LyoqXHJcblx0ICogU2VydmljaW8gcGFyYSBBbmFseXRpY3NcclxuXHQgKi9cclxuXHRwcml2YXRlIGFuYWx5dGljc1NlcnZpY2UgPSBpbmplY3QoQW5hbHl0aWNzU2VydmljZSlcclxuXHQvKipcclxuXHQgKiBTaWduYWwgdXRsaXphZG8gcGFyYSBndWFyZGEgZWwgY29udGVuZWRvciBkZWwgY2FycnVzZWxcclxuXHQgKi9cclxuXHRzd2lwZXJFbGVtZW50ID0gc2lnbmFsPFN3aXBlckNvbnRhaW5lciB8IG51bGw+KG51bGwpXHJcblx0LyoqXHJcblx0ICogTcOpdG9kbyBvcmlnaW5hbCBlbjoge0BsaW5rIEJsb2NrRWNDb21wb25lbnR9XHJcblx0ICogQHBhcmFtIGJhbm5lciBcclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRwdWJsaWMgb3ZlcnJpZGUgZ2V0SW1hZ2UgPSAoYmFubmVyOiBhbnkpID0+IHRoaXMuZ2V0QmFubmVySW1hZ2UoYmFubmVyKTtcclxuXHQvKipcclxuXHQgKiBTZSBtYXBwZWEgbG9zIGJhbm5lcnMgcGFyYSBzdW1hcmxlIGVsIG9iamV0byBkZSB0cmFuc2xhdGlvbnMgeSBxdWVcclxuXHQgKiBzZWFuIG1hcyBhbWlnYWJsZXMgcGFyYSBzdSB1c28uXHJcblx0ICovXHJcblx0bmdPbkluaXQoKTogdm9pZCB7XHJcblx0XHR0aGlzLmJhbm5lcnMgPSB0aGlzLmJhbm5lcnMubWFwKChiYW5uZXI6IGFueSkgPT4geyByZXR1cm4geyAuLi5iYW5uZXIsIC4uLmJhbm5lci50cmFuc2xhdGlvbnNbdGhpcy5hcGlDb25zdHMuTE9DQUxFXSB9IH0pXHJcblx0fVxyXG5cdHByaXZhdGUgZG9jdW1lbnQ/OiBEb2N1bWVudDtcclxuXHRwcml2YXRlIHBsYXRmb3JtSWQ6IGFueSA9IGluamVjdChQTEFURk9STV9JRClcclxuXHJcblx0LyoqXHJcblx0ICogRWplY3V0YSBlbCBtw6l0b2RvIGBhZnRlck5leHRSZW5kZXJgcGFyYSBjYXJnYXIgbGFzIGNvbmZpZ3VyYWNpb25lcyBuZWNlc2FyaWFzIFxyXG5cdCAqIHBhcmEgZWwgY2FycnVzZWwgZGVsIGJhbm5lcnMuIEVzdG8gZGViZSBzZXIgYXNpIGRlYmlkbyBhIHF1ZSB5YSBkZWJlIGVzdGFyIHByZXNlbnRlXHJcblx0ICogZW4gZWwgRG9tIGVsIGVsZW1lbnQgYDxzd2lwZXItY29udGFpbmVyPmAgcGFyYSBwb2RlciBjb25maWd1cmFybG8uXHJcblx0ICovXHJcblx0Y29uc3RydWN0b3IoKSB7XHJcblx0XHRzdXBlcigpXHJcblx0XHRpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xyXG5cdFx0XHR0aGlzLmRvY3VtZW50ID0gZG9jdW1lbnRcclxuXHRcdH1cclxuXHRcdGFmdGVyTmV4dFJlbmRlcigoKSA9PiB7XHJcblx0XHRcdGNvbnN0IHN3aXBlckVsZW1Db25zdHJ1Y3RvciA9IHRoaXMuZG9jdW1lbnQ/LnF1ZXJ5U2VsZWN0b3IoJyMnICsgdGhpcy5tZXRhPy5jb2RlKVxyXG5cdFx0XHRPYmplY3QuYXNzaWduKHN3aXBlckVsZW1Db25zdHJ1Y3RvciEsIHRoaXMuc3dpcGVyT3B0aW9ucygpKVxyXG5cdFx0XHR0aGlzLnN3aXBlckVsZW1lbnQuc2V0KHN3aXBlckVsZW1Db25zdHJ1Y3RvciBhcyBTd2lwZXJDb250YWluZXIpXHJcblx0XHRcdHRoaXMuc3dpcGVyRWxlbWVudCgpPy5pbml0aWFsaXplKCk7XHJcblx0XHR9KVxyXG5cdH1cclxuXHQvKipcclxuXHQgKiBBcGxpY2EgZWwgZXZlbnRvIGBzZWxlY3RfcHJvbW90aW9uYCBqdW50byBjb24gZWwgYmFubmVyIHF1ZSBpbnRlcmFjdHVhLlxyXG5cdCAqIEBwYXJhbSBiYW5uZXIgXHJcblx0ICovXHJcblx0c2VsZWN0UHJvbW90aW9uKGJhbm5lcjogYW55KTogdm9pZCB7XHJcblx0XHR0aGlzLmFuYWx5dGljc1NlcnZpY2UuY2FsbEV2ZW50KCdzZWxlY3RfcHJvbW90aW9uJywgYmFubmVyKVxyXG5cdH1cclxufVxyXG4iLCJAaWYoYmFubmVycy5sZW5ndGggPiAwKSB7XHJcbiAgICA8c2VjdGlvbiBbbmdDbGFzc109XCJ0cmltQ2xhc3NCbG9jayhtZXRhPy5jb2RlKSsnIGNvbnRhaW5lci1mbHVpZCBweC0wJ1wiXHJcbiAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwibWV0YS5zdHlsZXM/LmJhY2tncm91bmRDb2xvclwiXHJcbiAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtaW1hZ2VdPVwibWV0YS5zdHlsZXM/LmJhY2tncm91bmRJbWFnZSA/ICd1cmwoJyArIG1lZGlhVXJsICsgbWV0YS5zdHlsZXM/LmJhY2tncm91bmRJbWFnZSArJyknIDogJ2luaGVyaXQnXCI+XHJcblxyXG4gICAgICAgIEBpZiAoYmFubmVycy5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgICAgICA8IS0tIHNpIGVzIGZvcm1hdG8gZmlqbyAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICBAbGV0IGJhbm5lciA9IGJhbm5lcnNbMF07XHJcbiAgICAgICAgICAgICAgICBAaWYoIWJhbm5lcnMuc3R5bGVzPy5idXR0b24/LnRleHQpe1xyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gYmFubmVyIHNpbiBib3RvbiAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8YSBbaHJlZl09XCJiYW5uZXIudXJsXCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbSBjb2wtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWctZmx1aWRcIiBbc3JjXT1cIm1lZGlhQmFubmVyVXJsICsgZ2V0SW1hZ2UoYmFubmVyKVwiIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlIHctMTAwIGgtMTAwIHN0YXJ0LTAgdG9wLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYoYmFubmVyLnRpdGxlKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyIFtjbGFzc109XCInaXRlbS10aXRsZS1mdWxsIHB4LTIgaXRlbS1wb3NpdGlvbi12ZXJ0aWNhbC0nICsgKGJhbm5lci5zdHlsZXM/LmRlc2NyaXB0aW9uPy5wb3NpdGlvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwiKGJhbm5lci5zdHlsZXM/LmRlc2NyaXB0aW9uPy5jb2xvcikgPyBiYW5uZXIuc3R5bGVzPy5kZXNjcmlwdGlvbj8uY29sb3IgOiAnI2ZmZicgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2Jhbm5lci50aXRsZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZihiYW5uZXIuc3VidGl0bGUpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBbc3R5bGUuY29sb3JdPVwiKGJhbm5lci5zdHlsZXM/LmRlc2NyaXB0aW9uPy5jb2xvcikgPyBiYW5uZXIuc3R5bGVzPy5kZXNjcmlwdGlvbj8uY29sb3IgOiAnIzAwMCcgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cIidweC00IGl0ZW0tc3VidGl0bGUtZnVsbCBpdGVtLXBvc2l0aW9uLXZlcnRpY2FsLScgKyAoYmFubmVyLnN0eWxlcz8uZGVzY3JpcHRpb24/LnBvc2l0aW9uKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tiYW5uZXIuc3VidGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgIH1AZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBiYW5uZXIgZmlqbyBjb24gYm90b24gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0gY29sLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWctZmx1aWRcIiBbc3JjXT1cIm1lZGlhQmFubmVyVXJsICsgZ2V0SW1hZ2UoYmFubmVyKVwiIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGUgdy0xMDAgaC0xMDAgc3RhcnQtMCB0b3AtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmKGJhbm5lci50aXRsZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyIFtjbGFzc109XCInaXRlbS10aXRsZS1mdWxsIHB4LTIgaXRlbS1wb3NpdGlvbi12ZXJ0aWNhbC0nICsgKGJhbm5lci5zdHlsZXM/LmRlc2NyaXB0aW9uPy5wb3NpdGlvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCIoYmFubmVyLnN0eWxlcz8uZGVzY3JpcHRpb24/LmNvbG9yKSA/IGJhbm5lci5zdHlsZXM/LmRlc2NyaXB0aW9uPy5jb2xvciA6ICcjMDAwJyBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tiYW5uZXIudGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYoYmFubmVyLnN1YnRpdGxlKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwiKGJhbm5lci5zdHlsZXM/LmRlc2NyaXB0aW9uPy5jb2xvcikgPyBiYW5uZXIuc3R5bGVzPy5kZXNjcmlwdGlvbj8uY29sb3IgOiAnIzAwMCcgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiJ3B4LTQgaXRlbS1zdWJ0aXRsZS1mdWxsIGl0ZW0tcG9zaXRpb24tdmVydGljYWwtJyArIChiYW5uZXIuc3R5bGVzPy5kZXNjcmlwdGlvbj8ucG9zaXRpb24pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7YmFubmVyLnN1YnRpdGxlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtjbGFzc109XCInaXRlbS1wb3NpdGlvbi12ZXJ0aWNhbC0nICsgKGJhbm5lci5zdHlsZXM/LmJ1dHRvbj8ucG9zaXRpb24pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmKGJhbm5lci5zdHlsZXM/LmJ1dHRvbj8udGV4dCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cInt7YmFubmVyLnVybH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cIidpdGVtLWJ1dHRvbi1mdWxsIGJ0biBidG4tbGlnaHQgJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tiYW5uZXIuc3R5bGVzLmJ1dHRvbi50ZXh0fX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH1AZWxzZSB7XHJcbiAgICAgICAgICAgIDwhLS0gc2kgZXMgY2Fycm91c2VsIC0tPlxyXG4gICAgICAgICAgICA8IS0tICBAaWYoc3dpcGVyRWxlbWVudCgpICE9IG51bGwpeyAtLT5cclxuICAgICAgICAgICAgICAgIDxzd2lwZXItY29udGFpbmVyIGluaXQ9XCJmYWxzZVwiIFtpZF09XCJtZXRhPy5jb2RlXCI+XHJcbiAgICAgICAgICAgICAgICBAZm9yIChiYW5uZXIgb2YgYmFubmVyczsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgPHN3aXBlci1zbGlkZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoIWJhbm5lci5zdHlsZXM/LmJ1dHRvbj8udGV4dCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gYmFubmVyIHNpbiBib3RvbiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYoYmFubmVyLnVybCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIFtocmVmXT1cImJhbm5lci51cmxcIiBjbGFzcz1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cIm1lZGlhQmFubmVyVXJsICsgZ2V0SW1hZ2UoYmFubmVyKVwiIGFsdD1cIlwiIGNsYXNzPVwiaW1nLWZsdWlkIHctMTAwXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1AZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJtZWRpYUJhbm5lclVybCArIGdldEltYWdlKGJhbm5lcilcIiBhbHQ9XCJcIiAgY2xhc3M9XCJpbWctZmx1aWQgdy0xMDBcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1AZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBiYW5uZXIgY29uIGJvdG9uIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJtZWRpYUJhbm5lclVybCArIGdldEltYWdlKGJhbm5lcilcIiBhbHQ9XCJcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3NpdGlvbi1hYnNvbHV0ZSB3LTEwMCBoLTEwMCBzdGFydC0wIHRvcC0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZihiYW5uZXIudGl0bGUpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyIFtjbGFzc109XCInaXRlbS10aXRsZS1mdWxsIHB4LTIgaXRlbS1wb3NpdGlvbi12ZXJ0aWNhbC0nKyAoYmFubmVyLnN0eWxlcz8uZGVzY3JpcHRpb24/LnBvc2l0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cIihiYW5uZXIuc3R5bGVzPy5kZXNjcmlwdGlvbj8uY29sb3IpID8gYmFubmVyLnN0eWxlcz8uZGVzY3JpcHRpb24/LmNvbG9yIDogJyMwMDAnIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7YmFubmVyLnRpdGxlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmKGJhbm5lci5zdWJ0aXRsZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBbc3R5bGUuY29sb3JdPVwiKGJhbm5lci5zdHlsZXM/LmRlc2NyaXB0aW9uPy5jb2xvcikgPyBiYW5uZXIuc3R5bGVzPy5kZXNjcmlwdGlvbj8uY29sb3IgOiAnIzAwMCcgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiJ3B4LTQgaXRlbS1zdWJ0aXRsZS1mdWxsIGl0ZW0tcG9zaXRpb24tdmVydGljYWwtJyArIChiYW5uZXIuc3R5bGVzPy5kZXNjcmlwdGlvbj8ucG9zaXRpb24pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tiYW5uZXIuc3VidGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2NsYXNzXT1cIidpdGVtLXBvc2l0aW9uLXZlcnRpY2FsLScgKyAoYmFubmVyLnN0eWxlcz8uYnV0dG9uPy5wb3NpdGlvbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZihiYW5uZXIuc3R5bGVzPy5idXR0b24/LnRleHQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJ7e2Jhbm5lci51cmx9fVwiIFtjbGFzc109XCInaXRlbS1idXR0b24tZnVsbCBidG4gYnRuLWxpZ2h0J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2Jhbm5lci5zdHlsZXMuYnV0dG9uLnRleHR9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3dpcGVyLXNsaWRlPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L3N3aXBlci1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwhLS0gIH0gLS0+XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuICAgIDwvc2VjdGlvbj5cclxufSJdfQ==
@@ -0,0 +1,87 @@
1
+ import { Component, inject, Input, signal } from '@angular/core';
2
+ import { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms';
3
+ import { FormService, ToastService } from '../../../ec-services';
4
+ import { Router } from '@angular/router';
5
+ import { BlockEcComponent } from '../../abstractions-components';
6
+ import { LoadingSectionEcComponent, ReCaptchaEcComponent } from '../../widgets-ec';
7
+ import { firstValueFrom } from 'rxjs';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "@angular/forms";
10
+ export class BlockFormContactEcComponent extends BlockEcComponent {
11
+ block;
12
+ success_message;
13
+ redirect = true;
14
+ subject;
15
+ _contactFormService = inject(FormService);
16
+ _toastService = inject(ToastService);
17
+ _formBuilder = inject(FormBuilder);
18
+ _router = inject(Router);
19
+ form_data = new FormData();
20
+ loading = false;
21
+ form = signal(this._formBuilder.group({
22
+ name: ['', []],
23
+ email: ['', Validators.required],
24
+ telephone: ['', []],
25
+ subject: ['', []],
26
+ body: ['', []],
27
+ attachment: [''],
28
+ recaptcha: [null, Validators.required], //testear este cambio de nombre
29
+ }));
30
+ onSubmit(e) {
31
+ this.loading = true;
32
+ e.preventDefault();
33
+ this.sendForm(this.form(), 'inquiry-sent');
34
+ }
35
+ sendForm(form, success_message) {
36
+ if (form.valid && (form.value.email.includes('@'))) {
37
+ const formData = new FormData();
38
+ formData.append('mailText', form.value.body);
39
+ formData.append('form_code', this.block.code);
40
+ this.sendValue('name') && formData.append('name', this.form().get('name')?.value);
41
+ this.sendValue('email') && formData.append('email', this.form().get('email')?.value);
42
+ this.sendValue('telephone') && formData.append('telephone', this.form().get('telephone')?.value);
43
+ this.sendValue('subject') && formData.append('subject', this.form().get('subject')?.value);
44
+ this.sendValue('body') && formData.append('body', this.form().get('body')?.value);
45
+ this.sendValue('attachments') && formData.append('attachment', this.form().get('attachment')?.value);
46
+ firstValueFrom(this._contactFormService.sendResponse(formData)).then((res) => {
47
+ this.form().reset();
48
+ this._toastService.show(this.success_message || success_message);
49
+ this.loading = false;
50
+ this.redirect && this._router.navigateByUrl('/home');
51
+ }, (err) => {
52
+ this._toastService.error('inquiry-error');
53
+ this.loading = false;
54
+ });
55
+ }
56
+ else {
57
+ this._toastService.error('invalid-form');
58
+ this.loading = false;
59
+ }
60
+ }
61
+ sendValue(key) {
62
+ try {
63
+ let keysearch = key[0].toUpperCase() + key.slice(1).toLowerCase();
64
+ return this.block && this.block['send' + keysearch] || false;
65
+ }
66
+ catch (error) {
67
+ console.error(error);
68
+ return false;
69
+ }
70
+ }
71
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BlockFormContactEcComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
72
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: BlockFormContactEcComponent, isStandalone: true, selector: "app-block-form-contact-ec", inputs: { block: "block", success_message: "success_message", redirect: "redirect", subject: "subject" }, usesInheritance: true, ngImport: i0, template: "@if(block){\r\n<div [class]=\"trimClassBlock(block.code) + ' container-fluid'\">\r\n <div class=\"row justify-content-center\">\r\n <div class=\"col-12 col-md-12\">\r\n <div class=\"row w-100 m-auto\">\r\n <h5>{{block.name || 'Dejanos tu consulta'}}</h5>\r\n <p class=\"w-100\">{{ block.description || 'Completa el siguiente formulario y responderemos tu consulta a la brevedad' }}</p>\r\n </div>\r\n <form [formGroup]=\"form()\" (submit)=\"onSubmit($event)\" class=\"position-relative\" ><!-- (submit)=\"toastCompleteForm($event)\" -->\r\n @if(block.sendName){\r\n <div class=\"form-group\">\r\n <label class=\"sr-only\" for=\"nombre\">Nombre</label>\r\n <input formControlName=\"name\" type=\"text\"\r\n class=\"form-control form-control-sm required\" id=\"nombre\" placeholder=\"Nombre\">\r\n </div>\r\n }\r\n @if(block.sendEmail){\r\n <div class=\"form-group\">\r\n <label class=\"sr-only\" for=\"mail\">Email</label>\r\n <input formControlName=\"email\" type=\"email\"\r\n class=\"form-control form-control-sm required\" id=\"mail\" placeholder=\"Email\">\r\n </div>\r\n }\r\n @if(block.sendTelephone){\r\n <div class=\"form-group\">\r\n <label class=\"sr-only\" for=\"telefono\">Tel\u00E9fono</label>\r\n <input formControlName=\"telephone\" type=\"text\"\r\n class=\"form-control form-control-sm required\" id=\"telefono\" placeholder=\"Tel\u00E9fono\">\r\n </div>\r\n }\r\n @if(block.sendSubject){\r\n <div class=\"form-group\">\r\n <label class=\"sr-only\" for=\"subject\">Asunto</label>\r\n <input formControlName=\"subject\" type=\"text\"\r\n class=\"form-control form-control-sm required\" id=\"subject\" placeholder=\"Asunto\">\r\n </div>\r\n }\r\n @if(block.sendBody){\r\n <div class=\"form-group\">\r\n <label class=\"sr-only\" for=\"mensaje\">Mensaje</label>\r\n <textarea formControlName=\"body\" name=\"mensaje\" id=\"mensaje \" cols=\"30\"\r\n rows=\"5\" placeholder=\"Dejanos tu mensaje\"\r\n class=\"form-control form-control-sm required\"></textarea>\r\n </div>\r\n }\r\n <div class=\"boxContenidoCapcha mb-3\">\r\n <div class=\"contenedorCaptcha\">\r\n <re-captcha-ec formControlName=\"recaptcha\"></re-captcha-ec>\r\n </div>\r\n </div>\r\n\r\n <button type=\"submit\" class=\"btn btn-dark text-uppercase px-5\"\r\n [disabled]=\"form().invalid\">ENVIAR</button>\r\n @if(loading){\r\n <app-loading-section-ec />\r\n }\r\n </form>\r\n </div>\r\n\r\n </div>\r\n</div>\r\n}", styles: [""], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: LoadingSectionEcComponent, selector: "app-loading-section-ec" }, { kind: "component", type: ReCaptchaEcComponent, selector: "re-captcha-ec", inputs: ["siteKey"] }] });
73
+ }
74
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BlockFormContactEcComponent, decorators: [{
75
+ type: Component,
76
+ args: [{ selector: 'app-block-form-contact-ec', standalone: true, imports: [ReactiveFormsModule, LoadingSectionEcComponent, ReCaptchaEcComponent], template: "@if(block){\r\n<div [class]=\"trimClassBlock(block.code) + ' container-fluid'\">\r\n <div class=\"row justify-content-center\">\r\n <div class=\"col-12 col-md-12\">\r\n <div class=\"row w-100 m-auto\">\r\n <h5>{{block.name || 'Dejanos tu consulta'}}</h5>\r\n <p class=\"w-100\">{{ block.description || 'Completa el siguiente formulario y responderemos tu consulta a la brevedad' }}</p>\r\n </div>\r\n <form [formGroup]=\"form()\" (submit)=\"onSubmit($event)\" class=\"position-relative\" ><!-- (submit)=\"toastCompleteForm($event)\" -->\r\n @if(block.sendName){\r\n <div class=\"form-group\">\r\n <label class=\"sr-only\" for=\"nombre\">Nombre</label>\r\n <input formControlName=\"name\" type=\"text\"\r\n class=\"form-control form-control-sm required\" id=\"nombre\" placeholder=\"Nombre\">\r\n </div>\r\n }\r\n @if(block.sendEmail){\r\n <div class=\"form-group\">\r\n <label class=\"sr-only\" for=\"mail\">Email</label>\r\n <input formControlName=\"email\" type=\"email\"\r\n class=\"form-control form-control-sm required\" id=\"mail\" placeholder=\"Email\">\r\n </div>\r\n }\r\n @if(block.sendTelephone){\r\n <div class=\"form-group\">\r\n <label class=\"sr-only\" for=\"telefono\">Tel\u00E9fono</label>\r\n <input formControlName=\"telephone\" type=\"text\"\r\n class=\"form-control form-control-sm required\" id=\"telefono\" placeholder=\"Tel\u00E9fono\">\r\n </div>\r\n }\r\n @if(block.sendSubject){\r\n <div class=\"form-group\">\r\n <label class=\"sr-only\" for=\"subject\">Asunto</label>\r\n <input formControlName=\"subject\" type=\"text\"\r\n class=\"form-control form-control-sm required\" id=\"subject\" placeholder=\"Asunto\">\r\n </div>\r\n }\r\n @if(block.sendBody){\r\n <div class=\"form-group\">\r\n <label class=\"sr-only\" for=\"mensaje\">Mensaje</label>\r\n <textarea formControlName=\"body\" name=\"mensaje\" id=\"mensaje \" cols=\"30\"\r\n rows=\"5\" placeholder=\"Dejanos tu mensaje\"\r\n class=\"form-control form-control-sm required\"></textarea>\r\n </div>\r\n }\r\n <div class=\"boxContenidoCapcha mb-3\">\r\n <div class=\"contenedorCaptcha\">\r\n <re-captcha-ec formControlName=\"recaptcha\"></re-captcha-ec>\r\n </div>\r\n </div>\r\n\r\n <button type=\"submit\" class=\"btn btn-dark text-uppercase px-5\"\r\n [disabled]=\"form().invalid\">ENVIAR</button>\r\n @if(loading){\r\n <app-loading-section-ec />\r\n }\r\n </form>\r\n </div>\r\n\r\n </div>\r\n</div>\r\n}" }]
77
+ }], propDecorators: { block: [{
78
+ type: Input,
79
+ args: [{ required: true }]
80
+ }], success_message: [{
81
+ type: Input
82
+ }], redirect: [{
83
+ type: Input
84
+ }], subject: [{
85
+ type: Input
86
+ }] } });
87
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2stZm9ybS1jb250YWN0LWVjLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWVhc3ljb21tZXJjZS12MTgvc3JjL2xpYi9lYy1jb21wb25lbnRzL2Jsb2Nrcy1lYy9ibG9jay1mb3JtLWNvbnRhY3QtZWMvYmxvY2stZm9ybS1jb250YWN0LWVjLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWVhc3ljb21tZXJjZS12MTgvc3JjL2xpYi9lYy1jb21wb25lbnRzL2Jsb2Nrcy1lYy9ibG9jay1mb3JtLWNvbnRhY3QtZWMvYmxvY2stZm9ybS1jb250YWN0LWVjLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUFFLFdBQVcsRUFBMEIsbUJBQW1CLEVBQUUsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDckcsT0FBTyxFQUFpQixXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDaEYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRW5GLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxNQUFNLENBQUM7OztBQVN0QyxNQUFNLE9BQU8sMkJBQTRCLFNBQVEsZ0JBQWdCO0lBQ3RDLEtBQUssQ0FBSztJQUMzQixlQUFlLENBQW9CO0lBQ25DLFFBQVEsR0FBVyxJQUFJLENBQUM7SUFDeEIsT0FBTyxDQUFvQjtJQUU1QixtQkFBbUIsR0FBZ0IsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBQ3RELGFBQWEsR0FBZ0IsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFBO0lBQ2pELFlBQVksR0FBZSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUE7SUFDOUMsT0FBTyxHQUFVLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUU3QixTQUFTLEdBQU8sSUFBSSxRQUFRLEVBQUUsQ0FBQztJQUVsQyxPQUFPLEdBQVcsS0FBSyxDQUFDO0lBRXhCLElBQUksR0FBRyxNQUFNLENBQ25CLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDO1FBQ3ZCLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFDTCxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztRQUNoQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBQ25CLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFDakIsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUNkLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNoQixTQUFTLEVBQUUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLCtCQUErQjtLQUNoRixDQUFDLENBQ0MsQ0FBQTtJQUVKLFFBQVEsQ0FBQyxDQUFLO1FBQ2IsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxRQUFRLENBQUMsSUFBUSxFQUFFLGVBQXNCO1FBQ2xDLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDakQsTUFBTSxRQUFRLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNoQyxRQUFRLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQzVDLFFBQVEsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDN0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFBO1lBQ2pGLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQTtZQUNwRixJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUE7WUFDaEcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFBO1lBQzFGLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQTtZQUNqRixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUE7WUFDN0csY0FBYyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ3ZELENBQUMsR0FBTyxFQUFFLEVBQUU7Z0JBQ1IsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFBO2dCQUNuQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxJQUFJLGVBQWUsQ0FBQyxDQUFDO2dCQUNqRSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQTtnQkFDcEIsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUV6RCxDQUFDLEVBQ0QsQ0FBQyxHQUFPLEVBQUUsRUFBRTtnQkFDUixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUE7WUFDeEIsQ0FBQyxDQUNKLENBQUM7UUFDTixDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ3pDLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFBO1FBQ3hCLENBQUM7SUFDTCxDQUFDO0lBRUosU0FBUyxDQUFDLEdBQU87UUFDVixJQUFJLENBQUM7WUFDRCxJQUFJLFNBQVMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNsRSxPQUFPLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLElBQUksS0FBSyxDQUFBO1FBQ2hFLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyQixPQUFPLEtBQUssQ0FBQTtRQUNoQixDQUFDO0lBQ0wsQ0FBQzt1R0F2RVEsMkJBQTJCOzJGQUEzQiwyQkFBMkIsc05DaEJ4QyxtMEdBNkRDLHlERGpEVSxtQkFBbUIsNjhCQUFFLHlCQUF5QixtRUFBRSxvQkFBb0I7OzJGQUlsRSwyQkFBMkI7a0JBUHZDLFNBQVM7K0JBQ0MsMkJBQTJCLGNBQ3pCLElBQUksV0FDUCxDQUFDLG1CQUFtQixFQUFFLHlCQUF5QixFQUFFLG9CQUFvQixDQUFDOzhCQUtyRCxLQUFLO3NCQUE5QixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFDLElBQUksRUFBRTtnQkFDZixlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBpbmplY3QsIElucHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIFZhbGlkYXRvcnN9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQmxvY2tzU2VydmljZSwgRm9ybVNlcnZpY2UsIFRvYXN0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2VjLXNlcnZpY2VzJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgQmxvY2tFY0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL2Fic3RyYWN0aW9ucy1jb21wb25lbnRzJztcclxuaW1wb3J0IHsgTG9hZGluZ1NlY3Rpb25FY0NvbXBvbmVudCwgUmVDYXB0Y2hhRWNDb21wb25lbnQgfSBmcm9tICcuLi8uLi93aWRnZXRzLWVjJztcclxuaW1wb3J0IHsgSnNvblBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcblx0c2VsZWN0b3I6ICdhcHAtYmxvY2stZm9ybS1jb250YWN0LWVjJyxcclxuXHRzdGFuZGFsb25lOiB0cnVlLFxyXG5cdGltcG9ydHM6IFtSZWFjdGl2ZUZvcm1zTW9kdWxlLCBMb2FkaW5nU2VjdGlvbkVjQ29tcG9uZW50LCBSZUNhcHRjaGFFY0NvbXBvbmVudF0sXHJcblx0dGVtcGxhdGVVcmw6ICcuL2Jsb2NrLWZvcm0tY29udGFjdC1lYy5jb21wb25lbnQuaHRtbCcsXHJcblx0c3R5bGVVcmw6ICcuL2Jsb2NrLWZvcm0tY29udGFjdC1lYy5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIEJsb2NrRm9ybUNvbnRhY3RFY0NvbXBvbmVudCBleHRlbmRzIEJsb2NrRWNDb21wb25lbnQge1xyXG5cdEBJbnB1dCh7IHJlcXVpcmVkOnRydWUgfSkgYmxvY2s6YW55O1xyXG5cdEBJbnB1dCgpIHN1Y2Nlc3NfbWVzc2FnZTpzdHJpbmcgfCB1bmRlZmluZWQ7XHJcblx0QElucHV0KCkgcmVkaXJlY3Q6Ym9vbGVhbiA9IHRydWU7XHJcblx0QElucHV0KCkgc3ViamVjdDpzdHJpbmcgfCB1bmRlZmluZWQ7XHJcblxyXG5cdHByaXZhdGUgX2NvbnRhY3RGb3JtU2VydmljZTogRm9ybVNlcnZpY2UgPSBpbmplY3QoRm9ybVNlcnZpY2UpXHJcblx0cHJpdmF0ZSBfdG9hc3RTZXJ2aWNlOlRvYXN0U2VydmljZSA9IGluamVjdChUb2FzdFNlcnZpY2UpXHJcblx0cHJpdmF0ZSBfZm9ybUJ1aWxkZXI6Rm9ybUJ1aWxkZXIgPSBpbmplY3QoRm9ybUJ1aWxkZXIpXHJcblx0cHJpdmF0ZSBfcm91dGVyOlJvdXRlciA9IGluamVjdChSb3V0ZXIpXHJcblx0XHJcblx0cHJvdGVjdGVkIGZvcm1fZGF0YTphbnkgPSBuZXcgRm9ybURhdGEoKTtcclxuXHJcblx0cHVibGljIGxvYWRpbmc6Ym9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHRwdWJsaWMgZm9ybSA9IHNpZ25hbDxGb3JtR3JvdXA+KFxyXG5cdFx0dGhpcy5fZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG5cdFx0XHRuYW1lOiBbJycsIFtdXSxcclxuICAgICAgICAgICAgZW1haWw6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICAgIHRlbGVwaG9uZTogWycnLCBbXV0sXHJcbiAgICAgICAgICAgIHN1YmplY3Q6IFsnJywgW11dLFxyXG4gICAgICAgICAgICBib2R5OiBbJycsIFtdXSxcclxuICAgICAgICAgICAgYXR0YWNobWVudDogWycnXSxcclxuICAgICAgICAgICAgcmVjYXB0Y2hhOiBbbnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sIC8vdGVzdGVhciBlc3RlIGNhbWJpbyBkZSBub21icmVcclxuXHRcdH0pXHJcbiAgICApXHJcblxyXG5cdG9uU3VibWl0KGU6YW55KTp2b2lke1xyXG5cdFx0dGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuXHRcdGUucHJldmVudERlZmF1bHQoKTtcclxuXHRcdHRoaXMuc2VuZEZvcm0odGhpcy5mb3JtKCksICdpbnF1aXJ5LXNlbnQnKTtcclxuXHR9XHJcblxyXG5cdHNlbmRGb3JtKGZvcm06YW55LCBzdWNjZXNzX21lc3NhZ2U6c3RyaW5nKXtcclxuICAgICAgICBpZiAoZm9ybS52YWxpZCAmJiAoZm9ybS52YWx1ZS5lbWFpbC5pbmNsdWRlcygnQCcpKSkge1xyXG4gICAgICAgICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ21haWxUZXh0JywgZm9ybS52YWx1ZS5ib2R5KVxyXG4gICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2Zvcm1fY29kZScsIHRoaXMuYmxvY2suY29kZSlcclxuICAgICAgICAgICAgdGhpcy5zZW5kVmFsdWUoJ25hbWUnKSAmJiBmb3JtRGF0YS5hcHBlbmQoJ25hbWUnLCB0aGlzLmZvcm0oKS5nZXQoJ25hbWUnKT8udmFsdWUpXHJcbiAgICAgICAgICAgIHRoaXMuc2VuZFZhbHVlKCdlbWFpbCcpICYmIGZvcm1EYXRhLmFwcGVuZCgnZW1haWwnLCB0aGlzLmZvcm0oKS5nZXQoJ2VtYWlsJyk/LnZhbHVlKVxyXG4gICAgICAgICAgICB0aGlzLnNlbmRWYWx1ZSgndGVsZXBob25lJykgJiYgZm9ybURhdGEuYXBwZW5kKCd0ZWxlcGhvbmUnLCB0aGlzLmZvcm0oKS5nZXQoJ3RlbGVwaG9uZScpPy52YWx1ZSlcclxuICAgICAgICAgICAgdGhpcy5zZW5kVmFsdWUoJ3N1YmplY3QnKSAmJiBmb3JtRGF0YS5hcHBlbmQoJ3N1YmplY3QnLCB0aGlzLmZvcm0oKS5nZXQoJ3N1YmplY3QnKT8udmFsdWUpXHJcbiAgICAgICAgICAgIHRoaXMuc2VuZFZhbHVlKCdib2R5JykgJiYgZm9ybURhdGEuYXBwZW5kKCdib2R5JywgdGhpcy5mb3JtKCkuZ2V0KCdib2R5Jyk/LnZhbHVlKVxyXG4gICAgICAgICAgICB0aGlzLnNlbmRWYWx1ZSgnYXR0YWNobWVudHMnKSAmJiBmb3JtRGF0YS5hcHBlbmQoJ2F0dGFjaG1lbnQnLCB0aGlzLmZvcm0oKS5nZXQoJ2F0dGFjaG1lbnQnKT8udmFsdWUpXHJcblx0XHRcdGZpcnN0VmFsdWVGcm9tKHRoaXMuX2NvbnRhY3RGb3JtU2VydmljZS5zZW5kUmVzcG9uc2UoZm9ybURhdGEpKS50aGVuKFxyXG4gICAgICAgICAgICAgICAgKHJlczphbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0oKS5yZXNldCgpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdG9hc3RTZXJ2aWNlLnNob3codGhpcy5zdWNjZXNzX21lc3NhZ2UgfHwgc3VjY2Vzc19tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVkaXJlY3QgJiYgdGhpcy5fcm91dGVyLm5hdmlnYXRlQnlVcmwoJy9ob21lJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIChlcnI6YW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdG9hc3RTZXJ2aWNlLmVycm9yKCdpbnF1aXJ5LWVycm9yJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl90b2FzdFNlcnZpY2UuZXJyb3IoJ2ludmFsaWQtZm9ybScpO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblx0c2VuZFZhbHVlKGtleTphbnkpe1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGxldCBrZXlzZWFyY2ggPSBrZXlbMF0udG9VcHBlckNhc2UoKSArIGtleS5zbGljZSgxKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ibG9jayAmJiB0aGlzLmJsb2NrWydzZW5kJyArIGtleXNlYXJjaF0gfHwgZmFsc2VcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIkBpZihibG9jayl7XHJcbjxkaXYgW2NsYXNzXT1cInRyaW1DbGFzc0Jsb2NrKGJsb2NrLmNvZGUpICsgJyBjb250YWluZXItZmx1aWQnXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHctMTAwIG0tYXV0b1wiPlxyXG4gICAgICAgICAgICAgICAgPGg1Pnt7YmxvY2submFtZSB8fCAnRGVqYW5vcyB0dSBjb25zdWx0YSd9fTwvaDU+XHJcbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInctMTAwXCI+e3sgYmxvY2suZGVzY3JpcHRpb24gfHwgJ0NvbXBsZXRhIGVsIHNpZ3VpZW50ZSBmb3JtdWxhcmlvIHkgcmVzcG9uZGVyZW1vcyB0dSBjb25zdWx0YSBhIGxhIGJyZXZlZGFkJyB9fTwvcD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybSgpXCIgKHN1Ym1pdCk9XCJvblN1Ym1pdCgkZXZlbnQpXCIgY2xhc3M9XCJwb3NpdGlvbi1yZWxhdGl2ZVwiID48IS0tIChzdWJtaXQpPVwidG9hc3RDb21wbGV0ZUZvcm0oJGV2ZW50KVwiIC0tPlxyXG4gICAgICAgICAgICAgICAgQGlmKGJsb2NrLnNlbmROYW1lKXtcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzci1vbmx5XCIgZm9yPVwibm9tYnJlXCI+Tm9tYnJlPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIiB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc20gcmVxdWlyZWRcIiBpZD1cIm5vbWJyZVwiIHBsYWNlaG9sZGVyPVwiTm9tYnJlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBAaWYoYmxvY2suc2VuZEVtYWlsKXtcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzci1vbmx5XCIgZm9yPVwibWFpbFwiPkVtYWlsPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cImVtYWlsXCIgdHlwZT1cImVtYWlsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbSByZXF1aXJlZFwiIGlkPVwibWFpbFwiIHBsYWNlaG9sZGVyPVwiRW1haWxcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIEBpZihibG9jay5zZW5kVGVsZXBob25lKXtcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzci1vbmx5XCIgZm9yPVwidGVsZWZvbm9cIj5UZWzDqWZvbm88L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwidGVsZXBob25lXCIgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtIHJlcXVpcmVkXCIgaWQ9XCJ0ZWxlZm9ub1wiIHBsYWNlaG9sZGVyPVwiVGVsw6lmb25vXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBAaWYoYmxvY2suc2VuZFN1YmplY3Qpe1xyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInNyLW9ubHlcIiBmb3I9XCJzdWJqZWN0XCI+QXN1bnRvPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cInN1YmplY3RcIiB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc20gcmVxdWlyZWRcIiBpZD1cInN1YmplY3RcIiBwbGFjZWhvbGRlcj1cIkFzdW50b1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgQGlmKGJsb2NrLnNlbmRCb2R5KXtcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzci1vbmx5XCIgZm9yPVwibWVuc2FqZVwiPk1lbnNhamU8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgZm9ybUNvbnRyb2xOYW1lPVwiYm9keVwiIG5hbWU9XCJtZW5zYWplXCIgaWQ9XCJtZW5zYWplIFwiIGNvbHM9XCIzMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dzPVwiNVwiIHBsYWNlaG9sZGVyPVwiRGVqYW5vcyB0dSBtZW5zYWplXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbSByZXF1aXJlZFwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm94Q29udGVuaWRvQ2FwY2hhIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVuZWRvckNhcHRjaGFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHJlLWNhcHRjaGEtZWMgZm9ybUNvbnRyb2xOYW1lPVwicmVjYXB0Y2hhXCI+PC9yZS1jYXB0Y2hhLWVjPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLWRhcmsgdGV4dC11cHBlcmNhc2UgcHgtNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm0oKS5pbnZhbGlkXCI+RU5WSUFSPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICBAaWYobG9hZGluZyl7XHJcbiAgICAgICAgICAgICAgICAgICAgIDxhcHAtbG9hZGluZy1zZWN0aW9uLWVjIC8+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcbn0iXX0=
@@ -0,0 +1,37 @@
1
+ import { Component, inject, Input } from '@angular/core';
2
+ import { BlockEcComponent } from '../../abstractions-components';
3
+ import { DomSanitizer } from '@angular/platform-browser';
4
+ import * as i0 from "@angular/core";
5
+ /**
6
+ * Componente para manejar los Bloques de tipo HTML
7
+ * @extends {BlockEcComponent}
8
+ * @implements {OnInit}
9
+ */
10
+ export class BlockHtmlEcComponent extends BlockEcComponent {
11
+ /**
12
+ * Contenido html para sanitizar.
13
+ */
14
+ html_content;
15
+ /**
16
+ * Sanitizador de Dom elements
17
+ */
18
+ sanitizer = inject(DomSanitizer);
19
+ /**
20
+ * Se pasa el contenido de html por es sanitizador.
21
+ */
22
+ ngOnInit() {
23
+ this.html_content = this.sanitizer.bypassSecurityTrustHtml(this.html_content);
24
+ }
25
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BlockHtmlEcComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
26
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: BlockHtmlEcComponent, isStandalone: true, selector: "app-block-html-ec", inputs: { html_content: "html_content" }, usesInheritance: true, ngImport: i0, template: "<div [innerHTML]=\"html_content\"></div>\r\n", styles: [""] });
27
+ }
28
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: BlockHtmlEcComponent, decorators: [{
29
+ type: Component,
30
+ args: [{ selector: 'app-block-html-ec', standalone: true, imports: [], template: "<div [innerHTML]=\"html_content\"></div>\r\n" }]
31
+ }], propDecorators: { html_content: [{
32
+ type: Input,
33
+ args: [{
34
+ required: true,
35
+ }]
36
+ }] } });
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2staHRtbC1lYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvZWMtY29tcG9uZW50cy9ibG9ja3MtZWMvYmxvY2staHRtbC1lYy9ibG9jay1odG1sLWVjLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWVhc3ljb21tZXJjZS12MTgvc3JjL2xpYi9lYy1jb21wb25lbnRzL2Jsb2Nrcy1lYy9ibG9jay1odG1sLWVjL2Jsb2NrLWh0bWwtZWMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7QUFDekQ7Ozs7R0FJRztBQVFILE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxnQkFBZ0I7SUFDekQ7O09BRUc7SUFHQSxZQUFZLENBQU07SUFDckI7O09BRUc7SUFDTyxTQUFTLEdBQWlCLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQTtJQUN4RDs7T0FFRztJQUNILFFBQVE7UUFDUCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQy9FLENBQUM7dUdBaEJXLG9CQUFvQjsyRkFBcEIsb0JBQW9CLDhJQ2ZqQyw4Q0FDQTs7MkZEY2Esb0JBQW9CO2tCQVBoQyxTQUFTOytCQUNDLG1CQUFtQixjQUNqQixJQUFJLFdBQ1AsRUFBRTs4QkFVUixZQUFZO3NCQUZkLEtBQUs7dUJBQUM7d0JBQ04sUUFBUSxFQUFFLElBQUk7cUJBQ2QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGluamVjdCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCbG9ja0VjQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYWJzdHJhY3Rpb25zLWNvbXBvbmVudHMnO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuLyoqXHJcbiAqIENvbXBvbmVudGUgcGFyYSBtYW5lamFyIGxvcyBCbG9xdWVzIGRlIHRpcG8gSFRNTFxyXG4gKiBAZXh0ZW5kcyB7QmxvY2tFY0NvbXBvbmVudH1cclxuICogQGltcGxlbWVudHMge09uSW5pdH1cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG5cdHNlbGVjdG9yOiAnYXBwLWJsb2NrLWh0bWwtZWMnLFxyXG5cdHN0YW5kYWxvbmU6IHRydWUsXHJcblx0aW1wb3J0czogW10sXHJcblx0dGVtcGxhdGVVcmw6ICcuL2Jsb2NrLWh0bWwtZWMuY29tcG9uZW50Lmh0bWwnLFxyXG5cdHN0eWxlVXJsOiAnLi9ibG9jay1odG1sLWVjLmNvbXBvbmVudC5zY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQmxvY2tIdG1sRWNDb21wb25lbnQgZXh0ZW5kcyBCbG9ja0VjQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHQvKipcclxuXHQgKiBDb250ZW5pZG8gaHRtbCBwYXJhIHNhbml0aXphci5cclxuXHQgKi9cclxuXHRASW5wdXQoe1xyXG5cdFx0cmVxdWlyZWQ6IHRydWUsXHJcblx0fSkgaHRtbF9jb250ZW50OiBhbnk7XHJcblx0LyoqXHJcblx0ICogU2FuaXRpemFkb3IgZGUgRG9tIGVsZW1lbnRzXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIHNhbml0aXplcjogRG9tU2FuaXRpemVyID0gaW5qZWN0KERvbVNhbml0aXplcilcclxuXHQvKipcclxuXHQgKiBTZSBwYXNhIGVsIGNvbnRlbmlkbyBkZSBodG1sIHBvciBlcyBzYW5pdGl6YWRvci4gXHJcblx0ICovXHJcblx0bmdPbkluaXQoKTogdm9pZCB7XHJcblx0XHR0aGlzLmh0bWxfY29udGVudCA9IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKHRoaXMuaHRtbF9jb250ZW50KTtcclxuXHR9XHJcbn1cclxuIiwiPGRpdiBbaW5uZXJIVE1MXT1cImh0bWxfY29udGVudFwiPjwvZGl2PlxyXG4iXX0=