@salla.sa/twilight-theme-engine 1.0.106 → 1.0.108

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 (267) hide show
  1. package/dist/{AddToCartForm-DQ3VNTFE.js → AddToCartForm-CF4H32X7.js} +3 -3
  2. package/dist/{AddToCartForm-DQ3VNTFE.js.map → AddToCartForm-CF4H32X7.js.map} +1 -1
  3. package/dist/{BlogAuthorPage-DSFZ6OLA.js → BlogAuthorPage-LHYDUFDA.js} +27 -27
  4. package/dist/{BlogAuthorPage-DSFZ6OLA.js.map → BlogAuthorPage-LHYDUFDA.js.map} +1 -1
  5. package/dist/{BlogCategoryPage-AD5LV4R3.js → BlogCategoryPage-6BORI4YG.js} +27 -27
  6. package/dist/{BlogCategoryPage-AD5LV4R3.js.map → BlogCategoryPage-6BORI4YG.js.map} +1 -1
  7. package/dist/{BlogPage-GXGSY6ET.js → BlogPage-TSRWNX6M.js} +25 -25
  8. package/dist/{BlogPage-GXGSY6ET.js.map → BlogPage-TSRWNX6M.js.map} +1 -1
  9. package/dist/{BlogSinglePage-KHF37HSX.js → BlogSinglePage-TLTW67S7.js} +25 -25
  10. package/dist/{BlogSinglePage-KHF37HSX.js.map → BlogSinglePage-TLTW67S7.js.map} +1 -1
  11. package/dist/{BlogTagPage-OSWZDEND.js → BlogTagPage-RAMP5XNR.js} +27 -27
  12. package/dist/{BlogTagPage-OSWZDEND.js.map → BlogTagPage-RAMP5XNR.js.map} +1 -1
  13. package/dist/{BrandsPage-T2AVCDET.js → BrandsPage-KUFEUFVZ.js} +26 -26
  14. package/dist/{BrandsPage-T2AVCDET.js.map → BrandsPage-KUFEUFVZ.js.map} +1 -1
  15. package/dist/{Breadcrumb-6CMWBRFH.js → Breadcrumb-ZS3ZMMTM.js} +25 -25
  16. package/dist/{Breadcrumb-6CMWBRFH.js.map → Breadcrumb-ZS3ZMMTM.js.map} +1 -1
  17. package/dist/{CartItem-SVR5WS4N.js → CartItem-7QCAQ3QQ.js} +25 -25
  18. package/dist/{CartItem-SVR5WS4N.js.map → CartItem-7QCAQ3QQ.js.map} +1 -1
  19. package/dist/{CartSummary-RCX2NAF5.js → CartSummary-ZPG7IAXE.js} +25 -25
  20. package/dist/{CartSummary-RCX2NAF5.js.map → CartSummary-ZPG7IAXE.js.map} +1 -1
  21. package/dist/{Copyright-N2V5LBLG.js → Copyright-VPJMIQSO.js} +3 -3
  22. package/dist/{Copyright-N2V5LBLG.js.map → Copyright-VPJMIQSO.js.map} +1 -1
  23. package/dist/{CustomerLayout-WHXOXK46.js → CustomerLayout-E5FYPKT4.js} +25 -25
  24. package/dist/{CustomerLayout-WHXOXK46.js.map → CustomerLayout-E5FYPKT4.js.map} +1 -1
  25. package/dist/{Footer-WWPE5TZT.js → Footer-GIPFBQEY.js} +4 -4
  26. package/dist/{Footer-WWPE5TZT.js.map → Footer-GIPFBQEY.js.map} +1 -1
  27. package/dist/Header-HYTNO4IR.js +22 -0
  28. package/dist/{Header-NXUFMN3V.js.map → Header-HYTNO4IR.js.map} +1 -1
  29. package/dist/{LoyaltyPage-DORPKRUO.js → LoyaltyPage-YMK7SISF.js} +25 -25
  30. package/dist/{LoyaltyPage-DORPKRUO.js.map → LoyaltyPage-YMK7SISF.js.map} +1 -1
  31. package/dist/{LoyaltyPointsPage-QFK6SI23.js → LoyaltyPointsPage-V2463UQ6.js} +9 -9
  32. package/dist/{LoyaltyPointsPage-QFK6SI23.js.map → LoyaltyPointsPage-V2463UQ6.js.map} +1 -1
  33. package/dist/{MainMenu-VV7XR3W3.js → MainMenu-IP6AVEIF.js} +8 -8
  34. package/dist/{MainMenu-VV7XR3W3.js.map → MainMenu-IP6AVEIF.js.map} +1 -1
  35. package/dist/MaintenancePage-Z34IQCUV.js +7 -0
  36. package/dist/{MaintenancePage-IKWAGFKU.js.map → MaintenancePage-Z34IQCUV.js.map} +1 -1
  37. package/dist/{MasterLayout-BCIRVCX5.js → MasterLayout-3YSR4VFQ.js} +25 -25
  38. package/dist/{MasterLayout-BCIRVCX5.js.map → MasterLayout-3YSR4VFQ.js.map} +1 -1
  39. package/dist/{MobileMenu-PYCT6V4P.js → MobileMenu-ZJLXCG4P.js} +26 -26
  40. package/dist/{MobileMenu-PYCT6V4P.js.map → MobileMenu-ZJLXCG4P.js.map} +1 -1
  41. package/dist/{NotificationsPage-6WNYAZOR.js → NotificationsPage-XKSW3DFD.js} +25 -25
  42. package/dist/{NotificationsPage-6WNYAZOR.js.map → NotificationsPage-XKSW3DFD.js.map} +1 -1
  43. package/dist/{OrderSinglePage-YV3LBB7I.js → OrderSinglePage-WSUNHCY6.js} +26 -26
  44. package/dist/{OrderSinglePage-YV3LBB7I.js.map → OrderSinglePage-WSUNHCY6.js.map} +1 -1
  45. package/dist/{OrdersPage-PPTYNBK2.js → OrdersPage-TAME5ACG.js} +25 -25
  46. package/dist/{OrdersPage-PPTYNBK2.js.map → OrdersPage-TAME5ACG.js.map} +1 -1
  47. package/dist/{PageSingle-JBRR5X3B.js → PageSingle-MYDLIP55.js} +7 -7
  48. package/dist/{PageSingle-JBRR5X3B.js.map → PageSingle-MYDLIP55.js.map} +1 -1
  49. package/dist/{ProductDetails-EGIMNYEY.js → ProductDetails-MFAKRQ72.js} +8 -8
  50. package/dist/{ProductDetails-EGIMNYEY.js.map → ProductDetails-MFAKRQ72.js.map} +1 -1
  51. package/dist/{ProfilePage-4NDLJCST.js → ProfilePage-4W7DBXLW.js} +25 -25
  52. package/dist/{ProfilePage-4NDLJCST.js.map → ProfilePage-4W7DBXLW.js.map} +1 -1
  53. package/dist/{ReviewsPage-IB3HTSSY.js → ReviewsPage-G3IEPOOO.js} +3 -3
  54. package/dist/{ReviewsPage-IB3HTSSY.js.map → ReviewsPage-G3IEPOOO.js.map} +1 -1
  55. package/dist/{SeoCartWidget-TZQUVTS7.js → SeoCartWidget-7UDOVSWP.js} +25 -25
  56. package/dist/{SeoCartWidget-TZQUVTS7.js.map → SeoCartWidget-7UDOVSWP.js.map} +1 -1
  57. package/dist/{SettingsPage-ZSN2P2XD.js → SettingsPage-TEMXC3OF.js} +25 -25
  58. package/dist/{SettingsPage-ZSN2P2XD.js.map → SettingsPage-TEMXC3OF.js.map} +1 -1
  59. package/dist/StoreClosedNotification-YMPBP56U.js +54 -0
  60. package/dist/{StoreClosedNotification-WJGHUXGJ.js.map → StoreClosedNotification-YMPBP56U.js.map} +1 -1
  61. package/dist/{TestimonialsPage-AF7EIJMK.js → TestimonialsPage-G2S3JQNT.js} +7 -7
  62. package/dist/{TestimonialsPage-AF7EIJMK.js.map → TestimonialsPage-G2S3JQNT.js.map} +1 -1
  63. package/dist/{ThankYouPage-NPUUJ4M6.js → ThankYouPage-HPF3PIAT.js} +25 -25
  64. package/dist/{ThankYouPage-NPUUJ4M6.js.map → ThankYouPage-HPF3PIAT.js.map} +1 -1
  65. package/dist/{WalletPage-5T7UBXH4.js → WalletPage-G7FOMHFX.js} +26 -26
  66. package/dist/{WalletPage-5T7UBXH4.js.map → WalletPage-G7FOMHFX.js.map} +1 -1
  67. package/dist/{WishlistPage-IYKIDZT2.js → WishlistPage-VULTU6K2.js} +27 -27
  68. package/dist/{WishlistPage-IYKIDZT2.js.map → WishlistPage-VULTU6K2.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.map +1 -1
  85. package/dist/api/store.js +5 -5
  86. package/dist/api/translations.js +5 -5
  87. package/dist/api/user.js +5 -5
  88. package/dist/api/wallet.js +5 -5
  89. package/dist/api/wishlist.js +8 -8
  90. package/dist/{chunk-C5MQ6VWX.js → chunk-24UCMWQB.js} +3 -3
  91. package/dist/{chunk-C5MQ6VWX.js.map → chunk-24UCMWQB.js.map} +1 -1
  92. package/dist/{chunk-MSNU4NYS.js → chunk-2CL6AEO4.js} +3 -3
  93. package/dist/{chunk-MSNU4NYS.js.map → chunk-2CL6AEO4.js.map} +1 -1
  94. package/dist/{chunk-HGKAIIAJ.js → chunk-2IW3JRWL.js} +4 -4
  95. package/dist/{chunk-HGKAIIAJ.js.map → chunk-2IW3JRWL.js.map} +1 -1
  96. package/dist/{chunk-UAKYRNUV.js → chunk-3DVAXIY3.js} +4 -4
  97. package/dist/{chunk-UAKYRNUV.js.map → chunk-3DVAXIY3.js.map} +1 -1
  98. package/dist/{chunk-OWJMPD7X.js → chunk-3NFVZJNI.js} +3 -3
  99. package/dist/{chunk-OWJMPD7X.js.map → chunk-3NFVZJNI.js.map} +1 -1
  100. package/dist/chunk-47C3MTZI.js +14 -0
  101. package/dist/{chunk-JJIXGYVN.js.map → chunk-47C3MTZI.js.map} +1 -1
  102. package/dist/{chunk-YSRKR5DE.js → chunk-4PT5MXGR.js} +4 -4
  103. package/dist/{chunk-YSRKR5DE.js.map → chunk-4PT5MXGR.js.map} +1 -1
  104. package/dist/{chunk-TYLJMWSI.js → chunk-5L37UNQQ.js} +6 -6
  105. package/dist/{chunk-TYLJMWSI.js.map → chunk-5L37UNQQ.js.map} +1 -1
  106. package/dist/{chunk-EL2IPQLA.js → chunk-5N74JJ2Z.js} +15 -15
  107. package/dist/{chunk-EL2IPQLA.js.map → chunk-5N74JJ2Z.js.map} +1 -1
  108. package/dist/{chunk-ZTH65CJY.js → chunk-6UG4IVUF.js} +23 -23
  109. package/dist/{chunk-ZTH65CJY.js.map → chunk-6UG4IVUF.js.map} +1 -1
  110. package/dist/{chunk-QUBQPGT7.js → chunk-A4NN6C5B.js} +14 -4
  111. package/dist/chunk-A4NN6C5B.js.map +1 -0
  112. package/dist/{chunk-YD4TVUA4.js → chunk-B2OJZKU4.js} +8 -8
  113. package/dist/{chunk-YD4TVUA4.js.map → chunk-B2OJZKU4.js.map} +1 -1
  114. package/dist/{chunk-4O52OV5N.js → chunk-BEMWHR4T.js} +3 -3
  115. package/dist/{chunk-4O52OV5N.js.map → chunk-BEMWHR4T.js.map} +1 -1
  116. package/dist/{chunk-STKR2KHL.js → chunk-BQ2MNEN7.js} +3 -3
  117. package/dist/{chunk-STKR2KHL.js.map → chunk-BQ2MNEN7.js.map} +1 -1
  118. package/dist/{chunk-LPAWMUJR.js → chunk-BR56OEPZ.js} +4 -4
  119. package/dist/{chunk-LPAWMUJR.js.map → chunk-BR56OEPZ.js.map} +1 -1
  120. package/dist/{chunk-5DWTU5KS.js → chunk-D42M66E4.js} +46 -7
  121. package/dist/chunk-D42M66E4.js.map +1 -0
  122. package/dist/{chunk-U3UY2BDN.js → chunk-D7XWUD6T.js} +4 -4
  123. package/dist/{chunk-U3UY2BDN.js.map → chunk-D7XWUD6T.js.map} +1 -1
  124. package/dist/{chunk-S6SP272Z.js → chunk-EHX45KZG.js} +3 -3
  125. package/dist/{chunk-S6SP272Z.js.map → chunk-EHX45KZG.js.map} +1 -1
  126. package/dist/{chunk-ZE262XHY.js → chunk-ENC6POPF.js} +4 -4
  127. package/dist/{chunk-ZE262XHY.js.map → chunk-ENC6POPF.js.map} +1 -1
  128. package/dist/{chunk-HGY7P2Y3.js → chunk-F6XPGONG.js} +5 -5
  129. package/dist/{chunk-HGY7P2Y3.js.map → chunk-F6XPGONG.js.map} +1 -1
  130. package/dist/{chunk-4H7HB3HQ.js → chunk-FQLF555I.js} +4 -4
  131. package/dist/{chunk-4H7HB3HQ.js.map → chunk-FQLF555I.js.map} +1 -1
  132. package/dist/{chunk-W2FFROOO.js → chunk-GFUXGVER.js} +3 -3
  133. package/dist/{chunk-W2FFROOO.js.map → chunk-GFUXGVER.js.map} +1 -1
  134. package/dist/{chunk-6W4J6ZDX.js → chunk-GKKHNGLI.js} +8 -8
  135. package/dist/{chunk-6W4J6ZDX.js.map → chunk-GKKHNGLI.js.map} +1 -1
  136. package/dist/{chunk-SU7NHAYA.js → chunk-GXZW6BJY.js} +3 -3
  137. package/dist/{chunk-SU7NHAYA.js.map → chunk-GXZW6BJY.js.map} +1 -1
  138. package/dist/{chunk-3EBV4X6W.js → chunk-HNSR4KLL.js} +3 -3
  139. package/dist/{chunk-3EBV4X6W.js.map → chunk-HNSR4KLL.js.map} +1 -1
  140. package/dist/{chunk-HG4B4F4N.js → chunk-JNAJTCJD.js} +8 -2
  141. package/dist/chunk-JNAJTCJD.js.map +1 -0
  142. package/dist/{chunk-VEA7QDNY.js → chunk-KSS7OA3Q.js} +3 -3
  143. package/dist/{chunk-VEA7QDNY.js.map → chunk-KSS7OA3Q.js.map} +1 -1
  144. package/dist/{chunk-QXX54X55.js → chunk-L4JI2AAL.js} +4 -4
  145. package/dist/{chunk-QXX54X55.js.map → chunk-L4JI2AAL.js.map} +1 -1
  146. package/dist/{chunk-XD33WKKI.js → chunk-LUFLN7WL.js} +7 -7
  147. package/dist/{chunk-XD33WKKI.js.map → chunk-LUFLN7WL.js.map} +1 -1
  148. package/dist/{chunk-RSWRKU4X.js → chunk-OHUTM224.js} +4 -4
  149. package/dist/{chunk-RSWRKU4X.js.map → chunk-OHUTM224.js.map} +1 -1
  150. package/dist/{chunk-76GCBYJX.js → chunk-OSSOU36J.js} +3 -3
  151. package/dist/{chunk-76GCBYJX.js.map → chunk-OSSOU36J.js.map} +1 -1
  152. package/dist/{chunk-U5TBXUQT.js → chunk-PTQVBPPN.js} +3 -3
  153. package/dist/{chunk-U5TBXUQT.js.map → chunk-PTQVBPPN.js.map} +1 -1
  154. package/dist/{chunk-5L6IBYWZ.js → chunk-QA4FBMFJ.js} +4 -4
  155. package/dist/{chunk-5L6IBYWZ.js.map → chunk-QA4FBMFJ.js.map} +1 -1
  156. package/dist/{chunk-2IS4QU3P.js → chunk-RA6ZTHN6.js} +4 -4
  157. package/dist/{chunk-2IS4QU3P.js.map → chunk-RA6ZTHN6.js.map} +1 -1
  158. package/dist/{chunk-25SLMOCZ.js → chunk-RBFLDI2Z.js} +4 -4
  159. package/dist/{chunk-25SLMOCZ.js.map → chunk-RBFLDI2Z.js.map} +1 -1
  160. package/dist/{chunk-BHV2RZWY.js → chunk-S5EVFWAL.js} +23 -13
  161. package/dist/chunk-S5EVFWAL.js.map +1 -0
  162. package/dist/{chunk-CTV5GA2U.js → chunk-SCRNQWZT.js} +4 -4
  163. package/dist/{chunk-CTV5GA2U.js.map → chunk-SCRNQWZT.js.map} +1 -1
  164. package/dist/{chunk-VJQ7SM4O.js → chunk-SQXUWX4B.js} +5 -5
  165. package/dist/{chunk-VJQ7SM4O.js.map → chunk-SQXUWX4B.js.map} +1 -1
  166. package/dist/{chunk-WLGTF3V4.js → chunk-T4BRWJSI.js} +7 -7
  167. package/dist/{chunk-WLGTF3V4.js.map → chunk-T4BRWJSI.js.map} +1 -1
  168. package/dist/{chunk-PSBXF3O5.js → chunk-T5VU67NQ.js} +4 -4
  169. package/dist/{chunk-PSBXF3O5.js.map → chunk-T5VU67NQ.js.map} +1 -1
  170. package/dist/{chunk-42YMCOK4.js → chunk-TWUOIBO7.js} +3 -3
  171. package/dist/{chunk-42YMCOK4.js.map → chunk-TWUOIBO7.js.map} +1 -1
  172. package/dist/{chunk-FQHNVD3H.js → chunk-U6KJ7XBO.js} +3 -3
  173. package/dist/{chunk-FQHNVD3H.js.map → chunk-U6KJ7XBO.js.map} +1 -1
  174. package/dist/{chunk-SDEBSX6Z.js → chunk-UKLYL5LM.js} +4 -4
  175. package/dist/{chunk-SDEBSX6Z.js.map → chunk-UKLYL5LM.js.map} +1 -1
  176. package/dist/{chunk-V7QFIGQ4.js → chunk-UWDUMPL7.js} +6 -6
  177. package/dist/{chunk-V7QFIGQ4.js.map → chunk-UWDUMPL7.js.map} +1 -1
  178. package/dist/{chunk-TWD4ECS3.js → chunk-UZGP2KFA.js} +3 -3
  179. package/dist/{chunk-TWD4ECS3.js.map → chunk-UZGP2KFA.js.map} +1 -1
  180. package/dist/{chunk-UWDS42UX.js → chunk-VUWBGAET.js} +4 -4
  181. package/dist/{chunk-UWDS42UX.js.map → chunk-VUWBGAET.js.map} +1 -1
  182. package/dist/{chunk-D2VMJV3L.js → chunk-W354TTIE.js} +6 -6
  183. package/dist/{chunk-D2VMJV3L.js.map → chunk-W354TTIE.js.map} +1 -1
  184. package/dist/{chunk-RCRE66QK.js → chunk-XL42DUCQ.js} +3 -3
  185. package/dist/{chunk-RCRE66QK.js.map → chunk-XL42DUCQ.js.map} +1 -1
  186. package/dist/{chunk-LBBPJM4K.js → chunk-Y464WYUT.js} +5 -5
  187. package/dist/{chunk-LBBPJM4K.js.map → chunk-Y464WYUT.js.map} +1 -1
  188. package/dist/{chunk-KTLQV4Q4.js → chunk-YDSWLCOY.js} +5 -5
  189. package/dist/{chunk-KTLQV4Q4.js.map → chunk-YDSWLCOY.js.map} +1 -1
  190. package/dist/{chunk-5Q3SDXVC.js → chunk-ZLLHL3NI.js} +7 -7
  191. package/dist/{chunk-5Q3SDXVC.js.map → chunk-ZLLHL3NI.js.map} +1 -1
  192. package/dist/{chunk-DMMGD4GW.js → chunk-ZVYJK6XQ.js} +5 -5
  193. package/dist/{chunk-DMMGD4GW.js.map → chunk-ZVYJK6XQ.js.map} +1 -1
  194. package/dist/components/cart/index.js +1 -1
  195. package/dist/components/common/index.js +1 -1
  196. package/dist/components/drawer/index.js +23 -23
  197. package/dist/components/home/FeaturedProductsStyle2.d.ts.map +1 -1
  198. package/dist/components/home/FixedProducts.d.ts.map +1 -1
  199. package/dist/components/home/index.js +27 -27
  200. package/dist/components/layout/index.js +7 -7
  201. package/dist/components/product/index.js +24 -24
  202. package/dist/components/store/index.js +25 -25
  203. package/dist/components/toast/index.js +5 -5
  204. package/dist/dev/editor/index.js +3 -3
  205. package/dist/dev/index.js +3 -3
  206. package/dist/document-class-B2MXKYAQ.js +29 -0
  207. package/dist/{document-class-JTMWALK3.js.map → document-class-B2MXKYAQ.js.map} +1 -1
  208. package/dist/hooks/index.js +23 -23
  209. package/dist/hooks/useComments.js +4 -4
  210. package/dist/hooks/useGtm.js +23 -23
  211. package/dist/hooks/useMoney.js +23 -23
  212. package/dist/hooks/useProduct.js +4 -4
  213. package/dist/hooks/useStore.js +23 -23
  214. package/dist/hooks/useUser.js +6 -6
  215. package/dist/hooks/useWishlist.js +4 -4
  216. package/dist/index.js +23 -23
  217. package/dist/native-app/index.d.ts +8 -0
  218. package/dist/native-app/index.d.ts.map +1 -1
  219. package/dist/native-app/index.js +4 -4
  220. package/dist/{navigation-6MDIVFMB.js → navigation-LSRNHKGJ.js} +8 -8
  221. package/dist/{navigation-6MDIVFMB.js.map → navigation-LSRNHKGJ.js.map} +1 -1
  222. package/dist/navigation-WASYQTFC.js +14 -0
  223. package/dist/{navigation-P3RDLBP7.js.map → navigation-WASYQTFC.js.map} +1 -1
  224. package/dist/{not-found-RLM7SV7P.js → not-found-M3ZPUVVC.js} +26 -26
  225. package/dist/{not-found-RLM7SV7P.js.map → not-found-M3ZPUVVC.js.map} +1 -1
  226. package/dist/providers/index.js +23 -23
  227. package/dist/routes/account/orders.js +8 -8
  228. package/dist/routes/account.js +17 -17
  229. package/dist/routes/blog.js +12 -12
  230. package/dist/routes/brands.js +8 -8
  231. package/dist/routes/cart.js +31 -31
  232. package/dist/routes/home.js +28 -28
  233. package/dist/routes/index.js +7 -7
  234. package/dist/routes/loyalty.js +9 -9
  235. package/dist/routes/page.js +8 -8
  236. package/dist/routes/product-listing.js +29 -29
  237. package/dist/routes/product.js +27 -27
  238. package/dist/routes/seo-redirects.js +7 -7
  239. package/dist/routes/testimonials.js +3 -3
  240. package/dist/routes/thank-you.js +8 -8
  241. package/dist/skeleton.js +28 -28
  242. package/dist/{store-lookup-7SAEE4L3.js → store-lookup-EW6ALPQF.js} +12 -12
  243. package/dist/{store-lookup-7SAEE4L3.js.map → store-lookup-EW6ALPQF.js.map} +1 -1
  244. package/dist/tanstack/middleware/twilight.d.ts.map +1 -1
  245. package/dist/tanstack.js +31 -21
  246. package/dist/tanstack.js.map +1 -1
  247. package/dist/twilight/context.d.ts +2 -0
  248. package/dist/twilight/context.d.ts.map +1 -1
  249. package/dist/types/index.d.ts +1 -1
  250. package/dist/types/index.d.ts.map +1 -1
  251. package/dist/utils/index.js +6 -6
  252. package/dist/utils/native-app-headers.d.ts +12 -0
  253. package/dist/utils/native-app-headers.d.ts.map +1 -0
  254. package/dist/vite/index.js +3 -3
  255. package/package.json +1 -1
  256. package/tailwind/components/home/FeaturedProductsStyle2.tsx.txt +8 -2
  257. package/tailwind/components/home/FixedProducts.tsx.txt +9 -2
  258. package/dist/Header-NXUFMN3V.js +0 -22
  259. package/dist/MaintenancePage-IKWAGFKU.js +0 -7
  260. package/dist/StoreClosedNotification-WJGHUXGJ.js +0 -54
  261. package/dist/chunk-5DWTU5KS.js.map +0 -1
  262. package/dist/chunk-BHV2RZWY.js.map +0 -1
  263. package/dist/chunk-HG4B4F4N.js.map +0 -1
  264. package/dist/chunk-JJIXGYVN.js +0 -14
  265. package/dist/chunk-QUBQPGT7.js.map +0 -1
  266. package/dist/document-class-JTMWALK3.js +0 -29
  267. package/dist/navigation-P3RDLBP7.js +0 -14
package/dist/api/cart.js CHANGED
@@ -1,11 +1,11 @@
1
- export { cart } from '../chunk-HGY7P2Y3.js';
2
- import '../chunk-V7QFIGQ4.js';
1
+ export { cart } from '../chunk-F6XPGONG.js';
2
+ import '../chunk-UWDUMPL7.js';
3
3
  import '../chunk-OUW6WESU.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';
4
+ import '../chunk-YDSWLCOY.js';
5
+ import '../chunk-A4NN6C5B.js';
6
+ import '../chunk-3NFVZJNI.js';
7
+ import '../chunk-GXZW6BJY.js';
8
+ import '../chunk-JNAJTCJD.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-UWDS42UX.js';
2
- import '../chunk-V7QFIGQ4.js';
1
+ export { category } from '../chunk-VUWBGAET.js';
2
+ import '../chunk-UWDUMPL7.js';
3
3
  import '../chunk-OUW6WESU.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';
4
+ import '../chunk-YDSWLCOY.js';
5
+ import '../chunk-A4NN6C5B.js';
6
+ import '../chunk-3NFVZJNI.js';
7
+ import '../chunk-GXZW6BJY.js';
8
+ import '../chunk-JNAJTCJD.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-KTLQV4Q4.js';
2
- import '../chunk-OWJMPD7X.js';
3
- import '../chunk-SU7NHAYA.js';
4
- import '../chunk-HG4B4F4N.js';
1
+ export { STORE_IDENTIFIER_HEADER, api, cdn, filesCdn, getActiveCurrency, getActiveScope, getActiveScopeId, getAuthToken } from '../chunk-YDSWLCOY.js';
2
+ import '../chunk-3NFVZJNI.js';
3
+ import '../chunk-GXZW6BJY.js';
4
+ import '../chunk-JNAJTCJD.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-42YMCOK4.js';
2
- import '../chunk-KTLQV4Q4.js';
3
- import '../chunk-OWJMPD7X.js';
4
- import '../chunk-SU7NHAYA.js';
5
- import '../chunk-HG4B4F4N.js';
1
+ export { home } from '../chunk-TWUOIBO7.js';
2
+ import '../chunk-YDSWLCOY.js';
3
+ import '../chunk-3NFVZJNI.js';
4
+ import '../chunk-GXZW6BJY.js';
5
+ import '../chunk-JNAJTCJD.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-5L6IBYWZ.js';
2
- import '../chunk-V7QFIGQ4.js';
1
+ export { loyalty } from '../chunk-QA4FBMFJ.js';
2
+ import '../chunk-UWDUMPL7.js';
3
3
  import '../chunk-OUW6WESU.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';
4
+ import '../chunk-YDSWLCOY.js';
5
+ import '../chunk-A4NN6C5B.js';
6
+ import '../chunk-3NFVZJNI.js';
7
+ import '../chunk-GXZW6BJY.js';
8
+ import '../chunk-JNAJTCJD.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-QXX54X55.js';
2
- import '../chunk-KTLQV4Q4.js';
3
- import '../chunk-OWJMPD7X.js';
4
- import '../chunk-SU7NHAYA.js';
5
- import '../chunk-HG4B4F4N.js';
1
+ export { menu } from '../chunk-L4JI2AAL.js';
2
+ import '../chunk-YDSWLCOY.js';
3
+ import '../chunk-3NFVZJNI.js';
4
+ import '../chunk-GXZW6BJY.js';
5
+ import '../chunk-JNAJTCJD.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-STKR2KHL.js';
2
- import '../chunk-KTLQV4Q4.js';
3
- import '../chunk-OWJMPD7X.js';
4
- import '../chunk-SU7NHAYA.js';
5
- import '../chunk-HG4B4F4N.js';
1
+ export { notification } from '../chunk-BQ2MNEN7.js';
2
+ import '../chunk-YDSWLCOY.js';
3
+ import '../chunk-3NFVZJNI.js';
4
+ import '../chunk-GXZW6BJY.js';
5
+ import '../chunk-JNAJTCJD.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-SDEBSX6Z.js';
2
- import '../chunk-V7QFIGQ4.js';
1
+ export { order } from '../chunk-UKLYL5LM.js';
2
+ import '../chunk-UWDUMPL7.js';
3
3
  import '../chunk-OUW6WESU.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';
4
+ import '../chunk-YDSWLCOY.js';
5
+ import '../chunk-A4NN6C5B.js';
6
+ import '../chunk-3NFVZJNI.js';
7
+ import '../chunk-GXZW6BJY.js';
8
+ import '../chunk-JNAJTCJD.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-CTV5GA2U.js';
2
- import '../chunk-V7QFIGQ4.js';
1
+ export { page } from '../chunk-SCRNQWZT.js';
2
+ import '../chunk-UWDUMPL7.js';
3
3
  import '../chunk-OUW6WESU.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';
4
+ import '../chunk-YDSWLCOY.js';
5
+ import '../chunk-A4NN6C5B.js';
6
+ import '../chunk-3NFVZJNI.js';
7
+ import '../chunk-GXZW6BJY.js';
8
+ import '../chunk-JNAJTCJD.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-VJQ7SM4O.js';
2
- import '../chunk-V7QFIGQ4.js';
1
+ export { getProductPreview, isProductPreviewQuery, parseNextPageToken, product, productDetailQueryKey, productPreviewQueryKey, rememberProductPreview, shouldDehydrateQuery } from '../chunk-SQXUWX4B.js';
2
+ import '../chunk-UWDUMPL7.js';
3
3
  import '../chunk-OUW6WESU.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';
4
+ import '../chunk-YDSWLCOY.js';
5
+ import '../chunk-A4NN6C5B.js';
6
+ import '../chunk-3NFVZJNI.js';
7
+ import '../chunk-GXZW6BJY.js';
8
+ import '../chunk-JNAJTCJD.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-KTLQV4Q4.js';
2
- import '../chunk-OWJMPD7X.js';
3
- import '../chunk-SU7NHAYA.js';
4
- import '../chunk-HG4B4F4N.js';
1
+ import { api } from '../chunk-YDSWLCOY.js';
2
+ import '../chunk-3NFVZJNI.js';
3
+ import '../chunk-GXZW6BJY.js';
4
+ import '../chunk-JNAJTCJD.js';
5
5
  import '../chunk-T72DAX7R.js';
6
6
  import '../chunk-DGUM43GV.js';
7
7
 
@@ -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,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"}
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;AAIjE,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;AA0CD,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-5DWTU5KS.js';
2
- import '../chunk-KTLQV4Q4.js';
3
- import '../chunk-OWJMPD7X.js';
4
- export { resolveStoreIdentifier } from '../chunk-SU7NHAYA.js';
5
- import '../chunk-HG4B4F4N.js';
1
+ export { store } from '../chunk-D42M66E4.js';
2
+ import '../chunk-YDSWLCOY.js';
3
+ import '../chunk-3NFVZJNI.js';
4
+ export { resolveStoreIdentifier } from '../chunk-GXZW6BJY.js';
5
+ import '../chunk-JNAJTCJD.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-U3UY2BDN.js';
2
- import '../chunk-KTLQV4Q4.js';
3
- import '../chunk-OWJMPD7X.js';
4
- import '../chunk-SU7NHAYA.js';
5
- import '../chunk-HG4B4F4N.js';
1
+ export { commonTranslationsPath, storeTranslationsPath, translations } from '../chunk-D7XWUD6T.js';
2
+ import '../chunk-YDSWLCOY.js';
3
+ import '../chunk-3NFVZJNI.js';
4
+ import '../chunk-GXZW6BJY.js';
5
+ import '../chunk-JNAJTCJD.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-C5MQ6VWX.js';
2
- import '../chunk-KTLQV4Q4.js';
3
- import '../chunk-OWJMPD7X.js';
4
- import '../chunk-SU7NHAYA.js';
5
- import '../chunk-HG4B4F4N.js';
1
+ export { user } from '../chunk-24UCMWQB.js';
2
+ import '../chunk-YDSWLCOY.js';
3
+ import '../chunk-3NFVZJNI.js';
4
+ import '../chunk-GXZW6BJY.js';
5
+ import '../chunk-JNAJTCJD.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-MSNU4NYS.js';
2
- import '../chunk-KTLQV4Q4.js';
3
- import '../chunk-OWJMPD7X.js';
4
- import '../chunk-SU7NHAYA.js';
5
- import '../chunk-HG4B4F4N.js';
1
+ export { wallet } from '../chunk-2CL6AEO4.js';
2
+ import '../chunk-YDSWLCOY.js';
3
+ import '../chunk-3NFVZJNI.js';
4
+ import '../chunk-GXZW6BJY.js';
5
+ import '../chunk-JNAJTCJD.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-RSWRKU4X.js';
2
- import '../chunk-VJQ7SM4O.js';
3
- import '../chunk-V7QFIGQ4.js';
1
+ export { wishlist } from '../chunk-OHUTM224.js';
2
+ import '../chunk-SQXUWX4B.js';
3
+ import '../chunk-UWDUMPL7.js';
4
4
  import '../chunk-OUW6WESU.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';
5
+ import '../chunk-YDSWLCOY.js';
6
+ import '../chunk-A4NN6C5B.js';
7
+ import '../chunk-3NFVZJNI.js';
8
+ import '../chunk-GXZW6BJY.js';
9
+ import '../chunk-JNAJTCJD.js';
10
10
  import '../chunk-T72DAX7R.js';
11
11
  import '../chunk-DF6FBKDN.js';
12
12
  import '../chunk-DGUM43GV.js';
@@ -1,4 +1,4 @@
1
- import { api } from './chunk-KTLQV4Q4.js';
1
+ import { api } from './chunk-YDSWLCOY.js';
2
2
  import { queryOptions } from '@tanstack/react-query';
3
3
 
4
4
  var user = {
@@ -19,5 +19,5 @@ var user = {
19
19
  };
20
20
 
21
21
  export { user };
22
- //# sourceMappingURL=chunk-C5MQ6VWX.js.map
23
- //# sourceMappingURL=chunk-C5MQ6VWX.js.map
22
+ //# sourceMappingURL=chunk-24UCMWQB.js.map
23
+ //# sourceMappingURL=chunk-24UCMWQB.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/api/user.ts"],"names":[],"mappings":";;;AAIO,IAAM,IAAA,GAAO;AAAA,EAClB,KAAK,YAAkC;AACrC,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,GAAA,CACV,GAAA,CAAI,WAAW,CAAA,CACf,MAAmC,CACnC,IAAA,CAAK,CAAC,CAAA,MAAO,EAAE,GAAG,CAAA,CAAE,IAAA,EAAM,IAAA,EAAM,QAAgB,CAAE,CAAA;AAAA,IACvD,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,sBAAsB,KAAK,CAAA;AACzC,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF,CAAA;AAAA,EAEA,OAAA,EAAS;AAAA,IACP,OAAA,EAAS,MACP,YAAA,CAA0B;AAAA,MACxB,QAAA,EAAU,CAAC,MAAA,EAAQ,SAAS,CAAA;AAAA,MAC5B,SAAS,IAAA,CAAK;AAAA,KACf;AAAA;AAEP","file":"chunk-C5MQ6VWX.js","sourcesContent":["import { queryOptions } from '@tanstack/react-query';\nimport { api } from './client';\nimport type { User } from '../types';\n\nexport const user = {\n get: async (): Promise<User | null> => {\n try {\n return await api\n .get('auth/user')\n .json<{ data: Omit<User, 'type'> }>()\n .then((r) => ({ ...r.data, type: 'user' as const }));\n } catch (error) {\n console.debug('[user.get] Failed:', error);\n return null;\n }\n },\n\n queries: {\n current: () =>\n queryOptions<User | null>({\n queryKey: ['user', 'current'],\n queryFn: user.get,\n }),\n },\n};\n"]}
1
+ {"version":3,"sources":["../src/api/user.ts"],"names":[],"mappings":";;;AAIO,IAAM,IAAA,GAAO;AAAA,EAClB,KAAK,YAAkC;AACrC,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,GAAA,CACV,GAAA,CAAI,WAAW,CAAA,CACf,MAAmC,CACnC,IAAA,CAAK,CAAC,CAAA,MAAO,EAAE,GAAG,CAAA,CAAE,IAAA,EAAM,IAAA,EAAM,QAAgB,CAAE,CAAA;AAAA,IACvD,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,sBAAsB,KAAK,CAAA;AACzC,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF,CAAA;AAAA,EAEA,OAAA,EAAS;AAAA,IACP,OAAA,EAAS,MACP,YAAA,CAA0B;AAAA,MACxB,QAAA,EAAU,CAAC,MAAA,EAAQ,SAAS,CAAA;AAAA,MAC5B,SAAS,IAAA,CAAK;AAAA,KACf;AAAA;AAEP","file":"chunk-24UCMWQB.js","sourcesContent":["import { queryOptions } from '@tanstack/react-query';\nimport { api } from './client';\nimport type { User } from '../types';\n\nexport const user = {\n get: async (): Promise<User | null> => {\n try {\n return await api\n .get('auth/user')\n .json<{ data: Omit<User, 'type'> }>()\n .then((r) => ({ ...r.data, type: 'user' as const }));\n } catch (error) {\n console.debug('[user.get] Failed:', error);\n return null;\n }\n },\n\n queries: {\n current: () =>\n queryOptions<User | null>({\n queryKey: ['user', 'current'],\n queryFn: user.get,\n }),\n },\n};\n"]}
@@ -1,4 +1,4 @@
1
- import { api } from './chunk-KTLQV4Q4.js';
1
+ import { api } from './chunk-YDSWLCOY.js';
2
2
 
3
3
  // src/api/wallet.ts
4
4
  var wallet = {
@@ -20,5 +20,5 @@ var wallet = {
20
20
  };
21
21
 
22
22
  export { wallet };
23
- //# sourceMappingURL=chunk-MSNU4NYS.js.map
24
- //# sourceMappingURL=chunk-MSNU4NYS.js.map
23
+ //# sourceMappingURL=chunk-2CL6AEO4.js.map
24
+ //# sourceMappingURL=chunk-2CL6AEO4.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/api/wallet.ts"],"names":[],"mappings":";;;AAgCO,IAAM,MAAA,GAAS;AAAA,EACpB,IAAA,EAAM,OAAO,MAAA,GAA2B,EAAC,KAAiC;AACxE,IAAA,MAAM,EAAE,IAAA,GAAO,CAAA,EAAG,OAAA,GAAU,EAAA,EAAI,QAAO,GAAI,MAAA;AAE3C,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,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,MAAM,UAAmC,EAAC;AAC1C,IAAA,IAAI,MAAA,UAAgB,MAAA,GAAS,MAAA;AAE7B,IAAA,MAAM,QAAA,GAAW,MAAM,GAAA,CACpB,GAAA,CAAI,CAAA,eAAA,EAAkB,YAAA,CAAa,QAAA,EAAU,CAAA,CAAA,EAAI,OAAc,CAAA,CAC/D,IAAA,EAAsE;AAEzE,IAAA,MAAM,YAAA,GAAe,SAAS,IAAA,CAAK,YAAA;AAEnC,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,YAAA,CAAa,IAAA,IAAQ,EAAC;AAAA,MAC7B,MAAM,YAAA,CAAa,aAAA;AAAA,MACnB,OAAA,EAAS,SAAS,IAAA,CAAK;AAAA,KACzB;AAAA,EACF;AACF","file":"chunk-MSNU4NYS.js","sourcesContent":["import { api } from './client';\n\nexport interface TransactionItem {\n id: number;\n order_id: number;\n transaction_type: string;\n action_type: string;\n type: string;\n title: string;\n description: string;\n amount: number;\n created_at: number;\n expired_at: number;\n}\n\nexport interface WalletListParams {\n page?: number;\n perPage?: number;\n signal?: AbortSignal;\n}\n\nexport interface WalletListResponse {\n data: TransactionItem[];\n next_page_url: string | null;\n}\n\nexport interface WalletListResult {\n items: TransactionItem[];\n next: string | null;\n balance: number;\n}\n\nexport const wallet = {\n list: async (params: WalletListParams = {}): Promise<WalletListResult> => {\n const { page = 1, perPage = 10, signal } = params;\n\n const searchParams = new URLSearchParams();\n searchParams.set('page', String(page));\n searchParams.set('per_page', String(perPage));\n\n const options: Record<string, unknown> = {};\n if (signal) options.signal = signal;\n\n const response = await api\n .get(`balance/wallet?${searchParams.toString()}`, options as any)\n .json<{ data: { transactions: WalletListResponse; balance: number } }>();\n\n const transactions = response.data.transactions;\n\n return {\n items: transactions.data ?? [],\n next: transactions.next_page_url,\n balance: response.data.balance,\n };\n },\n};\n"]}
1
+ {"version":3,"sources":["../src/api/wallet.ts"],"names":[],"mappings":";;;AAgCO,IAAM,MAAA,GAAS;AAAA,EACpB,IAAA,EAAM,OAAO,MAAA,GAA2B,EAAC,KAAiC;AACxE,IAAA,MAAM,EAAE,IAAA,GAAO,CAAA,EAAG,OAAA,GAAU,EAAA,EAAI,QAAO,GAAI,MAAA;AAE3C,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,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,MAAM,UAAmC,EAAC;AAC1C,IAAA,IAAI,MAAA,UAAgB,MAAA,GAAS,MAAA;AAE7B,IAAA,MAAM,QAAA,GAAW,MAAM,GAAA,CACpB,GAAA,CAAI,CAAA,eAAA,EAAkB,YAAA,CAAa,QAAA,EAAU,CAAA,CAAA,EAAI,OAAc,CAAA,CAC/D,IAAA,EAAsE;AAEzE,IAAA,MAAM,YAAA,GAAe,SAAS,IAAA,CAAK,YAAA;AAEnC,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,YAAA,CAAa,IAAA,IAAQ,EAAC;AAAA,MAC7B,MAAM,YAAA,CAAa,aAAA;AAAA,MACnB,OAAA,EAAS,SAAS,IAAA,CAAK;AAAA,KACzB;AAAA,EACF;AACF","file":"chunk-2CL6AEO4.js","sourcesContent":["import { api } from './client';\n\nexport interface TransactionItem {\n id: number;\n order_id: number;\n transaction_type: string;\n action_type: string;\n type: string;\n title: string;\n description: string;\n amount: number;\n created_at: number;\n expired_at: number;\n}\n\nexport interface WalletListParams {\n page?: number;\n perPage?: number;\n signal?: AbortSignal;\n}\n\nexport interface WalletListResponse {\n data: TransactionItem[];\n next_page_url: string | null;\n}\n\nexport interface WalletListResult {\n items: TransactionItem[];\n next: string | null;\n balance: number;\n}\n\nexport const wallet = {\n list: async (params: WalletListParams = {}): Promise<WalletListResult> => {\n const { page = 1, perPage = 10, signal } = params;\n\n const searchParams = new URLSearchParams();\n searchParams.set('page', String(page));\n searchParams.set('per_page', String(perPage));\n\n const options: Record<string, unknown> = {};\n if (signal) options.signal = signal;\n\n const response = await api\n .get(`balance/wallet?${searchParams.toString()}`, options as any)\n .json<{ data: { transactions: WalletListResponse; balance: number } }>();\n\n const transactions = response.data.transactions;\n\n return {\n items: transactions.data ?? [],\n next: transactions.next_page_url,\n balance: response.data.balance,\n };\n },\n};\n"]}
@@ -1,6 +1,6 @@
1
- import { ensureTwilightContextFromMatches } from './chunk-S6SP272Z.js';
1
+ import { ensureTwilightContextFromMatches } from './chunk-EHX45KZG.js';
2
2
  import { storePageUrl } from './chunk-4SZZPXM2.js';
3
- import { getTwilightContext, SettingsError } from './chunk-HG4B4F4N.js';
3
+ import { getTwilightContext, SettingsError } from './chunk-JNAJTCJD.js';
4
4
 
5
5
  // src/tanstack/head.ts
6
6
  function normalizeOgImages(images) {
@@ -125,5 +125,5 @@ function withHead(route, extend) {
125
125
  }
126
126
 
127
127
  export { tanstackHeadAdapter, withHead };
128
- //# sourceMappingURL=chunk-HGKAIIAJ.js.map
129
- //# sourceMappingURL=chunk-HGKAIIAJ.js.map
128
+ //# sourceMappingURL=chunk-2IW3JRWL.js.map
129
+ //# sourceMappingURL=chunk-2IW3JRWL.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/tanstack/head.ts"],"names":[],"mappings":"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","file":"chunk-HGKAIIAJ.js","sourcesContent":["import type { HeadDescriptor, OpenGraphImage } from '../utils/head';\nimport type { TwilightContext } from '../twilight/context';\nimport { getTwilightContext } from '../twilight/context';\nimport type { TwilightContextMatch } from '../twilight/ensure-context';\nimport { ensureTwilightContextFromMatches } from '../twilight/ensure-context';\nimport { SettingsError } from '../utils/errors';\nimport { storePageUrl } from '../utils/baseHead';\n\ntype OgImagesInput = string | OpenGraphImage | Array<string | OpenGraphImage> | undefined;\n\nfunction normalizeOgImages(images: OgImagesInput): OpenGraphImage[] {\n if (!images) return [];\n const arr = Array.isArray(images) ? images : [images];\n return arr.map((img) => (typeof img === 'string' ? { url: img } : img));\n}\n\n/** Merchant descriptions are rich-text HTML; description meta tags take plain text. */\nfunction plainText(html: string): string {\n return html\n .replace(/<br\\s*\\/?>|<\\/(?:p|div|li|h[1-6])>/gi, ' ')\n .replace(/<[^>]*>/g, '')\n .replace(/\\s+/g, ' ')\n .trim();\n}\n\nexport function tanstackHeadAdapter(descriptor: HeadDescriptor) {\n const meta: Array<Record<string, unknown>> = [];\n const links: Array<Record<string, unknown>> = [];\n const scripts: Array<Record<string, unknown>> = [];\n const styles: Record<string, unknown>[] = [];\n\n if (descriptor.title) meta.push({ title: descriptor.title });\n if (descriptor.description)\n meta.push({ name: 'description', content: plainText(descriptor.description) });\n\n if (descriptor.keywords) {\n const kw = Array.isArray(descriptor.keywords)\n ? descriptor.keywords.join(', ')\n : descriptor.keywords;\n meta.push({ name: 'keywords', content: kw });\n }\n\n if (descriptor.robots) meta.push({ name: 'robots', content: descriptor.robots });\n\n // Open Graph\n const og = descriptor.openGraph;\n if (og) {\n if (og.siteName) meta.push({ property: 'og:site_name', content: og.siteName });\n if (og.type) meta.push({ property: 'og:type', content: og.type });\n if (og.title) meta.push({ property: 'og:title', content: og.title });\n if (og.description)\n meta.push({ property: 'og:description', content: plainText(og.description) });\n if (og.url) meta.push({ property: 'og:url', content: og.url });\n if (og.locale) meta.push({ property: 'og:locale', content: og.locale });\n for (const alt of og.alternateLocale ?? []) {\n meta.push({ property: 'og:locale:alternate', content: alt });\n }\n for (const img of normalizeOgImages(og.images)) {\n meta.push({ property: 'og:image', content: img.url });\n if (img.width != null) meta.push({ property: 'og:image:width', content: String(img.width) });\n if (img.height != null)\n meta.push({ property: 'og:image:height', content: String(img.height) });\n if (img.alt) meta.push({ property: 'og:image:alt', content: img.alt });\n }\n if (og.publishedTime)\n meta.push({ property: 'article:published_time', content: og.publishedTime });\n if (og.modifiedTime) meta.push({ property: 'article:modified_time', content: og.modifiedTime });\n }\n\n // Twitter Card\n const tw = descriptor.twitter;\n if (tw) {\n if (tw.card) meta.push({ name: 'twitter:card', content: tw.card });\n if (tw.title) meta.push({ name: 'twitter:title', content: tw.title });\n if (tw.description)\n meta.push({ name: 'twitter:description', content: plainText(tw.description) });\n if (tw.site) meta.push({ name: 'twitter:site', content: tw.site });\n if (tw.creator) meta.push({ name: 'twitter:creator', content: tw.creator });\n if (tw.url) meta.push({ name: 'twitter:url', content: tw.url });\n const twImages = tw.images ? (Array.isArray(tw.images) ? tw.images : [tw.images]) : [];\n for (const img of twImages) {\n meta.push({ name: 'twitter:image', content: img });\n }\n }\n\n // Canonical\n if (descriptor.canonical) links.push({ rel: 'canonical', href: descriptor.canonical });\n\n // hreflang alternates (React requires camelCase: hrefLang)\n for (const alt of descriptor.alternateLanguages ?? []) {\n links.push({ rel: 'alternate', hrefLang: alt.hreflang, href: alt.href });\n }\n\n // JSON-LD\n if (descriptor.jsonLd) {\n scripts.push({ type: 'application/ld+json', children: JSON.stringify(descriptor.jsonLd) });\n }\n\n // Escape hatches\n for (const m of descriptor.meta ?? []) {\n const { httpEquiv, ...rest } = m as typeof m & { httpEquiv?: string };\n meta.push(httpEquiv ? { httpEquiv, ...rest } : rest);\n }\n for (const l of descriptor.links ?? []) links.push(l);\n for (const s of descriptor.styles ?? []) styles.push(s as unknown as Record<string, unknown>);\n\n // Import maps must be emitted before module scripts that rely on bare specifiers.\n for (const im of descriptor.importMap ?? []) {\n scripts.push({ type: 'importmap', children: JSON.stringify(im) });\n }\n for (const s of descriptor.scripts ?? []) scripts.push(s);\n\n return { meta, links, styles, scripts };\n}\n\n// ============================================================================\n// withHead - Simplified head callback wrapper for TanStack Router\n// ============================================================================\n\n/** Twig's page title format: \"<page title> - <store meta title or store name>\". */\nfunction appendStoreTitle(\n descriptor: HeadDescriptor,\n settings: TwilightContext['settings']\n): HeadDescriptor {\n const store = settings?.store;\n const storeTitle = store?.meta?.title || store?.name;\n const pageTitle = descriptor.title;\n if (!pageTitle || !storeTitle || descriptor.appendStoreTitle === false) return descriptor;\n if (pageTitle === storeTitle) return descriptor;\n\n const title = `${pageTitle} - ${storeTitle}`;\n // Share titles follow the page title too, unless the route set its own.\n const shareTitle = (current?: string) => (!current || current === pageTitle ? title : current);\n return {\n ...descriptor,\n title,\n openGraph: { ...descriptor.openGraph, title: shareTitle(descriptor.openGraph?.title) },\n twitter: { ...descriptor.twitter, title: shareTitle(descriptor.twitter?.title) },\n };\n}\n\n/**\n * Twig's page URL for a page that names none: its own path on the store's domain, without the\n * query, as the canonical and the og:url and twitter:url share cards read.\n */\nfunction withPageUrl(descriptor: HeadDescriptor, ctx: TwilightContext): HeadDescriptor {\n const pathname = ctx.location?.pathname;\n const canonical =\n descriptor.canonical ?? (pathname ? storePageUrl(ctx.settings, pathname) : undefined);\n if (!canonical) return descriptor;\n return {\n ...descriptor,\n canonical,\n openGraph: { ...descriptor.openGraph, url: descriptor.openGraph?.url ?? canonical },\n twitter: { ...descriptor.twitter, url: descriptor.twitter?.url ?? canonical },\n };\n}\n\n/**\n * Minimal shape we need from TanStack Router's AssetFnContextOptions.\n * `loaderData` feeds the route's own head function; `matches` is the recovery\n * source for store settings when the twilight module store is not populated yet\n * (see `ensureTwilightContextFromMatches`).\n */\ntype HeadContext = {\n loaderData?: unknown;\n matches?: readonly TwilightContextMatch[];\n};\n\n/**\n * Wraps a route module's head function for TanStack Router.\n *\n * @example\n * ```typescript\n * head: withHead(Offers)\n * head: withHead(Product, (result) => ({ ...result, robots: 'noindex, follow' }))\n * ```\n */\nexport function withHead<T>(\n route: { head: (ctx: TwilightContext, data: T) => HeadDescriptor },\n extend?: (result: HeadDescriptor, _ctx: TwilightContext, data: T) => HeadDescriptor\n): (_ctx: Record<string, unknown>) => Record<string, unknown> {\n return (ctx: HeadContext) => {\n const loaderData = ctx.loaderData;\n\n if (!loaderData) return {};\n\n // TanStack re-runs every matched route's head() during client hydration,\n // where the twilight module store can still be empty. Recover it from the\n // match context TanStack has already resolved before giving up.\n ensureTwilightContextFromMatches(ctx.matches);\n\n try {\n const context = getTwilightContext();\n const result = route.head(context, loaderData as T);\n const extended = extend ? extend(result, context, loaderData as T) : result;\n const finalResult = withPageUrl(appendStoreTitle(extended, context.settings), context);\n\n return tanstackHeadAdapter(finalResult);\n } catch (error) {\n // A head function must never throw: TanStack surfaces the throw as a\n // hydration error, React then discards the server-rendered tree and the\n // storefront renders blank. Dropping this route's head tags degrades\n // gracefully — the server-rendered ones stay in the document.\n if (error instanceof SettingsError) return {};\n throw error;\n }\n };\n}\n"]}
1
+ {"version":3,"sources":["../src/tanstack/head.ts"],"names":[],"mappings":"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","file":"chunk-2IW3JRWL.js","sourcesContent":["import type { HeadDescriptor, OpenGraphImage } from '../utils/head';\nimport type { TwilightContext } from '../twilight/context';\nimport { getTwilightContext } from '../twilight/context';\nimport type { TwilightContextMatch } from '../twilight/ensure-context';\nimport { ensureTwilightContextFromMatches } from '../twilight/ensure-context';\nimport { SettingsError } from '../utils/errors';\nimport { storePageUrl } from '../utils/baseHead';\n\ntype OgImagesInput = string | OpenGraphImage | Array<string | OpenGraphImage> | undefined;\n\nfunction normalizeOgImages(images: OgImagesInput): OpenGraphImage[] {\n if (!images) return [];\n const arr = Array.isArray(images) ? images : [images];\n return arr.map((img) => (typeof img === 'string' ? { url: img } : img));\n}\n\n/** Merchant descriptions are rich-text HTML; description meta tags take plain text. */\nfunction plainText(html: string): string {\n return html\n .replace(/<br\\s*\\/?>|<\\/(?:p|div|li|h[1-6])>/gi, ' ')\n .replace(/<[^>]*>/g, '')\n .replace(/\\s+/g, ' ')\n .trim();\n}\n\nexport function tanstackHeadAdapter(descriptor: HeadDescriptor) {\n const meta: Array<Record<string, unknown>> = [];\n const links: Array<Record<string, unknown>> = [];\n const scripts: Array<Record<string, unknown>> = [];\n const styles: Record<string, unknown>[] = [];\n\n if (descriptor.title) meta.push({ title: descriptor.title });\n if (descriptor.description)\n meta.push({ name: 'description', content: plainText(descriptor.description) });\n\n if (descriptor.keywords) {\n const kw = Array.isArray(descriptor.keywords)\n ? descriptor.keywords.join(', ')\n : descriptor.keywords;\n meta.push({ name: 'keywords', content: kw });\n }\n\n if (descriptor.robots) meta.push({ name: 'robots', content: descriptor.robots });\n\n // Open Graph\n const og = descriptor.openGraph;\n if (og) {\n if (og.siteName) meta.push({ property: 'og:site_name', content: og.siteName });\n if (og.type) meta.push({ property: 'og:type', content: og.type });\n if (og.title) meta.push({ property: 'og:title', content: og.title });\n if (og.description)\n meta.push({ property: 'og:description', content: plainText(og.description) });\n if (og.url) meta.push({ property: 'og:url', content: og.url });\n if (og.locale) meta.push({ property: 'og:locale', content: og.locale });\n for (const alt of og.alternateLocale ?? []) {\n meta.push({ property: 'og:locale:alternate', content: alt });\n }\n for (const img of normalizeOgImages(og.images)) {\n meta.push({ property: 'og:image', content: img.url });\n if (img.width != null) meta.push({ property: 'og:image:width', content: String(img.width) });\n if (img.height != null)\n meta.push({ property: 'og:image:height', content: String(img.height) });\n if (img.alt) meta.push({ property: 'og:image:alt', content: img.alt });\n }\n if (og.publishedTime)\n meta.push({ property: 'article:published_time', content: og.publishedTime });\n if (og.modifiedTime) meta.push({ property: 'article:modified_time', content: og.modifiedTime });\n }\n\n // Twitter Card\n const tw = descriptor.twitter;\n if (tw) {\n if (tw.card) meta.push({ name: 'twitter:card', content: tw.card });\n if (tw.title) meta.push({ name: 'twitter:title', content: tw.title });\n if (tw.description)\n meta.push({ name: 'twitter:description', content: plainText(tw.description) });\n if (tw.site) meta.push({ name: 'twitter:site', content: tw.site });\n if (tw.creator) meta.push({ name: 'twitter:creator', content: tw.creator });\n if (tw.url) meta.push({ name: 'twitter:url', content: tw.url });\n const twImages = tw.images ? (Array.isArray(tw.images) ? tw.images : [tw.images]) : [];\n for (const img of twImages) {\n meta.push({ name: 'twitter:image', content: img });\n }\n }\n\n // Canonical\n if (descriptor.canonical) links.push({ rel: 'canonical', href: descriptor.canonical });\n\n // hreflang alternates (React requires camelCase: hrefLang)\n for (const alt of descriptor.alternateLanguages ?? []) {\n links.push({ rel: 'alternate', hrefLang: alt.hreflang, href: alt.href });\n }\n\n // JSON-LD\n if (descriptor.jsonLd) {\n scripts.push({ type: 'application/ld+json', children: JSON.stringify(descriptor.jsonLd) });\n }\n\n // Escape hatches\n for (const m of descriptor.meta ?? []) {\n const { httpEquiv, ...rest } = m as typeof m & { httpEquiv?: string };\n meta.push(httpEquiv ? { httpEquiv, ...rest } : rest);\n }\n for (const l of descriptor.links ?? []) links.push(l);\n for (const s of descriptor.styles ?? []) styles.push(s as unknown as Record<string, unknown>);\n\n // Import maps must be emitted before module scripts that rely on bare specifiers.\n for (const im of descriptor.importMap ?? []) {\n scripts.push({ type: 'importmap', children: JSON.stringify(im) });\n }\n for (const s of descriptor.scripts ?? []) scripts.push(s);\n\n return { meta, links, styles, scripts };\n}\n\n// ============================================================================\n// withHead - Simplified head callback wrapper for TanStack Router\n// ============================================================================\n\n/** Twig's page title format: \"<page title> - <store meta title or store name>\". */\nfunction appendStoreTitle(\n descriptor: HeadDescriptor,\n settings: TwilightContext['settings']\n): HeadDescriptor {\n const store = settings?.store;\n const storeTitle = store?.meta?.title || store?.name;\n const pageTitle = descriptor.title;\n if (!pageTitle || !storeTitle || descriptor.appendStoreTitle === false) return descriptor;\n if (pageTitle === storeTitle) return descriptor;\n\n const title = `${pageTitle} - ${storeTitle}`;\n // Share titles follow the page title too, unless the route set its own.\n const shareTitle = (current?: string) => (!current || current === pageTitle ? title : current);\n return {\n ...descriptor,\n title,\n openGraph: { ...descriptor.openGraph, title: shareTitle(descriptor.openGraph?.title) },\n twitter: { ...descriptor.twitter, title: shareTitle(descriptor.twitter?.title) },\n };\n}\n\n/**\n * Twig's page URL for a page that names none: its own path on the store's domain, without the\n * query, as the canonical and the og:url and twitter:url share cards read.\n */\nfunction withPageUrl(descriptor: HeadDescriptor, ctx: TwilightContext): HeadDescriptor {\n const pathname = ctx.location?.pathname;\n const canonical =\n descriptor.canonical ?? (pathname ? storePageUrl(ctx.settings, pathname) : undefined);\n if (!canonical) return descriptor;\n return {\n ...descriptor,\n canonical,\n openGraph: { ...descriptor.openGraph, url: descriptor.openGraph?.url ?? canonical },\n twitter: { ...descriptor.twitter, url: descriptor.twitter?.url ?? canonical },\n };\n}\n\n/**\n * Minimal shape we need from TanStack Router's AssetFnContextOptions.\n * `loaderData` feeds the route's own head function; `matches` is the recovery\n * source for store settings when the twilight module store is not populated yet\n * (see `ensureTwilightContextFromMatches`).\n */\ntype HeadContext = {\n loaderData?: unknown;\n matches?: readonly TwilightContextMatch[];\n};\n\n/**\n * Wraps a route module's head function for TanStack Router.\n *\n * @example\n * ```typescript\n * head: withHead(Offers)\n * head: withHead(Product, (result) => ({ ...result, robots: 'noindex, follow' }))\n * ```\n */\nexport function withHead<T>(\n route: { head: (ctx: TwilightContext, data: T) => HeadDescriptor },\n extend?: (result: HeadDescriptor, _ctx: TwilightContext, data: T) => HeadDescriptor\n): (_ctx: Record<string, unknown>) => Record<string, unknown> {\n return (ctx: HeadContext) => {\n const loaderData = ctx.loaderData;\n\n if (!loaderData) return {};\n\n // TanStack re-runs every matched route's head() during client hydration,\n // where the twilight module store can still be empty. Recover it from the\n // match context TanStack has already resolved before giving up.\n ensureTwilightContextFromMatches(ctx.matches);\n\n try {\n const context = getTwilightContext();\n const result = route.head(context, loaderData as T);\n const extended = extend ? extend(result, context, loaderData as T) : result;\n const finalResult = withPageUrl(appendStoreTitle(extended, context.settings), context);\n\n return tanstackHeadAdapter(finalResult);\n } catch (error) {\n // A head function must never throw: TanStack surfaces the throw as a\n // hydration error, React then discards the server-rendered tree and the\n // storefront renders blank. Dropping this route's head tags degrades\n // gracefully — the server-rendered ones stay in the document.\n if (error instanceof SettingsError) return {};\n throw error;\n }\n };\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { useOpeningHours } from './chunk-ZTH65CJY.js';
2
- import { useIsProduct } from './chunk-V7QFIGQ4.js';
1
+ import { useOpeningHours } from './chunk-6UG4IVUF.js';
2
+ import { useIsProduct } from './chunk-UWDUMPL7.js';
3
3
  import { useTranslation } from './chunk-TYNZ5B2B.js';
4
4
  import { useTwilight } from './chunk-DF6FBKDN.js';
5
5
  import { useState } from 'react';
@@ -54,5 +54,5 @@ function StoreClosedNotification(_props) {
54
54
  }
55
55
 
56
56
  export { StoreClosedNotification };
57
- //# sourceMappingURL=chunk-UAKYRNUV.js.map
58
- //# sourceMappingURL=chunk-UAKYRNUV.js.map
57
+ //# sourceMappingURL=chunk-3DVAXIY3.js.map
58
+ //# sourceMappingURL=chunk-3DVAXIY3.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/store/StoreClosedNotification.tsx"],"names":[],"mappings":";;;;;;;AAsBO,SAAS,wBAAwB,MAAA,EAAsC;AAC5E,EAAA,MAAM,EAAE,KAAA,EAAM,GAAI,WAAA,EAAY;AAC9B,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,cAAA,EAAe;AAC7B,EAAA,MAAM,EAAE,QAAQ,SAAA,EAAW,iBAAA,KAAsB,eAAA,CAAgB,KAAA,CAAM,UAAU,aAAa,CAAA;AAC9F,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAS,KAAK,CAAA;AAGhD,EAAA,MAAM,gBAAgB,YAAA,EAAa;AAGnC,EAAA,IAAI,CAAC,aAAA,IAAiB,CAAC,aAAa,MAAA,IAAU,SAAA,IAAa,CAAC,iBAAA,EAAmB;AAC7E,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,WAAA,GAAc,CAAC,CAAA,KAAwB;AAC3C,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,YAAA,CAAa,IAAI,CAAA;AAAA,EACnB,CAAA;AAEA,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,cAAA;AAAA,MACV,EAAA,EAAG,2BAAA;AAAA,MACH,aAAA,EAAY,2BAAA;AAAA,MACZ,KAAA,EAAO;AAAA,QACL,eAAA,EAAiB,SAAA;AAAA,QACjB,KAAA,EAAO,MAAA;AAAA,QACP,OAAA,EAAS,WAAA;AAAA,QACT,OAAA,EAAS,MAAA;AAAA,QACT,UAAA,EAAY,QAAA;AAAA,QACZ,cAAA,EAAgB,QAAA;AAAA,QAChB,QAAA,EAAU;AAAA,OACZ;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,GAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,GAAA;AAAA,YACL,EAAA,EAAG,cAAA;AAAA,YACH,OAAA,EAAS,WAAA;AAAA,YACT,KAAA,EAAO,EAAE,QAAA,EAAU,UAAA,EAAY,MAAM,EAAA,EAAI,KAAA,EAAO,MAAA,EAAQ,cAAA,EAAgB,MAAA,EAAO;AAAA,YAE/E,QAAA,kBAAA,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,cAAA,EAAe;AAAA;AAAA,SAC9B;AAAA,wBACA,GAAA,CAAC,GAAA,EAAA,EAAE,KAAA,EAAO,EAAE,MAAA,EAAQ,CAAA,EAAG,SAAA,EAAW,QAAA,EAAU,IAAA,EAAM,CAAA,EAAE,EACjD,QAAA,EAAA,CAAA,CAAE,2BAAA,EAA6B;AAAA,UAC9B,YAAA,EAAc,qPAAkD,iBAAiB,CAAA,CAAA,CAAA;AAAA,UACjF,QAAA,EAAU;AAAA,SACX,CAAA,EACH;AAAA;AAAA;AAAA,GACF;AAEJ","file":"chunk-UAKYRNUV.js","sourcesContent":["import { useState } from 'react';\nimport { useIsProduct } from '../../providers/NavigationProvider';\nimport { useTwilight } from '../../providers/TwilightProvider';\nimport { useOpeningHours } from '../../hooks/useOpeningHours';\nimport { useTranslation } from '../../providers/I18nProvider';\n\nexport interface StoreClosedNotificationProps {\n /** Whether to show the notification (defaults to true when store is closed on product page) */\n show?: boolean;\n}\n\n/**\n * StoreClosedNotification - Shows a notification bar when the store is closed.\n *\n * Mirrors PHP ReceivingOrdersTimesWidget:\n * - Only shows on product pages\n * - Only shows when store is closed for receiving orders\n * - Displays when the store will open next\n * - Has a close button to dismiss\n *\n * Injected via hook registry at body:start.\n */\nexport function StoreClosedNotification(_props: StoreClosedNotificationProps) {\n const { store } = useTwilight();\n const { t } = useTranslation();\n const { isOpen, isEnabled, nextOpenFormatted } = useOpeningHours(store.settings?.opening_hours);\n const [dismissed, setDismissed] = useState(false);\n\n // Check if we're on a product page\n const isProductPage = useIsProduct();\n\n // Conditions: product page, opening hours enabled, store closed, not dismissed\n if (!isProductPage || !isEnabled || isOpen || dismissed || !nextOpenFormatted) {\n return null;\n }\n\n const handleClose = (e: React.MouseEvent) => {\n e.preventDefault();\n setDismissed(true);\n };\n\n return (\n <div\n className=\"store-notify\"\n id=\"store-closed-notification\"\n data-testid=\"store-closed-notification\"\n style={{\n backgroundColor: '#d63031',\n color: '#fff',\n padding: '10px 15px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n position: 'relative',\n }}\n >\n <a\n href=\"#\"\n id=\"notify-close\"\n onClick={handleClose}\n style={{ position: 'absolute', left: 15, color: '#fff', textDecoration: 'none' }}\n >\n <i className=\"sicon-cancel\" />\n </a>\n <p style={{ margin: 0, textAlign: 'center', flex: 1 }}>\n {t('store.closed_notification', {\n defaultValue: `المتجر حاليا مغلق لاستقبال الطلبات وسيتم فتحه (${nextOpenFormatted})`,\n nextOpen: nextOpenFormatted,\n })}\n </p>\n </div>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/components/store/StoreClosedNotification.tsx"],"names":[],"mappings":";;;;;;;AAsBO,SAAS,wBAAwB,MAAA,EAAsC;AAC5E,EAAA,MAAM,EAAE,KAAA,EAAM,GAAI,WAAA,EAAY;AAC9B,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,cAAA,EAAe;AAC7B,EAAA,MAAM,EAAE,QAAQ,SAAA,EAAW,iBAAA,KAAsB,eAAA,CAAgB,KAAA,CAAM,UAAU,aAAa,CAAA;AAC9F,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAS,KAAK,CAAA;AAGhD,EAAA,MAAM,gBAAgB,YAAA,EAAa;AAGnC,EAAA,IAAI,CAAC,aAAA,IAAiB,CAAC,aAAa,MAAA,IAAU,SAAA,IAAa,CAAC,iBAAA,EAAmB;AAC7E,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,WAAA,GAAc,CAAC,CAAA,KAAwB;AAC3C,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,YAAA,CAAa,IAAI,CAAA;AAAA,EACnB,CAAA;AAEA,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,cAAA;AAAA,MACV,EAAA,EAAG,2BAAA;AAAA,MACH,aAAA,EAAY,2BAAA;AAAA,MACZ,KAAA,EAAO;AAAA,QACL,eAAA,EAAiB,SAAA;AAAA,QACjB,KAAA,EAAO,MAAA;AAAA,QACP,OAAA,EAAS,WAAA;AAAA,QACT,OAAA,EAAS,MAAA;AAAA,QACT,UAAA,EAAY,QAAA;AAAA,QACZ,cAAA,EAAgB,QAAA;AAAA,QAChB,QAAA,EAAU;AAAA,OACZ;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,GAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,GAAA;AAAA,YACL,EAAA,EAAG,cAAA;AAAA,YACH,OAAA,EAAS,WAAA;AAAA,YACT,KAAA,EAAO,EAAE,QAAA,EAAU,UAAA,EAAY,MAAM,EAAA,EAAI,KAAA,EAAO,MAAA,EAAQ,cAAA,EAAgB,MAAA,EAAO;AAAA,YAE/E,QAAA,kBAAA,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,cAAA,EAAe;AAAA;AAAA,SAC9B;AAAA,wBACA,GAAA,CAAC,GAAA,EAAA,EAAE,KAAA,EAAO,EAAE,MAAA,EAAQ,CAAA,EAAG,SAAA,EAAW,QAAA,EAAU,IAAA,EAAM,CAAA,EAAE,EACjD,QAAA,EAAA,CAAA,CAAE,2BAAA,EAA6B;AAAA,UAC9B,YAAA,EAAc,qPAAkD,iBAAiB,CAAA,CAAA,CAAA;AAAA,UACjF,QAAA,EAAU;AAAA,SACX,CAAA,EACH;AAAA;AAAA;AAAA,GACF;AAEJ","file":"chunk-3DVAXIY3.js","sourcesContent":["import { useState } from 'react';\nimport { useIsProduct } from '../../providers/NavigationProvider';\nimport { useTwilight } from '../../providers/TwilightProvider';\nimport { useOpeningHours } from '../../hooks/useOpeningHours';\nimport { useTranslation } from '../../providers/I18nProvider';\n\nexport interface StoreClosedNotificationProps {\n /** Whether to show the notification (defaults to true when store is closed on product page) */\n show?: boolean;\n}\n\n/**\n * StoreClosedNotification - Shows a notification bar when the store is closed.\n *\n * Mirrors PHP ReceivingOrdersTimesWidget:\n * - Only shows on product pages\n * - Only shows when store is closed for receiving orders\n * - Displays when the store will open next\n * - Has a close button to dismiss\n *\n * Injected via hook registry at body:start.\n */\nexport function StoreClosedNotification(_props: StoreClosedNotificationProps) {\n const { store } = useTwilight();\n const { t } = useTranslation();\n const { isOpen, isEnabled, nextOpenFormatted } = useOpeningHours(store.settings?.opening_hours);\n const [dismissed, setDismissed] = useState(false);\n\n // Check if we're on a product page\n const isProductPage = useIsProduct();\n\n // Conditions: product page, opening hours enabled, store closed, not dismissed\n if (!isProductPage || !isEnabled || isOpen || dismissed || !nextOpenFormatted) {\n return null;\n }\n\n const handleClose = (e: React.MouseEvent) => {\n e.preventDefault();\n setDismissed(true);\n };\n\n return (\n <div\n className=\"store-notify\"\n id=\"store-closed-notification\"\n data-testid=\"store-closed-notification\"\n style={{\n backgroundColor: '#d63031',\n color: '#fff',\n padding: '10px 15px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n position: 'relative',\n }}\n >\n <a\n href=\"#\"\n id=\"notify-close\"\n onClick={handleClose}\n style={{ position: 'absolute', left: 15, color: '#fff', textDecoration: 'none' }}\n >\n <i className=\"sicon-cancel\" />\n </a>\n <p style={{ margin: 0, textAlign: 'center', flex: 1 }}>\n {t('store.closed_notification', {\n defaultValue: `المتجر حاليا مغلق لاستقبال الطلبات وسيتم فتحه (${nextOpenFormatted})`,\n nextOpen: nextOpenFormatted,\n })}\n </p>\n </div>\n );\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { resolveStoreIdentifier } from './chunk-SU7NHAYA.js';
1
+ import { resolveStoreIdentifier } from './chunk-GXZW6BJY.js';
2
2
 
3
3
  // src/utils/sdk-helpers.ts
4
4
  var isBrowser = typeof window !== "undefined";
@@ -86,5 +86,5 @@ function syncSdkThemeVersion(headers) {
86
86
  }
87
87
 
88
88
  export { getSallaSDK, getStoreIdentifier, onSallaEvent, syncSdkLocale, syncSdkThemeVersion, whenSallaLoaded, whenSallaReady };
89
- //# sourceMappingURL=chunk-OWJMPD7X.js.map
90
- //# sourceMappingURL=chunk-OWJMPD7X.js.map
89
+ //# sourceMappingURL=chunk-3NFVZJNI.js.map
90
+ //# sourceMappingURL=chunk-3NFVZJNI.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/sdk-helpers.ts"],"names":[],"mappings":"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","file":"chunk-OWJMPD7X.js","sourcesContent":["export type { StoreContext } from '../api/store';\nimport 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\n/**\n * Push the theme version the current settings name onto the Salla SDK.\n *\n * The SDK copies `settings.headers` into its axios defaults ONCE, at init, and\n * `s-version-id` is one of them. Settings refetched on the client — the shopper\n * switched market, and each market has its own version — name a different one,\n * and without this every `salla.api.*` call keeps asking for the previous\n * market's version until a full page load. Settings that name no version take\n * the header off instead, so the SDK asks for the live one like the engine's own\n * client does. No-op on the server and until the SDK exposes its api.\n */\nexport function syncSdkThemeVersion(headers: StoreContext['headers']): void {\n const sdk = getSallaSDK();\n if (!sdk) return;\n const versionId = headers?.['s-version-id'];\n try {\n if (versionId != null) sdk.api?.setHeader?.('s-version-id', String(versionId));\n else delete sdk.api?.axios?.defaults?.headers?.common?.['s-version-id'];\n } catch {\n // SDK partially loaded — the header is re-asserted on the next navigation.\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/utils/sdk-helpers.ts"],"names":[],"mappings":"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","file":"chunk-3NFVZJNI.js","sourcesContent":["export type { StoreContext } from '../api/store';\nimport 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\n/**\n * Push the theme version the current settings name onto the Salla SDK.\n *\n * The SDK copies `settings.headers` into its axios defaults ONCE, at init, and\n * `s-version-id` is one of them. Settings refetched on the client — the shopper\n * switched market, and each market has its own version — name a different one,\n * and without this every `salla.api.*` call keeps asking for the previous\n * market's version until a full page load. Settings that name no version take\n * the header off instead, so the SDK asks for the live one like the engine's own\n * client does. No-op on the server and until the SDK exposes its api.\n */\nexport function syncSdkThemeVersion(headers: StoreContext['headers']): void {\n const sdk = getSallaSDK();\n if (!sdk) return;\n const versionId = headers?.['s-version-id'];\n try {\n if (versionId != null) sdk.api?.setHeader?.('s-version-id', String(versionId));\n else delete sdk.api?.axios?.defaults?.headers?.common?.['s-version-id'];\n } catch {\n // SDK partially loaded — the header is re-asserted on the next navigation.\n }\n}\n"]}
@@ -0,0 +1,14 @@
1
+ import { lazy } from 'react';
2
+
3
+ // src/components/cart/lazy.ts
4
+ var LazyCartItem = lazy(() => import('./CartItem-7QCAQ3QQ.js').then((m) => ({ default: m.CartItem })));
5
+ var LazyCartSummary = lazy(
6
+ () => import('./CartSummary-ZPG7IAXE.js').then((m) => ({ default: m.CartSummary }))
7
+ );
8
+ var LazySeoCartWidget = lazy(
9
+ () => import('./SeoCartWidget-7UDOVSWP.js').then((m) => ({ default: m.SeoCartWidget }))
10
+ );
11
+
12
+ export { LazyCartItem, LazyCartSummary, LazySeoCartWidget };
13
+ //# sourceMappingURL=chunk-47C3MTZI.js.map
14
+ //# sourceMappingURL=chunk-47C3MTZI.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/cart/lazy.ts"],"names":[],"mappings":";;;AAMO,IAAM,YAAA,GAAe,IAAA,CAAK,MAAM,OAAO,wBAAY,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,MAAO,EAAE,OAAA,EAAS,CAAA,CAAE,QAAA,GAAW,CAAC;AAE3F,IAAM,eAAA,GAAkB,IAAA;AAAA,EAAK,MAClC,OAAO,2BAAe,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,MAAO,EAAE,OAAA,EAAS,CAAA,CAAE,WAAA,EAAY,CAAE;AAClE;AAEO,IAAM,iBAAA,GAAoB,IAAA;AAAA,EAAK,MACpC,OAAO,6BAAiB,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,MAAO,EAAE,OAAA,EAAS,CAAA,CAAE,aAAA,EAAc,CAAE;AACtE","file":"chunk-JJIXGYVN.js","sourcesContent":["import { lazy } from 'react';\n\n/**\n * Lazy-loaded cart components\n * Use these for code-splitting cart sections\n */\nexport const LazyCartItem = lazy(() => import('./CartItem').then((m) => ({ default: m.CartItem })));\n\nexport const LazyCartSummary = lazy(() =>\n import('./CartSummary').then((m) => ({ default: m.CartSummary }))\n);\n\nexport const LazySeoCartWidget = lazy(() =>\n import('./SeoCartWidget').then((m) => ({ default: m.SeoCartWidget }))\n);\n"]}
1
+ {"version":3,"sources":["../src/components/cart/lazy.ts"],"names":[],"mappings":";;;AAMO,IAAM,YAAA,GAAe,IAAA,CAAK,MAAM,OAAO,wBAAY,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,MAAO,EAAE,OAAA,EAAS,CAAA,CAAE,QAAA,GAAW,CAAC;AAE3F,IAAM,eAAA,GAAkB,IAAA;AAAA,EAAK,MAClC,OAAO,2BAAe,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,MAAO,EAAE,OAAA,EAAS,CAAA,CAAE,WAAA,EAAY,CAAE;AAClE;AAEO,IAAM,iBAAA,GAAoB,IAAA;AAAA,EAAK,MACpC,OAAO,6BAAiB,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,MAAO,EAAE,OAAA,EAAS,CAAA,CAAE,aAAA,EAAc,CAAE;AACtE","file":"chunk-47C3MTZI.js","sourcesContent":["import { lazy } from 'react';\n\n/**\n * Lazy-loaded cart components\n * Use these for code-splitting cart sections\n */\nexport const LazyCartItem = lazy(() => import('./CartItem').then((m) => ({ default: m.CartItem })));\n\nexport const LazyCartSummary = lazy(() =>\n import('./CartSummary').then((m) => ({ default: m.CartSummary }))\n);\n\nexport const LazySeoCartWidget = lazy(() =>\n import('./SeoCartWidget').then((m) => ({ default: m.SeoCartWidget }))\n);\n"]}
@@ -1,5 +1,5 @@
1
- import { getActiveScope, api } from './chunk-KTLQV4Q4.js';
2
- import { getTwilightContext } from './chunk-HG4B4F4N.js';
1
+ import { getActiveScope, api } from './chunk-YDSWLCOY.js';
2
+ import { getTwilightContext } from './chunk-JNAJTCJD.js';
3
3
  import { queryOptions } from '@tanstack/react-query';
4
4
 
5
5
  function advertisementsFor(ads, pageSlug) {
@@ -25,5 +25,5 @@ var advertisement = {
25
25
  };
26
26
 
27
27
  export { advertisement, advertisementsFor };
28
- //# sourceMappingURL=chunk-YSRKR5DE.js.map
29
- //# sourceMappingURL=chunk-YSRKR5DE.js.map
28
+ //# sourceMappingURL=chunk-4PT5MXGR.js.map
29
+ //# sourceMappingURL=chunk-4PT5MXGR.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/api/advertisement.ts"],"names":[],"mappings":";;;;AAkBO,SAAS,iBAAA,CACd,KACA,QAAA,EACiB;AACjB,EAAA,OAAO,GAAA,CAAI,MAAA;AAAA,IACT,CAAC,EAAA,KACC,KAAA,CAAM,QAAQ,EAAA,CAAG,KAAK,MACrB,EAAA,CAAG,KAAA,CAAM,QAAA,CAAS,KAAK,KAAM,CAAC,CAAC,YAAY,EAAA,CAAG,KAAA,CAAM,SAAS,QAAQ,CAAA;AAAA,GAC1E;AACF;AAEO,IAAM,aAAA,GAAgB;AAAA;AAAA,EAE3B,MAAM,YAAsC;AAE1C,IAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,GAAA,CACpB,GAAA,CAAI,gBAAA,EAAkB,EAAE,OAAA,EAAS,GAAA,EAAM,CAAA,CACvC,IAAA,EAAiC;AACpC,IAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,GAAI,OAAO,EAAC;AAAA,EACvC,CAAA;AAAA,EAEA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,MACJ,YAAA,CAAa;AAAA,MACX,QAAA,EAAU,CAAC,gBAAA,EAAkB,kBAAA,EAAmB,CAAE,QAAQ,EAAE,KAAA,EAAO,cAAA,EAAe,EAAG,CAAA;AAAA,MACrF,OAAA,EAAS,MAAM,aAAA,CAAc,IAAA,EAAK;AAAA,MAClC,SAAA,EAAW,QAAA;AAAA;AAAA,MAEX,KAAA,EAAO;AAAA,KACR;AAAA;AAEP","file":"chunk-YSRKR5DE.js","sourcesContent":["import { queryOptions } from '@tanstack/react-query';\nimport { api, getActiveScope } from './client';\nimport { getTwilightContext } from '../twilight/context';\n\n/** A merchant's announcement bar, as `GET advertisements` returns it. */\nexport interface Advertisement {\n id: number;\n title?: string;\n description?: string;\n icon?: string | null;\n url?: string | null;\n target?: string | null;\n colors?: { bg?: string; text?: string };\n /** Page slugs the ad shows on (`salla.config` `page.slug`), or `all`. */\n pages?: string[];\n}\n\n/** The ads a page shows: the rule the API applies to `?page=`, run on the full list. */\nexport function advertisementsFor(\n ads: readonly Advertisement[],\n pageSlug: string | null | undefined\n): Advertisement[] {\n return ads.filter(\n (ad) =>\n Array.isArray(ad.pages) &&\n (ad.pages.includes('all') || (!!pageSlug && ad.pages.includes(pageSlug)))\n );\n}\n\nexport const advertisement = {\n /** Every active ad, unfiltered: one request serves all pages, filtered with `advertisementsFor`. */\n list: async (): Promise<Advertisement[]> => {\n // Short timeout: it is fetched with the store settings on every server render.\n const { data } = await api\n .get('advertisements', { timeout: 3000 })\n .json<{ data?: Advertisement[] }>();\n return Array.isArray(data) ? data : [];\n },\n\n queries: {\n list: () =>\n queryOptions({\n queryKey: ['advertisements', getTwilightContext().locale, { scope: getActiveScope() }],\n queryFn: () => advertisement.list(),\n staleTime: Infinity,\n // Awaited in rootBeforeLoad: a retry would double the 3s budget. `PageAdvertisements` retries.\n retry: 0,\n }),\n },\n};\n"]}
1
+ {"version":3,"sources":["../src/api/advertisement.ts"],"names":[],"mappings":";;;;AAkBO,SAAS,iBAAA,CACd,KACA,QAAA,EACiB;AACjB,EAAA,OAAO,GAAA,CAAI,MAAA;AAAA,IACT,CAAC,EAAA,KACC,KAAA,CAAM,QAAQ,EAAA,CAAG,KAAK,MACrB,EAAA,CAAG,KAAA,CAAM,QAAA,CAAS,KAAK,KAAM,CAAC,CAAC,YAAY,EAAA,CAAG,KAAA,CAAM,SAAS,QAAQ,CAAA;AAAA,GAC1E;AACF;AAEO,IAAM,aAAA,GAAgB;AAAA;AAAA,EAE3B,MAAM,YAAsC;AAE1C,IAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,GAAA,CACpB,GAAA,CAAI,gBAAA,EAAkB,EAAE,OAAA,EAAS,GAAA,EAAM,CAAA,CACvC,IAAA,EAAiC;AACpC,IAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,GAAI,OAAO,EAAC;AAAA,EACvC,CAAA;AAAA,EAEA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,MACJ,YAAA,CAAa;AAAA,MACX,QAAA,EAAU,CAAC,gBAAA,EAAkB,kBAAA,EAAmB,CAAE,QAAQ,EAAE,KAAA,EAAO,cAAA,EAAe,EAAG,CAAA;AAAA,MACrF,OAAA,EAAS,MAAM,aAAA,CAAc,IAAA,EAAK;AAAA,MAClC,SAAA,EAAW,QAAA;AAAA;AAAA,MAEX,KAAA,EAAO;AAAA,KACR;AAAA;AAEP","file":"chunk-4PT5MXGR.js","sourcesContent":["import { queryOptions } from '@tanstack/react-query';\nimport { api, getActiveScope } from './client';\nimport { getTwilightContext } from '../twilight/context';\n\n/** A merchant's announcement bar, as `GET advertisements` returns it. */\nexport interface Advertisement {\n id: number;\n title?: string;\n description?: string;\n icon?: string | null;\n url?: string | null;\n target?: string | null;\n colors?: { bg?: string; text?: string };\n /** Page slugs the ad shows on (`salla.config` `page.slug`), or `all`. */\n pages?: string[];\n}\n\n/** The ads a page shows: the rule the API applies to `?page=`, run on the full list. */\nexport function advertisementsFor(\n ads: readonly Advertisement[],\n pageSlug: string | null | undefined\n): Advertisement[] {\n return ads.filter(\n (ad) =>\n Array.isArray(ad.pages) &&\n (ad.pages.includes('all') || (!!pageSlug && ad.pages.includes(pageSlug)))\n );\n}\n\nexport const advertisement = {\n /** Every active ad, unfiltered: one request serves all pages, filtered with `advertisementsFor`. */\n list: async (): Promise<Advertisement[]> => {\n // Short timeout: it is fetched with the store settings on every server render.\n const { data } = await api\n .get('advertisements', { timeout: 3000 })\n .json<{ data?: Advertisement[] }>();\n return Array.isArray(data) ? data : [];\n },\n\n queries: {\n list: () =>\n queryOptions({\n queryKey: ['advertisements', getTwilightContext().locale, { scope: getActiveScope() }],\n queryFn: () => advertisement.list(),\n staleTime: Infinity,\n // Awaited in rootBeforeLoad: a retry would double the 3s budget. `PageAdvertisements` retries.\n retry: 0,\n }),\n },\n};\n"]}