@salla.sa/twilight-theme-engine 1.0.136 → 1.0.138

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 (353) hide show
  1. package/dist/{AddToCartForm-RG4ANO47.js → AddToCartForm-P3IXCYO7.js} +4 -3
  2. package/dist/AddToCartForm-P3IXCYO7.js.map +1 -0
  3. package/dist/{BlogAuthorPage-JEYNAFRH.js → BlogAuthorPage-UJYMW4ZL.js} +18 -17
  4. package/dist/BlogAuthorPage-UJYMW4ZL.js.map +1 -0
  5. package/dist/{BlogCategoryPage-IIAXWMHD.js → BlogCategoryPage-3XO42UFX.js} +18 -17
  6. package/dist/BlogCategoryPage-3XO42UFX.js.map +1 -0
  7. package/dist/{BlogPage-NKYICNRT.js → BlogPage-5SQNDQ7L.js} +16 -15
  8. package/dist/BlogPage-5SQNDQ7L.js.map +1 -0
  9. package/dist/{BlogSinglePage-FBO4NQL5.js → BlogSinglePage-XSRKZYUI.js} +16 -15
  10. package/dist/BlogSinglePage-XSRKZYUI.js.map +1 -0
  11. package/dist/{BlogTagPage-WZIUPBEM.js → BlogTagPage-CFXWHUJR.js} +18 -17
  12. package/dist/BlogTagPage-CFXWHUJR.js.map +1 -0
  13. package/dist/{BrandsPage-EN6MZV6T.js → BrandsPage-APYVP4M2.js} +17 -16
  14. package/dist/BrandsPage-APYVP4M2.js.map +1 -0
  15. package/dist/{Breadcrumb-COB4TMMI.js → Breadcrumb-M4DBOMXW.js} +16 -15
  16. package/dist/Breadcrumb-M4DBOMXW.js.map +1 -0
  17. package/dist/{CartItem-SYQZHA2F.js → CartItem-BXZDBDLA.js} +16 -15
  18. package/dist/CartItem-BXZDBDLA.js.map +1 -0
  19. package/dist/{CartSummary-YQN7N6JW.js → CartSummary-NT7N6ERQ.js} +16 -15
  20. package/dist/CartSummary-NT7N6ERQ.js.map +1 -0
  21. package/dist/{Copyright-II2URAIP.js → Copyright-IJDVQWOS.js} +4 -3
  22. package/dist/Copyright-IJDVQWOS.js.map +1 -0
  23. package/dist/{CustomerLayout-75NK34WK.js → CustomerLayout-UNEDHUO2.js} +16 -15
  24. package/dist/CustomerLayout-UNEDHUO2.js.map +1 -0
  25. package/dist/{Footer-6MYG4POU.js → Footer-QX5BCDUK.js} +6 -5
  26. package/dist/{Footer-6MYG4POU.js.map → Footer-QX5BCDUK.js.map} +1 -1
  27. package/dist/{Header-KXX42XKB.js → Header-EAOIXJNS.js} +9 -8
  28. package/dist/{Header-KXX42XKB.js.map → Header-EAOIXJNS.js.map} +1 -1
  29. package/dist/{LoyaltyPage-R4KWVGLW.js → LoyaltyPage-3VOLW5OQ.js} +16 -15
  30. package/dist/LoyaltyPage-3VOLW5OQ.js.map +1 -0
  31. package/dist/{LoyaltyPointsPage-L7HG54RQ.js → LoyaltyPointsPage-IMHJHCZV.js} +7 -6
  32. package/dist/LoyaltyPointsPage-IMHJHCZV.js.map +1 -0
  33. package/dist/{MainMenu-KI4BAA7W.js → MainMenu-ML6OQT53.js} +6 -5
  34. package/dist/MainMenu-ML6OQT53.js.map +1 -0
  35. package/dist/{MasterLayout-WQ3VWDAA.js → MasterLayout-UCQA73I3.js} +16 -15
  36. package/dist/{MasterLayout-WQ3VWDAA.js.map → MasterLayout-UCQA73I3.js.map} +1 -1
  37. package/dist/{MobileMenu-LJXKYKRI.js → MobileMenu-5JHOT4DP.js} +17 -16
  38. package/dist/MobileMenu-5JHOT4DP.js.map +1 -0
  39. package/dist/{NotificationsPage-4TUPN24E.js → NotificationsPage-C373Z2KC.js} +16 -15
  40. package/dist/NotificationsPage-C373Z2KC.js.map +1 -0
  41. package/dist/{OrderSinglePage-N3YGXCKL.js → OrderSinglePage-YYTU72JY.js} +17 -16
  42. package/dist/OrderSinglePage-YYTU72JY.js.map +1 -0
  43. package/dist/{OrdersPage-V3WNW2WZ.js → OrdersPage-2F43AA76.js} +16 -15
  44. package/dist/OrdersPage-2F43AA76.js.map +1 -0
  45. package/dist/{PageSingle-H5YA47EG.js → PageSingle-2FIESLYJ.js} +4 -3
  46. package/dist/PageSingle-2FIESLYJ.js.map +1 -0
  47. package/dist/{ProductDetails-EHRMQR7F.js → ProductDetails-TNULRGXM.js} +5 -4
  48. package/dist/ProductDetails-TNULRGXM.js.map +1 -0
  49. package/dist/{ProfilePage-3GRY4RSA.js → ProfilePage-4VSU6H3S.js} +16 -15
  50. package/dist/ProfilePage-4VSU6H3S.js.map +1 -0
  51. package/dist/{ReviewsPage-SPHK5MCS.js → ReviewsPage-65CYIATI.js} +4 -3
  52. package/dist/ReviewsPage-65CYIATI.js.map +1 -0
  53. package/dist/{SeoCartWidget-P2QQ62AF.js → SeoCartWidget-UHJJLLCU.js} +16 -15
  54. package/dist/SeoCartWidget-UHJJLLCU.js.map +1 -0
  55. package/dist/{SettingsPage-YFN32XOV.js → SettingsPage-2JHRIGFS.js} +16 -15
  56. package/dist/SettingsPage-2JHRIGFS.js.map +1 -0
  57. package/dist/{StoreClosedNotification-3RU33TF6.js → StoreClosedNotification-ADSYNO7O.js} +17 -16
  58. package/dist/{StoreClosedNotification-3RU33TF6.js.map → StoreClosedNotification-ADSYNO7O.js.map} +1 -1
  59. package/dist/{TestimonialsPage-4W6SXN24.js → TestimonialsPage-PYFKXCQP.js} +4 -3
  60. package/dist/TestimonialsPage-PYFKXCQP.js.map +1 -0
  61. package/dist/{ThankYouPage-56AIK3QG.js → ThankYouPage-VHUAKQF7.js} +16 -15
  62. package/dist/ThankYouPage-VHUAKQF7.js.map +1 -0
  63. package/dist/{WalletPage-FLB4OCK4.js → WalletPage-NG2DJAUE.js} +17 -16
  64. package/dist/WalletPage-NG2DJAUE.js.map +1 -0
  65. package/dist/{WishlistPage-H6KGJYRT.js → WishlistPage-GFOKEWL3.js} +18 -17
  66. package/dist/WishlistPage-GFOKEWL3.js.map +1 -0
  67. package/dist/api/advertisement.js +2 -2
  68. package/dist/api/apps.js +2 -2
  69. package/dist/api/blog.js +3 -3
  70. package/dist/api/brands.js +3 -3
  71. package/dist/api/cart.js +3 -3
  72. package/dist/api/category.js +3 -3
  73. package/dist/api/client.js +1 -1
  74. package/dist/api/home.js +2 -2
  75. package/dist/api/loyalty.js +3 -3
  76. package/dist/api/menu.js +2 -2
  77. package/dist/api/notification.js +2 -2
  78. package/dist/api/order.js +3 -3
  79. package/dist/api/page.js +3 -3
  80. package/dist/api/product.js +3 -3
  81. package/dist/api/profile.js +1 -1
  82. package/dist/api/store.d.ts.map +1 -1
  83. package/dist/api/store.js +2 -2
  84. package/dist/api/translations.js +2 -2
  85. package/dist/api/user.js +2 -2
  86. package/dist/api/wallet.js +2 -2
  87. package/dist/api/wishlist.js +4 -4
  88. package/dist/{chunk-LPVWRPMV.js → chunk-35D6CKKX.js} +4 -4
  89. package/dist/{chunk-LPVWRPMV.js.map → chunk-35D6CKKX.js.map} +1 -1
  90. package/dist/{chunk-V4E6JFS4.js → chunk-3QR6T7KW.js} +12 -10
  91. package/dist/chunk-3QR6T7KW.js.map +1 -0
  92. package/dist/{chunk-F324WS4B.js → chunk-5FEFYFTS.js} +3 -3
  93. package/dist/{chunk-F324WS4B.js.map → chunk-5FEFYFTS.js.map} +1 -1
  94. package/dist/{chunk-RYAOXNRA.js → chunk-5MNGLNIJ.js} +3 -3
  95. package/dist/{chunk-RYAOXNRA.js.map → chunk-5MNGLNIJ.js.map} +1 -1
  96. package/dist/{chunk-PLFD6UWD.js → chunk-6EOAIIHL.js} +3 -3
  97. package/dist/{chunk-PLFD6UWD.js.map → chunk-6EOAIIHL.js.map} +1 -1
  98. package/dist/{chunk-BFPTMZ4G.js → chunk-6KZUGNCS.js} +3 -3
  99. package/dist/{chunk-BFPTMZ4G.js.map → chunk-6KZUGNCS.js.map} +1 -1
  100. package/dist/{chunk-EDK4U4WQ.js → chunk-A7KXUBPT.js} +49 -6
  101. package/dist/chunk-A7KXUBPT.js.map +1 -0
  102. package/dist/{chunk-DIA2LU6I.js → chunk-CJZ3MJ3Y.js} +11 -9
  103. package/dist/chunk-CJZ3MJ3Y.js.map +1 -0
  104. package/dist/{chunk-OIL6F7S2.js → chunk-DMS6PZXN.js} +4 -4
  105. package/dist/{chunk-OIL6F7S2.js.map → chunk-DMS6PZXN.js.map} +1 -1
  106. package/dist/{chunk-TUIB74QX.js → chunk-EGJ2SV6O.js} +43 -59
  107. package/dist/chunk-EGJ2SV6O.js.map +1 -0
  108. package/dist/{chunk-D262IAAT.js → chunk-EJ66I5SH.js} +4 -4
  109. package/dist/{chunk-D262IAAT.js.map → chunk-EJ66I5SH.js.map} +1 -1
  110. package/dist/chunk-EOQPV6KS.js +25 -0
  111. package/dist/chunk-EOQPV6KS.js.map +1 -0
  112. package/dist/{chunk-WXE5OK4N.js → chunk-FVHAKOEH.js} +3 -3
  113. package/dist/{chunk-WXE5OK4N.js.map → chunk-FVHAKOEH.js.map} +1 -1
  114. package/dist/{chunk-NZ6REC6S.js → chunk-GJFK3SU5.js} +4 -4
  115. package/dist/{chunk-NZ6REC6S.js.map → chunk-GJFK3SU5.js.map} +1 -1
  116. package/dist/{chunk-C76QBKQT.js → chunk-HEWFF3KI.js} +3 -3
  117. package/dist/{chunk-C76QBKQT.js.map → chunk-HEWFF3KI.js.map} +1 -1
  118. package/dist/{chunk-6TT5VHUM.js → chunk-HG75MP47.js} +3 -3
  119. package/dist/{chunk-6TT5VHUM.js.map → chunk-HG75MP47.js.map} +1 -1
  120. package/dist/{chunk-W37R3JJ7.js → chunk-ITZ543CK.js} +3 -3
  121. package/dist/{chunk-W37R3JJ7.js.map → chunk-ITZ543CK.js.map} +1 -1
  122. package/dist/{chunk-UA4F3ZR3.js → chunk-JFKHKDSK.js} +4 -4
  123. package/dist/{chunk-UA4F3ZR3.js.map → chunk-JFKHKDSK.js.map} +1 -1
  124. package/dist/{chunk-NBVI4H4K.js → chunk-JXLZTGQN.js} +3 -3
  125. package/dist/{chunk-NBVI4H4K.js.map → chunk-JXLZTGQN.js.map} +1 -1
  126. package/dist/chunk-KLVEKLFL.js +16 -0
  127. package/dist/chunk-KLVEKLFL.js.map +1 -0
  128. package/dist/chunk-KYMWEUN2.js +10 -0
  129. package/dist/chunk-KYMWEUN2.js.map +1 -0
  130. package/dist/{chunk-KSPVQQ7J.js → chunk-LMMDVLAB.js} +5 -5
  131. package/dist/{chunk-KSPVQQ7J.js.map → chunk-LMMDVLAB.js.map} +1 -1
  132. package/dist/{chunk-XNNKW6FA.js → chunk-MWAXFBGG.js} +3 -3
  133. package/dist/{chunk-XNNKW6FA.js.map → chunk-MWAXFBGG.js.map} +1 -1
  134. package/dist/{chunk-DESMKK54.js → chunk-OSYUGCRG.js} +4 -4
  135. package/dist/{chunk-DESMKK54.js.map → chunk-OSYUGCRG.js.map} +1 -1
  136. package/dist/{chunk-6O5EFNDM.js → chunk-OXBMZSKL.js} +4 -4
  137. package/dist/{chunk-6O5EFNDM.js.map → chunk-OXBMZSKL.js.map} +1 -1
  138. package/dist/{chunk-VE34Y3Z3.js → chunk-P43VADN7.js} +3 -3
  139. package/dist/{chunk-VE34Y3Z3.js.map → chunk-P43VADN7.js.map} +1 -1
  140. package/dist/{chunk-PB2K5LRO.js → chunk-PBFLXHKM.js} +3 -3
  141. package/dist/{chunk-PB2K5LRO.js.map → chunk-PBFLXHKM.js.map} +1 -1
  142. package/dist/{chunk-J37FMLCI.js → chunk-R4BPODDJ.js} +3 -3
  143. package/dist/{chunk-J37FMLCI.js.map → chunk-R4BPODDJ.js.map} +1 -1
  144. package/dist/{chunk-THDD2H3C.js → chunk-R73HXW5D.js} +4 -4
  145. package/dist/{chunk-THDD2H3C.js.map → chunk-R73HXW5D.js.map} +1 -1
  146. package/dist/{chunk-YV5VCWQF.js → chunk-S5ZKI3TY.js} +4 -4
  147. package/dist/{chunk-YV5VCWQF.js.map → chunk-S5ZKI3TY.js.map} +1 -1
  148. package/dist/{chunk-ZAVUF234.js → chunk-S7FNMT24.js} +3 -3
  149. package/dist/{chunk-ZAVUF234.js.map → chunk-S7FNMT24.js.map} +1 -1
  150. package/dist/{chunk-MMXLOECO.js → chunk-SAYYMA6E.js} +9 -8
  151. package/dist/chunk-SAYYMA6E.js.map +1 -0
  152. package/dist/{chunk-DE7OXJXT.js → chunk-TK6A4UON.js} +4 -4
  153. package/dist/{chunk-DE7OXJXT.js.map → chunk-TK6A4UON.js.map} +1 -1
  154. package/dist/{chunk-RVPFDYQ2.js → chunk-TVAXTMMQ.js} +3 -3
  155. package/dist/{chunk-RVPFDYQ2.js.map → chunk-TVAXTMMQ.js.map} +1 -1
  156. package/dist/{chunk-BXQZXOFK.js → chunk-TWLJ2RII.js} +11 -9
  157. package/dist/chunk-TWLJ2RII.js.map +1 -0
  158. package/dist/{chunk-B6CGVRJ7.js → chunk-U6EB7GM3.js} +4 -4
  159. package/dist/{chunk-B6CGVRJ7.js.map → chunk-U6EB7GM3.js.map} +1 -1
  160. package/dist/{chunk-F73QPQX7.js → chunk-UXS3QCHM.js} +34 -28
  161. package/dist/chunk-UXS3QCHM.js.map +1 -0
  162. package/dist/{chunk-JLJKIXDT.js → chunk-VFQNVPFH.js} +13 -9
  163. package/dist/chunk-VFQNVPFH.js.map +1 -0
  164. package/dist/chunk-VYGA5AT5.js +27 -0
  165. package/dist/chunk-VYGA5AT5.js.map +1 -0
  166. package/dist/{chunk-3RHCWLJT.js → chunk-WC2ZDV4J.js} +3 -3
  167. package/dist/{chunk-3RHCWLJT.js.map → chunk-WC2ZDV4J.js.map} +1 -1
  168. package/dist/{chunk-ITNE6DTO.js → chunk-YPRSS27D.js} +4 -4
  169. package/dist/{chunk-ITNE6DTO.js.map → chunk-YPRSS27D.js.map} +1 -1
  170. package/dist/components/cart/index.js +2 -1
  171. package/dist/components/cart/lazy.d.ts +3 -3
  172. package/dist/components/cart/lazy.d.ts.map +1 -1
  173. package/dist/components/common/index.js +2 -1
  174. package/dist/components/common/lazy.d.ts +5 -5
  175. package/dist/components/common/lazy.d.ts.map +1 -1
  176. package/dist/components/drawer/index.js +14 -13
  177. package/dist/components/home/index.js +18 -17
  178. package/dist/components/home/lazy.d.ts +1 -1
  179. package/dist/components/home/lazy.d.ts.map +1 -1
  180. package/dist/components/layout/MasterLayout.d.ts.map +1 -1
  181. package/dist/components/layout/index.js +5 -4
  182. package/dist/components/layout/lazy.d.ts +6 -6
  183. package/dist/components/layout/lazy.d.ts.map +1 -1
  184. package/dist/components/live-editor/index.d.ts.map +1 -1
  185. package/dist/components/modal/index.js +2 -1
  186. package/dist/components/modal/lazy.d.ts +1 -1
  187. package/dist/components/modal/lazy.d.ts.map +1 -1
  188. package/dist/components/navigation/lazy.d.ts +2 -2
  189. package/dist/components/navigation/lazy.d.ts.map +1 -1
  190. package/dist/components/product/index.js +15 -14
  191. package/dist/components/product/lazy.d.ts +2 -2
  192. package/dist/components/product/lazy.d.ts.map +1 -1
  193. package/dist/components/store/index.js +15 -14
  194. package/dist/components/store/lazy.d.ts +2 -2
  195. package/dist/components/store/lazy.d.ts.map +1 -1
  196. package/dist/components/tracking/index.js +4 -3
  197. package/dist/components/tracking/index.js.map +1 -1
  198. package/dist/components/tracking/lazy.d.ts +2 -2
  199. package/dist/components/tracking/lazy.d.ts.map +1 -1
  200. package/dist/dev/editor/index.js +1 -1
  201. package/dist/dev/index.js +1 -1
  202. package/dist/{document-class-4JUQ44JX.js → document-class-IGGYSGCU.js} +12 -11
  203. package/dist/{document-class-4JUQ44JX.js.map → document-class-IGGYSGCU.js.map} +1 -1
  204. package/dist/hooks/index.js +14 -13
  205. package/dist/hooks/registerDefaultHooks.d.ts.map +1 -1
  206. package/dist/hooks/useGtm.js +14 -13
  207. package/dist/hooks/useMoney.js +14 -13
  208. package/dist/hooks/useStore.js +14 -13
  209. package/dist/hooks/useUser.js +3 -3
  210. package/dist/index.js +14 -13
  211. package/dist/index.js.map +1 -1
  212. package/dist/{navigation-6KY4HODP.js → navigation-FUHRDRAN.js} +4 -4
  213. package/dist/{navigation-6KY4HODP.js.map → navigation-FUHRDRAN.js.map} +1 -1
  214. package/dist/{navigation-QYWF2VGQ.js → navigation-MJYWGH7A.js} +5 -5
  215. package/dist/{navigation-QYWF2VGQ.js.map → navigation-MJYWGH7A.js.map} +1 -1
  216. package/dist/{not-found-3M6US423.js → not-found-VVI6BXAZ.js} +17 -16
  217. package/dist/not-found-VVI6BXAZ.js.map +1 -0
  218. package/dist/providers/DocumentSyncRegistry.d.ts +3 -3
  219. package/dist/providers/DocumentSyncRegistry.d.ts.map +1 -1
  220. package/dist/providers/index.js +14 -13
  221. package/dist/providers/navigation-setups.d.ts +3 -3
  222. package/dist/providers/navigation-setups.d.ts.map +1 -1
  223. package/dist/routes/account/notifications/index.d.ts +2 -2
  224. package/dist/routes/account/notifications/index.d.ts.map +1 -1
  225. package/dist/routes/account/orders/index.d.ts +4 -4
  226. package/dist/routes/account/orders/index.d.ts.map +1 -1
  227. package/dist/routes/account/orders.js +5 -4
  228. package/dist/routes/account/profile/index.d.ts +2 -2
  229. package/dist/routes/account/profile/index.d.ts.map +1 -1
  230. package/dist/routes/account/settings/index.d.ts +2 -2
  231. package/dist/routes/account/settings/index.d.ts.map +1 -1
  232. package/dist/routes/account/wallet/index.d.ts +2 -2
  233. package/dist/routes/account/wallet/index.d.ts.map +1 -1
  234. package/dist/routes/account/wishlist/index.d.ts +2 -2
  235. package/dist/routes/account/wishlist/index.d.ts.map +1 -1
  236. package/dist/routes/account.js +20 -18
  237. package/dist/routes/account.js.map +1 -1
  238. package/dist/routes/blog/index.d.ts +10 -10
  239. package/dist/routes/blog/index.d.ts.map +1 -1
  240. package/dist/routes/blog.js +15 -13
  241. package/dist/routes/blog.js.map +1 -1
  242. package/dist/routes/brands/index.d.ts +2 -2
  243. package/dist/routes/brands/index.d.ts.map +1 -1
  244. package/dist/routes/brands.js +7 -5
  245. package/dist/routes/brands.js.map +1 -1
  246. package/dist/routes/cart.js +22 -21
  247. package/dist/routes/cart.js.map +1 -1
  248. package/dist/routes/home.js +19 -18
  249. package/dist/routes/index.js +3 -3
  250. package/dist/routes/lazy.d.ts +22 -22
  251. package/dist/routes/lazy.d.ts.map +1 -1
  252. package/dist/routes/loyalty/index.d.ts +4 -4
  253. package/dist/routes/loyalty/index.d.ts.map +1 -1
  254. package/dist/routes/loyalty.js +8 -8
  255. package/dist/routes/loyalty.js.map +1 -1
  256. package/dist/routes/page/index.d.ts +2 -2
  257. package/dist/routes/page/index.d.ts.map +1 -1
  258. package/dist/routes/page.js +7 -5
  259. package/dist/routes/page.js.map +1 -1
  260. package/dist/routes/product-listing.js +20 -19
  261. package/dist/routes/product-listing.js.map +1 -1
  262. package/dist/routes/product.js +18 -17
  263. package/dist/routes/product.js.map +1 -1
  264. package/dist/routes/root/beforeLoad.d.ts +32 -13
  265. package/dist/routes/root/beforeLoad.d.ts.map +1 -1
  266. package/dist/routes/seo-redirects.js +3 -3
  267. package/dist/routes/testimonials/index.d.ts +4 -4
  268. package/dist/routes/testimonials/index.d.ts.map +1 -1
  269. package/dist/routes/testimonials.js +5 -5
  270. package/dist/routes/testimonials.js.map +1 -1
  271. package/dist/routes/thank-you/index.d.ts +2 -2
  272. package/dist/routes/thank-you/index.d.ts.map +1 -1
  273. package/dist/routes/thank-you.js +6 -6
  274. package/dist/routes/thank-you.js.map +1 -1
  275. package/dist/skeleton.js +19 -18
  276. package/dist/{store-lookup-UDGPAAWQ.js → store-lookup-2P7PQVXE.js} +8 -8
  277. package/dist/{store-lookup-UDGPAAWQ.js.map → store-lookup-2P7PQVXE.js.map} +1 -1
  278. package/dist/tanstack/router.d.ts.map +1 -1
  279. package/dist/tanstack.js +12 -11
  280. package/dist/tanstack.js.map +1 -1
  281. package/dist/utils/index.js +2 -2
  282. package/dist/utils/lazy-component.d.ts +26 -0
  283. package/dist/utils/lazy-component.d.ts.map +1 -0
  284. package/package.json +1 -1
  285. package/tailwind/components/cart/lazy.ts.txt +6 -4
  286. package/tailwind/components/common/lazy.ts.txt +6 -6
  287. package/tailwind/components/home/lazy.ts.txt +2 -2
  288. package/tailwind/components/layout/MasterLayout.tsx.txt +5 -4
  289. package/tailwind/components/layout/lazy.ts.txt +11 -7
  290. package/tailwind/components/live-editor/index.tsx.txt +3 -2
  291. package/tailwind/components/modal/lazy.ts.txt +2 -2
  292. package/tailwind/components/navigation/lazy.ts.txt +5 -3
  293. package/tailwind/components/product/lazy.ts.txt +3 -3
  294. package/tailwind/components/store/lazy.ts.txt +3 -3
  295. package/tailwind/components/tracking/lazy.ts.txt +3 -3
  296. package/tailwind/routes/account/notifications/index.tsx.txt +3 -2
  297. package/tailwind/routes/account/orders/index.tsx.txt +6 -3
  298. package/tailwind/routes/account/profile/index.tsx.txt +3 -2
  299. package/tailwind/routes/account/settings/index.tsx.txt +3 -2
  300. package/tailwind/routes/account/wallet/index.tsx.txt +5 -2
  301. package/tailwind/routes/account/wishlist/index.tsx.txt +3 -2
  302. package/tailwind/routes/blog/index.tsx.txt +9 -6
  303. package/tailwind/routes/brands/index.tsx.txt +5 -2
  304. package/tailwind/routes/lazy.ts.txt +23 -23
  305. package/tailwind/routes/loyalty/index.tsx.txt +4 -3
  306. package/tailwind/routes/page/index.tsx.txt +5 -2
  307. package/tailwind/routes/root/beforeLoad.ts.txt +80 -19
  308. package/tailwind/routes/testimonials/index.tsx.txt +4 -3
  309. package/tailwind/routes/thank-you/index.tsx.txt +3 -2
  310. package/dist/AddToCartForm-RG4ANO47.js.map +0 -1
  311. package/dist/BlogAuthorPage-JEYNAFRH.js.map +0 -1
  312. package/dist/BlogCategoryPage-IIAXWMHD.js.map +0 -1
  313. package/dist/BlogPage-NKYICNRT.js.map +0 -1
  314. package/dist/BlogSinglePage-FBO4NQL5.js.map +0 -1
  315. package/dist/BlogTagPage-WZIUPBEM.js.map +0 -1
  316. package/dist/BrandsPage-EN6MZV6T.js.map +0 -1
  317. package/dist/Breadcrumb-COB4TMMI.js.map +0 -1
  318. package/dist/CartItem-SYQZHA2F.js.map +0 -1
  319. package/dist/CartSummary-YQN7N6JW.js.map +0 -1
  320. package/dist/Copyright-II2URAIP.js.map +0 -1
  321. package/dist/CustomerLayout-75NK34WK.js.map +0 -1
  322. package/dist/LoyaltyPage-R4KWVGLW.js.map +0 -1
  323. package/dist/LoyaltyPointsPage-L7HG54RQ.js.map +0 -1
  324. package/dist/MainMenu-KI4BAA7W.js.map +0 -1
  325. package/dist/MobileMenu-LJXKYKRI.js.map +0 -1
  326. package/dist/NotificationsPage-4TUPN24E.js.map +0 -1
  327. package/dist/OrderSinglePage-N3YGXCKL.js.map +0 -1
  328. package/dist/OrdersPage-V3WNW2WZ.js.map +0 -1
  329. package/dist/PageSingle-H5YA47EG.js.map +0 -1
  330. package/dist/ProductDetails-EHRMQR7F.js.map +0 -1
  331. package/dist/ProfilePage-3GRY4RSA.js.map +0 -1
  332. package/dist/ReviewsPage-SPHK5MCS.js.map +0 -1
  333. package/dist/SeoCartWidget-P2QQ62AF.js.map +0 -1
  334. package/dist/SettingsPage-YFN32XOV.js.map +0 -1
  335. package/dist/TestimonialsPage-4W6SXN24.js.map +0 -1
  336. package/dist/ThankYouPage-56AIK3QG.js.map +0 -1
  337. package/dist/WalletPage-FLB4OCK4.js.map +0 -1
  338. package/dist/WishlistPage-H6KGJYRT.js.map +0 -1
  339. package/dist/chunk-7V5HOZW4.js +0 -10
  340. package/dist/chunk-7V5HOZW4.js.map +0 -1
  341. package/dist/chunk-BXQZXOFK.js.map +0 -1
  342. package/dist/chunk-DIA2LU6I.js.map +0 -1
  343. package/dist/chunk-EDK4U4WQ.js.map +0 -1
  344. package/dist/chunk-F73QPQX7.js.map +0 -1
  345. package/dist/chunk-IZ4MRCNY.js +0 -14
  346. package/dist/chunk-IZ4MRCNY.js.map +0 -1
  347. package/dist/chunk-JLJKIXDT.js.map +0 -1
  348. package/dist/chunk-MMXLOECO.js.map +0 -1
  349. package/dist/chunk-SDJVSRTL.js +0 -21
  350. package/dist/chunk-SDJVSRTL.js.map +0 -1
  351. package/dist/chunk-TUIB74QX.js.map +0 -1
  352. package/dist/chunk-V4E6JFS4.js.map +0 -1
  353. package/dist/not-found-3M6US423.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/sdk-events.ts"],"names":[],"mappings":";;;;;AA6BO,SAAS,oBAAA,GAA6B;AAC3C,EAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AAEnC,EAAA,MAAM,QAAQ,MAAA,CAAO,KAAA;AACrB,EAAA,IAAI,CAAC,KAAA,EAAO,KAAA,EAAO,QAAA,EAAU;AAE7B,EAAA,MAAM,MAAM,kBAAA,EAAmB;AAC/B,EAAA,KAAA,CAAM,MAAM,QAAA,CAAS,gBAAA,EAAkB,GAAA,CAAI,IAAA,IAAQ,EAAE,CAAA;AACvD;AAMO,SAAS,sBAAsB,OAAA,EAAwB;AAC5D,EAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACnC,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,IAAK,CAAA;AACvC,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,EAAO,GAAA,IAAO,EAAA;AACpC,EAAA,MAAM,OAAA,GAAU;AAAA,IACd,IAAI,OAAA,CAAQ,EAAA;AAAA,IACZ,MAAM,OAAA,CAAQ,IAAA;AAAA,IACd,UAAA,EAAY,OAAA,CAAQ,QAAA,GAAW,CAAC,EAAE,EAAA,EAAI,OAAA,CAAQ,QAAA,CAAS,EAAA,EAAI,MAAM,OAAA,CAAQ,QAAA,CAAS,IAAA,EAAM,IAAI,EAAC;AAAA,IAC7F,QAAA,EAAU,OAAA,CAAQ,QAAA,EAAU,IAAA,IAAQ,EAAA;AAAA,IACpC,KAAA;AAAA,IACA,QAAA,EAAU,CAAA;AAAA,IACV,OAAA,EAAS,EAAA;AAAA,IACT,KAAA,EAAO,OAAA,CAAQ,KAAA,EAAO,IAAA,IAAQ,EAAA;AAAA,IAC9B,KAAA;AAAA,IACA,QAAA,EAAU,iBAAA,CAAkB,OAAA,CAAQ,QAAQ,CAAA;AAAA,IAC5C,GAAA,EAAK,QAAQ,GAAA,IAAO,EAAA;AAAA,IACpB,KAAA,EAAO,KAAA;AAAA,IACP,KAAK,OAAA,CAAQ,GAAA;AAAA,IACb,SAAA,EAAW;AAAA,GACb;AAEA,EAAA,eAAA;AAAA,IACE,CAAC,GAAA,KAAQ,KAAK,GAAA,CAAI,SAAQ,CAAE,IAAA,CAAK,MAAM,GAAA,CAAI,MAAM,QAAA,CAAS,gBAAA,EAAkB,CAAC,OAAO,CAAC,CAAC;AAAA,GACxF;AACF","file":"chunk-BFPTMZ4G.js","sourcesContent":["import { getTwilightContext } from '../twilight/context';\nimport type { PageContext } from '../twilight/context';\nimport type { Product } from '../types';\nimport { getActiveCurrency } from '../api/client';\nimport { whenSallaLoaded } from './sdk-helpers';\n\n/**\n * Payload dispatched via `salla.event.dispatch('route::changed', payload)`\n * after each client-side navigation completes.\n *\n * The page config fields are spread at root level. When the matched route\n * has no page data (e.g., 404, error boundary), an empty object is dispatched.\n *\n * @example\n * ```ts\n * salla.event.on('route::changed', (page: RouteChangedEvent) => {\n * console.log(page.slug, page.title, page.id);\n * });\n * ```\n */\nexport type RouteChangedEvent = PageContext;\n\n/**\n * Dispatch the `route::changed` Salla SDK event with the current page config.\n *\n * Framework-agnostic — reads from the twilight context store which is\n * populated by whichever framework adapter is active (TanStack, Next.js, etc.).\n * Each adapter should call this after navigation resolves.\n */\nexport function dispatchRouteChanged(): void {\n if (typeof window === 'undefined') return;\n\n const salla = window.salla;\n if (!salla?.event?.dispatch) return;\n\n const ctx = getTwilightContext();\n salla.event.dispatch('route::changed', ctx.page ?? {});\n}\n\n/**\n * Dispatch `Product Viewed`, which Twig's product page hands the SDK through `salla.init`'s\n * `events`: store analytics, pixels and apps that remember viewed products listen for it.\n */\nexport function dispatchProductViewed(product: Product): void {\n if (typeof window === 'undefined') return;\n const price = Number(product.price) || 0;\n const image = product.image?.url ?? '';\n const payload = {\n id: product.id,\n name: product.name,\n categories: product.category ? [{ id: product.category.id, name: product.category.name }] : [],\n category: product.category?.name ?? '',\n price,\n quantity: 1,\n variant: '',\n brand: product.brand?.name ?? '',\n image,\n currency: getActiveCurrency(product.currency),\n sku: product.sku ?? '',\n value: price,\n url: product.url,\n image_url: image,\n };\n // After init: analytics drops events until `salla.init` has merged the store's `jitsu` list.\n whenSallaLoaded(\n (sdk) => void sdk.onReady().then(() => sdk.event.dispatch('Product Viewed', [payload]))\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/utils/sdk-events.ts"],"names":[],"mappings":";;;;;AA6BO,SAAS,oBAAA,GAA6B;AAC3C,EAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AAEnC,EAAA,MAAM,QAAQ,MAAA,CAAO,KAAA;AACrB,EAAA,IAAI,CAAC,KAAA,EAAO,KAAA,EAAO,QAAA,EAAU;AAE7B,EAAA,MAAM,MAAM,kBAAA,EAAmB;AAC/B,EAAA,KAAA,CAAM,MAAM,QAAA,CAAS,gBAAA,EAAkB,GAAA,CAAI,IAAA,IAAQ,EAAE,CAAA;AACvD;AAMO,SAAS,sBAAsB,OAAA,EAAwB;AAC5D,EAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACnC,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,IAAK,CAAA;AACvC,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,EAAO,GAAA,IAAO,EAAA;AACpC,EAAA,MAAM,OAAA,GAAU;AAAA,IACd,IAAI,OAAA,CAAQ,EAAA;AAAA,IACZ,MAAM,OAAA,CAAQ,IAAA;AAAA,IACd,UAAA,EAAY,OAAA,CAAQ,QAAA,GAAW,CAAC,EAAE,EAAA,EAAI,OAAA,CAAQ,QAAA,CAAS,EAAA,EAAI,MAAM,OAAA,CAAQ,QAAA,CAAS,IAAA,EAAM,IAAI,EAAC;AAAA,IAC7F,QAAA,EAAU,OAAA,CAAQ,QAAA,EAAU,IAAA,IAAQ,EAAA;AAAA,IACpC,KAAA;AAAA,IACA,QAAA,EAAU,CAAA;AAAA,IACV,OAAA,EAAS,EAAA;AAAA,IACT,KAAA,EAAO,OAAA,CAAQ,KAAA,EAAO,IAAA,IAAQ,EAAA;AAAA,IAC9B,KAAA;AAAA,IACA,QAAA,EAAU,iBAAA,CAAkB,OAAA,CAAQ,QAAQ,CAAA;AAAA,IAC5C,GAAA,EAAK,QAAQ,GAAA,IAAO,EAAA;AAAA,IACpB,KAAA,EAAO,KAAA;AAAA,IACP,KAAK,OAAA,CAAQ,GAAA;AAAA,IACb,SAAA,EAAW;AAAA,GACb;AAEA,EAAA,eAAA;AAAA,IACE,CAAC,GAAA,KAAQ,KAAK,GAAA,CAAI,SAAQ,CAAE,IAAA,CAAK,MAAM,GAAA,CAAI,MAAM,QAAA,CAAS,gBAAA,EAAkB,CAAC,OAAO,CAAC,CAAC;AAAA,GACxF;AACF","file":"chunk-6KZUGNCS.js","sourcesContent":["import { getTwilightContext } from '../twilight/context';\nimport type { PageContext } from '../twilight/context';\nimport type { Product } from '../types';\nimport { getActiveCurrency } from '../api/client';\nimport { whenSallaLoaded } from './sdk-helpers';\n\n/**\n * Payload dispatched via `salla.event.dispatch('route::changed', payload)`\n * after each client-side navigation completes.\n *\n * The page config fields are spread at root level. When the matched route\n * has no page data (e.g., 404, error boundary), an empty object is dispatched.\n *\n * @example\n * ```ts\n * salla.event.on('route::changed', (page: RouteChangedEvent) => {\n * console.log(page.slug, page.title, page.id);\n * });\n * ```\n */\nexport type RouteChangedEvent = PageContext;\n\n/**\n * Dispatch the `route::changed` Salla SDK event with the current page config.\n *\n * Framework-agnostic — reads from the twilight context store which is\n * populated by whichever framework adapter is active (TanStack, Next.js, etc.).\n * Each adapter should call this after navigation resolves.\n */\nexport function dispatchRouteChanged(): void {\n if (typeof window === 'undefined') return;\n\n const salla = window.salla;\n if (!salla?.event?.dispatch) return;\n\n const ctx = getTwilightContext();\n salla.event.dispatch('route::changed', ctx.page ?? {});\n}\n\n/**\n * Dispatch `Product Viewed`, which Twig's product page hands the SDK through `salla.init`'s\n * `events`: store analytics, pixels and apps that remember viewed products listen for it.\n */\nexport function dispatchProductViewed(product: Product): void {\n if (typeof window === 'undefined') return;\n const price = Number(product.price) || 0;\n const image = product.image?.url ?? '';\n const payload = {\n id: product.id,\n name: product.name,\n categories: product.category ? [{ id: product.category.id, name: product.category.name }] : [],\n category: product.category?.name ?? '',\n price,\n quantity: 1,\n variant: '',\n brand: product.brand?.name ?? '',\n image,\n currency: getActiveCurrency(product.currency),\n sku: product.sku ?? '',\n value: price,\n url: product.url,\n image_url: image,\n };\n // After init: analytics drops events until `salla.init` has merged the store's `jitsu` list.\n whenSallaLoaded(\n (sdk) => void sdk.onReady().then(() => sdk.event.dispatch('Product Viewed', [payload]))\n );\n}\n"]}
@@ -1,10 +1,50 @@
1
1
  import { isNotLaunchedNotice } from './chunk-Q7E4TNN7.js';
2
- import { getActiveScope, api, STORE_IDENTIFIER_HEADER, devSettingsFetchedAt } from './chunk-RYAOXNRA.js';
2
+ import { getActiveScope, api, STORE_IDENTIFIER_HEADER, devSettingsFetchedAt } from './chunk-5MNGLNIJ.js';
3
3
  import { requestedThemeVersionId } from './chunk-NHA4SBKG.js';
4
- import { resolveStoreIdentifier, parseStoreId } from './chunk-FXVII733.js';
4
+ import { LANGUAGE_COOKIE_NAME, LANGUAGE_COOKIE_MAX_AGE, resolveStoreIdentifier, extractScopeFromUrl, parseStoreId } from './chunk-FXVII733.js';
5
5
  import { getTwilightContext, SettingsError } from './chunk-6K34BCUP.js';
6
6
  import { queryOptions } from '@tanstack/react-query';
7
7
  import { isTimeoutError, isHTTPError, isNetworkError } from 'ky';
8
+ import { createIsomorphicFn } from '@tanstack/react-start';
9
+ import { getRequestHeader, setCookie, getRequestUrl } from '@tanstack/react-start/server';
10
+
11
+ var readServerCookieHeader = createIsomorphicFn().server(() => {
12
+ try {
13
+ return getRequestHeader("cookie") ?? null;
14
+ } catch {
15
+ return null;
16
+ }
17
+ }).client(() => null);
18
+ var writeServerLanguageCookie = createIsomorphicFn().server((code) => {
19
+ try {
20
+ setCookie(LANGUAGE_COOKIE_NAME, code, {
21
+ path: "/",
22
+ maxAge: LANGUAGE_COOKIE_MAX_AGE,
23
+ sameSite: "lax"
24
+ });
25
+ } catch {
26
+ }
27
+ }).client(() => {
28
+ });
29
+ var readServerSearch = createIsomorphicFn().server(() => {
30
+ try {
31
+ return getRequestUrl().search;
32
+ } catch {
33
+ return "";
34
+ }
35
+ }).client(() => "");
36
+ function readPageSearch() {
37
+ return readServerSearch() || (typeof window !== "undefined" ? window.location.search : "");
38
+ }
39
+ function readCookieHeader() {
40
+ return readServerCookieHeader() ?? (typeof document !== "undefined" ? document.cookie : null);
41
+ }
42
+ function persistLanguageCookie(code) {
43
+ writeServerLanguageCookie(code);
44
+ if (typeof document !== "undefined") {
45
+ document.cookie = `${LANGUAGE_COOKIE_NAME}=${encodeURIComponent(code)}; path=/; max-age=${LANGUAGE_COOKIE_MAX_AGE}; SameSite=Lax`;
46
+ }
47
+ }
8
48
 
9
49
  // src/utils/native-app-headers.ts
10
50
  var NATIVE_APP_HEADERS = [
@@ -79,10 +119,13 @@ function withNativeAppHeaders(jitsu) {
79
119
  };
80
120
  }
81
121
  var SETTINGS_TIMEOUT_MS = 5e3;
122
+ function pageSwitchesScope() {
123
+ return extractScopeFromUrl(`http://page.invalid/${readPageSearch()}`) !== null;
124
+ }
82
125
  async function requestSettings(identifier) {
83
126
  const includeParams = DEFAULT_INCLUDE_ITEMS.map((i) => `include[]=${i}`).join("&");
84
127
  const scope = getActiveScope();
85
- const params = scope != null ? `${includeParams}&scope=${scope.id}` : includeParams;
128
+ const params = scope != null && pageSwitchesScope() ? `${includeParams}&scope=${scope.id}` : includeParams;
86
129
  const request = api.get(`store/settings?${params}`, {
87
130
  timeout: SETTINGS_TIMEOUT_MS,
88
131
  headers: { [STORE_IDENTIFIER_HEADER]: identifier }
@@ -206,6 +249,6 @@ var store = {
206
249
  }
207
250
  };
208
251
 
209
- export { readNativeAppHeaders, store };
210
- //# sourceMappingURL=chunk-EDK4U4WQ.js.map
211
- //# sourceMappingURL=chunk-EDK4U4WQ.js.map
252
+ export { persistLanguageCookie, readCookieHeader, readNativeAppHeaders, readPageSearch, store };
253
+ //# sourceMappingURL=chunk-A7KXUBPT.js.map
254
+ //# sourceMappingURL=chunk-A7KXUBPT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/language-cookie.ts","../src/utils/native-app-headers.ts","../src/api/store.ts"],"names":[],"mappings":"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","file":"chunk-A7KXUBPT.js","sourcesContent":["/**\n * @fileoverview Reading and writing the `s-lang` cookie, on the server and in the browser.\n *\n * The server reads it from the request the framework is handling and writes it to that\n * request's response. The server-only import is stripped from the client bundle by\n * `createIsomorphicFn`, as in `routes/root/beforeLoad.ts`. The browser uses `document.cookie`.\n * Either side outside a request (a prerender, a test) has nothing to read or write and says so\n * quietly.\n */\nimport { createIsomorphicFn } from '@tanstack/react-start';\nimport { getRequestHeader, getRequestUrl, setCookie } from '@tanstack/react-start/server';\nimport { LANGUAGE_COOKIE_MAX_AGE, LANGUAGE_COOKIE_NAME } from './cookies';\n\nconst readServerCookieHeader = createIsomorphicFn()\n .server((): string | null => {\n try {\n return getRequestHeader('cookie') ?? null;\n } catch {\n return null;\n }\n })\n .client((): string | null => null);\n\nconst writeServerLanguageCookie = createIsomorphicFn()\n .server((code: string): void => {\n try {\n setCookie(LANGUAGE_COOKIE_NAME, code, {\n path: '/',\n maxAge: LANGUAGE_COOKIE_MAX_AGE,\n sameSite: 'lax',\n });\n } catch {\n // Outside a request: there is no response to write to.\n }\n })\n .client((): void => {});\n\nconst readServerSearch = createIsomorphicFn()\n .server((): string => {\n try {\n return getRequestUrl().search;\n } catch {\n return '';\n }\n })\n .client((): string => '');\n\n/**\n * The query string of the page being rendered (`?lang=en`, or `''`): the request's on the\n * server, the address bar's in the browser, so both sides read the same one.\n */\nexport function readPageSearch(): string {\n return readServerSearch() || (typeof window !== 'undefined' ? window.location.search : '');\n}\n\n/** The `Cookie` header of the request being handled, or `document.cookie` in the browser. */\nexport function readCookieHeader(): string | null {\n return readServerCookieHeader() ?? (typeof document !== 'undefined' ? document.cookie : null);\n}\n\n/** Remembers `code` as the visitor's language for every store on this host. */\nexport function persistLanguageCookie(code: string): void {\n writeServerLanguageCookie(code);\n if (typeof document !== 'undefined') {\n document.cookie = `${LANGUAGE_COOKIE_NAME}=${encodeURIComponent(code)}; path=/; max-age=${LANGUAGE_COOKIE_MAX_AGE}; SameSite=Lax`;\n }\n}\n","/** The headers the Salla native app sends with every page it loads in its webview. */\nexport const NATIVE_APP_HEADERS = [\n 's-app-os',\n 's-app-version',\n 's-app-full-version',\n 's-app-os-version',\n];\n\n/**\n * The native app's own headers on this request, or null when it is not the app.\n *\n * On a Twig theme Laravel copies them into the settings' `jitsu.context.extra.headers`,\n * where the SDK reads the app's platform and version from (`salla.config.isMobileApp()`).\n * A React theme asks for its settings from the server, through the API, so the app's\n * headers never reach that call: the request is the only place they are.\n */\nexport function readNativeAppHeaders(headers: Headers): Record<string, string> | null {\n const os = headers.get('s-app-os')?.toLowerCase();\n if (os !== 'ios' && os !== 'android') return null;\n const found: Record<string, string> = {};\n for (const name of NATIVE_APP_HEADERS) {\n const value = headers.get(name);\n if (value) found[name] = value;\n }\n return found;\n}\n","import { queryOptions } from '@tanstack/react-query';\nimport { isHTTPError, isNetworkError, isTimeoutError } from 'ky';\nimport { api, getActiveScope, STORE_IDENTIFIER_HEADER } from './client';\nimport { devSettingsFetchedAt } from './dev-settings-cache';\nimport { SettingsError } from '../utils/errors';\nimport type { Store, Theme, Language, JitsuConfig, MaintenanceDetails } from '../types';\nimport { getTwilightContext } from '../twilight/context';\nimport { resolveStoreIdentifier } from '../utils/store-identity';\nimport { extractScopeFromUrl, parseStoreId } from '../utils/cookies';\nimport { readPageSearch } from '../utils/language-cookie';\nimport { requestedThemeVersionId } from '../utils/theme-version';\nimport { NATIVE_APP_HEADERS } from '../utils/native-app-headers';\nimport { isNotLaunchedNotice } from '../utils/maintenance';\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 jitsu?: JitsuConfig;\n maintenance?: boolean;\n maintenance_details?: MaintenanceDetails;\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 /** Where the SDK's analytics send events, and which ones; without it the SDK tracks nothing. */\n jitsu?: JitsuConfig;\n /**\n * The store is closed: by the merchant from the dashboard, by the platform, or\n * for the selected market only. The engine then renders the maintenance page\n * to everyone but the merchant; see `rootBeforeLoad`.\n */\n maintenance?: boolean;\n /** What the maintenance page says; sent beside `maintenance`. */\n maintenance_details?: MaintenanceDetails;\n /**\n * `false` while the store has not launched yet: `maintenance` is then `true` and the\n * engine's maintenance page says the store is launching soon. Absent otherwise. Not\n * from the API: read off `maintenance_details` by `store.settings`, since the\n * backend sends the merchant's \"finish launching\" notice there for every visitor,\n * which is not for a customer's eyes.\n */\n launched?: false;\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 /** Which answer of the API these settings are; see {@link SettingsAnswer}. */\n answer?: SettingsAnswer;\n /**\n * When the dev server fetched these settings from the API (epoch ms). It reuses\n * them for a while (see `dev-settings-cache.ts`) and the theme editor says how old\n * they are. Only on a dev server render; absent everywhere else.\n */\n devFetchedAt?: number;\n}\n\n/**\n * Which answer of the settings API a set of settings came from, read off the\n * response rather than the body: the API's request id, the Store's trace, and\n * whether Cloudflare served it from its cache and how old it was. A decision the\n * settings drive for every visitor alike (the maintenance page) can then be\n * traced to the exact request the backend logged, or to a cached copy of it.\n */\nexport interface SettingsAnswer {\n requestId?: string;\n traceId?: string;\n cacheStatus?: string;\n age?: string;\n}\n\nconst ANSWER_HEADERS: Record<keyof SettingsAnswer, string> = {\n requestId: 's-request-id',\n traceId: 'x-trace-id',\n cacheStatus: 'cf-cache-status',\n age: 'age',\n};\n\nfunction settingsAnswerOf(headers: Headers | undefined): SettingsAnswer | undefined {\n if (!headers) return undefined;\n const answer: SettingsAnswer = {};\n for (const [field, name] of Object.entries(ANSWER_HEADERS) as [keyof SettingsAnswer, string][]) {\n const value = headers.get(name);\n if (value) answer[field] = value;\n }\n return Object.keys(answer).length ? answer : undefined;\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\n/**\n * The settings' analytics context with the native app's headers in it, as Laravel\n * writes it for a Twig theme: the SDK reads the app's platform and version from there.\n * The API answers a server-side call with the engine's own headers, never the app's.\n */\nfunction withNativeAppHeaders(jitsu?: JitsuConfig): JitsuConfig | undefined {\n if (!jitsu || typeof window !== 'undefined') return jitsu;\n let appHeaders: Record<string, string> | null = null;\n try {\n appHeaders = getTwilightContext().nativeAppHeaders;\n } catch {\n return jitsu;\n }\n if (!appHeaders) return jitsu;\n const extra = jitsu.context?.extra;\n // The engine's own app headers go, so an app that sends no version doesn't get the engine's.\n const headers = { ...extra?.headers };\n for (const name of NATIVE_APP_HEADERS) delete headers[name];\n return {\n ...jitsu,\n context: {\n ...jitsu.context,\n extra: { ...extra, headers: { ...headers, ...appHeaders } },\n },\n };\n}\n\nconst SETTINGS_TIMEOUT_MS = 5000;\n\n/**\n * Whether the page's own address switches market (`?scope=`).\n *\n * Only then does the settings request name the scope in its query string. The API\n * reads `?scope=` as a switch and lets it override the market a market's own domain\n * is pinned to, which the `s-scope-id` header never does. Sent on every request, a\n * market remembered from another visit would win over the host the shopper is on: the\n * settings, and the SDK seeded from them, would answer for that market while every\n * call without the parameter (the cart, among them) answers for the host's, and a\n * guest's cart created in one is refused by the other (TD-17588).\n */\nfunction pageSwitchesScope(): boolean {\n return extractScopeFromUrl(`http://page.invalid/${readPageSearch()}`) !== null;\n}\n\nasync function requestSettings(identifier: string): Promise<StoreContext> {\n const includeParams = DEFAULT_INCLUDE_ITEMS.map((i) => `include[]=${i}`).join('&');\n const scope = getActiveScope();\n const params =\n scope != null && pageSwitchesScope() ? `${includeParams}&scope=${scope.id}` : includeParams;\n\n const request = 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: SETTINGS_TIMEOUT_MS,\n headers: { [STORE_IDENTIFIER_HEADER]: identifier },\n });\n const json = await request.json<{ data?: SettingsApiResponse }>();\n // The same response, already settled; only its headers are read.\n const headers = (await request)?.headers;\n const answer = settingsAnswerOf(headers);\n const devFetchedAt = devSettingsFetchedAt(headers);\n\n const data = json?.data;\n if (!data) {\n throw new SettingsError(\n `The Salla API answered the settings request for store \"${identifier}\" without settings.`,\n { reason: 'empty' }\n );\n }\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 jitsu: withNativeAppHeaders(data.jitsu),\n maintenance: data.maintenance,\n maintenance_details: data.maintenance_details,\n ...(data.maintenance === true &&\n isNotLaunchedNotice(data.maintenance_details) && { launched: false as const }),\n ...(scope && { requestedScopeId: scope.id }),\n ...(answer && { answer }),\n ...(devFetchedAt && { devFetchedAt }),\n };\n}\n\n/** The message the API put in an error body, `{ error: { message } }`, when it sent one. */\nfunction apiErrorMessage(data: unknown): string | undefined {\n const message = (data as { error?: { message?: unknown } } | undefined)?.error?.message;\n return typeof message === 'string' && message.length > 0 && message.length <= 200\n ? message\n : undefined;\n}\n\n/**\n * What core's `CurrentStoreMiddleware` answers, with a 422, when no store has the\n * username or domain it was given (or the store's status is `deleted`). The lookup is\n * `loadUseUsernameOrDomain`, the same one Twig's `checkUsername` turns into its 410.\n * The literal is not translated: it reads the same whatever language was asked for.\n */\nconst STORE_NOT_FOUND_MESSAGE = 'المتجر غير موجود';\n\n/**\n * Whether the API answered that no store has this identifier. A numeric identifier\n * is looked up with `findOrFail`, which Store's exception handler answers with a 410;\n * a username or domain gets {@link STORE_NOT_FOUND_MESSAGE}. A 410 for a username is\n * not read as one: nothing on that path answers it, and a store that does exist must\n * never be told it does not.\n */\nfunction isStoreNotFound(identifier: string, status: number, said: string | undefined): boolean {\n if (status === 410) return parseStoreId(identifier) !== null;\n return status === 422 && said === STORE_NOT_FOUND_MESSAGE;\n}\n\n/**\n * Names what went wrong, because the page, the server log and Sentry all carry\n * this message. Every failure used to read \"Make sure VITE_STORE_DOMAIN is set\",\n * a local-development variable no deployed theme has, so a slow API looked like\n * a misconfigured theme.\n */\nfunction describeSettingsFailure(identifier: string, error: unknown): SettingsError {\n if (error instanceof SettingsError) return error;\n const request = `the settings request for store \"${identifier}\"`;\n if (isTimeoutError(error)) {\n return new SettingsError(\n `The Salla API did not answer ${request} within ${SETTINGS_TIMEOUT_MS} ms.`,\n { reason: 'timeout' }\n );\n }\n if (isHTTPError(error)) {\n const { status } = error.response;\n const said = apiErrorMessage(error.data);\n return new SettingsError(\n `The Salla API answered ${request} with HTTP ${status}${said ? `: ${said}` : ''}.`,\n { reason: isStoreNotFound(identifier, status, said) ? 'not-found' : 'http', status }\n );\n }\n if (isNetworkError(error)) {\n return new SettingsError(`The Salla API could not be reached for ${request}.`, {\n reason: 'network',\n });\n }\n const detail = error instanceof Error ? `: ${error.message}` : '';\n return new SettingsError(`The settings request for store \"${identifier}\" failed${detail}.`);\n}\n\n/**\n * The settings, or a {@link SettingsError} that says why there are none. The\n * query throws it so the root route can say why the store did not load;\n * `store.settings` keeps answering `null` for its own callers.\n */\nasync function fetchSettings(storeIdentifier?: string): Promise<StoreContext> {\n const identifier = storeIdentifier ?? resolveStoreIdentifier();\n\n if (!identifier) {\n const error = new SettingsError(\n 'No store is named for this request: add `?storeId=` on the preview host, or set VITE_STORE_DOMAIN in local development.',\n { reason: 'no-store' }\n );\n console.warn('[store.settings]', error.message);\n throw error;\n }\n\n try {\n return await requestSettings(identifier);\n } catch (cause) {\n const error = describeSettingsFailure(identifier, cause);\n console.error('[store.settings]', error.message, ...(cause === error ? [] : [cause]));\n throw error;\n }\n}\n\nexport const store = {\n settings: async (storeIdentifier?: string): Promise<StoreContext | null> => {\n try {\n return await fetchSettings(storeIdentifier);\n } catch {\n // Already logged, with the reason.\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 // Throws rather than resolving `null`, so the failure keeps its reason.\n queryFn: () => fetchSettings(storeIdentifier),\n // A null never retried, and the root route waits on this: the router's\n // default `retry: 1` would sit through the timeout twice.\n retry: 0,\n }),\n },\n};\n"]}
@@ -1,10 +1,10 @@
1
- import { order } from './chunk-NZ6REC6S.js';
1
+ import { order } from './chunk-GJFK3SU5.js';
2
2
  import { buildHreflangAlternates } from './chunk-RYGEIQWO.js';
3
- import { unauthorized, orUnauthorized, orThrow } from './chunk-W37R3JJ7.js';
3
+ import { unauthorized, orUnauthorized, orThrow } from './chunk-ITZ543CK.js';
4
4
  import { RouteId } from './chunk-OUW6WESU.js';
5
- import { getAuthToken } from './chunk-RYAOXNRA.js';
5
+ import { getAuthToken } from './chunk-5MNGLNIJ.js';
6
6
  import { getTwilightContext } from './chunk-6K34BCUP.js';
7
- import { lazy } from 'react';
7
+ import { lazyComponent } from './chunk-VYGA5AT5.js';
8
8
 
9
9
  // src/routes/account/orders/loader.ts
10
10
  async function ordersLoader(ctx, extend) {
@@ -55,9 +55,11 @@ async function orderSingleLoader({
55
55
  }
56
56
 
57
57
  // src/routes/account/orders/index.tsx
58
- var LazyOrdersPage = lazy(() => import('./OrdersPage-V3WNW2WZ.js').then((m) => ({ default: m.OrdersPage })));
59
- var LazyOrderSinglePage = lazy(
60
- () => import('./OrderSinglePage-N3YGXCKL.js').then((m) => ({ default: m.OrderSinglePage }))
58
+ var LazyOrdersPage = lazyComponent(
59
+ () => import('./OrdersPage-2F43AA76.js').then((m) => ({ default: m.OrdersPage }))
60
+ );
61
+ var LazyOrderSinglePage = lazyComponent(
62
+ () => import('./OrderSinglePage-YYTU72JY.js').then((m) => ({ default: m.OrderSinglePage }))
61
63
  );
62
64
  var OrdersPage = LazyOrdersPage;
63
65
  var OrderSinglePage = LazyOrderSinglePage;
@@ -104,5 +106,5 @@ var OrderSingle = {
104
106
  };
105
107
 
106
108
  export { OrderSingle, OrderSinglePage, Orders, OrdersPage, orderSingleLoader, ordersLoader };
107
- //# sourceMappingURL=chunk-DIA2LU6I.js.map
108
- //# sourceMappingURL=chunk-DIA2LU6I.js.map
109
+ //# sourceMappingURL=chunk-CJZ3MJ3Y.js.map
110
+ //# sourceMappingURL=chunk-CJZ3MJ3Y.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/routes/account/orders/loader.ts","../src/routes/account/orders/index.tsx"],"names":[],"mappings":"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","file":"chunk-CJZ3MJ3Y.js","sourcesContent":["import { order } from '../../../api/order';\nimport { getTwilightContext } from '../../../twilight/context';\nimport { RouteId } from '../../../router/route-ids';\nimport { orThrow, orUnauthorized, unauthorized } from '../../../providers/NavigationProvider';\nimport { getAuthToken } from '../../../api/client';\nimport type { OrdersPageProps, OrderSinglePageProps, OrdersQuery } from './types';\nimport type { IdParams } from '../../types';\n\nexport async function ordersLoader(\n ctx: { query?: OrdersQuery; with_items?: boolean | number },\n extend?: (\n data: OrdersPageProps,\n ctx: { params: Record<string, never> }\n ) => Promise<Record<string, unknown>> | Record<string, unknown>\n): Promise<OrdersPageProps> {\n if (!getAuthToken()) throw unauthorized();\n const query = ctx.query;\n const isPending = query?.status === 'pending';\n const response = await orUnauthorized(\n order.list({\n // Only decides the empty state; <salla-orders> applies its own review filter (`?tab=waiting`).\n status: query?.status,\n ...(ctx.with_items ? { with_items: ctx.with_items } : {}),\n })\n );\n const i18n = getTwilightContext().i18n;\n const pageData: OrdersPageProps = {\n page: {\n title: isPending ? i18n.t('common.titles.pending_orders') : i18n.t('common.titles.orders'),\n slug: RouteId.CUSTOMER_ORDERS_INDEX,\n },\n orders: response.data,\n cursor: response.cursor,\n query,\n };\n\n if (extend) {\n const extra = await extend(pageData, { params: {} });\n return { ...pageData, ...extra } as OrdersPageProps;\n }\n return pageData;\n}\n\nexport async function orderSingleLoader({\n params,\n}: {\n params: IdParams;\n}): Promise<OrderSinglePageProps> {\n if (!getAuthToken()) throw unauthorized();\n const [data, componentsOrder] = await Promise.all([\n order.findOrThrow(params.id),\n orThrow(orUnauthorized(order.findForComponents(params.id))),\n ]);\n const i18n = getTwilightContext().i18n;\n return {\n page: {\n slug: RouteId.CUSTOMER_ORDERS_SINGLE,\n id: String(params.id),\n title: i18n\n .t('pages.orders.order_details')\n .replace(':id', String(data.order.reference_id ?? params.id)),\n },\n order: data.order,\n componentsOrder,\n };\n}\n","import type { HeadDescriptor } from '../../../utils/head';\nimport { buildHreflangAlternates } from '../../../utils/baseHead';\n\nimport { ordersLoader, orderSingleLoader } from './loader';\nimport type { OrdersPageProps, OrderSinglePageProps, OrdersSearchParams } from './types';\nimport type { IdParams } from '../../types';\nimport type { TwilightContext } from '../../../twilight/context';\nimport { RouteId } from '../../../router/route-ids';\n\n// Lazy-load components for code-splitting\nconst LazyOrdersPage = lazyComponent(() =>\n import('./OrdersPage').then((m) => ({ default: m.OrdersPage }))\n);\nconst LazyOrderSinglePage = lazyComponent(() =>\n import('./OrderSinglePage').then((m) => ({ default: m.OrderSinglePage }))\n);\n\nexport const OrdersPage = LazyOrdersPage;\nexport const OrderSinglePage = LazyOrderSinglePage;\nexport { ordersLoader, orderSingleLoader } from './loader';\nexport type {\n OrdersPageProps,\n OrderSinglePageProps,\n OrdersSearchParams,\n OrdersQuery,\n} from './types';\nimport { lazyComponent } from '../../../utils/lazy-component';\n\nasync function ordersLoaderWithExtend(\n ctx: { search?: OrdersSearchParams; locale?: string; with_items?: boolean | number },\n extend?: (\n data: OrdersPageProps,\n ctx: { params: Record<string, never> }\n ) => Promise<Record<string, unknown>> | Record<string, unknown>\n): Promise<OrdersPageProps> {\n const query = ctx.search;\n // ordersLoader already merges the result of `extend`; calling it again here ran it twice.\n return ordersLoader({ query, with_items: ctx.with_items }, extend);\n}\n\nfunction ordersHead(ctx: TwilightContext, data: OrdersPageProps): HeadDescriptor {\n const isPending = data.query?.status === 'pending';\n const base: HeadDescriptor = {\n title: ctx.i18n.t(isPending ? 'common.titles.pending_orders' : 'common.titles.orders'),\n description: data.page.description,\n alternateLanguages: buildHreflangAlternates(ctx.settings, ctx.location.pathname),\n };\n\n return base;\n}\n\nasync function orderSingleLoaderWithExtend(\n ctx: { params: IdParams; locale?: string },\n extend?: (\n data: OrderSinglePageProps,\n ctx: { params: IdParams }\n ) => Promise<Record<string, unknown>> | Record<string, unknown>\n): Promise<OrderSinglePageProps> {\n const data = await orderSingleLoader({ params: ctx.params });\n\n if (extend) {\n const extra = await extend(data, ctx);\n return { ...data, ...extra } as OrderSinglePageProps;\n }\n return data;\n}\n\nfunction orderSingleHead(ctx: TwilightContext, data: OrderSinglePageProps): HeadDescriptor {\n const base: HeadDescriptor = {\n title: data.page.title,\n description: data.page.description,\n alternateLanguages: buildHreflangAlternates(ctx.settings, ctx.location.pathname),\n };\n\n return base;\n}\n\nexport const Orders = {\n id: RouteId.CUSTOMER_ORDERS_INDEX,\n loader: ordersLoaderWithExtend,\n head: ordersHead,\n Component: LazyOrdersPage,\n} as const;\nexport const OrderSingle = {\n id: RouteId.CUSTOMER_ORDERS_SINGLE,\n loader: orderSingleLoaderWithExtend,\n head: orderSingleHead,\n Component: LazyOrderSinglePage,\n} as const;\n"]}
@@ -1,5 +1,5 @@
1
- import { orThrow } from './chunk-W37R3JJ7.js';
2
- import { api } from './chunk-RYAOXNRA.js';
1
+ import { orThrow } from './chunk-ITZ543CK.js';
2
+ import { api } from './chunk-5MNGLNIJ.js';
3
3
  import { getSallaSDK } from './chunk-NHA4SBKG.js';
4
4
  import { queryOptions } from '@tanstack/react-query';
5
5
 
@@ -44,5 +44,5 @@ var cart = {
44
44
  };
45
45
 
46
46
  export { cart };
47
- //# sourceMappingURL=chunk-OIL6F7S2.js.map
48
- //# sourceMappingURL=chunk-OIL6F7S2.js.map
47
+ //# sourceMappingURL=chunk-DMS6PZXN.js.map
48
+ //# sourceMappingURL=chunk-DMS6PZXN.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/api/cart.ts"],"names":[],"mappings":";;;;;AAaA,SAAS,sBAAsB,IAAA,EAAoC;AACjE,EAAA,IAAI,CAAC,IAAA,CAAK,IAAA,EAAM,OAAO,IAAA;AACvB,EAAA,OAAO;AAAA,IACL,GAAG,IAAA,CAAK,IAAA;AAAA,IACR,OAAA,EAAS,KAAK,OAAA,IAAW,IAAA;AAAA;AAAA,IAEzB,IAAA,EAAM,IAAA,CAAK,IAAA,IAAQ,IAAA,CAAK,KAAK,IAAA,IAAQ;AAAA,GACvC;AACF;AAEO,IAAM,IAAA,GAAO;AAAA,EAClB,GAAA,EAAK,OAAO,MAAA,KAAyC;AACnD,IAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,GAAA,CAAI,IAAI,CAAA,KAAA,EAAQ,MAAM,CAAA,CAAE,CAAA,CAAE,IAAA,EAAgC;AACjF,IAAA,OAAO,sBAAsB,IAAI,CAAA;AAAA,EACnC,CAAA;AAAA,EAEA,YAAY,CAAC,MAAA,KAAyC,QAAQ,IAAA,CAAK,GAAA,CAAI,MAAM,CAAC,CAAA;AAAA;AAAA,EAG9E,cAAc,YAAoC;AAChD,IAAA,MAAM,QAAQ,WAAA,EAAY;AAC1B,IAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AAEnB,IAAA,MAAM,KAAA,CAAM,OAAA,EAAQ,CAAE,KAAA,CAAM,MAAM,MAAS,CAAA;AAC3C,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,gBAAA,EAAiB;AAAA,EACzC,CAAA;AAAA,EAEA,OAAA,EAAS;AAAA,IACP,MAAA,EAAQ,CAAC,MAAA,KACP,YAAA,CAAa;AAAA,MACX,QAAA,EAAU,CAAC,MAAA,EAAQ,MAAM,CAAA;AAAA,MACzB,OAAA,EAAS,MAAM,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA;AAAA;AAAA,MAE9B,SAAA,EAAW,CAAA;AAAA,MACX,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,IACH,SAAA,EAAW,MACT,YAAA,CAAa;AAAA,MACX,QAAA,EAAU,CAAC,MAAA,EAAQ,YAAY,CAAA;AAAA,MAC/B,OAAA,EAAS,MAAM,IAAA,CAAK,YAAA,EAAa;AAAA;AAAA,MAEjC,SAAA,EAAW,CAAA;AAAA,MACX,MAAA,EAAQ;AAAA,KACT;AAAA;AAEP","file":"chunk-OIL6F7S2.js","sourcesContent":["import { queryOptions } from '@tanstack/react-query';\nimport { api } from './client';\nimport type { Cart } from '../types';\nimport { orThrow } from '../providers/NavigationProvider';\nimport { getSallaSDK } from '../utils/sdk-helpers';\n\nexport interface CartApiResponse {\n /** Absent once the cart was turned into an order (the body then carries a top-level `redirect`). */\n cart?: Omit<Cart, 'loyalty'>;\n loyalty?: Cart['loyalty'];\n gift?: Cart['gift'];\n}\n\nfunction normalizeCartResponse(data: CartApiResponse): Cart | null {\n if (!data.cart) return null;\n return {\n ...data.cart,\n loyalty: data.loyalty ?? null,\n // The API sends `gift` inside `cart`.\n gift: data.gift ?? data.cart.gift ?? null,\n } as Cart;\n}\n\nexport const cart = {\n get: async (cartId: number): Promise<Cart | null> => {\n const { data } = await api.get(`cart/${cartId}`).json<{ data: CartApiResponse }>();\n return normalizeCartResponse(data);\n },\n\n getOrThrow: (cartId: number): Promise<Cart | null> => orThrow(cart.get(cartId)),\n\n /** The visitor's cart id, which only the Salla SDK knows; `null` outside the browser. */\n getCurrentId: async (): Promise<number | null> => {\n const salla = getSallaSDK();\n if (!salla) return null;\n // The app bundle can run before the SDK module, when `salla` is still the head stub.\n await salla.onReady().catch(() => undefined);\n return salla.cart.api.getCurrentCartId();\n },\n\n queries: {\n detail: (cartId: number) =>\n queryOptions({\n queryKey: ['cart', cartId],\n queryFn: () => cart.get(cartId),\n // The SDK changes the cart from any page, so a cached copy is never safe to show.\n staleTime: 0,\n gcTime: 0,\n }),\n currentId: () =>\n queryOptions({\n queryKey: ['cart', 'current-id'],\n queryFn: () => cart.getCurrentId(),\n // Completing an order starts a new cart, so an earlier id is never reused.\n staleTime: 0,\n gcTime: 0,\n }),\n },\n};\n"]}
1
+ {"version":3,"sources":["../src/api/cart.ts"],"names":[],"mappings":";;;;;AAaA,SAAS,sBAAsB,IAAA,EAAoC;AACjE,EAAA,IAAI,CAAC,IAAA,CAAK,IAAA,EAAM,OAAO,IAAA;AACvB,EAAA,OAAO;AAAA,IACL,GAAG,IAAA,CAAK,IAAA;AAAA,IACR,OAAA,EAAS,KAAK,OAAA,IAAW,IAAA;AAAA;AAAA,IAEzB,IAAA,EAAM,IAAA,CAAK,IAAA,IAAQ,IAAA,CAAK,KAAK,IAAA,IAAQ;AAAA,GACvC;AACF;AAEO,IAAM,IAAA,GAAO;AAAA,EAClB,GAAA,EAAK,OAAO,MAAA,KAAyC;AACnD,IAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,GAAA,CAAI,IAAI,CAAA,KAAA,EAAQ,MAAM,CAAA,CAAE,CAAA,CAAE,IAAA,EAAgC;AACjF,IAAA,OAAO,sBAAsB,IAAI,CAAA;AAAA,EACnC,CAAA;AAAA,EAEA,YAAY,CAAC,MAAA,KAAyC,QAAQ,IAAA,CAAK,GAAA,CAAI,MAAM,CAAC,CAAA;AAAA;AAAA,EAG9E,cAAc,YAAoC;AAChD,IAAA,MAAM,QAAQ,WAAA,EAAY;AAC1B,IAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AAEnB,IAAA,MAAM,KAAA,CAAM,OAAA,EAAQ,CAAE,KAAA,CAAM,MAAM,MAAS,CAAA;AAC3C,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,gBAAA,EAAiB;AAAA,EACzC,CAAA;AAAA,EAEA,OAAA,EAAS;AAAA,IACP,MAAA,EAAQ,CAAC,MAAA,KACP,YAAA,CAAa;AAAA,MACX,QAAA,EAAU,CAAC,MAAA,EAAQ,MAAM,CAAA;AAAA,MACzB,OAAA,EAAS,MAAM,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA;AAAA;AAAA,MAE9B,SAAA,EAAW,CAAA;AAAA,MACX,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,IACH,SAAA,EAAW,MACT,YAAA,CAAa;AAAA,MACX,QAAA,EAAU,CAAC,MAAA,EAAQ,YAAY,CAAA;AAAA,MAC/B,OAAA,EAAS,MAAM,IAAA,CAAK,YAAA,EAAa;AAAA;AAAA,MAEjC,SAAA,EAAW,CAAA;AAAA,MACX,MAAA,EAAQ;AAAA,KACT;AAAA;AAEP","file":"chunk-DMS6PZXN.js","sourcesContent":["import { queryOptions } from '@tanstack/react-query';\nimport { api } from './client';\nimport type { Cart } from '../types';\nimport { orThrow } from '../providers/NavigationProvider';\nimport { getSallaSDK } from '../utils/sdk-helpers';\n\nexport interface CartApiResponse {\n /** Absent once the cart was turned into an order (the body then carries a top-level `redirect`). */\n cart?: Omit<Cart, 'loyalty'>;\n loyalty?: Cart['loyalty'];\n gift?: Cart['gift'];\n}\n\nfunction normalizeCartResponse(data: CartApiResponse): Cart | null {\n if (!data.cart) return null;\n return {\n ...data.cart,\n loyalty: data.loyalty ?? null,\n // The API sends `gift` inside `cart`.\n gift: data.gift ?? data.cart.gift ?? null,\n } as Cart;\n}\n\nexport const cart = {\n get: async (cartId: number): Promise<Cart | null> => {\n const { data } = await api.get(`cart/${cartId}`).json<{ data: CartApiResponse }>();\n return normalizeCartResponse(data);\n },\n\n getOrThrow: (cartId: number): Promise<Cart | null> => orThrow(cart.get(cartId)),\n\n /** The visitor's cart id, which only the Salla SDK knows; `null` outside the browser. */\n getCurrentId: async (): Promise<number | null> => {\n const salla = getSallaSDK();\n if (!salla) return null;\n // The app bundle can run before the SDK module, when `salla` is still the head stub.\n await salla.onReady().catch(() => undefined);\n return salla.cart.api.getCurrentCartId();\n },\n\n queries: {\n detail: (cartId: number) =>\n queryOptions({\n queryKey: ['cart', cartId],\n queryFn: () => cart.get(cartId),\n // The SDK changes the cart from any page, so a cached copy is never safe to show.\n staleTime: 0,\n gcTime: 0,\n }),\n currentId: () =>\n queryOptions({\n queryKey: ['cart', 'current-id'],\n queryFn: () => cart.getCurrentId(),\n // Completing an order starts a new cart, so an earlier id is never reused.\n staleTime: 0,\n gcTime: 0,\n }),\n },\n};\n"]}
@@ -1,28 +1,29 @@
1
1
  import { ErrorPage } from './chunk-Z4Y55HWX.js';
2
2
  import { tanstackHeadAdapter } from './chunk-5UWRPWK2.js';
3
- import { dispatchRouteChanged, dispatchProductViewed } from './chunk-BFPTMZ4G.js';
4
- import { store } from './chunk-EDK4U4WQ.js';
5
- import { translations } from './chunk-WXE5OK4N.js';
6
- import { shouldDehydrateQuery } from './chunk-B6CGVRJ7.js';
3
+ import { dispatchRouteChanged, dispatchProductViewed } from './chunk-6KZUGNCS.js';
4
+ import { store, readPageSearch, readCookieHeader, persistLanguageCookie } from './chunk-A7KXUBPT.js';
5
+ import { translations } from './chunk-FVHAKOEH.js';
6
+ import { shouldDehydrateQuery } from './chunk-U6EB7GM3.js';
7
7
  import { rootHead, subscribeSnippetPageTargets, needsDocumentLoad } from './chunk-N6ZE6HUX.js';
8
- import { apps } from './chunk-6TT5VHUM.js';
8
+ import { apps } from './chunk-HG75MP47.js';
9
9
  import { setHeadAdapter } from './chunk-GD26FI4J.js';
10
10
  import { VIEW_AS_OWNER_COOKIE_NAME, ownerLinkMatches, ownerCookieMatches, showsMaintenancePage } from './chunk-Q7E4TNN7.js';
11
- import { RedirectError, NotFoundError, UnauthorizedError, isMissingResource, responseStatusOf } from './chunk-W37R3JJ7.js';
11
+ import { RedirectError, NotFoundError, UnauthorizedError, isMissingResource, responseStatusOf } from './chunk-ITZ543CK.js';
12
12
  import { RouteId } from './chunk-OUW6WESU.js';
13
13
  import { useDocumentClass } from './chunk-JWXJPJBO.js';
14
14
  import { toReactProps, mergeElementAttrs } from './chunk-CW625T2E.js';
15
- import { advertisement } from './chunk-XNNKW6FA.js';
15
+ import { advertisement } from './chunk-MWAXFBGG.js';
16
16
  import { syncSdkLocale, syncSdkThemeVersion } from './chunk-NHA4SBKG.js';
17
- import { LANGUAGE_COOKIE_NAME, LANGUAGE_COOKIE_MAX_AGE, AUTH_TOKEN_COOKIE_NAME, SCOPE_COOKIE_NAME, SCOPE_COOKIE_MAX_AGE, extractScopeFromUrl, resolveRequestScope, sameScope, extractScopeFromCookies, resolveStoreBase, resolveStoreBaseFollowsLocale, syncScopeCookie, resolveStoreBaseRedirect, extractTokenFromCookies, prefixStoreBase, hasLanguageParam, withLanguageParam, virtualLocale, stripStoreBase, decideSharedHostLanguage, currentHost } from './chunk-FXVII733.js';
17
+ import { AUTH_TOKEN_COOKIE_NAME, SCOPE_COOKIE_NAME, SCOPE_COOKIE_MAX_AGE, extractScopeFromCookies, extractScopeFromUrl, resolveRequestScope, sameScope, resolveStoreBase, resolveStoreBaseFollowsLocale, syncScopeCookie, resolveStoreBaseRedirect, extractTokenFromCookies, prefixStoreBase, hasLanguageParam, withLanguageParam, virtualLocale, stripStoreBase, decideSharedHostLanguage, currentHost } from './chunk-FXVII733.js';
18
18
  import { updateTwilightContext, createI18nInstance, getTwilightContext, SettingsError, messagesForLocale } from './chunk-6K34BCUP.js';
19
19
  import { FALLBACK_LOCALE, getLanguageInfo, isLocale } from './chunk-T72DAX7R.js';
20
+ import { lazyComponent, preloadServerComponents } from './chunk-VYGA5AT5.js';
20
21
  import { createRootRouteWithContext, createRouter as createRouter$1, useRouterState, redirect, defaultStringifySearch, notFound } from '@tanstack/react-router';
21
- import { lazy, Suspense } from 'react';
22
+ import { Suspense } from 'react';
22
23
  import { QueryClient } from '@tanstack/react-query';
23
24
  import { PageSkeleton } from '@salla.sa/twilight-components-react/skeletons';
24
25
  import { createIsomorphicFn } from '@tanstack/react-start';
25
- import { getRequestHeader, setCookie, getRequestUrl, getCookie } from '@tanstack/react-start/server';
26
+ import { getCookie, getRequestUrl, getRequestHeader, setCookie } from '@tanstack/react-start/server';
26
27
  import { setupRouterSsrQueryIntegration } from '@tanstack/react-router-ssr-query';
27
28
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
28
29
 
@@ -41,45 +42,6 @@ function stringifySearch(search) {
41
42
  );
42
43
  return `${rest || "?"}${rest ? "&" : ""}${repeated.join("&")}`;
43
44
  }
44
- var readServerCookieHeader = createIsomorphicFn().server(() => {
45
- try {
46
- return getRequestHeader("cookie") ?? null;
47
- } catch {
48
- return null;
49
- }
50
- }).client(() => null);
51
- var writeServerLanguageCookie = createIsomorphicFn().server((code) => {
52
- try {
53
- setCookie(LANGUAGE_COOKIE_NAME, code, {
54
- path: "/",
55
- maxAge: LANGUAGE_COOKIE_MAX_AGE,
56
- sameSite: "lax"
57
- });
58
- } catch {
59
- }
60
- }).client(() => {
61
- });
62
- var readServerSearch = createIsomorphicFn().server(() => {
63
- try {
64
- return getRequestUrl().search;
65
- } catch {
66
- return "";
67
- }
68
- }).client(() => "");
69
- function readPageSearch() {
70
- return readServerSearch() || (typeof window !== "undefined" ? window.location.search : "");
71
- }
72
- function readCookieHeader() {
73
- return readServerCookieHeader() ?? (typeof document !== "undefined" ? document.cookie : null);
74
- }
75
- function persistLanguageCookie(code) {
76
- writeServerLanguageCookie(code);
77
- if (typeof document !== "undefined") {
78
- document.cookie = `${LANGUAGE_COOKIE_NAME}=${encodeURIComponent(code)}; path=/; max-age=${LANGUAGE_COOKIE_MAX_AGE}; SameSite=Lax`;
79
- }
80
- }
81
-
82
- // src/routes/root/beforeLoad.ts
83
45
  var readServerCookieToken = createIsomorphicFn().server(() => {
84
46
  try {
85
47
  return getCookie(AUTH_TOKEN_COOKIE_NAME) ?? null;
@@ -87,7 +49,16 @@ var readServerCookieToken = createIsomorphicFn().server(() => {
87
49
  return null;
88
50
  }
89
51
  }).client(() => null);
52
+ function hostPinnedScope(url, requested, settings) {
53
+ if (!requested || extractScopeFromUrl(url)) return null;
54
+ const answered = settings.store?.scope;
55
+ if (answered?.id == null || String(answered.id) === requested.id) return null;
56
+ const type = answered.type ?? requested.type;
57
+ return type ? { id: String(answered.id), type } : { id: String(answered.id) };
58
+ }
90
59
  function scopeCookieUpdate(url, cookieHeader, settings) {
60
+ const pinned = hostPinnedScope(url, extractScopeFromCookies(cookieHeader), settings);
61
+ if (pinned) return pinned;
91
62
  if (!extractScopeFromUrl(url)) return null;
92
63
  const scope = resolveRequestScope(url, cookieHeader);
93
64
  const answered = settings.store?.scope;
@@ -95,19 +66,23 @@ function scopeCookieUpdate(url, cookieHeader, settings) {
95
66
  const typed = answered.type ? { ...scope, type: answered.type } : scope;
96
67
  return sameScope(extractScopeFromCookies(cookieHeader), typed) ? null : typed;
97
68
  }
98
- function alignRequestScopeType(queryClient, settings) {
69
+ function withAnsweredType(scope, settings) {
70
+ const answered = settings.store?.scope;
71
+ if (!scope || !answered?.type || String(answered.id) !== scope.id) return null;
72
+ return answered.type === scope.type ? null : { ...scope, type: answered.type };
73
+ }
74
+ function alignRequestScope(queryClient, settings, url) {
99
75
  let scope;
100
76
  try {
101
77
  scope = getTwilightContext().scope;
102
78
  } catch {
103
79
  return;
104
80
  }
105
- const answered = settings.store?.scope;
106
- if (!scope || !answered?.type || String(answered.id) !== scope.id) return;
107
- if (answered.type === scope.type) return;
81
+ const aligned = (url === void 0 ? null : hostPinnedScope(url, scope, settings)) ?? withAnsweredType(scope, settings);
82
+ if (!aligned) return;
108
83
  const assumedKey = store.queries.settings().queryKey;
109
84
  const assumedAdsKey = advertisement.queries.list().queryKey;
110
- updateTwilightContext({ scope: { ...scope, type: answered.type } });
85
+ updateTwilightContext({ scope: aligned });
111
86
  queryClient.setQueryData(store.queries.settings().queryKey, settings);
112
87
  queryClient.removeQueries({ queryKey: assumedKey, exact: true });
113
88
  const ads = queryClient.getQueryData(assumedAdsKey);
@@ -155,9 +130,16 @@ function resolveMaintenance(href, settings) {
155
130
  const viewAsOwner = fromLink || ownerCookieMatches(requestCookies(), settings);
156
131
  return showsMaintenancePage(settings, viewAsOwner, currentHost());
157
132
  }
133
+ var serverRequestUrl = createIsomorphicFn().server(() => {
134
+ try {
135
+ return String(getRequestUrl());
136
+ } catch {
137
+ return null;
138
+ }
139
+ }).client(() => null);
158
140
  function settleRequestScope(queryClient, settings) {
159
141
  if (typeof window !== "undefined") return;
160
- alignRequestScopeType(queryClient, settings);
142
+ alignRequestScope(queryClient, settings, serverRequestUrl() ?? void 0);
161
143
  persistRequestScope(settings);
162
144
  }
163
145
  function settleSharedHostLanguage(settings, locale, location) {
@@ -206,6 +188,7 @@ async function rootBeforeLoad(ctx) {
206
188
  updateTwilightContext({ locale });
207
189
  syncSdkLocale(locale);
208
190
  syncScopeCookie();
191
+ const componentsLoaded = preloadServerComponents();
209
192
  let settingsFailure;
210
193
  const [settingsResult, translationsResult, snippetsResult, appSettingsResult] = await Promise.all(
211
194
  [
@@ -239,6 +222,7 @@ async function rootBeforeLoad(ctx) {
239
222
  })
240
223
  ]
241
224
  );
225
+ await componentsLoaded;
242
226
  if (!settingsResult) throw settingsFailureToThrow(settingsFailure);
243
227
  syncSdkThemeVersion(settingsResult.headers);
244
228
  settleRequestScope(ctx.context.queryClient, settingsResult);
@@ -366,8 +350,8 @@ var TANSTACK_ROUTE_ID_MAP = {
366
350
  function resolveRouteId(tanstackId) {
367
351
  return TANSTACK_ROUTE_ID_MAP[tanstackId] ?? tanstackId;
368
352
  }
369
- var LazyNotFoundPage = lazy(
370
- () => import('./not-found-3M6US423.js').then((m) => ({ default: m.NotFoundPage }))
353
+ var LazyNotFoundPage = lazyComponent(
354
+ () => import('./not-found-VVI6BXAZ.js').then((m) => ({ default: m.NotFoundPage }))
371
355
  );
372
356
  function StoreUnavailablePage() {
373
357
  return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(
@@ -796,5 +780,5 @@ function tanstackDocumentAdapter(descriptor) {
796
780
  }
797
781
 
798
782
  export { RouteDocumentSync, TanStackDocumentSync, createRouter, createTwilightRootRoute, tanstackDocumentAdapter, useTanstackDocumentAttrs };
799
- //# sourceMappingURL=chunk-TUIB74QX.js.map
800
- //# sourceMappingURL=chunk-TUIB74QX.js.map
783
+ //# sourceMappingURL=chunk-EGJ2SV6O.js.map
784
+ //# sourceMappingURL=chunk-EGJ2SV6O.js.map