@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/routes/product/loader.ts","../../src/routes/product/ProductPage.tsx","../../src/routes/product/index.tsx"],"names":["product"],"mappings":"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","file":"product.js","sourcesContent":["import type { ProductPageProps } from './types';\nimport type { IdParams } from '../types';\nimport { product } from '../../api/product';\nimport { getTwilightContext } from '../../twilight/context';\nimport { RouteId } from '../../router/route-ids';\nimport type { Breadcrumb } from '../../types';\n\nexport async function productLoader({ params }: { params: IdParams }): Promise<ProductPageProps> {\n const data = await product.findOrThrow(params.id);\n const i18n = getTwilightContext().i18n;\n const home: Breadcrumb = { name: i18n.t('common.titles.home'), url: '/' };\n\n const breadcrumbs: Breadcrumb[] = [home];\n if (data.category) {\n breadcrumbs.push({ name: data.category.name, url: data.category.url });\n }\n breadcrumbs.push({ name: data.name, url: data.url });\n\n const page = {\n slug: RouteId.PRODUCT_SINGLE,\n id: data.id,\n title: data.name,\n url: data.url,\n parent:\n data.category && data.category.id\n ? { id: data.category.id, name: data.category.name, url: data.category.url }\n : null,\n breadcrumbs,\n };\n\n return {\n page,\n product: data,\n };\n}\n","import { SallaQuickOrder } from '@salla.sa/twilight-components-react/quick-order';\nimport { SallaOffer } from '@salla.sa/twilight-components-react/offer';\nimport { SallaComments } from '@salla.sa/twilight-components-react/comments';\nimport { HookSlot } from '../../hooks';\nimport { useTranslation } from '../../providers/I18nProvider';\nimport { useProduct } from '../../hooks/useProduct';\nimport { useComments } from '../../hooks/useComments';\nimport type { ProductPageProps } from './types';\nimport { Breadcrumb, RenderWhenVisible } from '../../components/common';\nimport { ProductDetails, AddToCartForm, ProductGallery } from '../../components/product';\nimport { ProductsSlider, Testimonials } from '../../components/home';\nimport { useTwilight } from '../../providers/twilight-context';\n\nexport function ProductPage({ product: initialProduct, page }: ProductPageProps) {\n const { theme, store } = useTwilight();\n const { t } = useTranslation();\n const { product } = useProduct(initialProduct);\n const { commentsKey } = useComments();\n\n return (\n <div key={product.id}>\n <div className=\"container\">\n {theme?.settings?.product_show_breadcrumbs !== false && <Breadcrumb page={page} />}\n\n <HookSlot name=\"product:start\" />\n\n <div className=\"flex flex-col items-start md:flex-row\" id={`product-${product.id}`}>\n <ProductGallery product={product} />\n\n <div className=\"main-content md:sticky md:overflow-hidden top-24 w-full md:w-2/4 md:pb-16\">\n <HookSlot name=\"product:details.start\" />\n <ProductDetails product={product} showTags={theme.settings.show_tags} />\n <HookSlot name=\"product:details.end\" />\n\n <HookSlot name=\"product:single.form.start\" />\n <AddToCartForm product={product} stickyAddToCart={theme.settings.sticky_add_to_cart} />\n <HookSlot name=\"product:single.form.end\" />\n {/* After the form, as in Twig; `.start` and `description` are in ProductDetails */}\n <HookSlot name=\"product:single.description.end\" context={{ product }} />\n\n <SallaQuickOrder className=\"mt-5 md:-mb-2 block\" />\n </div>\n </div>\n\n <SallaOffer />\n </div>\n\n {store.settings?.rating?.show_on_product && (\n <RenderWhenVisible>\n <SallaComments key={commentsKey} itemId={Number(product.id)} type={'product' as any} />\n </RenderWhenVisible>\n )}\n\n <HookSlot name=\"product:related.start\" />\n <RenderWhenVisible>\n <div className=\"container\">\n <ProductsSlider\n data={{\n products: { source: 'related', source_value: Number(product.id) },\n title: t('pages.products.similar_products'),\n display_all_url: '',\n }}\n />\n </div>\n </RenderWhenVisible>\n <HookSlot name=\"product:related.end\" />\n\n <RenderWhenVisible>\n <div className=\"container\">\n <Testimonials data={{}} />\n </div>\n </RenderWhenVisible>\n\n <HookSlot name=\"product:end\" />\n </div>\n );\n}\n","import type { HeadDescriptor } from '../../utils/head';\nimport { buildHreflangAlternates } from '../../utils/baseHead';\nimport type { ProductPageProps } from './types';\nimport type { IdParams } from '../types';\nimport type { TwilightContext } from '../../twilight/context';\nimport { productLoader } from './loader';\nimport { RouteId } from '../../router/route-ids';\nimport { ProductPage } from './ProductPage';\nimport { fastCheckoutScript } from '../../utils/fast-checkout';\nimport { getActiveCurrency } from '../../api/client';\nexport { productLoader } from './loader';\nexport type { ProductPageProps } from './types';\n\nasync function loader(\n ctx: { params: IdParams; locale?: string },\n extend?: (\n data: ProductPageProps,\n ctx: { params: IdParams }\n ) => Promise<Record<string, unknown>> | Record<string, unknown>\n): Promise<ProductPageProps> {\n const data = await productLoader({ params: ctx.params });\n\n if (extend) {\n const extra = await extend(data, ctx);\n return { ...data, ...extra } as ProductPageProps;\n }\n return data;\n}\n\nfunction head(ctx: TwilightContext, data: ProductPageProps): HeadDescriptor {\n if (!data?.product) {\n return {\n title: 'Products',\n description: 'Browse our products',\n };\n }\n const product = data.product;\n const storeName = ctx.settings?.store?.name ?? '';\n\n // Strip HTML and limit description to 160 chars\n const description = product.description?.replace(/<[^>]*>/g, '').slice(0, 160) ?? '';\n\n // Price valid until: 1 month from now\n const priceValidUntil = new Date();\n priceValidUntil.setMonth(priceValidUntil.getMonth() + 1);\n\n // Collect all product images\n const images = product.images?.map((img) => img.url).filter(Boolean) ?? [];\n if (product.image?.url && !images.includes(product.image.url)) {\n images.unshift(product.image.url);\n }\n\n // Build JSON-LD schema matching SchemaProductWidget.php\n const jsonLd: Record<string, unknown> = {\n '@context': 'https://schema.org',\n '@type': 'Product',\n name: product.name,\n description,\n sku: product.sku,\n image: images.length > 0 ? images : undefined,\n offers: {\n '@type': 'Offer',\n url: product.url,\n availability: product.is_available\n ? 'https://schema.org/InStock'\n : 'https://schema.org/OutOfStock',\n price: product.sale_price,\n priceCurrency: getActiveCurrency(product.currency),\n priceValidUntil: priceValidUntil.toISOString().split('T')[0],\n seller: storeName\n ? {\n '@type': 'Organization',\n name: storeName,\n }\n : undefined,\n },\n };\n\n // Add brand if exists\n if (product.brand) {\n jsonLd.brand = {\n '@type': 'Brand',\n name: product.brand.name,\n description: product.brand.description,\n logo: product.brand.logo,\n };\n }\n\n // Add aggregateRating and review if rating exists\n if (product.rating && product.rating.count > 0) {\n const ratingValue = product.rating.stars;\n jsonLd.aggregateRating = {\n '@type': 'AggregateRating',\n ratingCount: product.rating.count,\n ratingValue,\n };\n jsonLd.review = {\n '@type': 'Review',\n author: storeName\n ? {\n '@type': 'Organization',\n name: storeName,\n }\n : undefined,\n reviewRating: {\n '@type': 'Rating',\n bestRating: 5,\n ratingValue,\n },\n };\n }\n\n if (product.gtin && product.gtin.length === 8) {\n jsonLd.gtin8 = product.gtin;\n }\n\n if (product.mpn) {\n jsonLd.mpn = product.mpn;\n }\n\n // Twig: \"<product> | <store name>\", without the store meta title.\n const title = storeName ? `${product.name} | ${storeName}` : product.name;\n const base: HeadDescriptor = {\n title,\n appendStoreTitle: false,\n description,\n canonical: product.url,\n openGraph: {\n type: 'product',\n title,\n description,\n images: product.image?.url,\n url: product.url,\n },\n twitter: {\n card: 'summary_large_image',\n title,\n description,\n images: product.image?.url,\n },\n jsonLd,\n alternateLanguages: buildHreflangAlternates(ctx.settings, ctx.location.pathname),\n // Quick-buy widget code, eager only here: the Buy Now button is above the fold on this page.\n // Other routes load it on idle from the body:end default hook, which also owns the\n // `#fast-checkout-js` marker `salla-add-product-button` checks for.\n scripts: ctx.settings?.store?.settings?.buy_now ? [fastCheckoutScript()] : [],\n };\n\n return base;\n}\n\nexport const Product = {\n id: RouteId.PRODUCT_SINGLE,\n loader,\n head,\n Component: ProductPage,\n} as const;\n"]}
1
+ {"version":3,"sources":["../../src/routes/product/loader.ts","../../src/routes/product/ProductPage.tsx","../../src/routes/product/index.tsx"],"names":["product"],"mappings":"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","file":"product.js","sourcesContent":["import type { ProductPageProps } from './types';\nimport type { IdParams } from '../types';\nimport { product } from '../../api/product';\nimport { getTwilightContext } from '../../twilight/context';\nimport { RouteId } from '../../router/route-ids';\nimport type { Breadcrumb } from '../../types';\n\nexport async function productLoader({ params }: { params: IdParams }): Promise<ProductPageProps> {\n const data = await product.findOrThrow(params.id);\n const i18n = getTwilightContext().i18n;\n const home: Breadcrumb = { name: i18n.t('common.titles.home'), url: '/' };\n\n const breadcrumbs: Breadcrumb[] = [home];\n if (data.category) {\n breadcrumbs.push({ name: data.category.name, url: data.category.url });\n }\n breadcrumbs.push({ name: data.name, url: data.url });\n\n const page = {\n slug: RouteId.PRODUCT_SINGLE,\n id: data.id,\n title: data.name,\n url: data.url,\n parent:\n data.category && data.category.id\n ? { id: data.category.id, name: data.category.name, url: data.category.url }\n : null,\n breadcrumbs,\n };\n\n return {\n page,\n product: data,\n };\n}\n","import { SallaQuickOrder } from '@salla.sa/twilight-components-react/quick-order';\nimport { SallaOffer } from '@salla.sa/twilight-components-react/offer';\nimport { SallaComments } from '@salla.sa/twilight-components-react/comments';\nimport { HookSlot } from '../../hooks';\nimport { useTranslation } from '../../providers/I18nProvider';\nimport { useProduct } from '../../hooks/useProduct';\nimport { useComments } from '../../hooks/useComments';\nimport type { ProductPageProps } from './types';\nimport { Breadcrumb, RenderWhenVisible } from '../../components/common';\nimport { ProductDetails, AddToCartForm, ProductGallery } from '../../components/product';\nimport { ProductsSlider, Testimonials } from '../../components/home';\nimport { useTwilight } from '../../providers/twilight-context';\n\nexport function ProductPage({ product: initialProduct, page }: ProductPageProps) {\n const { theme, store } = useTwilight();\n const { t } = useTranslation();\n const { product } = useProduct(initialProduct);\n const { commentsKey } = useComments();\n\n return (\n <div key={product.id}>\n <div className=\"container\">\n {theme?.settings?.product_show_breadcrumbs !== false && <Breadcrumb page={page} />}\n\n <HookSlot name=\"product:start\" />\n\n <div className=\"flex flex-col items-start md:flex-row\" id={`product-${product.id}`}>\n <ProductGallery product={product} />\n\n <div className=\"main-content md:sticky md:overflow-hidden top-24 w-full md:w-2/4 md:pb-16\">\n <HookSlot name=\"product:details.start\" />\n <ProductDetails product={product} showTags={theme.settings.show_tags} />\n <HookSlot name=\"product:details.end\" />\n\n <HookSlot name=\"product:single.form.start\" />\n <AddToCartForm product={product} stickyAddToCart={theme.settings.sticky_add_to_cart} />\n <HookSlot name=\"product:single.form.end\" />\n {/* After the form, as in Twig; `.start` and `description` are in ProductDetails */}\n <HookSlot name=\"product:single.description.end\" context={{ product }} />\n\n <SallaQuickOrder className=\"mt-5 md:-mb-2 block\" />\n </div>\n </div>\n\n <SallaOffer />\n </div>\n\n {store.settings?.rating?.show_on_product && (\n <RenderWhenVisible>\n <SallaComments key={commentsKey} itemId={Number(product.id)} type={'product' as any} />\n </RenderWhenVisible>\n )}\n\n <HookSlot name=\"product:related.start\" />\n <RenderWhenVisible>\n <div className=\"container\">\n <ProductsSlider\n data={{\n products: { source: 'related', source_value: Number(product.id) },\n title: t('pages.products.similar_products'),\n display_all_url: '',\n }}\n />\n </div>\n </RenderWhenVisible>\n <HookSlot name=\"product:related.end\" />\n\n <RenderWhenVisible>\n <div className=\"container\">\n <Testimonials data={{}} />\n </div>\n </RenderWhenVisible>\n\n <HookSlot name=\"product:end\" />\n </div>\n );\n}\n","import type { HeadDescriptor } from '../../utils/head';\nimport { buildHreflangAlternates } from '../../utils/baseHead';\nimport type { ProductPageProps } from './types';\nimport type { IdParams } from '../types';\nimport type { TwilightContext } from '../../twilight/context';\nimport { productLoader } from './loader';\nimport { RouteId } from '../../router/route-ids';\nimport { ProductPage } from './ProductPage';\nimport { fastCheckoutScript } from '../../utils/fast-checkout';\nimport { getActiveCurrency } from '../../api/client';\nexport { productLoader } from './loader';\nexport type { ProductPageProps } from './types';\n\nasync function loader(\n ctx: { params: IdParams; locale?: string },\n extend?: (\n data: ProductPageProps,\n ctx: { params: IdParams }\n ) => Promise<Record<string, unknown>> | Record<string, unknown>\n): Promise<ProductPageProps> {\n const data = await productLoader({ params: ctx.params });\n\n if (extend) {\n const extra = await extend(data, ctx);\n return { ...data, ...extra } as ProductPageProps;\n }\n return data;\n}\n\nfunction head(ctx: TwilightContext, data: ProductPageProps): HeadDescriptor {\n if (!data?.product) {\n return {\n title: 'Products',\n description: 'Browse our products',\n };\n }\n const product = data.product;\n const storeName = ctx.settings?.store?.name ?? '';\n\n // Strip HTML and limit description to 160 chars\n const description = product.description?.replace(/<[^>]*>/g, '').slice(0, 160) ?? '';\n\n // Price valid until: 1 month from now\n const priceValidUntil = new Date();\n priceValidUntil.setMonth(priceValidUntil.getMonth() + 1);\n\n // Collect all product images\n const images = product.images?.map((img) => img.url).filter(Boolean) ?? [];\n if (product.image?.url && !images.includes(product.image.url)) {\n images.unshift(product.image.url);\n }\n\n // Build JSON-LD schema matching SchemaProductWidget.php\n const jsonLd: Record<string, unknown> = {\n '@context': 'https://schema.org',\n '@type': 'Product',\n name: product.name,\n description,\n sku: product.sku,\n image: images.length > 0 ? images : undefined,\n offers: {\n '@type': 'Offer',\n url: product.url,\n availability: product.is_available\n ? 'https://schema.org/InStock'\n : 'https://schema.org/OutOfStock',\n price: product.sale_price,\n priceCurrency: getActiveCurrency(product.currency),\n priceValidUntil: priceValidUntil.toISOString().split('T')[0],\n seller: storeName\n ? {\n '@type': 'Organization',\n name: storeName,\n }\n : undefined,\n },\n };\n\n // Add brand if exists\n if (product.brand) {\n jsonLd.brand = {\n '@type': 'Brand',\n name: product.brand.name,\n description: product.brand.description,\n logo: product.brand.logo,\n };\n }\n\n // Add aggregateRating and review if rating exists\n if (product.rating && product.rating.count > 0) {\n const ratingValue = product.rating.stars;\n jsonLd.aggregateRating = {\n '@type': 'AggregateRating',\n ratingCount: product.rating.count,\n ratingValue,\n };\n jsonLd.review = {\n '@type': 'Review',\n author: storeName\n ? {\n '@type': 'Organization',\n name: storeName,\n }\n : undefined,\n reviewRating: {\n '@type': 'Rating',\n bestRating: 5,\n ratingValue,\n },\n };\n }\n\n if (product.gtin && product.gtin.length === 8) {\n jsonLd.gtin8 = product.gtin;\n }\n\n if (product.mpn) {\n jsonLd.mpn = product.mpn;\n }\n\n // Twig: \"<product> | <store name>\", without the store meta title.\n const title = storeName ? `${product.name} | ${storeName}` : product.name;\n const base: HeadDescriptor = {\n title,\n appendStoreTitle: false,\n description,\n canonical: product.url,\n openGraph: {\n type: 'product',\n title,\n description,\n images: product.image?.url,\n url: product.url,\n },\n twitter: {\n card: 'summary_large_image',\n title,\n description,\n images: product.image?.url,\n },\n jsonLd,\n alternateLanguages: buildHreflangAlternates(ctx.settings, ctx.location.pathname),\n // Quick-buy widget code, eager only here: the Buy Now button is above the fold on this page.\n // Other routes load it on idle from the body:end default hook, which also owns the\n // `#fast-checkout-js` marker `salla-add-product-button` checks for.\n scripts: ctx.settings?.store?.settings?.buy_now ? [fastCheckoutScript()] : [],\n };\n\n return base;\n}\n\nexport const Product = {\n id: RouteId.PRODUCT_SINGLE,\n loader,\n head,\n Component: ProductPage,\n} as const;\n"]}
@@ -3,27 +3,46 @@ import type { StoreContext } from '../../api/store';
3
3
  import { type AppSnippet, type AppSettings } from '../../api/apps';
4
4
  import type { TwilightLocation } from '../../twilight/context';
5
5
  import { type ActiveScope } from '../../utils/cookies';
6
+ /**
7
+ * The market the settings were answered for, when the request asked with another one and
8
+ * its address did not switch market; null otherwise.
9
+ *
10
+ * That is a market's own domain (`us.store.com`): the API serves the market the domain is
11
+ * pinned to, whatever the `scope` cookie remembers from an earlier visit. The page has to
12
+ * take that market over, or the SDK keeps sending the remembered one and creates the
13
+ * guest's cart in it, which every request answered for the domain's market then refuses
14
+ * (TD-17588). A request that asked with no scope has nothing stale to correct. The branch
15
+ * is dropped with the market it belonged to; the type is store-wide, so it is the
16
+ * answer's, else the requested one.
17
+ */
18
+ export declare function hostPinnedScope(url: string, requested: ActiveScope | null, settings: StoreContext): ActiveScope | null;
6
19
  /**
7
20
  * The scope to write to the `scope` cookie for this request, or null to leave the cookie
8
21
  * as it is.
9
22
  *
10
- * Only for a market a `?scope=` URL switched to, and only when the settings were answered
11
- * for it: the API falls back to another market when it does not accept the requested one,
12
- * and Twig keeps the previous choice then too, rather than recording one the page is not
13
- * showing. Its type is the one the settings answered with: a URL names only the id, and
14
- * the store-wide type is assumed until the answer says otherwise (a store browsing by
15
- * branch or city), so later requests send the type the API matches against.
23
+ * The market a market's own domain answered with, over a remembered one; see
24
+ * {@link hostPinnedScope}.
25
+ *
26
+ * Otherwise only for a market a `?scope=` URL switched to, and only when the settings were
27
+ * answered for it: the API falls back to another market when it does not accept the
28
+ * requested one, and Twig keeps the previous choice then too, rather than recording one
29
+ * the page is not showing. Its type is the one the settings answered with: a URL names
30
+ * only the id, and the store-wide type is assumed until the answer says otherwise (a
31
+ * store browsing by branch or city), so later requests send the type the API matches
32
+ * against.
16
33
  */
17
34
  export declare function scopeCookieUpdate(url: string, cookieHeader: string | null, settings: StoreContext): ActiveScope | null;
18
35
  /**
19
- * Gives the request's scope the type its settings answered with, for the rest of this
20
- * render, and files the settings and ads under the key the corrected scope makes, so the browser
21
- * — which reads the corrected scope from the cookie (see {@link scopeCookieUpdate}) — finds
22
- * them dehydrated instead of fetching them again. The entry under the assumed type's key
23
- * is removed, so the page carries them once. Server-only; a no-op when the type
24
- * already matches or the settings answered another scope.
36
+ * Gives the request the scope its settings answered with, for the rest of this render:
37
+ * the market a market's own domain is pinned to when the request asked with another (see
38
+ * {@link hostPinnedScope}; only with the page `url`), else the same scope with the type
39
+ * the answer named. Files the settings and ads under the key the corrected scope makes, so
40
+ * the browser — which reads the corrected scope from the cookie (see
41
+ * {@link scopeCookieUpdate}) — finds them dehydrated instead of fetching them again. The
42
+ * entry under the assumed scope's key is removed, so the page carries them once.
43
+ * Server-only; a no-op when there is nothing to correct.
25
44
  */
26
- export declare function alignRequestScopeType(queryClient: QueryClient, settings: StoreContext): void;
45
+ export declare function alignRequestScope(queryClient: QueryClient, settings: StoreContext, url?: string): void;
27
46
  /**
28
47
  * Writes {@link scopeCookieUpdate} to the response. Read from the request itself rather
29
48
  * than the middleware's context, for the same reason as {@link readServerCookieToken}.
@@ -1 +1 @@
1
- {"version":3,"file":"beforeLoad.d.ts","sourceRoot":"","sources":["../../../src/routes/root/beforeLoad.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AASzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD,OAAO,EAAQ,KAAK,UAAU,EAAE,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAKzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,OAAO,EAUL,KAAK,WAAW,EACjB,MAAM,qBAAqB,CAAC;AAmC7B;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,MAAM,GAAG,IAAI,EAC3B,QAAQ,EAAE,YAAY,GACrB,WAAW,GAAG,IAAI,CAOpB;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI,CAmB5F;AAED;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,oFAoBP,CAAC;AA0B1B;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAMhF;AA2CD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,YAAY,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,sBAAsB,EAAE,OAAO,CAAC;IAChC,GAAG,EAAE,KAAK,GAAG,KAAK,CAAC;IACnB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB;mGAC+F;IAC/F,YAAY,CAAC,EAAE,UAAU,EAAE,CAAC;IAC5B;2DACuD;IACvD,YAAY,CAAC,EAAE,WAAW,CAAC;IAC3B,6FAA6F;IAC7F,WAAW,EAAE,OAAO,CAAC;CACtB;AA0DD,wBAAsB,cAAc,CAAC,GAAG,EAAE;IACxC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,OAAO,EAAE;QACP,WAAW,EAAE,WAAW,CAAC;QACzB,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;KAC7D,CAAC;IACF,aAAa,CAAC,EAAE;QACd,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC3B,CAAC;CACH,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAiK5B"}
1
+ {"version":3,"file":"beforeLoad.d.ts","sourceRoot":"","sources":["../../../src/routes/root/beforeLoad.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AASzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD,OAAO,EAAQ,KAAK,UAAU,EAAE,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAKzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,OAAO,EAUL,KAAK,WAAW,EACjB,MAAM,qBAAqB,CAAC;AAoC7B;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,WAAW,GAAG,IAAI,EAC7B,QAAQ,EAAE,YAAY,GACrB,WAAW,GAAG,IAAI,CAMpB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,MAAM,GAAG,IAAI,EAC3B,QAAQ,EAAE,YAAY,GACrB,WAAW,GAAG,IAAI,CASpB;AASD;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,YAAY,EACtB,GAAG,CAAC,EAAE,MAAM,GACX,IAAI,CAoBN;AAED;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,oFAoBP,CAAC;AA0B1B;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAMhF;AAsDD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,YAAY,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,sBAAsB,EAAE,OAAO,CAAC;IAChC,GAAG,EAAE,KAAK,GAAG,KAAK,CAAC;IACnB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB;mGAC+F;IAC/F,YAAY,CAAC,EAAE,UAAU,EAAE,CAAC;IAC5B;2DACuD;IACvD,YAAY,CAAC,EAAE,WAAW,CAAC;IAC3B,6FAA6F;IAC7F,WAAW,EAAE,OAAO,CAAC;CACtB;AA0DD,wBAAsB,cAAc,CAAC,GAAG,EAAE;IACxC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,OAAO,EAAE;QACP,WAAW,EAAE,WAAW,CAAC;QACzB,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;KAC7D,CAAC;IACF,aAAa,CAAC,EAAE;QACd,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC3B,CAAC;CACH,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAsK5B"}
@@ -1,7 +1,7 @@
1
- export { LogoutRedirect, accountRedirectLoader, pendingOrdersRedirectLoader, productsSourceRedirectLoader, ratingRedirectLoader, slugBrandRedirectLoader } from '../chunk-J37FMLCI.js';
2
- import '../chunk-W37R3JJ7.js';
1
+ export { LogoutRedirect, accountRedirectLoader, pendingOrdersRedirectLoader, productsSourceRedirectLoader, ratingRedirectLoader, slugBrandRedirectLoader } from '../chunk-R4BPODDJ.js';
2
+ import '../chunk-ITZ543CK.js';
3
3
  import '../chunk-OUW6WESU.js';
4
- import '../chunk-RYAOXNRA.js';
4
+ import '../chunk-5MNGLNIJ.js';
5
5
  import '../chunk-Z5M4YYWT.js';
6
6
  import '../chunk-3E3ABCPC.js';
7
7
  import '../chunk-NHA4SBKG.js';
@@ -1,8 +1,8 @@
1
1
  import type { HeadDescriptor } from '../../utils/head';
2
2
  import type { ReviewsPageProps, TestimonialsPageProps } from './types';
3
3
  import type { TwilightContext } from '../../twilight/context';
4
- export declare const TestimonialsPage: import("react").LazyExoticComponent<typeof import("./TestimonialsPage").TestimonialsPage>;
5
- export declare const ReviewsPage: import("react").LazyExoticComponent<typeof import("./ReviewsPage").ReviewsPage>;
4
+ export declare const TestimonialsPage: import("../../utils/lazy-component").LazyComponent<typeof import("./TestimonialsPage").TestimonialsPage>;
5
+ export declare const ReviewsPage: import("../../utils/lazy-component").LazyComponent<typeof import("./ReviewsPage").ReviewsPage>;
6
6
  export { reviewsLoader, testimonialsLoader } from './loader';
7
7
  export type { ReviewsPageProps, TestimonialsPageProps } from './types';
8
8
  declare function loader(ctx: {
@@ -15,7 +15,7 @@ export declare const Testimonials: {
15
15
  readonly id: "testimonials";
16
16
  readonly loader: typeof loader;
17
17
  readonly head: typeof head;
18
- readonly Component: import("react").LazyExoticComponent<typeof import("./TestimonialsPage").TestimonialsPage>;
18
+ readonly Component: import("../../utils/lazy-component").LazyComponent<typeof import("./TestimonialsPage").TestimonialsPage>;
19
19
  };
20
20
  declare function loadReviews(_ctx?: {
21
21
  locale?: string;
@@ -26,6 +26,6 @@ export declare const Reviews: {
26
26
  readonly id: "reviews";
27
27
  readonly loader: typeof loadReviews;
28
28
  readonly head: (ctx: TwilightContext, data: ReviewsPageProps) => HeadDescriptor;
29
- readonly Component: import("react").LazyExoticComponent<typeof import("./ReviewsPage").ReviewsPage>;
29
+ readonly Component: import("../../utils/lazy-component").LazyComponent<typeof import("./ReviewsPage").ReviewsPage>;
30
30
  };
31
31
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/routes/testimonials/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAIvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AACvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAY9D,eAAO,MAAM,gBAAgB,2FAAuB,CAAC;AACrD,eAAO,MAAM,WAAW,iFAAkB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC7D,YAAY,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAEvE,iBAAe,MAAM,CACnB,GAAG,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,EACxB,MAAM,CAAC,EAAE,CACP,IAAI,EAAE,qBAAqB,EAC3B,GAAG,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;CAAE,KACnC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9D,OAAO,CAAC,qBAAqB,CAAC,CAQhC;AAED,iBAAS,IAAI,CAAC,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,qBAAqB,GAAG,cAAc,CAQ/E;AAED,eAAO,MAAM,YAAY;;;;;CAKf,CAAC;AAEX,iBAAe,WAAW,CACxB,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,EAC1B,MAAM,CAAC,EAAE,CACP,IAAI,EAAE,gBAAgB,EACtB,GAAG,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;CAAE,KACnC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9D,OAAO,CAAC,gBAAgB,CAAC,CAQ3B;AAED,eAAO,MAAM,OAAO;;;yBAGN,eAAe,QAAQ,gBAAgB,KAAG,cAAc;;CAK5D,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/routes/testimonials/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAIvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AACvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAa9D,eAAO,MAAM,gBAAgB,0GAAuB,CAAC;AACrD,eAAO,MAAM,WAAW,gGAAkB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC7D,YAAY,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAEvE,iBAAe,MAAM,CACnB,GAAG,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,EACxB,MAAM,CAAC,EAAE,CACP,IAAI,EAAE,qBAAqB,EAC3B,GAAG,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;CAAE,KACnC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9D,OAAO,CAAC,qBAAqB,CAAC,CAQhC;AAED,iBAAS,IAAI,CAAC,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,qBAAqB,GAAG,cAAc,CAQ/E;AAED,eAAO,MAAM,YAAY;;;;;CAKf,CAAC;AAEX,iBAAe,WAAW,CACxB,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,EAC1B,MAAM,CAAC,EAAE,CACP,IAAI,EAAE,gBAAgB,EACtB,GAAG,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;CAAE,KACnC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9D,OAAO,CAAC,gBAAgB,CAAC,CAQ3B;AAED,eAAO,MAAM,OAAO;;;yBAGN,eAAe,QAAQ,gBAAgB,KAAG,cAAc;;CAK5D,CAAC"}
@@ -3,8 +3,8 @@ import { RouteId } from '../chunk-OUW6WESU.js';
3
3
  import '../chunk-FXVII733.js';
4
4
  import { getTwilightContext } from '../chunk-6K34BCUP.js';
5
5
  import '../chunk-T72DAX7R.js';
6
+ import { lazyComponent } from '../chunk-VYGA5AT5.js';
6
7
  import '../chunk-DGUM43GV.js';
7
- import { lazy } from 'react';
8
8
 
9
9
  // src/routes/testimonials/loader.ts
10
10
  async function testimonialsLoader(_ctx) {
@@ -32,11 +32,11 @@ async function reviewsLoader() {
32
32
  }
33
33
 
34
34
  // src/routes/testimonials/index.tsx
35
- var LazyTestimonialsPage = lazy(
36
- () => import('../TestimonialsPage-4W6SXN24.js').then((m) => ({ default: m.TestimonialsPage }))
35
+ var LazyTestimonialsPage = lazyComponent(
36
+ () => import('../TestimonialsPage-PYFKXCQP.js').then((m) => ({ default: m.TestimonialsPage }))
37
37
  );
38
- var LazyReviewsPage = lazy(
39
- () => import('../ReviewsPage-SPHK5MCS.js').then((m) => ({ default: m.ReviewsPage }))
38
+ var LazyReviewsPage = lazyComponent(
39
+ () => import('../ReviewsPage-65CYIATI.js').then((m) => ({ default: m.ReviewsPage }))
40
40
  );
41
41
  var TestimonialsPage = LazyTestimonialsPage;
42
42
  var ReviewsPage = LazyReviewsPage;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/routes/testimonials/loader.ts","../../src/routes/testimonials/index.tsx"],"names":[],"mappings":"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","file":"testimonials.js","sourcesContent":["import type { ReviewsPageProps, TestimonialsPageProps } from './types';\nimport { getTwilightContext } from '../../twilight/context';\nimport { RouteId } from '../../router/route-ids';\n\nexport async function testimonialsLoader(_ctx: { locale: string }): Promise<TestimonialsPageProps> {\n const i18n = getTwilightContext().i18n;\n return {\n page: {\n slug: RouteId.TESTIMONIALS,\n title: i18n.t('blocks.home.testimonials') || 'Customer Reviews',\n },\n };\n}\n\n/** The product reviews page, Twig's `pages/reviews`: `<salla-reviews-page>` loads the reviews itself. */\nexport async function reviewsLoader(): Promise<ReviewsPageProps> {\n const { i18n } = getTwilightContext();\n const title = i18n.t('common.titles.reviews');\n return {\n page: {\n slug: RouteId.REVIEWS,\n title,\n breadcrumbs: [\n { name: i18n.t('common.titles.home'), url: '/' },\n { name: title, url: '/reviews' },\n ],\n },\n };\n}\n","import type { HeadDescriptor } from '../../utils/head';\nimport { buildHreflangAlternates } from '../../utils/baseHead';\nimport { lazy } from 'react';\nimport { reviewsLoader, testimonialsLoader } from './loader';\nimport type { ReviewsPageProps, TestimonialsPageProps } from './types';\nimport type { TwilightContext } from '../../twilight/context';\nimport { RouteId } from '../../router/route-ids';\n\n// Lazy-load component for code-splitting\nconst LazyTestimonialsPage = lazy(() =>\n import('./TestimonialsPage').then((m) => ({ default: m.TestimonialsPage }))\n);\n\nconst LazyReviewsPage = lazy(() =>\n import('./ReviewsPage').then((m) => ({ default: m.ReviewsPage }))\n);\n\nexport const TestimonialsPage = LazyTestimonialsPage;\nexport const ReviewsPage = LazyReviewsPage;\nexport { reviewsLoader, testimonialsLoader } from './loader';\nexport type { ReviewsPageProps, TestimonialsPageProps } from './types';\n\nasync function loader(\n ctx: { locale?: string },\n extend?: (\n data: TestimonialsPageProps,\n ctx: { params: Record<string, never> }\n ) => Promise<Record<string, unknown>> | Record<string, unknown>\n): Promise<TestimonialsPageProps> {\n const data = await testimonialsLoader({ locale: ctx.locale ?? 'ar' });\n\n if (extend) {\n const extra = await extend(data, { params: {} });\n return { ...data, ...extra } as TestimonialsPageProps;\n }\n return data;\n}\n\nfunction head(ctx: TwilightContext, data: TestimonialsPageProps): 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 Testimonials = {\n id: RouteId.TESTIMONIALS,\n loader,\n head,\n Component: LazyTestimonialsPage,\n} as const;\n\nasync function loadReviews(\n _ctx?: { locale?: string },\n extend?: (\n data: ReviewsPageProps,\n ctx: { params: Record<string, never> }\n ) => Promise<Record<string, unknown>> | Record<string, unknown>\n): Promise<ReviewsPageProps> {\n const data = await reviewsLoader();\n\n if (extend) {\n const extra = await extend(data, { params: {} });\n return { ...data, ...extra } as ReviewsPageProps;\n }\n return data;\n}\n\nexport const Reviews = {\n id: RouteId.REVIEWS,\n loader: loadReviews,\n head: (ctx: TwilightContext, data: ReviewsPageProps): HeadDescriptor => ({\n title: data.page.title,\n alternateLanguages: buildHreflangAlternates(ctx.settings, ctx.location.pathname),\n }),\n Component: LazyReviewsPage,\n} as const;\n"]}
1
+ {"version":3,"sources":["../../src/routes/testimonials/loader.ts","../../src/routes/testimonials/index.tsx"],"names":[],"mappings":"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","file":"testimonials.js","sourcesContent":["import type { ReviewsPageProps, TestimonialsPageProps } from './types';\nimport { getTwilightContext } from '../../twilight/context';\nimport { RouteId } from '../../router/route-ids';\n\nexport async function testimonialsLoader(_ctx: { locale: string }): Promise<TestimonialsPageProps> {\n const i18n = getTwilightContext().i18n;\n return {\n page: {\n slug: RouteId.TESTIMONIALS,\n title: i18n.t('blocks.home.testimonials') || 'Customer Reviews',\n },\n };\n}\n\n/** The product reviews page, Twig's `pages/reviews`: `<salla-reviews-page>` loads the reviews itself. */\nexport async function reviewsLoader(): Promise<ReviewsPageProps> {\n const { i18n } = getTwilightContext();\n const title = i18n.t('common.titles.reviews');\n return {\n page: {\n slug: RouteId.REVIEWS,\n title,\n breadcrumbs: [\n { name: i18n.t('common.titles.home'), url: '/' },\n { name: title, url: '/reviews' },\n ],\n },\n };\n}\n","import type { HeadDescriptor } from '../../utils/head';\nimport { buildHreflangAlternates } from '../../utils/baseHead';\n\nimport { reviewsLoader, testimonialsLoader } from './loader';\nimport type { ReviewsPageProps, TestimonialsPageProps } from './types';\nimport type { TwilightContext } from '../../twilight/context';\nimport { RouteId } from '../../router/route-ids';\nimport { lazyComponent } from '../../utils/lazy-component';\n\n// Lazy-load component for code-splitting\nconst LazyTestimonialsPage = lazyComponent(() =>\n import('./TestimonialsPage').then((m) => ({ default: m.TestimonialsPage }))\n);\n\nconst LazyReviewsPage = lazyComponent(() =>\n import('./ReviewsPage').then((m) => ({ default: m.ReviewsPage }))\n);\n\nexport const TestimonialsPage = LazyTestimonialsPage;\nexport const ReviewsPage = LazyReviewsPage;\nexport { reviewsLoader, testimonialsLoader } from './loader';\nexport type { ReviewsPageProps, TestimonialsPageProps } from './types';\n\nasync function loader(\n ctx: { locale?: string },\n extend?: (\n data: TestimonialsPageProps,\n ctx: { params: Record<string, never> }\n ) => Promise<Record<string, unknown>> | Record<string, unknown>\n): Promise<TestimonialsPageProps> {\n const data = await testimonialsLoader({ locale: ctx.locale ?? 'ar' });\n\n if (extend) {\n const extra = await extend(data, { params: {} });\n return { ...data, ...extra } as TestimonialsPageProps;\n }\n return data;\n}\n\nfunction head(ctx: TwilightContext, data: TestimonialsPageProps): 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 Testimonials = {\n id: RouteId.TESTIMONIALS,\n loader,\n head,\n Component: LazyTestimonialsPage,\n} as const;\n\nasync function loadReviews(\n _ctx?: { locale?: string },\n extend?: (\n data: ReviewsPageProps,\n ctx: { params: Record<string, never> }\n ) => Promise<Record<string, unknown>> | Record<string, unknown>\n): Promise<ReviewsPageProps> {\n const data = await reviewsLoader();\n\n if (extend) {\n const extra = await extend(data, { params: {} });\n return { ...data, ...extra } as ReviewsPageProps;\n }\n return data;\n}\n\nexport const Reviews = {\n id: RouteId.REVIEWS,\n loader: loadReviews,\n head: (ctx: TwilightContext, data: ReviewsPageProps): HeadDescriptor => ({\n title: data.page.title,\n alternateLanguages: buildHreflangAlternates(ctx.settings, ctx.location.pathname),\n }),\n Component: LazyReviewsPage,\n} as const;\n"]}
@@ -1,7 +1,7 @@
1
1
  import type { HeadDescriptor } from '../../utils/head';
2
2
  import type { ThankYouPageProps, ThankYouLoaderParams } from './types';
3
3
  import type { TwilightContext } from '../../twilight/context';
4
- export declare const ThankYouPage: import("react").LazyExoticComponent<typeof import("./ThankYouPage").ThankYouPage>;
4
+ export declare const ThankYouPage: import("../../utils/lazy-component").LazyComponent<typeof import("./ThankYouPage").ThankYouPage>;
5
5
  export { thankYouLoader } from './loader';
6
6
  export type { ThankYouLoaderParams, ThankYouPageProps } from './types';
7
7
  declare function loader(ctx: {
@@ -15,6 +15,6 @@ export declare const ThankYou: {
15
15
  readonly id: "thank-you";
16
16
  readonly loader: typeof loader;
17
17
  readonly head: typeof head;
18
- readonly Component: import("react").LazyExoticComponent<typeof import("./ThankYouPage").ThankYouPage>;
18
+ readonly Component: import("../../utils/lazy-component").LazyComponent<typeof import("./ThankYouPage").ThankYouPage>;
19
19
  };
20
20
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/routes/thank-you/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAIvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AACvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAQ9D,eAAO,MAAM,YAAY,mFAAmB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,YAAY,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEvE,iBAAe,MAAM,CACnB,GAAG,EAAE;IAAE,MAAM,EAAE,oBAAoB,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,EACtD,MAAM,CAAC,EAAE,CACP,IAAI,EAAE,iBAAiB,EACvB,GAAG,EAAE;IAAE,MAAM,EAAE,oBAAoB,CAAA;CAAE,KAClC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9D,OAAO,CAAC,iBAAiB,CAAC,CAQ5B;AAED,iBAAS,IAAI,CAAC,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,iBAAiB,GAAG,cAAc,CAQ3E;AAED,eAAO,MAAM,QAAQ;;;;;CAKX,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/routes/thank-you/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAIvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AACvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAS9D,eAAO,MAAM,YAAY,kGAAmB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,YAAY,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEvE,iBAAe,MAAM,CACnB,GAAG,EAAE;IAAE,MAAM,EAAE,oBAAoB,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,EACtD,MAAM,CAAC,EAAE,CACP,IAAI,EAAE,iBAAiB,EACvB,GAAG,EAAE;IAAE,MAAM,EAAE,oBAAoB,CAAA;CAAE,KAClC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9D,OAAO,CAAC,iBAAiB,CAAC,CAQ5B;AAED,iBAAS,IAAI,CAAC,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,iBAAiB,GAAG,cAAc,CAQ3E;AAED,eAAO,MAAM,QAAQ;;;;;CAKX,CAAC"}
@@ -1,8 +1,8 @@
1
- import { order } from '../chunk-NZ6REC6S.js';
1
+ import { order } from '../chunk-GJFK3SU5.js';
2
2
  import { buildHreflangAlternates } from '../chunk-RYGEIQWO.js';
3
- import '../chunk-W37R3JJ7.js';
3
+ import '../chunk-ITZ543CK.js';
4
4
  import { RouteId } from '../chunk-OUW6WESU.js';
5
- import '../chunk-RYAOXNRA.js';
5
+ import '../chunk-5MNGLNIJ.js';
6
6
  import '../chunk-Z5M4YYWT.js';
7
7
  import '../chunk-3E3ABCPC.js';
8
8
  import '../chunk-NHA4SBKG.js';
@@ -10,8 +10,8 @@ import '../chunk-FXVII733.js';
10
10
  import { getTwilightContext } from '../chunk-6K34BCUP.js';
11
11
  import '../chunk-T72DAX7R.js';
12
12
  import '../chunk-DF6FBKDN.js';
13
+ import { lazyComponent } from '../chunk-VYGA5AT5.js';
13
14
  import '../chunk-DGUM43GV.js';
14
- import { lazy } from 'react';
15
15
 
16
16
  // src/routes/thank-you/loader.ts
17
17
  async function thankYouLoader({
@@ -40,8 +40,8 @@ async function thankYouLoader({
40
40
  }
41
41
 
42
42
  // src/routes/thank-you/index.tsx
43
- var LazyThankYouPage = lazy(
44
- () => import('../ThankYouPage-56AIK3QG.js').then((m) => ({ default: m.ThankYouPage }))
43
+ var LazyThankYouPage = lazyComponent(
44
+ () => import('../ThankYouPage-VHUAKQF7.js').then((m) => ({ default: m.ThankYouPage }))
45
45
  );
46
46
  var ThankYouPage = LazyThankYouPage;
47
47
  async function loader(ctx, extend) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/routes/thank-you/loader.ts","../../src/routes/thank-you/index.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAMA,eAAsB,cAAA,CAAe;AAAA,EACnC;AACF,CAAA,EAE+B;AAC7B,EAAA,MAAM,UAAU,MAAA,CAAO,OAAA;AAMvB,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,MAAM,QAAQ,UAAA,CAAW;AAAA,IAC7D,KAAA,CAAM,KAAK,OAAO,CAAA;AAAA,IAClB,KAAA,CAAM,SAAS,OAAO;AAAA,GACvB,CAAA;AAED,EAAA,MAAM,YACJ,WAAA,CAAY,MAAA,KAAW,WAAA,GAAc,WAAA,CAAY,MAAM,KAAA,GAAQ,MAAA;AACjE,EAAA,MAAM,YAAA,GAAe,cAAA,CAAe,MAAA,KAAW,WAAA,GAAc,eAAe,KAAA,GAAQ,MAAA;AAEpF,EAAA,MAAM,IAAA,GAAO,oBAAmB,CAAE,IAAA;AAClC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM;AAAA,MACJ,MAAM,OAAA,CAAQ,SAAA;AAAA,MACd,EAAA,EAAI,SAAA,GAAY,MAAA,CAAO,SAAA,CAAU,EAAE,CAAA,GAAI,OAAA;AAAA,MACvC,KAAA,EAAO,IAAA,CAAK,CAAA,CAAE,yBAAyB,CAAA,IAAK;AAAA,KAC9C;AAAA,IACA,KAAA,EAAO,SAAA;AAAA,IACP,iBAAiB,YAAA,EAAc,eAAA;AAAA,IAC/B,QAAA,EAAU,YAAA,EAAc,QAAA,IAAY,EAAC;AAAA,IACrC,eAAe,YAAA,EAAc,aAAA;AAAA,IAC7B,qBAAqB,YAAA,EAAc;AAAA,GACrC;AACF;;;AC9BA,IAAM,gBAAA,GAAmB,IAAA;AAAA,EAAK,MAC5B,OAAO,6BAAgB,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,MAAO,EAAE,OAAA,EAAS,CAAA,CAAE,YAAA,EAAa,CAAE;AACpE,CAAA;AAEO,IAAM,YAAA,GAAe;AAI5B,eAAe,MAAA,CACb,KACA,MAAA,EAI4B;AAC5B,EAAA,MAAM,OAAO,MAAM,cAAA,CAAe,EAAE,MAAA,EAAQ,GAAA,CAAI,QAAQ,CAAA;AAExD,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,MAAM,KAAA,GAAQ,MAAM,MAAA,CAAO,IAAA,EAAM,GAAG,CAAA;AACpC,IAAA,OAAO,EAAE,GAAG,IAAA,EAAM,GAAG,KAAA,EAAM;AAAA,EAC7B;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,IAAA,CAAK,KAAsB,IAAA,EAAyC;AAC3E,EAAA,MAAM,IAAA,GAAuB;AAAA,IAC3B,KAAA,EAAO,KAAK,IAAA,CAAK,KAAA;AAAA,IACjB,WAAA,EAAa,KAAK,IAAA,CAAK,WAAA;AAAA,IACvB,oBAAoB,uBAAA,CAAwB,GAAA,CAAI,QAAA,EAAU,GAAA,CAAI,SAAS,QAAQ;AAAA,GACjF;AAEA,EAAA,OAAO,IAAA;AACT;AAEO,IAAM,QAAA,GAAW;AAAA,EACtB,IAAI,OAAA,CAAQ,SAAA;AAAA,EACZ,MAAA;AAAA,EACA,IAAA;AAAA,EACA,SAAA,EAAW;AACb","file":"thank-you.js","sourcesContent":["import type { ThankYouPageProps, ThankYouLoaderParams } from './types';\nimport type { Order } from '../account/types';\nimport { order } from '../../api/order';\nimport { getTwilightContext } from '../../twilight/context';\nimport { RouteId } from '../../router/route-ids';\n\nexport async function thankYouLoader({\n params,\n}: {\n params: ThankYouLoaderParams;\n}): Promise<ThankYouPageProps> {\n const orderId = params.orderId;\n\n // orders/{id} needs a customer token that guest checkout / tokenless SSR lacks (400\n // token_not_provided). Don't let that 500 the page — render whatever resolves.\n // ponytail: guest order detail needs checkout/thank-you to return the order; source it\n // here once that payload is confirmed on a correctly store-bound worker.\n const [orderResult, thankYouResult] = await Promise.allSettled([\n order.find(orderId),\n order.thankYou(orderId),\n ]);\n\n const orderData: Order | undefined =\n orderResult.status === 'fulfilled' ? orderResult.value.order : undefined;\n const thankYouData = thankYouResult.status === 'fulfilled' ? thankYouResult.value : undefined;\n\n const i18n = getTwilightContext().i18n;\n return {\n page: {\n slug: RouteId.THANK_YOU,\n id: orderData ? String(orderData.id) : orderId,\n title: i18n.t('common.titles.thank_you') || 'Thank You',\n },\n order: orderData,\n thank_you_title: thankYouData?.thank_you_title,\n messages: thankYouData?.messages ?? [],\n share_message: thankYouData?.share_message,\n short_share_message: thankYouData?.short_share_message,\n };\n}\n","import type { HeadDescriptor } from '../../utils/head';\nimport { buildHreflangAlternates } from '../../utils/baseHead';\nimport { lazy } from 'react';\nimport { thankYouLoader } from './loader';\nimport type { ThankYouPageProps, ThankYouLoaderParams } from './types';\nimport type { TwilightContext } from '../../twilight/context';\nimport { RouteId } from '../../router/route-ids';\n\n// Lazy-load component for code-splitting\nconst LazyThankYouPage = lazy(() =>\n import('./ThankYouPage').then((m) => ({ default: m.ThankYouPage }))\n);\n\nexport const ThankYouPage = LazyThankYouPage;\nexport { thankYouLoader } from './loader';\nexport type { ThankYouLoaderParams, ThankYouPageProps } from './types';\n\nasync function loader(\n ctx: { params: ThankYouLoaderParams; locale?: string },\n extend?: (\n data: ThankYouPageProps,\n ctx: { params: ThankYouLoaderParams }\n ) => Promise<Record<string, unknown>> | Record<string, unknown>\n): Promise<ThankYouPageProps> {\n const data = await thankYouLoader({ params: ctx.params });\n\n if (extend) {\n const extra = await extend(data, ctx);\n return { ...data, ...extra } as ThankYouPageProps;\n }\n return data;\n}\n\nfunction head(ctx: TwilightContext, data: ThankYouPageProps): 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 ThankYou = {\n id: RouteId.THANK_YOU,\n loader,\n head,\n Component: LazyThankYouPage,\n} as const;\n"]}
1
+ {"version":3,"sources":["../../src/routes/thank-you/loader.ts","../../src/routes/thank-you/index.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAMA,eAAsB,cAAA,CAAe;AAAA,EACnC;AACF,CAAA,EAE+B;AAC7B,EAAA,MAAM,UAAU,MAAA,CAAO,OAAA;AAMvB,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,MAAM,QAAQ,UAAA,CAAW;AAAA,IAC7D,KAAA,CAAM,KAAK,OAAO,CAAA;AAAA,IAClB,KAAA,CAAM,SAAS,OAAO;AAAA,GACvB,CAAA;AAED,EAAA,MAAM,YACJ,WAAA,CAAY,MAAA,KAAW,WAAA,GAAc,WAAA,CAAY,MAAM,KAAA,GAAQ,MAAA;AACjE,EAAA,MAAM,YAAA,GAAe,cAAA,CAAe,MAAA,KAAW,WAAA,GAAc,eAAe,KAAA,GAAQ,MAAA;AAEpF,EAAA,MAAM,IAAA,GAAO,oBAAmB,CAAE,IAAA;AAClC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM;AAAA,MACJ,MAAM,OAAA,CAAQ,SAAA;AAAA,MACd,EAAA,EAAI,SAAA,GAAY,MAAA,CAAO,SAAA,CAAU,EAAE,CAAA,GAAI,OAAA;AAAA,MACvC,KAAA,EAAO,IAAA,CAAK,CAAA,CAAE,yBAAyB,CAAA,IAAK;AAAA,KAC9C;AAAA,IACA,KAAA,EAAO,SAAA;AAAA,IACP,iBAAiB,YAAA,EAAc,eAAA;AAAA,IAC/B,QAAA,EAAU,YAAA,EAAc,QAAA,IAAY,EAAC;AAAA,IACrC,eAAe,YAAA,EAAc,aAAA;AAAA,IAC7B,qBAAqB,YAAA,EAAc;AAAA,GACrC;AACF;;;AC7BA,IAAM,gBAAA,GAAmB,aAAA;AAAA,EAAc,MACrC,OAAO,6BAAgB,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,MAAO,EAAE,OAAA,EAAS,CAAA,CAAE,YAAA,EAAa,CAAE;AACpE,CAAA;AAEO,IAAM,YAAA,GAAe;AAI5B,eAAe,MAAA,CACb,KACA,MAAA,EAI4B;AAC5B,EAAA,MAAM,OAAO,MAAM,cAAA,CAAe,EAAE,MAAA,EAAQ,GAAA,CAAI,QAAQ,CAAA;AAExD,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,MAAM,KAAA,GAAQ,MAAM,MAAA,CAAO,IAAA,EAAM,GAAG,CAAA;AACpC,IAAA,OAAO,EAAE,GAAG,IAAA,EAAM,GAAG,KAAA,EAAM;AAAA,EAC7B;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,IAAA,CAAK,KAAsB,IAAA,EAAyC;AAC3E,EAAA,MAAM,IAAA,GAAuB;AAAA,IAC3B,KAAA,EAAO,KAAK,IAAA,CAAK,KAAA;AAAA,IACjB,WAAA,EAAa,KAAK,IAAA,CAAK,WAAA;AAAA,IACvB,oBAAoB,uBAAA,CAAwB,GAAA,CAAI,QAAA,EAAU,GAAA,CAAI,SAAS,QAAQ;AAAA,GACjF;AAEA,EAAA,OAAO,IAAA;AACT;AAEO,IAAM,QAAA,GAAW;AAAA,EACtB,IAAI,OAAA,CAAQ,SAAA;AAAA,EACZ,MAAA;AAAA,EACA,IAAA;AAAA,EACA,SAAA,EAAW;AACb","file":"thank-you.js","sourcesContent":["import type { ThankYouPageProps, ThankYouLoaderParams } from './types';\nimport type { Order } from '../account/types';\nimport { order } from '../../api/order';\nimport { getTwilightContext } from '../../twilight/context';\nimport { RouteId } from '../../router/route-ids';\n\nexport async function thankYouLoader({\n params,\n}: {\n params: ThankYouLoaderParams;\n}): Promise<ThankYouPageProps> {\n const orderId = params.orderId;\n\n // orders/{id} needs a customer token that guest checkout / tokenless SSR lacks (400\n // token_not_provided). Don't let that 500 the page — render whatever resolves.\n // ponytail: guest order detail needs checkout/thank-you to return the order; source it\n // here once that payload is confirmed on a correctly store-bound worker.\n const [orderResult, thankYouResult] = await Promise.allSettled([\n order.find(orderId),\n order.thankYou(orderId),\n ]);\n\n const orderData: Order | undefined =\n orderResult.status === 'fulfilled' ? orderResult.value.order : undefined;\n const thankYouData = thankYouResult.status === 'fulfilled' ? thankYouResult.value : undefined;\n\n const i18n = getTwilightContext().i18n;\n return {\n page: {\n slug: RouteId.THANK_YOU,\n id: orderData ? String(orderData.id) : orderId,\n title: i18n.t('common.titles.thank_you') || 'Thank You',\n },\n order: orderData,\n thank_you_title: thankYouData?.thank_you_title,\n messages: thankYouData?.messages ?? [],\n share_message: thankYouData?.share_message,\n short_share_message: thankYouData?.short_share_message,\n };\n}\n","import type { HeadDescriptor } from '../../utils/head';\nimport { buildHreflangAlternates } from '../../utils/baseHead';\n\nimport { thankYouLoader } from './loader';\nimport type { ThankYouPageProps, ThankYouLoaderParams } from './types';\nimport type { TwilightContext } from '../../twilight/context';\nimport { RouteId } from '../../router/route-ids';\nimport { lazyComponent } from '../../utils/lazy-component';\n\n// Lazy-load component for code-splitting\nconst LazyThankYouPage = lazyComponent(() =>\n import('./ThankYouPage').then((m) => ({ default: m.ThankYouPage }))\n);\n\nexport const ThankYouPage = LazyThankYouPage;\nexport { thankYouLoader } from './loader';\nexport type { ThankYouLoaderParams, ThankYouPageProps } from './types';\n\nasync function loader(\n ctx: { params: ThankYouLoaderParams; locale?: string },\n extend?: (\n data: ThankYouPageProps,\n ctx: { params: ThankYouLoaderParams }\n ) => Promise<Record<string, unknown>> | Record<string, unknown>\n): Promise<ThankYouPageProps> {\n const data = await thankYouLoader({ params: ctx.params });\n\n if (extend) {\n const extra = await extend(data, ctx);\n return { ...data, ...extra } as ThankYouPageProps;\n }\n return data;\n}\n\nfunction head(ctx: TwilightContext, data: ThankYouPageProps): 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 ThankYou = {\n id: RouteId.THANK_YOU,\n loader,\n head,\n Component: LazyThankYouPage,\n} as const;\n"]}
package/dist/skeleton.js CHANGED
@@ -1,31 +1,31 @@
1
1
  export { BlogSkeleton, BreadcrumbSkeleton, CartSkeleton, CustomerLayoutSkeleton, CustomerPageSkeleton, PageSkeleton, ProductCardSkeleton, ProductDetailSkeleton, ProductGridSkeleton, SkeletonPulse } from './chunk-N7CCSGZF.js';
2
- export { HomeSkeleton } from './chunk-KSPVQQ7J.js';
2
+ export { HomeSkeleton } from './chunk-LMMDVLAB.js';
3
3
  import './chunk-IXHM24Z4.js';
4
- import './chunk-MMXLOECO.js';
5
- import './chunk-C76QBKQT.js';
6
- import './chunk-B6CGVRJ7.js';
7
- import './chunk-V4E6JFS4.js';
4
+ import './chunk-SAYYMA6E.js';
5
+ import './chunk-HEWFF3KI.js';
6
+ import './chunk-U6EB7GM3.js';
7
+ import './chunk-3QR6T7KW.js';
8
8
  import './chunk-Y32RHCOH.js';
9
- import './chunk-F73QPQX7.js';
9
+ import './chunk-UXS3QCHM.js';
10
10
  import './chunk-H2QBHOF2.js';
11
- import './chunk-JLJKIXDT.js';
12
- import './chunk-UA4F3ZR3.js';
11
+ import './chunk-VFQNVPFH.js';
12
+ import './chunk-JFKHKDSK.js';
13
13
  import './chunk-N6ZE6HUX.js';
14
14
  import './chunk-X55R4VVK.js';
15
- import './chunk-ZAVUF234.js';
15
+ import './chunk-S7FNMT24.js';
16
16
  import './chunk-OXMUPNMH.js';
17
- import './chunk-6TT5VHUM.js';
17
+ import './chunk-HG75MP47.js';
18
18
  import './chunk-VVZNW5CB.js';
19
19
  import './chunk-WQPG22DY.js';
20
20
  import './chunk-GD26FI4J.js';
21
21
  import './chunk-Q7E4TNN7.js';
22
22
  import './chunk-RYGEIQWO.js';
23
- import './chunk-W37R3JJ7.js';
23
+ import './chunk-ITZ543CK.js';
24
24
  import './chunk-OUW6WESU.js';
25
25
  import './chunk-HOJ5E2PG.js';
26
26
  import './chunk-HI5V5X3S.js';
27
- import './chunk-F324WS4B.js';
28
- import './chunk-RVPFDYQ2.js';
27
+ import './chunk-5FEFYFTS.js';
28
+ import './chunk-TVAXTMMQ.js';
29
29
  import './chunk-MVT5AF2A.js';
30
30
  import './chunk-Z653O7MX.js';
31
31
  import './chunk-ZCH7W7DZ.js';
@@ -36,22 +36,22 @@ import './chunk-7V36I5GT.js';
36
36
  import './chunk-6WI7R2BD.js';
37
37
  import './chunk-LFHYQ6AN.js';
38
38
  import './chunk-OAMIDZKW.js';
39
- import './chunk-PB2K5LRO.js';
39
+ import './chunk-PBFLXHKM.js';
40
40
  import './chunk-OQIIJRAS.js';
41
41
  import './chunk-V2ZDTY6H.js';
42
- import './chunk-XNNKW6FA.js';
42
+ import './chunk-MWAXFBGG.js';
43
43
  import './chunk-5XDPAKF5.js';
44
44
  import './chunk-GCPEMNSU.js';
45
- import './chunk-RYAOXNRA.js';
45
+ import './chunk-5MNGLNIJ.js';
46
46
  import './chunk-Z5M4YYWT.js';
47
47
  import './chunk-TYNZ5B2B.js';
48
- import './chunk-BXQZXOFK.js';
48
+ import './chunk-TWLJ2RII.js';
49
49
  import './chunk-AXW67SY7.js';
50
50
  import './chunk-BYMOPN2S.js';
51
51
  import './chunk-SKLEJJ6M.js';
52
52
  import './chunk-6BZ5TKEV.js';
53
53
  import './chunk-FZKRSGLP.js';
54
- import './chunk-7V5HOZW4.js';
54
+ import './chunk-KYMWEUN2.js';
55
55
  import './chunk-YA6ABQB7.js';
56
56
  import './chunk-MWYKP7CI.js';
57
57
  import './chunk-3E3ABCPC.js';
@@ -60,6 +60,7 @@ import './chunk-FXVII733.js';
60
60
  import './chunk-6K34BCUP.js';
61
61
  import './chunk-T72DAX7R.js';
62
62
  import './chunk-DF6FBKDN.js';
63
+ import './chunk-VYGA5AT5.js';
63
64
  import './chunk-DGUM43GV.js';
64
65
  //# sourceMappingURL=skeleton.js.map
65
66
  //# sourceMappingURL=skeleton.js.map
@@ -1,11 +1,11 @@
1
- import { category } from './chunk-YV5VCWQF.js';
2
- import { blog } from './chunk-DESMKK54.js';
3
- import { brand } from './chunk-6O5EFNDM.js';
4
- import { product } from './chunk-B6CGVRJ7.js';
1
+ import { category } from './chunk-S5ZKI3TY.js';
2
+ import { blog } from './chunk-OSYUGCRG.js';
3
+ import { brand } from './chunk-OXBMZSKL.js';
4
+ import { product } from './chunk-U6EB7GM3.js';
5
5
  import { DEV_LOOKUP_BUDGET_MS } from './chunk-OXMUPNMH.js';
6
- import './chunk-W37R3JJ7.js';
6
+ import './chunk-ITZ543CK.js';
7
7
  import './chunk-OUW6WESU.js';
8
- import './chunk-RYAOXNRA.js';
8
+ import './chunk-5MNGLNIJ.js';
9
9
  import './chunk-Z5M4YYWT.js';
10
10
  import './chunk-3E3ABCPC.js';
11
11
  import './chunk-NHA4SBKG.js';
@@ -111,5 +111,5 @@ function lookupInStore(source, query) {
111
111
  }
112
112
 
113
113
  export { lookupInStore };
114
- //# sourceMappingURL=store-lookup-UDGPAAWQ.js.map
115
- //# sourceMappingURL=store-lookup-UDGPAAWQ.js.map
114
+ //# sourceMappingURL=store-lookup-2P7PQVXE.js.map
115
+ //# sourceMappingURL=store-lookup-2P7PQVXE.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/dev/store-lookup.ts"],"names":["categories"],"mappings":"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","file":"store-lookup-UDGPAAWQ.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":";;;;;;;;;;;;;;;;;;AAmBA,IAAM,QAAA,GAAW,EAAA;AAEjB,IAAM,SAAA,GAAY,EAAA;AAalB,eAAe,OAAA,CACb,WACA,IAAA,EACc;AACd,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,EAAI,GAAI,oBAAA;AAC9B,EAAA,MAAM,QAAa,EAAC;AACpB,EAAA,IAAI,MAAA,GAAwB,IAAA;AAC5B,EAAA,KAAA,IAAS,IAAA,GAAO,CAAA,EAAG,IAAA,IAAQ,SAAA,EAAW,QAAQ,CAAA,EAAG;AAC/C,IAAA,MAAM,EAAE,KAAA,EAAO,IAAA,KAAS,MAAM,SAAA,CAAU,MAAM,MAAM,CAAA;AACpD,IAAA,KAAA,CAAM,IAAA,CAAK,GAAG,KAAA,CAAM,MAAA,CAAO,IAAI,CAAC,CAAA;AAChC,IAAA,IAAI,KAAA,CAAM,UAAU,QAAA,IAAY,CAAC,QAAQ,IAAA,CAAK,GAAA,MAAS,QAAA,EAAU;AACjE,IAAA,MAAA,GAAS,IAAA;AAAA,EACX;AACA,EAAA,OAAO,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,QAAQ,CAAA;AAChC;AAEA,SAAS,OAAA,CAAQ,MAAc,KAAA,EAAwB;AACrD,EAAA,OAAO,CAAC,SAAS,IAAA,CAAK,WAAA,GAAc,QAAA,CAAS,KAAA,CAAM,aAAa,CAAA;AAClE;AAGA,SAAS,QAAQA,WAAAA,EAAoC;AACnD,EAAA,OAAOA,WAAAA,CAAW,OAAA,CAAQ,CAAC,CAAA,KAAM,CAAC,CAAA,EAAG,GAAG,OAAA,CAAQ,CAAA,CAAE,cAAA,IAAkB,EAAE,CAAC,CAAC,CAAA;AAC1E;AAEA,eAAe,SAAS,KAAA,EAAyC;AAC/D,EAAA,MAAM,EAAE,KAAA,EAAM,GAAI,MAAM,QAAQ,IAAA,CAAK;AAAA,IACnC,MAAA,EAAQ,QAAQ,QAAA,GAAW,QAAA;AAAA,IAC3B,GAAI,KAAA,GAAQ,EAAE,OAAA,EAAS,KAAA,KAAU,EAAC;AAAA,IAClC,OAAA,EAAS;AAAA,GACV,CAAA;AAED,EAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,IACvB,EAAA,EAAI,MAAA,CAAO,CAAA,CAAE,EAAE,CAAA;AAAA,IACf,MAAM,CAAA,CAAE,IAAA;AAAA,IACR,KAAA,EAAO,EAAE,KAAA,EAAO,GAAA;AAAA,IAChB,KAAK,CAAA,CAAE,GAAA;AAAA,IACP,MAAM,EAAE,EAAA,EAAI,MAAA,CAAO,CAAA,CAAE,EAAE,CAAA,EAAG,IAAA,EAAM,CAAA,CAAE,IAAA,EAAM,KAAK,CAAA,CAAE,GAAA,EAAK,OAAO,CAAA,CAAE,KAAA,EAAO,OAAO,IAAA;AAAK,GAClF,CAAE,CAAA;AACJ;AAEA,eAAe,WAAW,KAAA,EAAyC;AACjE,EAAA,OAAO,OAAA,CAAQ,MAAM,QAAA,CAAS,IAAA,EAAM,CAAA,CACjC,MAAA,CAAO,CAAC,CAAA,KAAM,OAAA,CAAQ,EAAE,IAAA,EAAM,KAAK,CAAC,CAAA,CACpC,KAAA,CAAM,GAAG,QAAQ,CAAA,CACjB,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,IACX,IAAI,CAAA,CAAE,EAAA;AAAA,IACN,MAAM,CAAA,CAAE,IAAA;AAAA,IACR,KAAA,EAAO,EAAE,KAAA,IAAS,MAAA;AAAA,IAClB,KAAK,CAAA,CAAE,GAAA;AAAA,IACP,MAAM,EAAE,EAAA,EAAI,EAAE,EAAA,EAAI,IAAA,EAAM,EAAE,IAAA,EAAM,GAAA,EAAK,CAAA,CAAE,GAAA,EAAK,OAAO,CAAA,CAAE,KAAA,IAAS,MAAM,IAAA,EAAM,CAAA,CAAE,QAAQ,IAAA;AAAK,GAC3F,CAAE,CAAA;AACN;AAEA,eAAe,OAAO,KAAA,EAAyC;AAC7D,EAAA,MAAM,QAAQ,MAAM,OAAA;AAAA,IAClB,CAAC,IAAA,KAAS,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA;AAAA,IACzB,CAAC,CAAA,KAAM,OAAA,CAAQ,CAAA,CAAE,MAAM,KAAK;AAAA,GAC9B;AACA,EAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,IACvB,IAAI,CAAA,CAAE,EAAA;AAAA,IACN,MAAM,CAAA,CAAE,IAAA;AAAA,IACR,OAAO,CAAA,CAAE,IAAA;AAAA,IACT,KAAK,CAAA,CAAE,GAAA;AAAA,IACP,MAAM,EAAE,EAAA,EAAI,CAAA,CAAE,EAAA,EAAI,MAAM,CAAA,CAAE,IAAA,EAAM,GAAA,EAAK,CAAA,CAAE,KAAK,IAAA,EAAM,CAAA,CAAE,MAAM,MAAA,EAAQ,CAAA,CAAE,UAAU,IAAA;AAAK,GACrF,CAAE,CAAA;AACJ;AAEA,eAAe,aAAa,KAAA,EAAyC;AACnE,EAAA,MAAM,QAAQ,MAAM,OAAA;AAAA,IAClB,OAAO,OAAO,MAAA,KAAW;AACvB,MAAA,MAAM,EAAE,IAAA,EAAM,MAAA,EAAQ,KAAA,EAAM,GAAI,MAAM,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,MAAA,GAAS,EAAE,MAAA,KAAW,MAAS,CAAA;AACxF,MAAA,OAAO,EAAE,KAAA,EAAO,IAAA,EAAM,IAAA,EAAM,KAAA,EAAO,QAAQ,IAAA,EAAK;AAAA,IAClD,CAAA;AAAA,IACA,CAAC,CAAA,KAAM,OAAA,CAAQ,CAAA,CAAE,MAAM,KAAK;AAAA,GAC9B;AACA,EAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,IACvB,IAAI,CAAA,CAAE,EAAA;AAAA,IACN,MAAM,CAAA,CAAE,IAAA;AAAA,IACR,OAAO,CAAA,CAAE,KAAA;AAAA,IACT,KAAK,CAAA,CAAE,GAAA;AAAA,IACP,IAAA,EAAM,EAAE,EAAA,EAAI,CAAA,CAAE,EAAA,EAAI,MAAM,CAAA,CAAE,IAAA,EAAM,GAAA,EAAK,CAAA,CAAE,GAAA;AAAI,GAC7C,CAAE,CAAA;AACJ;AAEA,eAAe,eAAe,KAAA,EAAyC;AACrE,EAAA,MAAM,EAAE,UAAA,EAAY,IAAA,EAAK,GAAI,MAAM,KAAK,GAAA,EAAI;AAC5C,EAAA,OAAO,KACJ,MAAA,CAAO,CAAC,CAAA,KAAM,OAAA,CAAQ,EAAE,IAAA,EAAM,KAAK,CAAC,CAAA,CACpC,MAAM,CAAA,EAAG,QAAQ,CAAA,CACjB,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,IACX,IAAI,CAAA,CAAE,EAAA;AAAA,IACN,MAAM,CAAA,CAAE,IAAA;AAAA,IACR,KAAK,CAAA,CAAE,GAAA;AAAA,IACP,IAAA,EAAM,EAAE,EAAA,EAAI,CAAA,CAAE,EAAA,EAAI,MAAM,CAAA,CAAE,IAAA,EAAM,GAAA,EAAK,CAAA,CAAE,GAAA;AAAI,GAC7C,CAAE,CAAA;AACN;AAEA,IAAM,OAAA,GAAgF;AAAA,EACpF,QAAA;AAAA,EACA,UAAA;AAAA,EACA,MAAA;AAAA,EACA,aAAA,EAAe,YAAA;AAAA,EACf,eAAA,EAAiB;AACnB,CAAA;AAEO,SAAS,aAAA,CAAc,QAAyB,KAAA,EAAyC;AAC9F,EAAA,MAAM,MAAA,GAAS,QAAQ,MAAM,CAAA;AAC7B,EAAA,IAAI,CAAC,MAAA,EAAQ,OAAO,OAAA,CAAQ,MAAA,CAAO,IAAI,KAAA,CAAM,CAAA,cAAA,EAAiB,MAAM,CAAA,CAAE,CAAC,CAAA;AACvE,EAAA,OAAO,MAAA,CAAO,KAAA,CAAM,IAAA,EAAM,CAAA;AAC5B","file":"store-lookup-2P7PQVXE.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":"router.d.ts","sourceRoot":"","sources":["../../src/tanstack/router.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAOvC,OAAO,KAAK,EAAwC,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAClG,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAMpD,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,qBAAqB,CAAC;AAO7B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAW,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAgBhE;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,WAAW,CAAC;IACzB,WAAW,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;CAC7D;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CA2C7D,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEzD;AAoED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,KAG7B,SAAS,GAAG,kRAOrB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,OAAO,CAAA;CAAE,sCA4BlE;AAyBD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kCAAkC,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAa1E;AA8ND;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,uBAAuB,CAAC,EAAE,CAAC,MAAM,SAAS,CAAC,GAAG,KAAK,CAAC;IACpD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,mBAAmB,uGA+HzE;AAED,OAAO,QAAQ,wBAAwB,CAAC;IACtC,UAAU,QAAQ;QAChB,MAAM,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;KACzC;IAED,UAAU,aAAc,SAAQ,oBAAoB;KAAG;CACxD"}
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/tanstack/router.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAOvC,OAAO,KAAK,EAAwC,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAClG,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAMpD,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,qBAAqB,CAAC;AAO7B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAW,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAiBhE;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,WAAW,CAAC;IACzB,WAAW,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;CAC7D;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CA2C7D,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEzD;AAoED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,KAG7B,SAAS,GAAG,kRAOrB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,OAAO,CAAA;CAAE,sCA4BlE;AAyBD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kCAAkC,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAa1E;AA8ND;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,uBAAuB,CAAC,EAAE,CAAC,MAAM,SAAS,CAAC,GAAG,KAAK,CAAC;IACpD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,mBAAmB,uGA+HzE;AAED,OAAO,QAAQ,wBAAwB,CAAC;IACtC,UAAU,QAAQ;QAChB,MAAM,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;KACzC;IAED,UAAU,aAAc,SAAQ,oBAAoB;KAAG;CACxD"}
package/dist/tanstack.js CHANGED
@@ -1,26 +1,26 @@
1
- export { tanstackDocumentAdapter as attrs, createRouter, createTwilightRootRoute, useTanstackDocumentAttrs as useAttrs } from './chunk-TUIB74QX.js';
2
- import { requestHostOf } from './chunk-VE34Y3Z3.js';
3
- export { TanStackLinkAdapter, TanStackNavigationProvider, createTanStackLinkAdapter } from './chunk-VE34Y3Z3.js';
1
+ export { tanstackDocumentAdapter as attrs, createRouter, createTwilightRootRoute, useTanstackDocumentAttrs as useAttrs } from './chunk-EGJ2SV6O.js';
2
+ import { requestHostOf } from './chunk-P43VADN7.js';
3
+ export { TanStackLinkAdapter, TanStackNavigationProvider, createTanStackLinkAdapter } from './chunk-P43VADN7.js';
4
4
  import './chunk-Z4Y55HWX.js';
5
5
  export { tanstackHeadAdapter as head, withHead } from './chunk-5UWRPWK2.js';
6
6
  import { CRITICAL_STYLE_HREF } from './chunk-4FJGZQD3.js';
7
- import './chunk-BFPTMZ4G.js';
8
- import { readNativeAppHeaders } from './chunk-EDK4U4WQ.js';
9
- import './chunk-WXE5OK4N.js';
10
- import './chunk-B6CGVRJ7.js';
7
+ import './chunk-6KZUGNCS.js';
8
+ import { readNativeAppHeaders } from './chunk-A7KXUBPT.js';
9
+ import './chunk-FVHAKOEH.js';
10
+ import './chunk-U6EB7GM3.js';
11
11
  import { rootHead } from './chunk-N6ZE6HUX.js';
12
12
  import './chunk-X55R4VVK.js';
13
- import './chunk-6TT5VHUM.js';
13
+ import './chunk-HG75MP47.js';
14
14
  import './chunk-WQPG22DY.js';
15
15
  import './chunk-GD26FI4J.js';
16
16
  import { maintenanceEvidence, MAINTENANCE_EVIDENCE_HEADER, maintenanceEvidenceHeader } from './chunk-Q7E4TNN7.js';
17
17
  import './chunk-RYGEIQWO.js';
18
- import './chunk-W37R3JJ7.js';
18
+ import './chunk-ITZ543CK.js';
19
19
  import './chunk-OUW6WESU.js';
20
20
  import './chunk-JWXJPJBO.js';
21
21
  export { mergeDocumentDescriptors as mergeAttrs } from './chunk-CW625T2E.js';
22
- import './chunk-XNNKW6FA.js';
23
- import './chunk-RYAOXNRA.js';
22
+ import './chunk-MWAXFBGG.js';
23
+ import './chunk-5MNGLNIJ.js';
24
24
  import './chunk-Z5M4YYWT.js';
25
25
  import './chunk-TYNZ5B2B.js';
26
26
  import './chunk-BYMOPN2S.js';
@@ -31,6 +31,7 @@ import { runWithTwilightContext, getTwilightContext } from './chunk-6K34BCUP.js'
31
31
  export { getTwilightContext, runWithTwilightContext, updateTwilightContext } from './chunk-6K34BCUP.js';
32
32
  import './chunk-T72DAX7R.js';
33
33
  import './chunk-DF6FBKDN.js';
34
+ import './chunk-VYGA5AT5.js';
34
35
  import './chunk-DGUM43GV.js';
35
36
  import { useState, useSyncExternalStore, createElement } from 'react';
36
37
  import { useRouterState, useTags, useRouter, Asset } from '@tanstack/react-router';