@salla.sa/twilight-theme-engine 1.0.74 → 1.0.76

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 (278) hide show
  1. package/dist/{AddToCartForm-H2PRWRO7.js → AddToCartForm-ELTXWGK7.js} +3 -3
  2. package/dist/{AddToCartForm-H2PRWRO7.js.map → AddToCartForm-ELTXWGK7.js.map} +1 -1
  3. package/dist/{BlogAuthorPage-QDGBWGGT.js → BlogAuthorPage-MBVZGSPQ.js} +19 -20
  4. package/dist/BlogAuthorPage-MBVZGSPQ.js.map +1 -0
  5. package/dist/{BlogCategoryPage-BK4OL6T4.js → BlogCategoryPage-V4HHHLCL.js} +19 -20
  6. package/dist/BlogCategoryPage-V4HHHLCL.js.map +1 -0
  7. package/dist/{BlogPage-5LLIKUOQ.js → BlogPage-LWRXQVF6.js} +17 -18
  8. package/dist/BlogPage-LWRXQVF6.js.map +1 -0
  9. package/dist/{BlogSinglePage-3BDXSFTY.js → BlogSinglePage-DPO6N4BK.js} +17 -18
  10. package/dist/BlogSinglePage-DPO6N4BK.js.map +1 -0
  11. package/dist/{BlogTagPage-S77JPNEZ.js → BlogTagPage-QCV2BNEV.js} +19 -20
  12. package/dist/BlogTagPage-QCV2BNEV.js.map +1 -0
  13. package/dist/{BrandsPage-2TJALMEG.js → BrandsPage-YECC2M27.js} +18 -19
  14. package/dist/BrandsPage-YECC2M27.js.map +1 -0
  15. package/dist/{Breadcrumb-SXC43X3D.js → Breadcrumb-ENQ4QMRD.js} +17 -18
  16. package/dist/Breadcrumb-ENQ4QMRD.js.map +1 -0
  17. package/dist/{CartItem-R6BYAM4O.js → CartItem-4CPUCDZE.js} +17 -18
  18. package/dist/CartItem-4CPUCDZE.js.map +1 -0
  19. package/dist/{CartSummary-YQ2RMHID.js → CartSummary-XSFNCT5V.js} +17 -18
  20. package/dist/CartSummary-XSFNCT5V.js.map +1 -0
  21. package/dist/{Copyright-5VLQICDY.js → Copyright-OJ2EKXRI.js} +3 -3
  22. package/dist/{Copyright-5VLQICDY.js.map → Copyright-OJ2EKXRI.js.map} +1 -1
  23. package/dist/{CustomerLayout-DUT7BEKW.js → CustomerLayout-UPXQEA26.js} +17 -18
  24. package/dist/CustomerLayout-UPXQEA26.js.map +1 -0
  25. package/dist/{Footer-J2KXYFB3.js → Footer-4CAAFHB2.js} +17 -18
  26. package/dist/{Footer-J2KXYFB3.js.map → Footer-4CAAFHB2.js.map} +1 -1
  27. package/dist/{Header-GZQINLEQ.js → Header-HDYYP4C6.js} +7 -6
  28. package/dist/{Header-GZQINLEQ.js.map → Header-HDYYP4C6.js.map} +1 -1
  29. package/dist/{LoyaltyPage-IXLUF6MF.js → LoyaltyPage-AOHHLCLU.js} +17 -18
  30. package/dist/LoyaltyPage-AOHHLCLU.js.map +1 -0
  31. package/dist/{LoyaltyPointsPage-RDNXI5VY.js → LoyaltyPointsPage-XWRBDU27.js} +3 -3
  32. package/dist/{LoyaltyPointsPage-RDNXI5VY.js.map → LoyaltyPointsPage-XWRBDU27.js.map} +1 -1
  33. package/dist/{MainMenu-KNJDJFJX.js → MainMenu-CTRSU7ZV.js} +6 -7
  34. package/dist/MainMenu-CTRSU7ZV.js.map +1 -0
  35. package/dist/{MasterLayout-MFL2NYPF.js → MasterLayout-PRM5ELY3.js} +17 -18
  36. package/dist/{MasterLayout-MFL2NYPF.js.map → MasterLayout-PRM5ELY3.js.map} +1 -1
  37. package/dist/{MobileMenu-RXLYUAWL.js → MobileMenu-3YHFM2UF.js} +18 -19
  38. package/dist/MobileMenu-3YHFM2UF.js.map +1 -0
  39. package/dist/{NotificationsPage-QSF7S2PD.js → NotificationsPage-F344UHAJ.js} +17 -18
  40. package/dist/NotificationsPage-F344UHAJ.js.map +1 -0
  41. package/dist/{OrderSinglePage-CWBHU2C6.js → OrderSinglePage-YX7NRH6P.js} +18 -19
  42. package/dist/OrderSinglePage-YX7NRH6P.js.map +1 -0
  43. package/dist/{OrdersPage-L76IEAXR.js → OrdersPage-TDZ3OX3J.js} +17 -18
  44. package/dist/OrdersPage-TDZ3OX3J.js.map +1 -0
  45. package/dist/{PageSingle-BUAZBPIQ.js → PageSingle-U5XNYQ6W.js} +5 -6
  46. package/dist/PageSingle-U5XNYQ6W.js.map +1 -0
  47. package/dist/{ProductDetails-MPNSWRTQ.js → ProductDetails-KLJDRLJ6.js} +6 -7
  48. package/dist/ProductDetails-KLJDRLJ6.js.map +1 -0
  49. package/dist/{ProfilePage-I72265CD.js → ProfilePage-Z6YJQ6C2.js} +17 -18
  50. package/dist/ProfilePage-Z6YJQ6C2.js.map +1 -0
  51. package/dist/{ReviewsPage-M5GNHNZG.js → ReviewsPage-A2PZTDEA.js} +3 -3
  52. package/dist/{ReviewsPage-M5GNHNZG.js.map → ReviewsPage-A2PZTDEA.js.map} +1 -1
  53. package/dist/{SeoCartWidget-KV3T3BO7.js → SeoCartWidget-MDNO2GBO.js} +17 -18
  54. package/dist/SeoCartWidget-MDNO2GBO.js.map +1 -0
  55. package/dist/{SettingsPage-3F5HZNXX.js → SettingsPage-JKC3CLCB.js} +17 -18
  56. package/dist/SettingsPage-JKC3CLCB.js.map +1 -0
  57. package/dist/{StoreClosedNotification-65QIOIAM.js → StoreClosedNotification-E3E4C5G7.js} +18 -19
  58. package/dist/{StoreClosedNotification-65QIOIAM.js.map → StoreClosedNotification-E3E4C5G7.js.map} +1 -1
  59. package/dist/{TestimonialsPage-5U7PH4TT.js → TestimonialsPage-TIFOLC6V.js} +5 -6
  60. package/dist/TestimonialsPage-TIFOLC6V.js.map +1 -0
  61. package/dist/{ThankYouPage-HFUTJCRT.js → ThankYouPage-XYKVHOJ4.js} +17 -18
  62. package/dist/ThankYouPage-XYKVHOJ4.js.map +1 -0
  63. package/dist/{WalletPage-KURO6WSP.js → WalletPage-KTDDXEEZ.js} +18 -19
  64. package/dist/WalletPage-KTDDXEEZ.js.map +1 -0
  65. package/dist/{WishlistPage-RLUK4JRD.js → WishlistPage-4JEBFBW4.js} +19 -20
  66. package/dist/WishlistPage-4JEBFBW4.js.map +1 -0
  67. package/dist/api/apps.js +3 -4
  68. package/dist/api/blog.js +4 -5
  69. package/dist/api/brands.js +4 -5
  70. package/dist/api/cart.js +4 -5
  71. package/dist/api/category.js +4 -5
  72. package/dist/api/client.js +2 -3
  73. package/dist/api/home.js +3 -4
  74. package/dist/api/loyalty.js +4 -5
  75. package/dist/api/menu.js +3 -4
  76. package/dist/api/notification.js +3 -4
  77. package/dist/api/order.js +4 -5
  78. package/dist/api/page.js +4 -5
  79. package/dist/api/product.js +4 -5
  80. package/dist/api/profile.js +2 -3
  81. package/dist/api/profile.js.map +1 -1
  82. package/dist/api/store.js +3 -4
  83. package/dist/api/translations.js +3 -4
  84. package/dist/api/user.js +3 -4
  85. package/dist/api/wallet.js +3 -4
  86. package/dist/api/wishlist.js +5 -6
  87. package/dist/{chunk-E5O5ICIY.js → chunk-2APQP7KK.js} +4 -4
  88. package/dist/{chunk-E5O5ICIY.js.map → chunk-2APQP7KK.js.map} +1 -1
  89. package/dist/{chunk-PNM4NP4U.js → chunk-3GZ5OOAK.js} +3 -3
  90. package/dist/{chunk-PNM4NP4U.js.map → chunk-3GZ5OOAK.js.map} +1 -1
  91. package/dist/{chunk-2OYXPNCE.js → chunk-3UMHUKMJ.js} +3 -3
  92. package/dist/{chunk-2OYXPNCE.js.map → chunk-3UMHUKMJ.js.map} +1 -1
  93. package/dist/{chunk-Y5OGXJLH.js → chunk-4A5IAMNL.js} +196 -4
  94. package/dist/chunk-4A5IAMNL.js.map +1 -0
  95. package/dist/{chunk-D2T6246Q.js → chunk-7FDT2IFI.js} +3 -3
  96. package/dist/{chunk-D2T6246Q.js.map → chunk-7FDT2IFI.js.map} +1 -1
  97. package/dist/{chunk-VYCNB6VN.js → chunk-7HWX2PEO.js} +3 -3
  98. package/dist/{chunk-VYCNB6VN.js.map → chunk-7HWX2PEO.js.map} +1 -1
  99. package/dist/{chunk-IK57LAIA.js → chunk-BP6LUZXJ.js} +10 -5
  100. package/dist/chunk-BP6LUZXJ.js.map +1 -0
  101. package/dist/{chunk-FVDUTMH6.js → chunk-DUA2GB5Z.js} +4 -4
  102. package/dist/{chunk-FVDUTMH6.js.map → chunk-DUA2GB5Z.js.map} +1 -1
  103. package/dist/{chunk-R72Q5Z6M.js → chunk-EUWKQJNI.js} +4 -4
  104. package/dist/{chunk-R72Q5Z6M.js.map → chunk-EUWKQJNI.js.map} +1 -1
  105. package/dist/{chunk-3TJKB3WR.js → chunk-F2YLRVPH.js} +3 -3
  106. package/dist/{chunk-3TJKB3WR.js.map → chunk-F2YLRVPH.js.map} +1 -1
  107. package/dist/{chunk-JEG5WPNT.js → chunk-F4FCETQT.js} +3 -3
  108. package/dist/{chunk-JEG5WPNT.js.map → chunk-F4FCETQT.js.map} +1 -1
  109. package/dist/{chunk-3QT7JMAD.js → chunk-FSCIJ55A.js} +4 -4
  110. package/dist/{chunk-3QT7JMAD.js.map → chunk-FSCIJ55A.js.map} +1 -1
  111. package/dist/{chunk-FIFNYC7B.js → chunk-H2CED43W.js} +7 -7
  112. package/dist/{chunk-FIFNYC7B.js.map → chunk-H2CED43W.js.map} +1 -1
  113. package/dist/{chunk-P2YAPWMS.js → chunk-HZYFU3PZ.js} +4 -4
  114. package/dist/{chunk-P2YAPWMS.js.map → chunk-HZYFU3PZ.js.map} +1 -1
  115. package/dist/{chunk-3EBAXWBJ.js → chunk-J2VJGXIX.js} +5 -5
  116. package/dist/{chunk-3EBAXWBJ.js.map → chunk-J2VJGXIX.js.map} +1 -1
  117. package/dist/{chunk-WHGOO4A2.js → chunk-L4EX7DLC.js} +6 -6
  118. package/dist/{chunk-WHGOO4A2.js.map → chunk-L4EX7DLC.js.map} +1 -1
  119. package/dist/{chunk-RYSJOCHI.js → chunk-LCDSHSP7.js} +3 -3
  120. package/dist/{chunk-RYSJOCHI.js.map → chunk-LCDSHSP7.js.map} +1 -1
  121. package/dist/{chunk-JAPH535M.js → chunk-LL3X2N7L.js} +4 -4
  122. package/dist/{chunk-JAPH535M.js.map → chunk-LL3X2N7L.js.map} +1 -1
  123. package/dist/{chunk-E7EBWXCA.js → chunk-LLQE4JAW.js} +3 -3
  124. package/dist/{chunk-E7EBWXCA.js.map → chunk-LLQE4JAW.js.map} +1 -1
  125. package/dist/{chunk-IDY6OEXA.js → chunk-MCZJEDPZ.js} +7 -7
  126. package/dist/{chunk-IDY6OEXA.js.map → chunk-MCZJEDPZ.js.map} +1 -1
  127. package/dist/{chunk-2ZQKAGSZ.js → chunk-MHVR2OUR.js} +4 -4
  128. package/dist/{chunk-2ZQKAGSZ.js.map → chunk-MHVR2OUR.js.map} +1 -1
  129. package/dist/{chunk-4YVGMXG7.js → chunk-MOANE2YM.js} +3 -3
  130. package/dist/{chunk-4YVGMXG7.js.map → chunk-MOANE2YM.js.map} +1 -1
  131. package/dist/{chunk-TWVTIAMO.js → chunk-MYJL5MGW.js} +3 -3
  132. package/dist/{chunk-TWVTIAMO.js.map → chunk-MYJL5MGW.js.map} +1 -1
  133. package/dist/{chunk-MEMB7JYJ.js → chunk-NDJWR7EF.js} +4 -4
  134. package/dist/{chunk-MEMB7JYJ.js.map → chunk-NDJWR7EF.js.map} +1 -1
  135. package/dist/{chunk-WS3WQ3OL.js → chunk-NJWKVTQD.js} +4 -4
  136. package/dist/{chunk-WS3WQ3OL.js.map → chunk-NJWKVTQD.js.map} +1 -1
  137. package/dist/{chunk-XN7TVPAU.js → chunk-O6L3BZBB.js} +4 -4
  138. package/dist/{chunk-XN7TVPAU.js.map → chunk-O6L3BZBB.js.map} +1 -1
  139. package/dist/{chunk-6KVB2WHE.js → chunk-ODF4CAF4.js} +4 -4
  140. package/dist/{chunk-6KVB2WHE.js.map → chunk-ODF4CAF4.js.map} +1 -1
  141. package/dist/{chunk-JHCLU3PS.js → chunk-OXQL57QN.js} +8 -8
  142. package/dist/{chunk-JHCLU3PS.js.map → chunk-OXQL57QN.js.map} +1 -1
  143. package/dist/{chunk-JNZLH2OR.js → chunk-PVNF6JXS.js} +7 -7
  144. package/dist/{chunk-JNZLH2OR.js.map → chunk-PVNF6JXS.js.map} +1 -1
  145. package/dist/{chunk-3EHECJ7M.js → chunk-RA2CIT7N.js} +4 -4
  146. package/dist/{chunk-3EHECJ7M.js.map → chunk-RA2CIT7N.js.map} +1 -1
  147. package/dist/chunk-RL4WOX4L.js +14 -0
  148. package/dist/{chunk-WG47KLHH.js.map → chunk-RL4WOX4L.js.map} +1 -1
  149. package/dist/{chunk-YUGZDWD6.js → chunk-RYFIWQ6L.js} +4 -4
  150. package/dist/{chunk-YUGZDWD6.js.map → chunk-RYFIWQ6L.js.map} +1 -1
  151. package/dist/{chunk-BLWLKRKH.js → chunk-S3R7B6QH.js} +17 -18
  152. package/dist/chunk-S3R7B6QH.js.map +1 -0
  153. package/dist/{chunk-5NUDOT33.js → chunk-SLXGP6KF.js} +3 -3
  154. package/dist/{chunk-5NUDOT33.js.map → chunk-SLXGP6KF.js.map} +1 -1
  155. package/dist/{chunk-6I4LWF5Y.js → chunk-UKVYP7ME.js} +3 -3
  156. package/dist/{chunk-6I4LWF5Y.js.map → chunk-UKVYP7ME.js.map} +1 -1
  157. package/dist/{chunk-OQA2MKZA.js → chunk-V76JM4UW.js} +60 -13
  158. package/dist/chunk-V76JM4UW.js.map +1 -0
  159. package/dist/{chunk-M6BXZTRK.js → chunk-VPNKJFT7.js} +3 -3
  160. package/dist/{chunk-M6BXZTRK.js.map → chunk-VPNKJFT7.js.map} +1 -1
  161. package/dist/{chunk-OKNJFS44.js → chunk-VPPSRRGK.js} +18 -4
  162. package/dist/chunk-VPPSRRGK.js.map +1 -0
  163. package/dist/{chunk-KO3HG5GQ.js → chunk-W3LADQOR.js} +3 -3
  164. package/dist/{chunk-KO3HG5GQ.js.map → chunk-W3LADQOR.js.map} +1 -1
  165. package/dist/{chunk-4VWWIA4M.js → chunk-WV3B2FOG.js} +4 -4
  166. package/dist/{chunk-4VWWIA4M.js.map → chunk-WV3B2FOG.js.map} +1 -1
  167. package/dist/{chunk-GFSTJ2PF.js → chunk-XON5AXAP.js} +3 -3
  168. package/dist/{chunk-GFSTJ2PF.js.map → chunk-XON5AXAP.js.map} +1 -1
  169. package/dist/{chunk-CJDAZQV6.js → chunk-YJAMQRFS.js} +5 -6
  170. package/dist/chunk-YJAMQRFS.js.map +1 -0
  171. package/dist/components/cart/index.js +1 -1
  172. package/dist/components/common/index.js +1 -1
  173. package/dist/components/drawer/index.js +15 -16
  174. package/dist/components/home/index.js +19 -20
  175. package/dist/components/layout/index.js +1 -1
  176. package/dist/components/product/index.js +16 -17
  177. package/dist/components/store/index.js +17 -18
  178. package/dist/components/store/index.js.map +1 -1
  179. package/dist/components/toast/index.js +3 -4
  180. package/dist/components/toast/index.js.map +1 -1
  181. package/dist/document-class-SUOV33NA.js +24 -0
  182. package/dist/{document-class-5FTU6EZE.js.map → document-class-SUOV33NA.js.map} +1 -1
  183. package/dist/hooks/index.js +15 -16
  184. package/dist/hooks/useComments.js +2 -3
  185. package/dist/hooks/useGtm.js +15 -16
  186. package/dist/hooks/useMoney.js +15 -16
  187. package/dist/hooks/useProduct.js +2 -3
  188. package/dist/hooks/useStore.js +15 -16
  189. package/dist/hooks/useUser.js +4 -5
  190. package/dist/hooks/useWishlist.js +2 -3
  191. package/dist/index.js +15 -16
  192. package/dist/index.js.map +1 -1
  193. package/dist/native-app/index.js +2 -3
  194. package/dist/{navigation-CDITJYUW.js → navigation-KMDVLHXU.js} +7 -7
  195. package/dist/{navigation-CDITJYUW.js.map → navigation-KMDVLHXU.js.map} +1 -1
  196. package/dist/{navigation-WCGV6RUK.js → navigation-WEV6XJJT.js} +5 -4
  197. package/dist/navigation-WEV6XJJT.js.map +1 -0
  198. package/dist/{not-found-EL2XQE5D.js → not-found-M77B5UIT.js} +18 -19
  199. package/dist/not-found-M77B5UIT.js.map +1 -0
  200. package/dist/providers/NavigationProvider.d.ts +9 -0
  201. package/dist/providers/NavigationProvider.d.ts.map +1 -1
  202. package/dist/providers/index.js +15 -16
  203. package/dist/routes/account/orders.js +5 -6
  204. package/dist/routes/account.js +14 -15
  205. package/dist/routes/account.js.map +1 -1
  206. package/dist/routes/blog.js +9 -10
  207. package/dist/routes/blog.js.map +1 -1
  208. package/dist/routes/brands.js +5 -6
  209. package/dist/routes/brands.js.map +1 -1
  210. package/dist/routes/cart.js +23 -24
  211. package/dist/routes/cart.js.map +1 -1
  212. package/dist/routes/home.js +20 -21
  213. package/dist/routes/index.js +4 -3
  214. package/dist/routes/loyalty.js +6 -7
  215. package/dist/routes/loyalty.js.map +1 -1
  216. package/dist/routes/page.js +5 -6
  217. package/dist/routes/page.js.map +1 -1
  218. package/dist/routes/product-listing.js +21 -22
  219. package/dist/routes/product-listing.js.map +1 -1
  220. package/dist/routes/product.js +19 -20
  221. package/dist/routes/product.js.map +1 -1
  222. package/dist/routes/root/beforeLoad.d.ts +28 -0
  223. package/dist/routes/root/beforeLoad.d.ts.map +1 -1
  224. package/dist/routes/seo-redirects.js +4 -3
  225. package/dist/routes/testimonials.js +2 -2
  226. package/dist/routes/thank-you.js +5 -6
  227. package/dist/routes/thank-you.js.map +1 -1
  228. package/dist/skeleton.js +20 -21
  229. package/dist/tanstack/middleware/twilight.d.ts.map +1 -1
  230. package/dist/tanstack.js +15 -16
  231. package/dist/tanstack.js.map +1 -1
  232. package/dist/utils/cookies.d.ts +26 -0
  233. package/dist/utils/cookies.d.ts.map +1 -1
  234. package/dist/utils/index.js +4 -5
  235. package/dist/utils/index.js.map +1 -1
  236. package/dist/utils/theme-version.d.ts +0 -29
  237. package/dist/utils/theme-version.d.ts.map +1 -1
  238. package/dist/vite/adapters/tanstack.adapter.d.ts.map +1 -1
  239. package/dist/vite/index.js +3 -1
  240. package/dist/vite/index.js.map +1 -1
  241. package/package.json +1 -1
  242. package/dist/BlogAuthorPage-QDGBWGGT.js.map +0 -1
  243. package/dist/BlogCategoryPage-BK4OL6T4.js.map +0 -1
  244. package/dist/BlogPage-5LLIKUOQ.js.map +0 -1
  245. package/dist/BlogSinglePage-3BDXSFTY.js.map +0 -1
  246. package/dist/BlogTagPage-S77JPNEZ.js.map +0 -1
  247. package/dist/BrandsPage-2TJALMEG.js.map +0 -1
  248. package/dist/Breadcrumb-SXC43X3D.js.map +0 -1
  249. package/dist/CartItem-R6BYAM4O.js.map +0 -1
  250. package/dist/CartSummary-YQ2RMHID.js.map +0 -1
  251. package/dist/CustomerLayout-DUT7BEKW.js.map +0 -1
  252. package/dist/LoyaltyPage-IXLUF6MF.js.map +0 -1
  253. package/dist/MainMenu-KNJDJFJX.js.map +0 -1
  254. package/dist/MobileMenu-RXLYUAWL.js.map +0 -1
  255. package/dist/NotificationsPage-QSF7S2PD.js.map +0 -1
  256. package/dist/OrderSinglePage-CWBHU2C6.js.map +0 -1
  257. package/dist/OrdersPage-L76IEAXR.js.map +0 -1
  258. package/dist/PageSingle-BUAZBPIQ.js.map +0 -1
  259. package/dist/ProductDetails-MPNSWRTQ.js.map +0 -1
  260. package/dist/ProfilePage-I72265CD.js.map +0 -1
  261. package/dist/SeoCartWidget-KV3T3BO7.js.map +0 -1
  262. package/dist/SettingsPage-3F5HZNXX.js.map +0 -1
  263. package/dist/TestimonialsPage-5U7PH4TT.js.map +0 -1
  264. package/dist/ThankYouPage-HFUTJCRT.js.map +0 -1
  265. package/dist/WalletPage-KURO6WSP.js.map +0 -1
  266. package/dist/WishlistPage-RLUK4JRD.js.map +0 -1
  267. package/dist/chunk-BLWLKRKH.js.map +0 -1
  268. package/dist/chunk-CJDAZQV6.js.map +0 -1
  269. package/dist/chunk-IK57LAIA.js.map +0 -1
  270. package/dist/chunk-OKNJFS44.js.map +0 -1
  271. package/dist/chunk-OQA2MKZA.js.map +0 -1
  272. package/dist/chunk-P4GOLSA2.js +0 -166
  273. package/dist/chunk-P4GOLSA2.js.map +0 -1
  274. package/dist/chunk-WG47KLHH.js +0 -14
  275. package/dist/chunk-Y5OGXJLH.js.map +0 -1
  276. package/dist/document-class-5FTU6EZE.js +0 -25
  277. package/dist/navigation-WCGV6RUK.js.map +0 -1
  278. package/dist/not-found-EL2XQE5D.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salla.sa/twilight-theme-engine",
3
- "version": "1.0.74",
3
+ "version": "1.0.76",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/routes/blog/BlogAuthorPage.tsx"],"names":[],"mappings":"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","file":"BlogAuthorPage-QDGBWGGT.js","sourcesContent":["import { useRef, useCallback } from 'react';\nimport { ItemsList } from '@salla.sa/twilight-components-react';\nimport { HookSlot } from '../../hooks';\nimport { useTranslation } from '../../providers/I18nProvider';\nimport { useLocation } from '../../providers/NavigationProvider';\nimport { Breadcrumb, NoContent } from '../../components/common';\nimport { blog } from '../../api/blog';\nimport { BlogArticleCard, BlogListLayout } from './components';\nimport type { BlogAuthorLoaderData, ArticleSummary } from './types';\n\nconst EMPTY_CATEGORIES: BlogAuthorLoaderData['categories'] = [];\nconst EMPTY_ARTICLES: ArticleSummary[] = [];\n\nexport function BlogAuthorPage({\n page,\n author,\n categories = EMPTY_CATEGORIES,\n articles = EMPTY_ARTICLES,\n cursor,\n}: BlogAuthorLoaderData) {\n const { t } = useTranslation();\n const { pathname, searchStr } = useLocation();\n const nextCursorRef = useRef<string | null>(cursor?.next ?? null);\n\n const loader = useCallback(async () => {\n const nextUrl = nextCursorRef.current;\n const cursorMatch = nextUrl?.match(/[?&]cursor=([^&]+)/);\n const cursorValue = cursorMatch ? decodeURIComponent(cursorMatch[1]) : (nextUrl ?? undefined);\n\n const result = await blog.articles.list({ author: String(page.id), cursor: cursorValue });\n nextCursorRef.current = result.cursor?.next ?? null;\n\n return {\n items: result.data,\n next: result.cursor?.next ?? null,\n };\n }, [page.id]);\n\n if (articles.length === 0) {\n return (\n <div className=\"container mb-8 sm:mb-24\">\n <Breadcrumb page={page} />\n <BlogListLayout categories={categories}>\n <HookSlot name=\"blog:author.start\" />\n <NoContent icon=\"sicon-inbox\" message={t('pages.blog_articles.no_articles')} />\n <HookSlot name=\"blog:author.end\" />\n </BlogListLayout>\n </div>\n );\n }\n\n return (\n <div className=\"container mb-8 sm:mb-24\">\n <Breadcrumb page={page} />\n\n <BlogListLayout categories={categories}>\n <HookSlot name=\"blog:author.start\" />\n\n <div className=\"mb-6\">\n <h1 className=\"font-bold text-xl\">{author.name}</h1>\n </div>\n\n <ItemsList<ArticleSummary>\n items={articles}\n loader={cursor?.next ? loader : undefined}\n mode={cursor?.next ? 'infinite' : 'static'}\n pageUrl={pathname + searchStr}\n className=\"s-blog-list\"\n itemsClassName=\"grid md:grid-cols-2 gap-2.5 md:gap-8\"\n empty={<NoContent icon=\"sicon-inbox\" message={t('pages.blog_articles.no_articles')} />}\n t={(key, fallback) => t(key, fallback || key)}\n >\n {(items) =>\n items.map((article) => <BlogArticleCard key={article.id} article={article} />)\n }\n </ItemsList>\n\n <HookSlot name=\"blog:author.end\" />\n </BlogListLayout>\n </div>\n );\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/routes/blog/BlogCategoryPage.tsx"],"names":[],"mappings":"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","file":"BlogCategoryPage-BK4OL6T4.js","sourcesContent":["import { useRef, useCallback } from 'react';\nimport { ItemsList } from '@salla.sa/twilight-components-react';\nimport { HookSlot } from '../../hooks';\nimport { useTranslation } from '../../providers/I18nProvider';\nimport { useLocation } from '../../providers/NavigationProvider';\nimport { Breadcrumb, NoContent } from '../../components/common';\nimport { blog } from '../../api/blog';\nimport { BlogArticleCard, BlogListLayout } from './components';\nimport type { BlogCategoryLoaderData, ArticleSummary } from './types';\n\nconst EMPTY_CATEGORIES: BlogCategoryLoaderData['categories'] = [];\nconst EMPTY_ARTICLES: ArticleSummary[] = [];\n\nexport function BlogCategoryPage({\n page,\n blogCategory,\n categories = EMPTY_CATEGORIES,\n articles = EMPTY_ARTICLES,\n cursor,\n}: BlogCategoryLoaderData) {\n const { t } = useTranslation();\n const { pathname, searchStr } = useLocation();\n const nextCursorRef = useRef<string | null>(cursor?.next ?? null);\n\n const loader = useCallback(async () => {\n const nextUrl = nextCursorRef.current;\n const cursorMatch = nextUrl?.match(/[?&]cursor=([^&]+)/);\n const cursorValue = cursorMatch ? decodeURIComponent(cursorMatch[1]) : (nextUrl ?? undefined);\n\n const result = await blog.articles.list({ category: blogCategory.id, cursor: cursorValue });\n nextCursorRef.current = result.cursor?.next ?? null;\n\n return {\n items: result.data,\n next: result.cursor?.next ?? null,\n };\n }, [blogCategory.id]);\n\n if (articles.length === 0) {\n return (\n <div className=\"container mb-8 sm:mb-24\">\n <Breadcrumb page={page} />\n <BlogListLayout categories={categories}>\n <HookSlot name=\"blog:category.start\" />\n <NoContent icon=\"sicon-inbox\" message={t('pages.blog_articles.no_articles')} />\n <HookSlot name=\"blog:category.end\" />\n </BlogListLayout>\n </div>\n );\n }\n\n return (\n <div className=\"container mb-8 sm:mb-24\">\n <Breadcrumb page={page} />\n\n <BlogListLayout categories={categories}>\n <HookSlot name=\"blog:category.start\" />\n\n <div className=\"mb-6\">\n <h1 className=\"font-bold text-xl\">{blogCategory.name}</h1>\n </div>\n\n <ItemsList<ArticleSummary>\n items={articles}\n loader={cursor?.next ? loader : undefined}\n mode={cursor?.next ? 'infinite' : 'static'}\n pageUrl={pathname + searchStr}\n className=\"s-blog-list\"\n itemsClassName=\"grid md:grid-cols-2 gap-2.5 md:gap-8\"\n empty={<NoContent icon=\"sicon-inbox\" message={t('pages.blog_articles.no_articles')} />}\n t={(key, fallback) => t(key, fallback || key)}\n >\n {(items) =>\n items.map((article) => (\n <BlogArticleCard key={article.id} article={article} showAuthor />\n ))\n }\n </ItemsList>\n\n <HookSlot name=\"blog:category.end\" />\n </BlogListLayout>\n </div>\n );\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/routes/blog/BlogTags.tsx","../src/routes/blog/BlogPage.tsx"],"names":["jsxs","jsx"],"mappings":"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","file":"BlogPage-5LLIKUOQ.js","sourcesContent":["import { useState } from 'react';\nimport { Link } from '../../components/common';\nimport { useTranslation } from '../../providers/I18nProvider';\nimport type { BlogTag } from './types';\n\n/** Tags shown on a blog card before the rest fold behind a \"+N\" toggle. */\nexport const BLOG_CARD_VISIBLE_TAGS = 3;\n\ninterface BlogTagsProps {\n tags: BlogTag[];\n /** How many tags to show before folding the rest. */\n visible?: number;\n}\n\n/**\n * The tag row of a blog card. Articles can carry dozens of tags, which used to wrap into\n * a wall of links and stretch the card; show the first few as compact chips and fold the\n * rest behind a \"+N\" toggle that expands them in place (and \"Show less\" to fold back).\n * Nothing folds when the tags fit.\n */\nexport function BlogTags({ tags, visible = BLOG_CARD_VISIBLE_TAGS }: BlogTagsProps) {\n const { t } = useTranslation();\n const [expanded, setExpanded] = useState(false);\n\n if (tags.length === 0) return null;\n\n const hiddenCount = Math.max(0, tags.length - visible);\n const shown = expanded ? tags : tags.slice(0, visible);\n\n return (\n <div className=\"s-blog-tags p-4 flex flex-wrap items-center gap-2 border-t border-gray-200\">\n {shown.map((tag) => (\n <Link\n key={tag.id}\n to={tag.url}\n className=\"s-blog-tags-item py-1 px-3 rounded-full border border-gray-200 inline-flex items-center max-w-full text-gray-500 hover:text-dark hover:border-gray-300 text-xs\"\n >\n <i className=\"font-medium sicon-tag rtl:ml-1.5 ltr:mr-1.5\"></i>\n <span className=\"fix-align truncate\">{tag.name}</span>\n </Link>\n ))}\n {hiddenCount > 0 && (\n <button\n type=\"button\"\n className=\"s-blog-tags-more py-1 px-3 rounded-full text-xs font-medium text-primary hover:opacity-80\"\n aria-expanded={expanded}\n onClick={() => setExpanded((open) => !open)}\n >\n {expanded ? t('common.elements.show_less', 'Show less') : `+${hiddenCount}`}\n </button>\n )}\n </div>\n );\n}\n","import { SallaSlider } from '@salla.sa/twilight-components-react/slider';\nimport { HookSlot, useDate } from '../../hooks';\nimport { useTranslation } from '../../providers/I18nProvider';\nimport type { BlogPageProps, ArticleSummary } from './types';\nimport { Breadcrumb, NoContent, Link, Image } from '../../components/common';\nimport { BlogTags } from './BlogTags';\n\nconst EMPTY_CATEGORIES: NonNullable<BlogPageProps['categories']> = [];\nconst EMPTY_ARTICLES: ArticleSummary[] = [];\nconst EMPTY_SLIDES: NonNullable<BlogPageProps['slides']> = [];\n\nexport function BlogPage({\n page,\n categories = EMPTY_CATEGORIES,\n articles = EMPTY_ARTICLES,\n slides = EMPTY_SLIDES,\n}: BlogPageProps) {\n const { t } = useTranslation();\n const { format: formatDate } = useDate();\n\n return (\n <div className=\"container mb-8 sm:mb-24\">\n <div className=\"center-between\">\n <Breadcrumb page={page} />\n </div>\n\n <div className=\"grid grid-cols-1 lg:grid-cols-8 gap-8\">\n <nav aria-label=\"Sidebar\" className=\"hidden lg:block lg:sticky shrink-0 top-24 col-span-2\">\n <h2 className=\"font-bold mb-3\">{t('pages.blog_categories.categories')}</h2>\n <ul>\n {categories.map((category) => (\n <li key={category.id} className={category.is_current ? 'text-primary' : ''}>\n <Link className=\"py-3 block text-sm hover:text-primary\" to={category.url}>\n {category.name}\n </Link>\n </li>\n ))}\n </ul>\n </nav>\n\n <div className=\"main-content lg:col-span-6\">\n <HookSlot name=\"blog:start\" />\n\n {slides.length > 0 && (\n <SallaSlider\n id=\"blog-home-slider\"\n type=\"blog\"\n autoPlay\n autoHeight\n showControls={false}\n pagination\n className=\"blog-slider block rounded overflow-hidden mb-2.5 lg:mb-8\"\n sliderConfig={{ watchOverflow: true }}\n >\n <div slot=\"items\">\n {slides.map((article, index) => (\n <div\n key={article.id}\n className=\"swiper-slide has-overlay blog-slider__slide h-[300px] md:h-[400px] relative bg-border-color flex justify-center\"\n >\n <Image\n className=\"object-cover h-full w-full\"\n src={article.image}\n alt={article.name}\n aspectRatio=\"3/1\"\n priority={index === 0}\n />\n <div className=\"absolute z-10 bottom-0 rtl:right-0 ltr:left-0 p-4 pb-10 rtl:lg:pr-10 ltr:lg:pl-10 lg:pb-20\">\n <div className=\"blog-slider__content relative\">\n <div className=\"z-20 w-full md:w-5/6 lg:w-6/12 text-white\">\n <div className=\"block-slide-anime\">\n <div className=\"mb-2.5 rounded-md inline-flex text-sm rtl:space-x-reverse space-x-5\">\n <div className=\"flex items-center\">\n <i className=\"sicon-calendar-date rtl:ml-1 ltr:mr-1\"></i>\n <span className=\"whitespace-nowrap\">\n {formatDate(article.created_at)}\n </span>\n </div>\n <Link\n to={article.author?.url || '#'}\n className=\"flex items-center hover:underline\"\n >\n <i className=\"sicon-user rtl:ml-1 ltr:mr-1\"></i>\n <span className=\"whitespace-nowrap\">{article.author?.name}</span>\n </Link>\n </div>\n <h3 className=\"text-sm font-bold leading-normal mb-4\">\n <Link to={article.url}>{article.name}</Link>\n </h3>\n </div>\n <p className=\"line-clamp-2 block-slide-anime description\">\n {article.description}\n </p>\n </div>\n </div>\n </div>\n </div>\n ))}\n </div>\n </SallaSlider>\n )}\n\n {!slides.length && (\n <div className=\"sr-only lg:not-sr-only\">\n <h1 className=\"blog-category__title font-bold text-lg mb-8\">\n {t('blocks.footer.blog')}\n </h1>\n </div>\n )}\n\n {slides.length > 0 && <h1 className=\"sr-only\">{t('blocks.footer.blog')}</h1>}\n\n {articles.length > 0 ? (\n <>\n <HookSlot name=\"blog:items.start\" />\n <div className=\"grid md:grid-cols-2 gap-2.5 md:gap-8\">\n {articles.map((article) => (\n <div\n key={article.id}\n className=\"list-block post-entry relative h-full transition-shadow duration-500 bg-white hover:shadow-default rounded-lg justify-around overflow-hidden flex flex-col\"\n >\n <Link\n to={article.url}\n className=\"post-entry__image relative overflow-hidden hover:opacity-90 w-full h-56 bg-border-color flex items-center justify-center\"\n >\n <Image\n className=\"h-full w-full object-cover\"\n src={article.image}\n alt={article.name}\n aspectRatio=\"16/9\"\n />\n </Link>\n\n <div className=\"flex-1 px-5 pt-5 pb-7\">\n <div className=\"mb-2.5 text-gray-500 rounded-md inline-flex text-sm rtl:space-x-reverse space-x-5\">\n <div className=\"flex items-center\">\n <i className=\"sicon-calendar-date rtl:ml-1 ltr:mr-1\"></i>\n <span>{formatDate(article.created_at)}</span>\n </div>\n <Link\n to={article.author?.url || '#'}\n className=\"flex items-center hover:text-dark\"\n >\n <i className=\"sicon-user rtl:ml-1 ltr:mr-1\"></i>\n <span>{article.author?.name}</span>\n </Link>\n </div>\n\n <h3 className=\"post-entry__title text-sm font-bold text-gray-800 leading-6 mb-2.5\">\n <Link to={article.url}>{article.name}</Link>\n </h3>\n <p className=\"text-sm text-gray-500 leading-6 mb-2.5\">\n {article.description}\n </p>\n\n {((article.stats?.likes ?? 0) > 0 || (article.stats?.comments ?? 0) > 0) && (\n <div className=\"post-entry__icons flex items-center gap-2.5 text-gray-500 text-sm\">\n {(article.stats?.likes ?? 0) > 0 && (\n <div className=\"flex items-center gap-1\">\n <i className=\"sicon-thumbs-up\"></i>\n {article.stats?.likes}\n </div>\n )}\n {(article.stats?.comments ?? 0) > 0 && (\n <div className=\"flex items-center gap-1\">\n <i className=\"sicon-chat\"></i>\n {article.stats?.comments}\n </div>\n )}\n </div>\n )}\n </div>\n\n {article.tags && <BlogTags tags={article.tags} />}\n </div>\n ))}\n </div>\n <HookSlot name=\"blog:items.end\" />\n </>\n ) : (\n !slides.length && (\n <NoContent icon=\"sicon-inbox\" message={t('pages.blog_articles.no_articles')} />\n )\n )}\n\n <HookSlot name=\"blog:end\" />\n </div>\n </div>\n </div>\n );\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/routes/blog/BlogSinglePage.tsx"],"names":[],"mappings":"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","file":"BlogSinglePage-3BDXSFTY.js","sourcesContent":["import { SallaComments } from '@salla.sa/twilight-components-react/comments';\nimport { HookSlot, useAsset, useDate } from '../../hooks';\nimport { useBlogLike } from '../../hooks/useBlogLike';\nimport { useComments } from '../../hooks/useComments';\nimport { useTranslation } from '../../providers/I18nProvider';\nimport type { BlogSinglePageProps } from './types';\nimport { Breadcrumb, Image, Link } from '../../components/common';\nimport { useTwilight } from '../../providers/twilight-context';\n\nexport function BlogSinglePage({ page, article, related = [] }: BlogSinglePageProps) {\n const { t } = useTranslation();\n const { store } = useTwilight();\n const { cdn } = useAsset();\n const { format: formatDate } = useDate();\n const { active, count, toggle, loading } = useBlogLike(\n Number(article.id) || 0,\n article.stats?.likes ?? 0\n );\n const { commentsKey } = useComments();\n\n return (\n <div key={article.id} className=\"container mb-8 sm:mb-24\">\n <Breadcrumb page={page} />\n\n <div className=\"md:flex items-start\">\n <div className=\"main-content blog-category md:w-96 flex-1 bg-white lg:p-8 rounded-md mb-10 md:mb-0\">\n <HookSlot name=\"blog:single.start\" />\n\n <h1 className=\"font-bold text-3xl mb-5 leading-10\">{article.name}</h1>\n\n <div className=\"mb-10 text-gray-500 rounded-md inline-flex text-sm rtl:space-x-reverse space-x-5\">\n <div className=\"flex items-center\">\n <i className=\"sicon-calendar-date rtl:ml-1 ltr:mr-1\"></i>\n <span>{formatDate(article.created_at)}</span>\n </div>\n <Link to={article.author?.url || '#'} className=\"flex items-center hover:text-dark\">\n <i className=\"sicon-user rtl:ml-1 ltr:mr-1\"></i>\n <span>{article.author?.name}</span>\n </Link>\n </div>\n\n {article.image && (\n <Image\n src={article.image}\n alt={article.name}\n className=\"h-80 mb-10 w-full rounded-md\"\n aspectRatio=\"16/9\"\n priority\n noWrapper\n />\n )}\n\n {store.settings?.blog?.allow_likes_and_comments && (\n <div className=\"flex items-center gap-2.5 text-gray-500 text-base mb-2\">\n <button\n type=\"button\"\n id=\"blog-like\"\n data-blog-id={article.id}\n className={`flex items-center gap-1 transition-colors ${active ? 'text-primary font-semibold liked' : ''}`}\n onClick={toggle}\n disabled={loading}\n >\n {loading ? (\n <span className=\"loader loader--small\"></span>\n ) : (\n <i className={`sicon-thumbs-up ${active ? 'text-primary' : ''}`}></i>\n )}\n <span>{count}</span>\n </button>\n {(article.stats?.comments ?? 0) > 0 && (\n <div className=\"flex items-center gap-1\">\n <i className=\"sicon-chat text-primary\"></i>\n {article.stats?.comments}\n </div>\n )}\n </div>\n )}\n\n <article\n className=\"leading-7 text-sm mb-10\"\n dangerouslySetInnerHTML={{ __html: article.description?.replace(/&nbsp;/g, ' ') || '' }}\n />\n\n {article.tags && article.tags.length > 0 && (\n <div className=\"p-4 flex flex-wrap items-center border-t border-gray-200\">\n {article.tags.map((tag) => (\n <Link\n key={tag.id}\n to={tag.url}\n className=\"py-2 px-4 rounded-large inline-flex items-center text-gray-500 hover:text-dark justify-center text-sm\"\n >\n <i className=\"font-medium sicon-tag rtl:ml-1.5 ltr:mr-1.5\"></i>\n <span className=\"fix-align whitespace-nowrap\">{tag.name}</span>\n </Link>\n ))}\n </div>\n )}\n\n {store.settings?.blog?.allow_likes_and_comments && (\n <SallaComments\n key={commentsKey}\n itemId={Number(article.id) || 0}\n type={'blog' as any}\n />\n )}\n\n <HookSlot name=\"blog:single.end\" />\n </div>\n\n <aside\n aria-label=\"Sidebar\"\n className=\"sticky shrink-0 top-24 md:w-96 rtl:lg:mr-8 ltr:lg:ml-8 pb-11\"\n >\n {related.length > 0 && (\n <>\n <h2 className=\"font-bold mb-3\">{t('pages.blog_articles.related')}</h2>\n\n <HookSlot name=\"blog:single.related.start\" />\n\n {related.map((relatedArticle) => (\n <div\n key={relatedArticle.id}\n className=\"mt-5 flex items-center bg-white p-5 rounded-md\"\n >\n <div className=\"shrink-0\">\n <Link\n to={relatedArticle.url}\n className=\"bg-border-color h-24 w-24 rounded-md overflow-hidden flex items-center justify-center\"\n >\n <span className=\"sr-only\">{relatedArticle.name}</span>\n {relatedArticle.image ? (\n <Image\n className=\"h-full w-full object-cover\"\n src={relatedArticle.image}\n alt={relatedArticle.name}\n aspectRatio=\"1/1\"\n />\n ) : (\n <Image\n className=\"sm:h-full w-10 object-contain opacity-60\"\n src={cdn('/images/placeholder.png')}\n alt=\"post image\"\n />\n )}\n </Link>\n </div>\n <div className=\"rtl:mr-3 ltr:ml-3\">\n <div className=\"flex items-center text-sm text-gray-500 mb-2\">\n <i className=\"sicon-calendar-date rtl:ml-1 ltr:mr-1 rtl:pl-px ltr:pr-px\"></i>\n <time>{formatDate(relatedArticle.created_at)}</time>\n </div>\n <h3 className=\"text-sm font-bold text-gray-800 leading-6\">\n <Link to={relatedArticle.url} className=\"hover:underline\">\n {relatedArticle.name}\n </Link>\n </h3>\n </div>\n </div>\n ))}\n\n <HookSlot name=\"blog:single.related.end\" />\n </>\n )}\n </aside>\n </div>\n </div>\n );\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/routes/blog/BlogTagPage.tsx"],"names":[],"mappings":"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","file":"BlogTagPage-S77JPNEZ.js","sourcesContent":["import { useRef, useCallback } from 'react';\nimport { ItemsList } from '@salla.sa/twilight-components-react';\nimport { HookSlot } from '../../hooks';\nimport { useTranslation } from '../../providers/I18nProvider';\nimport { useLocation } from '../../providers/NavigationProvider';\nimport { Breadcrumb, NoContent } from '../../components/common';\nimport { blog } from '../../api/blog';\nimport { BlogArticleCard, BlogListLayout } from './components';\nimport type { BlogTagLoaderData, ArticleSummary } from './types';\n\nconst EMPTY_CATEGORIES: BlogTagLoaderData['categories'] = [];\nconst EMPTY_ARTICLES: ArticleSummary[] = [];\n\nexport function BlogTagPage({\n page,\n blogTag,\n categories = EMPTY_CATEGORIES,\n articles = EMPTY_ARTICLES,\n cursor,\n}: BlogTagLoaderData) {\n const { t } = useTranslation();\n const { pathname, searchStr } = useLocation();\n const nextCursorRef = useRef<string | null>(cursor?.next ?? null);\n\n const loader = useCallback(async () => {\n const nextUrl = nextCursorRef.current;\n const cursorMatch = nextUrl?.match(/[?&]cursor=([^&]+)/);\n const cursorValue = cursorMatch ? decodeURIComponent(cursorMatch[1]) : (nextUrl ?? undefined);\n\n const result = await blog.articles.list({ tag: String(blogTag.id), cursor: cursorValue });\n nextCursorRef.current = result.cursor?.next ?? null;\n\n return {\n items: result.data,\n next: result.cursor?.next ?? null,\n };\n }, [blogTag.id]);\n\n if (articles.length === 0) {\n return (\n <div className=\"container mb-8 sm:mb-24\">\n <Breadcrumb page={page} />\n <BlogListLayout categories={categories}>\n <HookSlot name=\"blog:tag.start\" />\n <NoContent icon=\"sicon-inbox\" message={t('pages.blog_articles.no_articles')} />\n <HookSlot name=\"blog:tag.end\" />\n </BlogListLayout>\n </div>\n );\n }\n\n return (\n <div className=\"container mb-8 sm:mb-24\">\n <Breadcrumb page={page} />\n\n <BlogListLayout categories={categories}>\n <HookSlot name=\"blog:tag.start\" />\n\n <div className=\"mb-6\">\n <h1 className=\"font-bold text-xl\">{blogTag.name}</h1>\n </div>\n\n <ItemsList<ArticleSummary>\n items={articles}\n loader={cursor?.next ? loader : undefined}\n mode={cursor?.next ? 'infinite' : 'static'}\n pageUrl={pathname + searchStr}\n className=\"s-blog-list\"\n itemsClassName=\"grid md:grid-cols-2 gap-2.5 md:gap-8\"\n empty={<NoContent icon=\"sicon-inbox\" message={t('pages.blog_articles.no_articles')} />}\n t={(key, fallback) => t(key, fallback || key)}\n >\n {(items) =>\n items.map((article) => (\n <BlogArticleCard key={article.id} article={article} showAuthor />\n ))\n }\n </ItemsList>\n\n <HookSlot name=\"blog:tag.end\" />\n </BlogListLayout>\n </div>\n );\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/routes/brands/BrandsPage.tsx"],"names":[],"mappings":"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","file":"BrandsPage-2TJALMEG.js","sourcesContent":["import { memo, useState, useRef, useCallback, useEffect, useMemo } from 'react';\nimport { useInfiniteQuery } from '@tanstack/react-query';\nimport { useWindowScroll } from '@uidotdev/usehooks';\nimport { Link, Breadcrumb, NoContent, Image } from '../../components/common';\nimport { HookSlot } from '../../hooks';\nimport { useTranslation } from '../../providers/I18nProvider';\nimport { brand } from '../../api/brands';\nimport type { Brand, BrandsGroup, BrandsPageProps } from './types';\n\nfunction byLetter(brands: Brand[], locale: string): [string, Brand[]][] {\n const groups: BrandsGroup = {};\n for (const item of brands) {\n (groups[(locale === 'ar' ? item.ar_char : item.en_char) || '#'] ??= []).push(item);\n }\n // Code point order is alphabetical for Arabic and Latin, and the same on server and browser.\n return Object.entries(groups).sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0));\n}\n\ninterface BrandSectionProps {\n char: string;\n brands: Brand[];\n sectionRef: (el: HTMLElement | null) => void;\n}\n\nfunction BrandSection({ char, brands, sectionRef }: BrandSectionProps) {\n return (\n <section\n id={`brand-section-${char}`}\n ref={sectionRef}\n className=\"pt-24 first:pt-16 md:first:pt-24\"\n >\n <div className=\"flex items-center mb-10\">\n <span data-id={char} className=\"brand-char\">\n <span className=\"fix-align\">{char}</span>\n </span>\n <div className=\"bg-border-color h-px flex-1\"></div>\n </div>\n <div className=\"grid grid-cols-3 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-6 grid-flow-row gap-4 md:gap-8\">\n {brands.map((item) => (\n // A grid of logos would preload a brand for every logo the mouse crosses.\n <Link key={item.id} to={`/brands/${item.id}`} className=\"brand-item\" preload={false}>\n <Image\n className=\"max-h-full\"\n width={400}\n height={300}\n src={item.logo}\n alt={item.name}\n />\n </Link>\n ))}\n </div>\n </section>\n );\n}\n\nconst PAGES_PER_WAVE = 6;\n\n// One retry per page, so a network blip does not drop it.\nconst fetchPage = (page: number) => brand.list(page).catch(() => brand.list(page));\n\nasync function fetchWave(from: number): Promise<{ items: Brand[]; done: boolean }> {\n const settled = await Promise.allSettled(\n Array.from({ length: PAGES_PER_WAVE }, (_, i) => fetchPage(from + i))\n );\n const pages = settled.flatMap((result) => (result.status === 'fulfilled' ? [result.value] : []));\n return {\n items: pages.flatMap((result) => result.items),\n // Stop at the last page, or when a whole wave fails.\n done: pages.length === 0 || pages.some((result) => !result.next),\n };\n}\n\n/**\n * The first page plus every page after `next`, fetched in the background so the letter menu is\n * complete without scrolling. The API has no page count, so pages load in parallel waves.\n */\nfunction useAllBrands(first: Brand[], next: string | null | undefined, locale: string): Brand[] {\n const startPage = Number(next?.match(/[?&]page=(\\d+)/)?.[1]) || 0;\n const { data, hasNextPage, isFetchingNextPage, fetchNextPage } = useInfiniteQuery({\n queryKey: ['brands', 'after-first-page', locale, startPage],\n queryFn: ({ pageParam }) => fetchWave(pageParam),\n initialPageParam: startPage,\n getNextPageParam: (wave, _waves, from) => (wave.done ? undefined : from + PAGES_PER_WAVE),\n enabled: startPage > 0,\n // Not reused across visits: it must match the first page the loader just fetched.\n gcTime: 0,\n });\n\n useEffect(() => {\n if (hasNextPage && !isFetchingNextPage) void fetchNextPage();\n }, [hasNextPage, isFetchingNextPage, fetchNextPage]);\n\n return useMemo(() => {\n const extra = data?.pages.flatMap((wave) => wave.items) ?? [];\n return extra.length ? [...first, ...extra] : first;\n }, [first, data]);\n}\n\nfunction BrandsPageComponent({ page, brands, pagination }: BrandsPageProps) {\n const { t, locale } = useTranslation();\n const allBrands = useAllBrands(brands, pagination?.next, locale);\n const brandEntries = useMemo(() => byLetter(allBrands, locale), [allBrands, locale]);\n const [selectedChar, setSelectedChar] = useState<string | null>(null);\n const sectionRefs = useRef<Record<string, HTMLElement | null>>({});\n\n // Use useWindowScroll hook instead of manual listener\n const [{ y }] = useWindowScroll();\n const isSticky = (y ?? 0) > 200;\n\n // Handle brand nav item click - matches brands.js toggle class logic\n const handleBrandClick = useCallback((e: React.MouseEvent<HTMLAnchorElement>) => {\n e.preventDefault();\n const char = e.currentTarget.dataset.id;\n if (char) {\n setSelectedChar(char);\n sectionRefs.current[char]?.scrollIntoView({ behavior: 'smooth' });\n }\n }, []);\n\n return (\n <div className=\"container mb-20\">\n <Breadcrumb page={page} />\n\n <div className=\"flex justify-between pt-2 pb-6\">\n <h1 className=\"font-bold mb-6 md:mb-0\">{page.title}</h1>\n </div>\n\n {brandEntries.length > 0 ? (\n <>\n <div className=\"brands-nav-wrap\">\n <ul\n id=\"brands-nav\"\n className={`brands-nav ${isSticky ? 'is-sticky' : 'is-not-sticky'}`}\n >\n <li></li>\n {brandEntries.map(([char]) => (\n <li key={char}>\n <a\n className={`brands-nav__item ${selectedChar === char ? 'is-selected' : 'unselected'}`}\n href={`#brand-section-${char}`}\n onClick={handleBrandClick}\n data-id={char}\n >\n <span className=\"fix-align\">{char}</span>\n </a>\n </li>\n ))}\n </ul>\n </div>\n\n <div className=\"px-8 xl:px-0\">\n <HookSlot name=\"brands:index.items.start\" />\n\n {brandEntries.map(([char, brandGroup]) => (\n <BrandSection\n key={char}\n char={char}\n brands={brandGroup}\n sectionRef={(el) => {\n sectionRefs.current[char] = el;\n }}\n />\n ))}\n\n <HookSlot name=\"brands:index.items.end\" />\n </div>\n </>\n ) : (\n <NoContent\n icon=\"sicon-award-ribbon\"\n message={t('pages.brands.non_brands')}\n actionLabel={t('common.elements.back_home')}\n />\n )}\n </div>\n );\n}\n\nexport const BrandsPage = memo(BrandsPageComponent);\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/common/BreadcrumbTrail.tsx","../src/components/common/BreadcrumbJsonLd.tsx","../src/components/common/Breadcrumb.tsx"],"names":["BreadcrumbTrail","jsx","jsxs","Fragment"],"mappings":"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","file":"Breadcrumb-SXC43X3D.js","sourcesContent":["import { memo, useState, useEffect } from 'react';\nimport type { Breadcrumb } from '../../types';\nimport { Link } from './Link';\n\nconst MAX_VISIBLE_ITEMS = 4;\n\ninterface BreadcrumbTrailProps {\n items: Breadcrumb[];\n className?: string;\n}\n\nconst ChevronIcon = () => (\n <svg\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"32\"\n height=\"32\"\n viewBox=\"0 0 32 32\"\n aria-hidden=\"true\"\n >\n <title>keyboard_arrow_left</title>\n <path d=\"M20.563 22.104l-1.875 1.875-8-8 8-8 1.875 1.875-6.125 6.125z\"></path>\n </svg>\n);\n\nfunction truncateItems(items: Breadcrumb[]): Breadcrumb[] {\n if (items.length <= MAX_VISIBLE_ITEMS) return items;\n\n return [items[0], { name: '…', url: '' }, ...items.slice(-2)];\n}\n\nexport const BreadcrumbTrail = memo(function BreadcrumbTrail({\n items,\n className,\n}: BreadcrumbTrailProps) {\n const [expanded, setExpanded] = useState(false);\n\n useEffect(() => {\n setExpanded(false);\n }, [items]);\n\n if (items.length === 0) return null;\n\n const displayItems = expanded ? items : truncateItems(items);\n\n return (\n <nav className={className ?? 'breadcrumbs w-full py-5'} aria-label=\"Breadcrumb\">\n <ol className=\"s-breadcrumb-wrapper\" itemScope itemType=\"https://schema.org/BreadcrumbList\">\n {displayItems.map((item, index) => {\n const isLast = index === displayItems.length - 1;\n const isEllipsis = item.name === '…' && !item.url;\n\n return (\n <li\n key={`${item.url}-${item.name}`}\n className={['s-breadcrumb-item', isEllipsis ? 'cursor-pointer select-none' : ''].join(\n ' '\n )}\n aria-current={isLast ? 'page' : undefined}\n itemProp=\"itemListElement\"\n itemScope\n itemType=\"https://schema.org/ListItem\"\n >\n {isEllipsis ? (\n <button\n type=\"button\"\n onClick={() => {\n setExpanded(true);\n }}\n className=\"inline-flex items-center gap-1 hover:underline\"\n aria-label=\"Show all breadcrumbs\"\n >\n <span aria-hidden=\"true\" className=\"text-xs\">\n •••\n </span>\n </button>\n ) : isLast ? (\n <span itemProp=\"name\">{item.name}</span>\n ) : (\n <>\n <Link to={item.url} itemProp=\"item\">\n <span itemProp=\"name\">{item.name}</span>\n </Link>\n <span aria-hidden=\"true\" className=\"s-breadcrumb-arrow inline-flex\">\n <ChevronIcon />\n </span>\n <meta itemProp=\"position\" content={String(index + 1)} />\n </>\n )}\n {isLast && <meta itemProp=\"position\" content={String(index + 1)} />}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n});\n","import type { Breadcrumb } from '../../types';\n\ninterface BreadcrumbJsonLdProps {\n items: Breadcrumb[];\n origin: string;\n}\n\nfunction toAbsoluteUrl(origin: string, path: string): string {\n if (path.startsWith('http')) return path;\n return origin + path;\n}\n\nexport function BreadcrumbJsonLd({ items, origin }: BreadcrumbJsonLdProps) {\n if (items.length === 0) return null;\n\n const schema = {\n '@context': 'https://schema.org',\n '@type': 'BreadcrumbList',\n itemListElement: items.map((item, index) => {\n const isLast = index === items.length - 1;\n const url = toAbsoluteUrl(origin, item.url);\n return {\n '@type': 'ListItem',\n position: index + 1,\n name: item.name,\n ...(isLast ? { '@id': url } : { item: url }),\n };\n }),\n };\n\n const html = JSON.stringify(schema);\n\n return (\n <script\n type=\"application/ld+json\"\n suppressHydrationWarning\n dangerouslySetInnerHTML={{ __html: html }}\n />\n );\n}\n","import type { Page } from '../../types';\nimport { useBreadcrumbs } from '../../hooks/useBreadcrumbs';\nimport { useTwilight } from '../../providers/TwilightProvider';\nimport { BreadcrumbTrail } from './BreadcrumbTrail';\nimport { BreadcrumbJsonLd } from './BreadcrumbJsonLd';\n\nexport interface BreadcrumbProps {\n page?: Page | null;\n className?: string;\n}\n\nexport function Breadcrumb({ page, className }: BreadcrumbProps) {\n const { theme, store } = useTwilight();\n const breadcrumbsEnabled = theme.settings.is_breadcrumbs_enabled ?? true;\n const origin = store.url;\n\n const items = useBreadcrumbs(page);\n\n if (!breadcrumbsEnabled) return null;\n\n return (\n <>\n <BreadcrumbTrail items={items} className={className} />\n <BreadcrumbJsonLd items={items} origin={origin} />\n </>\n );\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/cart/CartItem.tsx"],"names":[],"mappings":"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","file":"CartItem-R6BYAM4O.js","sourcesContent":["import type { Money, CartItem as CartItemType } from '../../types';\nimport { useTranslation } from '../../providers/I18nProvider';\nimport { useMoney } from '../../hooks/useMoney';\nimport { Link, Image } from '../common';\nimport { SallaCartItemOffers } from '@salla.sa/twilight-components-react/cart-item-offers';\nimport { SallaQuantityInput } from '@salla.sa/twilight-components-react/quantity-input';\nimport { SallaButton } from '@salla.sa/twilight-components-react/button';\nimport { SallaProductOptions } from '@salla.sa/twilight-components-react/product-options';\nimport { useHostAttributes } from '@salla.sa/twilight-theme-engine/hooks/useHostAttributes';\n\ninterface CartItemProps {\n item: CartItemType;\n isFirst?: boolean;\n}\n\nfunction toNumber(value: number | Money | undefined): number | undefined {\n if (value === undefined) return undefined;\n if (typeof value === 'number') return value;\n return value.amount;\n}\n\nfunction moneyCurrency(value: number | Money | undefined): string | undefined {\n if (typeof value !== 'object') return undefined;\n return value.currency;\n}\n\nfunction CartItemPrices({ item }: { item: CartItemType }) {\n const { format } = useMoney();\n return (\n <div className=\"flex items-center gap-2 flex-wrap\">\n {item.offer && (\n <span className=\"text-sm text-gray-500 line-through item-regular-price\">\n {format(toNumber(item.product_price), {\n currency: moneyCurrency(item.product_price),\n })}\n </span>\n )}\n\n {item.is_on_sale && (\n <span className=\"inline-flex gap-1 leading-4 text-sm text-gray-500 line-through item-original-price\">\n {format(toNumber(item.original_price), {\n currency: moneyCurrency(item.original_price),\n })}\n </span>\n )}\n\n <span\n className={`inline-flex gap-1 leading-4 item-price ${item.has_discount ? 'text-red-800' : 'text-sm text-gray-500'}`}\n >\n {format(toNumber(item.price), { currency: moneyCurrency(item.price) })}\n </span>\n </div>\n );\n}\n\nfunction CartItemQuantity({ item }: { item: CartItemType }) {\n const { t } = useTranslation();\n const quantityRef = useHostAttributes({\n max: item.max_quantity,\n value: item.quantity,\n name: 'quantity',\n });\n\n if (item.type === 'donating') return <span></span>;\n\n if (item.is_hidden_quantity) {\n return (\n <>\n <input\n type=\"hidden\"\n value={item.quantity}\n name=\"quantity\"\n aria-label={t('pages.products.quantity')}\n />\n <span className=\"w-10 text-center\">{item.quantity}</span>\n </>\n );\n }\n\n return (\n <SallaQuantityInput\n // The loaded component reads `value` only once, so remount when the quantity changes.\n key={`${item.id}-${item.quantity}`}\n ref={quantityRef}\n cartItemId={item.id}\n max={item.max_quantity ?? undefined}\n className=\"transition transition-color duration-300\"\n aria-label={t('pages.products.quantity')}\n value={item.quantity}\n name=\"quantity\"\n />\n );\n}\n\nfunction CartItemTotal({ item }: { item: CartItemType }) {\n const { t } = useTranslation();\n const { format } = useMoney();\n const total = item.detailed_offers?.length ? item.total_special_price : item.total;\n return (\n <p className=\"text-primary flex-none font-bold text-sm rtl:md:pl-12 ltr:md:pr-12\">\n <span>{t('pages.cart.total')}:</span>\n <span className=\"inline-block item-total\">\n {item.is_available\n ? format(toNumber(total), { currency: moneyCurrency(total) })\n : t('pages.products.out_of_stock')}\n </span>\n </p>\n );\n}\n\nconst handleChange = (e: React.ChangeEvent<HTMLFormElement>) => {\n window.salla?.form.onChange('cart.updateItem', e);\n};\n\nexport function CartItem({ item, isFirst = false }: CartItemProps) {\n const { t } = useTranslation();\n\n const handleDelete = async () => {\n await window.salla?.cart.deleteItem(item.id);\n document.querySelector(`#item-${item.id}`)?.remove();\n };\n\n const isFreeProduct = toNumber(item.price) === 0 && item.has_discount;\n\n return (\n <form onChange={handleChange} id={`item-${item.id}`}>\n <section className=\"cart-item bg-white p-5 xs:p-7 rounded-md mb-5 relative\">\n <input type=\"hidden\" name=\"id\" value={item.id} />\n\n <div className=\"md:flex rtl:space-x-reverse md:space-x-12 items-start justify-between mb-8 last:mb-0\">\n <div className=\"flex flex-1 rtl:space-x-reverse space-x-4\">\n <Link to={item.url} className=\"relative overflow-hidden shrink-0\">\n <Image\n src={item.product_image}\n alt={item.product_name}\n className=\"flex-none w-24 h-20 border border-gray-200 bg-gray-100 rounded-md object-center object-cover\"\n aspectRatio=\"6/5\"\n priority={isFirst}\n />\n\n {isFreeProduct && (\n <div className=\"free-ribbon absolute top-[11px] right-[-38px] w-32 bg-red-600 text-white text-xs font-bold text-center py-1 rotate-45 shadow-md\">\n {/* Twig: trans('pages.loyalty_program.free_product') */}\n {t('pages.loyalty_program.free_product')}\n </div>\n )}\n </Link>\n\n <div className=\"space-y-1\">\n <div className=\"text-gray-900 leading-6 text-lg font-bold\">\n <Link to={item.url} className=\"text-base\">\n {item.product_name}\n </Link>\n </div>\n\n <CartItemPrices item={item} />\n\n {item.weight_label && (\n <p className=\"text-sm text-gray-500\">\n {t('pages.products.weight')}: <span>{item.weight_label}</span>\n </p>\n )}\n\n {/* Twig: class=\"{{ item.detailed_offers ? 'hidden' : '' }}\": hide old offer when detailed_offers present */}\n {item.offer && !item.detailed_offers?.length && (\n <span className=\"old-offers flex items-center gap-1 mx-1.5\">\n <i className=\"sicon-discount-calculator text-gray-500 offer-icon\"></i>\n <span className=\"text-sm text-gray-500 offer-name\">{item.offer.names}</span>\n </span>\n )}\n\n {item.detailed_offers && item.detailed_offers.length > 0 && (\n <SallaCartItemOffers\n quantity={item.quantity}\n itemId={String(item.id) as any}\n productPrice={toNumber(item.product_price) ?? 0}\n offers={JSON.stringify(item.detailed_offers)}\n />\n )}\n </div>\n </div>\n\n <div className=\"border-t border-b border-gray-200 py-3 md:p-0 md:border-none mt-5 md:mt-0 flex gap-8 justify-between items-center md:items-start\">\n <CartItemQuantity item={item} />\n\n <CartItemTotal item={item} />\n </div>\n </div>\n\n {/* Twig: {% include 'pages.partials.product.options' with {product:item} %} */}\n {item.options && item.options.length > 0 && (\n <SallaProductOptions options={JSON.stringify(item.options)} productId={item.product_id} />\n )}\n\n <span className=\"absolute top-1.5 rtl:left-1.5 ltr:right-1.5 rtl:xs:left-5 ltr:xs:right-5 xs:top-5\">\n <SallaButton\n type=\"button\"\n shape=\"icon\"\n size=\"small\"\n color=\"danger\"\n className=\"btn--delete\"\n ariaLabel={t('common.elements.remove')}\n onClick={handleDelete}\n >\n <i className=\"sicon-cancel\"></i>\n </SallaButton>\n </span>\n </section>\n </form>\n );\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/cart/CartSummary.tsx"],"names":[],"mappings":"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","file":"CartSummary-YQ2RMHID.js","sourcesContent":["import { useCallback } from 'react';\nimport { HookSlot } from '../../hooks/HookSlot';\nimport { useTranslation } from '../../providers/I18nProvider';\nimport { useCoupon } from '../../hooks/useCoupon';\nimport { useMoney } from '../../hooks/useMoney';\nimport { stripUnsafeHtml } from '../../utils/sanitize';\nimport { SallaLoyalty } from '@salla.sa/twilight-components-react/loyalty';\nimport { SallaGifting } from '@salla.sa/twilight-components-react/gifting';\nimport { SallaButton } from '@salla.sa/twilight-components-react/button';\nimport { SallaTieredOffer } from '@salla.sa/twilight-components-react/tiered-offer';\nimport type { Cart } from '../../types';\n\ninterface CartSummaryProps {\n cart: Cart;\n applyCouponEnabled?: boolean;\n taxAmount?: number;\n loyalty?: Cart['loyalty'];\n gift?: Cart['gift'];\n loyaltyPoints?: number;\n}\n\nexport function CartSummary({\n cart,\n applyCouponEnabled = true,\n taxAmount,\n loyalty,\n gift,\n loyaltyPoints,\n}: CartSummaryProps) {\n const { t } = useTranslation();\n const { format } = useMoney();\n\n const handleCartSubmit = useCallback(async () => {\n // Twig's cart.js: a submit with an empty required option fails and the SDK resets the cart.\n const forms = document.querySelectorAll<HTMLFormElement>('form[id^=\"item-\"]');\n if (![...forms].every((form) => form.reportValidity())) {\n window.salla?.notify.error(window.salla.lang.get('common.messages.required_fields'));\n return;\n }\n try {\n await window.salla?.cart.submit();\n } catch {\n // Error handling\n }\n }, []);\n\n return (\n <div className=\"sticky top-24 w-full lg:w-96 rtl:lg:mr-8 ltr:lg:ml-8\">\n <HookSlot name=\"cart:summary.start\" />\n {cart.free_shipping_bar && <FreeShippingBar freeShippingBar={cart.free_shipping_bar} />}\n\n {/* Twig: {% if loyalty and user.loyalty_points %} — top-level page vars rendered inside sidebar */}\n {loyalty && loyaltyPoints && (\n <div className=\"shadow-default mb-5 rounded-md p-3 xs:p-7 bg-white\">\n <SallaLoyalty\n customerPoints={loyaltyPoints}\n prizePoints={loyalty.prize.points}\n prizeTitle={loyalty.prize.title}\n />\n </div>\n )}\n\n {/* Twig: {{gift.enabled ? '' : 'hidden'}} — top-level page var rendered inside sidebar */}\n {gift?.enabled && (\n <div id=\"cart-gifting\" className=\"shadow-default bg-white xs:p-2 rounded-md mb-5 relative\">\n <SallaGifting\n id=\"salla-gifting\"\n className=\"mt-5\"\n widgetTitle={t('pages.cart.gift_widget_title', 'Send as a gift')}\n widgetSubtitle={gift.text}\n {...(gift.type ? { [gift.type + 'Products']: true } : {})}\n vertical\n />\n </div>\n )}\n\n <div className=\"shadow-default bg-white p-5 xs:p-7 rounded-md mb-5 relative transition-height duration-1000\">\n <h2 className=\"font-bold text-sm mb-5\">{t('pages.cart.summary', 'Order Summary')}</h2>\n\n <div className=\"flex justify-between text-sm mb-5\">\n <span className=\"text-gray-500\">\n {taxAmount\n ? t('pages.cart.items_total_without_tax', 'Items total (excl. tax)')\n : t('pages.cart.items_total', 'Items total')}\n </span>\n <b id=\"sub-total\">{format(cart.sub_total)}</b>\n </div>\n\n {cart.options?.length > 0 && (\n <div className=\"flex justify-between text-sm mb-5\">\n <span className=\"text-gray-500\">\n {t('pages.cart.order_options_total', 'Options total')}\n </span>\n <b id=\"cart-options-total\">{format(cart.options_total ?? undefined)}</b>\n </div>\n )}\n\n {cart.has_shipping && (\n <div id=\"shipping-cost\" className=\"flex justify-between text-sm mb-5\">\n <span className=\"text-gray-500\">{t('pages.cart.shipping_cost', 'Shipping cost')}</span>\n <b>{format(cart.real_shipping_cost)}</b>\n </div>\n )}\n\n {applyCouponEnabled && <CouponInput initialCoupon={cart.coupon ?? undefined} />}\n\n {!!cart.total_discount && (\n <div id=\"total-discount\" className=\"flex justify-between text-sm\">\n <span className=\"text-gray-500 block h-10\">{t('pages.cart.discount', 'Discount')}</span>\n <b>- {format(cart.total_discount)}</b>\n </div>\n )}\n\n {!!taxAmount && (\n <div className=\"flex justify-between text-sm mb-5\">\n <span className=\"text-gray-500\">\n {t('pages.cart.VAT_tax_amount', 'VAT Tax Amount')}\n </span>\n <b id=\"tax-amount\">{format(taxAmount)}</b>\n </div>\n )}\n\n <div className=\"flex justify-between text-lg mb-5\">\n <span className=\"text-gray-500\">{t('pages.cart.final_total', 'Total')}</span>\n <b data-cart-total>{format(cart.total)}</b>\n </div>\n\n <div className=\"cart-submit-wrap\">\n <HookSlot name=\"cart:submit.start\" />\n <SallaButton\n id=\"cart-submit\"\n loaderPosition=\"center\"\n width=\"wide\"\n onClick={handleCartSubmit}\n >\n {t('pages.cart.complete_order', 'Complete Order')}\n </SallaButton>\n <HookSlot name=\"cart:submit.end\" />\n </div>\n\n <HookSlot name=\"cart:summary.end\" />\n </div>\n\n <SallaTieredOffer />\n </div>\n );\n}\n\nfunction FreeShippingBar({\n freeShippingBar,\n}: {\n freeShippingBar: NonNullable<Cart['free_shipping_bar']>;\n}) {\n const isFree = freeShippingBar.has_free_shipping;\n const { t } = useTranslation();\n\n return (\n <div className=\"shadow-default bg-white p-5 xs:p-7 rounded-md mb-5 relative\" id=\"free-shipping\">\n <div className=\"flex rtl:space-x-reverse space-x-3 items-center\">\n <i className=\"bg-primary text-white rounded-icon sicon-shipping-fast\"></i>\n <div className=\"flex-1\">\n <h4 className=\"shipping-item font-bold text-sm mb-1.5\">\n {t('pages.cart.free_shipping', 'Free Shipping')}\n </h4>\n <p className=\"shipping-item text-sm text-gray-500\">\n {isFree ? (\n <>\n <span\n id=\"free-shipping-msg\"\n dangerouslySetInnerHTML={{\n __html: stripUnsafeHtml(\n t('pages.cart.has_free_shipping', 'You have free shipping!')\n ),\n }}\n />\n <span className=\"emoji\" id=\"free-shipping-applied\">\n 🎉\n </span>\n </>\n ) : (\n <span\n id=\"free-shipping-msg\"\n dangerouslySetInnerHTML={{\n __html: stripUnsafeHtml(\n t(\n 'pages.cart.free_shipping_alert',\n 'Get free shipping when you add :amount more'\n ).replace(':amount', String(freeShippingBar.remaining))\n ),\n }}\n />\n )}\n </p>\n </div>\n </div>\n {!isFree && (\n <div className=\"mt-8 bg-border-color rounded-full\" id=\"free-shipping-bar\">\n <div\n className=\"progress-bg transition-all duration-500 h-2.5 bg-primary relative rounded-full flex justify-end\"\n style={{ width: `${freeShippingBar.percent}%` }}\n >\n <i className=\"inline-block sicon-shipping-fast absolute -top-5 rtl:left-0 ltr:right-0\"></i>\n </div>\n </div>\n )}\n </div>\n );\n}\n\nfunction CouponInput({ initialCoupon }: { initialCoupon?: string }) {\n const { t } = useTranslation();\n const { value, error, apply, remove } = useCoupon();\n\n // Use initial coupon from cart if available\n const appliedCoupon = value ?? initialCoupon;\n\n const handleApplyCoupon = useCallback(\n async (event: React.FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n const formData = new FormData(event.currentTarget);\n const code = formData.get('coupon') as string;\n if (code?.trim()) {\n await apply(code.trim());\n }\n },\n [apply]\n );\n\n const handleRemoveCoupon = useCallback(async () => {\n await remove();\n }, [remove]);\n\n return (\n <form className=\"border-t border-gray-200 border-b py-5 mb-5\" onSubmit={handleApplyCoupon}>\n <label htmlFor=\"coupon-input\" className=\"block text-sm\">\n {t('pages.cart.have_coupon', 'Have a coupon?')}\n </label>\n <div className=\"mt-2.5 relative\">\n <input\n placeholder={t('pages.cart.coupon_placeholder', 'Enter coupon code')}\n disabled={!!appliedCoupon}\n className=\"rtl:pl-24 ltr:pr-24 form-input\"\n defaultValue={appliedCoupon}\n id=\"coupon-input\"\n name=\"coupon\"\n aria-label={t('pages.cart.apply_coupon', 'Apply coupon')}\n type=\"text\"\n />\n\n <SallaButton\n type=\"submit\"\n className={`btn--coupon ${appliedCoupon ? 'has-coupon btn--danger' : 'has-not-coupon btn--default'}`}\n loaderPosition=\"center\"\n onClick={appliedCoupon ? handleRemoveCoupon : undefined}\n >\n <span className=\"coupon-text\">\n {appliedCoupon ? '' : t('pages.cart.apply_coupon_btn', 'Apply')}\n </span>\n {appliedCoupon && <i className=\"sicon-cancel icon text-xl w-8\"></i>}\n </SallaButton>\n </div>\n {error && (\n <span className=\"text-xs text-red-700\" id=\"coupon-error\">\n {error}\n </span>\n )}\n </form>\n );\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/layout/CustomerLayout.tsx"],"names":[],"mappings":"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","file":"CustomerLayout-DUT7BEKW.js","sourcesContent":["import { useMemo } from 'react';\nimport { useUser } from '../../hooks';\nimport { useDocumentClass } from '../../hooks/useDocumentClass';\nimport { SallaFileUpload } from '@salla.sa/twilight-components-react/file-upload';\nimport { SallaUserMenu } from '@salla.sa/twilight-components-react/user-menu';\nimport { Breadcrumb } from '../common';\nimport type { LayoutProps } from './types';\nimport { useTranslation } from '../../providers/I18nProvider';\nimport { useLocation } from '../../providers/NavigationProvider';\nimport type { Page } from '../../types';\nimport { RouteId } from '../../router/route-ids';\n\ninterface CustomerLayoutProps extends LayoutProps {\n page?: Page;\n}\n\nexport function CustomerLayout({ children, page }: CustomerLayoutProps) {\n const { data: user } = useUser();\n const { t } = useTranslation();\n const { pathname } = useLocation();\n\n // Twig's salla-breadcrumb puts \"My account\" before every customer page but these two.\n const crumbPage = useMemo(() => {\n if (\n !page ||\n page.breadcrumbs?.length ||\n ([RouteId.CUSTOMER_PROFILE, RouteId.CUSTOMER_WISHLIST] as string[]).includes(page.slug)\n ) {\n return page;\n }\n return {\n ...page,\n breadcrumbs: [\n { name: t('common.titles.home'), url: '/' },\n { name: t('common.titles.profile'), url: '/account/profile' },\n { name: page.title, url: pathname },\n ],\n };\n }, [page, pathname, t]);\n\n // Marks every customer/account page so a theme can scope styles to them\n // (route classes vary per page; this one is shared).\n useDocumentClass({ body: { class: 'customer' } });\n\n return (\n <>\n <div className=\"profile-header gradient-bg\">\n <div className=\"container relative flex justify-between h-full items-center\">\n {crumbPage && (\n <Breadcrumb page={crumbPage} className=\"breadcrumbs w-full py-5 self-start\" />\n )}\n </div>\n </div>\n\n {/* Main content area */}\n <div className=\"container lg:mb-24\">\n <div className=\"flex items-start flex-col lg:flex-row justify-center\">\n <nav\n aria-label=\"Sidebar\"\n className=\"shrink-0 lg:sticky top-24 lg:-mt-28 lg:shadow-default rounded-md lg:bg-white w-full lg:w-72 rtl:lg:ml-8 ltr:lg:mr-8 lg:pt-8 lg:pb-11 sidebar space-y-px\"\n >\n {page?.slug === RouteId.CUSTOMER_PROFILE && (\n <div className=\"text-center md:mb-9\">\n <div className=\"h-20 w-20 m-auto avatar-wrap bg-gray-100 rounded-full overflow-hidden\">\n <SallaFileUpload profileImage value={user?.avatar}>\n <span className=\"avatar-placeholder flex justify-center items-center flex-col w-full h-full\">\n <span className=\"sicon-user text-2xl text-gray-400\"></span>\n </span>\n </SallaFileUpload>\n </div>\n </div>\n )}\n\n <div className=\"hidden lg:block\">\n <SallaUserMenu inline />\n </div>\n </nav>\n\n <div className=\"main-content w-full flex-1 lg:pt-10 max-w-3xl\">\n {page?.title && (\n <h1 className=\"font-bold text-lg text-center sm:rtl:text-right sm:ltr:text-left mb-2\">\n {page.title}\n </h1>\n )}\n {children}\n </div>\n </div>\n </div>\n </>\n );\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/routes/loyalty/LoyaltyPage.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKO,SAAS,WAAA,CAAY,EAAE,IAAA,EAAK,EAAqB;AACtD,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,QAAA,EAAA,EAAS,MAAK,eAAA,EAAgB,CAAA;AAAA,oBAC/B,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EACb,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,kBAAW,IAAA,EAAY,CAAA;AAAA,0BACvB,mBAAA,EAAA,EAAoB;AAAA,KAAA,EACvB,CAAA;AAAA,oBACA,GAAA,CAAC,QAAA,EAAA,EAAS,IAAA,EAAK,aAAA,EAAc;AAAA,GAAA,EAC/B,CAAA;AAEJ","file":"LoyaltyPage-IXLUF6MF.js","sourcesContent":["import { SallaLoyaltyProgram } from '@salla.sa/twilight-components-react/loyalty-program';\nimport type { LoyaltyPageProps } from './types';\nimport { Breadcrumb } from '../../components/common';\nimport { HookSlot } from '../../hooks';\n\nexport function LoyaltyPage({ page }: LoyaltyPageProps) {\n return (\n <>\n <HookSlot name=\"loyalty:start\" />\n <div className=\"container mb-20\">\n <Breadcrumb page={page} />\n <SallaLoyaltyProgram />\n </div>\n <HookSlot name=\"loyalty:end\" />\n </>\n );\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/navigation/MainMenu.tsx"],"names":["MainMenuSkeleton"],"mappings":"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","file":"MainMenu-KNJDJFJX.js","sourcesContent":["import { useMemo, memo } from 'react';\nimport { useQuery } from '@tanstack/react-query';\nimport { useTwilight } from '../../providers/twilight-context';\nimport { useTranslation } from '../../providers/I18nProvider';\nimport { Link } from '../common';\nimport { menu } from '../../api/menu';\nimport type { MenuItem } from '../../types';\n\nconst SKELETON_ITEMS = [\n { id: 'first', width: 'w-16' },\n { id: 'second', width: 'w-20' },\n { id: 'third', width: 'w-24' },\n { id: 'fourth', width: 'w-16' },\n { id: 'fifth', width: 'w-20' },\n];\n\nconst MainMenuSkeleton = memo(function MainMenuSkeleton() {\n return (\n <nav>\n <ul className=\"main-menu\">\n {SKELETON_ITEMS.map(({ id, width }) => (\n <li key={id} className=\"!hidden lg:!block root-level\">\n <Link to=\"#\">\n <span className={`inline-block animate-pulse rounded bg-gray-200 h-4 ${width}`} />\n </Link>\n </li>\n ))}\n </ul>\n </nav>\n );\n});\n\nexport function MainMenu() {\n const { theme } = useTwilight();\n const { data: menus = [], isLoading } = useQuery(menu.queries.header());\n const { t } = useTranslation();\n\n const { visibleMenus, hiddenMenus } = useMemo(() => {\n const enableMore = theme?.settings?.is_more_button_enabled;\n const visibleCount = 7;\n\n if (enableMore && menus.length > visibleCount) {\n return {\n visibleMenus: menus.slice(0, visibleCount),\n hiddenMenus: menus.slice(visibleCount),\n };\n }\n\n return { visibleMenus: menus, hiddenMenus: [] };\n }, [menus, theme?.settings?.enable_more_menu, theme?.settings?.is_more_button_enabled]);\n\n if (isLoading) {\n return <MainMenuSkeleton />;\n }\n\n const renderItem = (item: MenuItem, isChild = false, inMoreMenu = false) => {\n const hasChildren = item.has_children && item.children && item.children.length > 0;\n const showDropdown = hasChildren && !inMoreMenu;\n\n return (\n <li\n key={item.id}\n className={`${isChild ? 'relative' : '!hidden lg:!block root-level'} ${hasChildren ? 'has-children' : ''}`}\n >\n <Link to={item.url}>\n <span>{item.title}</span>\n </Link>\n {showDropdown && (\n <div className=\"sub-menu w-56\">\n <ul>{item?.children?.map((child: MenuItem) => renderItem(child, true))}</ul>\n </div>\n )}\n </li>\n );\n };\n\n return (\n <nav>\n <ul className=\"main-menu\">\n {visibleMenus.map((item) => renderItem(item))}\n {hiddenMenus.length > 0 && (\n <li id=\"more-menu-dropdown\" className=\"!hidden lg:!block root-level has-children\">\n <Link to=\"#\">\n <span>{t('common.titles.more', 'More')}</span>\n </Link>\n <div className=\"sub-menu w-56\">\n <ul>{hiddenMenus.map((item) => renderItem(item, true, true))}</ul>\n </div>\n </li>\n )}\n </ul>\n </nav>\n );\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/navigation/MobileMenu.tsx"],"names":["MobileMenuSkeleton"],"mappings":"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","file":"MobileMenu-RXLYUAWL.js","sourcesContent":["import { useState, useCallback, useEffect, memo } from 'react';\nimport { useQuery } from '@tanstack/react-query';\nimport { useTwilight } from '../../providers/twilight-context';\nimport { useTranslation } from '../../providers/I18nProvider';\nimport { Drawer } from '../../components/drawer';\nimport { Link } from '../common';\nimport { menu } from '../../api/menu';\nimport type { MenuItem } from '../../types';\n\nexport interface MobileMenuProps {\n isOpen: boolean;\n onClose: () => void;\n}\n\nconst MOBILE_SKELETON_ITEMS = 5;\nconst SKELETON_WIDTHS = ['w-32', 'w-28', 'w-36', 'w-24', 'w-30'];\n\nconst MobileMenuSkeleton = memo(function MobileMenuSkeleton() {\n return (\n <ul className=\"divide-y divide-gray-100\">\n {Array.from({ length: MOBILE_SKELETON_ITEMS }, (_, i) => (\n <li key={i} className=\"py-4\">\n <span\n className={`inline-block animate-pulse rounded bg-gray-200 h-5 ${SKELETON_WIDTHS[i]}`}\n />\n </li>\n ))}\n </ul>\n );\n});\n\nexport function MobileMenu(props: MobileMenuProps) {\n if (!props.isOpen) return null;\n return <MobileMenuContent {...props} />;\n}\n\nfunction MobileMenuContent({ onClose }: MobileMenuProps) {\n const { theme } = useTwilight();\n const { data: menus = [], isLoading } = useQuery(menu.queries.header());\n const { t } = useTranslation();\n\n const [menuStack, setMenuStack] = useState<{ title: string; items: MenuItem[] }[]>([]);\n const [isAnimating, setIsAnimating] = useState(false);\n\n const currentLevel = menuStack[menuStack.length - 1] ?? { title: '', items: menus };\n const isRootLevel = menuStack.length === 0;\n\n const openSubmenu = useCallback((item: MenuItem) => {\n if (item.children && item.children.length > 0) {\n setIsAnimating(true);\n setMenuStack((prev) => [...prev, { title: item.title, items: item.children! }]);\n requestAnimationFrame(() => {\n setIsAnimating(false);\n });\n }\n }, []);\n\n const goBack = useCallback(() => {\n setIsAnimating(true);\n setMenuStack((prev) => prev.slice(0, -1));\n requestAnimationFrame(() => {\n setIsAnimating(false);\n });\n }, []);\n\n useEffect(() => {\n document.body.classList.add('menu-opened');\n return () => document.body.classList.remove('menu-opened');\n }, []);\n\n const getListAnimationClass = () => {\n if (isAnimating) {\n return theme.is_rtl ? 'translate-x-4 opacity-0' : '-translate-x-4 opacity-0';\n }\n return 'translate-x-0 opacity-100';\n };\n\n return (\n <>\n <Drawer\n isOpen\n onClose={onClose}\n size=\"md\"\n closeOnBackdropClick={true}\n preventBodyScroll={false}\n className=\"overflow-visible\"\n >\n <button\n type=\"button\"\n onClick={onClose}\n aria-label={t('common.buttons.close', 'Close')}\n className=\"absolute top-0 w-12 h-12 flex items-center justify-center bg-[#d35a51] text-white hover:bg-red-600 transition-colors z-50 ltr:-right-12 rtl:-left-12\"\n >\n <i className=\"sicon-cancel text-xl leading-none\"></i>\n </button>\n\n <Drawer.Header showCloseButton={false} onClose={onClose}>\n <div className=\"flex items-center gap-2 w-full\">\n {!isRootLevel && (\n <button\n type=\"button\"\n className=\"text-gray-500 hover:text-gray-800 transition-colors flex-shrink-0\"\n onClick={goBack}\n aria-label={t('common.buttons.back', 'Back')}\n >\n <i className=\"sicon-keyboard_arrow_left text-xl flex items-center justify-center\"></i>\n </button>\n )}\n <span className=\"font-bold text-lg truncate flex-1 text-center pr-6 rtl:pl-6 rtl:pr-0\">\n {isRootLevel ? t('blocks.header.main_menu', 'Menu') : currentLevel.title}\n </span>\n </div>\n </Drawer.Header>\n <Drawer.Body className=\"p-0 overflow-hidden\">\n <nav className=\"mobile-menu h-full overflow-y-auto\">\n {isLoading ? (\n <MobileMenuSkeleton />\n ) : (\n <ul\n className={`divide-y divide-gray-100 transition-all duration-200 ease-out ${getListAnimationClass()}`}\n >\n {currentLevel.items.map((item) => {\n const hasChildren =\n item.has_children && item.children && item.children.length > 0;\n\n return (\n <li key={item.id} className=\"mobile-menu-item\">\n {hasChildren ? (\n <button\n type=\"button\"\n className=\"flex items-center justify-between w-full py-4 hover:text-primary transition-colors text-start group\"\n onClick={() => openSubmenu(item)}\n >\n <span className=\"text-gray-800 group-hover:text-primary font-medium text-base\">\n {item.title}\n </span>\n <i className=\"sicon-keyboard_arrow_right rtl:rotate-180 text-gray-500 group-hover:text-primary text-lg flex items-center justify-center h-full\"></i>\n </button>\n ) : (\n <Link\n to={item.url}\n className=\"block w-full py-4 hover:text-primary transition-colors text-gray-800 font-medium text-base group\"\n onClick={onClose}\n >\n <span className=\"group-hover:translate-x-1 rtl:group-hover:-translate-x-1 inline-block transition-transform\">\n {item.title}\n </span>\n </Link>\n )}\n </li>\n );\n })}\n </ul>\n )}\n </nav>\n </Drawer.Body>\n </Drawer>\n </>\n );\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/routes/account/notifications/NotificationsPage.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,SAAS,gBAAA,CAAiB,EAAE,YAAA,EAAa,EAAmC;AAC1E,EAAA,uBACE,IAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,MAAM,YAAA,CAAa,GAAA;AAAA,MACnB,SAAA,EAAW,CAAA,gDAAA,EAAmD,YAAA,CAAa,OAAA,GAAU,+BAA+B,EAAE,CAAA,CAAA;AAAA,MAEtH,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,WAAU,2BAAA,EACd,QAAA,kBAAA,GAAA;AAAA,UAAC,GAAA;AAAA,UAAA;AAAA,YACC,WAAW,CAAA,yCAAA,EAA4C,CAAC,YAAA,CAAa,OAAA,GAAU,mCAAmC,EAAE,CAAA;AAAA;AAAA,SACrH,EACH,CAAA;AAAA,wBACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BAAA,EACb,QAAA,EAAA;AAAA,0BAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,sCAAA,EACb,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,IAAA,EAAA,EAAI,uBAAa,KAAA,EAAM,CAAA;AAAA,4BACxB,GAAA,CAAC,GAAA,EAAA,EAAG,QAAA,EAAA,YAAA,CAAa,IAAA,EAAK;AAAA,WAAA,EACxB,CAAA;AAAA,0BACA,IAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uCAAA,EACd,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,GAAA,EAAA,EAAE,WAAU,uDAAA,EAAwD,CAAA;AAAA,4BACrE,GAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,YAAA,CAAa,QAAA,EAAS;AAAA,WAAA,EAC/B;AAAA,SAAA,EACF;AAAA;AAAA;AAAA,GACF;AAEJ;AAEO,SAAS,iBAAA,CAAkB,EAAE,aAAA,EAAc,EAA2B;AAC3E,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,cAAA,EAAe;AAE7B,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,QAAA,EAAA,EAAS,MAAK,oCAAA,EAAqC,CAAA;AAAA,oBACpD,GAAA,CAAC,SAAI,SAAA,EAAU,yBAAA,EACZ,wBAAc,MAAA,GAAS,CAAA,mBACtB,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qCAAA,EACZ,wBAAc,GAAA,CAAI,CAAC,IAAA,qBAClB,GAAA,CAAC,gBAAA,EAAA,EAA+B,YAAA,EAAc,QAAvB,IAAA,CAAK,EAAwB,CACrD,CAAA,EACH,CAAA,mBAEA,GAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,iBAAA;AAAA,QACL,OAAA,EAAS,CAAA,CAAE,gCAAA,EAAkC,kBAAkB;AAAA;AAAA,KACjE,EAEJ,CAAA;AAAA,oBACA,GAAA,CAAC,QAAA,EAAA,EAAS,IAAA,EAAK,kCAAA,EAAmC;AAAA,GAAA,EACpD,CAAA;AAEJ","file":"NotificationsPage-QSF7S2PD.js","sourcesContent":["import { HookSlot } from '../../../hooks';\nimport { NoContent } from '../../../components/common';\nimport { useTranslation } from '../../../providers/I18nProvider';\nimport type { NotificationsPageProps, Notification } from './types';\n\nfunction NotificationItem({ notification }: { notification: Notification }) {\n return (\n <a\n href={notification.url}\n className={`s-notifications-item s-notifications-item-shadow${notification.is_read ? ' s-notifications-item-read' : ''}`}\n >\n <span className=\"s-notifications-item-icon\">\n <i\n className={`s-notifications-item-icon sicon-bell-ring${!notification.is_read ? ' s-notifications-item-icon-new' : ''}`}\n ></i>\n </span>\n <div className=\"s-notifications-item-content\">\n <div className=\"s-notifications-item-content-leading\">\n <h4>{notification.title}</h4>\n <p>{notification.body}</p>\n </div>\n <span className=\"s-notifications-item-content-trailing\">\n <i className=\"sicon-time s-notifications-item-content-trailing-icon\"></i>\n <span>{notification.time_ago}</span>\n </span>\n </div>\n </a>\n );\n}\n\nexport function NotificationsPage({ notifications }: NotificationsPageProps) {\n const { t } = useTranslation();\n\n return (\n <>\n <HookSlot name=\"customer:notifications.items.start\" />\n <div className=\"s-notifications-wrapper\">\n {notifications.length > 0 ? (\n <div className=\"s-notifications-container space-y-2\">\n {notifications.map((item: Notification) => (\n <NotificationItem key={item.id} notification={item} />\n ))}\n </div>\n ) : (\n <NoContent\n icon=\"sicon-bell-ring\"\n message={t('blocks.header.no_notifications', 'No notifications')}\n />\n )}\n </div>\n <HookSlot name=\"customer:notifications.items.end\" />\n </>\n );\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/routes/account/orders/single/OrderHeader.tsx","../src/routes/account/orders/single/OrderItemRow.tsx","../src/routes/account/orders/single/OrderActions.tsx","../src/routes/account/orders/single/OrderSections.tsx","../src/routes/account/orders/OrderSinglePage.tsx"],"names":["order","jsx","jsxs","SallaButton","Fragment"],"mappings":"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","file":"OrderSinglePage-CWBHU2C6.js","sourcesContent":["import { SallaButton } from '@salla.sa/twilight-components-react/button';\nimport { useDate, useNumber } from '../../../../hooks';\nimport { useTranslation } from '../../../../providers/I18nProvider';\nimport { useTwilight } from '../../../../providers/twilight-context';\nimport type { Order, TwigOrder } from './types';\n\nconst PRINT_WINDOW = 'toolbar=yes, scrollbars=yes, resizable=yes, width=900, height=700';\n\nfunction OrderStatus({ order, paymentExpired }: { order: Order; paymentExpired: boolean }) {\n const { t } = useTranslation();\n if (paymentExpired) {\n return <span className=\"text-red-500\">{t('pages.orders.pending_payment_expired')}</span>;\n }\n return (\n <span\n className=\"text-primary inline-flex items-center rtl:space-x-reverse space-x-1\"\n style={{ color: order.status.color }}\n >\n <i className={`mt-1 ${order.status.icon}`}></i>\n <span> {order.status.name}</span>\n </span>\n );\n}\n\n/** The date / status / links / print row at the top of the order page. */\nexport function OrderHeader({\n order,\n links,\n paymentExpired,\n}: {\n order: Order;\n links: TwigOrder['links'];\n paymentExpired: boolean;\n}) {\n const { t, direction } = useTranslation();\n const { store } = useTwilight();\n const { format: formatDate } = useDate();\n const { format: formatNumber } = useNumber();\n\n return (\n <table className=\"min-w-full rounded-md overflow-hidden\">\n <tbody>\n <tr className=\"bg-white overflow-hidden flex md:table-row flex-row md:flex-row flex-wrap md:flex-no-wrap py-1.5 md:py-0\">\n <td\n data-testid=\"store-order-status\"\n className=\"single-order-header-item w-full md:w-auto px-3 md:px-6 py-2 md:py-4 md:h-20 whitespace-nowrap text-sm \"\n >\n <div className=\"rtl:ml-2 ltr:mr-2 font-normal text-gray-400\">\n {t('pages.orders.date')}\n </div>\n <b>{formatNumber(formatDate(order.created_at.date))}</b>\n </td>\n\n <td className=\"single-order-header-item flex justify-between items-center w-full md:w-auto px-3 md:px-6 py-2 md:py-4 md:h-20 whitespace-nowrap text-sm \">\n <OrderStatus order={order} paymentExpired={paymentExpired} />\n\n <div className=\"flex items-center justify-between\">\n {order.type === 'quote' && (\n <span className=\"text-red-500 ml-4\">\n {t('pages.orders.your_order_is_under_review')}\n </span>\n )}\n\n {!!links?.length && (\n <div className=\"flex space-x-2 rtl:space-x-reverse text-start flex-none px-2\">\n {links.map((link) => (\n <a\n key={link.url}\n href={link.url}\n className=\"text-primary-reverse bg-primary px-4 py-2 rounded\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {link.label}{' '}\n <i\n className={\n direction === 'rtl' ? 'sicon-arrow-up-left' : 'sicon-arrow-up-right'\n }\n ></i>\n </a>\n ))}\n </div>\n )}\n {/* Twig's `order.print_url()`; `urls.receipt` is the buyer's bank-transfer image. */}\n <SallaButton\n fill=\"outline\"\n size=\"small\"\n onClick={() =>\n window.open(\n `${(store?.url ?? '').replace(/\\/$/, '')}/account/orders/${order.id}/print`,\n '_blank',\n PRINT_WINDOW\n )\n }\n >\n <i className=\"sicon-printer2 v-align\"></i> {t('pages.orders.print')}\n </SallaButton>\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n );\n}\n","import { createElement } from 'react';\nimport { SallaOrderDetails } from '@salla.sa/twilight-components-react/order-details';\nimport { useDate, useNumber } from '../../../../hooks';\nimport { useTranslation } from '../../../../providers/I18nProvider';\nimport type { FormatMoney, OrderItem, TwigItem } from './types';\n\nfunction ItemAttachments({ item }: { item: OrderItem }) {\n const { t } = useTranslation();\n if (!item.attachments?.length) return null;\n return (\n <div className=\"flow-root rounded-md px-4 border border-gray-200\">\n <dl className=\"text-sm text-dark divide-y divide-border-color\">\n {item.attachments.map((attachment) => (\n <div\n key={`${attachment.type}:${attachment.url}`}\n className=\"py-3.5 md:flex items-center justify-between\"\n >\n <dt className=\"mb-2 md:mb-0\">{t('pages.products.attachments')}</dt>\n <dd\n className={`font-medium ${attachment.type === 'image' ? 'text-gray-900' : 'text-xs'}`}\n >\n {attachment.type === 'image' ? (\n <div className=\"flex rtl:space-x-reverse space-x-2.5\">\n <a href={attachment.url} target=\"_blank\" rel=\"noreferrer\">\n <img\n className=\"h-7 w-7 object-cover rounded-md\"\n src={attachment.url}\n alt={item.name}\n />\n </a>\n </div>\n ) : (\n <a href={attachment.url}>{t('pages.orders.file_url')}</a>\n )}\n </dd>\n </div>\n ))}\n </dl>\n </div>\n );\n}\n\n/** A date-only day (`2026-09-20`) as that calendar day wherever it is formatted, not UTC midnight. */\nfunction calendarDay(day: unknown): Date | string {\n const match = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(String(day));\n return match ? new Date(+match[1], +match[2] - 1, +match[3]) : String(day);\n}\n\n/** Twig's booking block: the location and each reservation's day and time. */\nfunction ItemReservations({ item, productType }: { item: OrderItem; productType?: string }) {\n const { t } = useTranslation();\n const { format: formatDate } = useDate();\n const { format: formatNumber, useArabicNumerals } = useNumber();\n const reservations = item.product_reservations ?? [];\n if (productType !== 'booking' || !reservations.length) return null;\n const time = (value: unknown) =>\n useArabicNumerals\n ? formatNumber(String(value)).replace(/PM/g, 'م').replace(/AM/g, 'ص')\n : String(value);\n\n return (\n <>\n {item.booking_location && (\n <ul className=\"font-medium text-xs text-gray-600\">\n <li className=\"py-1 flex justify-between items-baseline\">\n <span className=\"mt-5 mb-3.5 text-sm font-bold\">{t('common.elements.location')}</span>\n <span className=\"text-unicode\">{item.booking_location}</span>\n </li>\n </ul>\n )}\n <h2 className=\"mt-5 mb-3.5 text-sm font-bold\">\n {reservations.length > 1 ? t('pages.cart.reservations') : t('pages.cart.item_options')}\n </h2>\n <div className=\"rounded-md p-4 border border-gray-200 mb-2\">\n <ul className=\"font-medium text-xs text-gray-600\">\n {reservations.map((reservation) => (\n <li key={`${reservation.day}:${reservation.from}`} className=\"py-1\">\n <span className=\"text-unicode\">\n {formatNumber(formatDate(calendarDay(reservation.day)))}\n {reservation.from_timestamp\n ? ` (${time(reservation.from)} - ${time(reservation.to)})`\n : ''}\n </span>\n </li>\n ))}\n </ul>\n </div>\n </>\n );\n}\n\nfunction ItemSummary({\n item,\n twigItem,\n money,\n currency,\n}: {\n item: OrderItem;\n twigItem?: TwigItem;\n money: FormatMoney;\n currency: string;\n}) {\n const { t } = useTranslation();\n const product = twigItem?.product;\n const image = product?.image?.url || item.image || item.thumbnail;\n const price = item.amounts.amount ?? { amount: 0, currency };\n const priceText = money(price.amount, price.currency);\n const total = item.amounts.total ?? { amount: 0, currency };\n\n return (\n <div className=\"mb-5 last:mb-0\">\n {product ? (\n <div className=\"flex rtl:space-x-reverse space-x-5 mb-4\">\n <a href={product.url} className=\"shrink-0\">\n <img\n src={image || '/images/placeholder.png'}\n alt={item.name}\n className={`w-18 h-14 object-${image ? 'cover' : 'contain'} rounded-md`}\n />\n </a>\n <div>\n <a\n href={product.url}\n className=\"block leading-5 mb-1.5 md:text-base font-semibold transition-colors text-gray-500 hover:text-primary\"\n >\n {item.name}\n </a>\n <b>{priceText}</b>\n </div>\n </div>\n ) : (\n <div className=\"w-full flex justify-between text-sm py-2.5\">\n <span className=\"w-40 inline-block font-normal\">{item.name}</span>\n <b>{priceText}</b>\n </div>\n )}\n\n <div className=\"w-full flex justify-between text-sm py-2.5\">\n <span className=\"w-40 inline-block font-normal\">{t('pages.products.quantity')}</span>\n <b>{item.quantity}</b>\n </div>\n <div className=\"flex justify-between text-sm py-2.5\">\n <span className=\" w-40 inline-block font-normal\">{t('pages.products.price')}</span>\n <b>{priceText}</b>\n </div>\n <div className=\"flex justify-between text-sm py-2.5\">\n <span className=\"w-40 inline-block font-normal\">{t('pages.orders.total')}</span>\n <b>{money(total.amount, total.currency)}</b>\n </div>\n </div>\n );\n}\n\n/** One item of the order page (the body of `{% for item in package.items %}`). */\nexport function OrderItemRow({\n item,\n twigItem,\n money,\n currency,\n}: {\n item: OrderItem;\n twigItem?: TwigItem;\n money: FormatMoney;\n currency: string;\n}) {\n const { t } = useTranslation();\n const productId = twigItem?.product?.id;\n\n return (\n <div\n data-testid={`store-order-item-${item.id}`}\n data-order-item-id={item.id}\n data-order-item-product-id={productId}\n className=\"order-item bg-white p-5 border-b border-gray-100 first:rounded-t-md last:rounded-b-md last:border-none\"\n >\n <ItemSummary item={item} twigItem={twigItem} money={money} currency={currency} />\n\n {item.availability_date && (\n <div className=\"flex gap-2 text-sm py-2.5 text-blue-500\">\n <i className=\"sicon-info\"></i>\n <span>\n {t('pages.products.expected_to_be')}:{' '}\n <b>{String(item.availability_date).slice(0, 10)}</b>\n </span>\n </div>\n )}\n\n <ItemReservations item={item} productType={twigItem?.product?.type ?? item.product?.type} />\n\n <SallaOrderDetails orderDetails={JSON.stringify(twigItem ?? item)} />\n\n {item.note && (\n <p className=\"mt-3 text-sm text-gray-500\">\n <span>{t('common.elements.note')} : </span>\n {item.note}\n </p>\n )}\n\n <ItemAttachments item={item} />\n\n {/* No React wrapper yet; Twilight upgrades it (adds `hydrated`) before React hydrates. */}\n {productId &&\n createElement('salla-review-order-item', {\n 'product-id': productId,\n suppressHydrationWarning: true,\n })}\n </div>\n );\n}\n","import { useState } from 'react';\nimport { SallaButton } from '@salla.sa/twilight-components-react/button';\nimport { SallaModal } from '@salla.sa/twilight-components-react/modal';\nimport { useIsClient, useUser } from '../../../../hooks';\nimport { useAsyncFn } from '../../../../hooks/useAsyncFn';\nimport { useTranslation } from '../../../../providers/I18nProvider';\nimport { useLocation, useNavigate } from '../../../../providers/NavigationProvider';\nimport type { Order } from './types';\n\nfunction ConfirmModal({\n visible,\n onVisibleChange,\n title,\n subTitle,\n iconStyle,\n confirmColor,\n onConfirm,\n busy,\n}: {\n visible: boolean;\n onVisibleChange: (visible: boolean) => void;\n title: string;\n subTitle: string;\n iconStyle: 'success' | 'error';\n confirmColor?: 'danger';\n onConfirm: () => void;\n busy: boolean;\n}) {\n const { t } = useTranslation();\n // The modal wrapper renders only in the browser, so mount after hydration to match the server.\n const isClient = useIsClient();\n if (!isClient) return null;\n return (\n <SallaModal\n width=\"sm\"\n visible={visible}\n onModalVisibilityChanged={(e) => onVisibleChange(Boolean(e.detail))}\n {...{ 'modal-title': title }}\n subTitle={subTitle}\n iconStyle={iconStyle}\n >\n <div slot=\"footer\" className=\"grid grid-cols-2 gap-3\">\n <SallaButton\n width=\"wide\"\n color={confirmColor}\n className=\"w-full cursor-pointer\"\n onClick={onConfirm}\n disabled={busy}\n >\n {t('common.elements.ok')}\n </SallaButton>\n <SallaButton\n className=\"w-full\"\n fill=\"outline\"\n color=\"light\"\n onClick={() => onVisibleChange(false)}\n disabled={busy}\n >\n {t('common.elements.cancel')}\n </SallaButton>\n </div>\n </SallaModal>\n );\n}\n\nfunction PaymentOrReorder({\n order,\n paymentExpired,\n canReorder,\n onReorder,\n busy,\n}: {\n order: Order;\n paymentExpired: boolean;\n canReorder: boolean;\n onReorder: () => void;\n busy: boolean;\n}) {\n const { t } = useTranslation();\n if (order.actions.payable) {\n return paymentExpired || !order.urls.checkout ? (\n <span className=\"text-red-500\">{t('pages.orders.pending_payment_expired')}</span>\n ) : (\n <SallaButton width=\"wide\" href={order.urls.checkout}>\n <i className=\"sicon sicon-wallet rtl:ml-2 ltr:mr-2\"></i>\n <span>{t('pages.orders.finish_payment')}</span>\n </SallaButton>\n );\n }\n if (!canReorder) return null;\n return (\n <>\n <div className=\"text-sm\">\n <h3 className=\"font-bold text-lg leading-none mb-1\">{t('pages.orders.reorder')}</h3>\n <p className=\"text-gray-500\">{t('pages.orders.reorder_description')}</p>\n </div>\n <SallaButton\n data-testid=\"store-order-reorder-btn\"\n shape=\"link\"\n onClick={onReorder}\n disabled={busy}\n >\n <i className=\"sicon sicon-rotate rtl:ml-2 ltr:mr-2\"></i>\n <span>{t('pages.orders.reorder')}</span>\n </SallaButton>\n </>\n );\n}\n\n/** The \"Reorder & Cancel\" card, its pending-payment state and the two confirmations. */\nexport function OrderActions({ order, paymentExpired }: { order: Order; paymentExpired: boolean }) {\n const { t } = useTranslation();\n // Token-based, so the server and the first client render agree (the user query loads later).\n const { isLoggedIn } = useUser();\n const navigate = useNavigate();\n const location = useLocation();\n const [showReorder, setShowReorder] = useState(false);\n const [showCancel, setShowCancel] = useState(false);\n const { reorderable, cancellable, payable } = order.actions;\n const canReorder = isLoggedIn && reorderable;\n\n const [reorderState, handleReorder] = useAsyncFn(async () => {\n await window.salla?.order.createCartFromOrder(Number(order.id));\n setShowReorder(false);\n navigate('/cart');\n }, [navigate, order.id]);\n\n const [cancelState, handleCancel] = useAsyncFn(async () => {\n await window.salla?.order.cancel(Number(order.id));\n setShowCancel(false);\n navigate(location.pathname, { replace: true });\n }, [navigate, order.id, location.pathname]);\n\n if (!reorderable && !cancellable && !payable) return null;\n\n return (\n <>\n <div className=\"bg-white rounded-md p-5 divide-y divide-border-color space-y-4\">\n {(reorderable || payable) && (\n <div className={payable ? 'flex-center' : 'center-between'}>\n <PaymentOrReorder\n order={order}\n paymentExpired={paymentExpired}\n canReorder={!!canReorder}\n onReorder={() => setShowReorder(true)}\n busy={reorderState.loading}\n />\n </div>\n )}\n\n {cancellable && (\n <div className=\"center-between pt-4\">\n <div className=\"text-sm\">\n <h3 className=\"font-bold text-lg leading-none mb-1\">{t('pages.orders.cancel')}</h3>\n <p className=\"text-gray-500\">{t('pages.order.order_cancelation_desc')}</p>\n </div>\n <SallaButton\n data-testid=\"store-order-cancel-btn\"\n shape=\"link\"\n color=\"danger\"\n onClick={() => setShowCancel(true)}\n disabled={cancelState.loading}\n >\n <i className=\"sicon sicon-cancel-circle rtl:ml-2 ltr:mr-2\"></i>\n <span>{t('pages.orders.cancel')}</span>\n </SallaButton>\n </div>\n )}\n </div>\n\n {/* Always mounted: salla-modal moves itself under <body> and opens from `visible`. */}\n {canReorder && (\n <ConfirmModal\n visible={showReorder}\n onVisibleChange={setShowReorder}\n title={t('pages.orders.reorder')}\n subTitle={t('pages.orders.reorder_confirmation')}\n iconStyle=\"success\"\n onConfirm={handleReorder}\n busy={reorderState.loading}\n />\n )}\n {cancellable && (\n <ConfirmModal\n visible={showCancel}\n onVisibleChange={setShowCancel}\n title={t('common.elements.warning')}\n subTitle={t('pages.orders.cancel_confirmation')}\n iconStyle=\"error\"\n confirmColor=\"danger\"\n onConfirm={handleCancel}\n busy={cancelState.loading}\n />\n )}\n </>\n );\n}\n","import { SallaButton } from '@salla.sa/twilight-components-react/button';\nimport { SallaRatingStars } from '@salla.sa/twilight-components-react/rating-stars';\nimport { useTranslation } from '../../../../providers/I18nProvider';\nimport { useQuery } from '@tanstack/react-query';\nimport { order as orderApi } from '../../../../api/order';\nimport type { FormatMoney, Order, TwigOrder, TwigRating } from './types';\n\nfunction RatingAction({\n disabled,\n endedKey,\n color,\n fill,\n icon,\n onClick,\n}: {\n disabled: boolean;\n endedKey: string;\n color: 'dark' | 'danger';\n fill: 'outline';\n icon: string;\n onClick: () => void;\n}) {\n const { t } = useTranslation();\n return (\n <div className=\"tooltip-toggle tooltip-toggle--hover icon-trigger mobile-shifted\">\n {disabled && (\n <div className=\"tooltip-content shadow-md rounded\">\n <small> {t(endedKey)}.</small>\n </div>\n )}\n <SallaButton\n loaderPosition=\"center\"\n disabled={disabled}\n shape=\"icon\"\n fill={fill}\n color={color}\n size=\"medium\"\n onClick={disabled ? undefined : onClick}\n >\n <i className={`${icon} text-xl`}></i>\n </SallaButton>\n </div>\n );\n}\n\n/** A store or shipping rating the customer left, with its edit / delete buttons. */\nexport function RatingSection({\n title,\n rating,\n type,\n allowUpdate,\n}: {\n title: string;\n rating: TwigRating;\n type: 'store' | 'shipping';\n allowUpdate: boolean;\n}) {\n const dispatch = (event: string, payload: Record<string, unknown>) =>\n window.salla?.event?.dispatch(event, payload);\n const locked = !rating.can_update;\n\n return (\n <section className=\"flex justify-between items-start bg-white p-5 rounded-md\">\n <div>\n <h2 className=\"text-lg font-bold mb-5\">{title}</h2>\n <p className=\"mb-2\">{rating.content}</p>\n <SallaRatingStars withLabel value={rating.stars} />\n </div>\n <div className=\"rating-actions\">\n {allowUpdate && (\n <>\n <RatingAction\n disabled={locked}\n endedKey=\"pages.order.edit_period_ended\"\n color=\"dark\"\n fill=\"outline\"\n icon=\"sicon-format-border-color\"\n onClick={() => dispatch('rating::edit', { type, feedback_id: String(rating.id) })}\n />\n <RatingAction\n disabled={locked}\n endedKey=\"pages.order.delete_period_ended\"\n color=\"danger\"\n fill=\"outline\"\n icon=\"sicon-trash-2\"\n onClick={() => dispatch('rating::delete', { feedback_id: String(rating.id) })}\n />\n </>\n )}\n </div>\n </section>\n );\n}\n\ninterface Shipment {\n id?: number;\n name?: string;\n logo?: string;\n number?: string;\n tracking?: string | null;\n}\n\nfunction ShippingRow({ shipment }: { shipment: Shipment }) {\n const { t } = useTranslation();\n // Twig treats the string \"0\" as empty.\n const hasNumber = !!shipment.number && shipment.number !== '0';\n\n return (\n <div className=\"flex flex-col md:flex-row justify-between md:items-center bg-white px-5 py-3 border-b border-gray-100 rounded-t-md text-sm space-y-4 md:space-y-0\">\n <div className=\"flex items-center space-x-2 rtl:space-x-reverse\">\n {shipment.logo && (\n <img src={shipment.logo} className=\"max-w-16 max-h-8\" alt={shipment.name} />\n )}\n <span>{shipment.name}</span>\n </div>\n <div className=\"flex space-x-5 rtl:space-x-reverse\">\n {hasNumber && (\n <span>\n {t('pages.orders.shipment_no')}: <span className=\"font-bold\">{shipment.number}</span>\n </span>\n )}\n {shipment.tracking && (\n <a\n className=\"font-bold text-primary hover:opacity-80 flex items-center\"\n href={shipment.tracking}\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n <span className=\"sicon-shipping rtl:ml-1 ltr:mr-1\"></span>\n {t('pages.orders.tracking_url')}\n </a>\n )}\n </div>\n </div>\n );\n}\n\n/**\n * The shipping company rows above the items (Twig's per-package titles). The order carries only\n * its first shipment, so the rest come from the shipments endpoint.\n */\nexport function ShippingHeader({ twig, order }: { twig: TwigOrder; order: Order }) {\n const { data } = useQuery({\n ...orderApi.queries.shipments(String(order.id)),\n enabled: order.features.shippable && !twig.is_pickable,\n });\n if (twig.is_pickable) return null;\n\n const shipments: Shipment[] = data?.length\n ? data.map((shipment) => ({ ...shipment, tracking: shipment.tracking_url }))\n : twig.shipping\n ? [{ ...twig.shipping, tracking: twig.shipping.tracing_link }]\n : [];\n\n return (\n <>\n {shipments.map((shipment) => (\n <ShippingRow key={shipment.id ?? shipment.name} shipment={shipment} />\n ))}\n </>\n );\n}\n\n/** An option's price as a number: the API sends a number, `{ amount }` or an empty array. */\nconst optionPrice = (price: unknown): number =>\n typeof price === 'number' ? price : ((price as { amount?: number } | null)?.amount ?? 0);\n\n/** The order-level options table (`order.options`). */\nexport function OrderOptionsTable({\n options,\n money,\n currency,\n}: {\n options: NonNullable<TwigOrder['options']>;\n money: FormatMoney;\n currency: string;\n}) {\n const { t } = useTranslation();\n return (\n <div className=\"bg-white p-5 rounded-md\">\n <h2 className=\"mb-3.5 text-sm font-bold\">{t('pages.checkout.cart_options_title')}</h2>\n <table className=\"table-fixed w-full border border-gray-200\">\n <thead>\n <tr className=\"border-b border-gray-200\">\n <th scope=\"col\" className=\"p-3 text-start text-sm\">\n {t('pages.order.option_name')}\n </th>\n <th scope=\"col\" className=\"p-3 text-sm\">\n {t('pages.order.option_content')}\n </th>\n <th scope=\"col\" className=\"p-3 rtl:text-left ltr:text-right text-sm\">\n {t('pages.products.price')}\n </th>\n </tr>\n </thead>\n <tbody>\n {options.flatMap((option) =>\n (option.options ?? []).map((value) => (\n <tr\n key={`${value.name}:${value.value}`}\n className=\"border-b last:border-b-0 border-gray-200\"\n >\n <td className=\"text-sm p-3\">{value.name} :</td>\n <td className=\"text-center p-3 font-medium text-xs\">{value.value}</td>\n <td className=\"rtl:text-start ltr:text-end p-3 font-medium text-xs\">\n <strong>{money(optionPrice(value.price), currency)}</strong>\n </td>\n </tr>\n ))\n )}\n </tbody>\n </table>\n </div>\n );\n}\n","import { SallaButton } from '@salla.sa/twilight-components-react/button';\nimport { SallaRatingModal } from '@salla.sa/twilight-components-react/rating-modal';\nimport { SallaEditOrderButton } from '@salla.sa/twilight-components-react/edit-order-button';\nimport { SallaOrderBranch } from '@salla.sa/twilight-components-react/order-branch';\nimport { SallaOrderTotalsCard } from '@salla.sa/twilight-components-react/order-totals-card';\nimport { HookSlot, usePageConfig } from '../../../hooks';\nimport { useMoney } from '../../../hooks/useMoney';\nimport { useTranslation } from '../../../providers/I18nProvider';\nimport { useTwilight } from '../../../providers/twilight-context';\nimport type { OrderSinglePageProps } from '../types';\nimport { OrderHeader } from './single/OrderHeader';\nimport { OrderItemRow } from './single/OrderItemRow';\nimport { OrderActions } from './single/OrderActions';\nimport { OrderOptionsTable, RatingSection, ShippingHeader } from './single/OrderSections';\nimport type { TwigOrder } from './single/types';\n\n/** Twig's `inner_title` extras: the gift tag and the edit-order button. */\nfunction TitleRow({ order }: { order: OrderSinglePageProps['order'] }) {\n const { t } = useTranslation();\n return (\n <div className=\"flex justify-between items-center\">\n {order.type === 'buy_as_gift' || order.source?.type === 'buy_as_gift' ? (\n <span className=\"inline-block text-primary\">\n <i className=\"sicon-gift-sharing\"></i>&nbsp;{t('pages.orders.gift_tag')}\n </span>\n ) : (\n <span />\n )}\n <div className=\"flex items-center gap-3 flex-wrap\">\n <SallaEditOrderButton data-testid=\"store-order-edit-btn\" orderId={String(order.id)} />\n </div>\n </div>\n );\n}\n\nfunction RefundMessage({ message }: { message?: string }) {\n if (!message) return null;\n return (\n <div className=\"min-w-full rounded-md overflow-hidden\">\n <div className=\"bg-white flex items-center gap-1 rounded-md px-3 py-5 md:px-5\">\n <i className=\"sicon-refund h-6 w-6\"></i>\n <p className=\"font-medium text-base\" dangerouslySetInnerHTML={{ __html: message }} />\n </div>\n </div>\n );\n}\n\nfunction RatingNotices({ twig }: { twig: TwigOrder }) {\n const { t } = useTranslation();\n const { store } = useTwilight();\n const settings = store?.settings?.rating;\n const rated = !!twig.rating && !Array.isArray(twig.rating);\n\n return (\n <>\n {settings?.allow_update && rated && (\n <div className=\"flex items-start gap-2 bg-blue-50 border border-blue-200 text-blue-500 px-2 py-3 rounded-md text-sm\">\n <i className=\"sicon-info\"></i>\n <p>\n {t('pages.order.can_edit_or_delete_your_review_within')} {settings.update_period}{' '}\n {t('pages.order.days_since_added')}.\n </p>\n </div>\n )}\n {twig.can_rate && (\n <div className=\"rating-header gradient-bg center-between\">\n <div>\n <h2 className=\"font-bold mb-1\">{t('pages.order.order_rating_title')}</h2>\n <p className=\"text-sm\">{t('pages.order.order_rating_message')}</p>\n </div>\n <SallaButton\n data-testid=\"store-order-rate-btn\"\n color=\"light\"\n className=\"btn--rounded-full !text-primary\"\n onClick={() => window.salla?.event?.dispatch('rating::open')}\n >\n {t('pages.rating.rate')}\n </SallaButton>\n </div>\n )}\n </>\n );\n}\n\nfunction OrderRatings({ twig }: { twig: TwigOrder }) {\n const { t } = useTranslation();\n const { store } = useTwilight();\n const allowUpdate = !!store?.settings?.rating?.allow_update;\n const rating = Array.isArray(twig.rating) ? undefined : twig.rating;\n\n return (\n <>\n {rating?.store?.stars ? (\n <RatingSection\n title={t('pages.rating.rate_the_store')}\n rating={rating.store}\n type=\"store\"\n allowUpdate={allowUpdate}\n />\n ) : null}\n {rating?.shipping?.stars ? (\n <RatingSection\n title={t('pages.rating.rate_shipping')}\n rating={rating.shipping}\n type=\"shipping\"\n allowUpdate={allowUpdate}\n />\n ) : null}\n </>\n );\n}\n\n/**\n * The order page as the Twig storefront renders it (Raed's `pages/customer/orders/single.twig`).\n * The markup and the Twilight components read the order in Twig's shape (`componentsOrder`);\n * `order` supplies what that shape lacks and Twig computed on the server: the actions and the\n * receipt and payment URLs.\n */\nexport function OrderSinglePage({ order, page, componentsOrder }: OrderSinglePageProps) {\n // The order components read the order id from `salla.config.page.id`, which the router\n // only sets on client-side navigations — seed it so a direct load works too.\n usePageConfig(page);\n const { store } = useTwilight();\n const { format } = useMoney();\n const twig = (componentsOrder ?? { items: [] }) as unknown as TwigOrder;\n const paymentExpired =\n order.actions.payable && (order.payment?.pending_payment_ends_at ?? 0) === 0;\n const money = (amount: number, currency?: string) => format(amount, { currency });\n\n return (\n <div className=\"space-y-4\">\n <TitleRow order={order} />\n\n <HookSlot name=\"customer:orders.single.details.start\" />\n\n <OrderHeader order={order} links={twig.links} paymentExpired={paymentExpired} />\n\n {twig.is_pickable && <SallaOrderBranch data-testid=\"store-order-branch\" stackCards />}\n\n <RefundMessage message={order.refund_message} />\n\n <RatingNotices twig={twig} />\n\n <div className=\"overflow-hidden space-y-5\">\n <div className=\"shipping-orders\">\n <ShippingHeader twig={twig} order={order} />\n {order.items.map((item, index) => (\n <OrderItemRow\n key={item.id}\n item={item}\n twigItem={twig.items[index]}\n money={money}\n currency={order.currency}\n />\n ))}\n </div>\n\n {!!twig.options?.length && (\n <OrderOptionsTable options={twig.options} money={money} currency={order.currency} />\n )}\n </div>\n\n {componentsOrder && (\n <SallaOrderTotalsCard\n data-testid=\"store-order-totals\"\n order={JSON.stringify(componentsOrder)}\n />\n )}\n\n <OrderActions order={order} paymentExpired={paymentExpired} />\n\n <OrderRatings twig={twig} />\n\n <HookSlot name=\"customer:orders.single.details.end\" />\n\n {(twig.can_rate || store?.settings?.rating?.allow_update) && (\n <SallaRatingModal data-testid=\"store-order-rating-modal\" />\n )}\n </div>\n );\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/routes/account/orders/OrdersPage.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMO,SAAS,UAAA,CAAW,EAAE,MAAA,EAAQ,KAAA,EAAM,EAAoB;AAC7D,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,cAAA,EAAe;AAE7B,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,QAAA,EAAA,EAAS,MAAK,mCAAA,EAAoC,CAAA;AAAA,IAClD,OAAO,MAAA,mBACN,GAAA;AAAA,MAAC,WAAA;AAAA,MAAA;AAAA,QACC,aAAA,EAAY,mBAAA;AAAA,QAEZ,QAAQ,KAAA,EAAO,MAAA,GAAU,EAAE,MAAA,EAAQ,KAAA,CAAM,QAAO,GAAc;AAAA;AAAA,wBAGhE,IAAA,CAAC,KAAA,EAAA,EAAI,aAAA,EAAY,oBAAA,EAAqB,WAAU,wBAAA,EAC9C,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,GAAA,EAAA,EAAE,WAAU,uBAAA,EAAwB,CAAA;AAAA,sBACrC,GAAA,CAAC,GAAA,EAAA,EAAG,QAAA,EAAA,CAAA,CAAE,yBAAyB,CAAA,EAAE;AAAA,KAAA,EACnC,CAAA;AAAA,oBAEF,GAAA,CAAC,QAAA,EAAA,EAAS,IAAA,EAAK,iCAAA,EAAkC;AAAA,GAAA,EACnD,CAAA;AAEJ","file":"OrdersPage-L76IEAXR.js","sourcesContent":["import { SallaOrders } from '@salla.sa/twilight-components-react/orders';\nimport { HookSlot } from '../../../hooks';\nimport { useTranslation } from '../../../providers/I18nProvider';\nimport type { OrdersPageProps } from './types';\n\n/** The orders list as the Twig storefront renders it: `<salla-orders>` loads and shows it. */\nexport function OrdersPage({ orders, query }: OrdersPageProps) {\n const { t } = useTranslation();\n\n return (\n <>\n <HookSlot name=\"customer:orders.index.items.start\" />\n {orders.length ? (\n <SallaOrders\n data-testid=\"store-orders-list\"\n // Typed as status ids; the API also takes the `pending` slug the loader uses.\n params={query?.status ? ({ status: query.status } as never) : undefined}\n />\n ) : (\n <div data-testid=\"store-orders-empty\" className=\"no-content-placeholder\">\n <i className=\"sicon-packed-box icon\"></i>\n <p>{t('pages.orders.non_orders')}</p>\n </div>\n )}\n <HookSlot name=\"customer:orders.index.items.end\" />\n </>\n );\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/routes/page/PageSingle.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;AAMO,SAAS,UAAA,CAAW,EAAE,IAAA,EAAK,EAAoB;AACpD,EAAA,MAAM,EAAE,WAAA,EAAY,GAAI,WAAA,EAAY;AAGpC,EAAA,MAAM,YAAA,GAAe,QAAQ,MAAM;AACjC,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,EAAS,OAAO,EAAA;AAE1B,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,SAAA,EAAW,GAAG,CAAA;AAAA,EAC5C,CAAA,EAAG,CAAC,IAAA,CAAK,OAAO,CAAC,CAAA;AAEjB,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAoB,SAAA,EAAU,WAAA,EAC7B,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,kBAAW,IAAA,EAAY,CAAA;AAAA,wBAEvB,KAAA,EAAA,EAAI,SAAA,EAAU,uBACb,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,0FAAA,EACb,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,yBAAA,EAA2B,QAAA,EAAA,IAAA,CAAK,KAAA,EAAM,CAAA;AAAA,MACnD,YAAA,wBACE,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAgB,uBAAA,EAAyB,EAAE,MAAA,EAAQ,YAAA,EAAa,EAAG,CAAA;AAAA,MAEnF,IAAA,CAAK,EAAA,oBACJ,GAAA,CAAC,aAAA,EAAA,EAAgC,MAAA,EAAQ,MAAA,CAAO,IAAA,CAAK,EAAE,CAAA,EAAG,IAAA,EAAM,MAAA,EAAA,EAA5C,WAA2D;AAAA,KAAA,EAEnF,CAAA,EACF;AAAA,GAAA,EAAA,EAbQ,KAAK,IAcf,CAAA;AAEJ","file":"PageSingle-BUAZBPIQ.js","sourcesContent":["import { useMemo } from 'react';\nimport { SallaComments } from '@salla.sa/twilight-components-react/comments';\nimport type { PageSingleProps } from './types';\nimport { Breadcrumb } from '../../components/common';\nimport { useComments } from '../../hooks/useComments';\n\nexport function PageSingle({ page }: PageSingleProps) {\n const { commentsKey } = useComments();\n\n // Clean content articles - matches app.js commonThings()\n const cleanContent = useMemo(() => {\n if (!page.content) return '';\n // Replace &nbsp; entities with regular spaces\n return page.content.replace(/&nbsp;/g, ' ');\n }, [page.content]);\n\n return (\n <div key={page.slug} className=\"container\">\n <Breadcrumb page={page} />\n\n <div className=\"flex justify-center\">\n <div className=\"content content--single-page w-full lg:w-10/12 bg-white rounded p-6 lg:p-8 mt-4 lg:mt-12\">\n <h1 className=\"font-bold text-2xl mb-6\">{page.title}</h1>\n {cleanContent && (\n <div className=\"content-entry\" dangerouslySetInnerHTML={{ __html: cleanContent }} />\n )}\n {page.id && (\n <SallaComments key={commentsKey} itemId={Number(page.id)} type={'page' as any} />\n )}\n </div>\n </div>\n </div>\n );\n}\n"]}