@salla.sa/twilight-theme-engine 1.0.151 → 1.0.153

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 (233) hide show
  1. package/dist/{AddToCartForm-O6TPONV2.js → AddToCartForm-SOC5GBBM.js} +3 -3
  2. package/dist/{AddToCartForm-O6TPONV2.js.map → AddToCartForm-SOC5GBBM.js.map} +1 -1
  3. package/dist/{BlogAuthorPage-H6LRQ5YW.js → BlogAuthorPage-TTL4SIQA.js} +16 -16
  4. package/dist/{BlogAuthorPage-H6LRQ5YW.js.map → BlogAuthorPage-TTL4SIQA.js.map} +1 -1
  5. package/dist/{BlogCategoryPage-NORT43JE.js → BlogCategoryPage-RQ3VXFKP.js} +16 -16
  6. package/dist/{BlogCategoryPage-NORT43JE.js.map → BlogCategoryPage-RQ3VXFKP.js.map} +1 -1
  7. package/dist/{BlogPage-ZGTRTQT6.js → BlogPage-TAGSF4PK.js} +14 -14
  8. package/dist/{BlogPage-ZGTRTQT6.js.map → BlogPage-TAGSF4PK.js.map} +1 -1
  9. package/dist/{BlogSinglePage-G7TUMA4L.js → BlogSinglePage-WFECBPGR.js} +14 -14
  10. package/dist/{BlogSinglePage-G7TUMA4L.js.map → BlogSinglePage-WFECBPGR.js.map} +1 -1
  11. package/dist/{BlogTagPage-3LFUVXP3.js → BlogTagPage-LEUUDNOX.js} +16 -16
  12. package/dist/{BlogTagPage-3LFUVXP3.js.map → BlogTagPage-LEUUDNOX.js.map} +1 -1
  13. package/dist/{BrandsPage-NA5BVFVS.js → BrandsPage-3DKJL2UC.js} +15 -15
  14. package/dist/{BrandsPage-NA5BVFVS.js.map → BrandsPage-3DKJL2UC.js.map} +1 -1
  15. package/dist/{Breadcrumb-MNSFVYUT.js → Breadcrumb-CZUWG3RH.js} +14 -14
  16. package/dist/{Breadcrumb-MNSFVYUT.js.map → Breadcrumb-CZUWG3RH.js.map} +1 -1
  17. package/dist/{CartItem-N6OPII7B.js → CartItem-ZZZ34FK2.js} +14 -14
  18. package/dist/{CartItem-N6OPII7B.js.map → CartItem-ZZZ34FK2.js.map} +1 -1
  19. package/dist/{CartSummary-LGYAIG7C.js → CartSummary-YICFP2HG.js} +14 -14
  20. package/dist/{CartSummary-LGYAIG7C.js.map → CartSummary-YICFP2HG.js.map} +1 -1
  21. package/dist/{Copyright-YXWJNV5Q.js → Copyright-N7AWWM6R.js} +3 -3
  22. package/dist/{Copyright-YXWJNV5Q.js.map → Copyright-N7AWWM6R.js.map} +1 -1
  23. package/dist/{CustomerLayout-YU7TKV2Q.js → CustomerLayout-CDARXLTX.js} +14 -14
  24. package/dist/{CustomerLayout-YU7TKV2Q.js.map → CustomerLayout-CDARXLTX.js.map} +1 -1
  25. package/dist/{Footer-4QV4H67O.js → Footer-UAEQ5SBA.js} +4 -4
  26. package/dist/{Footer-4QV4H67O.js.map → Footer-UAEQ5SBA.js.map} +1 -1
  27. package/dist/{Header-DEUDDAWD.js → Header-TNV53WAC.js} +8 -8
  28. package/dist/{Header-DEUDDAWD.js.map → Header-TNV53WAC.js.map} +1 -1
  29. package/dist/{LatestProducts-KA54KWOQ.js → LatestProducts-CPULMFWH.js} +16 -16
  30. package/dist/{LatestProducts-KA54KWOQ.js.map → LatestProducts-CPULMFWH.js.map} +1 -1
  31. package/dist/{LoyaltyPage-7FJROQFU.js → LoyaltyPage-YYYXZOYO.js} +14 -14
  32. package/dist/{LoyaltyPage-7FJROQFU.js.map → LoyaltyPage-YYYXZOYO.js.map} +1 -1
  33. package/dist/{LoyaltyPointsPage-JXT65P5U.js → LoyaltyPointsPage-66N76CP7.js} +6 -6
  34. package/dist/{LoyaltyPointsPage-JXT65P5U.js.map → LoyaltyPointsPage-66N76CP7.js.map} +1 -1
  35. package/dist/{MainMenu-UOAPVNJH.js → MainMenu-7WKMQYJE.js} +5 -5
  36. package/dist/{MainMenu-UOAPVNJH.js.map → MainMenu-7WKMQYJE.js.map} +1 -1
  37. package/dist/{MasterLayout-Z45QJW3M.js → MasterLayout-NXS4567C.js} +14 -14
  38. package/dist/{MasterLayout-Z45QJW3M.js.map → MasterLayout-NXS4567C.js.map} +1 -1
  39. package/dist/{MobileMenu-A4QIBBYN.js → MobileMenu-2ISSFTOL.js} +15 -15
  40. package/dist/{MobileMenu-A4QIBBYN.js.map → MobileMenu-2ISSFTOL.js.map} +1 -1
  41. package/dist/{NotificationsPage-XU5IBNPR.js → NotificationsPage-GRLVJK4Q.js} +14 -14
  42. package/dist/{NotificationsPage-XU5IBNPR.js.map → NotificationsPage-GRLVJK4Q.js.map} +1 -1
  43. package/dist/{OrderSinglePage-5ANTMCBP.js → OrderSinglePage-XEX3ZDU4.js} +15 -15
  44. package/dist/{OrderSinglePage-5ANTMCBP.js.map → OrderSinglePage-XEX3ZDU4.js.map} +1 -1
  45. package/dist/{OrdersPage-LZLPSDZR.js → OrdersPage-7H5NZQYQ.js} +14 -14
  46. package/dist/{OrdersPage-LZLPSDZR.js.map → OrdersPage-7H5NZQYQ.js.map} +1 -1
  47. package/dist/{PageSingle-PMLCSRMC.js → PageSingle-Q6RGRZEC.js} +3 -3
  48. package/dist/{PageSingle-PMLCSRMC.js.map → PageSingle-Q6RGRZEC.js.map} +1 -1
  49. package/dist/{ProductDetails-ECPCGZLO.js → ProductDetails-6W6YIGUS.js} +4 -4
  50. package/dist/{ProductDetails-ECPCGZLO.js.map → ProductDetails-6W6YIGUS.js.map} +1 -1
  51. package/dist/{ProfilePage-XVWB4ZOO.js → ProfilePage-P5NHML4X.js} +14 -14
  52. package/dist/{ProfilePage-XVWB4ZOO.js.map → ProfilePage-P5NHML4X.js.map} +1 -1
  53. package/dist/{ReviewsPage-6EOSOIU4.js → ReviewsPage-D2EPXJJZ.js} +3 -3
  54. package/dist/{ReviewsPage-6EOSOIU4.js.map → ReviewsPage-D2EPXJJZ.js.map} +1 -1
  55. package/dist/{SeoCartWidget-TYNXS4UD.js → SeoCartWidget-VMNWM3FM.js} +14 -14
  56. package/dist/{SeoCartWidget-TYNXS4UD.js.map → SeoCartWidget-VMNWM3FM.js.map} +1 -1
  57. package/dist/{SettingsPage-BHW3CJC6.js → SettingsPage-JYEI7C4T.js} +14 -14
  58. package/dist/{SettingsPage-BHW3CJC6.js.map → SettingsPage-JYEI7C4T.js.map} +1 -1
  59. package/dist/{StoreClosedNotification-7YHL4XTT.js → StoreClosedNotification-U36UX33X.js} +15 -15
  60. package/dist/{StoreClosedNotification-7YHL4XTT.js.map → StoreClosedNotification-U36UX33X.js.map} +1 -1
  61. package/dist/{TestimonialsPage-ZY2U4QDN.js → TestimonialsPage-O2FN7CPT.js} +3 -3
  62. package/dist/{TestimonialsPage-ZY2U4QDN.js.map → TestimonialsPage-O2FN7CPT.js.map} +1 -1
  63. package/dist/{ThankYouPage-MINROTEH.js → ThankYouPage-UEHR5653.js} +14 -14
  64. package/dist/{ThankYouPage-MINROTEH.js.map → ThankYouPage-UEHR5653.js.map} +1 -1
  65. package/dist/{WalletPage-4VFAGWIE.js → WalletPage-5X37XHOU.js} +15 -15
  66. package/dist/{WalletPage-4VFAGWIE.js.map → WalletPage-5X37XHOU.js.map} +1 -1
  67. package/dist/{WebMcpTools-F42SFWVP.js → WebMcpTools-6ZN6KROP.js} +5 -5
  68. package/dist/{WebMcpTools-F42SFWVP.js.map → WebMcpTools-6ZN6KROP.js.map} +1 -1
  69. package/dist/{WishlistPage-VMM4YDMX.js → WishlistPage-2JCIUJEP.js} +16 -16
  70. package/dist/{WishlistPage-VMM4YDMX.js.map → WishlistPage-2JCIUJEP.js.map} +1 -1
  71. package/dist/api/advertisement.js +2 -2
  72. package/dist/api/apps.js +2 -2
  73. package/dist/api/blog.js +3 -3
  74. package/dist/api/brands.js +3 -3
  75. package/dist/api/cart.js +3 -3
  76. package/dist/api/category.js +3 -3
  77. package/dist/api/client.js +1 -1
  78. package/dist/api/home.js +2 -2
  79. package/dist/api/loyalty.js +3 -3
  80. package/dist/api/menu.js +2 -2
  81. package/dist/api/notification.js +2 -2
  82. package/dist/api/order.js +3 -3
  83. package/dist/api/page.js +3 -3
  84. package/dist/api/product.js +3 -3
  85. package/dist/api/profile.js +1 -1
  86. package/dist/api/store.js +2 -2
  87. package/dist/api/translations.js +2 -2
  88. package/dist/api/user.js +2 -2
  89. package/dist/api/wallet.js +2 -2
  90. package/dist/api/wishlist.js +4 -4
  91. package/dist/{chunk-LDXVGQA2.js → chunk-2BRLDR24.js} +3 -3
  92. package/dist/{chunk-LDXVGQA2.js.map → chunk-2BRLDR24.js.map} +1 -1
  93. package/dist/{chunk-CATEET2N.js → chunk-3YMCWKFT.js} +3 -3
  94. package/dist/{chunk-CATEET2N.js.map → chunk-3YMCWKFT.js.map} +1 -1
  95. package/dist/{chunk-CH6BNMS6.js → chunk-46CWPZSI.js} +3 -3
  96. package/dist/{chunk-CH6BNMS6.js.map → chunk-46CWPZSI.js.map} +1 -1
  97. package/dist/{chunk-DGPSZUI3.js → chunk-4FPHFWEU.js} +4 -4
  98. package/dist/{chunk-DGPSZUI3.js.map → chunk-4FPHFWEU.js.map} +1 -1
  99. package/dist/{chunk-DKIU6ZOP.js → chunk-4UPADKLB.js} +4 -4
  100. package/dist/{chunk-DKIU6ZOP.js.map → chunk-4UPADKLB.js.map} +1 -1
  101. package/dist/{chunk-OGEG4QHV.js → chunk-4XT63VFN.js} +3 -3
  102. package/dist/{chunk-OGEG4QHV.js.map → chunk-4XT63VFN.js.map} +1 -1
  103. package/dist/{chunk-77SZTUQE.js → chunk-53ULTYEF.js} +7 -7
  104. package/dist/{chunk-77SZTUQE.js.map → chunk-53ULTYEF.js.map} +1 -1
  105. package/dist/{chunk-RRDKYXHU.js → chunk-5WVJYMDS.js} +3 -3
  106. package/dist/{chunk-RRDKYXHU.js.map → chunk-5WVJYMDS.js.map} +1 -1
  107. package/dist/{chunk-A7E6XFZC.js → chunk-6REUUGFM.js} +15 -15
  108. package/dist/{chunk-A7E6XFZC.js.map → chunk-6REUUGFM.js.map} +1 -1
  109. package/dist/{chunk-GZUBV5S3.js → chunk-6VBQ6HJO.js} +3 -3
  110. package/dist/{chunk-GZUBV5S3.js.map → chunk-6VBQ6HJO.js.map} +1 -1
  111. package/dist/{chunk-DKPM4T4C.js → chunk-7RM7W4G7.js} +4 -4
  112. package/dist/{chunk-DKPM4T4C.js.map → chunk-7RM7W4G7.js.map} +1 -1
  113. package/dist/{chunk-LRQ75MWP.js → chunk-7TEJBYGD.js} +7 -7
  114. package/dist/{chunk-LRQ75MWP.js.map → chunk-7TEJBYGD.js.map} +1 -1
  115. package/dist/{chunk-K577255O.js → chunk-A5QIBUZ5.js} +7 -7
  116. package/dist/{chunk-K577255O.js.map → chunk-A5QIBUZ5.js.map} +1 -1
  117. package/dist/{chunk-T7H5KE5Y.js → chunk-AME4LBNH.js} +4 -4
  118. package/dist/{chunk-T7H5KE5Y.js.map → chunk-AME4LBNH.js.map} +1 -1
  119. package/dist/{chunk-OJ4PJK27.js → chunk-ASLHSLMC.js} +4 -4
  120. package/dist/{chunk-OJ4PJK27.js.map → chunk-ASLHSLMC.js.map} +1 -1
  121. package/dist/{chunk-F6MYOPZB.js → chunk-BBTYM4OY.js} +4 -4
  122. package/dist/{chunk-F6MYOPZB.js.map → chunk-BBTYM4OY.js.map} +1 -1
  123. package/dist/{chunk-H7A7LOQJ.js → chunk-DWWPRLD3.js} +3 -3
  124. package/dist/{chunk-H7A7LOQJ.js.map → chunk-DWWPRLD3.js.map} +1 -1
  125. package/dist/{chunk-YQ365K65.js → chunk-EMGVOEZZ.js} +3 -3
  126. package/dist/{chunk-YQ365K65.js.map → chunk-EMGVOEZZ.js.map} +1 -1
  127. package/dist/{chunk-GYJJX4EI.js → chunk-G4DDINNW.js} +4 -4
  128. package/dist/{chunk-GYJJX4EI.js.map → chunk-G4DDINNW.js.map} +1 -1
  129. package/dist/{chunk-5CXBBDJB.js → chunk-JIFM6LXR.js} +4 -4
  130. package/dist/{chunk-5CXBBDJB.js.map → chunk-JIFM6LXR.js.map} +1 -1
  131. package/dist/{chunk-KBWIXAHN.js → chunk-KAIASXU7.js} +6 -4
  132. package/dist/chunk-KAIASXU7.js.map +1 -0
  133. package/dist/{chunk-CEIXIUJ7.js → chunk-LDDZ7TUR.js} +4 -4
  134. package/dist/{chunk-CEIXIUJ7.js.map → chunk-LDDZ7TUR.js.map} +1 -1
  135. package/dist/{chunk-6R2AUQMP.js → chunk-LYKDZ74X.js} +3 -3
  136. package/dist/{chunk-6R2AUQMP.js.map → chunk-LYKDZ74X.js.map} +1 -1
  137. package/dist/{chunk-MVSOSNNB.js → chunk-MO2NP3WX.js} +5 -5
  138. package/dist/{chunk-MVSOSNNB.js.map → chunk-MO2NP3WX.js.map} +1 -1
  139. package/dist/{chunk-3JJQCRXD.js → chunk-O6O2PDH5.js} +4 -4
  140. package/dist/{chunk-3JJQCRXD.js.map → chunk-O6O2PDH5.js.map} +1 -1
  141. package/dist/{chunk-SF2POPJW.js → chunk-ONBDJMLJ.js} +3 -3
  142. package/dist/{chunk-SF2POPJW.js.map → chunk-ONBDJMLJ.js.map} +1 -1
  143. package/dist/{chunk-ULGRYCUV.js → chunk-P7RERWEY.js} +3 -3
  144. package/dist/{chunk-ULGRYCUV.js.map → chunk-P7RERWEY.js.map} +1 -1
  145. package/dist/{chunk-MQU6G2ZE.js → chunk-PBTIZ7UF.js} +4 -4
  146. package/dist/{chunk-MQU6G2ZE.js.map → chunk-PBTIZ7UF.js.map} +1 -1
  147. package/dist/{chunk-R6Z6JQIB.js → chunk-PSWUFTNS.js} +3 -3
  148. package/dist/{chunk-R6Z6JQIB.js.map → chunk-PSWUFTNS.js.map} +1 -1
  149. package/dist/{chunk-R4QBCQ4K.js → chunk-QEE2A7O2.js} +3 -3
  150. package/dist/{chunk-R4QBCQ4K.js.map → chunk-QEE2A7O2.js.map} +1 -1
  151. package/dist/{chunk-N2Y5VSHM.js → chunk-QJR5FRIA.js} +4 -4
  152. package/dist/{chunk-N2Y5VSHM.js.map → chunk-QJR5FRIA.js.map} +1 -1
  153. package/dist/chunk-T3GORIJL.js +69 -0
  154. package/dist/chunk-T3GORIJL.js.map +1 -0
  155. package/dist/{chunk-PHWFTUTE.js → chunk-T3UUH7YX.js} +5 -5
  156. package/dist/{chunk-PHWFTUTE.js.map → chunk-T3UUH7YX.js.map} +1 -1
  157. package/dist/{chunk-O7PJBTH3.js → chunk-TK2ZIYF6.js} +3 -3
  158. package/dist/{chunk-O7PJBTH3.js.map → chunk-TK2ZIYF6.js.map} +1 -1
  159. package/dist/{chunk-DXQUURZX.js → chunk-U7ZHPOGI.js} +7 -7
  160. package/dist/{chunk-DXQUURZX.js.map → chunk-U7ZHPOGI.js.map} +1 -1
  161. package/dist/{chunk-Z4BOATCC.js → chunk-WYMDZDEZ.js} +3 -3
  162. package/dist/{chunk-Z4BOATCC.js.map → chunk-WYMDZDEZ.js.map} +1 -1
  163. package/dist/{chunk-WZAJS44F.js → chunk-YBWXK2OT.js} +11 -11
  164. package/dist/{chunk-WZAJS44F.js.map → chunk-YBWXK2OT.js.map} +1 -1
  165. package/dist/{chunk-WJCDY35D.js → chunk-YY74QOIL.js} +5 -5
  166. package/dist/{chunk-WJCDY35D.js.map → chunk-YY74QOIL.js.map} +1 -1
  167. package/dist/{chunk-Q76O67KK.js → chunk-YZPHKPYI.js} +3 -3
  168. package/dist/{chunk-Q76O67KK.js.map → chunk-YZPHKPYI.js.map} +1 -1
  169. package/dist/{chunk-QNGA2NAC.js → chunk-ZHBZ6YMB.js} +4 -4
  170. package/dist/{chunk-QNGA2NAC.js.map → chunk-ZHBZ6YMB.js.map} +1 -1
  171. package/dist/{chunk-SBZWX6II.js → chunk-ZKTSLYTT.js} +3 -3
  172. package/dist/{chunk-SBZWX6II.js.map → chunk-ZKTSLYTT.js.map} +1 -1
  173. package/dist/components/cart/index.js +1 -1
  174. package/dist/components/common/index.js +1 -1
  175. package/dist/components/drawer/index.js +12 -12
  176. package/dist/components/home/index.js +17 -17
  177. package/dist/components/layout/index.js +4 -4
  178. package/dist/components/product/index.js +14 -14
  179. package/dist/components/store/index.js +13 -13
  180. package/dist/dev/editor/index.js +1 -1
  181. package/dist/dev/index.js +1 -1
  182. package/dist/{document-class-QZXX5ZEE.js → document-class-YJDZSSZA.js} +12 -12
  183. package/dist/{document-class-QZXX5ZEE.js.map → document-class-YJDZSSZA.js.map} +1 -1
  184. package/dist/hooks/index.js +12 -12
  185. package/dist/hooks/useGtm.js +12 -12
  186. package/dist/hooks/useMoney.js +12 -12
  187. package/dist/hooks/useStore.js +12 -12
  188. package/dist/hooks/useUser.js +3 -3
  189. package/dist/index.js +12 -12
  190. package/dist/{navigation-DF4JEVKE.js → navigation-W43IKI56.js} +5 -5
  191. package/dist/{navigation-DF4JEVKE.js.map → navigation-W43IKI56.js.map} +1 -1
  192. package/dist/{navigation-FKU75TCE.js → navigation-XQLKHMIZ.js} +4 -4
  193. package/dist/{navigation-FKU75TCE.js.map → navigation-XQLKHMIZ.js.map} +1 -1
  194. package/dist/{not-found-E72Z34CJ.js → not-found-LE7TH53E.js} +15 -15
  195. package/dist/{not-found-E72Z34CJ.js.map → not-found-LE7TH53E.js.map} +1 -1
  196. package/dist/providers/index.js +12 -12
  197. package/dist/routes/account/orders.js +4 -4
  198. package/dist/routes/account.js +13 -13
  199. package/dist/routes/blog.js +8 -8
  200. package/dist/routes/brands.js +4 -4
  201. package/dist/routes/cart.js +21 -21
  202. package/dist/routes/home.js +18 -18
  203. package/dist/routes/index.js +3 -3
  204. package/dist/routes/loyalty.js +5 -5
  205. package/dist/routes/page/loader.d.ts.map +1 -1
  206. package/dist/routes/page.js +5 -4
  207. package/dist/routes/page.js.map +1 -1
  208. package/dist/routes/product/loader.d.ts.map +1 -1
  209. package/dist/routes/product-listing.js +22 -22
  210. package/dist/routes/product.js +18 -17
  211. package/dist/routes/product.js.map +1 -1
  212. package/dist/routes/seo-redirects.d.ts +12 -0
  213. package/dist/routes/seo-redirects.d.ts.map +1 -1
  214. package/dist/routes/seo-redirects.js +3 -3
  215. package/dist/routes/testimonials.js +2 -2
  216. package/dist/routes/thank-you.js +4 -4
  217. package/dist/skeleton.js +18 -18
  218. package/dist/{store-lookup-LPXG5JSB.js → store-lookup-FL54XOJB.js} +8 -8
  219. package/dist/{store-lookup-LPXG5JSB.js.map → store-lookup-FL54XOJB.js.map} +1 -1
  220. package/dist/tanstack/link.d.ts.map +1 -1
  221. package/dist/tanstack/templates/locale-wrapper.d.ts +3 -1
  222. package/dist/tanstack/templates/locale-wrapper.d.ts.map +1 -1
  223. package/dist/tanstack.js +12 -12
  224. package/dist/utils/index.js +2 -2
  225. package/dist/vite/index.js +31 -11
  226. package/dist/vite/index.js.map +1 -1
  227. package/package.json +1 -1
  228. package/tailwind/routes/page/loader.ts.txt +4 -0
  229. package/tailwind/routes/product/loader.ts.txt +5 -0
  230. package/tailwind/routes/seo-redirects.ts.txt +52 -2
  231. package/dist/chunk-3ULBL56H.js +0 -41
  232. package/dist/chunk-3ULBL56H.js.map +0 -1
  233. package/dist/chunk-KBWIXAHN.js.map +0 -1
@@ -33,6 +33,18 @@ export declare function productsSourceRedirectLoader(ctx: {
33
33
  source: 'latest' | 'sales' | 'offers';
34
34
  search?: string;
35
35
  }): Promise<never>;
36
+ /** The page the router matched, as the locale layout's `beforeLoad` sees it. */
37
+ export interface MatchedPage {
38
+ routeId: string;
39
+ params: Record<string, string | undefined>;
40
+ }
41
+ /**
42
+ * Twig's product and category URLs (`/p{id}`, `/p{id}-{name}`, `/category/{hash}`, each with or
43
+ * without a locale) sent to the page that has them now. Run by the locale layout's `beforeLoad`,
44
+ * only for an address no page answers: the router binds `/ar/p1` to `$slug/p{$id}` (slug `ar`)
45
+ * and `/p1` to the locale. A product or category that is gone stays the not-found page.
46
+ */
47
+ export declare function twigUrlRedirect(pathname: string, search: string, page: MatchedPage | undefined): Promise<void>;
36
48
  /**
37
49
  * `/logout` — where the SDK sends the browser once `salla.auth.logout()` has run
38
50
  * (`salla.url.get('logout?from=…')`). The Twig storefront serves that URL server-side. Here
@@ -1 +1 @@
1
- {"version":3,"file":"seo-redirects.d.ts","sourceRoot":"","sources":["../../src/routes/seo-redirects.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,eAAe;IAC9B,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAC;IACb,uCAAuC;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,6EAA6E;IAC7E,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,uBAAuB,CAAC,GAAG,EAAE;IAAE,MAAM,EAAE,eAAe,CAAA;CAAE,GAAG,OAAO,CAAC,KAAK,CAAC,CAG9F;AAED,MAAM,WAAW,2BAA2B;IAC1C,6EAA6E;IAC7E,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,2BAA2B,CAC/C,GAAG,GAAE;IAAE,MAAM,EAAE,2BAA2B,CAAA;CAAmB,GAC5D,OAAO,CAAC,KAAK,CAAC,CAGhB;AAED,4HAA4H;AAC5H,wBAAsB,oBAAoB,CACxC,GAAG,GAAE;IAAE,MAAM,EAAE,2BAA2B,CAAA;CAAmB,GAC5D,OAAO,CAAC,KAAK,CAAC,CAGhB;AAED,4FAA4F;AAC5F,wBAAsB,qBAAqB,CAAC,GAAG,EAAE;IAC/C,MAAM,EAAE,2BAA2B,CAAC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,+EAA+E;IAC/E,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,KAAK,CAAC,CAIjB;AAED,gGAAgG;AAChG,wBAAsB,4BAA4B,CAAC,GAAG,EAAE;IACtD,MAAM,EAAE,2BAA2B,CAAC;IACpC,MAAM,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,KAAK,CAAC,CAQjB;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAOrC"}
1
+ {"version":3,"file":"seo-redirects.d.ts","sourceRoot":"","sources":["../../src/routes/seo-redirects.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,eAAe;IAC9B,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAC;IACb,uCAAuC;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,6EAA6E;IAC7E,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,uBAAuB,CAAC,GAAG,EAAE;IAAE,MAAM,EAAE,eAAe,CAAA;CAAE,GAAG,OAAO,CAAC,KAAK,CAAC,CAG9F;AAED,MAAM,WAAW,2BAA2B;IAC1C,6EAA6E;IAC7E,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,2BAA2B,CAC/C,GAAG,GAAE;IAAE,MAAM,EAAE,2BAA2B,CAAA;CAAmB,GAC5D,OAAO,CAAC,KAAK,CAAC,CAGhB;AAED,4HAA4H;AAC5H,wBAAsB,oBAAoB,CACxC,GAAG,GAAE;IAAE,MAAM,EAAE,2BAA2B,CAAA;CAAmB,GAC5D,OAAO,CAAC,KAAK,CAAC,CAGhB;AAED,4FAA4F;AAC5F,wBAAsB,qBAAqB,CAAC,GAAG,EAAE;IAC/C,MAAM,EAAE,2BAA2B,CAAC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,+EAA+E;IAC/E,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,KAAK,CAAC,CAIjB;AAED,gGAAgG;AAChG,wBAAsB,4BAA4B,CAAC,GAAG,EAAE;IACtD,MAAM,EAAE,2BAA2B,CAAC;IACpC,MAAM,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,KAAK,CAAC,CAQjB;AAKD,gFAAgF;AAChF,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CAC5C;AASD;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,WAAW,GAAG,SAAS,GAC5B,OAAO,CAAC,IAAI,CAAC,CAsBf;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAOrC"}
@@ -1,7 +1,7 @@
1
- export { LogoutRedirect, accountRedirectLoader, pendingOrdersRedirectLoader, productsSourceRedirectLoader, ratingRedirectLoader, slugBrandRedirectLoader } from '../chunk-3ULBL56H.js';
2
- import '../chunk-H7A7LOQJ.js';
1
+ export { LogoutRedirect, accountRedirectLoader, pendingOrdersRedirectLoader, productsSourceRedirectLoader, ratingRedirectLoader, slugBrandRedirectLoader, twigUrlRedirect } from '../chunk-T3GORIJL.js';
2
+ import '../chunk-DWWPRLD3.js';
3
3
  import '../chunk-OUW6WESU.js';
4
- import '../chunk-YQ365K65.js';
4
+ import '../chunk-EMGVOEZZ.js';
5
5
  import '../chunk-Z5M4YYWT.js';
6
6
  import '../chunk-IURXJAIK.js';
7
7
  import '../chunk-7IVHY4OR.js';
@@ -33,10 +33,10 @@ async function reviewsLoader() {
33
33
 
34
34
  // src/routes/testimonials/index.tsx
35
35
  var LazyTestimonialsPage = lazyComponent(
36
- () => import('../TestimonialsPage-ZY2U4QDN.js').then((m) => ({ default: m.TestimonialsPage }))
36
+ () => import('../TestimonialsPage-O2FN7CPT.js').then((m) => ({ default: m.TestimonialsPage }))
37
37
  );
38
38
  var LazyReviewsPage = lazyComponent(
39
- () => import('../ReviewsPage-6EOSOIU4.js').then((m) => ({ default: m.ReviewsPage }))
39
+ () => import('../ReviewsPage-D2EPXJJZ.js').then((m) => ({ default: m.ReviewsPage }))
40
40
  );
41
41
  var TestimonialsPage = LazyTestimonialsPage;
42
42
  var ReviewsPage = LazyReviewsPage;
@@ -1,8 +1,8 @@
1
- import { order } from '../chunk-3JJQCRXD.js';
1
+ import { order } from '../chunk-O6O2PDH5.js';
2
2
  import { buildHreflangAlternates, storePageUrl } from '../chunk-M2MJKUQF.js';
3
- import '../chunk-H7A7LOQJ.js';
3
+ import '../chunk-DWWPRLD3.js';
4
4
  import { RouteId } from '../chunk-OUW6WESU.js';
5
- import { getAuthToken, api } from '../chunk-YQ365K65.js';
5
+ import { getAuthToken, api } from '../chunk-EMGVOEZZ.js';
6
6
  import '../chunk-Z5M4YYWT.js';
7
7
  import '../chunk-IURXJAIK.js';
8
8
  import '../chunk-7IVHY4OR.js';
@@ -105,7 +105,7 @@ async function thankYouLoader({
105
105
 
106
106
  // src/routes/thank-you/index.tsx
107
107
  var LazyThankYouPage = lazyComponent(
108
- () => import('../ThankYouPage-MINROTEH.js').then((m) => ({ default: m.ThankYouPage }))
108
+ () => import('../ThankYouPage-UEHR5653.js').then((m) => ({ default: m.ThankYouPage }))
109
109
  );
110
110
  var ThankYouPage = LazyThankYouPage;
111
111
  async function loader(ctx, extend) {
package/dist/skeleton.js CHANGED
@@ -1,33 +1,33 @@
1
1
  export { BlogSkeleton, BreadcrumbSkeleton, CartSkeleton, CustomerLayoutSkeleton, CustomerPageSkeleton, PageSkeleton, ProductCardSkeleton, ProductDetailSkeleton, ProductGridSkeleton, SkeletonPulse } from './chunk-N7CCSGZF.js';
2
- export { HomeSkeleton } from './chunk-PHWFTUTE.js';
2
+ export { HomeSkeleton } from './chunk-T3UUH7YX.js';
3
3
  import './chunk-IXHM24Z4.js';
4
- import './chunk-LRQ75MWP.js';
5
- import './chunk-R4QBCQ4K.js';
6
- import './chunk-CEIXIUJ7.js';
7
- import './chunk-WJCDY35D.js';
8
- import './chunk-DGPSZUI3.js';
4
+ import './chunk-7TEJBYGD.js';
5
+ import './chunk-QEE2A7O2.js';
6
+ import './chunk-LDDZ7TUR.js';
7
+ import './chunk-YY74QOIL.js';
8
+ import './chunk-4FPHFWEU.js';
9
9
  import './chunk-Y32RHCOH.js';
10
- import './chunk-A7E6XFZC.js';
10
+ import './chunk-6REUUGFM.js';
11
11
  import './chunk-Q77J3D2W.js';
12
- import './chunk-DXQUURZX.js';
13
- import './chunk-CH6BNMS6.js';
12
+ import './chunk-U7ZHPOGI.js';
13
+ import './chunk-46CWPZSI.js';
14
14
  import './chunk-GMXNVBCD.js';
15
15
  import './chunk-X55R4VVK.js';
16
16
  import './chunk-YL6X3ZMG.js';
17
- import './chunk-CATEET2N.js';
17
+ import './chunk-3YMCWKFT.js';
18
18
  import './chunk-OXMUPNMH.js';
19
- import './chunk-6R2AUQMP.js';
19
+ import './chunk-LYKDZ74X.js';
20
20
  import './chunk-VVZNW5CB.js';
21
21
  import './chunk-VDPMCOHX.js';
22
22
  import './chunk-GD26FI4J.js';
23
23
  import './chunk-BRIRWS2Q.js';
24
24
  import './chunk-M2MJKUQF.js';
25
- import './chunk-H7A7LOQJ.js';
25
+ import './chunk-DWWPRLD3.js';
26
26
  import './chunk-OUW6WESU.js';
27
27
  import './chunk-PPUV27YN.js';
28
28
  import './chunk-HI5V5X3S.js';
29
- import './chunk-RRDKYXHU.js';
30
- import './chunk-R6Z6JQIB.js';
29
+ import './chunk-5WVJYMDS.js';
30
+ import './chunk-PSWUFTNS.js';
31
31
  import './chunk-6T55LXJL.js';
32
32
  import './chunk-Z653O7MX.js';
33
33
  import './chunk-ZCH7W7DZ.js';
@@ -38,16 +38,16 @@ import './chunk-7V36I5GT.js';
38
38
  import './chunk-6WI7R2BD.js';
39
39
  import './chunk-LFMCUQQ3.js';
40
40
  import './chunk-OAMIDZKW.js';
41
- import './chunk-LDXVGQA2.js';
41
+ import './chunk-2BRLDR24.js';
42
42
  import './chunk-OQIIJRAS.js';
43
43
  import './chunk-V2ZDTY6H.js';
44
- import './chunk-Z4BOATCC.js';
44
+ import './chunk-WYMDZDEZ.js';
45
45
  import './chunk-5XDPAKF5.js';
46
46
  import './chunk-GCPEMNSU.js';
47
- import './chunk-YQ365K65.js';
47
+ import './chunk-EMGVOEZZ.js';
48
48
  import './chunk-Z5M4YYWT.js';
49
49
  import './chunk-TYNZ5B2B.js';
50
- import './chunk-SF2POPJW.js';
50
+ import './chunk-ONBDJMLJ.js';
51
51
  import './chunk-AXW67SY7.js';
52
52
  import './chunk-BYMOPN2S.js';
53
53
  import './chunk-SKLEJJ6M.js';
@@ -1,11 +1,11 @@
1
- import { category } from './chunk-F6MYOPZB.js';
2
- import { blog } from './chunk-QNGA2NAC.js';
3
- import { brand } from './chunk-N2Y5VSHM.js';
4
- import { product } from './chunk-CEIXIUJ7.js';
1
+ import { category } from './chunk-BBTYM4OY.js';
2
+ import { blog } from './chunk-ZHBZ6YMB.js';
3
+ import { brand } from './chunk-QJR5FRIA.js';
4
+ import { product } from './chunk-LDDZ7TUR.js';
5
5
  import { DEV_LOOKUP_BUDGET_MS } from './chunk-OXMUPNMH.js';
6
- import './chunk-H7A7LOQJ.js';
6
+ import './chunk-DWWPRLD3.js';
7
7
  import './chunk-OUW6WESU.js';
8
- import './chunk-YQ365K65.js';
8
+ import './chunk-EMGVOEZZ.js';
9
9
  import './chunk-Z5M4YYWT.js';
10
10
  import './chunk-IURXJAIK.js';
11
11
  import './chunk-7IVHY4OR.js';
@@ -111,5 +111,5 @@ function lookupInStore(source, query) {
111
111
  }
112
112
 
113
113
  export { lookupInStore };
114
- //# sourceMappingURL=store-lookup-LPXG5JSB.js.map
115
- //# sourceMappingURL=store-lookup-LPXG5JSB.js.map
114
+ //# sourceMappingURL=store-lookup-FL54XOJB.js.map
115
+ //# sourceMappingURL=store-lookup-FL54XOJB.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/dev/store-lookup.ts"],"names":["categories"],"mappings":"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","file":"store-lookup-LPXG5JSB.js","sourcesContent":["/**\n * Runs in the editor's frame (the storefront), which has the engine's API\n * client set up for the dev store: answers the editor's pickers with the real\n * store's products, categories, brands and blog. Loaded with `import()` on the\n * first lookup, so a storefront never carries it.\n *\n * Each item's `data` is what a block receives for it, in the API's shape: a\n * product block reads only the ids and fetches the rest, while categories and\n * brands are drawn from what is saved.\n */\n\nimport { product } from '../api/product';\nimport { category } from '../api/category';\nimport { brand } from '../api/brands';\nimport { blog } from '../api/blog';\nimport type { Category } from '../types';\nimport { DEV_LOOKUP_BUDGET_MS, type DevLookupItem, type DevLookupSource } from './schema-types';\n\n/** Enough to choose from; a search narrows it further. */\nconst PER_PAGE = 20;\n/** How far a paged list is searched before giving up, so a big store can't stall the picker. */\nconst MAX_PAGES = 10;\n\ninterface Page<T> {\n items: T[];\n next: string | null;\n}\n\n/**\n * The matching items of a paged list, read page after page until there are\n * enough, the pages run out, or the time budget is spent: a brand or article on\n * page three is still found, and what was found so far always reaches the\n * editor before it stops waiting (`DEV_LOOKUP_BUDGET_MS` < its timeout).\n */\nasync function collect<T>(\n fetchPage: (page: number, cursor: string | null) => Promise<Page<T>>,\n keep: (item: T) => boolean\n): Promise<T[]> {\n const deadline = Date.now() + DEV_LOOKUP_BUDGET_MS;\n const found: T[] = [];\n let cursor: string | null = null;\n for (let page = 1; page <= MAX_PAGES; page += 1) {\n const { items, next } = await fetchPage(page, cursor);\n found.push(...items.filter(keep));\n if (found.length >= PER_PAGE || !next || Date.now() >= deadline) break;\n cursor = next;\n }\n return found.slice(0, PER_PAGE);\n}\n\nfunction matches(name: string, query: string): boolean {\n return !query || name.toLowerCase().includes(query.toLowerCase());\n}\n\n/** Categories with their subcategories, flattened, parents first. */\nfunction flatten(categories: Category[]): Category[] {\n return categories.flatMap((c) => [c, ...flatten(c.sub_categories ?? [])]);\n}\n\nasync function products(query: string): Promise<DevLookupItem[]> {\n const { items } = await product.list({\n source: query ? 'search' : 'latest',\n ...(query ? { keyword: query } : {}),\n perPage: PER_PAGE,\n });\n // List responses send the id as a numeric string; the block reads a number. Use it for both.\n return items.map((p) => ({\n id: Number(p.id),\n name: p.name,\n image: p.image?.url,\n url: p.url,\n data: { id: Number(p.id), name: p.name, url: p.url, image: p.image?.url ?? null },\n }));\n}\n\nasync function categories(query: string): Promise<DevLookupItem[]> {\n return flatten(await category.list())\n .filter((c) => matches(c.name, query))\n .slice(0, PER_PAGE)\n .map((c) => ({\n id: c.id,\n name: c.name,\n image: c.image ?? undefined,\n url: c.url,\n data: { id: c.id, name: c.name, url: c.url, image: c.image ?? null, icon: c.icon ?? null },\n }));\n}\n\nasync function brands(query: string): Promise<DevLookupItem[]> {\n const found = await collect(\n (page) => brand.list(page),\n (b) => matches(b.name, query)\n );\n return found.map((b) => ({\n id: b.id,\n name: b.name,\n image: b.logo,\n url: b.url,\n data: { id: b.id, name: b.name, url: b.url, logo: b.logo, banner: b.banner ?? null },\n }));\n}\n\nasync function blogArticles(query: string): Promise<DevLookupItem[]> {\n const found = await collect(\n async (_page, cursor) => {\n const { data, cursor: pages } = await blog.articles.list(cursor ? { cursor } : undefined);\n return { items: data, next: pages?.next ?? null };\n },\n (a) => matches(a.name, query)\n );\n return found.map((a) => ({\n id: a.id,\n name: a.name,\n image: a.image,\n url: a.url,\n data: { id: a.id, name: a.name, url: a.url },\n }));\n}\n\nasync function blogCategories(query: string): Promise<DevLookupItem[]> {\n const { categories: list } = await blog.get();\n return list\n .filter((c) => matches(c.name, query))\n .slice(0, PER_PAGE)\n .map((c) => ({\n id: c.id,\n name: c.name,\n url: c.url,\n data: { id: c.id, name: c.name, url: c.url },\n }));\n}\n\nconst LOOKUPS: Record<DevLookupSource, (query: string) => Promise<DevLookupItem[]>> = {\n products,\n categories,\n brands,\n blog_articles: blogArticles,\n blog_categories: blogCategories,\n};\n\nexport function lookupInStore(source: DevLookupSource, query: string): Promise<DevLookupItem[]> {\n const lookup = LOOKUPS[source];\n if (!lookup) return Promise.reject(new Error(`no lookup for ${source}`));\n return lookup(query.trim());\n}\n"]}
1
+ {"version":3,"sources":["../src/dev/store-lookup.ts"],"names":["categories"],"mappings":"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","file":"store-lookup-FL54XOJB.js","sourcesContent":["/**\n * Runs in the editor's frame (the storefront), which has the engine's API\n * client set up for the dev store: answers the editor's pickers with the real\n * store's products, categories, brands and blog. Loaded with `import()` on the\n * first lookup, so a storefront never carries it.\n *\n * Each item's `data` is what a block receives for it, in the API's shape: a\n * product block reads only the ids and fetches the rest, while categories and\n * brands are drawn from what is saved.\n */\n\nimport { product } from '../api/product';\nimport { category } from '../api/category';\nimport { brand } from '../api/brands';\nimport { blog } from '../api/blog';\nimport type { Category } from '../types';\nimport { DEV_LOOKUP_BUDGET_MS, type DevLookupItem, type DevLookupSource } from './schema-types';\n\n/** Enough to choose from; a search narrows it further. */\nconst PER_PAGE = 20;\n/** How far a paged list is searched before giving up, so a big store can't stall the picker. */\nconst MAX_PAGES = 10;\n\ninterface Page<T> {\n items: T[];\n next: string | null;\n}\n\n/**\n * The matching items of a paged list, read page after page until there are\n * enough, the pages run out, or the time budget is spent: a brand or article on\n * page three is still found, and what was found so far always reaches the\n * editor before it stops waiting (`DEV_LOOKUP_BUDGET_MS` < its timeout).\n */\nasync function collect<T>(\n fetchPage: (page: number, cursor: string | null) => Promise<Page<T>>,\n keep: (item: T) => boolean\n): Promise<T[]> {\n const deadline = Date.now() + DEV_LOOKUP_BUDGET_MS;\n const found: T[] = [];\n let cursor: string | null = null;\n for (let page = 1; page <= MAX_PAGES; page += 1) {\n const { items, next } = await fetchPage(page, cursor);\n found.push(...items.filter(keep));\n if (found.length >= PER_PAGE || !next || Date.now() >= deadline) break;\n cursor = next;\n }\n return found.slice(0, PER_PAGE);\n}\n\nfunction matches(name: string, query: string): boolean {\n return !query || name.toLowerCase().includes(query.toLowerCase());\n}\n\n/** Categories with their subcategories, flattened, parents first. */\nfunction flatten(categories: Category[]): Category[] {\n return categories.flatMap((c) => [c, ...flatten(c.sub_categories ?? [])]);\n}\n\nasync function products(query: string): Promise<DevLookupItem[]> {\n const { items } = await product.list({\n source: query ? 'search' : 'latest',\n ...(query ? { keyword: query } : {}),\n perPage: PER_PAGE,\n });\n // List responses send the id as a numeric string; the block reads a number. Use it for both.\n return items.map((p) => ({\n id: Number(p.id),\n name: p.name,\n image: p.image?.url,\n url: p.url,\n data: { id: Number(p.id), name: p.name, url: p.url, image: p.image?.url ?? null },\n }));\n}\n\nasync function categories(query: string): Promise<DevLookupItem[]> {\n return flatten(await category.list())\n .filter((c) => matches(c.name, query))\n .slice(0, PER_PAGE)\n .map((c) => ({\n id: c.id,\n name: c.name,\n image: c.image ?? undefined,\n url: c.url,\n data: { id: c.id, name: c.name, url: c.url, image: c.image ?? null, icon: c.icon ?? null },\n }));\n}\n\nasync function brands(query: string): Promise<DevLookupItem[]> {\n const found = await collect(\n (page) => brand.list(page),\n (b) => matches(b.name, query)\n );\n return found.map((b) => ({\n id: b.id,\n name: b.name,\n image: b.logo,\n url: b.url,\n data: { id: b.id, name: b.name, url: b.url, logo: b.logo, banner: b.banner ?? null },\n }));\n}\n\nasync function blogArticles(query: string): Promise<DevLookupItem[]> {\n const found = await collect(\n async (_page, cursor) => {\n const { data, cursor: pages } = await blog.articles.list(cursor ? { cursor } : undefined);\n return { items: data, next: pages?.next ?? null };\n },\n (a) => matches(a.name, query)\n );\n return found.map((a) => ({\n id: a.id,\n name: a.name,\n image: a.image,\n url: a.url,\n data: { id: a.id, name: a.name, url: a.url },\n }));\n}\n\nasync function blogCategories(query: string): Promise<DevLookupItem[]> {\n const { categories: list } = await blog.get();\n return list\n .filter((c) => matches(c.name, query))\n .slice(0, PER_PAGE)\n .map((c) => ({\n id: c.id,\n name: c.name,\n url: c.url,\n data: { id: c.id, name: c.name, url: c.url },\n }));\n}\n\nconst LOOKUPS: Record<DevLookupSource, (query: string) => Promise<DevLookupItem[]>> = {\n products,\n categories,\n brands,\n blog_articles: blogArticles,\n blog_categories: blogCategories,\n};\n\nexport function lookupInStore(source: DevLookupSource, query: string): Promise<DevLookupItem[]> {\n const lookup = LOOKUPS[source];\n if (!lookup) return Promise.reject(new Error(`no lookup for ${source}`));\n return lookup(query.trim());\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../src/tanstack/link.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAErE;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,UAKvE;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,0HAmD/B,CAAC;AAIF;;GAEG;AACH,wBAAgB,yBAAyB,6HAExC"}
1
+ {"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../src/tanstack/link.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAErE;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,UAQvE;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,0HAmD/B,CAAC;AAIF;;GAEG;AACH,wBAAgB,yBAAyB,6HAExC"}
@@ -5,7 +5,9 @@
5
5
  * Uses TanStack Router's optional path parameter syntax /{-$locale}:
6
6
  * - /{-$locale}/cart matches both /cart and /ar/cart
7
7
  *
8
- * beforeLoad: validates the locale format when present.
8
+ * beforeLoad: validates the locale format when present. A first segment that is not a locale
9
+ * gets the fallback locale, except on a store whose addresses carry none: there it is a page
10
+ * no route has, and the loader would strip the locale straight off again.
9
11
  * loader: checks store.settings.is_multilingual (and the number of languages) and redirects
10
12
  * accordingly. On a Salla shared host the address has no locale, so it redirects nothing.
11
13
  *
@@ -1 +1 @@
1
- {"version":3,"file":"locale-wrapper.d.ts","sourceRoot":"","sources":["../../../src/tanstack/templates/locale-wrapper.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,wBAAgB,wBAAwB,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,CA4FzE"}
1
+ {"version":3,"file":"locale-wrapper.d.ts","sourceRoot":"","sources":["../../../src/tanstack/templates/locale-wrapper.ts"],"names":[],"mappings":"AAkBA;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,wBAAwB,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAgGzE"}
package/dist/tanstack.js CHANGED
@@ -1,27 +1,27 @@
1
- export { tanstackDocumentAdapter as attrs, createRouter, createTwilightRootRoute, useTanstackDocumentAttrs as useAttrs } from './chunk-WZAJS44F.js';
2
- import { requestHostOf } from './chunk-KBWIXAHN.js';
3
- export { TanStackLinkAdapter, TanStackNavigationProvider, createTanStackLinkAdapter } from './chunk-KBWIXAHN.js';
1
+ export { tanstackDocumentAdapter as attrs, createRouter, createTwilightRootRoute, useTanstackDocumentAttrs as useAttrs } from './chunk-YBWXK2OT.js';
2
+ import { requestHostOf } from './chunk-KAIASXU7.js';
3
+ export { TanStackLinkAdapter, TanStackNavigationProvider, createTanStackLinkAdapter } from './chunk-KAIASXU7.js';
4
4
  import './chunk-Z4Y55HWX.js';
5
5
  export { tanstackHeadAdapter as head, withHead } from './chunk-CIJVNUNZ.js';
6
6
  import { CRITICAL_STYLE_HREF } from './chunk-4FJGZQD3.js';
7
- import { readNativeAppHeaders } from './chunk-Q76O67KK.js';
8
- import './chunk-SBZWX6II.js';
9
- import './chunk-DKIU6ZOP.js';
10
- import './chunk-ULGRYCUV.js';
11
- import './chunk-CEIXIUJ7.js';
7
+ import { readNativeAppHeaders } from './chunk-YZPHKPYI.js';
8
+ import './chunk-ZKTSLYTT.js';
9
+ import './chunk-4UPADKLB.js';
10
+ import './chunk-P7RERWEY.js';
11
+ import './chunk-LDDZ7TUR.js';
12
12
  import { rootHead } from './chunk-GMXNVBCD.js';
13
13
  import './chunk-X55R4VVK.js';
14
- import './chunk-6R2AUQMP.js';
14
+ import './chunk-LYKDZ74X.js';
15
15
  import './chunk-VDPMCOHX.js';
16
16
  import './chunk-GD26FI4J.js';
17
17
  import { maintenanceEvidence, MAINTENANCE_EVIDENCE_HEADER, maintenanceEvidenceHeader } from './chunk-BRIRWS2Q.js';
18
18
  import './chunk-M2MJKUQF.js';
19
- import './chunk-H7A7LOQJ.js';
19
+ import './chunk-DWWPRLD3.js';
20
20
  import './chunk-OUW6WESU.js';
21
21
  import './chunk-JWXJPJBO.js';
22
22
  export { mergeDocumentDescriptors as mergeAttrs } from './chunk-CW625T2E.js';
23
- import './chunk-Z4BOATCC.js';
24
- import './chunk-YQ365K65.js';
23
+ import './chunk-WYMDZDEZ.js';
24
+ import './chunk-EMGVOEZZ.js';
25
25
  import './chunk-Z5M4YYWT.js';
26
26
  import './chunk-TYNZ5B2B.js';
27
27
  import './chunk-BYMOPN2S.js';
@@ -1,6 +1,6 @@
1
1
  export { stripUnsafeHtml } from '../chunk-RUHSV4Z6.js';
2
2
  export { formatSallaPlural } from '../chunk-BT6HEEAP.js';
3
- export { dispatchRouteChanged } from '../chunk-ULGRYCUV.js';
3
+ export { dispatchRouteChanged } from '../chunk-P7RERWEY.js';
4
4
  export { sortOptions } from '../chunk-3LZJXKVO.js';
5
5
  export { color } from '../chunk-VVZNW5CB.js';
6
6
  export { applyAppScopeMocks, registerThemeHookSlots } from '../chunk-VDPMCOHX.js';
@@ -8,7 +8,7 @@ export { mergeHead, resolveHead, setHeadAdapter } from '../chunk-GD26FI4J.js';
8
8
  export { buildBaseHead, buildHreflangAlternates, localeToOgLocale } from '../chunk-M2MJKUQF.js';
9
9
  export { asset, cdn, isPlaceholder } from '../chunk-ZCH7W7DZ.js';
10
10
  export { mergeDocumentDescriptors, mergeElementAttrs, normalizeClasses, syncAttrsToElement, toReactProps } from '../chunk-CW625T2E.js';
11
- import '../chunk-YQ365K65.js';
11
+ import '../chunk-EMGVOEZZ.js';
12
12
  import '../chunk-Z5M4YYWT.js';
13
13
  export { getSallaSDK, getStoreIdentifier, onSallaEvent, whenSallaLoaded, whenSallaReady } from '../chunk-7IVHY4OR.js';
14
14
  export { AUTH_TOKEN_COOKIE_NAME, clearAuthTokenCookie, extractTokenFromCookies } from '../chunk-EEL6OYAQ.js';
@@ -1852,19 +1852,48 @@ function resolveWorkerConfigPath(projectRoot, options = {}) {
1852
1852
  }
1853
1853
 
1854
1854
  // src/tanstack/templates/locale-wrapper.ts
1855
+ var ADDRESS_LANGUAGE = `/**
1856
+ * Which language the store's addresses carry. Single-language when the merchant says so, or
1857
+ * when the store lists fewer than two languages. A page with no locale is read as
1858
+ * FALLBACK_LOCALE (\`rootBeforeLoad\`), so a single-language store in another language keeps
1859
+ * its segment instead: it is what the page is addressed and read by. Without it an
1860
+ * English-only store would render in Arabic.
1861
+ */
1862
+ function addressLanguage(settings) {
1863
+ const listed = settings?.languages;
1864
+ const soleEntry = listed?.length === 1 ? listed[0] : undefined;
1865
+ const soleLang = soleEntry ? (soleEntry.iso_code ?? soleEntry.code)?.toLowerCase() : undefined;
1866
+ const single =
1867
+ settings?.store?.settings?.is_multilingual === false || (listed != null && listed.length < 2);
1868
+ const segment = single && isLocale(soleLang) && soleLang !== FALLBACK_LOCALE ? soleLang : null;
1869
+ return { single, segment };
1870
+ }`;
1855
1871
  function getLocaleWrapperTemplate(baseRoutesImport) {
1856
1872
  const mainPkg = baseRoutesImport.replace(/\/routes$/, "");
1857
1873
  return `// @auto-generated
1858
1874
  // @ts-nocheck \u2014 params types are generated by TanStack Router on pnpm dev
1859
1875
  import { createFileRoute, notFound, Outlet, redirect } from '@tanstack/react-router';
1860
1876
  import { FALLBACK_LOCALE, isLocale } from '${baseRoutesImport}';
1877
+ import { twigUrlRedirect } from '${baseRoutesImport}/seo-redirects';
1861
1878
  import { store } from '${mainPkg}/api/store';
1862
1879
 
1880
+ ${ADDRESS_LANGUAGE}
1881
+
1863
1882
  export const Route = createFileRoute('/{-$locale}')({
1864
- beforeLoad: ({ params, location }) => {
1883
+ beforeLoad: async ({ params, location, context, matches }) => {
1884
+ await twigUrlRedirect(location.pathname, location.searchStr, matches.at(-1));
1865
1885
  const { locale } = params;
1866
1886
  if (!locale) return;
1867
1887
  if (!isLocale(locale)) {
1888
+ // A first segment that is not a language is a page no route has: \`/nothing-here\` binds
1889
+ // \`{-$locale}\` to \`nothing-here\`. On a store whose addresses carry no language the
1890
+ // loader strips the locale this would add, and the two redirects sent the page back
1891
+ // and forth forever (\`/x\` \u2192 \`/ar/x\` \u2192 \`/x\`), so there it is the not-found page.
1892
+ if (!context.storeBaseFollowsLocale) {
1893
+ const settings = await context.queryClient.ensureQueryData(store.queries.settings());
1894
+ const { single, segment } = addressLanguage(settings);
1895
+ if (single && !segment) throw notFound();
1896
+ }
1868
1897
  throw redirect({
1869
1898
  to: \`/\${FALLBACK_LOCALE}\${location.pathname}\`,
1870
1899
  search: location.search,
@@ -1880,16 +1909,7 @@ export const Route = createFileRoute('/{-$locale}')({
1880
1909
  if (context.storeBaseFollowsLocale) return;
1881
1910
 
1882
1911
  const settings = await context.queryClient.ensureQueryData(store.queries.settings());
1883
- // Single-language when the merchant says so, or when the store lists fewer than two
1884
- // languages. A page with no locale is read as FALLBACK_LOCALE (\`rootBeforeLoad\`), so a
1885
- // single-language store in another language keeps its segment instead: it is what the
1886
- // page is addressed and read by. Without it an English-only store would render in Arabic.
1887
- const listed = settings?.languages;
1888
- const soleEntry = listed?.length === 1 ? listed[0] : undefined;
1889
- const soleLang = soleEntry ? (soleEntry.iso_code ?? soleEntry.code)?.toLowerCase() : undefined;
1890
- const single =
1891
- settings?.store?.settings?.is_multilingual === false || (listed != null && listed.length < 2);
1892
- const segment = single && isLocale(soleLang) && soleLang !== FALLBACK_LOCALE ? soleLang : null;
1912
+ const { single, segment } = addressLanguage(settings);
1893
1913
  const isMultilingual = !single;
1894
1914
  const pathWithoutLocale = params.locale
1895
1915
  ? location.pathname.slice(params.locale.length + 1) || '/'