@salla.sa/twilight-theme-engine 1.0.104 → 1.0.105

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 (284) hide show
  1. package/dist/{AddToCartForm-ZJT6JJHQ.js → AddToCartForm-LWSRJJSF.js} +3 -3
  2. package/dist/{AddToCartForm-ZJT6JJHQ.js.map → AddToCartForm-LWSRJJSF.js.map} +1 -1
  3. package/dist/{BlogAuthorPage-KCV5TAWN.js → BlogAuthorPage-E2BONAKB.js} +27 -27
  4. package/dist/{BlogAuthorPage-KCV5TAWN.js.map → BlogAuthorPage-E2BONAKB.js.map} +1 -1
  5. package/dist/{BlogCategoryPage-DNDZ76UW.js → BlogCategoryPage-F5G35XQE.js} +27 -27
  6. package/dist/{BlogCategoryPage-DNDZ76UW.js.map → BlogCategoryPage-F5G35XQE.js.map} +1 -1
  7. package/dist/{BlogPage-STXNCRQP.js → BlogPage-W4NDWE5Q.js} +25 -25
  8. package/dist/{BlogPage-STXNCRQP.js.map → BlogPage-W4NDWE5Q.js.map} +1 -1
  9. package/dist/{BlogSinglePage-JJWYKJHP.js → BlogSinglePage-543VMKSI.js} +25 -25
  10. package/dist/{BlogSinglePage-JJWYKJHP.js.map → BlogSinglePage-543VMKSI.js.map} +1 -1
  11. package/dist/{BlogTagPage-ZE2XOPK4.js → BlogTagPage-KDQVHQ65.js} +27 -27
  12. package/dist/{BlogTagPage-ZE2XOPK4.js.map → BlogTagPage-KDQVHQ65.js.map} +1 -1
  13. package/dist/{BrandsPage-BDJ3JRDD.js → BrandsPage-ABKUKE5J.js} +26 -26
  14. package/dist/{BrandsPage-BDJ3JRDD.js.map → BrandsPage-ABKUKE5J.js.map} +1 -1
  15. package/dist/{Breadcrumb-OK37EG4K.js → Breadcrumb-WBTLVXYF.js} +25 -25
  16. package/dist/{Breadcrumb-OK37EG4K.js.map → Breadcrumb-WBTLVXYF.js.map} +1 -1
  17. package/dist/{CartItem-N4B3L2QT.js → CartItem-KNFR7K7Z.js} +25 -25
  18. package/dist/{CartItem-N4B3L2QT.js.map → CartItem-KNFR7K7Z.js.map} +1 -1
  19. package/dist/{CartSummary-27VDB6CC.js → CartSummary-EQ4GTR4Y.js} +25 -25
  20. package/dist/{CartSummary-27VDB6CC.js.map → CartSummary-EQ4GTR4Y.js.map} +1 -1
  21. package/dist/{Copyright-UOOJCPCK.js → Copyright-NYKF6LY5.js} +3 -3
  22. package/dist/{Copyright-UOOJCPCK.js.map → Copyright-NYKF6LY5.js.map} +1 -1
  23. package/dist/{CustomerLayout-2TU63GI2.js → CustomerLayout-NY4LOV3Y.js} +25 -25
  24. package/dist/{CustomerLayout-2TU63GI2.js.map → CustomerLayout-NY4LOV3Y.js.map} +1 -1
  25. package/dist/{Footer-QJHB3FO7.js → Footer-DRKA2MI6.js} +4 -4
  26. package/dist/{Footer-QJHB3FO7.js.map → Footer-DRKA2MI6.js.map} +1 -1
  27. package/dist/Header-JBZRD2WU.js +22 -0
  28. package/dist/{Header-2GMIMJ2A.js.map → Header-JBZRD2WU.js.map} +1 -1
  29. package/dist/{LoyaltyPage-H2FY4IBM.js → LoyaltyPage-VOAUC2CY.js} +25 -25
  30. package/dist/{LoyaltyPage-H2FY4IBM.js.map → LoyaltyPage-VOAUC2CY.js.map} +1 -1
  31. package/dist/{LoyaltyPointsPage-FVXJNJKL.js → LoyaltyPointsPage-I5U5NFK3.js} +9 -9
  32. package/dist/{LoyaltyPointsPage-FVXJNJKL.js.map → LoyaltyPointsPage-I5U5NFK3.js.map} +1 -1
  33. package/dist/{MainMenu-COKDB5AQ.js → MainMenu-SWP46RPJ.js} +8 -8
  34. package/dist/{MainMenu-COKDB5AQ.js.map → MainMenu-SWP46RPJ.js.map} +1 -1
  35. package/dist/MaintenancePage-MGWJYB2O.js +7 -0
  36. package/dist/MaintenancePage-MGWJYB2O.js.map +1 -0
  37. package/dist/{MasterLayout-4N7LOXPC.js → MasterLayout-BF2E47SE.js} +25 -25
  38. package/dist/{MasterLayout-4N7LOXPC.js.map → MasterLayout-BF2E47SE.js.map} +1 -1
  39. package/dist/{MobileMenu-ELEUZZKM.js → MobileMenu-LBOVOA6D.js} +26 -26
  40. package/dist/{MobileMenu-ELEUZZKM.js.map → MobileMenu-LBOVOA6D.js.map} +1 -1
  41. package/dist/{NotificationsPage-DWUGY2XG.js → NotificationsPage-FNFKEOX3.js} +25 -25
  42. package/dist/{NotificationsPage-DWUGY2XG.js.map → NotificationsPage-FNFKEOX3.js.map} +1 -1
  43. package/dist/{OrderSinglePage-WR3L5PLV.js → OrderSinglePage-EGCPZ25S.js} +26 -26
  44. package/dist/{OrderSinglePage-WR3L5PLV.js.map → OrderSinglePage-EGCPZ25S.js.map} +1 -1
  45. package/dist/{OrdersPage-XQ2D5ES5.js → OrdersPage-DOK3AE37.js} +25 -25
  46. package/dist/{OrdersPage-XQ2D5ES5.js.map → OrdersPage-DOK3AE37.js.map} +1 -1
  47. package/dist/{PageSingle-VU46ZY7F.js → PageSingle-4NYB7VCI.js} +7 -7
  48. package/dist/{PageSingle-VU46ZY7F.js.map → PageSingle-4NYB7VCI.js.map} +1 -1
  49. package/dist/{ProductDetails-YYWUUS26.js → ProductDetails-EJ6WKSLO.js} +8 -8
  50. package/dist/{ProductDetails-YYWUUS26.js.map → ProductDetails-EJ6WKSLO.js.map} +1 -1
  51. package/dist/{ProfilePage-LHB2RELA.js → ProfilePage-RQJNJFAV.js} +25 -25
  52. package/dist/{ProfilePage-LHB2RELA.js.map → ProfilePage-RQJNJFAV.js.map} +1 -1
  53. package/dist/{ReviewsPage-5TSLYA2V.js → ReviewsPage-SSVTW76R.js} +3 -3
  54. package/dist/{ReviewsPage-5TSLYA2V.js.map → ReviewsPage-SSVTW76R.js.map} +1 -1
  55. package/dist/{SeoCartWidget-DATW77M6.js → SeoCartWidget-I3T6MEYN.js} +25 -25
  56. package/dist/{SeoCartWidget-DATW77M6.js.map → SeoCartWidget-I3T6MEYN.js.map} +1 -1
  57. package/dist/{SettingsPage-MDQWPGD7.js → SettingsPage-F2PHWF6M.js} +25 -25
  58. package/dist/{SettingsPage-MDQWPGD7.js.map → SettingsPage-F2PHWF6M.js.map} +1 -1
  59. package/dist/StoreClosedNotification-A55JL5ZF.js +54 -0
  60. package/dist/{StoreClosedNotification-FJS7YUCR.js.map → StoreClosedNotification-A55JL5ZF.js.map} +1 -1
  61. package/dist/{TestimonialsPage-2RNRU4QT.js → TestimonialsPage-P3NQ4MD6.js} +7 -7
  62. package/dist/{TestimonialsPage-2RNRU4QT.js.map → TestimonialsPage-P3NQ4MD6.js.map} +1 -1
  63. package/dist/{ThankYouPage-OZKNDH4H.js → ThankYouPage-NGQHYJV5.js} +25 -25
  64. package/dist/{ThankYouPage-OZKNDH4H.js.map → ThankYouPage-NGQHYJV5.js.map} +1 -1
  65. package/dist/{WalletPage-BSEA7PKK.js → WalletPage-QKMWV2NA.js} +26 -26
  66. package/dist/{WalletPage-BSEA7PKK.js.map → WalletPage-QKMWV2NA.js.map} +1 -1
  67. package/dist/{WishlistPage-QEB7EFDE.js → WishlistPage-HOR22EBU.js} +27 -27
  68. package/dist/{WishlistPage-QEB7EFDE.js.map → WishlistPage-HOR22EBU.js.map} +1 -1
  69. package/dist/api/advertisement.js +5 -5
  70. package/dist/api/apps.js +5 -5
  71. package/dist/api/blog.js +7 -7
  72. package/dist/api/brands.js +7 -7
  73. package/dist/api/cart.js +7 -7
  74. package/dist/api/category.js +7 -7
  75. package/dist/api/client.js +4 -4
  76. package/dist/api/home.js +5 -5
  77. package/dist/api/loyalty.js +7 -7
  78. package/dist/api/menu.js +5 -5
  79. package/dist/api/notification.js +5 -5
  80. package/dist/api/order.js +7 -7
  81. package/dist/api/page.js +7 -7
  82. package/dist/api/product.js +7 -7
  83. package/dist/api/profile.js +4 -4
  84. package/dist/api/store.d.ts +9 -1
  85. package/dist/api/store.d.ts.map +1 -1
  86. package/dist/api/store.js +5 -5
  87. package/dist/api/translations.js +5 -5
  88. package/dist/api/user.js +5 -5
  89. package/dist/api/wallet.js +5 -5
  90. package/dist/api/wishlist.js +8 -8
  91. package/dist/{chunk-PXHFHHTW.js → chunk-25SLMOCZ.js} +4 -4
  92. package/dist/{chunk-PXHFHHTW.js.map → chunk-25SLMOCZ.js.map} +1 -1
  93. package/dist/{chunk-5ISYMZ62.js → chunk-2IS4QU3P.js} +4 -4
  94. package/dist/{chunk-5ISYMZ62.js.map → chunk-2IS4QU3P.js.map} +1 -1
  95. package/dist/{chunk-OOCN4RFV.js → chunk-3EBV4X6W.js} +3 -3
  96. package/dist/{chunk-OOCN4RFV.js.map → chunk-3EBV4X6W.js.map} +1 -1
  97. package/dist/chunk-3PSJH6Q4.js +108 -0
  98. package/dist/chunk-3PSJH6Q4.js.map +1 -0
  99. package/dist/{chunk-OSTGSFJW.js → chunk-42RKFHJG.js} +74 -18
  100. package/dist/chunk-42RKFHJG.js.map +1 -0
  101. package/dist/{chunk-HKSDEFQV.js → chunk-42YMCOK4.js} +3 -3
  102. package/dist/{chunk-HKSDEFQV.js.map → chunk-42YMCOK4.js.map} +1 -1
  103. package/dist/{chunk-JUUKZRE5.js → chunk-4O52OV5N.js} +3 -3
  104. package/dist/{chunk-JUUKZRE5.js.map → chunk-4O52OV5N.js.map} +1 -1
  105. package/dist/{chunk-JDLXT6VI.js → chunk-5DWTU5KS.js} +7 -5
  106. package/dist/chunk-5DWTU5KS.js.map +1 -0
  107. package/dist/{chunk-PLGCIXHX.js → chunk-5L6IBYWZ.js} +4 -4
  108. package/dist/{chunk-PLGCIXHX.js.map → chunk-5L6IBYWZ.js.map} +1 -1
  109. package/dist/{chunk-AVYPAASH.js → chunk-6SXIAFXW.js} +7 -7
  110. package/dist/{chunk-AVYPAASH.js.map → chunk-6SXIAFXW.js.map} +1 -1
  111. package/dist/{chunk-46JZXQRS.js → chunk-76GCBYJX.js} +3 -3
  112. package/dist/{chunk-46JZXQRS.js.map → chunk-76GCBYJX.js.map} +1 -1
  113. package/dist/{chunk-IATZL5LC.js → chunk-BHNY4T4O.js} +8 -8
  114. package/dist/{chunk-IATZL5LC.js.map → chunk-BHNY4T4O.js.map} +1 -1
  115. package/dist/{chunk-XMO7HDZZ.js → chunk-C5MQ6VWX.js} +3 -3
  116. package/dist/{chunk-XMO7HDZZ.js.map → chunk-C5MQ6VWX.js.map} +1 -1
  117. package/dist/{chunk-GWW2YPJ3.js → chunk-CTV5GA2U.js} +4 -4
  118. package/dist/{chunk-GWW2YPJ3.js.map → chunk-CTV5GA2U.js.map} +1 -1
  119. package/dist/{chunk-JZDJO2CK.js → chunk-D2VMJV3L.js} +10 -8
  120. package/dist/chunk-D2VMJV3L.js.map +1 -0
  121. package/dist/{chunk-QQRU2L23.js → chunk-D6IJYZ7U.js} +7 -7
  122. package/dist/{chunk-QQRU2L23.js.map → chunk-D6IJYZ7U.js.map} +1 -1
  123. package/dist/{chunk-7YH3A5BT.js → chunk-DMMGD4GW.js} +5 -5
  124. package/dist/{chunk-7YH3A5BT.js.map → chunk-DMMGD4GW.js.map} +1 -1
  125. package/dist/{chunk-HIAHDZI5.js → chunk-FQHNVD3H.js} +3 -3
  126. package/dist/{chunk-HIAHDZI5.js.map → chunk-FQHNVD3H.js.map} +1 -1
  127. package/dist/{chunk-H3PJJKAQ.js → chunk-HG4B4F4N.js} +8 -3
  128. package/dist/chunk-HG4B4F4N.js.map +1 -0
  129. package/dist/{chunk-6EBVVCNI.js → chunk-HGKAIIAJ.js} +4 -4
  130. package/dist/{chunk-6EBVVCNI.js.map → chunk-HGKAIIAJ.js.map} +1 -1
  131. package/dist/{chunk-ZP7H4W2B.js → chunk-HGY7P2Y3.js} +5 -5
  132. package/dist/{chunk-ZP7H4W2B.js.map → chunk-HGY7P2Y3.js.map} +1 -1
  133. package/dist/{chunk-5A6QUNZ5.js → chunk-JP5XQJKO.js} +4 -4
  134. package/dist/{chunk-5A6QUNZ5.js.map → chunk-JP5XQJKO.js.map} +1 -1
  135. package/dist/{chunk-ZPX4LBQZ.js → chunk-KTLQV4Q4.js} +5 -5
  136. package/dist/{chunk-ZPX4LBQZ.js.map → chunk-KTLQV4Q4.js.map} +1 -1
  137. package/dist/{chunk-3W746XYR.js → chunk-LBBPJM4K.js} +5 -5
  138. package/dist/{chunk-3W746XYR.js.map → chunk-LBBPJM4K.js.map} +1 -1
  139. package/dist/{chunk-XLCLZIWF.js → chunk-LPAWMUJR.js} +4 -4
  140. package/dist/{chunk-XLCLZIWF.js.map → chunk-LPAWMUJR.js.map} +1 -1
  141. package/dist/{chunk-E2GBYIGH.js → chunk-MHDOK7GH.js} +4 -4
  142. package/dist/{chunk-E2GBYIGH.js.map → chunk-MHDOK7GH.js.map} +1 -1
  143. package/dist/{chunk-UY57T42N.js → chunk-MSNU4NYS.js} +3 -3
  144. package/dist/{chunk-UY57T42N.js.map → chunk-MSNU4NYS.js.map} +1 -1
  145. package/dist/{chunk-VEWF3NFM.js → chunk-OWJMPD7X.js} +3 -3
  146. package/dist/{chunk-VEWF3NFM.js.map → chunk-OWJMPD7X.js.map} +1 -1
  147. package/dist/{chunk-YBEZB5WO.js → chunk-P7N3TZFE.js} +46 -24
  148. package/dist/chunk-P7N3TZFE.js.map +1 -0
  149. package/dist/{chunk-2JQUBER5.js → chunk-PLW6MTSL.js} +8 -8
  150. package/dist/{chunk-2JQUBER5.js.map → chunk-PLW6MTSL.js.map} +1 -1
  151. package/dist/{chunk-EM46TNHW.js → chunk-PSBXF3O5.js} +4 -4
  152. package/dist/{chunk-EM46TNHW.js.map → chunk-PSBXF3O5.js.map} +1 -1
  153. package/dist/{chunk-J6T5YOUW.js → chunk-PXM3FBPO.js} +3 -3
  154. package/dist/{chunk-J6T5YOUW.js.map → chunk-PXM3FBPO.js.map} +1 -1
  155. package/dist/{chunk-VPGOT3JO.js → chunk-QUBQPGT7.js} +3 -3
  156. package/dist/{chunk-VPGOT3JO.js.map → chunk-QUBQPGT7.js.map} +1 -1
  157. package/dist/{chunk-6TWQZEPF.js → chunk-QXX54X55.js} +4 -4
  158. package/dist/{chunk-6TWQZEPF.js.map → chunk-QXX54X55.js.map} +1 -1
  159. package/dist/{chunk-WCCZYPYM.js → chunk-RSWRKU4X.js} +4 -4
  160. package/dist/{chunk-WCCZYPYM.js.map → chunk-RSWRKU4X.js.map} +1 -1
  161. package/dist/{chunk-P4XV656A.js → chunk-S6SP272Z.js} +5 -4
  162. package/dist/chunk-S6SP272Z.js.map +1 -0
  163. package/dist/{chunk-556Q5ATS.js → chunk-SDEBSX6Z.js} +4 -4
  164. package/dist/{chunk-556Q5ATS.js.map → chunk-SDEBSX6Z.js.map} +1 -1
  165. package/dist/{chunk-C7RM335V.js → chunk-STKR2KHL.js} +3 -3
  166. package/dist/{chunk-C7RM335V.js.map → chunk-STKR2KHL.js.map} +1 -1
  167. package/dist/{chunk-GNLCPK6N.js → chunk-SU7NHAYA.js} +3 -3
  168. package/dist/{chunk-GNLCPK6N.js.map → chunk-SU7NHAYA.js.map} +1 -1
  169. package/dist/chunk-TCTKM34I.js +14 -0
  170. package/dist/{chunk-PJVQMZHM.js.map → chunk-TCTKM34I.js.map} +1 -1
  171. package/dist/{chunk-PENQTLAN.js → chunk-TWD4ECS3.js} +3 -3
  172. package/dist/{chunk-PENQTLAN.js.map → chunk-TWD4ECS3.js.map} +1 -1
  173. package/dist/{chunk-BCADAQXY.js → chunk-TYTYD6AK.js} +3 -3
  174. package/dist/{chunk-BCADAQXY.js.map → chunk-TYTYD6AK.js.map} +1 -1
  175. package/dist/{chunk-YXI2ZCXD.js → chunk-U3UY2BDN.js} +4 -4
  176. package/dist/{chunk-YXI2ZCXD.js.map → chunk-U3UY2BDN.js.map} +1 -1
  177. package/dist/{chunk-OXA277JH.js → chunk-UWDS42UX.js} +4 -4
  178. package/dist/{chunk-OXA277JH.js.map → chunk-UWDS42UX.js.map} +1 -1
  179. package/dist/{chunk-K4ON2CI7.js → chunk-V7QFIGQ4.js} +6 -6
  180. package/dist/{chunk-K4ON2CI7.js.map → chunk-V7QFIGQ4.js.map} +1 -1
  181. package/dist/{chunk-6YWW5Y22.js → chunk-VEA7QDNY.js} +3 -3
  182. package/dist/{chunk-6YWW5Y22.js.map → chunk-VEA7QDNY.js.map} +1 -1
  183. package/dist/{chunk-W23NEGCL.js → chunk-VJQ7SM4O.js} +5 -5
  184. package/dist/{chunk-W23NEGCL.js.map → chunk-VJQ7SM4O.js.map} +1 -1
  185. package/dist/{chunk-A75QNVGV.js → chunk-XD33WKKI.js} +7 -7
  186. package/dist/{chunk-A75QNVGV.js.map → chunk-XD33WKKI.js.map} +1 -1
  187. package/dist/{chunk-FNZ4MEUH.js → chunk-YMHL73TL.js} +6 -6
  188. package/dist/{chunk-FNZ4MEUH.js.map → chunk-YMHL73TL.js.map} +1 -1
  189. package/dist/{chunk-ZMCFSOYF.js → chunk-YSRKR5DE.js} +4 -4
  190. package/dist/{chunk-ZMCFSOYF.js.map → chunk-YSRKR5DE.js.map} +1 -1
  191. package/dist/{chunk-NTK25X6V.js → chunk-YXCJBX6X.js} +8 -8
  192. package/dist/{chunk-NTK25X6V.js.map → chunk-YXCJBX6X.js.map} +1 -1
  193. package/dist/{chunk-I3DKJNUZ.js → chunk-ZE262XHY.js} +4 -4
  194. package/dist/{chunk-I3DKJNUZ.js.map → chunk-ZE262XHY.js.map} +1 -1
  195. package/dist/components/cart/index.js +1 -1
  196. package/dist/components/common/index.js +1 -1
  197. package/dist/components/drawer/index.js +23 -23
  198. package/dist/components/home/index.js +27 -27
  199. package/dist/components/layout/index.js +7 -7
  200. package/dist/components/product/index.js +24 -24
  201. package/dist/components/store/MaintenancePage.d.ts +8 -0
  202. package/dist/components/store/MaintenancePage.d.ts.map +1 -0
  203. package/dist/components/store/index.d.ts +2 -1
  204. package/dist/components/store/index.d.ts.map +1 -1
  205. package/dist/components/store/index.js +25 -33
  206. package/dist/components/store/index.js.map +1 -1
  207. package/dist/components/store/lazy.d.ts +2 -0
  208. package/dist/components/store/lazy.d.ts.map +1 -1
  209. package/dist/components/toast/index.js +5 -5
  210. package/dist/dev/editor/index.js +3 -3
  211. package/dist/dev/index.js +3 -3
  212. package/dist/document-class-AQ7FGLPE.js +29 -0
  213. package/dist/{document-class-OWGWP7TU.js.map → document-class-AQ7FGLPE.js.map} +1 -1
  214. package/dist/hooks/index.js +23 -23
  215. package/dist/hooks/useComments.js +4 -4
  216. package/dist/hooks/useGtm.js +23 -23
  217. package/dist/hooks/useMoney.js +23 -23
  218. package/dist/hooks/useProduct.js +4 -4
  219. package/dist/hooks/useStore.js +23 -23
  220. package/dist/hooks/useUser.js +6 -6
  221. package/dist/hooks/useWishlist.js +4 -4
  222. package/dist/index.js +23 -23
  223. package/dist/native-app/index.js +4 -4
  224. package/dist/{navigation-4ASVNTMT.js → navigation-6MDIVFMB.js} +8 -8
  225. package/dist/{navigation-4ASVNTMT.js.map → navigation-6MDIVFMB.js.map} +1 -1
  226. package/dist/navigation-P3RDLBP7.js +14 -0
  227. package/dist/{navigation-BTWSY7VI.js.map → navigation-P3RDLBP7.js.map} +1 -1
  228. package/dist/{not-found-EFNMP37O.js → not-found-RBWKACRW.js} +26 -26
  229. package/dist/{not-found-EFNMP37O.js.map → not-found-RBWKACRW.js.map} +1 -1
  230. package/dist/providers/TwilightProvider.d.ts +1 -1
  231. package/dist/providers/TwilightProvider.d.ts.map +1 -1
  232. package/dist/providers/index.js +23 -23
  233. package/dist/routes/account/orders.js +8 -8
  234. package/dist/routes/account.js +17 -17
  235. package/dist/routes/blog.js +12 -12
  236. package/dist/routes/brands.js +8 -8
  237. package/dist/routes/cart.js +31 -31
  238. package/dist/routes/home.js +28 -28
  239. package/dist/routes/index.js +7 -7
  240. package/dist/routes/loyalty.js +9 -9
  241. package/dist/routes/page.js +8 -8
  242. package/dist/routes/product-listing.js +29 -29
  243. package/dist/routes/product.js +27 -27
  244. package/dist/routes/root/beforeLoad.d.ts +13 -0
  245. package/dist/routes/root/beforeLoad.d.ts.map +1 -1
  246. package/dist/routes/seo-redirects.js +7 -7
  247. package/dist/routes/testimonials.js +3 -3
  248. package/dist/routes/thank-you.js +8 -8
  249. package/dist/skeleton.js +28 -28
  250. package/dist/{store-lookup-4ZBTHRZA.js → store-lookup-7SAEE4L3.js} +12 -12
  251. package/dist/{store-lookup-4ZBTHRZA.js.map → store-lookup-7SAEE4L3.js.map} +1 -1
  252. package/dist/tanstack/middleware/twilight.d.ts +12 -0
  253. package/dist/tanstack/middleware/twilight.d.ts.map +1 -1
  254. package/dist/tanstack/router.d.ts.map +1 -1
  255. package/dist/tanstack.js +34 -21
  256. package/dist/tanstack.js.map +1 -1
  257. package/dist/twilight/context.d.ts +5 -0
  258. package/dist/twilight/context.d.ts.map +1 -1
  259. package/dist/twilight/ensure-context.d.ts.map +1 -1
  260. package/dist/types/index.d.ts +19 -0
  261. package/dist/types/index.d.ts.map +1 -1
  262. package/dist/types/twilight.d.ts +8 -0
  263. package/dist/types/twilight.d.ts.map +1 -1
  264. package/dist/utils/index.js +6 -6
  265. package/dist/utils/maintenance.d.ts +31 -0
  266. package/dist/utils/maintenance.d.ts.map +1 -0
  267. package/dist/vite/index.js +3 -3
  268. package/package.json +1 -1
  269. package/tailwind/components/store/MaintenancePage.tsx.txt +156 -0
  270. package/tailwind/components/store/index.ts.txt +4 -1
  271. package/tailwind/components/store/lazy.ts.txt +5 -0
  272. package/tailwind/routes/root/beforeLoad.ts.txt +54 -0
  273. package/tailwind/routes/root/head.ts.txt +6 -2
  274. package/dist/Header-2GMIMJ2A.js +0 -22
  275. package/dist/StoreClosedNotification-FJS7YUCR.js +0 -54
  276. package/dist/chunk-H3PJJKAQ.js.map +0 -1
  277. package/dist/chunk-JDLXT6VI.js.map +0 -1
  278. package/dist/chunk-JZDJO2CK.js.map +0 -1
  279. package/dist/chunk-OSTGSFJW.js.map +0 -1
  280. package/dist/chunk-P4XV656A.js.map +0 -1
  281. package/dist/chunk-PJVQMZHM.js +0 -14
  282. package/dist/chunk-YBEZB5WO.js.map +0 -1
  283. package/dist/document-class-OWGWP7TU.js +0 -29
  284. package/dist/navigation-BTWSY7VI.js +0 -14
package/dist/api/cart.js CHANGED
@@ -1,11 +1,11 @@
1
- export { cart } from '../chunk-ZP7H4W2B.js';
2
- import '../chunk-K4ON2CI7.js';
1
+ export { cart } from '../chunk-HGY7P2Y3.js';
2
+ import '../chunk-V7QFIGQ4.js';
3
3
  import '../chunk-OUW6WESU.js';
4
- import '../chunk-ZPX4LBQZ.js';
5
- import '../chunk-VPGOT3JO.js';
6
- import '../chunk-VEWF3NFM.js';
7
- import '../chunk-GNLCPK6N.js';
8
- import '../chunk-H3PJJKAQ.js';
4
+ import '../chunk-KTLQV4Q4.js';
5
+ import '../chunk-QUBQPGT7.js';
6
+ import '../chunk-OWJMPD7X.js';
7
+ import '../chunk-SU7NHAYA.js';
8
+ import '../chunk-HG4B4F4N.js';
9
9
  import '../chunk-T72DAX7R.js';
10
10
  import '../chunk-DF6FBKDN.js';
11
11
  import '../chunk-DGUM43GV.js';
@@ -1,11 +1,11 @@
1
- export { category } from '../chunk-OXA277JH.js';
2
- import '../chunk-K4ON2CI7.js';
1
+ export { category } from '../chunk-UWDS42UX.js';
2
+ import '../chunk-V7QFIGQ4.js';
3
3
  import '../chunk-OUW6WESU.js';
4
- import '../chunk-ZPX4LBQZ.js';
5
- import '../chunk-VPGOT3JO.js';
6
- import '../chunk-VEWF3NFM.js';
7
- import '../chunk-GNLCPK6N.js';
8
- import '../chunk-H3PJJKAQ.js';
4
+ import '../chunk-KTLQV4Q4.js';
5
+ import '../chunk-QUBQPGT7.js';
6
+ import '../chunk-OWJMPD7X.js';
7
+ import '../chunk-SU7NHAYA.js';
8
+ import '../chunk-HG4B4F4N.js';
9
9
  import '../chunk-T72DAX7R.js';
10
10
  import '../chunk-DF6FBKDN.js';
11
11
  import '../chunk-DGUM43GV.js';
@@ -1,7 +1,7 @@
1
- export { STORE_IDENTIFIER_HEADER, api, cdn, filesCdn, getActiveCurrency, getActiveScope, getActiveScopeId, getAuthToken } from '../chunk-ZPX4LBQZ.js';
2
- import '../chunk-VEWF3NFM.js';
3
- import '../chunk-GNLCPK6N.js';
4
- import '../chunk-H3PJJKAQ.js';
1
+ export { STORE_IDENTIFIER_HEADER, api, cdn, filesCdn, getActiveCurrency, getActiveScope, getActiveScopeId, getAuthToken } from '../chunk-KTLQV4Q4.js';
2
+ import '../chunk-OWJMPD7X.js';
3
+ import '../chunk-SU7NHAYA.js';
4
+ import '../chunk-HG4B4F4N.js';
5
5
  import '../chunk-T72DAX7R.js';
6
6
  import '../chunk-DGUM43GV.js';
7
7
  //# sourceMappingURL=client.js.map
package/dist/api/home.js CHANGED
@@ -1,8 +1,8 @@
1
- export { home } from '../chunk-HKSDEFQV.js';
2
- import '../chunk-ZPX4LBQZ.js';
3
- import '../chunk-VEWF3NFM.js';
4
- import '../chunk-GNLCPK6N.js';
5
- import '../chunk-H3PJJKAQ.js';
1
+ export { home } from '../chunk-42YMCOK4.js';
2
+ import '../chunk-KTLQV4Q4.js';
3
+ import '../chunk-OWJMPD7X.js';
4
+ import '../chunk-SU7NHAYA.js';
5
+ import '../chunk-HG4B4F4N.js';
6
6
  import '../chunk-T72DAX7R.js';
7
7
  import '../chunk-DGUM43GV.js';
8
8
  //# sourceMappingURL=home.js.map
@@ -1,11 +1,11 @@
1
- export { loyalty } from '../chunk-PLGCIXHX.js';
2
- import '../chunk-K4ON2CI7.js';
1
+ export { loyalty } from '../chunk-5L6IBYWZ.js';
2
+ import '../chunk-V7QFIGQ4.js';
3
3
  import '../chunk-OUW6WESU.js';
4
- import '../chunk-ZPX4LBQZ.js';
5
- import '../chunk-VPGOT3JO.js';
6
- import '../chunk-VEWF3NFM.js';
7
- import '../chunk-GNLCPK6N.js';
8
- import '../chunk-H3PJJKAQ.js';
4
+ import '../chunk-KTLQV4Q4.js';
5
+ import '../chunk-QUBQPGT7.js';
6
+ import '../chunk-OWJMPD7X.js';
7
+ import '../chunk-SU7NHAYA.js';
8
+ import '../chunk-HG4B4F4N.js';
9
9
  import '../chunk-T72DAX7R.js';
10
10
  import '../chunk-DF6FBKDN.js';
11
11
  import '../chunk-DGUM43GV.js';
package/dist/api/menu.js CHANGED
@@ -1,8 +1,8 @@
1
- export { menu } from '../chunk-6TWQZEPF.js';
2
- import '../chunk-ZPX4LBQZ.js';
3
- import '../chunk-VEWF3NFM.js';
4
- import '../chunk-GNLCPK6N.js';
5
- import '../chunk-H3PJJKAQ.js';
1
+ export { menu } from '../chunk-QXX54X55.js';
2
+ import '../chunk-KTLQV4Q4.js';
3
+ import '../chunk-OWJMPD7X.js';
4
+ import '../chunk-SU7NHAYA.js';
5
+ import '../chunk-HG4B4F4N.js';
6
6
  import '../chunk-T72DAX7R.js';
7
7
  import '../chunk-DGUM43GV.js';
8
8
  //# sourceMappingURL=menu.js.map
@@ -1,8 +1,8 @@
1
- export { notification } from '../chunk-C7RM335V.js';
2
- import '../chunk-ZPX4LBQZ.js';
3
- import '../chunk-VEWF3NFM.js';
4
- import '../chunk-GNLCPK6N.js';
5
- import '../chunk-H3PJJKAQ.js';
1
+ export { notification } from '../chunk-STKR2KHL.js';
2
+ import '../chunk-KTLQV4Q4.js';
3
+ import '../chunk-OWJMPD7X.js';
4
+ import '../chunk-SU7NHAYA.js';
5
+ import '../chunk-HG4B4F4N.js';
6
6
  import '../chunk-T72DAX7R.js';
7
7
  import '../chunk-DGUM43GV.js';
8
8
  //# sourceMappingURL=notification.js.map
package/dist/api/order.js CHANGED
@@ -1,11 +1,11 @@
1
- export { order } from '../chunk-556Q5ATS.js';
2
- import '../chunk-K4ON2CI7.js';
1
+ export { order } from '../chunk-SDEBSX6Z.js';
2
+ import '../chunk-V7QFIGQ4.js';
3
3
  import '../chunk-OUW6WESU.js';
4
- import '../chunk-ZPX4LBQZ.js';
5
- import '../chunk-VPGOT3JO.js';
6
- import '../chunk-VEWF3NFM.js';
7
- import '../chunk-GNLCPK6N.js';
8
- import '../chunk-H3PJJKAQ.js';
4
+ import '../chunk-KTLQV4Q4.js';
5
+ import '../chunk-QUBQPGT7.js';
6
+ import '../chunk-OWJMPD7X.js';
7
+ import '../chunk-SU7NHAYA.js';
8
+ import '../chunk-HG4B4F4N.js';
9
9
  import '../chunk-T72DAX7R.js';
10
10
  import '../chunk-DF6FBKDN.js';
11
11
  import '../chunk-DGUM43GV.js';
package/dist/api/page.js CHANGED
@@ -1,11 +1,11 @@
1
- export { page } from '../chunk-GWW2YPJ3.js';
2
- import '../chunk-K4ON2CI7.js';
1
+ export { page } from '../chunk-CTV5GA2U.js';
2
+ import '../chunk-V7QFIGQ4.js';
3
3
  import '../chunk-OUW6WESU.js';
4
- import '../chunk-ZPX4LBQZ.js';
5
- import '../chunk-VPGOT3JO.js';
6
- import '../chunk-VEWF3NFM.js';
7
- import '../chunk-GNLCPK6N.js';
8
- import '../chunk-H3PJJKAQ.js';
4
+ import '../chunk-KTLQV4Q4.js';
5
+ import '../chunk-QUBQPGT7.js';
6
+ import '../chunk-OWJMPD7X.js';
7
+ import '../chunk-SU7NHAYA.js';
8
+ import '../chunk-HG4B4F4N.js';
9
9
  import '../chunk-T72DAX7R.js';
10
10
  import '../chunk-DF6FBKDN.js';
11
11
  import '../chunk-DGUM43GV.js';
@@ -1,11 +1,11 @@
1
- export { getProductPreview, isProductPreviewQuery, parseNextPageToken, product, productDetailQueryKey, productPreviewQueryKey, rememberProductPreview, shouldDehydrateQuery } from '../chunk-W23NEGCL.js';
2
- import '../chunk-K4ON2CI7.js';
1
+ export { getProductPreview, isProductPreviewQuery, parseNextPageToken, product, productDetailQueryKey, productPreviewQueryKey, rememberProductPreview, shouldDehydrateQuery } from '../chunk-VJQ7SM4O.js';
2
+ import '../chunk-V7QFIGQ4.js';
3
3
  import '../chunk-OUW6WESU.js';
4
- import '../chunk-ZPX4LBQZ.js';
5
- import '../chunk-VPGOT3JO.js';
6
- import '../chunk-VEWF3NFM.js';
7
- import '../chunk-GNLCPK6N.js';
8
- import '../chunk-H3PJJKAQ.js';
4
+ import '../chunk-KTLQV4Q4.js';
5
+ import '../chunk-QUBQPGT7.js';
6
+ import '../chunk-OWJMPD7X.js';
7
+ import '../chunk-SU7NHAYA.js';
8
+ import '../chunk-HG4B4F4N.js';
9
9
  import '../chunk-T72DAX7R.js';
10
10
  import '../chunk-DF6FBKDN.js';
11
11
  import '../chunk-DGUM43GV.js';
@@ -1,7 +1,7 @@
1
- import { api } from '../chunk-ZPX4LBQZ.js';
2
- import '../chunk-VEWF3NFM.js';
3
- import '../chunk-GNLCPK6N.js';
4
- import '../chunk-H3PJJKAQ.js';
1
+ import { api } from '../chunk-KTLQV4Q4.js';
2
+ import '../chunk-OWJMPD7X.js';
3
+ import '../chunk-SU7NHAYA.js';
4
+ import '../chunk-HG4B4F4N.js';
5
5
  import '../chunk-T72DAX7R.js';
6
6
  import '../chunk-DGUM43GV.js';
7
7
 
@@ -1,4 +1,4 @@
1
- import type { Store, Theme, Language, JitsuConfig } from '../types';
1
+ import type { Store, Theme, Language, JitsuConfig, MaintenanceDetails } from '../types';
2
2
  import { resolveStoreIdentifier } from '../utils/store-identity';
3
3
  export { resolveStoreIdentifier };
4
4
  /** Twig's `salla.init({ user })` object; the endpoint ignores the token, so always the guest. */
@@ -44,6 +44,14 @@ export interface StoreContext {
44
44
  swoole?: string[];
45
45
  /** Where the SDK's analytics send events, and which ones; without it the SDK tracks nothing. */
46
46
  jitsu?: JitsuConfig;
47
+ /**
48
+ * The store is closed: by the merchant from the dashboard, by the platform, or
49
+ * for the selected market only. The engine then renders the maintenance page
50
+ * to everyone but the merchant; see `rootBeforeLoad`.
51
+ */
52
+ maintenance?: boolean;
53
+ /** What the maintenance page says; sent beside `maintenance`. */
54
+ maintenance_details?: MaintenanceDetails;
47
55
  /**
48
56
  * The scope these settings were requested with; absent when none was. Not from
49
57
  * the API: stamped by `store.settings`, so `resolveThemeVersionId` can tell
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/api/store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAGjE,OAAO,EAAE,sBAAsB,EAAE,CAAC;AAiBlC,iGAAiG;AACjG,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;IACvB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AA0BD;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,iEAAiE;IACjE,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CACjB,MAAM,EACN;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CACrF,CAAC;IACF,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,KAAK,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,kBAAkB,EAAE,MAAM,CAAA;KAAE,CAAC;IACpD,SAAS,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,OAAO,CAAA;KAAE,CAAC;IACtD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,iEAAiE;IACjE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,gGAAgG;IAChG,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAeD,eAAO,MAAM,KAAK;iCACmB,MAAM,KAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;;qCAoDzC,MAAM;;;;CAoBtC,CAAC"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/api/store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAExF,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAGjE,OAAO,EAAE,sBAAsB,EAAE,CAAC;AAiBlC,iGAAiG;AACjG,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;IACvB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AA4BD;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,iEAAiE;IACjE,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CACjB,MAAM,EACN;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CACrF,CAAC;IACF,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,KAAK,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,kBAAkB,EAAE,MAAM,CAAA;KAAE,CAAC;IACpD,SAAS,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,OAAO,CAAA;KAAE,CAAC;IACtD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,iEAAiE;IACjE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,gGAAgG;IAChG,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,iEAAiE;IACjE,mBAAmB,CAAC,EAAE,kBAAkB,CAAC;IACzC;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAeD,eAAO,MAAM,KAAK;iCACmB,MAAM,KAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;;qCAsDzC,MAAM;;;;CAoBtC,CAAC"}
package/dist/api/store.js CHANGED
@@ -1,8 +1,8 @@
1
- export { store } from '../chunk-JDLXT6VI.js';
2
- import '../chunk-ZPX4LBQZ.js';
3
- import '../chunk-VEWF3NFM.js';
4
- export { resolveStoreIdentifier } from '../chunk-GNLCPK6N.js';
5
- import '../chunk-H3PJJKAQ.js';
1
+ export { store } from '../chunk-5DWTU5KS.js';
2
+ import '../chunk-KTLQV4Q4.js';
3
+ import '../chunk-OWJMPD7X.js';
4
+ export { resolveStoreIdentifier } from '../chunk-SU7NHAYA.js';
5
+ import '../chunk-HG4B4F4N.js';
6
6
  import '../chunk-T72DAX7R.js';
7
7
  import '../chunk-DGUM43GV.js';
8
8
  //# sourceMappingURL=store.js.map
@@ -1,8 +1,8 @@
1
- export { commonTranslationsPath, storeTranslationsPath, translations } from '../chunk-YXI2ZCXD.js';
2
- import '../chunk-ZPX4LBQZ.js';
3
- import '../chunk-VEWF3NFM.js';
4
- import '../chunk-GNLCPK6N.js';
5
- import '../chunk-H3PJJKAQ.js';
1
+ export { commonTranslationsPath, storeTranslationsPath, translations } from '../chunk-U3UY2BDN.js';
2
+ import '../chunk-KTLQV4Q4.js';
3
+ import '../chunk-OWJMPD7X.js';
4
+ import '../chunk-SU7NHAYA.js';
5
+ import '../chunk-HG4B4F4N.js';
6
6
  import '../chunk-T72DAX7R.js';
7
7
  import '../chunk-DGUM43GV.js';
8
8
  //# sourceMappingURL=translations.js.map
package/dist/api/user.js CHANGED
@@ -1,8 +1,8 @@
1
- export { user } from '../chunk-XMO7HDZZ.js';
2
- import '../chunk-ZPX4LBQZ.js';
3
- import '../chunk-VEWF3NFM.js';
4
- import '../chunk-GNLCPK6N.js';
5
- import '../chunk-H3PJJKAQ.js';
1
+ export { user } from '../chunk-C5MQ6VWX.js';
2
+ import '../chunk-KTLQV4Q4.js';
3
+ import '../chunk-OWJMPD7X.js';
4
+ import '../chunk-SU7NHAYA.js';
5
+ import '../chunk-HG4B4F4N.js';
6
6
  import '../chunk-T72DAX7R.js';
7
7
  import '../chunk-DGUM43GV.js';
8
8
  //# sourceMappingURL=user.js.map
@@ -1,8 +1,8 @@
1
- export { wallet } from '../chunk-UY57T42N.js';
2
- import '../chunk-ZPX4LBQZ.js';
3
- import '../chunk-VEWF3NFM.js';
4
- import '../chunk-GNLCPK6N.js';
5
- import '../chunk-H3PJJKAQ.js';
1
+ export { wallet } from '../chunk-MSNU4NYS.js';
2
+ import '../chunk-KTLQV4Q4.js';
3
+ import '../chunk-OWJMPD7X.js';
4
+ import '../chunk-SU7NHAYA.js';
5
+ import '../chunk-HG4B4F4N.js';
6
6
  import '../chunk-T72DAX7R.js';
7
7
  import '../chunk-DGUM43GV.js';
8
8
  //# sourceMappingURL=wallet.js.map
@@ -1,12 +1,12 @@
1
- export { wishlist } from '../chunk-WCCZYPYM.js';
2
- import '../chunk-W23NEGCL.js';
3
- import '../chunk-K4ON2CI7.js';
1
+ export { wishlist } from '../chunk-RSWRKU4X.js';
2
+ import '../chunk-VJQ7SM4O.js';
3
+ import '../chunk-V7QFIGQ4.js';
4
4
  import '../chunk-OUW6WESU.js';
5
- import '../chunk-ZPX4LBQZ.js';
6
- import '../chunk-VPGOT3JO.js';
7
- import '../chunk-VEWF3NFM.js';
8
- import '../chunk-GNLCPK6N.js';
9
- import '../chunk-H3PJJKAQ.js';
5
+ import '../chunk-KTLQV4Q4.js';
6
+ import '../chunk-QUBQPGT7.js';
7
+ import '../chunk-OWJMPD7X.js';
8
+ import '../chunk-SU7NHAYA.js';
9
+ import '../chunk-HG4B4F4N.js';
10
10
  import '../chunk-T72DAX7R.js';
11
11
  import '../chunk-DF6FBKDN.js';
12
12
  import '../chunk-DGUM43GV.js';
@@ -1,5 +1,5 @@
1
- import { user } from './chunk-XMO7HDZZ.js';
2
- import { getTwilightContext } from './chunk-H3PJJKAQ.js';
1
+ import { user } from './chunk-C5MQ6VWX.js';
2
+ import { getTwilightContext } from './chunk-HG4B4F4N.js';
3
3
  import { useQuery } from '@tanstack/react-query';
4
4
 
5
5
  function useUser() {
@@ -13,5 +13,5 @@ function useUser() {
13
13
  }
14
14
 
15
15
  export { useUser };
16
- //# sourceMappingURL=chunk-PXHFHHTW.js.map
17
- //# sourceMappingURL=chunk-PXHFHHTW.js.map
16
+ //# sourceMappingURL=chunk-25SLMOCZ.js.map
17
+ //# sourceMappingURL=chunk-25SLMOCZ.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/hooks/useUser.ts"],"names":[],"mappings":";;;;AAUO,SAAS,OAAA,GAAyB;AACvC,EAAA,MAAM,KAAA,GAAQ,oBAAmB,CAAE,SAAA;AAEnC,EAAA,MAAM,QAAQ,QAAA,CAAS;AAAA,IACrB,GAAG,IAAA,CAAK,OAAA,CAAQ,OAAA,EAAQ;AAAA,IACxB,OAAA,EAAS,CAAC,CAAC,KAAA;AAAA,IACX,eAAA,EAAiB;AAAA,GAClB,CAAA;AAED,EAAA,OAAO,EAAE,GAAG,KAAA,EAAO,UAAA,EAAY,CAAC,CAAC,KAAA,EAAM;AACzC","file":"chunk-PXHFHHTW.js","sourcesContent":["import { useQuery, type UseQueryResult } from '@tanstack/react-query';\nimport { getTwilightContext } from '../twilight/context';\nimport { user } from '../api/user';\nimport type { User } from '../types';\n\nexport type UseUserReturn = UseQueryResult<User | null> & {\n /** True when an auth token exists (regardless of query state). */\n isLoggedIn: boolean;\n};\n\nexport function useUser(): UseUserReturn {\n const token = getTwilightContext().authToken;\n\n const query = useQuery({\n ...user.queries.current(),\n enabled: !!token,\n placeholderData: null,\n });\n\n return { ...query, isLoggedIn: !!token };\n}\n"]}
1
+ {"version":3,"sources":["../src/hooks/useUser.ts"],"names":[],"mappings":";;;;AAUO,SAAS,OAAA,GAAyB;AACvC,EAAA,MAAM,KAAA,GAAQ,oBAAmB,CAAE,SAAA;AAEnC,EAAA,MAAM,QAAQ,QAAA,CAAS;AAAA,IACrB,GAAG,IAAA,CAAK,OAAA,CAAQ,OAAA,EAAQ;AAAA,IACxB,OAAA,EAAS,CAAC,CAAC,KAAA;AAAA,IACX,eAAA,EAAiB;AAAA,GAClB,CAAA;AAED,EAAA,OAAO,EAAE,GAAG,KAAA,EAAO,UAAA,EAAY,CAAC,CAAC,KAAA,EAAM;AACzC","file":"chunk-25SLMOCZ.js","sourcesContent":["import { useQuery, type UseQueryResult } from '@tanstack/react-query';\nimport { getTwilightContext } from '../twilight/context';\nimport { user } from '../api/user';\nimport type { User } from '../types';\n\nexport type UseUserReturn = UseQueryResult<User | null> & {\n /** True when an auth token exists (regardless of query state). */\n isLoggedIn: boolean;\n};\n\nexport function useUser(): UseUserReturn {\n const token = getTwilightContext().authToken;\n\n const query = useQuery({\n ...user.queries.current(),\n enabled: !!token,\n placeholderData: null,\n });\n\n return { ...query, isLoggedIn: !!token };\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { redirect } from './chunk-K4ON2CI7.js';
2
- import { clearAuthTokenCookie } from './chunk-GNLCPK6N.js';
1
+ import { redirect } from './chunk-V7QFIGQ4.js';
2
+ import { clearAuthTokenCookie } from './chunk-SU7NHAYA.js';
3
3
  import { FALLBACK_LOCALE } from './chunk-T72DAX7R.js';
4
4
  import { useEffect } from 'react';
5
5
 
@@ -37,5 +37,5 @@ function LogoutRedirect() {
37
37
  }
38
38
 
39
39
  export { LogoutRedirect, accountRedirectLoader, pendingOrdersRedirectLoader, productsSourceRedirectLoader, ratingRedirectLoader, slugBrandRedirectLoader };
40
- //# sourceMappingURL=chunk-5ISYMZ62.js.map
41
- //# sourceMappingURL=chunk-5ISYMZ62.js.map
40
+ //# sourceMappingURL=chunk-2IS4QU3P.js.map
41
+ //# sourceMappingURL=chunk-2IS4QU3P.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/routes/seo-redirects.ts"],"names":[],"mappings":";;;;;AAcA,eAAsB,wBAAwB,GAAA,EAAkD;AAC9F,EAAA,MAAM,MAAA,GAAS,GAAA,CAAI,MAAA,CAAO,MAAA,IAAU,eAAA;AACpC,EAAA,MAAM,SAAS,CAAA,CAAA,EAAI,MAAM,WAAW,GAAA,CAAI,MAAA,CAAO,EAAE,CAAA,CAAE,CAAA;AACrD;AAOA,eAAsB,4BACpB,GAAA,GAA+C,EAAE,MAAA,EAAQ,IAAG,EAC5C;AAChB,EAAA,MAAM,MAAA,GAAS,GAAA,CAAI,MAAA,CAAO,MAAA,IAAU,eAAA;AACpC,EAAA,MAAM,QAAA,CAAS,CAAA,CAAA,EAAI,MAAM,CAAA,8BAAA,CAAgC,CAAA;AAC3D;AAGA,eAAsB,qBACpB,GAAA,GAA+C,EAAE,MAAA,EAAQ,IAAG,EAC5C;AAChB,EAAA,MAAM,MAAA,GAAS,GAAA,CAAI,MAAA,CAAO,MAAA,IAAU,eAAA;AACpC,EAAA,MAAM,QAAA,CAAS,CAAA,CAAA,EAAI,MAAM,CAAA,eAAA,CAAiB,CAAA;AAC5C;AAGA,eAAsB,sBAAsB,GAAA,EAKzB;AAEjB,EAAA,MAAM,MAAA,GAAS,IAAI,MAAA,CAAO,MAAA,GAAS,IAAI,GAAA,CAAI,MAAA,CAAO,MAAM,CAAA,CAAA,GAAK,EAAA;AAC7D,EAAA,MAAM,QAAA,CAAS,CAAA,EAAG,MAAM,CAAA,SAAA,EAAY,IAAI,IAAI,CAAA,EAAG,GAAA,CAAI,MAAA,IAAU,EAAE,CAAA,CAAA,EAAI,EAAE,UAAA,EAAY,KAAK,CAAA;AACxF;AAGA,eAAsB,6BAA6B,GAAA,EAIhC;AACjB,EAAA,MAAM,MAAA,GAAS,IAAI,MAAA,CAAO,MAAA,GAAS,IAAI,GAAA,CAAI,MAAA,CAAO,MAAM,CAAA,CAAA,GAAK,EAAA;AAC7D,EAAA,MAAM,KAAA,GAAQ,IAAI,eAAA,CAAgB,GAAA,CAAI,MAAM,CAAA;AAC5C,EAAA,KAAA,CAAM,OAAO,QAAQ,CAAA;AACrB,EAAA,MAAM,IAAA,GAAO,MAAM,QAAA,EAAS;AAC5B,EAAA,MAAM,QAAA,CAAS,CAAA,EAAG,MAAM,CAAA,iBAAA,EAAoB,GAAA,CAAI,MAAM,CAAA,EAAG,IAAA,GAAO,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,GAAK,EAAE,CAAA,CAAA,EAAI;AAAA,IACjF,UAAA,EAAY;AAAA,GACb,CAAA;AACH;AAUO,SAAS,cAAA,GAAuB;AACrC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,oBAAA,EAAqB;AAErB,IAAA,MAAA,CAAO,QAAA,CAAS,QAAQ,MAAA,CAAO,QAAA,CAAS,KAAK,OAAA,CAAQ,8BAAA,EAAgC,EAAE,CAAC,CAAA;AAAA,EAC1F,CAAA,EAAG,EAAE,CAAA;AACL,EAAA,OAAO,IAAA;AACT","file":"chunk-5ISYMZ62.js","sourcesContent":["import { useEffect } from 'react';\nimport { redirect } from '../providers/NavigationProvider';\nimport { FALLBACK_LOCALE } from '../providers/locale-constants';\nimport { clearAuthTokenCookie } from '../utils/cookies';\n\nexport interface SlugBrandParams {\n /** SEO slug segment (ignored — only here to match the route pattern). */\n slug: string;\n /** Brand numeric ID to redirect to. */\n id: string;\n /** Active locale from the `/$locale` parent layout (e.g. `'ar'`, `'en'`). */\n locale?: string;\n}\n\nexport async function slugBrandRedirectLoader(ctx: { params: SlugBrandParams }): Promise<never> {\n const locale = ctx.params.locale || FALLBACK_LOCALE;\n throw redirect(`/${locale}/brands/${ctx.params.id}`);\n}\n\nexport interface PendingOrdersRedirectParams {\n /** Active locale from the `/$locale` parent layout (e.g. `'ar'`, `'en'`). */\n locale?: string;\n}\n\nexport async function pendingOrdersRedirectLoader(\n ctx: { params: PendingOrdersRedirectParams } = { params: {} }\n): Promise<never> {\n const locale = ctx.params.locale || FALLBACK_LOCALE;\n throw redirect(`/${locale}/account/orders?status=pending`);\n}\n\n/** `/account/rating`: the loyalty \"rate your orders\" link. Twig Raed has no rating page and sends it to the orders list. */\nexport async function ratingRedirectLoader(\n ctx: { params: PendingOrdersRedirectParams } = { params: {} }\n): Promise<never> {\n const locale = ctx.params.locale || FALLBACK_LOCALE;\n throw redirect(`/${locale}/account/orders`);\n}\n\n/** A Twig customer URL (`/profile`, `/orders`, …) kept working as its `/account/…` page. */\nexport async function accountRedirectLoader(ctx: {\n params: PendingOrdersRedirectParams;\n page: string;\n /** The incoming query string (`?status=pending`), kept on the account page. */\n search?: string;\n}): Promise<never> {\n // No locale in the URL stays without one: the locale layout adds it only where the store has several.\n const prefix = ctx.params.locale ? `/${ctx.params.locale}` : '';\n throw redirect(`${prefix}/account/${ctx.page}${ctx.search ?? ''}`, { statusCode: 301 });\n}\n\n/** `/latest-products`, `/most-sales-products` and `/offers` now live at `/products?source=`. */\nexport async function productsSourceRedirectLoader(ctx: {\n params: PendingOrdersRedirectParams;\n source: 'latest' | 'sales' | 'offers';\n search?: string;\n}): Promise<never> {\n const prefix = ctx.params.locale ? `/${ctx.params.locale}` : '';\n const query = new URLSearchParams(ctx.search);\n query.delete('source');\n const rest = query.toString();\n throw redirect(`${prefix}/products?source=${ctx.source}${rest ? `&${rest}` : ''}`, {\n statusCode: 301,\n });\n}\n\n/**\n * `/logout` — where the SDK sends the browser once `salla.auth.logout()` has run\n * (`salla.url.get('logout?from=…')`). The Twig storefront serves that URL server-side. Here\n * it renders nothing and, in the browser, removes the theme's own `token` cookie (the SDK's\n * `cookie.clearAll()` leaves it) and then does a full navigation home. It has to be a\n * component, not a loader redirect: a loader runs during server rendering, where the cookie\n * can't be cleared, so the redirect would leave the visitor signed in on the next request.\n */\nexport function LogoutRedirect(): null {\n useEffect(() => {\n clearAuthTokenCookie();\n // `/{store base}/{locale}/logout?from=…` → `/{store base}/{locale}`\n window.location.replace(window.location.href.replace(/\\/logout\\/?(\\?[^#]*)?(#.*)?$/, ''));\n }, []);\n return null;\n}\n"]}
1
+ {"version":3,"sources":["../src/routes/seo-redirects.ts"],"names":[],"mappings":";;;;;AAcA,eAAsB,wBAAwB,GAAA,EAAkD;AAC9F,EAAA,MAAM,MAAA,GAAS,GAAA,CAAI,MAAA,CAAO,MAAA,IAAU,eAAA;AACpC,EAAA,MAAM,SAAS,CAAA,CAAA,EAAI,MAAM,WAAW,GAAA,CAAI,MAAA,CAAO,EAAE,CAAA,CAAE,CAAA;AACrD;AAOA,eAAsB,4BACpB,GAAA,GAA+C,EAAE,MAAA,EAAQ,IAAG,EAC5C;AAChB,EAAA,MAAM,MAAA,GAAS,GAAA,CAAI,MAAA,CAAO,MAAA,IAAU,eAAA;AACpC,EAAA,MAAM,QAAA,CAAS,CAAA,CAAA,EAAI,MAAM,CAAA,8BAAA,CAAgC,CAAA;AAC3D;AAGA,eAAsB,qBACpB,GAAA,GAA+C,EAAE,MAAA,EAAQ,IAAG,EAC5C;AAChB,EAAA,MAAM,MAAA,GAAS,GAAA,CAAI,MAAA,CAAO,MAAA,IAAU,eAAA;AACpC,EAAA,MAAM,QAAA,CAAS,CAAA,CAAA,EAAI,MAAM,CAAA,eAAA,CAAiB,CAAA;AAC5C;AAGA,eAAsB,sBAAsB,GAAA,EAKzB;AAEjB,EAAA,MAAM,MAAA,GAAS,IAAI,MAAA,CAAO,MAAA,GAAS,IAAI,GAAA,CAAI,MAAA,CAAO,MAAM,CAAA,CAAA,GAAK,EAAA;AAC7D,EAAA,MAAM,QAAA,CAAS,CAAA,EAAG,MAAM,CAAA,SAAA,EAAY,IAAI,IAAI,CAAA,EAAG,GAAA,CAAI,MAAA,IAAU,EAAE,CAAA,CAAA,EAAI,EAAE,UAAA,EAAY,KAAK,CAAA;AACxF;AAGA,eAAsB,6BAA6B,GAAA,EAIhC;AACjB,EAAA,MAAM,MAAA,GAAS,IAAI,MAAA,CAAO,MAAA,GAAS,IAAI,GAAA,CAAI,MAAA,CAAO,MAAM,CAAA,CAAA,GAAK,EAAA;AAC7D,EAAA,MAAM,KAAA,GAAQ,IAAI,eAAA,CAAgB,GAAA,CAAI,MAAM,CAAA;AAC5C,EAAA,KAAA,CAAM,OAAO,QAAQ,CAAA;AACrB,EAAA,MAAM,IAAA,GAAO,MAAM,QAAA,EAAS;AAC5B,EAAA,MAAM,QAAA,CAAS,CAAA,EAAG,MAAM,CAAA,iBAAA,EAAoB,GAAA,CAAI,MAAM,CAAA,EAAG,IAAA,GAAO,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,GAAK,EAAE,CAAA,CAAA,EAAI;AAAA,IACjF,UAAA,EAAY;AAAA,GACb,CAAA;AACH;AAUO,SAAS,cAAA,GAAuB;AACrC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,oBAAA,EAAqB;AAErB,IAAA,MAAA,CAAO,QAAA,CAAS,QAAQ,MAAA,CAAO,QAAA,CAAS,KAAK,OAAA,CAAQ,8BAAA,EAAgC,EAAE,CAAC,CAAA;AAAA,EAC1F,CAAA,EAAG,EAAE,CAAA;AACL,EAAA,OAAO,IAAA;AACT","file":"chunk-2IS4QU3P.js","sourcesContent":["import { useEffect } from 'react';\nimport { redirect } from '../providers/NavigationProvider';\nimport { FALLBACK_LOCALE } from '../providers/locale-constants';\nimport { clearAuthTokenCookie } from '../utils/cookies';\n\nexport interface SlugBrandParams {\n /** SEO slug segment (ignored — only here to match the route pattern). */\n slug: string;\n /** Brand numeric ID to redirect to. */\n id: string;\n /** Active locale from the `/$locale` parent layout (e.g. `'ar'`, `'en'`). */\n locale?: string;\n}\n\nexport async function slugBrandRedirectLoader(ctx: { params: SlugBrandParams }): Promise<never> {\n const locale = ctx.params.locale || FALLBACK_LOCALE;\n throw redirect(`/${locale}/brands/${ctx.params.id}`);\n}\n\nexport interface PendingOrdersRedirectParams {\n /** Active locale from the `/$locale` parent layout (e.g. `'ar'`, `'en'`). */\n locale?: string;\n}\n\nexport async function pendingOrdersRedirectLoader(\n ctx: { params: PendingOrdersRedirectParams } = { params: {} }\n): Promise<never> {\n const locale = ctx.params.locale || FALLBACK_LOCALE;\n throw redirect(`/${locale}/account/orders?status=pending`);\n}\n\n/** `/account/rating`: the loyalty \"rate your orders\" link. Twig Raed has no rating page and sends it to the orders list. */\nexport async function ratingRedirectLoader(\n ctx: { params: PendingOrdersRedirectParams } = { params: {} }\n): Promise<never> {\n const locale = ctx.params.locale || FALLBACK_LOCALE;\n throw redirect(`/${locale}/account/orders`);\n}\n\n/** A Twig customer URL (`/profile`, `/orders`, …) kept working as its `/account/…` page. */\nexport async function accountRedirectLoader(ctx: {\n params: PendingOrdersRedirectParams;\n page: string;\n /** The incoming query string (`?status=pending`), kept on the account page. */\n search?: string;\n}): Promise<never> {\n // No locale in the URL stays without one: the locale layout adds it only where the store has several.\n const prefix = ctx.params.locale ? `/${ctx.params.locale}` : '';\n throw redirect(`${prefix}/account/${ctx.page}${ctx.search ?? ''}`, { statusCode: 301 });\n}\n\n/** `/latest-products`, `/most-sales-products` and `/offers` now live at `/products?source=`. */\nexport async function productsSourceRedirectLoader(ctx: {\n params: PendingOrdersRedirectParams;\n source: 'latest' | 'sales' | 'offers';\n search?: string;\n}): Promise<never> {\n const prefix = ctx.params.locale ? `/${ctx.params.locale}` : '';\n const query = new URLSearchParams(ctx.search);\n query.delete('source');\n const rest = query.toString();\n throw redirect(`${prefix}/products?source=${ctx.source}${rest ? `&${rest}` : ''}`, {\n statusCode: 301,\n });\n}\n\n/**\n * `/logout` — where the SDK sends the browser once `salla.auth.logout()` has run\n * (`salla.url.get('logout?from=…')`). The Twig storefront serves that URL server-side. Here\n * it renders nothing and, in the browser, removes the theme's own `token` cookie (the SDK's\n * `cookie.clearAll()` leaves it) and then does a full navigation home. It has to be a\n * component, not a loader redirect: a loader runs during server rendering, where the cookie\n * can't be cleared, so the redirect would leave the visitor signed in on the next request.\n */\nexport function LogoutRedirect(): null {\n useEffect(() => {\n clearAuthTokenCookie();\n // `/{store base}/{locale}/logout?from=…` → `/{store base}/{locale}`\n window.location.replace(window.location.href.replace(/\\/logout\\/?(\\?[^#]*)?(#.*)?$/, ''));\n }, []);\n return null;\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  import { useTranslation } from './chunk-TYNZ5B2B.js';
2
2
  import { useAsyncFn } from './chunk-6BZ5TKEV.js';
3
- import { whenSallaLoaded, onSallaEvent } from './chunk-VEWF3NFM.js';
3
+ import { whenSallaLoaded, onSallaEvent } from './chunk-OWJMPD7X.js';
4
4
  import { useSyncExternalStore, useCallback } from 'react';
5
5
 
6
6
  var WISHLIST_STORAGE_KEY = "salla::wishlist";
@@ -126,5 +126,5 @@ function resetWishlistStore() {
126
126
  }
127
127
 
128
128
  export { resetWishlistStore, useWishlist };
129
- //# sourceMappingURL=chunk-OOCN4RFV.js.map
130
- //# sourceMappingURL=chunk-OOCN4RFV.js.map
129
+ //# sourceMappingURL=chunk-3EBV4X6W.js.map
130
+ //# sourceMappingURL=chunk-3EBV4X6W.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/hooks/useWishlist.ts"],"names":[],"mappings":"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","file":"chunk-OOCN4RFV.js","sourcesContent":["import { useCallback, useSyncExternalStore } from 'react';\nimport { useAsyncFn } from './useAsyncFn';\nimport { useTranslation } from '../providers/I18nProvider';\nimport { onSallaEvent, whenSallaLoaded } from '../utils/sdk-helpers';\nimport type { UseToggleWithItems } from './types';\n\nexport type UseWishlistResult = UseToggleWithItems<number>;\n\n/**\n * useWishlist - Hook for managing wishlist functionality\n *\n * Provides wishlist product management with local storage persistence\n * and Salla SDK integration. Syncs with the SDK's wishlist state and\n * listens for events to maintain real-time consistency.\n *\n * Uses a module-level singleton store so SDK event listeners are\n * registered ONCE globally — not per-component. All hook instances\n * share the same state via `useSyncExternalStore`.\n *\n * @returns Wishlist state and management functions\n *\n * @example\n * ```tsx\n * function WishlistButton({ productId }) {\n * const { has, toggle, loading } = useWishlist();\n *\n * return (\n * <button\n * onClick={() => toggle(productId)}\n * disabled={loading}\n * className={has(productId) ? 'liked' : ''}\n * >\n * ❤️\n * </button>\n * );\n * }\n * ```\n */\n\nconst WISHLIST_STORAGE_KEY = 'salla::wishlist';\n\nlet ids: number[] = [];\nconst listeners = new Set<() => void>();\nlet subscribed = false;\n\nfunction emitChange() {\n for (const listener of listeners) listener();\n}\n\nfunction subscribe(listener: () => void) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n}\n\nfunction getSnapshot(): number[] {\n return ids;\n}\n\nconst getServerSnapshot = (): number[] => [];\n\nfunction persistIds() {\n try {\n localStorage.setItem(WISHLIST_STORAGE_KEY, JSON.stringify(ids));\n } catch {\n /* ignore storage errors */\n }\n}\n\nfunction initFromStorage() {\n try {\n // `storage` is missing while `window.salla` is still the head script's stub.\n const sdkWishlist = window.salla?.storage?.get(WISHLIST_STORAGE_KEY, []);\n const stored = localStorage.getItem(WISHLIST_STORAGE_KEY);\n const parsed = stored ? JSON.parse(stored) : [];\n ids = Array.isArray(sdkWishlist) && sdkWishlist.length > 0 ? sdkWishlist : parsed;\n } catch {\n /* ignore storage errors */\n }\n}\n\nfunction reloadFromStorage() {\n initFromStorage();\n emitChange();\n}\n\nfunction ensureSubscribed() {\n if (subscribed || typeof window === 'undefined') return;\n subscribed = true;\n initFromStorage();\n\n // On a cold load hydration runs before the SDK has loaded.\n whenSallaLoaded((salla) => {\n reloadFromStorage();\n if (!salla.wishlist?.event) return;\n\n salla.wishlist.event.onAdded((_event: unknown, id: number) => {\n if (ids.includes(id)) return;\n ids = [...ids, id];\n persistIds();\n emitChange();\n });\n\n salla.wishlist.event.onRemoved((_response: unknown, id: number) => {\n ids = ids.filter((itemId) => itemId !== id);\n persistIds();\n emitChange();\n });\n });\n\n // The SDK fills its storage with the customer's saved wishlist after init.\n onSallaEvent('wishlist::storage.synced', reloadFromStorage);\n}\n\n/**\n * useAsyncFn resolves with whatever the SDK rejected with, and callers detect\n * failure via `instanceof Error`. Normalize non-Error rejections so they are\n * never mistaken for success.\n */\nfunction toError(reason: unknown, fallback: string): Error {\n if (reason instanceof Error) return reason;\n if (typeof reason === 'string') return new Error(reason);\n const message = (reason as { message?: unknown } | null)?.message;\n return new Error(typeof message === 'string' ? message : fallback);\n}\n\nexport function useWishlist(): UseWishlistResult {\n ensureSubscribed();\n const storedIds = useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n const { t } = useTranslation();\n const failed = t('common.errors.error_occurred', 'Something went wrong');\n\n const [addState, addFn] = useAsyncFn(\n async (productId: number) => {\n const salla = window.salla;\n try {\n await salla?.wishlist.add(productId);\n } catch (reason) {\n throw toError(reason, failed);\n }\n if (!ids.includes(productId)) {\n ids = [...ids, productId];\n persistIds();\n emitChange();\n }\n },\n [failed]\n );\n\n const [removeState, removeFn] = useAsyncFn(\n async (productId: number) => {\n const salla = window.salla;\n try {\n await salla?.wishlist.remove(productId);\n } catch (reason) {\n throw toError(reason, failed);\n }\n ids = ids.filter((id) => id !== productId);\n persistIds();\n emitChange();\n },\n [failed]\n );\n\n const has = useCallback((productId: number) => storedIds.includes(productId), [storedIds]);\n\n const add = async (productId: number): Promise<boolean> =>\n !(((await addFn(productId)) as unknown) instanceof Error);\n\n const remove = async (productId: number): Promise<boolean> =>\n !(((await removeFn(productId)) as unknown) instanceof Error);\n\n const toggle = useCallback(\n (productId: number) => (has(productId) ? remove(productId) : add(productId)),\n [has, addFn, removeFn]\n );\n\n return {\n ids: storedIds,\n count: storedIds.length,\n has,\n add,\n remove,\n toggle,\n loading: addState.loading || removeState.loading,\n error: (addState.error ?? removeState.error)?.message ?? null,\n };\n}\n\nexport function resetWishlistStore() {\n ids = [];\n listeners.clear();\n subscribed = false;\n}\n"]}
1
+ {"version":3,"sources":["../src/hooks/useWishlist.ts"],"names":[],"mappings":"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","file":"chunk-3EBV4X6W.js","sourcesContent":["import { useCallback, useSyncExternalStore } from 'react';\nimport { useAsyncFn } from './useAsyncFn';\nimport { useTranslation } from '../providers/I18nProvider';\nimport { onSallaEvent, whenSallaLoaded } from '../utils/sdk-helpers';\nimport type { UseToggleWithItems } from './types';\n\nexport type UseWishlistResult = UseToggleWithItems<number>;\n\n/**\n * useWishlist - Hook for managing wishlist functionality\n *\n * Provides wishlist product management with local storage persistence\n * and Salla SDK integration. Syncs with the SDK's wishlist state and\n * listens for events to maintain real-time consistency.\n *\n * Uses a module-level singleton store so SDK event listeners are\n * registered ONCE globally — not per-component. All hook instances\n * share the same state via `useSyncExternalStore`.\n *\n * @returns Wishlist state and management functions\n *\n * @example\n * ```tsx\n * function WishlistButton({ productId }) {\n * const { has, toggle, loading } = useWishlist();\n *\n * return (\n * <button\n * onClick={() => toggle(productId)}\n * disabled={loading}\n * className={has(productId) ? 'liked' : ''}\n * >\n * ❤️\n * </button>\n * );\n * }\n * ```\n */\n\nconst WISHLIST_STORAGE_KEY = 'salla::wishlist';\n\nlet ids: number[] = [];\nconst listeners = new Set<() => void>();\nlet subscribed = false;\n\nfunction emitChange() {\n for (const listener of listeners) listener();\n}\n\nfunction subscribe(listener: () => void) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n}\n\nfunction getSnapshot(): number[] {\n return ids;\n}\n\nconst getServerSnapshot = (): number[] => [];\n\nfunction persistIds() {\n try {\n localStorage.setItem(WISHLIST_STORAGE_KEY, JSON.stringify(ids));\n } catch {\n /* ignore storage errors */\n }\n}\n\nfunction initFromStorage() {\n try {\n // `storage` is missing while `window.salla` is still the head script's stub.\n const sdkWishlist = window.salla?.storage?.get(WISHLIST_STORAGE_KEY, []);\n const stored = localStorage.getItem(WISHLIST_STORAGE_KEY);\n const parsed = stored ? JSON.parse(stored) : [];\n ids = Array.isArray(sdkWishlist) && sdkWishlist.length > 0 ? sdkWishlist : parsed;\n } catch {\n /* ignore storage errors */\n }\n}\n\nfunction reloadFromStorage() {\n initFromStorage();\n emitChange();\n}\n\nfunction ensureSubscribed() {\n if (subscribed || typeof window === 'undefined') return;\n subscribed = true;\n initFromStorage();\n\n // On a cold load hydration runs before the SDK has loaded.\n whenSallaLoaded((salla) => {\n reloadFromStorage();\n if (!salla.wishlist?.event) return;\n\n salla.wishlist.event.onAdded((_event: unknown, id: number) => {\n if (ids.includes(id)) return;\n ids = [...ids, id];\n persistIds();\n emitChange();\n });\n\n salla.wishlist.event.onRemoved((_response: unknown, id: number) => {\n ids = ids.filter((itemId) => itemId !== id);\n persistIds();\n emitChange();\n });\n });\n\n // The SDK fills its storage with the customer's saved wishlist after init.\n onSallaEvent('wishlist::storage.synced', reloadFromStorage);\n}\n\n/**\n * useAsyncFn resolves with whatever the SDK rejected with, and callers detect\n * failure via `instanceof Error`. Normalize non-Error rejections so they are\n * never mistaken for success.\n */\nfunction toError(reason: unknown, fallback: string): Error {\n if (reason instanceof Error) return reason;\n if (typeof reason === 'string') return new Error(reason);\n const message = (reason as { message?: unknown } | null)?.message;\n return new Error(typeof message === 'string' ? message : fallback);\n}\n\nexport function useWishlist(): UseWishlistResult {\n ensureSubscribed();\n const storedIds = useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n const { t } = useTranslation();\n const failed = t('common.errors.error_occurred', 'Something went wrong');\n\n const [addState, addFn] = useAsyncFn(\n async (productId: number) => {\n const salla = window.salla;\n try {\n await salla?.wishlist.add(productId);\n } catch (reason) {\n throw toError(reason, failed);\n }\n if (!ids.includes(productId)) {\n ids = [...ids, productId];\n persistIds();\n emitChange();\n }\n },\n [failed]\n );\n\n const [removeState, removeFn] = useAsyncFn(\n async (productId: number) => {\n const salla = window.salla;\n try {\n await salla?.wishlist.remove(productId);\n } catch (reason) {\n throw toError(reason, failed);\n }\n ids = ids.filter((id) => id !== productId);\n persistIds();\n emitChange();\n },\n [failed]\n );\n\n const has = useCallback((productId: number) => storedIds.includes(productId), [storedIds]);\n\n const add = async (productId: number): Promise<boolean> =>\n !(((await addFn(productId)) as unknown) instanceof Error);\n\n const remove = async (productId: number): Promise<boolean> =>\n !(((await removeFn(productId)) as unknown) instanceof Error);\n\n const toggle = useCallback(\n (productId: number) => (has(productId) ? remove(productId) : add(productId)),\n [has, addFn, removeFn]\n );\n\n return {\n ids: storedIds,\n count: storedIds.length,\n has,\n add,\n remove,\n toggle,\n loading: addState.loading || removeState.loading,\n error: (addState.error ?? removeState.error)?.message ?? null,\n };\n}\n\nexport function resetWishlistStore() {\n ids = [];\n listeners.clear();\n subscribed = false;\n}\n"]}
@@ -0,0 +1,108 @@
1
+ import { useTranslation } from './chunk-TYNZ5B2B.js';
2
+ import { getTwilightContext } from './chunk-HG4B4F4N.js';
3
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
4
+
5
+ var THUMB_URL = "https://cdn.assets.salla.network/prod/stores/images/construction-01.png";
6
+ var SOCIAL_ICONS = [
7
+ ["twitter", "sicon-x"],
8
+ ["snapchat", "sicon-snapchat"],
9
+ ["youtube", "sicon-youtube"],
10
+ ["tiktok", "sicon-tiktok"],
11
+ ["facebook", "sicon-facebook"],
12
+ ["instagram", "sicon-instagram"]
13
+ ];
14
+ var STYLE = `
15
+ .s-maintenance{display:flex;flex-direction:column;align-items:center;justify-content:center;width:100%;min-height:100vh;color:#a3a3a3;background:#fff;filter:grayscale(100%);box-sizing:border-box}
16
+ .s-maintenance *{box-sizing:border-box}
17
+ .s-maintenance .mt-container{width:100%;max-width:1200px;padding:0 15px}
18
+ .s-maintenance .mt-panel{display:flex;flex-direction:row;align-items:center;justify-content:space-between;width:100%}
19
+ .s-maintenance .mt-message{width:100%;padding-inline-start:80px;animation:revealMtBlock 1.5s forwards}
20
+ .s-maintenance .mt-title{display:flex;align-items:center;margin:0 0 20px}
21
+ .s-maintenance .mt-logo{display:block;flex-shrink:0;width:80px;height:80px;margin-inline-end:20px;border-radius:50%;overflow:hidden;box-shadow:0 0 5px rgb(0 0 0 / 10%)}
22
+ .s-maintenance .mt-logo img{display:block;width:100%;height:100%;object-fit:cover}
23
+ .s-maintenance .mt-title h1{font-size:2.25rem;line-height:1;margin:0;color:#666}
24
+ .s-maintenance .mt-content p{margin:0;white-space:pre-line}
25
+ .s-maintenance .mt-contact-list{display:inline-block;list-style:none;width:100%;max-width:500px;margin:20px 0 0;padding:20px 0 0;border-top:1px solid #eee}
26
+ .s-maintenance .mt-contact-list li{display:inline-block;margin-inline-end:10px}
27
+ .s-maintenance .mt-contact-list a{display:inline-flex;align-items:center;padding:5px;color:rgb(102 102 102 / 80%);text-decoration:none;font-size:1.25rem}
28
+ .s-maintenance .mt-contact-list a:hover{color:#666}
29
+ .s-maintenance .mt-contact--btn{padding:3px 20px 5px;border-radius:20px;color:#fff!important;background:rgb(102 102 102 / 80%);font-size:1rem!important}
30
+ .s-maintenance .mt-contact--btn:hover{background:#666}
31
+ .s-maintenance .mt-contact--btn i{margin-inline-end:10px}
32
+ .s-maintenance .thumb{width:100%;animation:revealMtBlock 1.5s .1s forwards;opacity:0}
33
+ .s-maintenance .thumb img{display:block;width:100%;max-width:450px;margin:0 auto}
34
+ @media (max-width:1024px){
35
+ .s-maintenance{padding:40px 0 10px}
36
+ .s-maintenance .mt-panel{flex-direction:column}
37
+ .s-maintenance .mt-message{order:2;text-align:center;padding:0;margin:50px 0 0}
38
+ .s-maintenance .mt-title{flex-direction:column;margin-bottom:30px}
39
+ .s-maintenance .mt-logo{margin:0 0 10px}
40
+ .s-maintenance .mt-title h1{font-size:1.5rem}
41
+ }
42
+ @media (max-width:640px){.s-maintenance .thumb img{width:80%}}
43
+ @keyframes revealMtBlock{from{opacity:0;transform:translateY(50%)}to{opacity:1;transform:translateY(0)}}
44
+ `;
45
+ function Contacts({ store, arabic }) {
46
+ const { t } = useTranslation();
47
+ const mobile = store?.contacts?.mobile;
48
+ const socials = SOCIAL_ICONS.flatMap(([key, icon]) => {
49
+ const href = store?.social?.[key];
50
+ return href ? [{ key, icon, href }] : [];
51
+ });
52
+ if (!mobile && socials.length === 0) return null;
53
+ return /* @__PURE__ */ jsxs("ul", { className: "mt-contact-list", children: [
54
+ mobile && /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs("a", { href: `tel:${mobile}`, className: "mt-contact--btn", children: [
55
+ /* @__PURE__ */ jsx("i", { className: "sicon-phone", "aria-hidden": "true" }),
56
+ t("common.elements.contact_us", {
57
+ defaultValue: arabic ? "\u062A\u0648\u0627\u0635\u0644 \u0645\u0639\u0646\u0627" : "Contact us"
58
+ })
59
+ ] }) }),
60
+ socials.map(({ key, icon, href }) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx("a", { href, target: "_blank", rel: "noreferrer", "aria-label": key, children: /* @__PURE__ */ jsx("i", { className: icon, "aria-hidden": "true" }) }) }, key))
61
+ ] });
62
+ }
63
+ function MaintenancePage() {
64
+ const { settings, locale } = getTwilightContext();
65
+ const { t } = useTranslation();
66
+ const store = settings.store;
67
+ const details = settings.maintenance_details;
68
+ const arabic = locale.startsWith("ar");
69
+ const title = details?.title || t("pages.maintenance.title", {
70
+ defaultValue: arabic ? "\u0627\u0644\u0645\u062A\u062C\u0631 \u0642\u064A\u062F \u0627\u0644\u0635\u064A\u0627\u0646\u0629" : "Store under maintenance"
71
+ });
72
+ return /* @__PURE__ */ jsxs("div", { className: "s-maintenance", "data-testid": "store-maintenance-page", children: [
73
+ /* @__PURE__ */ jsx("style", { children: STYLE }),
74
+ /* @__PURE__ */ jsx("div", { className: "mt-container", children: /* @__PURE__ */ jsxs("section", { className: "mt-panel", children: [
75
+ /* @__PURE__ */ jsxs("div", { className: "mt-message", children: [
76
+ /* @__PURE__ */ jsxs("div", { className: "mt-title", children: [
77
+ store?.logo && /* @__PURE__ */ jsx("span", { className: "mt-logo", children: /* @__PURE__ */ jsx(
78
+ "img",
79
+ {
80
+ src: store.logo,
81
+ alt: store.name || t("common.elements.store_logo", {
82
+ defaultValue: arabic ? "\u0634\u0639\u0627\u0631 \u0627\u0644\u0645\u062A\u062C\u0631" : "Store logo"
83
+ })
84
+ }
85
+ ) }),
86
+ /* @__PURE__ */ jsx("h1", { children: title })
87
+ ] }),
88
+ /* @__PURE__ */ jsx("div", { className: "mt-content", children: details?.message ? (
89
+ // The merchant's own wording: a plain string the dashboard caps at 200 characters.
90
+ /* @__PURE__ */ jsx("p", { children: details.message })
91
+ ) : /* @__PURE__ */ jsxs(Fragment, { children: [
92
+ /* @__PURE__ */ jsx("p", { children: t("pages.maintenance.message", {
93
+ defaultValue: arabic ? "\u0639\u0630\u0631\u0627 \u0639\u0632\u064A\u0632\u064A \u0627\u0644\u0639\u0645\u064A\u0644\u060C \u0627\u0644\u0645\u062A\u062C\u0631 \u062D\u0627\u0644\u064A\u0627 \u0642\u064A\u062F \u0627\u0644\u0635\u064A\u0627\u0646\u0629 \u0648 \u0633\u0646\u0639\u0627\u0648\u062F \u0627\u0644\u0639\u0645\u0644 \u062E\u0644\u0627\u0644 \u0641\u062A\u0631\u0629 \u0648\u062C\u064A\u0632\u0629" : "Sorry, the store is under maintenance and will be back shortly."
94
+ }) }),
95
+ /* @__PURE__ */ jsx("p", { children: t("pages.maintenance.thanks", {
96
+ defaultValue: arabic ? "\u0634\u0643\u0631\u0627 \u0644\u062A\u0641\u0647\u0645\u0643\u0645" : "Thank you for your understanding."
97
+ }) })
98
+ ] }) }),
99
+ /* @__PURE__ */ jsx(Contacts, { store, arabic })
100
+ ] }),
101
+ /* @__PURE__ */ jsx("div", { className: "thumb", children: /* @__PURE__ */ jsx("img", { src: THUMB_URL, alt: "" }) })
102
+ ] }) })
103
+ ] });
104
+ }
105
+
106
+ export { MaintenancePage };
107
+ //# sourceMappingURL=chunk-3PSJH6Q4.js.map
108
+ //# sourceMappingURL=chunk-3PSJH6Q4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/store/MaintenancePage.tsx"],"names":[],"mappings":"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","file":"chunk-3PSJH6Q4.js","sourcesContent":["import { getTwilightContext } from '../../twilight/context';\nimport { useTranslation } from '../../providers/I18nProvider';\nimport type { Store, StoreSocial } from '../../types';\n\nconst THUMB_URL = 'https://cdn.assets.salla.network/prod/stores/images/construction-01.png';\n\n/** Social networks the page links to, in the old page's order, with their Salla icon class. */\nconst SOCIAL_ICONS: [keyof StoreSocial, string][] = [\n ['twitter', 'sicon-x'],\n ['snapchat', 'sicon-snapchat'],\n ['youtube', 'sicon-youtube'],\n ['tiktok', 'sicon-tiktok'],\n ['facebook', 'sicon-facebook'],\n ['instagram', 'sicon-instagram'],\n];\n\n// The platform's maintenance page (Store `pages/maintenance.blade.php` + `_maintenance.scss`),\n// trimmed to what it renders: greyscale, logo + title beside the message, contacts under a\n// rule, the illustration alongside; stacked and centred under 1024px.\nconst STYLE = `\n.s-maintenance{display:flex;flex-direction:column;align-items:center;justify-content:center;width:100%;min-height:100vh;color:#a3a3a3;background:#fff;filter:grayscale(100%);box-sizing:border-box}\n.s-maintenance *{box-sizing:border-box}\n.s-maintenance .mt-container{width:100%;max-width:1200px;padding:0 15px}\n.s-maintenance .mt-panel{display:flex;flex-direction:row;align-items:center;justify-content:space-between;width:100%}\n.s-maintenance .mt-message{width:100%;padding-inline-start:80px;animation:revealMtBlock 1.5s forwards}\n.s-maintenance .mt-title{display:flex;align-items:center;margin:0 0 20px}\n.s-maintenance .mt-logo{display:block;flex-shrink:0;width:80px;height:80px;margin-inline-end:20px;border-radius:50%;overflow:hidden;box-shadow:0 0 5px rgb(0 0 0 / 10%)}\n.s-maintenance .mt-logo img{display:block;width:100%;height:100%;object-fit:cover}\n.s-maintenance .mt-title h1{font-size:2.25rem;line-height:1;margin:0;color:#666}\n.s-maintenance .mt-content p{margin:0;white-space:pre-line}\n.s-maintenance .mt-contact-list{display:inline-block;list-style:none;width:100%;max-width:500px;margin:20px 0 0;padding:20px 0 0;border-top:1px solid #eee}\n.s-maintenance .mt-contact-list li{display:inline-block;margin-inline-end:10px}\n.s-maintenance .mt-contact-list a{display:inline-flex;align-items:center;padding:5px;color:rgb(102 102 102 / 80%);text-decoration:none;font-size:1.25rem}\n.s-maintenance .mt-contact-list a:hover{color:#666}\n.s-maintenance .mt-contact--btn{padding:3px 20px 5px;border-radius:20px;color:#fff!important;background:rgb(102 102 102 / 80%);font-size:1rem!important}\n.s-maintenance .mt-contact--btn:hover{background:#666}\n.s-maintenance .mt-contact--btn i{margin-inline-end:10px}\n.s-maintenance .thumb{width:100%;animation:revealMtBlock 1.5s .1s forwards;opacity:0}\n.s-maintenance .thumb img{display:block;width:100%;max-width:450px;margin:0 auto}\n@media (max-width:1024px){\n.s-maintenance{padding:40px 0 10px}\n.s-maintenance .mt-panel{flex-direction:column}\n.s-maintenance .mt-message{order:2;text-align:center;padding:0;margin:50px 0 0}\n.s-maintenance .mt-title{flex-direction:column;margin-bottom:30px}\n.s-maintenance .mt-logo{margin:0 0 10px}\n.s-maintenance .mt-title h1{font-size:1.5rem}\n}\n@media (max-width:640px){.s-maintenance .thumb img{width:80%}}\n@keyframes revealMtBlock{from{opacity:0;transform:translateY(50%)}to{opacity:1;transform:translateY(0)}}\n`;\n\n/** The phone button and social links under the message; nothing when the store lists none. */\nfunction Contacts({ store, arabic }: { store: Store | undefined; arabic: boolean }) {\n const { t } = useTranslation();\n const mobile = store?.contacts?.mobile;\n const socials = SOCIAL_ICONS.flatMap(([key, icon]) => {\n const href = store?.social?.[key];\n return href ? [{ key, icon, href }] : [];\n });\n if (!mobile && socials.length === 0) return null;\n\n return (\n <ul className=\"mt-contact-list\">\n {mobile && (\n <li>\n <a href={`tel:${mobile}`} className=\"mt-contact--btn\">\n <i className=\"sicon-phone\" aria-hidden=\"true\" />\n {t('common.elements.contact_us', {\n defaultValue: arabic ? 'تواصل معنا' : 'Contact us',\n })}\n </a>\n </li>\n )}\n {socials.map(({ key, icon, href }) => (\n <li key={key}>\n <a href={href} target=\"_blank\" rel=\"noreferrer\" aria-label={key}>\n <i className={icon} aria-hidden=\"true\" />\n </a>\n </li>\n ))}\n </ul>\n );\n}\n\n/**\n * The page a customer sees while the store is closed: the platform's maintenance page,\n * fed by the settings' `maintenance_details` (the merchant's title and message) and the\n * store's contacts. Rendered by `TwilightProvider` in place of the layout; see\n * `rootBeforeLoad` for who sees it.\n */\nexport function MaintenancePage() {\n const { settings, locale } = getTwilightContext();\n const { t } = useTranslation();\n const store = settings.store;\n const details = settings.maintenance_details;\n const arabic = locale.startsWith('ar');\n\n const title =\n details?.title ||\n t('pages.maintenance.title', {\n defaultValue: arabic ? 'المتجر قيد الصيانة' : 'Store under maintenance',\n });\n\n return (\n <div className=\"s-maintenance\" data-testid=\"store-maintenance-page\">\n <style>{STYLE}</style>\n <div className=\"mt-container\">\n <section className=\"mt-panel\">\n <div className=\"mt-message\">\n <div className=\"mt-title\">\n {store?.logo && (\n <span className=\"mt-logo\">\n <img\n src={store.logo}\n alt={\n store.name ||\n t('common.elements.store_logo', {\n defaultValue: arabic ? 'شعار المتجر' : 'Store logo',\n })\n }\n />\n </span>\n )}\n <h1>{title}</h1>\n </div>\n <div className=\"mt-content\">\n {details?.message ? (\n // The merchant's own wording: a plain string the dashboard caps at 200 characters.\n <p>{details.message}</p>\n ) : (\n <>\n <p>\n {t('pages.maintenance.message', {\n defaultValue: arabic\n ? 'عذرا عزيزي العميل، المتجر حاليا قيد الصيانة و سنعاود العمل خلال فترة وجيزة'\n : 'Sorry, the store is under maintenance and will be back shortly.',\n })}\n </p>\n <p>\n {t('pages.maintenance.thanks', {\n defaultValue: arabic ? 'شكرا لتفهمكم' : 'Thank you for your understanding.',\n })}\n </p>\n </>\n )}\n </div>\n <Contacts store={store} arabic={arabic} />\n </div>\n <div className=\"thumb\">\n <img src={THUMB_URL} alt=\"\" />\n </div>\n </section>\n </div>\n </div>\n );\n}\n"]}