@payloadcms/plugin-ecommerce 4.0.0-internal.293e026 → 4.0.0-internal.2a3c3bc

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 (156) hide show
  1. package/LICENSE.md +1 -1
  2. package/README.md +6 -0
  3. package/dist/collections/addresses/createAddressesCollection.d.ts.map +1 -1
  4. package/dist/collections/addresses/createAddressesCollection.js +1 -0
  5. package/dist/collections/addresses/createAddressesCollection.js.map +1 -1
  6. package/dist/collections/addresses/hooks/beforeChange.d.ts.map +1 -1
  7. package/dist/collections/addresses/hooks/beforeChange.js +3 -2
  8. package/dist/collections/addresses/hooks/beforeChange.js.map +1 -1
  9. package/dist/collections/carts/beforeChange.d.ts.map +1 -1
  10. package/dist/collections/carts/beforeChange.js +2 -0
  11. package/dist/collections/carts/beforeChange.js.map +1 -1
  12. package/dist/collections/carts/createCartsCollection.d.ts.map +1 -1
  13. package/dist/collections/carts/createCartsCollection.js +1 -0
  14. package/dist/collections/carts/createCartsCollection.js.map +1 -1
  15. package/dist/collections/carts/endpoints/addItem.d.ts.map +1 -1
  16. package/dist/collections/carts/endpoints/clearCart.d.ts.map +1 -1
  17. package/dist/collections/carts/endpoints/mergeCart.d.ts.map +1 -1
  18. package/dist/collections/carts/endpoints/removeItem.d.ts.map +1 -1
  19. package/dist/collections/carts/endpoints/updateItem.d.ts.map +1 -1
  20. package/dist/collections/carts/hasCartSecretAccess.d.ts.map +1 -1
  21. package/dist/collections/carts/operations/addItem.d.ts.map +1 -1
  22. package/dist/collections/carts/operations/clearCart.d.ts.map +1 -1
  23. package/dist/collections/carts/operations/createRequestWithSecret.d.ts.map +1 -1
  24. package/dist/collections/carts/operations/mergeCart.d.ts.map +1 -1
  25. package/dist/collections/carts/operations/removeItem.d.ts.map +1 -1
  26. package/dist/collections/carts/operations/updateItem.d.ts.map +1 -1
  27. package/dist/collections/orders/createOrdersCollection.d.ts.map +1 -1
  28. package/dist/collections/orders/createOrdersCollection.js +1 -0
  29. package/dist/collections/orders/createOrdersCollection.js.map +1 -1
  30. package/dist/collections/products/createProductsCollection.d.ts.map +1 -1
  31. package/dist/collections/products/createProductsCollection.js +1 -0
  32. package/dist/collections/products/createProductsCollection.js.map +1 -1
  33. package/dist/collections/transactions/createTransactionsCollection.d.ts.map +1 -1
  34. package/dist/collections/transactions/createTransactionsCollection.js +1 -0
  35. package/dist/collections/transactions/createTransactionsCollection.js.map +1 -1
  36. package/dist/collections/variants/createVariantOptionsCollection.d.ts.map +1 -1
  37. package/dist/collections/variants/createVariantOptionsCollection.js +1 -0
  38. package/dist/collections/variants/createVariantOptionsCollection.js.map +1 -1
  39. package/dist/collections/variants/createVariantTypesCollection.d.ts.map +1 -1
  40. package/dist/collections/variants/createVariantTypesCollection.js +1 -0
  41. package/dist/collections/variants/createVariantTypesCollection.js.map +1 -1
  42. package/dist/collections/variants/createVariantsCollection/hooks/beforeChange.d.ts.map +1 -1
  43. package/dist/collections/variants/createVariantsCollection/hooks/beforeChange.js +2 -0
  44. package/dist/collections/variants/createVariantsCollection/hooks/beforeChange.js.map +1 -1
  45. package/dist/collections/variants/createVariantsCollection/hooks/validateOptions.d.ts.map +1 -1
  46. package/dist/collections/variants/createVariantsCollection/hooks/validateOptions.js +1 -0
  47. package/dist/collections/variants/createVariantsCollection/hooks/validateOptions.js.map +1 -1
  48. package/dist/collections/variants/createVariantsCollection/index.d.ts.map +1 -1
  49. package/dist/collections/variants/createVariantsCollection/index.js +1 -0
  50. package/dist/collections/variants/createVariantsCollection/index.js.map +1 -1
  51. package/dist/endpoints/confirmOrder.d.ts.map +1 -1
  52. package/dist/endpoints/confirmOrder.js +306 -44
  53. package/dist/endpoints/confirmOrder.js.map +1 -1
  54. package/dist/endpoints/initiatePayment.d.ts.map +1 -1
  55. package/dist/endpoints/initiatePayment.js +2 -0
  56. package/dist/endpoints/initiatePayment.js.map +1 -1
  57. package/dist/exports/types.d.ts +1 -1
  58. package/dist/exports/types.d.ts.map +1 -1
  59. package/dist/exports/types.js.map +1 -1
  60. package/dist/fields/pricesField.d.ts.map +1 -1
  61. package/dist/fields/pricesField.js +39 -39
  62. package/dist/fields/pricesField.js.map +1 -1
  63. package/dist/fields/statusField.d.ts.map +1 -1
  64. package/dist/fields/statusField.js +5 -0
  65. package/dist/fields/statusField.js.map +1 -1
  66. package/dist/index.d.ts +1 -2
  67. package/dist/index.d.ts.map +1 -1
  68. package/dist/index.js +7 -2
  69. package/dist/index.js.map +1 -1
  70. package/dist/payments/adapters/stripe/confirmOrder.d.ts.map +1 -1
  71. package/dist/payments/adapters/stripe/confirmOrder.js +108 -75
  72. package/dist/payments/adapters/stripe/confirmOrder.js.map +1 -1
  73. package/dist/payments/adapters/stripe/initiatePayment.d.ts.map +1 -1
  74. package/dist/payments/adapters/stripe/initiatePayment.js +1 -0
  75. package/dist/payments/adapters/stripe/initiatePayment.js.map +1 -1
  76. package/dist/payments/adapters/stripe/validateSettlement.d.ts +37 -0
  77. package/dist/payments/adapters/stripe/validateSettlement.d.ts.map +1 -0
  78. package/dist/payments/adapters/stripe/validateSettlement.js +157 -0
  79. package/dist/payments/adapters/stripe/validateSettlement.js.map +1 -0
  80. package/dist/react/provider/index.d.ts.map +1 -1
  81. package/dist/react/provider/index.js +75 -34
  82. package/dist/react/provider/index.js.map +1 -1
  83. package/dist/react/provider/utilities.d.ts.map +1 -1
  84. package/dist/translations/languages/ar.d.ts.map +1 -1
  85. package/dist/translations/languages/az.d.ts.map +1 -1
  86. package/dist/translations/languages/bg.d.ts.map +1 -1
  87. package/dist/translations/languages/ca.d.ts.map +1 -1
  88. package/dist/translations/languages/cs.d.ts.map +1 -1
  89. package/dist/translations/languages/da.d.ts.map +1 -1
  90. package/dist/translations/languages/de.d.ts.map +1 -1
  91. package/dist/translations/languages/en.d.ts.map +1 -1
  92. package/dist/translations/languages/es.d.ts.map +1 -1
  93. package/dist/translations/languages/et.d.ts.map +1 -1
  94. package/dist/translations/languages/fa.d.ts.map +1 -1
  95. package/dist/translations/languages/fr.d.ts.map +1 -1
  96. package/dist/translations/languages/he.d.ts.map +1 -1
  97. package/dist/translations/languages/hr.d.ts.map +1 -1
  98. package/dist/translations/languages/hu.d.ts.map +1 -1
  99. package/dist/translations/languages/hy.d.ts.map +1 -1
  100. package/dist/translations/languages/is.d.ts.map +1 -1
  101. package/dist/translations/languages/it.d.ts.map +1 -1
  102. package/dist/translations/languages/ja.d.ts.map +1 -1
  103. package/dist/translations/languages/ko.d.ts.map +1 -1
  104. package/dist/translations/languages/lt.d.ts.map +1 -1
  105. package/dist/translations/languages/my.d.ts.map +1 -1
  106. package/dist/translations/languages/nb.d.ts.map +1 -1
  107. package/dist/translations/languages/nl.d.ts.map +1 -1
  108. package/dist/translations/languages/pl.d.ts.map +1 -1
  109. package/dist/translations/languages/pt.d.ts.map +1 -1
  110. package/dist/translations/languages/ro.d.ts.map +1 -1
  111. package/dist/translations/languages/rs.d.ts.map +1 -1
  112. package/dist/translations/languages/rsLatin.d.ts.map +1 -1
  113. package/dist/translations/languages/ru.d.ts.map +1 -1
  114. package/dist/translations/languages/sk.d.ts.map +1 -1
  115. package/dist/translations/languages/sl.d.ts.map +1 -1
  116. package/dist/translations/languages/sv.d.ts.map +1 -1
  117. package/dist/translations/languages/ta.d.ts.map +1 -1
  118. package/dist/translations/languages/th.d.ts.map +1 -1
  119. package/dist/translations/languages/tr.d.ts.map +1 -1
  120. package/dist/translations/languages/uk.d.ts.map +1 -1
  121. package/dist/translations/languages/vi.d.ts.map +1 -1
  122. package/dist/translations/languages/zh.d.ts.map +1 -1
  123. package/dist/translations/languages/zhTw.d.ts.map +1 -1
  124. package/dist/types/index.d.ts +33 -7
  125. package/dist/types/index.d.ts.map +1 -1
  126. package/dist/types/index.js.map +1 -1
  127. package/dist/ui/PriceInput/FormattedInput.js +2 -2
  128. package/dist/ui/PriceInput/FormattedInput.js.map +1 -1
  129. package/dist/ui/PriceInput/index.css +19 -31
  130. package/dist/ui/PriceInput/index.d.ts.map +1 -1
  131. package/dist/ui/PriceInput/index.js.map +1 -1
  132. package/dist/ui/PriceRowLabel/index.css +2 -2
  133. package/dist/ui/VariantOptionsSelector/index.css +8 -10
  134. package/dist/ui/VariantOptionsSelector/index.d.ts.map +1 -1
  135. package/dist/ui/VariantOptionsSelector/index.js +3 -1
  136. package/dist/ui/VariantOptionsSelector/index.js.map +1 -1
  137. package/dist/ui/utilities.d.ts.map +1 -1
  138. package/dist/utilities/accessComposition.d.ts.map +1 -1
  139. package/dist/utilities/getCollectionSlugMap.d.ts.map +1 -1
  140. package/dist/utilities/pushTypeScriptProperties.d.ts.map +1 -1
  141. package/dist/utilities/sanitizePluginConfig.d.ts.map +1 -1
  142. package/package.json +10 -10
  143. package/dist/@types/assets.d.js +0 -2
  144. package/dist/@types/assets.d.js.map +0 -1
  145. package/dist/collections/carts/operations/defaultCartItemMatcher.spec.js +0 -358
  146. package/dist/collections/carts/operations/defaultCartItemMatcher.spec.js.map +0 -1
  147. package/dist/payments/adapters/stripe/confirmOrder.spec.js +0 -166
  148. package/dist/payments/adapters/stripe/confirmOrder.spec.js.map +0 -1
  149. package/dist/utilities/accessComposition.spec.js +0 -765
  150. package/dist/utilities/accessComposition.spec.js.map +0 -1
  151. package/dist/utilities/defaultProductsValidation.spec.js +0 -384
  152. package/dist/utilities/defaultProductsValidation.spec.js.map +0 -1
  153. package/dist/utilities/getCollectionSlugMap.spec.js +0 -254
  154. package/dist/utilities/getCollectionSlugMap.spec.js.map +0 -1
  155. package/dist/utilities/sanitizePluginConfig.spec.js +0 -516
  156. package/dist/utilities/sanitizePluginConfig.spec.js.map +0 -1
@@ -68,10 +68,6 @@ export const EcommerceProvider = ({ addressesSlug = 'addresses', api, cartsSlug
68
68
  ...syncLocalStorage
69
69
  } : defaultLocalStorage;
70
70
  const { apiRoute = '/api', cartsFetchQuery = {} } = api || {};
71
- const baseAPIURL = formatAdminURL({
72
- apiRoute,
73
- path: ''
74
- });
75
71
  const config = useMemo(()=>({
76
72
  addressesSlug,
77
73
  api: {
@@ -126,7 +122,10 @@ export const EcommerceProvider = ({ addressesSlug = 'addresses', api, cartsSlug
126
122
  ]);
127
123
  const createCart = useCallback(async (initialData)=>{
128
124
  const query = qs.stringify(cartQuery);
129
- const response = await fetch(`${baseAPIURL}/${cartsSlug}?${query}`, {
125
+ const response = await fetch(formatAdminURL({
126
+ apiRoute,
127
+ path: `/${cartsSlug}?${query}`
128
+ }), {
130
129
  body: JSON.stringify({
131
130
  ...initialData,
132
131
  currency: selectedCurrency.code,
@@ -152,7 +151,7 @@ export const EcommerceProvider = ({ addressesSlug = 'addresses', api, cartsSlug
152
151
  }
153
152
  return data.doc;
154
153
  }, [
155
- baseAPIURL,
154
+ apiRoute,
156
155
  cartQuery,
157
156
  cartsSlug,
158
157
  selectedCurrency.code,
@@ -165,7 +164,10 @@ export const EcommerceProvider = ({ addressesSlug = 'addresses', api, cartsSlug
165
164
  secret: options.secret
166
165
  } : {}
167
166
  });
168
- const response = await fetch(`${baseAPIURL}/${cartsSlug}/${cartID}?${query}`, {
167
+ const response = await fetch(formatAdminURL({
168
+ apiRoute,
169
+ path: `/${cartsSlug}/${cartID}?${query}`
170
+ }), {
169
171
  credentials: 'include',
170
172
  headers: {
171
173
  'Content-Type': 'application/json'
@@ -182,7 +184,7 @@ export const EcommerceProvider = ({ addressesSlug = 'addresses', api, cartsSlug
182
184
  }
183
185
  return data;
184
186
  }, [
185
- baseAPIURL,
187
+ apiRoute,
186
188
  cartQuery,
187
189
  cartsSlug
188
190
  ]);
@@ -223,7 +225,10 @@ export const EcommerceProvider = ({ addressesSlug = 'addresses', api, cartsSlug
223
225
  try {
224
226
  if (cartID) {
225
227
  // Use server-side endpoint for adding items
226
- const response = await fetch(`${baseAPIURL}/${cartsSlug}/${cartID}/add-item`, {
228
+ const response = await fetch(formatAdminURL({
229
+ apiRoute,
230
+ path: `/${cartsSlug}/${cartID}/add-item`
231
+ }), {
227
232
  body: JSON.stringify({
228
233
  item,
229
234
  quantity,
@@ -274,7 +279,7 @@ export const EcommerceProvider = ({ addressesSlug = 'addresses', api, cartsSlug
274
279
  setIsLoading(false);
275
280
  }
276
281
  }, [
277
- baseAPIURL,
282
+ apiRoute,
278
283
  cartID,
279
284
  cartSecret,
280
285
  cartsSlug,
@@ -288,7 +293,10 @@ export const EcommerceProvider = ({ addressesSlug = 'addresses', api, cartsSlug
288
293
  }
289
294
  setIsLoading(true);
290
295
  try {
291
- const response = await fetch(`${baseAPIURL}/${cartsSlug}/${cartID}/remove-item`, {
296
+ const response = await fetch(formatAdminURL({
297
+ apiRoute,
298
+ path: `/${cartsSlug}/${cartID}/remove-item`
299
+ }), {
292
300
  body: JSON.stringify({
293
301
  itemID: targetID,
294
302
  secret: cartSecret
@@ -325,7 +333,7 @@ export const EcommerceProvider = ({ addressesSlug = 'addresses', api, cartsSlug
325
333
  setIsLoading(false);
326
334
  }
327
335
  }, [
328
- baseAPIURL,
336
+ apiRoute,
329
337
  cartID,
330
338
  cartSecret,
331
339
  cartsSlug,
@@ -338,7 +346,10 @@ export const EcommerceProvider = ({ addressesSlug = 'addresses', api, cartsSlug
338
346
  }
339
347
  setIsLoading(true);
340
348
  try {
341
- const response = await fetch(`${baseAPIURL}/${cartsSlug}/${cartID}/update-item`, {
349
+ const response = await fetch(formatAdminURL({
350
+ apiRoute,
351
+ path: `/${cartsSlug}/${cartID}/update-item`
352
+ }), {
342
353
  body: JSON.stringify({
343
354
  itemID: targetID,
344
355
  quantity: {
@@ -378,7 +389,7 @@ export const EcommerceProvider = ({ addressesSlug = 'addresses', api, cartsSlug
378
389
  setIsLoading(false);
379
390
  }
380
391
  }, [
381
- baseAPIURL,
392
+ apiRoute,
382
393
  cartID,
383
394
  cartSecret,
384
395
  cartsSlug,
@@ -391,7 +402,10 @@ export const EcommerceProvider = ({ addressesSlug = 'addresses', api, cartsSlug
391
402
  }
392
403
  setIsLoading(true);
393
404
  try {
394
- const response = await fetch(`${baseAPIURL}/${cartsSlug}/${cartID}/update-item`, {
405
+ const response = await fetch(formatAdminURL({
406
+ apiRoute,
407
+ path: `/${cartsSlug}/${cartID}/update-item`
408
+ }), {
395
409
  body: JSON.stringify({
396
410
  itemID: targetID,
397
411
  quantity: {
@@ -431,7 +445,7 @@ export const EcommerceProvider = ({ addressesSlug = 'addresses', api, cartsSlug
431
445
  setIsLoading(false);
432
446
  }
433
447
  }, [
434
- baseAPIURL,
448
+ apiRoute,
435
449
  cartID,
436
450
  cartSecret,
437
451
  cartsSlug,
@@ -444,7 +458,10 @@ export const EcommerceProvider = ({ addressesSlug = 'addresses', api, cartsSlug
444
458
  }
445
459
  setIsLoading(true);
446
460
  try {
447
- const response = await fetch(`${baseAPIURL}/${cartsSlug}/${cartID}/clear`, {
461
+ const response = await fetch(formatAdminURL({
462
+ apiRoute,
463
+ path: `/${cartsSlug}/${cartID}/clear`
464
+ }), {
448
465
  body: JSON.stringify({
449
466
  secret: cartSecret
450
467
  }),
@@ -480,7 +497,7 @@ export const EcommerceProvider = ({ addressesSlug = 'addresses', api, cartsSlug
480
497
  setIsLoading(false);
481
498
  }
482
499
  }, [
483
- baseAPIURL,
500
+ apiRoute,
484
501
  cartID,
485
502
  cartSecret,
486
503
  cartsSlug,
@@ -511,7 +528,10 @@ export const EcommerceProvider = ({ addressesSlug = 'addresses', api, cartsSlug
511
528
  setSelectedPaymentMethod(paymentMethodID);
512
529
  if (paymentMethod.initiatePayment) {
513
530
  try {
514
- const response = await fetch(`${baseAPIURL}/payments/${paymentMethodID}/initiate`, {
531
+ const response = await fetch(formatAdminURL({
532
+ apiRoute,
533
+ path: `/payments/${paymentMethodID}/initiate`
534
+ }), {
515
535
  body: JSON.stringify({
516
536
  cartID,
517
537
  currency: selectedCurrency.code,
@@ -544,7 +564,7 @@ export const EcommerceProvider = ({ addressesSlug = 'addresses', api, cartsSlug
544
564
  throw new Error(`Payment method "${paymentMethodID}" does not support payment initiation`);
545
565
  }
546
566
  }, [
547
- baseAPIURL,
567
+ apiRoute,
548
568
  cartID,
549
569
  cartSecret,
550
570
  debug,
@@ -560,7 +580,10 @@ export const EcommerceProvider = ({ addressesSlug = 'addresses', api, cartsSlug
560
580
  throw new Error(`Payment method with ID "${paymentMethodID}" not found`);
561
581
  }
562
582
  if (paymentMethod.confirmOrder) {
563
- const response = await fetch(`${baseAPIURL}/payments/${paymentMethodID}/confirm-order`, {
583
+ const response = await fetch(formatAdminURL({
584
+ apiRoute,
585
+ path: `/payments/${paymentMethodID}/confirm-order`
586
+ }), {
564
587
  body: JSON.stringify({
565
588
  cartID,
566
589
  currency: selectedCurrency.code,
@@ -586,7 +609,7 @@ export const EcommerceProvider = ({ addressesSlug = 'addresses', api, cartsSlug
586
609
  throw new Error(`Payment method "${paymentMethodID}" does not support order confirmation`);
587
610
  }
588
611
  }, [
589
- baseAPIURL,
612
+ apiRoute,
590
613
  cartID,
591
614
  cartSecret,
592
615
  paymentMethods,
@@ -601,7 +624,10 @@ export const EcommerceProvider = ({ addressesSlug = 'addresses', api, cartsSlug
601
624
  cart: true
602
625
  }
603
626
  });
604
- const response = await fetch(`${baseAPIURL}/${customersSlug}/me?${query}`, {
627
+ const response = await fetch(formatAdminURL({
628
+ apiRoute,
629
+ path: `/${customersSlug}/me?${query}`
630
+ }), {
605
631
  credentials: 'include',
606
632
  headers: {
607
633
  'Content-Type': 'application/json'
@@ -629,7 +655,7 @@ export const EcommerceProvider = ({ addressesSlug = 'addresses', api, cartsSlug
629
655
  throw new Error(`Failed to fetch user: ${error instanceof Error ? error.message : 'Unknown error'}`);
630
656
  }
631
657
  }, [
632
- baseAPIURL,
658
+ apiRoute,
633
659
  customersSlug,
634
660
  debug
635
661
  ]);
@@ -643,7 +669,10 @@ export const EcommerceProvider = ({ addressesSlug = 'addresses', api, cartsSlug
643
669
  limit: 0,
644
670
  pagination: false
645
671
  });
646
- const response = await fetch(`${baseAPIURL}/${addressesSlug}?${query}`, {
672
+ const response = await fetch(formatAdminURL({
673
+ apiRoute,
674
+ path: `/${addressesSlug}?${query}`
675
+ }), {
647
676
  credentials: 'include',
648
677
  headers: {
649
678
  'Content-Type': 'application/json'
@@ -671,7 +700,7 @@ export const EcommerceProvider = ({ addressesSlug = 'addresses', api, cartsSlug
671
700
  }
672
701
  }, [
673
702
  user,
674
- baseAPIURL,
703
+ apiRoute,
675
704
  addressesSlug,
676
705
  debug
677
706
  ]);
@@ -680,7 +709,10 @@ export const EcommerceProvider = ({ addressesSlug = 'addresses', api, cartsSlug
680
709
  throw new Error('User must be logged in to update or create an address');
681
710
  }
682
711
  try {
683
- const response = await fetch(`${baseAPIURL}/${addressesSlug}/${addressID}`, {
712
+ const response = await fetch(formatAdminURL({
713
+ apiRoute,
714
+ path: `/${addressesSlug}/${addressID}`
715
+ }), {
684
716
  body: JSON.stringify(address),
685
717
  credentials: 'include',
686
718
  headers: {
@@ -707,7 +739,7 @@ export const EcommerceProvider = ({ addressesSlug = 'addresses', api, cartsSlug
707
739
  }
708
740
  }, [
709
741
  user,
710
- baseAPIURL,
742
+ apiRoute,
711
743
  addressesSlug,
712
744
  getAddresses,
713
745
  debug
@@ -717,7 +749,10 @@ export const EcommerceProvider = ({ addressesSlug = 'addresses', api, cartsSlug
717
749
  throw new Error('User must be logged in to update or create an address');
718
750
  }
719
751
  try {
720
- const response = await fetch(`${baseAPIURL}/${addressesSlug}`, {
752
+ const response = await fetch(formatAdminURL({
753
+ apiRoute,
754
+ path: `/${addressesSlug}`
755
+ }), {
721
756
  body: JSON.stringify(address),
722
757
  credentials: 'include',
723
758
  headers: {
@@ -744,7 +779,7 @@ export const EcommerceProvider = ({ addressesSlug = 'addresses', api, cartsSlug
744
779
  }
745
780
  }, [
746
781
  user,
747
- baseAPIURL,
782
+ apiRoute,
748
783
  addressesSlug,
749
784
  getAddresses,
750
785
  debug
@@ -784,7 +819,10 @@ export const EcommerceProvider = ({ addressesSlug = 'addresses', api, cartsSlug
784
819
  */ const mergeCart = useCallback(async (targetCartID, sourceCartID, sourceSecret)=>{
785
820
  setIsLoading(true);
786
821
  try {
787
- const response = await fetch(`${baseAPIURL}/${cartsSlug}/${targetCartID}/merge`, {
822
+ const response = await fetch(formatAdminURL({
823
+ apiRoute,
824
+ path: `/${cartsSlug}/${targetCartID}/merge`
825
+ }), {
788
826
  body: JSON.stringify({
789
827
  sourceCartID,
790
828
  sourceSecret
@@ -818,7 +856,7 @@ export const EcommerceProvider = ({ addressesSlug = 'addresses', api, cartsSlug
818
856
  setIsLoading(false);
819
857
  }
820
858
  }, [
821
- baseAPIURL,
859
+ apiRoute,
822
860
  cartsSlug,
823
861
  debug,
824
862
  getCart
@@ -862,7 +900,10 @@ export const EcommerceProvider = ({ addressesSlug = 'addresses', api, cartsSlug
862
900
  } else {
863
901
  // User has no existing cart - transfer guest cart to user
864
902
  try {
865
- const response = await fetch(`${baseAPIURL}/${cartsSlug}/${guestCartID}?secret=${guestSecret}`, {
903
+ const response = await fetch(formatAdminURL({
904
+ apiRoute,
905
+ path: `/${cartsSlug}/${guestCartID}?secret=${guestSecret}`
906
+ }), {
866
907
  body: JSON.stringify({
867
908
  customer: fetchedUser.id,
868
909
  secret: null
@@ -897,7 +938,7 @@ export const EcommerceProvider = ({ addressesSlug = 'addresses', api, cartsSlug
897
938
  localStorage.setItem(localStorageConfig.key, cartID);
898
939
  }
899
940
  }, [
900
- baseAPIURL,
941
+ apiRoute,
901
942
  cartID,
902
943
  cartSecret,
903
944
  cartsSlug,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/react/provider/index.tsx"],"sourcesContent":["'use client'\nimport type { DefaultDocumentIDType, TypedUser } from 'payload'\n\nimport { deepMergeSimple, formatAdminURL } from 'payload/shared'\nimport * as qs from 'qs-esm'\nimport React, { createContext, use, useCallback, useEffect, useMemo, useRef, useState } from 'react'\n\nimport type {\n AddressesCollection,\n CartsCollection,\n ContextProps,\n Currency,\n EcommerceConfig,\n EcommerceContextType,\n} from '../../types/index.js'\n\nconst defaultContext: EcommerceContextType = {\n addItem: async () => {},\n clearCart: async () => {},\n clearSession: () => {},\n config: {\n addressesSlug: 'addresses',\n api: {\n apiRoute: '/api',\n },\n cartsSlug: 'carts',\n customersSlug: 'users',\n },\n confirmOrder: async () => {},\n createAddress: async () => {},\n currenciesConfig: {\n defaultCurrency: 'USD',\n supportedCurrencies: [\n {\n code: 'USD',\n decimals: 2,\n label: 'US Dollar',\n symbol: '$',\n },\n ],\n },\n currency: {\n code: 'USD',\n decimals: 2,\n label: 'US Dollar',\n symbol: '$',\n },\n decrementItem: async () => {},\n incrementItem: async () => {},\n initiatePayment: async () => {},\n isLoading: false,\n mergeCart: async () => {},\n onLogin: async () => {},\n onLogout: () => {},\n paymentMethods: [],\n refreshCart: async () => {},\n removeItem: async () => {},\n setCurrency: () => {},\n updateAddress: async () => {},\n user: null,\n}\n\nconst EcommerceContext = createContext<EcommerceContextType>(defaultContext)\n\nconst defaultLocalStorage = {\n key: 'cart',\n}\n\nexport const EcommerceProvider: React.FC<ContextProps> = ({\n addressesSlug = 'addresses',\n api,\n cartsSlug = 'carts',\n children,\n currenciesConfig = {\n defaultCurrency: 'USD',\n supportedCurrencies: [\n {\n code: 'USD',\n decimals: 2,\n label: 'US Dollar',\n symbol: '$',\n },\n ],\n },\n customersSlug = 'users',\n debug = false,\n paymentMethods = [],\n syncLocalStorage = true,\n}) => {\n const localStorageConfig =\n syncLocalStorage && typeof syncLocalStorage === 'object'\n ? {\n ...defaultLocalStorage,\n ...syncLocalStorage,\n }\n : defaultLocalStorage\n\n const { apiRoute = '/api', cartsFetchQuery = {} } = api || {}\n const baseAPIURL = formatAdminURL({\n apiRoute,\n path: '',\n })\n\n const config = useMemo<EcommerceConfig>(\n () => ({\n addressesSlug,\n api: {\n apiRoute,\n },\n cartsSlug,\n customersSlug,\n }),\n [addressesSlug, apiRoute, cartsSlug, customersSlug],\n )\n\n const [isLoading, setIsLoading] = useState(false)\n\n const [user, setUser] = useState<null | TypedUser>(null)\n\n const [addresses, setAddresses] = useState<AddressesCollection[]>()\n\n const hasRendered = useRef(false)\n\n /**\n * The ID of the cart associated with the current session.\n * This is used to identify the cart in the database or local storage.\n * It can be null if no cart has been created yet.\n */\n const [cartID, setCartID] = useState<DefaultDocumentIDType>()\n /**\n * The secret for accessing guest carts without authentication.\n * This is generated when a guest user creates a cart.\n */\n const [cartSecret, setCartSecret] = useState<string | undefined>(undefined)\n const [cart, setCart] = useState<CartsCollection>()\n\n const [selectedCurrency, setSelectedCurrency] = useState<Currency>(\n () =>\n currenciesConfig.supportedCurrencies.find(\n (c) => c.code === currenciesConfig.defaultCurrency,\n )!,\n )\n\n const [selectedPaymentMethod, setSelectedPaymentMethod] = useState<null | string>(null)\n\n const cartQuery = useMemo(() => {\n const priceField = `priceIn${selectedCurrency.code}`\n\n const baseQuery = {\n depth: 0,\n populate: {\n products: {\n [priceField]: true,\n },\n variants: {\n options: true,\n [priceField]: true,\n },\n },\n select: {\n items: true,\n subtotal: true,\n },\n }\n\n return deepMergeSimple(baseQuery, cartsFetchQuery)\n }, [selectedCurrency.code, cartsFetchQuery])\n\n const createCart = useCallback(\n async (initialData: Record<string, unknown>) => {\n const query = qs.stringify(cartQuery)\n\n const response = await fetch(`${baseAPIURL}/${cartsSlug}?${query}`, {\n body: JSON.stringify({\n ...initialData,\n currency: selectedCurrency.code,\n customer: user?.id,\n }),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n throw new Error(`Failed to create cart: ${errorText}`)\n }\n\n const data = await response.json()\n\n if (data.error) {\n throw new Error(`Cart creation error: ${data.error}`)\n }\n\n // Store the secret for guest cart access\n if (!user && data.doc?.secret) {\n setCartSecret(data.doc.secret)\n }\n\n return data.doc as CartsCollection\n },\n [baseAPIURL, cartQuery, cartsSlug, selectedCurrency.code, user],\n )\n\n const getCart = useCallback(\n async (cartID: DefaultDocumentIDType, options?: { secret?: string }) => {\n const query = qs.stringify({\n ...cartQuery,\n ...(options?.secret ? { secret: options.secret } : {}),\n })\n\n const response = await fetch(`${baseAPIURL}/${cartsSlug}/${cartID}?${query}`, {\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'GET',\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n throw new Error(`Failed to fetch cart: ${errorText}`)\n }\n\n const data = await response.json()\n\n if (data.error) {\n throw new Error(`Cart fetch error: ${data.error}`)\n }\n\n return data as CartsCollection\n },\n [baseAPIURL, cartQuery, cartsSlug],\n )\n\n const refreshCart = useCallback<EcommerceContextType['refreshCart']>(async () => {\n if (!cartID) {\n return\n }\n const updatedCart = await getCart(cartID)\n setCart(updatedCart)\n }, [cartID, getCart])\n\n // Persist cart ID and secret to localStorage\n useEffect(() => {\n if (hasRendered.current) {\n if (syncLocalStorage) {\n if (cartID) {\n localStorage.setItem(localStorageConfig.key, cartID as string)\n } else {\n localStorage.removeItem(localStorageConfig.key)\n }\n\n if (cartSecret) {\n localStorage.setItem(`${localStorageConfig.key}_secret`, cartSecret)\n } else {\n localStorage.removeItem(`${localStorageConfig.key}_secret`)\n }\n }\n }\n }, [cartID, cartSecret, localStorageConfig.key, syncLocalStorage])\n\n const addItem: EcommerceContextType['addItem'] = useCallback(\n async (item, quantity = 1) => {\n setIsLoading(true)\n try {\n if (cartID) {\n // Use server-side endpoint for adding items\n const response = await fetch(`${baseAPIURL}/${cartsSlug}/${cartID}/add-item`, {\n body: JSON.stringify({\n item,\n quantity,\n secret: cartSecret,\n }),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n throw new Error(`Failed to add item: ${errorText}`)\n }\n\n const result = await response.json()\n\n if (!result.success) {\n // Cart not found - reset state\n setCartID(undefined)\n setCart(undefined)\n setCartSecret(undefined)\n return\n }\n\n // Refresh cart with proper depth/populate settings for UI\n const refreshedCart = await getCart(cartID, { secret: cartSecret })\n setCart(refreshedCart)\n } else {\n // If no cartID exists, create a new cart with the item\n const newCart = await createCart({ items: [{ ...item, quantity }] })\n\n setCartID(newCart.id)\n setCart(newCart)\n }\n } catch (error) {\n if (debug) {\n // eslint-disable-next-line no-console\n console.error('Error adding item to cart:', error)\n }\n } finally {\n setIsLoading(false)\n }\n },\n [baseAPIURL, cartID, cartSecret, cartsSlug, createCart, debug, getCart],\n )\n\n const removeItem: EcommerceContextType['removeItem'] = useCallback(\n async (targetID) => {\n if (!cartID) {\n return\n }\n\n setIsLoading(true)\n try {\n const response = await fetch(`${baseAPIURL}/${cartsSlug}/${cartID}/remove-item`, {\n body: JSON.stringify({\n itemID: targetID,\n secret: cartSecret,\n }),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n throw new Error(`Failed to remove item: ${errorText}`)\n }\n\n const result = await response.json()\n\n if (!result.success) {\n // Cart not found - reset state\n setCartID(undefined)\n setCart(undefined)\n setCartSecret(undefined)\n return\n }\n\n // Refresh cart with proper depth/populate settings for UI\n const refreshedCart = await getCart(cartID, { secret: cartSecret })\n setCart(refreshedCart)\n } catch (error) {\n if (debug) {\n // eslint-disable-next-line no-console\n console.error('Error removing item from cart:', error)\n }\n } finally {\n setIsLoading(false)\n }\n },\n [baseAPIURL, cartID, cartSecret, cartsSlug, debug, getCart],\n )\n\n const incrementItem: EcommerceContextType['incrementItem'] = useCallback(\n async (targetID) => {\n if (!cartID) {\n return\n }\n\n setIsLoading(true)\n try {\n const response = await fetch(`${baseAPIURL}/${cartsSlug}/${cartID}/update-item`, {\n body: JSON.stringify({\n itemID: targetID,\n quantity: { $inc: 1 },\n secret: cartSecret,\n }),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n throw new Error(`Failed to increment item: ${errorText}`)\n }\n\n const result = await response.json()\n\n if (!result.success) {\n // Cart not found - reset state\n setCartID(undefined)\n setCart(undefined)\n setCartSecret(undefined)\n return\n }\n\n // Refresh cart with proper depth/populate settings for UI\n const refreshedCart = await getCart(cartID, { secret: cartSecret })\n setCart(refreshedCart)\n } catch (error) {\n if (debug) {\n // eslint-disable-next-line no-console\n console.error('Error incrementing item quantity:', error)\n }\n } finally {\n setIsLoading(false)\n }\n },\n [baseAPIURL, cartID, cartSecret, cartsSlug, debug, getCart],\n )\n\n const decrementItem: EcommerceContextType['decrementItem'] = useCallback(\n async (targetID) => {\n if (!cartID) {\n return\n }\n\n setIsLoading(true)\n try {\n const response = await fetch(`${baseAPIURL}/${cartsSlug}/${cartID}/update-item`, {\n body: JSON.stringify({\n itemID: targetID,\n quantity: { $inc: -1 },\n secret: cartSecret,\n }),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n throw new Error(`Failed to decrement item: ${errorText}`)\n }\n\n const result = await response.json()\n\n if (!result.success) {\n // Cart not found - reset state\n setCartID(undefined)\n setCart(undefined)\n setCartSecret(undefined)\n return\n }\n\n // Refresh cart with proper depth/populate settings for UI\n const refreshedCart = await getCart(cartID, { secret: cartSecret })\n setCart(refreshedCart)\n } catch (error) {\n if (debug) {\n // eslint-disable-next-line no-console\n console.error('Error decrementing item quantity:', error)\n }\n } finally {\n setIsLoading(false)\n }\n },\n [baseAPIURL, cartID, cartSecret, cartsSlug, debug, getCart],\n )\n\n const clearCart: EcommerceContextType['clearCart'] = useCallback(async () => {\n if (!cartID) {\n return\n }\n\n setIsLoading(true)\n try {\n const response = await fetch(`${baseAPIURL}/${cartsSlug}/${cartID}/clear`, {\n body: JSON.stringify({\n secret: cartSecret,\n }),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n throw new Error(`Failed to clear cart: ${errorText}`)\n }\n\n const result = await response.json()\n\n if (!result.success) {\n // Cart not found - reset state\n setCartID(undefined)\n setCart(undefined)\n setCartSecret(undefined)\n return\n }\n\n // Refresh cart with proper depth/populate settings for UI\n const refreshedCart = await getCart(cartID, { secret: cartSecret })\n setCart(refreshedCart)\n } catch (error) {\n if (debug) {\n // eslint-disable-next-line no-console\n console.error('Error clearing cart:', error)\n }\n } finally {\n setIsLoading(false)\n }\n }, [baseAPIURL, cartID, cartSecret, cartsSlug, debug, getCart])\n\n const setCurrency: EcommerceContextType['setCurrency'] = useCallback(\n (currency) => {\n if (selectedCurrency.code === currency) {\n return\n }\n\n const foundCurrency = currenciesConfig.supportedCurrencies.find((c) => c.code === currency)\n if (!foundCurrency) {\n throw new Error(`Currency with code \"${currency}\" not found in config`)\n }\n\n setSelectedCurrency(foundCurrency)\n },\n [currenciesConfig.supportedCurrencies, selectedCurrency.code],\n )\n\n const initiatePayment = useCallback<EcommerceContextType['initiatePayment']>(\n async (paymentMethodID, options) => {\n const paymentMethod = paymentMethods.find((method) => method.name === paymentMethodID)\n\n if (!paymentMethod) {\n throw new Error(`Payment method with ID \"${paymentMethodID}\" not found`)\n }\n\n if (!cartID) {\n throw new Error(`No cart is provided.`)\n }\n\n setSelectedPaymentMethod(paymentMethodID)\n\n if (paymentMethod.initiatePayment) {\n try {\n const response = await fetch(`${baseAPIURL}/payments/${paymentMethodID}/initiate`, {\n body: JSON.stringify({\n cartID,\n currency: selectedCurrency.code,\n secret: cartSecret,\n ...(options?.additionalData || {}),\n }),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n })\n\n if (!response.ok) {\n const responseError = await response.text()\n throw new Error(responseError)\n }\n\n const responseData = await response.json()\n\n if (responseData.error) {\n throw new Error(responseData.error)\n }\n\n return responseData\n } catch (error) {\n if (debug) {\n // eslint-disable-next-line no-console\n console.error('Error initiating payment:', error)\n }\n throw new Error(error instanceof Error ? error.message : 'Failed to initiate payment')\n }\n } else {\n throw new Error(`Payment method \"${paymentMethodID}\" does not support payment initiation`)\n }\n },\n [baseAPIURL, cartID, cartSecret, debug, paymentMethods, selectedCurrency.code],\n )\n\n const confirmOrder = useCallback<EcommerceContextType['initiatePayment']>(\n async (paymentMethodID, options) => {\n if (!cartID) {\n throw new Error(`Cart is empty.`)\n }\n\n const paymentMethod = paymentMethods.find((pm) => pm.name === paymentMethodID)\n\n if (!paymentMethod) {\n throw new Error(`Payment method with ID \"${paymentMethodID}\" not found`)\n }\n\n if (paymentMethod.confirmOrder) {\n const response = await fetch(`${baseAPIURL}/payments/${paymentMethodID}/confirm-order`, {\n body: JSON.stringify({\n cartID,\n currency: selectedCurrency.code,\n secret: cartSecret,\n ...(options?.additionalData || {}),\n }),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n })\n\n if (!response.ok) {\n const responseError = await response.text()\n throw new Error(responseError)\n }\n\n const responseData = await response.json()\n\n if (responseData.error) {\n throw new Error(responseData.error)\n }\n\n return responseData\n } else {\n throw new Error(`Payment method \"${paymentMethodID}\" does not support order confirmation`)\n }\n },\n [baseAPIURL, cartID, cartSecret, paymentMethods, selectedCurrency.code],\n )\n\n const getUser = useCallback(async () => {\n try {\n const query = qs.stringify({\n depth: 0,\n select: {\n id: true,\n cart: true,\n },\n })\n\n const response = await fetch(`${baseAPIURL}/${customersSlug}/me?${query}`, {\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'GET',\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n throw new Error(`Failed to fetch user: ${errorText}`)\n }\n\n const userData = await response.json()\n\n if (userData.error) {\n throw new Error(`User fetch error: ${userData.error}`)\n }\n\n if (userData.user) {\n setUser(userData.user as TypedUser)\n return userData.user as TypedUser\n }\n } catch (error) {\n if (debug) {\n // eslint-disable-next-line no-console\n console.error('Error fetching user:', error)\n }\n setUser(null)\n throw new Error(\n `Failed to fetch user: ${error instanceof Error ? error.message : 'Unknown error'}`,\n )\n }\n }, [baseAPIURL, customersSlug, debug])\n\n const getAddresses = useCallback(async () => {\n if (!user) {\n return\n }\n\n try {\n const query = qs.stringify({\n depth: 0,\n limit: 0,\n pagination: false,\n })\n\n const response = await fetch(`${baseAPIURL}/${addressesSlug}?${query}`, {\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'GET',\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n\n throw new Error(errorText)\n }\n\n const data = await response.json()\n\n if (data.error) {\n throw new Error(`Address fetch error: ${data.error}`)\n }\n\n if (data.docs && data.docs.length > 0) {\n setAddresses(data.docs)\n }\n } catch (error) {\n if (debug) {\n // eslint-disable-next-line no-console\n console.error('Error fetching addresses:', error)\n }\n setAddresses(undefined)\n throw new Error(\n `Failed to fetch addresses: ${error instanceof Error ? error.message : 'Unknown error'}`,\n )\n }\n }, [user, baseAPIURL, addressesSlug, debug])\n\n const updateAddress = useCallback<EcommerceContextType['updateAddress']>(\n async (addressID, address) => {\n if (!user) {\n throw new Error('User must be logged in to update or create an address')\n }\n\n try {\n const response = await fetch(`${baseAPIURL}/${addressesSlug}/${addressID}`, {\n body: JSON.stringify(address),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'PATCH',\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n throw new Error(`Failed to update or create address: ${errorText}`)\n }\n\n const data = await response.json()\n\n if (data.error) {\n throw new Error(`Address update/create error: ${data.error}`)\n }\n\n // Refresh addresses after updating or creating\n await getAddresses()\n } catch (error) {\n if (debug) {\n // eslint-disable-next-line no-console\n console.error('Error updating or creating address:', error)\n }\n\n throw new Error(\n `Failed to update or create address: ${error instanceof Error ? error.message : 'Unknown error'}`,\n )\n }\n },\n [user, baseAPIURL, addressesSlug, getAddresses, debug],\n )\n\n const createAddress = useCallback<EcommerceContextType['createAddress']>(\n async (address) => {\n if (!user) {\n throw new Error('User must be logged in to update or create an address')\n }\n\n try {\n const response = await fetch(`${baseAPIURL}/${addressesSlug}`, {\n body: JSON.stringify(address),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n throw new Error(`Failed to update or create address: ${errorText}`)\n }\n\n const data = await response.json()\n\n if (data.error) {\n throw new Error(`Address update/create error: ${data.error}`)\n }\n\n // Refresh addresses after updating or creating\n await getAddresses()\n } catch (error) {\n if (debug) {\n // eslint-disable-next-line no-console\n console.error('Error updating or creating address:', error)\n }\n\n throw new Error(\n `Failed to update or create address: ${error instanceof Error ? error.message : 'Unknown error'}`,\n )\n }\n },\n [user, baseAPIURL, addressesSlug, getAddresses, debug],\n )\n\n /**\n * Clears all ecommerce session data from state and localStorage.\n * Used during logout to ensure no user data persists.\n */\n const clearSession = useCallback(() => {\n setCart(undefined)\n setCartID(undefined)\n setCartSecret(undefined)\n setAddresses(undefined)\n setUser(null)\n\n if (syncLocalStorage) {\n localStorage.removeItem(localStorageConfig.key)\n localStorage.removeItem(`${localStorageConfig.key}_secret`)\n }\n }, [localStorageConfig.key, syncLocalStorage])\n\n /**\n * Called during logout. Clears all session data.\n */\n const onLogout = useCallback(() => {\n clearSession()\n }, [clearSession])\n\n /**\n * Merges items from a source cart into a target cart.\n * Useful for merging a guest cart into a user's existing cart after login.\n *\n * @param targetCartID - The ID of the cart to merge items into\n * @param sourceCartID - The ID of the cart to merge items from\n * @param sourceSecret - The secret for the source cart (required for guest carts)\n * @returns The merged cart\n */\n const mergeCart = useCallback<EcommerceContextType['mergeCart']>(\n async (targetCartID, sourceCartID, sourceSecret) => {\n setIsLoading(true)\n try {\n const response = await fetch(`${baseAPIURL}/${cartsSlug}/${targetCartID}/merge`, {\n body: JSON.stringify({\n sourceCartID,\n sourceSecret,\n }),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n throw new Error(`Failed to merge carts: ${errorText}`)\n }\n\n const result = await response.json()\n\n if (!result.success) {\n throw new Error(result.message || 'Failed to merge carts')\n }\n\n // Refresh cart with proper depth/populate settings for UI\n const refreshedCart = await getCart(targetCartID)\n setCart(refreshedCart)\n setCartID(targetCartID)\n\n return refreshedCart\n } catch (error) {\n if (debug) {\n // eslint-disable-next-line no-console\n console.error('Error merging carts:', error)\n }\n throw error\n } finally {\n setIsLoading(false)\n }\n },\n [baseAPIURL, cartsSlug, debug, getCart],\n )\n\n /**\n * Called after login to properly set up cart state.\n * Handles merging guest cart with user's existing cart if applicable.\n */\n const onLogin = useCallback(async () => {\n // Store reference to any existing guest cart before fetching user\n const guestCartID = cartID\n const guestSecret = cartSecret\n\n // Fetch fresh user data\n const fetchedUser = await getUser()\n\n if (!fetchedUser) {\n // No user means login failed, keep current state\n return\n }\n\n // Clear the guest cart secret - authenticated users don't need it\n setCartSecret(undefined)\n if (syncLocalStorage) {\n localStorage.removeItem(`${localStorageConfig.key}_secret`)\n }\n\n // Check if user has an existing cart\n const userCartID =\n fetchedUser.cart?.docs && fetchedUser.cart.docs.length > 0\n ? typeof fetchedUser.cart.docs[0] === 'object'\n ? fetchedUser.cart.docs[0].id\n : fetchedUser.cart.docs[0]\n : undefined\n\n if (guestCartID && guestSecret) {\n // Guest had a cart - need to handle merge/transfer\n if (userCartID) {\n // User has existing cart - merge guest cart into user's cart\n try {\n await mergeCart(userCartID, guestCartID, guestSecret)\n } catch (error) {\n if (debug) {\n // eslint-disable-next-line no-console\n console.error('Error merging carts:', error)\n }\n // Fall back to user's cart\n const userCart = await getCart(userCartID)\n setCart(userCart)\n setCartID(userCartID)\n }\n } else {\n // User has no existing cart - transfer guest cart to user\n try {\n const response = await fetch(\n `${baseAPIURL}/${cartsSlug}/${guestCartID}?secret=${guestSecret}`,\n {\n body: JSON.stringify({\n customer: fetchedUser.id,\n secret: null, // Clear the secret since it's now owned by user\n }),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'PATCH',\n },\n )\n\n if (response.ok) {\n // Fetch updated cart\n const updatedCart = await getCart(guestCartID)\n setCart(updatedCart)\n setCartID(guestCartID)\n }\n } catch (error) {\n if (debug) {\n // eslint-disable-next-line no-console\n console.error('Error transferring cart to user:', error)\n }\n }\n }\n } else if (userCartID) {\n // No guest cart, but user has a cart - fetch it\n const userCart = await getCart(userCartID)\n setCart(userCart)\n setCartID(userCartID)\n }\n\n // Update localStorage with user's cart ID (no secret needed)\n if (syncLocalStorage && cartID) {\n localStorage.setItem(localStorageConfig.key, cartID as string)\n }\n }, [\n baseAPIURL,\n cartID,\n cartSecret,\n cartsSlug,\n debug,\n getCart,\n getUser,\n localStorageConfig.key,\n mergeCart,\n syncLocalStorage,\n ])\n\n // If localStorage is enabled, restore cart from storage\n useEffect(() => {\n if (!hasRendered.current) {\n if (syncLocalStorage) {\n const storedCartID = localStorage.getItem(localStorageConfig.key)\n const storedSecret = localStorage.getItem(`${localStorageConfig.key}_secret`)\n\n if (storedCartID) {\n getCart(storedCartID, { secret: storedSecret || undefined })\n .then((fetchedCart) => {\n setCart(fetchedCart)\n setCartID(storedCartID as DefaultDocumentIDType)\n if (storedSecret) {\n setCartSecret(storedSecret)\n }\n })\n .catch((_) => {\n // console.error('Error fetching cart from localStorage:', error)\n // If there's an error fetching the cart, clear it from localStorage\n localStorage.removeItem(localStorageConfig.key)\n localStorage.removeItem(`${localStorageConfig.key}_secret`)\n setCartID(undefined)\n setCart(undefined)\n setCartSecret(undefined)\n })\n }\n }\n\n hasRendered.current = true\n\n void getUser().then((user) => {\n if (user && user.cart?.docs && user.cart.docs.length > 0) {\n // If the user has carts, we can set the cartID to the first cart\n const cartID =\n typeof user.cart.docs[0] === 'object' ? user.cart.docs[0].id : user.cart.docs[0]\n\n if (cartID) {\n getCart(cartID)\n .then((fetchedCart) => {\n setCart(fetchedCart)\n setCartID(cartID)\n })\n .catch((error) => {\n if (debug) {\n // eslint-disable-next-line no-console\n console.error('Error fetching user cart:', error)\n }\n\n setCart(undefined)\n setCartID(undefined)\n\n throw new Error(`Failed to fetch user cart: ${error.message}`)\n })\n }\n }\n })\n }\n }, [debug, getAddresses, getCart, getUser, localStorageConfig.key, syncLocalStorage])\n\n useEffect(() => {\n if (user) {\n // If the user is logged in, fetch their addresses\n void getAddresses()\n } else {\n // If no user is logged in, clear addresses\n setAddresses(undefined)\n }\n }, [getAddresses, user])\n\n return (\n <EcommerceContext\n value={{\n addItem,\n addresses,\n cart,\n clearCart,\n clearSession,\n config,\n confirmOrder,\n createAddress,\n currenciesConfig,\n currency: selectedCurrency,\n decrementItem,\n incrementItem,\n initiatePayment,\n isLoading,\n mergeCart,\n onLogin,\n onLogout,\n paymentMethods,\n refreshCart,\n removeItem,\n selectedPaymentMethod,\n setCurrency,\n updateAddress,\n user,\n }}\n >\n {children}\n </EcommerceContext>\n )\n}\n\nexport const useEcommerce = () => {\n const context = use(EcommerceContext)\n\n if (!context) {\n throw new Error('useEcommerce must be used within an EcommerceProvider')\n }\n\n return context\n}\n\nexport const useEcommerceConfig = () => {\n const { config } = useEcommerce()\n\n return config\n}\n\nexport const useCurrency = () => {\n const { currenciesConfig, currency, setCurrency } = useEcommerce()\n\n const formatCurrency = useCallback(\n (value?: null | number, options?: { currency?: Currency; locale?: string }): string => {\n if (value === undefined || value === null) {\n return ''\n }\n\n const currencyToUse = options?.currency || currency\n if (!currencyToUse) {\n return value.toString()\n }\n\n const { code, decimals, symbolDisplay } = currencyToUse\n\n const locale = options?.locale || 'en'\n\n return new Intl.NumberFormat(locale, {\n currency: code,\n currencyDisplay: symbolDisplay || 'symbol',\n maximumFractionDigits: decimals,\n minimumFractionDigits: decimals,\n style: 'currency',\n }).format(value / Math.pow(10, decimals))\n },\n [currency],\n )\n\n if (!currency) {\n throw new Error('useCurrency must be used within an EcommerceProvider')\n }\n\n return {\n currency,\n formatCurrency,\n setCurrency,\n supportedCurrencies: currenciesConfig.supportedCurrencies,\n }\n}\n\nexport function useCart<T extends CartsCollection>() {\n const {\n addItem,\n cart,\n clearCart,\n decrementItem,\n incrementItem,\n isLoading,\n refreshCart,\n removeItem,\n } = useEcommerce()\n\n if (!addItem) {\n throw new Error('useCart must be used within an EcommerceProvider')\n }\n\n return {\n addItem,\n cart: cart as T,\n clearCart,\n decrementItem,\n incrementItem,\n isLoading,\n refreshCart,\n removeItem,\n }\n}\n\nexport const usePayments = () => {\n const { confirmOrder, initiatePayment, isLoading, paymentMethods, selectedPaymentMethod } =\n useEcommerce()\n\n if (!initiatePayment) {\n throw new Error('usePayments must be used within an EcommerceProvider')\n }\n\n return { confirmOrder, initiatePayment, isLoading, paymentMethods, selectedPaymentMethod }\n}\n\nexport function useAddresses<T extends AddressesCollection>() {\n const { addresses, createAddress, isLoading, updateAddress } = useEcommerce()\n\n if (!createAddress) {\n throw new Error('usePayments must be used within an EcommerceProvider')\n }\n\n return { addresses: addresses as T[], createAddress, isLoading, updateAddress }\n}\n"],"names":["deepMergeSimple","formatAdminURL","qs","React","createContext","use","useCallback","useEffect","useMemo","useRef","useState","defaultContext","addItem","clearCart","clearSession","config","addressesSlug","api","apiRoute","cartsSlug","customersSlug","confirmOrder","createAddress","currenciesConfig","defaultCurrency","supportedCurrencies","code","decimals","label","symbol","currency","decrementItem","incrementItem","initiatePayment","isLoading","mergeCart","onLogin","onLogout","paymentMethods","refreshCart","removeItem","setCurrency","updateAddress","user","EcommerceContext","defaultLocalStorage","key","EcommerceProvider","children","debug","syncLocalStorage","localStorageConfig","cartsFetchQuery","baseAPIURL","path","setIsLoading","setUser","addresses","setAddresses","hasRendered","cartID","setCartID","cartSecret","setCartSecret","undefined","cart","setCart","selectedCurrency","setSelectedCurrency","find","c","selectedPaymentMethod","setSelectedPaymentMethod","cartQuery","priceField","baseQuery","depth","populate","products","variants","options","select","items","subtotal","createCart","initialData","query","stringify","response","fetch","body","JSON","customer","id","credentials","headers","method","ok","errorText","text","Error","data","json","error","doc","secret","getCart","updatedCart","current","localStorage","setItem","item","quantity","result","success","refreshedCart","newCart","console","targetID","itemID","$inc","foundCurrency","paymentMethodID","paymentMethod","name","additionalData","responseError","responseData","message","pm","getUser","userData","getAddresses","limit","pagination","docs","length","addressID","address","targetCartID","sourceCartID","sourceSecret","guestCartID","guestSecret","fetchedUser","userCartID","userCart","storedCartID","getItem","storedSecret","then","fetchedCart","catch","_","value","useEcommerce","context","useEcommerceConfig","useCurrency","formatCurrency","currencyToUse","toString","symbolDisplay","locale","Intl","NumberFormat","currencyDisplay","maximumFractionDigits","minimumFractionDigits","style","format","Math","pow","useCart","usePayments","useAddresses"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/react/provider/index.tsx"],"sourcesContent":["'use client'\nimport type { DefaultDocumentIDType } from 'payload'\n\nimport { deepMergeSimple, formatAdminURL } from 'payload/shared'\nimport * as qs from 'qs-esm'\nimport React, { createContext, use, useCallback, useEffect, useMemo, useRef, useState } from 'react'\n\nimport type {\n AddressesCollection,\n CartsCollection,\n ContextProps,\n Currency,\n EcommerceConfig,\n EcommerceContextType,\n UserWithCart,\n} from '../../types/index.js'\n\nconst defaultContext: EcommerceContextType = {\n addItem: async () => {},\n clearCart: async () => {},\n clearSession: () => {},\n config: {\n addressesSlug: 'addresses',\n api: {\n apiRoute: '/api',\n },\n cartsSlug: 'carts',\n customersSlug: 'users',\n },\n confirmOrder: async () => {},\n createAddress: async () => {},\n currenciesConfig: {\n defaultCurrency: 'USD',\n supportedCurrencies: [\n {\n code: 'USD',\n decimals: 2,\n label: 'US Dollar',\n symbol: '$',\n },\n ],\n },\n currency: {\n code: 'USD',\n decimals: 2,\n label: 'US Dollar',\n symbol: '$',\n },\n decrementItem: async () => {},\n incrementItem: async () => {},\n initiatePayment: async () => {},\n isLoading: false,\n mergeCart: async () => {},\n onLogin: async () => {},\n onLogout: () => {},\n paymentMethods: [],\n refreshCart: async () => {},\n removeItem: async () => {},\n setCurrency: () => {},\n updateAddress: async () => {},\n user: null,\n}\n\nconst EcommerceContext = createContext<EcommerceContextType>(defaultContext)\n\nconst defaultLocalStorage = {\n key: 'cart',\n}\n\nexport const EcommerceProvider: React.FC<ContextProps> = ({\n addressesSlug = 'addresses',\n api,\n cartsSlug = 'carts',\n children,\n currenciesConfig = {\n defaultCurrency: 'USD',\n supportedCurrencies: [\n {\n code: 'USD',\n decimals: 2,\n label: 'US Dollar',\n symbol: '$',\n },\n ],\n },\n customersSlug = 'users',\n debug = false,\n paymentMethods = [],\n syncLocalStorage = true,\n}) => {\n const localStorageConfig =\n syncLocalStorage && typeof syncLocalStorage === 'object'\n ? {\n ...defaultLocalStorage,\n ...syncLocalStorage,\n }\n : defaultLocalStorage\n\n const { apiRoute = '/api', cartsFetchQuery = {} } = api || {}\n const config = useMemo<EcommerceConfig>(\n () => ({\n addressesSlug,\n api: {\n apiRoute,\n },\n cartsSlug,\n customersSlug,\n }),\n [addressesSlug, apiRoute, cartsSlug, customersSlug],\n )\n\n const [isLoading, setIsLoading] = useState(false)\n\n const [user, setUser] = useState<null | UserWithCart>(null)\n\n const [addresses, setAddresses] = useState<AddressesCollection[]>()\n\n const hasRendered = useRef(false)\n\n /**\n * The ID of the cart associated with the current session.\n * This is used to identify the cart in the database or local storage.\n * It can be null if no cart has been created yet.\n */\n const [cartID, setCartID] = useState<DefaultDocumentIDType>()\n /**\n * The secret for accessing guest carts without authentication.\n * This is generated when a guest user creates a cart.\n */\n const [cartSecret, setCartSecret] = useState<string | undefined>(undefined)\n const [cart, setCart] = useState<CartsCollection>()\n\n const [selectedCurrency, setSelectedCurrency] = useState<Currency>(\n () =>\n currenciesConfig.supportedCurrencies.find(\n (c) => c.code === currenciesConfig.defaultCurrency,\n )!,\n )\n\n const [selectedPaymentMethod, setSelectedPaymentMethod] = useState<null | string>(null)\n\n const cartQuery = useMemo(() => {\n const priceField = `priceIn${selectedCurrency.code}`\n\n const baseQuery = {\n depth: 0,\n populate: {\n products: {\n [priceField]: true,\n },\n variants: {\n options: true,\n [priceField]: true,\n },\n },\n select: {\n items: true,\n subtotal: true,\n },\n }\n\n return deepMergeSimple(baseQuery, cartsFetchQuery)\n }, [selectedCurrency.code, cartsFetchQuery])\n\n const createCart = useCallback(\n async (initialData: Record<string, unknown>) => {\n const query = qs.stringify(cartQuery)\n\n const response = await fetch(formatAdminURL({ apiRoute, path: `/${cartsSlug}?${query}` }), {\n body: JSON.stringify({\n ...initialData,\n currency: selectedCurrency.code,\n customer: user?.id,\n }),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n throw new Error(`Failed to create cart: ${errorText}`)\n }\n\n const data = await response.json()\n\n if (data.error) {\n throw new Error(`Cart creation error: ${data.error}`)\n }\n\n // Store the secret for guest cart access\n if (!user && data.doc?.secret) {\n setCartSecret(data.doc.secret)\n }\n\n return data.doc as CartsCollection\n },\n [apiRoute, cartQuery, cartsSlug, selectedCurrency.code, user],\n )\n\n const getCart = useCallback(\n async (cartID: DefaultDocumentIDType, options?: { secret?: string }) => {\n const query = qs.stringify({\n ...cartQuery,\n ...(options?.secret ? { secret: options.secret } : {}),\n })\n\n const response = await fetch(\n formatAdminURL({ apiRoute, path: `/${cartsSlug}/${cartID}?${query}` }),\n {\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'GET',\n },\n )\n\n if (!response.ok) {\n const errorText = await response.text()\n throw new Error(`Failed to fetch cart: ${errorText}`)\n }\n\n const data = await response.json()\n\n if (data.error) {\n throw new Error(`Cart fetch error: ${data.error}`)\n }\n\n return data as CartsCollection\n },\n [apiRoute, cartQuery, cartsSlug],\n )\n\n const refreshCart = useCallback<EcommerceContextType['refreshCart']>(async () => {\n if (!cartID) {\n return\n }\n const updatedCart = await getCart(cartID)\n setCart(updatedCart)\n }, [cartID, getCart])\n\n // Persist cart ID and secret to localStorage\n useEffect(() => {\n if (hasRendered.current) {\n if (syncLocalStorage) {\n if (cartID) {\n localStorage.setItem(localStorageConfig.key, cartID as string)\n } else {\n localStorage.removeItem(localStorageConfig.key)\n }\n\n if (cartSecret) {\n localStorage.setItem(`${localStorageConfig.key}_secret`, cartSecret)\n } else {\n localStorage.removeItem(`${localStorageConfig.key}_secret`)\n }\n }\n }\n }, [cartID, cartSecret, localStorageConfig.key, syncLocalStorage])\n\n const addItem: EcommerceContextType['addItem'] = useCallback(\n async (item, quantity = 1) => {\n setIsLoading(true)\n try {\n if (cartID) {\n // Use server-side endpoint for adding items\n const response = await fetch(\n formatAdminURL({ apiRoute, path: `/${cartsSlug}/${cartID}/add-item` }),\n {\n body: JSON.stringify({\n item,\n quantity,\n secret: cartSecret,\n }),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n },\n )\n\n if (!response.ok) {\n const errorText = await response.text()\n throw new Error(`Failed to add item: ${errorText}`)\n }\n\n const result = await response.json()\n\n if (!result.success) {\n // Cart not found - reset state\n setCartID(undefined)\n setCart(undefined)\n setCartSecret(undefined)\n return\n }\n\n // Refresh cart with proper depth/populate settings for UI\n const refreshedCart = await getCart(cartID, { secret: cartSecret })\n setCart(refreshedCart)\n } else {\n // If no cartID exists, create a new cart with the item\n const newCart = await createCart({ items: [{ ...item, quantity }] })\n\n setCartID(newCart.id)\n setCart(newCart)\n }\n } catch (error) {\n if (debug) {\n // eslint-disable-next-line no-console\n console.error('Error adding item to cart:', error)\n }\n } finally {\n setIsLoading(false)\n }\n },\n [apiRoute, cartID, cartSecret, cartsSlug, createCart, debug, getCart],\n )\n\n const removeItem: EcommerceContextType['removeItem'] = useCallback(\n async (targetID) => {\n if (!cartID) {\n return\n }\n\n setIsLoading(true)\n try {\n const response = await fetch(\n formatAdminURL({ apiRoute, path: `/${cartsSlug}/${cartID}/remove-item` }),\n {\n body: JSON.stringify({\n itemID: targetID,\n secret: cartSecret,\n }),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n },\n )\n\n if (!response.ok) {\n const errorText = await response.text()\n throw new Error(`Failed to remove item: ${errorText}`)\n }\n\n const result = await response.json()\n\n if (!result.success) {\n // Cart not found - reset state\n setCartID(undefined)\n setCart(undefined)\n setCartSecret(undefined)\n return\n }\n\n // Refresh cart with proper depth/populate settings for UI\n const refreshedCart = await getCart(cartID, { secret: cartSecret })\n setCart(refreshedCart)\n } catch (error) {\n if (debug) {\n // eslint-disable-next-line no-console\n console.error('Error removing item from cart:', error)\n }\n } finally {\n setIsLoading(false)\n }\n },\n [apiRoute, cartID, cartSecret, cartsSlug, debug, getCart],\n )\n\n const incrementItem: EcommerceContextType['incrementItem'] = useCallback(\n async (targetID) => {\n if (!cartID) {\n return\n }\n\n setIsLoading(true)\n try {\n const response = await fetch(\n formatAdminURL({ apiRoute, path: `/${cartsSlug}/${cartID}/update-item` }),\n {\n body: JSON.stringify({\n itemID: targetID,\n quantity: { $inc: 1 },\n secret: cartSecret,\n }),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n },\n )\n\n if (!response.ok) {\n const errorText = await response.text()\n throw new Error(`Failed to increment item: ${errorText}`)\n }\n\n const result = await response.json()\n\n if (!result.success) {\n // Cart not found - reset state\n setCartID(undefined)\n setCart(undefined)\n setCartSecret(undefined)\n return\n }\n\n // Refresh cart with proper depth/populate settings for UI\n const refreshedCart = await getCart(cartID, { secret: cartSecret })\n setCart(refreshedCart)\n } catch (error) {\n if (debug) {\n // eslint-disable-next-line no-console\n console.error('Error incrementing item quantity:', error)\n }\n } finally {\n setIsLoading(false)\n }\n },\n [apiRoute, cartID, cartSecret, cartsSlug, debug, getCart],\n )\n\n const decrementItem: EcommerceContextType['decrementItem'] = useCallback(\n async (targetID) => {\n if (!cartID) {\n return\n }\n\n setIsLoading(true)\n try {\n const response = await fetch(\n formatAdminURL({ apiRoute, path: `/${cartsSlug}/${cartID}/update-item` }),\n {\n body: JSON.stringify({\n itemID: targetID,\n quantity: { $inc: -1 },\n secret: cartSecret,\n }),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n },\n )\n\n if (!response.ok) {\n const errorText = await response.text()\n throw new Error(`Failed to decrement item: ${errorText}`)\n }\n\n const result = await response.json()\n\n if (!result.success) {\n // Cart not found - reset state\n setCartID(undefined)\n setCart(undefined)\n setCartSecret(undefined)\n return\n }\n\n // Refresh cart with proper depth/populate settings for UI\n const refreshedCart = await getCart(cartID, { secret: cartSecret })\n setCart(refreshedCart)\n } catch (error) {\n if (debug) {\n // eslint-disable-next-line no-console\n console.error('Error decrementing item quantity:', error)\n }\n } finally {\n setIsLoading(false)\n }\n },\n [apiRoute, cartID, cartSecret, cartsSlug, debug, getCart],\n )\n\n const clearCart: EcommerceContextType['clearCart'] = useCallback(async () => {\n if (!cartID) {\n return\n }\n\n setIsLoading(true)\n try {\n const response = await fetch(\n formatAdminURL({ apiRoute, path: `/${cartsSlug}/${cartID}/clear` }),\n {\n body: JSON.stringify({\n secret: cartSecret,\n }),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n },\n )\n\n if (!response.ok) {\n const errorText = await response.text()\n throw new Error(`Failed to clear cart: ${errorText}`)\n }\n\n const result = await response.json()\n\n if (!result.success) {\n // Cart not found - reset state\n setCartID(undefined)\n setCart(undefined)\n setCartSecret(undefined)\n return\n }\n\n // Refresh cart with proper depth/populate settings for UI\n const refreshedCart = await getCart(cartID, { secret: cartSecret })\n setCart(refreshedCart)\n } catch (error) {\n if (debug) {\n // eslint-disable-next-line no-console\n console.error('Error clearing cart:', error)\n }\n } finally {\n setIsLoading(false)\n }\n }, [apiRoute, cartID, cartSecret, cartsSlug, debug, getCart])\n\n const setCurrency: EcommerceContextType['setCurrency'] = useCallback(\n (currency) => {\n if (selectedCurrency.code === currency) {\n return\n }\n\n const foundCurrency = currenciesConfig.supportedCurrencies.find((c) => c.code === currency)\n if (!foundCurrency) {\n throw new Error(`Currency with code \"${currency}\" not found in config`)\n }\n\n setSelectedCurrency(foundCurrency)\n },\n [currenciesConfig.supportedCurrencies, selectedCurrency.code],\n )\n\n const initiatePayment = useCallback<EcommerceContextType['initiatePayment']>(\n async (paymentMethodID, options) => {\n const paymentMethod = paymentMethods.find((method) => method.name === paymentMethodID)\n\n if (!paymentMethod) {\n throw new Error(`Payment method with ID \"${paymentMethodID}\" not found`)\n }\n\n if (!cartID) {\n throw new Error(`No cart is provided.`)\n }\n\n setSelectedPaymentMethod(paymentMethodID)\n\n if (paymentMethod.initiatePayment) {\n try {\n const response = await fetch(\n formatAdminURL({ apiRoute, path: `/payments/${paymentMethodID}/initiate` }),\n {\n body: JSON.stringify({\n cartID,\n currency: selectedCurrency.code,\n secret: cartSecret,\n ...(options?.additionalData || {}),\n }),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n },\n )\n\n if (!response.ok) {\n const responseError = await response.text()\n throw new Error(responseError)\n }\n\n const responseData = await response.json()\n\n if (responseData.error) {\n throw new Error(responseData.error)\n }\n\n return responseData\n } catch (error) {\n if (debug) {\n // eslint-disable-next-line no-console\n console.error('Error initiating payment:', error)\n }\n throw new Error(error instanceof Error ? error.message : 'Failed to initiate payment')\n }\n } else {\n throw new Error(`Payment method \"${paymentMethodID}\" does not support payment initiation`)\n }\n },\n [apiRoute, cartID, cartSecret, debug, paymentMethods, selectedCurrency.code],\n )\n\n const confirmOrder = useCallback<EcommerceContextType['initiatePayment']>(\n async (paymentMethodID, options) => {\n if (!cartID) {\n throw new Error(`Cart is empty.`)\n }\n\n const paymentMethod = paymentMethods.find((pm) => pm.name === paymentMethodID)\n\n if (!paymentMethod) {\n throw new Error(`Payment method with ID \"${paymentMethodID}\" not found`)\n }\n\n if (paymentMethod.confirmOrder) {\n const response = await fetch(\n formatAdminURL({ apiRoute, path: `/payments/${paymentMethodID}/confirm-order` }),\n {\n body: JSON.stringify({\n cartID,\n currency: selectedCurrency.code,\n secret: cartSecret,\n ...(options?.additionalData || {}),\n }),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n },\n )\n\n if (!response.ok) {\n const responseError = await response.text()\n throw new Error(responseError)\n }\n\n const responseData = await response.json()\n\n if (responseData.error) {\n throw new Error(responseData.error)\n }\n\n return responseData\n } else {\n throw new Error(`Payment method \"${paymentMethodID}\" does not support order confirmation`)\n }\n },\n [apiRoute, cartID, cartSecret, paymentMethods, selectedCurrency.code],\n )\n\n const getUser = useCallback(async () => {\n try {\n const query = qs.stringify({\n depth: 0,\n select: {\n id: true,\n cart: true,\n },\n })\n\n const response = await fetch(\n formatAdminURL({ apiRoute, path: `/${customersSlug}/me?${query}` }),\n {\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'GET',\n },\n )\n\n if (!response.ok) {\n const errorText = await response.text()\n throw new Error(`Failed to fetch user: ${errorText}`)\n }\n\n const userData: {\n error?: string\n user?: UserWithCart\n } = await response.json()\n\n if (userData.error) {\n throw new Error(`User fetch error: ${userData.error}`)\n }\n\n if (userData.user) {\n setUser(userData.user)\n return userData.user\n }\n } catch (error) {\n if (debug) {\n // eslint-disable-next-line no-console\n console.error('Error fetching user:', error)\n }\n setUser(null)\n throw new Error(\n `Failed to fetch user: ${error instanceof Error ? error.message : 'Unknown error'}`,\n )\n }\n }, [apiRoute, customersSlug, debug])\n\n const getAddresses = useCallback(async () => {\n if (!user) {\n return\n }\n\n try {\n const query = qs.stringify({\n depth: 0,\n limit: 0,\n pagination: false,\n })\n\n const response = await fetch(\n formatAdminURL({ apiRoute, path: `/${addressesSlug}?${query}` }),\n {\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'GET',\n },\n )\n\n if (!response.ok) {\n const errorText = await response.text()\n\n throw new Error(errorText)\n }\n\n const data = await response.json()\n\n if (data.error) {\n throw new Error(`Address fetch error: ${data.error}`)\n }\n\n if (data.docs && data.docs.length > 0) {\n setAddresses(data.docs)\n }\n } catch (error) {\n if (debug) {\n // eslint-disable-next-line no-console\n console.error('Error fetching addresses:', error)\n }\n setAddresses(undefined)\n throw new Error(\n `Failed to fetch addresses: ${error instanceof Error ? error.message : 'Unknown error'}`,\n )\n }\n }, [user, apiRoute, addressesSlug, debug])\n\n const updateAddress = useCallback<EcommerceContextType['updateAddress']>(\n async (addressID, address) => {\n if (!user) {\n throw new Error('User must be logged in to update or create an address')\n }\n\n try {\n const response = await fetch(\n formatAdminURL({ apiRoute, path: `/${addressesSlug}/${addressID}` }),\n {\n body: JSON.stringify(address),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'PATCH',\n },\n )\n\n if (!response.ok) {\n const errorText = await response.text()\n throw new Error(`Failed to update or create address: ${errorText}`)\n }\n\n const data = await response.json()\n\n if (data.error) {\n throw new Error(`Address update/create error: ${data.error}`)\n }\n\n // Refresh addresses after updating or creating\n await getAddresses()\n } catch (error) {\n if (debug) {\n // eslint-disable-next-line no-console\n console.error('Error updating or creating address:', error)\n }\n\n throw new Error(\n `Failed to update or create address: ${error instanceof Error ? error.message : 'Unknown error'}`,\n )\n }\n },\n [user, apiRoute, addressesSlug, getAddresses, debug],\n )\n\n const createAddress = useCallback<EcommerceContextType['createAddress']>(\n async (address) => {\n if (!user) {\n throw new Error('User must be logged in to update or create an address')\n }\n\n try {\n const response = await fetch(formatAdminURL({ apiRoute, path: `/${addressesSlug}` }), {\n body: JSON.stringify(address),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n throw new Error(`Failed to update or create address: ${errorText}`)\n }\n\n const data = await response.json()\n\n if (data.error) {\n throw new Error(`Address update/create error: ${data.error}`)\n }\n\n // Refresh addresses after updating or creating\n await getAddresses()\n } catch (error) {\n if (debug) {\n // eslint-disable-next-line no-console\n console.error('Error updating or creating address:', error)\n }\n\n throw new Error(\n `Failed to update or create address: ${error instanceof Error ? error.message : 'Unknown error'}`,\n )\n }\n },\n [user, apiRoute, addressesSlug, getAddresses, debug],\n )\n\n /**\n * Clears all ecommerce session data from state and localStorage.\n * Used during logout to ensure no user data persists.\n */\n const clearSession = useCallback(() => {\n setCart(undefined)\n setCartID(undefined)\n setCartSecret(undefined)\n setAddresses(undefined)\n setUser(null)\n\n if (syncLocalStorage) {\n localStorage.removeItem(localStorageConfig.key)\n localStorage.removeItem(`${localStorageConfig.key}_secret`)\n }\n }, [localStorageConfig.key, syncLocalStorage])\n\n /**\n * Called during logout. Clears all session data.\n */\n const onLogout = useCallback(() => {\n clearSession()\n }, [clearSession])\n\n /**\n * Merges items from a source cart into a target cart.\n * Useful for merging a guest cart into a user's existing cart after login.\n *\n * @param targetCartID - The ID of the cart to merge items into\n * @param sourceCartID - The ID of the cart to merge items from\n * @param sourceSecret - The secret for the source cart (required for guest carts)\n * @returns The merged cart\n */\n const mergeCart = useCallback<EcommerceContextType['mergeCart']>(\n async (targetCartID, sourceCartID, sourceSecret) => {\n setIsLoading(true)\n try {\n const response = await fetch(\n formatAdminURL({ apiRoute, path: `/${cartsSlug}/${targetCartID}/merge` }),\n {\n body: JSON.stringify({\n sourceCartID,\n sourceSecret,\n }),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n },\n )\n\n if (!response.ok) {\n const errorText = await response.text()\n throw new Error(`Failed to merge carts: ${errorText}`)\n }\n\n const result = await response.json()\n\n if (!result.success) {\n throw new Error(result.message || 'Failed to merge carts')\n }\n\n // Refresh cart with proper depth/populate settings for UI\n const refreshedCart = await getCart(targetCartID)\n setCart(refreshedCart)\n setCartID(targetCartID)\n\n return refreshedCart\n } catch (error) {\n if (debug) {\n // eslint-disable-next-line no-console\n console.error('Error merging carts:', error)\n }\n throw error\n } finally {\n setIsLoading(false)\n }\n },\n [apiRoute, cartsSlug, debug, getCart],\n )\n\n /**\n * Called after login to properly set up cart state.\n * Handles merging guest cart with user's existing cart if applicable.\n */\n const onLogin = useCallback(async () => {\n // Store reference to any existing guest cart before fetching user\n const guestCartID = cartID\n const guestSecret = cartSecret\n\n // Fetch fresh user data\n const fetchedUser = await getUser()\n\n if (!fetchedUser) {\n // No user means login failed, keep current state\n return\n }\n\n // Clear the guest cart secret - authenticated users don't need it\n setCartSecret(undefined)\n if (syncLocalStorage) {\n localStorage.removeItem(`${localStorageConfig.key}_secret`)\n }\n\n // Check if user has an existing cart\n const userCartID =\n fetchedUser.cart?.docs && fetchedUser.cart.docs.length > 0\n ? typeof fetchedUser.cart.docs[0] === 'object'\n ? fetchedUser.cart.docs[0].id\n : fetchedUser.cart.docs[0]\n : undefined\n\n if (guestCartID && guestSecret) {\n // Guest had a cart - need to handle merge/transfer\n if (userCartID) {\n // User has existing cart - merge guest cart into user's cart\n try {\n await mergeCart(userCartID, guestCartID, guestSecret)\n } catch (error) {\n if (debug) {\n // eslint-disable-next-line no-console\n console.error('Error merging carts:', error)\n }\n // Fall back to user's cart\n const userCart = await getCart(userCartID)\n setCart(userCart)\n setCartID(userCartID)\n }\n } else {\n // User has no existing cart - transfer guest cart to user\n try {\n const response = await fetch(\n formatAdminURL({\n apiRoute,\n path: `/${cartsSlug}/${guestCartID}?secret=${guestSecret}`,\n }),\n {\n body: JSON.stringify({\n customer: fetchedUser.id,\n secret: null, // Clear the secret since it's now owned by user\n }),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'PATCH',\n },\n )\n\n if (response.ok) {\n // Fetch updated cart\n const updatedCart = await getCart(guestCartID)\n setCart(updatedCart)\n setCartID(guestCartID)\n }\n } catch (error) {\n if (debug) {\n // eslint-disable-next-line no-console\n console.error('Error transferring cart to user:', error)\n }\n }\n }\n } else if (userCartID) {\n // No guest cart, but user has a cart - fetch it\n const userCart = await getCart(userCartID)\n setCart(userCart)\n setCartID(userCartID)\n }\n\n // Update localStorage with user's cart ID (no secret needed)\n if (syncLocalStorage && cartID) {\n localStorage.setItem(localStorageConfig.key, cartID as string)\n }\n }, [\n apiRoute,\n cartID,\n cartSecret,\n cartsSlug,\n debug,\n getCart,\n getUser,\n localStorageConfig.key,\n mergeCart,\n syncLocalStorage,\n ])\n\n // If localStorage is enabled, restore cart from storage\n useEffect(() => {\n if (!hasRendered.current) {\n if (syncLocalStorage) {\n const storedCartID = localStorage.getItem(localStorageConfig.key)\n const storedSecret = localStorage.getItem(`${localStorageConfig.key}_secret`)\n\n if (storedCartID) {\n getCart(storedCartID, { secret: storedSecret || undefined })\n .then((fetchedCart) => {\n setCart(fetchedCart)\n setCartID(storedCartID as DefaultDocumentIDType)\n if (storedSecret) {\n setCartSecret(storedSecret)\n }\n })\n .catch((_) => {\n // console.error('Error fetching cart from localStorage:', error)\n // If there's an error fetching the cart, clear it from localStorage\n localStorage.removeItem(localStorageConfig.key)\n localStorage.removeItem(`${localStorageConfig.key}_secret`)\n setCartID(undefined)\n setCart(undefined)\n setCartSecret(undefined)\n })\n }\n }\n\n hasRendered.current = true\n\n void getUser().then((user) => {\n if (user && user.cart?.docs && user.cart.docs.length > 0) {\n // If the user has carts, we can set the cartID to the first cart\n const cartID =\n typeof user.cart.docs[0] === 'object' ? user.cart.docs[0].id : user.cart.docs[0]\n\n if (cartID) {\n getCart(cartID)\n .then((fetchedCart) => {\n setCart(fetchedCart)\n setCartID(cartID)\n })\n .catch((error) => {\n if (debug) {\n // eslint-disable-next-line no-console\n console.error('Error fetching user cart:', error)\n }\n\n setCart(undefined)\n setCartID(undefined)\n\n throw new Error(`Failed to fetch user cart: ${error.message}`)\n })\n }\n }\n })\n }\n }, [debug, getAddresses, getCart, getUser, localStorageConfig.key, syncLocalStorage])\n\n useEffect(() => {\n if (user) {\n // If the user is logged in, fetch their addresses\n void getAddresses()\n } else {\n // If no user is logged in, clear addresses\n setAddresses(undefined)\n }\n }, [getAddresses, user])\n\n return (\n <EcommerceContext\n value={{\n addItem,\n addresses,\n cart,\n clearCart,\n clearSession,\n config,\n confirmOrder,\n createAddress,\n currenciesConfig,\n currency: selectedCurrency,\n decrementItem,\n incrementItem,\n initiatePayment,\n isLoading,\n mergeCart,\n onLogin,\n onLogout,\n paymentMethods,\n refreshCart,\n removeItem,\n selectedPaymentMethod,\n setCurrency,\n updateAddress,\n user,\n }}\n >\n {children}\n </EcommerceContext>\n )\n}\n\nexport const useEcommerce = () => {\n const context = use(EcommerceContext)\n\n if (!context) {\n throw new Error('useEcommerce must be used within an EcommerceProvider')\n }\n\n return context\n}\n\nexport const useEcommerceConfig = () => {\n const { config } = useEcommerce()\n\n return config\n}\n\nexport const useCurrency = () => {\n const { currenciesConfig, currency, setCurrency } = useEcommerce()\n\n const formatCurrency = useCallback(\n (value?: null | number, options?: { currency?: Currency; locale?: string }): string => {\n if (value === undefined || value === null) {\n return ''\n }\n\n const currencyToUse = options?.currency || currency\n if (!currencyToUse) {\n return value.toString()\n }\n\n const { code, decimals, symbolDisplay } = currencyToUse\n\n const locale = options?.locale || 'en'\n\n return new Intl.NumberFormat(locale, {\n currency: code,\n currencyDisplay: symbolDisplay || 'symbol',\n maximumFractionDigits: decimals,\n minimumFractionDigits: decimals,\n style: 'currency',\n }).format(value / Math.pow(10, decimals))\n },\n [currency],\n )\n\n if (!currency) {\n throw new Error('useCurrency must be used within an EcommerceProvider')\n }\n\n return {\n currency,\n formatCurrency,\n setCurrency,\n supportedCurrencies: currenciesConfig.supportedCurrencies,\n }\n}\n\nexport function useCart<T extends CartsCollection>() {\n const {\n addItem,\n cart,\n clearCart,\n decrementItem,\n incrementItem,\n isLoading,\n refreshCart,\n removeItem,\n } = useEcommerce()\n\n if (!addItem) {\n throw new Error('useCart must be used within an EcommerceProvider')\n }\n\n return {\n addItem,\n cart: cart as T,\n clearCart,\n decrementItem,\n incrementItem,\n isLoading,\n refreshCart,\n removeItem,\n }\n}\n\nexport const usePayments = () => {\n const { confirmOrder, initiatePayment, isLoading, paymentMethods, selectedPaymentMethod } =\n useEcommerce()\n\n if (!initiatePayment) {\n throw new Error('usePayments must be used within an EcommerceProvider')\n }\n\n return { confirmOrder, initiatePayment, isLoading, paymentMethods, selectedPaymentMethod }\n}\n\nexport function useAddresses<T extends AddressesCollection>() {\n const { addresses, createAddress, isLoading, updateAddress } = useEcommerce()\n\n if (!createAddress) {\n throw new Error('usePayments must be used within an EcommerceProvider')\n }\n\n return { addresses: addresses as T[], createAddress, isLoading, updateAddress }\n}\n"],"names":["deepMergeSimple","formatAdminURL","qs","React","createContext","use","useCallback","useEffect","useMemo","useRef","useState","defaultContext","addItem","clearCart","clearSession","config","addressesSlug","api","apiRoute","cartsSlug","customersSlug","confirmOrder","createAddress","currenciesConfig","defaultCurrency","supportedCurrencies","code","decimals","label","symbol","currency","decrementItem","incrementItem","initiatePayment","isLoading","mergeCart","onLogin","onLogout","paymentMethods","refreshCart","removeItem","setCurrency","updateAddress","user","EcommerceContext","defaultLocalStorage","key","EcommerceProvider","children","debug","syncLocalStorage","localStorageConfig","cartsFetchQuery","setIsLoading","setUser","addresses","setAddresses","hasRendered","cartID","setCartID","cartSecret","setCartSecret","undefined","cart","setCart","selectedCurrency","setSelectedCurrency","find","c","selectedPaymentMethod","setSelectedPaymentMethod","cartQuery","priceField","baseQuery","depth","populate","products","variants","options","select","items","subtotal","createCart","initialData","query","stringify","response","fetch","path","body","JSON","customer","id","credentials","headers","method","ok","errorText","text","Error","data","json","error","doc","secret","getCart","updatedCart","current","localStorage","setItem","item","quantity","result","success","refreshedCart","newCart","console","targetID","itemID","$inc","foundCurrency","paymentMethodID","paymentMethod","name","additionalData","responseError","responseData","message","pm","getUser","userData","getAddresses","limit","pagination","docs","length","addressID","address","targetCartID","sourceCartID","sourceSecret","guestCartID","guestSecret","fetchedUser","userCartID","userCart","storedCartID","getItem","storedSecret","then","fetchedCart","catch","_","value","useEcommerce","context","useEcommerceConfig","useCurrency","formatCurrency","currencyToUse","toString","symbolDisplay","locale","Intl","NumberFormat","currencyDisplay","maximumFractionDigits","minimumFractionDigits","style","format","Math","pow","useCart","usePayments","useAddresses"],"mappings":"AAAA;;AAGA,SAASA,eAAe,EAAEC,cAAc,QAAQ,iBAAgB;AAChE,YAAYC,QAAQ,SAAQ;AAC5B,OAAOC,SAASC,aAAa,EAAEC,GAAG,EAAEC,WAAW,EAAEC,SAAS,EAAEC,OAAO,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,QAAO;AAYpG,MAAMC,iBAAuC;IAC3CC,SAAS,WAAa;IACtBC,WAAW,WAAa;IACxBC,cAAc,KAAO;IACrBC,QAAQ;QACNC,eAAe;QACfC,KAAK;YACHC,UAAU;QACZ;QACAC,WAAW;QACXC,eAAe;IACjB;IACAC,cAAc,WAAa;IAC3BC,eAAe,WAAa;IAC5BC,kBAAkB;QAChBC,iBAAiB;QACjBC,qBAAqB;YACnB;gBACEC,MAAM;gBACNC,UAAU;gBACVC,OAAO;gBACPC,QAAQ;YACV;SACD;IACH;IACAC,UAAU;QACRJ,MAAM;QACNC,UAAU;QACVC,OAAO;QACPC,QAAQ;IACV;IACAE,eAAe,WAAa;IAC5BC,eAAe,WAAa;IAC5BC,iBAAiB,WAAa;IAC9BC,WAAW;IACXC,WAAW,WAAa;IACxBC,SAAS,WAAa;IACtBC,UAAU,KAAO;IACjBC,gBAAgB,EAAE;IAClBC,aAAa,WAAa;IAC1BC,YAAY,WAAa;IACzBC,aAAa,KAAO;IACpBC,eAAe,WAAa;IAC5BC,MAAM;AACR;AAEA,MAAMC,iCAAmBxC,cAAoCO;AAE7D,MAAMkC,sBAAsB;IAC1BC,KAAK;AACP;AAEA,OAAO,MAAMC,oBAA4C,CAAC,EACxD/B,gBAAgB,WAAW,EAC3BC,GAAG,EACHE,YAAY,OAAO,EACnB6B,QAAQ,EACRzB,mBAAmB;IACjBC,iBAAiB;IACjBC,qBAAqB;QACnB;YACEC,MAAM;YACNC,UAAU;YACVC,OAAO;YACPC,QAAQ;QACV;KACD;AACH,CAAC,EACDT,gBAAgB,OAAO,EACvB6B,QAAQ,KAAK,EACbX,iBAAiB,EAAE,EACnBY,mBAAmB,IAAI,EACxB;IACC,MAAMC,qBACJD,oBAAoB,OAAOA,qBAAqB,WAC5C;QACE,GAAGL,mBAAmB;QACtB,GAAGK,gBAAgB;IACrB,IACAL;IAEN,MAAM,EAAE3B,WAAW,MAAM,EAAEkC,kBAAkB,CAAC,CAAC,EAAE,GAAGnC,OAAO,CAAC;IAC5D,MAAMF,SAASP,QACb,IAAO,CAAA;YACLQ;YACAC,KAAK;gBACHC;YACF;YACAC;YACAC;QACF,CAAA,GACA;QAACJ;QAAeE;QAAUC;QAAWC;KAAc;IAGrD,MAAM,CAACc,WAAWmB,aAAa,GAAG3C,SAAS;IAE3C,MAAM,CAACiC,MAAMW,QAAQ,GAAG5C,SAA8B;IAEtD,MAAM,CAAC6C,WAAWC,aAAa,GAAG9C;IAElC,MAAM+C,cAAchD,OAAO;IAE3B;;;;GAIC,GACD,MAAM,CAACiD,QAAQC,UAAU,GAAGjD;IAC5B;;;GAGC,GACD,MAAM,CAACkD,YAAYC,cAAc,GAAGnD,SAA6BoD;IACjE,MAAM,CAACC,MAAMC,QAAQ,GAAGtD;IAExB,MAAM,CAACuD,kBAAkBC,oBAAoB,GAAGxD,SAC9C,IACEa,iBAAiBE,mBAAmB,CAAC0C,IAAI,CACvC,CAACC,IAAMA,EAAE1C,IAAI,KAAKH,iBAAiBC,eAAe;IAIxD,MAAM,CAAC6C,uBAAuBC,yBAAyB,GAAG5D,SAAwB;IAElF,MAAM6D,YAAY/D,QAAQ;QACxB,MAAMgE,aAAa,CAAC,OAAO,EAAEP,iBAAiBvC,IAAI,EAAE;QAEpD,MAAM+C,YAAY;YAChBC,OAAO;YACPC,UAAU;gBACRC,UAAU;oBACR,CAACJ,WAAW,EAAE;gBAChB;gBACAK,UAAU;oBACRC,SAAS;oBACT,CAACN,WAAW,EAAE;gBAChB;YACF;YACAO,QAAQ;gBACNC,OAAO;gBACPC,UAAU;YACZ;QACF;QAEA,OAAOjF,gBAAgByE,WAAWrB;IACpC,GAAG;QAACa,iBAAiBvC,IAAI;QAAE0B;KAAgB;IAE3C,MAAM8B,aAAa5E,YACjB,OAAO6E;QACL,MAAMC,QAAQlF,GAAGmF,SAAS,CAACd;QAE3B,MAAMe,WAAW,MAAMC,MAAMtF,eAAe;YAAEiB;YAAUsE,MAAM,CAAC,CAAC,EAAErE,UAAU,CAAC,EAAEiE,OAAO;QAAC,IAAI;YACzFK,MAAMC,KAAKL,SAAS,CAAC;gBACnB,GAAGF,WAAW;gBACdrD,UAAUmC,iBAAiBvC,IAAI;gBAC/BiE,UAAUhD,MAAMiD;YAClB;YACAC,aAAa;YACbC,SAAS;gBACP,gBAAgB;YAClB;YACAC,QAAQ;QACV;QAEA,IAAI,CAACT,SAASU,EAAE,EAAE;YAChB,MAAMC,YAAY,MAAMX,SAASY,IAAI;YACrC,MAAM,IAAIC,MAAM,CAAC,uBAAuB,EAAEF,WAAW;QACvD;QAEA,MAAMG,OAAO,MAAMd,SAASe,IAAI;QAEhC,IAAID,KAAKE,KAAK,EAAE;YACd,MAAM,IAAIH,MAAM,CAAC,qBAAqB,EAAEC,KAAKE,KAAK,EAAE;QACtD;QAEA,yCAAyC;QACzC,IAAI,CAAC3D,QAAQyD,KAAKG,GAAG,EAAEC,QAAQ;YAC7B3C,cAAcuC,KAAKG,GAAG,CAACC,MAAM;QAC/B;QAEA,OAAOJ,KAAKG,GAAG;IACjB,GACA;QAACrF;QAAUqD;QAAWpD;QAAW8C,iBAAiBvC,IAAI;QAAEiB;KAAK;IAG/D,MAAM8D,UAAUnG,YACd,OAAOoD,QAA+BoB;QACpC,MAAMM,QAAQlF,GAAGmF,SAAS,CAAC;YACzB,GAAGd,SAAS;YACZ,GAAIO,SAAS0B,SAAS;gBAAEA,QAAQ1B,QAAQ0B,MAAM;YAAC,IAAI,CAAC,CAAC;QACvD;QAEA,MAAMlB,WAAW,MAAMC,MACrBtF,eAAe;YAAEiB;YAAUsE,MAAM,CAAC,CAAC,EAAErE,UAAU,CAAC,EAAEuC,OAAO,CAAC,EAAE0B,OAAO;QAAC,IACpE;YACES,aAAa;YACbC,SAAS;gBACP,gBAAgB;YAClB;YACAC,QAAQ;QACV;QAGF,IAAI,CAACT,SAASU,EAAE,EAAE;YAChB,MAAMC,YAAY,MAAMX,SAASY,IAAI;YACrC,MAAM,IAAIC,MAAM,CAAC,sBAAsB,EAAEF,WAAW;QACtD;QAEA,MAAMG,OAAO,MAAMd,SAASe,IAAI;QAEhC,IAAID,KAAKE,KAAK,EAAE;YACd,MAAM,IAAIH,MAAM,CAAC,kBAAkB,EAAEC,KAAKE,KAAK,EAAE;QACnD;QAEA,OAAOF;IACT,GACA;QAAClF;QAAUqD;QAAWpD;KAAU;IAGlC,MAAMoB,cAAcjC,YAAiD;QACnE,IAAI,CAACoD,QAAQ;YACX;QACF;QACA,MAAMgD,cAAc,MAAMD,QAAQ/C;QAClCM,QAAQ0C;IACV,GAAG;QAAChD;QAAQ+C;KAAQ;IAEpB,6CAA6C;IAC7ClG,UAAU;QACR,IAAIkD,YAAYkD,OAAO,EAAE;YACvB,IAAIzD,kBAAkB;gBACpB,IAAIQ,QAAQ;oBACVkD,aAAaC,OAAO,CAAC1D,mBAAmBL,GAAG,EAAEY;gBAC/C,OAAO;oBACLkD,aAAapE,UAAU,CAACW,mBAAmBL,GAAG;gBAChD;gBAEA,IAAIc,YAAY;oBACdgD,aAAaC,OAAO,CAAC,GAAG1D,mBAAmBL,GAAG,CAAC,OAAO,CAAC,EAAEc;gBAC3D,OAAO;oBACLgD,aAAapE,UAAU,CAAC,GAAGW,mBAAmBL,GAAG,CAAC,OAAO,CAAC;gBAC5D;YACF;QACF;IACF,GAAG;QAACY;QAAQE;QAAYT,mBAAmBL,GAAG;QAAEI;KAAiB;IAEjE,MAAMtC,UAA2CN,YAC/C,OAAOwG,MAAMC,WAAW,CAAC;QACvB1D,aAAa;QACb,IAAI;YACF,IAAIK,QAAQ;gBACV,4CAA4C;gBAC5C,MAAM4B,WAAW,MAAMC,MACrBtF,eAAe;oBAAEiB;oBAAUsE,MAAM,CAAC,CAAC,EAAErE,UAAU,CAAC,EAAEuC,OAAO,SAAS,CAAC;gBAAC,IACpE;oBACE+B,MAAMC,KAAKL,SAAS,CAAC;wBACnByB;wBACAC;wBACAP,QAAQ5C;oBACV;oBACAiC,aAAa;oBACbC,SAAS;wBACP,gBAAgB;oBAClB;oBACAC,QAAQ;gBACV;gBAGF,IAAI,CAACT,SAASU,EAAE,EAAE;oBAChB,MAAMC,YAAY,MAAMX,SAASY,IAAI;oBACrC,MAAM,IAAIC,MAAM,CAAC,oBAAoB,EAAEF,WAAW;gBACpD;gBAEA,MAAMe,SAAS,MAAM1B,SAASe,IAAI;gBAElC,IAAI,CAACW,OAAOC,OAAO,EAAE;oBACnB,+BAA+B;oBAC/BtD,UAAUG;oBACVE,QAAQF;oBACRD,cAAcC;oBACd;gBACF;gBAEA,0DAA0D;gBAC1D,MAAMoD,gBAAgB,MAAMT,QAAQ/C,QAAQ;oBAAE8C,QAAQ5C;gBAAW;gBACjEI,QAAQkD;YACV,OAAO;gBACL,uDAAuD;gBACvD,MAAMC,UAAU,MAAMjC,WAAW;oBAAEF,OAAO;wBAAC;4BAAE,GAAG8B,IAAI;4BAAEC;wBAAS;qBAAE;gBAAC;gBAElEpD,UAAUwD,QAAQvB,EAAE;gBACpB5B,QAAQmD;YACV;QACF,EAAE,OAAOb,OAAO;YACd,IAAIrD,OAAO;gBACT,sCAAsC;gBACtCmE,QAAQd,KAAK,CAAC,8BAA8BA;YAC9C;QACF,SAAU;YACRjD,aAAa;QACf;IACF,GACA;QAACnC;QAAUwC;QAAQE;QAAYzC;QAAW+D;QAAYjC;QAAOwD;KAAQ;IAGvE,MAAMjE,aAAiDlC,YACrD,OAAO+G;QACL,IAAI,CAAC3D,QAAQ;YACX;QACF;QAEAL,aAAa;QACb,IAAI;YACF,MAAMiC,WAAW,MAAMC,MACrBtF,eAAe;gBAAEiB;gBAAUsE,MAAM,CAAC,CAAC,EAAErE,UAAU,CAAC,EAAEuC,OAAO,YAAY,CAAC;YAAC,IACvE;gBACE+B,MAAMC,KAAKL,SAAS,CAAC;oBACnBiC,QAAQD;oBACRb,QAAQ5C;gBACV;gBACAiC,aAAa;gBACbC,SAAS;oBACP,gBAAgB;gBAClB;gBACAC,QAAQ;YACV;YAGF,IAAI,CAACT,SAASU,EAAE,EAAE;gBAChB,MAAMC,YAAY,MAAMX,SAASY,IAAI;gBACrC,MAAM,IAAIC,MAAM,CAAC,uBAAuB,EAAEF,WAAW;YACvD;YAEA,MAAMe,SAAS,MAAM1B,SAASe,IAAI;YAElC,IAAI,CAACW,OAAOC,OAAO,EAAE;gBACnB,+BAA+B;gBAC/BtD,UAAUG;gBACVE,QAAQF;gBACRD,cAAcC;gBACd;YACF;YAEA,0DAA0D;YAC1D,MAAMoD,gBAAgB,MAAMT,QAAQ/C,QAAQ;gBAAE8C,QAAQ5C;YAAW;YACjEI,QAAQkD;QACV,EAAE,OAAOZ,OAAO;YACd,IAAIrD,OAAO;gBACT,sCAAsC;gBACtCmE,QAAQd,KAAK,CAAC,kCAAkCA;YAClD;QACF,SAAU;YACRjD,aAAa;QACf;IACF,GACA;QAACnC;QAAUwC;QAAQE;QAAYzC;QAAW8B;QAAOwD;KAAQ;IAG3D,MAAMzE,gBAAuD1B,YAC3D,OAAO+G;QACL,IAAI,CAAC3D,QAAQ;YACX;QACF;QAEAL,aAAa;QACb,IAAI;YACF,MAAMiC,WAAW,MAAMC,MACrBtF,eAAe;gBAAEiB;gBAAUsE,MAAM,CAAC,CAAC,EAAErE,UAAU,CAAC,EAAEuC,OAAO,YAAY,CAAC;YAAC,IACvE;gBACE+B,MAAMC,KAAKL,SAAS,CAAC;oBACnBiC,QAAQD;oBACRN,UAAU;wBAAEQ,MAAM;oBAAE;oBACpBf,QAAQ5C;gBACV;gBACAiC,aAAa;gBACbC,SAAS;oBACP,gBAAgB;gBAClB;gBACAC,QAAQ;YACV;YAGF,IAAI,CAACT,SAASU,EAAE,EAAE;gBAChB,MAAMC,YAAY,MAAMX,SAASY,IAAI;gBACrC,MAAM,IAAIC,MAAM,CAAC,0BAA0B,EAAEF,WAAW;YAC1D;YAEA,MAAMe,SAAS,MAAM1B,SAASe,IAAI;YAElC,IAAI,CAACW,OAAOC,OAAO,EAAE;gBACnB,+BAA+B;gBAC/BtD,UAAUG;gBACVE,QAAQF;gBACRD,cAAcC;gBACd;YACF;YAEA,0DAA0D;YAC1D,MAAMoD,gBAAgB,MAAMT,QAAQ/C,QAAQ;gBAAE8C,QAAQ5C;YAAW;YACjEI,QAAQkD;QACV,EAAE,OAAOZ,OAAO;YACd,IAAIrD,OAAO;gBACT,sCAAsC;gBACtCmE,QAAQd,KAAK,CAAC,qCAAqCA;YACrD;QACF,SAAU;YACRjD,aAAa;QACf;IACF,GACA;QAACnC;QAAUwC;QAAQE;QAAYzC;QAAW8B;QAAOwD;KAAQ;IAG3D,MAAM1E,gBAAuDzB,YAC3D,OAAO+G;QACL,IAAI,CAAC3D,QAAQ;YACX;QACF;QAEAL,aAAa;QACb,IAAI;YACF,MAAMiC,WAAW,MAAMC,MACrBtF,eAAe;gBAAEiB;gBAAUsE,MAAM,CAAC,CAAC,EAAErE,UAAU,CAAC,EAAEuC,OAAO,YAAY,CAAC;YAAC,IACvE;gBACE+B,MAAMC,KAAKL,SAAS,CAAC;oBACnBiC,QAAQD;oBACRN,UAAU;wBAAEQ,MAAM,CAAC;oBAAE;oBACrBf,QAAQ5C;gBACV;gBACAiC,aAAa;gBACbC,SAAS;oBACP,gBAAgB;gBAClB;gBACAC,QAAQ;YACV;YAGF,IAAI,CAACT,SAASU,EAAE,EAAE;gBAChB,MAAMC,YAAY,MAAMX,SAASY,IAAI;gBACrC,MAAM,IAAIC,MAAM,CAAC,0BAA0B,EAAEF,WAAW;YAC1D;YAEA,MAAMe,SAAS,MAAM1B,SAASe,IAAI;YAElC,IAAI,CAACW,OAAOC,OAAO,EAAE;gBACnB,+BAA+B;gBAC/BtD,UAAUG;gBACVE,QAAQF;gBACRD,cAAcC;gBACd;YACF;YAEA,0DAA0D;YAC1D,MAAMoD,gBAAgB,MAAMT,QAAQ/C,QAAQ;gBAAE8C,QAAQ5C;YAAW;YACjEI,QAAQkD;QACV,EAAE,OAAOZ,OAAO;YACd,IAAIrD,OAAO;gBACT,sCAAsC;gBACtCmE,QAAQd,KAAK,CAAC,qCAAqCA;YACrD;QACF,SAAU;YACRjD,aAAa;QACf;IACF,GACA;QAACnC;QAAUwC;QAAQE;QAAYzC;QAAW8B;QAAOwD;KAAQ;IAG3D,MAAM5F,YAA+CP,YAAY;QAC/D,IAAI,CAACoD,QAAQ;YACX;QACF;QAEAL,aAAa;QACb,IAAI;YACF,MAAMiC,WAAW,MAAMC,MACrBtF,eAAe;gBAAEiB;gBAAUsE,MAAM,CAAC,CAAC,EAAErE,UAAU,CAAC,EAAEuC,OAAO,MAAM,CAAC;YAAC,IACjE;gBACE+B,MAAMC,KAAKL,SAAS,CAAC;oBACnBmB,QAAQ5C;gBACV;gBACAiC,aAAa;gBACbC,SAAS;oBACP,gBAAgB;gBAClB;gBACAC,QAAQ;YACV;YAGF,IAAI,CAACT,SAASU,EAAE,EAAE;gBAChB,MAAMC,YAAY,MAAMX,SAASY,IAAI;gBACrC,MAAM,IAAIC,MAAM,CAAC,sBAAsB,EAAEF,WAAW;YACtD;YAEA,MAAMe,SAAS,MAAM1B,SAASe,IAAI;YAElC,IAAI,CAACW,OAAOC,OAAO,EAAE;gBACnB,+BAA+B;gBAC/BtD,UAAUG;gBACVE,QAAQF;gBACRD,cAAcC;gBACd;YACF;YAEA,0DAA0D;YAC1D,MAAMoD,gBAAgB,MAAMT,QAAQ/C,QAAQ;gBAAE8C,QAAQ5C;YAAW;YACjEI,QAAQkD;QACV,EAAE,OAAOZ,OAAO;YACd,IAAIrD,OAAO;gBACT,sCAAsC;gBACtCmE,QAAQd,KAAK,CAAC,wBAAwBA;YACxC;QACF,SAAU;YACRjD,aAAa;QACf;IACF,GAAG;QAACnC;QAAUwC;QAAQE;QAAYzC;QAAW8B;QAAOwD;KAAQ;IAE5D,MAAMhE,cAAmDnC,YACvD,CAACwB;QACC,IAAImC,iBAAiBvC,IAAI,KAAKI,UAAU;YACtC;QACF;QAEA,MAAM0F,gBAAgBjG,iBAAiBE,mBAAmB,CAAC0C,IAAI,CAAC,CAACC,IAAMA,EAAE1C,IAAI,KAAKI;QAClF,IAAI,CAAC0F,eAAe;YAClB,MAAM,IAAIrB,MAAM,CAAC,oBAAoB,EAAErE,SAAS,qBAAqB,CAAC;QACxE;QAEAoC,oBAAoBsD;IACtB,GACA;QAACjG,iBAAiBE,mBAAmB;QAAEwC,iBAAiBvC,IAAI;KAAC;IAG/D,MAAMO,kBAAkB3B,YACtB,OAAOmH,iBAAiB3C;QACtB,MAAM4C,gBAAgBpF,eAAe6B,IAAI,CAAC,CAAC4B,SAAWA,OAAO4B,IAAI,KAAKF;QAEtE,IAAI,CAACC,eAAe;YAClB,MAAM,IAAIvB,MAAM,CAAC,wBAAwB,EAAEsB,gBAAgB,WAAW,CAAC;QACzE;QAEA,IAAI,CAAC/D,QAAQ;YACX,MAAM,IAAIyC,MAAM,CAAC,oBAAoB,CAAC;QACxC;QAEA7B,yBAAyBmD;QAEzB,IAAIC,cAAczF,eAAe,EAAE;YACjC,IAAI;gBACF,MAAMqD,WAAW,MAAMC,MACrBtF,eAAe;oBAAEiB;oBAAUsE,MAAM,CAAC,UAAU,EAAEiC,gBAAgB,SAAS,CAAC;gBAAC,IACzE;oBACEhC,MAAMC,KAAKL,SAAS,CAAC;wBACnB3B;wBACA5B,UAAUmC,iBAAiBvC,IAAI;wBAC/B8E,QAAQ5C;wBACR,GAAIkB,SAAS8C,kBAAkB,CAAC,CAAC;oBACnC;oBACA/B,aAAa;oBACbC,SAAS;wBACP,gBAAgB;oBAClB;oBACAC,QAAQ;gBACV;gBAGF,IAAI,CAACT,SAASU,EAAE,EAAE;oBAChB,MAAM6B,gBAAgB,MAAMvC,SAASY,IAAI;oBACzC,MAAM,IAAIC,MAAM0B;gBAClB;gBAEA,MAAMC,eAAe,MAAMxC,SAASe,IAAI;gBAExC,IAAIyB,aAAaxB,KAAK,EAAE;oBACtB,MAAM,IAAIH,MAAM2B,aAAaxB,KAAK;gBACpC;gBAEA,OAAOwB;YACT,EAAE,OAAOxB,OAAO;gBACd,IAAIrD,OAAO;oBACT,sCAAsC;oBACtCmE,QAAQd,KAAK,CAAC,6BAA6BA;gBAC7C;gBACA,MAAM,IAAIH,MAAMG,iBAAiBH,QAAQG,MAAMyB,OAAO,GAAG;YAC3D;QACF,OAAO;YACL,MAAM,IAAI5B,MAAM,CAAC,gBAAgB,EAAEsB,gBAAgB,qCAAqC,CAAC;QAC3F;IACF,GACA;QAACvG;QAAUwC;QAAQE;QAAYX;QAAOX;QAAgB2B,iBAAiBvC,IAAI;KAAC;IAG9E,MAAML,eAAef,YACnB,OAAOmH,iBAAiB3C;QACtB,IAAI,CAACpB,QAAQ;YACX,MAAM,IAAIyC,MAAM,CAAC,cAAc,CAAC;QAClC;QAEA,MAAMuB,gBAAgBpF,eAAe6B,IAAI,CAAC,CAAC6D,KAAOA,GAAGL,IAAI,KAAKF;QAE9D,IAAI,CAACC,eAAe;YAClB,MAAM,IAAIvB,MAAM,CAAC,wBAAwB,EAAEsB,gBAAgB,WAAW,CAAC;QACzE;QAEA,IAAIC,cAAcrG,YAAY,EAAE;YAC9B,MAAMiE,WAAW,MAAMC,MACrBtF,eAAe;gBAAEiB;gBAAUsE,MAAM,CAAC,UAAU,EAAEiC,gBAAgB,cAAc,CAAC;YAAC,IAC9E;gBACEhC,MAAMC,KAAKL,SAAS,CAAC;oBACnB3B;oBACA5B,UAAUmC,iBAAiBvC,IAAI;oBAC/B8E,QAAQ5C;oBACR,GAAIkB,SAAS8C,kBAAkB,CAAC,CAAC;gBACnC;gBACA/B,aAAa;gBACbC,SAAS;oBACP,gBAAgB;gBAClB;gBACAC,QAAQ;YACV;YAGF,IAAI,CAACT,SAASU,EAAE,EAAE;gBAChB,MAAM6B,gBAAgB,MAAMvC,SAASY,IAAI;gBACzC,MAAM,IAAIC,MAAM0B;YAClB;YAEA,MAAMC,eAAe,MAAMxC,SAASe,IAAI;YAExC,IAAIyB,aAAaxB,KAAK,EAAE;gBACtB,MAAM,IAAIH,MAAM2B,aAAaxB,KAAK;YACpC;YAEA,OAAOwB;QACT,OAAO;YACL,MAAM,IAAI3B,MAAM,CAAC,gBAAgB,EAAEsB,gBAAgB,qCAAqC,CAAC;QAC3F;IACF,GACA;QAACvG;QAAUwC;QAAQE;QAAYtB;QAAgB2B,iBAAiBvC,IAAI;KAAC;IAGvE,MAAMuG,UAAU3H,YAAY;QAC1B,IAAI;YACF,MAAM8E,QAAQlF,GAAGmF,SAAS,CAAC;gBACzBX,OAAO;gBACPK,QAAQ;oBACNa,IAAI;oBACJ7B,MAAM;gBACR;YACF;YAEA,MAAMuB,WAAW,MAAMC,MACrBtF,eAAe;gBAAEiB;gBAAUsE,MAAM,CAAC,CAAC,EAAEpE,cAAc,IAAI,EAAEgE,OAAO;YAAC,IACjE;gBACES,aAAa;gBACbC,SAAS;oBACP,gBAAgB;gBAClB;gBACAC,QAAQ;YACV;YAGF,IAAI,CAACT,SAASU,EAAE,EAAE;gBAChB,MAAMC,YAAY,MAAMX,SAASY,IAAI;gBACrC,MAAM,IAAIC,MAAM,CAAC,sBAAsB,EAAEF,WAAW;YACtD;YAEA,MAAMiC,WAGF,MAAM5C,SAASe,IAAI;YAEvB,IAAI6B,SAAS5B,KAAK,EAAE;gBAClB,MAAM,IAAIH,MAAM,CAAC,kBAAkB,EAAE+B,SAAS5B,KAAK,EAAE;YACvD;YAEA,IAAI4B,SAASvF,IAAI,EAAE;gBACjBW,QAAQ4E,SAASvF,IAAI;gBACrB,OAAOuF,SAASvF,IAAI;YACtB;QACF,EAAE,OAAO2D,OAAO;YACd,IAAIrD,OAAO;gBACT,sCAAsC;gBACtCmE,QAAQd,KAAK,CAAC,wBAAwBA;YACxC;YACAhD,QAAQ;YACR,MAAM,IAAI6C,MACR,CAAC,sBAAsB,EAAEG,iBAAiBH,QAAQG,MAAMyB,OAAO,GAAG,iBAAiB;QAEvF;IACF,GAAG;QAAC7G;QAAUE;QAAe6B;KAAM;IAEnC,MAAMkF,eAAe7H,YAAY;QAC/B,IAAI,CAACqC,MAAM;YACT;QACF;QAEA,IAAI;YACF,MAAMyC,QAAQlF,GAAGmF,SAAS,CAAC;gBACzBX,OAAO;gBACP0D,OAAO;gBACPC,YAAY;YACd;YAEA,MAAM/C,WAAW,MAAMC,MACrBtF,eAAe;gBAAEiB;gBAAUsE,MAAM,CAAC,CAAC,EAAExE,cAAc,CAAC,EAAEoE,OAAO;YAAC,IAC9D;gBACES,aAAa;gBACbC,SAAS;oBACP,gBAAgB;gBAClB;gBACAC,QAAQ;YACV;YAGF,IAAI,CAACT,SAASU,EAAE,EAAE;gBAChB,MAAMC,YAAY,MAAMX,SAASY,IAAI;gBAErC,MAAM,IAAIC,MAAMF;YAClB;YAEA,MAAMG,OAAO,MAAMd,SAASe,IAAI;YAEhC,IAAID,KAAKE,KAAK,EAAE;gBACd,MAAM,IAAIH,MAAM,CAAC,qBAAqB,EAAEC,KAAKE,KAAK,EAAE;YACtD;YAEA,IAAIF,KAAKkC,IAAI,IAAIlC,KAAKkC,IAAI,CAACC,MAAM,GAAG,GAAG;gBACrC/E,aAAa4C,KAAKkC,IAAI;YACxB;QACF,EAAE,OAAOhC,OAAO;YACd,IAAIrD,OAAO;gBACT,sCAAsC;gBACtCmE,QAAQd,KAAK,CAAC,6BAA6BA;YAC7C;YACA9C,aAAaM;YACb,MAAM,IAAIqC,MACR,CAAC,2BAA2B,EAAEG,iBAAiBH,QAAQG,MAAMyB,OAAO,GAAG,iBAAiB;QAE5F;IACF,GAAG;QAACpF;QAAMzB;QAAUF;QAAeiC;KAAM;IAEzC,MAAMP,gBAAgBpC,YACpB,OAAOkI,WAAWC;QAChB,IAAI,CAAC9F,MAAM;YACT,MAAM,IAAIwD,MAAM;QAClB;QAEA,IAAI;YACF,MAAMb,WAAW,MAAMC,MACrBtF,eAAe;gBAAEiB;gBAAUsE,MAAM,CAAC,CAAC,EAAExE,cAAc,CAAC,EAAEwH,WAAW;YAAC,IAClE;gBACE/C,MAAMC,KAAKL,SAAS,CAACoD;gBACrB5C,aAAa;gBACbC,SAAS;oBACP,gBAAgB;gBAClB;gBACAC,QAAQ;YACV;YAGF,IAAI,CAACT,SAASU,EAAE,EAAE;gBAChB,MAAMC,YAAY,MAAMX,SAASY,IAAI;gBACrC,MAAM,IAAIC,MAAM,CAAC,oCAAoC,EAAEF,WAAW;YACpE;YAEA,MAAMG,OAAO,MAAMd,SAASe,IAAI;YAEhC,IAAID,KAAKE,KAAK,EAAE;gBACd,MAAM,IAAIH,MAAM,CAAC,6BAA6B,EAAEC,KAAKE,KAAK,EAAE;YAC9D;YAEA,+CAA+C;YAC/C,MAAM6B;QACR,EAAE,OAAO7B,OAAO;YACd,IAAIrD,OAAO;gBACT,sCAAsC;gBACtCmE,QAAQd,KAAK,CAAC,uCAAuCA;YACvD;YAEA,MAAM,IAAIH,MACR,CAAC,oCAAoC,EAAEG,iBAAiBH,QAAQG,MAAMyB,OAAO,GAAG,iBAAiB;QAErG;IACF,GACA;QAACpF;QAAMzB;QAAUF;QAAemH;QAAclF;KAAM;IAGtD,MAAM3B,gBAAgBhB,YACpB,OAAOmI;QACL,IAAI,CAAC9F,MAAM;YACT,MAAM,IAAIwD,MAAM;QAClB;QAEA,IAAI;YACF,MAAMb,WAAW,MAAMC,MAAMtF,eAAe;gBAAEiB;gBAAUsE,MAAM,CAAC,CAAC,EAAExE,eAAe;YAAC,IAAI;gBACpFyE,MAAMC,KAAKL,SAAS,CAACoD;gBACrB5C,aAAa;gBACbC,SAAS;oBACP,gBAAgB;gBAClB;gBACAC,QAAQ;YACV;YAEA,IAAI,CAACT,SAASU,EAAE,EAAE;gBAChB,MAAMC,YAAY,MAAMX,SAASY,IAAI;gBACrC,MAAM,IAAIC,MAAM,CAAC,oCAAoC,EAAEF,WAAW;YACpE;YAEA,MAAMG,OAAO,MAAMd,SAASe,IAAI;YAEhC,IAAID,KAAKE,KAAK,EAAE;gBACd,MAAM,IAAIH,MAAM,CAAC,6BAA6B,EAAEC,KAAKE,KAAK,EAAE;YAC9D;YAEA,+CAA+C;YAC/C,MAAM6B;QACR,EAAE,OAAO7B,OAAO;YACd,IAAIrD,OAAO;gBACT,sCAAsC;gBACtCmE,QAAQd,KAAK,CAAC,uCAAuCA;YACvD;YAEA,MAAM,IAAIH,MACR,CAAC,oCAAoC,EAAEG,iBAAiBH,QAAQG,MAAMyB,OAAO,GAAG,iBAAiB;QAErG;IACF,GACA;QAACpF;QAAMzB;QAAUF;QAAemH;QAAclF;KAAM;IAGtD;;;GAGC,GACD,MAAMnC,eAAeR,YAAY;QAC/B0D,QAAQF;QACRH,UAAUG;QACVD,cAAcC;QACdN,aAAaM;QACbR,QAAQ;QAER,IAAIJ,kBAAkB;YACpB0D,aAAapE,UAAU,CAACW,mBAAmBL,GAAG;YAC9C8D,aAAapE,UAAU,CAAC,GAAGW,mBAAmBL,GAAG,CAAC,OAAO,CAAC;QAC5D;IACF,GAAG;QAACK,mBAAmBL,GAAG;QAAEI;KAAiB;IAE7C;;GAEC,GACD,MAAMb,WAAW/B,YAAY;QAC3BQ;IACF,GAAG;QAACA;KAAa;IAEjB;;;;;;;;GAQC,GACD,MAAMqB,YAAY7B,YAChB,OAAOoI,cAAcC,cAAcC;QACjCvF,aAAa;QACb,IAAI;YACF,MAAMiC,WAAW,MAAMC,MACrBtF,eAAe;gBAAEiB;gBAAUsE,MAAM,CAAC,CAAC,EAAErE,UAAU,CAAC,EAAEuH,aAAa,MAAM,CAAC;YAAC,IACvE;gBACEjD,MAAMC,KAAKL,SAAS,CAAC;oBACnBsD;oBACAC;gBACF;gBACA/C,aAAa;gBACbC,SAAS;oBACP,gBAAgB;gBAClB;gBACAC,QAAQ;YACV;YAGF,IAAI,CAACT,SAASU,EAAE,EAAE;gBAChB,MAAMC,YAAY,MAAMX,SAASY,IAAI;gBACrC,MAAM,IAAIC,MAAM,CAAC,uBAAuB,EAAEF,WAAW;YACvD;YAEA,MAAMe,SAAS,MAAM1B,SAASe,IAAI;YAElC,IAAI,CAACW,OAAOC,OAAO,EAAE;gBACnB,MAAM,IAAId,MAAMa,OAAOe,OAAO,IAAI;YACpC;YAEA,0DAA0D;YAC1D,MAAMb,gBAAgB,MAAMT,QAAQiC;YACpC1E,QAAQkD;YACRvD,UAAU+E;YAEV,OAAOxB;QACT,EAAE,OAAOZ,OAAO;YACd,IAAIrD,OAAO;gBACT,sCAAsC;gBACtCmE,QAAQd,KAAK,CAAC,wBAAwBA;YACxC;YACA,MAAMA;QACR,SAAU;YACRjD,aAAa;QACf;IACF,GACA;QAACnC;QAAUC;QAAW8B;QAAOwD;KAAQ;IAGvC;;;GAGC,GACD,MAAMrE,UAAU9B,YAAY;QAC1B,kEAAkE;QAClE,MAAMuI,cAAcnF;QACpB,MAAMoF,cAAclF;QAEpB,wBAAwB;QACxB,MAAMmF,cAAc,MAAMd;QAE1B,IAAI,CAACc,aAAa;YAChB,iDAAiD;YACjD;QACF;QAEA,kEAAkE;QAClElF,cAAcC;QACd,IAAIZ,kBAAkB;YACpB0D,aAAapE,UAAU,CAAC,GAAGW,mBAAmBL,GAAG,CAAC,OAAO,CAAC;QAC5D;QAEA,qCAAqC;QACrC,MAAMkG,aACJD,YAAYhF,IAAI,EAAEuE,QAAQS,YAAYhF,IAAI,CAACuE,IAAI,CAACC,MAAM,GAAG,IACrD,OAAOQ,YAAYhF,IAAI,CAACuE,IAAI,CAAC,EAAE,KAAK,WAClCS,YAAYhF,IAAI,CAACuE,IAAI,CAAC,EAAE,CAAC1C,EAAE,GAC3BmD,YAAYhF,IAAI,CAACuE,IAAI,CAAC,EAAE,GAC1BxE;QAEN,IAAI+E,eAAeC,aAAa;YAC9B,mDAAmD;YACnD,IAAIE,YAAY;gBACd,6DAA6D;gBAC7D,IAAI;oBACF,MAAM7G,UAAU6G,YAAYH,aAAaC;gBAC3C,EAAE,OAAOxC,OAAO;oBACd,IAAIrD,OAAO;wBACT,sCAAsC;wBACtCmE,QAAQd,KAAK,CAAC,wBAAwBA;oBACxC;oBACA,2BAA2B;oBAC3B,MAAM2C,WAAW,MAAMxC,QAAQuC;oBAC/BhF,QAAQiF;oBACRtF,UAAUqF;gBACZ;YACF,OAAO;gBACL,0DAA0D;gBAC1D,IAAI;oBACF,MAAM1D,WAAW,MAAMC,MACrBtF,eAAe;wBACbiB;wBACAsE,MAAM,CAAC,CAAC,EAAErE,UAAU,CAAC,EAAE0H,YAAY,QAAQ,EAAEC,aAAa;oBAC5D,IACA;wBACErD,MAAMC,KAAKL,SAAS,CAAC;4BACnBM,UAAUoD,YAAYnD,EAAE;4BACxBY,QAAQ;wBACV;wBACAX,aAAa;wBACbC,SAAS;4BACP,gBAAgB;wBAClB;wBACAC,QAAQ;oBACV;oBAGF,IAAIT,SAASU,EAAE,EAAE;wBACf,qBAAqB;wBACrB,MAAMU,cAAc,MAAMD,QAAQoC;wBAClC7E,QAAQ0C;wBACR/C,UAAUkF;oBACZ;gBACF,EAAE,OAAOvC,OAAO;oBACd,IAAIrD,OAAO;wBACT,sCAAsC;wBACtCmE,QAAQd,KAAK,CAAC,oCAAoCA;oBACpD;gBACF;YACF;QACF,OAAO,IAAI0C,YAAY;YACrB,gDAAgD;YAChD,MAAMC,WAAW,MAAMxC,QAAQuC;YAC/BhF,QAAQiF;YACRtF,UAAUqF;QACZ;QAEA,6DAA6D;QAC7D,IAAI9F,oBAAoBQ,QAAQ;YAC9BkD,aAAaC,OAAO,CAAC1D,mBAAmBL,GAAG,EAAEY;QAC/C;IACF,GAAG;QACDxC;QACAwC;QACAE;QACAzC;QACA8B;QACAwD;QACAwB;QACA9E,mBAAmBL,GAAG;QACtBX;QACAe;KACD;IAED,wDAAwD;IACxD3C,UAAU;QACR,IAAI,CAACkD,YAAYkD,OAAO,EAAE;YACxB,IAAIzD,kBAAkB;gBACpB,MAAMgG,eAAetC,aAAauC,OAAO,CAAChG,mBAAmBL,GAAG;gBAChE,MAAMsG,eAAexC,aAAauC,OAAO,CAAC,GAAGhG,mBAAmBL,GAAG,CAAC,OAAO,CAAC;gBAE5E,IAAIoG,cAAc;oBAChBzC,QAAQyC,cAAc;wBAAE1C,QAAQ4C,gBAAgBtF;oBAAU,GACvDuF,IAAI,CAAC,CAACC;wBACLtF,QAAQsF;wBACR3F,UAAUuF;wBACV,IAAIE,cAAc;4BAChBvF,cAAcuF;wBAChB;oBACF,GACCG,KAAK,CAAC,CAACC;wBACN,iEAAiE;wBACjE,oEAAoE;wBACpE5C,aAAapE,UAAU,CAACW,mBAAmBL,GAAG;wBAC9C8D,aAAapE,UAAU,CAAC,GAAGW,mBAAmBL,GAAG,CAAC,OAAO,CAAC;wBAC1Da,UAAUG;wBACVE,QAAQF;wBACRD,cAAcC;oBAChB;gBACJ;YACF;YAEAL,YAAYkD,OAAO,GAAG;YAEtB,KAAKsB,UAAUoB,IAAI,CAAC,CAAC1G;gBACnB,IAAIA,QAAQA,KAAKoB,IAAI,EAAEuE,QAAQ3F,KAAKoB,IAAI,CAACuE,IAAI,CAACC,MAAM,GAAG,GAAG;oBACxD,iEAAiE;oBACjE,MAAM7E,SACJ,OAAOf,KAAKoB,IAAI,CAACuE,IAAI,CAAC,EAAE,KAAK,WAAW3F,KAAKoB,IAAI,CAACuE,IAAI,CAAC,EAAE,CAAC1C,EAAE,GAAGjD,KAAKoB,IAAI,CAACuE,IAAI,CAAC,EAAE;oBAElF,IAAI5E,QAAQ;wBACV+C,QAAQ/C,QACL2F,IAAI,CAAC,CAACC;4BACLtF,QAAQsF;4BACR3F,UAAUD;wBACZ,GACC6F,KAAK,CAAC,CAACjD;4BACN,IAAIrD,OAAO;gCACT,sCAAsC;gCACtCmE,QAAQd,KAAK,CAAC,6BAA6BA;4BAC7C;4BAEAtC,QAAQF;4BACRH,UAAUG;4BAEV,MAAM,IAAIqC,MAAM,CAAC,2BAA2B,EAAEG,MAAMyB,OAAO,EAAE;wBAC/D;oBACJ;gBACF;YACF;QACF;IACF,GAAG;QAAC9E;QAAOkF;QAAc1B;QAASwB;QAAS9E,mBAAmBL,GAAG;QAAEI;KAAiB;IAEpF3C,UAAU;QACR,IAAIoC,MAAM;YACR,kDAAkD;YAClD,KAAKwF;QACP,OAAO;YACL,2CAA2C;YAC3C3E,aAAaM;QACf;IACF,GAAG;QAACqE;QAAcxF;KAAK;IAEvB,qBACE,KAACC;QACC6G,OAAO;YACL7I;YACA2C;YACAQ;YACAlD;YACAC;YACAC;YACAM;YACAC;YACAC;YACAO,UAAUmC;YACVlC;YACAC;YACAC;YACAC;YACAC;YACAC;YACAC;YACAC;YACAC;YACAC;YACA6B;YACA5B;YACAC;YACAC;QACF;kBAECK;;AAGP,EAAC;AAED,OAAO,MAAM0G,eAAe;IAC1B,MAAMC,UAAUtJ,IAAIuC;IAEpB,IAAI,CAAC+G,SAAS;QACZ,MAAM,IAAIxD,MAAM;IAClB;IAEA,OAAOwD;AACT,EAAC;AAED,OAAO,MAAMC,qBAAqB;IAChC,MAAM,EAAE7I,MAAM,EAAE,GAAG2I;IAEnB,OAAO3I;AACT,EAAC;AAED,OAAO,MAAM8I,cAAc;IACzB,MAAM,EAAEtI,gBAAgB,EAAEO,QAAQ,EAAEW,WAAW,EAAE,GAAGiH;IAEpD,MAAMI,iBAAiBxJ,YACrB,CAACmJ,OAAuB3E;QACtB,IAAI2E,UAAU3F,aAAa2F,UAAU,MAAM;YACzC,OAAO;QACT;QAEA,MAAMM,gBAAgBjF,SAAShD,YAAYA;QAC3C,IAAI,CAACiI,eAAe;YAClB,OAAON,MAAMO,QAAQ;QACvB;QAEA,MAAM,EAAEtI,IAAI,EAAEC,QAAQ,EAAEsI,aAAa,EAAE,GAAGF;QAE1C,MAAMG,SAASpF,SAASoF,UAAU;QAElC,OAAO,IAAIC,KAAKC,YAAY,CAACF,QAAQ;YACnCpI,UAAUJ;YACV2I,iBAAiBJ,iBAAiB;YAClCK,uBAAuB3I;YACvB4I,uBAAuB5I;YACvB6I,OAAO;QACT,GAAGC,MAAM,CAAChB,QAAQiB,KAAKC,GAAG,CAAC,IAAIhJ;IACjC,GACA;QAACG;KAAS;IAGZ,IAAI,CAACA,UAAU;QACb,MAAM,IAAIqE,MAAM;IAClB;IAEA,OAAO;QACLrE;QACAgI;QACArH;QACAhB,qBAAqBF,iBAAiBE,mBAAmB;IAC3D;AACF,EAAC;AAED,OAAO,SAASmJ;IACd,MAAM,EACJhK,OAAO,EACPmD,IAAI,EACJlD,SAAS,EACTkB,aAAa,EACbC,aAAa,EACbE,SAAS,EACTK,WAAW,EACXC,UAAU,EACX,GAAGkH;IAEJ,IAAI,CAAC9I,SAAS;QACZ,MAAM,IAAIuF,MAAM;IAClB;IAEA,OAAO;QACLvF;QACAmD,MAAMA;QACNlD;QACAkB;QACAC;QACAE;QACAK;QACAC;IACF;AACF;AAEA,OAAO,MAAMqI,cAAc;IACzB,MAAM,EAAExJ,YAAY,EAAEY,eAAe,EAAEC,SAAS,EAAEI,cAAc,EAAE+B,qBAAqB,EAAE,GACvFqF;IAEF,IAAI,CAACzH,iBAAiB;QACpB,MAAM,IAAIkE,MAAM;IAClB;IAEA,OAAO;QAAE9E;QAAcY;QAAiBC;QAAWI;QAAgB+B;IAAsB;AAC3F,EAAC;AAED,OAAO,SAASyG;IACd,MAAM,EAAEvH,SAAS,EAAEjC,aAAa,EAAEY,SAAS,EAAEQ,aAAa,EAAE,GAAGgH;IAE/D,IAAI,CAACpI,eAAe;QAClB,MAAM,IAAI6E,MAAM;IAClB;IAEA,OAAO;QAAE5C,WAAWA;QAAkBjC;QAAeY;QAAWQ;IAAc;AAChF"}
@@ -1 +1 @@
1
- {"version":3,"file":"utilities.d.ts","sourceRoot":"","sources":["../../../src/react/provider/utilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAEpD;;GAEG;AACH,eAAO,MAAM,oBAAoB,GAAI,0BAGlC;IACD,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,QAAQ,CAAA;CACnB,KAAG,MAUH,CAAA"}
1
+ {"version":3,"file":"utilities.d.ts","sourceRoot":"","sources":["../../../src/react/provider/utilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAEpD;;GAEG;AACH,eAAO,MAAM,oBAAoB,6BAG9B;IACD,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,QAAQ,CAAA;CACnB,KAAG,MAUH,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"ar.d.ts","sourceRoot":"","sources":["../../../src/translations/languages/ar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8F1B,CAAA;AAED,eAAO,MAAM,EAAE,EAAE,cAGhB,CAAA"}
1
+ {"version":3,"file":"ar.d.ts","sourceRoot":"","sources":["../../../src/translations/languages/ar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD,eAAO,MAAM,cAAc;IACzB,OAAO;IACP,kBAAkB;QAChB,SAAS;QACT,MAAM;QACN,OAAO;QACP,WAAW;QACX,cAAc;QACd,cAAc;QACd,SAAS;QACT,8BAA8B;QAE9B,gBAAgB;QAChB,eAAe;QACf,YAAY;QACZ,YAAY;QACZ,YAAY;QACZ,iBAAiB;QACjB,YAAY;QACZ,YAAY;QACZ,MAAM;QACN,iBAAiB;QACjB,OAAO;QACP,cAAc;QACd,SAAS;QACT,IAAI;QACJ,KAAK;QACL,0BAA0B;QAE1B,UAAU;QACV,SAAS;QACT,QAAQ;QACR,cAAc;QACd,QAAQ;QACR,aAAa;QACb,SAAS;QACT,mBAAmB;QACnB,cAAc;QACd,OAAO;QACP,MAAM;QACN,SAAS;QACT,IAAI;QACJ,KAAK;QACL,IAAI;QACJ,KAAK;QACL,YAAY;QACZ,MAAM;QACN,2BAA2B;QAE3B,aAAa;QACb,cAAc;QACd,OAAO;QACP,KAAK;QACL,OAAO;QACP,WAAW;QACX,MAAM;QACN,kBAAkB;QAClB,UAAU;QACV,OAAO;QACP,uBAAuB;QAEvB,eAAe;QACf,QAAQ;QACR,SAAS;QACT,WAAW;QACX,QAAQ;QACR,QAAQ;QACR,QAAQ;QACR,eAAe;QACf,MAAM;QACN,QAAQ;QACR,SAAS;QACT,WAAW;QACX,kBAAkB;QAClB,YAAY;QACZ,iCAAiC;QAEjC,OAAO;QACP,aAAa;QACb,cAAc;QACd,2BAA2B;QAE3B,mCAAmC;QAEnC,sBAAsB;QACtB,yBAAyB;QACzB,QAAQ;QACR,6BAA6B;QAE7B,WAAW;QACX,YAAY;QACZ,iCAAiC;;CAGpC,CAAA;AAED,eAAO,MAAM,EAAE,EAAE,cAGhB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"az.d.ts","sourceRoot":"","sources":["../../../src/translations/languages/az.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8F1B,CAAA;AAED,eAAO,MAAM,EAAE,EAAE,cAGhB,CAAA"}
1
+ {"version":3,"file":"az.d.ts","sourceRoot":"","sources":["../../../src/translations/languages/az.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD,eAAO,MAAM,cAAc;IACzB,OAAO;IACP,kBAAkB;QAChB,SAAS;QACT,MAAM;QACN,OAAO;QACP,WAAW;QACX,cAAc;QACd,cAAc;QACd,SAAS;QACT,8BAA8B;QAE9B,gBAAgB;QAChB,eAAe;QACf,YAAY;QACZ,YAAY;QACZ,YAAY;QACZ,iBAAiB;QACjB,YAAY;QACZ,YAAY;QACZ,MAAM;QACN,iBAAiB;QACjB,OAAO;QACP,cAAc;QACd,SAAS;QACT,IAAI;QACJ,KAAK;QACL,0BAA0B;QAE1B,UAAU;QACV,SAAS;QACT,QAAQ;QACR,cAAc;QACd,QAAQ;QACR,aAAa;QACb,SAAS;QACT,mBAAmB;QACnB,cAAc;QACd,OAAO;QACP,MAAM;QACN,SAAS;QACT,IAAI;QACJ,KAAK;QACL,IAAI;QACJ,KAAK;QACL,YAAY;QACZ,MAAM;QACN,2BAA2B;QAE3B,aAAa;QACb,cAAc;QACd,OAAO;QACP,KAAK;QACL,OAAO;QACP,WAAW;QACX,MAAM;QACN,kBAAkB;QAClB,UAAU;QACV,OAAO;QACP,uBAAuB;QAEvB,eAAe;QACf,QAAQ;QACR,SAAS;QACT,WAAW;QACX,QAAQ;QACR,QAAQ;QACR,QAAQ;QACR,eAAe;QACf,MAAM;QACN,QAAQ;QACR,SAAS;QACT,WAAW;QACX,kBAAkB;QAClB,YAAY;QACZ,iCAAiC;QAEjC,OAAO;QACP,aAAa;QACb,cAAc;QACd,2BAA2B;QAE3B,mCAAmC;QAEnC,sBAAsB;QACtB,yBAAyB;QACzB,QAAQ;QACR,6BAA6B;QAE7B,WAAW;QACX,YAAY;QACZ,iCAAiC;;CAGpC,CAAA;AAED,eAAO,MAAM,EAAE,EAAE,cAGhB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"bg.d.ts","sourceRoot":"","sources":["../../../src/translations/languages/bg.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8F1B,CAAA;AAED,eAAO,MAAM,EAAE,EAAE,cAGhB,CAAA"}
1
+ {"version":3,"file":"bg.d.ts","sourceRoot":"","sources":["../../../src/translations/languages/bg.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD,eAAO,MAAM,cAAc;IACzB,OAAO;IACP,kBAAkB;QAChB,SAAS;QACT,MAAM;QACN,OAAO;QACP,WAAW;QACX,cAAc;QACd,cAAc;QACd,SAAS;QACT,8BAA8B;QAE9B,gBAAgB;QAChB,eAAe;QACf,YAAY;QACZ,YAAY;QACZ,YAAY;QACZ,iBAAiB;QACjB,YAAY;QACZ,YAAY;QACZ,MAAM;QACN,iBAAiB;QACjB,OAAO;QACP,cAAc;QACd,SAAS;QACT,IAAI;QACJ,KAAK;QACL,0BAA0B;QAE1B,UAAU;QACV,SAAS;QACT,QAAQ;QACR,cAAc;QACd,QAAQ;QACR,aAAa;QACb,SAAS;QACT,mBAAmB;QACnB,cAAc;QACd,OAAO;QACP,MAAM;QACN,SAAS;QACT,IAAI;QACJ,KAAK;QACL,IAAI;QACJ,KAAK;QACL,YAAY;QACZ,MAAM;QACN,2BAA2B;QAE3B,aAAa;QACb,cAAc;QACd,OAAO;QACP,KAAK;QACL,OAAO;QACP,WAAW;QACX,MAAM;QACN,kBAAkB;QAClB,UAAU;QACV,OAAO;QACP,uBAAuB;QAEvB,eAAe;QACf,QAAQ;QACR,SAAS;QACT,WAAW;QACX,QAAQ;QACR,QAAQ;QACR,QAAQ;QACR,eAAe;QACf,MAAM;QACN,QAAQ;QACR,SAAS;QACT,WAAW;QACX,kBAAkB;QAClB,YAAY;QACZ,iCAAiC;QAEjC,OAAO;QACP,aAAa;QACb,cAAc;QACd,2BAA2B;QAE3B,mCAAmC;QAEnC,sBAAsB;QACtB,yBAAyB;QACzB,QAAQ;QACR,6BAA6B;QAE7B,WAAW;QACX,YAAY;QACZ,iCAAiC;;CAGpC,CAAA;AAED,eAAO,MAAM,EAAE,EAAE,cAGhB,CAAA"}