@salla.sa/twilight-theme-engine 1.0.69 → 1.0.70

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 (250) hide show
  1. package/dist/{AddToCartForm-V5Q4YFK7.js → AddToCartForm-RVJDH34Q.js} +3 -3
  2. package/dist/{AddToCartForm-V5Q4YFK7.js.map → AddToCartForm-RVJDH34Q.js.map} +1 -1
  3. package/dist/{BlogAuthorPage-EYCANLF2.js → BlogAuthorPage-HRUKRVXC.js} +21 -21
  4. package/dist/{BlogAuthorPage-EYCANLF2.js.map → BlogAuthorPage-HRUKRVXC.js.map} +1 -1
  5. package/dist/{BlogCategoryPage-HVKYA62V.js → BlogCategoryPage-X2BB6FPW.js} +21 -21
  6. package/dist/{BlogCategoryPage-HVKYA62V.js.map → BlogCategoryPage-X2BB6FPW.js.map} +1 -1
  7. package/dist/{BlogPage-CQLHFLXK.js → BlogPage-LMN2BBLX.js} +19 -19
  8. package/dist/{BlogPage-CQLHFLXK.js.map → BlogPage-LMN2BBLX.js.map} +1 -1
  9. package/dist/{BlogSinglePage-Y4GTYEX5.js → BlogSinglePage-D46SPQTX.js} +19 -19
  10. package/dist/{BlogSinglePage-Y4GTYEX5.js.map → BlogSinglePage-D46SPQTX.js.map} +1 -1
  11. package/dist/{BlogTagPage-7BHVS4M2.js → BlogTagPage-WEJAPD5G.js} +21 -21
  12. package/dist/{BlogTagPage-7BHVS4M2.js.map → BlogTagPage-WEJAPD5G.js.map} +1 -1
  13. package/dist/{BrandsPage-ZJWQFMLT.js → BrandsPage-4M2DWNN3.js} +20 -20
  14. package/dist/{BrandsPage-ZJWQFMLT.js.map → BrandsPage-4M2DWNN3.js.map} +1 -1
  15. package/dist/{Breadcrumb-VQQDHSCR.js → Breadcrumb-74NZ4CAI.js} +19 -19
  16. package/dist/{Breadcrumb-VQQDHSCR.js.map → Breadcrumb-74NZ4CAI.js.map} +1 -1
  17. package/dist/{CartItem-3LBPOY7V.js → CartItem-AIGCVTNA.js} +19 -19
  18. package/dist/{CartItem-3LBPOY7V.js.map → CartItem-AIGCVTNA.js.map} +1 -1
  19. package/dist/{CartSummary-4L7L3566.js → CartSummary-ONAQNID6.js} +19 -19
  20. package/dist/{CartSummary-4L7L3566.js.map → CartSummary-ONAQNID6.js.map} +1 -1
  21. package/dist/{Copyright-PPGYFGPF.js → Copyright-M3Y6AW2X.js} +4 -4
  22. package/dist/{Copyright-PPGYFGPF.js.map → Copyright-M3Y6AW2X.js.map} +1 -1
  23. package/dist/{CustomerLayout-HWBZ54GG.js → CustomerLayout-HXVLROR7.js} +19 -19
  24. package/dist/{CustomerLayout-HWBZ54GG.js.map → CustomerLayout-HXVLROR7.js.map} +1 -1
  25. package/dist/{Footer-Q5EZE6RQ.js → Footer-VJXKRENW.js} +19 -19
  26. package/dist/{Footer-Q5EZE6RQ.js.map → Footer-VJXKRENW.js.map} +1 -1
  27. package/dist/{Header-Y3KW2LCJ.js → Header-2BEJOO3R.js} +8 -8
  28. package/dist/{Header-Y3KW2LCJ.js.map → Header-2BEJOO3R.js.map} +1 -1
  29. package/dist/{LoyaltyPage-SLRGEINN.js → LoyaltyPage-IGSNMPPU.js} +19 -19
  30. package/dist/{LoyaltyPage-SLRGEINN.js.map → LoyaltyPage-IGSNMPPU.js.map} +1 -1
  31. package/dist/{LoyaltyPointsPage-ELOIXQJH.js → LoyaltyPointsPage-Z3GWZVHU.js} +3 -3
  32. package/dist/{LoyaltyPointsPage-ELOIXQJH.js.map → LoyaltyPointsPage-Z3GWZVHU.js.map} +1 -1
  33. package/dist/{MainMenu-IVZDV6HY.js → MainMenu-BUG3VS7Y.js} +9 -10
  34. package/dist/MainMenu-BUG3VS7Y.js.map +1 -0
  35. package/dist/{MasterLayout-GKZ5F73U.js → MasterLayout-XOMOFH26.js} +19 -19
  36. package/dist/{MasterLayout-GKZ5F73U.js.map → MasterLayout-XOMOFH26.js.map} +1 -1
  37. package/dist/{MobileMenu-SCAWSSXT.js → MobileMenu-U5Y43SK2.js} +20 -20
  38. package/dist/{MobileMenu-SCAWSSXT.js.map → MobileMenu-U5Y43SK2.js.map} +1 -1
  39. package/dist/{NotificationsPage-O42AKXIZ.js → NotificationsPage-WOW7R5EL.js} +19 -19
  40. package/dist/{NotificationsPage-O42AKXIZ.js.map → NotificationsPage-WOW7R5EL.js.map} +1 -1
  41. package/dist/{OrderSinglePage-R7Z2YDO4.js → OrderSinglePage-SFZEAMAG.js} +20 -20
  42. package/dist/{OrderSinglePage-R7Z2YDO4.js.map → OrderSinglePage-SFZEAMAG.js.map} +1 -1
  43. package/dist/{OrdersPage-DHV7YH7A.js → OrdersPage-2KWKJZAM.js} +19 -19
  44. package/dist/{OrdersPage-DHV7YH7A.js.map → OrdersPage-2KWKJZAM.js.map} +1 -1
  45. package/dist/{PageSingle-TH4W7HCK.js → PageSingle-D4UTD6XX.js} +8 -9
  46. package/dist/PageSingle-D4UTD6XX.js.map +1 -0
  47. package/dist/{ProductDetails-JC4V7MIG.js → ProductDetails-53UVIHR3.js} +4 -4
  48. package/dist/{ProductDetails-JC4V7MIG.js.map → ProductDetails-53UVIHR3.js.map} +1 -1
  49. package/dist/{ProfilePage-F5NO3B4C.js → ProfilePage-WZQJBMP3.js} +19 -19
  50. package/dist/{ProfilePage-F5NO3B4C.js.map → ProfilePage-WZQJBMP3.js.map} +1 -1
  51. package/dist/{SeoCartWidget-GSGSRTJN.js → SeoCartWidget-EZD6YRUG.js} +19 -19
  52. package/dist/{SeoCartWidget-GSGSRTJN.js.map → SeoCartWidget-EZD6YRUG.js.map} +1 -1
  53. package/dist/{SettingsPage-BYYBYEEQ.js → SettingsPage-4GTH7FJS.js} +19 -19
  54. package/dist/{SettingsPage-BYYBYEEQ.js.map → SettingsPage-4GTH7FJS.js.map} +1 -1
  55. package/dist/{StoreClosedNotification-TMVQPUSU.js → StoreClosedNotification-SUKGXBTP.js} +20 -20
  56. package/dist/{StoreClosedNotification-TMVQPUSU.js.map → StoreClosedNotification-SUKGXBTP.js.map} +1 -1
  57. package/dist/{TestimonialsPage-WXSORMJA.js → TestimonialsPage-YKXSTNWR.js} +8 -9
  58. package/dist/TestimonialsPage-YKXSTNWR.js.map +1 -0
  59. package/dist/{ThankYouPage-FVWY3VBU.js → ThankYouPage-CMMQ3JFO.js} +19 -19
  60. package/dist/{ThankYouPage-FVWY3VBU.js.map → ThankYouPage-CMMQ3JFO.js.map} +1 -1
  61. package/dist/{WalletPage-XYU47SH2.js → WalletPage-LK6XXNHY.js} +20 -20
  62. package/dist/{WalletPage-XYU47SH2.js.map → WalletPage-LK6XXNHY.js.map} +1 -1
  63. package/dist/{WishlistPage-GHMUTPSM.js → WishlistPage-FAEXGOAH.js} +21 -21
  64. package/dist/{WishlistPage-GHMUTPSM.js.map → WishlistPage-FAEXGOAH.js.map} +1 -1
  65. package/dist/api/apps.js +4 -5
  66. package/dist/api/brands.js +5 -6
  67. package/dist/api/cart.js +5 -6
  68. package/dist/api/category.js +5 -6
  69. package/dist/api/client.js +3 -4
  70. package/dist/api/home.js +4 -5
  71. package/dist/api/loyalty.js +5 -6
  72. package/dist/api/menu.js +4 -5
  73. package/dist/api/notification.js +4 -5
  74. package/dist/api/order.js +5 -6
  75. package/dist/api/page.js +5 -6
  76. package/dist/api/product.js +5 -6
  77. package/dist/api/profile.js +3 -4
  78. package/dist/api/profile.js.map +1 -1
  79. package/dist/api/store.js +4 -5
  80. package/dist/api/translations.js +4 -5
  81. package/dist/api/user.js +4 -5
  82. package/dist/api/wishlist.js +6 -7
  83. package/dist/chunk-3IHFA2X5.js +33 -0
  84. package/dist/chunk-3IHFA2X5.js.map +1 -0
  85. package/dist/{chunk-KPEG5XY3.js → chunk-4YHSQSM6.js} +4 -4
  86. package/dist/{chunk-KPEG5XY3.js.map → chunk-4YHSQSM6.js.map} +1 -1
  87. package/dist/{chunk-634A6AYN.js → chunk-5H4NIOTY.js} +4 -4
  88. package/dist/{chunk-634A6AYN.js.map → chunk-5H4NIOTY.js.map} +1 -1
  89. package/dist/{chunk-FZH27PXS.js → chunk-5HOD4BKK.js} +3 -3
  90. package/dist/{chunk-FZH27PXS.js.map → chunk-5HOD4BKK.js.map} +1 -1
  91. package/dist/{chunk-M5WPU7BR.js → chunk-5ZTYXQ7T.js} +5 -5
  92. package/dist/{chunk-M5WPU7BR.js.map → chunk-5ZTYXQ7T.js.map} +1 -1
  93. package/dist/{chunk-AMASCYNB.js → chunk-6YIAULAP.js} +9 -8
  94. package/dist/chunk-6YIAULAP.js.map +1 -0
  95. package/dist/{chunk-X3GCZAOZ.js → chunk-7BGEGHAI.js} +3 -3
  96. package/dist/{chunk-X3GCZAOZ.js.map → chunk-7BGEGHAI.js.map} +1 -1
  97. package/dist/{chunk-VR4FXFPY.js → chunk-7N52RMEY.js} +43 -18
  98. package/dist/chunk-7N52RMEY.js.map +1 -0
  99. package/dist/{chunk-KRUPRDOL.js → chunk-7PYHB3PP.js} +4 -4
  100. package/dist/{chunk-KRUPRDOL.js.map → chunk-7PYHB3PP.js.map} +1 -1
  101. package/dist/{chunk-DWIS2VUE.js → chunk-7W7SLN5M.js} +4 -4
  102. package/dist/{chunk-DWIS2VUE.js.map → chunk-7W7SLN5M.js.map} +1 -1
  103. package/dist/{chunk-CUKPKJCF.js → chunk-A32NANNC.js} +3 -3
  104. package/dist/{chunk-CUKPKJCF.js.map → chunk-A32NANNC.js.map} +1 -1
  105. package/dist/chunk-AMEU3DNR.js +14 -0
  106. package/dist/{chunk-HURQEDJZ.js.map → chunk-AMEU3DNR.js.map} +1 -1
  107. package/dist/{chunk-OVYCFJGU.js → chunk-BAOBHXU5.js} +6 -6
  108. package/dist/{chunk-OVYCFJGU.js.map → chunk-BAOBHXU5.js.map} +1 -1
  109. package/dist/{chunk-SBXD5CSG.js → chunk-BMVQEOBM.js} +4 -4
  110. package/dist/{chunk-SBXD5CSG.js.map → chunk-BMVQEOBM.js.map} +1 -1
  111. package/dist/{chunk-YNWP5VPR.js → chunk-DIVEHHMD.js} +3 -3
  112. package/dist/{chunk-YNWP5VPR.js.map → chunk-DIVEHHMD.js.map} +1 -1
  113. package/dist/{chunk-BRZ74D5D.js → chunk-DY5WGKDX.js} +4 -4
  114. package/dist/{chunk-BRZ74D5D.js.map → chunk-DY5WGKDX.js.map} +1 -1
  115. package/dist/{chunk-DCH3X6TO.js → chunk-E7PYHBCX.js} +4 -4
  116. package/dist/{chunk-DCH3X6TO.js.map → chunk-E7PYHBCX.js.map} +1 -1
  117. package/dist/{chunk-AEPBDT5F.js → chunk-EJK33TNK.js} +12 -13
  118. package/dist/chunk-EJK33TNK.js.map +1 -0
  119. package/dist/{chunk-EARXTU6P.js → chunk-FGROIU3Y.js} +3 -3
  120. package/dist/{chunk-EARXTU6P.js.map → chunk-FGROIU3Y.js.map} +1 -1
  121. package/dist/{chunk-GEQKQQND.js → chunk-GTG22RZG.js} +3 -3
  122. package/dist/{chunk-GEQKQQND.js.map → chunk-GTG22RZG.js.map} +1 -1
  123. package/dist/{chunk-44ZVB7F5.js → chunk-H2DXJCJP.js} +4 -4
  124. package/dist/{chunk-44ZVB7F5.js.map → chunk-H2DXJCJP.js.map} +1 -1
  125. package/dist/{chunk-2XGQSJKH.js → chunk-HBTIZWT2.js} +3 -3
  126. package/dist/{chunk-2XGQSJKH.js.map → chunk-HBTIZWT2.js.map} +1 -1
  127. package/dist/{chunk-66JAXHHY.js → chunk-I26VPNDP.js} +3 -3
  128. package/dist/{chunk-66JAXHHY.js.map → chunk-I26VPNDP.js.map} +1 -1
  129. package/dist/chunk-J427UFSZ.js +186 -0
  130. package/dist/chunk-J427UFSZ.js.map +1 -0
  131. package/dist/{chunk-SR4OTLTJ.js → chunk-LPQFTXBB.js} +9 -3
  132. package/dist/chunk-LPQFTXBB.js.map +1 -0
  133. package/dist/{chunk-SVPXQCOA.js → chunk-MISI3T6V.js} +4 -3
  134. package/dist/chunk-MISI3T6V.js.map +1 -0
  135. package/dist/{chunk-2D5HJQZK.js → chunk-MSUGP566.js} +4 -4
  136. package/dist/{chunk-2D5HJQZK.js.map → chunk-MSUGP566.js.map} +1 -1
  137. package/dist/{chunk-GL6QTNZA.js → chunk-N3BSUMD7.js} +3 -3
  138. package/dist/{chunk-GL6QTNZA.js.map → chunk-N3BSUMD7.js.map} +1 -1
  139. package/dist/{chunk-URWXE2RQ.js → chunk-NFE2H5JE.js} +5 -5
  140. package/dist/{chunk-URWXE2RQ.js.map → chunk-NFE2H5JE.js.map} +1 -1
  141. package/dist/{chunk-P6CLO4M7.js → chunk-OGVUFMLX.js} +3 -3
  142. package/dist/{chunk-P6CLO4M7.js.map → chunk-OGVUFMLX.js.map} +1 -1
  143. package/dist/{chunk-RMFDKT5P.js → chunk-P6EOXGUE.js} +4 -4
  144. package/dist/{chunk-RMFDKT5P.js.map → chunk-P6EOXGUE.js.map} +1 -1
  145. package/dist/{chunk-IDRGC4LA.js → chunk-PPU6MI3G.js} +7 -7
  146. package/dist/{chunk-IDRGC4LA.js.map → chunk-PPU6MI3G.js.map} +1 -1
  147. package/dist/{chunk-TYLKNVQA.js → chunk-QVJDYSCT.js} +89 -4
  148. package/dist/chunk-QVJDYSCT.js.map +1 -0
  149. package/dist/{chunk-4YWBXQV5.js → chunk-R5MZV6KW.js} +4 -4
  150. package/dist/{chunk-4YWBXQV5.js.map → chunk-R5MZV6KW.js.map} +1 -1
  151. package/dist/{chunk-SSPAMQRV.js → chunk-SDIQHTDG.js} +4 -4
  152. package/dist/{chunk-SSPAMQRV.js.map → chunk-SDIQHTDG.js.map} +1 -1
  153. package/dist/{chunk-W5MS4UNG.js → chunk-USN5NHJ5.js} +3 -3
  154. package/dist/{chunk-W5MS4UNG.js.map → chunk-USN5NHJ5.js.map} +1 -1
  155. package/dist/{chunk-YKWNH4S2.js → chunk-UZUHDKKD.js} +4 -4
  156. package/dist/{chunk-YKWNH4S2.js.map → chunk-UZUHDKKD.js.map} +1 -1
  157. package/dist/{chunk-G73YJT4F.js → chunk-VLONFUZM.js} +7 -7
  158. package/dist/{chunk-G73YJT4F.js.map → chunk-VLONFUZM.js.map} +1 -1
  159. package/dist/{chunk-5NUQ6UAK.js → chunk-VVAV3DJL.js} +6 -6
  160. package/dist/{chunk-5NUQ6UAK.js.map → chunk-VVAV3DJL.js.map} +1 -1
  161. package/dist/{chunk-6ETNDIHM.js → chunk-VX2T7JCB.js} +4 -5
  162. package/dist/chunk-VX2T7JCB.js.map +1 -0
  163. package/dist/{chunk-OJW6UOS4.js → chunk-VYJDRAWX.js} +3 -3
  164. package/dist/{chunk-OJW6UOS4.js.map → chunk-VYJDRAWX.js.map} +1 -1
  165. package/dist/components/cart/index.js +1 -1
  166. package/dist/components/common/index.js +1 -1
  167. package/dist/components/drawer/index.js +17 -17
  168. package/dist/components/home/index.js +21 -21
  169. package/dist/components/layout/index.js +1 -1
  170. package/dist/components/product/ProductGallery.d.ts.map +1 -1
  171. package/dist/components/product/index.js +18 -18
  172. package/dist/components/store/index.js +19 -19
  173. package/dist/components/toast/Toaster.d.ts.map +1 -1
  174. package/dist/components/toast/index.js +6 -1
  175. package/dist/components/toast/index.js.map +1 -1
  176. package/dist/components/tracking/index.js +1 -1
  177. package/dist/document-class-APAX4M7D.js +25 -0
  178. package/dist/{document-class-NUILLVSR.js.map → document-class-APAX4M7D.js.map} +1 -1
  179. package/dist/hooks/index.js +17 -17
  180. package/dist/hooks/useBlogLike.js +1 -1
  181. package/dist/hooks/useComments.js +3 -4
  182. package/dist/hooks/useGtm.js +17 -17
  183. package/dist/hooks/useMoney.js +17 -17
  184. package/dist/hooks/useProduct.js +3 -4
  185. package/dist/hooks/useStore.js +17 -17
  186. package/dist/hooks/useUser.js +5 -6
  187. package/dist/index.js +17 -17
  188. package/dist/native-app/index.d.ts +27 -0
  189. package/dist/native-app/index.d.ts.map +1 -0
  190. package/dist/native-app/index.js +8 -0
  191. package/dist/native-app/index.js.map +1 -0
  192. package/dist/{navigation-F2TD5X2P.js → navigation-P3GZOWUU.js} +8 -7
  193. package/dist/{navigation-F2TD5X2P.js.map → navigation-P3GZOWUU.js.map} +1 -1
  194. package/dist/{navigation-CJHPA74M.js → navigation-TA3I3XEC.js} +5 -5
  195. package/dist/{navigation-CJHPA74M.js.map → navigation-TA3I3XEC.js.map} +1 -1
  196. package/dist/{not-found-63YCT7SJ.js → not-found-G4N25RWR.js} +20 -20
  197. package/dist/{not-found-63YCT7SJ.js.map → not-found-G4N25RWR.js.map} +1 -1
  198. package/dist/providers/TwilightProvider.d.ts.map +1 -1
  199. package/dist/providers/index.js +17 -17
  200. package/dist/providers/native-safe-area.d.ts +13 -0
  201. package/dist/providers/native-safe-area.d.ts.map +1 -0
  202. package/dist/routes/account/orders.js +6 -7
  203. package/dist/routes/account.js +15 -16
  204. package/dist/routes/account.js.map +1 -1
  205. package/dist/routes/blog.js +10 -11
  206. package/dist/routes/blog.js.map +1 -1
  207. package/dist/routes/brands.js +6 -7
  208. package/dist/routes/brands.js.map +1 -1
  209. package/dist/routes/cart.js +25 -25
  210. package/dist/routes/home.js +22 -22
  211. package/dist/routes/index.js +4 -4
  212. package/dist/routes/loyalty.js +7 -8
  213. package/dist/routes/loyalty.js.map +1 -1
  214. package/dist/routes/page.js +6 -7
  215. package/dist/routes/page.js.map +1 -1
  216. package/dist/routes/product-listing.js +23 -23
  217. package/dist/routes/product.js +21 -21
  218. package/dist/routes/seo-redirects.js +3 -3
  219. package/dist/routes/testimonials.js +1 -1
  220. package/dist/routes/thank-you.js +6 -7
  221. package/dist/routes/thank-you.js.map +1 -1
  222. package/dist/skeleton.js +22 -22
  223. package/dist/tanstack/native-app-events.d.ts +18 -0
  224. package/dist/tanstack/native-app-events.d.ts.map +1 -0
  225. package/dist/tanstack/navigation.d.ts.map +1 -1
  226. package/dist/tanstack.js +17 -17
  227. package/dist/utils/index.js +4 -5
  228. package/dist/utils/index.js.map +1 -1
  229. package/dist/utils/store-base.d.ts +9 -0
  230. package/dist/utils/store-base.d.ts.map +1 -1
  231. package/dist/vite/index.js +1 -0
  232. package/dist/vite/index.js.map +1 -1
  233. package/dist/vite/plugins/package-aliases.plugin.d.ts.map +1 -1
  234. package/package.json +5 -1
  235. package/dist/MainMenu-IVZDV6HY.js.map +0 -1
  236. package/dist/PageSingle-TH4W7HCK.js.map +0 -1
  237. package/dist/TestimonialsPage-WXSORMJA.js.map +0 -1
  238. package/dist/chunk-6ETNDIHM.js.map +0 -1
  239. package/dist/chunk-AEPBDT5F.js.map +0 -1
  240. package/dist/chunk-AMASCYNB.js.map +0 -1
  241. package/dist/chunk-GNH3W6T4.js +0 -114
  242. package/dist/chunk-GNH3W6T4.js.map +0 -1
  243. package/dist/chunk-HURQEDJZ.js +0 -14
  244. package/dist/chunk-RCHTHIIZ.js +0 -90
  245. package/dist/chunk-RCHTHIIZ.js.map +0 -1
  246. package/dist/chunk-SR4OTLTJ.js.map +0 -1
  247. package/dist/chunk-SVPXQCOA.js.map +0 -1
  248. package/dist/chunk-TYLKNVQA.js.map +0 -1
  249. package/dist/chunk-VR4FXFPY.js.map +0 -1
  250. package/dist/document-class-NUILLVSR.js +0 -26
@@ -1,10 +1,9 @@
1
- export { brand } from '../chunk-634A6AYN.js';
2
- import '../chunk-SSPAMQRV.js';
1
+ export { brand } from '../chunk-5H4NIOTY.js';
2
+ import '../chunk-SDIQHTDG.js';
3
3
  import '../chunk-ZGHRSRDO.js';
4
- import '../chunk-6ETNDIHM.js';
5
- import '../chunk-RCHTHIIZ.js';
6
- import '../chunk-TYLKNVQA.js';
7
- import '../chunk-SR4OTLTJ.js';
4
+ import '../chunk-VX2T7JCB.js';
5
+ import '../chunk-QVJDYSCT.js';
6
+ import '../chunk-LPQFTXBB.js';
8
7
  import '../chunk-N2S25NXP.js';
9
8
  import '../chunk-T72DAX7R.js';
10
9
  import '../chunk-DF6FBKDN.js';
package/dist/api/cart.js CHANGED
@@ -1,10 +1,9 @@
1
- export { cart } from '../chunk-URWXE2RQ.js';
2
- import '../chunk-SSPAMQRV.js';
1
+ export { cart } from '../chunk-NFE2H5JE.js';
2
+ import '../chunk-SDIQHTDG.js';
3
3
  import '../chunk-ZGHRSRDO.js';
4
- import '../chunk-6ETNDIHM.js';
5
- import '../chunk-RCHTHIIZ.js';
6
- import '../chunk-TYLKNVQA.js';
7
- import '../chunk-SR4OTLTJ.js';
4
+ import '../chunk-VX2T7JCB.js';
5
+ import '../chunk-QVJDYSCT.js';
6
+ import '../chunk-LPQFTXBB.js';
8
7
  import '../chunk-N2S25NXP.js';
9
8
  import '../chunk-T72DAX7R.js';
10
9
  import '../chunk-DF6FBKDN.js';
@@ -1,10 +1,9 @@
1
- export { category } from '../chunk-DCH3X6TO.js';
2
- import '../chunk-SSPAMQRV.js';
1
+ export { category } from '../chunk-E7PYHBCX.js';
2
+ import '../chunk-SDIQHTDG.js';
3
3
  import '../chunk-ZGHRSRDO.js';
4
- import '../chunk-6ETNDIHM.js';
5
- import '../chunk-RCHTHIIZ.js';
6
- import '../chunk-TYLKNVQA.js';
7
- import '../chunk-SR4OTLTJ.js';
4
+ import '../chunk-VX2T7JCB.js';
5
+ import '../chunk-QVJDYSCT.js';
6
+ import '../chunk-LPQFTXBB.js';
8
7
  import '../chunk-N2S25NXP.js';
9
8
  import '../chunk-T72DAX7R.js';
10
9
  import '../chunk-DF6FBKDN.js';
@@ -1,7 +1,6 @@
1
- export { STORE_IDENTIFIER_HEADER, api, cdn, filesCdn, getActiveScope, getActiveScopeId, getAuthToken } from '../chunk-6ETNDIHM.js';
2
- import '../chunk-RCHTHIIZ.js';
3
- import '../chunk-TYLKNVQA.js';
4
- import '../chunk-SR4OTLTJ.js';
1
+ export { STORE_IDENTIFIER_HEADER, api, cdn, filesCdn, getActiveScope, getActiveScopeId, getAuthToken } from '../chunk-VX2T7JCB.js';
2
+ import '../chunk-QVJDYSCT.js';
3
+ import '../chunk-LPQFTXBB.js';
5
4
  import '../chunk-N2S25NXP.js';
6
5
  import '../chunk-T72DAX7R.js';
7
6
  import '../chunk-DGUM43GV.js';
package/dist/api/home.js CHANGED
@@ -1,8 +1,7 @@
1
- export { home } from '../chunk-FZH27PXS.js';
2
- import '../chunk-6ETNDIHM.js';
3
- import '../chunk-RCHTHIIZ.js';
4
- import '../chunk-TYLKNVQA.js';
5
- import '../chunk-SR4OTLTJ.js';
1
+ export { home } from '../chunk-5HOD4BKK.js';
2
+ import '../chunk-VX2T7JCB.js';
3
+ import '../chunk-QVJDYSCT.js';
4
+ import '../chunk-LPQFTXBB.js';
6
5
  import '../chunk-N2S25NXP.js';
7
6
  import '../chunk-T72DAX7R.js';
8
7
  import '../chunk-DGUM43GV.js';
@@ -1,10 +1,9 @@
1
- export { loyalty } from '../chunk-KRUPRDOL.js';
2
- import '../chunk-SSPAMQRV.js';
1
+ export { loyalty } from '../chunk-7PYHB3PP.js';
2
+ import '../chunk-SDIQHTDG.js';
3
3
  import '../chunk-ZGHRSRDO.js';
4
- import '../chunk-6ETNDIHM.js';
5
- import '../chunk-RCHTHIIZ.js';
6
- import '../chunk-TYLKNVQA.js';
7
- import '../chunk-SR4OTLTJ.js';
4
+ import '../chunk-VX2T7JCB.js';
5
+ import '../chunk-QVJDYSCT.js';
6
+ import '../chunk-LPQFTXBB.js';
8
7
  import '../chunk-N2S25NXP.js';
9
8
  import '../chunk-T72DAX7R.js';
10
9
  import '../chunk-DF6FBKDN.js';
package/dist/api/menu.js CHANGED
@@ -1,8 +1,7 @@
1
- export { menu } from '../chunk-W5MS4UNG.js';
2
- import '../chunk-6ETNDIHM.js';
3
- import '../chunk-RCHTHIIZ.js';
4
- import '../chunk-TYLKNVQA.js';
5
- import '../chunk-SR4OTLTJ.js';
1
+ export { menu } from '../chunk-USN5NHJ5.js';
2
+ import '../chunk-VX2T7JCB.js';
3
+ import '../chunk-QVJDYSCT.js';
4
+ import '../chunk-LPQFTXBB.js';
6
5
  import '../chunk-N2S25NXP.js';
7
6
  import '../chunk-T72DAX7R.js';
8
7
  import '../chunk-DGUM43GV.js';
@@ -1,8 +1,7 @@
1
- export { notification } from '../chunk-GEQKQQND.js';
2
- import '../chunk-6ETNDIHM.js';
3
- import '../chunk-RCHTHIIZ.js';
4
- import '../chunk-TYLKNVQA.js';
5
- import '../chunk-SR4OTLTJ.js';
1
+ export { notification } from '../chunk-GTG22RZG.js';
2
+ import '../chunk-VX2T7JCB.js';
3
+ import '../chunk-QVJDYSCT.js';
4
+ import '../chunk-LPQFTXBB.js';
6
5
  import '../chunk-N2S25NXP.js';
7
6
  import '../chunk-T72DAX7R.js';
8
7
  import '../chunk-DGUM43GV.js';
package/dist/api/order.js CHANGED
@@ -1,10 +1,9 @@
1
- export { order } from '../chunk-2D5HJQZK.js';
2
- import '../chunk-SSPAMQRV.js';
1
+ export { order } from '../chunk-MSUGP566.js';
2
+ import '../chunk-SDIQHTDG.js';
3
3
  import '../chunk-ZGHRSRDO.js';
4
- import '../chunk-6ETNDIHM.js';
5
- import '../chunk-RCHTHIIZ.js';
6
- import '../chunk-TYLKNVQA.js';
7
- import '../chunk-SR4OTLTJ.js';
4
+ import '../chunk-VX2T7JCB.js';
5
+ import '../chunk-QVJDYSCT.js';
6
+ import '../chunk-LPQFTXBB.js';
8
7
  import '../chunk-N2S25NXP.js';
9
8
  import '../chunk-T72DAX7R.js';
10
9
  import '../chunk-DF6FBKDN.js';
package/dist/api/page.js CHANGED
@@ -1,10 +1,9 @@
1
- export { page } from '../chunk-BRZ74D5D.js';
2
- import '../chunk-SSPAMQRV.js';
1
+ export { page } from '../chunk-DY5WGKDX.js';
2
+ import '../chunk-SDIQHTDG.js';
3
3
  import '../chunk-ZGHRSRDO.js';
4
- import '../chunk-6ETNDIHM.js';
5
- import '../chunk-RCHTHIIZ.js';
6
- import '../chunk-TYLKNVQA.js';
7
- import '../chunk-SR4OTLTJ.js';
4
+ import '../chunk-VX2T7JCB.js';
5
+ import '../chunk-QVJDYSCT.js';
6
+ import '../chunk-LPQFTXBB.js';
8
7
  import '../chunk-N2S25NXP.js';
9
8
  import '../chunk-T72DAX7R.js';
10
9
  import '../chunk-DF6FBKDN.js';
@@ -1,10 +1,9 @@
1
- export { getProductPreview, isProductPreviewQuery, product, productDetailQueryKey, productPreviewQueryKey, rememberProductPreview, shouldDehydrateQuery } from '../chunk-44ZVB7F5.js';
2
- import '../chunk-SSPAMQRV.js';
1
+ export { getProductPreview, isProductPreviewQuery, product, productDetailQueryKey, productPreviewQueryKey, rememberProductPreview, shouldDehydrateQuery } from '../chunk-H2DXJCJP.js';
2
+ import '../chunk-SDIQHTDG.js';
3
3
  import '../chunk-ZGHRSRDO.js';
4
- import '../chunk-6ETNDIHM.js';
5
- import '../chunk-RCHTHIIZ.js';
6
- import '../chunk-TYLKNVQA.js';
7
- import '../chunk-SR4OTLTJ.js';
4
+ import '../chunk-VX2T7JCB.js';
5
+ import '../chunk-QVJDYSCT.js';
6
+ import '../chunk-LPQFTXBB.js';
8
7
  import '../chunk-N2S25NXP.js';
9
8
  import '../chunk-T72DAX7R.js';
10
9
  import '../chunk-DF6FBKDN.js';
@@ -1,7 +1,6 @@
1
- import { api } from '../chunk-6ETNDIHM.js';
2
- import '../chunk-RCHTHIIZ.js';
3
- import '../chunk-TYLKNVQA.js';
4
- import '../chunk-SR4OTLTJ.js';
1
+ import { api } from '../chunk-VX2T7JCB.js';
2
+ import '../chunk-QVJDYSCT.js';
3
+ import '../chunk-LPQFTXBB.js';
5
4
  import '../chunk-N2S25NXP.js';
6
5
  import '../chunk-T72DAX7R.js';
7
6
  import '../chunk-DGUM43GV.js';
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/api/profile.ts"],"names":[],"mappings":";;;;;;;;;AAEO,IAAM,OAAA,GAAU;AAAA,EACrB,QAAQ,YAA2B;AACjC,IAAA,MAAM,GAAA,CAAI,OAAO,SAAS,CAAA;AAAA,EAC5B,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,cAAA,EAAgB,OAAO,IAAA,EAAc,KAAA,KAAkC;AACrE,IAAA,MAAM,GAAA,CAAI,KAAK,kBAAA,EAAoB,EAAE,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,EAAG,CAAA;AAAA,EAC9D;AACF","file":"profile.js","sourcesContent":["import { api } from './client';\n\nexport const profile = {\n delete: async (): Promise<void> => {\n await api.delete('profile');\n },\n\n /**\n * Persist a single user preference (e.g. `is_notifiable` for marketing\n * messages) via the Salla settings endpoint.\n */\n updateSettings: async (name: string, value: boolean): Promise<void> => {\n await api.post('profile/settings', { json: { name, value } });\n },\n};\n"]}
1
+ {"version":3,"sources":["../../src/api/profile.ts"],"names":[],"mappings":";;;;;;;;AAEO,IAAM,OAAA,GAAU;AAAA,EACrB,QAAQ,YAA2B;AACjC,IAAA,MAAM,GAAA,CAAI,OAAO,SAAS,CAAA;AAAA,EAC5B,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,cAAA,EAAgB,OAAO,IAAA,EAAc,KAAA,KAAkC;AACrE,IAAA,MAAM,GAAA,CAAI,KAAK,kBAAA,EAAoB,EAAE,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,EAAG,CAAA;AAAA,EAC9D;AACF","file":"profile.js","sourcesContent":["import { api } from './client';\n\nexport const profile = {\n delete: async (): Promise<void> => {\n await api.delete('profile');\n },\n\n /**\n * Persist a single user preference (e.g. `is_notifiable` for marketing\n * messages) via the Salla settings endpoint.\n */\n updateSettings: async (name: string, value: boolean): Promise<void> => {\n await api.post('profile/settings', { json: { name, value } });\n },\n};\n"]}
package/dist/api/store.js CHANGED
@@ -1,8 +1,7 @@
1
- export { store } from '../chunk-KPEG5XY3.js';
2
- import '../chunk-6ETNDIHM.js';
3
- import '../chunk-RCHTHIIZ.js';
4
- export { resolveStoreIdentifier } from '../chunk-TYLKNVQA.js';
5
- import '../chunk-SR4OTLTJ.js';
1
+ export { store } from '../chunk-4YHSQSM6.js';
2
+ import '../chunk-VX2T7JCB.js';
3
+ export { resolveStoreIdentifier } from '../chunk-QVJDYSCT.js';
4
+ import '../chunk-LPQFTXBB.js';
6
5
  import '../chunk-N2S25NXP.js';
7
6
  import '../chunk-T72DAX7R.js';
8
7
  import '../chunk-DGUM43GV.js';
@@ -1,8 +1,7 @@
1
- export { commonTranslationsPath, storeTranslationsPath, translations } from '../chunk-X3GCZAOZ.js';
2
- import '../chunk-6ETNDIHM.js';
3
- import '../chunk-RCHTHIIZ.js';
4
- import '../chunk-TYLKNVQA.js';
5
- import '../chunk-SR4OTLTJ.js';
1
+ export { commonTranslationsPath, storeTranslationsPath, translations } from '../chunk-7BGEGHAI.js';
2
+ import '../chunk-VX2T7JCB.js';
3
+ import '../chunk-QVJDYSCT.js';
4
+ import '../chunk-LPQFTXBB.js';
6
5
  import '../chunk-N2S25NXP.js';
7
6
  import '../chunk-T72DAX7R.js';
8
7
  import '../chunk-DGUM43GV.js';
package/dist/api/user.js CHANGED
@@ -1,8 +1,7 @@
1
- export { user } from '../chunk-EARXTU6P.js';
2
- import '../chunk-6ETNDIHM.js';
3
- import '../chunk-RCHTHIIZ.js';
4
- import '../chunk-TYLKNVQA.js';
5
- import '../chunk-SR4OTLTJ.js';
1
+ export { user } from '../chunk-FGROIU3Y.js';
2
+ import '../chunk-VX2T7JCB.js';
3
+ import '../chunk-QVJDYSCT.js';
4
+ import '../chunk-LPQFTXBB.js';
6
5
  import '../chunk-N2S25NXP.js';
7
6
  import '../chunk-T72DAX7R.js';
8
7
  import '../chunk-DGUM43GV.js';
@@ -1,11 +1,10 @@
1
- export { wishlist } from '../chunk-RMFDKT5P.js';
2
- import '../chunk-44ZVB7F5.js';
3
- import '../chunk-SSPAMQRV.js';
1
+ export { wishlist } from '../chunk-P6EOXGUE.js';
2
+ import '../chunk-H2DXJCJP.js';
3
+ import '../chunk-SDIQHTDG.js';
4
4
  import '../chunk-ZGHRSRDO.js';
5
- import '../chunk-6ETNDIHM.js';
6
- import '../chunk-RCHTHIIZ.js';
7
- import '../chunk-TYLKNVQA.js';
8
- import '../chunk-SR4OTLTJ.js';
5
+ import '../chunk-VX2T7JCB.js';
6
+ import '../chunk-QVJDYSCT.js';
7
+ import '../chunk-LPQFTXBB.js';
9
8
  import '../chunk-N2S25NXP.js';
10
9
  import '../chunk-T72DAX7R.js';
11
10
  import '../chunk-DF6FBKDN.js';
@@ -0,0 +1,33 @@
1
+ import { getSallaSDK, whenSallaReady } from './chunk-QVJDYSCT.js';
2
+ import { useState, useEffect } from 'react';
3
+
4
+ function isNativeApp() {
5
+ return Boolean(getSallaSDK()?.mobile?.isEnabled?.());
6
+ }
7
+ function useIsNativeApp() {
8
+ const [inApp, setInApp] = useState(false);
9
+ useEffect(() => whenSallaReady(() => setInApp(isNativeApp())), []);
10
+ return inApp;
11
+ }
12
+ function hapticImpact(impact) {
13
+ getSallaSDK()?.mobile?.action?.("haptic.impact", { impact_type: impact });
14
+ }
15
+ function rgbToHex(rgb) {
16
+ const match = rgb.match(/^rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*([\d.]+))?\)/);
17
+ if (!match || Number(match[4]) === 0) return null;
18
+ return `#${match.slice(1, 4).map((channel) => Number(channel).toString(16).padStart(2, "0")).join("")}`;
19
+ }
20
+ function useNativeStatusBarColor() {
21
+ const [element, setElement] = useState(null);
22
+ const inApp = useIsNativeApp();
23
+ useEffect(() => {
24
+ if (!inApp || !element) return;
25
+ const color = rgbToHex(getComputedStyle(element).backgroundColor);
26
+ if (color) getSallaSDK()?.event.dispatch("mobile::statusbar.color", { color });
27
+ }, [inApp, element]);
28
+ return setElement;
29
+ }
30
+
31
+ export { hapticImpact, isNativeApp, useIsNativeApp, useNativeStatusBarColor };
32
+ //# sourceMappingURL=chunk-3IHFA2X5.js.map
33
+ //# sourceMappingURL=chunk-3IHFA2X5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/native-app/index.ts"],"names":[],"mappings":";;;AAQO,SAAS,WAAA,GAAuB;AACrC,EAAA,OAAO,OAAA,CAAQ,WAAA,EAAY,EAAG,MAAA,EAAQ,aAAa,CAAA;AACrD;AAOO,SAAS,cAAA,GAA0B;AACxC,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAS,KAAK,CAAA;AAExC,EAAA,SAAA,CAAU,MAAM,eAAe,MAAM,QAAA,CAAS,aAAa,CAAC,CAAA,EAAG,EAAE,CAAA;AAEjE,EAAA,OAAO,KAAA;AACT;AAKO,SAAS,aAAa,MAAA,EAA4B;AACvD,EAAA,WAAA,IAAe,MAAA,EAAQ,MAAA,GAAS,iBAAiB,EAAE,WAAA,EAAa,QAAQ,CAAA;AAC1E;AAOA,SAAS,SAAS,GAAA,EAA4B;AAC5C,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,KAAA,CAAM,oDAAoD,CAAA;AAC5E,EAAA,IAAI,CAAC,SAAS,MAAA,CAAO,KAAA,CAAM,CAAC,CAAC,CAAA,KAAM,GAAG,OAAO,IAAA;AAC7C,EAAA,OAAO,CAAA,CAAA,EAAI,MACR,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,CACV,GAAA,CAAI,CAAC,OAAA,KAAY,MAAA,CAAO,OAAO,EAAE,QAAA,CAAS,EAAE,EAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,CAC9D,IAAA,CAAK,EAAE,CAAC,CAAA,CAAA;AACb;AAWO,SAAS,uBAAA,GAAiE;AAC/E,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,SAAmB,IAAI,CAAA;AACrD,EAAA,MAAM,QAAQ,cAAA,EAAe;AAE7B,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,KAAA,IAAS,CAAC,OAAA,EAAS;AACxB,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,gBAAA,CAAiB,OAAO,EAAE,eAAe,CAAA;AAChE,IAAA,IAAI,KAAA,eAAmB,EAAG,KAAA,CAAM,SAAS,yBAAA,EAA2B,EAAE,OAAO,CAAA;AAAA,EAC/E,CAAA,EAAG,CAAC,KAAA,EAAO,OAAO,CAAC,CAAA;AAEnB,EAAA,OAAO,UAAA;AACT","file":"chunk-3IHFA2X5.js","sourcesContent":["import { useEffect, useState, type RefCallback } from 'react';\nimport { getSallaSDK, whenSallaReady } from '../utils/sdk-helpers';\n\n/**\n * True inside the Salla native app's webview, read at call time: the SDK's\n * `salla.mobile.isEnabled()`. False on the server and until the SDK has loaded, so call it\n * from an event handler or an effect, and use {@link useIsNativeApp} to decide what to render.\n */\nexport function isNativeApp(): boolean {\n return Boolean(getSallaSDK()?.mobile?.isEnabled?.());\n}\n\n/**\n * {@link isNativeApp} as state, for a render decision. False on the server and on the first\n * client render, then true once the SDK is ready inside the app: an app that identifies\n * itself through its config has not said so before `init`.\n */\nexport function useIsNativeApp(): boolean {\n const [inApp, setInApp] = useState(false);\n\n useEffect(() => whenSallaReady(() => setInApp(isNativeApp())), []);\n\n return inApp;\n}\n\nexport type HapticImpact = 'light' | 'medium' | 'heavy';\n\n/** Asks the native app for a tap vibration. The SDK ignores it outside the app. */\nexport function hapticImpact(impact: HapticImpact): void {\n getSallaSDK()?.mobile?.action?.('haptic.impact', { impact_type: impact });\n}\n\n/**\n * `rgb(232, 245, 255)`, what `getComputedStyle` returns, as `#e8f5ff`. A partial alpha is\n * dropped. A fully transparent colour is no colour at all: an element with no background\n * of its own computes to `rgba(0, 0, 0, 0)`, which would otherwise read as black.\n */\nfunction rgbToHex(rgb: string): string | null {\n const match = rgb.match(/^rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)(?:,\\s*([\\d.]+))?\\)/);\n if (!match || Number(match[4]) === 0) return null;\n return `#${match\n .slice(1, 4)\n .map((channel) => Number(channel).toString(16).padStart(2, '0'))\n .join('')}`;\n}\n\n/**\n * Tells the native app to paint its status bar with the rendered background of the element\n * the returned ref is attached to. The colour is read from the DOM, because a theme's tint\n * is often a relative CSS colour (`hsl(from …)`) with no hex to pass. Does nothing outside\n * the app, and for an element with no background of its own.\n *\n * The ref is a callback, kept in state, so an element that mounts after the app has been\n * recognised still reports its colour.\n */\nexport function useNativeStatusBarColor<T extends HTMLElement>(): RefCallback<T> {\n const [element, setElement] = useState<T | null>(null);\n const inApp = useIsNativeApp();\n\n useEffect(() => {\n if (!inApp || !element) return;\n const color = rgbToHex(getComputedStyle(element).backgroundColor);\n if (color) getSallaSDK()?.event.dispatch('mobile::statusbar.color', { color });\n }, [inApp, element]);\n\n return setElement;\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { getActiveScope, requestedThemeVersionId, api, STORE_IDENTIFIER_HEADER } from './chunk-6ETNDIHM.js';
2
- import { resolveStoreIdentifier } from './chunk-TYLKNVQA.js';
1
+ import { getActiveScope, requestedThemeVersionId, api, STORE_IDENTIFIER_HEADER } from './chunk-VX2T7JCB.js';
2
+ import { resolveStoreIdentifier } from './chunk-QVJDYSCT.js';
3
3
  import { getTwilightContext } from './chunk-N2S25NXP.js';
4
4
  import { queryOptions } from '@tanstack/react-query';
5
5
 
@@ -81,5 +81,5 @@ var store = {
81
81
  };
82
82
 
83
83
  export { store };
84
- //# sourceMappingURL=chunk-KPEG5XY3.js.map
85
- //# sourceMappingURL=chunk-KPEG5XY3.js.map
84
+ //# sourceMappingURL=chunk-4YHSQSM6.js.map
85
+ //# sourceMappingURL=chunk-4YHSQSM6.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/api/store.ts"],"names":[],"mappings":"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","file":"chunk-KPEG5XY3.js","sourcesContent":["import { queryOptions } from '@tanstack/react-query';\nimport { api, getActiveScope, STORE_IDENTIFIER_HEADER } from './client';\nimport type { Store, Theme, Language } from '../types';\nimport { getTwilightContext } from '../twilight/context';\nimport { resolveStoreIdentifier } from '../utils/store-identity';\nimport { requestedThemeVersionId } from '../utils/theme-version';\n\nexport { resolveStoreIdentifier };\n\nconst DEFAULT_INCLUDE_ITEMS = [\n 'store',\n 'settings',\n 'theme',\n 'theme_settings',\n 'external_services',\n 'currencies',\n 'languages',\n 'payments',\n 'product_widgets',\n 'rating',\n 'ratings',\n 'user',\n];\n\n/** Twig's `salla.init({ user })` object; the endpoint ignores the token, so always the guest. */\nexport interface SettingsUser {\n type: 'guest' | 'user';\n id?: number | string | null;\n language_code?: string;\n currency_code?: string;\n country_code?: string;\n [key: string]: unknown;\n}\n\n/**\n * Raw API response for settings endpoint.\n * Languages come as object: { \"AR\": { code, name, ... }, \"EN\": {...} }\n */\ninterface SettingsApiResponse {\n store?: Store;\n theme?: Theme;\n languages?: Record<string, Language>;\n currencies?: Record<\n string,\n { code: string; name: string; symbol: string; amount: number; country_code: string }\n >;\n external_services?: Record<string, unknown>;\n headers?: Record<string, unknown>;\n login?: { url: string; turnstile_site_key: string };\n affiliate?: { utm_url: string; cta_enabled: boolean };\n debug?: boolean;\n trace_console?: boolean;\n policy_url?: string;\n user?: SettingsUser;\n swoole?: string[];\n}\n\n/**\n * Central settings context - single source of truth for all API data.\n * Contains everything from the settings endpoint response after processing.\n */\nexport interface StoreContext {\n store?: Store;\n theme?: Theme;\n /** Languages as array after conversion from API object format */\n languages?: Language[];\n currencies?: Record<\n string,\n { code: string; name: string; symbol: string; amount: number; country_code: string }\n >;\n external_services?: Record<string, unknown>;\n headers?: Record<string, unknown>;\n login?: { url: string; turnstile_site_key: string };\n affiliate?: { utm_url: string; cta_enabled: boolean };\n debug?: boolean;\n trace_console?: boolean; // todo:: remove it\n policy_url?: string;\n user?: SettingsUser;\n /** API paths the SDK sends with `s-store-api-version: swoole` */\n swoole?: string[];\n /**\n * The scope these settings were requested with; absent when none was. Not from\n * the API: stamped by `store.settings`, so `resolveThemeVersionId` can tell\n * whether the version they name still answers the scope that is active now.\n */\n requestedScopeId?: string;\n}\n\n/**\n * Converts languages object from API to array format.\n * API returns: { \"AR\": { code, name, ... }, \"EN\": { ... } }\n * We need: [{ code, name, ... }, { code, name, ... }]\n * todo:: return the languages as object from the APIs to avoid this\n */\nfunction languagesToArray(languages?: Record<string, Language>): Language[] | undefined {\n if (!languages) return undefined;\n // The SDK's localization modal reads `lang.iso_code` (not `code`) when a language is\n // selected — without it the switch navigates to `/undefined/...`.\n return Object.values(languages).map((lang) => ({ iso_code: lang.code, ...lang }));\n}\n\nexport const store = {\n settings: async (storeIdentifier?: string): Promise<StoreContext | null> => {\n const identifier = storeIdentifier ?? resolveStoreIdentifier();\n\n if (!identifier) {\n console.warn('[store.settings] No store identifier available');\n return null;\n }\n\n const includeParams = DEFAULT_INCLUDE_ITEMS.map((i) => `include[]=${i}`).join('&');\n const scope = getActiveScope();\n const params = scope != null ? `${includeParams}&scope=${scope.id}` : includeParams;\n\n try {\n const json = await api\n // Sent explicitly rather than left to the client's own resolution, so\n // the identifier this function checked is the identifier that travels.\n // They agree today; a caller passing one and being answered about\n // another is the failure this makes impossible rather than unlikely.\n .get(`store/settings?${params}`, {\n timeout: 5000,\n headers: { [STORE_IDENTIFIER_HEADER]: identifier },\n })\n .json<{ data?: SettingsApiResponse }>();\n\n const data = json?.data;\n if (!data) return null;\n\n // Convert languages from object to array\n const languages = languagesToArray(data.languages);\n\n return {\n store: data.store,\n theme: data.theme,\n languages,\n currencies: data.currencies,\n external_services: data.external_services,\n headers: data.headers,\n login: data.login,\n affiliate: data.affiliate,\n policy_url: data.policy_url,\n user: data.user,\n swoole: data.swoole,\n ...(scope && { requestedScopeId: scope.id }),\n };\n } catch (error) {\n console.error('[store.settings] Failed:', error);\n return null;\n }\n },\n\n queries: {\n settings: (storeIdentifier?: string) =>\n queryOptions<StoreContext | null>({\n queryKey: [\n 'store',\n 'settings',\n storeIdentifier,\n getTwilightContext().locale,\n getActiveScope(),\n // Two versions of one store's settings are two different answers, and\n // this is the query whose answer decides what every other call is\n // pinned to. `requestedThemeVersionId` rather than the resolved one:\n // the resolved value falls back to what these settings report, so it\n // is not knowable until after this query has run — the key would be\n // one thing on the server and another on the client, and the hydrated\n // page would refetch the settings it was just handed.\n requestedThemeVersionId(),\n ],\n queryFn: () => store.settings(storeIdentifier),\n }),\n },\n};\n"]}
1
+ {"version":3,"sources":["../src/api/store.ts"],"names":[],"mappings":"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","file":"chunk-4YHSQSM6.js","sourcesContent":["import { queryOptions } from '@tanstack/react-query';\nimport { api, getActiveScope, STORE_IDENTIFIER_HEADER } from './client';\nimport type { Store, Theme, Language } from '../types';\nimport { getTwilightContext } from '../twilight/context';\nimport { resolveStoreIdentifier } from '../utils/store-identity';\nimport { requestedThemeVersionId } from '../utils/theme-version';\n\nexport { resolveStoreIdentifier };\n\nconst DEFAULT_INCLUDE_ITEMS = [\n 'store',\n 'settings',\n 'theme',\n 'theme_settings',\n 'external_services',\n 'currencies',\n 'languages',\n 'payments',\n 'product_widgets',\n 'rating',\n 'ratings',\n 'user',\n];\n\n/** Twig's `salla.init({ user })` object; the endpoint ignores the token, so always the guest. */\nexport interface SettingsUser {\n type: 'guest' | 'user';\n id?: number | string | null;\n language_code?: string;\n currency_code?: string;\n country_code?: string;\n [key: string]: unknown;\n}\n\n/**\n * Raw API response for settings endpoint.\n * Languages come as object: { \"AR\": { code, name, ... }, \"EN\": {...} }\n */\ninterface SettingsApiResponse {\n store?: Store;\n theme?: Theme;\n languages?: Record<string, Language>;\n currencies?: Record<\n string,\n { code: string; name: string; symbol: string; amount: number; country_code: string }\n >;\n external_services?: Record<string, unknown>;\n headers?: Record<string, unknown>;\n login?: { url: string; turnstile_site_key: string };\n affiliate?: { utm_url: string; cta_enabled: boolean };\n debug?: boolean;\n trace_console?: boolean;\n policy_url?: string;\n user?: SettingsUser;\n swoole?: string[];\n}\n\n/**\n * Central settings context - single source of truth for all API data.\n * Contains everything from the settings endpoint response after processing.\n */\nexport interface StoreContext {\n store?: Store;\n theme?: Theme;\n /** Languages as array after conversion from API object format */\n languages?: Language[];\n currencies?: Record<\n string,\n { code: string; name: string; symbol: string; amount: number; country_code: string }\n >;\n external_services?: Record<string, unknown>;\n headers?: Record<string, unknown>;\n login?: { url: string; turnstile_site_key: string };\n affiliate?: { utm_url: string; cta_enabled: boolean };\n debug?: boolean;\n trace_console?: boolean; // todo:: remove it\n policy_url?: string;\n user?: SettingsUser;\n /** API paths the SDK sends with `s-store-api-version: swoole` */\n swoole?: string[];\n /**\n * The scope these settings were requested with; absent when none was. Not from\n * the API: stamped by `store.settings`, so `resolveThemeVersionId` can tell\n * whether the version they name still answers the scope that is active now.\n */\n requestedScopeId?: string;\n}\n\n/**\n * Converts languages object from API to array format.\n * API returns: { \"AR\": { code, name, ... }, \"EN\": { ... } }\n * We need: [{ code, name, ... }, { code, name, ... }]\n * todo:: return the languages as object from the APIs to avoid this\n */\nfunction languagesToArray(languages?: Record<string, Language>): Language[] | undefined {\n if (!languages) return undefined;\n // The SDK's localization modal reads `lang.iso_code` (not `code`) when a language is\n // selected — without it the switch navigates to `/undefined/...`.\n return Object.values(languages).map((lang) => ({ iso_code: lang.code, ...lang }));\n}\n\nexport const store = {\n settings: async (storeIdentifier?: string): Promise<StoreContext | null> => {\n const identifier = storeIdentifier ?? resolveStoreIdentifier();\n\n if (!identifier) {\n console.warn('[store.settings] No store identifier available');\n return null;\n }\n\n const includeParams = DEFAULT_INCLUDE_ITEMS.map((i) => `include[]=${i}`).join('&');\n const scope = getActiveScope();\n const params = scope != null ? `${includeParams}&scope=${scope.id}` : includeParams;\n\n try {\n const json = await api\n // Sent explicitly rather than left to the client's own resolution, so\n // the identifier this function checked is the identifier that travels.\n // They agree today; a caller passing one and being answered about\n // another is the failure this makes impossible rather than unlikely.\n .get(`store/settings?${params}`, {\n timeout: 5000,\n headers: { [STORE_IDENTIFIER_HEADER]: identifier },\n })\n .json<{ data?: SettingsApiResponse }>();\n\n const data = json?.data;\n if (!data) return null;\n\n // Convert languages from object to array\n const languages = languagesToArray(data.languages);\n\n return {\n store: data.store,\n theme: data.theme,\n languages,\n currencies: data.currencies,\n external_services: data.external_services,\n headers: data.headers,\n login: data.login,\n affiliate: data.affiliate,\n policy_url: data.policy_url,\n user: data.user,\n swoole: data.swoole,\n ...(scope && { requestedScopeId: scope.id }),\n };\n } catch (error) {\n console.error('[store.settings] Failed:', error);\n return null;\n }\n },\n\n queries: {\n settings: (storeIdentifier?: string) =>\n queryOptions<StoreContext | null>({\n queryKey: [\n 'store',\n 'settings',\n storeIdentifier,\n getTwilightContext().locale,\n getActiveScope(),\n // Two versions of one store's settings are two different answers, and\n // this is the query whose answer decides what every other call is\n // pinned to. `requestedThemeVersionId` rather than the resolved one:\n // the resolved value falls back to what these settings report, so it\n // is not knowable until after this query has run — the key would be\n // one thing on the server and another on the client, and the hydrated\n // page would refetch the settings it was just handed.\n requestedThemeVersionId(),\n ],\n queryFn: () => store.settings(storeIdentifier),\n }),\n },\n};\n"]}
@@ -1,5 +1,5 @@
1
- import { orThrow } from './chunk-SSPAMQRV.js';
2
- import { api } from './chunk-6ETNDIHM.js';
1
+ import { orThrow } from './chunk-SDIQHTDG.js';
2
+ import { api } from './chunk-VX2T7JCB.js';
3
3
  import { queryOptions } from '@tanstack/react-query';
4
4
 
5
5
  var brand = {
@@ -25,5 +25,5 @@ var brand = {
25
25
  };
26
26
 
27
27
  export { brand };
28
- //# sourceMappingURL=chunk-634A6AYN.js.map
29
- //# sourceMappingURL=chunk-634A6AYN.js.map
28
+ //# sourceMappingURL=chunk-5H4NIOTY.js.map
29
+ //# sourceMappingURL=chunk-5H4NIOTY.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/api/brands.ts"],"names":[],"mappings":";;;;AAMO,IAAM,KAAA,GAAQ;AAAA,EACnB,IAAA,EAAM,OAAO,IAAA,KAAmD;AAC9D,IAAA,MAAM,EAAE,IAAA,EAAM,MAAA,EAAO,GAAI,MAAM,GAAA,CAC5B,GAAA,CAAI,IAAA,GAAO,CAAA,YAAA,EAAe,IAAI,CAAA,CAAA,GAAK,QAAQ,EAC3C,IAAA,EAAoD;AACvD,IAAA,OAAO,EAAE,OAAO,IAAA,IAAQ,IAAI,IAAA,EAAM,MAAA,EAAQ,QAAQ,IAAA,EAAK;AAAA,EACzD,CAAA;AAAA,EAEA,IAAA,EAAM,OAAO,EAAA,KAA+B;AAC1C,IAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,GAAA,CAAI,IAAI,CAAA,OAAA,EAAU,EAAE,CAAA,CAAE,CAAA,CAAE,IAAA,EAAsB;AACrE,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AAAA,EAEA,aAAa,CAAC,EAAA,KAA+B,QAAQ,KAAA,CAAM,IAAA,CAAK,EAAE,CAAC,CAAA;AAAA,EAEnE,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,CAAC,IAAA,KACL,YAAA,CAAa;AAAA,MACX,QAAA,EAAU,CAAC,QAAA,EAAU,MAAA,EAAQ,QAAQ,CAAC,CAAA;AAAA,MACtC,OAAA,EAAS,MAAM,KAAA,CAAM,IAAA,CAAK,IAAI;AAAA,KAC/B,CAAA;AAAA,IACH,MAAA,EAAQ,CAAC,EAAA,KACP,YAAA,CAAa;AAAA,MACX,QAAA,EAAU,CAAC,QAAA,EAAU,QAAA,EAAU,EAAE,CAAA;AAAA,MACjC,OAAA,EAAS,MAAM,KAAA,CAAM,IAAA,CAAK,EAAE;AAAA,KAC7B;AAAA;AAEP","file":"chunk-634A6AYN.js","sourcesContent":["import { queryOptions } from '@tanstack/react-query';\nimport { api } from './client';\nimport type { Brand } from '../routes/brands/types';\nimport type { PaginatedResult, Pagination } from './types';\nimport { orThrow } from '../providers/NavigationProvider';\n\nexport const brand = {\n list: async (page?: number): Promise<PaginatedResult<Brand>> => {\n const { data, cursor } = await api\n .get(page ? `brands?page=${page}` : 'brands')\n .json<{ data: Brand[] | null; cursor?: Pagination }>();\n return { items: data ?? [], next: cursor?.next ?? null };\n },\n\n find: async (id: string): Promise<Brand> => {\n const { data } = await api.get(`brands/${id}`).json<{ data: Brand }>();\n return data;\n },\n\n findOrThrow: (id: string): Promise<Brand> => orThrow(brand.find(id)),\n\n queries: {\n list: (page?: number) =>\n queryOptions({\n queryKey: ['brands', 'list', page ?? 1],\n queryFn: () => brand.list(page),\n }),\n detail: (id: string) =>\n queryOptions({\n queryKey: ['brands', 'detail', id],\n queryFn: () => brand.find(id),\n }),\n },\n};\n"]}
1
+ {"version":3,"sources":["../src/api/brands.ts"],"names":[],"mappings":";;;;AAMO,IAAM,KAAA,GAAQ;AAAA,EACnB,IAAA,EAAM,OAAO,IAAA,KAAmD;AAC9D,IAAA,MAAM,EAAE,IAAA,EAAM,MAAA,EAAO,GAAI,MAAM,GAAA,CAC5B,GAAA,CAAI,IAAA,GAAO,CAAA,YAAA,EAAe,IAAI,CAAA,CAAA,GAAK,QAAQ,EAC3C,IAAA,EAAoD;AACvD,IAAA,OAAO,EAAE,OAAO,IAAA,IAAQ,IAAI,IAAA,EAAM,MAAA,EAAQ,QAAQ,IAAA,EAAK;AAAA,EACzD,CAAA;AAAA,EAEA,IAAA,EAAM,OAAO,EAAA,KAA+B;AAC1C,IAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,GAAA,CAAI,IAAI,CAAA,OAAA,EAAU,EAAE,CAAA,CAAE,CAAA,CAAE,IAAA,EAAsB;AACrE,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AAAA,EAEA,aAAa,CAAC,EAAA,KAA+B,QAAQ,KAAA,CAAM,IAAA,CAAK,EAAE,CAAC,CAAA;AAAA,EAEnE,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,CAAC,IAAA,KACL,YAAA,CAAa;AAAA,MACX,QAAA,EAAU,CAAC,QAAA,EAAU,MAAA,EAAQ,QAAQ,CAAC,CAAA;AAAA,MACtC,OAAA,EAAS,MAAM,KAAA,CAAM,IAAA,CAAK,IAAI;AAAA,KAC/B,CAAA;AAAA,IACH,MAAA,EAAQ,CAAC,EAAA,KACP,YAAA,CAAa;AAAA,MACX,QAAA,EAAU,CAAC,QAAA,EAAU,QAAA,EAAU,EAAE,CAAA;AAAA,MACjC,OAAA,EAAS,MAAM,KAAA,CAAM,IAAA,CAAK,EAAE;AAAA,KAC7B;AAAA;AAEP","file":"chunk-5H4NIOTY.js","sourcesContent":["import { queryOptions } from '@tanstack/react-query';\nimport { api } from './client';\nimport type { Brand } from '../routes/brands/types';\nimport type { PaginatedResult, Pagination } from './types';\nimport { orThrow } from '../providers/NavigationProvider';\n\nexport const brand = {\n list: async (page?: number): Promise<PaginatedResult<Brand>> => {\n const { data, cursor } = await api\n .get(page ? `brands?page=${page}` : 'brands')\n .json<{ data: Brand[] | null; cursor?: Pagination }>();\n return { items: data ?? [], next: cursor?.next ?? null };\n },\n\n find: async (id: string): Promise<Brand> => {\n const { data } = await api.get(`brands/${id}`).json<{ data: Brand }>();\n return data;\n },\n\n findOrThrow: (id: string): Promise<Brand> => orThrow(brand.find(id)),\n\n queries: {\n list: (page?: number) =>\n queryOptions({\n queryKey: ['brands', 'list', page ?? 1],\n queryFn: () => brand.list(page),\n }),\n detail: (id: string) =>\n queryOptions({\n queryKey: ['brands', 'detail', id],\n queryFn: () => brand.find(id),\n }),\n },\n};\n"]}
@@ -1,4 +1,4 @@
1
- import { getActiveScope, api } from './chunk-6ETNDIHM.js';
1
+ import { getActiveScope, api } from './chunk-VX2T7JCB.js';
2
2
  import { queryOptions } from '@tanstack/react-query';
3
3
 
4
4
  async function list(params) {
@@ -45,5 +45,5 @@ var home = {
45
45
  };
46
46
 
47
47
  export { home };
48
- //# sourceMappingURL=chunk-FZH27PXS.js.map
49
- //# sourceMappingURL=chunk-FZH27PXS.js.map
48
+ //# sourceMappingURL=chunk-5HOD4BKK.js.map
49
+ //# sourceMappingURL=chunk-5HOD4BKK.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/api/home.ts"],"names":[],"mappings":";;;AAQA,eAAe,KAAK,MAAA,EAA+D;AACjF,EAAA,MAAM,KAAA,GAAQ,SAAS,CAAA,CAAA,EAAI,IAAI,gBAAgB,MAAM,CAAA,CAAE,QAAA,EAAU,CAAA,CAAA,GAAK,EAAA;AACtE,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,GAAA,CAAI,IAAI,CAAA,cAAA,EAAiB,KAAK,CAAA,CAAE,CAAA,CAAE,IAAA,EAAoC;AAC7F,EAAA,OAAO,QAAQ,EAAC;AAClB;AAGA,SAAS,OAAA,CAAQ,QAA6B,QAAA,EAAoD;AAChG,EAAA,IAAI,CAAC,QAAA,CAAS,MAAA,EAAQ,OAAO,MAAA;AAC7B,EAAA,MAAM,KAAA,GAAQ,IAAI,GAAA,CAAI,QAAA,CAAS,IAAI,CAAC,KAAA,KAAU,KAAA,CAAM,IAAI,CAAC,CAAA;AACzD,EAAA,MAAM,IAAA,GAAO,SAAS,GAAA,CAAI,CAAC,UAAU,IAAA,CAAK,SAAA,CAAU,KAAK,CAAC,CAAA;AAC1D,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,CAAC,KAAA,KAAU;AAC9B,IAAA,IAAI,CAAC,KAAA,CAAM,GAAA,CAAI,KAAA,CAAM,IAAI,GAAG,OAAO,IAAA;AACnC,IAAA,MAAM,QAAQ,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,SAAA,CAAU,KAAK,CAAC,CAAA;AAChD,IAAA,IAAI,KAAA,KAAU,IAAI,OAAO,IAAA;AACzB,IAAA,IAAA,CAAK,MAAA,CAAO,OAAO,CAAC,CAAA;AACpB,IAAA,OAAO,KAAA;AAAA,EACT,CAAC,CAAA;AACH;AAEO,IAAM,IAAA,GAAO;AAAA,EAClB,YAAY,YAA0C;AAEpD,IAAA,MAAM,CAAC,MAAA,EAAQ,UAAU,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI,CAAC,IAAA,EAAK,EAAG,KAAK,EAAE,OAAA,EAAS,OAAA,EAAS,CAAC,CAAC,CAAA;AACnF,IAAA,OAAO,OAAA,CAAQ,QAAQ,UAAU,CAAA;AAAA,EACnC,CAAA;AAAA;AAAA,EAGA,MAAA,EAAQ,OAAO,IAAA,EAAc,KAAA,KAAoD;AAC/E,IAAA,MAAM,cAAc,MAAA,CAAO,WAAA;AAAA,MACzB,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,CAAE,IAAI,CAAC,CAAC,GAAA,EAAK,EAAE,MAAM,CAAC,GAAA,EAAK,MAAA,CAAO,EAAE,CAAC,CAAC;AAAA,KAC5D;AACA,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,EAAE,OAAO,IAAA,EAAM,GAAG,aAAa,CAAA;AACzD,IAAA,OAAO,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,MAAW,EAAE,GAAG,KAAA,EAAO,IAAA,EAAM,KAAA,CAAM,IAAA,CAAK,OAAA,CAAQ,OAAA,EAAS,EAAE,GAAE,CAAE,CAAA;AAAA,EACpF,CAAA;AAAA,EAEA,OAAA,EAAS;AAAA,IACP,UAAA,EAAY,MACV,YAAA,CAAa;AAAA;AAAA,MAEX,QAAA,EAAU,CAAC,MAAA,EAAQ,YAAA,EAAc,EAAE,KAAA,EAAO,cAAA,IAAkB,CAAA;AAAA,MAC5D,OAAA,EAAS,MAAM,IAAA,CAAK,UAAA;AAAW,KAChC,CAAA;AAAA,IAEH,MAAA,EAAQ,CAAC,IAAA,EAAc,KAAA,KACrB,YAAA,CAAa;AAAA,MACX,QAAA,EAAU,CAAC,MAAA,EAAQ,QAAA,EAAU,MAAM,KAAK,CAAA;AAAA,MACxC,OAAA,EAAS,MAAM,IAAA,CAAK,MAAA,CAAO,MAAM,KAAK;AAAA,KACvC;AAAA;AAEP","file":"chunk-FZH27PXS.js","sourcesContent":["import { queryOptions } from '@tanstack/react-query';\nimport { api, getActiveScope } from './client';\nimport type { HomeComponentData } from '../types';\n\n/** The page a hook's blocks render on; blocks can target specific products, categories or pages. */\nexport type BlockScope =\n { product_id: number | string } | { category_id: number | string } | { page_id: number | string };\n\nasync function list(params?: Record<string, string>): Promise<HomeComponentData[]> {\n const query = params ? `?${new URLSearchParams(params).toString()}` : '';\n const { data } = await api.get(`component/list${query}`).json<{ data: HomeComponentData[] }>();\n return data ?? [];\n}\n\n/** `blocks` minus each of `excluded`, matched by content: the API sends no id or order to match on. */\nfunction without(blocks: HomeComponentData[], excluded: HomeComponentData[]): HomeComponentData[] {\n if (!excluded.length) return blocks;\n const paths = new Set(excluded.map((block) => block.path));\n const left = excluded.map((block) => JSON.stringify(block));\n return blocks.filter((block) => {\n if (!paths.has(block.path)) return true;\n const index = left.indexOf(JSON.stringify(block));\n if (index === -1) return true;\n left.splice(index, 1);\n return false;\n });\n}\n\nexport const home = {\n components: async (): Promise<HomeComponentData[]> => {\n // The unfiltered list also has the product, category and page blocks, which the home leaves out.\n const [blocks, pageBlocks] = await Promise.all([list(), list({ show_in: 'pages' })]);\n return without(blocks, pageBlocks);\n },\n\n /** The blocks the merchant placed at `hook` on a product, category or page. */\n blocks: async (hook: string, scope: BlockScope): Promise<HomeComponentData[]> => {\n const scopeParams = Object.fromEntries(\n Object.entries(scope).map(([key, id]) => [key, String(id)])\n );\n const blocks = await list({ hooks: hook, ...scopeParams });\n return blocks.map((block) => ({ ...block, path: block.path.replace('home.', '') }));\n },\n\n queries: {\n components: () =>\n queryOptions({\n // Each market (scope) has its own theme version, and its own home page with it.\n queryKey: ['home', 'components', { scope: getActiveScope() }],\n queryFn: () => home.components(),\n }),\n\n blocks: (hook: string, scope: BlockScope) =>\n queryOptions({\n queryKey: ['home', 'blocks', hook, scope],\n queryFn: () => home.blocks(hook, scope),\n }),\n },\n};\n"]}
1
+ {"version":3,"sources":["../src/api/home.ts"],"names":[],"mappings":";;;AAQA,eAAe,KAAK,MAAA,EAA+D;AACjF,EAAA,MAAM,KAAA,GAAQ,SAAS,CAAA,CAAA,EAAI,IAAI,gBAAgB,MAAM,CAAA,CAAE,QAAA,EAAU,CAAA,CAAA,GAAK,EAAA;AACtE,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,GAAA,CAAI,IAAI,CAAA,cAAA,EAAiB,KAAK,CAAA,CAAE,CAAA,CAAE,IAAA,EAAoC;AAC7F,EAAA,OAAO,QAAQ,EAAC;AAClB;AAGA,SAAS,OAAA,CAAQ,QAA6B,QAAA,EAAoD;AAChG,EAAA,IAAI,CAAC,QAAA,CAAS,MAAA,EAAQ,OAAO,MAAA;AAC7B,EAAA,MAAM,KAAA,GAAQ,IAAI,GAAA,CAAI,QAAA,CAAS,IAAI,CAAC,KAAA,KAAU,KAAA,CAAM,IAAI,CAAC,CAAA;AACzD,EAAA,MAAM,IAAA,GAAO,SAAS,GAAA,CAAI,CAAC,UAAU,IAAA,CAAK,SAAA,CAAU,KAAK,CAAC,CAAA;AAC1D,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,CAAC,KAAA,KAAU;AAC9B,IAAA,IAAI,CAAC,KAAA,CAAM,GAAA,CAAI,KAAA,CAAM,IAAI,GAAG,OAAO,IAAA;AACnC,IAAA,MAAM,QAAQ,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,SAAA,CAAU,KAAK,CAAC,CAAA;AAChD,IAAA,IAAI,KAAA,KAAU,IAAI,OAAO,IAAA;AACzB,IAAA,IAAA,CAAK,MAAA,CAAO,OAAO,CAAC,CAAA;AACpB,IAAA,OAAO,KAAA;AAAA,EACT,CAAC,CAAA;AACH;AAEO,IAAM,IAAA,GAAO;AAAA,EAClB,YAAY,YAA0C;AAEpD,IAAA,MAAM,CAAC,MAAA,EAAQ,UAAU,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI,CAAC,IAAA,EAAK,EAAG,KAAK,EAAE,OAAA,EAAS,OAAA,EAAS,CAAC,CAAC,CAAA;AACnF,IAAA,OAAO,OAAA,CAAQ,QAAQ,UAAU,CAAA;AAAA,EACnC,CAAA;AAAA;AAAA,EAGA,MAAA,EAAQ,OAAO,IAAA,EAAc,KAAA,KAAoD;AAC/E,IAAA,MAAM,cAAc,MAAA,CAAO,WAAA;AAAA,MACzB,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,CAAE,IAAI,CAAC,CAAC,GAAA,EAAK,EAAE,MAAM,CAAC,GAAA,EAAK,MAAA,CAAO,EAAE,CAAC,CAAC;AAAA,KAC5D;AACA,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,EAAE,OAAO,IAAA,EAAM,GAAG,aAAa,CAAA;AACzD,IAAA,OAAO,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,MAAW,EAAE,GAAG,KAAA,EAAO,IAAA,EAAM,KAAA,CAAM,IAAA,CAAK,OAAA,CAAQ,OAAA,EAAS,EAAE,GAAE,CAAE,CAAA;AAAA,EACpF,CAAA;AAAA,EAEA,OAAA,EAAS;AAAA,IACP,UAAA,EAAY,MACV,YAAA,CAAa;AAAA;AAAA,MAEX,QAAA,EAAU,CAAC,MAAA,EAAQ,YAAA,EAAc,EAAE,KAAA,EAAO,cAAA,IAAkB,CAAA;AAAA,MAC5D,OAAA,EAAS,MAAM,IAAA,CAAK,UAAA;AAAW,KAChC,CAAA;AAAA,IAEH,MAAA,EAAQ,CAAC,IAAA,EAAc,KAAA,KACrB,YAAA,CAAa;AAAA,MACX,QAAA,EAAU,CAAC,MAAA,EAAQ,QAAA,EAAU,MAAM,KAAK,CAAA;AAAA,MACxC,OAAA,EAAS,MAAM,IAAA,CAAK,MAAA,CAAO,MAAM,KAAK;AAAA,KACvC;AAAA;AAEP","file":"chunk-5HOD4BKK.js","sourcesContent":["import { queryOptions } from '@tanstack/react-query';\nimport { api, getActiveScope } from './client';\nimport type { HomeComponentData } from '../types';\n\n/** The page a hook's blocks render on; blocks can target specific products, categories or pages. */\nexport type BlockScope =\n { product_id: number | string } | { category_id: number | string } | { page_id: number | string };\n\nasync function list(params?: Record<string, string>): Promise<HomeComponentData[]> {\n const query = params ? `?${new URLSearchParams(params).toString()}` : '';\n const { data } = await api.get(`component/list${query}`).json<{ data: HomeComponentData[] }>();\n return data ?? [];\n}\n\n/** `blocks` minus each of `excluded`, matched by content: the API sends no id or order to match on. */\nfunction without(blocks: HomeComponentData[], excluded: HomeComponentData[]): HomeComponentData[] {\n if (!excluded.length) return blocks;\n const paths = new Set(excluded.map((block) => block.path));\n const left = excluded.map((block) => JSON.stringify(block));\n return blocks.filter((block) => {\n if (!paths.has(block.path)) return true;\n const index = left.indexOf(JSON.stringify(block));\n if (index === -1) return true;\n left.splice(index, 1);\n return false;\n });\n}\n\nexport const home = {\n components: async (): Promise<HomeComponentData[]> => {\n // The unfiltered list also has the product, category and page blocks, which the home leaves out.\n const [blocks, pageBlocks] = await Promise.all([list(), list({ show_in: 'pages' })]);\n return without(blocks, pageBlocks);\n },\n\n /** The blocks the merchant placed at `hook` on a product, category or page. */\n blocks: async (hook: string, scope: BlockScope): Promise<HomeComponentData[]> => {\n const scopeParams = Object.fromEntries(\n Object.entries(scope).map(([key, id]) => [key, String(id)])\n );\n const blocks = await list({ hooks: hook, ...scopeParams });\n return blocks.map((block) => ({ ...block, path: block.path.replace('home.', '') }));\n },\n\n queries: {\n components: () =>\n queryOptions({\n // Each market (scope) has its own theme version, and its own home page with it.\n queryKey: ['home', 'components', { scope: getActiveScope() }],\n queryFn: () => home.components(),\n }),\n\n blocks: (hook: string, scope: BlockScope) =>\n queryOptions({\n queryKey: ['home', 'blocks', hook, scope],\n queryFn: () => home.blocks(hook, scope),\n }),\n },\n};\n"]}
@@ -1,10 +1,10 @@
1
1
  import { buildHreflangAlternates } from './chunk-TZ3E5BN4.js';
2
- import { HomeComponentRenderer } from './chunk-5NUQ6UAK.js';
3
- import { home } from './chunk-FZH27PXS.js';
2
+ import { HomeComponentRenderer } from './chunk-VVAV3DJL.js';
3
+ import { home } from './chunk-5HOD4BKK.js';
4
4
  import { useDevHomeComponentOverrides } from './chunk-2JV6WZ6O.js';
5
5
  import { RouteId } from './chunk-ZGHRSRDO.js';
6
- import { getTwilightContext } from './chunk-N2S25NXP.js';
7
6
  import { HookSlot } from './chunk-Q7VWURUR.js';
7
+ import { getTwilightContext } from './chunk-N2S25NXP.js';
8
8
  import { memo } from 'react';
9
9
  import { Pulse } from '@salla.sa/twilight-components-react';
10
10
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
@@ -84,5 +84,5 @@ function head(ctx) {
84
84
  var Home = { id: RouteId.INDEX, loader, head, Component: HomePage };
85
85
 
86
86
  export { Home, HomeSkeleton, homeLoader };
87
- //# sourceMappingURL=chunk-M5WPU7BR.js.map
88
- //# sourceMappingURL=chunk-M5WPU7BR.js.map
87
+ //# sourceMappingURL=chunk-5ZTYXQ7T.js.map
88
+ //# sourceMappingURL=chunk-5ZTYXQ7T.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/routes/home/loader.ts","../src/routes/home/HomePage.tsx","../src/routes/home/index.tsx"],"names":["HomeSkeleton","HomePage"],"mappings":"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","file":"chunk-M5WPU7BR.js","sourcesContent":["import { getTwilightContext } from '../../twilight/context';\nimport { home } from '../../api/home';\nimport type { HomeComponentData } from '../../types';\nimport { RouteId } from '../../router/route-ids';\n\nexport interface HomeLoaderData {\n locale: string;\n components: HomeComponentData[];\n page: { slug: string };\n}\n\nexport async function homeLoader(ctx?: { locale?: string }): Promise<HomeLoaderData> {\n const { queryClient } = getTwilightContext();\n const components = await queryClient.ensureQueryData(home.queries.components());\n const result = {\n locale: ctx?.locale || 'ar',\n components: components.map((comp) => ({\n ...comp,\n path: comp.path?.replace('home.', '') || comp.path,\n })),\n page: { slug: RouteId.INDEX },\n };\n return result;\n}\n","import { memo } from 'react';\nimport { useDevHomeComponentOverrides } from '../../dev/dev-settings-store';\nimport { HookSlot } from '../../hooks';\nimport { HomeComponentRenderer } from '../../components/home';\nimport type { HomePageProps } from './types';\nimport { Pulse } from '@salla.sa/twilight-components-react';\n\nexport const HomeSkeleton = memo(function HomeSkeleton() {\n return (\n <>\n <div className=\"s-block container skeleton-block-hero\">\n <Pulse className=\"h-64 sm:h-80 rounded-md\" />\n </div>\n <div className=\"s-block container skeleton-block-products\">\n <Pulse className=\"h-10 w-48 mb-4\" />\n <div className=\"grid grid-cols-2 sm:grid-cols-4 gap-4\">\n {[1, 2, 3, 4].map((i) => (\n <Pulse key={i} className=\"h-56\" />\n ))}\n </div>\n </div>\n <div className=\"s-block container skeleton-block-products\">\n <Pulse className=\"h-10 w-48 mb-4\" />\n <div className=\"grid grid-cols-2 sm:grid-cols-4 gap-4\">\n {[1, 2, 3, 4].map((i) => (\n <Pulse key={i} className=\"h-56\" />\n ))}\n </div>\n </div>\n </>\n );\n});\n\nexport const HomePage = memo(function HomePage({ components = [] }: HomePageProps) {\n // Dev-mode only: overlay DevSettingsWidget component-field overrides onto the\n // blocks so edits render live. No-op passthrough in production builds.\n const renderedComponents = useDevHomeComponentOverrides(components);\n return (\n <>\n <HookSlot name=\"home:start\" />\n <HookSlot name=\"home:content\" />\n {renderedComponents.map((data, index) => (\n // `data.key` is the twilight.json catalog id, shared by every placement\n // of that block. Platform blocks send null. Position is unique.\n <HomeComponentRenderer key={index} data={data} index={index} />\n ))}\n <HookSlot name=\"home:end\" />\n </>\n );\n});\n\nexport { HomePage as default };\n","import type { HeadDescriptor } from '../../utils/head';\nimport { buildHreflangAlternates } from '../../utils/baseHead';\nimport type { HomeLoaderData } from './loader';\nimport { homeLoader } from './loader';\nimport type { TwilightContext } from '../../twilight/context';\nimport { HomePage } from './HomePage';\nimport { RouteId } from '../../router/route-ids';\n\nexport { HomeSkeleton } from './HomePage';\nexport { registerHomeComponents, DefaultHomeComponents } from '../../components/home/register';\nexport { registerHomeComponentConfig } from '../../components/home';\nexport type { HomePageProps } from './types';\nexport type { HomeLoaderData } from './loader';\nexport type {\n HomeComponentsProps,\n AnyHomeComponent,\n HomeComponentConfig,\n} from '../../components/home';\n\nfunction loader(_ctx?: { locale?: string }): Promise<HomeLoaderData> {\n return homeLoader({ locale: _ctx?.locale });\n}\n\nfunction head(ctx: TwilightContext): HeadDescriptor {\n const store = ctx.settings?.store;\n if (!store) return {};\n\n const title = store.meta?.title ?? store.name;\n const description = store.meta?.description ?? store.description;\n const keywords = store.meta?.keywords;\n\n return {\n title,\n description,\n keywords,\n canonical: store.url,\n openGraph: {\n type: 'website',\n title,\n description,\n images: store.logo,\n url: store.url,\n },\n twitter: {\n card: 'summary_large_image',\n title,\n description,\n images: store.logo,\n },\n alternateLanguages: buildHreflangAlternates(ctx.settings, ctx.location.pathname),\n };\n}\n\nexport const Home = { id: RouteId.INDEX, loader, head, Component: HomePage } as const;\n\nexport { homeLoader };\n"]}
1
+ {"version":3,"sources":["../src/routes/home/loader.ts","../src/routes/home/HomePage.tsx","../src/routes/home/index.tsx"],"names":["HomeSkeleton","HomePage"],"mappings":"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","file":"chunk-5ZTYXQ7T.js","sourcesContent":["import { getTwilightContext } from '../../twilight/context';\nimport { home } from '../../api/home';\nimport type { HomeComponentData } from '../../types';\nimport { RouteId } from '../../router/route-ids';\n\nexport interface HomeLoaderData {\n locale: string;\n components: HomeComponentData[];\n page: { slug: string };\n}\n\nexport async function homeLoader(ctx?: { locale?: string }): Promise<HomeLoaderData> {\n const { queryClient } = getTwilightContext();\n const components = await queryClient.ensureQueryData(home.queries.components());\n const result = {\n locale: ctx?.locale || 'ar',\n components: components.map((comp) => ({\n ...comp,\n path: comp.path?.replace('home.', '') || comp.path,\n })),\n page: { slug: RouteId.INDEX },\n };\n return result;\n}\n","import { memo } from 'react';\nimport { useDevHomeComponentOverrides } from '../../dev/dev-settings-store';\nimport { HookSlot } from '../../hooks';\nimport { HomeComponentRenderer } from '../../components/home';\nimport type { HomePageProps } from './types';\nimport { Pulse } from '@salla.sa/twilight-components-react';\n\nexport const HomeSkeleton = memo(function HomeSkeleton() {\n return (\n <>\n <div className=\"s-block container skeleton-block-hero\">\n <Pulse className=\"h-64 sm:h-80 rounded-md\" />\n </div>\n <div className=\"s-block container skeleton-block-products\">\n <Pulse className=\"h-10 w-48 mb-4\" />\n <div className=\"grid grid-cols-2 sm:grid-cols-4 gap-4\">\n {[1, 2, 3, 4].map((i) => (\n <Pulse key={i} className=\"h-56\" />\n ))}\n </div>\n </div>\n <div className=\"s-block container skeleton-block-products\">\n <Pulse className=\"h-10 w-48 mb-4\" />\n <div className=\"grid grid-cols-2 sm:grid-cols-4 gap-4\">\n {[1, 2, 3, 4].map((i) => (\n <Pulse key={i} className=\"h-56\" />\n ))}\n </div>\n </div>\n </>\n );\n});\n\nexport const HomePage = memo(function HomePage({ components = [] }: HomePageProps) {\n // Dev-mode only: overlay DevSettingsWidget component-field overrides onto the\n // blocks so edits render live. No-op passthrough in production builds.\n const renderedComponents = useDevHomeComponentOverrides(components);\n return (\n <>\n <HookSlot name=\"home:start\" />\n <HookSlot name=\"home:content\" />\n {renderedComponents.map((data, index) => (\n // `data.key` is the twilight.json catalog id, shared by every placement\n // of that block. Platform blocks send null. Position is unique.\n <HomeComponentRenderer key={index} data={data} index={index} />\n ))}\n <HookSlot name=\"home:end\" />\n </>\n );\n});\n\nexport { HomePage as default };\n","import type { HeadDescriptor } from '../../utils/head';\nimport { buildHreflangAlternates } from '../../utils/baseHead';\nimport type { HomeLoaderData } from './loader';\nimport { homeLoader } from './loader';\nimport type { TwilightContext } from '../../twilight/context';\nimport { HomePage } from './HomePage';\nimport { RouteId } from '../../router/route-ids';\n\nexport { HomeSkeleton } from './HomePage';\nexport { registerHomeComponents, DefaultHomeComponents } from '../../components/home/register';\nexport { registerHomeComponentConfig } from '../../components/home';\nexport type { HomePageProps } from './types';\nexport type { HomeLoaderData } from './loader';\nexport type {\n HomeComponentsProps,\n AnyHomeComponent,\n HomeComponentConfig,\n} from '../../components/home';\n\nfunction loader(_ctx?: { locale?: string }): Promise<HomeLoaderData> {\n return homeLoader({ locale: _ctx?.locale });\n}\n\nfunction head(ctx: TwilightContext): HeadDescriptor {\n const store = ctx.settings?.store;\n if (!store) return {};\n\n const title = store.meta?.title ?? store.name;\n const description = store.meta?.description ?? store.description;\n const keywords = store.meta?.keywords;\n\n return {\n title,\n description,\n keywords,\n canonical: store.url,\n openGraph: {\n type: 'website',\n title,\n description,\n images: store.logo,\n url: store.url,\n },\n twitter: {\n card: 'summary_large_image',\n title,\n description,\n images: store.logo,\n },\n alternateLanguages: buildHreflangAlternates(ctx.settings, ctx.location.pathname),\n };\n}\n\nexport const Home = { id: RouteId.INDEX, loader, head, Component: HomePage } as const;\n\nexport { homeLoader };\n"]}
@@ -1,10 +1,11 @@
1
1
  import { registry } from './chunk-342EPVXN.js';
2
- import { useMoney, useNumber } from './chunk-VR4FXFPY.js';
2
+ import { useMoney, useNumber } from './chunk-7N52RMEY.js';
3
3
  import { useAsset } from './chunk-Z653O7MX.js';
4
4
  import { useWishlist } from './chunk-GBWCXUPD.js';
5
5
  import { useTranslation } from './chunk-TYNZ5B2B.js';
6
- import { Image } from './chunk-66JAXHHY.js';
6
+ import { Image } from './chunk-I26VPNDP.js';
7
7
  import { LazyImageModal } from './chunk-CUG6VOLM.js';
8
+ import { isNativeApp } from './chunk-3IHFA2X5.js';
8
9
  import { useTwilight } from './chunk-DF6FBKDN.js';
9
10
  import { lazy, memo, useCallback, useMemo, useState, useEffect, Suspense } from 'react';
10
11
  import { SallaAddProductButton } from '@salla.sa/twilight-components-react/add-product-button';
@@ -14,10 +15,10 @@ import { jsxs, jsx } from 'react/jsx-runtime';
14
15
  import { SallaSlider } from '@salla.sa/twilight-components-react/slider';
15
16
 
16
17
  var LazyProductDetails = lazy(
17
- () => import('./ProductDetails-JC4V7MIG.js').then((m) => ({ default: m.ProductDetails }))
18
+ () => import('./ProductDetails-53UVIHR3.js').then((m) => ({ default: m.ProductDetails }))
18
19
  );
19
20
  var LazyAddToCartForm = lazy(
20
- () => import('./AddToCartForm-V5Q4YFK7.js').then((m) => ({ default: m.AddToCartForm }))
21
+ () => import('./AddToCartForm-RVJDH34Q.js').then((m) => ({ default: m.AddToCartForm }))
21
22
  );
22
23
  var PRODUCT_CARD_KEY = "product:card";
23
24
  var PRODUCT_IMAGE_SRCSET_WIDTHS = [150, 300, 450, 600];
@@ -259,8 +260,8 @@ function ProductGalleryContent({ product }) {
259
260
  return image.url ? [{ url: image.url, type: "image" }] : [];
260
261
  });
261
262
  const openNativeGallery = () => {
262
- if (!window.salla?.mobile?.isEnabled?.()) return false;
263
- window.salla.event.dispatch("mobile::gallery.open", { images: nativeGallery });
263
+ if (!isNativeApp()) return false;
264
+ window.salla?.event.dispatch("mobile::gallery.open", { images: nativeGallery });
264
265
  return true;
265
266
  };
266
267
  return /* @__PURE__ */ jsxs("div", { className: "sidebar md:sticky top-24 w-full md:!w-2/4 rtl:ml-8 ltr:mr-8 pb-8 md:pb-16 overflow-hidden shrink-0", children: [
@@ -417,5 +418,5 @@ function ThumbSlide({ image, index }) {
417
418
  }
418
419
 
419
420
  export { LazyAddToCartForm, LazyProductDetails, ProductCard, ProductGallery };
420
- //# sourceMappingURL=chunk-AMASCYNB.js.map
421
- //# sourceMappingURL=chunk-AMASCYNB.js.map
421
+ //# sourceMappingURL=chunk-6YIAULAP.js.map
422
+ //# sourceMappingURL=chunk-6YIAULAP.js.map