@salla.sa/twilight-theme-engine 1.0.67 → 1.0.68

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 (212) hide show
  1. package/dist/{AddToCartForm-UVQG3BI5.js → AddToCartForm-TX36PDIE.js} +3 -3
  2. package/dist/{AddToCartForm-UVQG3BI5.js.map → AddToCartForm-TX36PDIE.js.map} +1 -1
  3. package/dist/{BlogAuthorPage-7HVGT3CS.js → BlogAuthorPage-AT6YYDG4.js} +17 -17
  4. package/dist/{BlogAuthorPage-7HVGT3CS.js.map → BlogAuthorPage-AT6YYDG4.js.map} +1 -1
  5. package/dist/{BlogCategoryPage-MSITS6B3.js → BlogCategoryPage-ELPLV67S.js} +17 -17
  6. package/dist/{BlogCategoryPage-MSITS6B3.js.map → BlogCategoryPage-ELPLV67S.js.map} +1 -1
  7. package/dist/{BlogPage-6FLWZBK3.js → BlogPage-RO3U4OTI.js} +15 -15
  8. package/dist/{BlogPage-6FLWZBK3.js.map → BlogPage-RO3U4OTI.js.map} +1 -1
  9. package/dist/{BlogSinglePage-LSF5P4GA.js → BlogSinglePage-HSRVLJYE.js} +15 -15
  10. package/dist/{BlogSinglePage-LSF5P4GA.js.map → BlogSinglePage-HSRVLJYE.js.map} +1 -1
  11. package/dist/{BlogTagPage-JPOF3OC4.js → BlogTagPage-KLCLNP2Q.js} +17 -17
  12. package/dist/{BlogTagPage-JPOF3OC4.js.map → BlogTagPage-KLCLNP2Q.js.map} +1 -1
  13. package/dist/{BrandsPage-7G5VWJ2S.js → BrandsPage-C2TTKTMV.js} +16 -16
  14. package/dist/{BrandsPage-7G5VWJ2S.js.map → BrandsPage-C2TTKTMV.js.map} +1 -1
  15. package/dist/{Breadcrumb-MNYKDV27.js → Breadcrumb-MLWGLXJZ.js} +15 -15
  16. package/dist/{Breadcrumb-MNYKDV27.js.map → Breadcrumb-MLWGLXJZ.js.map} +1 -1
  17. package/dist/{CartItem-DNA2TJ6B.js → CartItem-5JKJ3AD6.js} +15 -15
  18. package/dist/{CartItem-DNA2TJ6B.js.map → CartItem-5JKJ3AD6.js.map} +1 -1
  19. package/dist/{CartSummary-RTDKJUV7.js → CartSummary-ZNBVWC2P.js} +15 -15
  20. package/dist/{CartSummary-RTDKJUV7.js.map → CartSummary-ZNBVWC2P.js.map} +1 -1
  21. package/dist/{Copyright-IR4VD3I6.js → Copyright-LBUY2AJJ.js} +3 -3
  22. package/dist/{Copyright-IR4VD3I6.js.map → Copyright-LBUY2AJJ.js.map} +1 -1
  23. package/dist/{CustomerLayout-6YWOUFEN.js → CustomerLayout-YDJQYMQI.js} +15 -15
  24. package/dist/{CustomerLayout-6YWOUFEN.js.map → CustomerLayout-YDJQYMQI.js.map} +1 -1
  25. package/dist/{Footer-YQHS47HV.js → Footer-X46MKKA5.js} +15 -15
  26. package/dist/{Footer-YQHS47HV.js.map → Footer-X46MKKA5.js.map} +1 -1
  27. package/dist/{Header-VEI2M3XJ.js → Header-YK5QFAO7.js} +4 -4
  28. package/dist/{Header-VEI2M3XJ.js.map → Header-YK5QFAO7.js.map} +1 -1
  29. package/dist/{LoyaltyPage-L7LABJWG.js → LoyaltyPage-RM3WQLVC.js} +15 -15
  30. package/dist/{LoyaltyPage-L7LABJWG.js.map → LoyaltyPage-RM3WQLVC.js.map} +1 -1
  31. package/dist/{LoyaltyPointsPage-Z2GAMWCG.js → LoyaltyPointsPage-AN7VC3AF.js} +3 -3
  32. package/dist/{LoyaltyPointsPage-Z2GAMWCG.js.map → LoyaltyPointsPage-AN7VC3AF.js.map} +1 -1
  33. package/dist/{MainMenu-76GBUVNZ.js → MainMenu-ETIJZLKV.js} +6 -6
  34. package/dist/{MainMenu-76GBUVNZ.js.map → MainMenu-ETIJZLKV.js.map} +1 -1
  35. package/dist/{MasterLayout-GEQBU2MH.js → MasterLayout-QSYGLVJD.js} +15 -15
  36. package/dist/{MasterLayout-GEQBU2MH.js.map → MasterLayout-QSYGLVJD.js.map} +1 -1
  37. package/dist/{MobileMenu-DS5OJRCO.js → MobileMenu-V624P4XH.js} +16 -16
  38. package/dist/{MobileMenu-DS5OJRCO.js.map → MobileMenu-V624P4XH.js.map} +1 -1
  39. package/dist/{NotificationsPage-OT2WY2EF.js → NotificationsPage-MAN7PINP.js} +15 -15
  40. package/dist/{NotificationsPage-OT2WY2EF.js.map → NotificationsPage-MAN7PINP.js.map} +1 -1
  41. package/dist/{OrderSinglePage-XGPSBIA3.js → OrderSinglePage-43FJCEPN.js} +16 -16
  42. package/dist/{OrderSinglePage-XGPSBIA3.js.map → OrderSinglePage-43FJCEPN.js.map} +1 -1
  43. package/dist/{OrdersPage-A5TARKJ7.js → OrdersPage-TW3VH6EN.js} +15 -15
  44. package/dist/{OrdersPage-A5TARKJ7.js.map → OrdersPage-TW3VH6EN.js.map} +1 -1
  45. package/dist/{PageSingle-VUNU2BG4.js → PageSingle-AX7M6XH3.js} +9 -4
  46. package/dist/PageSingle-AX7M6XH3.js.map +1 -0
  47. package/dist/{ProductDetails-2JWKUXLI.js → ProductDetails-4ABLVN5Z.js} +3 -3
  48. package/dist/{ProductDetails-2JWKUXLI.js.map → ProductDetails-4ABLVN5Z.js.map} +1 -1
  49. package/dist/{ProfilePage-AVUCRBHQ.js → ProfilePage-ACF2CGYH.js} +15 -15
  50. package/dist/{ProfilePage-AVUCRBHQ.js.map → ProfilePage-ACF2CGYH.js.map} +1 -1
  51. package/dist/{SeoCartWidget-X5HTL62D.js → SeoCartWidget-AFJRAXWF.js} +19 -21
  52. package/dist/SeoCartWidget-AFJRAXWF.js.map +1 -0
  53. package/dist/{SettingsPage-WGGKT3I4.js → SettingsPage-FYFH4QLC.js} +15 -15
  54. package/dist/{SettingsPage-WGGKT3I4.js.map → SettingsPage-FYFH4QLC.js.map} +1 -1
  55. package/dist/{StoreClosedNotification-XDYQO7JF.js → StoreClosedNotification-PPQFOIW3.js} +16 -16
  56. package/dist/{StoreClosedNotification-XDYQO7JF.js.map → StoreClosedNotification-PPQFOIW3.js.map} +1 -1
  57. package/dist/{TestimonialsPage-CKAYXFER.js → TestimonialsPage-Q5UIOYG6.js} +8 -4
  58. package/dist/TestimonialsPage-Q5UIOYG6.js.map +1 -0
  59. package/dist/{ThankYouPage-ZTCFTEI7.js → ThankYouPage-FKM3DCWO.js} +16 -21
  60. package/dist/ThankYouPage-FKM3DCWO.js.map +1 -0
  61. package/dist/{WalletPage-XKAOZIO2.js → WalletPage-WI7DXCGJ.js} +16 -16
  62. package/dist/{WalletPage-XKAOZIO2.js.map → WalletPage-WI7DXCGJ.js.map} +1 -1
  63. package/dist/{WishlistPage-LHIUUR4U.js → WishlistPage-G5Z2W5QD.js} +18 -23
  64. package/dist/WishlistPage-G5Z2W5QD.js.map +1 -0
  65. package/dist/api/apps.js +3 -3
  66. package/dist/api/brands.js +3 -3
  67. package/dist/api/cart.js +3 -3
  68. package/dist/api/category.js +3 -3
  69. package/dist/api/client.js +2 -2
  70. package/dist/api/home.js +3 -3
  71. package/dist/api/loyalty.js +3 -3
  72. package/dist/api/menu.js +3 -3
  73. package/dist/api/notification.js +3 -3
  74. package/dist/api/order.js +3 -3
  75. package/dist/api/page.js +3 -3
  76. package/dist/api/product.js +3 -3
  77. package/dist/api/profile.js +2 -2
  78. package/dist/api/store.js +3 -3
  79. package/dist/api/translations.js +3 -3
  80. package/dist/api/user.js +3 -3
  81. package/dist/api/wishlist.js +4 -4
  82. package/dist/{chunk-RH5VLLTG.js → chunk-2IYOHSQN.js} +4 -4
  83. package/dist/{chunk-RH5VLLTG.js.map → chunk-2IYOHSQN.js.map} +1 -1
  84. package/dist/{chunk-3L5VG2X4.js → chunk-4YQQVUXS.js} +4 -4
  85. package/dist/{chunk-3L5VG2X4.js.map → chunk-4YQQVUXS.js.map} +1 -1
  86. package/dist/chunk-5Y64476S.js +80 -0
  87. package/dist/chunk-5Y64476S.js.map +1 -0
  88. package/dist/{chunk-W5K6YUA2.js → chunk-AH6KEBKX.js} +6 -6
  89. package/dist/{chunk-W5K6YUA2.js.map → chunk-AH6KEBKX.js.map} +1 -1
  90. package/dist/{chunk-TOPFB6FL.js → chunk-B2OHRXRD.js} +3 -3
  91. package/dist/{chunk-TOPFB6FL.js.map → chunk-B2OHRXRD.js.map} +1 -1
  92. package/dist/{chunk-3Q22KK7C.js → chunk-CTLTXDHH.js} +5 -5
  93. package/dist/{chunk-3Q22KK7C.js.map → chunk-CTLTXDHH.js.map} +1 -1
  94. package/dist/{chunk-UEQFXSTX.js → chunk-DISOIXUL.js} +124 -119
  95. package/dist/chunk-DISOIXUL.js.map +1 -0
  96. package/dist/{chunk-5X2UFNKY.js → chunk-DZT26OCM.js} +3 -3
  97. package/dist/{chunk-5X2UFNKY.js.map → chunk-DZT26OCM.js.map} +1 -1
  98. package/dist/{chunk-TTMYT3RB.js → chunk-E2XHLK5O.js} +3 -3
  99. package/dist/{chunk-TTMYT3RB.js.map → chunk-E2XHLK5O.js.map} +1 -1
  100. package/dist/{chunk-GOPUP26T.js → chunk-E43ALK3R.js} +4 -9
  101. package/dist/chunk-E43ALK3R.js.map +1 -0
  102. package/dist/{chunk-VI5R46KX.js → chunk-EBFYRFMI.js} +7 -7
  103. package/dist/{chunk-VI5R46KX.js.map → chunk-EBFYRFMI.js.map} +1 -1
  104. package/dist/chunk-EI52BZFN.js +14 -0
  105. package/dist/{chunk-TFROBJP5.js.map → chunk-EI52BZFN.js.map} +1 -1
  106. package/dist/{chunk-A4UQKSOU.js → chunk-ELS6I3O2.js} +4 -4
  107. package/dist/{chunk-A4UQKSOU.js.map → chunk-ELS6I3O2.js.map} +1 -1
  108. package/dist/{chunk-UIOLSYKV.js → chunk-ETPOZJHG.js} +3 -3
  109. package/dist/{chunk-UIOLSYKV.js.map → chunk-ETPOZJHG.js.map} +1 -1
  110. package/dist/{chunk-FTM3RIVB.js → chunk-FBOSUTNC.js} +3 -3
  111. package/dist/{chunk-FTM3RIVB.js.map → chunk-FBOSUTNC.js.map} +1 -1
  112. package/dist/{chunk-EFMAB636.js → chunk-G2VNDZID.js} +3 -3
  113. package/dist/{chunk-EFMAB636.js.map → chunk-G2VNDZID.js.map} +1 -1
  114. package/dist/{chunk-PWBMSGMU.js → chunk-H7BCB2HO.js} +6 -23
  115. package/dist/chunk-H7BCB2HO.js.map +1 -0
  116. package/dist/{chunk-EYFMLMMF.js → chunk-I4XPOEQY.js} +3 -3
  117. package/dist/{chunk-EYFMLMMF.js.map → chunk-I4XPOEQY.js.map} +1 -1
  118. package/dist/{chunk-P3OPJL6I.js → chunk-IKUDCH7Q.js} +3 -3
  119. package/dist/{chunk-P3OPJL6I.js.map → chunk-IKUDCH7Q.js.map} +1 -1
  120. package/dist/{chunk-FAVZMJRY.js → chunk-ITHU2R5C.js} +6 -6
  121. package/dist/{chunk-FAVZMJRY.js.map → chunk-ITHU2R5C.js.map} +1 -1
  122. package/dist/{chunk-SOPZ72BU.js → chunk-J2YKHDMH.js} +3 -3
  123. package/dist/{chunk-SOPZ72BU.js.map → chunk-J2YKHDMH.js.map} +1 -1
  124. package/dist/{chunk-FRFTO2HP.js → chunk-J5DXKBVJ.js} +6 -6
  125. package/dist/{chunk-FRFTO2HP.js.map → chunk-J5DXKBVJ.js.map} +1 -1
  126. package/dist/{chunk-HDO37URJ.js → chunk-K6SNUM3L.js} +3 -3
  127. package/dist/{chunk-HDO37URJ.js.map → chunk-K6SNUM3L.js.map} +1 -1
  128. package/dist/{chunk-VAW73MFZ.js → chunk-KCCU3S5F.js} +9 -9
  129. package/dist/chunk-KCCU3S5F.js.map +1 -0
  130. package/dist/{chunk-Q3COPV5Z.js → chunk-L2DRHH4E.js} +3 -3
  131. package/dist/{chunk-Q3COPV5Z.js.map → chunk-L2DRHH4E.js.map} +1 -1
  132. package/dist/{chunk-UZKTK6YV.js → chunk-NCTG4ZTU.js} +3 -3
  133. package/dist/{chunk-UZKTK6YV.js.map → chunk-NCTG4ZTU.js.map} +1 -1
  134. package/dist/{chunk-EQ32CL4D.js → chunk-NTIGQYSN.js} +3 -3
  135. package/dist/{chunk-EQ32CL4D.js.map → chunk-NTIGQYSN.js.map} +1 -1
  136. package/dist/{chunk-VGIK4BW6.js → chunk-OFRV3WKR.js} +4 -4
  137. package/dist/{chunk-VGIK4BW6.js.map → chunk-OFRV3WKR.js.map} +1 -1
  138. package/dist/{chunk-6IRWFBGU.js → chunk-TRZAQSHU.js} +3 -3
  139. package/dist/{chunk-6IRWFBGU.js.map → chunk-TRZAQSHU.js.map} +1 -1
  140. package/dist/{chunk-Y43T7PJV.js → chunk-TY3XJOIQ.js} +3 -3
  141. package/dist/{chunk-Y43T7PJV.js.map → chunk-TY3XJOIQ.js.map} +1 -1
  142. package/dist/{chunk-EAZGFREP.js → chunk-VAMIJGCU.js} +3 -3
  143. package/dist/{chunk-EAZGFREP.js.map → chunk-VAMIJGCU.js.map} +1 -1
  144. package/dist/{chunk-RJAVZBUK.js → chunk-XBW7EHBA.js} +3 -3
  145. package/dist/{chunk-RJAVZBUK.js.map → chunk-XBW7EHBA.js.map} +1 -1
  146. package/dist/{chunk-GYXT7T2Z.js → chunk-XCYIGCUN.js} +3 -3
  147. package/dist/{chunk-GYXT7T2Z.js.map → chunk-XCYIGCUN.js.map} +1 -1
  148. package/dist/{chunk-VKB5AQUS.js → chunk-Y7NC2NDA.js} +3 -3
  149. package/dist/{chunk-VKB5AQUS.js.map → chunk-Y7NC2NDA.js.map} +1 -1
  150. package/dist/components/cart/SeoCartWidget.d.ts.map +1 -1
  151. package/dist/components/cart/index.js +1 -1
  152. package/dist/components/common/index.js +1 -1
  153. package/dist/components/drawer/index.js +13 -13
  154. package/dist/components/home/index.js +17 -17
  155. package/dist/components/layout/index.js +1 -1
  156. package/dist/components/product/index.js +14 -14
  157. package/dist/components/store/index.js +15 -15
  158. package/dist/{document-class-SPTMBRWL.js → document-class-P33S4CA7.js} +9 -9
  159. package/dist/{document-class-SPTMBRWL.js.map → document-class-P33S4CA7.js.map} +1 -1
  160. package/dist/hooks/index.js +13 -13
  161. package/dist/hooks/useComments.d.ts.map +1 -1
  162. package/dist/hooks/useComments.js +6 -1
  163. package/dist/hooks/useGtm.js +13 -13
  164. package/dist/hooks/useMoney.js +13 -13
  165. package/dist/hooks/usePageConfig.d.ts.map +1 -1
  166. package/dist/hooks/useProduct.d.ts.map +1 -1
  167. package/dist/hooks/useProduct.js +6 -1
  168. package/dist/hooks/useStore.js +13 -13
  169. package/dist/hooks/useUser.js +4 -4
  170. package/dist/index.js +13 -13
  171. package/dist/{not-found-T2WYF64G.js → not-found-4R764WCJ.js} +16 -16
  172. package/dist/{not-found-T2WYF64G.js.map → not-found-4R764WCJ.js.map} +1 -1
  173. package/dist/providers/TwilightProvider.d.ts.map +1 -1
  174. package/dist/providers/index.js +13 -13
  175. package/dist/providers/twilight-init.d.ts.map +1 -1
  176. package/dist/routes/account/orders.js +4 -4
  177. package/dist/routes/account/wishlist/WishlistPage.d.ts.map +1 -1
  178. package/dist/routes/account.js +13 -13
  179. package/dist/routes/blog.js +8 -8
  180. package/dist/routes/brands.js +4 -4
  181. package/dist/routes/cart.js +21 -21
  182. package/dist/routes/home.js +18 -18
  183. package/dist/routes/loyalty.js +5 -5
  184. package/dist/routes/page.js +4 -4
  185. package/dist/routes/product-listing/ProductListPage.d.ts.map +1 -1
  186. package/dist/routes/product-listing/useAppliedFilters.d.ts.map +1 -1
  187. package/dist/routes/product-listing.js +21 -29
  188. package/dist/routes/product-listing.js.map +1 -1
  189. package/dist/routes/product.js +17 -17
  190. package/dist/routes/testimonials.js +1 -1
  191. package/dist/routes/thank-you/ThankYouPage.d.ts.map +1 -1
  192. package/dist/routes/thank-you.js +4 -4
  193. package/dist/skeleton.js +18 -18
  194. package/dist/tanstack.js +8 -8
  195. package/dist/utils/index.d.ts +1 -1
  196. package/dist/utils/index.d.ts.map +1 -1
  197. package/dist/utils/index.js +2 -2
  198. package/dist/utils/sdk-helpers.d.ts +36 -0
  199. package/dist/utils/sdk-helpers.d.ts.map +1 -1
  200. package/package.json +1 -1
  201. package/dist/PageSingle-VUNU2BG4.js.map +0 -1
  202. package/dist/SeoCartWidget-X5HTL62D.js.map +0 -1
  203. package/dist/TestimonialsPage-CKAYXFER.js.map +0 -1
  204. package/dist/ThankYouPage-ZTCFTEI7.js.map +0 -1
  205. package/dist/WishlistPage-LHIUUR4U.js.map +0 -1
  206. package/dist/chunk-GOPUP26T.js.map +0 -1
  207. package/dist/chunk-PWBMSGMU.js.map +0 -1
  208. package/dist/chunk-TFROBJP5.js +0 -14
  209. package/dist/chunk-UEQFXSTX.js.map +0 -1
  210. package/dist/chunk-VAW73MFZ.js.map +0 -1
  211. package/dist/chunk-WY4IYO3G.js +0 -25
  212. package/dist/chunk-WY4IYO3G.js.map +0 -1
@@ -1,27 +1,27 @@
1
- import { wishlist } from './chunk-RH5VLLTG.js';
2
- import './chunk-HDO37URJ.js';
3
- import { useMoney } from './chunk-UEQFXSTX.js';
4
- import './chunk-3Q22KK7C.js';
1
+ import { wishlist } from './chunk-2IYOHSQN.js';
2
+ import './chunk-K6SNUM3L.js';
3
+ import { useMoney } from './chunk-DISOIXUL.js';
4
+ import './chunk-CTLTXDHH.js';
5
5
  import './chunk-JKIRRMBU.js';
6
6
  import './chunk-2JV6WZ6O.js';
7
- import './chunk-UIOLSYKV.js';
7
+ import './chunk-ETPOZJHG.js';
8
8
  import './chunk-VVZNW5CB.js';
9
9
  import './chunk-2XGQSJKH.js';
10
10
  import { useLocation } from './chunk-SSPAMQRV.js';
11
11
  import './chunk-ZGHRSRDO.js';
12
- import './chunk-GOPUP26T.js';
12
+ import './chunk-E43ALK3R.js';
13
13
  import './chunk-C5X6CVXC.js';
14
- import './chunk-UZKTK6YV.js';
15
- import './chunk-5X2UFNKY.js';
16
- import './chunk-P3OPJL6I.js';
17
- import './chunk-WY4IYO3G.js';
18
- import './chunk-TYLKNVQA.js';
19
- import './chunk-SR4OTLTJ.js';
20
- import './chunk-N2S25NXP.js';
14
+ import './chunk-NCTG4ZTU.js';
15
+ import './chunk-DZT26OCM.js';
16
+ import './chunk-IKUDCH7Q.js';
21
17
  import './chunk-TP3LCGE7.js';
22
18
  import './chunk-Z653O7MX.js';
23
19
  import './chunk-ZCH7W7DZ.js';
24
- import './chunk-PWBMSGMU.js';
20
+ import './chunk-H7BCB2HO.js';
21
+ import { onSallaEvent } from './chunk-5Y64476S.js';
22
+ import './chunk-TYLKNVQA.js';
23
+ import './chunk-SR4OTLTJ.js';
24
+ import './chunk-N2S25NXP.js';
25
25
  import './chunk-JWXJPJBO.js';
26
26
  import './chunk-CW625T2E.js';
27
27
  import './chunk-7V36I5GT.js';
@@ -33,7 +33,7 @@ import './chunk-T72DAX7R.js';
33
33
  import './chunk-RJPPO3ET.js';
34
34
  import { HookSlot } from './chunk-Q7VWURUR.js';
35
35
  import './chunk-GU2KUQVD.js';
36
- import { LazyNoContent, Image } from './chunk-SOPZ72BU.js';
36
+ import { LazyNoContent, Image } from './chunk-J2YKHDMH.js';
37
37
  import './chunk-AXW67SY7.js';
38
38
  import './chunk-BYMOPN2S.js';
39
39
  import './chunk-SKLEJJ6M.js';
@@ -378,8 +378,6 @@ function useWishlistItems({ query, products, pagination }, onRemoved) {
378
378
  };
379
379
  }, [products, query.page, pagination?.next]);
380
380
  useEffect(() => {
381
- const salla = window.salla;
382
- if (!salla?.event) return;
383
381
  const handleRemoved = (_response, id) => {
384
382
  const reduceMotion = window.matchMedia("(prefers-reduced-motion: reduce)").matches;
385
383
  (reduceMotion ? setRemovedIds : setRemovingIds)(
@@ -387,10 +385,7 @@ function useWishlistItems({ query, products, pagination }, onRemoved) {
387
385
  );
388
386
  onRemoved(Number(id));
389
387
  };
390
- salla.event.on("wishlist::removed", handleRemoved);
391
- return () => {
392
- salla.event.off("wishlist::removed", handleRemoved);
393
- };
388
+ return onSallaEvent("wishlist::removed", handleRemoved);
394
389
  }, [onRemoved]);
395
390
  useEffect(() => {
396
391
  const { ids, hasMore } = loadedRef.current;
@@ -495,5 +490,5 @@ function WishlistPage(props) {
495
490
  }
496
491
 
497
492
  export { WishlistPage };
498
- //# sourceMappingURL=WishlistPage-LHIUUR4U.js.map
499
- //# sourceMappingURL=WishlistPage-LHIUUR4U.js.map
493
+ //# sourceMappingURL=WishlistPage-G5Z2W5QD.js.map
494
+ //# sourceMappingURL=WishlistPage-G5Z2W5QD.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/routes/account/wishlist/WishlistShare.tsx","../src/routes/account/wishlist/WishlistPage.tsx"],"names":["SallaSocialShare","useEffect","jsxs","jsx","SallaButton","useRef","useState","useCallback","items"],"mappings":"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","file":"WishlistPage-G5Z2W5QD.js","sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\nimport { SallaButton } from '@salla.sa/twilight-components-react/button';\n// The eager (non-deferred) export: the share dialog is opened imperatively through a ref, and the\n// deferred wrapper doesn't attach it until it has hydrated — a click before that would do nothing.\nimport { SallaSocialShareCore as SallaSocialShare } from '@salla.sa/twilight-components-react/social-share';\nimport { useTranslation } from '../../../providers/I18nProvider';\n\ntype ShareResponse = { data?: { url?: string }; url?: string } | undefined;\ntype SocialShareElement = HTMLElement & {\n url?: string;\n refresh?: () => Promise<void>;\n open?: () => Promise<void>;\n close?: () => Promise<void>;\n};\n\n/**\n * Share state for the wishlist page: the \"Share\" dropdown (share the whole list / share\n * specific items), the selection used by \"specific items\", and the share request itself.\n * Mirrors what the SDK's `<salla-wishlist-actions>` does, but drives the page's own React\n * list — that component needs a sibling `<salla-products-list>`, which this page doesn't render.\n */\nexport function useWishlistShare() {\n const [menuOpen, setMenuOpen] = useState(false);\n const [selecting, setSelecting] = useState(false);\n const [selectedIds, setSelectedIds] = useState<number[]>([]);\n const [sharing, setSharing] = useState(false);\n const [shareUrl, setShareUrl] = useState('');\n /** Ids of every product currently rendered (later cursor pages included), for \"select all\". */\n const loadedIdsRef = useRef<number[]>([]);\n const socialShareRef = useRef<SocialShareElement | null>(null);\n\n const share = useCallback(async (ids: number[], selectAll: boolean) => {\n if (!window.salla?.wishlist?.share) return;\n setSharing(true);\n try {\n const response = (await window.salla.wishlist.share(ids, selectAll)) as ShareResponse;\n const url = response?.data?.url || response?.url || '';\n if (!url) return;\n setShareUrl(url);\n const element = socialShareRef.current;\n if (element) {\n element.url = url;\n await element.refresh?.();\n await element.open?.();\n }\n } catch {\n // The SDK reports a failed share itself (notification); nothing to recover here.\n } finally {\n setSharing(false);\n }\n }, []);\n\n const shareAll = useCallback(() => {\n setMenuOpen(false);\n void share([], true);\n }, [share]);\n\n const shareSelected = useCallback(() => {\n if (selectedIds.length) void share(selectedIds, false);\n }, [share, selectedIds]);\n\n const startSelecting = useCallback(() => {\n setMenuOpen(false);\n setSelecting(true);\n }, []);\n\n const cancelSelecting = useCallback(() => {\n setSelecting(false);\n setSelectedIds([]);\n setShareUrl('');\n void socialShareRef.current?.close?.();\n }, []);\n\n const toggleSelected = useCallback((id: number) => {\n setShareUrl('');\n setSelectedIds((current) =>\n current.includes(id) ? current.filter((existing) => existing !== id) : [...current, id]\n );\n }, []);\n\n const selectedIdsRef = useRef(selectedIds);\n useEffect(() => {\n selectedIdsRef.current = selectedIds;\n }, [selectedIds]);\n\n const deselect = useCallback((id: number) => {\n if (!selectedIdsRef.current.includes(id)) return;\n // A link built for the old selection would still offer the removed product.\n setShareUrl('');\n const element = socialShareRef.current;\n if (element) {\n element.url = undefined;\n void element.close?.();\n }\n setSelectedIds((current) => current.filter((existing) => existing !== id));\n }, []);\n\n const toggleAll = useCallback(() => {\n setShareUrl('');\n setSelectedIds((current) =>\n current.length && current.length === loadedIdsRef.current.length\n ? []\n : [...loadedIdsRef.current]\n );\n }, []);\n\n return {\n menuOpen,\n setMenuOpen,\n selecting,\n selectedIds,\n sharing,\n shareUrl,\n loadedIdsRef,\n socialShareRef,\n shareAll,\n shareSelected,\n startSelecting,\n cancelSelecting,\n toggleSelected,\n toggleAll,\n deselect,\n };\n}\n\nexport type WishlistShareState = ReturnType<typeof useWishlistShare>;\n\n/** The bar above the wishlist: the \"Share\" dropdown, or — while picking products — the selection controls. */\nexport function WishlistShareBar({\n state,\n hasProducts,\n}: {\n state: WishlistShareState;\n hasProducts: boolean;\n}) {\n const { t } = useTranslation();\n const rootRef = useRef<HTMLDivElement>(null);\n const { menuOpen, setMenuOpen } = state;\n\n // Close the dropdown on an outside click or Escape.\n useEffect(() => {\n if (!menuOpen) return;\n const onPointerDown = (event: MouseEvent) => {\n if (!rootRef.current?.contains(event.target as Node)) setMenuOpen(false);\n };\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') setMenuOpen(false);\n };\n document.addEventListener('mousedown', onPointerDown);\n document.addEventListener('keydown', onKeyDown);\n return () => {\n document.removeEventListener('mousedown', onPointerDown);\n document.removeEventListener('keydown', onKeyDown);\n };\n }, [menuOpen, setMenuOpen]);\n\n const selectedCount = state.selectedIds.length;\n const allSelected = selectedCount > 0 && selectedCount === state.loadedIdsRef.current.length;\n\n return (\n <div ref={rootRef} className=\"s-wishlist-actions\">\n <div className=\"s-wishlist-actions-bar flex items-center justify-end gap-3 mb-3\">\n {state.selecting ? (\n <div className=\"s-wishlist-actions-selection flex items-center gap-3\">\n <label className=\"s-wishlist-actions-select-all inline-flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={allSelected}\n ref={(input) => {\n if (input) input.indeterminate = selectedCount > 0 && !allSelected;\n }}\n onChange={state.toggleAll}\n />\n {t('pages.wishlist.select_all', 'Select all')}\n </label>\n <SallaButton\n color=\"primary\"\n disabled={selectedCount === 0 || state.sharing}\n onClick={state.shareSelected}\n >\n {t('pages.wishlist.share', 'Share')}\n {selectedCount > 0 ? ` (${selectedCount})` : ''}\n </SallaButton>\n <SallaButton fill=\"outline\" color=\"light\" onClick={state.cancelSelecting}>\n {t('common.elements.cancel', 'Cancel')}\n </SallaButton>\n </div>\n ) : (\n <div className=\"s-wishlist-actions-dropdown relative\">\n <SallaButton\n color=\"primary\"\n fill=\"outline\"\n disabled={!hasProducts || state.sharing}\n aria-haspopup=\"true\"\n aria-expanded={menuOpen}\n onClick={() => setMenuOpen(!menuOpen)}\n >\n <span className=\"flex items-center justify-center gap-2\">\n <i className=\"sicon-share-alt\" aria-hidden=\"true\" />\n {t('pages.wishlist.share', 'Share')}\n <i className=\"sicon-keyboard_arrow_down\" aria-hidden=\"true\" />\n </span>\n </SallaButton>\n {menuOpen && (\n <ul\n role=\"menu\"\n className=\"s-wishlist-actions-menu absolute z-10 mt-2 min-w-48 rounded-md bg-white py-2 shadow-default rtl:right-0 ltr:left-0\"\n >\n <li role=\"none\">\n <button\n type=\"button\"\n role=\"menuitem\"\n className=\"s-wishlist-actions-item block w-full px-4 py-2 text-start text-sm text-gray-700 hover:bg-gray-50\"\n onClick={state.shareAll}\n >\n {t('pages.wishlist.share_all', 'Share the list')}\n </button>\n </li>\n <li role=\"none\">\n <button\n type=\"button\"\n role=\"menuitem\"\n className=\"s-wishlist-actions-item block w-full px-4 py-2 text-start text-sm text-gray-700 hover:bg-gray-50\"\n onClick={state.startSelecting}\n >\n {t('pages.wishlist.share_specific', 'Share specific items')}\n </button>\n </li>\n </ul>\n )}\n </div>\n )}\n </div>\n {/* Same setup as the SDK's <salla-wishlist-actions>: the centered modal variant, opened by the\n dropdown rather than by the component's own round share button, so the default\n `widget` slot (that button) is replaced by an empty anchor. */}\n <SallaSocialShare\n ref={state.socialShareRef as never}\n url={state.shareUrl || undefined}\n mode=\"modal\"\n modalTitle={t('pages.wishlist.share_list_title', 'Share wishlist')}\n className=\"s-wishlist-actions-social\"\n >\n <span slot=\"widget\" className=\"s-wishlist-actions-social-anchor\" aria-hidden=\"true\" />\n </SallaSocialShare>\n </div>\n );\n}\n","import { useCallback, useEffect, useMemo, useRef, useState, type CSSProperties } from 'react';\nimport { useQueryClient } from '@tanstack/react-query';\nimport { ItemsList } from '@salla.sa/twilight-components-react';\nimport { SallaAddProductButton } from '@salla.sa/twilight-components-react/add-product-button';\nimport { SallaButton } from '@salla.sa/twilight-components-react/button';\nimport { wishlist } from '../../../api/wishlist';\nimport type { Product } from '../../../types';\nimport { HookSlot, useWishlist, useMoney } from '../../../hooks';\nimport { useTranslation } from '../../../providers/I18nProvider';\nimport type { WishlistPageProps } from './types';\nimport { WishlistShareBar, useWishlistShare } from './WishlistShare';\nimport { NoContent, Image } from '../../../components/common';\nimport { useLocation } from '../../../providers/NavigationProvider';\nimport { onSallaEvent } from '../../../utils/sdk-helpers';\n\ninterface WishlistCardSelection {\n /** \"Share specific items\" mode: the card shows a checkbox and toggles on click. */\n selecting: boolean;\n selected: boolean;\n onToggle: (id: number) => void;\n}\n\n// The loaded component copies host attributes (not properties) onto its inner salla-button.\nconst setAddButtonAttributes = (el: HTMLElement | null) => {\n el?.setAttribute('loader-position', 'center');\n el?.setAttribute('fill', 'outline');\n};\n\nconst REMOVING_MS = 300;\n\nconst REMOVING_STYLE: CSSProperties = {\n opacity: 0,\n transform: 'scale(0.95)',\n transition: `opacity ${REMOVING_MS}ms ease-in-out, transform ${REMOVING_MS}ms ease-in-out`,\n};\n\nfunction WishlistCard({\n product: prod,\n selection,\n removing,\n onRemoved,\n}: {\n product: Product;\n selection?: WishlistCardSelection;\n /** Fades the card out, then calls `onRemoved` once the fade ends. */\n removing?: boolean;\n onRemoved?: (id: number) => void;\n}) {\n const { remove } = useWishlist();\n const { format } = useMoney();\n\n // Drops the card even when `transitionend` never fires (hidden tab, overridden styles).\n useEffect(() => {\n if (!removing) return;\n const timer = setTimeout(() => onRemoved?.(Number(prod.id)), REMOVING_MS + 50);\n return () => clearTimeout(timer);\n }, [removing, onRemoved, prod.id]);\n\n const handleRemove = () => {\n if (prod.id) {\n remove(Number(prod.id));\n }\n };\n\n const displayPrice = prod.sale_price ?? prod.price;\n const regularPrice = prod.regular_price;\n\n return (\n <div\n id={`wishlist-product-${prod.id}`}\n className={`product-entry product-entry--wishlist${selection?.selected ? ' is-selected' : ''}`}\n style={removing ? REMOVING_STYLE : undefined}\n onTransitionEnd={(event) => {\n if (removing && event.target === event.currentTarget && event.propertyName === 'opacity') {\n onRemoved?.(Number(prod.id));\n }\n }}\n >\n {selection?.selecting && (\n <input\n type=\"checkbox\"\n className=\"s-wishlist-select shrink-0 rtl:ml-4 ltr:mr-4\"\n aria-label={prod.name}\n checked={selection.selected}\n onChange={() => selection.onToggle(Number(prod.id))}\n />\n )}\n <div className=\"flex items-center mb-4 sm:mb-0\">\n <a href={prod.url} className=\"product-entry__image\">\n <Image\n className=\"object-cover w-full h-full\"\n src={prod.image?.url}\n alt={prod.image?.alt ?? prod.name}\n aspectRatio=\"1/1\"\n />\n </a>\n <div className=\"flex-1 rtl:pr-5 ltr:pl-5\">\n <h3 className=\"text-sm text-gray-800 leading-6 mb-1.5 rtl:pl-5 ltr:pr-5 rtl:md:pl-8 ltr:md:pr-8 line-clamp-1\">\n <a href={prod.url}>{prod.name}</a>\n </h3>\n <div className=\"w-full center-between\">\n {prod.is_on_sale && regularPrice ? (\n <div className=\"space-x-1 rtl:space-x-reverse\">\n <h4 className=\"inline-block text-sm font-bold text-red-400\">\n {format(displayPrice)}\n </h4>\n <span className=\"text-sm text-gray-500 line-through\">{format(regularPrice)}</span>\n </div>\n ) : (\n <h4 className=\"text-sm font-bold\">{format(displayPrice)}</h4>\n )}\n </div>\n </div>\n </div>\n <div className=\"flex items-center space-x-4 rtl:space-x-reverse\">\n <SallaAddProductButton\n ref={setAddButtonAttributes}\n productStatus={prod.status}\n productId={prod.id}\n productType={prod.type}\n loaderPosition=\"center\"\n fill=\"outline\"\n className=\"flex-grow w-full sm:grow-0 md:w-40\"\n />\n <SallaButton\n loaderPosition=\"center\"\n shape=\"icon\"\n size=\"small\"\n color=\"danger\"\n className=\"btn--delete\"\n onClick={handleRemove}\n >\n <i className=\"sicon-cancel\" />\n </SallaButton>\n </div>\n </div>\n );\n}\n\n/** The loaded wishlist pages, reloaded from the server once every loaded card is removed (like Twig). */\nfunction useWishlistItems(\n { query, products, pagination }: WishlistPageProps,\n onRemoved: (id: number) => void\n) {\n const queryClient = useQueryClient();\n // Track the next page to load (starts at page 2 since page 1 is SSR)\n const nextPageRef = useRef(query.page + 1);\n const [removedIds, setRemovedIds] = useState<ReadonlySet<number>>(() => new Set());\n const [removingIds, setRemovingIds] = useState<ReadonlySet<number>>(() => new Set());\n const [reloaded, setReloaded] = useState<{\n items: Product[];\n next: string | null;\n generation: number;\n } | null>(null);\n const loadedRef = useRef({\n ids: products.map((prod) => Number(prod.id)),\n hasMore: !!pagination?.next,\n });\n\n // A `?page=` navigation keeps this instance, so drop what the previous page removed or reloaded.\n const [loadedProducts, setLoadedProducts] = useState(products);\n if (loadedProducts !== products) {\n setLoadedProducts(products);\n setRemovedIds(new Set());\n setRemovingIds(new Set());\n setReloaded(null);\n }\n\n useEffect(() => {\n nextPageRef.current = query.page + 1;\n loadedRef.current = {\n ids: products.map((prod) => Number(prod.id)),\n hasMore: !!pagination?.next,\n };\n }, [products, query.page, pagination?.next]);\n\n useEffect(() => {\n const handleRemoved = (_response: unknown, id: unknown) => {\n const reduceMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n (reduceMotion ? setRemovedIds : setRemovingIds)((current) =>\n new Set(current).add(Number(id))\n );\n onRemoved(Number(id));\n };\n\n return onSallaEvent('wishlist::removed', handleRemoved);\n }, [onRemoved]);\n\n useEffect(() => {\n const { ids, hasMore } = loadedRef.current;\n if (!ids.length || !ids.every((id) => removedIds.has(id))) return;\n\n const reset = (items: Product[], next: string | null) => {\n nextPageRef.current = query.page + 1;\n loadedRef.current = { ids: items.map((prod) => Number(prod.id)), hasMore: !!next };\n setRemovedIds(new Set());\n setRemovingIds(new Set());\n setReloaded((current) => ({ items, next, generation: (current?.generation ?? 0) + 1 }));\n };\n\n if (!hasMore) {\n reset([], null);\n return;\n }\n\n let cancelled = false;\n queryClient\n .fetchQuery({ ...wishlist.queries.list({ page: query.page }), staleTime: 0 })\n .then((result) => {\n if (!cancelled) reset(result.items, result.next);\n })\n // A failed reload keeps the list as it is; later pages still load on scroll.\n .catch(() => undefined);\n return () => {\n cancelled = true;\n };\n }, [removedIds, query.page, products, queryClient]);\n\n const loader = async () => {\n const pageToLoad = nextPageRef.current;\n const result = await wishlist.list({ page: pageToLoad });\n\n nextPageRef.current = pageToLoad + 1;\n loadedRef.current = {\n ids: [...loadedRef.current.ids, ...result.items.map((prod) => Number(prod.id))],\n hasMore: !!result.next,\n };\n\n return {\n items: result.items,\n next: result.next,\n };\n };\n\n const finishRemoving = useCallback((id: number) => {\n setRemovedIds((current) => (current.has(id) ? current : new Set(current).add(id)));\n }, []);\n\n return {\n items: reloaded ? reloaded.items : products,\n next: reloaded ? reloaded.next : pagination?.next,\n generation: reloaded?.generation ?? 0,\n removedIds,\n removingIds,\n finishRemoving,\n loader,\n };\n}\n\nexport function WishlistPage(props: WishlistPageProps) {\n const { t } = useTranslation();\n const { pathname, searchStr } = useLocation();\n const shareState = useWishlistShare();\n const selectedIdSet = useMemo(() => new Set(shareState.selectedIds), [shareState.selectedIds]);\n const { items, next, generation, removedIds, removingIds, finishRemoving, loader } =\n useWishlistItems(props, shareState.deselect);\n const hasRemaining = items.some((prod) => !removedIds.has(Number(prod.id)));\n\n return (\n <div className=\"space-y-5\" id=\"wishlist\">\n <HookSlot name=\"customer:wishlist.items.start\" />\n <WishlistShareBar state={shareState} hasProducts={hasRemaining || !!next} />\n <ItemsList<Product>\n key={generation}\n items={items}\n loader={loader}\n mode={next ? 'infinite' : 'static'}\n pageUrl={pathname + searchStr}\n className=\"s-products-list\"\n itemsClassName=\"s-products-list-wrapper s-products-list-row-cards\"\n empty={\n <div className=\"text-center py-16\">\n <NoContent\n icon=\"sicon-heart\"\n message={t('common.errors.no_wishlist', \"You don't have any wishes\")}\n actionLabel={t('pages.offer.continue_shopping', 'Continue shopping')}\n actionUrl=\"/\"\n />\n </div>\n }\n t={(key, fallback) => t(key, fallback || key)}\n >\n {(items) => {\n const remaining = items.filter((item) => !removedIds.has(Number(item.id)));\n shareState.loadedIdsRef.current = remaining.map((item) => Number(item.id));\n return remaining.map((prod) => (\n <WishlistCard\n key={prod.id}\n product={prod}\n removing={removingIds.has(Number(prod.id))}\n onRemoved={finishRemoving}\n selection={{\n selecting: shareState.selecting,\n selected: selectedIdSet.has(Number(prod.id)),\n onToggle: shareState.toggleSelected,\n }}\n />\n ));\n }}\n </ItemsList>\n <HookSlot name=\"customer:wishlist.items.end\" />\n </div>\n );\n}\n"]}
package/dist/api/apps.js CHANGED
@@ -1,6 +1,6 @@
1
- export { apps } from '../chunk-UIOLSYKV.js';
2
- import '../chunk-P3OPJL6I.js';
3
- import '../chunk-WY4IYO3G.js';
1
+ export { apps } from '../chunk-ETPOZJHG.js';
2
+ import '../chunk-IKUDCH7Q.js';
3
+ import '../chunk-5Y64476S.js';
4
4
  import '../chunk-TYLKNVQA.js';
5
5
  import '../chunk-SR4OTLTJ.js';
6
6
  import '../chunk-N2S25NXP.js';
@@ -1,8 +1,8 @@
1
- export { brand } from '../chunk-TOPFB6FL.js';
1
+ export { brand } from '../chunk-B2OHRXRD.js';
2
2
  import '../chunk-SSPAMQRV.js';
3
3
  import '../chunk-ZGHRSRDO.js';
4
- import '../chunk-P3OPJL6I.js';
5
- import '../chunk-WY4IYO3G.js';
4
+ import '../chunk-IKUDCH7Q.js';
5
+ import '../chunk-5Y64476S.js';
6
6
  import '../chunk-TYLKNVQA.js';
7
7
  import '../chunk-SR4OTLTJ.js';
8
8
  import '../chunk-N2S25NXP.js';
package/dist/api/cart.js CHANGED
@@ -1,8 +1,8 @@
1
- export { cart } from '../chunk-3L5VG2X4.js';
1
+ export { cart } from '../chunk-4YQQVUXS.js';
2
2
  import '../chunk-SSPAMQRV.js';
3
3
  import '../chunk-ZGHRSRDO.js';
4
- import '../chunk-P3OPJL6I.js';
5
- import '../chunk-WY4IYO3G.js';
4
+ import '../chunk-IKUDCH7Q.js';
5
+ import '../chunk-5Y64476S.js';
6
6
  import '../chunk-TYLKNVQA.js';
7
7
  import '../chunk-SR4OTLTJ.js';
8
8
  import '../chunk-N2S25NXP.js';
@@ -1,8 +1,8 @@
1
- export { category } from '../chunk-GYXT7T2Z.js';
1
+ export { category } from '../chunk-XCYIGCUN.js';
2
2
  import '../chunk-SSPAMQRV.js';
3
3
  import '../chunk-ZGHRSRDO.js';
4
- import '../chunk-P3OPJL6I.js';
5
- import '../chunk-WY4IYO3G.js';
4
+ import '../chunk-IKUDCH7Q.js';
5
+ import '../chunk-5Y64476S.js';
6
6
  import '../chunk-TYLKNVQA.js';
7
7
  import '../chunk-SR4OTLTJ.js';
8
8
  import '../chunk-N2S25NXP.js';
@@ -1,5 +1,5 @@
1
- export { STORE_IDENTIFIER_HEADER, api, cdn, filesCdn, getActiveScope, getActiveScopeId, getAuthToken } from '../chunk-P3OPJL6I.js';
2
- import '../chunk-WY4IYO3G.js';
1
+ export { STORE_IDENTIFIER_HEADER, api, cdn, filesCdn, getActiveScope, getActiveScopeId, getAuthToken } from '../chunk-IKUDCH7Q.js';
2
+ import '../chunk-5Y64476S.js';
3
3
  import '../chunk-TYLKNVQA.js';
4
4
  import '../chunk-SR4OTLTJ.js';
5
5
  import '../chunk-N2S25NXP.js';
package/dist/api/home.js CHANGED
@@ -1,6 +1,6 @@
1
- export { home } from '../chunk-Y43T7PJV.js';
2
- import '../chunk-P3OPJL6I.js';
3
- import '../chunk-WY4IYO3G.js';
1
+ export { home } from '../chunk-TY3XJOIQ.js';
2
+ import '../chunk-IKUDCH7Q.js';
3
+ import '../chunk-5Y64476S.js';
4
4
  import '../chunk-TYLKNVQA.js';
5
5
  import '../chunk-SR4OTLTJ.js';
6
6
  import '../chunk-N2S25NXP.js';
@@ -1,8 +1,8 @@
1
- export { loyalty } from '../chunk-VKB5AQUS.js';
1
+ export { loyalty } from '../chunk-Y7NC2NDA.js';
2
2
  import '../chunk-SSPAMQRV.js';
3
3
  import '../chunk-ZGHRSRDO.js';
4
- import '../chunk-P3OPJL6I.js';
5
- import '../chunk-WY4IYO3G.js';
4
+ import '../chunk-IKUDCH7Q.js';
5
+ import '../chunk-5Y64476S.js';
6
6
  import '../chunk-TYLKNVQA.js';
7
7
  import '../chunk-SR4OTLTJ.js';
8
8
  import '../chunk-N2S25NXP.js';
package/dist/api/menu.js CHANGED
@@ -1,6 +1,6 @@
1
- export { menu } from '../chunk-TTMYT3RB.js';
2
- import '../chunk-P3OPJL6I.js';
3
- import '../chunk-WY4IYO3G.js';
1
+ export { menu } from '../chunk-E2XHLK5O.js';
2
+ import '../chunk-IKUDCH7Q.js';
3
+ import '../chunk-5Y64476S.js';
4
4
  import '../chunk-TYLKNVQA.js';
5
5
  import '../chunk-SR4OTLTJ.js';
6
6
  import '../chunk-N2S25NXP.js';
@@ -1,6 +1,6 @@
1
- export { notification } from '../chunk-RJAVZBUK.js';
2
- import '../chunk-P3OPJL6I.js';
3
- import '../chunk-WY4IYO3G.js';
1
+ export { notification } from '../chunk-XBW7EHBA.js';
2
+ import '../chunk-IKUDCH7Q.js';
3
+ import '../chunk-5Y64476S.js';
4
4
  import '../chunk-TYLKNVQA.js';
5
5
  import '../chunk-SR4OTLTJ.js';
6
6
  import '../chunk-N2S25NXP.js';
package/dist/api/order.js CHANGED
@@ -1,8 +1,8 @@
1
- export { order } from '../chunk-6IRWFBGU.js';
1
+ export { order } from '../chunk-TRZAQSHU.js';
2
2
  import '../chunk-SSPAMQRV.js';
3
3
  import '../chunk-ZGHRSRDO.js';
4
- import '../chunk-P3OPJL6I.js';
5
- import '../chunk-WY4IYO3G.js';
4
+ import '../chunk-IKUDCH7Q.js';
5
+ import '../chunk-5Y64476S.js';
6
6
  import '../chunk-TYLKNVQA.js';
7
7
  import '../chunk-SR4OTLTJ.js';
8
8
  import '../chunk-N2S25NXP.js';
package/dist/api/page.js CHANGED
@@ -1,8 +1,8 @@
1
- export { page } from '../chunk-EFMAB636.js';
1
+ export { page } from '../chunk-G2VNDZID.js';
2
2
  import '../chunk-SSPAMQRV.js';
3
3
  import '../chunk-ZGHRSRDO.js';
4
- import '../chunk-P3OPJL6I.js';
5
- import '../chunk-WY4IYO3G.js';
4
+ import '../chunk-IKUDCH7Q.js';
5
+ import '../chunk-5Y64476S.js';
6
6
  import '../chunk-TYLKNVQA.js';
7
7
  import '../chunk-SR4OTLTJ.js';
8
8
  import '../chunk-N2S25NXP.js';
@@ -1,8 +1,8 @@
1
- export { getProductPreview, isProductPreviewQuery, product, productDetailQueryKey, productPreviewQueryKey, rememberProductPreview, shouldDehydrateQuery } from '../chunk-HDO37URJ.js';
1
+ export { getProductPreview, isProductPreviewQuery, product, productDetailQueryKey, productPreviewQueryKey, rememberProductPreview, shouldDehydrateQuery } from '../chunk-K6SNUM3L.js';
2
2
  import '../chunk-SSPAMQRV.js';
3
3
  import '../chunk-ZGHRSRDO.js';
4
- import '../chunk-P3OPJL6I.js';
5
- import '../chunk-WY4IYO3G.js';
4
+ import '../chunk-IKUDCH7Q.js';
5
+ import '../chunk-5Y64476S.js';
6
6
  import '../chunk-TYLKNVQA.js';
7
7
  import '../chunk-SR4OTLTJ.js';
8
8
  import '../chunk-N2S25NXP.js';
@@ -1,5 +1,5 @@
1
- import { api } from '../chunk-P3OPJL6I.js';
2
- import '../chunk-WY4IYO3G.js';
1
+ import { api } from '../chunk-IKUDCH7Q.js';
2
+ import '../chunk-5Y64476S.js';
3
3
  import '../chunk-TYLKNVQA.js';
4
4
  import '../chunk-SR4OTLTJ.js';
5
5
  import '../chunk-N2S25NXP.js';
package/dist/api/store.js CHANGED
@@ -1,6 +1,6 @@
1
- export { store } from '../chunk-EQ32CL4D.js';
2
- import '../chunk-P3OPJL6I.js';
3
- import '../chunk-WY4IYO3G.js';
1
+ export { store } from '../chunk-NTIGQYSN.js';
2
+ import '../chunk-IKUDCH7Q.js';
3
+ import '../chunk-5Y64476S.js';
4
4
  export { resolveStoreIdentifier } from '../chunk-TYLKNVQA.js';
5
5
  import '../chunk-SR4OTLTJ.js';
6
6
  import '../chunk-N2S25NXP.js';
@@ -1,6 +1,6 @@
1
- export { commonTranslationsPath, storeTranslationsPath, translations } from '../chunk-Q3COPV5Z.js';
2
- import '../chunk-P3OPJL6I.js';
3
- import '../chunk-WY4IYO3G.js';
1
+ export { commonTranslationsPath, storeTranslationsPath, translations } from '../chunk-L2DRHH4E.js';
2
+ import '../chunk-IKUDCH7Q.js';
3
+ import '../chunk-5Y64476S.js';
4
4
  import '../chunk-TYLKNVQA.js';
5
5
  import '../chunk-SR4OTLTJ.js';
6
6
  import '../chunk-N2S25NXP.js';
package/dist/api/user.js CHANGED
@@ -1,6 +1,6 @@
1
- export { user } from '../chunk-5X2UFNKY.js';
2
- import '../chunk-P3OPJL6I.js';
3
- import '../chunk-WY4IYO3G.js';
1
+ export { user } from '../chunk-DZT26OCM.js';
2
+ import '../chunk-IKUDCH7Q.js';
3
+ import '../chunk-5Y64476S.js';
4
4
  import '../chunk-TYLKNVQA.js';
5
5
  import '../chunk-SR4OTLTJ.js';
6
6
  import '../chunk-N2S25NXP.js';
@@ -1,9 +1,9 @@
1
- export { wishlist } from '../chunk-RH5VLLTG.js';
2
- import '../chunk-HDO37URJ.js';
1
+ export { wishlist } from '../chunk-2IYOHSQN.js';
2
+ import '../chunk-K6SNUM3L.js';
3
3
  import '../chunk-SSPAMQRV.js';
4
4
  import '../chunk-ZGHRSRDO.js';
5
- import '../chunk-P3OPJL6I.js';
6
- import '../chunk-WY4IYO3G.js';
5
+ import '../chunk-IKUDCH7Q.js';
6
+ import '../chunk-5Y64476S.js';
7
7
  import '../chunk-TYLKNVQA.js';
8
8
  import '../chunk-SR4OTLTJ.js';
9
9
  import '../chunk-N2S25NXP.js';
@@ -1,5 +1,5 @@
1
- import { rememberProductPreview } from './chunk-HDO37URJ.js';
2
- import { getActiveScope, api } from './chunk-P3OPJL6I.js';
1
+ import { rememberProductPreview } from './chunk-K6SNUM3L.js';
2
+ import { getActiveScope, api } from './chunk-IKUDCH7Q.js';
3
3
  import { queryOptions } from '@tanstack/react-query';
4
4
 
5
5
  var wishlist = {
@@ -31,5 +31,5 @@ var wishlist = {
31
31
  };
32
32
 
33
33
  export { wishlist };
34
- //# sourceMappingURL=chunk-RH5VLLTG.js.map
35
- //# sourceMappingURL=chunk-RH5VLLTG.js.map
34
+ //# sourceMappingURL=chunk-2IYOHSQN.js.map
35
+ //# sourceMappingURL=chunk-2IYOHSQN.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/api/wishlist.ts"],"names":[],"mappings":";;;;AAmBO,IAAM,QAAA,GAAW;AAAA,EACtB,IAAA,EAAM,OAAO,MAAA,GAA6B,EAAC,KAAmC;AAC5E,IAAA,MAAM,EAAE,IAAA,GAAO,CAAA,EAAG,UAAU,EAAA,EAAI,UAAA,EAAY,QAAO,GAAI,MAAA;AAEvD,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,IAAA,YAAA,CAAa,GAAA,CAAI,UAAU,UAAU,CAAA;AACrC,IAAA,YAAA,CAAa,GAAA,CAAI,MAAA,EAAQ,MAAA,CAAO,IAAI,CAAC,CAAA;AACrC,IAAA,YAAA,CAAa,GAAA,CAAI,UAAA,EAAY,MAAA,CAAO,OAAO,CAAC,CAAA;AAE5C,IAAA,IAAI,eAAe,MAAA,EAAW;AAC5B,MAAA,YAAA,CAAa,GAAA,CAAI,YAAA,EAAc,UAAA,GAAa,GAAA,GAAM,GAAG,CAAA;AAAA,IACvD;AAEA,IAAA,MAAM,UAAmC,EAAC;AAC1C,IAAA,IAAI,MAAA,UAAgB,MAAA,GAAS,MAAA;AAE7B,IAAA,MAAM,QAAA,GAAW,MAAM,GAAA,CACpB,GAAA,CAAI,CAAA,SAAA,EAAY,YAAA,CAAa,QAAA,EAAU,CAAA,CAAA,EAAI,OAAc,CAAA,CACzD,IAAA,EAA2B;AAE9B,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,IAAA,IAAQ,EAAC;AAChC,IAAA,KAAA,MAAW,IAAA,IAAQ,KAAA,EAAO,sBAAA,CAAuB,IAAI,CAAA;AAErD,IAAA,OAAO;AAAA,MACL,KAAA;AAAA,MACA,IAAA,EAAM,QAAA,CAAS,MAAA,EAAQ,IAAA,IAAQ;AAAA,KACjC;AAAA,EACF,CAAA;AAAA,EAEA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,CAAC,MAAA,KACL,YAAA,CAAa;AAAA,MACX,QAAA,EAAU,CAAC,UAAA,EAAY,MAAA,EAAQ,QAAQ,EAAE,KAAA,EAAO,cAAA,EAAe,EAAG,CAAA;AAAA,MAClE,OAAA,EAAS,CAAC,EAAE,MAAA,EAAO,KAAM,QAAA,CAAS,IAAA,CAAK,EAAE,GAAG,MAAA,EAAQ,MAAA,EAAQ;AAAA,KAC7D;AAAA;AAEP","file":"chunk-RH5VLLTG.js","sourcesContent":["import { queryOptions } from '@tanstack/react-query';\nimport { api, getActiveScope } from './client';\nimport {\n rememberProductPreview,\n type ProductsListResult,\n type ProductsListResponse,\n} from './product';\n\nexport interface WishlistListParams {\n page?: number;\n perPage?: number;\n filterable?: boolean;\n signal?: AbortSignal;\n}\n\n/**\n * Wishlist API — page-based pagination only.\n * Kept separate from product.list to avoid mixing cursor and page pagination strategies.\n */\nexport const wishlist = {\n list: async (params: WishlistListParams = {}): Promise<ProductsListResult> => {\n const { page = 1, perPage = 15, filterable, signal } = params;\n\n const searchParams = new URLSearchParams();\n searchParams.set('source', 'wishlist');\n searchParams.set('page', String(page));\n searchParams.set('per_page', String(perPage));\n\n if (filterable !== undefined) {\n searchParams.set('filterable', filterable ? '1' : '0');\n }\n\n const options: Record<string, unknown> = {};\n if (signal) options.signal = signal;\n\n const response = await api\n .get(`products?${searchParams.toString()}`, options as any)\n .json<ProductsListResponse>();\n\n const items = response.data ?? [];\n for (const item of items) rememberProductPreview(item);\n\n return {\n items,\n next: response.cursor?.next ?? null,\n };\n },\n\n queries: {\n list: (params: Omit<WishlistListParams, 'signal'>) =>\n queryOptions({\n queryKey: ['wishlist', 'list', params, { scope: getActiveScope() }],\n queryFn: ({ signal }) => wishlist.list({ ...params, signal }),\n }),\n },\n};\n"]}
1
+ {"version":3,"sources":["../src/api/wishlist.ts"],"names":[],"mappings":";;;;AAmBO,IAAM,QAAA,GAAW;AAAA,EACtB,IAAA,EAAM,OAAO,MAAA,GAA6B,EAAC,KAAmC;AAC5E,IAAA,MAAM,EAAE,IAAA,GAAO,CAAA,EAAG,UAAU,EAAA,EAAI,UAAA,EAAY,QAAO,GAAI,MAAA;AAEvD,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,IAAA,YAAA,CAAa,GAAA,CAAI,UAAU,UAAU,CAAA;AACrC,IAAA,YAAA,CAAa,GAAA,CAAI,MAAA,EAAQ,MAAA,CAAO,IAAI,CAAC,CAAA;AACrC,IAAA,YAAA,CAAa,GAAA,CAAI,UAAA,EAAY,MAAA,CAAO,OAAO,CAAC,CAAA;AAE5C,IAAA,IAAI,eAAe,MAAA,EAAW;AAC5B,MAAA,YAAA,CAAa,GAAA,CAAI,YAAA,EAAc,UAAA,GAAa,GAAA,GAAM,GAAG,CAAA;AAAA,IACvD;AAEA,IAAA,MAAM,UAAmC,EAAC;AAC1C,IAAA,IAAI,MAAA,UAAgB,MAAA,GAAS,MAAA;AAE7B,IAAA,MAAM,QAAA,GAAW,MAAM,GAAA,CACpB,GAAA,CAAI,CAAA,SAAA,EAAY,YAAA,CAAa,QAAA,EAAU,CAAA,CAAA,EAAI,OAAc,CAAA,CACzD,IAAA,EAA2B;AAE9B,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,IAAA,IAAQ,EAAC;AAChC,IAAA,KAAA,MAAW,IAAA,IAAQ,KAAA,EAAO,sBAAA,CAAuB,IAAI,CAAA;AAErD,IAAA,OAAO;AAAA,MACL,KAAA;AAAA,MACA,IAAA,EAAM,QAAA,CAAS,MAAA,EAAQ,IAAA,IAAQ;AAAA,KACjC;AAAA,EACF,CAAA;AAAA,EAEA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,CAAC,MAAA,KACL,YAAA,CAAa;AAAA,MACX,QAAA,EAAU,CAAC,UAAA,EAAY,MAAA,EAAQ,QAAQ,EAAE,KAAA,EAAO,cAAA,EAAe,EAAG,CAAA;AAAA,MAClE,OAAA,EAAS,CAAC,EAAE,MAAA,EAAO,KAAM,QAAA,CAAS,IAAA,CAAK,EAAE,GAAG,MAAA,EAAQ,MAAA,EAAQ;AAAA,KAC7D;AAAA;AAEP","file":"chunk-2IYOHSQN.js","sourcesContent":["import { queryOptions } from '@tanstack/react-query';\nimport { api, getActiveScope } from './client';\nimport {\n rememberProductPreview,\n type ProductsListResult,\n type ProductsListResponse,\n} from './product';\n\nexport interface WishlistListParams {\n page?: number;\n perPage?: number;\n filterable?: boolean;\n signal?: AbortSignal;\n}\n\n/**\n * Wishlist API — page-based pagination only.\n * Kept separate from product.list to avoid mixing cursor and page pagination strategies.\n */\nexport const wishlist = {\n list: async (params: WishlistListParams = {}): Promise<ProductsListResult> => {\n const { page = 1, perPage = 15, filterable, signal } = params;\n\n const searchParams = new URLSearchParams();\n searchParams.set('source', 'wishlist');\n searchParams.set('page', String(page));\n searchParams.set('per_page', String(perPage));\n\n if (filterable !== undefined) {\n searchParams.set('filterable', filterable ? '1' : '0');\n }\n\n const options: Record<string, unknown> = {};\n if (signal) options.signal = signal;\n\n const response = await api\n .get(`products?${searchParams.toString()}`, options as any)\n .json<ProductsListResponse>();\n\n const items = response.data ?? [];\n for (const item of items) rememberProductPreview(item);\n\n return {\n items,\n next: response.cursor?.next ?? null,\n };\n },\n\n queries: {\n list: (params: Omit<WishlistListParams, 'signal'>) =>\n queryOptions({\n queryKey: ['wishlist', 'list', params, { scope: getActiveScope() }],\n queryFn: ({ signal }) => wishlist.list({ ...params, signal }),\n }),\n },\n};\n"]}
@@ -1,6 +1,6 @@
1
1
  import { orThrow } from './chunk-SSPAMQRV.js';
2
- import { api } from './chunk-P3OPJL6I.js';
3
- import { getSallaSDK } from './chunk-WY4IYO3G.js';
2
+ import { api } from './chunk-IKUDCH7Q.js';
3
+ import { getSallaSDK } from './chunk-5Y64476S.js';
4
4
  import { queryOptions } from '@tanstack/react-query';
5
5
 
6
6
  function normalizeCartResponse(data) {
@@ -43,5 +43,5 @@ var cart = {
43
43
  };
44
44
 
45
45
  export { cart };
46
- //# sourceMappingURL=chunk-3L5VG2X4.js.map
47
- //# sourceMappingURL=chunk-3L5VG2X4.js.map
46
+ //# sourceMappingURL=chunk-4YQQVUXS.js.map
47
+ //# sourceMappingURL=chunk-4YQQVUXS.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/api/cart.ts"],"names":[],"mappings":";;;;;AAaA,SAAS,sBAAsB,IAAA,EAAoC;AACjE,EAAA,IAAI,CAAC,IAAA,CAAK,IAAA,EAAM,OAAO,IAAA;AACvB,EAAA,OAAO;AAAA,IACL,GAAG,IAAA,CAAK,IAAA;AAAA,IACR,OAAA,EAAS,KAAK,OAAA,IAAW,IAAA;AAAA,IACzB,IAAA,EAAM,KAAK,IAAA,IAAQ;AAAA,GACrB;AACF;AAEO,IAAM,IAAA,GAAO;AAAA,EAClB,GAAA,EAAK,OAAO,MAAA,KAAyC;AACnD,IAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,GAAA,CAAI,IAAI,CAAA,KAAA,EAAQ,MAAM,CAAA,CAAE,CAAA,CAAE,IAAA,EAAgC;AACjF,IAAA,OAAO,sBAAsB,IAAI,CAAA;AAAA,EACnC,CAAA;AAAA,EAEA,YAAY,CAAC,MAAA,KAAyC,QAAQ,IAAA,CAAK,GAAA,CAAI,MAAM,CAAC,CAAA;AAAA;AAAA,EAG9E,cAAc,YAAoC;AAChD,IAAA,MAAM,QAAQ,WAAA,EAAY;AAC1B,IAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AAEnB,IAAA,MAAM,KAAA,CAAM,OAAA,EAAQ,CAAE,KAAA,CAAM,MAAM,MAAS,CAAA;AAC3C,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,gBAAA,EAAiB;AAAA,EACzC,CAAA;AAAA,EAEA,OAAA,EAAS;AAAA,IACP,MAAA,EAAQ,CAAC,MAAA,KACP,YAAA,CAAa;AAAA,MACX,QAAA,EAAU,CAAC,MAAA,EAAQ,MAAM,CAAA;AAAA,MACzB,OAAA,EAAS,MAAM,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA;AAAA;AAAA,MAE9B,SAAA,EAAW,CAAA;AAAA,MACX,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,IACH,SAAA,EAAW,MACT,YAAA,CAAa;AAAA,MACX,QAAA,EAAU,CAAC,MAAA,EAAQ,YAAY,CAAA;AAAA,MAC/B,OAAA,EAAS,MAAM,IAAA,CAAK,YAAA,EAAa;AAAA;AAAA,MAEjC,SAAA,EAAW,CAAA;AAAA,MACX,MAAA,EAAQ;AAAA,KACT;AAAA;AAEP","file":"chunk-3L5VG2X4.js","sourcesContent":["import { queryOptions } from '@tanstack/react-query';\nimport { api } from './client';\nimport type { Cart } from '../types';\nimport { orThrow } from '../providers/NavigationProvider';\nimport { getSallaSDK } from '../utils/sdk-helpers';\n\nexport interface CartApiResponse {\n /** Absent once the cart was turned into an order (the body then carries a top-level `redirect`). */\n cart?: Omit<Cart, 'loyalty' | 'gift'>;\n loyalty?: Cart['loyalty'];\n gift?: Cart['gift'];\n}\n\nfunction normalizeCartResponse(data: CartApiResponse): Cart | null {\n if (!data.cart) return null;\n return {\n ...data.cart,\n loyalty: data.loyalty ?? null,\n gift: data.gift ?? null,\n } as Cart;\n}\n\nexport const cart = {\n get: async (cartId: number): Promise<Cart | null> => {\n const { data } = await api.get(`cart/${cartId}`).json<{ data: CartApiResponse }>();\n return normalizeCartResponse(data);\n },\n\n getOrThrow: (cartId: number): Promise<Cart | null> => orThrow(cart.get(cartId)),\n\n /** The visitor's cart id, which only the Salla SDK knows; `null` outside the browser. */\n getCurrentId: async (): Promise<number | null> => {\n const salla = getSallaSDK();\n if (!salla) return null;\n // The app bundle can run before the SDK module, when `salla` is still the head stub.\n await salla.onReady().catch(() => undefined);\n return salla.cart.api.getCurrentCartId();\n },\n\n queries: {\n detail: (cartId: number) =>\n queryOptions({\n queryKey: ['cart', cartId],\n queryFn: () => cart.get(cartId),\n // The SDK changes the cart from any page, so a cached copy is never safe to show.\n staleTime: 0,\n gcTime: 0,\n }),\n currentId: () =>\n queryOptions({\n queryKey: ['cart', 'current-id'],\n queryFn: () => cart.getCurrentId(),\n // Completing an order starts a new cart, so an earlier id is never reused.\n staleTime: 0,\n gcTime: 0,\n }),\n },\n};\n"]}
1
+ {"version":3,"sources":["../src/api/cart.ts"],"names":[],"mappings":";;;;;AAaA,SAAS,sBAAsB,IAAA,EAAoC;AACjE,EAAA,IAAI,CAAC,IAAA,CAAK,IAAA,EAAM,OAAO,IAAA;AACvB,EAAA,OAAO;AAAA,IACL,GAAG,IAAA,CAAK,IAAA;AAAA,IACR,OAAA,EAAS,KAAK,OAAA,IAAW,IAAA;AAAA,IACzB,IAAA,EAAM,KAAK,IAAA,IAAQ;AAAA,GACrB;AACF;AAEO,IAAM,IAAA,GAAO;AAAA,EAClB,GAAA,EAAK,OAAO,MAAA,KAAyC;AACnD,IAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,GAAA,CAAI,IAAI,CAAA,KAAA,EAAQ,MAAM,CAAA,CAAE,CAAA,CAAE,IAAA,EAAgC;AACjF,IAAA,OAAO,sBAAsB,IAAI,CAAA;AAAA,EACnC,CAAA;AAAA,EAEA,YAAY,CAAC,MAAA,KAAyC,QAAQ,IAAA,CAAK,GAAA,CAAI,MAAM,CAAC,CAAA;AAAA;AAAA,EAG9E,cAAc,YAAoC;AAChD,IAAA,MAAM,QAAQ,WAAA,EAAY;AAC1B,IAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AAEnB,IAAA,MAAM,KAAA,CAAM,OAAA,EAAQ,CAAE,KAAA,CAAM,MAAM,MAAS,CAAA;AAC3C,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,gBAAA,EAAiB;AAAA,EACzC,CAAA;AAAA,EAEA,OAAA,EAAS;AAAA,IACP,MAAA,EAAQ,CAAC,MAAA,KACP,YAAA,CAAa;AAAA,MACX,QAAA,EAAU,CAAC,MAAA,EAAQ,MAAM,CAAA;AAAA,MACzB,OAAA,EAAS,MAAM,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA;AAAA;AAAA,MAE9B,SAAA,EAAW,CAAA;AAAA,MACX,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,IACH,SAAA,EAAW,MACT,YAAA,CAAa;AAAA,MACX,QAAA,EAAU,CAAC,MAAA,EAAQ,YAAY,CAAA;AAAA,MAC/B,OAAA,EAAS,MAAM,IAAA,CAAK,YAAA,EAAa;AAAA;AAAA,MAEjC,SAAA,EAAW,CAAA;AAAA,MACX,MAAA,EAAQ;AAAA,KACT;AAAA;AAEP","file":"chunk-4YQQVUXS.js","sourcesContent":["import { queryOptions } from '@tanstack/react-query';\nimport { api } from './client';\nimport type { Cart } from '../types';\nimport { orThrow } from '../providers/NavigationProvider';\nimport { getSallaSDK } from '../utils/sdk-helpers';\n\nexport interface CartApiResponse {\n /** Absent once the cart was turned into an order (the body then carries a top-level `redirect`). */\n cart?: Omit<Cart, 'loyalty' | 'gift'>;\n loyalty?: Cart['loyalty'];\n gift?: Cart['gift'];\n}\n\nfunction normalizeCartResponse(data: CartApiResponse): Cart | null {\n if (!data.cart) return null;\n return {\n ...data.cart,\n loyalty: data.loyalty ?? null,\n gift: data.gift ?? null,\n } as Cart;\n}\n\nexport const cart = {\n get: async (cartId: number): Promise<Cart | null> => {\n const { data } = await api.get(`cart/${cartId}`).json<{ data: CartApiResponse }>();\n return normalizeCartResponse(data);\n },\n\n getOrThrow: (cartId: number): Promise<Cart | null> => orThrow(cart.get(cartId)),\n\n /** The visitor's cart id, which only the Salla SDK knows; `null` outside the browser. */\n getCurrentId: async (): Promise<number | null> => {\n const salla = getSallaSDK();\n if (!salla) return null;\n // The app bundle can run before the SDK module, when `salla` is still the head stub.\n await salla.onReady().catch(() => undefined);\n return salla.cart.api.getCurrentCartId();\n },\n\n queries: {\n detail: (cartId: number) =>\n queryOptions({\n queryKey: ['cart', cartId],\n queryFn: () => cart.get(cartId),\n // The SDK changes the cart from any page, so a cached copy is never safe to show.\n staleTime: 0,\n gcTime: 0,\n }),\n currentId: () =>\n queryOptions({\n queryKey: ['cart', 'current-id'],\n queryFn: () => cart.getCurrentId(),\n // Completing an order starts a new cart, so an earlier id is never reused.\n staleTime: 0,\n gcTime: 0,\n }),\n },\n};\n"]}
@@ -0,0 +1,80 @@
1
+ import { resolveStoreIdentifier } from './chunk-TYLKNVQA.js';
2
+
3
+ // src/utils/sdk-helpers.ts
4
+ var isBrowser = typeof window !== "undefined";
5
+ function getStoreIdentifier(explicit) {
6
+ return resolveStoreIdentifier(explicit);
7
+ }
8
+ function getSallaSDK() {
9
+ if (!isBrowser) return void 0;
10
+ return window.salla;
11
+ }
12
+ var SDK_CREATED_EVENT = "salla::created";
13
+ var noop = () => {
14
+ };
15
+ function isLoaded(sdk) {
16
+ return typeof sdk?.init === "function" || typeof sdk?.event?.on === "function";
17
+ }
18
+ function hasEventBus(sdk) {
19
+ return typeof sdk?.event?.on === "function";
20
+ }
21
+ function whenSallaLoaded(callback) {
22
+ return whenSalla(isLoaded, callback);
23
+ }
24
+ function whenSalla(isUsable, callback) {
25
+ if (!isBrowser) return noop;
26
+ if (isUsable(window.salla)) {
27
+ callback(window.salla);
28
+ return noop;
29
+ }
30
+ let settled = false;
31
+ const onCreated = () => {
32
+ const sdk = window.salla;
33
+ if (settled || !isUsable(sdk)) return;
34
+ settled = true;
35
+ window.removeEventListener(SDK_CREATED_EVENT, onCreated);
36
+ callback(sdk);
37
+ };
38
+ window.addEventListener(SDK_CREATED_EVENT, onCreated);
39
+ return () => {
40
+ settled = true;
41
+ window.removeEventListener(SDK_CREATED_EVENT, onCreated);
42
+ };
43
+ }
44
+ function whenSallaReady(callback) {
45
+ let cancelled = false;
46
+ const cancel = whenSallaLoaded((sdk) => {
47
+ void new Promise((resolve) => resolve(sdk.onReady?.())).catch(noop).then(() => {
48
+ if (!cancelled) callback(sdk);
49
+ });
50
+ });
51
+ return () => {
52
+ cancelled = true;
53
+ cancel();
54
+ };
55
+ }
56
+ function onSallaEvent(name, listener) {
57
+ let bus;
58
+ const cancel = whenSalla(hasEventBus, (sdk) => {
59
+ bus = sdk.event;
60
+ bus.on(name, listener);
61
+ });
62
+ return () => {
63
+ cancel();
64
+ bus?.off?.(name, listener);
65
+ };
66
+ }
67
+ function syncSdkLocale(locale) {
68
+ const sdk = getSallaSDK();
69
+ if (!sdk || !locale) return;
70
+ try {
71
+ sdk.lang?.setLocale?.(locale);
72
+ sdk.api?.setHeader?.("accept-language", locale);
73
+ sdk.config?.set?.("user.language_code", locale);
74
+ } catch {
75
+ }
76
+ }
77
+
78
+ export { getSallaSDK, getStoreIdentifier, onSallaEvent, syncSdkLocale, whenSallaLoaded, whenSallaReady };
79
+ //# sourceMappingURL=chunk-5Y64476S.js.map
80
+ //# sourceMappingURL=chunk-5Y64476S.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/sdk-helpers.ts"],"names":[],"mappings":"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","file":"chunk-5Y64476S.js","sourcesContent":["export type { StoreContext } from '../api/store';\nimport type { SallaSDK } from '../types/salla-sdk';\nimport { resolveStoreIdentifier } from './store-identity';\n\nconst isBrowser = typeof window !== 'undefined';\n\n/**\n * Which store to ask the API about — see {@link resolveStoreIdentifier}.\n *\n * A delegation, not a second implementation. This name is the one on the wire\n * (`api/client.ts` sets the `store-identifier` header from it) and the one\n * themes import from `@salla.sa/twilight-theme-engine/utils`, so it stays; what\n * it must never do again is answer differently from the resolver everything\n * else asks. It had its own copy of the order once, missing the store the\n * request names and preferring the build-time `VITE_STORE_DOMAIN` that a\n * deployed worker does not have — so every published theme sent an empty\n * identifier and rendered \"Store Unavailable\".\n */\nexport function getStoreIdentifier(explicit?: string): string {\n return resolveStoreIdentifier(explicit);\n}\n\n/**\n * Get Salla SDK instance if available\n */\nexport function getSallaSDK(): typeof window.salla | undefined {\n if (!isBrowser) return undefined;\n return window.salla;\n}\n\n/** Dispatched on `window` by the SDK as the last step of loading (twilight `src/index.js`). */\nconst SDK_CREATED_EVENT = 'salla::created';\n\nconst noop = () => {};\n\n/**\n * Whether `window.salla` is the SDK, rather than the stub that stands in for it.\n *\n * ⚠️ `window.salla` exists from the first bytes of the page. The `twilight-init`\n * head script defines it with an `onReady`, so app snippets can queue work, and\n * the SDK — a deferred module — fills it in later. React can hydrate and run\n * effects in between, and there `window.salla?.event.on(…)` passes its `?.` and\n * throws `Cannot read properties of undefined (reading 'on')`.\n *\n * The SDK defines `init` and `event` in one synchronous module evaluation and the\n * stub has neither, so either one means it has loaded.\n */\nfunction isLoaded(sdk: typeof window.salla): sdk is SallaSDK {\n return typeof sdk?.init === 'function' || typeof sdk?.event?.on === 'function';\n}\n\n/** An SDK whose event bus can take a listener — what {@link onSallaEvent} needs. */\nfunction hasEventBus(sdk: typeof window.salla): sdk is SallaSDK {\n return typeof sdk?.event?.on === 'function';\n}\n\n/**\n * Run `callback` with the SDK as soon as it has loaded: now if it has, otherwise\n * when it announces itself.\n *\n * Returns a cancel for an effect's cleanup, so a component that unmounts first\n * never has the callback run. An effect that returned early when the SDK was not\n * there yet never ran again — on a cold load, where hydration beats the SDK, the\n * engine never initialised it at all.\n */\nexport function whenSallaLoaded(callback: (sdk: SallaSDK) => void): () => void {\n return whenSalla(isLoaded, callback);\n}\n\nfunction whenSalla(\n isUsable: (sdk: typeof window.salla) => sdk is SallaSDK,\n callback: (sdk: SallaSDK) => void\n): () => void {\n if (!isBrowser) return noop;\n\n if (isUsable(window.salla)) {\n callback(window.salla);\n return noop;\n }\n\n let settled = false;\n const onCreated = () => {\n const sdk = window.salla;\n if (settled || !isUsable(sdk)) return;\n settled = true;\n window.removeEventListener(SDK_CREATED_EVENT, onCreated);\n callback(sdk);\n };\n window.addEventListener(SDK_CREATED_EVENT, onCreated);\n\n return () => {\n settled = true;\n window.removeEventListener(SDK_CREATED_EVENT, onCreated);\n };\n}\n\n/**\n * Run `callback` once the SDK has loaded **and been initialised** — for work that\n * talks to the API, which needs the store config `init` sets.\n *\n * Loaded is not enough for that: `init` finishes asynchronously, so a cart lookup\n * made the moment the SDK announces itself goes out without a store identifier\n * and is answered `Store Identifier not found`. Returns a cancel, as\n * {@link whenSallaLoaded} does.\n *\n * A rejected `onReady` still runs `callback`, as `useTwilightInit` carries on past\n * one: it means a partial initialisation, and waiting on it would leave the caller\n * waiting for good.\n */\nexport function whenSallaReady(callback: (sdk: SallaSDK) => void): () => void {\n let cancelled = false;\n const cancel = whenSallaLoaded((sdk) => {\n void new Promise((resolve) => resolve(sdk.onReady?.())).catch(noop).then(() => {\n if (!cancelled) callback(sdk);\n });\n });\n return () => {\n cancelled = true;\n cancel();\n };\n}\n\n/**\n * `salla.event.on(name, listener)` once the SDK has loaded. Returns the matching\n * unsubscribe, which also cancels a subscription still waiting for the SDK.\n *\n * Removed from the emitter it was added to, not from whatever `window.salla` is\n * by the time the component unmounts.\n *\n * Waits for an event bus specifically, not for \"loaded\": an SDK is recognised by\n * `init` alone, and subscribing on one without a bus would throw.\n */\nexport function onSallaEvent(name: string, listener: (...args: unknown[]) => void): () => void {\n let bus: SallaSDK['event'] | undefined;\n const cancel = whenSalla(hasEventBus, (sdk) => {\n bus = sdk.event;\n bus.on(name, listener);\n });\n return () => {\n cancel();\n bus?.off?.(name, listener);\n };\n}\n\n/**\n * Push the active route locale onto the Salla SDK.\n *\n * Why this is needed (and why it must run on every navigation):\n * - The SDK seeds its locale from `navigator.language` — the theme sets no `s-lang`\n * cookie or `window.locale` — so an English browser starts the SDK in `en` even on\n * an `/ar` store.\n * - The SDK fixes its axios `accept-language` header ONCE, at init. `salla.lang.setLocale`\n * only swaps UI translations (it never touches the header), and `salla.init()` is a\n * no-op after `Salla.status === 'ready'`, so the header never refreshes on its own.\n * - `profile::info.fetched` (login / profile refresh on navigation) overrides the header\n * to the *account's* language.\n *\n * Net result without this: `salla.api.*` calls (cart/product details) return data in the\n * wrong locale — e.g. English cart item names on `/ar/cart` — intermittently, depending on\n * load order and whether a profile fetch ran. Re-asserting the URL locale here keeps the\n * header correct. No-op on the server and until the SDK exposes the methods.\n */\nexport function syncSdkLocale(locale: string): void {\n const sdk = getSallaSDK();\n if (!sdk || !locale) return;\n try {\n sdk.lang?.setLocale?.(locale);\n sdk.api?.setHeader?.('accept-language', locale);\n // The localization modal swaps `/${user.language_code}/` in the URL on submit;\n // the SDK never sets this locally, so without it the switch reloads the same page.\n sdk.config?.set?.('user.language_code', locale);\n } catch {\n // SDK partially loaded — the header is re-asserted on the next navigation.\n }\n}\n"]}
@@ -1,9 +1,9 @@
1
- import { home } from './chunk-Y43T7PJV.js';
2
- import { product } from './chunk-HDO37URJ.js';
3
- import { ProductCard } from './chunk-FAVZMJRY.js';
1
+ import { home } from './chunk-TY3XJOIQ.js';
2
+ import { product } from './chunk-K6SNUM3L.js';
3
+ import { ProductCard } from './chunk-ITHU2R5C.js';
4
4
  import { registry } from './chunk-342EPVXN.js';
5
5
  import { useTranslation } from './chunk-TYNZ5B2B.js';
6
- import { Image, LazyRenderWhenVisible } from './chunk-SOPZ72BU.js';
6
+ import { Image, LazyRenderWhenVisible } from './chunk-J2YKHDMH.js';
7
7
  import { Link } from './chunk-AXW67SY7.js';
8
8
  import { TwilightContext } from './chunk-DF6FBKDN.js';
9
9
  import { memo, useState, useCallback, createElement, useEffect, lazy, Component, useRef, useMemo, Suspense } from 'react';
@@ -707,5 +707,5 @@ var PageBlocks = memo(function PageBlocks2({ hook, scope }) {
707
707
  });
708
708
 
709
709
  export { BundleComponent, ComponentErrorBoundary, DefaultHomeComponents, FeaturedProductsStyle1, FeaturedProductsStyle2, FeaturedProductsStyle3, FixedBanner, FixedProducts, HomeComponentRenderer, LazyTestimonials, PageBlocks, ParallaxBackground, PhotosSlider, ProductsSlider, SquarePhotos, StoreFeatures, Youtube, registerHomeComponentConfig, registerHomeComponents };
710
- //# sourceMappingURL=chunk-W5K6YUA2.js.map
711
- //# sourceMappingURL=chunk-W5K6YUA2.js.map
710
+ //# sourceMappingURL=chunk-AH6KEBKX.js.map
711
+ //# sourceMappingURL=chunk-AH6KEBKX.js.map