@salla.sa/twilight-theme-engine 1.0.46 → 1.0.48

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 (198) hide show
  1. package/dist/{AddToCartForm-OOHYADAR.js → AddToCartForm-5QCWKLPJ.js} +3 -3
  2. package/dist/{AddToCartForm-OOHYADAR.js.map → AddToCartForm-5QCWKLPJ.js.map} +1 -1
  3. package/dist/{BlogAuthorPage-WWW5AI5C.js → BlogAuthorPage-SJK25SGM.js} +15 -15
  4. package/dist/{BlogAuthorPage-WWW5AI5C.js.map → BlogAuthorPage-SJK25SGM.js.map} +1 -1
  5. package/dist/{BlogCategoryPage-NG3NK253.js → BlogCategoryPage-KRWHN3RE.js} +15 -15
  6. package/dist/{BlogCategoryPage-NG3NK253.js.map → BlogCategoryPage-KRWHN3RE.js.map} +1 -1
  7. package/dist/{BlogPage-45Q4NCJD.js → BlogPage-NSUA7VE5.js} +13 -13
  8. package/dist/{BlogPage-45Q4NCJD.js.map → BlogPage-NSUA7VE5.js.map} +1 -1
  9. package/dist/{BlogSinglePage-226G6GNY.js → BlogSinglePage-C2VSDMDP.js} +13 -13
  10. package/dist/{BlogSinglePage-226G6GNY.js.map → BlogSinglePage-C2VSDMDP.js.map} +1 -1
  11. package/dist/{BlogTagPage-QXVLCJXK.js → BlogTagPage-HUXYKEQF.js} +15 -15
  12. package/dist/{BlogTagPage-QXVLCJXK.js.map → BlogTagPage-HUXYKEQF.js.map} +1 -1
  13. package/dist/{BrandsPage-TFPITVGL.js → BrandsPage-I3RMJZTB.js} +13 -13
  14. package/dist/{BrandsPage-TFPITVGL.js.map → BrandsPage-I3RMJZTB.js.map} +1 -1
  15. package/dist/{Breadcrumb-LXSYCVGP.js → Breadcrumb-A6QUPWMB.js} +13 -13
  16. package/dist/{Breadcrumb-LXSYCVGP.js.map → Breadcrumb-A6QUPWMB.js.map} +1 -1
  17. package/dist/{CartItem-7P2ZPNRC.js → CartItem-NEXK7VYX.js} +13 -13
  18. package/dist/{CartItem-7P2ZPNRC.js.map → CartItem-NEXK7VYX.js.map} +1 -1
  19. package/dist/{CartSummary-W6FWXDLZ.js → CartSummary-TUV2G2EJ.js} +13 -13
  20. package/dist/{CartSummary-W6FWXDLZ.js.map → CartSummary-TUV2G2EJ.js.map} +1 -1
  21. package/dist/{Copyright-WD5FF3T4.js → Copyright-4HKPWJOF.js} +3 -3
  22. package/dist/{Copyright-WD5FF3T4.js.map → Copyright-4HKPWJOF.js.map} +1 -1
  23. package/dist/{CustomerLayout-E7VEI6HY.js → CustomerLayout-RELEEQGD.js} +13 -13
  24. package/dist/{CustomerLayout-E7VEI6HY.js.map → CustomerLayout-RELEEQGD.js.map} +1 -1
  25. package/dist/{Footer-DGL76KHV.js → Footer-KIYYQZUF.js} +13 -13
  26. package/dist/{Footer-DGL76KHV.js.map → Footer-KIYYQZUF.js.map} +1 -1
  27. package/dist/{Header-IBSFB44P.js → Header-B452P6PJ.js} +6 -6
  28. package/dist/{Header-IBSFB44P.js.map → Header-B452P6PJ.js.map} +1 -1
  29. package/dist/{LoyaltyPage-LVJX2672.js → LoyaltyPage-QA2UVEO7.js} +14 -14
  30. package/dist/{LoyaltyPage-LVJX2672.js.map → LoyaltyPage-QA2UVEO7.js.map} +1 -1
  31. package/dist/{MainMenu-J3BUNME7.js → MainMenu-5EBPQ6OY.js} +7 -7
  32. package/dist/{MainMenu-J3BUNME7.js.map → MainMenu-5EBPQ6OY.js.map} +1 -1
  33. package/dist/{MasterLayout-SBIGH2HB.js → MasterLayout-PIVKKSYE.js} +13 -13
  34. package/dist/{MasterLayout-SBIGH2HB.js.map → MasterLayout-PIVKKSYE.js.map} +1 -1
  35. package/dist/{MobileMenu-GT5Y5G37.js → MobileMenu-BWELJ7YQ.js} +14 -14
  36. package/dist/{MobileMenu-GT5Y5G37.js.map → MobileMenu-BWELJ7YQ.js.map} +1 -1
  37. package/dist/{NotificationsPage-4IZU7OEO.js → NotificationsPage-4TGQB2BB.js} +13 -13
  38. package/dist/{NotificationsPage-4IZU7OEO.js.map → NotificationsPage-4TGQB2BB.js.map} +1 -1
  39. package/dist/{OrderSinglePage-ZNRBEGQS.js → OrderSinglePage-UQWOX7YQ.js} +14 -14
  40. package/dist/{OrderSinglePage-ZNRBEGQS.js.map → OrderSinglePage-UQWOX7YQ.js.map} +1 -1
  41. package/dist/{OrdersPage-TAMZXHKA.js → OrdersPage-NFZPCCFE.js} +14 -14
  42. package/dist/{OrdersPage-TAMZXHKA.js.map → OrdersPage-NFZPCCFE.js.map} +1 -1
  43. package/dist/{PageSingle-PRPYUPJQ.js → PageSingle-AERRZYAE.js} +3 -3
  44. package/dist/{PageSingle-PRPYUPJQ.js.map → PageSingle-AERRZYAE.js.map} +1 -1
  45. package/dist/{ProductDetails-TLJDAC6Z.js → ProductDetails-NZXETZCX.js} +3 -3
  46. package/dist/{ProductDetails-TLJDAC6Z.js.map → ProductDetails-NZXETZCX.js.map} +1 -1
  47. package/dist/{ProfilePage-CE6AJWBT.js → ProfilePage-A7PPNV7Q.js} +13 -13
  48. package/dist/{ProfilePage-CE6AJWBT.js.map → ProfilePage-A7PPNV7Q.js.map} +1 -1
  49. package/dist/{SeoCartWidget-KTU43V5G.js → SeoCartWidget-ONRQUR5A.js} +13 -13
  50. package/dist/{SeoCartWidget-KTU43V5G.js.map → SeoCartWidget-ONRQUR5A.js.map} +1 -1
  51. package/dist/{SettingsPage-4IHMDH7A.js → SettingsPage-CVKDP7ON.js} +13 -13
  52. package/dist/{SettingsPage-4IHMDH7A.js.map → SettingsPage-CVKDP7ON.js.map} +1 -1
  53. package/dist/{StoreClosedNotification-DXI3LH3Z.js → StoreClosedNotification-RZFLBK4P.js} +14 -14
  54. package/dist/{StoreClosedNotification-DXI3LH3Z.js.map → StoreClosedNotification-RZFLBK4P.js.map} +1 -1
  55. package/dist/{TestimonialsPage-7XPCC7G5.js → TestimonialsPage-B7RDWU6U.js} +3 -3
  56. package/dist/{TestimonialsPage-7XPCC7G5.js.map → TestimonialsPage-B7RDWU6U.js.map} +1 -1
  57. package/dist/{ThankYouPage-P36Q7WCY.js → ThankYouPage-VJQHHOLD.js} +13 -13
  58. package/dist/{ThankYouPage-P36Q7WCY.js.map → ThankYouPage-VJQHHOLD.js.map} +1 -1
  59. package/dist/{WalletPage-7BNJRH6H.js → WalletPage-6J5HODU3.js} +14 -14
  60. package/dist/{WalletPage-7BNJRH6H.js.map → WalletPage-6J5HODU3.js.map} +1 -1
  61. package/dist/{WishlistPage-CT3NBFQW.js → WishlistPage-VPHKKRRR.js} +15 -15
  62. package/dist/{WishlistPage-CT3NBFQW.js.map → WishlistPage-VPHKKRRR.js.map} +1 -1
  63. package/dist/api/apps.js +4 -4
  64. package/dist/api/brands.js +5 -5
  65. package/dist/api/cart.js +5 -5
  66. package/dist/api/category.js +5 -5
  67. package/dist/api/client.js +3 -3
  68. package/dist/api/home.js +4 -4
  69. package/dist/api/loyalty.js +5 -5
  70. package/dist/api/menu.js +4 -4
  71. package/dist/api/notification.js +4 -4
  72. package/dist/api/order.js +5 -5
  73. package/dist/api/page.js +5 -5
  74. package/dist/api/product.d.ts +6 -1
  75. package/dist/api/product.d.ts.map +1 -1
  76. package/dist/api/product.js +5 -5
  77. package/dist/api/profile.js +3 -3
  78. package/dist/api/store.js +4 -4
  79. package/dist/api/translations.js +4 -4
  80. package/dist/api/user.js +4 -4
  81. package/dist/api/wishlist.js +6 -6
  82. package/dist/{chunk-XKWRHCKI.js → chunk-3FIWHGCZ.js} +3 -3
  83. package/dist/{chunk-XKWRHCKI.js.map → chunk-3FIWHGCZ.js.map} +1 -1
  84. package/dist/{chunk-VVOJ5T6U.js → chunk-3MHDV5JS.js} +3 -3
  85. package/dist/{chunk-VVOJ5T6U.js.map → chunk-3MHDV5JS.js.map} +1 -1
  86. package/dist/{chunk-CNZGOERI.js → chunk-3YP2SQZ7.js} +4 -4
  87. package/dist/{chunk-CNZGOERI.js.map → chunk-3YP2SQZ7.js.map} +1 -1
  88. package/dist/{chunk-GARC3WHA.js → chunk-6L3XMWXX.js} +6 -6
  89. package/dist/{chunk-GARC3WHA.js.map → chunk-6L3XMWXX.js.map} +1 -1
  90. package/dist/{chunk-ENPQPRYV.js → chunk-AFSS4XNW.js} +4 -4
  91. package/dist/{chunk-ENPQPRYV.js.map → chunk-AFSS4XNW.js.map} +1 -1
  92. package/dist/{chunk-4I3BH73Z.js → chunk-BX2LJHEE.js} +5 -5
  93. package/dist/{chunk-4I3BH73Z.js.map → chunk-BX2LJHEE.js.map} +1 -1
  94. package/dist/{chunk-HMCEXUIP.js → chunk-CBNUZ7LI.js} +26 -14
  95. package/dist/chunk-CBNUZ7LI.js.map +1 -0
  96. package/dist/{chunk-OJQH7JB7.js → chunk-DHLA33CA.js} +3 -3
  97. package/dist/{chunk-OJQH7JB7.js.map → chunk-DHLA33CA.js.map} +1 -1
  98. package/dist/{chunk-TUKKZRKX.js → chunk-DQXVJYST.js} +6 -6
  99. package/dist/{chunk-TUKKZRKX.js.map → chunk-DQXVJYST.js.map} +1 -1
  100. package/dist/{chunk-UCSBJ5K2.js → chunk-EMKO3C2V.js} +4 -4
  101. package/dist/{chunk-UCSBJ5K2.js.map → chunk-EMKO3C2V.js.map} +1 -1
  102. package/dist/{chunk-OOOQN7HE.js → chunk-G2OFWZAU.js} +11 -11
  103. package/dist/{chunk-OOOQN7HE.js.map → chunk-G2OFWZAU.js.map} +1 -1
  104. package/dist/{chunk-4R2QJ7ZL.js → chunk-GXNQX4Z2.js} +4 -4
  105. package/dist/{chunk-4R2QJ7ZL.js.map → chunk-GXNQX4Z2.js.map} +1 -1
  106. package/dist/{chunk-SS6PMXD4.js → chunk-ICNOLZNT.js} +4 -4
  107. package/dist/{chunk-SS6PMXD4.js.map → chunk-ICNOLZNT.js.map} +1 -1
  108. package/dist/{chunk-YAYPUOHQ.js → chunk-IH3TQ3LD.js} +4 -4
  109. package/dist/{chunk-YAYPUOHQ.js.map → chunk-IH3TQ3LD.js.map} +1 -1
  110. package/dist/{chunk-TU2GYTBL.js → chunk-JD4J2ZB6.js} +3 -3
  111. package/dist/{chunk-TU2GYTBL.js.map → chunk-JD4J2ZB6.js.map} +1 -1
  112. package/dist/{chunk-ZCTMTICK.js → chunk-JEJR23P4.js} +4 -4
  113. package/dist/{chunk-ZCTMTICK.js.map → chunk-JEJR23P4.js.map} +1 -1
  114. package/dist/{chunk-LDNBA7H6.js → chunk-JK77XRXR.js} +3 -3
  115. package/dist/{chunk-LDNBA7H6.js.map → chunk-JK77XRXR.js.map} +1 -1
  116. package/dist/{chunk-LTOTQ75E.js → chunk-KT2MUSRN.js} +3 -3
  117. package/dist/{chunk-LTOTQ75E.js.map → chunk-KT2MUSRN.js.map} +1 -1
  118. package/dist/{chunk-QNYX2XLB.js → chunk-KV5R4LKM.js} +3 -3
  119. package/dist/{chunk-QNYX2XLB.js.map → chunk-KV5R4LKM.js.map} +1 -1
  120. package/dist/{chunk-62KII53A.js → chunk-L73AZXRJ.js} +15 -15
  121. package/dist/{chunk-62KII53A.js.map → chunk-L73AZXRJ.js.map} +1 -1
  122. package/dist/{chunk-OQR6N5L3.js → chunk-MENDTTOA.js} +3 -3
  123. package/dist/{chunk-OQR6N5L3.js.map → chunk-MENDTTOA.js.map} +1 -1
  124. package/dist/{chunk-FEATBCPL.js → chunk-O6XXHXC4.js} +4 -4
  125. package/dist/{chunk-FEATBCPL.js.map → chunk-O6XXHXC4.js.map} +1 -1
  126. package/dist/{chunk-4GYBBD5Q.js → chunk-OKP6LUT7.js} +4 -4
  127. package/dist/{chunk-4GYBBD5Q.js.map → chunk-OKP6LUT7.js.map} +1 -1
  128. package/dist/{chunk-KZPAFRHC.js → chunk-P4DUWQU4.js} +3 -3
  129. package/dist/{chunk-KZPAFRHC.js.map → chunk-P4DUWQU4.js.map} +1 -1
  130. package/dist/{chunk-PWQX77OG.js → chunk-PZL3JWM2.js} +3 -3
  131. package/dist/{chunk-PWQX77OG.js.map → chunk-PZL3JWM2.js.map} +1 -1
  132. package/dist/{chunk-U7OSJVFN.js → chunk-QKIQ3K24.js} +3 -3
  133. package/dist/{chunk-U7OSJVFN.js.map → chunk-QKIQ3K24.js.map} +1 -1
  134. package/dist/{chunk-6TAGXR2C.js → chunk-QQOFCR3L.js} +6 -6
  135. package/dist/{chunk-6TAGXR2C.js.map → chunk-QQOFCR3L.js.map} +1 -1
  136. package/dist/{chunk-AVDNMFUA.js → chunk-QUUSMVCP.js} +3 -3
  137. package/dist/{chunk-AVDNMFUA.js.map → chunk-QUUSMVCP.js.map} +1 -1
  138. package/dist/chunk-RCJRQGQO.js +14 -0
  139. package/dist/{chunk-YSOWRAZR.js.map → chunk-RCJRQGQO.js.map} +1 -1
  140. package/dist/{chunk-4WRWHIUU.js → chunk-UV5BRJH4.js} +3 -3
  141. package/dist/{chunk-4WRWHIUU.js.map → chunk-UV5BRJH4.js.map} +1 -1
  142. package/dist/{chunk-2NFVY2KK.js → chunk-VSBG4G2C.js} +4 -4
  143. package/dist/{chunk-2NFVY2KK.js.map → chunk-VSBG4G2C.js.map} +1 -1
  144. package/dist/{chunk-25NJ5RJO.js → chunk-WHOWSSX4.js} +4 -4
  145. package/dist/{chunk-25NJ5RJO.js.map → chunk-WHOWSSX4.js.map} +1 -1
  146. package/dist/{chunk-R6XKIKK6.js → chunk-WMSOSA74.js} +4 -4
  147. package/dist/{chunk-R6XKIKK6.js.map → chunk-WMSOSA74.js.map} +1 -1
  148. package/dist/{chunk-KY5DLFKQ.js → chunk-XTMHHLNK.js} +3 -3
  149. package/dist/chunk-XTMHHLNK.js.map +1 -0
  150. package/dist/{chunk-ASG64WXJ.js → chunk-Z74NUTEI.js} +3 -3
  151. package/dist/{chunk-ASG64WXJ.js.map → chunk-Z74NUTEI.js.map} +1 -1
  152. package/dist/{chunk-7ZPCIUMS.js → chunk-ZXJLVZIZ.js} +4 -4
  153. package/dist/{chunk-7ZPCIUMS.js.map → chunk-ZXJLVZIZ.js.map} +1 -1
  154. package/dist/components/cart/index.js +1 -1
  155. package/dist/components/common/index.js +1 -1
  156. package/dist/components/drawer/index.js +11 -11
  157. package/dist/components/home/index.js +14 -14
  158. package/dist/components/layout/index.js +5 -5
  159. package/dist/components/product/index.js +12 -12
  160. package/dist/components/store/index.js +13 -13
  161. package/dist/{document-class-DXABEK7X.js → document-class-SA2OXLP5.js} +12 -12
  162. package/dist/{document-class-DXABEK7X.js.map → document-class-SA2OXLP5.js.map} +1 -1
  163. package/dist/hooks/index.js +11 -11
  164. package/dist/hooks/useGtm.js +11 -11
  165. package/dist/hooks/useMoney.js +11 -11
  166. package/dist/hooks/useStore.js +11 -11
  167. package/dist/hooks/useUser.js +5 -5
  168. package/dist/index.js +11 -11
  169. package/dist/{navigation-JHGLXGSN.js → navigation-BCTD7TIG.js} +4 -4
  170. package/dist/{navigation-JHGLXGSN.js.map → navigation-BCTD7TIG.js.map} +1 -1
  171. package/dist/{navigation-E5CCL2TU.js → navigation-DF2RT7D6.js} +5 -5
  172. package/dist/{navigation-E5CCL2TU.js.map → navigation-DF2RT7D6.js.map} +1 -1
  173. package/dist/{not-found-CRT4YC5W.js → not-found-6CVGXYQ3.js} +13 -13
  174. package/dist/{not-found-CRT4YC5W.js.map → not-found-6CVGXYQ3.js.map} +1 -1
  175. package/dist/providers/index.js +11 -11
  176. package/dist/routes/account/orders.js +6 -6
  177. package/dist/routes/account.js +15 -15
  178. package/dist/routes/blog.js +10 -10
  179. package/dist/routes/brands.js +6 -6
  180. package/dist/routes/cart.js +19 -19
  181. package/dist/routes/home.js +16 -16
  182. package/dist/routes/index.js +3 -3
  183. package/dist/routes/loyalty.js +6 -6
  184. package/dist/routes/page.js +6 -6
  185. package/dist/routes/product-listing.js +16 -16
  186. package/dist/routes/product.js +14 -14
  187. package/dist/routes/seo-redirects.js +3 -3
  188. package/dist/routes/testimonials.js +1 -1
  189. package/dist/routes/thank-you.js +6 -6
  190. package/dist/skeleton.js +16 -16
  191. package/dist/tanstack.js +12 -12
  192. package/dist/utils/cookies.d.ts +20 -5
  193. package/dist/utils/cookies.d.ts.map +1 -1
  194. package/dist/utils/index.js +3 -3
  195. package/package.json +1 -1
  196. package/dist/chunk-HMCEXUIP.js.map +0 -1
  197. package/dist/chunk-KY5DLFKQ.js.map +0 -1
  198. package/dist/chunk-YSOWRAZR.js +0 -14
package/dist/api/cart.js CHANGED
@@ -1,9 +1,9 @@
1
- export { cart } from '../chunk-4R2QJ7ZL.js';
2
- import '../chunk-LDNBA7H6.js';
1
+ export { cart } from '../chunk-GXNQX4Z2.js';
2
+ import '../chunk-JK77XRXR.js';
3
3
  import '../chunk-MTONGOJD.js';
4
- import '../chunk-FEATBCPL.js';
5
- import '../chunk-XKWRHCKI.js';
6
- import '../chunk-KY5DLFKQ.js';
4
+ import '../chunk-O6XXHXC4.js';
5
+ import '../chunk-3FIWHGCZ.js';
6
+ import '../chunk-XTMHHLNK.js';
7
7
  import '../chunk-PJWFEMBX.js';
8
8
  import '../chunk-T72DAX7R.js';
9
9
  import '../chunk-DF6FBKDN.js';
@@ -1,9 +1,9 @@
1
- export { category } from '../chunk-25NJ5RJO.js';
2
- import '../chunk-LDNBA7H6.js';
1
+ export { category } from '../chunk-WHOWSSX4.js';
2
+ import '../chunk-JK77XRXR.js';
3
3
  import '../chunk-MTONGOJD.js';
4
- import '../chunk-FEATBCPL.js';
5
- import '../chunk-XKWRHCKI.js';
6
- import '../chunk-KY5DLFKQ.js';
4
+ import '../chunk-O6XXHXC4.js';
5
+ import '../chunk-3FIWHGCZ.js';
6
+ import '../chunk-XTMHHLNK.js';
7
7
  import '../chunk-PJWFEMBX.js';
8
8
  import '../chunk-T72DAX7R.js';
9
9
  import '../chunk-DF6FBKDN.js';
@@ -1,6 +1,6 @@
1
- export { STORE_IDENTIFIER_HEADER, api, cdn, getActiveScope, getActiveScopeId, getAuthToken } from '../chunk-FEATBCPL.js';
2
- import '../chunk-XKWRHCKI.js';
3
- import '../chunk-KY5DLFKQ.js';
1
+ export { STORE_IDENTIFIER_HEADER, api, cdn, getActiveScope, getActiveScopeId, getAuthToken } from '../chunk-O6XXHXC4.js';
2
+ import '../chunk-3FIWHGCZ.js';
3
+ import '../chunk-XTMHHLNK.js';
4
4
  import '../chunk-PJWFEMBX.js';
5
5
  import '../chunk-T72DAX7R.js';
6
6
  import '../chunk-DGUM43GV.js';
package/dist/api/home.js CHANGED
@@ -1,7 +1,7 @@
1
- export { home } from '../chunk-KZPAFRHC.js';
2
- import '../chunk-FEATBCPL.js';
3
- import '../chunk-XKWRHCKI.js';
4
- import '../chunk-KY5DLFKQ.js';
1
+ export { home } from '../chunk-P4DUWQU4.js';
2
+ import '../chunk-O6XXHXC4.js';
3
+ import '../chunk-3FIWHGCZ.js';
4
+ import '../chunk-XTMHHLNK.js';
5
5
  import '../chunk-PJWFEMBX.js';
6
6
  import '../chunk-T72DAX7R.js';
7
7
  import '../chunk-DGUM43GV.js';
@@ -1,9 +1,9 @@
1
- export { loyalty } from '../chunk-UCSBJ5K2.js';
2
- import '../chunk-LDNBA7H6.js';
1
+ export { loyalty } from '../chunk-EMKO3C2V.js';
2
+ import '../chunk-JK77XRXR.js';
3
3
  import '../chunk-MTONGOJD.js';
4
- import '../chunk-FEATBCPL.js';
5
- import '../chunk-XKWRHCKI.js';
6
- import '../chunk-KY5DLFKQ.js';
4
+ import '../chunk-O6XXHXC4.js';
5
+ import '../chunk-3FIWHGCZ.js';
6
+ import '../chunk-XTMHHLNK.js';
7
7
  import '../chunk-PJWFEMBX.js';
8
8
  import '../chunk-T72DAX7R.js';
9
9
  import '../chunk-DF6FBKDN.js';
package/dist/api/menu.js CHANGED
@@ -1,7 +1,7 @@
1
- export { menu } from '../chunk-4WRWHIUU.js';
2
- import '../chunk-FEATBCPL.js';
3
- import '../chunk-XKWRHCKI.js';
4
- import '../chunk-KY5DLFKQ.js';
1
+ export { menu } from '../chunk-UV5BRJH4.js';
2
+ import '../chunk-O6XXHXC4.js';
3
+ import '../chunk-3FIWHGCZ.js';
4
+ import '../chunk-XTMHHLNK.js';
5
5
  import '../chunk-PJWFEMBX.js';
6
6
  import '../chunk-T72DAX7R.js';
7
7
  import '../chunk-DGUM43GV.js';
@@ -1,7 +1,7 @@
1
- export { notification } from '../chunk-OQR6N5L3.js';
2
- import '../chunk-FEATBCPL.js';
3
- import '../chunk-XKWRHCKI.js';
4
- import '../chunk-KY5DLFKQ.js';
1
+ export { notification } from '../chunk-MENDTTOA.js';
2
+ import '../chunk-O6XXHXC4.js';
3
+ import '../chunk-3FIWHGCZ.js';
4
+ import '../chunk-XTMHHLNK.js';
5
5
  import '../chunk-PJWFEMBX.js';
6
6
  import '../chunk-T72DAX7R.js';
7
7
  import '../chunk-DGUM43GV.js';
package/dist/api/order.js CHANGED
@@ -1,9 +1,9 @@
1
- export { order } from '../chunk-4GYBBD5Q.js';
2
- import '../chunk-LDNBA7H6.js';
1
+ export { order } from '../chunk-OKP6LUT7.js';
2
+ import '../chunk-JK77XRXR.js';
3
3
  import '../chunk-MTONGOJD.js';
4
- import '../chunk-FEATBCPL.js';
5
- import '../chunk-XKWRHCKI.js';
6
- import '../chunk-KY5DLFKQ.js';
4
+ import '../chunk-O6XXHXC4.js';
5
+ import '../chunk-3FIWHGCZ.js';
6
+ import '../chunk-XTMHHLNK.js';
7
7
  import '../chunk-PJWFEMBX.js';
8
8
  import '../chunk-T72DAX7R.js';
9
9
  import '../chunk-DF6FBKDN.js';
package/dist/api/page.js CHANGED
@@ -1,9 +1,9 @@
1
- export { page } from '../chunk-SS6PMXD4.js';
2
- import '../chunk-LDNBA7H6.js';
1
+ export { page } from '../chunk-ICNOLZNT.js';
2
+ import '../chunk-JK77XRXR.js';
3
3
  import '../chunk-MTONGOJD.js';
4
- import '../chunk-FEATBCPL.js';
5
- import '../chunk-XKWRHCKI.js';
6
- import '../chunk-KY5DLFKQ.js';
4
+ import '../chunk-O6XXHXC4.js';
5
+ import '../chunk-3FIWHGCZ.js';
6
+ import '../chunk-XTMHHLNK.js';
7
7
  import '../chunk-PJWFEMBX.js';
8
8
  import '../chunk-T72DAX7R.js';
9
9
  import '../chunk-DF6FBKDN.js';
@@ -21,8 +21,13 @@ export type ProductsListSource = 'brands' | 'categories' | 'json' | 'landing-pag
21
21
  export interface ProductsListParams {
22
22
  /** Source type (wishlist, latest, brands, etc.) */
23
23
  source: ProductsListSource;
24
- /** Source value (brand_id, category_id, tag_id, search keyword, or JSON array of product IDs) */
24
+ /**
25
+ * The ids the source reads, as an array: category, brand, tag or product ids
26
+ * (`sourceValue: [708738657]`). Sent as `source_value[]`.
27
+ */
25
28
  sourceValue?: string | number | number[] | null;
29
+ /** The search words when `source` is `'search'`. Sent as `keyword`; other sources ignore it. */
30
+ keyword?: string;
26
31
  /** Page number for offset-based pagination */
27
32
  page?: number;
28
33
  /** Cursor for cursor-based pagination (from previous response) */
@@ -1 +1 @@
1
- {"version":3,"file":"product.d.ts","sourceRoot":"","sources":["../../src/api/product.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"product.d.ts","sourceRoot":"","sources":["../../src/api/product.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,9 @@
1
- export { getProductPreview, isProductPreviewQuery, product, productDetailQueryKey, productPreviewQueryKey, rememberProductPreview, shouldDehydrateQuery } from '../chunk-HMCEXUIP.js';
2
- import '../chunk-LDNBA7H6.js';
1
+ export { getProductPreview, isProductPreviewQuery, product, productDetailQueryKey, productPreviewQueryKey, rememberProductPreview, shouldDehydrateQuery } from '../chunk-CBNUZ7LI.js';
2
+ import '../chunk-JK77XRXR.js';
3
3
  import '../chunk-MTONGOJD.js';
4
- import '../chunk-FEATBCPL.js';
5
- import '../chunk-XKWRHCKI.js';
6
- import '../chunk-KY5DLFKQ.js';
4
+ import '../chunk-O6XXHXC4.js';
5
+ import '../chunk-3FIWHGCZ.js';
6
+ import '../chunk-XTMHHLNK.js';
7
7
  import '../chunk-PJWFEMBX.js';
8
8
  import '../chunk-T72DAX7R.js';
9
9
  import '../chunk-DF6FBKDN.js';
@@ -1,6 +1,6 @@
1
- import { api } from '../chunk-FEATBCPL.js';
2
- import '../chunk-XKWRHCKI.js';
3
- import '../chunk-KY5DLFKQ.js';
1
+ import { api } from '../chunk-O6XXHXC4.js';
2
+ import '../chunk-3FIWHGCZ.js';
3
+ import '../chunk-XTMHHLNK.js';
4
4
  import '../chunk-PJWFEMBX.js';
5
5
  import '../chunk-T72DAX7R.js';
6
6
  import '../chunk-DGUM43GV.js';
package/dist/api/store.js CHANGED
@@ -1,7 +1,7 @@
1
- export { store } from '../chunk-R6XKIKK6.js';
2
- import '../chunk-FEATBCPL.js';
3
- export { resolveStoreIdentifier } from '../chunk-XKWRHCKI.js';
4
- import '../chunk-KY5DLFKQ.js';
1
+ export { store } from '../chunk-WMSOSA74.js';
2
+ import '../chunk-O6XXHXC4.js';
3
+ export { resolveStoreIdentifier } from '../chunk-3FIWHGCZ.js';
4
+ import '../chunk-XTMHHLNK.js';
5
5
  import '../chunk-PJWFEMBX.js';
6
6
  import '../chunk-T72DAX7R.js';
7
7
  import '../chunk-DGUM43GV.js';
@@ -1,7 +1,7 @@
1
- export { translations } from '../chunk-LTOTQ75E.js';
2
- import '../chunk-FEATBCPL.js';
3
- import '../chunk-XKWRHCKI.js';
4
- import '../chunk-KY5DLFKQ.js';
1
+ export { translations } from '../chunk-KT2MUSRN.js';
2
+ import '../chunk-O6XXHXC4.js';
3
+ import '../chunk-3FIWHGCZ.js';
4
+ import '../chunk-XTMHHLNK.js';
5
5
  import '../chunk-PJWFEMBX.js';
6
6
  import '../chunk-T72DAX7R.js';
7
7
  import '../chunk-DGUM43GV.js';
package/dist/api/user.js CHANGED
@@ -1,7 +1,7 @@
1
- export { user } from '../chunk-ASG64WXJ.js';
2
- import '../chunk-FEATBCPL.js';
3
- import '../chunk-XKWRHCKI.js';
4
- import '../chunk-KY5DLFKQ.js';
1
+ export { user } from '../chunk-Z74NUTEI.js';
2
+ import '../chunk-O6XXHXC4.js';
3
+ import '../chunk-3FIWHGCZ.js';
4
+ import '../chunk-XTMHHLNK.js';
5
5
  import '../chunk-PJWFEMBX.js';
6
6
  import '../chunk-T72DAX7R.js';
7
7
  import '../chunk-DGUM43GV.js';
@@ -1,10 +1,10 @@
1
- export { wishlist } from '../chunk-2NFVY2KK.js';
2
- import '../chunk-HMCEXUIP.js';
3
- import '../chunk-LDNBA7H6.js';
1
+ export { wishlist } from '../chunk-VSBG4G2C.js';
2
+ import '../chunk-CBNUZ7LI.js';
3
+ import '../chunk-JK77XRXR.js';
4
4
  import '../chunk-MTONGOJD.js';
5
- import '../chunk-FEATBCPL.js';
6
- import '../chunk-XKWRHCKI.js';
7
- import '../chunk-KY5DLFKQ.js';
5
+ import '../chunk-O6XXHXC4.js';
6
+ import '../chunk-3FIWHGCZ.js';
7
+ import '../chunk-XTMHHLNK.js';
8
8
  import '../chunk-PJWFEMBX.js';
9
9
  import '../chunk-T72DAX7R.js';
10
10
  import '../chunk-DF6FBKDN.js';
@@ -1,4 +1,4 @@
1
- import { hostIdentifiesStore, resolveRequestStoreBase, storeBaseRedirectHref } from './chunk-KY5DLFKQ.js';
1
+ import { hostIdentifiesStore, resolveRequestStoreBase, storeBaseRedirectHref } from './chunk-XTMHHLNK.js';
2
2
  import { getRequestStore } from './chunk-PJWFEMBX.js';
3
3
 
4
4
  // src/utils/inline-script.ts
@@ -97,5 +97,5 @@ function syncSdkLocale(locale) {
97
97
  }
98
98
 
99
99
  export { escapeForInlineScript, getInjectedRuntimeEnv, getSallaSDK, getStoreIdentifier, readEnv, renderRuntimeEnvScript, resolveStoreBase, resolveStoreBaseRedirect, resolveStoreIdentifier, syncSdkLocale };
100
- //# sourceMappingURL=chunk-XKWRHCKI.js.map
101
- //# sourceMappingURL=chunk-XKWRHCKI.js.map
100
+ //# sourceMappingURL=chunk-3FIWHGCZ.js.map
101
+ //# sourceMappingURL=chunk-3FIWHGCZ.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/inline-script.ts","../src/utils/runtime-env.ts","../src/utils/store-identity.ts","../src/utils/sdk-helpers.ts"],"names":[],"mappings":"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","file":"chunk-XKWRHCKI.js","sourcesContent":["/**\n * Escape a JSON-stringified value for safe embedding inside an inline `<script>` body.\n *\n * The head injects script bodies raw, so a `</script>` inside partner-set data would break out\n * of the tag; U+2028/U+2029 are line terminators in JS but not in JSON, so they must go too.\n */\nexport function escapeForInlineScript(value: string): string {\n return value\n .replace(/</g, '\\\\u003c')\n .replace(/>/g, '\\\\u003e')\n .replace(/&/g, '\\\\u0026')\n .replace(/\\u2028/g, '\\\\u2028')\n .replace(/\\u2029/g, '\\\\u2029');\n}\n","import { escapeForInlineScript } from './inline-script';\nimport { getRequestStore } from '../twilight/context';\nimport { hostIdentifiesStore } from './cookies';\n\n/** Where `rootHead` publishes the SSR-resolved env for the browser bundle to read. */\nconst RUNTIME_ENV_KEY = '__SALLA_RUNTIME_ENV__';\n\n/** The env values that must agree between the SSR render and the hydrated client. */\nexport interface RuntimeEnv {\n /** Store API base — `VITE_API_URL`. */\n apiBase?: string;\n /** Store identifier — `VITE_STORE_DOMAIN`. */\n storeIdentifier?: string;\n /**\n * The theme-settings version the request named, if any.\n *\n * Published for the same reason `storeIdentifier` is: the dispatcher strips\n * `?versionId=` on the way in, so by the time the browser has the page its own\n * URL no longer says which version it is showing. Without this the hydrated\n * client would ask the API about the store's live version and quietly replace\n * the draft it was handed.\n *\n * Absent — not empty — when nothing named one, so it drops out of the inline\n * script entirely rather than publishing a value that means \"live\".\n */\n versionId?: string;\n /**\n * The store segment at the root of this page's paths, when the store is\n * addressed that way — see `resolveStoreBase`.\n *\n * Published because the browser's address is not always the URL the server\n * read: the dispatcher removes `?storeId=` from the request it forwards but not\n * from the address bar, and a URL carrying it is never read for a segment. The\n * client builds its router from this, and a router that disagreed with the\n * server about the root would hydrate a different page.\n */\n storeBase?: string;\n}\n\n/**\n * A build-time `import.meta.env` var, falling back to the worker's runtime `process.env`\n * (wrangler `vars`, exposed via the `nodejs_compat_populate_process_env` flag).\n */\nexport function readEnv(key: string): string | undefined {\n try {\n const vite = (import.meta as unknown as { env?: Record<string, string | undefined> }).env?.[\n key\n ];\n if (vite) return vite;\n } catch {\n /* import.meta.env not available in all environments */\n }\n return typeof process !== 'undefined' ? process.env?.[key] : undefined;\n}\n\n/**\n * What this runtime resolves from its own env — server-side that includes the worker vars.\n * Prefers what the server already published, so re-rendering the head during hydration yields\n * the same script instead of dropping it.\n */\nexport function resolveRuntimeEnv(): RuntimeEnv {\n const injected = getInjectedRuntimeEnv();\n const { storeId, storeBase, versionId, requestHost } = getRequestStore();\n return {\n apiBase: injected.apiBase || readEnv('VITE_API_URL'),\n // The request outranks the build-time var here for the same reason it does\n // in `resolveStoreIdentifier`, and this is the copy that reaches the\n // browser: publish the store SSR actually rendered, or hydration resolves\n // again from a URL whose `?storeId=` the dispatcher has already stripped and\n // queries a different store than the markup it is hydrating.\n storeIdentifier:\n injected.storeIdentifier ||\n storeId ||\n storeBase ||\n (hostIdentifiesStore(requestHost) ? requestHost : null) ||\n readEnv('VITE_STORE_DOMAIN'),\n // Absent rather than empty when the path named no store, so it drops out of\n // the inline script, like `versionId`.\n storeBase: injected.storeBase || storeBase || undefined,\n // No env fallback on purpose. A store identifier has one because a build can\n // legitimately be pinned to a store; a version is something a request asks\n // for, and a build-time default would make every visitor of every store see\n // whichever draft was current when the theme was compiled.\n versionId: injected.versionId || versionId || undefined,\n };\n}\n\n/**\n * The env the SSR worker resolved, as handed to the browser by `rootHead`. Empty on the server\n * and on a client whose head carried nothing.\n *\n * Worker `vars` are *runtime* env: they live in `process.env` on the server only, while\n * `import.meta.env` is substituted at build time. A bundle built without those vars therefore\n * sees `undefined` in the browser and silently falls back to the production defaults — SSR\n * would render off the configured backend while every post-hydration fetch hits another one.\n */\nexport function getInjectedRuntimeEnv(): RuntimeEnv {\n const holder = globalThis as typeof globalThis & { [RUNTIME_ENV_KEY]?: RuntimeEnv };\n return holder[RUNTIME_ENV_KEY] ?? {};\n}\n\n/**\n * Inline head `<script>` body publishing the server-resolved env, or null when there is nothing\n * to publish (no overrides configured — the defaults already agree on both sides).\n */\nexport function renderRuntimeEnvScript(env: RuntimeEnv = resolveRuntimeEnv()): string | null {\n const set = Object.entries(env).filter(([, value]) => Boolean(value));\n if (!set.length) return null;\n const json = escapeForInlineScript(JSON.stringify(Object.fromEntries(set)));\n return `window.${RUNTIME_ENV_KEY}=${json};`;\n}\n","/**\n * @fileoverview Which store to ask about — the one answer, in one place.\n *\n * This lived in two places once. `api/store.ts` learned to read the store a\n * request names, and `utils/sdk-helpers.ts` — the copy `api/client.ts` actually\n * sets the `store-identifier` header from — did not. So the resolver that had\n * been taught the answer was consulted for a null check and thrown away, every\n * outgoing request carried an empty identifier, the API answered\n * `422 Store Identifier not found`, and every published theme rendered\n * \"Store Unavailable\" while its tests passed: the client's suite mocked the\n * resolver, and the resolver's suite never went near a request.\n *\n * Hence one module, imported by both. If a third place ever needs a store\n * identifier, it imports this — a second implementation is the bug, not a\n * refactor away from it.\n *\n * See `docs/store-identity.md` for the full picture, including the security\n * boundary on who may name a store.\n */\nimport { getRequestStore } from '../twilight/context';\nimport { hostIdentifiesStore, resolveRequestStoreBase } from './cookies';\nimport { getInjectedRuntimeEnv, readEnv } from './runtime-env';\nimport { storeBaseRedirectHref } from './store-base';\n\n/**\n * Which store to ask about, in the order the answers can be trusted.\n *\n * A deployed theme worker is published with **no vars and no bindings** — the\n * script metadata carries `main_module`, compatibility settings, assets and tags\n * and nothing else — so `VITE_STORE_DOMAIN` exists only where a build baked it\n * in, which is local development. In production this function used to reach the\n * end of that chain and return the empty string, `store.settings` refused to\n * call with no identifier, and the root loader threw \"Store Unavailable\" — a\n * theme that renders its own failure page for every visitor of every store.\n *\n * The order:\n *\n * 1. what the caller passed, which is always deliberate;\n * 2. the store this request names — the `?storeId=` a preview was opened with,\n * then the cookie remembering it — seeded by `twilightMiddleware`, and only\n * on a host permitted to name one;\n * 3. the store the first segment of the path names, on those same hosts — its\n * username, which the API accepts as an identifier as readily as an id (see\n * {@link resolveStoreBase});\n * 4. what SSR already resolved and published, so the hydrated client asks about\n * the same store the server rendered instead of resolving again from a URL\n * that no longer names it;\n * 5. the request's own host, which *is* the identity of a live storefront —\n * but only when that host is a storefront. `preview.salla.design` and\n * `localhost` serve many stores, so their names identify none;\n * 6. `VITE_STORE_DOMAIN`, last, because a build-time constant is a development\n * convenience and must never outrank what the request actually said.\n *\n * Steps 2 and 3 never both answer: a path that names a store takes the place of\n * the cookie, and a URL carrying `?storeId=` is not read for a path segment.\n */\nexport function resolveStoreIdentifier(explicit?: string): string {\n if (explicit) return explicit;\n\n const { storeId, requestHost } = getRequestStore();\n if (storeId) return storeId;\n\n const storeBase = resolveStoreBase();\n if (storeBase) return storeBase;\n\n const injected = getInjectedRuntimeEnv().storeIdentifier;\n if (injected) return injected;\n\n if (hostIdentifiesStore(requestHost)) return requestHost as string;\n\n // The browser's own address, for a client render that reached neither of the\n // above — a live storefront, where the host is the store.\n const browserHost = typeof window !== 'undefined' ? window.location.host : null;\n if (hostIdentifiesStore(browserHost)) return browserHost as string;\n\n return readEnv('VITE_STORE_DOMAIN') || readEnv('STORE_DOMAIN') || '';\n}\n\n/**\n * The store segment at the root of this page's paths, or null when the store is\n * not addressed that way.\n *\n * On the server it is what `twilightMiddleware` read off the request. In the\n * browser it is what SSR published, because the address bar is not always the\n * URL the server rendered: on the preview host the dispatcher removes\n * `?storeId=` from the request it forwards and leaves it in the browser's, and a\n * URL carrying `storeId` is never read for a segment. Re-reading\n * `window.location` would, for `/ar?storeId=…`, route the page under a different\n * store than the one it was rendered for.\n *\n * The address bar is read only when SSR published nothing at all: a page the dev\n * server answered with its client shell instead of a render, where there is no\n * server decision to agree with.\n */\nexport function resolveStoreBase(): string | null {\n const { storeBase } = getRequestStore();\n if (storeBase) return storeBase;\n if (typeof window === 'undefined') return null;\n\n const published = getInjectedRuntimeEnv();\n if (published.storeBase) return published.storeBase;\n if (Object.keys(published).length > 0) return null;\n\n return resolveRequestStoreBase(window.location.href, window.location.host);\n}\n\n/**\n * The address this page should be loaded from instead, when the store is the root\n * of every URL on this host and this request did not use it; null otherwise.\n *\n * @param username - the store's username, from the settings the request loaded\n * @param href - the router's own href for the page, without any store segment\n *\n * See `storeBaseRedirectHref` for the rules. The host is the request's on the\n * server and the browser's own in the browser, so the decision is gated the same\n * way on both sides.\n */\nexport function resolveStoreBaseRedirect(\n username: string | null | undefined,\n href: string\n): string | null {\n const host =\n getRequestStore().requestHost ?? (typeof window !== 'undefined' ? window.location.host : null);\n return storeBaseRedirectHref({ host, base: resolveStoreBase(), username, href });\n}\n","export type { StoreContext } from '../api/store';\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/**\n * Push the active route locale onto the Salla SDK.\n *\n * Why this is needed (and why it must run on every navigation):\n * - The SDK seeds its locale from `navigator.language` — the theme sets no `s-lang`\n * cookie or `window.locale` — so an English browser starts the SDK in `en` even on\n * an `/ar` store.\n * - The SDK fixes its axios `accept-language` header ONCE, at init. `salla.lang.setLocale`\n * only swaps UI translations (it never touches the header), and `salla.init()` is a\n * no-op after `Salla.status === 'ready'`, so the header never refreshes on its own.\n * - `profile::info.fetched` (login / profile refresh on navigation) overrides the header\n * to the *account's* language.\n *\n * Net result without this: `salla.api.*` calls (cart/product details) return data in the\n * wrong locale — e.g. English cart item names on `/ar/cart` — intermittently, depending on\n * load order and whether a profile fetch ran. Re-asserting the URL locale here keeps the\n * header correct. No-op on the server and until the SDK exposes the methods.\n */\nexport function syncSdkLocale(locale: string): void {\n const sdk = getSallaSDK();\n if (!sdk || !locale) return;\n try {\n sdk.lang?.setLocale?.(locale);\n sdk.api?.setHeader?.('accept-language', locale);\n // The localization modal swaps `/${user.language_code}/` in the URL on submit;\n // the SDK never sets this locally, so without it the switch reloads the same page.\n sdk.config?.set?.('user.language_code', locale);\n } catch {\n // SDK partially loaded — the header is re-asserted on the next navigation.\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/utils/inline-script.ts","../src/utils/runtime-env.ts","../src/utils/store-identity.ts","../src/utils/sdk-helpers.ts"],"names":[],"mappings":"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","file":"chunk-3FIWHGCZ.js","sourcesContent":["/**\n * Escape a JSON-stringified value for safe embedding inside an inline `<script>` body.\n *\n * The head injects script bodies raw, so a `</script>` inside partner-set data would break out\n * of the tag; U+2028/U+2029 are line terminators in JS but not in JSON, so they must go too.\n */\nexport function escapeForInlineScript(value: string): string {\n return value\n .replace(/</g, '\\\\u003c')\n .replace(/>/g, '\\\\u003e')\n .replace(/&/g, '\\\\u0026')\n .replace(/\\u2028/g, '\\\\u2028')\n .replace(/\\u2029/g, '\\\\u2029');\n}\n","import { escapeForInlineScript } from './inline-script';\nimport { getRequestStore } from '../twilight/context';\nimport { hostIdentifiesStore } from './cookies';\n\n/** Where `rootHead` publishes the SSR-resolved env for the browser bundle to read. */\nconst RUNTIME_ENV_KEY = '__SALLA_RUNTIME_ENV__';\n\n/** The env values that must agree between the SSR render and the hydrated client. */\nexport interface RuntimeEnv {\n /** Store API base — `VITE_API_URL`. */\n apiBase?: string;\n /** Store identifier — `VITE_STORE_DOMAIN`. */\n storeIdentifier?: string;\n /**\n * The theme-settings version the request named, if any.\n *\n * Published for the same reason `storeIdentifier` is: the dispatcher strips\n * `?versionId=` on the way in, so by the time the browser has the page its own\n * URL no longer says which version it is showing. Without this the hydrated\n * client would ask the API about the store's live version and quietly replace\n * the draft it was handed.\n *\n * Absent — not empty — when nothing named one, so it drops out of the inline\n * script entirely rather than publishing a value that means \"live\".\n */\n versionId?: string;\n /**\n * The store segment at the root of this page's paths, when the store is\n * addressed that way — see `resolveStoreBase`.\n *\n * Published because the browser's address is not always the URL the server\n * read: the dispatcher removes `?storeId=` from the request it forwards but not\n * from the address bar, and a URL carrying it is never read for a segment. The\n * client builds its router from this, and a router that disagreed with the\n * server about the root would hydrate a different page.\n */\n storeBase?: string;\n}\n\n/**\n * A build-time `import.meta.env` var, falling back to the worker's runtime `process.env`\n * (wrangler `vars`, exposed via the `nodejs_compat_populate_process_env` flag).\n */\nexport function readEnv(key: string): string | undefined {\n try {\n const vite = (import.meta as unknown as { env?: Record<string, string | undefined> }).env?.[\n key\n ];\n if (vite) return vite;\n } catch {\n /* import.meta.env not available in all environments */\n }\n return typeof process !== 'undefined' ? process.env?.[key] : undefined;\n}\n\n/**\n * What this runtime resolves from its own env — server-side that includes the worker vars.\n * Prefers what the server already published, so re-rendering the head during hydration yields\n * the same script instead of dropping it.\n */\nexport function resolveRuntimeEnv(): RuntimeEnv {\n const injected = getInjectedRuntimeEnv();\n const { storeId, storeBase, versionId, requestHost } = getRequestStore();\n return {\n apiBase: injected.apiBase || readEnv('VITE_API_URL'),\n // The request outranks the build-time var here for the same reason it does\n // in `resolveStoreIdentifier`, and this is the copy that reaches the\n // browser: publish the store SSR actually rendered, or hydration resolves\n // again from a URL whose `?storeId=` the dispatcher has already stripped and\n // queries a different store than the markup it is hydrating.\n storeIdentifier:\n injected.storeIdentifier ||\n storeId ||\n storeBase ||\n (hostIdentifiesStore(requestHost) ? requestHost : null) ||\n readEnv('VITE_STORE_DOMAIN'),\n // Absent rather than empty when the path named no store, so it drops out of\n // the inline script, like `versionId`.\n storeBase: injected.storeBase || storeBase || undefined,\n // No env fallback on purpose. A store identifier has one because a build can\n // legitimately be pinned to a store; a version is something a request asks\n // for, and a build-time default would make every visitor of every store see\n // whichever draft was current when the theme was compiled.\n versionId: injected.versionId || versionId || undefined,\n };\n}\n\n/**\n * The env the SSR worker resolved, as handed to the browser by `rootHead`. Empty on the server\n * and on a client whose head carried nothing.\n *\n * Worker `vars` are *runtime* env: they live in `process.env` on the server only, while\n * `import.meta.env` is substituted at build time. A bundle built without those vars therefore\n * sees `undefined` in the browser and silently falls back to the production defaults — SSR\n * would render off the configured backend while every post-hydration fetch hits another one.\n */\nexport function getInjectedRuntimeEnv(): RuntimeEnv {\n const holder = globalThis as typeof globalThis & { [RUNTIME_ENV_KEY]?: RuntimeEnv };\n return holder[RUNTIME_ENV_KEY] ?? {};\n}\n\n/**\n * Inline head `<script>` body publishing the server-resolved env, or null when there is nothing\n * to publish (no overrides configured — the defaults already agree on both sides).\n */\nexport function renderRuntimeEnvScript(env: RuntimeEnv = resolveRuntimeEnv()): string | null {\n const set = Object.entries(env).filter(([, value]) => Boolean(value));\n if (!set.length) return null;\n const json = escapeForInlineScript(JSON.stringify(Object.fromEntries(set)));\n return `window.${RUNTIME_ENV_KEY}=${json};`;\n}\n","/**\n * @fileoverview Which store to ask about — the one answer, in one place.\n *\n * This lived in two places once. `api/store.ts` learned to read the store a\n * request names, and `utils/sdk-helpers.ts` — the copy `api/client.ts` actually\n * sets the `store-identifier` header from — did not. So the resolver that had\n * been taught the answer was consulted for a null check and thrown away, every\n * outgoing request carried an empty identifier, the API answered\n * `422 Store Identifier not found`, and every published theme rendered\n * \"Store Unavailable\" while its tests passed: the client's suite mocked the\n * resolver, and the resolver's suite never went near a request.\n *\n * Hence one module, imported by both. If a third place ever needs a store\n * identifier, it imports this — a second implementation is the bug, not a\n * refactor away from it.\n *\n * See `docs/store-identity.md` for the full picture, including the security\n * boundary on who may name a store.\n */\nimport { getRequestStore } from '../twilight/context';\nimport { hostIdentifiesStore, resolveRequestStoreBase } from './cookies';\nimport { getInjectedRuntimeEnv, readEnv } from './runtime-env';\nimport { storeBaseRedirectHref } from './store-base';\n\n/**\n * Which store to ask about, in the order the answers can be trusted.\n *\n * A deployed theme worker is published with **no vars and no bindings** — the\n * script metadata carries `main_module`, compatibility settings, assets and tags\n * and nothing else — so `VITE_STORE_DOMAIN` exists only where a build baked it\n * in, which is local development. In production this function used to reach the\n * end of that chain and return the empty string, `store.settings` refused to\n * call with no identifier, and the root loader threw \"Store Unavailable\" — a\n * theme that renders its own failure page for every visitor of every store.\n *\n * The order:\n *\n * 1. what the caller passed, which is always deliberate;\n * 2. the store this request names — the `?storeId=` a preview was opened with,\n * then the cookie remembering it — seeded by `twilightMiddleware`, and only\n * on a host permitted to name one;\n * 3. the store the first segment of the path names, on those same hosts — its\n * username, which the API accepts as an identifier as readily as an id (see\n * {@link resolveStoreBase});\n * 4. what SSR already resolved and published, so the hydrated client asks about\n * the same store the server rendered instead of resolving again from a URL\n * that no longer names it;\n * 5. the request's own host, which *is* the identity of a live storefront —\n * but only when that host is a storefront. `preview.salla.design` and\n * `localhost` serve many stores, so their names identify none;\n * 6. `VITE_STORE_DOMAIN`, last, because a build-time constant is a development\n * convenience and must never outrank what the request actually said.\n *\n * Steps 2 and 3 never both answer: a path that names a store takes the place of\n * the cookie, and a URL carrying `?storeId=` is not read for a path segment.\n */\nexport function resolveStoreIdentifier(explicit?: string): string {\n if (explicit) return explicit;\n\n const { storeId, requestHost } = getRequestStore();\n if (storeId) return storeId;\n\n const storeBase = resolveStoreBase();\n if (storeBase) return storeBase;\n\n const injected = getInjectedRuntimeEnv().storeIdentifier;\n if (injected) return injected;\n\n if (hostIdentifiesStore(requestHost)) return requestHost as string;\n\n // The browser's own address, for a client render that reached neither of the\n // above — a live storefront, where the host is the store.\n const browserHost = typeof window !== 'undefined' ? window.location.host : null;\n if (hostIdentifiesStore(browserHost)) return browserHost as string;\n\n return readEnv('VITE_STORE_DOMAIN') || readEnv('STORE_DOMAIN') || '';\n}\n\n/**\n * The store segment at the root of this page's paths, or null when the store is\n * not addressed that way.\n *\n * On the server it is what `twilightMiddleware` read off the request. In the\n * browser it is what SSR published, because the address bar is not always the\n * URL the server rendered: on the preview host the dispatcher removes\n * `?storeId=` from the request it forwards and leaves it in the browser's, and a\n * URL carrying `storeId` is never read for a segment. Re-reading\n * `window.location` would, for `/ar?storeId=…`, route the page under a different\n * store than the one it was rendered for.\n *\n * The address bar is read only when SSR published nothing at all: a page the dev\n * server answered with its client shell instead of a render, where there is no\n * server decision to agree with.\n */\nexport function resolveStoreBase(): string | null {\n const { storeBase } = getRequestStore();\n if (storeBase) return storeBase;\n if (typeof window === 'undefined') return null;\n\n const published = getInjectedRuntimeEnv();\n if (published.storeBase) return published.storeBase;\n if (Object.keys(published).length > 0) return null;\n\n return resolveRequestStoreBase(window.location.href, window.location.host);\n}\n\n/**\n * The address this page should be loaded from instead, when the store is the root\n * of every URL on this host and this request did not use it; null otherwise.\n *\n * @param username - the store's username, from the settings the request loaded\n * @param href - the router's own href for the page, without any store segment\n *\n * See `storeBaseRedirectHref` for the rules. The host is the request's on the\n * server and the browser's own in the browser, so the decision is gated the same\n * way on both sides.\n */\nexport function resolveStoreBaseRedirect(\n username: string | null | undefined,\n href: string\n): string | null {\n const host =\n getRequestStore().requestHost ?? (typeof window !== 'undefined' ? window.location.host : null);\n return storeBaseRedirectHref({ host, base: resolveStoreBase(), username, href });\n}\n","export type { StoreContext } from '../api/store';\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/**\n * Push the active route locale onto the Salla SDK.\n *\n * Why this is needed (and why it must run on every navigation):\n * - The SDK seeds its locale from `navigator.language` — the theme sets no `s-lang`\n * cookie or `window.locale` — so an English browser starts the SDK in `en` even on\n * an `/ar` store.\n * - The SDK fixes its axios `accept-language` header ONCE, at init. `salla.lang.setLocale`\n * only swaps UI translations (it never touches the header), and `salla.init()` is a\n * no-op after `Salla.status === 'ready'`, so the header never refreshes on its own.\n * - `profile::info.fetched` (login / profile refresh on navigation) overrides the header\n * to the *account's* language.\n *\n * Net result without this: `salla.api.*` calls (cart/product details) return data in the\n * wrong locale — e.g. English cart item names on `/ar/cart` — intermittently, depending on\n * load order and whether a profile fetch ran. Re-asserting the URL locale here keeps the\n * header correct. No-op on the server and until the SDK exposes the methods.\n */\nexport function syncSdkLocale(locale: string): void {\n const sdk = getSallaSDK();\n if (!sdk || !locale) return;\n try {\n sdk.lang?.setLocale?.(locale);\n sdk.api?.setHeader?.('accept-language', locale);\n // The localization modal swaps `/${user.language_code}/` in the URL on submit;\n // the SDK never sets this locally, so without it the switch reloads the same page.\n sdk.config?.set?.('user.language_code', locale);\n } catch {\n // SDK partially loaded — the header is re-asserted on the next navigation.\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { api } from './chunk-FEATBCPL.js';
1
+ import { api } from './chunk-O6XXHXC4.js';
2
2
  import { queryOptions } from '@tanstack/react-query';
3
3
 
4
4
  var apps = {
@@ -40,5 +40,5 @@ var apps = {
40
40
  };
41
41
 
42
42
  export { apps };
43
- //# sourceMappingURL=chunk-VVOJ5T6U.js.map
44
- //# sourceMappingURL=chunk-VVOJ5T6U.js.map
43
+ //# sourceMappingURL=chunk-3MHDV5JS.js.map
44
+ //# sourceMappingURL=chunk-3MHDV5JS.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/api/apps.ts"],"names":[],"mappings":";;;AAmCO,IAAM,IAAA,GAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAKlB,UAAU,YAAmC;AAC3C,IAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,GAAA,CACpB,GAAA,CAAI,eAAA,EAAiB,EAAE,OAAA,EAAS,IAAA,EAAM,CAAA,CACtC,IAAA,EAA8B;AACjC,IAAA,OAAO,QAAQ,EAAC;AAAA,EAClB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,UAAU,YAAkC;AAC1C,IAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,GAAA,CACpB,GAAA,CAAI,wBAAA,EAA0B,EAAE,OAAA,EAAS,IAAA,EAAM,CAAA,CAC/C,IAAA,EAAsC;AACzC,IAAA,OAAO,EAAE,IAAA,EAAM,IAAA,EAAM,IAAA,IAAQ,EAAC,EAAE;AAAA,EAClC,CAAA;AAAA,EAEA,OAAA,EAAS;AAAA,IACP,QAAA,EAAU,MACR,YAAA,CAAa;AAAA,MACX,QAAA,EAAU,CAAC,MAAA,EAAQ,UAAU,CAAA;AAAA,MAC7B,OAAA,EAAS,MAAM,IAAA,CAAK,QAAA,EAAS;AAAA;AAAA,MAE7B,SAAA,EAAW,QAAA;AAAA;AAAA;AAAA;AAAA,MAIX,KAAA,EAAO;AAAA,KACR,CAAA;AAAA,IAEH,QAAA,EAAU,MACR,YAAA,CAAa;AAAA,MACX,QAAA,EAAU,CAAC,MAAA,EAAQ,UAAU,CAAA;AAAA,MAC7B,OAAA,EAAS,MAAM,IAAA,CAAK,QAAA,EAAS;AAAA;AAAA,MAE7B,SAAA,EAAW,QAAA;AAAA,MACX,KAAA,EAAO;AAAA,KACR;AAAA;AAEP","file":"chunk-VVOJ5T6U.js","sourcesContent":["import { queryOptions } from '@tanstack/react-query';\nimport { api } from './client';\n\nexport interface AppSnippetRow {\n place: string;\n content: string;\n url?: string | null;\n /**\n * Raw snippet id, emitted as `data-snippet-id`. Present only on CDN rows — the\n * inline branch of the backend's snippet parser omits the key entirely.\n */\n id?: number;\n /** `{{customer.x}}` placeholders in `content` to substitute from SDK config `user.*` keys. */\n customer_parameters?: string[];\n}\n\nexport interface AppSnippet {\n service: string;\n app_id: string;\n /** Encoded app id (`getRouteKey()`): the scope id its snippets bind to via `data-scope-id`,\n * and its settings-bucket key. Absent on payloads predating the settings API. */\n id?: string;\n app_slug: string;\n status: string;\n snippets: AppSnippetRow[];\n}\n\n/**\n * Per-app public `app.*` buckets for CDN snippets, keyed by encoded app id (== `AppSnippet.id`,\n * the `Salla.appScope` scope id). One isolated bucket per app; reads within a scope are bare `app.*`.\n */\nexport interface AppSettings {\n apps: Record<string, Record<string, unknown>>;\n}\n\nexport const apps = {\n /**\n * Installed apps' snippets (scripts/HTML to inject). Timeout-bounded because it's awaited in\n * rootBeforeLoad (SSR/TTFB): a slow response degrades to no CDN tags, never stalls the page.\n */\n snippets: async (): Promise<AppSnippet[]> => {\n const { data } = await api\n .get('apps/snippets', { timeout: 2500 })\n .json<{ data?: AppSnippet[] }>();\n return data ?? [];\n },\n\n /**\n * Per-app public `app.*` buckets, keyed by encoded app id. Timeout-bounded (SSR-awaited):\n * a slow response degrades to empty buckets (fail-open), never strands injection.\n */\n settings: async (): Promise<AppSettings> => {\n const { data } = await api\n .get('apps/snippets/settings', { timeout: 2500 })\n .json<{ data?: Partial<AppSettings> }>();\n return { apps: data?.apps ?? {} };\n },\n\n queries: {\n snippets: () =>\n queryOptions({\n queryKey: ['apps', 'snippets'],\n queryFn: () => apps.snippets(),\n // Snippets are static per session; one fetch per page load is enough.\n staleTime: Infinity,\n // No retry: this is awaited in rootBeforeLoad, so the router's default `retry: 1` would\n // make the SSR wait 2 x the 2500ms timeout (plus backoff) before failing open. The\n // 2500ms timeout must be the whole budget; the client fallback query does the retrying.\n retry: 0,\n }),\n\n settings: () =>\n queryOptions({\n queryKey: ['apps', 'settings'],\n queryFn: () => apps.settings(),\n // Encoded app ids and their buckets are stable per page; one fetch is enough.\n staleTime: Infinity,\n retry: 0,\n }),\n },\n};\n"]}
1
+ {"version":3,"sources":["../src/api/apps.ts"],"names":[],"mappings":";;;AAmCO,IAAM,IAAA,GAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAKlB,UAAU,YAAmC;AAC3C,IAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,GAAA,CACpB,GAAA,CAAI,eAAA,EAAiB,EAAE,OAAA,EAAS,IAAA,EAAM,CAAA,CACtC,IAAA,EAA8B;AACjC,IAAA,OAAO,QAAQ,EAAC;AAAA,EAClB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,UAAU,YAAkC;AAC1C,IAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,GAAA,CACpB,GAAA,CAAI,wBAAA,EAA0B,EAAE,OAAA,EAAS,IAAA,EAAM,CAAA,CAC/C,IAAA,EAAsC;AACzC,IAAA,OAAO,EAAE,IAAA,EAAM,IAAA,EAAM,IAAA,IAAQ,EAAC,EAAE;AAAA,EAClC,CAAA;AAAA,EAEA,OAAA,EAAS;AAAA,IACP,QAAA,EAAU,MACR,YAAA,CAAa;AAAA,MACX,QAAA,EAAU,CAAC,MAAA,EAAQ,UAAU,CAAA;AAAA,MAC7B,OAAA,EAAS,MAAM,IAAA,CAAK,QAAA,EAAS;AAAA;AAAA,MAE7B,SAAA,EAAW,QAAA;AAAA;AAAA;AAAA;AAAA,MAIX,KAAA,EAAO;AAAA,KACR,CAAA;AAAA,IAEH,QAAA,EAAU,MACR,YAAA,CAAa;AAAA,MACX,QAAA,EAAU,CAAC,MAAA,EAAQ,UAAU,CAAA;AAAA,MAC7B,OAAA,EAAS,MAAM,IAAA,CAAK,QAAA,EAAS;AAAA;AAAA,MAE7B,SAAA,EAAW,QAAA;AAAA,MACX,KAAA,EAAO;AAAA,KACR;AAAA;AAEP","file":"chunk-3MHDV5JS.js","sourcesContent":["import { queryOptions } from '@tanstack/react-query';\nimport { api } from './client';\n\nexport interface AppSnippetRow {\n place: string;\n content: string;\n url?: string | null;\n /**\n * Raw snippet id, emitted as `data-snippet-id`. Present only on CDN rows — the\n * inline branch of the backend's snippet parser omits the key entirely.\n */\n id?: number;\n /** `{{customer.x}}` placeholders in `content` to substitute from SDK config `user.*` keys. */\n customer_parameters?: string[];\n}\n\nexport interface AppSnippet {\n service: string;\n app_id: string;\n /** Encoded app id (`getRouteKey()`): the scope id its snippets bind to via `data-scope-id`,\n * and its settings-bucket key. Absent on payloads predating the settings API. */\n id?: string;\n app_slug: string;\n status: string;\n snippets: AppSnippetRow[];\n}\n\n/**\n * Per-app public `app.*` buckets for CDN snippets, keyed by encoded app id (== `AppSnippet.id`,\n * the `Salla.appScope` scope id). One isolated bucket per app; reads within a scope are bare `app.*`.\n */\nexport interface AppSettings {\n apps: Record<string, Record<string, unknown>>;\n}\n\nexport const apps = {\n /**\n * Installed apps' snippets (scripts/HTML to inject). Timeout-bounded because it's awaited in\n * rootBeforeLoad (SSR/TTFB): a slow response degrades to no CDN tags, never stalls the page.\n */\n snippets: async (): Promise<AppSnippet[]> => {\n const { data } = await api\n .get('apps/snippets', { timeout: 2500 })\n .json<{ data?: AppSnippet[] }>();\n return data ?? [];\n },\n\n /**\n * Per-app public `app.*` buckets, keyed by encoded app id. Timeout-bounded (SSR-awaited):\n * a slow response degrades to empty buckets (fail-open), never strands injection.\n */\n settings: async (): Promise<AppSettings> => {\n const { data } = await api\n .get('apps/snippets/settings', { timeout: 2500 })\n .json<{ data?: Partial<AppSettings> }>();\n return { apps: data?.apps ?? {} };\n },\n\n queries: {\n snippets: () =>\n queryOptions({\n queryKey: ['apps', 'snippets'],\n queryFn: () => apps.snippets(),\n // Snippets are static per session; one fetch per page load is enough.\n staleTime: Infinity,\n // No retry: this is awaited in rootBeforeLoad, so the router's default `retry: 1` would\n // make the SSR wait 2 x the 2500ms timeout (plus backoff) before failing open. The\n // 2500ms timeout must be the whole budget; the client fallback query does the retrying.\n retry: 0,\n }),\n\n settings: () =>\n queryOptions({\n queryKey: ['apps', 'settings'],\n queryFn: () => apps.settings(),\n // Encoded app ids and their buckets are stable per page; one fetch is enough.\n staleTime: Infinity,\n retry: 0,\n }),\n },\n};\n"]}
@@ -1,6 +1,6 @@
1
- import { home } from './chunk-KZPAFRHC.js';
1
+ import { home } from './chunk-P4DUWQU4.js';
2
2
  import { buildHreflangAlternates } from './chunk-TZ3E5BN4.js';
3
- import { HomeComponentRenderer } from './chunk-4I3BH73Z.js';
3
+ import { HomeComponentRenderer } from './chunk-BX2LJHEE.js';
4
4
  import { useDevHomeComponentOverrides } from './chunk-2JV6WZ6O.js';
5
5
  import { RouteId } from './chunk-MTONGOJD.js';
6
6
  import { getTwilightContext } from './chunk-PJWFEMBX.js';
@@ -80,5 +80,5 @@ function head(ctx) {
80
80
  var Home = { id: RouteId.INDEX, loader, head, Component: HomePage };
81
81
 
82
82
  export { Home, HomeSkeleton, homeLoader };
83
- //# sourceMappingURL=chunk-CNZGOERI.js.map
84
- //# sourceMappingURL=chunk-CNZGOERI.js.map
83
+ //# sourceMappingURL=chunk-3YP2SQZ7.js.map
84
+ //# sourceMappingURL=chunk-3YP2SQZ7.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":";;;;;;;;;;;;AAWA,eAAsB,WAAW,GAAA,EAAoD;AACnF,EAAA,MAAM,EAAE,WAAA,EAAY,GAAI,kBAAA,EAAmB;AAC3C,EAAA,MAAM,aAAa,MAAM,WAAA,CAAY,gBAAgB,IAAA,CAAK,OAAA,CAAQ,YAAY,CAAA;AAC9E,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,MAAA,EAAQ,KAAK,MAAA,IAAU,IAAA;AAAA,IACvB,UAAA,EAAY,UAAA,CAAW,GAAA,CAAI,CAAC,IAAA,MAAU;AAAA,MACpC,GAAG,IAAA;AAAA,MACH,MAAM,IAAA,CAAK,IAAA,EAAM,QAAQ,OAAA,EAAS,EAAE,KAAK,IAAA,CAAK;AAAA,KAChD,CAAE,CAAA;AAAA,IACF,IAAA,EAAM,EAAE,IAAA,EAAM,OAAA,CAAQ,KAAA;AAAM,GAC9B;AACA,EAAA,OAAO,MAAA;AACT;AChBO,IAAM,YAAA,GAAe,IAAA,CAAK,SAASA,aAAAA,GAAe;AACvD,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,SAAI,SAAA,EAAU,uCAAA,EACb,8BAAC,KAAA,EAAA,EAAM,SAAA,EAAU,2BAA0B,CAAA,EAC7C,CAAA;AAAA,oBACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2CAAA,EACb,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,KAAA,EAAA,EAAM,WAAU,gBAAA,EAAiB,CAAA;AAAA,0BACjC,KAAA,EAAA,EAAI,SAAA,EAAU,yCACZ,QAAA,EAAA,CAAC,CAAA,EAAG,GAAG,CAAA,EAAG,CAAC,EAAE,GAAA,CAAI,CAAC,sBACjB,GAAA,CAAC,KAAA,EAAA,EAAc,WAAU,MAAA,EAAA,EAAb,CAAoB,CACjC,CAAA,EACH;AAAA,KAAA,EACF,CAAA;AAAA,oBACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2CAAA,EACb,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,KAAA,EAAA,EAAM,WAAU,gBAAA,EAAiB,CAAA;AAAA,0BACjC,KAAA,EAAA,EAAI,SAAA,EAAU,yCACZ,QAAA,EAAA,CAAC,CAAA,EAAG,GAAG,CAAA,EAAG,CAAC,EAAE,GAAA,CAAI,CAAC,sBACjB,GAAA,CAAC,KAAA,EAAA,EAAc,WAAU,MAAA,EAAA,EAAb,CAAoB,CACjC,CAAA,EACH;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ,CAAC;AAEM,IAAM,QAAA,GAAW,KAAK,SAASC,SAAAA,CAAS,EAAE,UAAA,GAAa,IAAG,EAAkB;AAGjF,EAAA,MAAM,kBAAA,GAAqB,6BAA6B,UAAU,CAAA;AAClE,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,QAAA,EAAA,EAAS,MAAK,YAAA,EAAa,CAAA;AAAA,oBAC5B,GAAA,CAAC,QAAA,EAAA,EAAS,IAAA,EAAK,cAAA,EAAe,CAAA;AAAA,IAC7B,kBAAA,CAAmB,GAAA,CAAI,CAAC,IAAA,EAAM,0BAC7B,GAAA,CAAC,qBAAA,EAAA,EAA6D,IAAA,EAAY,KAAA,EAAA,EAA9C,KAAK,GAAA,IAAO,IAAA,CAAK,SAAA,CAAU,IAAI,CAA6B,CACzF,CAAA;AAAA,oBACD,GAAA,CAAC,QAAA,EAAA,EAAS,IAAA,EAAK,UAAA,EAAW;AAAA,GAAA,EAC5B,CAAA;AAEJ,CAAC,CAAA;;;AC5BD,SAAS,OAAO,IAAA,EAAqD;AACnE,EAAA,OAAO,UAAA,CAAW,EAAE,MAAA,EAAQ,IAAA,EAAM,QAAQ,CAAA;AAC5C;AAEA,SAAS,KAAK,GAAA,EAAsC;AAClD,EAAA,MAAM,KAAA,GAAQ,IAAI,QAAA,EAAU,KAAA;AAC5B,EAAA,IAAI,CAAC,KAAA,EAAO,OAAO,EAAC;AAEpB,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,IAAA,EAAM,KAAA,IAAS,KAAA,CAAM,IAAA;AACzC,EAAA,MAAM,WAAA,GAAc,KAAA,CAAM,IAAA,EAAM,WAAA,IAAe,KAAA,CAAM,WAAA;AACrD,EAAA,MAAM,QAAA,GAAW,MAAM,IAAA,EAAM,QAAA;AAE7B,EAAA,OAAO;AAAA,IACL,KAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA;AAAA,IACA,WAAW,KAAA,CAAM,GAAA;AAAA,IACjB,SAAA,EAAW;AAAA,MACT,IAAA,EAAM,SAAA;AAAA,MACN,KAAA;AAAA,MACA,WAAA;AAAA,MACA,QAAQ,KAAA,CAAM,IAAA;AAAA,MACd,KAAK,KAAA,CAAM;AAAA,KACb;AAAA,IACA,OAAA,EAAS;AAAA,MACP,IAAA,EAAM,qBAAA;AAAA,MACN,KAAA;AAAA,MACA,WAAA;AAAA,MACA,QAAQ,KAAA,CAAM;AAAA,KAChB;AAAA,IACA,oBAAoB,uBAAA,CAAwB,GAAA,CAAI,QAAA,EAAU,GAAA,CAAI,SAAS,QAAQ;AAAA,GACjF;AACF;AAEO,IAAM,IAAA,GAAO,EAAE,EAAA,EAAI,OAAA,CAAQ,OAAO,MAAA,EAAQ,IAAA,EAAM,WAAW,QAAA","file":"chunk-CNZGOERI.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 <HomeComponentRenderer key={data.key ?? JSON.stringify(data)} 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-3YP2SQZ7.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 <HomeComponentRenderer key={data.key ?? JSON.stringify(data)} 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,9 +1,9 @@
1
1
  import { registry } from './chunk-342EPVXN.js';
2
- import { useMoney, useNumber } from './chunk-62KII53A.js';
2
+ import { useMoney, useNumber } from './chunk-L73AZXRJ.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-OJQH7JB7.js';
6
+ import { Image } from './chunk-DHLA33CA.js';
7
7
  import { LazyImageModal } from './chunk-CUG6VOLM.js';
8
8
  import { useTwilight } from './chunk-DF6FBKDN.js';
9
9
  import { lazy, memo, useCallback, useMemo, useState, useEffect, Suspense } from 'react';
@@ -13,10 +13,10 @@ import { jsxs, jsx } from 'react/jsx-runtime';
13
13
  import { SallaSlider } from '@salla.sa/twilight-components-react/slider';
14
14
 
15
15
  var LazyProductDetails = lazy(
16
- () => import('./ProductDetails-TLJDAC6Z.js').then((m) => ({ default: m.ProductDetails }))
16
+ () => import('./ProductDetails-NZXETZCX.js').then((m) => ({ default: m.ProductDetails }))
17
17
  );
18
18
  var LazyAddToCartForm = lazy(
19
- () => import('./AddToCartForm-OOHYADAR.js').then((m) => ({ default: m.AddToCartForm }))
19
+ () => import('./AddToCartForm-5QCWKLPJ.js').then((m) => ({ default: m.AddToCartForm }))
20
20
  );
21
21
  var PRODUCT_CARD_KEY = "product:card";
22
22
  var PRODUCT_IMAGE_SRCSET_WIDTHS = [150, 300, 450, 600];
@@ -412,5 +412,5 @@ function ThumbSlide({ image, index }) {
412
412
  }
413
413
 
414
414
  export { LazyAddToCartForm, LazyProductDetails, ProductCard, ProductGallery };
415
- //# sourceMappingURL=chunk-GARC3WHA.js.map
416
- //# sourceMappingURL=chunk-GARC3WHA.js.map
415
+ //# sourceMappingURL=chunk-6L3XMWXX.js.map
416
+ //# sourceMappingURL=chunk-6L3XMWXX.js.map