@salla.sa/twilight-theme-engine 1.0.58 → 1.0.59

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 (208) hide show
  1. package/dist/{AddToCartForm-MTD46H63.js → AddToCartForm-IFK5P6XK.js} +3 -3
  2. package/dist/{AddToCartForm-MTD46H63.js.map → AddToCartForm-IFK5P6XK.js.map} +1 -1
  3. package/dist/{BlogAuthorPage-BT5BGQQJ.js → BlogAuthorPage-KA3EWFJC.js} +15 -15
  4. package/dist/{BlogAuthorPage-BT5BGQQJ.js.map → BlogAuthorPage-KA3EWFJC.js.map} +1 -1
  5. package/dist/{BlogCategoryPage-IDHUIFVG.js → BlogCategoryPage-EWFNGPTS.js} +15 -15
  6. package/dist/{BlogCategoryPage-IDHUIFVG.js.map → BlogCategoryPage-EWFNGPTS.js.map} +1 -1
  7. package/dist/{BlogPage-VSZPR4AD.js → BlogPage-E3CN2WJL.js} +13 -13
  8. package/dist/{BlogPage-VSZPR4AD.js.map → BlogPage-E3CN2WJL.js.map} +1 -1
  9. package/dist/{BlogSinglePage-3FWJ6UTQ.js → BlogSinglePage-Z4GIRBWI.js} +13 -13
  10. package/dist/{BlogSinglePage-3FWJ6UTQ.js.map → BlogSinglePage-Z4GIRBWI.js.map} +1 -1
  11. package/dist/{BlogTagPage-TIPPV2WW.js → BlogTagPage-4D6GMTHN.js} +15 -15
  12. package/dist/{BlogTagPage-TIPPV2WW.js.map → BlogTagPage-4D6GMTHN.js.map} +1 -1
  13. package/dist/{BrandsPage-LEXRPFVK.js → BrandsPage-C6EZVXQC.js} +13 -13
  14. package/dist/{BrandsPage-LEXRPFVK.js.map → BrandsPage-C6EZVXQC.js.map} +1 -1
  15. package/dist/{Breadcrumb-Q3P72LPT.js → Breadcrumb-HZVWJZC4.js} +13 -13
  16. package/dist/{Breadcrumb-Q3P72LPT.js.map → Breadcrumb-HZVWJZC4.js.map} +1 -1
  17. package/dist/{CartItem-LJYCK3UP.js → CartItem-OBF3TBDK.js} +13 -13
  18. package/dist/{CartItem-LJYCK3UP.js.map → CartItem-OBF3TBDK.js.map} +1 -1
  19. package/dist/{CartSummary-645YDH2N.js → CartSummary-GHMZ5LAL.js} +13 -13
  20. package/dist/{CartSummary-645YDH2N.js.map → CartSummary-GHMZ5LAL.js.map} +1 -1
  21. package/dist/{Copyright-N5323WE7.js → Copyright-XLIZFWVM.js} +3 -3
  22. package/dist/{Copyright-N5323WE7.js.map → Copyright-XLIZFWVM.js.map} +1 -1
  23. package/dist/{CustomerLayout-LB2EWG2P.js → CustomerLayout-JG4GOVSO.js} +13 -13
  24. package/dist/{CustomerLayout-LB2EWG2P.js.map → CustomerLayout-JG4GOVSO.js.map} +1 -1
  25. package/dist/{Footer-TTYS7K4V.js → Footer-FV7ZXLY4.js} +13 -13
  26. package/dist/{Footer-TTYS7K4V.js.map → Footer-FV7ZXLY4.js.map} +1 -1
  27. package/dist/{Header-26PWNGDF.js → Header-WQ675B65.js} +6 -6
  28. package/dist/{Header-26PWNGDF.js.map → Header-WQ675B65.js.map} +1 -1
  29. package/dist/{LoyaltyPage-F4QVHJAH.js → LoyaltyPage-SJUUOW3V.js} +14 -14
  30. package/dist/{LoyaltyPage-F4QVHJAH.js.map → LoyaltyPage-SJUUOW3V.js.map} +1 -1
  31. package/dist/{MainMenu-SACYMDKQ.js → MainMenu-SH3YM2CA.js} +7 -7
  32. package/dist/{MainMenu-SACYMDKQ.js.map → MainMenu-SH3YM2CA.js.map} +1 -1
  33. package/dist/{MasterLayout-MVY5N7G6.js → MasterLayout-VJQDAL7N.js} +13 -13
  34. package/dist/{MasterLayout-MVY5N7G6.js.map → MasterLayout-VJQDAL7N.js.map} +1 -1
  35. package/dist/{MobileMenu-DBIJRXTA.js → MobileMenu-JGO33EPX.js} +14 -14
  36. package/dist/{MobileMenu-DBIJRXTA.js.map → MobileMenu-JGO33EPX.js.map} +1 -1
  37. package/dist/{NotificationsPage-TMGF4BQM.js → NotificationsPage-DBXZUQW6.js} +13 -13
  38. package/dist/{NotificationsPage-TMGF4BQM.js.map → NotificationsPage-DBXZUQW6.js.map} +1 -1
  39. package/dist/{OrderSinglePage-NCQR6ADR.js → OrderSinglePage-2ME6HVFH.js} +14 -14
  40. package/dist/{OrderSinglePage-NCQR6ADR.js.map → OrderSinglePage-2ME6HVFH.js.map} +1 -1
  41. package/dist/{OrdersPage-O2LSXL4W.js → OrdersPage-6XMYJQAB.js} +14 -14
  42. package/dist/{OrdersPage-O2LSXL4W.js.map → OrdersPage-6XMYJQAB.js.map} +1 -1
  43. package/dist/{PageSingle-745SGJUG.js → PageSingle-ATWHQBS7.js} +3 -3
  44. package/dist/{PageSingle-745SGJUG.js.map → PageSingle-ATWHQBS7.js.map} +1 -1
  45. package/dist/{ProductDetails-AHYFTGM6.js → ProductDetails-DH2MRJQ2.js} +3 -3
  46. package/dist/{ProductDetails-AHYFTGM6.js.map → ProductDetails-DH2MRJQ2.js.map} +1 -1
  47. package/dist/{ProfilePage-5JUXB5SB.js → ProfilePage-FGJHE5AD.js} +13 -13
  48. package/dist/{ProfilePage-5JUXB5SB.js.map → ProfilePage-FGJHE5AD.js.map} +1 -1
  49. package/dist/{SeoCartWidget-XPPMBCQB.js → SeoCartWidget-ALMYKXRG.js} +13 -13
  50. package/dist/{SeoCartWidget-XPPMBCQB.js.map → SeoCartWidget-ALMYKXRG.js.map} +1 -1
  51. package/dist/{SettingsPage-NFSZ4CKO.js → SettingsPage-K5EM4BLS.js} +13 -13
  52. package/dist/{SettingsPage-NFSZ4CKO.js.map → SettingsPage-K5EM4BLS.js.map} +1 -1
  53. package/dist/{StoreClosedNotification-5XWRDBPA.js → StoreClosedNotification-3NKLFBKL.js} +14 -14
  54. package/dist/{StoreClosedNotification-5XWRDBPA.js.map → StoreClosedNotification-3NKLFBKL.js.map} +1 -1
  55. package/dist/{TestimonialsPage-JHGMJMGG.js → TestimonialsPage-UBRVYDQW.js} +3 -3
  56. package/dist/{TestimonialsPage-JHGMJMGG.js.map → TestimonialsPage-UBRVYDQW.js.map} +1 -1
  57. package/dist/{ThankYouPage-CYCVSBAO.js → ThankYouPage-WPR576XD.js} +13 -13
  58. package/dist/{ThankYouPage-CYCVSBAO.js.map → ThankYouPage-WPR576XD.js.map} +1 -1
  59. package/dist/{WalletPage-2JZ32SNZ.js → WalletPage-ZMTV7GVF.js} +14 -14
  60. package/dist/{WalletPage-2JZ32SNZ.js.map → WalletPage-ZMTV7GVF.js.map} +1 -1
  61. package/dist/{WishlistPage-N3K6MBMC.js → WishlistPage-BRB7RZEF.js} +15 -15
  62. package/dist/{WishlistPage-N3K6MBMC.js.map → WishlistPage-BRB7RZEF.js.map} +1 -1
  63. package/dist/api/apps.js +4 -4
  64. package/dist/api/brands.js +5 -5
  65. package/dist/api/cart.js +5 -5
  66. package/dist/api/category.js +5 -5
  67. package/dist/api/client.js +3 -3
  68. package/dist/api/home.js +4 -4
  69. package/dist/api/loyalty.js +5 -5
  70. package/dist/api/menu.js +4 -4
  71. package/dist/api/notification.js +4 -4
  72. package/dist/api/order.js +5 -5
  73. package/dist/api/page.js +5 -5
  74. package/dist/api/product.js +5 -5
  75. package/dist/api/profile.js +3 -3
  76. package/dist/api/store.js +4 -4
  77. package/dist/api/translations-key.d.ts +17 -0
  78. package/dist/api/translations-key.d.ts.map +1 -1
  79. package/dist/api/translations.d.ts +44 -0
  80. package/dist/api/translations.d.ts.map +1 -1
  81. package/dist/api/translations.js +4 -4
  82. package/dist/api/user.js +4 -4
  83. package/dist/api/wishlist.js +6 -6
  84. package/dist/{chunk-YJJZN5UP.js → chunk-232SREMP.js} +4 -4
  85. package/dist/{chunk-YJJZN5UP.js.map → chunk-232SREMP.js.map} +1 -1
  86. package/dist/{chunk-YJ6ZSGQY.js → chunk-35B7ACNO.js} +3 -3
  87. package/dist/{chunk-YJ6ZSGQY.js.map → chunk-35B7ACNO.js.map} +1 -1
  88. package/dist/{chunk-LKRI35NZ.js → chunk-55NGYH3V.js} +37 -14
  89. package/dist/chunk-55NGYH3V.js.map +1 -0
  90. package/dist/{chunk-XDB2POG3.js → chunk-5EPR726Z.js} +7 -7
  91. package/dist/{chunk-XDB2POG3.js.map → chunk-5EPR726Z.js.map} +1 -1
  92. package/dist/{chunk-WIAPOLEA.js → chunk-AEQ6NRTE.js} +3 -3
  93. package/dist/{chunk-WIAPOLEA.js.map → chunk-AEQ6NRTE.js.map} +1 -1
  94. package/dist/{chunk-36PDYP56.js → chunk-B3Z7WNO5.js} +15 -15
  95. package/dist/{chunk-36PDYP56.js.map → chunk-B3Z7WNO5.js.map} +1 -1
  96. package/dist/{chunk-JDROOL5C.js → chunk-FLAJQXOM.js} +3 -3
  97. package/dist/{chunk-JDROOL5C.js.map → chunk-FLAJQXOM.js.map} +1 -1
  98. package/dist/{chunk-J2GGMK3X.js → chunk-G2UPOKZZ.js} +6 -6
  99. package/dist/{chunk-J2GGMK3X.js.map → chunk-G2UPOKZZ.js.map} +1 -1
  100. package/dist/{chunk-UOALND7V.js → chunk-G5ZVKWD7.js} +4 -4
  101. package/dist/{chunk-UOALND7V.js.map → chunk-G5ZVKWD7.js.map} +1 -1
  102. package/dist/{chunk-GLRXYGYI.js → chunk-GJXCHLKY.js} +3 -3
  103. package/dist/{chunk-GLRXYGYI.js.map → chunk-GJXCHLKY.js.map} +1 -1
  104. package/dist/{chunk-BFZ47MS5.js → chunk-IUZ2IZFK.js} +3 -3
  105. package/dist/{chunk-BFZ47MS5.js.map → chunk-IUZ2IZFK.js.map} +1 -1
  106. package/dist/{chunk-JBNI5ZVG.js → chunk-JMBO6VHQ.js} +3 -3
  107. package/dist/{chunk-JBNI5ZVG.js.map → chunk-JMBO6VHQ.js.map} +1 -1
  108. package/dist/{chunk-K4YT7TOV.js → chunk-JNB2WC5Z.js} +3 -3
  109. package/dist/{chunk-K4YT7TOV.js.map → chunk-JNB2WC5Z.js.map} +1 -1
  110. package/dist/{chunk-TJGYL7GD.js → chunk-JNCLDK5D.js} +5 -5
  111. package/dist/{chunk-TJGYL7GD.js.map → chunk-JNCLDK5D.js.map} +1 -1
  112. package/dist/{chunk-2KU5ANFZ.js → chunk-JR2NYBZS.js} +5 -5
  113. package/dist/{chunk-2KU5ANFZ.js.map → chunk-JR2NYBZS.js.map} +1 -1
  114. package/dist/{chunk-BZ7ZIO33.js → chunk-JVKDYZMW.js} +3 -3
  115. package/dist/{chunk-BZ7ZIO33.js.map → chunk-JVKDYZMW.js.map} +1 -1
  116. package/dist/{chunk-VO5ODVVL.js → chunk-K3WTFB6A.js} +4 -4
  117. package/dist/{chunk-VO5ODVVL.js.map → chunk-K3WTFB6A.js.map} +1 -1
  118. package/dist/{chunk-WFSOVIYU.js → chunk-MFL6R2WL.js} +6 -6
  119. package/dist/{chunk-WFSOVIYU.js.map → chunk-MFL6R2WL.js.map} +1 -1
  120. package/dist/{chunk-YNY5P2DG.js → chunk-MJGW6YZQ.js} +3 -3
  121. package/dist/{chunk-YNY5P2DG.js.map → chunk-MJGW6YZQ.js.map} +1 -1
  122. package/dist/chunk-MU4ACHQU.js +14 -0
  123. package/dist/{chunk-3H27IEME.js.map → chunk-MU4ACHQU.js.map} +1 -1
  124. package/dist/{chunk-675NJ2XP.js → chunk-NQHOKDDF.js} +4 -4
  125. package/dist/{chunk-675NJ2XP.js.map → chunk-NQHOKDDF.js.map} +1 -1
  126. package/dist/{chunk-RJAV554G.js → chunk-NXJJ3IP3.js} +4 -4
  127. package/dist/{chunk-RJAV554G.js.map → chunk-NXJJ3IP3.js.map} +1 -1
  128. package/dist/{chunk-MQBGRVOJ.js → chunk-ODNUSQLR.js} +4 -4
  129. package/dist/{chunk-MQBGRVOJ.js.map → chunk-ODNUSQLR.js.map} +1 -1
  130. package/dist/{chunk-KTOKX3GC.js → chunk-POATRFUM.js} +3 -3
  131. package/dist/{chunk-KTOKX3GC.js.map → chunk-POATRFUM.js.map} +1 -1
  132. package/dist/{chunk-F4MMWEII.js → chunk-POLSCD5O.js} +4 -4
  133. package/dist/{chunk-F4MMWEII.js.map → chunk-POLSCD5O.js.map} +1 -1
  134. package/dist/{chunk-O2YV5DAL.js → chunk-PU6G2UIX.js} +4 -4
  135. package/dist/{chunk-O2YV5DAL.js.map → chunk-PU6G2UIX.js.map} +1 -1
  136. package/dist/{chunk-2OX3JML4.js → chunk-RA6FYDRQ.js} +4 -4
  137. package/dist/{chunk-2OX3JML4.js.map → chunk-RA6FYDRQ.js.map} +1 -1
  138. package/dist/{chunk-HOE2P2HU.js → chunk-RL4VZU3P.js} +3 -3
  139. package/dist/{chunk-HOE2P2HU.js.map → chunk-RL4VZU3P.js.map} +1 -1
  140. package/dist/{chunk-TX6ZP4FF.js → chunk-RLNBEDA4.js} +3 -3
  141. package/dist/{chunk-TX6ZP4FF.js.map → chunk-RLNBEDA4.js.map} +1 -1
  142. package/dist/{chunk-HVHFTVZT.js → chunk-RQOCJRHY.js} +4 -4
  143. package/dist/{chunk-HVHFTVZT.js.map → chunk-RQOCJRHY.js.map} +1 -1
  144. package/dist/{chunk-7BWZYECG.js → chunk-SDXKGWMC.js} +5 -5
  145. package/dist/{chunk-7BWZYECG.js.map → chunk-SDXKGWMC.js.map} +1 -1
  146. package/dist/{chunk-IE2FU6BR.js → chunk-SHHF6XXL.js} +55 -5
  147. package/dist/chunk-SHHF6XXL.js.map +1 -0
  148. package/dist/{chunk-S7XYSF4X.js → chunk-UFOSIY3P.js} +4 -4
  149. package/dist/{chunk-S7XYSF4X.js.map → chunk-UFOSIY3P.js.map} +1 -1
  150. package/dist/{chunk-RBVFIPX2.js → chunk-UIC4FUJM.js} +4 -4
  151. package/dist/{chunk-RBVFIPX2.js.map → chunk-UIC4FUJM.js.map} +1 -1
  152. package/dist/{chunk-YSFWVMBA.js → chunk-WD7HOPT5.js} +3 -3
  153. package/dist/{chunk-YSFWVMBA.js.map → chunk-WD7HOPT5.js.map} +1 -1
  154. package/dist/{chunk-PSRSWHML.js → chunk-WOFJ3WBJ.js} +4 -4
  155. package/dist/{chunk-PSRSWHML.js.map → chunk-WOFJ3WBJ.js.map} +1 -1
  156. package/dist/{chunk-3R7YKSO6.js → chunk-XJDQHKV6.js} +5 -5
  157. package/dist/{chunk-3R7YKSO6.js.map → chunk-XJDQHKV6.js.map} +1 -1
  158. package/dist/{chunk-SOPK72TP.js → chunk-YDU4K4M7.js} +6 -3
  159. package/dist/chunk-YDU4K4M7.js.map +1 -0
  160. package/dist/components/cart/index.js +1 -1
  161. package/dist/components/common/index.js +1 -1
  162. package/dist/components/drawer/index.js +11 -11
  163. package/dist/components/home/index.js +14 -14
  164. package/dist/components/layout/index.js +5 -5
  165. package/dist/components/product/index.js +12 -12
  166. package/dist/components/store/index.js +13 -13
  167. package/dist/document-class-QLK3MMHA.js +25 -0
  168. package/dist/{document-class-YYEVAIVJ.js.map → document-class-QLK3MMHA.js.map} +1 -1
  169. package/dist/hooks/index.js +11 -11
  170. package/dist/hooks/useGtm.js +11 -11
  171. package/dist/hooks/useMoney.js +11 -11
  172. package/dist/hooks/useStore.js +11 -11
  173. package/dist/hooks/useUser.js +5 -5
  174. package/dist/index.js +11 -11
  175. package/dist/{navigation-4VEQUXHI.js → navigation-7ZIYPM45.js} +5 -5
  176. package/dist/{navigation-4VEQUXHI.js.map → navigation-7ZIYPM45.js.map} +1 -1
  177. package/dist/{navigation-MVKZENRD.js → navigation-ZRCCK54S.js} +4 -4
  178. package/dist/{navigation-MVKZENRD.js.map → navigation-ZRCCK54S.js.map} +1 -1
  179. package/dist/{not-found-JGDH4AQ3.js → not-found-M6PIZHJW.js} +14 -14
  180. package/dist/{not-found-JGDH4AQ3.js.map → not-found-M6PIZHJW.js.map} +1 -1
  181. package/dist/providers/index.js +11 -11
  182. package/dist/routes/account/orders.js +6 -6
  183. package/dist/routes/account.js +15 -15
  184. package/dist/routes/blog.js +10 -10
  185. package/dist/routes/brands.js +6 -6
  186. package/dist/routes/cart.js +19 -19
  187. package/dist/routes/home.js +16 -16
  188. package/dist/routes/index.js +3 -3
  189. package/dist/routes/loyalty.js +6 -6
  190. package/dist/routes/page.js +6 -6
  191. package/dist/routes/product-listing.js +16 -16
  192. package/dist/routes/product.js +14 -14
  193. package/dist/routes/root/beforeLoad.d.ts.map +1 -1
  194. package/dist/routes/seo-redirects.js +3 -3
  195. package/dist/routes/testimonials.js +2 -2
  196. package/dist/routes/thank-you.js +6 -6
  197. package/dist/skeleton.js +16 -16
  198. package/dist/tanstack.js +15 -15
  199. package/dist/types/index.d.ts +15 -0
  200. package/dist/types/index.d.ts.map +1 -1
  201. package/dist/utils/index.js +4 -4
  202. package/dist/vite/index.js +2 -2
  203. package/package.json +1 -1
  204. package/dist/chunk-3H27IEME.js +0 -14
  205. package/dist/chunk-IE2FU6BR.js.map +0 -1
  206. package/dist/chunk-LKRI35NZ.js.map +0 -1
  207. package/dist/chunk-SOPK72TP.js.map +0 -1
  208. package/dist/document-class-YYEVAIVJ.js +0 -25
@@ -1,6 +1,6 @@
1
- import { orThrow } from './chunk-JDROOL5C.js';
2
- import { getActiveScope, api } from './chunk-F4MMWEII.js';
3
- import { getTwilightContext } from './chunk-SOPK72TP.js';
1
+ import { orThrow } from './chunk-FLAJQXOM.js';
2
+ import { getActiveScope, api } from './chunk-POLSCD5O.js';
3
+ import { getTwilightContext } from './chunk-YDU4K4M7.js';
4
4
  import { defaultShouldDehydrateQuery, queryOptions } from '@tanstack/react-query';
5
5
 
6
6
  function queryClientOrNull() {
@@ -174,5 +174,5 @@ var product = {
174
174
  };
175
175
 
176
176
  export { getProductPreview, isProductPreviewQuery, product, productDetailQueryKey, productPreviewQueryKey, rememberProductPreview, shouldDehydrateQuery };
177
- //# sourceMappingURL=chunk-3R7YKSO6.js.map
178
- //# sourceMappingURL=chunk-3R7YKSO6.js.map
177
+ //# sourceMappingURL=chunk-XJDQHKV6.js.map
178
+ //# sourceMappingURL=chunk-XJDQHKV6.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/api/product.ts"],"names":["product"],"mappings":";;;;;AA+FA,SAAS,iBAAA,GAAoB;AAC3B,EAAA,IAAI;AACF,IAAA,MAAM,WAAA,GAAc,oBAAmB,CAAE,WAAA;AACzC,IAAA,OAAO,WAAA,IAAe,OAAO,WAAA,CAAY,YAAA,KAAiB,aAAa,WAAA,GAAc,IAAA;AAAA,EACvF,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAEO,SAAS,uBAAuB,EAAA,EAAY;AACjD,EAAA,OAAO,CAAC,UAAA,EAAY,SAAA,EAAW,MAAA,CAAO,EAAE,GAAG,EAAE,KAAA,EAAO,cAAA,EAAe,EAAG,CAAA;AACxE;AAEO,SAAS,sBAAsB,EAAA,EAAY;AAChD,EAAA,OAAO,CAAC,YAAY,QAAA,EAAU,EAAA,EAAI,EAAE,KAAA,EAAO,cAAA,IAAkB,CAAA;AAC/D;AAGO,SAAS,sBAAsB,KAAA,EAAkD;AACtF,EAAA,OAAO,KAAA,CAAM,SAAS,CAAC,CAAA,KAAM,cAAc,KAAA,CAAM,QAAA,CAAS,CAAC,CAAA,KAAM,SAAA;AACnE;AAMO,SAAS,qBACd,KAAA,EACS;AACT,EAAA,OACE,CAAC,sBAAsB,KAAK,CAAA,KAC3B,4BAA4B,KAAK,CAAA,IAAK,KAAA,CAAM,KAAA,CAAM,MAAA,KAAW,SAAA,CAAA;AAElE;AAOO,SAAS,uBAAuBA,QAAAA,EAAwB;AAC7D,EAAA,MAAM,cAAc,iBAAA,EAAkB;AACtC,EAAA,IAAI,CAAC,WAAA,IAAeA,QAAAA,EAAS,EAAA,IAAM,IAAA,EAAM;AACzC,EAAA,MAAM,EAAA,GAAK,MAAA,CAAOA,QAAAA,CAAQ,EAAE,CAAA;AAC5B,EAAA,IAAI,YAAY,aAAA,CAAc,qBAAA,CAAsB,EAAE,CAAC,CAAA,EAAG,WAAW,SAAA,EAAW;AAChF,EAAA,WAAA,CAAY,YAAA,CAAa,sBAAA,CAAuB,EAAE,CAAA,EAAGA,QAAO,CAAA;AAC9D;AAEA,SAAS,kBAAkB,QAAA,EAA8D;AACvF,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,QAAA,CAAS,MAAA,GAAS,CAAC,CAAA;AACzC,EAAA,IAAI,IAAA,IAAQ,QAAQ,OAAO,IAAA,KAAS,YAAY,EAAE,OAAA,IAAW,OAAO,OAAO,MAAA;AAC3E,EAAA,OAAQ,IAAA,CAAuC,KAAA;AACjD;AAEA,SAAS,WAAA,CAAY,GAAmC,CAAA,EAAgC;AACtF,EAAA,IAAI,CAAA,KAAM,QAAW,OAAO,KAAA;AAC5B,EAAA,IAAI,CAAA,KAAM,GAAG,OAAO,IAAA;AACpB,EAAA,IAAI,KAAK,IAAA,IAAQ,CAAA,IAAK,MAAM,OAAO,CAAA,IAAK,QAAQ,CAAA,IAAK,IAAA;AACrD,EAAA,OACE,CAAA,CAAE,EAAA,KAAO,CAAA,CAAE,EAAA,IACX,EAAE,IAAA,KAAS,CAAA,CAAE,IAAA,IACb,CAAA,CAAE,aAAA,KAAkB,CAAA,CAAE,aAAA,IACtB,CAAA,CAAE,oBAAoB,CAAA,CAAE,eAAA;AAE5B;AAEA,IAAM,mBAAA,GAAsB;AAAA,EAC1B,CAAC,YAAY,MAAM,CAAA;AAAA,EACnB,CAAC,YAAY,MAAM;AACrB,CAAA;AAMA,SAAS,wBAAA,CACP,aACA,EAAA,EACqB;AACrB,EAAA,MAAM,QAAQ,cAAA,EAAe;AAC7B,EAAA,IAAI,KAAA;AACJ,EAAA,KAAA,MAAW,UAAU,mBAAA,EAAqB;AACxC,IAAA,KAAA,MAAW,CAAC,QAAA,EAAU,IAAI,CAAA,IAAK,YAAY,cAAA,CAAmC;AAAA,MAC5E,QAAA,EAAU;AAAA,KACX,CAAA,EAAG;AACF,MAAA,IAAI,CAAC,WAAA,CAAY,iBAAA,CAAkB,QAAQ,CAAA,EAAG,KAAK,CAAA,EAAG;AACtD,MAAA,KAAA,MAAW,IAAA,IAAQ,IAAA,EAAM,KAAA,IAAS,EAAC,EAAG;AACpC,QAAA,IAAI,IAAA,EAAM,MAAM,IAAA,EAAM;AACtB,QAAA,sBAAA,CAAuB,IAAI,CAAA;AAC3B,QAAA,IAAI,CAAC,KAAA,IAAS,MAAA,CAAO,KAAK,EAAE,CAAA,KAAM,IAAI,KAAA,GAAQ,IAAA;AAAA,MAChD;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,KAAA;AACT;AAMO,SAAS,kBAAkB,EAAA,EAAiC;AACjE,EAAA,MAAM,cAAc,iBAAA,EAAkB;AACtC,EAAA,IAAI,CAAC,aAAa,OAAO,MAAA;AACzB,EAAA,MAAM,GAAA,GAAM,OAAO,EAAE,CAAA;AACrB,EAAA,OACE,WAAA,CAAY,aAAa,sBAAA,CAAuB,GAAG,CAAC,CAAA,IACpD,wBAAA,CAAyB,aAAa,GAAG,CAAA;AAE7C;AAEA,SAAS,wBAAwB,KAAA,EAAwB;AACvD,EAAA,KAAA,MAAW,IAAA,IAAQ,KAAA,EAAO,sBAAA,CAAuB,IAAI,CAAA;AACvD;AAMA,SAAS,mBACP,YAAA,EACA,EAAE,MAAA,EAAQ,WAAA,EAAa,SAAQ,EACzB;AACN,EAAA,IAAI,WAAW,QAAA,EAAU;AACvB,IAAA,MAAM,QAAQ,OAAA,IAAW,WAAA;AACzB,IAAA,IAAI,UAAU,MAAA,EAAW,YAAA,CAAa,IAAI,SAAA,EAAW,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,EACpE,CAAA,MAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,WAAW,CAAA,EAAG;AACrC,IAAA,WAAA,CAAY,OAAA,CAAQ,CAAC,GAAA,KAAQ,YAAA,CAAa,OAAO,gBAAA,EAAkB,MAAA,CAAO,GAAG,CAAC,CAAC,CAAA;AAAA,EACjF,CAAA,MAAA,IAAW,gBAAgB,MAAA,EAAW;AACpC,IAAA,YAAA,CAAa,MAAA,CAAO,gBAAA,EAAkB,MAAA,CAAO,WAAW,CAAC,CAAA;AAAA,EAC3D;AACF;AAMA,SAAS,kBAAA,CACP,YAAA,EACA,OAAA,EACA,SAAA,GAAY,SAAA,EACN;AACN,EAAA,IAAI,CAAC,OAAA,EAAS;AACd,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,EAAG;AAClD,IAAA,MAAM,OAAA,GAAU,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,CAAA;AACnC,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,MAAA,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,KAAS,YAAA,CAAa,MAAA,CAAO,CAAA,EAAG,OAAO,CAAA,EAAA,CAAA,EAAM,MAAA,CAAO,IAAI,CAAC,CAAC,CAAA;AAAA,IAC3E,CAAA,MAAA,IAAW,KAAA,KAAU,IAAA,IAAQ,OAAO,UAAU,QAAA,EAAU;AACtD,MAAA,kBAAA,CAAmB,YAAA,EAAc,OAAO,OAAO,CAAA;AAAA,IACjD,CAAA,MAAA,IAAW,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAA,EAAM;AAChD,MAAA,YAAA,CAAa,MAAA,CAAO,OAAA,EAAS,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,IAC5C;AAAA,EACF;AACF;AAGA,SAAS,kBAAkB,OAAA,EAA+C;AACxE,EAAA,MAAM,MAAM,OAAA,EAAS,WAAA;AACrB,EAAA,IAAI,GAAA,KAAQ,MAAA,IAAa,GAAA,KAAQ,IAAA,EAAM,OAAO,IAAA;AAC9C,EAAA,MAAM,GAAA,GAAM,KAAA,CAAM,OAAA,CAAQ,GAAG,IAAI,GAAA,GAAM,OAAO,GAAA,KAAQ,QAAA,GAAW,MAAA,CAAO,MAAA,CAAO,GAAG,CAAA,GAAI,CAAC,GAAG,CAAA;AAC1F,EAAA,OAAO,GAAA,CAAI,IAAI,MAAM,CAAA;AACvB;AAIO,IAAM,OAAA,GAAU;AAAA,EACrB,IAAA,EAAM,OAAO,EAAA,KAAiC;AAC5C,IAAA,MAAM,QAAA,GAAW,YAAY,EAAE,CAAA,wNAAA,CAAA;AAC/B,IAAA,MAAM,EAAE,MAAK,GAAI,MAAM,IAAI,GAAA,CAAI,QAAQ,EAAE,IAAA,EAAwB;AACjE,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AAAA,EAEA,aAAa,CAAC,EAAA,KAAiC,QAAQ,OAAA,CAAQ,IAAA,CAAK,EAAE,CAAC,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQvE,IAAA,EAAM,OAAO,MAAA,KAA4D;AACvE,IAAA,MAAM;AAAA,MACJ,MAAA;AAAA,MACA,WAAA;AAAA,MACA,OAAA;AAAA,MACA,IAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAA,GAAU,EAAA;AAAA,MACV,IAAA;AAAA,MACA,UAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA,KACF,GAAI,MAAA;AAGJ,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,IAAA,YAAA,CAAa,GAAA,CAAI,UAAU,MAAM,CAAA;AAEjC,IAAA,IAAI,SAAS,MAAA,EAAW,YAAA,CAAa,IAAI,MAAA,EAAQ,MAAA,CAAO,IAAI,CAAC,CAAA;AAC7D,IAAA,YAAA,CAAa,GAAA,CAAI,UAAA,EAAY,MAAA,CAAO,OAAO,CAAC,CAAA;AAE5C,IAAA,kBAAA,CAAmB,YAAA,EAAc;AAAA,MAC/B,MAAA;AAAA,MACA,WAAA,EAAc,MAAA,KAAW,YAAA,IAAgB,iBAAA,CAAkB,OAAO,CAAA,IAAM,WAAA;AAAA,MACxE;AAAA,KACD,CAAA;AACD,IAAA,kBAAA,CAAmB,cAAc,OAAO,CAAA;AAGxC,IAAA,IAAI,eAAe,MAAA,EAAW;AAC5B,MAAA,YAAA,CAAa,GAAA,CAAI,YAAA,EAAc,UAAA,GAAa,GAAA,GAAM,GAAG,CAAA;AAAA,IACvD;AAGA,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,YAAA,CAAa,GAAA,CAAI,QAAQ,IAAI,CAAA;AAAA,IAC/B;AAGA,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,YAAA,CAAa,GAAA,CAAI,UAAU,MAAM,CAAA;AAAA,IACnC;AAGA,IAAA,MAAM,UAAmC,EAAC;AAC1C,IAAA,IAAI,MAAA,UAAgB,MAAA,GAAS,MAAA;AAE7B,IAAA,MAAM,QAAA,GAAW,MAAM,GAAA,CACpB,GAAA,CAAI,CAAA,SAAA,EAAY,YAAA,CAAa,QAAA,EAAU,CAAA,CAAA,EAAI,OAAc,CAAA,CACzD,IAAA,EAA2B;AAE9B,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,IAAA,IAAQ,EAAC;AAChC,IAAA,uBAAA,CAAwB,KAAK,CAAA;AAE7B,IAAA,OAAO;AAAA,MACL,KAAA;AAAA,MACA,IAAA,EAAM,QAAA,CAAS,MAAA,EAAQ,IAAA,IAAQ,IAAA;AAAA,MAC/B,SAAS,QAAA,CAAS;AAAA,KACpB;AAAA,EACF,CAAA;AAAA,EAEA,OAAA,EAAS;AAAA,IACP,MAAA,EAAQ,CAAC,EAAA,KACP,YAAA,CAAa;AAAA;AAAA,MAEX,QAAA,EAAU,sBAAsB,EAAE,CAAA;AAAA,MAClC,OAAA,EAAS,MAAM,OAAA,CAAQ,IAAA,CAAK,EAAE,CAAA;AAAA;AAAA;AAAA,MAG9B,eAAA,EAAiB,MAAM,iBAAA,CAAkB,EAAE;AAAA,KAC5C,CAAA;AAAA,IACH,IAAA,EAAM,CAAC,MAAA,KACL,YAAA,CAAa;AAAA;AAAA,MAEX,QAAA,EAAU,CAAC,UAAA,EAAY,MAAA,EAAQ,QAAQ,EAAE,KAAA,EAAO,cAAA,EAAe,EAAG,CAAA;AAAA,MAClE,OAAA,EAAS,CAAC,EAAE,MAAA,EAAO,KAAM,OAAA,CAAQ,IAAA,CAAK,EAAE,GAAG,MAAA,EAAQ,MAAA,EAAQ;AAAA,KAC5D;AAAA;AAEP","file":"chunk-3R7YKSO6.js","sourcesContent":["import { queryOptions, defaultShouldDehydrateQuery } from '@tanstack/react-query';\nimport { api, getActiveScope } from './client';\nimport type { Product } from '../types';\nimport type { Pagination, PaginatedResult } from './types';\nimport { orThrow } from '../providers/NavigationProvider';\nimport { getTwilightContext } from '../twilight/context';\nimport type { ActiveScope } from '../utils/cookies';\n\n// ===== Filter Types =====\n\nexport interface FilterValue {\n key?: string;\n count?: number;\n value?: string;\n from?: number | '*';\n to?: number | '*';\n}\n\nexport interface Filter {\n key?: string;\n label?: string;\n type?: string;\n values?: FilterValue[];\n max?: number;\n min?: number;\n}\n\n// ===== Product List Types =====\n\nexport type ProductsListSource =\n | 'brands'\n | 'categories'\n | 'json'\n | 'landing-page'\n | 'latest'\n | 'offers'\n | 'recently'\n | 'related'\n | 'selected'\n | 'tags'\n | 'top-rated'\n | 'wishlist'\n | 'search'\n | 'sales'\n | 'reorder'\n | 'best_selling';\n\nexport interface ProductsListParams {\n /** Source type (wishlist, latest, brands, etc.) */\n source: ProductsListSource;\n /**\n * The ids the source reads, as an array: category, brand, tag or product ids\n * (`sourceValue: [708738657]`). Sent as `source_value[]`.\n */\n sourceValue?: string | number | number[] | null;\n /** The search words when `source` is `'search'`. Sent as `keyword`; other sources ignore it. */\n keyword?: string;\n /** Page number for offset-based pagination */\n page?: number;\n /** Cursor for cursor-based pagination (from previous response) */\n cursor?: string | null;\n /** Items per page (default: 15) */\n perPage?: number;\n /** Sort option */\n sort?: string;\n /** Enable filters on the response */\n filterable?: boolean;\n /** Applied `<salla-filters>` selection (the `salla-filters::changed` payload). */\n filters?: ProductListFilters;\n /** Abort signal for cancellation */\n signal?: AbortSignal;\n}\n\n/** One `<salla-filters>` value: a scalar, a list, or a nested `{ sub-key: value }` (variants). */\nexport type ProductListFilterValue =\n string | number | Array<string | number> | { [key: string]: ProductListFilterValue };\n\n/** A `<salla-filters>` selection, i.e. the `salla-filters::changed` payload. */\nexport type ProductListFilters = Record<string, ProductListFilterValue>;\n\nexport type ProductsListResult = PaginatedResult<Product> & {\n filters?: Filter[];\n};\n\nexport interface ProductsListResponse {\n data: Product[];\n cursor?: Pagination;\n filters?: Filter[];\n}\n\n// ===== List-card preview cache =====\n// List payloads are a subset of details (one `image`, no `options` / `images[]`).\n// They live on a separate query key so they can paint a sheet/quick-view without\n// being treated as a successful `products/{id}/details` fetch.\n\nfunction queryClientOrNull() {\n try {\n const queryClient = getTwilightContext().queryClient;\n return queryClient && typeof queryClient.setQueryData === 'function' ? queryClient : null;\n } catch {\n return null;\n }\n}\n\nexport function productPreviewQueryKey(id: string) {\n return ['products', 'preview', String(id), { scope: getActiveScope() }] as const;\n}\n\nexport function productDetailQueryKey(id: string) {\n return ['products', 'detail', id, { scope: getActiveScope() }] as const;\n}\n\n/** True when this query is a list-card stand-in — skip it when dehydrating SSR. */\nexport function isProductPreviewQuery(query: { queryKey: readonly unknown[] }): boolean {\n return query.queryKey[0] === 'products' && query.queryKey[1] === 'preview';\n}\n\n/**\n * Default dehydrate policy (success) plus pending SSR-stream queries, minus\n * list-card stand-ins. Replacing the default wholesale would ship error states.\n */\nexport function shouldDehydrateQuery(\n query: Parameters<typeof defaultShouldDehydrateQuery>[0]\n): boolean {\n return (\n !isProductPreviewQuery(query) &&\n (defaultShouldDehydrateQuery(query) || query.state.status === 'pending')\n );\n}\n\n/**\n * Remember a list/card product so `product.queries.detail(id)` can use it as\n * `placeholderData` while details load. No-op if details for this id are already\n * cached. Themes that fetch products outside `product.list` should call this.\n */\nexport function rememberProductPreview(product: Product): void {\n const queryClient = queryClientOrNull();\n if (!queryClient || product?.id == null) return;\n const id = String(product.id);\n if (queryClient.getQueryState(productDetailQueryKey(id))?.status === 'success') return;\n queryClient.setQueryData(productPreviewQueryKey(id), product);\n}\n\nfunction scopeFromQueryKey(queryKey: readonly unknown[]): ActiveScope | null | undefined {\n const last = queryKey[queryKey.length - 1];\n if (last == null || typeof last !== 'object' || !('scope' in last)) return undefined;\n return (last as { scope: ActiveScope | null }).scope;\n}\n\nfunction isSameScope(a: ActiveScope | null | undefined, b: ActiveScope | null): boolean {\n if (a === undefined) return false;\n if (a === b) return true;\n if (a == null || b == null) return a == null && b == null;\n return (\n a.id === b.id &&\n a.type === b.type &&\n a.allocation_id === b.allocation_id &&\n a.allocation_type === b.allocation_type\n );\n}\n\nconst LIST_QUERY_PREFIXES = [\n ['products', 'list'],\n ['wishlist', 'list'],\n] as const;\n\n/**\n * Rebuild the scoped preview index from hydrated list/wishlist queries (SSR\n * dehydrate drops preview keys). Subsequent lookups hit `productPreviewQueryKey`.\n */\nfunction findProductInScopedLists(\n queryClient: NonNullable<ReturnType<typeof queryClientOrNull>>,\n id: string\n): Product | undefined {\n const scope = getActiveScope();\n let found: Product | undefined;\n for (const prefix of LIST_QUERY_PREFIXES) {\n for (const [queryKey, data] of queryClient.getQueriesData<ProductsListResult>({\n queryKey: prefix,\n })) {\n if (!isSameScope(scopeFromQueryKey(queryKey), scope)) continue;\n for (const item of data?.items ?? []) {\n if (item?.id == null) continue;\n rememberProductPreview(item);\n if (!found && String(item.id) === id) found = item;\n }\n }\n }\n return found;\n}\n\n/**\n * List-card product for `placeholderData`. Prefers the preview key; if that was\n * dropped on SSR dehydrate, rebuilds it from the current-scope list/wishlist.\n */\nexport function getProductPreview(id: string): Product | undefined {\n const queryClient = queryClientOrNull();\n if (!queryClient) return undefined;\n const key = String(id);\n return (\n queryClient.getQueryData(productPreviewQueryKey(key)) ??\n findProductInScopedLists(queryClient, key)\n );\n}\n\nfunction rememberProductPreviews(items: Product[]): void {\n for (const item of items) rememberProductPreview(item);\n}\n\n/**\n * Search sends its words as `keyword` (a `sourceValue` string is still read there, as before);\n * every other source sends its ids as `source_value[]`, which the API requires as an array.\n */\nfunction appendSourceParams(\n searchParams: URLSearchParams,\n { source, sourceValue, keyword }: Pick<ProductsListParams, 'source' | 'sourceValue' | 'keyword'>\n): void {\n if (source === 'search') {\n const words = keyword ?? sourceValue;\n if (words !== undefined) searchParams.set('keyword', String(words));\n } else if (Array.isArray(sourceValue)) {\n sourceValue.forEach((val) => searchParams.append('source_value[]', String(val)));\n } else if (sourceValue !== undefined) {\n searchParams.append('source_value[]', String(sourceValue));\n }\n}\n\n/**\n * Sends an applied filter selection the way the SDK's `<salla-products-list>` does:\n * `filters[key]=v`, `filters[key][]=v` or `filters[key][sub]=v`.\n */\nfunction appendFilterParams(\n searchParams: URLSearchParams,\n filters?: Record<string, ProductListFilterValue>,\n parentKey = 'filters'\n): void {\n if (!filters) return;\n for (const [key, value] of Object.entries(filters)) {\n const fullKey = `${parentKey}[${key}]`;\n if (Array.isArray(value)) {\n value.forEach((item) => searchParams.append(`${fullKey}[]`, String(item)));\n } else if (value !== null && typeof value === 'object') {\n appendFilterParams(searchParams, value, fullKey);\n } else if (value !== undefined && value !== null) {\n searchParams.append(fullKey, String(value));\n }\n }\n}\n\n/** A `category_id` filter replaces the page's category as the list source (as in the SDK). */\nfunction categoryFilterIds(filters?: ProductListFilters): number[] | null {\n const raw = filters?.category_id;\n if (raw === undefined || raw === null) return null;\n const ids = Array.isArray(raw) ? raw : typeof raw === 'object' ? Object.values(raw) : [raw];\n return ids.map(Number);\n}\n\n// ===== API Functions =====\n\nexport const product = {\n find: async (id: string): Promise<Product> => {\n const endpoint = `products/${id}/details?with[]=images&with[]=category&with[]=rating&with[]=notify_availability&with[]=tags&with[]=brand&with[]=options&with[]=skus&with[]=skus_availability&with[]=included_products&with[]=bundle&with[]=sold_quantity`;\n const { data } = await api.get(endpoint).json<{ data: Product }>();\n return data;\n },\n\n findOrThrow: (id: string): Promise<Product> => orThrow(product.find(id)),\n\n /**\n * Fetch products list with pagination support\n * Used by native ProductsList component for SSR loaders\n *\n * API pattern: GET /products?source=wishlist&page=1\n */\n list: async (params: ProductsListParams): Promise<ProductsListResult> => {\n const {\n source,\n sourceValue,\n keyword,\n page,\n cursor,\n perPage = 16,\n sort,\n filterable,\n filters,\n signal,\n } = params;\n\n // Build URL with query parameters\n const searchParams = new URLSearchParams();\n searchParams.set('source', source);\n // Only send page when explicitly provided — cursor-based callers omit it entirely\n if (page !== undefined) searchParams.set('page', String(page));\n searchParams.set('per_page', String(perPage));\n\n appendSourceParams(searchParams, {\n source,\n sourceValue: (source === 'categories' && categoryFilterIds(filters)) || sourceValue,\n keyword,\n });\n appendFilterParams(searchParams, filters);\n\n // Add filterable parameter\n if (filterable !== undefined) {\n searchParams.set('filterable', filterable ? '1' : '0');\n }\n\n // Add sort parameter\n if (sort) {\n searchParams.set('sort', sort);\n }\n\n // Add cursor for cursor-based pagination\n if (cursor) {\n searchParams.set('cursor', cursor);\n }\n\n // Make the request\n const options: Record<string, unknown> = {};\n if (signal) options.signal = signal;\n\n const response = await api\n .get(`products?${searchParams.toString()}`, options as any)\n .json<ProductsListResponse>();\n\n const items = response.data ?? [];\n rememberProductPreviews(items);\n\n return {\n items,\n next: response.cursor?.next ?? null,\n filters: response.filters,\n };\n },\n\n queries: {\n detail: (id: string) =>\n queryOptions({\n // Stock and availability are resolved per branch allocation — same as the list.\n queryKey: productDetailQueryKey(id),\n queryFn: () => product.find(id),\n // List-card product, if one was remembered. Not written as the detail\n // cache entry — `queryFn` still hits products/{id}/details.\n placeholderData: () => getProductPreview(id),\n }),\n list: (params: Omit<ProductsListParams, 'signal'>) =>\n queryOptions({\n // Scope (branch) varies product availability — key must include it.\n queryKey: ['products', 'list', params, { scope: getActiveScope() }],\n queryFn: ({ signal }) => product.list({ ...params, signal }),\n }),\n },\n};\n"]}
1
+ {"version":3,"sources":["../src/api/product.ts"],"names":["product"],"mappings":"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","file":"chunk-XJDQHKV6.js","sourcesContent":["import { queryOptions, defaultShouldDehydrateQuery } from '@tanstack/react-query';\nimport { api, getActiveScope } from './client';\nimport type { Product } from '../types';\nimport type { Pagination, PaginatedResult } from './types';\nimport { orThrow } from '../providers/NavigationProvider';\nimport { getTwilightContext } from '../twilight/context';\nimport type { ActiveScope } from '../utils/cookies';\n\n// ===== Filter Types =====\n\nexport interface FilterValue {\n key?: string;\n count?: number;\n value?: string;\n from?: number | '*';\n to?: number | '*';\n}\n\nexport interface Filter {\n key?: string;\n label?: string;\n type?: string;\n values?: FilterValue[];\n max?: number;\n min?: number;\n}\n\n// ===== Product List Types =====\n\nexport type ProductsListSource =\n | 'brands'\n | 'categories'\n | 'json'\n | 'landing-page'\n | 'latest'\n | 'offers'\n | 'recently'\n | 'related'\n | 'selected'\n | 'tags'\n | 'top-rated'\n | 'wishlist'\n | 'search'\n | 'sales'\n | 'reorder'\n | 'best_selling';\n\nexport interface ProductsListParams {\n /** Source type (wishlist, latest, brands, etc.) */\n source: ProductsListSource;\n /**\n * The ids the source reads, as an array: category, brand, tag or product ids\n * (`sourceValue: [708738657]`). Sent as `source_value[]`.\n */\n sourceValue?: string | number | number[] | null;\n /** The search words when `source` is `'search'`. Sent as `keyword`; other sources ignore it. */\n keyword?: string;\n /** Page number for offset-based pagination */\n page?: number;\n /** Cursor for cursor-based pagination (from previous response) */\n cursor?: string | null;\n /** Items per page (default: 15) */\n perPage?: number;\n /** Sort option */\n sort?: string;\n /** Enable filters on the response */\n filterable?: boolean;\n /** Applied `<salla-filters>` selection (the `salla-filters::changed` payload). */\n filters?: ProductListFilters;\n /** Abort signal for cancellation */\n signal?: AbortSignal;\n}\n\n/** One `<salla-filters>` value: a scalar, a list, or a nested `{ sub-key: value }` (variants). */\nexport type ProductListFilterValue =\n string | number | Array<string | number> | { [key: string]: ProductListFilterValue };\n\n/** A `<salla-filters>` selection, i.e. the `salla-filters::changed` payload. */\nexport type ProductListFilters = Record<string, ProductListFilterValue>;\n\nexport type ProductsListResult = PaginatedResult<Product> & {\n filters?: Filter[];\n};\n\nexport interface ProductsListResponse {\n data: Product[];\n cursor?: Pagination;\n filters?: Filter[];\n}\n\n// ===== List-card preview cache =====\n// List payloads are a subset of details (one `image`, no `options` / `images[]`).\n// They live on a separate query key so they can paint a sheet/quick-view without\n// being treated as a successful `products/{id}/details` fetch.\n\nfunction queryClientOrNull() {\n try {\n const queryClient = getTwilightContext().queryClient;\n return queryClient && typeof queryClient.setQueryData === 'function' ? queryClient : null;\n } catch {\n return null;\n }\n}\n\nexport function productPreviewQueryKey(id: string) {\n return ['products', 'preview', String(id), { scope: getActiveScope() }] as const;\n}\n\nexport function productDetailQueryKey(id: string) {\n return ['products', 'detail', id, { scope: getActiveScope() }] as const;\n}\n\n/** True when this query is a list-card stand-in — skip it when dehydrating SSR. */\nexport function isProductPreviewQuery(query: { queryKey: readonly unknown[] }): boolean {\n return query.queryKey[0] === 'products' && query.queryKey[1] === 'preview';\n}\n\n/**\n * Default dehydrate policy (success) plus pending SSR-stream queries, minus\n * list-card stand-ins. Replacing the default wholesale would ship error states.\n */\nexport function shouldDehydrateQuery(\n query: Parameters<typeof defaultShouldDehydrateQuery>[0]\n): boolean {\n return (\n !isProductPreviewQuery(query) &&\n (defaultShouldDehydrateQuery(query) || query.state.status === 'pending')\n );\n}\n\n/**\n * Remember a list/card product so `product.queries.detail(id)` can use it as\n * `placeholderData` while details load. No-op if details for this id are already\n * cached. Themes that fetch products outside `product.list` should call this.\n */\nexport function rememberProductPreview(product: Product): void {\n const queryClient = queryClientOrNull();\n if (!queryClient || product?.id == null) return;\n const id = String(product.id);\n if (queryClient.getQueryState(productDetailQueryKey(id))?.status === 'success') return;\n queryClient.setQueryData(productPreviewQueryKey(id), product);\n}\n\nfunction scopeFromQueryKey(queryKey: readonly unknown[]): ActiveScope | null | undefined {\n const last = queryKey[queryKey.length - 1];\n if (last == null || typeof last !== 'object' || !('scope' in last)) return undefined;\n return (last as { scope: ActiveScope | null }).scope;\n}\n\nfunction isSameScope(a: ActiveScope | null | undefined, b: ActiveScope | null): boolean {\n if (a === undefined) return false;\n if (a === b) return true;\n if (a == null || b == null) return a == null && b == null;\n return (\n a.id === b.id &&\n a.type === b.type &&\n a.allocation_id === b.allocation_id &&\n a.allocation_type === b.allocation_type\n );\n}\n\nconst LIST_QUERY_PREFIXES = [\n ['products', 'list'],\n ['wishlist', 'list'],\n] as const;\n\n/**\n * Rebuild the scoped preview index from hydrated list/wishlist queries (SSR\n * dehydrate drops preview keys). Subsequent lookups hit `productPreviewQueryKey`.\n */\nfunction findProductInScopedLists(\n queryClient: NonNullable<ReturnType<typeof queryClientOrNull>>,\n id: string\n): Product | undefined {\n const scope = getActiveScope();\n let found: Product | undefined;\n for (const prefix of LIST_QUERY_PREFIXES) {\n for (const [queryKey, data] of queryClient.getQueriesData<ProductsListResult>({\n queryKey: prefix,\n })) {\n if (!isSameScope(scopeFromQueryKey(queryKey), scope)) continue;\n for (const item of data?.items ?? []) {\n if (item?.id == null) continue;\n rememberProductPreview(item);\n if (!found && String(item.id) === id) found = item;\n }\n }\n }\n return found;\n}\n\n/**\n * List-card product for `placeholderData`. Prefers the preview key; if that was\n * dropped on SSR dehydrate, rebuilds it from the current-scope list/wishlist.\n */\nexport function getProductPreview(id: string): Product | undefined {\n const queryClient = queryClientOrNull();\n if (!queryClient) return undefined;\n const key = String(id);\n return (\n queryClient.getQueryData(productPreviewQueryKey(key)) ??\n findProductInScopedLists(queryClient, key)\n );\n}\n\nfunction rememberProductPreviews(items: Product[]): void {\n for (const item of items) rememberProductPreview(item);\n}\n\n/**\n * Search sends its words as `keyword` (a `sourceValue` string is still read there, as before);\n * every other source sends its ids as `source_value[]`, which the API requires as an array.\n */\nfunction appendSourceParams(\n searchParams: URLSearchParams,\n { source, sourceValue, keyword }: Pick<ProductsListParams, 'source' | 'sourceValue' | 'keyword'>\n): void {\n if (source === 'search') {\n const words = keyword ?? sourceValue;\n if (words !== undefined) searchParams.set('keyword', String(words));\n } else if (Array.isArray(sourceValue)) {\n sourceValue.forEach((val) => searchParams.append('source_value[]', String(val)));\n } else if (sourceValue !== undefined) {\n searchParams.append('source_value[]', String(sourceValue));\n }\n}\n\n/**\n * Sends an applied filter selection the way the SDK's `<salla-products-list>` does:\n * `filters[key]=v`, `filters[key][]=v` or `filters[key][sub]=v`.\n */\nfunction appendFilterParams(\n searchParams: URLSearchParams,\n filters?: Record<string, ProductListFilterValue>,\n parentKey = 'filters'\n): void {\n if (!filters) return;\n for (const [key, value] of Object.entries(filters)) {\n const fullKey = `${parentKey}[${key}]`;\n if (Array.isArray(value)) {\n value.forEach((item) => searchParams.append(`${fullKey}[]`, String(item)));\n } else if (value !== null && typeof value === 'object') {\n appendFilterParams(searchParams, value, fullKey);\n } else if (value !== undefined && value !== null) {\n searchParams.append(fullKey, String(value));\n }\n }\n}\n\n/** A `category_id` filter replaces the page's category as the list source (as in the SDK). */\nfunction categoryFilterIds(filters?: ProductListFilters): number[] | null {\n const raw = filters?.category_id;\n if (raw === undefined || raw === null) return null;\n const ids = Array.isArray(raw) ? raw : typeof raw === 'object' ? Object.values(raw) : [raw];\n return ids.map(Number);\n}\n\n// ===== API Functions =====\n\nexport const product = {\n find: async (id: string): Promise<Product> => {\n const endpoint = `products/${id}/details?with[]=images&with[]=category&with[]=rating&with[]=notify_availability&with[]=tags&with[]=brand&with[]=options&with[]=skus&with[]=skus_availability&with[]=included_products&with[]=bundle&with[]=sold_quantity`;\n const { data } = await api.get(endpoint).json<{ data: Product }>();\n return data;\n },\n\n findOrThrow: (id: string): Promise<Product> => orThrow(product.find(id)),\n\n /**\n * Fetch products list with pagination support\n * Used by native ProductsList component for SSR loaders\n *\n * API pattern: GET /products?source=wishlist&page=1\n */\n list: async (params: ProductsListParams): Promise<ProductsListResult> => {\n const {\n source,\n sourceValue,\n keyword,\n page,\n cursor,\n perPage = 16,\n sort,\n filterable,\n filters,\n signal,\n } = params;\n\n // Build URL with query parameters\n const searchParams = new URLSearchParams();\n searchParams.set('source', source);\n // Only send page when explicitly provided — cursor-based callers omit it entirely\n if (page !== undefined) searchParams.set('page', String(page));\n searchParams.set('per_page', String(perPage));\n\n appendSourceParams(searchParams, {\n source,\n sourceValue: (source === 'categories' && categoryFilterIds(filters)) || sourceValue,\n keyword,\n });\n appendFilterParams(searchParams, filters);\n\n // Add filterable parameter\n if (filterable !== undefined) {\n searchParams.set('filterable', filterable ? '1' : '0');\n }\n\n // Add sort parameter\n if (sort) {\n searchParams.set('sort', sort);\n }\n\n // Add cursor for cursor-based pagination\n if (cursor) {\n searchParams.set('cursor', cursor);\n }\n\n // Make the request\n const options: Record<string, unknown> = {};\n if (signal) options.signal = signal;\n\n const response = await api\n .get(`products?${searchParams.toString()}`, options as any)\n .json<ProductsListResponse>();\n\n const items = response.data ?? [];\n rememberProductPreviews(items);\n\n return {\n items,\n next: response.cursor?.next ?? null,\n filters: response.filters,\n };\n },\n\n queries: {\n detail: (id: string) =>\n queryOptions({\n // Stock and availability are resolved per branch allocation — same as the list.\n queryKey: productDetailQueryKey(id),\n queryFn: () => product.find(id),\n // List-card product, if one was remembered. Not written as the detail\n // cache entry — `queryFn` still hits products/{id}/details.\n placeholderData: () => getProductPreview(id),\n }),\n list: (params: Omit<ProductsListParams, 'signal'>) =>\n queryOptions({\n // Scope (branch) varies product availability — key must include it.\n queryKey: ['products', 'list', params, { scope: getActiveScope() }],\n queryFn: ({ signal }) => product.list({ ...params, signal }),\n }),\n },\n};\n"]}
@@ -7,6 +7,9 @@ import { initReactI18next } from 'react-i18next';
7
7
  function translationsQueryKey(locale) {
8
8
  return ["translations", locale];
9
9
  }
10
+ function storeTranslationsQueryKey(storeId, locale) {
11
+ return ["translations", String(storeId), locale];
12
+ }
10
13
 
11
14
  // src/utils/errors.ts
12
15
  var SettingsError = class extends Error {
@@ -214,6 +217,6 @@ function getTwilightContext() {
214
217
  };
215
218
  }
216
219
 
217
- export { SettingsError, createI18nInstance, getRequestStore, getTwilightContext, hasTwilightSettings, runWithTwilightContext, subscribeTwilight, translationsQueryKey, updateTwilightContext };
218
- //# sourceMappingURL=chunk-SOPK72TP.js.map
219
- //# sourceMappingURL=chunk-SOPK72TP.js.map
220
+ export { SettingsError, createI18nInstance, getRequestStore, getTwilightContext, hasTwilightSettings, runWithTwilightContext, storeTranslationsQueryKey, subscribeTwilight, translationsQueryKey, updateTwilightContext };
221
+ //# sourceMappingURL=chunk-YDU4K4M7.js.map
222
+ //# sourceMappingURL=chunk-YDU4K4M7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/api/translations-key.ts","../src/utils/errors.ts","../src/providers/i18n-factory.ts","../src/twilight/context.ts"],"names":[],"mappings":"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","file":"chunk-YDU4K4M7.js","sourcesContent":["/**\n * @fileoverview The translations query key, on its own, importing nothing.\n *\n * Three places read the cached translations — `rootBeforeLoad`, the hydration\n * path in `tanstack/router.tsx`, and the lazy `i18n` accessor in\n * `twilight/context.ts` — and all three have to agree on the key or the\n * hydrated page misses the entry it was just handed and refetches. One\n * definition is the only way to keep that true.\n *\n * It lives here rather than in `api/translations.ts`, where it would naturally\n * sit, because **`twilight/context.ts` cannot afford that module's imports**.\n * `api/translations` pulls in `api/client`, which pulls in `ky`; `context.ts`\n * is imported directly by tests that mock `ky`, and adding that edge made six\n * of them stop being mocked and start issuing real requests to `api.salla.dev`\n * (`tests/routes/rootBeforeLoad.test.ts`, bisected to exactly this import). A\n * leaf module with no imports of its own cannot do that to anyone.\n */\n\n/**\n * @param locale is part of the key because each file on the CDN holds one\n * language. The global file this replaced carried every language and was\n * sliced after the cache, so a key without the locale was correct then and is\n * a wrong-language bug now: `/ar` → `/en` would reuse the Arabic entry.\n */\nexport function translationsQueryKey(locale: string): [string, string] {\n return ['translations', locale];\n}\n\n/**\n * The merchant's own wording for one store and one language.\n *\n * Separate from {@link translationsQueryKey} rather than folded into it,\n * because the two files have different lifetimes and different audiences: the\n * platform's copy is the same object for every store on the CDN, and this one\n * is a single merchant's overrides. Keeping them apart means a store with no\n * overrides never invalidates, refetches or dehydrates anything on its account.\n *\n * @param storeId is `settings.store.id` — the Optimus-encoded numeric id, which\n * is what names the object. It is safe in a key even though the locale-only key\n * deliberately avoids naming a store: that warning is about a store *resolved\n * from the request*, which differs between server and client. This one is read\n * out of the settings payload, so both sides compute it from the same\n * dehydrated data and agree.\n */\nexport function storeTranslationsQueryKey(\n storeId: string | number,\n locale: string\n): [string, string, string] {\n return ['translations', String(storeId), locale];\n}\n","export class SettingsError extends Error {\n constructor(message?: string) {\n super(message ?? 'Store settings could not be loaded.');\n this.name = 'SettingsError';\n }\n}\n","import { createInstance, type i18n as I18nInstance } from 'i18next';\nimport { initReactI18next } from 'react-i18next';\n\nexport type TranslationMessages = Record<string, Record<string, string>>;\n\n/**\n * Creates a new i18next instance for the given locale.\n *\n * @param locale - Active locale code, e.g. `'ar'`\n * @param translations - App translations from the Salla API (store-specific)\n * @param themeTranslations - Bundled theme translations (static defaults)\n */\nexport function createI18nInstance(\n locale: string,\n translations?: TranslationMessages,\n themeTranslations?: TranslationMessages\n): I18nInstance {\n const instance = createInstance();\n const transKey = `${locale}.trans`;\n\n instance.use(initReactI18next).init({\n lng: locale,\n fallbackLng: locale,\n ns: ['app', 'theme'],\n defaultNS: 'app',\n fallbackNS: 'theme',\n resources: {\n [locale]: {\n app: translations?.[transKey] ?? {},\n theme: themeTranslations?.[transKey] ?? {},\n },\n },\n interpolation: { escapeValue: false },\n react: { useSuspense: false },\n keySeparator: '.',\n nsSeparator: false,\n });\n\n return instance;\n}\n\n/**\n * Creates i18n instance for testing\n * @param locale - Locale code (default: 'ar')\n * @param translations - Optional translations\n */\nexport function createTestI18n(locale = 'ar', translations?: TranslationMessages): I18nInstance {\n return createI18nInstance(locale, translations);\n}\n","import type { QueryClient } from '@tanstack/react-query';\nimport type { i18n } from 'i18next';\nimport type { StoreContext } from '../api/store';\nimport type { AppSnippet, AppSettings } from '../api/apps';\nimport { translationsQueryKey } from '../api/translations-key';\nimport { FALLBACK_LOCALE, getLanguageInfo } from '../providers/locale-constants';\nimport type { TranslationMessages } from '../providers/i18n-factory';\nimport { createI18nInstance } from '../providers/i18n-factory';\nimport { SettingsError } from '../utils/errors';\nimport type { ActiveScope } from '../utils/cookies';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface TwilightLocation<TSearch = Record<string, unknown>> {\n href: string;\n pathname: string;\n search: TSearch;\n searchStr: string;\n state: Record<string, unknown>;\n hash: string;\n}\n\nexport interface PageContext {\n slug: string;\n id?: string | number;\n title: string;\n url?: string;\n parent?: { id: string | number; name: string; url: string } | null;\n breadcrumbs?: { name: string; url: string }[];\n}\n\nexport interface TwilightContext {\n queryClient: QueryClient;\n settings: StoreContext;\n locale: string;\n routeId: string;\n location: TwilightLocation;\n authToken: string | null;\n /**\n * The selected market and, once bullet delivery confirmed one, its branch\n * allocation — the full object the SDK sends as `s-scope-*` headers. Seeded from\n * the `scope` cookie on the server; see {@link ActiveScope}.\n */\n scope: ActiveScope | null;\n /** `scope.id`, kept for callers that only need the market. */\n scopeId: string | null;\n /**\n * Which store this request is for, when something other than the hostname says\n * so — the `?storeId=` a preview was opened with, or the cookie remembering it.\n *\n * Null on a live storefront, where the hostname is the answer and there is\n * nothing to carry. See {@link resolveRequestStoreId}.\n */\n storeId: string | null;\n /**\n * Which store the first segment of this request's path named, on a host where\n * the store is the root of every URL: `mtgr-alaatr-2` for\n * `https://preview.salla.design/mtgr-alaatr-2/cart`.\n *\n * Null whenever something else named the store, and on every merchant domain.\n * See {@link resolveRequestStoreBase}.\n */\n storeBase: string | null;\n /**\n * Which version of the theme's settings this request asked for — the\n * `?versionId=` an editor preview or a local dev session was opened with, or\n * the cookie remembering it.\n *\n * Null on an ordinary storefront visit, which is the common case: nothing\n * named a version, so the store's live one is what the API answers with. See\n * {@link resolveRequestVersionId}.\n */\n versionId: string | null;\n /**\n * The host this request arrived on, captured server-side.\n *\n * A theme worker is deployed with no vars and no bindings, so the request is\n * the only thing that knows which storefront it is serving. On the client this\n * is `window.location.host`; on the server nothing else has it.\n */\n requestHost: string | null;\n i18n: i18n;\n dir: 'ltr' | 'rtl';\n page?: PageContext;\n /** Installed apps' snippets, fetched in rootBeforeLoad so AppsSnippets can render CDN\n * <script> tags during SSR (React Query isn't dehydrated here, so useQuery has no SSR data). */\n appsSnippets?: AppSnippet[];\n /** Per-app public `app.*` buckets, fetched in rootBeforeLoad so rootHead can install the\n * `Salla.appScope` factory inline at parse time — ahead of the snippets' onReady callbacks. */\n appsSettings?: AppSettings;\n extras?: Record<string, unknown>;\n}\n\n// ============================================================================\n// Internal Store\n// ============================================================================\n\nconst DEFAULT_LOCATION: TwilightLocation = {\n href: '',\n pathname: '',\n search: {},\n searchStr: '',\n state: {},\n hash: '',\n};\n\ninterface ContextData {\n queryClient: QueryClient;\n settings: StoreContext | null;\n locale: string;\n routeId: string;\n location: TwilightLocation;\n authToken: string | null;\n scope: ActiveScope | null;\n storeId: string | null;\n storeBase: string | null;\n versionId: string | null;\n requestHost: string | null;\n i18n?: i18n;\n page?: PageContext;\n appsSnippets?: AppSnippet[];\n appsSettings?: AppSettings;\n extras?: Record<string, unknown>;\n}\n\nconst DEFAULT_DATA: ContextData = {\n queryClient: null as unknown as QueryClient,\n settings: null,\n locale: FALLBACK_LOCALE,\n routeId: '',\n location: { ...DEFAULT_LOCATION },\n authToken: null,\n scope: null,\n storeId: null,\n storeBase: null,\n versionId: null,\n requestHost: null,\n i18n: undefined,\n page: undefined,\n};\n\n// ============================================================================\n// Storage: AsyncLocalStorage (server) or module-level store (client)\n// ============================================================================\n\ntype AsyncLocalStore<T> = { getStore(): T | undefined; run(val: T, fn: () => unknown): unknown };\n\n// Initialize ALS at module load time for SSR — no race condition\nlet _als: AsyncLocalStore<ContextData> | null = null;\nif (typeof window === 'undefined') {\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const { AsyncLocalStorage } = require('node:async_hooks') as {\n AsyncLocalStorage: new <T>() => AsyncLocalStore<T>;\n };\n _als = new AsyncLocalStorage<ContextData>();\n } catch {\n _als = null;\n }\n}\n\nconst clientStore: ContextData = { ...DEFAULT_DATA };\n\nfunction getTwilightStore(): ContextData {\n if (_als) {\n const store = _als.getStore();\n if (!store)\n throw new Error('[Twilight] No request context. Wrap with runWithTwilightContext().');\n return store;\n }\n return clientStore;\n}\n\nfunction writableStore(): ContextData {\n if (_als) {\n const store = _als.getStore();\n if (store) return store;\n }\n return clientStore;\n}\n\nfunction mergeIntoStore(store: ContextData, partial: Partial<TwilightContext>): void {\n if ('queryClient' in partial && partial.queryClient) store.queryClient = partial.queryClient;\n if ('settings' in partial && partial.settings != null) store.settings = partial.settings;\n if ('locale' in partial && partial.locale != null) store.locale = partial.locale;\n if ('routeId' in partial && partial.routeId != null) store.routeId = partial.routeId;\n if ('location' in partial && partial.location != null)\n store.location = { ...store.location, ...partial.location };\n if ('authToken' in partial && partial.authToken !== undefined)\n store.authToken = partial.authToken ?? null;\n if ('scope' in partial && partial.scope !== undefined) store.scope = partial.scope ?? null;\n else if ('scopeId' in partial && partial.scopeId !== undefined)\n store.scope = partial.scopeId == null ? null : { id: partial.scopeId };\n if ('storeId' in partial && partial.storeId !== undefined)\n store.storeId = partial.storeId ?? null;\n if ('storeBase' in partial && partial.storeBase !== undefined)\n store.storeBase = partial.storeBase ?? null;\n if ('versionId' in partial && partial.versionId !== undefined)\n store.versionId = partial.versionId ?? null;\n if ('requestHost' in partial && partial.requestHost !== undefined)\n store.requestHost = partial.requestHost ?? null;\n if ('i18n' in partial && partial.i18n != null) store.i18n = partial.i18n;\n if ('page' in partial) store.page = partial.page;\n if ('appsSnippets' in partial) store.appsSnippets = partial.appsSnippets;\n if ('appsSettings' in partial) store.appsSettings = partial.appsSettings;\n if ('extras' in partial) store.extras = partial.extras;\n}\n\n// ============================================================================\n// Public API\n// ============================================================================\n\nexport function runWithTwilightContext<T>(partial: Partial<TwilightContext>, fn: () => T): T {\n if (_als) {\n const data: ContextData = { ...DEFAULT_DATA };\n mergeIntoStore(data, partial);\n return _als.run(data, fn) as T;\n }\n mergeIntoStore(clientStore, partial);\n return fn();\n}\n\n// Client-only subscription so React consumers (useRouteId/useIsHome/…) re-render\n// when navigation mutates the module store. Mirrors hooks/useWishlist.ts.\nconst listeners = new Set<() => void>();\n\nexport function subscribeTwilight(listener: () => void): () => void {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n}\n\nexport function updateTwilightContext(partial: Partial<TwilightContext>): void {\n mergeIntoStore(getTwilightStore(), partial);\n // Server uses AsyncLocalStorage and has no React subscribers; notify on client only.\n if (typeof window !== 'undefined') {\n for (const listener of listeners) listener();\n }\n}\n\n/**\n * Whether store settings are available, without throwing.\n *\n * `getTwilightContext().settings` throws a `SettingsError` when the store is\n * empty, which is fatal inside a head function during hydration. Callers that\n * need to *test* availability must use this instead of a try/catch around the\n * getter. Returns false when there is no request context at all (server-side\n * calls outside `runWithTwilightContext`).\n */\nexport function hasTwilightSettings(): boolean {\n try {\n return getTwilightStore().settings != null;\n } catch {\n return false;\n }\n}\n\n/** What a request addressed, as opposed to what it is. */\nexport interface RequestAddressing {\n storeId: string | null;\n storeBase: string | null;\n versionId: string | null;\n requestHost: string | null;\n}\n\n/**\n * What this request named and the host it arrived on, without throwing.\n *\n * Separate from {@link getTwilightContext} because store identity is read while\n * deciding *what to fetch* — before there is a context worth having — and on the\n * server outside a request the getter throws. A caller asking \"which store?\" has\n * a sane answer for \"none named\"; it has none for an exception.\n *\n * The version rides along rather than getting an accessor of its own: it is read\n * at the same moment, for the same reason, and by the same callers, and a second\n * copy of this try/catch would be a second thing to remember to widen.\n */\nexport function getRequestStore(): RequestAddressing {\n try {\n const data = getTwilightStore();\n return {\n storeId: data.storeId,\n storeBase: data.storeBase,\n versionId: data.versionId,\n requestHost: data.requestHost,\n };\n } catch {\n return { storeId: null, storeBase: null, versionId: null, requestHost: null };\n }\n}\n\nexport function getTwilightContext(): TwilightContext {\n const data = getTwilightStore();\n return {\n get queryClient() {\n return data.queryClient;\n },\n get settings() {\n if (!data.settings) throw new SettingsError();\n return data.settings;\n },\n get locale() {\n return data.locale;\n },\n get routeId() {\n return data.routeId;\n },\n get location() {\n return data.location;\n },\n get authToken() {\n return data.authToken;\n },\n get scope() {\n return data.scope;\n },\n get scopeId() {\n return data.scope?.id ?? null;\n },\n get storeId() {\n return data.storeId;\n },\n get storeBase() {\n return data.storeBase;\n },\n get versionId() {\n return data.versionId;\n },\n get requestHost() {\n return data.requestHost;\n },\n get i18n() {\n if (!data.i18n) {\n // Same shared key as `rootBeforeLoad` and the hydration path; see the\n // note on `byLocale`.\n const translations = data.queryClient?.getQueryData(translationsQueryKey(data.locale)) as\n TranslationMessages | undefined;\n data.i18n = createI18nInstance(data.locale, translations);\n }\n return data.i18n;\n },\n get dir() {\n return getLanguageInfo(data.locale).dir;\n },\n get page() {\n return data.page;\n },\n get appsSnippets() {\n return data.appsSnippets;\n },\n get appsSettings() {\n return data.appsSettings;\n },\n get extras() {\n return data.extras;\n },\n };\n}\n\n/** @internal Reset store for testing */\nexport function resetForTesting(): void {\n Object.assign(writableStore(), { ...DEFAULT_DATA });\n}\n"]}
@@ -1,4 +1,4 @@
1
- export { LazyCartItem as CartItem, LazyCartSummary as CartSummary, LazySeoCartWidget as SeoCartWidget } from '../../chunk-3H27IEME.js';
1
+ export { LazyCartItem as CartItem, LazyCartSummary as CartSummary, LazySeoCartWidget as SeoCartWidget } from '../../chunk-MU4ACHQU.js';
2
2
  import '../../chunk-DGUM43GV.js';
3
3
  //# sourceMappingURL=index.js.map
4
4
  //# sourceMappingURL=index.js.map
@@ -1,4 +1,4 @@
1
- export { BlogSkeleton, LazyBreadcrumb as Breadcrumb, BreadcrumbSkeleton, LazyCurrencySymbol as CurrencySymbol, CustomerLayoutSkeleton, CustomerPageSkeleton, DeferredData, LazyErrorPage as ErrorPage, Image, LazyNoContent as NoContent, PageSkeleton, ProductCardSkeleton, ProductDetailSkeleton, ProductGridSkeleton, LazyRenderWhenVisible as RenderWhenVisible, SkeletonPulse, resolveDeferred } from '../../chunk-JBNI5ZVG.js';
1
+ export { BlogSkeleton, LazyBreadcrumb as Breadcrumb, BreadcrumbSkeleton, LazyCurrencySymbol as CurrencySymbol, CustomerLayoutSkeleton, CustomerPageSkeleton, DeferredData, LazyErrorPage as ErrorPage, Image, LazyNoContent as NoContent, PageSkeleton, ProductCardSkeleton, ProductDetailSkeleton, ProductGridSkeleton, LazyRenderWhenVisible as RenderWhenVisible, SkeletonPulse, resolveDeferred } from '../../chunk-JMBO6VHQ.js';
2
2
  export { Link } from '../../chunk-AXW67SY7.js';
3
3
  import '../../chunk-BYMOPN2S.js';
4
4
  import '../../chunk-SKLEJJ6M.js';
@@ -1,20 +1,20 @@
1
1
  export { Drawer } from '../../chunk-6TKIUG5C.js';
2
- import '../../chunk-36PDYP56.js';
3
- import '../../chunk-J2GGMK3X.js';
2
+ import '../../chunk-B3Z7WNO5.js';
3
+ import '../../chunk-G2UPOKZZ.js';
4
4
  import '../../chunk-JKIRRMBU.js';
5
5
  import '../../chunk-2JV6WZ6O.js';
6
- import '../../chunk-YNY5P2DG.js';
6
+ import '../../chunk-MJGW6YZQ.js';
7
7
  import '../../chunk-VVZNW5CB.js';
8
- import '../../chunk-KTOKX3GC.js';
9
- import '../../chunk-JDROOL5C.js';
8
+ import '../../chunk-POATRFUM.js';
9
+ import '../../chunk-FLAJQXOM.js';
10
10
  import '../../chunk-TFB3QXYH.js';
11
11
  import '../../chunk-C5X6CVXC.js';
12
- import '../../chunk-UOALND7V.js';
13
- import '../../chunk-YSFWVMBA.js';
14
- import '../../chunk-F4MMWEII.js';
15
- import '../../chunk-TX6ZP4FF.js';
12
+ import '../../chunk-G5ZVKWD7.js';
13
+ import '../../chunk-WD7HOPT5.js';
14
+ import '../../chunk-POLSCD5O.js';
15
+ import '../../chunk-RLNBEDA4.js';
16
16
  import '../../chunk-XTMHHLNK.js';
17
- import '../../chunk-SOPK72TP.js';
17
+ import '../../chunk-YDU4K4M7.js';
18
18
  import '../../chunk-TP3LCGE7.js';
19
19
  import '../../chunk-Z653O7MX.js';
20
20
  import '../../chunk-ZCH7W7DZ.js';
@@ -30,7 +30,7 @@ import '../../chunk-YMVLYYLU.js';
30
30
  import '../../chunk-RJPPO3ET.js';
31
31
  import '../../chunk-Q7VWURUR.js';
32
32
  import '../../chunk-GU2KUQVD.js';
33
- import '../../chunk-JBNI5ZVG.js';
33
+ import '../../chunk-JMBO6VHQ.js';
34
34
  import '../../chunk-AXW67SY7.js';
35
35
  import '../../chunk-BYMOPN2S.js';
36
36
  import '../../chunk-SKLEJJ6M.js';
@@ -1,23 +1,23 @@
1
- export { BundleComponent, ComponentErrorBoundary, DefaultHomeComponents, FeaturedProductsStyle1, FeaturedProductsStyle2, FeaturedProductsStyle3, FixedBanner, FixedProducts, HomeComponentRenderer, ParallaxBackground, PhotosSlider, ProductsSlider, SquarePhotos, StoreFeatures, LazyTestimonials as Testimonials, Youtube, registerHomeComponentConfig, registerHomeComponents } from '../../chunk-7BWZYECG.js';
2
- import '../../chunk-3R7YKSO6.js';
3
- import '../../chunk-WFSOVIYU.js';
1
+ export { BundleComponent, ComponentErrorBoundary, DefaultHomeComponents, FeaturedProductsStyle1, FeaturedProductsStyle2, FeaturedProductsStyle3, FixedBanner, FixedProducts, HomeComponentRenderer, ParallaxBackground, PhotosSlider, ProductsSlider, SquarePhotos, StoreFeatures, LazyTestimonials as Testimonials, Youtube, registerHomeComponentConfig, registerHomeComponents } from '../../chunk-SDXKGWMC.js';
2
+ import '../../chunk-XJDQHKV6.js';
3
+ import '../../chunk-MFL6R2WL.js';
4
4
  import '../../chunk-342EPVXN.js';
5
- import '../../chunk-36PDYP56.js';
6
- import '../../chunk-J2GGMK3X.js';
5
+ import '../../chunk-B3Z7WNO5.js';
6
+ import '../../chunk-G2UPOKZZ.js';
7
7
  import '../../chunk-JKIRRMBU.js';
8
8
  import '../../chunk-2JV6WZ6O.js';
9
- import '../../chunk-YNY5P2DG.js';
9
+ import '../../chunk-MJGW6YZQ.js';
10
10
  import '../../chunk-VVZNW5CB.js';
11
- import '../../chunk-KTOKX3GC.js';
12
- import '../../chunk-JDROOL5C.js';
11
+ import '../../chunk-POATRFUM.js';
12
+ import '../../chunk-FLAJQXOM.js';
13
13
  import '../../chunk-TFB3QXYH.js';
14
14
  import '../../chunk-C5X6CVXC.js';
15
- import '../../chunk-UOALND7V.js';
16
- import '../../chunk-YSFWVMBA.js';
17
- import '../../chunk-F4MMWEII.js';
18
- import '../../chunk-TX6ZP4FF.js';
15
+ import '../../chunk-G5ZVKWD7.js';
16
+ import '../../chunk-WD7HOPT5.js';
17
+ import '../../chunk-POLSCD5O.js';
18
+ import '../../chunk-RLNBEDA4.js';
19
19
  import '../../chunk-XTMHHLNK.js';
20
- import '../../chunk-SOPK72TP.js';
20
+ import '../../chunk-YDU4K4M7.js';
21
21
  import '../../chunk-TP3LCGE7.js';
22
22
  import '../../chunk-Z653O7MX.js';
23
23
  import '../../chunk-ZCH7W7DZ.js';
@@ -33,7 +33,7 @@ import '../../chunk-YMVLYYLU.js';
33
33
  import '../../chunk-RJPPO3ET.js';
34
34
  import '../../chunk-Q7VWURUR.js';
35
35
  import '../../chunk-GU2KUQVD.js';
36
- import '../../chunk-JBNI5ZVG.js';
36
+ import '../../chunk-JMBO6VHQ.js';
37
37
  import '../../chunk-AXW67SY7.js';
38
38
  import '../../chunk-BYMOPN2S.js';
39
39
  import '../../chunk-SKLEJJ6M.js';
@@ -5,19 +5,19 @@ import '../../chunk-DF6FBKDN.js';
5
5
  import '../../chunk-DGUM43GV.js';
6
6
  import { lazy } from 'react';
7
7
 
8
- var LazyHeader = lazy(() => import('../../Header-26PWNGDF.js').then((m) => ({ default: m.Header })));
9
- var LazyFooter = lazy(() => import('../../Footer-TTYS7K4V.js').then((m) => ({ default: m.Footer })));
8
+ var LazyHeader = lazy(() => import('../../Header-WQ675B65.js').then((m) => ({ default: m.Header })));
9
+ var LazyFooter = lazy(() => import('../../Footer-FV7ZXLY4.js').then((m) => ({ default: m.Footer })));
10
10
  var LazyCopyright = lazy(
11
- () => import('../../Copyright-N5323WE7.js').then((m) => ({ default: m.Copyright }))
11
+ () => import('../../Copyright-XLIZFWVM.js').then((m) => ({ default: m.Copyright }))
12
12
  );
13
13
  var LazyMasterLayout = lazy(
14
- () => import('../../MasterLayout-MVY5N7G6.js').then((m) => ({ default: m.MasterLayout }))
14
+ () => import('../../MasterLayout-VJQDAL7N.js').then((m) => ({ default: m.MasterLayout }))
15
15
  );
16
16
  var LazyWidgetHead = lazy(
17
17
  () => import('../../WidgetHead-RWL7D3CT.js').then((m) => ({ default: m.WidgetHead }))
18
18
  );
19
19
  var LazyCustomerLayout = lazy(
20
- () => import('../../CustomerLayout-LB2EWG2P.js').then((m) => ({ default: m.CustomerLayout }))
20
+ () => import('../../CustomerLayout-JG4GOVSO.js').then((m) => ({ default: m.CustomerLayout }))
21
21
  );
22
22
 
23
23
  export { LazyCopyright as Copyright, LazyCustomerLayout as CustomerLayout, LazyFooter as Footer, LazyHeader as Header, LazyMasterLayout as MasterLayout, LazyWidgetHead as WidgetHead };
@@ -1,21 +1,21 @@
1
- export { LazyAddToCartForm as AddToCartForm, ProductCard, LazyProductDetails as ProductDetails, ProductGallery } from '../../chunk-WFSOVIYU.js';
1
+ export { LazyAddToCartForm as AddToCartForm, ProductCard, LazyProductDetails as ProductDetails, ProductGallery } from '../../chunk-MFL6R2WL.js';
2
2
  import '../../chunk-342EPVXN.js';
3
- import '../../chunk-36PDYP56.js';
4
- import '../../chunk-J2GGMK3X.js';
3
+ import '../../chunk-B3Z7WNO5.js';
4
+ import '../../chunk-G2UPOKZZ.js';
5
5
  import '../../chunk-JKIRRMBU.js';
6
6
  import '../../chunk-2JV6WZ6O.js';
7
- import '../../chunk-YNY5P2DG.js';
7
+ import '../../chunk-MJGW6YZQ.js';
8
8
  import '../../chunk-VVZNW5CB.js';
9
- import '../../chunk-KTOKX3GC.js';
10
- import '../../chunk-JDROOL5C.js';
9
+ import '../../chunk-POATRFUM.js';
10
+ import '../../chunk-FLAJQXOM.js';
11
11
  import '../../chunk-TFB3QXYH.js';
12
12
  import '../../chunk-C5X6CVXC.js';
13
- import '../../chunk-UOALND7V.js';
14
- import '../../chunk-YSFWVMBA.js';
15
- import '../../chunk-F4MMWEII.js';
16
- import '../../chunk-TX6ZP4FF.js';
13
+ import '../../chunk-G5ZVKWD7.js';
14
+ import '../../chunk-WD7HOPT5.js';
15
+ import '../../chunk-POLSCD5O.js';
16
+ import '../../chunk-RLNBEDA4.js';
17
17
  import '../../chunk-XTMHHLNK.js';
18
- import '../../chunk-SOPK72TP.js';
18
+ import '../../chunk-YDU4K4M7.js';
19
19
  import '../../chunk-TP3LCGE7.js';
20
20
  import '../../chunk-Z653O7MX.js';
21
21
  import '../../chunk-ZCH7W7DZ.js';
@@ -31,7 +31,7 @@ import '../../chunk-YMVLYYLU.js';
31
31
  import '../../chunk-RJPPO3ET.js';
32
32
  import '../../chunk-Q7VWURUR.js';
33
33
  import '../../chunk-GU2KUQVD.js';
34
- import '../../chunk-JBNI5ZVG.js';
34
+ import '../../chunk-JMBO6VHQ.js';
35
35
  import '../../chunk-AXW67SY7.js';
36
36
  import '../../chunk-BYMOPN2S.js';
37
37
  import '../../chunk-SKLEJJ6M.js';
@@ -1,20 +1,20 @@
1
- export { StoreClosedNotification } from '../../chunk-PSRSWHML.js';
2
- import '../../chunk-36PDYP56.js';
3
- import '../../chunk-J2GGMK3X.js';
1
+ export { StoreClosedNotification } from '../../chunk-WOFJ3WBJ.js';
2
+ import '../../chunk-B3Z7WNO5.js';
3
+ import '../../chunk-G2UPOKZZ.js';
4
4
  import '../../chunk-JKIRRMBU.js';
5
5
  import '../../chunk-2JV6WZ6O.js';
6
- import '../../chunk-YNY5P2DG.js';
6
+ import '../../chunk-MJGW6YZQ.js';
7
7
  import '../../chunk-VVZNW5CB.js';
8
- import '../../chunk-KTOKX3GC.js';
9
- import '../../chunk-JDROOL5C.js';
8
+ import '../../chunk-POATRFUM.js';
9
+ import '../../chunk-FLAJQXOM.js';
10
10
  import '../../chunk-TFB3QXYH.js';
11
11
  import '../../chunk-C5X6CVXC.js';
12
- import '../../chunk-UOALND7V.js';
13
- import '../../chunk-YSFWVMBA.js';
14
- import '../../chunk-F4MMWEII.js';
15
- import '../../chunk-TX6ZP4FF.js';
12
+ import '../../chunk-G5ZVKWD7.js';
13
+ import '../../chunk-WD7HOPT5.js';
14
+ import '../../chunk-POLSCD5O.js';
15
+ import '../../chunk-RLNBEDA4.js';
16
16
  import '../../chunk-XTMHHLNK.js';
17
- import '../../chunk-SOPK72TP.js';
17
+ import '../../chunk-YDU4K4M7.js';
18
18
  import '../../chunk-TP3LCGE7.js';
19
19
  import '../../chunk-Z653O7MX.js';
20
20
  import '../../chunk-ZCH7W7DZ.js';
@@ -30,7 +30,7 @@ import '../../chunk-YMVLYYLU.js';
30
30
  import '../../chunk-RJPPO3ET.js';
31
31
  import '../../chunk-Q7VWURUR.js';
32
32
  import '../../chunk-GU2KUQVD.js';
33
- import '../../chunk-JBNI5ZVG.js';
33
+ import '../../chunk-JMBO6VHQ.js';
34
34
  import '../../chunk-AXW67SY7.js';
35
35
  import '../../chunk-BYMOPN2S.js';
36
36
  import '../../chunk-SKLEJJ6M.js';
@@ -44,7 +44,7 @@ import '../../chunk-DGUM43GV.js';
44
44
  import { lazy } from 'react';
45
45
 
46
46
  var LazyStoreClosedNotification = lazy(
47
- () => import('../../StoreClosedNotification-5XWRDBPA.js').then((m) => ({
47
+ () => import('../../StoreClosedNotification-3NKLFBKL.js').then((m) => ({
48
48
  default: m.StoreClosedNotification
49
49
  }))
50
50
  );
@@ -0,0 +1,25 @@
1
+ export { RouteDocumentSync, TanStackDocumentSync, tanstackDocumentAdapter, useTanstackDocumentAttrs } from './chunk-55NGYH3V.js';
2
+ import './chunk-Z4Y55HWX.js';
3
+ import './chunk-AEQ6NRTE.js';
4
+ import './chunk-GJXCHLKY.js';
5
+ import './chunk-B3EFOE57.js';
6
+ import './chunk-JR2NYBZS.js';
7
+ import './chunk-SHHF6XXL.js';
8
+ import './chunk-TZ3E5BN4.js';
9
+ import './chunk-XJDQHKV6.js';
10
+ import './chunk-MJGW6YZQ.js';
11
+ import './chunk-POATRFUM.js';
12
+ import './chunk-FLAJQXOM.js';
13
+ import './chunk-TFB3QXYH.js';
14
+ import './chunk-POLSCD5O.js';
15
+ import './chunk-RLNBEDA4.js';
16
+ import './chunk-XTMHHLNK.js';
17
+ import './chunk-YDU4K4M7.js';
18
+ import './chunk-JWXJPJBO.js';
19
+ import './chunk-CW625T2E.js';
20
+ import './chunk-TYNZ5B2B.js';
21
+ import './chunk-T72DAX7R.js';
22
+ import './chunk-DF6FBKDN.js';
23
+ import './chunk-DGUM43GV.js';
24
+ //# sourceMappingURL=document-class-QLK3MMHA.js.map
25
+ //# sourceMappingURL=document-class-QLK3MMHA.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"document-class-YYEVAIVJ.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"document-class-QLK3MMHA.js"}
@@ -1,19 +1,19 @@
1
- export { registerDefaultHooks, useBreadcrumbs, useDate, useGtm, useMoney, useNumber, useOpeningHours, usePageConfig, useStore } from '../chunk-36PDYP56.js';
2
- import '../chunk-J2GGMK3X.js';
1
+ export { registerDefaultHooks, useBreadcrumbs, useDate, useGtm, useMoney, useNumber, useOpeningHours, usePageConfig, useStore } from '../chunk-B3Z7WNO5.js';
2
+ import '../chunk-G2UPOKZZ.js';
3
3
  import '../chunk-JKIRRMBU.js';
4
4
  import '../chunk-2JV6WZ6O.js';
5
- import '../chunk-YNY5P2DG.js';
5
+ import '../chunk-MJGW6YZQ.js';
6
6
  import '../chunk-VVZNW5CB.js';
7
- import '../chunk-KTOKX3GC.js';
8
- import '../chunk-JDROOL5C.js';
7
+ import '../chunk-POATRFUM.js';
8
+ import '../chunk-FLAJQXOM.js';
9
9
  import '../chunk-TFB3QXYH.js';
10
10
  export { useHook } from '../chunk-C5X6CVXC.js';
11
- export { useUser } from '../chunk-UOALND7V.js';
12
- import '../chunk-YSFWVMBA.js';
13
- import '../chunk-F4MMWEII.js';
14
- import '../chunk-TX6ZP4FF.js';
11
+ export { useUser } from '../chunk-G5ZVKWD7.js';
12
+ import '../chunk-WD7HOPT5.js';
13
+ import '../chunk-POLSCD5O.js';
14
+ import '../chunk-RLNBEDA4.js';
15
15
  import '../chunk-XTMHHLNK.js';
16
- import '../chunk-SOPK72TP.js';
16
+ import '../chunk-YDU4K4M7.js';
17
17
  export { HookName } from '../chunk-TP3LCGE7.js';
18
18
  export { useAsset } from '../chunk-Z653O7MX.js';
19
19
  import '../chunk-ZCH7W7DZ.js';
@@ -29,7 +29,7 @@ export { useComments } from '../chunk-YMVLYYLU.js';
29
29
  import '../chunk-RJPPO3ET.js';
30
30
  export { HookSlot, useIsClient } from '../chunk-Q7VWURUR.js';
31
31
  export { HookRegistry, defineHooks, hookRegistry } from '../chunk-GU2KUQVD.js';
32
- import '../chunk-JBNI5ZVG.js';
32
+ import '../chunk-JMBO6VHQ.js';
33
33
  import '../chunk-AXW67SY7.js';
34
34
  import '../chunk-BYMOPN2S.js';
35
35
  import '../chunk-SKLEJJ6M.js';
@@ -1,19 +1,19 @@
1
- export { useGtm } from '../chunk-36PDYP56.js';
2
- import '../chunk-J2GGMK3X.js';
1
+ export { useGtm } from '../chunk-B3Z7WNO5.js';
2
+ import '../chunk-G2UPOKZZ.js';
3
3
  import '../chunk-JKIRRMBU.js';
4
4
  import '../chunk-2JV6WZ6O.js';
5
- import '../chunk-YNY5P2DG.js';
5
+ import '../chunk-MJGW6YZQ.js';
6
6
  import '../chunk-VVZNW5CB.js';
7
- import '../chunk-KTOKX3GC.js';
8
- import '../chunk-JDROOL5C.js';
7
+ import '../chunk-POATRFUM.js';
8
+ import '../chunk-FLAJQXOM.js';
9
9
  import '../chunk-TFB3QXYH.js';
10
10
  import '../chunk-C5X6CVXC.js';
11
- import '../chunk-UOALND7V.js';
12
- import '../chunk-YSFWVMBA.js';
13
- import '../chunk-F4MMWEII.js';
14
- import '../chunk-TX6ZP4FF.js';
11
+ import '../chunk-G5ZVKWD7.js';
12
+ import '../chunk-WD7HOPT5.js';
13
+ import '../chunk-POLSCD5O.js';
14
+ import '../chunk-RLNBEDA4.js';
15
15
  import '../chunk-XTMHHLNK.js';
16
- import '../chunk-SOPK72TP.js';
16
+ import '../chunk-YDU4K4M7.js';
17
17
  import '../chunk-TP3LCGE7.js';
18
18
  import '../chunk-Z653O7MX.js';
19
19
  import '../chunk-ZCH7W7DZ.js';
@@ -29,7 +29,7 @@ import '../chunk-YMVLYYLU.js';
29
29
  import '../chunk-RJPPO3ET.js';
30
30
  import '../chunk-Q7VWURUR.js';
31
31
  import '../chunk-GU2KUQVD.js';
32
- import '../chunk-JBNI5ZVG.js';
32
+ import '../chunk-JMBO6VHQ.js';
33
33
  import '../chunk-AXW67SY7.js';
34
34
  import '../chunk-BYMOPN2S.js';
35
35
  import '../chunk-SKLEJJ6M.js';
@@ -1,19 +1,19 @@
1
- export { useMoney } from '../chunk-36PDYP56.js';
2
- import '../chunk-J2GGMK3X.js';
1
+ export { useMoney } from '../chunk-B3Z7WNO5.js';
2
+ import '../chunk-G2UPOKZZ.js';
3
3
  import '../chunk-JKIRRMBU.js';
4
4
  import '../chunk-2JV6WZ6O.js';
5
- import '../chunk-YNY5P2DG.js';
5
+ import '../chunk-MJGW6YZQ.js';
6
6
  import '../chunk-VVZNW5CB.js';
7
- import '../chunk-KTOKX3GC.js';
8
- import '../chunk-JDROOL5C.js';
7
+ import '../chunk-POATRFUM.js';
8
+ import '../chunk-FLAJQXOM.js';
9
9
  import '../chunk-TFB3QXYH.js';
10
10
  import '../chunk-C5X6CVXC.js';
11
- import '../chunk-UOALND7V.js';
12
- import '../chunk-YSFWVMBA.js';
13
- import '../chunk-F4MMWEII.js';
14
- import '../chunk-TX6ZP4FF.js';
11
+ import '../chunk-G5ZVKWD7.js';
12
+ import '../chunk-WD7HOPT5.js';
13
+ import '../chunk-POLSCD5O.js';
14
+ import '../chunk-RLNBEDA4.js';
15
15
  import '../chunk-XTMHHLNK.js';
16
- import '../chunk-SOPK72TP.js';
16
+ import '../chunk-YDU4K4M7.js';
17
17
  import '../chunk-TP3LCGE7.js';
18
18
  import '../chunk-Z653O7MX.js';
19
19
  import '../chunk-ZCH7W7DZ.js';
@@ -29,7 +29,7 @@ import '../chunk-YMVLYYLU.js';
29
29
  import '../chunk-RJPPO3ET.js';
30
30
  import '../chunk-Q7VWURUR.js';
31
31
  import '../chunk-GU2KUQVD.js';
32
- import '../chunk-JBNI5ZVG.js';
32
+ import '../chunk-JMBO6VHQ.js';
33
33
  import '../chunk-AXW67SY7.js';
34
34
  import '../chunk-BYMOPN2S.js';
35
35
  import '../chunk-SKLEJJ6M.js';
@@ -1,19 +1,19 @@
1
- export { useStore } from '../chunk-36PDYP56.js';
2
- import '../chunk-J2GGMK3X.js';
1
+ export { useStore } from '../chunk-B3Z7WNO5.js';
2
+ import '../chunk-G2UPOKZZ.js';
3
3
  import '../chunk-JKIRRMBU.js';
4
4
  import '../chunk-2JV6WZ6O.js';
5
- import '../chunk-YNY5P2DG.js';
5
+ import '../chunk-MJGW6YZQ.js';
6
6
  import '../chunk-VVZNW5CB.js';
7
- import '../chunk-KTOKX3GC.js';
8
- import '../chunk-JDROOL5C.js';
7
+ import '../chunk-POATRFUM.js';
8
+ import '../chunk-FLAJQXOM.js';
9
9
  import '../chunk-TFB3QXYH.js';
10
10
  import '../chunk-C5X6CVXC.js';
11
- import '../chunk-UOALND7V.js';
12
- import '../chunk-YSFWVMBA.js';
13
- import '../chunk-F4MMWEII.js';
14
- import '../chunk-TX6ZP4FF.js';
11
+ import '../chunk-G5ZVKWD7.js';
12
+ import '../chunk-WD7HOPT5.js';
13
+ import '../chunk-POLSCD5O.js';
14
+ import '../chunk-RLNBEDA4.js';
15
15
  import '../chunk-XTMHHLNK.js';
16
- import '../chunk-SOPK72TP.js';
16
+ import '../chunk-YDU4K4M7.js';
17
17
  import '../chunk-TP3LCGE7.js';
18
18
  import '../chunk-Z653O7MX.js';
19
19
  import '../chunk-ZCH7W7DZ.js';
@@ -29,7 +29,7 @@ import '../chunk-YMVLYYLU.js';
29
29
  import '../chunk-RJPPO3ET.js';
30
30
  import '../chunk-Q7VWURUR.js';
31
31
  import '../chunk-GU2KUQVD.js';
32
- import '../chunk-JBNI5ZVG.js';
32
+ import '../chunk-JMBO6VHQ.js';
33
33
  import '../chunk-AXW67SY7.js';
34
34
  import '../chunk-BYMOPN2S.js';
35
35
  import '../chunk-SKLEJJ6M.js';