@salla.sa/twilight-theme-engine 1.0.134 → 1.0.135

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 (214) hide show
  1. package/dist/{AddToCartForm-D7AQIX7K.js → AddToCartForm-ODVZPTKN.js} +3 -3
  2. package/dist/{AddToCartForm-D7AQIX7K.js.map → AddToCartForm-ODVZPTKN.js.map} +1 -1
  3. package/dist/{BlogAuthorPage-P2TVMO5O.js → BlogAuthorPage-BU23SINI.js} +16 -16
  4. package/dist/{BlogAuthorPage-P2TVMO5O.js.map → BlogAuthorPage-BU23SINI.js.map} +1 -1
  5. package/dist/{BlogCategoryPage-A2BS6T3I.js → BlogCategoryPage-ZVITUHP4.js} +16 -16
  6. package/dist/{BlogCategoryPage-A2BS6T3I.js.map → BlogCategoryPage-ZVITUHP4.js.map} +1 -1
  7. package/dist/{BlogPage-ZOIVZQ5W.js → BlogPage-IN3V7FYK.js} +14 -14
  8. package/dist/{BlogPage-ZOIVZQ5W.js.map → BlogPage-IN3V7FYK.js.map} +1 -1
  9. package/dist/{BlogSinglePage-X57JXKQ6.js → BlogSinglePage-UJG7YPYZ.js} +14 -14
  10. package/dist/{BlogSinglePage-X57JXKQ6.js.map → BlogSinglePage-UJG7YPYZ.js.map} +1 -1
  11. package/dist/{BlogTagPage-WXLEEA63.js → BlogTagPage-XDETNKGR.js} +16 -16
  12. package/dist/{BlogTagPage-WXLEEA63.js.map → BlogTagPage-XDETNKGR.js.map} +1 -1
  13. package/dist/{BrandsPage-6ZMEF4EQ.js → BrandsPage-CBU7JFSX.js} +15 -15
  14. package/dist/{BrandsPage-6ZMEF4EQ.js.map → BrandsPage-CBU7JFSX.js.map} +1 -1
  15. package/dist/{Breadcrumb-FYA3KNAY.js → Breadcrumb-EA2XETAM.js} +14 -14
  16. package/dist/{Breadcrumb-FYA3KNAY.js.map → Breadcrumb-EA2XETAM.js.map} +1 -1
  17. package/dist/{CartItem-XGDV4EZ4.js → CartItem-2TW36QTW.js} +14 -14
  18. package/dist/{CartItem-XGDV4EZ4.js.map → CartItem-2TW36QTW.js.map} +1 -1
  19. package/dist/{CartSummary-BP6BJ7BB.js → CartSummary-TW2CAX57.js} +14 -14
  20. package/dist/{CartSummary-BP6BJ7BB.js.map → CartSummary-TW2CAX57.js.map} +1 -1
  21. package/dist/{Copyright-H4CYJQR3.js → Copyright-57XPE75X.js} +3 -3
  22. package/dist/{Copyright-H4CYJQR3.js.map → Copyright-57XPE75X.js.map} +1 -1
  23. package/dist/{CustomerLayout-YLMMDLXA.js → CustomerLayout-A2M7IY34.js} +14 -14
  24. package/dist/{CustomerLayout-YLMMDLXA.js.map → CustomerLayout-A2M7IY34.js.map} +1 -1
  25. package/dist/{Footer-ADZZF3NE.js → Footer-L5BIYCZ2.js} +4 -4
  26. package/dist/{Footer-ADZZF3NE.js.map → Footer-L5BIYCZ2.js.map} +1 -1
  27. package/dist/{Header-OMEW5PF4.js → Header-NLBDW4MR.js} +8 -8
  28. package/dist/{Header-OMEW5PF4.js.map → Header-NLBDW4MR.js.map} +1 -1
  29. package/dist/{LoyaltyPage-EGTJAFY3.js → LoyaltyPage-BVTDPSP3.js} +14 -14
  30. package/dist/{LoyaltyPage-EGTJAFY3.js.map → LoyaltyPage-BVTDPSP3.js.map} +1 -1
  31. package/dist/{LoyaltyPointsPage-RSPBAI73.js → LoyaltyPointsPage-HZYPCO7C.js} +6 -6
  32. package/dist/{LoyaltyPointsPage-RSPBAI73.js.map → LoyaltyPointsPage-HZYPCO7C.js.map} +1 -1
  33. package/dist/{MainMenu-R7RNOTPO.js → MainMenu-3HP3YJDH.js} +5 -5
  34. package/dist/{MainMenu-R7RNOTPO.js.map → MainMenu-3HP3YJDH.js.map} +1 -1
  35. package/dist/{MasterLayout-LLKACZ7T.js → MasterLayout-KD3GLYYX.js} +14 -14
  36. package/dist/{MasterLayout-LLKACZ7T.js.map → MasterLayout-KD3GLYYX.js.map} +1 -1
  37. package/dist/{MobileMenu-4F4DBTWU.js → MobileMenu-3UEQTURY.js} +15 -15
  38. package/dist/{MobileMenu-4F4DBTWU.js.map → MobileMenu-3UEQTURY.js.map} +1 -1
  39. package/dist/{NotificationsPage-AWKZRH7H.js → NotificationsPage-C6LNYZTB.js} +14 -14
  40. package/dist/{NotificationsPage-AWKZRH7H.js.map → NotificationsPage-C6LNYZTB.js.map} +1 -1
  41. package/dist/{OrderSinglePage-2RTLHMMO.js → OrderSinglePage-LXKINOXP.js} +15 -15
  42. package/dist/{OrderSinglePage-2RTLHMMO.js.map → OrderSinglePage-LXKINOXP.js.map} +1 -1
  43. package/dist/{OrdersPage-57MRSJTB.js → OrdersPage-VBF3P3JH.js} +14 -14
  44. package/dist/{OrdersPage-57MRSJTB.js.map → OrdersPage-VBF3P3JH.js.map} +1 -1
  45. package/dist/{PageSingle-YTXFQHHC.js → PageSingle-E7DTNIY7.js} +3 -3
  46. package/dist/{PageSingle-YTXFQHHC.js.map → PageSingle-E7DTNIY7.js.map} +1 -1
  47. package/dist/{ProductDetails-6LWZSW7R.js → ProductDetails-ZQLQWU7S.js} +4 -4
  48. package/dist/{ProductDetails-6LWZSW7R.js.map → ProductDetails-ZQLQWU7S.js.map} +1 -1
  49. package/dist/{ProfilePage-JKDLNAKB.js → ProfilePage-7LAIDEHS.js} +14 -14
  50. package/dist/{ProfilePage-JKDLNAKB.js.map → ProfilePage-7LAIDEHS.js.map} +1 -1
  51. package/dist/{ReviewsPage-OST5SGH5.js → ReviewsPage-FA3V745S.js} +3 -3
  52. package/dist/{ReviewsPage-OST5SGH5.js.map → ReviewsPage-FA3V745S.js.map} +1 -1
  53. package/dist/{SeoCartWidget-7L2B25DP.js → SeoCartWidget-4456ASOT.js} +14 -14
  54. package/dist/{SeoCartWidget-7L2B25DP.js.map → SeoCartWidget-4456ASOT.js.map} +1 -1
  55. package/dist/{SettingsPage-IFYFZ2SP.js → SettingsPage-IVOHCXVY.js} +14 -14
  56. package/dist/{SettingsPage-IFYFZ2SP.js.map → SettingsPage-IVOHCXVY.js.map} +1 -1
  57. package/dist/{StoreClosedNotification-COURDUGE.js → StoreClosedNotification-DIF6SKBX.js} +15 -15
  58. package/dist/{StoreClosedNotification-COURDUGE.js.map → StoreClosedNotification-DIF6SKBX.js.map} +1 -1
  59. package/dist/{TestimonialsPage-2RWGM5OP.js → TestimonialsPage-JY7MF5NW.js} +3 -3
  60. package/dist/{TestimonialsPage-2RWGM5OP.js.map → TestimonialsPage-JY7MF5NW.js.map} +1 -1
  61. package/dist/{ThankYouPage-OJLIJPLR.js → ThankYouPage-KNHHBFPZ.js} +14 -14
  62. package/dist/{ThankYouPage-OJLIJPLR.js.map → ThankYouPage-KNHHBFPZ.js.map} +1 -1
  63. package/dist/{WalletPage-FBOYCP2F.js → WalletPage-HH72DHOC.js} +15 -15
  64. package/dist/{WalletPage-FBOYCP2F.js.map → WalletPage-HH72DHOC.js.map} +1 -1
  65. package/dist/{WishlistPage-YWTH5YAO.js → WishlistPage-5BR63SMU.js} +16 -16
  66. package/dist/{WishlistPage-YWTH5YAO.js.map → WishlistPage-5BR63SMU.js.map} +1 -1
  67. package/dist/ambient/salla-components.d.ts +5 -0
  68. package/dist/api/advertisement.js +2 -2
  69. package/dist/api/apps.js +2 -2
  70. package/dist/api/blog.js +3 -3
  71. package/dist/api/brands.js +3 -3
  72. package/dist/api/cart.js +3 -3
  73. package/dist/api/category.js +3 -3
  74. package/dist/api/client.js +1 -1
  75. package/dist/api/home.js +2 -2
  76. package/dist/api/loyalty.js +3 -3
  77. package/dist/api/menu.js +2 -2
  78. package/dist/api/notification.js +2 -2
  79. package/dist/api/order.js +3 -3
  80. package/dist/api/page.js +3 -3
  81. package/dist/api/product.js +3 -3
  82. package/dist/api/profile.js +1 -1
  83. package/dist/api/store.js +2 -2
  84. package/dist/api/translations.js +2 -2
  85. package/dist/api/user.js +2 -2
  86. package/dist/api/wallet.js +2 -2
  87. package/dist/api/wishlist.js +4 -4
  88. package/dist/{chunk-OO2JMMCL.js → chunk-25UDBM27.js} +3 -3
  89. package/dist/{chunk-OO2JMMCL.js.map → chunk-25UDBM27.js.map} +1 -1
  90. package/dist/{chunk-ZKHMZF36.js → chunk-2GSYVPQS.js} +7 -7
  91. package/dist/{chunk-ZKHMZF36.js.map → chunk-2GSYVPQS.js.map} +1 -1
  92. package/dist/{chunk-FOBC4W73.js → chunk-4CM6JIQF.js} +3 -3
  93. package/dist/{chunk-FOBC4W73.js.map → chunk-4CM6JIQF.js.map} +1 -1
  94. package/dist/{chunk-NVPG5X2H.js → chunk-4NZKBANW.js} +3 -3
  95. package/dist/{chunk-NVPG5X2H.js.map → chunk-4NZKBANW.js.map} +1 -1
  96. package/dist/{chunk-LVEIDCW2.js → chunk-4SCGS2CM.js} +3 -3
  97. package/dist/{chunk-LVEIDCW2.js.map → chunk-4SCGS2CM.js.map} +1 -1
  98. package/dist/{chunk-4EAYVEJO.js → chunk-5A37NING.js} +3 -3
  99. package/dist/{chunk-4EAYVEJO.js.map → chunk-5A37NING.js.map} +1 -1
  100. package/dist/{chunk-352YYRKV.js → chunk-5AOW2SQW.js} +3 -3
  101. package/dist/{chunk-352YYRKV.js.map → chunk-5AOW2SQW.js.map} +1 -1
  102. package/dist/{chunk-6PMG5J4Z.js → chunk-6VYW7CVL.js} +4 -4
  103. package/dist/{chunk-6PMG5J4Z.js.map → chunk-6VYW7CVL.js.map} +1 -1
  104. package/dist/{chunk-2EF2HHHL.js → chunk-7U5OLKOS.js} +3 -3
  105. package/dist/{chunk-2EF2HHHL.js.map → chunk-7U5OLKOS.js.map} +1 -1
  106. package/dist/{chunk-WUDGMLUX.js → chunk-A5AU64GV.js} +4 -4
  107. package/dist/{chunk-WUDGMLUX.js.map → chunk-A5AU64GV.js.map} +1 -1
  108. package/dist/{chunk-PXH5TZGZ.js → chunk-AXWX5SJC.js} +3 -3
  109. package/dist/{chunk-PXH5TZGZ.js.map → chunk-AXWX5SJC.js.map} +1 -1
  110. package/dist/{chunk-YDXBRST4.js → chunk-D53M5ASN.js} +3 -3
  111. package/dist/{chunk-YDXBRST4.js.map → chunk-D53M5ASN.js.map} +1 -1
  112. package/dist/{chunk-5RWIVHYS.js → chunk-E5DP3MHE.js} +3 -3
  113. package/dist/{chunk-5RWIVHYS.js.map → chunk-E5DP3MHE.js.map} +1 -1
  114. package/dist/{chunk-2ZJAQBFV.js → chunk-HDSY5DWF.js} +3 -3
  115. package/dist/{chunk-2ZJAQBFV.js.map → chunk-HDSY5DWF.js.map} +1 -1
  116. package/dist/{chunk-HIF6PP7C.js → chunk-HIOYW3CS.js} +3 -3
  117. package/dist/{chunk-HIF6PP7C.js.map → chunk-HIOYW3CS.js.map} +1 -1
  118. package/dist/{chunk-KJG4BPY2.js → chunk-IOLNWPRO.js} +4 -4
  119. package/dist/{chunk-KJG4BPY2.js.map → chunk-IOLNWPRO.js.map} +1 -1
  120. package/dist/{chunk-3OWCF54L.js → chunk-KWJUCI7M.js} +3 -3
  121. package/dist/{chunk-3OWCF54L.js.map → chunk-KWJUCI7M.js.map} +1 -1
  122. package/dist/{chunk-DRDQQNIW.js → chunk-LUPDYN4T.js} +4 -4
  123. package/dist/{chunk-DRDQQNIW.js.map → chunk-LUPDYN4T.js.map} +1 -1
  124. package/dist/{chunk-DRX6L472.js → chunk-MWG734P7.js} +3 -3
  125. package/dist/{chunk-DRX6L472.js.map → chunk-MWG734P7.js.map} +1 -1
  126. package/dist/{chunk-IJX2MCPN.js → chunk-OJKTKMWS.js} +4 -4
  127. package/dist/{chunk-IJX2MCPN.js.map → chunk-OJKTKMWS.js.map} +1 -1
  128. package/dist/chunk-OKKS2RA4.js +14 -0
  129. package/dist/{chunk-XRULXQBR.js.map → chunk-OKKS2RA4.js.map} +1 -1
  130. package/dist/{chunk-WSPMY4BC.js → chunk-P3D67RVR.js} +6 -6
  131. package/dist/{chunk-WSPMY4BC.js.map → chunk-P3D67RVR.js.map} +1 -1
  132. package/dist/{chunk-IYAXNDJI.js → chunk-P6TJCCM3.js} +4 -4
  133. package/dist/{chunk-IYAXNDJI.js.map → chunk-P6TJCCM3.js.map} +1 -1
  134. package/dist/{chunk-5EDFGGY4.js → chunk-RBXGVURD.js} +4 -4
  135. package/dist/{chunk-5EDFGGY4.js.map → chunk-RBXGVURD.js.map} +1 -1
  136. package/dist/{chunk-DGK2HVSR.js → chunk-RLJLG4EN.js} +3 -3
  137. package/dist/{chunk-DGK2HVSR.js.map → chunk-RLJLG4EN.js.map} +1 -1
  138. package/dist/{chunk-BQ5SELOL.js → chunk-SGB7HCXF.js} +4 -4
  139. package/dist/{chunk-BQ5SELOL.js.map → chunk-SGB7HCXF.js.map} +1 -1
  140. package/dist/{chunk-UII3OBWQ.js → chunk-TTLRRVM2.js} +5 -5
  141. package/dist/{chunk-UII3OBWQ.js.map → chunk-TTLRRVM2.js.map} +1 -1
  142. package/dist/{chunk-R7DPH75N.js → chunk-UHGDQIIF.js} +4 -4
  143. package/dist/{chunk-R7DPH75N.js.map → chunk-UHGDQIIF.js.map} +1 -1
  144. package/dist/{chunk-JPG5XSTP.js → chunk-VNDUKDZG.js} +36 -8
  145. package/dist/chunk-VNDUKDZG.js.map +1 -0
  146. package/dist/{chunk-LA7B3TTK.js → chunk-VZPEPWDF.js} +7 -7
  147. package/dist/{chunk-LA7B3TTK.js.map → chunk-VZPEPWDF.js.map} +1 -1
  148. package/dist/{chunk-TL2RV5KC.js → chunk-WEKO2DAN.js} +3 -3
  149. package/dist/{chunk-TL2RV5KC.js.map → chunk-WEKO2DAN.js.map} +1 -1
  150. package/dist/{chunk-UJIE7IEJ.js → chunk-WHFKJ3AS.js} +4 -4
  151. package/dist/{chunk-UJIE7IEJ.js.map → chunk-WHFKJ3AS.js.map} +1 -1
  152. package/dist/{chunk-EISZVMJY.js → chunk-WVSGVFMM.js} +3 -3
  153. package/dist/{chunk-EISZVMJY.js.map → chunk-WVSGVFMM.js.map} +1 -1
  154. package/dist/{chunk-RFDP66ID.js → chunk-X5QZBD5V.js} +7 -7
  155. package/dist/{chunk-RFDP66ID.js.map → chunk-X5QZBD5V.js.map} +1 -1
  156. package/dist/{chunk-6S43HHJM.js → chunk-XHWBJYJL.js} +3 -3
  157. package/dist/{chunk-6S43HHJM.js.map → chunk-XHWBJYJL.js.map} +1 -1
  158. package/dist/{chunk-M75BIUMZ.js → chunk-YBIL64R7.js} +3 -3
  159. package/dist/{chunk-M75BIUMZ.js.map → chunk-YBIL64R7.js.map} +1 -1
  160. package/dist/{chunk-XUJJIH5C.js → chunk-YJWJPS25.js} +10 -10
  161. package/dist/{chunk-XUJJIH5C.js.map → chunk-YJWJPS25.js.map} +1 -1
  162. package/dist/{chunk-WVQBEAYO.js → chunk-YKNDXZAD.js} +14 -14
  163. package/dist/{chunk-WVQBEAYO.js.map → chunk-YKNDXZAD.js.map} +1 -1
  164. package/dist/{chunk-QC4XQO6D.js → chunk-ZRJXN766.js} +4 -4
  165. package/dist/{chunk-QC4XQO6D.js.map → chunk-ZRJXN766.js.map} +1 -1
  166. package/dist/components/cart/index.js +1 -1
  167. package/dist/components/common/index.js +1 -1
  168. package/dist/components/drawer/index.js +12 -12
  169. package/dist/components/home/BundleComponent.d.ts +3 -0
  170. package/dist/components/home/BundleComponent.d.ts.map +1 -1
  171. package/dist/components/home/index.js +16 -16
  172. package/dist/components/layout/index.js +4 -4
  173. package/dist/components/product/index.js +13 -13
  174. package/dist/components/store/index.js +13 -13
  175. package/dist/dev/editor/index.js +1 -1
  176. package/dist/dev/index.js +1 -1
  177. package/dist/{document-class-R26LC5C2.js → document-class-3GOSUA4H.js} +11 -11
  178. package/dist/{document-class-R26LC5C2.js.map → document-class-3GOSUA4H.js.map} +1 -1
  179. package/dist/hooks/index.js +12 -12
  180. package/dist/hooks/useGtm.js +12 -12
  181. package/dist/hooks/useMoney.js +12 -12
  182. package/dist/hooks/useStore.js +12 -12
  183. package/dist/hooks/useUser.js +3 -3
  184. package/dist/index.js +12 -12
  185. package/dist/{navigation-2UNFQOOQ.js → navigation-SN2ZTS4V.js} +4 -4
  186. package/dist/{navigation-2UNFQOOQ.js.map → navigation-SN2ZTS4V.js.map} +1 -1
  187. package/dist/{navigation-5ZAI4SPZ.js → navigation-ZV4TGIAA.js} +5 -5
  188. package/dist/{navigation-5ZAI4SPZ.js.map → navigation-ZV4TGIAA.js.map} +1 -1
  189. package/dist/{not-found-LGTTNZ4Y.js → not-found-J3UJVHNJ.js} +15 -15
  190. package/dist/{not-found-LGTTNZ4Y.js.map → not-found-J3UJVHNJ.js.map} +1 -1
  191. package/dist/providers/index.js +12 -12
  192. package/dist/routes/account/orders.js +4 -4
  193. package/dist/routes/account.js +13 -13
  194. package/dist/routes/blog.js +8 -8
  195. package/dist/routes/brands.js +4 -4
  196. package/dist/routes/cart.js +20 -20
  197. package/dist/routes/home.js +17 -17
  198. package/dist/routes/index.js +3 -3
  199. package/dist/routes/loyalty.js +5 -5
  200. package/dist/routes/page.js +4 -4
  201. package/dist/routes/product-listing.js +18 -18
  202. package/dist/routes/product.js +16 -16
  203. package/dist/routes/seo-redirects.js +3 -3
  204. package/dist/routes/testimonials.js +2 -2
  205. package/dist/routes/thank-you.js +4 -4
  206. package/dist/skeleton.js +17 -17
  207. package/dist/{store-lookup-DQECZUBL.js → store-lookup-U6TJNLZM.js} +8 -8
  208. package/dist/{store-lookup-DQECZUBL.js.map → store-lookup-U6TJNLZM.js.map} +1 -1
  209. package/dist/tanstack.js +11 -11
  210. package/dist/utils/index.js +2 -2
  211. package/package.json +1 -1
  212. package/tailwind/components/home/BundleComponent.tsx.txt +46 -3
  213. package/dist/chunk-JPG5XSTP.js.map +0 -1
  214. package/dist/chunk-XRULXQBR.js +0 -14
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/routes/home/loader.ts","../src/routes/home/HomePage.tsx","../src/routes/home/index.tsx"],"names":["HomeSkeleton","HomePage"],"mappings":"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","file":"chunk-UII3OBWQ.js","sourcesContent":["import { getTwilightContext } from '../../twilight/context';\nimport { home } from '../../api/home';\nimport type { HomeComponentData } from '../../types';\nimport { RouteId } from '../../router/route-ids';\n\nexport interface HomeLoaderData {\n locale: string;\n components: HomeComponentData[];\n page: { slug: string };\n}\n\nexport async function homeLoader(ctx?: { locale?: string }): Promise<HomeLoaderData> {\n const { queryClient } = getTwilightContext();\n const components = await queryClient.ensureQueryData(home.queries.components());\n const result = {\n locale: ctx?.locale || 'ar',\n components: components.map((comp) => ({\n ...comp,\n path: comp.path?.replace('home.', '') || comp.path,\n })),\n page: { slug: RouteId.INDEX },\n };\n return result;\n}\n","import { memo, useCallback, useState } from 'react';\nimport { useDevHomeBlocks } from '../../dev/dev-settings-store';\nimport { HookSlot } from '../../hooks';\nimport { HomeComponentRenderer, ReorderProducts } from '../../components/home';\nimport { reorder, useLiveBlockMoves } from '../../components/live-editor/moves';\nimport type { HomePageProps } from './types';\nimport type { HomeComponentData } from '../../types';\nimport { Pulse } from '@salla.sa/twilight-components-react';\n\nexport const HomeSkeleton = memo(function HomeSkeleton() {\n return (\n <>\n <div className=\"s-block container skeleton-block-hero\">\n <Pulse className=\"h-64 sm:h-80 rounded-md\" />\n </div>\n <div className=\"s-block container skeleton-block-products\">\n <Pulse className=\"h-10 w-48 mb-4\" />\n <div className=\"grid grid-cols-2 sm:grid-cols-4 gap-4\">\n {[1, 2, 3, 4].map((i) => (\n <Pulse key={i} className=\"h-56\" />\n ))}\n </div>\n </div>\n <div className=\"s-block container skeleton-block-products\">\n <Pulse className=\"h-10 w-48 mb-4\" />\n <div className=\"grid grid-cols-2 sm:grid-cols-4 gap-4\">\n {[1, 2, 3, 4].map((i) => (\n <Pulse key={i} className=\"h-56\" />\n ))}\n </div>\n </div>\n </>\n );\n});\n\n/** The blocks' places in the store's order: 0, 1, 2… */\nconst storeOrder = (blocks: readonly unknown[]) => Array.from(blocks, (_, at) => at);\n\nexport const HomePage = memo(function HomePage({ components = [] }: HomePageProps) {\n // Dev-mode only: the dev editor's layout replaces the store's blocks while it\n // is on. No-op passthrough in production builds.\n const renderedComponents = useDevHomeBlocks(components);\n // The theme editor's preview moves blocks in place while the editor saves the\n // order; blocks from the server (a new page, a reload) start over from theirs.\n const [moved, setMoved] = useState<{ source: HomeComponentData[]; order: number[] } | null>(null);\n const order = moved?.source === renderedComponents ? moved.order : null;\n const onMove = useCallback(\n (from: number, to: number) =>\n setMoved((prev) => ({\n source: renderedComponents,\n order: reorder(\n prev?.source === renderedComponents ? prev.order : storeOrder(renderedComponents),\n from,\n to\n ),\n })),\n [renderedComponents]\n );\n useLiveBlockMoves(onMove);\n const placed = order ?? storeOrder(renderedComponents);\n\n return (\n <>\n <HookSlot name=\"home:start\" />\n <HookSlot name=\"home:content\" />\n {placed.map((at, index) => {\n const data = renderedComponents[at];\n // `data.key` is the twilight.json catalog id, shared by every placement\n // of that block. Platform blocks send null. The block's place in the\n // store's order is unique and stays with it when the preview moves it, so\n // a move keeps its state; a dev layout block keeps its own id.\n return <HomeComponentRenderer key={data.__dev_id ?? at} data={data} index={index} />;\n })}\n <HookSlot name=\"home:end\" />\n <ReorderProducts />\n </>\n );\n});\n\nexport { HomePage as default };\n","import type { HeadDescriptor } from '../../utils/head';\nimport { buildHreflangAlternates, storePageUrl } from '../../utils/baseHead';\nimport type { HomeLoaderData } from './loader';\nimport { homeLoader } from './loader';\nimport type { TwilightContext } from '../../twilight/context';\nimport { HomePage } from './HomePage';\nimport { RouteId } from '../../router/route-ids';\n\nexport { HomeSkeleton } from './HomePage';\nexport { registerHomeComponents, DefaultHomeComponents } from '../../components/home/register';\nexport { registerHomeComponentConfig } from '../../components/home';\nexport type { HomePageProps } from './types';\nexport type { HomeLoaderData } from './loader';\nexport type {\n HomeComponentsProps,\n AnyHomeComponent,\n HomeComponentConfig,\n} from '../../components/home';\n\nfunction loader(_ctx?: { locale?: string }): Promise<HomeLoaderData> {\n return homeLoader({ locale: _ctx?.locale });\n}\n\nfunction head(ctx: TwilightContext): HeadDescriptor {\n const store = ctx.settings?.store;\n if (!store) return {};\n\n const title = store.meta?.title ?? store.name;\n const description = store.meta?.description ?? store.description;\n const keywords = store.meta?.keywords;\n // `/ar`, like Twig, where store.url reads `/ar/`.\n const url = storePageUrl(ctx.settings, ctx.location.pathname) ?? store.url;\n\n return {\n title,\n description,\n keywords,\n canonical: url,\n openGraph: {\n type: 'website',\n title,\n description,\n images: store.logo,\n url,\n },\n twitter: {\n card: 'summary_large_image',\n title,\n description,\n images: store.logo,\n },\n alternateLanguages: buildHreflangAlternates(ctx.settings, ctx.location.pathname),\n };\n}\n\nexport const Home = { id: RouteId.INDEX, loader, head, Component: HomePage } as const;\n\nexport { homeLoader };\n"]}
1
+ {"version":3,"sources":["../src/routes/home/loader.ts","../src/routes/home/HomePage.tsx","../src/routes/home/index.tsx"],"names":["HomeSkeleton","HomePage"],"mappings":"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","file":"chunk-TTLRRVM2.js","sourcesContent":["import { getTwilightContext } from '../../twilight/context';\nimport { home } from '../../api/home';\nimport type { HomeComponentData } from '../../types';\nimport { RouteId } from '../../router/route-ids';\n\nexport interface HomeLoaderData {\n locale: string;\n components: HomeComponentData[];\n page: { slug: string };\n}\n\nexport async function homeLoader(ctx?: { locale?: string }): Promise<HomeLoaderData> {\n const { queryClient } = getTwilightContext();\n const components = await queryClient.ensureQueryData(home.queries.components());\n const result = {\n locale: ctx?.locale || 'ar',\n components: components.map((comp) => ({\n ...comp,\n path: comp.path?.replace('home.', '') || comp.path,\n })),\n page: { slug: RouteId.INDEX },\n };\n return result;\n}\n","import { memo, useCallback, useState } from 'react';\nimport { useDevHomeBlocks } from '../../dev/dev-settings-store';\nimport { HookSlot } from '../../hooks';\nimport { HomeComponentRenderer, ReorderProducts } from '../../components/home';\nimport { reorder, useLiveBlockMoves } from '../../components/live-editor/moves';\nimport type { HomePageProps } from './types';\nimport type { HomeComponentData } from '../../types';\nimport { Pulse } from '@salla.sa/twilight-components-react';\n\nexport const HomeSkeleton = memo(function HomeSkeleton() {\n return (\n <>\n <div className=\"s-block container skeleton-block-hero\">\n <Pulse className=\"h-64 sm:h-80 rounded-md\" />\n </div>\n <div className=\"s-block container skeleton-block-products\">\n <Pulse className=\"h-10 w-48 mb-4\" />\n <div className=\"grid grid-cols-2 sm:grid-cols-4 gap-4\">\n {[1, 2, 3, 4].map((i) => (\n <Pulse key={i} className=\"h-56\" />\n ))}\n </div>\n </div>\n <div className=\"s-block container skeleton-block-products\">\n <Pulse className=\"h-10 w-48 mb-4\" />\n <div className=\"grid grid-cols-2 sm:grid-cols-4 gap-4\">\n {[1, 2, 3, 4].map((i) => (\n <Pulse key={i} className=\"h-56\" />\n ))}\n </div>\n </div>\n </>\n );\n});\n\n/** The blocks' places in the store's order: 0, 1, 2… */\nconst storeOrder = (blocks: readonly unknown[]) => Array.from(blocks, (_, at) => at);\n\nexport const HomePage = memo(function HomePage({ components = [] }: HomePageProps) {\n // Dev-mode only: the dev editor's layout replaces the store's blocks while it\n // is on. No-op passthrough in production builds.\n const renderedComponents = useDevHomeBlocks(components);\n // The theme editor's preview moves blocks in place while the editor saves the\n // order; blocks from the server (a new page, a reload) start over from theirs.\n const [moved, setMoved] = useState<{ source: HomeComponentData[]; order: number[] } | null>(null);\n const order = moved?.source === renderedComponents ? moved.order : null;\n const onMove = useCallback(\n (from: number, to: number) =>\n setMoved((prev) => ({\n source: renderedComponents,\n order: reorder(\n prev?.source === renderedComponents ? prev.order : storeOrder(renderedComponents),\n from,\n to\n ),\n })),\n [renderedComponents]\n );\n useLiveBlockMoves(onMove);\n const placed = order ?? storeOrder(renderedComponents);\n\n return (\n <>\n <HookSlot name=\"home:start\" />\n <HookSlot name=\"home:content\" />\n {placed.map((at, index) => {\n const data = renderedComponents[at];\n // `data.key` is the twilight.json catalog id, shared by every placement\n // of that block. Platform blocks send null. The block's place in the\n // store's order is unique and stays with it when the preview moves it, so\n // a move keeps its state; a dev layout block keeps its own id.\n return <HomeComponentRenderer key={data.__dev_id ?? at} data={data} index={index} />;\n })}\n <HookSlot name=\"home:end\" />\n <ReorderProducts />\n </>\n );\n});\n\nexport { HomePage as default };\n","import type { HeadDescriptor } from '../../utils/head';\nimport { buildHreflangAlternates, storePageUrl } from '../../utils/baseHead';\nimport type { HomeLoaderData } from './loader';\nimport { homeLoader } from './loader';\nimport type { TwilightContext } from '../../twilight/context';\nimport { HomePage } from './HomePage';\nimport { RouteId } from '../../router/route-ids';\n\nexport { HomeSkeleton } from './HomePage';\nexport { registerHomeComponents, DefaultHomeComponents } from '../../components/home/register';\nexport { registerHomeComponentConfig } from '../../components/home';\nexport type { HomePageProps } from './types';\nexport type { HomeLoaderData } from './loader';\nexport type {\n HomeComponentsProps,\n AnyHomeComponent,\n HomeComponentConfig,\n} from '../../components/home';\n\nfunction loader(_ctx?: { locale?: string }): Promise<HomeLoaderData> {\n return homeLoader({ locale: _ctx?.locale });\n}\n\nfunction head(ctx: TwilightContext): HeadDescriptor {\n const store = ctx.settings?.store;\n if (!store) return {};\n\n const title = store.meta?.title ?? store.name;\n const description = store.meta?.description ?? store.description;\n const keywords = store.meta?.keywords;\n // `/ar`, like Twig, where store.url reads `/ar/`.\n const url = storePageUrl(ctx.settings, ctx.location.pathname) ?? store.url;\n\n return {\n title,\n description,\n keywords,\n canonical: url,\n openGraph: {\n type: 'website',\n title,\n description,\n images: store.logo,\n url,\n },\n twitter: {\n card: 'summary_large_image',\n title,\n description,\n images: store.logo,\n },\n alternateLanguages: buildHreflangAlternates(ctx.settings, ctx.location.pathname),\n };\n}\n\nexport const Home = { id: RouteId.INDEX, loader, head, Component: HomePage } as const;\n\nexport { homeLoader };\n"]}
@@ -1,5 +1,5 @@
1
- import { orThrow } from './chunk-DGK2HVSR.js';
2
- import { api } from './chunk-5RWIVHYS.js';
1
+ import { orThrow } from './chunk-RLJLG4EN.js';
2
+ import { api } from './chunk-E5DP3MHE.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-R7DPH75N.js.map
48
- //# sourceMappingURL=chunk-R7DPH75N.js.map
47
+ //# sourceMappingURL=chunk-UHGDQIIF.js.map
48
+ //# sourceMappingURL=chunk-UHGDQIIF.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-R7DPH75N.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-UHGDQIIF.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,9 +1,9 @@
1
- import { home } from './chunk-M75BIUMZ.js';
2
- import { product } from './chunk-DRDQQNIW.js';
3
- import { ProductCard } from './chunk-WSPMY4BC.js';
1
+ import { home } from './chunk-YBIL64R7.js';
2
+ import { product } from './chunk-LUPDYN4T.js';
3
+ import { ProductCard } from './chunk-P3D67RVR.js';
4
4
  import { registry } from './chunk-Y32RHCOH.js';
5
5
  import { useTranslation } from './chunk-TYNZ5B2B.js';
6
- import { Image, LazyRenderWhenVisible } from './chunk-DRX6L472.js';
6
+ import { Image, LazyRenderWhenVisible } from './chunk-MWG734P7.js';
7
7
  import { Link } from './chunk-AXW67SY7.js';
8
8
  import { whenSallaLoaded } from './chunk-NHA4SBKG.js';
9
9
  import { getTwilightContext } from './chunk-6K34BCUP.js';
@@ -446,15 +446,42 @@ var Youtube = memo(function Youtube2({ data }) {
446
446
  if (!youtubeId) return null;
447
447
  return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx("div", { className: "container", children: /* @__PURE__ */ jsx("div", { className: "videoWrapper", children: isLoaded ? /* @__PURE__ */ jsx("lite-youtube", { videoid: youtubeId, params: "rel=0" }) : /* @__PURE__ */ jsx("div", { className: "animate-pulse bg-gray-200 w-full h-full min-h-[300px] rounded" }) }) }) });
448
448
  });
449
+ var SIZE_PROPS = ["min-height", "height", "width", "aspect-ratio"];
450
+ var SKELETON_PROPS = [...SIZE_PROPS, "skeleton-style"];
451
+ function pickSkeletonProps(props) {
452
+ if (!props || typeof props !== "object") return {};
453
+ return Object.fromEntries(
454
+ Object.entries(props).filter(
455
+ ([name, value]) => SKELETON_PROPS.includes(name) && typeof value === "string" && value.trim() !== ""
456
+ )
457
+ );
458
+ }
459
+ function reservedSizeStyle(props) {
460
+ const sizes = SIZE_PROPS.filter((name) => props[name]);
461
+ if (!sizes.length) return void 0;
462
+ return Object.fromEntries(
463
+ sizes.map((name) => [
464
+ name.replace(/-([a-z])/g, (_, char) => char.toUpperCase()),
465
+ props[name]
466
+ ])
467
+ );
468
+ }
449
469
  var BundleComponent = memo(function BundleComponent2(props) {
450
470
  const [mounted, setMounted] = useState(false);
451
471
  useEffect(() => {
452
472
  setMounted(true);
453
473
  }, []);
474
+ const {
475
+ component_name: componentName,
476
+ bundle_id: bundleId,
477
+ component_props: componentProps,
478
+ ...rest
479
+ } = props.data;
480
+ const skeletonProps = pickSkeletonProps(componentProps);
454
481
  if (!mounted) {
455
- return null;
482
+ const style = reservedSizeStyle(skeletonProps);
483
+ return style ? /* @__PURE__ */ jsx("div", { "aria-hidden": "true", style }) : null;
456
484
  }
457
- const { component_name: componentName, bundle_id: bundleId, ...rest } = props.data;
458
485
  const config = JSON.stringify(rest);
459
486
  return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(
460
487
  "salla-custom-component",
@@ -462,6 +489,7 @@ var BundleComponent = memo(function BundleComponent2(props) {
462
489
  "component-name": componentName,
463
490
  "bundle-id": bundleId,
464
491
  config,
492
+ ...skeletonProps,
465
493
  suppressHydrationWarning: true
466
494
  }
467
495
  ) });
@@ -791,5 +819,5 @@ var ReorderProducts = memo(function ReorderProducts2() {
791
819
  });
792
820
 
793
821
  export { BundleComponent, ComponentErrorBoundary, DefaultHomeComponents, FeaturedProductsStyle1, FeaturedProductsStyle2, FeaturedProductsStyle3, FixedBanner, FixedProducts, HomeComponentRenderer, LazyTestimonials, PageBlocks, ParallaxBackground, PhotosSlider, ProductsSlider, ReorderProducts, SquarePhotos, StoreFeatures, Youtube, registerHomeComponentConfig, registerHomeComponents, useReorderButtons };
794
- //# sourceMappingURL=chunk-JPG5XSTP.js.map
795
- //# sourceMappingURL=chunk-JPG5XSTP.js.map
822
+ //# sourceMappingURL=chunk-VNDUKDZG.js.map
823
+ //# sourceMappingURL=chunk-VNDUKDZG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/home/ProductsSlider.tsx","../src/components/home/StoreFeatures.tsx","../src/components/home/FixedBanner.tsx","../src/components/home/FixedProducts.tsx","../src/components/home/FeaturedProductsStyle1.tsx","../src/components/home/FeaturedProductsStyle2.tsx","../src/components/home/FeaturedProductsStyle3.tsx","../src/components/home/ParallaxBackground.tsx","../src/components/home/PhotosSlider.tsx","../src/components/home/SquarePhotos.tsx","../src/components/home/Youtube.tsx","../src/components/home/BundleComponent.tsx","../src/components/home/lazy.ts","../src/components/home/register.ts","../src/components/home/ComponentErrorBoundary.tsx","../src/components/home/HomePageRenderer.tsx","../src/components/home/PageBlocks.tsx","../src/components/home/reorder-hooks.ts","../src/components/home/ReorderProducts.tsx"],"names":["product","StoreFeatures","jsx","memo","FixedBanner","Fragment","jsxs","Suspense","FeaturedProductsStyle1","useCallback","FeaturedProductsStyle2","useState","SallaButton","SallaProductsSlider","FeaturedProductsStyle3","ParallaxBackground","PhotosSlider","SquarePhotos","Youtube","BundleComponent","useEffect","FallbackComponent","ProductsSliderSkeleton","FixedProductsSkeleton","HomeComponentRenderer","Component","PageBlocks","useQuery","ReorderProducts","useMemo"],"mappings":"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","file":"chunk-VNDUKDZG.js","sourcesContent":["import { Suspense, useCallback, useMemo } from 'react';\nimport { product, ProductsListSource } from '../../api/product';\nimport { ProductCard } from '../../components/product';\nimport { ProductsSliderSkeleton, SallaProductsSlider } from '@salla.sa/twilight-components-react';\nimport { useTranslation } from '../../providers/I18nProvider';\n\ninterface ProductsSourceConfig {\n source: ProductsListSource;\n source_value?: number | number[] | null;\n}\n\nexport interface ProductsSliderProps {\n data: {\n products: ProductsSourceConfig;\n title?: string;\n display_all_url?: string;\n position?: number;\n priority?: boolean;\n show_controls?: boolean;\n controls_outer?: boolean;\n loop?: boolean;\n centered?: boolean;\n slides_per_view?: number | 'auto';\n direction?: 'rtl' | 'ltr';\n autoplay?: boolean;\n [key: string]: unknown;\n };\n}\n\nexport function ProductsSlider({ data }: ProductsSliderProps) {\n const { t } = useTranslation();\n const {\n products,\n title,\n display_all_url: displayAllUrl,\n position = 1,\n priority = false,\n show_controls: showControls,\n controls_outer: controlsOuter,\n loop,\n centered,\n slides_per_view: slidesPerView,\n direction,\n autoplay,\n } = data;\n\n const sliderProps = useMemo(\n () => ({\n id: `slider-${position}`,\n displayAllTitle: t('blocks.home.display_all', 'View All'),\n ...(showControls !== undefined && { showControls }),\n ...(controlsOuter !== undefined && { controlsOuter }),\n ...(loop !== undefined && { loop }),\n ...(centered !== undefined && { centered }),\n ...(slidesPerView !== undefined && { slidesPerView }),\n ...(direction !== undefined && { direction }),\n }),\n [position, t, showControls, controlsOuter, loop, centered, slidesPerView, direction]\n );\n\n const loader = useCallback(\n () =>\n product.list({\n source: products.source,\n sourceValue: products.source_value,\n }),\n [products.source, products.source_value]\n );\n\n return (\n <Suspense fallback={<ProductsSliderSkeleton />}>\n <SallaProductsSlider\n id={`best-offers-${position}-slider`}\n loader={loader}\n sliderProps={sliderProps}\n {...(displayAllUrl ? { displayAllUrl } : {})}\n {...(title ? { blockTitle: title } : {})}\n {...(autoplay !== undefined ? { autoplay } : {})}\n skeleton={<ProductsSliderSkeleton />}\n >\n {(product, index) => (\n <ProductCard product={product} imagePriority={priority && index < 2} />\n )}\n </SallaProductsSlider>\n </Suspense>\n );\n}\n","import { memo } from 'react';\nimport type { Feature } from '../../types';\n\nexport interface StoreFeaturesProps {\n data: {\n features: Feature[];\n [key: string]: unknown;\n };\n}\n\nexport const StoreFeatures = memo(function StoreFeatures({ data }: StoreFeaturesProps) {\n const { features } = data;\n\n if (!features.length) return null;\n\n return (\n <>\n <div className=\"grid grid-cols-[repeat(2,minmax(0,1fr))] md:grid-cols-[repeat(3,minmax(0,1fr))] gap-4 sm:gap-6 xl:gap-8\">\n {features.map((feature) => (\n <div\n key={`${feature.icon}:${feature.title}:${feature.description ?? ''}`}\n className=\"s-block--features__item\"\n >\n <div className=\"feature-icon\">\n <i className={feature.icon}></i>\n </div>\n <h2>{feature.title}</h2>\n <p>{feature.description}</p>\n </div>\n ))}\n </div>\n </>\n );\n});\n","import { memo } from 'react';\nimport { Link } from '../common';\n\nexport interface FixedBannerComponentProps {\n data: {\n image: {\n url: string;\n alt?: string;\n small_url?: string;\n };\n url?: string;\n title?: string;\n position?: number;\n [key: string]: unknown;\n };\n priority?: boolean;\n}\n\nexport const FixedBanner = memo(function FixedBanner(props: FixedBannerComponentProps) {\n const { data, priority = false } = props;\n const image = data.image?.url;\n\n if (!image) {\n return null;\n }\n\n const url = data.url;\n const altText = data.image.alt?.trim() ? data.image.alt : data.title || 'fixed banner';\n\n const imgProps = priority\n ? {\n loading: 'eager' as const,\n fetchPriority: 'high' as const,\n decoding: 'sync' as const,\n }\n : {\n loading: 'lazy' as const,\n decoding: 'async' as const,\n };\n\n const smallUrl = data.image.small_url;\n\n return (\n <>\n <div className=\"container\">\n <Link\n to={url || '#'}\n className=\"banner banner--fixed overflow-hidden\"\n aria-label={`Banner ${altText}`}\n >\n <picture>\n {smallUrl && <source media=\"(max-width: 767px)\" srcSet={smallUrl} />}\n <img\n width=\"1200\"\n height=\"300\"\n src={image}\n alt={altText}\n style={{ maxWidth: '100%', objectFit: 'contain' }}\n loading={imgProps.loading}\n decoding={imgProps.decoding}\n {...(priority && { fetchPriority: imgProps.fetchPriority })}\n />\n </picture>\n </Link>\n </div>\n </>\n );\n});\n","import { Suspense } from 'react';\nimport { useQuery } from '@tanstack/react-query';\nimport { FixedProductsSkeleton } from '@salla.sa/twilight-components-react';\nimport { Link } from '../common';\nimport { product, ProductsListSource } from '../../api/product';\nimport { ProductCard } from '../../components/product';\nimport { useTranslation } from '../../providers/I18nProvider';\nimport { useTwilight } from '../../providers/TwilightProvider';\n\nexport interface FixedProductsProps {\n data: {\n products: { source: ProductsListSource; source_value?: number[] | null };\n title?: string;\n limit?: number | string;\n display_all_url?: string | null;\n key?: string | null;\n isVertical?: boolean;\n position?: number;\n [key: string]: unknown;\n };\n}\n\nexport function FixedProducts({ data }: FixedProductsProps) {\n const { t } = useTranslation();\n const { theme } = useTwilight();\n\n const title = data.title;\n // The merchant's product count: a number, or the same as a string. Anything that\n // isn't a positive whole number falls back to what the API returns.\n const parsedLimit = Number(data.limit);\n const limit = Number.isInteger(parsedLimit) && parsedLimit > 0 ? parsedLimit : undefined;\n // Matches Twig Raed: `theme.settings.get('vertical_fixed_products', true)`.\n const isVertical = data.isVertical ?? theme.settings.vertical_fixed_products ?? true;\n\n const { data: result, isLoading } = useQuery(\n product.queries.list({\n source: data.products.source,\n sourceValue: data.products?.source_value,\n perPage: limit,\n })\n );\n\n const products = result?.items ?? [];\n\n if (isLoading) {\n return <FixedProductsSkeleton />;\n }\n\n if (!products.length) return null;\n\n return (\n <Suspense fallback={<FixedProductsSkeleton />}>\n {title && (\n <div className=\"s-block__title\">\n <div className=\"right-side\">\n <h2>{title}</h2>\n </div>\n {data.display_all_url && (\n <Link to={data.display_all_url} className=\"s-block__display-all\">\n {t('blocks.home.display_all', 'View All')}\n <i className=\"sicon-arrow-left\"></i>\n </Link>\n )}\n </div>\n )}\n <div\n className={\n 's-products-list-wrapper ' +\n (isVertical ? 's-products-list-vertical-cards' : 's-products-list-horizontal-cards')\n }\n >\n {products.slice(0, limit).map((product) => (\n <ProductCard\n key={product.id}\n product={product}\n layout={isVertical ? 'vertical' : 'horizontal'}\n />\n ))}\n </div>\n </Suspense>\n );\n}\n","import { memo, useState, useCallback } from 'react';\nimport { SallaButton } from '@salla.sa/twilight-components-react/button';\nimport type { Product } from '../../types';\n\ninterface SectionItem {\n title?: string;\n name?: string;\n type?: string;\n id?: string;\n products?: Product[];\n limit?: number;\n}\n\ninterface MainProduct {\n id?: string;\n title?: string;\n value?: string;\n product?: Product;\n}\n\nexport interface FeaturedProductsStyle1Props {\n data: {\n items: SectionItem[];\n main_product?: MainProduct;\n position?: number;\n [key: string]: unknown;\n };\n}\n\nexport const FeaturedProductsStyle1 = memo(function FeaturedProductsStyle1({\n data,\n}: FeaturedProductsStyle1Props) {\n const items = data.items || [];\n const mainProduct = data.main_product;\n\n const [activeTab, setActiveTab] = useState<string>(items[0]?.id || '');\n const [isAnimating, setIsAnimating] = useState(false);\n\n const handleTabClick = useCallback(\n (tabId: string) => {\n if (tabId === activeTab) return;\n setIsAnimating(true);\n setActiveTab(tabId);\n setTimeout(() => setIsAnimating(false), 100);\n },\n [activeTab]\n );\n\n if (!items.length) return null;\n\n const hasMultipleSections = items.length > 1;\n\n return (\n <>\n <div className=\"s-block__title\">\n <div className=\"right-side\">\n <h2>{mainProduct?.title}</h2>\n </div>\n {hasMultipleSections && (\n <div className=\"tabs hide-scroll hidden lg:flex\">\n {items.map((section) => (\n <SallaButton\n key={section.id}\n shape=\"link\"\n onClick={() => handleTabClick(section.id || '')}\n className={`tab-trigger ${activeTab === section.id ? 'is-active' : ''}`}\n >\n {section.title || section.name}\n </SallaButton>\n ))}\n </div>\n )}\n </div>\n\n <div className={`grid grid-cols-1 gap-8 ${mainProduct?.product ? 'lg:grid-cols-2' : ''}`}>\n {mainProduct?.product && (\n <div className=\"flex flex-col\">\n <custom-salla-product-card\n shadow-on-hover\n product={JSON.stringify(mainProduct.product)}\n isSpecial\n ></custom-salla-product-card>\n </div>\n )}\n <div className=\"flex flex-col\">\n {hasMultipleSections && (\n <div className=\"tabs mb-4 sm:mb-8 hide-scroll lg:hidden\">\n {items.map((section) => (\n <SallaButton\n key={section.id}\n shape=\"link\"\n onClick={() => handleTabClick(section.id || '')}\n className={`tab-trigger ${activeTab === section.id ? 'is-active' : ''}`}\n >\n {section.title || section.name}\n </SallaButton>\n ))}\n </div>\n )}\n\n <div className=\"tabs-wrapper flex flex-1\">\n {items.map((section) => {\n const isActive = activeTab === section.id;\n return (\n <div\n key={section.id}\n className={`tabs__item grid-cols-2 ${mainProduct?.product ? '' : 'lg:grid-cols-4'} ${isActive ? 'is-active' : ''} ${isAnimating && isActive ? 'opacity-0 translate-y-3' : ''} ${!isAnimating && isActive ? 'opacity-100 translate-y-0' : ''}`}\n >\n {section.products\n ?.slice(0, mainProduct?.product ? 4 : 8)\n .map((product, productIndex) => (\n <custom-salla-product-card\n key={product.id || productIndex}\n product={JSON.stringify(product)}\n ></custom-salla-product-card>\n ))}\n </div>\n );\n })}\n </div>\n </div>\n </div>\n </>\n );\n});\n","import { memo, useState, useCallback } from 'react';\nimport { SallaButton } from '@salla.sa/twilight-components-react/button';\nimport { SallaProductsList } from '@salla.sa/twilight-components-react';\nimport { SallaProductsSlider } from '@salla.sa/twilight-components-react';\nimport { product, ProductsListSource } from '../../api/product';\nimport { ProductCard } from '../../components/product';\nimport { useTwilight } from '../../providers/TwilightProvider';\n\ninterface ProductSource {\n source: ProductsListSource;\n limit?: number;\n source_value?: number | number[];\n}\n\ninterface SectionItem {\n title?: string;\n name?: string;\n type?: string;\n id?: string;\n products: ProductSource;\n limit?: number;\n}\n\nexport interface FeaturedProductsStyle2Props {\n data: {\n items: SectionItem[];\n position?: number;\n is_slider?: boolean;\n [key: string]: unknown;\n };\n}\n\n// Like Twig Raed, the grid honors `vertical_fixed_products`; the slider never does.\nexport const FeaturedProductsStyle2 = memo(function FeaturedProductsStyle2({\n data,\n}: FeaturedProductsStyle2Props) {\n const { theme } = useTwilight();\n const items = data.items || [];\n const isSlider = data.is_slider ?? true;\n const cardLayout = (theme.settings.vertical_fixed_products ?? true) ? 'vertical' : 'horizontal';\n\n const [activeTab, setActiveTab] = useState<string>(items[0]?.id || '');\n const [isAnimating, setIsAnimating] = useState(false);\n\n const handleTabClick = useCallback(\n (tabId: string) => {\n if (tabId === activeTab) return;\n setIsAnimating(true);\n setActiveTab(tabId);\n setTimeout(() => setIsAnimating(false), 100);\n },\n [activeTab]\n );\n\n const loader = useCallback(\n (source: ProductsListSource, value?: number | number[], limit?: number) => {\n return () =>\n product.list({\n source: source,\n sourceValue: value,\n perPage: limit,\n });\n },\n []\n );\n\n if (!items.length) return null;\n\n const hasMultipleSections = items.length > 1;\n\n return (\n <>\n <div className=\"container\">\n {hasMultipleSections && (\n <div className=\"tabs hide-scroll\">\n {items.map((section) => (\n <SallaButton\n key={section.id}\n fill=\"outline\"\n onClick={() => handleTabClick(section.id || '')}\n className={`tab-trigger ${activeTab === section.id ? 'is-active' : ''}`}\n >\n {section.title || section.name}\n </SallaButton>\n ))}\n </div>\n )}\n\n <div className=\"tabs-wrapper\">\n {items.map((section) => {\n const isActive = activeTab === section.id;\n return (\n <div\n key={section.id}\n className={`tabs__item ${isActive ? 'is-active' : ''} ${isAnimating && isActive ? 'opacity-0 translate-y-3' : ''} ${!isAnimating && isActive ? 'opacity-100 translate-y-0' : ''}`}\n >\n {isSlider ? (\n <SallaProductsSlider\n loader={loader(\n section.products.source,\n section.products?.source_value,\n section.products?.limit\n )}\n sliderProps={{ id: `section-${section.id}-slider` }}\n >\n {(product) => (\n <ProductCard className=\"s-products-slider-card\" product={product} />\n )}\n </SallaProductsSlider>\n ) : (\n <SallaProductsList\n loader={loader(\n section.products.source,\n section.products?.source_value,\n section.products?.limit\n )}\n itemsClassName={`s-products-list-${cardLayout}-cards`}\n >\n {(products) =>\n products.map((product) => (\n <ProductCard key={product.id} product={product} layout={cardLayout} />\n ))\n }\n </SallaProductsList>\n )}\n </div>\n );\n })}\n </div>\n </div>\n </>\n );\n});\n","import { memo } from 'react';\nimport { ProductCard } from '../product/ProductCard';\nimport type { Product } from '../../types';\n\ninterface SectionItem {\n title?: string;\n name?: string;\n type?: string;\n products?: Product[];\n featured_product?: Product;\n limit?: number;\n id?: string;\n}\n\nexport interface FeaturedProductsStyle3Props {\n data: {\n items: SectionItem[];\n position?: number;\n [key: string]: unknown;\n };\n}\n\nexport const FeaturedProductsStyle3 = memo(function FeaturedProductsStyle3({\n data,\n}: FeaturedProductsStyle3Props) {\n const items = data.items || [];\n\n if (!items.length) return null;\n\n return (\n <>\n <div className=\"inner\">\n {items.map((section, sectionIndex) => (\n <div key={section.id || sectionIndex}>\n <div className=\"s-block__title\">\n <h2>{section.title}</h2>\n </div>\n <div className=\"flex-1 grid lg:grid-cols-2 gap-4 sm:gap-8\">\n {section.featured_product ? (\n <>\n <ProductCard product={section.featured_product} layout=\"fullImage\" withShadow />\n <div className=\"grid gap-4 sm:gap-8\">\n {section.products?.slice(0, 3).map((product, idx) => (\n <ProductCard\n key={product.id}\n product={product}\n layout=\"minimal\"\n withShadow\n index={idx}\n />\n ))}\n </div>\n </>\n ) : (\n section.products?.map((product, idx) => (\n <ProductCard\n key={product.id}\n product={product}\n layout=\"minimal\"\n withShadow\n index={idx}\n />\n ))\n )}\n </div>\n </div>\n ))}\n </div>\n </>\n );\n});\n","import { memo } from 'react';\nimport { Link } from '../common';\n\ninterface ImageData {\n url?: string;\n}\n\nexport interface ParallaxBackgroundProps {\n data: {\n image: ImageData;\n url?: string;\n title?: string;\n link_text?: string;\n is_opacity?: boolean;\n position?: number;\n [key: string]: unknown;\n };\n}\n\nexport const ParallaxBackground = memo(function ParallaxBackground({\n data,\n}: ParallaxBackgroundProps) {\n const { image, url, title, link_text: linkText, is_opacity: isOpacity = false } = data;\n\n if (!image?.url) return null;\n\n return (\n <>\n <div className=\"full-banner-entry\" style={{ backgroundImage: `url(${image.url})` }}>\n <div\n className={`overlay h-full w-full ${isOpacity ? 'bg-black' : ''} opacity-60 absolute top-0 left-0`}\n ></div>\n <div className=\"flex h-full items-center justify-center p-5 xs:p-11 relative\">\n <div>\n {title && <h2 className=\"text-2xl font-bold leading-12\">{title}</h2>}\n\n {url && linkText && (\n <Link\n to={url}\n className=\"inline-block text-white text-sm border rounded-md font-bold px-8 py-4\"\n >\n {linkText}\n </Link>\n )}\n </div>\n </div>\n </div>\n </>\n );\n});\n","import { memo } from 'react';\nimport { SallaSlider } from '@salla.sa/twilight-components-react/slider';\nimport { Link, Image } from '../common';\n\ninterface PhotoItem {\n id?: string | number;\n url?: string;\n link_type?: string;\n image?: string;\n}\n\nexport interface PhotosSliderProps {\n data: {\n items: PhotoItem[];\n position?: number;\n is_repeated?: boolean;\n [key: string]: unknown;\n };\n}\n\nexport const PhotosSlider = memo(function PhotosSlider({ data }: PhotosSliderProps) {\n const items = data.items || [];\n const position = data.position ?? 1;\n\n if (!items.length) return null;\n\n return (\n <>\n <SallaSlider\n type=\"carousel\"\n className=\"home-slider photos-slider\"\n centered\n autoPlay\n pagination\n id={`photos-${position}-slider`}\n sliderConfig={{ watchOverflow: true }}\n >\n <div slot=\"items\">\n {items.map((item, index) => (\n <div\n key={item.id ?? `${item.url ?? ''}:${item.image ?? ''}`}\n className=\"swiper-slide\"\n style={{ aspectRatio: '1200/300' }}\n >\n <Link to={item.url || '#'}>\n <Image\n src={item.image}\n className=\"w-full h-full object-contain rounded-md\"\n alt={`image-slider-${index}`}\n width={1200}\n height={300}\n priority={index === 0}\n />\n </Link>\n </div>\n ))}\n </div>\n </SallaSlider>\n </>\n );\n});\n","import { memo } from 'react';\nimport { Link } from '../common';\n\ninterface ImageData {\n url?: string;\n alt?: string;\n}\n\ninterface SquarePhotoItem {\n id?: string | number;\n url?: string;\n link_type?: string;\n /** The Store API sends the URL itself to the engine; Twig gets `{ url, alt }`. */\n image?: string | ImageData;\n text?: string;\n}\n\nconst imageUrl = (item: SquarePhotoItem) =>\n typeof item.image === 'string' ? item.image : item.image?.url;\n\nexport interface SquarePhotosProps {\n data: {\n title?: string;\n items: SquarePhotoItem[];\n position?: number;\n [key: string]: unknown;\n };\n}\n\nexport const SquarePhotos = memo(function SquarePhotos({ data }: SquarePhotosProps) {\n const items = data.items || [];\n const title = data.title;\n\n if (!items.length) return null;\n\n const gridCols =\n items.length <= 3 ? `one-row md:grid-cols-${items.length}` : 'md:grid-cols-3 two-row';\n\n return (\n <>\n {title && (\n <div className=\"s-block__title\">\n <div className=\"right-side\">\n <h2>{title}</h2>\n </div>\n </div>\n )}\n\n <div className={`grid ${gridCols} grid-flow-row gap-3 sm:gap-8`}>\n {items.map((item) => (\n <Link\n {...(item.link_type === 'external_link' ? { target: '_blank' } : {})}\n key={item.id ?? imageUrl(item) ?? item.url}\n className={`banner-entry square-photos ${item.text ? 'has-overlay with-hover' : ''}`}\n style={{ backgroundImage: `url(${imageUrl(item)})` }}\n to={item.url || '#'}\n >\n {item.text && (\n <h3 className=\"text-with-border\">\n <span>{item.text}</span>\n </h3>\n )}\n </Link>\n ))}\n </div>\n </>\n );\n});\n","import { memo, useEffect, useState } from 'react';\n\nexport interface YoutubeProps {\n data: {\n youtube_id: string;\n position?: number;\n [key: string]: unknown;\n };\n}\n\nexport const Youtube = memo(function Youtube({ data }: YoutubeProps) {\n const { youtube_id: youtubeId } = data;\n const [isLoaded, setIsLoaded] = useState(false);\n\n useEffect(() => {\n if (!youtubeId) return;\n\n // Lazy load the lite-youtube web component\n let mounted = true;\n import('@justinribeiro/lite-youtube')\n .then(() => {\n if (mounted) setIsLoaded(true);\n })\n .catch((err) => {\n console.error('Failed to load lite-youtube:', err);\n });\n\n return () => {\n mounted = false;\n };\n }, [youtubeId]);\n\n if (!youtubeId) return null;\n\n return (\n <>\n <div className=\"container\">\n <div className=\"videoWrapper\">\n {isLoaded ? (\n <lite-youtube videoid={youtubeId} params=\"rel=0\"></lite-youtube>\n ) : (\n <div className=\"animate-pulse bg-gray-200 w-full h-full min-h-[300px] rounded\" />\n )}\n </div>\n </div>\n </>\n );\n});\n","import { memo, useState, useEffect, type CSSProperties } from 'react';\n\n// Placeholder hints a bundle declares per component under `props` in its\n// twilight-bundle.json; the store API passes them as `component_props`. Each maps 1:1 to an\n// attribute on <salla-custom-component>, which reserves the component's space until the\n// bundle renders.\n// @see https://github.com/SallaApp/twilight-bundles/blob/master/packages/starter-kit/README.md#component-skeleton--placeholder\nconst SIZE_PROPS = ['min-height', 'height', 'width', 'aspect-ratio'] as const;\nconst SKELETON_PROPS: readonly string[] = [...SIZE_PROPS, 'skeleton-style'];\n\ntype SkeletonProps = Record<string, string>;\n\nexport interface BundleComponentProps {\n data: {\n component_name: string;\n bundle_id: string;\n component_props?: SkeletonProps;\n [key: string]: unknown;\n };\n}\n\nfunction pickSkeletonProps(props: unknown): SkeletonProps {\n if (!props || typeof props !== 'object') return {};\n return Object.fromEntries(\n Object.entries(props).filter(\n ([name, value]) =>\n SKELETON_PROPS.includes(name) && typeof value === 'string' && value.trim() !== ''\n )\n ) as SkeletonProps;\n}\n\n// Until mount there is no <salla-custom-component>, so hold the same footprint with a plain\n// block — otherwise the server HTML has nothing here and the page shifts once it mounts.\nfunction reservedSizeStyle(props: SkeletonProps): CSSProperties | undefined {\n const sizes = SIZE_PROPS.filter((name) => props[name]);\n if (!sizes.length) return undefined;\n return Object.fromEntries(\n sizes.map((name) => [\n name.replace(/-([a-z])/g, (_, char: string) => char.toUpperCase()),\n props[name],\n ])\n ) as CSSProperties;\n}\n\nexport const BundleComponent = memo(function BundleComponent(props: BundleComponentProps) {\n const [mounted, setMounted] = useState(false);\n\n useEffect(() => {\n setMounted(true);\n }, []);\n\n const {\n component_name: componentName,\n bundle_id: bundleId,\n component_props: componentProps,\n ...rest\n } = props.data;\n const skeletonProps = pickSkeletonProps(componentProps);\n\n if (!mounted) {\n const style = reservedSizeStyle(skeletonProps);\n return style ? <div aria-hidden=\"true\" style={style} /> : null;\n }\n\n const config = JSON.stringify(rest);\n\n return (\n <>\n <salla-custom-component\n component-name={componentName}\n bundle-id={bundleId}\n config={config}\n {...skeletonProps}\n suppressHydrationWarning\n />\n </>\n );\n});\n","import { lazy } from 'react';\n\nexport { ProductsSlider as LazyProductsSlider } from './ProductsSlider';\nexport { StoreFeatures as LazyStoreFeatures } from './StoreFeatures';\nexport { FixedBanner as LazyFixedBanner } from './FixedBanner';\nexport { FixedProducts as LazyFixedProducts } from './FixedProducts';\nexport { FeaturedProductsStyle1 as LazyFeaturedProductsStyle1 } from './FeaturedProductsStyle1';\nexport { FeaturedProductsStyle2 as LazyFeaturedProductsStyle2 } from './FeaturedProductsStyle2';\nexport { FeaturedProductsStyle3 as LazyFeaturedProductsStyle3 } from './FeaturedProductsStyle3';\nexport { ParallaxBackground as LazyParallaxBackground } from './ParallaxBackground';\nexport { PhotosSlider as LazyPhotosSlider } from './PhotosSlider';\nexport { SquarePhotos as LazySquarePhotos } from './SquarePhotos';\nexport const LazyTestimonials = lazy(() =>\n import('./Testimonials').then((m) => ({ default: m.Testimonials }))\n);\nexport { Youtube as LazyYoutube } from './Youtube';\nexport { BundleComponent as LazyBundleComponent } from './BundleComponent';\n","import {\n LazyProductsSlider,\n LazyStoreFeatures,\n LazyFixedBanner,\n LazyFixedProducts,\n LazyFeaturedProductsStyle1,\n LazyFeaturedProductsStyle2,\n LazyFeaturedProductsStyle3,\n LazyParallaxBackground,\n LazyPhotosSlider,\n LazySquarePhotos,\n LazyTestimonials,\n LazyYoutube,\n LazyBundleComponent,\n} from './lazy';\nimport type { AnyHomeComponent } from './types';\nimport { registry } from '../ComponentRegistry';\n\nexport const DefaultHomeComponents: Record<string, AnyHomeComponent | null> = {\n 'fixed-banner': LazyFixedBanner,\n 'photos-slider': LazyPhotosSlider,\n testimonial: LazyTestimonials,\n 'store-features': LazyStoreFeatures,\n youtube: LazyYoutube,\n 'square-photos': LazySquarePhotos,\n 'fixed-products': LazyFixedProducts,\n 'products-slider': LazyProductsSlider,\n 'parallax-background': LazyParallaxBackground,\n 'featured-products:style1': LazyFeaturedProductsStyle1,\n 'featured-products:style2': LazyFeaturedProductsStyle2,\n 'featured-products:style3': LazyFeaturedProductsStyle3,\n 'bundle-component': LazyBundleComponent,\n};\n\nexport function registerHomeComponents(\n components: Record<string, AnyHomeComponent | null> = DefaultHomeComponents,\n prefix = 'home:'\n): void {\n Object.entries(components).forEach(([path, component]) => {\n if (component) {\n registry.register(`${prefix}${path}`, component);\n }\n });\n}\n","import { Component, type ReactNode, type ErrorInfo } from 'react';\nimport { TwilightContext } from '../../providers/twilight-context';\nimport type { TwilightContextValue } from '../../types/twilight';\nimport type { HomeComponentData } from '../../types';\n\ninterface ComponentErrorBoundaryProps {\n children: ReactNode;\n data: HomeComponentData;\n position: number;\n}\n\ninterface ComponentErrorBoundaryState {\n hasError: boolean;\n error: Error | null;\n}\n\nfunction DevelopmentErrorCard({ error, data }: { error: Error; data: HomeComponentData }) {\n return (\n <section\n dir=\"ltr\"\n className=\"s-block container overflow-hidden bg-red-50 border border-red-300 p-4\"\n >\n <p className=\"text-red-800 text-sm font-bold\">Home Component Error: {data.path}</p>\n <p className=\"text-red-700 text-sm mt-2\">{error.message}</p>\n <details className=\"mt-2\">\n <summary className=\"text-xs cursor-pointer text-red-600\">Stack Trace</summary>\n <pre className=\"text-xs mt-1 overflow-auto max-h-32 text-red-700\">{error.stack}</pre>\n </details>\n <details className=\"mt-2\">\n <summary className=\"text-xs cursor-pointer text-red-600\">Component Data</summary>\n <pre className=\"text-xs mt-1 overflow-auto max-h-32 text-red-700\">\n {JSON.stringify(data, null, 2)}\n </pre>\n </details>\n </section>\n );\n}\n\nexport class ComponentErrorBoundary extends Component<\n ComponentErrorBoundaryProps,\n ComponentErrorBoundaryState\n> {\n static contextType = TwilightContext;\n\n declare context: TwilightContextValue | null;\n\n constructor(props: ComponentErrorBoundaryProps) {\n super(props);\n this.state = { hasError: false, error: null };\n }\n\n static getDerivedStateFromError(error: Error): ComponentErrorBoundaryState {\n return { hasError: true, error };\n }\n\n // Blocks are keyed by position, so a replacement block at the same position reuses\n // this boundary. An error belongs to the block that threw it, not the position.\n componentDidUpdate(prevProps: ComponentErrorBoundaryProps): void {\n if (this.state.hasError && prevProps.data !== this.props.data) {\n this.setState({ hasError: false, error: null });\n }\n }\n\n componentDidCatch(error: Error, errorInfo: ErrorInfo): void {\n if (!this.context) {\n console.error('[ComponentErrorBoundary] Must be used within TwilightProvider');\n return;\n }\n const { log } = this.context;\n const { data, position } = this.props;\n\n log.groupCollapsed(`HomeComponent Error: ${data.path || 'unknown'}`);\n log.error('ERROR', error.message);\n log.label('COMPONENT', data.path || 'unknown');\n log.label('POSITION', position);\n log.label('URL', typeof window !== 'undefined' ? window.location.href : 'SSR');\n log.label('TIME', new Date().toISOString());\n log.trace('STACK TRACE', error.stack || '');\n log.trace('COMPONENT STACK', errorInfo.componentStack || '');\n log.dir('COMPONENT DATA', data);\n log.groupEnd();\n }\n\n render(): ReactNode {\n const { hasError, error } = this.state;\n const { children, data } = this.props;\n\n if (hasError && error) {\n if (process.env.NODE_ENV === 'production') {\n return null;\n }\n\n return <DevelopmentErrorCard error={error} data={data} />;\n }\n\n return children;\n }\n}\n","import { memo, useEffect, useRef, type ReactNode } from 'react';\nimport { registry } from '../ComponentRegistry';\nimport { RenderWhenVisible } from '../common';\nimport { ComponentErrorBoundary } from './ComponentErrorBoundary';\nimport type { AnyHomeComponent } from './index';\nimport type { HomeComponentData } from '../../types';\nimport {\n BackgroundSliderSkeleton,\n BulletDeliverySkeleton,\n FixedProductsSkeleton,\n ListSkeleton,\n ProductsSliderSkeleton,\n Pulse,\n ReviewItemSkeleton,\n SliderSkeleton,\n} from '@salla.sa/twilight-components-react';\n\nfunction SquareGridSkeleton() {\n return (\n <div className=\"s-block container grid grid-cols-2 sm:grid-cols-4 gap-4 py-8\">\n {[1, 2, 3, 4].map((i) => (\n <Pulse key={i} className=\"aspect-square\" />\n ))}\n </div>\n );\n}\n\nexport type HomeComponentsProps = {\n data: HomeComponentData & {\n position?: number;\n [key: string]: unknown;\n };\n};\n\n/**\n * Fallback component for unknown/unregistered components\n * Only shows in development mode\n */\nconst FallbackComponent = memo(function FallbackComponent({ data }: HomeComponentsProps) {\n if (process.env.NODE_ENV === 'production') return null;\n\n return (\n <section\n dir=\"ltr\"\n className=\"s-block container overflow-hidden bg-yellow-50 border border-yellow-200 p-4\"\n >\n <p className=\"text-yellow-800 text-sm\">\n <strong>Unknown component:</strong> {data.path}\n </p>\n <p className=\"text-yellow-700 text-xs mt-1\">\n Register it in setup.ts: <code>registry.register('home:{data.path}', YourComponent)</code>\n </p>\n <details className=\"mt-2\">\n <summary className=\"text-xs cursor-pointer\">Component Data</summary>\n <pre className=\"text-xs mt-1 overflow-auto max-h-32\">{JSON.stringify(data, null, 2)}</pre>\n </details>\n </section>\n );\n});\n\n/**\n * Get the React component for a given home component path\n * Looks up from registry only - theme must register components\n */\nfunction getComponentByPath(data: HomeComponentData): AnyHomeComponent {\n const { path, view_style: viewStyle } = data;\n\n // 1. Check for view_style variant first\n if (viewStyle) {\n const variantKey = `home:${path}:${viewStyle}`;\n const variant = registry.resolve(variantKey);\n if (variant) {\n return variant as AnyHomeComponent;\n }\n }\n\n // 2. Check registry for component\n const registryKey = `home:${path}`;\n const component = registry.resolve(registryKey);\n if (component) {\n return component as AnyHomeComponent;\n }\n\n // 3. Fallback for unknown components\n return FallbackComponent;\n}\n\n/** Same breakpoint and rules the Store injects for Twig themes (`ComponentVisibilityStyles`). */\nconst CHANNEL_VISIBILITY_CSS =\n '@media (max-width:767.98px){.s-hide-on-mobile{display:none!important}}' +\n '@media (min-width:768px){.s-hide-on-desktop{display:none!important}}';\n\n/**\n * Hide class for the merchant's per-channel pick. A missing key, or one that\n * hides on both channels, means visible everywhere: hiding a block outright\n * is the `is_visible` toggle's job, and stores without the feature send no key.\n */\nexport function channelVisibilityClass(data: HomeComponentData): string {\n const raw = data.channel_visibility;\n if (!raw || typeof raw !== 'object') return '';\n const desktop = raw.desktop !== false;\n const mobile = raw.mobile !== false;\n if (desktop && !mobile) return 's-hide-on-mobile';\n if (mobile && !desktop) return 's-hide-on-desktop';\n return '';\n}\n\n/**\n * Render-shell config for a home block: the values the lazy-load wrapper\n * (`RenderWhenVisible`) needs *before* the block mounts — reserved height, the\n * skeleton placeholder, and the wrapper's className/id.\n *\n * Themes register config for blocks they own via `registerHomeComponentConfig`;\n * the engine knows nothing about theme-specific blocks.\n */\nexport type HomeComponentConfig = {\n height?: string;\n className?: string | ((data: HomeComponentData) => string);\n id?: string | ((data: HomeComponentData) => string);\n placeholder?: ReactNode;\n /** Mount on page load instead of when the block nears the viewport. */\n renderOnMount?: boolean;\n};\n\nconst COMPONENT_CONFIG: Record<string, HomeComponentConfig> = {\n 'products-slider': { height: '450px', placeholder: <ProductsSliderSkeleton /> },\n 'fixed-products': { height: '450px', placeholder: <FixedProductsSkeleton /> },\n 'featured-products': {\n height: '450px',\n placeholder: <ProductsSliderSkeleton />,\n className: (data) => {\n const style = data.view_style;\n if (style === 'style1')\n return 's-block s-block--featured-products s-block-tabs s-block--special-products container tabs-initialized';\n if (style === 'style2')\n return `s-block s-block--featured-products s-block-tabs s-block--tabs-produtcs s-block--full-bg tabs-initialized ${data.is_slider ? 'as-slider' : 'as-grid'} bg-gray-100 py-8 sm:py-16`;\n if (style === 'style3')\n return `s-block s-block--featured-products s-block--features-products${Array.isArray(data.items) && data.items.length > 1 ? ' two-cols' : ''} container`;\n return 's-block s-block--featured-products container overflow-hidden';\n },\n id: (data) => `featured-products-${data.view_style}-${data.position ?? 0}`,\n },\n testimonial: { height: '350px', placeholder: <ReviewItemSkeleton /> },\n 'store-features': { height: '200px', placeholder: <BulletDeliverySkeleton /> },\n 'parallax-background': { height: '500px', placeholder: <BackgroundSliderSkeleton /> },\n 'fixed-banner': { height: '350px', placeholder: <BackgroundSliderSkeleton /> },\n 'photos-slider': {\n height: 'clamp(130px, 30vw, 350px)',\n placeholder: <SliderSkeleton />,\n className: (data) =>\n `s-block s-block--photos-slider${data.is_repeated ? ' repeated-block' : ''}`,\n },\n 'square-photos': { height: '250px', placeholder: <SquareGridSkeleton /> },\n youtube: { height: '350px', placeholder: <SliderSkeleton /> },\n 'bundle-component': {\n // As in Twig: reserve nothing, the bundle grows the block from 0.\n height: '0px',\n placeholder: <></>,\n className: (data) => `s-block s-block--bundle-${data.component_name}`,\n // As in Twig, where merchant scripts wait a limited time for the bundle's markup.\n renderOnMount: true,\n },\n 'main-links': {\n height: '200px',\n placeholder: <ListSkeleton />,\n className: (data) => {\n const mergeWithTop = data.merge_links_with_top_component;\n const position = data.position;\n return [\n 's-block',\n 's-block--main-links',\n mergeWithTop && position ? 'merge-with-top-component' : '',\n !data.title && mergeWithTop ? 'merged-has-no-title' : '',\n ]\n .filter(Boolean)\n .join(' ');\n },\n },\n 'square-links': { height: '200px', placeholder: <SquareGridSkeleton /> },\n};\n\n/**\n * Theme-registered render-shell config, keyed by home component path. Themes own\n * the display of their blocks by registering config here; at render time a path's\n * theme entry replaces (not field-merges) the engine's built-in `COMPONENT_CONFIG`\n * entry for that path.\n */\nconst themeComponentConfig: Record<string, HomeComponentConfig> = {};\n\n/**\n * Register render-shell config for home blocks a theme owns (height, placeholder,\n * className, id). Merges by path and overwrites existing keys, so it is safe to\n * call more than once and idempotent for the same keys.\n */\nexport function registerHomeComponentConfig(config: Record<string, HomeComponentConfig>): void {\n Object.assign(themeComponentConfig, config);\n}\n\n/**\n * Resolve a block's render-shell config: theme-registered config takes precedence\n * over the engine's built-in config; returns `undefined` when neither defines the\n * path so the renderer can apply generic defaults.\n */\nfunction resolveComponentConfig(path: string): HomeComponentConfig | undefined {\n return themeComponentConfig[path] ?? COMPONENT_CONFIG[path];\n}\n\n/**\n * What the theme editor addresses a block by: the dev editor's layout id (less\n * the remount suffix), its row id, or the uuid of one not saved yet. The layout\n * id comes first: a customized layout keeps the store blocks' row ids among\n * their fields, and duplicates share them. A built-in block (fixed products,\n * YouTube, …) has neither id nor key, so it goes by its path, which the\n * editor matches to the block's slug; the bar says which copy.\n */\nfunction liveBlockIdOf(data: HomeComponentData): string | undefined {\n const devId = typeof data.__dev_id === 'string' ? data.__dev_id.replace(/~\\d+$/, '') : undefined;\n const id = devId ?? data.id ?? data.key;\n if (typeof id === 'number' || (typeof id === 'string' && id)) return String(id);\n return data.path || undefined;\n}\n\n/**\n * Memoized component renderer with scroll-based lazy loading\n * Components only mount when scrolled into view - preventing API calls until needed\n */\nexport const HomeComponentRenderer = memo(function HomeComponentRenderer({\n data,\n index,\n priority,\n}: {\n data: HomeComponentData;\n index: number;\n /** Mount right away with eager images. Defaults to the first three blocks of the page. */\n priority?: boolean;\n}) {\n const renderCountRef = useRef(0);\n renderCountRef.current += 1;\n\n if (process.env.NODE_ENV === 'development') {\n console.log(\n `[HomeComponentRenderer] RENDER: path=${data.path}, index=${index}, renderCount=${renderCountRef.current}`\n );\n }\n\n useEffect(() => {\n console.log(\n `[HomeComponentRenderer] MOUNT: path=${data.path}, index=${index}, renderCount=${renderCountRef.current}`\n );\n return () => {\n console.log(`[HomeComponentRenderer] UNMOUNT: path=${data.path}, index=${index}`);\n };\n }, [data.path, index]);\n\n const isFirstComponent = priority ?? index <= 2;\n const Component = getComponentByPath(data);\n\n const config = resolveComponentConfig(data.path);\n\n const resolvedClassName = config?.className\n ? typeof config.className === 'function'\n ? config.className(data)\n : config.className\n : `s-block s-block--${data.path}`;\n const hideClass = channelVisibilityClass(data);\n const resolvedId = config?.id\n ? typeof config.id === 'function'\n ? config.id(data)\n : config.id\n : undefined;\n const liveBlockId = liveBlockIdOf(data);\n const height = config?.height || '400px';\n // A theme's config replaces the engine's, but keeps its mount timing unless the theme sets one.\n const renderOnMount = config?.renderOnMount ?? COMPONENT_CONFIG[data.path]?.renderOnMount;\n\n const content = (\n <ComponentErrorBoundary data={data} position={index + 1}>\n <Component data={{ ...data, position: index + 1, priority: isFirstComponent }} />\n </ComponentErrorBoundary>\n );\n\n return (\n <>\n {hideClass && (\n <style href=\"twilight-channel-visibility\" precedence=\"default\">\n {CHANNEL_VISIBILITY_CSS}\n </style>\n )}\n <RenderWhenVisible\n rootMargin=\"50px\"\n className={hideClass ? `${resolvedClassName} ${hideClass}` : resolvedClassName}\n id={resolvedId}\n estimatedHeight={height}\n renderOnMount={isFirstComponent || renderOnMount === true}\n placeholder={config?.placeholder ?? <ProductsSliderSkeleton />}\n // Dev only: lets the theme editor scroll the preview to a block.\n blockIndex={import.meta.env.DEV ? index : undefined}\n liveBlockId={liveBlockId}\n >\n {content}\n </RenderWhenVisible>\n </>\n );\n});\n","import { memo } from 'react';\nimport { useQuery } from '@tanstack/react-query';\nimport { home, type BlockScope } from '../../api/home';\nimport { HomeComponentRenderer } from './HomePageRenderer';\n\nexport interface PageBlocksProps {\n /** The page hook the merchant placed the blocks at, e.g. `product.single.before_customer_reviews`. */\n hook: string;\n /** The product, category or page being shown. */\n scope: BlockScope;\n}\n\n/** Draws the blocks placed at a product, category or page hook, loaded in the browser. */\nexport const PageBlocks = memo(function PageBlocks({ hook, scope }: PageBlocksProps) {\n const { data: blocks = [] } = useQuery(home.queries.blocks(hook, scope));\n\n return (\n <>\n {blocks.map((data, index) => (\n <HomeComponentRenderer key={index} data={data} index={index} priority={false} />\n ))}\n </>\n );\n});\n","import { useEffect } from 'react';\nimport { useTranslation } from '../../providers/I18nProvider';\nimport { whenSallaLoaded } from '../../utils/sdk-helpers';\n\ninterface ReorderLabels {\n /** The add button's text in a reorder list. */\n add: string;\n /** Its text for an out-of-stock product. */\n outOfStock: string;\n}\n\nlet registered = false;\n\n/**\n * Twig's ReorderProductsWidget script: inside a reorder list the add button reads the block's\n * title and adds the product as the customer last ordered it. The SDK has no way to remove a\n * hook, so it is registered once per page load.\n */\nfunction registerReorderHooks(labels: ReorderLabels): void {\n if (registered) return;\n registered = true;\n whenSallaLoaded((sdk) => {\n sdk.hooks?.registerHook?.('salla-add-product-button', 'componentDidLoad', (component) => {\n if (!component.host?.closest('[source=\"reorder\"], [data-source=\"reorder\"]')) return;\n const isOutOfStock =\n component.productStatus === 'out' || component.productStatus === 'out-and-notify';\n const setLabel = () => component.btn?.setText(isOutOfStock ? labels.outOfStock : labels.add);\n setLabel();\n sdk.lang?.onLoaded?.(setLabel);\n if (isOutOfStock) return;\n component.addProductToCart = async (event: Event) => {\n event.preventDefault();\n // The click lands on the inner button, which has no product-id; without one the SDK uses the page's.\n const productId = component.productId ?? component.host.getAttribute('product-id');\n await sdk.order.api.reorderProduct?.(productId ?? undefined);\n };\n });\n });\n}\n\n/**\n * Inside an element with `data-source=\"reorder\"`, make each add button read \"order again\" and\n * add the product as the customer last ordered it, as Twig's reorder block and page do.\n */\nexport function useReorderButtons(enabled: boolean): void {\n const { t } = useTranslation();\n const add = t('pages.orders.repurchase');\n const outOfStock = t('pages.products.out_of_stock');\n useEffect(() => {\n if (enabled) registerReorderHooks({ add, outOfStock });\n }, [enabled, add, outOfStock]);\n}\n","import { memo, useMemo } from 'react';\nimport { useTranslation } from '../../providers/I18nProvider';\nimport { getTwilightContext } from '../../twilight/context';\nimport type { HomeComponentData } from '../../types';\nimport { HomeComponentRenderer } from './HomePageRenderer';\nimport { useReorderButtons } from './reorder-hooks';\n\n/**\n * Twig's \"order again\" block (the Store app's ReorderProductsWidget): on the home page, for a\n * signed-in customer of a store with Reorder on, the products they ordered before, drawn by the\n * theme's own `products-slider` like the home's other product rows.\n */\nexport const ReorderProducts = memo(function ReorderProducts() {\n const { t } = useTranslation();\n const { authToken, settings } = getTwilightContext();\n // The platform lists `reorder` in the store's features exactly when the Reorder setting is on.\n const enabled = !!authToken && !!settings?.store?.features?.includes('reorder');\n const title = t('pages.orders.repurchase');\n useReorderButtons(enabled);\n\n const data = useMemo<HomeComponentData>(\n () => ({\n path: 'products-slider',\n title,\n display_all_url: '/products?source=reorder',\n products: { source: 'reorder' },\n }),\n [title]\n );\n\n if (!enabled) return null;\n\n return (\n <div id=\"reorder-section\" data-source=\"reorder\">\n <HomeComponentRenderer data={data} index={-1} priority={false} />\n </div>\n );\n});\n"]}
@@ -1,8 +1,8 @@
1
- import { order } from './chunk-UJIE7IEJ.js';
1
+ import { order } from './chunk-WHFKJ3AS.js';
2
2
  import { buildHreflangAlternates } from './chunk-RYGEIQWO.js';
3
- import { unauthorized, orUnauthorized, orThrow } from './chunk-DGK2HVSR.js';
3
+ import { unauthorized, orUnauthorized, orThrow } from './chunk-RLJLG4EN.js';
4
4
  import { RouteId } from './chunk-OUW6WESU.js';
5
- import { getAuthToken } from './chunk-5RWIVHYS.js';
5
+ import { getAuthToken } from './chunk-E5DP3MHE.js';
6
6
  import { getTwilightContext } from './chunk-6K34BCUP.js';
7
7
  import { lazy } from 'react';
8
8
 
@@ -55,9 +55,9 @@ async function orderSingleLoader({
55
55
  }
56
56
 
57
57
  // src/routes/account/orders/index.tsx
58
- var LazyOrdersPage = lazy(() => import('./OrdersPage-57MRSJTB.js').then((m) => ({ default: m.OrdersPage })));
58
+ var LazyOrdersPage = lazy(() => import('./OrdersPage-VBF3P3JH.js').then((m) => ({ default: m.OrdersPage })));
59
59
  var LazyOrderSinglePage = lazy(
60
- () => import('./OrderSinglePage-2RTLHMMO.js').then((m) => ({ default: m.OrderSinglePage }))
60
+ () => import('./OrderSinglePage-LXKINOXP.js').then((m) => ({ default: m.OrderSinglePage }))
61
61
  );
62
62
  var OrdersPage = LazyOrdersPage;
63
63
  var OrderSinglePage = LazyOrderSinglePage;
@@ -104,5 +104,5 @@ var OrderSingle = {
104
104
  };
105
105
 
106
106
  export { OrderSingle, OrderSinglePage, Orders, OrdersPage, orderSingleLoader, ordersLoader };
107
- //# sourceMappingURL=chunk-LA7B3TTK.js.map
108
- //# sourceMappingURL=chunk-LA7B3TTK.js.map
107
+ //# sourceMappingURL=chunk-VZPEPWDF.js.map
108
+ //# sourceMappingURL=chunk-VZPEPWDF.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/routes/account/orders/loader.ts","../src/routes/account/orders/index.tsx"],"names":[],"mappings":"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","file":"chunk-LA7B3TTK.js","sourcesContent":["import { order } from '../../../api/order';\nimport { getTwilightContext } from '../../../twilight/context';\nimport { RouteId } from '../../../router/route-ids';\nimport { orThrow, orUnauthorized, unauthorized } from '../../../providers/NavigationProvider';\nimport { getAuthToken } from '../../../api/client';\nimport type { OrdersPageProps, OrderSinglePageProps, OrdersQuery } from './types';\nimport type { IdParams } from '../../types';\n\nexport async function ordersLoader(\n ctx: { query?: OrdersQuery; with_items?: boolean | number },\n extend?: (\n data: OrdersPageProps,\n ctx: { params: Record<string, never> }\n ) => Promise<Record<string, unknown>> | Record<string, unknown>\n): Promise<OrdersPageProps> {\n if (!getAuthToken()) throw unauthorized();\n const query = ctx.query;\n const isPending = query?.status === 'pending';\n const response = await orUnauthorized(\n order.list({\n // Only decides the empty state; <salla-orders> applies its own review filter (`?tab=waiting`).\n status: query?.status,\n ...(ctx.with_items ? { with_items: ctx.with_items } : {}),\n })\n );\n const i18n = getTwilightContext().i18n;\n const pageData: OrdersPageProps = {\n page: {\n title: isPending ? i18n.t('common.titles.pending_orders') : i18n.t('common.titles.orders'),\n slug: RouteId.CUSTOMER_ORDERS_INDEX,\n },\n orders: response.data,\n cursor: response.cursor,\n query,\n };\n\n if (extend) {\n const extra = await extend(pageData, { params: {} });\n return { ...pageData, ...extra } as OrdersPageProps;\n }\n return pageData;\n}\n\nexport async function orderSingleLoader({\n params,\n}: {\n params: IdParams;\n}): Promise<OrderSinglePageProps> {\n if (!getAuthToken()) throw unauthorized();\n const [data, componentsOrder] = await Promise.all([\n order.findOrThrow(params.id),\n orThrow(orUnauthorized(order.findForComponents(params.id))),\n ]);\n const i18n = getTwilightContext().i18n;\n return {\n page: {\n slug: RouteId.CUSTOMER_ORDERS_SINGLE,\n id: String(params.id),\n title: i18n\n .t('pages.orders.order_details')\n .replace(':id', String(data.order.reference_id ?? params.id)),\n },\n order: data.order,\n componentsOrder,\n };\n}\n","import type { HeadDescriptor } from '../../../utils/head';\nimport { buildHreflangAlternates } from '../../../utils/baseHead';\nimport { lazy } from 'react';\nimport { ordersLoader, orderSingleLoader } from './loader';\nimport type { OrdersPageProps, OrderSinglePageProps, OrdersSearchParams } from './types';\nimport type { IdParams } from '../../types';\nimport type { TwilightContext } from '../../../twilight/context';\nimport { RouteId } from '../../../router/route-ids';\n\n// Lazy-load components for code-splitting\nconst LazyOrdersPage = lazy(() => import('./OrdersPage').then((m) => ({ default: m.OrdersPage })));\nconst LazyOrderSinglePage = lazy(() =>\n import('./OrderSinglePage').then((m) => ({ default: m.OrderSinglePage }))\n);\n\nexport const OrdersPage = LazyOrdersPage;\nexport const OrderSinglePage = LazyOrderSinglePage;\nexport { ordersLoader, orderSingleLoader } from './loader';\nexport type {\n OrdersPageProps,\n OrderSinglePageProps,\n OrdersSearchParams,\n OrdersQuery,\n} from './types';\n\nasync function ordersLoaderWithExtend(\n ctx: { search?: OrdersSearchParams; locale?: string; with_items?: boolean | number },\n extend?: (\n data: OrdersPageProps,\n ctx: { params: Record<string, never> }\n ) => Promise<Record<string, unknown>> | Record<string, unknown>\n): Promise<OrdersPageProps> {\n const query = ctx.search;\n // ordersLoader already merges the result of `extend`; calling it again here ran it twice.\n return ordersLoader({ query, with_items: ctx.with_items }, extend);\n}\n\nfunction ordersHead(ctx: TwilightContext, data: OrdersPageProps): HeadDescriptor {\n const isPending = data.query?.status === 'pending';\n const base: HeadDescriptor = {\n title: ctx.i18n.t(isPending ? 'common.titles.pending_orders' : 'common.titles.orders'),\n description: data.page.description,\n alternateLanguages: buildHreflangAlternates(ctx.settings, ctx.location.pathname),\n };\n\n return base;\n}\n\nasync function orderSingleLoaderWithExtend(\n ctx: { params: IdParams; locale?: string },\n extend?: (\n data: OrderSinglePageProps,\n ctx: { params: IdParams }\n ) => Promise<Record<string, unknown>> | Record<string, unknown>\n): Promise<OrderSinglePageProps> {\n const data = await orderSingleLoader({ params: ctx.params });\n\n if (extend) {\n const extra = await extend(data, ctx);\n return { ...data, ...extra } as OrderSinglePageProps;\n }\n return data;\n}\n\nfunction orderSingleHead(ctx: TwilightContext, data: OrderSinglePageProps): HeadDescriptor {\n const base: HeadDescriptor = {\n title: data.page.title,\n description: data.page.description,\n alternateLanguages: buildHreflangAlternates(ctx.settings, ctx.location.pathname),\n };\n\n return base;\n}\n\nexport const Orders = {\n id: RouteId.CUSTOMER_ORDERS_INDEX,\n loader: ordersLoaderWithExtend,\n head: ordersHead,\n Component: LazyOrdersPage,\n} as const;\nexport const OrderSingle = {\n id: RouteId.CUSTOMER_ORDERS_SINGLE,\n loader: orderSingleLoaderWithExtend,\n head: orderSingleHead,\n Component: LazyOrderSinglePage,\n} as const;\n"]}
1
+ {"version":3,"sources":["../src/routes/account/orders/loader.ts","../src/routes/account/orders/index.tsx"],"names":[],"mappings":"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","file":"chunk-VZPEPWDF.js","sourcesContent":["import { order } from '../../../api/order';\nimport { getTwilightContext } from '../../../twilight/context';\nimport { RouteId } from '../../../router/route-ids';\nimport { orThrow, orUnauthorized, unauthorized } from '../../../providers/NavigationProvider';\nimport { getAuthToken } from '../../../api/client';\nimport type { OrdersPageProps, OrderSinglePageProps, OrdersQuery } from './types';\nimport type { IdParams } from '../../types';\n\nexport async function ordersLoader(\n ctx: { query?: OrdersQuery; with_items?: boolean | number },\n extend?: (\n data: OrdersPageProps,\n ctx: { params: Record<string, never> }\n ) => Promise<Record<string, unknown>> | Record<string, unknown>\n): Promise<OrdersPageProps> {\n if (!getAuthToken()) throw unauthorized();\n const query = ctx.query;\n const isPending = query?.status === 'pending';\n const response = await orUnauthorized(\n order.list({\n // Only decides the empty state; <salla-orders> applies its own review filter (`?tab=waiting`).\n status: query?.status,\n ...(ctx.with_items ? { with_items: ctx.with_items } : {}),\n })\n );\n const i18n = getTwilightContext().i18n;\n const pageData: OrdersPageProps = {\n page: {\n title: isPending ? i18n.t('common.titles.pending_orders') : i18n.t('common.titles.orders'),\n slug: RouteId.CUSTOMER_ORDERS_INDEX,\n },\n orders: response.data,\n cursor: response.cursor,\n query,\n };\n\n if (extend) {\n const extra = await extend(pageData, { params: {} });\n return { ...pageData, ...extra } as OrdersPageProps;\n }\n return pageData;\n}\n\nexport async function orderSingleLoader({\n params,\n}: {\n params: IdParams;\n}): Promise<OrderSinglePageProps> {\n if (!getAuthToken()) throw unauthorized();\n const [data, componentsOrder] = await Promise.all([\n order.findOrThrow(params.id),\n orThrow(orUnauthorized(order.findForComponents(params.id))),\n ]);\n const i18n = getTwilightContext().i18n;\n return {\n page: {\n slug: RouteId.CUSTOMER_ORDERS_SINGLE,\n id: String(params.id),\n title: i18n\n .t('pages.orders.order_details')\n .replace(':id', String(data.order.reference_id ?? params.id)),\n },\n order: data.order,\n componentsOrder,\n };\n}\n","import type { HeadDescriptor } from '../../../utils/head';\nimport { buildHreflangAlternates } from '../../../utils/baseHead';\nimport { lazy } from 'react';\nimport { ordersLoader, orderSingleLoader } from './loader';\nimport type { OrdersPageProps, OrderSinglePageProps, OrdersSearchParams } from './types';\nimport type { IdParams } from '../../types';\nimport type { TwilightContext } from '../../../twilight/context';\nimport { RouteId } from '../../../router/route-ids';\n\n// Lazy-load components for code-splitting\nconst LazyOrdersPage = lazy(() => import('./OrdersPage').then((m) => ({ default: m.OrdersPage })));\nconst LazyOrderSinglePage = lazy(() =>\n import('./OrderSinglePage').then((m) => ({ default: m.OrderSinglePage }))\n);\n\nexport const OrdersPage = LazyOrdersPage;\nexport const OrderSinglePage = LazyOrderSinglePage;\nexport { ordersLoader, orderSingleLoader } from './loader';\nexport type {\n OrdersPageProps,\n OrderSinglePageProps,\n OrdersSearchParams,\n OrdersQuery,\n} from './types';\n\nasync function ordersLoaderWithExtend(\n ctx: { search?: OrdersSearchParams; locale?: string; with_items?: boolean | number },\n extend?: (\n data: OrdersPageProps,\n ctx: { params: Record<string, never> }\n ) => Promise<Record<string, unknown>> | Record<string, unknown>\n): Promise<OrdersPageProps> {\n const query = ctx.search;\n // ordersLoader already merges the result of `extend`; calling it again here ran it twice.\n return ordersLoader({ query, with_items: ctx.with_items }, extend);\n}\n\nfunction ordersHead(ctx: TwilightContext, data: OrdersPageProps): HeadDescriptor {\n const isPending = data.query?.status === 'pending';\n const base: HeadDescriptor = {\n title: ctx.i18n.t(isPending ? 'common.titles.pending_orders' : 'common.titles.orders'),\n description: data.page.description,\n alternateLanguages: buildHreflangAlternates(ctx.settings, ctx.location.pathname),\n };\n\n return base;\n}\n\nasync function orderSingleLoaderWithExtend(\n ctx: { params: IdParams; locale?: string },\n extend?: (\n data: OrderSinglePageProps,\n ctx: { params: IdParams }\n ) => Promise<Record<string, unknown>> | Record<string, unknown>\n): Promise<OrderSinglePageProps> {\n const data = await orderSingleLoader({ params: ctx.params });\n\n if (extend) {\n const extra = await extend(data, ctx);\n return { ...data, ...extra } as OrderSinglePageProps;\n }\n return data;\n}\n\nfunction orderSingleHead(ctx: TwilightContext, data: OrderSinglePageProps): HeadDescriptor {\n const base: HeadDescriptor = {\n title: data.page.title,\n description: data.page.description,\n alternateLanguages: buildHreflangAlternates(ctx.settings, ctx.location.pathname),\n };\n\n return base;\n}\n\nexport const Orders = {\n id: RouteId.CUSTOMER_ORDERS_INDEX,\n loader: ordersLoaderWithExtend,\n head: ordersHead,\n Component: LazyOrdersPage,\n} as const;\nexport const OrderSingle = {\n id: RouteId.CUSTOMER_ORDERS_SINGLE,\n loader: orderSingleLoaderWithExtend,\n head: orderSingleHead,\n Component: LazyOrderSinglePage,\n} as const;\n"]}
@@ -1,4 +1,4 @@
1
- import { advertisement, advertisementsFor } from './chunk-4EAYVEJO.js';
1
+ import { advertisement, advertisementsFor } from './chunk-5A37NING.js';
2
2
  import { useTranslation } from './chunk-TYNZ5B2B.js';
3
3
  import { whenSallaReady } from './chunk-NHA4SBKG.js';
4
4
  import { subscribeTwilight, getTwilightContext } from './chunk-6K34BCUP.js';
@@ -99,5 +99,5 @@ function PageAdvertisements() {
99
99
  }
100
100
 
101
101
  export { PageAdvertisements };
102
- //# sourceMappingURL=chunk-TL2RV5KC.js.map
103
- //# sourceMappingURL=chunk-TL2RV5KC.js.map
102
+ //# sourceMappingURL=chunk-WEKO2DAN.js.map
103
+ //# sourceMappingURL=chunk-WEKO2DAN.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/layout/PageAdvertisements.tsx"],"names":[],"mappings":"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","file":"chunk-TL2RV5KC.js","sourcesContent":["import { useEffect, useState, useSyncExternalStore } from 'react';\nimport { useQuery } from '@tanstack/react-query';\nimport { advertisement, advertisementsFor, type Advertisement } from '../../api/advertisement';\nimport { whenSallaReady } from '../../utils/sdk-helpers';\nimport { useTranslation } from '../../providers/I18nProvider';\nimport { getTwilightContext, subscribeTwilight } from '../../twilight/context';\n\nconst currentPageSlug = () => getTwilightContext().page?.slug;\n\n/** The key `<salla-advertisement>` marks a closed ad with, through `salla.storage` (store.js, JSON). */\nconst dismissedKey = (id: number) => `statusAd-${id}`;\n\n/** Stable while the query has no data, so the effect below doesn't rerun on every render. */\nconst NO_ADS: Advertisement[] = [];\n\n/** Hides the ads this visitor closed before the first paint; the effect then drops them. */\nconst HIDE_DISMISSED_SCRIPT =\n \"(function(){try{if(window.self!==window.top)return;document.currentScript.parentNode.querySelectorAll('.s-advertisement[data-id]').forEach(function(e){if(localStorage.getItem('statusAd-'+e.getAttribute('data-id')))e.hidden=true})}catch(e){}})();\";\n\nfunction isDismissed(id: number): boolean {\n try {\n return Boolean(window.localStorage.getItem(dismissedKey(id)));\n } catch {\n return false;\n }\n}\n\nfunction dismiss(id: number): void {\n const storage = window.salla?.storage;\n if (typeof storage?.set === 'function') storage.set(dismissedKey(id), 'dismissed');\n else {\n try {\n window.localStorage.setItem(dismissedKey(id), JSON.stringify('dismissed'));\n } catch {\n // Storage disabled: the ad hides for this page view only.\n }\n }\n}\n\ninterface ClientView {\n /** The theme editor's iframe, or the SDK's debug flag: every ad shows, closed or not. */\n preview: boolean;\n /** Inside the Salla mobile app, which shows no ads. */\n inApp: boolean;\n dismissed: Set<number>;\n}\n\n/**\n * The merchant's announcement bars, in place of `<salla-advertisement>`. Same data, rules and\n * markup, but rendered on the server (the ads are prefetched in the root `beforeLoad`), so the\n * bar is in the first paint instead of pushing the page down when the web component fetches it.\n */\nexport function PageAdvertisements() {\n const { t } = useTranslation();\n // The deepest route loader's `page`, the page `salla.config` reports.\n const pageSlug = useSyncExternalStore(subscribeTwilight, currentPageSlug, currentPageSlug);\n // The query's `retry: 0` only bounds the server wait; the browser may retry.\n const { data: ads = NO_ADS } = useQuery({ ...advertisement.queries.list(), retry: 2 });\n const [view, setView] = useState<ClientView | null>(null);\n\n useEffect(() => {\n const dismissed = new Set(ads.filter((ad) => isDismissed(ad.id)).map((ad) => ad.id));\n setView({ preview: window.self !== window.top, inApp: false, dismissed });\n return whenSallaReady((sdk) => {\n const config = sdk.config as { isMobileApp?: () => boolean; isDebug?: () => boolean };\n const inApp = Boolean(config?.isMobileApp?.());\n const debug = Boolean(config?.isDebug?.());\n if (inApp || debug) {\n setView((current) =>\n current ? { ...current, inApp, preview: current.preview || debug } : current\n );\n }\n });\n }, [ads]);\n\n if (view?.inApp) return null;\n const shown = view?.preview\n ? ads\n : advertisementsFor(ads, pageSlug).filter((ad) => !view?.dismissed.has(ad.id));\n if (!shown.length) return null;\n\n const close = (id: number) => {\n dismiss(id);\n setView((current) =>\n current ? { ...current, dismissed: new Set(current.dismissed).add(id) } : current\n );\n };\n\n return (\n <>\n {shown.map((ad) => (\n <div\n key={ad.id}\n className=\"s-advertisement\"\n data-id={ad.id}\n style={{ backgroundColor: ad.colors?.bg, color: ad.colors?.text }}\n >\n <div className=\"s-advertisement-content container flex justify-between items-center py-2.5\">\n <span className=\"s-advertisement-content-main flex-1 font-bold text-center text-sm\">\n {/* Rendered without an icon too, as the SDK does: its margin is part of the layout. */}\n <i\n className={`s-advertisement-content-icon inline-block align-middle me-2 text-base ${ad.icon ?? ''}`}\n />\n {ad.url ? (\n <a\n href={ad.url}\n target={ad.target ?? undefined}\n rel={ad.target === '_blank' ? 'noopener' : undefined}\n >\n {ad.description}\n </a>\n ) : (\n ad.description\n )}\n </span>\n <button\n type=\"button\"\n className=\"s-advertisement-action px-1\"\n aria-label={t('common.buttons.close', 'Close')}\n onClick={() => close(ad.id)}\n >\n {/* `inline-block`: before the icon CSS loads, an empty inline `<i>` leaves the button 0px tall. */}\n <i className=\"sicon-cancel inline-block\" />\n </button>\n </div>\n </div>\n ))}\n <script suppressHydrationWarning>{HIDE_DISMISSED_SCRIPT}</script>\n </>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/components/layout/PageAdvertisements.tsx"],"names":[],"mappings":"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","file":"chunk-WEKO2DAN.js","sourcesContent":["import { useEffect, useState, useSyncExternalStore } from 'react';\nimport { useQuery } from '@tanstack/react-query';\nimport { advertisement, advertisementsFor, type Advertisement } from '../../api/advertisement';\nimport { whenSallaReady } from '../../utils/sdk-helpers';\nimport { useTranslation } from '../../providers/I18nProvider';\nimport { getTwilightContext, subscribeTwilight } from '../../twilight/context';\n\nconst currentPageSlug = () => getTwilightContext().page?.slug;\n\n/** The key `<salla-advertisement>` marks a closed ad with, through `salla.storage` (store.js, JSON). */\nconst dismissedKey = (id: number) => `statusAd-${id}`;\n\n/** Stable while the query has no data, so the effect below doesn't rerun on every render. */\nconst NO_ADS: Advertisement[] = [];\n\n/** Hides the ads this visitor closed before the first paint; the effect then drops them. */\nconst HIDE_DISMISSED_SCRIPT =\n \"(function(){try{if(window.self!==window.top)return;document.currentScript.parentNode.querySelectorAll('.s-advertisement[data-id]').forEach(function(e){if(localStorage.getItem('statusAd-'+e.getAttribute('data-id')))e.hidden=true})}catch(e){}})();\";\n\nfunction isDismissed(id: number): boolean {\n try {\n return Boolean(window.localStorage.getItem(dismissedKey(id)));\n } catch {\n return false;\n }\n}\n\nfunction dismiss(id: number): void {\n const storage = window.salla?.storage;\n if (typeof storage?.set === 'function') storage.set(dismissedKey(id), 'dismissed');\n else {\n try {\n window.localStorage.setItem(dismissedKey(id), JSON.stringify('dismissed'));\n } catch {\n // Storage disabled: the ad hides for this page view only.\n }\n }\n}\n\ninterface ClientView {\n /** The theme editor's iframe, or the SDK's debug flag: every ad shows, closed or not. */\n preview: boolean;\n /** Inside the Salla mobile app, which shows no ads. */\n inApp: boolean;\n dismissed: Set<number>;\n}\n\n/**\n * The merchant's announcement bars, in place of `<salla-advertisement>`. Same data, rules and\n * markup, but rendered on the server (the ads are prefetched in the root `beforeLoad`), so the\n * bar is in the first paint instead of pushing the page down when the web component fetches it.\n */\nexport function PageAdvertisements() {\n const { t } = useTranslation();\n // The deepest route loader's `page`, the page `salla.config` reports.\n const pageSlug = useSyncExternalStore(subscribeTwilight, currentPageSlug, currentPageSlug);\n // The query's `retry: 0` only bounds the server wait; the browser may retry.\n const { data: ads = NO_ADS } = useQuery({ ...advertisement.queries.list(), retry: 2 });\n const [view, setView] = useState<ClientView | null>(null);\n\n useEffect(() => {\n const dismissed = new Set(ads.filter((ad) => isDismissed(ad.id)).map((ad) => ad.id));\n setView({ preview: window.self !== window.top, inApp: false, dismissed });\n return whenSallaReady((sdk) => {\n const config = sdk.config as { isMobileApp?: () => boolean; isDebug?: () => boolean };\n const inApp = Boolean(config?.isMobileApp?.());\n const debug = Boolean(config?.isDebug?.());\n if (inApp || debug) {\n setView((current) =>\n current ? { ...current, inApp, preview: current.preview || debug } : current\n );\n }\n });\n }, [ads]);\n\n if (view?.inApp) return null;\n const shown = view?.preview\n ? ads\n : advertisementsFor(ads, pageSlug).filter((ad) => !view?.dismissed.has(ad.id));\n if (!shown.length) return null;\n\n const close = (id: number) => {\n dismiss(id);\n setView((current) =>\n current ? { ...current, dismissed: new Set(current.dismissed).add(id) } : current\n );\n };\n\n return (\n <>\n {shown.map((ad) => (\n <div\n key={ad.id}\n className=\"s-advertisement\"\n data-id={ad.id}\n style={{ backgroundColor: ad.colors?.bg, color: ad.colors?.text }}\n >\n <div className=\"s-advertisement-content container flex justify-between items-center py-2.5\">\n <span className=\"s-advertisement-content-main flex-1 font-bold text-center text-sm\">\n {/* Rendered without an icon too, as the SDK does: its margin is part of the layout. */}\n <i\n className={`s-advertisement-content-icon inline-block align-middle me-2 text-base ${ad.icon ?? ''}`}\n />\n {ad.url ? (\n <a\n href={ad.url}\n target={ad.target ?? undefined}\n rel={ad.target === '_blank' ? 'noopener' : undefined}\n >\n {ad.description}\n </a>\n ) : (\n ad.description\n )}\n </span>\n <button\n type=\"button\"\n className=\"s-advertisement-action px-1\"\n aria-label={t('common.buttons.close', 'Close')}\n onClick={() => close(ad.id)}\n >\n {/* `inline-block`: before the icon CSS loads, an empty inline `<i>` leaves the button 0px tall. */}\n <i className=\"sicon-cancel inline-block\" />\n </button>\n </div>\n </div>\n ))}\n <script suppressHydrationWarning>{HIDE_DISMISSED_SCRIPT}</script>\n </>\n );\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { orThrow, orUnauthorized } from './chunk-DGK2HVSR.js';
2
- import { api } from './chunk-5RWIVHYS.js';
1
+ import { orThrow, orUnauthorized } from './chunk-RLJLG4EN.js';
2
+ import { api } from './chunk-E5DP3MHE.js';
3
3
  import { queryOptions } from '@tanstack/react-query';
4
4
 
5
5
  var order = {
@@ -78,5 +78,5 @@ var order = {
78
78
  };
79
79
 
80
80
  export { order };
81
- //# sourceMappingURL=chunk-UJIE7IEJ.js.map
82
- //# sourceMappingURL=chunk-UJIE7IEJ.js.map
81
+ //# sourceMappingURL=chunk-WHFKJ3AS.js.map
82
+ //# sourceMappingURL=chunk-WHFKJ3AS.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/api/order.ts"],"names":[],"mappings":"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","file":"chunk-UJIE7IEJ.js","sourcesContent":["import { queryOptions } from '@tanstack/react-query';\nimport { api } from './client';\nimport type {\n Order,\n OrderListItem,\n OrderShipmentItem,\n OrderRatingItem,\n} from '../routes/account/types';\nimport type { Pagination } from './types';\nimport { orThrow, orUnauthorized } from '../providers/NavigationProvider';\n\nexport interface OrderDetailResponse {\n order: Order;\n}\n\n/**\n * The order in the shape the Twilight web components read (`salla-order-details`,\n * `salla-order-totals-card`) and the Twig themes render: the API answers `orders/{id}` this\n * way when the request does not say it comes from a React theme (`s-theme-type`).\n */\nexport interface TwilightOrder {\n items: Array<{\n name: string;\n quantity: number;\n product?: { id: number; url?: string; type?: string; image?: { url?: string } };\n options?: unknown[];\n }>;\n [key: string]: unknown;\n}\n\nexport interface CheckoutThankYouData {\n thank_you_title?: string;\n messages?: string[];\n share_message?: string;\n short_share_message?: string;\n}\n\nexport interface OrdersListResponse {\n data: OrderListItem[];\n cursor?: Pagination;\n}\n\nexport interface OrdersListParams {\n page?: number;\n cursor?: string | null;\n status?: string;\n feedback_status?: string;\n /** When set, the list payload includes each order's `items[]` (`with_items=1`). */\n with_items?: boolean | number;\n signal?: AbortSignal;\n}\n\nexport const order = {\n list: async (params?: OrdersListParams): Promise<OrdersListResponse> => {\n const {\n page,\n cursor,\n status,\n feedback_status: feedbackStatus,\n with_items: withItems,\n signal,\n } = params ?? {};\n\n const searchParams = new URLSearchParams();\n if (page !== undefined) searchParams.set('page', String(page));\n if (cursor) searchParams.set('cursor', cursor);\n if (status) searchParams.set('status', status);\n if (feedbackStatus) searchParams.set('feedback_status', feedbackStatus);\n if (withItems) searchParams.set('with_items', '1');\n\n const options: Record<string, unknown> = {};\n if (signal) options.signal = signal;\n\n const response = await api\n .get(`orders?${searchParams.toString()}`, options as any)\n .json<{ data: OrderListItem[] | null; cursor?: Pagination }>();\n\n return {\n data: response.data ?? [],\n cursor: response.cursor,\n };\n },\n\n find: async (id: string): Promise<OrderDetailResponse> => {\n const response = await api.get(`orders/${id}`).json<{ data: Order }>();\n\n return { order: response.data };\n },\n\n findForComponents: async (id: string): Promise<TwilightOrder> => {\n const response = await api\n .get(`orders/${id}`, {\n hooks: {\n // Runs after the client's own hook, which marks every request as from a React theme.\n beforeRequest: [({ request }) => request.headers.delete('s-theme-type')],\n },\n })\n .json<{ data: TwilightOrder }>();\n return response.data;\n },\n\n shipments: async (orderId: string): Promise<OrderShipmentItem[]> => {\n const response = await api\n .get(`orders/${orderId}/shipments`)\n .json<{ data: OrderShipmentItem[] }>();\n return response.data ?? [];\n },\n\n ratings: async (orderId: string): Promise<OrderRatingItem[]> => {\n const response = await api.get(`orders/${orderId}/ratings`).json<{ data: OrderRatingItem[] }>();\n return response.data ?? [];\n },\n\n findOrThrow: (id: string): Promise<OrderDetailResponse> =>\n orThrow(orUnauthorized(order.find(id))),\n\n thankYou: async (orderId: string): Promise<CheckoutThankYouData> => {\n const { data } = await api\n .get(`checkout/thank-you/${orderId}`)\n .json<{ data: CheckoutThankYouData }>();\n return data;\n },\n\n thankYouOrThrow: (orderId: string): Promise<CheckoutThankYouData> =>\n orThrow(order.thankYou(orderId)),\n\n queries: {\n list: (params?: Omit<OrdersListParams, 'signal'>) =>\n queryOptions({\n queryKey: ['orders', 'list', params],\n queryFn: ({ signal }) => order.list({ ...params, signal }),\n }),\n find: (id: string) =>\n queryOptions({\n queryKey: ['orders', 'detail', id],\n queryFn: () => order.find(id),\n }),\n shipments: (orderId: string) =>\n queryOptions({\n queryKey: ['orders', 'shipments', orderId],\n queryFn: () => order.shipments(orderId),\n }),\n ratings: (orderId: string) =>\n queryOptions({\n queryKey: ['orders', 'ratings', orderId],\n queryFn: () => order.ratings(orderId),\n }),\n thankYou: (orderId: string) =>\n queryOptions({\n queryKey: ['orders', 'thankYou', orderId],\n queryFn: () => order.thankYou(orderId),\n }),\n },\n};\n"]}
1
+ {"version":3,"sources":["../src/api/order.ts"],"names":[],"mappings":"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","file":"chunk-WHFKJ3AS.js","sourcesContent":["import { queryOptions } from '@tanstack/react-query';\nimport { api } from './client';\nimport type {\n Order,\n OrderListItem,\n OrderShipmentItem,\n OrderRatingItem,\n} from '../routes/account/types';\nimport type { Pagination } from './types';\nimport { orThrow, orUnauthorized } from '../providers/NavigationProvider';\n\nexport interface OrderDetailResponse {\n order: Order;\n}\n\n/**\n * The order in the shape the Twilight web components read (`salla-order-details`,\n * `salla-order-totals-card`) and the Twig themes render: the API answers `orders/{id}` this\n * way when the request does not say it comes from a React theme (`s-theme-type`).\n */\nexport interface TwilightOrder {\n items: Array<{\n name: string;\n quantity: number;\n product?: { id: number; url?: string; type?: string; image?: { url?: string } };\n options?: unknown[];\n }>;\n [key: string]: unknown;\n}\n\nexport interface CheckoutThankYouData {\n thank_you_title?: string;\n messages?: string[];\n share_message?: string;\n short_share_message?: string;\n}\n\nexport interface OrdersListResponse {\n data: OrderListItem[];\n cursor?: Pagination;\n}\n\nexport interface OrdersListParams {\n page?: number;\n cursor?: string | null;\n status?: string;\n feedback_status?: string;\n /** When set, the list payload includes each order's `items[]` (`with_items=1`). */\n with_items?: boolean | number;\n signal?: AbortSignal;\n}\n\nexport const order = {\n list: async (params?: OrdersListParams): Promise<OrdersListResponse> => {\n const {\n page,\n cursor,\n status,\n feedback_status: feedbackStatus,\n with_items: withItems,\n signal,\n } = params ?? {};\n\n const searchParams = new URLSearchParams();\n if (page !== undefined) searchParams.set('page', String(page));\n if (cursor) searchParams.set('cursor', cursor);\n if (status) searchParams.set('status', status);\n if (feedbackStatus) searchParams.set('feedback_status', feedbackStatus);\n if (withItems) searchParams.set('with_items', '1');\n\n const options: Record<string, unknown> = {};\n if (signal) options.signal = signal;\n\n const response = await api\n .get(`orders?${searchParams.toString()}`, options as any)\n .json<{ data: OrderListItem[] | null; cursor?: Pagination }>();\n\n return {\n data: response.data ?? [],\n cursor: response.cursor,\n };\n },\n\n find: async (id: string): Promise<OrderDetailResponse> => {\n const response = await api.get(`orders/${id}`).json<{ data: Order }>();\n\n return { order: response.data };\n },\n\n findForComponents: async (id: string): Promise<TwilightOrder> => {\n const response = await api\n .get(`orders/${id}`, {\n hooks: {\n // Runs after the client's own hook, which marks every request as from a React theme.\n beforeRequest: [({ request }) => request.headers.delete('s-theme-type')],\n },\n })\n .json<{ data: TwilightOrder }>();\n return response.data;\n },\n\n shipments: async (orderId: string): Promise<OrderShipmentItem[]> => {\n const response = await api\n .get(`orders/${orderId}/shipments`)\n .json<{ data: OrderShipmentItem[] }>();\n return response.data ?? [];\n },\n\n ratings: async (orderId: string): Promise<OrderRatingItem[]> => {\n const response = await api.get(`orders/${orderId}/ratings`).json<{ data: OrderRatingItem[] }>();\n return response.data ?? [];\n },\n\n findOrThrow: (id: string): Promise<OrderDetailResponse> =>\n orThrow(orUnauthorized(order.find(id))),\n\n thankYou: async (orderId: string): Promise<CheckoutThankYouData> => {\n const { data } = await api\n .get(`checkout/thank-you/${orderId}`)\n .json<{ data: CheckoutThankYouData }>();\n return data;\n },\n\n thankYouOrThrow: (orderId: string): Promise<CheckoutThankYouData> =>\n orThrow(order.thankYou(orderId)),\n\n queries: {\n list: (params?: Omit<OrdersListParams, 'signal'>) =>\n queryOptions({\n queryKey: ['orders', 'list', params],\n queryFn: ({ signal }) => order.list({ ...params, signal }),\n }),\n find: (id: string) =>\n queryOptions({\n queryKey: ['orders', 'detail', id],\n queryFn: () => order.find(id),\n }),\n shipments: (orderId: string) =>\n queryOptions({\n queryKey: ['orders', 'shipments', orderId],\n queryFn: () => order.shipments(orderId),\n }),\n ratings: (orderId: string) =>\n queryOptions({\n queryKey: ['orders', 'ratings', orderId],\n queryFn: () => order.ratings(orderId),\n }),\n thankYou: (orderId: string) =>\n queryOptions({\n queryKey: ['orders', 'thankYou', orderId],\n queryFn: () => order.thankYou(orderId),\n }),\n },\n};\n"]}
@@ -1,4 +1,4 @@
1
- import { user } from './chunk-6S43HHJM.js';
1
+ import { user } from './chunk-XHWBJYJL.js';
2
2
  import { getTwilightContext } from './chunk-6K34BCUP.js';
3
3
  import { useQuery } from '@tanstack/react-query';
4
4
 
@@ -13,5 +13,5 @@ function useUser() {
13
13
  }
14
14
 
15
15
  export { useUser };
16
- //# sourceMappingURL=chunk-EISZVMJY.js.map
17
- //# sourceMappingURL=chunk-EISZVMJY.js.map
16
+ //# sourceMappingURL=chunk-WVSGVFMM.js.map
17
+ //# sourceMappingURL=chunk-WVSGVFMM.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/hooks/useUser.ts"],"names":[],"mappings":";;;;AAUO,SAAS,OAAA,GAAyB;AACvC,EAAA,MAAM,KAAA,GAAQ,oBAAmB,CAAE,SAAA;AAEnC,EAAA,MAAM,QAAQ,QAAA,CAAS;AAAA,IACrB,GAAG,IAAA,CAAK,OAAA,CAAQ,OAAA,EAAQ;AAAA,IACxB,OAAA,EAAS,CAAC,CAAC,KAAA;AAAA,IACX,eAAA,EAAiB;AAAA,GAClB,CAAA;AAED,EAAA,OAAO,EAAE,GAAG,KAAA,EAAO,UAAA,EAAY,CAAC,CAAC,KAAA,EAAM;AACzC","file":"chunk-EISZVMJY.js","sourcesContent":["import { useQuery, type UseQueryResult } from '@tanstack/react-query';\nimport { getTwilightContext } from '../twilight/context';\nimport { user } from '../api/user';\nimport type { User } from '../types';\n\nexport type UseUserReturn = UseQueryResult<User | null> & {\n /** True when an auth token exists (regardless of query state). */\n isLoggedIn: boolean;\n};\n\nexport function useUser(): UseUserReturn {\n const token = getTwilightContext().authToken;\n\n const query = useQuery({\n ...user.queries.current(),\n enabled: !!token,\n placeholderData: null,\n });\n\n return { ...query, isLoggedIn: !!token };\n}\n"]}
1
+ {"version":3,"sources":["../src/hooks/useUser.ts"],"names":[],"mappings":";;;;AAUO,SAAS,OAAA,GAAyB;AACvC,EAAA,MAAM,KAAA,GAAQ,oBAAmB,CAAE,SAAA;AAEnC,EAAA,MAAM,QAAQ,QAAA,CAAS;AAAA,IACrB,GAAG,IAAA,CAAK,OAAA,CAAQ,OAAA,EAAQ;AAAA,IACxB,OAAA,EAAS,CAAC,CAAC,KAAA;AAAA,IACX,eAAA,EAAiB;AAAA,GAClB,CAAA;AAED,EAAA,OAAO,EAAE,GAAG,KAAA,EAAO,UAAA,EAAY,CAAC,CAAC,KAAA,EAAM;AACzC","file":"chunk-WVSGVFMM.js","sourcesContent":["import { useQuery, type UseQueryResult } from '@tanstack/react-query';\nimport { getTwilightContext } from '../twilight/context';\nimport { user } from '../api/user';\nimport type { User } from '../types';\n\nexport type UseUserReturn = UseQueryResult<User | null> & {\n /** True when an auth token exists (regardless of query state). */\n isLoggedIn: boolean;\n};\n\nexport function useUser(): UseUserReturn {\n const token = getTwilightContext().authToken;\n\n const query = useQuery({\n ...user.queries.current(),\n enabled: !!token,\n placeholderData: null,\n });\n\n return { ...query, isLoggedIn: !!token };\n}\n"]}