@salla.sa/twilight-theme-engine 1.0.140 → 1.0.141

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 (229) hide show
  1. package/dist/{AddToCartForm-EPTN5O3X.js → AddToCartForm-WNDQP34Y.js} +3 -3
  2. package/dist/{AddToCartForm-EPTN5O3X.js.map → AddToCartForm-WNDQP34Y.js.map} +1 -1
  3. package/dist/{BlogAuthorPage-PGFINJSP.js → BlogAuthorPage-U4CFZZWU.js} +17 -17
  4. package/dist/{BlogAuthorPage-PGFINJSP.js.map → BlogAuthorPage-U4CFZZWU.js.map} +1 -1
  5. package/dist/{BlogCategoryPage-ZVRRHTKJ.js → BlogCategoryPage-JXCHHGMM.js} +17 -17
  6. package/dist/{BlogCategoryPage-ZVRRHTKJ.js.map → BlogCategoryPage-JXCHHGMM.js.map} +1 -1
  7. package/dist/{BlogPage-5SRGR7NK.js → BlogPage-BLSTB5BQ.js} +15 -15
  8. package/dist/{BlogPage-5SRGR7NK.js.map → BlogPage-BLSTB5BQ.js.map} +1 -1
  9. package/dist/{BlogSinglePage-6A5J2BKK.js → BlogSinglePage-TUNH4RZZ.js} +15 -15
  10. package/dist/{BlogSinglePage-6A5J2BKK.js.map → BlogSinglePage-TUNH4RZZ.js.map} +1 -1
  11. package/dist/{BlogTagPage-DAA3ZO76.js → BlogTagPage-24P5YHNB.js} +17 -17
  12. package/dist/{BlogTagPage-DAA3ZO76.js.map → BlogTagPage-24P5YHNB.js.map} +1 -1
  13. package/dist/{BrandsPage-JABKRWP2.js → BrandsPage-2TES2Y7B.js} +16 -16
  14. package/dist/{BrandsPage-JABKRWP2.js.map → BrandsPage-2TES2Y7B.js.map} +1 -1
  15. package/dist/{Breadcrumb-SCJZW4RO.js → Breadcrumb-MUN36Q5L.js} +15 -15
  16. package/dist/{Breadcrumb-SCJZW4RO.js.map → Breadcrumb-MUN36Q5L.js.map} +1 -1
  17. package/dist/{CartItem-3KFTPQVF.js → CartItem-FM6RUM2U.js} +15 -15
  18. package/dist/{CartItem-3KFTPQVF.js.map → CartItem-FM6RUM2U.js.map} +1 -1
  19. package/dist/{CartSummary-I64SD4QX.js → CartSummary-P6PEKCS7.js} +15 -15
  20. package/dist/{CartSummary-I64SD4QX.js.map → CartSummary-P6PEKCS7.js.map} +1 -1
  21. package/dist/{Copyright-3TREUCAK.js → Copyright-EHQHBFRP.js} +3 -3
  22. package/dist/{Copyright-3TREUCAK.js.map → Copyright-EHQHBFRP.js.map} +1 -1
  23. package/dist/{CustomerLayout-BH74QWRI.js → CustomerLayout-QRBLOWA4.js} +15 -15
  24. package/dist/{CustomerLayout-BH74QWRI.js.map → CustomerLayout-QRBLOWA4.js.map} +1 -1
  25. package/dist/{Footer-DSSOB3ZW.js → Footer-GH6UEQR2.js} +4 -4
  26. package/dist/{Footer-DSSOB3ZW.js.map → Footer-GH6UEQR2.js.map} +1 -1
  27. package/dist/{Header-UWUS34D6.js → Header-4KUXZJMA.js} +8 -8
  28. package/dist/{Header-UWUS34D6.js.map → Header-4KUXZJMA.js.map} +1 -1
  29. package/dist/{LatestProducts-VLSTOKEB.js → LatestProducts-AKCLYRRU.js} +17 -17
  30. package/dist/{LatestProducts-VLSTOKEB.js.map → LatestProducts-AKCLYRRU.js.map} +1 -1
  31. package/dist/{LiveEditorBar-4AWOAJYX.js → LiveEditorBar-3DUDCCSM.js} +3 -3
  32. package/dist/{LiveEditorBar-4AWOAJYX.js.map → LiveEditorBar-3DUDCCSM.js.map} +1 -1
  33. package/dist/{LoyaltyPage-3FAD5MJ6.js → LoyaltyPage-MUMMZ37S.js} +15 -15
  34. package/dist/{LoyaltyPage-3FAD5MJ6.js.map → LoyaltyPage-MUMMZ37S.js.map} +1 -1
  35. package/dist/{LoyaltyPointsPage-A4CTI55P.js → LoyaltyPointsPage-N6XMXNZY.js} +6 -6
  36. package/dist/{LoyaltyPointsPage-A4CTI55P.js.map → LoyaltyPointsPage-N6XMXNZY.js.map} +1 -1
  37. package/dist/{MainMenu-C7TWXVL5.js → MainMenu-Q5R3HK7F.js} +5 -5
  38. package/dist/{MainMenu-C7TWXVL5.js.map → MainMenu-Q5R3HK7F.js.map} +1 -1
  39. package/dist/{MasterLayout-MZY44RTA.js → MasterLayout-3VXL2VCQ.js} +15 -15
  40. package/dist/{MasterLayout-MZY44RTA.js.map → MasterLayout-3VXL2VCQ.js.map} +1 -1
  41. package/dist/{MobileMenu-KNDN34HO.js → MobileMenu-UY3GHY7B.js} +16 -16
  42. package/dist/{MobileMenu-KNDN34HO.js.map → MobileMenu-UY3GHY7B.js.map} +1 -1
  43. package/dist/{NotificationsPage-LKUTYWPR.js → NotificationsPage-N3MF2RS7.js} +15 -15
  44. package/dist/{NotificationsPage-LKUTYWPR.js.map → NotificationsPage-N3MF2RS7.js.map} +1 -1
  45. package/dist/{OrderSinglePage-VDALCKJL.js → OrderSinglePage-3XHUQGEW.js} +16 -16
  46. package/dist/{OrderSinglePage-VDALCKJL.js.map → OrderSinglePage-3XHUQGEW.js.map} +1 -1
  47. package/dist/{OrdersPage-TOSCY6ML.js → OrdersPage-SWBRRHAH.js} +15 -15
  48. package/dist/{OrdersPage-TOSCY6ML.js.map → OrdersPage-SWBRRHAH.js.map} +1 -1
  49. package/dist/{PageSingle-56SRDA4Q.js → PageSingle-YZCWWOAW.js} +3 -3
  50. package/dist/{PageSingle-56SRDA4Q.js.map → PageSingle-YZCWWOAW.js.map} +1 -1
  51. package/dist/{ProductDetails-YYU7TJSU.js → ProductDetails-V27IGZYV.js} +4 -4
  52. package/dist/{ProductDetails-YYU7TJSU.js.map → ProductDetails-V27IGZYV.js.map} +1 -1
  53. package/dist/{ProfilePage-CTGBAD2A.js → ProfilePage-57TZ4ZKP.js} +15 -15
  54. package/dist/{ProfilePage-CTGBAD2A.js.map → ProfilePage-57TZ4ZKP.js.map} +1 -1
  55. package/dist/{ReviewsPage-RJ5VQVB2.js → ReviewsPage-JC2ZKARA.js} +3 -3
  56. package/dist/{ReviewsPage-RJ5VQVB2.js.map → ReviewsPage-JC2ZKARA.js.map} +1 -1
  57. package/dist/{SeoCartWidget-VL5TD2FU.js → SeoCartWidget-D3GIOO56.js} +15 -15
  58. package/dist/{SeoCartWidget-VL5TD2FU.js.map → SeoCartWidget-D3GIOO56.js.map} +1 -1
  59. package/dist/{SettingsPage-ZHDB3YZS.js → SettingsPage-C2PSTHXQ.js} +15 -15
  60. package/dist/{SettingsPage-ZHDB3YZS.js.map → SettingsPage-C2PSTHXQ.js.map} +1 -1
  61. package/dist/{StoreClosedNotification-VP2ACWD6.js → StoreClosedNotification-NXDQW24E.js} +16 -16
  62. package/dist/{StoreClosedNotification-VP2ACWD6.js.map → StoreClosedNotification-NXDQW24E.js.map} +1 -1
  63. package/dist/{TestimonialsPage-V2RWUVZD.js → TestimonialsPage-MENUPYFS.js} +3 -3
  64. package/dist/{TestimonialsPage-V2RWUVZD.js.map → TestimonialsPage-MENUPYFS.js.map} +1 -1
  65. package/dist/{ThankYouPage-NJKASZ2R.js → ThankYouPage-WNX3JNVJ.js} +15 -15
  66. package/dist/{ThankYouPage-NJKASZ2R.js.map → ThankYouPage-WNX3JNVJ.js.map} +1 -1
  67. package/dist/{WalletPage-N4FDKDK3.js → WalletPage-FKIRJ327.js} +16 -16
  68. package/dist/{WalletPage-N4FDKDK3.js.map → WalletPage-FKIRJ327.js.map} +1 -1
  69. package/dist/{WishlistPage-JCOG3KOV.js → WishlistPage-5LOWSXHY.js} +17 -17
  70. package/dist/{WishlistPage-JCOG3KOV.js.map → WishlistPage-5LOWSXHY.js.map} +1 -1
  71. package/dist/api/advertisement.js +2 -2
  72. package/dist/api/apps.js +2 -2
  73. package/dist/api/blog.js +3 -3
  74. package/dist/api/brands.js +3 -3
  75. package/dist/api/cart.js +3 -3
  76. package/dist/api/category.js +3 -3
  77. package/dist/api/client.js +1 -1
  78. package/dist/api/home.js +2 -2
  79. package/dist/api/loyalty.js +3 -3
  80. package/dist/api/menu.js +2 -2
  81. package/dist/api/notification.js +2 -2
  82. package/dist/api/order.js +3 -3
  83. package/dist/api/page.js +3 -3
  84. package/dist/api/product.js +3 -3
  85. package/dist/api/profile.js +1 -1
  86. package/dist/api/store.js +2 -2
  87. package/dist/api/translations.js +2 -2
  88. package/dist/api/user.js +2 -2
  89. package/dist/api/wallet.js +2 -2
  90. package/dist/api/wishlist.js +4 -4
  91. package/dist/{chunk-N36TVQP2.js → chunk-45UU2OKF.js} +4 -4
  92. package/dist/{chunk-N36TVQP2.js.map → chunk-45UU2OKF.js.map} +1 -1
  93. package/dist/{chunk-O2RXB3P3.js → chunk-6LQHXT4S.js} +7 -7
  94. package/dist/{chunk-O2RXB3P3.js.map → chunk-6LQHXT4S.js.map} +1 -1
  95. package/dist/{chunk-SOLUKKTW.js → chunk-7AWWYJXA.js} +3 -3
  96. package/dist/{chunk-SOLUKKTW.js.map → chunk-7AWWYJXA.js.map} +1 -1
  97. package/dist/{chunk-LB4U7GI3.js → chunk-7CU5YP4T.js} +4 -4
  98. package/dist/{chunk-LB4U7GI3.js.map → chunk-7CU5YP4T.js.map} +1 -1
  99. package/dist/{chunk-MJ3DLAC3.js → chunk-AD7KLDOA.js} +4 -4
  100. package/dist/{chunk-MJ3DLAC3.js.map → chunk-AD7KLDOA.js.map} +1 -1
  101. package/dist/{chunk-33R2PXOK.js → chunk-ASLBVSLC.js} +4 -4
  102. package/dist/{chunk-33R2PXOK.js.map → chunk-ASLBVSLC.js.map} +1 -1
  103. package/dist/{chunk-RUUQ5OVU.js → chunk-C7UFIC63.js} +3 -3
  104. package/dist/{chunk-RUUQ5OVU.js.map → chunk-C7UFIC63.js.map} +1 -1
  105. package/dist/{chunk-NUTURBAK.js → chunk-CSONBCDW.js} +3 -3
  106. package/dist/{chunk-NUTURBAK.js.map → chunk-CSONBCDW.js.map} +1 -1
  107. package/dist/{chunk-GIYRCRS6.js → chunk-CSPVLZDC.js} +3 -3
  108. package/dist/{chunk-GIYRCRS6.js.map → chunk-CSPVLZDC.js.map} +1 -1
  109. package/dist/{chunk-TDIENKPW.js → chunk-CTPYM52J.js} +3 -3
  110. package/dist/{chunk-TDIENKPW.js.map → chunk-CTPYM52J.js.map} +1 -1
  111. package/dist/{chunk-MOAMYULW.js → chunk-D7UQKKFR.js} +4 -4
  112. package/dist/{chunk-MOAMYULW.js.map → chunk-D7UQKKFR.js.map} +1 -1
  113. package/dist/{chunk-QQWJNRSI.js → chunk-DD622QIQ.js} +3 -3
  114. package/dist/{chunk-QQWJNRSI.js.map → chunk-DD622QIQ.js.map} +1 -1
  115. package/dist/{chunk-J4EFCWMM.js → chunk-ENQEMMQ5.js} +16 -16
  116. package/dist/{chunk-J4EFCWMM.js.map → chunk-ENQEMMQ5.js.map} +1 -1
  117. package/dist/{chunk-ZNA3SWRP.js → chunk-EVBRWESV.js} +7 -7
  118. package/dist/{chunk-ZNA3SWRP.js.map → chunk-EVBRWESV.js.map} +1 -1
  119. package/dist/{chunk-VXMWMGBQ.js → chunk-HK3545K3.js} +4 -4
  120. package/dist/{chunk-VXMWMGBQ.js.map → chunk-HK3545K3.js.map} +1 -1
  121. package/dist/{chunk-ATL7CYF2.js → chunk-HMMOUH2W.js} +3 -3
  122. package/dist/{chunk-ATL7CYF2.js.map → chunk-HMMOUH2W.js.map} +1 -1
  123. package/dist/{chunk-LCRHHSBP.js → chunk-HQLFHGPV.js} +5 -5
  124. package/dist/{chunk-LCRHHSBP.js.map → chunk-HQLFHGPV.js.map} +1 -1
  125. package/dist/{chunk-SCBSKIBA.js → chunk-HWVRIO2E.js} +4 -4
  126. package/dist/{chunk-SCBSKIBA.js.map → chunk-HWVRIO2E.js.map} +1 -1
  127. package/dist/{chunk-CU2DV3Z4.js → chunk-I2NUWNDF.js} +3 -3
  128. package/dist/{chunk-CU2DV3Z4.js.map → chunk-I2NUWNDF.js.map} +1 -1
  129. package/dist/{chunk-OJMG3NAF.js → chunk-IS6CEQF7.js} +3 -3
  130. package/dist/{chunk-OJMG3NAF.js.map → chunk-IS6CEQF7.js.map} +1 -1
  131. package/dist/{chunk-AEM5UEH6.js → chunk-JYGEHJU4.js} +10 -5
  132. package/dist/chunk-JYGEHJU4.js.map +1 -0
  133. package/dist/{chunk-7PFJOTZS.js → chunk-MFHGYANL.js} +4 -4
  134. package/dist/{chunk-7PFJOTZS.js.map → chunk-MFHGYANL.js.map} +1 -1
  135. package/dist/{chunk-2AS6KREO.js → chunk-NTOWUMLA.js} +3 -3
  136. package/dist/{chunk-2AS6KREO.js.map → chunk-NTOWUMLA.js.map} +1 -1
  137. package/dist/{chunk-5NTD7WXX.js → chunk-OFDFDY2F.js} +3 -3
  138. package/dist/{chunk-5NTD7WXX.js.map → chunk-OFDFDY2F.js.map} +1 -1
  139. package/dist/{chunk-NRPYHHRQ.js → chunk-ONHJKZ6J.js} +7 -7
  140. package/dist/{chunk-NRPYHHRQ.js.map → chunk-ONHJKZ6J.js.map} +1 -1
  141. package/dist/{chunk-IK7CQSEA.js → chunk-OZP22OV3.js} +3 -3
  142. package/dist/{chunk-IK7CQSEA.js.map → chunk-OZP22OV3.js.map} +1 -1
  143. package/dist/{chunk-444GCMTZ.js → chunk-P4WJ2JMF.js} +9 -15
  144. package/dist/chunk-P4WJ2JMF.js.map +1 -0
  145. package/dist/{chunk-ABVHWJPY.js → chunk-QGDRC7U7.js} +3 -3
  146. package/dist/{chunk-ABVHWJPY.js.map → chunk-QGDRC7U7.js.map} +1 -1
  147. package/dist/{chunk-VNZ6VI2O.js → chunk-QLY2NOJT.js} +3 -3
  148. package/dist/{chunk-VNZ6VI2O.js.map → chunk-QLY2NOJT.js.map} +1 -1
  149. package/dist/{chunk-OEM2SFJE.js → chunk-RISG443X.js} +3 -3
  150. package/dist/{chunk-OEM2SFJE.js.map → chunk-RISG443X.js.map} +1 -1
  151. package/dist/{chunk-UXJAZ5JP.js → chunk-RORNWRSU.js} +3 -3
  152. package/dist/{chunk-UXJAZ5JP.js.map → chunk-RORNWRSU.js.map} +1 -1
  153. package/dist/{chunk-F3SXHQU4.js → chunk-RQY66Y3Z.js} +5 -5
  154. package/dist/{chunk-F3SXHQU4.js.map → chunk-RQY66Y3Z.js.map} +1 -1
  155. package/dist/{chunk-AZT4TALZ.js → chunk-SMKHH7X6.js} +5 -5
  156. package/dist/{chunk-AZT4TALZ.js.map → chunk-SMKHH7X6.js.map} +1 -1
  157. package/dist/{chunk-3CKMMFUF.js → chunk-TGPAAFOW.js} +4 -4
  158. package/dist/{chunk-3CKMMFUF.js.map → chunk-TGPAAFOW.js.map} +1 -1
  159. package/dist/{chunk-7DRXAR76.js → chunk-TLT4HZMM.js} +3 -3
  160. package/dist/{chunk-7DRXAR76.js.map → chunk-TLT4HZMM.js.map} +1 -1
  161. package/dist/{chunk-LGXEXLX3.js → chunk-W4RC4HES.js} +10 -10
  162. package/dist/{chunk-LGXEXLX3.js.map → chunk-W4RC4HES.js.map} +1 -1
  163. package/dist/{chunk-YRIMECFU.js → chunk-WSNBAH3Z.js} +3 -3
  164. package/dist/{chunk-YRIMECFU.js.map → chunk-WSNBAH3Z.js.map} +1 -1
  165. package/dist/{chunk-XMSZSSTZ.js → chunk-Y2ZCCAXG.js} +4 -4
  166. package/dist/{chunk-XMSZSSTZ.js.map → chunk-Y2ZCCAXG.js.map} +1 -1
  167. package/dist/{chunk-BPM6LSOV.js → chunk-YHTFDUAJ.js} +4 -4
  168. package/dist/{chunk-BPM6LSOV.js.map → chunk-YHTFDUAJ.js.map} +1 -1
  169. package/dist/{chunk-H2QBHOF2.js → chunk-YL6X3ZMG.js} +9 -3
  170. package/dist/chunk-YL6X3ZMG.js.map +1 -0
  171. package/dist/{chunk-MBU4LSRZ.js → chunk-ZACN2Z2L.js} +4 -4
  172. package/dist/{chunk-MBU4LSRZ.js.map → chunk-ZACN2Z2L.js.map} +1 -1
  173. package/dist/components/cart/index.js +1 -1
  174. package/dist/components/common/index.js +1 -1
  175. package/dist/components/drawer/index.js +13 -13
  176. package/dist/components/home/HomePageRenderer.d.ts.map +1 -1
  177. package/dist/components/home/index.js +18 -18
  178. package/dist/components/layout/index.js +4 -4
  179. package/dist/components/live-editor/frame.d.ts +14 -0
  180. package/dist/components/live-editor/frame.d.ts.map +1 -1
  181. package/dist/components/product/index.js +15 -15
  182. package/dist/components/store/index.js +14 -14
  183. package/dist/dev/dev-settings-store.d.ts +3 -2
  184. package/dist/dev/dev-settings-store.d.ts.map +1 -1
  185. package/dist/dev/editor/index.js +34 -9
  186. package/dist/dev/editor/index.js.map +1 -1
  187. package/dist/dev/editor/live-actions.d.ts +2 -1
  188. package/dist/dev/editor/live-actions.d.ts.map +1 -1
  189. package/dist/dev/index.js +1 -1
  190. package/dist/{document-class-B4WBGWSA.js → document-class-4OCKM577.js} +11 -11
  191. package/dist/{document-class-B4WBGWSA.js.map → document-class-4OCKM577.js.map} +1 -1
  192. package/dist/hooks/index.js +13 -13
  193. package/dist/hooks/useGtm.js +13 -13
  194. package/dist/hooks/useMoney.js +13 -13
  195. package/dist/hooks/useStore.js +13 -13
  196. package/dist/hooks/useUser.js +3 -3
  197. package/dist/index.js +13 -13
  198. package/dist/{navigation-MBQKDV5V.js → navigation-BFBWKBGA.js} +5 -5
  199. package/dist/{navigation-MBQKDV5V.js.map → navigation-BFBWKBGA.js.map} +1 -1
  200. package/dist/{navigation-VPRCR725.js → navigation-LZNDPCZR.js} +4 -4
  201. package/dist/{navigation-VPRCR725.js.map → navigation-LZNDPCZR.js.map} +1 -1
  202. package/dist/{not-found-OIZGDR7G.js → not-found-4MCKSS62.js} +16 -16
  203. package/dist/{not-found-OIZGDR7G.js.map → not-found-4MCKSS62.js.map} +1 -1
  204. package/dist/providers/index.js +13 -13
  205. package/dist/routes/account/orders.js +4 -4
  206. package/dist/routes/account.js +13 -13
  207. package/dist/routes/blog.js +8 -8
  208. package/dist/routes/brands.js +4 -4
  209. package/dist/routes/cart.js +22 -22
  210. package/dist/routes/home.js +19 -19
  211. package/dist/routes/index.js +3 -3
  212. package/dist/routes/loyalty.js +5 -5
  213. package/dist/routes/page.js +4 -4
  214. package/dist/routes/product-listing.js +20 -20
  215. package/dist/routes/product.js +18 -18
  216. package/dist/routes/seo-redirects.js +3 -3
  217. package/dist/routes/testimonials.js +2 -2
  218. package/dist/routes/thank-you.js +4 -4
  219. package/dist/skeleton.js +19 -19
  220. package/dist/{store-lookup-HMU7QMSC.js → store-lookup-6JBMBBBF.js} +8 -8
  221. package/dist/{store-lookup-HMU7QMSC.js.map → store-lookup-6JBMBBBF.js.map} +1 -1
  222. package/dist/tanstack.js +11 -11
  223. package/dist/utils/index.js +2 -2
  224. package/package.json +1 -1
  225. package/tailwind/components/home/HomePageRenderer.tsx.txt +3 -18
  226. package/tailwind/components/live-editor/frame.ts.txt +20 -0
  227. package/dist/chunk-444GCMTZ.js.map +0 -1
  228. package/dist/chunk-AEM5UEH6.js.map +0 -1
  229. package/dist/chunk-H2QBHOF2.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/common/lazy.ts","../src/components/common/Image.tsx","../src/components/common/DeferredData.tsx"],"names":["Image","memo","DeferredRenderer","jsx"],"mappings":"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","file":"chunk-TDIENKPW.js","sourcesContent":["import { lazyComponent } from '../../utils/lazy-component';\n\n/**\n * Lazy-loaded common components\n * Use these for code-splitting non-critical components\n *\n * NOTE: Skeleton components are sourced from @salla.sa/twilight-components-react\n * because they must render instantly during route transitions.\n */\nexport const LazyBreadcrumb = lazyComponent(() =>\n import('./Breadcrumb').then((m) => ({ default: m.Breadcrumb }))\n);\n\nexport const LazyNoContent = lazyComponent(() =>\n import('./NoContent').then((m) => ({ default: m.NoContent }))\n);\n\nexport const LazyRenderWhenVisible = lazyComponent(() =>\n import('./RenderWhenVisible').then((m) => ({ default: m.RenderWhenVisible }))\n);\n\nexport const LazyCurrencySymbol = lazyComponent(() =>\n import('./CurrencySymbol').then((m) => ({ default: m.CurrencySymbol }))\n);\n\nexport const LazyErrorPage = lazyComponent(() =>\n import('./ErrorPage').then((m) => ({ default: m.ErrorPage }))\n);\n","import { memo } from 'react';\nimport { getCdnImageSrcSet, getCdnImageUrl } from '../../utils/cdn-image';\n\nexport interface ImageProps extends React.ImgHTMLAttributes<HTMLImageElement> {\n /** Image source URL */\n src?: string;\n /** Alt text for accessibility */\n alt: string;\n /** Whether this image is above the fold / LCP candidate */\n priority?: boolean;\n /** Aspect ratio for CLS prevention (e.g. \"16/9\", \"1/1\", \"4/3\") */\n aspectRatio?: string;\n /** Object fit mode */\n objectFit?: 'cover' | 'contain' | 'fill' | 'none' | 'scale-down';\n /** Mobile image source for <picture> element */\n mobileSrc?: string;\n /** Mobile breakpoint for <source> media query (default: 768px) */\n mobileBreakpoint?: number;\n /** Skip the wrapper div */\n noWrapper?: boolean;\n /**\n * CDN widths for a density `srcset`. Pass `sizes` so the browser picks a\n * candidate close to the displayed CSS size.\n */\n srcSetWidths?: readonly number[];\n}\n\n/**\n * Optimized Image component with native browser lazy loading.\n *\n * - Uses `loading=\"lazy\"` + `decoding=\"async\"` by default for below-the-fold images.\n * - Uses `loading=\"eager\"` + `fetchPriority=\"high\"` for priority (above-the-fold / LCP) images.\n * - Supports responsive `<picture>` with mobile source.\n * - Provides `aspectRatio` for CLS prevention.\n * - When `srcSetWidths` + `sizes` are set, emits a sized CDN `srcset`.\n */\nexport const Image = memo(function Image({\n src,\n alt,\n priority = false,\n aspectRatio,\n objectFit = 'cover',\n mobileSrc,\n mobileBreakpoint = 768,\n noWrapper = false,\n className = '',\n style,\n width,\n height,\n sizes,\n srcSet: srcSetProp,\n srcSetWidths,\n ...rest\n}: ImageProps) {\n if (!src) return null;\n\n const generatedSrcSet =\n srcSetProp || (srcSetWidths?.length ? getCdnImageSrcSet(src, srcSetWidths) : undefined);\n const generatedMobileSrcSet =\n srcSetWidths?.length && mobileSrc ? getCdnImageSrcSet(mobileSrc, srcSetWidths) : undefined;\n const cdnWidth = srcSetWidths?.length\n ? width != null && srcSetWidths.includes(Number(width))\n ? Number(width)\n : srcSetWidths[0]\n : width;\n // Width-only CDN URLs so `src` matches a srcset candidate for preload.\n const cdnOptions = generatedSrcSet ? { width: cdnWidth } : { width: cdnWidth, height };\n\n const optimizedSrc = getCdnImageUrl(src, cdnOptions);\n const optimizedMobileSrc = getCdnImageUrl(mobileSrc, cdnOptions);\n\n const objectFitClass = `object-${objectFit}`;\n const imgClasses = [className, objectFitClass].filter(Boolean).join(' ');\n\n const loadingProps: React.ImgHTMLAttributes<HTMLImageElement> = priority\n ? { loading: 'eager' as const, fetchPriority: 'high' as const, decoding: 'sync' as const }\n : { loading: 'lazy' as const, decoding: 'async' as const };\n\n const hasWrapper = !noWrapper && !!aspectRatio;\n\n const img = (\n <img\n src={optimizedSrc}\n alt={alt}\n className={imgClasses}\n width={width}\n height={height}\n sizes={sizes}\n srcSet={generatedSrcSet}\n // With a wrapper, `style` goes to the wrapper; otherwise it must land on the <img>.\n style={hasWrapper ? undefined : style}\n {...loadingProps}\n {...rest}\n />\n );\n\n const imgElement = optimizedMobileSrc ? (\n <picture>\n <source\n media={`(max-width: ${mobileBreakpoint}px)`}\n srcSet={generatedMobileSrcSet || optimizedMobileSrc}\n sizes={generatedMobileSrcSet ? sizes : undefined}\n />\n {img}\n </picture>\n ) : (\n img\n );\n\n if (!hasWrapper) {\n return imgElement;\n }\n\n return (\n <div className=\"relative overflow-hidden\" style={{ aspectRatio, ...style }}>\n {imgElement}\n </div>\n );\n});\n","import { Suspense, memo, use, type ReactNode } from 'react';\n\nexport interface DeferredDataProps<T> {\n promise: Promise<T> | T;\n fallback: ReactNode;\n children: (data: T) => ReactNode;\n}\n\nconst DEFERRED_KEY = Symbol.for('twilight.deferred');\n\ninterface DeferredState<T> {\n status: 'pending' | 'success' | 'error';\n value?: T;\n error?: unknown;\n}\n\nexport interface DeferredPromise<T> extends Promise<T> {\n [DEFERRED_KEY]?: DeferredState<T>;\n}\n\nconst seenPromises = typeof WeakSet !== 'undefined' ? new WeakSet() : null;\n\nfunction defer<T>(promise: Promise<T>): DeferredPromise<T> {\n const existing = (promise as DeferredPromise<T>)[DEFERRED_KEY];\n if (existing) return promise as DeferredPromise<T>;\n\n const state: DeferredState<T> = { status: 'pending' };\n\n const deferred = promise as DeferredPromise<T>;\n deferred[DEFERRED_KEY] = state;\n\n promise.then(\n (value) => {\n state.status = 'success';\n state.value = value;\n },\n (error) => {\n state.status = 'error';\n state.error = error;\n }\n );\n\n return deferred;\n}\n\nconst DeferredRenderer = memo(function DeferredRenderer<T>({\n promise,\n children,\n}: {\n promise: DeferredPromise<T>;\n children: (data: T) => ReactNode;\n}) {\n const state = promise[DEFERRED_KEY];\n\n if (state?.status === 'success') {\n return children(state.value!);\n }\n\n if (state?.status === 'error') {\n throw state.error;\n }\n\n const data = use(promise);\n return children(data);\n}) as <T>(props: { promise: DeferredPromise<T>; children: (data: T) => ReactNode }) => ReactNode;\n\nfunction DeferredFallback<T>({\n promise,\n fallback,\n children,\n}: {\n promise: DeferredPromise<T>;\n fallback: ReactNode;\n children: (data: T) => ReactNode;\n}) {\n const state = promise[DEFERRED_KEY];\n if (state?.status === 'success') {\n return children(state.value!);\n }\n return <>{fallback}</>;\n}\n\nexport function resolveDeferred<T>(\n promiseOrValue: Promise<T> | T | undefined\n): T | Promise<T> | undefined {\n if (promiseOrValue == null || !(promiseOrValue instanceof Promise)) return promiseOrValue;\n const deferred = defer(promiseOrValue);\n const state = deferred[DEFERRED_KEY];\n if (state?.status === 'success') return state.value as T;\n return promiseOrValue;\n}\n\nexport function DeferredData<T>({ promise, fallback, children }: DeferredDataProps<T>) {\n if (!(promise instanceof Promise)) {\n return children(promise);\n }\n\n if (seenPromises && promise instanceof Promise) seenPromises.add(promise);\n\n const deferred = defer(promise);\n const state = deferred[DEFERRED_KEY];\n\n if (state?.status === 'success') {\n return children(state.value!);\n }\n\n if (state?.status === 'error') {\n throw state.error;\n }\n\n return (\n <Suspense\n fallback={\n <DeferredFallback promise={deferred} fallback={fallback}>\n {children}\n </DeferredFallback>\n }\n >\n <DeferredRenderer promise={deferred}>{children}</DeferredRenderer>\n </Suspense>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/components/common/lazy.ts","../src/components/common/Image.tsx","../src/components/common/DeferredData.tsx"],"names":["Image","memo","DeferredRenderer","jsx"],"mappings":"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","file":"chunk-CTPYM52J.js","sourcesContent":["import { lazyComponent } from '../../utils/lazy-component';\n\n/**\n * Lazy-loaded common components\n * Use these for code-splitting non-critical components\n *\n * NOTE: Skeleton components are sourced from @salla.sa/twilight-components-react\n * because they must render instantly during route transitions.\n */\nexport const LazyBreadcrumb = lazyComponent(() =>\n import('./Breadcrumb').then((m) => ({ default: m.Breadcrumb }))\n);\n\nexport const LazyNoContent = lazyComponent(() =>\n import('./NoContent').then((m) => ({ default: m.NoContent }))\n);\n\nexport const LazyRenderWhenVisible = lazyComponent(() =>\n import('./RenderWhenVisible').then((m) => ({ default: m.RenderWhenVisible }))\n);\n\nexport const LazyCurrencySymbol = lazyComponent(() =>\n import('./CurrencySymbol').then((m) => ({ default: m.CurrencySymbol }))\n);\n\nexport const LazyErrorPage = lazyComponent(() =>\n import('./ErrorPage').then((m) => ({ default: m.ErrorPage }))\n);\n","import { memo } from 'react';\nimport { getCdnImageSrcSet, getCdnImageUrl } from '../../utils/cdn-image';\n\nexport interface ImageProps extends React.ImgHTMLAttributes<HTMLImageElement> {\n /** Image source URL */\n src?: string;\n /** Alt text for accessibility */\n alt: string;\n /** Whether this image is above the fold / LCP candidate */\n priority?: boolean;\n /** Aspect ratio for CLS prevention (e.g. \"16/9\", \"1/1\", \"4/3\") */\n aspectRatio?: string;\n /** Object fit mode */\n objectFit?: 'cover' | 'contain' | 'fill' | 'none' | 'scale-down';\n /** Mobile image source for <picture> element */\n mobileSrc?: string;\n /** Mobile breakpoint for <source> media query (default: 768px) */\n mobileBreakpoint?: number;\n /** Skip the wrapper div */\n noWrapper?: boolean;\n /**\n * CDN widths for a density `srcset`. Pass `sizes` so the browser picks a\n * candidate close to the displayed CSS size.\n */\n srcSetWidths?: readonly number[];\n}\n\n/**\n * Optimized Image component with native browser lazy loading.\n *\n * - Uses `loading=\"lazy\"` + `decoding=\"async\"` by default for below-the-fold images.\n * - Uses `loading=\"eager\"` + `fetchPriority=\"high\"` for priority (above-the-fold / LCP) images.\n * - Supports responsive `<picture>` with mobile source.\n * - Provides `aspectRatio` for CLS prevention.\n * - When `srcSetWidths` + `sizes` are set, emits a sized CDN `srcset`.\n */\nexport const Image = memo(function Image({\n src,\n alt,\n priority = false,\n aspectRatio,\n objectFit = 'cover',\n mobileSrc,\n mobileBreakpoint = 768,\n noWrapper = false,\n className = '',\n style,\n width,\n height,\n sizes,\n srcSet: srcSetProp,\n srcSetWidths,\n ...rest\n}: ImageProps) {\n if (!src) return null;\n\n const generatedSrcSet =\n srcSetProp || (srcSetWidths?.length ? getCdnImageSrcSet(src, srcSetWidths) : undefined);\n const generatedMobileSrcSet =\n srcSetWidths?.length && mobileSrc ? getCdnImageSrcSet(mobileSrc, srcSetWidths) : undefined;\n const cdnWidth = srcSetWidths?.length\n ? width != null && srcSetWidths.includes(Number(width))\n ? Number(width)\n : srcSetWidths[0]\n : width;\n // Width-only CDN URLs so `src` matches a srcset candidate for preload.\n const cdnOptions = generatedSrcSet ? { width: cdnWidth } : { width: cdnWidth, height };\n\n const optimizedSrc = getCdnImageUrl(src, cdnOptions);\n const optimizedMobileSrc = getCdnImageUrl(mobileSrc, cdnOptions);\n\n const objectFitClass = `object-${objectFit}`;\n const imgClasses = [className, objectFitClass].filter(Boolean).join(' ');\n\n const loadingProps: React.ImgHTMLAttributes<HTMLImageElement> = priority\n ? { loading: 'eager' as const, fetchPriority: 'high' as const, decoding: 'sync' as const }\n : { loading: 'lazy' as const, decoding: 'async' as const };\n\n const hasWrapper = !noWrapper && !!aspectRatio;\n\n const img = (\n <img\n src={optimizedSrc}\n alt={alt}\n className={imgClasses}\n width={width}\n height={height}\n sizes={sizes}\n srcSet={generatedSrcSet}\n // With a wrapper, `style` goes to the wrapper; otherwise it must land on the <img>.\n style={hasWrapper ? undefined : style}\n {...loadingProps}\n {...rest}\n />\n );\n\n const imgElement = optimizedMobileSrc ? (\n <picture>\n <source\n media={`(max-width: ${mobileBreakpoint}px)`}\n srcSet={generatedMobileSrcSet || optimizedMobileSrc}\n sizes={generatedMobileSrcSet ? sizes : undefined}\n />\n {img}\n </picture>\n ) : (\n img\n );\n\n if (!hasWrapper) {\n return imgElement;\n }\n\n return (\n <div className=\"relative overflow-hidden\" style={{ aspectRatio, ...style }}>\n {imgElement}\n </div>\n );\n});\n","import { Suspense, memo, use, type ReactNode } from 'react';\n\nexport interface DeferredDataProps<T> {\n promise: Promise<T> | T;\n fallback: ReactNode;\n children: (data: T) => ReactNode;\n}\n\nconst DEFERRED_KEY = Symbol.for('twilight.deferred');\n\ninterface DeferredState<T> {\n status: 'pending' | 'success' | 'error';\n value?: T;\n error?: unknown;\n}\n\nexport interface DeferredPromise<T> extends Promise<T> {\n [DEFERRED_KEY]?: DeferredState<T>;\n}\n\nconst seenPromises = typeof WeakSet !== 'undefined' ? new WeakSet() : null;\n\nfunction defer<T>(promise: Promise<T>): DeferredPromise<T> {\n const existing = (promise as DeferredPromise<T>)[DEFERRED_KEY];\n if (existing) return promise as DeferredPromise<T>;\n\n const state: DeferredState<T> = { status: 'pending' };\n\n const deferred = promise as DeferredPromise<T>;\n deferred[DEFERRED_KEY] = state;\n\n promise.then(\n (value) => {\n state.status = 'success';\n state.value = value;\n },\n (error) => {\n state.status = 'error';\n state.error = error;\n }\n );\n\n return deferred;\n}\n\nconst DeferredRenderer = memo(function DeferredRenderer<T>({\n promise,\n children,\n}: {\n promise: DeferredPromise<T>;\n children: (data: T) => ReactNode;\n}) {\n const state = promise[DEFERRED_KEY];\n\n if (state?.status === 'success') {\n return children(state.value!);\n }\n\n if (state?.status === 'error') {\n throw state.error;\n }\n\n const data = use(promise);\n return children(data);\n}) as <T>(props: { promise: DeferredPromise<T>; children: (data: T) => ReactNode }) => ReactNode;\n\nfunction DeferredFallback<T>({\n promise,\n fallback,\n children,\n}: {\n promise: DeferredPromise<T>;\n fallback: ReactNode;\n children: (data: T) => ReactNode;\n}) {\n const state = promise[DEFERRED_KEY];\n if (state?.status === 'success') {\n return children(state.value!);\n }\n return <>{fallback}</>;\n}\n\nexport function resolveDeferred<T>(\n promiseOrValue: Promise<T> | T | undefined\n): T | Promise<T> | undefined {\n if (promiseOrValue == null || !(promiseOrValue instanceof Promise)) return promiseOrValue;\n const deferred = defer(promiseOrValue);\n const state = deferred[DEFERRED_KEY];\n if (state?.status === 'success') return state.value as T;\n return promiseOrValue;\n}\n\nexport function DeferredData<T>({ promise, fallback, children }: DeferredDataProps<T>) {\n if (!(promise instanceof Promise)) {\n return children(promise);\n }\n\n if (seenPromises && promise instanceof Promise) seenPromises.add(promise);\n\n const deferred = defer(promise);\n const state = deferred[DEFERRED_KEY];\n\n if (state?.status === 'success') {\n return children(state.value!);\n }\n\n if (state?.status === 'error') {\n throw state.error;\n }\n\n return (\n <Suspense\n fallback={\n <DeferredFallback promise={deferred} fallback={fallback}>\n {children}\n </DeferredFallback>\n }\n >\n <DeferredRenderer promise={deferred}>{children}</DeferredRenderer>\n </Suspense>\n );\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { orThrow } from './chunk-SOLUKKTW.js';
2
- import { api } from './chunk-UXJAZ5JP.js';
1
+ import { orThrow } from './chunk-7AWWYJXA.js';
2
+ import { api } from './chunk-RORNWRSU.js';
3
3
  import { getSallaSDK } from './chunk-NHA4SBKG.js';
4
4
  import { queryOptions } from '@tanstack/react-query';
5
5
 
@@ -44,5 +44,5 @@ var cart = {
44
44
  };
45
45
 
46
46
  export { cart };
47
- //# sourceMappingURL=chunk-MOAMYULW.js.map
48
- //# sourceMappingURL=chunk-MOAMYULW.js.map
47
+ //# sourceMappingURL=chunk-D7UQKKFR.js.map
48
+ //# sourceMappingURL=chunk-D7UQKKFR.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/api/cart.ts"],"names":[],"mappings":";;;;;AAaA,SAAS,sBAAsB,IAAA,EAAoC;AACjE,EAAA,IAAI,CAAC,IAAA,CAAK,IAAA,EAAM,OAAO,IAAA;AACvB,EAAA,OAAO;AAAA,IACL,GAAG,IAAA,CAAK,IAAA;AAAA,IACR,OAAA,EAAS,KAAK,OAAA,IAAW,IAAA;AAAA;AAAA,IAEzB,IAAA,EAAM,IAAA,CAAK,IAAA,IAAQ,IAAA,CAAK,KAAK,IAAA,IAAQ;AAAA,GACvC;AACF;AAEO,IAAM,IAAA,GAAO;AAAA,EAClB,GAAA,EAAK,OAAO,MAAA,KAAyC;AACnD,IAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,GAAA,CAAI,IAAI,CAAA,KAAA,EAAQ,MAAM,CAAA,CAAE,CAAA,CAAE,IAAA,EAAgC;AACjF,IAAA,OAAO,sBAAsB,IAAI,CAAA;AAAA,EACnC,CAAA;AAAA,EAEA,YAAY,CAAC,MAAA,KAAyC,QAAQ,IAAA,CAAK,GAAA,CAAI,MAAM,CAAC,CAAA;AAAA;AAAA,EAG9E,cAAc,YAAoC;AAChD,IAAA,MAAM,QAAQ,WAAA,EAAY;AAC1B,IAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AAEnB,IAAA,MAAM,KAAA,CAAM,OAAA,EAAQ,CAAE,KAAA,CAAM,MAAM,MAAS,CAAA;AAC3C,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,gBAAA,EAAiB;AAAA,EACzC,CAAA;AAAA,EAEA,OAAA,EAAS;AAAA,IACP,MAAA,EAAQ,CAAC,MAAA,KACP,YAAA,CAAa;AAAA,MACX,QAAA,EAAU,CAAC,MAAA,EAAQ,MAAM,CAAA;AAAA,MACzB,OAAA,EAAS,MAAM,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA;AAAA;AAAA,MAE9B,SAAA,EAAW,CAAA;AAAA,MACX,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,IACH,SAAA,EAAW,MACT,YAAA,CAAa;AAAA,MACX,QAAA,EAAU,CAAC,MAAA,EAAQ,YAAY,CAAA;AAAA,MAC/B,OAAA,EAAS,MAAM,IAAA,CAAK,YAAA,EAAa;AAAA;AAAA,MAEjC,SAAA,EAAW,CAAA;AAAA,MACX,MAAA,EAAQ;AAAA,KACT;AAAA;AAEP","file":"chunk-MOAMYULW.js","sourcesContent":["import { queryOptions } from '@tanstack/react-query';\nimport { api } from './client';\nimport type { Cart } from '../types';\nimport { orThrow } from '../providers/NavigationProvider';\nimport { getSallaSDK } from '../utils/sdk-helpers';\n\nexport interface CartApiResponse {\n /** Absent once the cart was turned into an order (the body then carries a top-level `redirect`). */\n cart?: Omit<Cart, 'loyalty'>;\n loyalty?: Cart['loyalty'];\n gift?: Cart['gift'];\n}\n\nfunction normalizeCartResponse(data: CartApiResponse): Cart | null {\n if (!data.cart) return null;\n return {\n ...data.cart,\n loyalty: data.loyalty ?? null,\n // The API sends `gift` inside `cart`.\n gift: data.gift ?? data.cart.gift ?? null,\n } as Cart;\n}\n\nexport const cart = {\n get: async (cartId: number): Promise<Cart | null> => {\n const { data } = await api.get(`cart/${cartId}`).json<{ data: CartApiResponse }>();\n return normalizeCartResponse(data);\n },\n\n getOrThrow: (cartId: number): Promise<Cart | null> => orThrow(cart.get(cartId)),\n\n /** The visitor's cart id, which only the Salla SDK knows; `null` outside the browser. */\n getCurrentId: async (): Promise<number | null> => {\n const salla = getSallaSDK();\n if (!salla) return null;\n // The app bundle can run before the SDK module, when `salla` is still the head stub.\n await salla.onReady().catch(() => undefined);\n return salla.cart.api.getCurrentCartId();\n },\n\n queries: {\n detail: (cartId: number) =>\n queryOptions({\n queryKey: ['cart', cartId],\n queryFn: () => cart.get(cartId),\n // The SDK changes the cart from any page, so a cached copy is never safe to show.\n staleTime: 0,\n gcTime: 0,\n }),\n currentId: () =>\n queryOptions({\n queryKey: ['cart', 'current-id'],\n queryFn: () => cart.getCurrentId(),\n // Completing an order starts a new cart, so an earlier id is never reused.\n staleTime: 0,\n gcTime: 0,\n }),\n },\n};\n"]}
1
+ {"version":3,"sources":["../src/api/cart.ts"],"names":[],"mappings":";;;;;AAaA,SAAS,sBAAsB,IAAA,EAAoC;AACjE,EAAA,IAAI,CAAC,IAAA,CAAK,IAAA,EAAM,OAAO,IAAA;AACvB,EAAA,OAAO;AAAA,IACL,GAAG,IAAA,CAAK,IAAA;AAAA,IACR,OAAA,EAAS,KAAK,OAAA,IAAW,IAAA;AAAA;AAAA,IAEzB,IAAA,EAAM,IAAA,CAAK,IAAA,IAAQ,IAAA,CAAK,KAAK,IAAA,IAAQ;AAAA,GACvC;AACF;AAEO,IAAM,IAAA,GAAO;AAAA,EAClB,GAAA,EAAK,OAAO,MAAA,KAAyC;AACnD,IAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,GAAA,CAAI,IAAI,CAAA,KAAA,EAAQ,MAAM,CAAA,CAAE,CAAA,CAAE,IAAA,EAAgC;AACjF,IAAA,OAAO,sBAAsB,IAAI,CAAA;AAAA,EACnC,CAAA;AAAA,EAEA,YAAY,CAAC,MAAA,KAAyC,QAAQ,IAAA,CAAK,GAAA,CAAI,MAAM,CAAC,CAAA;AAAA;AAAA,EAG9E,cAAc,YAAoC;AAChD,IAAA,MAAM,QAAQ,WAAA,EAAY;AAC1B,IAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AAEnB,IAAA,MAAM,KAAA,CAAM,OAAA,EAAQ,CAAE,KAAA,CAAM,MAAM,MAAS,CAAA;AAC3C,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,gBAAA,EAAiB;AAAA,EACzC,CAAA;AAAA,EAEA,OAAA,EAAS;AAAA,IACP,MAAA,EAAQ,CAAC,MAAA,KACP,YAAA,CAAa;AAAA,MACX,QAAA,EAAU,CAAC,MAAA,EAAQ,MAAM,CAAA;AAAA,MACzB,OAAA,EAAS,MAAM,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA;AAAA;AAAA,MAE9B,SAAA,EAAW,CAAA;AAAA,MACX,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,IACH,SAAA,EAAW,MACT,YAAA,CAAa;AAAA,MACX,QAAA,EAAU,CAAC,MAAA,EAAQ,YAAY,CAAA;AAAA,MAC/B,OAAA,EAAS,MAAM,IAAA,CAAK,YAAA,EAAa;AAAA;AAAA,MAEjC,SAAA,EAAW,CAAA;AAAA,MACX,MAAA,EAAQ;AAAA,KACT;AAAA;AAEP","file":"chunk-D7UQKKFR.js","sourcesContent":["import { queryOptions } from '@tanstack/react-query';\nimport { api } from './client';\nimport type { Cart } from '../types';\nimport { orThrow } from '../providers/NavigationProvider';\nimport { getSallaSDK } from '../utils/sdk-helpers';\n\nexport interface CartApiResponse {\n /** Absent once the cart was turned into an order (the body then carries a top-level `redirect`). */\n cart?: Omit<Cart, 'loyalty'>;\n loyalty?: Cart['loyalty'];\n gift?: Cart['gift'];\n}\n\nfunction normalizeCartResponse(data: CartApiResponse): Cart | null {\n if (!data.cart) return null;\n return {\n ...data.cart,\n loyalty: data.loyalty ?? null,\n // The API sends `gift` inside `cart`.\n gift: data.gift ?? data.cart.gift ?? null,\n } as Cart;\n}\n\nexport const cart = {\n get: async (cartId: number): Promise<Cart | null> => {\n const { data } = await api.get(`cart/${cartId}`).json<{ data: CartApiResponse }>();\n return normalizeCartResponse(data);\n },\n\n getOrThrow: (cartId: number): Promise<Cart | null> => orThrow(cart.get(cartId)),\n\n /** The visitor's cart id, which only the Salla SDK knows; `null` outside the browser. */\n getCurrentId: async (): Promise<number | null> => {\n const salla = getSallaSDK();\n if (!salla) return null;\n // The app bundle can run before the SDK module, when `salla` is still the head stub.\n await salla.onReady().catch(() => undefined);\n return salla.cart.api.getCurrentCartId();\n },\n\n queries: {\n detail: (cartId: number) =>\n queryOptions({\n queryKey: ['cart', cartId],\n queryFn: () => cart.get(cartId),\n // The SDK changes the cart from any page, so a cached copy is never safe to show.\n staleTime: 0,\n gcTime: 0,\n }),\n currentId: () =>\n queryOptions({\n queryKey: ['cart', 'current-id'],\n queryFn: () => cart.getCurrentId(),\n // Completing an order starts a new cart, so an earlier id is never reused.\n staleTime: 0,\n gcTime: 0,\n }),\n },\n};\n"]}
@@ -1,4 +1,4 @@
1
- import { api } from './chunk-UXJAZ5JP.js';
1
+ import { api } from './chunk-RORNWRSU.js';
2
2
  import { queryOptions } from '@tanstack/react-query';
3
3
 
4
4
  var user = {
@@ -19,5 +19,5 @@ var user = {
19
19
  };
20
20
 
21
21
  export { user };
22
- //# sourceMappingURL=chunk-QQWJNRSI.js.map
23
- //# sourceMappingURL=chunk-QQWJNRSI.js.map
22
+ //# sourceMappingURL=chunk-DD622QIQ.js.map
23
+ //# sourceMappingURL=chunk-DD622QIQ.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/api/user.ts"],"names":[],"mappings":";;;AAIO,IAAM,IAAA,GAAO;AAAA,EAClB,KAAK,YAAkC;AACrC,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,GAAA,CACV,GAAA,CAAI,WAAW,CAAA,CACf,MAAmC,CACnC,IAAA,CAAK,CAAC,CAAA,MAAO,EAAE,GAAG,CAAA,CAAE,IAAA,EAAM,IAAA,EAAM,QAAgB,CAAE,CAAA;AAAA,IACvD,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,sBAAsB,KAAK,CAAA;AACzC,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF,CAAA;AAAA,EAEA,OAAA,EAAS;AAAA,IACP,OAAA,EAAS,MACP,YAAA,CAA0B;AAAA,MACxB,QAAA,EAAU,CAAC,MAAA,EAAQ,SAAS,CAAA;AAAA,MAC5B,SAAS,IAAA,CAAK;AAAA,KACf;AAAA;AAEP","file":"chunk-QQWJNRSI.js","sourcesContent":["import { queryOptions } from '@tanstack/react-query';\nimport { api } from './client';\nimport type { User } from '../types';\n\nexport const user = {\n get: async (): Promise<User | null> => {\n try {\n return await api\n .get('auth/user')\n .json<{ data: Omit<User, 'type'> }>()\n .then((r) => ({ ...r.data, type: 'user' as const }));\n } catch (error) {\n console.debug('[user.get] Failed:', error);\n return null;\n }\n },\n\n queries: {\n current: () =>\n queryOptions<User | null>({\n queryKey: ['user', 'current'],\n queryFn: user.get,\n }),\n },\n};\n"]}
1
+ {"version":3,"sources":["../src/api/user.ts"],"names":[],"mappings":";;;AAIO,IAAM,IAAA,GAAO;AAAA,EAClB,KAAK,YAAkC;AACrC,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,GAAA,CACV,GAAA,CAAI,WAAW,CAAA,CACf,MAAmC,CACnC,IAAA,CAAK,CAAC,CAAA,MAAO,EAAE,GAAG,CAAA,CAAE,IAAA,EAAM,IAAA,EAAM,QAAgB,CAAE,CAAA;AAAA,IACvD,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,sBAAsB,KAAK,CAAA;AACzC,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF,CAAA;AAAA,EAEA,OAAA,EAAS;AAAA,IACP,OAAA,EAAS,MACP,YAAA,CAA0B;AAAA,MACxB,QAAA,EAAU,CAAC,MAAA,EAAQ,SAAS,CAAA;AAAA,MAC5B,SAAS,IAAA,CAAK;AAAA,KACf;AAAA;AAEP","file":"chunk-DD622QIQ.js","sourcesContent":["import { queryOptions } from '@tanstack/react-query';\nimport { api } from './client';\nimport type { User } from '../types';\n\nexport const user = {\n get: async (): Promise<User | null> => {\n try {\n return await api\n .get('auth/user')\n .json<{ data: Omit<User, 'type'> }>()\n .then((r) => ({ ...r.data, type: 'user' as const }));\n } catch (error) {\n console.debug('[user.get] Failed:', error);\n return null;\n }\n },\n\n queries: {\n current: () =>\n queryOptions<User | null>({\n queryKey: ['user', 'current'],\n queryFn: user.get,\n }),\n },\n};\n"]}
@@ -1,19 +1,19 @@
1
- import { editorFrame, previewTheme, postToEditor, FRAME_LOADED_ACTION } from './chunk-H2QBHOF2.js';
2
- import { Header } from './chunk-NRPYHHRQ.js';
3
- import { Footer } from './chunk-VNZ6VI2O.js';
1
+ import { Header } from './chunk-ONHJKZ6J.js';
2
+ import { Footer } from './chunk-QLY2NOJT.js';
4
3
  import { resolveTwilightSdkUrl, TICKETING_SCRIPT_URL, setSnippetPageTargets } from './chunk-N6ZE6HUX.js';
5
- import { useDevSettingsOverrides, useDevReportSettingsFetchedAt } from './chunk-AEM5UEH6.js';
6
- import { apps } from './chunk-ATL7CYF2.js';
4
+ import { editorFrame, previewTheme, postToEditor, FRAME_LOADED_ACTION } from './chunk-YL6X3ZMG.js';
5
+ import { useDevSettingsOverrides, useDevReportSettingsFetchedAt } from './chunk-JYGEHJU4.js';
6
+ import { apps } from './chunk-HMMOUH2W.js';
7
7
  import { color } from './chunk-VVZNW5CB.js';
8
8
  import { applyThemeHookSlots, installAppScope } from './chunk-WQPG22DY.js';
9
9
  import { withOwnerMaintenanceButton, withoutMaintenanceOnPreviewHost } from './chunk-Q7E4TNN7.js';
10
- import { useLocation, useIsHome, NavigationInterceptor } from './chunk-SOLUKKTW.js';
11
- import { useUser } from './chunk-IK7CQSEA.js';
10
+ import { useLocation, useIsHome, NavigationInterceptor } from './chunk-7AWWYJXA.js';
11
+ import { useUser } from './chunk-OZP22OV3.js';
12
12
  import { DocumentClassProvider, useDocumentClass } from './chunk-JWXJPJBO.js';
13
13
  import { WidgetHead } from './chunk-V2ZDTY6H.js';
14
14
  import { HookSlot } from './chunk-5XDPAKF5.js';
15
15
  import { hookRegistry } from './chunk-GCPEMNSU.js';
16
- import { getActiveCurrency, ENGINE_VERSION } from './chunk-UXJAZ5JP.js';
16
+ import { getActiveCurrency, ENGINE_VERSION } from './chunk-RORNWRSU.js';
17
17
  import { useTranslation, I18nProvider } from './chunk-TYNZ5B2B.js';
18
18
  import { Toaster } from './chunk-MWYKP7CI.js';
19
19
  import { isNativeApp } from './chunk-3E3ABCPC.js';
@@ -344,16 +344,16 @@ function useNativeSpaWebview() {
344
344
  }
345
345
  var navigationSetups = {
346
346
  tanstack: lazyComponent(
347
- () => import('./navigation-MBQKDV5V.js').then((m) => ({ default: m.NavigationSetup }))
347
+ () => import('./navigation-BFBWKBGA.js').then((m) => ({ default: m.NavigationSetup }))
348
348
  ),
349
349
  // Not preloaded with the rest: a TanStack worker would load Next.js code it never runs.
350
- nextjs: lazy(() => import('./navigation-VPRCR725.js').then((m) => ({ default: m.NavigationSetup })))
350
+ nextjs: lazy(() => import('./navigation-LZNDPCZR.js').then((m) => ({ default: m.NavigationSetup })))
351
351
  };
352
352
 
353
353
  // src/providers/DocumentSyncRegistry.ts
354
354
  var routeDocumentSyncs = {
355
355
  tanstack: lazyComponent(
356
- () => import('./document-class-B4WBGWSA.js').then((m) => ({
356
+ () => import('./document-class-4OCKM577.js').then((m) => ({
357
357
  default: m.TanStackDocumentSync
358
358
  }))
359
359
  )
@@ -875,7 +875,7 @@ var LazySiftSnippet = lazyComponent(
875
875
  () => import('./SiftSnippet-5FCU6TR6.js').then((m) => ({ default: m.SiftSnippet }))
876
876
  );
877
877
  var LazyStoreClosedNotification = lazyComponent(
878
- () => import('./StoreClosedNotification-VP2ACWD6.js').then((m) => ({
878
+ () => import('./StoreClosedNotification-NXDQW24E.js').then((m) => ({
879
879
  default: m.StoreClosedNotification
880
880
  }))
881
881
  );
@@ -1122,7 +1122,7 @@ function SallaSdkScripts({ settings }) {
1122
1122
 
1123
1123
  // src/components/store/lazy.ts
1124
1124
  var LazyStoreClosedNotification2 = lazyComponent(
1125
- () => import('./StoreClosedNotification-VP2ACWD6.js').then((m) => ({
1125
+ () => import('./StoreClosedNotification-NXDQW24E.js').then((m) => ({
1126
1126
  default: m.StoreClosedNotification
1127
1127
  }))
1128
1128
  );
@@ -1172,7 +1172,7 @@ function MaintenanceDevBar() {
1172
1172
  ] });
1173
1173
  }
1174
1174
  var LazyLiveEditorBar = lazyComponent(
1175
- () => import('./LiveEditorBar-4AWOAJYX.js').then((m) => ({ default: m.LiveEditorBar }))
1175
+ () => import('./LiveEditorBar-3DUDCCSM.js').then((m) => ({ default: m.LiveEditorBar }))
1176
1176
  );
1177
1177
  function LiveEditor() {
1178
1178
  const [frame, setFrame] = useState(null);
@@ -1474,5 +1474,5 @@ function useStore() {
1474
1474
  }
1475
1475
 
1476
1476
  export { LazyMaintenancePage, LazyStoreClosedNotification2 as LazyStoreClosedNotification, MasterLayout, TwilightProvider, fastCheckoutScript, registerDefaultHooks, registerDocumentSync, routeDocumentSyncs, useBreadcrumbs, useDate, useGtm, useMoney, useNumber, useOpeningHours, usePageConfig, useStore };
1477
- //# sourceMappingURL=chunk-J4EFCWMM.js.map
1478
- //# sourceMappingURL=chunk-J4EFCWMM.js.map
1477
+ //# sourceMappingURL=chunk-ENQEMMQ5.js.map
1478
+ //# sourceMappingURL=chunk-ENQEMMQ5.js.map