ng-easycommerce-v18 0.3.15-beta.1 → 0.3.15

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 (178) hide show
  1. package/README.md +90 -87
  2. package/assets/decidirFormEc.html +514 -514
  3. package/assets/ec-i18n/ct.json +281 -281
  4. package/assets/ec-i18n/en.json +0 -0
  5. package/assets/ec-i18n/es.json +429 -429
  6. package/assets/ec-i18n/fr.json +0 -0
  7. package/assets/ec-i18n/gl.json +281 -281
  8. package/assets/ec-i18n/pr.json +281 -281
  9. package/assets/images/cards-occasional.svg +21 -21
  10. package/assets/recaptcha/recaptcha-site-keys.json +3 -3
  11. package/assets/recaptcha/recaptcha-sites-prod.json +38 -38
  12. package/assets/recaptcha/recaptcha-sites.json +52 -52
  13. package/esm2022/lib/api/connection.service.mjs +1 -1
  14. package/esm2022/lib/classes/checkout/steps.mjs +1 -1
  15. package/esm2022/lib/classes/component-helper.mjs +1 -1
  16. package/esm2022/lib/classes/filters/attributes-filter.mjs +1 -1
  17. package/esm2022/lib/classes/filters/category-filter.mjs +1 -1
  18. package/esm2022/lib/classes/filters/dynamics-filter.mjs +1 -1
  19. package/esm2022/lib/classes/filters/filter-factory.mjs +1 -1
  20. package/esm2022/lib/classes/filters/filter.mjs +1 -1
  21. package/esm2022/lib/classes/filters/index.mjs +1 -1
  22. package/esm2022/lib/classes/filters/price_range-filter.mjs +1 -1
  23. package/esm2022/lib/classes/filters/sort-filter.mjs +1 -1
  24. package/esm2022/lib/classes/index.mjs +1 -1
  25. package/esm2022/lib/classes/user.mjs +1 -1
  26. package/esm2022/lib/constants/api.constants.service.mjs +1 -1
  27. package/esm2022/lib/constants/core.constants.service.mjs +1 -1
  28. package/esm2022/lib/constants/index.mjs +1 -1
  29. package/esm2022/lib/ec-components/abstractions-components/block-ec.component.mjs +1 -1
  30. package/esm2022/lib/ec-components/abstractions-components/index.mjs +1 -1
  31. package/esm2022/lib/ec-components/abstractions-components/menu-ec.component.mjs +1 -1
  32. package/esm2022/lib/ec-components/account-ec/account-ec.component.mjs +3 -3
  33. package/esm2022/lib/ec-components/account-ec/index.mjs +1 -1
  34. package/esm2022/lib/ec-components/account-ec/order-ec/order-ec.component.mjs +3 -3
  35. package/esm2022/lib/ec-components/account-ec/orders-list-ec/orders-list-ec.component.mjs +3 -3
  36. package/esm2022/lib/ec-components/auth-ec/auth-ec.component.mjs +3 -3
  37. package/esm2022/lib/ec-components/auth-ec/confirm-account-ec/confirm-account-ec.component.mjs +3 -3
  38. package/esm2022/lib/ec-components/auth-ec/forgot-password-ec/forgot-password-ec.component.mjs +3 -3
  39. package/esm2022/lib/ec-components/auth-ec/index.mjs +1 -1
  40. package/esm2022/lib/ec-components/auth-ec/login-form-ec/login-form-ec.component.mjs +3 -3
  41. package/esm2022/lib/ec-components/auth-ec/password-reset-ec/password-reset-ec.component.mjs +3 -3
  42. package/esm2022/lib/ec-components/auth-ec/register-form-ec/register-form-ec.component.mjs +3 -3
  43. package/esm2022/lib/ec-components/auth-ec/register-wholesaler-form-ec/register-wholesaler-form-ec.component.mjs +3 -3
  44. package/esm2022/lib/ec-components/blocks-ec/block-banner-box-ec/block-banner-box-ec.component.mjs +3 -3
  45. package/esm2022/lib/ec-components/blocks-ec/block-banner-full-ec/block-banner-full-ec.component.mjs +3 -3
  46. package/esm2022/lib/ec-components/blocks-ec/block-form-contact-ec/block-form-contact-ec.component.mjs +3 -3
  47. package/esm2022/lib/ec-components/blocks-ec/block-html-ec/block-html-ec.component.mjs +3 -3
  48. package/esm2022/lib/ec-components/blocks-ec/block-newsletter-ec/block-newsletter-ec.component.mjs +3 -3
  49. package/esm2022/lib/ec-components/blocks-ec/block-products-ec/block-products-ec.component.mjs +3 -3
  50. package/esm2022/lib/ec-components/blocks-ec/blocks-ec.component.mjs +3 -3
  51. package/esm2022/lib/ec-components/blocks-ec/index.mjs +1 -1
  52. package/esm2022/lib/ec-components/breadcrumb-ec/breadcrumb-ec.component.mjs +3 -3
  53. package/esm2022/lib/ec-components/cart-ec/cart-ec.component.mjs +3 -3
  54. package/esm2022/lib/ec-components/cart-ec/cart-item-ec/cart-item-ec.component.mjs +3 -3
  55. package/esm2022/lib/ec-components/cart-ec/index.mjs +1 -1
  56. package/esm2022/lib/ec-components/checkout-ec/checkout-ec.component.mjs +3 -3
  57. package/esm2022/lib/ec-components/checkout-ec/dataform-ec/dataform-ec.component.mjs +3 -3
  58. package/esm2022/lib/ec-components/checkout-ec/dataform-ec/input-ec/input-ec.component.mjs +3 -3
  59. package/esm2022/lib/ec-components/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.mjs +3 -3
  60. package/esm2022/lib/ec-components/checkout-ec/payment-ec/payment-ec.component.mjs +3 -3
  61. package/esm2022/lib/ec-components/checkout-ec/payment-ec/payment-methods/bank-transfer-ec/bank-transfer-ec.component.mjs +3 -3
  62. package/esm2022/lib/ec-components/checkout-ec/payment-ec/payment-methods/index.mjs +1 -1
  63. package/esm2022/lib/ec-components/checkout-ec/payment-ec/payment-methods/mp-redirect-ec/mp-redirect-ec.component.mjs +134 -138
  64. package/esm2022/lib/ec-components/checkout-ec/payment-ec/payment-methods/offline-ec/offline-ec.component.mjs +3 -3
  65. package/esm2022/lib/ec-components/checkout-ec/shipment-ec/shipment-ec.component.mjs +3 -3
  66. package/esm2022/lib/ec-components/checkout-ec/step-container-ec/step-container-ec.component.mjs +3 -3
  67. package/esm2022/lib/ec-components/checkout-ec/success-ec/success-ec.component.mjs +3 -3
  68. package/esm2022/lib/ec-components/collection-ec/collection-ec.component.mjs +3 -3
  69. package/esm2022/lib/ec-components/contact-ec/contact-ec.component.mjs +1 -1
  70. package/esm2022/lib/ec-components/coupon-ec/coupon-ec.component.mjs +3 -3
  71. package/esm2022/lib/ec-components/faqs-ec/faqs-ec.component.mjs +3 -3
  72. package/esm2022/lib/ec-components/filters-ec/filters-ec.component.mjs +3 -3
  73. package/esm2022/lib/ec-components/filters-sort-ec/filters-sort-ec.component.mjs +3 -3
  74. package/esm2022/lib/ec-components/footer-ec/footer-ec.component.mjs +3 -3
  75. package/esm2022/lib/ec-components/header-ec/header-ec.component.mjs +3 -3
  76. package/esm2022/lib/ec-components/home-ec/home-ec.component.mjs +3 -3
  77. package/esm2022/lib/ec-components/index.mjs +1 -1
  78. package/esm2022/lib/ec-components/price-range-filter/price-range-filter.component.mjs +3 -3
  79. package/esm2022/lib/ec-components/product-detail-ec/product-detail-ec.component.mjs +1 -1
  80. package/esm2022/lib/ec-components/product-ec/product-ec.component.mjs +3 -3
  81. package/esm2022/lib/ec-components/related-products-ec/related-products-ec.component.mjs +3 -3
  82. package/esm2022/lib/ec-components/reviews-ec/reviews-ec.component.mjs +3 -3
  83. package/esm2022/lib/ec-components/reviews-form-ec/reviews-form-ec.component.mjs +3 -3
  84. package/esm2022/lib/ec-components/section-container-ec/section-container-ec.component.mjs +3 -3
  85. package/esm2022/lib/ec-components/share-ec/share-buttons-ec/index.mjs +1 -1
  86. package/esm2022/lib/ec-components/share-ec/share-buttons-ec/share-email-ec/share-email-ec.component.mjs +3 -3
  87. package/esm2022/lib/ec-components/share-ec/share-buttons-ec/share-facebook-ec/share-facebook-ec.component.mjs +3 -3
  88. package/esm2022/lib/ec-components/share-ec/share-buttons-ec/share-pinterest-ec/share-pinterest-ec.component.mjs +3 -3
  89. package/esm2022/lib/ec-components/share-ec/share-buttons-ec/share-twitter-ec/share-twitter-ec.component.mjs +3 -3
  90. package/esm2022/lib/ec-components/share-ec/share-buttons-ec/share-whatsapp-ec/share-whatsapp-ec.component.mjs +3 -3
  91. package/esm2022/lib/ec-components/share-ec/share-ec.component.mjs +3 -3
  92. package/esm2022/lib/ec-components/sidebar-ec/sidebar-ec.component.mjs +3 -3
  93. package/esm2022/lib/ec-components/stores-ec/stores-ec.component.mjs +3 -3
  94. package/esm2022/lib/ec-components/variants-ec/variants-ec.component.mjs +3 -3
  95. package/esm2022/lib/ec-components/widgets-ec/decidir-ec/decidir-ec.component.mjs +3 -3
  96. package/esm2022/lib/ec-components/widgets-ec/index.mjs +1 -1
  97. package/esm2022/lib/ec-components/widgets-ec/loading/index.mjs +1 -1
  98. package/esm2022/lib/ec-components/widgets-ec/loading/loading-full-ec/loading-full-ec.component.mjs +3 -3
  99. package/esm2022/lib/ec-components/widgets-ec/loading/loading-inline-ec/loading-inline-ec.component.mjs +3 -3
  100. package/esm2022/lib/ec-components/widgets-ec/loading/loading-section-ec/loading-section-ec.component.mjs +3 -3
  101. package/esm2022/lib/ec-components/widgets-ec/magnizoom-ec/magnizoom-ec.component.mjs +3 -3
  102. package/esm2022/lib/ec-components/widgets-ec/price-ec/price-ec.component.mjs +3 -3
  103. package/esm2022/lib/ec-components/widgets-ec/rating-ec/rating-ec.component.mjs +3 -3
  104. package/esm2022/lib/ec-components/widgets-ec/re-captcha-ec/re-captcha-ec.component.mjs +3 -3
  105. package/esm2022/lib/ec-components/widgets-ec/redsys-catch-ec/redsys-catch-ec.component.mjs +124 -177
  106. package/esm2022/lib/ec-directive/index.mjs +1 -1
  107. package/esm2022/lib/ec-directive/product-off.directive.mjs +1 -1
  108. package/esm2022/lib/ec-directive/product-stock.directive.mjs +1 -1
  109. package/esm2022/lib/ec-guards/auth.guard.mjs +1 -1
  110. package/esm2022/lib/ec-pipe/ec-currency-symbol.pipe.mjs +1 -1
  111. package/esm2022/lib/ec-pipe/ec-safe-html.pipe.mjs +1 -1
  112. package/esm2022/lib/ec-pipe/index.mjs +1 -1
  113. package/esm2022/lib/ec-services/addressing.service.mjs +1 -1
  114. package/esm2022/lib/ec-services/analytics/analytics.service.mjs +1 -1
  115. package/esm2022/lib/ec-services/analytics/doppler.service.mjs +1 -1
  116. package/esm2022/lib/ec-services/analytics/facebook-pixel.service.mjs +1 -1
  117. package/esm2022/lib/ec-services/analytics/google-analytics.service.mjs +1 -1
  118. package/esm2022/lib/ec-services/analytics/gtm.service.mjs +1 -1
  119. package/esm2022/lib/ec-services/analytics/index.mjs +1 -1
  120. package/esm2022/lib/ec-services/analytics/metricool-pixel.service.mjs +11 -11
  121. package/esm2022/lib/ec-services/auth.service.mjs +1 -1
  122. package/esm2022/lib/ec-services/auth.storage.service.mjs +1 -1
  123. package/esm2022/lib/ec-services/blocks-repository.service.mjs +1 -1
  124. package/esm2022/lib/ec-services/blocks.service.mjs +1 -1
  125. package/esm2022/lib/ec-services/cart.service.mjs +1 -1
  126. package/esm2022/lib/ec-services/channel.service.mjs +1 -1
  127. package/esm2022/lib/ec-services/checkout.service.mjs +1 -1
  128. package/esm2022/lib/ec-services/currency.service.mjs +1 -1
  129. package/esm2022/lib/ec-services/filters.service.mjs +1 -1
  130. package/esm2022/lib/ec-services/form.service.mjs +1 -1
  131. package/esm2022/lib/ec-services/index.mjs +1 -1
  132. package/esm2022/lib/ec-services/local-storage.service.mjs +1 -1
  133. package/esm2022/lib/ec-services/ngx-local-storage.service.mjs +1 -1
  134. package/esm2022/lib/ec-services/options.service.mjs +1 -1
  135. package/esm2022/lib/ec-services/order-utility.service.mjs +1 -1
  136. package/esm2022/lib/ec-services/orders.service.mjs +1 -1
  137. package/esm2022/lib/ec-services/pagination.service.mjs +1 -1
  138. package/esm2022/lib/ec-services/parameters.service.mjs +1 -1
  139. package/esm2022/lib/ec-services/payment.service.mjs +1 -1
  140. package/esm2022/lib/ec-services/product-detail.service.mjs +1 -1
  141. package/esm2022/lib/ec-services/products.service.mjs +1 -1
  142. package/esm2022/lib/ec-services/re-captcha.service.mjs +1 -1
  143. package/esm2022/lib/ec-services/reviews.service.mjs +1 -1
  144. package/esm2022/lib/ec-services/shipment.service.mjs +1 -1
  145. package/esm2022/lib/ec-services/stores.service.mjs +1 -1
  146. package/esm2022/lib/ec-services/test.service.mjs +1 -1
  147. package/esm2022/lib/ec-services/toast.service.mjs +1 -1
  148. package/esm2022/lib/interceptors/auth.interceptor.mjs +1 -1
  149. package/esm2022/lib/interfaces/analytics/event-key.mjs +1 -1
  150. package/esm2022/lib/interfaces/analytics/facebook-pixel-data.mjs +1 -1
  151. package/esm2022/lib/interfaces/analytics/gtm-config.mjs +1 -1
  152. package/esm2022/lib/interfaces/analytics/index.mjs +1 -1
  153. package/esm2022/lib/interfaces/blocks.mjs +1 -1
  154. package/esm2022/lib/interfaces/checkout.mjs +1 -1
  155. package/esm2022/lib/interfaces/connection.mjs +1 -1
  156. package/esm2022/lib/interfaces/coupon.mjs +1 -1
  157. package/esm2022/lib/interfaces/currency.mjs +1 -1
  158. package/esm2022/lib/interfaces/deserializable.mjs +1 -1
  159. package/esm2022/lib/interfaces/environment.mjs +1 -1
  160. package/esm2022/lib/interfaces/faqs.mjs +1 -1
  161. package/esm2022/lib/interfaces/filter.mjs +1 -1
  162. package/esm2022/lib/interfaces/index.mjs +1 -1
  163. package/esm2022/lib/interfaces/options.mjs +1 -1
  164. package/esm2022/lib/interfaces/pagination.mjs +1 -1
  165. package/esm2022/lib/interfaces/parameter.mjs +1 -1
  166. package/esm2022/lib/interfaces/product.mjs +1 -1
  167. package/esm2022/lib/interfaces/step.mjs +1 -1
  168. package/esm2022/lib/interfaces/storage.mjs +1 -1
  169. package/esm2022/lib/interfaces/store.mjs +1 -1
  170. package/esm2022/lib/interfaces/types/user.type.mjs +1 -1
  171. package/esm2022/lib/providers/provideEnvironment.mjs +1 -1
  172. package/esm2022/lib/stores/currency.store.mjs +1 -1
  173. package/esm2022/public-api.mjs +1 -1
  174. package/fesm2022/ng-easycommerce-v18.mjs +386 -443
  175. package/fesm2022/ng-easycommerce-v18.mjs.map +1 -1
  176. package/lib/ec-components/checkout-ec/payment-ec/payment-methods/mp-redirect-ec/mp-redirect-ec.component.d.ts +38 -20
  177. package/lib/ec-components/widgets-ec/redsys-catch-ec/redsys-catch-ec.component.d.ts +24 -12
  178. package/package.json +1 -1
@@ -6,178 +6,174 @@ import * as i0 from "@angular/core";
6
6
  export class MpRedirectEcComponent {
7
7
  _paymentService = inject(PaymentService);
8
8
  _toastService = inject(ToastService);
9
+ platformId = inject(PLATFORM_ID);
10
+ finished = false;
9
11
  method = null;
10
12
  total_amount = 0;
11
13
  allData;
12
14
  ready = new EventEmitter();
13
15
  preference;
14
- loading = false;
15
16
  url;
16
- closeModal = '';
17
- ventana;
18
- window;
19
- localStorage;
20
- isMobile = false;
21
- sessionId = '';
22
- platformId = inject(PLATFORM_ID);
23
- constructor() {
17
+ // Fases de UI
18
+ phase = 'idle';
19
+ get isIdle() { return this.phase === 'idle'; }
20
+ get isPaying() { return this.phase === 'paying'; }
21
+ get isFinalizing() { return this.phase === 'finalizing'; }
22
+ ventana = null;
23
+ windowRef;
24
+ sid = '';
25
+ bc;
26
+ pollTimer;
27
+ pollStartedAt = 0;
28
+ ngOnInit() {
24
29
  if (isPlatformBrowser(this.platformId)) {
25
- this.window = window;
26
- this.localStorage = localStorage;
27
- this.detectMobile();
28
- this.generateSessionId();
30
+ this.windowRef = window;
31
+ if ('BroadcastChannel' in window) {
32
+ this.bc = new BroadcastChannel('mp_payment');
33
+ this.bc.onmessage = (e) => this.onMpMessage(e?.data);
34
+ }
35
+ window.addEventListener('storage', this.onStorage);
36
+ window.addEventListener('message', this.onWindowMessage);
29
37
  }
30
- }
31
- ngOnInit() {
32
38
  this.getPreference();
33
39
  }
34
- detectMobile() {
35
- if (isPlatformBrowser(this.platformId) && this.window) {
36
- const userAgent = this.window.navigator.userAgent.toLowerCase();
37
- this.isMobile = /android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini|mobile/i.test(userAgent) ||
38
- (this.window.innerWidth <= 768);
39
- }
40
- }
41
- generateSessionId() {
42
- this.sessionId = `mp_session_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
43
- if (isPlatformBrowser(this.platformId) && this.localStorage) {
44
- this.localStorage.setItem('mp_session_id', this.sessionId);
45
- }
40
+ ngOnDestroy() {
41
+ if (!isPlatformBrowser(this.platformId))
42
+ return;
43
+ this.bc?.close();
44
+ window.removeEventListener('storage', this.onStorage);
45
+ window.removeEventListener('message', this.onWindowMessage);
46
+ if (this.pollTimer)
47
+ clearInterval(this.pollTimer);
46
48
  }
49
+ /** Cancela manualmente el pago y finaliza el flujo con estado "cancel". */
47
50
  clickClose = () => {
48
- /* this.closeModal = 'cancel'
49
- this.ventana?.close() */
51
+ if (this.finished)
52
+ return;
53
+ this.finishWithState('cancel');
50
54
  };
55
+ /**
56
+ * Inicia el pago abriendo `init_point` en una ventana/pestaña nueva.
57
+ * Genera un SID y lo persiste para casar la respuesta del catch.
58
+ * Si el popup es bloqueado, hace fallback navegando en la misma pestaña.
59
+ */
51
60
  iniciar = () => {
52
- this.closeModal = '';
53
- this.clearStorageState();
54
- // Solo ejecutar en el browser
55
- if (!isPlatformBrowser(this.platformId)) {
61
+ if (!isPlatformBrowser(this.platformId) || !this.windowRef || !this.url)
56
62
  return;
57
- }
58
- // En mobile, marcamos esta pestaña como la principal
59
- if (this.isMobile && this.localStorage) {
60
- this.localStorage.setItem('mp_main_tab', this.sessionId);
61
- this.localStorage.setItem('mp_payment_started', 'true');
62
- }
63
- if (this.isMobile && this.window) {
64
- // En mobile, usar window.location.href en lugar de popup
65
- this.window.location.href = this.url;
66
- }
67
- else if (this.window) {
68
- // En desktop, usar popup como antes
69
- this.ventana = this.window.open(this.url);
70
- this.callState();
71
- }
72
- };
73
- callState = () => {
74
- // Solo ejecutar en el browser
75
- if (!isPlatformBrowser(this.platformId)) {
63
+ this.phase = 'paying';
64
+ this.sid = this.genSid();
65
+ const url = new URL(this.url);
66
+ localStorage.setItem('mp:sid', this.sid);
67
+ this.ventana = this.windowRef.open(this.url, '_blank');
68
+ // popup bloqueado → fallback a navegación en misma pestaña
69
+ if (!this.ventana || this.ventana.closed) {
70
+ this.windowRef.location.href = this.url;
76
71
  return;
77
72
  }
78
- let state = this.closeModal != '' ? this.closeModal : this.localStorage?.getItem('state');
79
- !state && this.ventana?.closed && (state = 'cancel');
80
- this.loading = true;
81
- state && console.log(state);
82
- // En mobile, verificar si esta pestaña debe procesar el estado
83
- if (this.isMobile && this.localStorage) {
84
- const mainTab = this.localStorage.getItem('mp_main_tab');
85
- const currentSessionId = this.localStorage.getItem('mp_session_id');
86
- // Si no es la pestaña principal, no procesar
87
- if (mainTab !== currentSessionId && mainTab !== null) {
88
- console.log('Esta no es la pestaña principal, ignorando estado');
89
- return;
90
- }
91
- }
92
- if (state) {
93
- this.loading = false;
94
- this.localStorage?.removeItem('state');
95
- // Limpiar marcadores de mobile
96
- if (this.isMobile && this.localStorage) {
97
- this.localStorage.removeItem('mp_main_tab');
98
- this.localStorage.removeItem('mp_payment_started');
99
- }
100
- if (state == 'success') {
101
- this.ventana?.close();
102
- this.ready.emit(true);
103
- return;
104
- }
105
- if (state == 'pending') {
106
- this.ventana?.close();
107
- this.ready.emit(true);
108
- return;
109
- }
110
- if (state == 'failure') {
111
- this.ventana?.close();
112
- this.processError('');
73
+ // polling de último recurso (hasta 10 minutos)
74
+ this.pollStartedAt = Date.now();
75
+ if (this.pollTimer)
76
+ clearInterval(this.pollTimer);
77
+ this.pollTimer = setInterval(() => {
78
+ if (Date.now() - this.pollStartedAt > 10 * 60 * 1000) {
79
+ clearInterval(this.pollTimer);
80
+ this.pollTimer = null;
81
+ this.phase = 'idle';
82
+ this.processError('Tiempo de espera agotado al procesar el pago.');
113
83
  return;
114
84
  }
115
- if (state == 'cancel') {
116
- this.ventana?.close();
117
- this.processError('Se cancelo el pago con mercado pago');
118
- return;
119
- }
120
- this.ventana?.close();
121
- this.processError('');
85
+ this.checkLocalStorageOnce();
86
+ }, 1000);
87
+ };
88
+ onWindowMessage = (event) => {
89
+ const data = event?.data;
90
+ this.onMpMessage(data);
91
+ };
92
+ onStorage = (e) => {
93
+ if (!e.key || !this.sid)
122
94
  return;
123
- }
124
- // Solo continuar polling si no es mobile o si es la pestaña principal
125
- if (!this.isMobile || (this.isMobile && this.localStorage?.getItem('mp_main_tab') === this.sessionId)) {
126
- setTimeout(() => {
127
- this.callState();
128
- }, 5000);
95
+ if (e.key === `mp:state:${this.sid}` && e.newValue) {
96
+ const state = e.newValue;
97
+ this.finishWithState(state);
129
98
  }
130
99
  };
131
- processError = (err) => {
132
- this._toastService.show(err != '' ? err : 'payment-error');
133
- // console.log("ERROR ENVIO BACK ", err);
100
+ onMpMessage = (data) => {
101
+ if (!data || data.type !== 'mp:state')
102
+ return;
103
+ if (data.sid !== this.sid)
104
+ return;
105
+ this.finishWithState(data.state);
134
106
  };
135
- clearStorageState = () => {
136
- // Solo ejecutar en el browser
137
- if (!isPlatformBrowser(this.platformId)) {
107
+ checkLocalStorageOnce() {
108
+ if (!this.sid)
109
+ return;
110
+ const state = localStorage.getItem(`mp:state:${this.sid}`);
111
+ if (state)
112
+ this.finishWithState(state);
113
+ }
114
+ /** Cierra el flujo de pago con el estado final y notifica al padre. */
115
+ finishWithState(state) {
116
+ if (this.finished)
138
117
  return;
118
+ this.finished = true;
119
+ if (this.pollTimer)
120
+ clearInterval(this.pollTimer);
121
+ this.pollTimer = null;
122
+ localStorage.removeItem(`mp:state:${this.sid}`);
123
+ localStorage.removeItem('mp:sid');
124
+ localStorage.removeItem('state');
125
+ try {
126
+ this.ventana && !this.ventana.closed && this.ventana.close();
127
+ }
128
+ catch { }
129
+ this.ventana = null;
130
+ if (state === 'success' || state === 'pending') {
131
+ this.phase = 'finalizing';
132
+ this.ready.emit(true);
139
133
  }
140
- if (typeof sessionStorage !== 'undefined') {
141
- sessionStorage.removeItem('state');
134
+ else if (state === 'failure' || state === 'cancel') {
135
+ this.phase = 'idle';
136
+ this._toastService.show(state === 'cancel' ? 'Se canceló el pago con Mercado Pago' : 'payment-error');
142
137
  }
143
- this.localStorage?.removeItem('state');
144
- // Limpiar también los marcadores de mobile
145
- if (this.isMobile && this.localStorage) {
146
- this.localStorage.removeItem('mp_processing_tab');
147
- this.localStorage.removeItem('mp_processing_tab_time');
138
+ else {
139
+ this.phase = 'idle';
140
+ this._toastService.show('payment-error');
148
141
  }
142
+ }
143
+ genSid() {
144
+ return `mp_${Date.now()}_${Math.random().toString(36).slice(2, 9)}`;
145
+ }
146
+ processError = (msg) => {
147
+ this._toastService.show(msg || 'payment-error');
148
+ };
149
+ /** Limpia posibles residuos de estado en storages. */
150
+ clearStorageState = () => {
151
+ if (!isPlatformBrowser(this.platformId))
152
+ return;
153
+ localStorage.removeItem('state');
154
+ const sid = localStorage.getItem('mp:sid');
155
+ if (sid)
156
+ localStorage.removeItem(`mp:state:${sid}`);
157
+ };
158
+ /** Obtiene la preferencia e inicializa `url` (init_point). */
159
+ getPreference = () => {
160
+ this._paymentService.getPreference(this.allData).then((res) => {
161
+ this.preference = res;
162
+ this.url = this.preference?.init_point;
163
+ this.renderMP(this.preference);
164
+ }, () => this.setError('operation-error'));
149
165
  };
150
- getPreference = () => this._paymentService.getPreference(this.allData).then(res => {
151
- this.preference = res;
152
- this.url = this.preference.init_point;
153
- this.renderMP(this.preference);
154
- }, err => this.setError('operation-error'));
155
166
  setError = (message) => {
156
167
  //this.error = message;
157
168
  };
158
- renderMP = (preference) => {
159
- // Solo ejecutar en el browser
160
- if (!isPlatformBrowser(this.platformId) || !this.window) {
161
- return;
162
- }
163
- this.window.addEventListener("message", (event) => {
164
- if (event.origin !== 'https://www.mercadopago.com.ar' || !event.data.type) {
165
- return;
166
- }
167
- let dataType = event.data.type;
168
- if (dataType === 'submit') {
169
- const paymentData = event.data.value;
170
- return;
171
- }
172
- });
173
- };
169
+ renderMP = (_pref) => { };
174
170
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MpRedirectEcComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
175
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: MpRedirectEcComponent, isStandalone: true, selector: "app-mp-redirect-ec", inputs: { method: "method", total_amount: "total_amount", allData: "allData" }, outputs: { ready: "ready" }, ngImport: i0, template: "<div class=\"text-center\">\r\n\t@if(url){\r\n\t\t@if(!loading){\r\n\t\t\t<button (click)=\"iniciar()\" class=\"btn btn-outline-primary rounded-0 comprar mt-3\">Pagar</button>\r\n\t\t} @else {\r\n\t\t\t<div class=\"d-flex flex-column jusitfy-content-center align-items-center mt-2\">\r\n\t\t\t\t<h3>Procesando el pago por mercado pago</h3>\r\n\t\t\t\t<h5>Recuerde hacer click en \"Volver al sitio\" desde mercado pago para finalizar la compra.</h5>\r\n\t\t\t\t<app-loading-full-ec></app-loading-full-ec>\r\n\t\t\t</div>\r\n\t\t\t<div class=\"container-fluid\">\r\n\t\t\t\t<div class=\"row\">\r\n\t\t\t\t\t<div class=\"col-5\">\r\n\t\t\t\t\t\t<hr>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"col-2 text-center\">\r\n\t\t\t\t\t\t<label for=\"\">o</label>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"col-5\">\r\n\t\t\t\t\t\t<hr>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<div class=\"d-flex flex-column justify-content-center align-items-center mt-2\">\r\n\t\t\t\t<button (click)=\"clickClose()\" class=\"btn btn-outline-secondary\">Cancelar pago</button>\r\n\t\t\t</div>\r\n\t\t}\r\n\t} @else{\r\n\t<div class=\"d-flex flex-column justify-content-center align-items-center mt-2\">\r\n\t\t<app-loading-full-ec></app-loading-full-ec>\r\n\t</div>\r\n\t}\r\n</div>", styles: [""], dependencies: [{ kind: "component", type: LoadingFullEcComponent, selector: "app-loading-full-ec" }] });
171
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: MpRedirectEcComponent, isStandalone: true, selector: "app-mp-redirect-ec", inputs: { method: "method", total_amount: "total_amount", allData: "allData" }, outputs: { ready: "ready" }, ngImport: i0, template: "<div class=\"text-center\">\n\t@if(url) {\n\n\t@if(isIdle) {\n\t<button (click)=\"iniciar()\" class=\"btn btn-outline-primary rounded-0 comprar mt-3\">Pagar</button>\n\t}\n\n\t@if(isPaying) {\n\t<div class=\"d-flex flex-column jusitfy-content-center align-items-center mt-2\">\n\t\t<h3>Procesando el pago por Mercado Pago</h3>\n\t\t<h5>Record\u00E1 tocar \u201CVolver al sitio\u201D en Mercado Pago para finalizar.</h5>\n\t\t<app-loading-full-ec></app-loading-full-ec>\n\t</div>\n\n\t<div class=\"container-fluid\">\n\t\t<div class=\"row\">\n\t\t\t<div class=\"col-5\">\n\t\t\t\t<hr>\n\t\t\t</div>\n\t\t\t<div class=\"col-2 text-center\"><label>o</label></div>\n\t\t\t<div class=\"col-5\">\n\t\t\t\t<hr>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\n\t<div class=\"d-flex flex-column justify-content-center align-items-center mt-2\">\n\t\t<button (click)=\"clickClose()\" class=\"btn btn-outline-secondary\">Cancelar pago</button>\n\t</div>\n\t}\n\n\t@if(isFinalizing) {\n\t<div class=\"d-flex flex-column jusitfy-content-center align-items-center mt-2\">\n\t\t<h3>Confirmando pago y redirigiendo\u2026</h3>\n\t\t<h5>No cierres ni recargues esta p\u00E1gina.</h5>\n\t\t<app-loading-full-ec></app-loading-full-ec>\n\t</div>\n\t}\n\n\t} @else {\n\t<div class=\"d-flex flex-column justify-content-center align-items-center mt-2\">\n\t\t<app-loading-full-ec></app-loading-full-ec>\n\t</div>\n\t}\n</div>", styles: [""], dependencies: [{ kind: "component", type: LoadingFullEcComponent, selector: "app-loading-full-ec" }] });
176
172
  }
177
173
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MpRedirectEcComponent, decorators: [{
178
174
  type: Component,
179
- args: [{ selector: 'app-mp-redirect-ec', standalone: true, imports: [LoadingFullEcComponent], template: "<div class=\"text-center\">\r\n\t@if(url){\r\n\t\t@if(!loading){\r\n\t\t\t<button (click)=\"iniciar()\" class=\"btn btn-outline-primary rounded-0 comprar mt-3\">Pagar</button>\r\n\t\t} @else {\r\n\t\t\t<div class=\"d-flex flex-column jusitfy-content-center align-items-center mt-2\">\r\n\t\t\t\t<h3>Procesando el pago por mercado pago</h3>\r\n\t\t\t\t<h5>Recuerde hacer click en \"Volver al sitio\" desde mercado pago para finalizar la compra.</h5>\r\n\t\t\t\t<app-loading-full-ec></app-loading-full-ec>\r\n\t\t\t</div>\r\n\t\t\t<div class=\"container-fluid\">\r\n\t\t\t\t<div class=\"row\">\r\n\t\t\t\t\t<div class=\"col-5\">\r\n\t\t\t\t\t\t<hr>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"col-2 text-center\">\r\n\t\t\t\t\t\t<label for=\"\">o</label>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"col-5\">\r\n\t\t\t\t\t\t<hr>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<div class=\"d-flex flex-column justify-content-center align-items-center mt-2\">\r\n\t\t\t\t<button (click)=\"clickClose()\" class=\"btn btn-outline-secondary\">Cancelar pago</button>\r\n\t\t\t</div>\r\n\t\t}\r\n\t} @else{\r\n\t<div class=\"d-flex flex-column justify-content-center align-items-center mt-2\">\r\n\t\t<app-loading-full-ec></app-loading-full-ec>\r\n\t</div>\r\n\t}\r\n</div>" }]
180
- }], ctorParameters: () => [], propDecorators: { method: [{
175
+ args: [{ selector: 'app-mp-redirect-ec', standalone: true, imports: [LoadingFullEcComponent], template: "<div class=\"text-center\">\n\t@if(url) {\n\n\t@if(isIdle) {\n\t<button (click)=\"iniciar()\" class=\"btn btn-outline-primary rounded-0 comprar mt-3\">Pagar</button>\n\t}\n\n\t@if(isPaying) {\n\t<div class=\"d-flex flex-column jusitfy-content-center align-items-center mt-2\">\n\t\t<h3>Procesando el pago por Mercado Pago</h3>\n\t\t<h5>Record\u00E1 tocar \u201CVolver al sitio\u201D en Mercado Pago para finalizar.</h5>\n\t\t<app-loading-full-ec></app-loading-full-ec>\n\t</div>\n\n\t<div class=\"container-fluid\">\n\t\t<div class=\"row\">\n\t\t\t<div class=\"col-5\">\n\t\t\t\t<hr>\n\t\t\t</div>\n\t\t\t<div class=\"col-2 text-center\"><label>o</label></div>\n\t\t\t<div class=\"col-5\">\n\t\t\t\t<hr>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\n\t<div class=\"d-flex flex-column justify-content-center align-items-center mt-2\">\n\t\t<button (click)=\"clickClose()\" class=\"btn btn-outline-secondary\">Cancelar pago</button>\n\t</div>\n\t}\n\n\t@if(isFinalizing) {\n\t<div class=\"d-flex flex-column jusitfy-content-center align-items-center mt-2\">\n\t\t<h3>Confirmando pago y redirigiendo\u2026</h3>\n\t\t<h5>No cierres ni recargues esta p\u00E1gina.</h5>\n\t\t<app-loading-full-ec></app-loading-full-ec>\n\t</div>\n\t}\n\n\t} @else {\n\t<div class=\"d-flex flex-column justify-content-center align-items-center mt-2\">\n\t\t<app-loading-full-ec></app-loading-full-ec>\n\t</div>\n\t}\n</div>" }]
176
+ }], propDecorators: { method: [{
181
177
  type: Input
182
178
  }], total_amount: [{
183
179
  type: Input
@@ -186,4 +182,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
186
182
  }], ready: [{
187
183
  type: Output
188
184
  }] } });
189
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXAtcmVkaXJlY3QtZWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvY2hlY2tvdXQtZWMvcGF5bWVudC1lYy9wYXltZW50LW1ldGhvZHMvbXAtcmVkaXJlY3QtZWMvbXAtcmVkaXJlY3QtZWMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvY2hlY2tvdXQtZWMvcGF5bWVudC1lYy9wYXltZW50LW1ldGhvZHMvbXAtcmVkaXJlY3QtZWMvbXAtcmVkaXJlY3QtZWMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BHLE9BQU8sRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBU3BELE1BQU0sT0FBTyxxQkFBcUI7SUFFekIsZUFBZSxHQUFtQixNQUFNLENBQUMsY0FBYyxDQUFDLENBQUE7SUFDeEQsYUFBYSxHQUFpQixNQUFNLENBQUMsWUFBWSxDQUFDLENBQUE7SUFFakQsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNkLFlBQVksR0FBRyxDQUFDLENBQUM7SUFDakIsT0FBTyxDQUFNO0lBQ1osS0FBSyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFFM0IsVUFBVSxDQUFNO0lBRW5CLE9BQU8sR0FB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QUM7SUFDSixDQUFDLENBQUE7d0dBcE1XLHFCQUFxQjs0RkFBckIscUJBQXFCLDJMQ1psQyxxd0NBZ0NNLDBERHRCSyxzQkFBc0I7OzRGQUVwQixxQkFBcUI7a0JBUGpDLFNBQVM7K0JBQ0Msb0JBQW9CLGNBQ2xCLElBQUksV0FHUCxDQUFDLHNCQUFzQixDQUFDO3dEQU94QixNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0ksS0FBSztzQkFBZCxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIGluamVjdCwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBQTEFURk9STV9JRCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBQYXltZW50U2VydmljZSwgVG9hc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vZWMtc2VydmljZXMnO1xyXG5pbXBvcnQgeyBMb2FkaW5nRnVsbEVjQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vd2lkZ2V0cy1lYyc7XHJcbmltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG5cdHNlbGVjdG9yOiAnYXBwLW1wLXJlZGlyZWN0LWVjJyxcclxuXHRzdGFuZGFsb25lOiB0cnVlLFxyXG5cdHRlbXBsYXRlVXJsOiAnLi9tcC1yZWRpcmVjdC1lYy5jb21wb25lbnQuaHRtbCcsXHJcblx0c3R5bGVVcmxzOiBbJy4vbXAtcmVkaXJlY3QtZWMuY29tcG9uZW50LnNjc3MnXSxcclxuXHRpbXBvcnRzOiBbTG9hZGluZ0Z1bGxFY0NvbXBvbmVudF1cclxufSlcclxuZXhwb3J0IGNsYXNzIE1wUmVkaXJlY3RFY0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG5cdHByaXZhdGUgX3BheW1lbnRTZXJ2aWNlOiBQYXltZW50U2VydmljZSA9IGluamVjdChQYXltZW50U2VydmljZSlcclxuXHRwcml2YXRlIF90b2FzdFNlcnZpY2U6IFRvYXN0U2VydmljZSA9IGluamVjdChUb2FzdFNlcnZpY2UpXHJcblxyXG5cdEBJbnB1dCgpIG1ldGhvZCA9IG51bGw7XHJcblx0QElucHV0KCkgdG90YWxfYW1vdW50ID0gMDtcclxuXHRASW5wdXQoKSBhbGxEYXRhOiBhbnk7XHJcblx0QE91dHB1dCgpIHJlYWR5ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuXHRwcm90ZWN0ZWQgcHJlZmVyZW5jZTogYW55O1xyXG5cclxuXHRwdWJsaWMgbG9hZGluZyA9IGZhbHNlO1xyXG5cdHB1YmxpYyB1cmw6IGFueTtcclxuXHRwdWJsaWMgY2xvc2VNb2RhbCA9ICcnXHJcblx0cHVibGljIHZlbnRhbmE6IGFueTtcclxuXHRwdWJsaWMgd2luZG93PzogV2luZG93O1xyXG5cdHB1YmxpYyBsb2NhbFN0b3JhZ2U/OlN0b3JhZ2U7XHJcblx0cHJpdmF0ZSBpc01vYmlsZSA9IGZhbHNlO1xyXG5cdHByaXZhdGUgc2Vzc2lvbklkOiBzdHJpbmcgPSAnJztcclxuXHJcblx0cHJpdmF0ZSBwbGF0Zm9ybUlkOiBhbnkgPSBpbmplY3QoUExBVEZPUk1fSUQpXHJcblxyXG5cdGNvbnN0cnVjdG9yKCkge1xyXG5cdFx0aWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcclxuXHRcdFx0dGhpcy53aW5kb3cgPSB3aW5kb3dcclxuXHRcdFx0dGhpcy5sb2NhbFN0b3JhZ2UgPSBsb2NhbFN0b3JhZ2VcclxuXHRcdFx0dGhpcy5kZXRlY3RNb2JpbGUoKVxyXG5cdFx0XHR0aGlzLmdlbmVyYXRlU2Vzc2lvbklkKClcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdG5nT25Jbml0KCkge1xyXG5cdFx0dGhpcy5nZXRQcmVmZXJlbmNlKClcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZGV0ZWN0TW9iaWxlKCk6IHZvaWQge1xyXG5cdFx0aWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkgJiYgdGhpcy53aW5kb3cpIHtcclxuXHRcdFx0Y29uc3QgdXNlckFnZW50ID0gdGhpcy53aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0XHR0aGlzLmlzTW9iaWxlID0gL2FuZHJvaWR8d2Vib3N8aXBob25lfGlwYWR8aXBvZHxibGFja2JlcnJ5fGllbW9iaWxlfG9wZXJhIG1pbml8bW9iaWxlL2kudGVzdCh1c2VyQWdlbnQpIHx8XHJcblx0XHRcdCAgICAgICAgICAgICAgKHRoaXMud2luZG93LmlubmVyV2lkdGggPD0gNzY4KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2VuZXJhdGVTZXNzaW9uSWQoKTogdm9pZCB7XHJcblx0XHR0aGlzLnNlc3Npb25JZCA9IGBtcF9zZXNzaW9uXyR7RGF0ZS5ub3coKX1fJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMiwgOSl9YDtcclxuXHRcdGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpICYmIHRoaXMubG9jYWxTdG9yYWdlKSB7XHJcblx0XHRcdHRoaXMubG9jYWxTdG9yYWdlLnNldEl0ZW0oJ21wX3Nlc3Npb25faWQnLCB0aGlzLnNlc3Npb25JZCk7XHJcblx0XHR9XHJcblx0fVxyXG5cdGNsaWNrQ2xvc2UgPSAoKSA9PiB7XHJcblx0XHQvKiAgdGhpcy5jbG9zZU1vZGFsID0gJ2NhbmNlbCdcclxuXHRcdCB0aGlzLnZlbnRhbmE/LmNsb3NlKCkgKi9cclxuXHR9XHJcblxyXG5cdGluaWNpYXIgPSAoKSA9PiB7XHJcblx0XHR0aGlzLmNsb3NlTW9kYWwgPSAnJ1xyXG5cdFx0dGhpcy5jbGVhclN0b3JhZ2VTdGF0ZSgpXHJcblx0XHRcclxuXHRcdC8vIFNvbG8gZWplY3V0YXIgZW4gZWwgYnJvd3NlclxyXG5cdFx0aWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdFxyXG5cdFx0Ly8gRW4gbW9iaWxlLCBtYXJjYW1vcyBlc3RhIHBlc3Rhw7FhIGNvbW8gbGEgcHJpbmNpcGFsXHJcblx0XHRpZiAodGhpcy5pc01vYmlsZSAmJiB0aGlzLmxvY2FsU3RvcmFnZSkge1xyXG5cdFx0XHR0aGlzLmxvY2FsU3RvcmFnZS5zZXRJdGVtKCdtcF9tYWluX3RhYicsIHRoaXMuc2Vzc2lvbklkKTtcclxuXHRcdFx0dGhpcy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnbXBfcGF5bWVudF9zdGFydGVkJywgJ3RydWUnKTtcclxuXHRcdH1cclxuXHRcdFxyXG5cdFx0aWYgKHRoaXMuaXNNb2JpbGUgJiYgdGhpcy53aW5kb3cpIHtcclxuXHRcdFx0Ly8gRW4gbW9iaWxlLCB1c2FyIHdpbmRvdy5sb2NhdGlvbi5ocmVmIGVuIGx1Z2FyIGRlIHBvcHVwXHJcblx0XHRcdHRoaXMud2luZG93LmxvY2F0aW9uLmhyZWYgPSB0aGlzLnVybDtcclxuXHRcdH0gZWxzZSBpZiAodGhpcy53aW5kb3cpIHtcclxuXHRcdFx0Ly8gRW4gZGVza3RvcCwgdXNhciBwb3B1cCBjb21vIGFudGVzXHJcblx0XHRcdHRoaXMudmVudGFuYSA9IHRoaXMud2luZG93Lm9wZW4odGhpcy51cmwpXHJcblx0XHRcdHRoaXMuY2FsbFN0YXRlKClcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGNhbGxTdGF0ZSA9ICgpID0+IHtcclxuXHRcdC8vIFNvbG8gZWplY3V0YXIgZW4gZWwgYnJvd3NlclxyXG5cdFx0aWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdFxyXG5cdFx0bGV0IHN0YXRlID0gdGhpcy5jbG9zZU1vZGFsICE9ICcnID8gdGhpcy5jbG9zZU1vZGFsIDogdGhpcy5sb2NhbFN0b3JhZ2U/LmdldEl0ZW0oJ3N0YXRlJylcclxuXHRcdCFzdGF0ZSAmJiB0aGlzLnZlbnRhbmE/LmNsb3NlZCAmJiAoc3RhdGUgPSAnY2FuY2VsJylcclxuXHRcdHRoaXMubG9hZGluZyA9IHRydWVcclxuXHRcdHN0YXRlICYmIGNvbnNvbGUubG9nKHN0YXRlKTtcclxuXHRcdFxyXG5cdFx0Ly8gRW4gbW9iaWxlLCB2ZXJpZmljYXIgc2kgZXN0YSBwZXN0YcOxYSBkZWJlIHByb2Nlc2FyIGVsIGVzdGFkb1xyXG5cdFx0aWYgKHRoaXMuaXNNb2JpbGUgJiYgdGhpcy5sb2NhbFN0b3JhZ2UpIHtcclxuXHRcdFx0Y29uc3QgbWFpblRhYiA9IHRoaXMubG9jYWxTdG9yYWdlLmdldEl0ZW0oJ21wX21haW5fdGFiJyk7XHJcblx0XHRcdGNvbnN0IGN1cnJlbnRTZXNzaW9uSWQgPSB0aGlzLmxvY2FsU3RvcmFnZS5nZXRJdGVtKCdtcF9zZXNzaW9uX2lkJyk7XHJcblx0XHRcdFxyXG5cdFx0XHQvLyBTaSBubyBlcyBsYSBwZXN0YcOxYSBwcmluY2lwYWwsIG5vIHByb2Nlc2FyXHJcblx0XHRcdGlmIChtYWluVGFiICE9PSBjdXJyZW50U2Vzc2lvbklkICYmIG1haW5UYWIgIT09IG51bGwpIHtcclxuXHRcdFx0XHRjb25zb2xlLmxvZygnRXN0YSBubyBlcyBsYSBwZXN0YcOxYSBwcmluY2lwYWwsIGlnbm9yYW5kbyBlc3RhZG8nKTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdFxyXG5cdFx0aWYgKHN0YXRlKSB7XHJcblx0XHRcdHRoaXMubG9hZGluZyA9IGZhbHNlXHJcblx0XHRcdHRoaXMubG9jYWxTdG9yYWdlPy5yZW1vdmVJdGVtKCdzdGF0ZScpXHJcblx0XHRcdFxyXG5cdFx0XHQvLyBMaW1waWFyIG1hcmNhZG9yZXMgZGUgbW9iaWxlXHJcblx0XHRcdGlmICh0aGlzLmlzTW9iaWxlICYmIHRoaXMubG9jYWxTdG9yYWdlKSB7XHJcblx0XHRcdFx0dGhpcy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnbXBfbWFpbl90YWInKTtcclxuXHRcdFx0XHR0aGlzLmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdtcF9wYXltZW50X3N0YXJ0ZWQnKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRcclxuXHRcdFx0aWYgKHN0YXRlID09ICdzdWNjZXNzJykge1xyXG5cdFx0XHRcdHRoaXMudmVudGFuYT8uY2xvc2UoKVxyXG5cdFx0XHRcdHRoaXMucmVhZHkuZW1pdCh0cnVlKVxyXG5cdFx0XHRcdHJldHVyblxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChzdGF0ZSA9PSAncGVuZGluZycpIHtcclxuXHRcdFx0XHR0aGlzLnZlbnRhbmE/LmNsb3NlKClcclxuXHRcdFx0XHR0aGlzLnJlYWR5LmVtaXQodHJ1ZSlcclxuXHRcdFx0XHRyZXR1cm5cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoc3RhdGUgPT0gJ2ZhaWx1cmUnKSB7XHJcblx0XHRcdFx0dGhpcy52ZW50YW5hPy5jbG9zZSgpXHJcblx0XHRcdFx0dGhpcy5wcm9jZXNzRXJyb3IoJycpXHJcblx0XHRcdFx0cmV0dXJuXHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKHN0YXRlID09ICdjYW5jZWwnKSB7XHJcblx0XHRcdFx0dGhpcy52ZW50YW5hPy5jbG9zZSgpXHJcblx0XHRcdFx0dGhpcy5wcm9jZXNzRXJyb3IoJ1NlIGNhbmNlbG8gZWwgcGFnbyBjb24gbWVyY2FkbyBwYWdvJylcclxuXHRcdFx0XHRyZXR1cm5cclxuXHRcdFx0fVxyXG5cdFx0XHR0aGlzLnZlbnRhbmE/LmNsb3NlKClcclxuXHRcdFx0dGhpcy5wcm9jZXNzRXJyb3IoJycpXHJcblx0XHRcdHJldHVyblxyXG5cdFx0fVxyXG5cdFx0XHJcblx0XHQvLyBTb2xvIGNvbnRpbnVhciBwb2xsaW5nIHNpIG5vIGVzIG1vYmlsZSBvIHNpIGVzIGxhIHBlc3Rhw7FhIHByaW5jaXBhbFxyXG5cdFx0aWYgKCF0aGlzLmlzTW9iaWxlIHx8ICh0aGlzLmlzTW9iaWxlICYmIHRoaXMubG9jYWxTdG9yYWdlPy5nZXRJdGVtKCdtcF9tYWluX3RhYicpID09PSB0aGlzLnNlc3Npb25JZCkpIHtcclxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5jYWxsU3RhdGUoKVxyXG5cdFx0XHR9LCA1MDAwKTtcclxuXHRcdH1cclxuXHR9XHJcblx0cHJvY2Vzc0Vycm9yID0gKGVycjogYW55KSA9PiB7XHJcblx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdyhlcnIgIT0gJycgPyBlcnIgOiAncGF5bWVudC1lcnJvcicpO1xyXG5cdFx0Ly8gY29uc29sZS5sb2coXCJFUlJPUiBFTlZJTyBCQUNLICBcIiwgZXJyKTtcclxuXHR9XHJcblx0Y2xlYXJTdG9yYWdlU3RhdGUgPSAoKSA9PiB7XHJcblx0XHQvLyBTb2xvIGVqZWN1dGFyIGVuIGVsIGJyb3dzZXJcclxuXHRcdGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRcclxuXHRcdGlmICh0eXBlb2Ygc2Vzc2lvblN0b3JhZ2UgIT09ICd1bmRlZmluZWQnKSB7XHJcblx0XHRcdHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ3N0YXRlJylcclxuXHRcdH1cclxuXHRcdFxyXG5cdFx0dGhpcy5sb2NhbFN0b3JhZ2U/LnJlbW92ZUl0ZW0oJ3N0YXRlJylcclxuXHRcdFxyXG5cdFx0Ly8gTGltcGlhciB0YW1iacOpbiBsb3MgbWFyY2Fkb3JlcyBkZSBtb2JpbGVcclxuXHRcdGlmICh0aGlzLmlzTW9iaWxlICYmIHRoaXMubG9jYWxTdG9yYWdlKSB7XHJcblx0XHRcdHRoaXMubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ21wX3Byb2Nlc3NpbmdfdGFiJylcclxuXHRcdFx0dGhpcy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnbXBfcHJvY2Vzc2luZ190YWJfdGltZScpXHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRnZXRQcmVmZXJlbmNlID0gKCkgPT5cclxuXHRcdHRoaXMuX3BheW1lbnRTZXJ2aWNlLmdldFByZWZlcmVuY2UodGhpcy5hbGxEYXRhKS50aGVuKFxyXG5cdFx0XHRyZXMgPT4ge1xyXG5cdFx0XHRcdHRoaXMucHJlZmVyZW5jZSA9IHJlcztcclxuXHRcdFx0XHR0aGlzLnVybCA9IHRoaXMucHJlZmVyZW5jZS5pbml0X3BvaW50XHJcblx0XHRcdFx0dGhpcy5yZW5kZXJNUCh0aGlzLnByZWZlcmVuY2UpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRlcnIgPT4gdGhpcy5zZXRFcnJvcignb3BlcmF0aW9uLWVycm9yJylcclxuXHRcdCk7XHJcblx0c2V0RXJyb3IgPSAobWVzc2FnZTogYW55KSA9PiB7XHJcblx0XHQvL3RoaXMuZXJyb3IgPSBtZXNzYWdlO1xyXG5cdH1cclxuXHRyZW5kZXJNUCA9IChwcmVmZXJlbmNlOiBhbnkpID0+IHtcclxuXHRcdC8vIFNvbG8gZWplY3V0YXIgZW4gZWwgYnJvd3NlclxyXG5cdFx0aWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpIHx8ICF0aGlzLndpbmRvdykge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRcclxuXHRcdHRoaXMud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIChldmVudDogYW55KSA9PiB7XHJcblx0XHRcdGlmIChldmVudC5vcmlnaW4gIT09ICdodHRwczovL3d3dy5tZXJjYWRvcGFnby5jb20uYXInIHx8ICFldmVudC5kYXRhLnR5cGUpIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0bGV0IGRhdGFUeXBlID0gZXZlbnQuZGF0YS50eXBlO1xyXG5cdFx0XHRpZiAoZGF0YVR5cGUgPT09ICdzdWJtaXQnKSB7XHJcblx0XHRcdFx0Y29uc3QgcGF5bWVudERhdGEgPSBldmVudC5kYXRhLnZhbHVlO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxyXG5cdEBpZih1cmwpe1xyXG5cdFx0QGlmKCFsb2FkaW5nKXtcclxuXHRcdFx0PGJ1dHRvbiAoY2xpY2spPVwiaW5pY2lhcigpXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSByb3VuZGVkLTAgY29tcHJhciBtdC0zXCI+UGFnYXI8L2J1dHRvbj5cclxuXHRcdH0gQGVsc2Uge1xyXG5cdFx0XHQ8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGp1c2l0ZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIG10LTJcIj5cclxuXHRcdFx0XHQ8aDM+UHJvY2VzYW5kbyBlbCBwYWdvIHBvciBtZXJjYWRvIHBhZ288L2gzPlxyXG5cdFx0XHRcdDxoNT5SZWN1ZXJkZSBoYWNlciBjbGljayBlbiBcIlZvbHZlciBhbCBzaXRpb1wiIGRlc2RlIG1lcmNhZG8gcGFnbyBwYXJhIGZpbmFsaXphciBsYSBjb21wcmEuPC9oNT5cclxuXHRcdFx0XHQ8YXBwLWxvYWRpbmctZnVsbC1lYz48L2FwcC1sb2FkaW5nLWZ1bGwtZWM+XHJcblx0XHRcdDwvZGl2PlxyXG5cdFx0XHQ8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+XHJcblx0XHRcdFx0PGRpdiBjbGFzcz1cInJvd1wiPlxyXG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cImNvbC01XCI+XHJcblx0XHRcdFx0XHRcdDxocj5cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cImNvbC0yIHRleHQtY2VudGVyXCI+XHJcblx0XHRcdFx0XHRcdDxsYWJlbCBmb3I9XCJcIj5vPC9sYWJlbD5cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cImNvbC01XCI+XHJcblx0XHRcdFx0XHRcdDxocj5cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHQ8L2Rpdj5cclxuXHRcdFx0PGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBtdC0yXCI+XHJcblx0XHRcdFx0PGJ1dHRvbiAoY2xpY2spPVwiY2xpY2tDbG9zZSgpXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCI+Q2FuY2VsYXIgcGFnbzwvYnV0dG9uPlxyXG5cdFx0XHQ8L2Rpdj5cclxuXHRcdH1cclxuXHR9IEBlbHNle1xyXG5cdDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4ganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgbXQtMlwiPlxyXG5cdFx0PGFwcC1sb2FkaW5nLWZ1bGwtZWM+PC9hcHAtbG9hZGluZy1mdWxsLWVjPlxyXG5cdDwvZGl2PlxyXG5cdH1cclxuPC9kaXY+Il19
185
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXAtcmVkaXJlY3QtZWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvY2hlY2tvdXQtZWMvcGF5bWVudC1lYy9wYXltZW50LW1ldGhvZHMvbXAtcmVkaXJlY3QtZWMvbXAtcmVkaXJlY3QtZWMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvY2hlY2tvdXQtZWMvcGF5bWVudC1lYy9wYXltZW50LW1ldGhvZHMvbXAtcmVkaXJlY3QtZWMvbXAtcmVkaXJlY3QtZWMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsV0FBVyxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQy9HLE9BQU8sRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBWXBELE1BQU0sT0FBTyxxQkFBcUI7SUFFekIsZUFBZSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN6QyxhQUFhLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3JDLFVBQVUsR0FBUSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDdEMsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUVoQixNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ2QsWUFBWSxHQUFHLENBQUMsQ0FBQztJQUNqQixPQUFPLENBQU07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QiwyTENmbEMsazNDQTRDTSwwREQvQkssc0JBQXNCOzs0RkFFcEIscUJBQXFCO2tCQVBqQyxTQUFTOytCQUNDLG9CQUFvQixjQUNsQixJQUFJLFdBR1AsQ0FBQyxzQkFBc0IsQ0FBQzs4QkFTeEIsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNJLEtBQUs7c0JBQWQsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBpbmplY3QsIElucHV0LCBPbkluaXQsIE91dHB1dCwgUExBVEZPUk1fSUQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUGF5bWVudFNlcnZpY2UsIFRvYXN0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2VjLXNlcnZpY2VzJztcbmltcG9ydCB7IExvYWRpbmdGdWxsRWNDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi8uLi93aWRnZXRzLWVjJztcbmltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxudHlwZSBNcFN0YXRlID0gJ3N1Y2Nlc3MnIHwgJ3BlbmRpbmcnIHwgJ2ZhaWx1cmUnIHwgJ2NhbmNlbCc7XG50eXBlIFBoYXNlID0gJ2lkbGUnIHwgJ3BheWluZycgfCAnZmluYWxpemluZyc7XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ2FwcC1tcC1yZWRpcmVjdC1lYycsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlVXJsOiAnLi9tcC1yZWRpcmVjdC1lYy5jb21wb25lbnQuaHRtbCcsXG5cdHN0eWxlVXJsczogWycuL21wLXJlZGlyZWN0LWVjLmNvbXBvbmVudC5zY3NzJ10sXG5cdGltcG9ydHM6IFtMb2FkaW5nRnVsbEVjQ29tcG9uZW50XVxufSlcbmV4cG9ydCBjbGFzcyBNcFJlZGlyZWN0RWNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cblx0cHJpdmF0ZSBfcGF5bWVudFNlcnZpY2UgPSBpbmplY3QoUGF5bWVudFNlcnZpY2UpO1xuXHRwcml2YXRlIF90b2FzdFNlcnZpY2UgPSBpbmplY3QoVG9hc3RTZXJ2aWNlKTtcblx0cHJpdmF0ZSBwbGF0Zm9ybUlkOiBhbnkgPSBpbmplY3QoUExBVEZPUk1fSUQpO1xuXHRwcml2YXRlIGZpbmlzaGVkID0gZmFsc2U7XG5cblx0QElucHV0KCkgbWV0aG9kID0gbnVsbDtcblx0QElucHV0KCkgdG90YWxfYW1vdW50ID0gMDtcblx0QElucHV0KCkgYWxsRGF0YTogYW55O1xuXHRAT3V0cHV0KCkgcmVhZHkgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cblx0cHJvdGVjdGVkIHByZWZlcmVuY2U6IGFueTtcblx0cHVibGljIHVybD86IHN0cmluZztcblxuXHQvLyBGYXNlcyBkZSBVSVxuXHRwdWJsaWMgcGhhc2U6IFBoYXNlID0gJ2lkbGUnO1xuXHRnZXQgaXNJZGxlKCkgeyByZXR1cm4gdGhpcy5waGFzZSA9PT0gJ2lkbGUnOyB9XG5cdGdldCBpc1BheWluZygpIHsgcmV0dXJuIHRoaXMucGhhc2UgPT09ICdwYXlpbmcnOyB9XG5cdGdldCBpc0ZpbmFsaXppbmcoKSB7IHJldHVybiB0aGlzLnBoYXNlID09PSAnZmluYWxpemluZyc7IH1cblxuXHRwcml2YXRlIHZlbnRhbmE6IFdpbmRvdyB8IG51bGwgPSBudWxsO1xuXHRwcml2YXRlIHdpbmRvd1JlZj86IFdpbmRvdztcblx0cHJpdmF0ZSBzaWQgPSAnJztcblx0cHJpdmF0ZSBiYz86IEJyb2FkY2FzdENoYW5uZWw7XG5cdHByaXZhdGUgcG9sbFRpbWVyPzogYW55O1xuXHRwcml2YXRlIHBvbGxTdGFydGVkQXQgPSAwO1xuXG5cdG5nT25Jbml0KCkge1xuXHRcdGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG5cdFx0XHR0aGlzLndpbmRvd1JlZiA9IHdpbmRvdztcblxuXHRcdFx0aWYgKCdCcm9hZGNhc3RDaGFubmVsJyBpbiB3aW5kb3cpIHtcblx0XHRcdFx0dGhpcy5iYyA9IG5ldyBCcm9hZGNhc3RDaGFubmVsKCdtcF9wYXltZW50Jyk7XG5cdFx0XHRcdHRoaXMuYmMub25tZXNzYWdlID0gKGU6IE1lc3NhZ2VFdmVudCkgPT4gdGhpcy5vbk1wTWVzc2FnZShlPy5kYXRhKTtcblx0XHRcdH1cblxuXHRcdFx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3N0b3JhZ2UnLCB0aGlzLm9uU3RvcmFnZSk7XG5cdFx0XHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMub25XaW5kb3dNZXNzYWdlKTtcblx0XHR9XG5cblx0XHR0aGlzLmdldFByZWZlcmVuY2UoKTtcblx0fVxuXG5cdG5nT25EZXN0cm95KCkge1xuXHRcdGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkgcmV0dXJuO1xuXHRcdHRoaXMuYmM/LmNsb3NlKCk7XG5cdFx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3N0b3JhZ2UnLCB0aGlzLm9uU3RvcmFnZSk7XG5cdFx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCB0aGlzLm9uV2luZG93TWVzc2FnZSk7XG5cdFx0aWYgKHRoaXMucG9sbFRpbWVyKSBjbGVhckludGVydmFsKHRoaXMucG9sbFRpbWVyKTtcblx0fVxuXG5cdC8qKiBDYW5jZWxhIG1hbnVhbG1lbnRlIGVsIHBhZ28geSBmaW5hbGl6YSBlbCBmbHVqbyBjb24gZXN0YWRvIFwiY2FuY2VsXCIuICovXG5cdGNsaWNrQ2xvc2UgPSAoKSA9PiB7XG5cdFx0aWYgKHRoaXMuZmluaXNoZWQpIHJldHVybjtcblx0XHR0aGlzLmZpbmlzaFdpdGhTdGF0ZSgnY2FuY2VsJyk7XG5cdH1cblxuXHQvKipcblx0ICogSW5pY2lhIGVsIHBhZ28gYWJyaWVuZG8gYGluaXRfcG9pbnRgIGVuIHVuYSB2ZW50YW5hL3Blc3Rhw7FhIG51ZXZhLlxuXHQgKiBHZW5lcmEgdW4gU0lEIHkgbG8gcGVyc2lzdGUgcGFyYSBjYXNhciBsYSByZXNwdWVzdGEgZGVsIGNhdGNoLlxuXHQgKiBTaSBlbCBwb3B1cCBlcyBibG9xdWVhZG8sIGhhY2UgZmFsbGJhY2sgbmF2ZWdhbmRvIGVuIGxhIG1pc21hIHBlc3Rhw7FhLlxuXHQgKi9cblx0aW5pY2lhciA9ICgpID0+IHtcblx0XHRpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkgfHwgIXRoaXMud2luZG93UmVmIHx8ICF0aGlzLnVybCkgcmV0dXJuO1xuXG5cdFx0dGhpcy5waGFzZSA9ICdwYXlpbmcnO1xuXHRcdHRoaXMuc2lkID0gdGhpcy5nZW5TaWQoKTtcblx0XHRjb25zdCB1cmwgPSBuZXcgVVJMKHRoaXMudXJsKTtcblxuXHRcdGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdtcDpzaWQnLCB0aGlzLnNpZCk7XG5cblx0XHR0aGlzLnZlbnRhbmEgPSB0aGlzLndpbmRvd1JlZi5vcGVuKHRoaXMudXJsLCAnX2JsYW5rJyk7XG5cblx0XHQvLyBwb3B1cCBibG9xdWVhZG8g4oaSIGZhbGxiYWNrIGEgbmF2ZWdhY2nDs24gZW4gbWlzbWEgcGVzdGHDsWFcblx0XHRpZiAoIXRoaXMudmVudGFuYSB8fCB0aGlzLnZlbnRhbmEuY2xvc2VkKSB7XG5cdFx0XHR0aGlzLndpbmRvd1JlZi5sb2NhdGlvbi5ocmVmID0gdGhpcy51cmw7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gcG9sbGluZyBkZSDDumx0aW1vIHJlY3Vyc28gKGhhc3RhIDEwIG1pbnV0b3MpXG5cdFx0dGhpcy5wb2xsU3RhcnRlZEF0ID0gRGF0ZS5ub3coKTtcblx0XHRpZiAodGhpcy5wb2xsVGltZXIpIGNsZWFySW50ZXJ2YWwodGhpcy5wb2xsVGltZXIpO1xuXHRcdHRoaXMucG9sbFRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuXHRcdFx0aWYgKERhdGUubm93KCkgLSB0aGlzLnBvbGxTdGFydGVkQXQgPiAxMCAqIDYwICogMTAwMCkge1xuXHRcdFx0XHRjbGVhckludGVydmFsKHRoaXMucG9sbFRpbWVyKTtcblx0XHRcdFx0dGhpcy5wb2xsVGltZXIgPSBudWxsO1xuXHRcdFx0XHR0aGlzLnBoYXNlID0gJ2lkbGUnO1xuXHRcdFx0XHR0aGlzLnByb2Nlc3NFcnJvcignVGllbXBvIGRlIGVzcGVyYSBhZ290YWRvIGFsIHByb2Nlc2FyIGVsIHBhZ28uJyk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHRoaXMuY2hlY2tMb2NhbFN0b3JhZ2VPbmNlKCk7XG5cdFx0fSwgMTAwMCk7XG5cdH1cblxuXHRwcml2YXRlIG9uV2luZG93TWVzc2FnZSA9IChldmVudDogTWVzc2FnZUV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgZGF0YSA9IGV2ZW50Py5kYXRhO1xuXHRcdHRoaXMub25NcE1lc3NhZ2UoZGF0YSk7XG5cdH1cblxuXHRwcml2YXRlIG9uU3RvcmFnZSA9IChlOiBTdG9yYWdlRXZlbnQpID0+IHtcblx0XHRpZiAoIWUua2V5IHx8ICF0aGlzLnNpZCkgcmV0dXJuO1xuXHRcdGlmIChlLmtleSA9PT0gYG1wOnN0YXRlOiR7dGhpcy5zaWR9YCAmJiBlLm5ld1ZhbHVlKSB7XG5cdFx0XHRjb25zdCBzdGF0ZSA9IGUubmV3VmFsdWUgYXMgTXBTdGF0ZTtcblx0XHRcdHRoaXMuZmluaXNoV2l0aFN0YXRlKHN0YXRlKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIG9uTXBNZXNzYWdlID0gKGRhdGE6IGFueSkgPT4ge1xuXHRcdGlmICghZGF0YSB8fCBkYXRhLnR5cGUgIT09ICdtcDpzdGF0ZScpIHJldHVybjtcblx0XHRpZiAoZGF0YS5zaWQgIT09IHRoaXMuc2lkKSByZXR1cm47XG5cdFx0dGhpcy5maW5pc2hXaXRoU3RhdGUoZGF0YS5zdGF0ZSBhcyBNcFN0YXRlKTtcblx0fVxuXG5cdHByaXZhdGUgY2hlY2tMb2NhbFN0b3JhZ2VPbmNlKCkge1xuXHRcdGlmICghdGhpcy5zaWQpIHJldHVybjtcblx0XHRjb25zdCBzdGF0ZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGBtcDpzdGF0ZToke3RoaXMuc2lkfWApIGFzIE1wU3RhdGUgfCBudWxsO1xuXHRcdGlmIChzdGF0ZSkgdGhpcy5maW5pc2hXaXRoU3RhdGUoc3RhdGUpO1xuXHR9XG5cblx0LyoqIENpZXJyYSBlbCBmbHVqbyBkZSBwYWdvIGNvbiBlbCBlc3RhZG8gZmluYWwgeSBub3RpZmljYSBhbCBwYWRyZS4gKi9cblx0cHJpdmF0ZSBmaW5pc2hXaXRoU3RhdGUoc3RhdGU6IE1wU3RhdGUpIHtcblx0XHRpZiAodGhpcy5maW5pc2hlZCkgcmV0dXJuO1xuXHRcdHRoaXMuZmluaXNoZWQgPSB0cnVlO1xuXG5cdFx0aWYgKHRoaXMucG9sbFRpbWVyKSBjbGVhckludGVydmFsKHRoaXMucG9sbFRpbWVyKTtcblx0XHR0aGlzLnBvbGxUaW1lciA9IG51bGw7XG5cblx0XHRsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShgbXA6c3RhdGU6JHt0aGlzLnNpZH1gKTtcblx0XHRsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnbXA6c2lkJyk7XG5cdFx0bG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ3N0YXRlJyk7XG5cblx0XHR0cnkgeyB0aGlzLnZlbnRhbmEgJiYgIXRoaXMudmVudGFuYS5jbG9zZWQgJiYgdGhpcy52ZW50YW5hLmNsb3NlKCk7IH0gY2F0Y2ggeyB9XG5cdFx0dGhpcy52ZW50YW5hID0gbnVsbDtcblxuXHRcdGlmIChzdGF0ZSA9PT0gJ3N1Y2Nlc3MnIHx8IHN0YXRlID09PSAncGVuZGluZycpIHtcblx0XHRcdHRoaXMucGhhc2UgPSAnZmluYWxpemluZyc7XG5cdFx0XHR0aGlzLnJlYWR5LmVtaXQodHJ1ZSk7XG5cdFx0fSBlbHNlIGlmIChzdGF0ZSA9PT0gJ2ZhaWx1cmUnIHx8IHN0YXRlID09PSAnY2FuY2VsJykge1xuXHRcdFx0dGhpcy5waGFzZSA9ICdpZGxlJztcblx0XHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KHN0YXRlID09PSAnY2FuY2VsJyA/ICdTZSBjYW5jZWzDsyBlbCBwYWdvIGNvbiBNZXJjYWRvIFBhZ28nIDogJ3BheW1lbnQtZXJyb3InKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5waGFzZSA9ICdpZGxlJztcblx0XHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdwYXltZW50LWVycm9yJyk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBnZW5TaWQoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gYG1wXyR7RGF0ZS5ub3coKX1fJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyLCA5KX1gO1xuXHR9XG5cblx0cHJpdmF0ZSBwcm9jZXNzRXJyb3IgPSAobXNnOiBzdHJpbmcpID0+IHtcblx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdyhtc2cgfHwgJ3BheW1lbnQtZXJyb3InKTtcblx0fVxuXG5cdC8qKiBMaW1waWEgcG9zaWJsZXMgcmVzaWR1b3MgZGUgZXN0YWRvIGVuIHN0b3JhZ2VzLiAqL1xuXHRjbGVhclN0b3JhZ2VTdGF0ZSA9ICgpID0+IHtcblx0XHRpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHJldHVybjtcblx0XHRsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnc3RhdGUnKTtcblx0XHRjb25zdCBzaWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbXA6c2lkJyk7XG5cdFx0aWYgKHNpZCkgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oYG1wOnN0YXRlOiR7c2lkfWApO1xuXHR9XG5cblx0LyoqIE9idGllbmUgbGEgcHJlZmVyZW5jaWEgZSBpbmljaWFsaXphIGB1cmxgIChpbml0X3BvaW50KS4gKi9cblx0cHJpdmF0ZSBnZXRQcmVmZXJlbmNlID0gKCk6IHZvaWQgPT4ge1xuXHRcdHRoaXMuX3BheW1lbnRTZXJ2aWNlLmdldFByZWZlcmVuY2UodGhpcy5hbGxEYXRhKS50aGVuKFxuXHRcdFx0KHJlcykgPT4ge1xuXHRcdFx0XHR0aGlzLnByZWZlcmVuY2UgPSByZXM7XG5cdFx0XHRcdHRoaXMudXJsID0gdGhpcy5wcmVmZXJlbmNlPy5pbml0X3BvaW50O1xuXHRcdFx0XHR0aGlzLnJlbmRlck1QKHRoaXMucHJlZmVyZW5jZSk7XG5cdFx0XHR9LFxuXHRcdFx0KCkgPT4gdGhpcy5zZXRFcnJvcignb3BlcmF0aW9uLWVycm9yJylcblx0XHQpO1xuXHR9O1xuXG5cdHByaXZhdGUgc2V0RXJyb3IgPSAobWVzc2FnZTogYW55KSA9PiB7XG5cdFx0Ly90aGlzLmVycm9yID0gbWVzc2FnZTtcblx0fVxuXG5cdHByaXZhdGUgcmVuZGVyTVAgPSAoX3ByZWY6IGFueSk6IHZvaWQgPT4geyAvKiBub29wICovIH07XG59XG4iLCI8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cblx0QGlmKHVybCkge1xuXG5cdEBpZihpc0lkbGUpIHtcblx0PGJ1dHRvbiAoY2xpY2spPVwiaW5pY2lhcigpXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSByb3VuZGVkLTAgY29tcHJhciBtdC0zXCI+UGFnYXI8L2J1dHRvbj5cblx0fVxuXG5cdEBpZihpc1BheWluZykge1xuXHQ8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGp1c2l0ZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIG10LTJcIj5cblx0XHQ8aDM+UHJvY2VzYW5kbyBlbCBwYWdvIHBvciBNZXJjYWRvIFBhZ288L2gzPlxuXHRcdDxoNT5SZWNvcmTDoSB0b2NhciDigJxWb2x2ZXIgYWwgc2l0aW/igJ0gZW4gTWVyY2FkbyBQYWdvIHBhcmEgZmluYWxpemFyLjwvaDU+XG5cdFx0PGFwcC1sb2FkaW5nLWZ1bGwtZWM+PC9hcHAtbG9hZGluZy1mdWxsLWVjPlxuXHQ8L2Rpdj5cblxuXHQ8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+XG5cdFx0PGRpdiBjbGFzcz1cInJvd1wiPlxuXHRcdFx0PGRpdiBjbGFzcz1cImNvbC01XCI+XG5cdFx0XHRcdDxocj5cblx0XHRcdDwvZGl2PlxuXHRcdFx0PGRpdiBjbGFzcz1cImNvbC0yIHRleHQtY2VudGVyXCI+PGxhYmVsPm88L2xhYmVsPjwvZGl2PlxuXHRcdFx0PGRpdiBjbGFzcz1cImNvbC01XCI+XG5cdFx0XHRcdDxocj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvZGl2PlxuXHQ8L2Rpdj5cblxuXHQ8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIG10LTJcIj5cblx0XHQ8YnV0dG9uIChjbGljayk9XCJjbGlja0Nsb3NlKClcIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1zZWNvbmRhcnlcIj5DYW5jZWxhciBwYWdvPC9idXR0b24+XG5cdDwvZGl2PlxuXHR9XG5cblx0QGlmKGlzRmluYWxpemluZykge1xuXHQ8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGp1c2l0ZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIG10LTJcIj5cblx0XHQ8aDM+Q29uZmlybWFuZG8gcGFnbyB5IHJlZGlyaWdpZW5kb+KApjwvaDM+XG5cdFx0PGg1Pk5vIGNpZXJyZXMgbmkgcmVjYXJndWVzIGVzdGEgcMOhZ2luYS48L2g1PlxuXHRcdDxhcHAtbG9hZGluZy1mdWxsLWVjPjwvYXBwLWxvYWRpbmctZnVsbC1lYz5cblx0PC9kaXY+XG5cdH1cblxuXHR9IEBlbHNlIHtcblx0PGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBtdC0yXCI+XG5cdFx0PGFwcC1sb2FkaW5nLWZ1bGwtZWM+PC9hcHAtbG9hZGluZy1mdWxsLWVjPlxuXHQ8L2Rpdj5cblx0fVxuPC9kaXY+Il19
@@ -11,14 +11,14 @@ export class OfflineEcComponent {
11
11
  ngOnInit() {
12
12
  }
13
13
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OfflineEcComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
14
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: OfflineEcComponent, isStandalone: true, selector: "app-offline-ec", inputs: { method: "method", verifyValidate: "verifyValidate", setLoading: "setLoading" }, ngImport: i0, template: "<p id=\"faqs\" class=\"qt px-5\">{{ method.description }}</p>\r\n<p class=\"px-5\">{{ method.instructions }}</p>\r\n<div class=\"end-button\">\r\n\t<button class=\"btn btn-outline-primary\" (click)=\"setLoading() && verifyValidate()\">{{\r\n\t\t('pay-with-offline'| translate) }}</button>\r\n</div>\r\n<!-- @if(loading$ | async; as loading){\r\n @if(loading){\r\n <div class=\"mt-2\">\r\n <app-loading-inline-ec></app-loading-inline-ec>\r\n </div>\r\n }\r\n} -->", styles: [""], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }] });
14
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: OfflineEcComponent, isStandalone: true, selector: "app-offline-ec", inputs: { method: "method", verifyValidate: "verifyValidate", setLoading: "setLoading" }, ngImport: i0, template: "<p id=\"faqs\" class=\"qt px-5\">{{ method.description }}</p>\n<p class=\"px-5\">{{ method.instructions }}</p>\n<div class=\"end-button\">\n\t<button class=\"btn btn-outline-primary\" (click)=\"setLoading() && verifyValidate()\">{{\n\t\t('pay-with-offline'| translate) }}</button>\n</div>\n<!-- @if(loading$ | async; as loading){\n @if(loading){\n <div class=\"mt-2\">\n <app-loading-inline-ec></app-loading-inline-ec>\n </div>\n }\n} -->", styles: [""], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }] });
15
15
  }
16
16
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OfflineEcComponent, decorators: [{
17
17
  type: Component,
18
18
  args: [{ selector: 'app-offline-ec', standalone: true, imports: [
19
19
  LoadingInlineEcComponent,
20
20
  TranslateModule
21
- ], template: "<p id=\"faqs\" class=\"qt px-5\">{{ method.description }}</p>\r\n<p class=\"px-5\">{{ method.instructions }}</p>\r\n<div class=\"end-button\">\r\n\t<button class=\"btn btn-outline-primary\" (click)=\"setLoading() && verifyValidate()\">{{\r\n\t\t('pay-with-offline'| translate) }}</button>\r\n</div>\r\n<!-- @if(loading$ | async; as loading){\r\n @if(loading){\r\n <div class=\"mt-2\">\r\n <app-loading-inline-ec></app-loading-inline-ec>\r\n </div>\r\n }\r\n} -->" }]
21
+ ], template: "<p id=\"faqs\" class=\"qt px-5\">{{ method.description }}</p>\n<p class=\"px-5\">{{ method.instructions }}</p>\n<div class=\"end-button\">\n\t<button class=\"btn btn-outline-primary\" (click)=\"setLoading() && verifyValidate()\">{{\n\t\t('pay-with-offline'| translate) }}</button>\n</div>\n<!-- @if(loading$ | async; as loading){\n @if(loading){\n <div class=\"mt-2\">\n <app-loading-inline-ec></app-loading-inline-ec>\n </div>\n }\n} -->" }]
22
22
  }], ctorParameters: () => [], propDecorators: { method: [{
23
23
  type: Input,
24
24
  args: [{
@@ -29,4 +29,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
29
29
  }], setLoading: [{
30
30
  type: Input
31
31
  }] } });
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2ZmbGluZS1lYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvZWMtY29tcG9uZW50cy9jaGVja291dC1lYy9wYXltZW50LWVjL3BheW1lbnQtbWV0aG9kcy9vZmZsaW5lLWVjL29mZmxpbmUtZWMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvY2hlY2tvdXQtZWMvcGF5bWVudC1lYy9wYXltZW50LW1ldGhvZHMvb2ZmbGluZS1lYy9vZmZsaW5lLWVjLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7O0FBWXRELE1BQU0sT0FBTyxrQkFBa0I7SUFHM0IsTUFBTSxDQUFNO0lBQ04sY0FBYyxDQUFNO0lBQ3BCLFVBQVUsQ0FBTTtJQUN6QixnQkFBZ0IsQ0FBQztJQUVqQixRQUFRO0lBQ1IsQ0FBQzt3R0FUVyxrQkFBa0I7NEZBQWxCLGtCQUFrQixvS0NkL0IsdWRBWUsseUREREgsZUFBZTs7NEZBR0osa0JBQWtCO2tCQVY5QixTQUFTOytCQUNDLGdCQUFnQixjQUNkLElBQUksV0FHUDt3QkFDUix3QkFBd0I7d0JBQ3hCLGVBQWU7cUJBQ2Y7d0RBS0UsTUFBTTtzQkFGUixLQUFLO3VCQUFDO3dCQUNOLFFBQVEsRUFBRSxJQUFJO3FCQUNkO2dCQUNRLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBMb2FkaW5nSW5saW5lRWNDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi8uLi93aWRnZXRzLWVjJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHRzZWxlY3RvcjogJ2FwcC1vZmZsaW5lLWVjJyxcclxuXHRzdGFuZGFsb25lOiB0cnVlLFxyXG5cdHRlbXBsYXRlVXJsOiAnLi9vZmZsaW5lLWVjLmNvbXBvbmVudC5odG1sJyxcclxuXHRzdHlsZVVybHM6IFsnLi9vZmZsaW5lLWVjLmNvbXBvbmVudC5zY3NzJ10sXHJcblx0aW1wb3J0czogW1xyXG5cdFx0TG9hZGluZ0lubGluZUVjQ29tcG9uZW50LFxyXG5cdFx0VHJhbnNsYXRlTW9kdWxlXHJcblx0XVxyXG59KVxyXG5leHBvcnQgY2xhc3MgT2ZmbGluZUVjQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHRASW5wdXQoe1xyXG5cdFx0cmVxdWlyZWQ6IHRydWUsXHJcblx0fSkgbWV0aG9kOiBhbnk7XHJcblx0QElucHV0KCkgdmVyaWZ5VmFsaWRhdGU6IGFueTtcclxuXHRASW5wdXQoKSBzZXRMb2FkaW5nOiBhbnk7XHJcblx0Y29uc3RydWN0b3IoKSB7IH1cclxuXHJcblx0bmdPbkluaXQoKSB7XHJcblx0fVxyXG5cclxufVxyXG4iLCI8cCBpZD1cImZhcXNcIiBjbGFzcz1cInF0IHB4LTVcIj57eyBtZXRob2QuZGVzY3JpcHRpb24gfX08L3A+XHJcbjxwIGNsYXNzPVwicHgtNVwiPnt7IG1ldGhvZC5pbnN0cnVjdGlvbnMgfX08L3A+XHJcbjxkaXYgY2xhc3M9XCJlbmQtYnV0dG9uXCI+XHJcblx0PGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5XCIgKGNsaWNrKT1cInNldExvYWRpbmcoKSAmJiB2ZXJpZnlWYWxpZGF0ZSgpXCI+e3tcclxuXHRcdCgncGF5LXdpdGgtb2ZmbGluZSd8IHRyYW5zbGF0ZSkgfX08L2J1dHRvbj5cclxuPC9kaXY+XHJcbjwhLS0gQGlmKGxvYWRpbmckIHwgYXN5bmM7IGFzIGxvYWRpbmcpe1xyXG4gIEBpZihsb2FkaW5nKXtcclxuICA8ZGl2IGNsYXNzPVwibXQtMlwiPlxyXG4gICAgPGFwcC1sb2FkaW5nLWlubGluZS1lYz48L2FwcC1sb2FkaW5nLWlubGluZS1lYz5cclxuICA8L2Rpdj5cclxuICB9XHJcbn0gLS0+Il19
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2ZmbGluZS1lYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvZWMtY29tcG9uZW50cy9jaGVja291dC1lYy9wYXltZW50LWVjL3BheW1lbnQtbWV0aG9kcy9vZmZsaW5lLWVjL29mZmxpbmUtZWMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvY2hlY2tvdXQtZWMvcGF5bWVudC1lYy9wYXltZW50LW1ldGhvZHMvb2ZmbGluZS1lYy9vZmZsaW5lLWVjLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7O0FBWXRELE1BQU0sT0FBTyxrQkFBa0I7SUFHM0IsTUFBTSxDQUFNO0lBQ04sY0FBYyxDQUFNO0lBQ3BCLFVBQVUsQ0FBTTtJQUN6QixnQkFBZ0IsQ0FBQztJQUVqQixRQUFRO0lBQ1IsQ0FBQzt3R0FUVyxrQkFBa0I7NEZBQWxCLGtCQUFrQixvS0NkL0IsK2JBWUsseUREREgsZUFBZTs7NEZBR0osa0JBQWtCO2tCQVY5QixTQUFTOytCQUNDLGdCQUFnQixjQUNkLElBQUksV0FHUDt3QkFDUix3QkFBd0I7d0JBQ3hCLGVBQWU7cUJBQ2Y7d0RBS0UsTUFBTTtzQkFGUixLQUFLO3VCQUFDO3dCQUNOLFFBQVEsRUFBRSxJQUFJO3FCQUNkO2dCQUNRLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTG9hZGluZ0lubGluZUVjQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vd2lkZ2V0cy1lYyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnYXBwLW9mZmxpbmUtZWMnLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZVVybDogJy4vb2ZmbGluZS1lYy5jb21wb25lbnQuaHRtbCcsXG5cdHN0eWxlVXJsczogWycuL29mZmxpbmUtZWMuY29tcG9uZW50LnNjc3MnXSxcblx0aW1wb3J0czogW1xuXHRcdExvYWRpbmdJbmxpbmVFY0NvbXBvbmVudCxcblx0XHRUcmFuc2xhdGVNb2R1bGVcblx0XVxufSlcbmV4cG9ydCBjbGFzcyBPZmZsaW5lRWNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXHRASW5wdXQoe1xuXHRcdHJlcXVpcmVkOiB0cnVlLFxuXHR9KSBtZXRob2Q6IGFueTtcblx0QElucHV0KCkgdmVyaWZ5VmFsaWRhdGU6IGFueTtcblx0QElucHV0KCkgc2V0TG9hZGluZzogYW55O1xuXHRjb25zdHJ1Y3RvcigpIHsgfVxuXG5cdG5nT25Jbml0KCkge1xuXHR9XG5cbn1cbiIsIjxwIGlkPVwiZmFxc1wiIGNsYXNzPVwicXQgcHgtNVwiPnt7IG1ldGhvZC5kZXNjcmlwdGlvbiB9fTwvcD5cbjxwIGNsYXNzPVwicHgtNVwiPnt7IG1ldGhvZC5pbnN0cnVjdGlvbnMgfX08L3A+XG48ZGl2IGNsYXNzPVwiZW5kLWJ1dHRvblwiPlxuXHQ8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnlcIiAoY2xpY2spPVwic2V0TG9hZGluZygpICYmIHZlcmlmeVZhbGlkYXRlKClcIj57e1xuXHRcdCgncGF5LXdpdGgtb2ZmbGluZSd8IHRyYW5zbGF0ZSkgfX08L2J1dHRvbj5cbjwvZGl2PlxuPCEtLSBAaWYobG9hZGluZyQgfCBhc3luYzsgYXMgbG9hZGluZyl7XG4gIEBpZihsb2FkaW5nKXtcbiAgPGRpdiBjbGFzcz1cIm10LTJcIj5cbiAgICA8YXBwLWxvYWRpbmctaW5saW5lLWVjPjwvYXBwLWxvYWRpbmctaW5saW5lLWVjPlxuICA8L2Rpdj5cbiAgfVxufSAtLT4iXX0=