@salla.sa/twilight-theme-engine 1.0.129 → 1.0.130

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 (262) hide show
  1. package/dist/{AddToCartForm-I2SZGGZK.js → AddToCartForm-ZJIIU4I4.js} +3 -3
  2. package/dist/{AddToCartForm-I2SZGGZK.js.map → AddToCartForm-ZJIIU4I4.js.map} +1 -1
  3. package/dist/{BlogAuthorPage-JHZHLSIA.js → BlogAuthorPage-DNZSR42D.js} +18 -17
  4. package/dist/BlogAuthorPage-DNZSR42D.js.map +1 -0
  5. package/dist/{BlogCategoryPage-F4264MQG.js → BlogCategoryPage-AC4DDQ7N.js} +18 -17
  6. package/dist/BlogCategoryPage-AC4DDQ7N.js.map +1 -0
  7. package/dist/{BlogPage-3TELFUFM.js → BlogPage-F5OY24RP.js} +16 -15
  8. package/dist/BlogPage-F5OY24RP.js.map +1 -0
  9. package/dist/{BlogSinglePage-QBADHXXZ.js → BlogSinglePage-YXC5WU3N.js} +16 -15
  10. package/dist/BlogSinglePage-YXC5WU3N.js.map +1 -0
  11. package/dist/{BlogTagPage-WEP37KDY.js → BlogTagPage-6QQ2CF2B.js} +18 -17
  12. package/dist/BlogTagPage-6QQ2CF2B.js.map +1 -0
  13. package/dist/{BrandsPage-EENWKAIY.js → BrandsPage-UXWNTTT3.js} +17 -16
  14. package/dist/BrandsPage-UXWNTTT3.js.map +1 -0
  15. package/dist/{Breadcrumb-A2CNX5VU.js → Breadcrumb-TUXEVRZZ.js} +16 -15
  16. package/dist/Breadcrumb-TUXEVRZZ.js.map +1 -0
  17. package/dist/{CartItem-X7UB2GZG.js → CartItem-B7AYUFGZ.js} +16 -15
  18. package/dist/CartItem-B7AYUFGZ.js.map +1 -0
  19. package/dist/{CartSummary-EEJ3JO6E.js → CartSummary-LSFD7QUY.js} +16 -15
  20. package/dist/CartSummary-LSFD7QUY.js.map +1 -0
  21. package/dist/{Copyright-VGOFMMIR.js → Copyright-HH2S2KDM.js} +3 -3
  22. package/dist/{Copyright-VGOFMMIR.js.map → Copyright-HH2S2KDM.js.map} +1 -1
  23. package/dist/{CustomerLayout-2E6ENXOH.js → CustomerLayout-2NVQ6G72.js} +16 -15
  24. package/dist/CustomerLayout-2NVQ6G72.js.map +1 -0
  25. package/dist/{Footer-5L3YKKPB.js → Footer-4LQIBAHJ.js} +4 -4
  26. package/dist/{Footer-5L3YKKPB.js.map → Footer-4LQIBAHJ.js.map} +1 -1
  27. package/dist/{Header-KMURB263.js → Header-VQTPIQPS.js} +8 -8
  28. package/dist/{Header-KMURB263.js.map → Header-VQTPIQPS.js.map} +1 -1
  29. package/dist/{LoyaltyPage-WI2SL6SR.js → LoyaltyPage-NSHSLS4O.js} +16 -15
  30. package/dist/LoyaltyPage-NSHSLS4O.js.map +1 -0
  31. package/dist/{LoyaltyPointsPage-RKGFGLL4.js → LoyaltyPointsPage-7CUUKDLR.js} +6 -6
  32. package/dist/{LoyaltyPointsPage-RKGFGLL4.js.map → LoyaltyPointsPage-7CUUKDLR.js.map} +1 -1
  33. package/dist/{MainMenu-VFI4SRRS.js → MainMenu-NTSSUK6R.js} +5 -5
  34. package/dist/{MainMenu-VFI4SRRS.js.map → MainMenu-NTSSUK6R.js.map} +1 -1
  35. package/dist/MaintenancePage-A7CNHM7B.js +7 -0
  36. package/dist/{MaintenancePage-7Y4QA5LD.js.map → MaintenancePage-A7CNHM7B.js.map} +1 -1
  37. package/dist/{MasterLayout-AZSOVNPR.js → MasterLayout-ZOT7XICQ.js} +16 -15
  38. package/dist/{MasterLayout-AZSOVNPR.js.map → MasterLayout-ZOT7XICQ.js.map} +1 -1
  39. package/dist/{MobileMenu-PRND3T3Z.js → MobileMenu-RBTT3KLS.js} +17 -16
  40. package/dist/MobileMenu-RBTT3KLS.js.map +1 -0
  41. package/dist/{NotificationsPage-VPCF5TNJ.js → NotificationsPage-T775PMFX.js} +16 -15
  42. package/dist/NotificationsPage-T775PMFX.js.map +1 -0
  43. package/dist/{OrderSinglePage-BIPGDSSI.js → OrderSinglePage-T5SKWUNW.js} +17 -16
  44. package/dist/OrderSinglePage-T5SKWUNW.js.map +1 -0
  45. package/dist/{OrdersPage-DTI5CYHH.js → OrdersPage-PGAD6DDY.js} +16 -15
  46. package/dist/OrdersPage-PGAD6DDY.js.map +1 -0
  47. package/dist/{PageSingle-VUKTKJKB.js → PageSingle-6W7U5YLG.js} +3 -3
  48. package/dist/{PageSingle-VUKTKJKB.js.map → PageSingle-6W7U5YLG.js.map} +1 -1
  49. package/dist/{ProductDetails-CUSUV3YF.js → ProductDetails-JFOFLMLV.js} +4 -4
  50. package/dist/{ProductDetails-CUSUV3YF.js.map → ProductDetails-JFOFLMLV.js.map} +1 -1
  51. package/dist/{ProfilePage-APTF4ZI3.js → ProfilePage-2HZYDJBM.js} +16 -15
  52. package/dist/ProfilePage-2HZYDJBM.js.map +1 -0
  53. package/dist/{ReviewsPage-Q5UUELM5.js → ReviewsPage-FYAZU7FT.js} +3 -3
  54. package/dist/{ReviewsPage-Q5UUELM5.js.map → ReviewsPage-FYAZU7FT.js.map} +1 -1
  55. package/dist/{SeoCartWidget-7BLWJVZ7.js → SeoCartWidget-7SUVC6MT.js} +16 -15
  56. package/dist/SeoCartWidget-7SUVC6MT.js.map +1 -0
  57. package/dist/{SettingsPage-I6STBZ2M.js → SettingsPage-IBWVB4ZJ.js} +16 -15
  58. package/dist/SettingsPage-IBWVB4ZJ.js.map +1 -0
  59. package/dist/{StoreClosedNotification-PNOFS2B5.js → StoreClosedNotification-CMOHA4LU.js} +17 -16
  60. package/dist/{StoreClosedNotification-PNOFS2B5.js.map → StoreClosedNotification-CMOHA4LU.js.map} +1 -1
  61. package/dist/{TestimonialsPage-S64KZKPY.js → TestimonialsPage-WJMIDBRM.js} +3 -3
  62. package/dist/{TestimonialsPage-S64KZKPY.js.map → TestimonialsPage-WJMIDBRM.js.map} +1 -1
  63. package/dist/{ThankYouPage-VGNCUZTV.js → ThankYouPage-NILOPG4H.js} +16 -15
  64. package/dist/ThankYouPage-NILOPG4H.js.map +1 -0
  65. package/dist/{WalletPage-MIXW2MTQ.js → WalletPage-5O553SIT.js} +17 -16
  66. package/dist/WalletPage-5O553SIT.js.map +1 -0
  67. package/dist/{WishlistPage-RVWSOXRC.js → WishlistPage-JPLKEMDX.js} +18 -17
  68. package/dist/WishlistPage-JPLKEMDX.js.map +1 -0
  69. package/dist/api/advertisement.js +2 -2
  70. package/dist/api/apps.js +2 -2
  71. package/dist/api/blog.js +3 -3
  72. package/dist/api/brands.js +3 -3
  73. package/dist/api/cart.js +3 -3
  74. package/dist/api/category.js +3 -3
  75. package/dist/api/client.js +1 -1
  76. package/dist/api/home.js +2 -2
  77. package/dist/api/loyalty.js +3 -3
  78. package/dist/api/menu.js +2 -2
  79. package/dist/api/notification.js +2 -2
  80. package/dist/api/order.js +3 -3
  81. package/dist/api/page.js +3 -3
  82. package/dist/api/product.js +3 -3
  83. package/dist/api/profile.js +1 -1
  84. package/dist/api/store.d.ts +8 -0
  85. package/dist/api/store.d.ts.map +1 -1
  86. package/dist/api/store.js +3 -2
  87. package/dist/api/translations.js +2 -2
  88. package/dist/api/user.js +2 -2
  89. package/dist/api/wallet.js +2 -2
  90. package/dist/api/wishlist.js +4 -4
  91. package/dist/chunk-2A2NODLC.js +14 -0
  92. package/dist/{chunk-DEZVFNN2.js.map → chunk-2A2NODLC.js.map} +1 -1
  93. package/dist/{chunk-IWBUTY3D.js → chunk-2UQKQTPB.js} +4 -4
  94. package/dist/{chunk-IWBUTY3D.js.map → chunk-2UQKQTPB.js.map} +1 -1
  95. package/dist/{chunk-KQEBYXYB.js → chunk-3CNXPHJE.js} +4 -69
  96. package/dist/chunk-3CNXPHJE.js.map +1 -0
  97. package/dist/{chunk-6I2J6V3S.js → chunk-4FYLW5WS.js} +3 -3
  98. package/dist/{chunk-6I2J6V3S.js.map → chunk-4FYLW5WS.js.map} +1 -1
  99. package/dist/{chunk-NOVJ3US5.js → chunk-4SMWY54W.js} +3 -3
  100. package/dist/{chunk-NOVJ3US5.js.map → chunk-4SMWY54W.js.map} +1 -1
  101. package/dist/{chunk-PTSJOV2E.js → chunk-52MZ4V5T.js} +4 -4
  102. package/dist/{chunk-PTSJOV2E.js.map → chunk-52MZ4V5T.js.map} +1 -1
  103. package/dist/{chunk-QRFYOEZY.js → chunk-54FS47CL.js} +3 -3
  104. package/dist/{chunk-QRFYOEZY.js.map → chunk-54FS47CL.js.map} +1 -1
  105. package/dist/{chunk-EPTYC5H3.js → chunk-5DVSAKNY.js} +4 -4
  106. package/dist/{chunk-EPTYC5H3.js.map → chunk-5DVSAKNY.js.map} +1 -1
  107. package/dist/{chunk-3TKG3ORJ.js → chunk-5JN6P5L5.js} +6 -6
  108. package/dist/{chunk-3TKG3ORJ.js.map → chunk-5JN6P5L5.js.map} +1 -1
  109. package/dist/{chunk-FFIONN5M.js → chunk-672DTSG4.js} +7 -7
  110. package/dist/{chunk-FFIONN5M.js.map → chunk-672DTSG4.js.map} +1 -1
  111. package/dist/{chunk-ZWOD67SV.js → chunk-AIPIJWOC.js} +3 -3
  112. package/dist/{chunk-ZWOD67SV.js.map → chunk-AIPIJWOC.js.map} +1 -1
  113. package/dist/{chunk-XX4L34QI.js → chunk-AN2PETFM.js} +6 -6
  114. package/dist/{chunk-XX4L34QI.js.map → chunk-AN2PETFM.js.map} +1 -1
  115. package/dist/{chunk-GJFWNFMU.js → chunk-AXPZEXJN.js} +3 -3
  116. package/dist/{chunk-GJFWNFMU.js.map → chunk-AXPZEXJN.js.map} +1 -1
  117. package/dist/{chunk-OQTBHL5T.js → chunk-BSGHOYMT.js} +3 -3
  118. package/dist/{chunk-OQTBHL5T.js.map → chunk-BSGHOYMT.js.map} +1 -1
  119. package/dist/{chunk-FBOWKMPX.js → chunk-CGDUSBLK.js} +17 -16
  120. package/dist/chunk-CGDUSBLK.js.map +1 -0
  121. package/dist/{chunk-J5DGBS7Q.js → chunk-CKH6WBMA.js} +71 -7
  122. package/dist/chunk-CKH6WBMA.js.map +1 -0
  123. package/dist/{chunk-763YWRXT.js → chunk-D423MW2M.js} +3 -3
  124. package/dist/{chunk-763YWRXT.js.map → chunk-D423MW2M.js.map} +1 -1
  125. package/dist/{chunk-6VBXPDXM.js → chunk-EDCRELH3.js} +3 -3
  126. package/dist/{chunk-6VBXPDXM.js.map → chunk-EDCRELH3.js.map} +1 -1
  127. package/dist/{chunk-VWZG5QKQ.js → chunk-ELARAFMR.js} +3 -3
  128. package/dist/{chunk-VWZG5QKQ.js.map → chunk-ELARAFMR.js.map} +1 -1
  129. package/dist/{chunk-OJ7YQEW7.js → chunk-EZP2KOEL.js} +4 -4
  130. package/dist/{chunk-OJ7YQEW7.js.map → chunk-EZP2KOEL.js.map} +1 -1
  131. package/dist/chunk-FID76MUV.js +73 -0
  132. package/dist/chunk-FID76MUV.js.map +1 -0
  133. package/dist/{chunk-ECY5POOK.js → chunk-GSI42HHP.js} +3 -3
  134. package/dist/{chunk-ECY5POOK.js.map → chunk-GSI42HHP.js.map} +1 -1
  135. package/dist/{chunk-747V3UL5.js → chunk-HH7WFQLN.js} +3 -3
  136. package/dist/{chunk-747V3UL5.js.map → chunk-HH7WFQLN.js.map} +1 -1
  137. package/dist/{chunk-V4HOZSIW.js → chunk-I5XU5BQH.js} +3 -3
  138. package/dist/{chunk-V4HOZSIW.js.map → chunk-I5XU5BQH.js.map} +1 -1
  139. package/dist/{chunk-L75KAYY5.js → chunk-ITMXD75H.js} +12 -11
  140. package/dist/chunk-ITMXD75H.js.map +1 -0
  141. package/dist/{chunk-AT3IL55G.js → chunk-IUEYRDEI.js} +3 -3
  142. package/dist/{chunk-AT3IL55G.js.map → chunk-IUEYRDEI.js.map} +1 -1
  143. package/dist/{chunk-ASTCQSK6.js → chunk-JLBDDH4N.js} +3 -3
  144. package/dist/{chunk-ASTCQSK6.js.map → chunk-JLBDDH4N.js.map} +1 -1
  145. package/dist/{chunk-RPRZYRPX.js → chunk-K3PQSDGA.js} +4 -4
  146. package/dist/{chunk-RPRZYRPX.js.map → chunk-K3PQSDGA.js.map} +1 -1
  147. package/dist/{chunk-DEDX3AIO.js → chunk-KME6DTES.js} +7 -7
  148. package/dist/{chunk-DEDX3AIO.js.map → chunk-KME6DTES.js.map} +1 -1
  149. package/dist/{chunk-2M5BICJK.js → chunk-NITRRCQV.js} +4 -4
  150. package/dist/{chunk-2M5BICJK.js.map → chunk-NITRRCQV.js.map} +1 -1
  151. package/dist/{chunk-2SCIGF3L.js → chunk-NLT6YWUD.js} +4 -4
  152. package/dist/{chunk-2SCIGF3L.js.map → chunk-NLT6YWUD.js.map} +1 -1
  153. package/dist/{chunk-RDMEIF2O.js → chunk-OR6HPFZT.js} +4 -4
  154. package/dist/{chunk-RDMEIF2O.js.map → chunk-OR6HPFZT.js.map} +1 -1
  155. package/dist/{chunk-F5H7QF2T.js → chunk-ORBMN52O.js} +4 -4
  156. package/dist/{chunk-F5H7QF2T.js.map → chunk-ORBMN52O.js.map} +1 -1
  157. package/dist/{chunk-EMOLTV77.js → chunk-QYHNS2KS.js} +4 -4
  158. package/dist/{chunk-EMOLTV77.js.map → chunk-QYHNS2KS.js.map} +1 -1
  159. package/dist/{chunk-OOSLYT2L.js → chunk-RQ72QOIC.js} +7 -7
  160. package/dist/{chunk-OOSLYT2L.js.map → chunk-RQ72QOIC.js.map} +1 -1
  161. package/dist/{chunk-D7IP4MVJ.js → chunk-RXWWNPCR.js} +5 -5
  162. package/dist/{chunk-D7IP4MVJ.js.map → chunk-RXWWNPCR.js.map} +1 -1
  163. package/dist/{chunk-WQJT663R.js → chunk-SCM4P6QG.js} +3 -3
  164. package/dist/{chunk-WQJT663R.js.map → chunk-SCM4P6QG.js.map} +1 -1
  165. package/dist/{chunk-G74DWDSJ.js → chunk-T55LMU5R.js} +3 -3
  166. package/dist/{chunk-G74DWDSJ.js.map → chunk-T55LMU5R.js.map} +1 -1
  167. package/dist/{chunk-QPKK4LPK.js → chunk-WYWI77EA.js} +23 -4
  168. package/dist/chunk-WYWI77EA.js.map +1 -0
  169. package/dist/{chunk-CLZRX5TX.js → chunk-X4A3D5O4.js} +3 -3
  170. package/dist/{chunk-CLZRX5TX.js.map → chunk-X4A3D5O4.js.map} +1 -1
  171. package/dist/{chunk-OYPE6432.js → chunk-YGCPRUT6.js} +5 -3
  172. package/dist/chunk-YGCPRUT6.js.map +1 -0
  173. package/dist/{chunk-WOMGFBX5.js → chunk-YSSJ2CQC.js} +4 -4
  174. package/dist/{chunk-WOMGFBX5.js.map → chunk-YSSJ2CQC.js.map} +1 -1
  175. package/dist/components/cart/index.js +1 -1
  176. package/dist/components/common/index.js +1 -1
  177. package/dist/components/drawer/index.js +14 -13
  178. package/dist/components/home/index.js +18 -17
  179. package/dist/components/layout/index.js +4 -4
  180. package/dist/components/product/index.js +15 -14
  181. package/dist/components/store/MaintenancePage.d.ts +3 -2
  182. package/dist/components/store/MaintenancePage.d.ts.map +1 -1
  183. package/dist/components/store/index.js +16 -15
  184. package/dist/dev/editor/index.js +1 -1
  185. package/dist/dev/index.js +1 -1
  186. package/dist/{document-class-7JZLKPFE.js → document-class-2SKG4YZE.js} +13 -12
  187. package/dist/{document-class-7JZLKPFE.js.map → document-class-2SKG4YZE.js.map} +1 -1
  188. package/dist/hooks/index.js +14 -13
  189. package/dist/hooks/useGtm.js +14 -13
  190. package/dist/hooks/useMoney.js +14 -13
  191. package/dist/hooks/useStore.js +14 -13
  192. package/dist/hooks/useUser.js +3 -3
  193. package/dist/index.js +14 -13
  194. package/dist/index.js.map +1 -1
  195. package/dist/{navigation-L77QYQHZ.js → navigation-7HBHI524.js} +4 -4
  196. package/dist/{navigation-L77QYQHZ.js.map → navigation-7HBHI524.js.map} +1 -1
  197. package/dist/{navigation-IUHYIHIQ.js → navigation-WVVYQOOZ.js} +5 -5
  198. package/dist/{navigation-IUHYIHIQ.js.map → navigation-WVVYQOOZ.js.map} +1 -1
  199. package/dist/{not-found-YVGX5ST2.js → not-found-ZN7HOUO4.js} +17 -16
  200. package/dist/not-found-ZN7HOUO4.js.map +1 -0
  201. package/dist/providers/NavigationProvider.d.ts +2 -0
  202. package/dist/providers/NavigationProvider.d.ts.map +1 -1
  203. package/dist/providers/index.js +14 -13
  204. package/dist/routes/account/orders.js +4 -4
  205. package/dist/routes/account.js +13 -13
  206. package/dist/routes/blog.js +8 -8
  207. package/dist/routes/brands.js +4 -4
  208. package/dist/routes/cart.js +22 -21
  209. package/dist/routes/cart.js.map +1 -1
  210. package/dist/routes/home.js +19 -18
  211. package/dist/routes/index.js +3 -3
  212. package/dist/routes/loyalty.js +5 -5
  213. package/dist/routes/page.js +4 -4
  214. package/dist/routes/product-listing.js +20 -19
  215. package/dist/routes/product-listing.js.map +1 -1
  216. package/dist/routes/product.js +18 -17
  217. package/dist/routes/product.js.map +1 -1
  218. package/dist/routes/seo-redirects.js +3 -3
  219. package/dist/routes/testimonials.js +2 -2
  220. package/dist/routes/thank-you.js +4 -4
  221. package/dist/skeleton.js +19 -18
  222. package/dist/{store-lookup-F66OF7JS.js → store-lookup-KSHMPOFT.js} +8 -8
  223. package/dist/{store-lookup-F66OF7JS.js.map → store-lookup-KSHMPOFT.js.map} +1 -1
  224. package/dist/tanstack.js +13 -12
  225. package/dist/tanstack.js.map +1 -1
  226. package/dist/types/twilight.d.ts +4 -2
  227. package/dist/types/twilight.d.ts.map +1 -1
  228. package/dist/utils/index.js +2 -2
  229. package/dist/utils/maintenance.d.ts +13 -0
  230. package/dist/utils/maintenance.d.ts.map +1 -1
  231. package/package.json +1 -1
  232. package/tailwind/components/store/MaintenancePage.tsx.txt +116 -6
  233. package/dist/BlogAuthorPage-JHZHLSIA.js.map +0 -1
  234. package/dist/BlogCategoryPage-F4264MQG.js.map +0 -1
  235. package/dist/BlogPage-3TELFUFM.js.map +0 -1
  236. package/dist/BlogSinglePage-QBADHXXZ.js.map +0 -1
  237. package/dist/BlogTagPage-WEP37KDY.js.map +0 -1
  238. package/dist/BrandsPage-EENWKAIY.js.map +0 -1
  239. package/dist/Breadcrumb-A2CNX5VU.js.map +0 -1
  240. package/dist/CartItem-X7UB2GZG.js.map +0 -1
  241. package/dist/CartSummary-EEJ3JO6E.js.map +0 -1
  242. package/dist/CustomerLayout-2E6ENXOH.js.map +0 -1
  243. package/dist/LoyaltyPage-WI2SL6SR.js.map +0 -1
  244. package/dist/MaintenancePage-7Y4QA5LD.js +0 -7
  245. package/dist/MobileMenu-PRND3T3Z.js.map +0 -1
  246. package/dist/NotificationsPage-VPCF5TNJ.js.map +0 -1
  247. package/dist/OrderSinglePage-BIPGDSSI.js.map +0 -1
  248. package/dist/OrdersPage-DTI5CYHH.js.map +0 -1
  249. package/dist/ProfilePage-APTF4ZI3.js.map +0 -1
  250. package/dist/SeoCartWidget-7BLWJVZ7.js.map +0 -1
  251. package/dist/SettingsPage-I6STBZ2M.js.map +0 -1
  252. package/dist/ThankYouPage-VGNCUZTV.js.map +0 -1
  253. package/dist/WalletPage-MIXW2MTQ.js.map +0 -1
  254. package/dist/WishlistPage-RVWSOXRC.js.map +0 -1
  255. package/dist/chunk-DEZVFNN2.js +0 -14
  256. package/dist/chunk-FBOWKMPX.js.map +0 -1
  257. package/dist/chunk-J5DGBS7Q.js.map +0 -1
  258. package/dist/chunk-KQEBYXYB.js.map +0 -1
  259. package/dist/chunk-L75KAYY5.js.map +0 -1
  260. package/dist/chunk-OYPE6432.js.map +0 -1
  261. package/dist/chunk-QPKK4LPK.js.map +0 -1
  262. package/dist/not-found-YVGX5ST2.js.map +0 -1
@@ -1,22 +1,23 @@
1
- import './chunk-FBOWKMPX.js';
1
+ import './chunk-CGDUSBLK.js';
2
2
  import './chunk-FHAHE46U.js';
3
- import './chunk-FFIONN5M.js';
4
- import './chunk-747V3UL5.js';
5
- import './chunk-KQEBYXYB.js';
3
+ import './chunk-672DTSG4.js';
4
+ import './chunk-HH7WFQLN.js';
5
+ import './chunk-3CNXPHJE.js';
6
6
  import './chunk-JYV25VNZ.js';
7
- import './chunk-WQJT663R.js';
7
+ import './chunk-SCM4P6QG.js';
8
8
  import './chunk-OXMUPNMH.js';
9
- import './chunk-GJFWNFMU.js';
9
+ import './chunk-AXPZEXJN.js';
10
10
  import './chunk-VVZNW5CB.js';
11
11
  import './chunk-5FJFN3IW.js';
12
12
  import './chunk-GD26FI4J.js';
13
+ import './chunk-FID76MUV.js';
13
14
  import './chunk-OM2GRPDH.js';
14
- import './chunk-QPKK4LPK.js';
15
+ import './chunk-WYWI77EA.js';
15
16
  import './chunk-OUW6WESU.js';
16
17
  import './chunk-BK5TBUGG.js';
17
18
  import './chunk-HI5V5X3S.js';
18
- import './chunk-ECY5POOK.js';
19
- import './chunk-VWZG5QKQ.js';
19
+ import './chunk-GSI42HHP.js';
20
+ import './chunk-ELARAFMR.js';
20
21
  import './chunk-MVT5AF2A.js';
21
22
  import './chunk-Z653O7MX.js';
22
23
  import './chunk-ZCH7W7DZ.js';
@@ -27,16 +28,16 @@ import './chunk-7V36I5GT.js';
27
28
  import './chunk-6WI7R2BD.js';
28
29
  import './chunk-JGVEGQHJ.js';
29
30
  import './chunk-OAMIDZKW.js';
30
- import './chunk-763YWRXT.js';
31
+ import './chunk-D423MW2M.js';
31
32
  import './chunk-OQIIJRAS.js';
32
33
  import './chunk-V2ZDTY6H.js';
33
- import './chunk-QRFYOEZY.js';
34
+ import './chunk-54FS47CL.js';
34
35
  import { HookSlot } from './chunk-5XDPAKF5.js';
35
36
  import './chunk-GCPEMNSU.js';
36
- import './chunk-OQTBHL5T.js';
37
+ import './chunk-BSGHOYMT.js';
37
38
  import './chunk-Z5M4YYWT.js';
38
39
  import { useTranslation } from './chunk-TYNZ5B2B.js';
39
- import './chunk-AT3IL55G.js';
40
+ import './chunk-IUEYRDEI.js';
40
41
  import './chunk-AXW67SY7.js';
41
42
  import './chunk-BYMOPN2S.js';
42
43
  import './chunk-SKLEJJ6M.js';
@@ -74,5 +75,5 @@ function OrdersPage({ orders, query }) {
74
75
  }
75
76
 
76
77
  export { OrdersPage };
77
- //# sourceMappingURL=OrdersPage-DTI5CYHH.js.map
78
- //# sourceMappingURL=OrdersPage-DTI5CYHH.js.map
78
+ //# sourceMappingURL=OrdersPage-PGAD6DDY.js.map
79
+ //# sourceMappingURL=OrdersPage-PGAD6DDY.js.map
@@ -0,0 +1 @@
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-PGAD6DDY.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,5 +1,5 @@
1
1
  import { useComments } from './chunk-BK5TBUGG.js';
2
- import { LazyBreadcrumb } from './chunk-AT3IL55G.js';
2
+ import { LazyBreadcrumb } from './chunk-IUEYRDEI.js';
3
3
  import './chunk-AXW67SY7.js';
4
4
  import './chunk-BYMOPN2S.js';
5
5
  import './chunk-SKLEJJ6M.js';
@@ -29,5 +29,5 @@ function PageSingle({ page }) {
29
29
  }
30
30
 
31
31
  export { PageSingle };
32
- //# sourceMappingURL=PageSingle-VUKTKJKB.js.map
33
- //# sourceMappingURL=PageSingle-VUKTKJKB.js.map
32
+ //# sourceMappingURL=PageSingle-6W7U5YLG.js.map
33
+ //# sourceMappingURL=PageSingle-6W7U5YLG.js.map
@@ -1 +1 @@
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-VUKTKJKB.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"]}
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-6W7U5YLG.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"]}
@@ -3,10 +3,10 @@ import './chunk-MVT5AF2A.js';
3
3
  import { useWishlist } from './chunk-JGVEGQHJ.js';
4
4
  import { HookSlot } from './chunk-5XDPAKF5.js';
5
5
  import './chunk-GCPEMNSU.js';
6
- import { getActiveCurrency } from './chunk-OQTBHL5T.js';
6
+ import { getActiveCurrency } from './chunk-BSGHOYMT.js';
7
7
  import './chunk-Z5M4YYWT.js';
8
8
  import { useTranslation } from './chunk-TYNZ5B2B.js';
9
- import { Image, LazyCurrencySymbol } from './chunk-AT3IL55G.js';
9
+ import { Image, LazyCurrencySymbol } from './chunk-IUEYRDEI.js';
10
10
  import { Link } from './chunk-AXW67SY7.js';
11
11
  import './chunk-BYMOPN2S.js';
12
12
  import './chunk-SKLEJJ6M.js';
@@ -214,5 +214,5 @@ function ProductQuantityInfo({ product }) {
214
214
  }
215
215
 
216
216
  export { ProductDetails };
217
- //# sourceMappingURL=ProductDetails-CUSUV3YF.js.map
218
- //# sourceMappingURL=ProductDetails-CUSUV3YF.js.map
217
+ //# sourceMappingURL=ProductDetails-JFOFLMLV.js.map
218
+ //# sourceMappingURL=ProductDetails-JFOFLMLV.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/product/ProductDetails.tsx"],"names":["Fragment"],"mappings":"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","file":"ProductDetails-CUSUV3YF.js","sourcesContent":["import { Fragment, useState } from 'react';\nimport { HookSlot } from '../../hooks/HookSlot';\nimport { HookName } from '../../types/hooks';\nimport { useTranslation } from '../../providers/I18nProvider';\nimport { getActiveCurrency } from '../../api/client';\nimport { useWishlist } from '../../hooks/useWishlist';\nimport { CurrencySymbol, Link, Image } from '../common';\nimport { SallaRatingStars } from '@salla.sa/twilight-components-react/rating-stars';\nimport { SallaSocialShare } from '@salla.sa/twilight-components-react/social-share';\nimport { SallaButton } from '@salla.sa/twilight-components-react/button';\nimport { SallaInstallment } from '@salla.sa/twilight-components-react/installment';\nimport { SallaMetadata } from '@salla.sa/twilight-components-react/metadata';\nimport { formatSallaPlural } from '../../utils/salla-plural';\nimport type { Product } from '../../types';\n\ninterface ProductDetailsProps {\n product: Product;\n showTags?: boolean;\n}\n\nexport function ProductDetails({ product, showTags = true }: ProductDetailsProps) {\n const { t } = useTranslation();\n const wishlist = useWishlist();\n\n // Context for all product hooks - contains product data\n const productHookContext = { product };\n\n return (\n <>\n <HookSlot name={HookName.PRODUCT_DESCRIPTION_START} context={productHookContext} />\n\n {product.brand?.name && (\n <div className=\"product-brand mb-5 w-12\">\n <Link className=\"brand-logo\" to={product.brand.url || '#'} title={product.brand.name}>\n <Image\n className=\"max-h-full object-contain\"\n src={product.brand.logo}\n title={product.brand.name}\n alt={product.brand.name}\n aspectRatio=\"1/1\"\n />\n </Link>\n </div>\n )}\n\n <h1 className=\"text-xl md:text-2xl leading-10 font-bold mb-6 text-gray-800\">\n {product.name}\n </h1>\n\n {product.subtitle && (\n <h2 className=\"product-entry__sub-title text-sm text-gray-500 leading-6 mb-2.5\">\n {product.subtitle}\n </h2>\n )}\n\n {product.rating && (\n <SallaRatingStars value={product.rating.stars} reviews={product.rating.count} />\n )}\n\n {product.is_taxable && (\n <small className=\"color-grey\">{t('pages.products.tax_included', 'VAT Inclusive')}</small>\n )}\n\n <ProductPrice product={product} />\n\n <ProductDescription product={product} />\n\n {!!product.tags?.length && showTags && (\n <div className=\"mb-3\">\n {product.tags.map((tag, index) => (\n <Fragment key={tag.name}>\n <Link\n to={tag.url}\n className=\"rtl:ml-2 ltr:mr-2 inline-flex text-gray-500 hover:text-primary underline text-sm mb-1\"\n >\n {tag.name}\n </Link>\n {index < product.tags!.length - 1 && ','}\n </Fragment>\n ))}\n </div>\n )}\n\n <div className=\"flex rtl:space-x-reverse space-x-3\">\n <SallaSocialShare className=\"inline-flex mb-5\" aria-label=\"social share\" />\n\n <SallaButton\n className={`btn--wishlist animated hidden sm:inline-flex ${wishlist.has(Number(product.id)) ? 'is-added' : 'not-added'}`}\n data-id={product.id}\n onClick={() => window.salla?.wishlist.toggle(product.id)}\n shape=\"icon\"\n fill=\"outline\"\n color=\"light\"\n ariaLabel=\"add to wishlist\"\n >\n <i className=\"sicon-heart\"></i>\n </SallaButton>\n </div>\n\n <ProductQuantityInfo product={product} />\n\n {product.sku && (\n <div className=\"mb-4 flex justify-between sm:grid sm:grid-cols-3 bg-white rounded-md px-4 py-2\">\n <div className=\"flex items-center\">\n <i className=\"sicon-barcode mx-1\"></i>\n {t('pages.products.sku', 'SKU')}\n </div>\n <div className=\"text-unicode\">{product.sku}</div>\n </div>\n )}\n\n {product.barcode && (\n <div className=\"mb-4 flex justify-between sm:grid sm:grid-cols-3 bg-white rounded-md px-4 py-2\">\n <div className=\"flex items-center\">\n <i className=\"sicon-barcode mx-1\"></i>\n {t('pages.products.barcode')}\n </div>\n <div className=\"text-unicode\">{product.barcode}</div>\n </div>\n )}\n\n {product.show_availability && (\n <section className=\"bg-white p-5 rounded-md mb-5 last:mb-0\">\n <div className=\"center-between\">\n <label className=\"flex items-center text-base\">\n <span className=\"sicon-location rtl:ml-1 ltr:mr-1\"></span>\n <span className=\"inline-block\">\n {t('pages.products.availability', 'Availability')}\n </span>\n </label>\n <div className=\"mt-1 sm:mt-0 sm:col-span-2 text-end\">\n <div className=\"flex rtl:space-x-reverse space-x-3\">\n <a\n href=\"#!\"\n onClick={() =>\n window.salla?.event?.dispatch('scopes::open', {\n mode: 'availability',\n product_id: String(product.id),\n })\n }\n className=\"group text-primary flex items-center justify-center\"\n >\n <span>{t('pages.products.select_branch', 'Select Branch')}</span>\n <span className=\"sicon-keyboard_arrow_left mr-2 transition-all group-hover:-translate-x-1\"></span>\n </a>\n </div>\n </div>\n </div>\n </section>\n )}\n\n <HookSlot name={HookName.PRODUCT_DESCRIPTION} context={productHookContext} />\n\n <SallaInstallment\n price={String(\n typeof product.base_currency_price === 'object'\n ? product.base_currency_price.amount\n : product.base_currency_price\n )}\n />\n\n {product.has_metadata && <SallaMetadata />}\n </>\n );\n}\n\nfunction ProductPrice({ product }: { product: Product }) {\n const { t } = useTranslation();\n // The API converts the amounts but still labels them in the store's own currency.\n const priceCurrency = getActiveCurrency(product.currency);\n\n return (\n <div className=\"flex whitespace-nowrap gap-4 items-center\">\n <div\n className={`${product.is_on_sale ? '' : 'hidden'} space-x-2 rtl:space-x-reverse whitespace-nowrap`}\n >\n <p className=\"text-red-800 font-bold text-xl inline-block\">\n {product.sale_price} <CurrencySymbol currency={priceCurrency} />\n </p>\n <span className=\"text-gray-500 line-through\">\n {product.regular_price} <CurrencySymbol currency={priceCurrency} />\n </span>\n </div>\n <div className={`gap-4 ${product.is_on_sale ? 'hidden' : 'flex'}`}>\n {product.starting_price && (\n <span>{t('pages.products.starting_price', 'Starting from')}</span>\n )}\n <p className=\"font-bold text-xl inline-block\">\n {product.starting_price ?? product.price} <CurrencySymbol currency={priceCurrency} />\n </p>\n </div>\n </div>\n );\n}\n\n/** An `<iframe>` start tag; quoted values may hold `>`. */\nconst IFRAME_TAG = /<iframe\\b(?:[^>\"']|\"[^\"]*\"|'[^']*')*>/gi;\n\n/** Embedded players (YouTube, Vimeo, maps) load only when scrolled near, unless the merchant set `loading`. */\nfunction lazyIframes(html: string): string {\n return html.replace(IFRAME_TAG, (tag) =>\n /\\sloading\\s*=/i.test(tag.replace(/\"[^\"]*\"|'[^']*'/g, '\"\"'))\n ? tag\n : tag.replace(/^<iframe/i, '<iframe loading=\"lazy\"')\n );\n}\n\nfunction ProductDescription({ product }: { product: Product }) {\n const { t } = useTranslation();\n const [isExpanded, setIsExpanded] = useState(false);\n\n if (!product.description) return null;\n\n const description = lazyIframes(product.description.replace(/&nbsp;/g, '\\n'));\n\n if (product.has_read_more) {\n return (\n <div className=\"product__description p-2 px-5 sm:p-1 leading-7 mb-3\">\n <article\n className=\"article article--main relative leading-8 overflow-hidden transition-all duration-300 py-4\"\n id=\"more-content\"\n style={{ maxHeight: isExpanded ? 'none' : '5.25rem' }}\n dangerouslySetInnerHTML={{ __html: description }}\n />\n <button\n type=\"button\"\n id=\"btn-show-more\"\n className={`link--primary inline-block mt-2 cursor-pointer bg-transparent border-0 p-0 ${isExpanded ? 'is-expanded' : ''}`}\n onClick={() => setIsExpanded(true)}\n >\n {t('pages.products.read_more', 'Read more')}\n </button>\n </div>\n );\n }\n\n return (\n <div className=\"product__description p-2 px-5 sm:p-1 leading-7 mb-3\">\n <article className=\"article--main pb-1\" dangerouslySetInnerHTML={{ __html: description }} />\n </div>\n );\n}\n\nfunction ProductQuantityInfo({ product }: { product: Product }) {\n const { t } = useTranslation();\n if (product.sold_quantity == null && !product.can_show_remained_quantity) {\n return null;\n }\n\n return (\n <div className=\"bg-white py-2.5 mb-5 rounded-md inline-flex text-sm\">\n {(product.sold_quantity ?? 0) > 0 && (\n <div className=\"px-4 !text-red-800\">\n <i className=\"sicon-fire rtl:ml-1.5 ltr:mr-1.5\"></i> {t('pages.products.sold', 'Sold')}{' '}\n {/* Salla ships `sold_times` in Laravel plural format; resolve it for the count. */}\n <span>{formatSallaPlural(t('pages.products.sold_times'), product.sold_quantity!)}</span>\n </div>\n )}\n {product.can_show_remained_quantity && (\n <div className=\"px-4 rtl:even:border-r ltr:even:border-l even:border-gray-200\">\n <i className=\"!text-red-800 sicon-box-bankers rtl:ml-1.5 ltr:mr-1.5\"></i>\n {t('pages.products.remained', 'Remained')}: {product.quantity}\n </div>\n )}\n </div>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/components/product/ProductDetails.tsx"],"names":["Fragment"],"mappings":"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","file":"ProductDetails-JFOFLMLV.js","sourcesContent":["import { Fragment, useState } from 'react';\nimport { HookSlot } from '../../hooks/HookSlot';\nimport { HookName } from '../../types/hooks';\nimport { useTranslation } from '../../providers/I18nProvider';\nimport { getActiveCurrency } from '../../api/client';\nimport { useWishlist } from '../../hooks/useWishlist';\nimport { CurrencySymbol, Link, Image } from '../common';\nimport { SallaRatingStars } from '@salla.sa/twilight-components-react/rating-stars';\nimport { SallaSocialShare } from '@salla.sa/twilight-components-react/social-share';\nimport { SallaButton } from '@salla.sa/twilight-components-react/button';\nimport { SallaInstallment } from '@salla.sa/twilight-components-react/installment';\nimport { SallaMetadata } from '@salla.sa/twilight-components-react/metadata';\nimport { formatSallaPlural } from '../../utils/salla-plural';\nimport type { Product } from '../../types';\n\ninterface ProductDetailsProps {\n product: Product;\n showTags?: boolean;\n}\n\nexport function ProductDetails({ product, showTags = true }: ProductDetailsProps) {\n const { t } = useTranslation();\n const wishlist = useWishlist();\n\n // Context for all product hooks - contains product data\n const productHookContext = { product };\n\n return (\n <>\n <HookSlot name={HookName.PRODUCT_DESCRIPTION_START} context={productHookContext} />\n\n {product.brand?.name && (\n <div className=\"product-brand mb-5 w-12\">\n <Link className=\"brand-logo\" to={product.brand.url || '#'} title={product.brand.name}>\n <Image\n className=\"max-h-full object-contain\"\n src={product.brand.logo}\n title={product.brand.name}\n alt={product.brand.name}\n aspectRatio=\"1/1\"\n />\n </Link>\n </div>\n )}\n\n <h1 className=\"text-xl md:text-2xl leading-10 font-bold mb-6 text-gray-800\">\n {product.name}\n </h1>\n\n {product.subtitle && (\n <h2 className=\"product-entry__sub-title text-sm text-gray-500 leading-6 mb-2.5\">\n {product.subtitle}\n </h2>\n )}\n\n {product.rating && (\n <SallaRatingStars value={product.rating.stars} reviews={product.rating.count} />\n )}\n\n {product.is_taxable && (\n <small className=\"color-grey\">{t('pages.products.tax_included', 'VAT Inclusive')}</small>\n )}\n\n <ProductPrice product={product} />\n\n <ProductDescription product={product} />\n\n {!!product.tags?.length && showTags && (\n <div className=\"mb-3\">\n {product.tags.map((tag, index) => (\n <Fragment key={tag.name}>\n <Link\n to={tag.url}\n className=\"rtl:ml-2 ltr:mr-2 inline-flex text-gray-500 hover:text-primary underline text-sm mb-1\"\n >\n {tag.name}\n </Link>\n {index < product.tags!.length - 1 && ','}\n </Fragment>\n ))}\n </div>\n )}\n\n <div className=\"flex rtl:space-x-reverse space-x-3\">\n <SallaSocialShare className=\"inline-flex mb-5\" aria-label=\"social share\" />\n\n <SallaButton\n className={`btn--wishlist animated hidden sm:inline-flex ${wishlist.has(Number(product.id)) ? 'is-added' : 'not-added'}`}\n data-id={product.id}\n onClick={() => window.salla?.wishlist.toggle(product.id)}\n shape=\"icon\"\n fill=\"outline\"\n color=\"light\"\n ariaLabel=\"add to wishlist\"\n >\n <i className=\"sicon-heart\"></i>\n </SallaButton>\n </div>\n\n <ProductQuantityInfo product={product} />\n\n {product.sku && (\n <div className=\"mb-4 flex justify-between sm:grid sm:grid-cols-3 bg-white rounded-md px-4 py-2\">\n <div className=\"flex items-center\">\n <i className=\"sicon-barcode mx-1\"></i>\n {t('pages.products.sku', 'SKU')}\n </div>\n <div className=\"text-unicode\">{product.sku}</div>\n </div>\n )}\n\n {product.barcode && (\n <div className=\"mb-4 flex justify-between sm:grid sm:grid-cols-3 bg-white rounded-md px-4 py-2\">\n <div className=\"flex items-center\">\n <i className=\"sicon-barcode mx-1\"></i>\n {t('pages.products.barcode')}\n </div>\n <div className=\"text-unicode\">{product.barcode}</div>\n </div>\n )}\n\n {product.show_availability && (\n <section className=\"bg-white p-5 rounded-md mb-5 last:mb-0\">\n <div className=\"center-between\">\n <label className=\"flex items-center text-base\">\n <span className=\"sicon-location rtl:ml-1 ltr:mr-1\"></span>\n <span className=\"inline-block\">\n {t('pages.products.availability', 'Availability')}\n </span>\n </label>\n <div className=\"mt-1 sm:mt-0 sm:col-span-2 text-end\">\n <div className=\"flex rtl:space-x-reverse space-x-3\">\n <a\n href=\"#!\"\n onClick={() =>\n window.salla?.event?.dispatch('scopes::open', {\n mode: 'availability',\n product_id: String(product.id),\n })\n }\n className=\"group text-primary flex items-center justify-center\"\n >\n <span>{t('pages.products.select_branch', 'Select Branch')}</span>\n <span className=\"sicon-keyboard_arrow_left mr-2 transition-all group-hover:-translate-x-1\"></span>\n </a>\n </div>\n </div>\n </div>\n </section>\n )}\n\n <HookSlot name={HookName.PRODUCT_DESCRIPTION} context={productHookContext} />\n\n <SallaInstallment\n price={String(\n typeof product.base_currency_price === 'object'\n ? product.base_currency_price.amount\n : product.base_currency_price\n )}\n />\n\n {product.has_metadata && <SallaMetadata />}\n </>\n );\n}\n\nfunction ProductPrice({ product }: { product: Product }) {\n const { t } = useTranslation();\n // The API converts the amounts but still labels them in the store's own currency.\n const priceCurrency = getActiveCurrency(product.currency);\n\n return (\n <div className=\"flex whitespace-nowrap gap-4 items-center\">\n <div\n className={`${product.is_on_sale ? '' : 'hidden'} space-x-2 rtl:space-x-reverse whitespace-nowrap`}\n >\n <p className=\"text-red-800 font-bold text-xl inline-block\">\n {product.sale_price} <CurrencySymbol currency={priceCurrency} />\n </p>\n <span className=\"text-gray-500 line-through\">\n {product.regular_price} <CurrencySymbol currency={priceCurrency} />\n </span>\n </div>\n <div className={`gap-4 ${product.is_on_sale ? 'hidden' : 'flex'}`}>\n {product.starting_price && (\n <span>{t('pages.products.starting_price', 'Starting from')}</span>\n )}\n <p className=\"font-bold text-xl inline-block\">\n {product.starting_price ?? product.price} <CurrencySymbol currency={priceCurrency} />\n </p>\n </div>\n </div>\n );\n}\n\n/** An `<iframe>` start tag; quoted values may hold `>`. */\nconst IFRAME_TAG = /<iframe\\b(?:[^>\"']|\"[^\"]*\"|'[^']*')*>/gi;\n\n/** Embedded players (YouTube, Vimeo, maps) load only when scrolled near, unless the merchant set `loading`. */\nfunction lazyIframes(html: string): string {\n return html.replace(IFRAME_TAG, (tag) =>\n /\\sloading\\s*=/i.test(tag.replace(/\"[^\"]*\"|'[^']*'/g, '\"\"'))\n ? tag\n : tag.replace(/^<iframe/i, '<iframe loading=\"lazy\"')\n );\n}\n\nfunction ProductDescription({ product }: { product: Product }) {\n const { t } = useTranslation();\n const [isExpanded, setIsExpanded] = useState(false);\n\n if (!product.description) return null;\n\n const description = lazyIframes(product.description.replace(/&nbsp;/g, '\\n'));\n\n if (product.has_read_more) {\n return (\n <div className=\"product__description p-2 px-5 sm:p-1 leading-7 mb-3\">\n <article\n className=\"article article--main relative leading-8 overflow-hidden transition-all duration-300 py-4\"\n id=\"more-content\"\n style={{ maxHeight: isExpanded ? 'none' : '5.25rem' }}\n dangerouslySetInnerHTML={{ __html: description }}\n />\n <button\n type=\"button\"\n id=\"btn-show-more\"\n className={`link--primary inline-block mt-2 cursor-pointer bg-transparent border-0 p-0 ${isExpanded ? 'is-expanded' : ''}`}\n onClick={() => setIsExpanded(true)}\n >\n {t('pages.products.read_more', 'Read more')}\n </button>\n </div>\n );\n }\n\n return (\n <div className=\"product__description p-2 px-5 sm:p-1 leading-7 mb-3\">\n <article className=\"article--main pb-1\" dangerouslySetInnerHTML={{ __html: description }} />\n </div>\n );\n}\n\nfunction ProductQuantityInfo({ product }: { product: Product }) {\n const { t } = useTranslation();\n if (product.sold_quantity == null && !product.can_show_remained_quantity) {\n return null;\n }\n\n return (\n <div className=\"bg-white py-2.5 mb-5 rounded-md inline-flex text-sm\">\n {(product.sold_quantity ?? 0) > 0 && (\n <div className=\"px-4 !text-red-800\">\n <i className=\"sicon-fire rtl:ml-1.5 ltr:mr-1.5\"></i> {t('pages.products.sold', 'Sold')}{' '}\n {/* Salla ships `sold_times` in Laravel plural format; resolve it for the count. */}\n <span>{formatSallaPlural(t('pages.products.sold_times'), product.sold_quantity!)}</span>\n </div>\n )}\n {product.can_show_remained_quantity && (\n <div className=\"px-4 rtl:even:border-r ltr:even:border-l even:border-gray-200\">\n <i className=\"!text-red-800 sicon-box-bankers rtl:ml-1.5 ltr:mr-1.5\"></i>\n {t('pages.products.remained', 'Remained')}: {product.quantity}\n </div>\n )}\n </div>\n );\n}\n"]}
@@ -1,22 +1,23 @@
1
- import './chunk-FBOWKMPX.js';
1
+ import './chunk-CGDUSBLK.js';
2
2
  import './chunk-FHAHE46U.js';
3
- import './chunk-FFIONN5M.js';
4
- import './chunk-747V3UL5.js';
5
- import './chunk-KQEBYXYB.js';
3
+ import './chunk-672DTSG4.js';
4
+ import './chunk-HH7WFQLN.js';
5
+ import './chunk-3CNXPHJE.js';
6
6
  import './chunk-JYV25VNZ.js';
7
- import './chunk-WQJT663R.js';
7
+ import './chunk-SCM4P6QG.js';
8
8
  import './chunk-OXMUPNMH.js';
9
- import './chunk-GJFWNFMU.js';
9
+ import './chunk-AXPZEXJN.js';
10
10
  import './chunk-VVZNW5CB.js';
11
11
  import './chunk-5FJFN3IW.js';
12
12
  import './chunk-GD26FI4J.js';
13
+ import './chunk-FID76MUV.js';
13
14
  import './chunk-OM2GRPDH.js';
14
- import './chunk-QPKK4LPK.js';
15
+ import './chunk-WYWI77EA.js';
15
16
  import './chunk-OUW6WESU.js';
16
17
  import './chunk-BK5TBUGG.js';
17
18
  import './chunk-HI5V5X3S.js';
18
- import { useUser } from './chunk-ECY5POOK.js';
19
- import './chunk-VWZG5QKQ.js';
19
+ import { useUser } from './chunk-GSI42HHP.js';
20
+ import './chunk-ELARAFMR.js';
20
21
  import './chunk-MVT5AF2A.js';
21
22
  import './chunk-Z653O7MX.js';
22
23
  import './chunk-ZCH7W7DZ.js';
@@ -27,16 +28,16 @@ import './chunk-7V36I5GT.js';
27
28
  import './chunk-6WI7R2BD.js';
28
29
  import './chunk-JGVEGQHJ.js';
29
30
  import './chunk-OAMIDZKW.js';
30
- import './chunk-763YWRXT.js';
31
+ import './chunk-D423MW2M.js';
31
32
  import './chunk-OQIIJRAS.js';
32
33
  import './chunk-V2ZDTY6H.js';
33
- import './chunk-QRFYOEZY.js';
34
+ import './chunk-54FS47CL.js';
34
35
  import { HookSlot } from './chunk-5XDPAKF5.js';
35
36
  import './chunk-GCPEMNSU.js';
36
- import './chunk-OQTBHL5T.js';
37
+ import './chunk-BSGHOYMT.js';
37
38
  import './chunk-Z5M4YYWT.js';
38
39
  import './chunk-TYNZ5B2B.js';
39
- import './chunk-AT3IL55G.js';
40
+ import './chunk-IUEYRDEI.js';
40
41
  import './chunk-AXW67SY7.js';
41
42
  import './chunk-BYMOPN2S.js';
42
43
  import './chunk-SKLEJJ6M.js';
@@ -77,5 +78,5 @@ function ProfilePage(_props) {
77
78
  }
78
79
 
79
80
  export { ProfilePage };
80
- //# sourceMappingURL=ProfilePage-APTF4ZI3.js.map
81
- //# sourceMappingURL=ProfilePage-APTF4ZI3.js.map
81
+ //# sourceMappingURL=ProfilePage-2HZYDJBM.js.map
82
+ //# sourceMappingURL=ProfilePage-2HZYDJBM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/routes/account/profile/ProfilePage.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMO,SAAS,YAAY,MAAA,EAA0B;AACpD,EAAA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAK,GAAI,OAAA,EAAQ;AAE/B,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,QAAA,EAAA,EAAS,MAAK,wBAAA,EAAyB,CAAA;AAAA,oBAExC,GAAA,CAAC,QAAA,EAAA,EAAS,IAAA,EAAK,6BAAA,EAA8B,CAAA;AAAA,wBAE5C,gBAAA,EAAA,EAAiB,CAAA;AAAA,oBAElB,GAAA,CAAC,QAAA,EAAA,EAAS,IAAA,EAAK,2BAAA,EAA4B,CAAA;AAAA,wBAE1C,WAAA,EAAA,EAAY,CAAA;AAAA,oBAEb,GAAA;AAAA,MAAC,iBAAA;AAAA,MAAA;AAAA,QACE,GAAI,MAAM,WAAA,EAAa,qBAAA,GAAwB,EAAE,YAAA,EAAc,IAAA,KAAS,EAAC;AAAA,QAC1E,SAAA,EAAU;AAAA;AAAA,KACZ;AAAA,oBAEA,GAAA,CAAC,QAAA,EAAA,EAAS,IAAA,EAAK,sBAAA,EAAuB;AAAA,GAAA,EACxC,CAAA;AAEJ","file":"ProfilePage-2HZYDJBM.js","sourcesContent":["import { SallaUserProfile } from '@salla.sa/twilight-components-react/user-profile';\nimport { SallaVerify } from '@salla.sa/twilight-components-react/verify';\nimport { SallaUserSettings } from '@salla.sa/twilight-components-react/user-settings';\nimport { HookSlot, useUser } from '../../../hooks';\nimport type { ProfilePageProps } from './types';\n\nexport function ProfilePage(_props: ProfilePageProps) {\n const { data: user } = useUser();\n\n return (\n <>\n <HookSlot name=\"customer:profile.start\" />\n\n <HookSlot name=\"customer:profile.form.start\" />\n\n <SallaUserProfile />\n\n <HookSlot name=\"customer:profile.form.end\" />\n\n <SallaVerify />\n\n <SallaUserSettings\n {...(user?.preferences?.notifications_enabled ? { isNotifiable: true } : {})}\n className=\"mt-10 block\"\n />\n\n <HookSlot name=\"customer:profile.end\" />\n </>\n );\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { LazyBreadcrumb } from './chunk-AT3IL55G.js';
1
+ import { LazyBreadcrumb } from './chunk-IUEYRDEI.js';
2
2
  import './chunk-AXW67SY7.js';
3
3
  import './chunk-BYMOPN2S.js';
4
4
  import './chunk-SKLEJJ6M.js';
@@ -14,5 +14,5 @@ function ReviewsPage({ page }) {
14
14
  }
15
15
 
16
16
  export { ReviewsPage };
17
- //# sourceMappingURL=ReviewsPage-Q5UUELM5.js.map
18
- //# sourceMappingURL=ReviewsPage-Q5UUELM5.js.map
17
+ //# sourceMappingURL=ReviewsPage-FYAZU7FT.js.map
18
+ //# sourceMappingURL=ReviewsPage-FYAZU7FT.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/routes/testimonials/ReviewsPage.tsx"],"names":[],"mappings":";;;;;;;;AAIO,SAAS,WAAA,CAAY,EAAE,IAAA,EAAK,EAAqB;AACtD,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EACb,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,kBAAW,IAAA,EAAY,CAAA;AAAA,wBACvB,gBAAA,EAAA,EAAiB;AAAA,GAAA,EACpB,CAAA;AAEJ","file":"ReviewsPage-Q5UUELM5.js","sourcesContent":["import { SallaReviewsPage } from '@salla.sa/twilight-components-react/reviews-page';\nimport type { ReviewsPageProps } from './types';\nimport { Breadcrumb } from '../../components/common';\n\nexport function ReviewsPage({ page }: ReviewsPageProps) {\n return (\n <div className=\"container mb-20\">\n <Breadcrumb page={page} />\n <SallaReviewsPage />\n </div>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/routes/testimonials/ReviewsPage.tsx"],"names":[],"mappings":";;;;;;;;AAIO,SAAS,WAAA,CAAY,EAAE,IAAA,EAAK,EAAqB;AACtD,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EACb,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,kBAAW,IAAA,EAAY,CAAA;AAAA,wBACvB,gBAAA,EAAA,EAAiB;AAAA,GAAA,EACpB,CAAA;AAEJ","file":"ReviewsPage-FYAZU7FT.js","sourcesContent":["import { SallaReviewsPage } from '@salla.sa/twilight-components-react/reviews-page';\nimport type { ReviewsPageProps } from './types';\nimport { Breadcrumb } from '../../components/common';\n\nexport function ReviewsPage({ page }: ReviewsPageProps) {\n return (\n <div className=\"container mb-20\">\n <Breadcrumb page={page} />\n <SallaReviewsPage />\n </div>\n );\n}\n"]}
@@ -1,22 +1,23 @@
1
- import './chunk-FBOWKMPX.js';
1
+ import './chunk-CGDUSBLK.js';
2
2
  import './chunk-FHAHE46U.js';
3
- import './chunk-FFIONN5M.js';
4
- import './chunk-747V3UL5.js';
5
- import './chunk-KQEBYXYB.js';
3
+ import './chunk-672DTSG4.js';
4
+ import './chunk-HH7WFQLN.js';
5
+ import './chunk-3CNXPHJE.js';
6
6
  import './chunk-JYV25VNZ.js';
7
- import './chunk-WQJT663R.js';
7
+ import './chunk-SCM4P6QG.js';
8
8
  import './chunk-OXMUPNMH.js';
9
- import './chunk-GJFWNFMU.js';
9
+ import './chunk-AXPZEXJN.js';
10
10
  import './chunk-VVZNW5CB.js';
11
11
  import './chunk-5FJFN3IW.js';
12
12
  import './chunk-GD26FI4J.js';
13
+ import './chunk-FID76MUV.js';
13
14
  import './chunk-OM2GRPDH.js';
14
- import './chunk-QPKK4LPK.js';
15
+ import './chunk-WYWI77EA.js';
15
16
  import './chunk-OUW6WESU.js';
16
17
  import './chunk-BK5TBUGG.js';
17
18
  import './chunk-HI5V5X3S.js';
18
- import './chunk-ECY5POOK.js';
19
- import './chunk-VWZG5QKQ.js';
19
+ import './chunk-GSI42HHP.js';
20
+ import './chunk-ELARAFMR.js';
20
21
  import './chunk-MVT5AF2A.js';
21
22
  import './chunk-Z653O7MX.js';
22
23
  import './chunk-ZCH7W7DZ.js';
@@ -27,16 +28,16 @@ import './chunk-7V36I5GT.js';
27
28
  import './chunk-6WI7R2BD.js';
28
29
  import './chunk-JGVEGQHJ.js';
29
30
  import './chunk-OAMIDZKW.js';
30
- import './chunk-763YWRXT.js';
31
+ import './chunk-D423MW2M.js';
31
32
  import './chunk-OQIIJRAS.js';
32
33
  import './chunk-V2ZDTY6H.js';
33
- import './chunk-QRFYOEZY.js';
34
+ import './chunk-54FS47CL.js';
34
35
  import './chunk-5XDPAKF5.js';
35
36
  import './chunk-GCPEMNSU.js';
36
- import './chunk-OQTBHL5T.js';
37
+ import './chunk-BSGHOYMT.js';
37
38
  import './chunk-Z5M4YYWT.js';
38
39
  import { useTranslation } from './chunk-TYNZ5B2B.js';
39
- import './chunk-AT3IL55G.js';
40
+ import './chunk-IUEYRDEI.js';
40
41
  import './chunk-AXW67SY7.js';
41
42
  import './chunk-BYMOPN2S.js';
42
43
  import './chunk-SKLEJJ6M.js';
@@ -120,5 +121,5 @@ function SeoCartWidget({ cart, step = 1 }) {
120
121
  }
121
122
 
122
123
  export { SeoCartWidget };
123
- //# sourceMappingURL=SeoCartWidget-7BLWJVZ7.js.map
124
- //# sourceMappingURL=SeoCartWidget-7BLWJVZ7.js.map
124
+ //# sourceMappingURL=SeoCartWidget-7SUVC6MT.js.map
125
+ //# sourceMappingURL=SeoCartWidget-7SUVC6MT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/analytics/gtm.ts","../src/components/cart/SeoCartWidget.tsx"],"names":[],"mappings":"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","file":"SeoCartWidget-7SUVC6MT.js","sourcesContent":["import type { Cart, CartItem } from '../../types';\n\n// ─── Payload Types ───────────────────────────────────────────────────────────\n\nexport interface GtmCheckoutProduct {\n id: number;\n name: string;\n price: number;\n quantity: number;\n}\n\nexport interface GtmCheckoutEvent {\n event: 'checkout';\n ecommerce: {\n checkout: {\n actionField: { step: 1 | 2 | 3 };\n products: GtmCheckoutProduct[];\n cart_total: number;\n currency: string;\n };\n };\n}\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\nfunction getPriceAmount(value: CartItem['price']): number {\n if (typeof value === 'number') return value;\n return value.amount;\n}\n\nfunction getTotalAmount(value: Cart['total']): number {\n if (typeof value === 'number') return value;\n return parseFloat(value) || 0;\n}\n\n/**\n * Maps `Cart.items` to the GTM product array format.\n *\n * Only available items are included — mirrors PHP `$cartService->getAvailableItems()`.\n */\nexport function mapCartItemsToProducts(items: CartItem[]): GtmCheckoutProduct[] {\n return items\n .filter((item) => item.is_available)\n .map((item) => ({\n id: item.product_id,\n name: item.product_name,\n price: getPriceAmount(item.price),\n quantity: item.quantity,\n }));\n}\n\n// ─── Main Utility ─────────────────────────────────────────────────────────────\n\n/**\n * Pushes a GTM `checkout` event to `window.dataLayer`.\n *\n * Safe to call in SSR environments — guards against `typeof window`.\n * Initialises `window.dataLayer` if GTM hasn't done so yet.\n *\n * @param step Checkout funnel step (1 = cart, 2 = shipping, 3 = payment)\n * @param cart Current cart data from the Twilight loader\n * @param currencyCode ISO 4217 currency code, e.g. \"SAR\"\n */\nexport function pushCheckoutEvent(step: 1 | 2 | 3, cart: Cart, currencyCode: string): void {\n if (typeof window === 'undefined') return;\n\n window.dataLayer = window.dataLayer ?? [];\n\n const payload: GtmCheckoutEvent = {\n event: 'checkout',\n ecommerce: {\n checkout: {\n actionField: { step },\n products: mapCartItemsToProducts(cart.items),\n cart_total: getTotalAmount(cart.total),\n currency: currencyCode,\n },\n },\n };\n\n window.dataLayer.push(payload);\n}\n","import { useEffect } from 'react';\nimport { useTwilight } from '../../providers/TwilightProvider';\nimport { useTranslation } from '../../providers/I18nProvider';\nimport type { Cart } from '../../types';\nimport { pushCheckoutEvent } from '../../lib/analytics/gtm';\nimport { onSallaEvent } from '../../utils/sdk-helpers';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface SeoCartWidgetProps {\n /**\n * Cart data from the TanStack Router loader — no extra fetch needed.\n */\n cart: Cart;\n /**\n * Current checkout funnel step.\n * Defaults to `1` (cart view) — CartPage always passes this default.\n * The widget internally listens to Salla SDK events to promote to 2 / 3.\n */\n step?: 1 | 2 | 3;\n}\n\n// ─── Page title translation keys (mirrors PHP SeoCartWidget::$pageTitle) ─────\n\n/**\n * Matches the PHP backend exactly:\n * ```php\n * protected $pageTitle = [\n * self::STEP_CART => 'common.titles.cart',\n * self::STEP_SHIPPING => 'common.titles.shipping',\n * self::STEP_PAYMENT => 'common.titles.checkout',\n * ];\n * ```\n */\nconst PAGE_TITLE_KEYS: Record<1 | 2 | 3, string> = {\n 1: 'common.titles.cart',\n 2: 'common.titles.shipping',\n 3: 'common.titles.checkout',\n};\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\n/**\n * SeoCartWidget — Null-rendering analytics side-effect component.\n *\n * Responsibilities:\n * 1. Fires a GTM `checkout` event (step 1) on cart page load.\n * 2. Listens to Salla SDK checkout overlay events to fire steps 2 & 3.\n * 3. Updates `document.title` to reflect the cart context.\n *\n * Architecture:\n * - Lives in `theme-engine` so all themes using the engine get GTM tracking.\n * - Mounted directly inside `CartPage`, which already has loader data.\n * - `window.dataLayer` must be initialised by the store's GTM embed snippet;\n * the widget initialises it as a safe-guard but does NOT inject GTM itself.\n * - Must be mounted inside `<TwilightProvider>` (reads `currency` from context).\n *\n * @example\n * // In CartPage:\n * <SeoCartWidget cart={cart} />\n */\nexport function SeoCartWidget({ cart, step = 1 }: SeoCartWidgetProps) {\n const { store, currency } = useTwilight();\n const { t } = useTranslation();\n const currencyCode = currency?.code ?? 'SAR';\n\n // ── Fire GTM checkout event for step 1 (or whichever step is passed) ────────\n useEffect(() => {\n pushCheckoutEvent(step, cart, currencyCode);\n // Re-fire if the cart id, contents, or currency changes\n }, [step, cart, currencyCode]);\n\n // ── Subscribe to Salla SDK checkout step events (steps 2 & 3) ──────────────\n // Fires GTM events when the user advances through the checkout overlay.\n useEffect(() => {\n const onShipping = () => pushCheckoutEvent(2, cart, currencyCode);\n const onPayment = () => pushCheckoutEvent(3, cart, currencyCode);\n\n const offShipping = onSallaEvent('checkout::step.shipping', onShipping);\n const offPayment = onSallaEvent('checkout::step.payment', onPayment);\n\n return () => {\n offShipping();\n offPayment();\n };\n }, [cart, currencyCode]);\n\n // ── Update document title — mirrors PHP SeoCartWidget::$pageTitle ───────────\n // Step 1 → 'common.titles.cart' (e.g. \"Cart\")\n // Step 2 → 'common.titles.shipping' (e.g. \"Shipping\")\n // Step 3 → 'common.titles.checkout' (e.g. \"Checkout\")\n useEffect(() => {\n const storeTitle = store.meta?.title || store.name;\n const stepTitle = t(PAGE_TITLE_KEYS[step], PAGE_TITLE_KEYS[step]);\n document.title = storeTitle ? `${stepTitle} - ${storeTitle}` : stepTitle;\n }, [step, store.meta?.title, store.name, t]);\n\n return null;\n}\n"]}
@@ -1,22 +1,23 @@
1
- import './chunk-FBOWKMPX.js';
1
+ import './chunk-CGDUSBLK.js';
2
2
  import './chunk-FHAHE46U.js';
3
- import './chunk-FFIONN5M.js';
4
- import './chunk-747V3UL5.js';
5
- import './chunk-KQEBYXYB.js';
3
+ import './chunk-672DTSG4.js';
4
+ import './chunk-HH7WFQLN.js';
5
+ import './chunk-3CNXPHJE.js';
6
6
  import './chunk-JYV25VNZ.js';
7
- import './chunk-WQJT663R.js';
7
+ import './chunk-SCM4P6QG.js';
8
8
  import './chunk-OXMUPNMH.js';
9
- import './chunk-GJFWNFMU.js';
9
+ import './chunk-AXPZEXJN.js';
10
10
  import './chunk-VVZNW5CB.js';
11
11
  import './chunk-5FJFN3IW.js';
12
12
  import './chunk-GD26FI4J.js';
13
+ import './chunk-FID76MUV.js';
13
14
  import './chunk-OM2GRPDH.js';
14
- import './chunk-QPKK4LPK.js';
15
+ import './chunk-WYWI77EA.js';
15
16
  import './chunk-OUW6WESU.js';
16
17
  import './chunk-BK5TBUGG.js';
17
18
  import './chunk-HI5V5X3S.js';
18
- import './chunk-ECY5POOK.js';
19
- import './chunk-VWZG5QKQ.js';
19
+ import './chunk-GSI42HHP.js';
20
+ import './chunk-ELARAFMR.js';
20
21
  import './chunk-MVT5AF2A.js';
21
22
  import './chunk-Z653O7MX.js';
22
23
  import './chunk-ZCH7W7DZ.js';
@@ -27,16 +28,16 @@ import './chunk-7V36I5GT.js';
27
28
  import './chunk-6WI7R2BD.js';
28
29
  import './chunk-JGVEGQHJ.js';
29
30
  import './chunk-OAMIDZKW.js';
30
- import './chunk-763YWRXT.js';
31
+ import './chunk-D423MW2M.js';
31
32
  import './chunk-OQIIJRAS.js';
32
33
  import './chunk-V2ZDTY6H.js';
33
- import './chunk-QRFYOEZY.js';
34
+ import './chunk-54FS47CL.js';
34
35
  import { HookSlot } from './chunk-5XDPAKF5.js';
35
36
  import './chunk-GCPEMNSU.js';
36
- import './chunk-OQTBHL5T.js';
37
+ import './chunk-BSGHOYMT.js';
37
38
  import './chunk-Z5M4YYWT.js';
38
39
  import './chunk-TYNZ5B2B.js';
39
- import './chunk-AT3IL55G.js';
40
+ import './chunk-IUEYRDEI.js';
40
41
  import './chunk-AXW67SY7.js';
41
42
  import './chunk-BYMOPN2S.js';
42
43
  import './chunk-SKLEJJ6M.js';
@@ -64,5 +65,5 @@ function SettingsPage(_props) {
64
65
  }
65
66
 
66
67
  export { SettingsPage };
67
- //# sourceMappingURL=SettingsPage-I6STBZ2M.js.map
68
- //# sourceMappingURL=SettingsPage-I6STBZ2M.js.map
68
+ //# sourceMappingURL=SettingsPage-IBWVB4ZJ.js.map
69
+ //# sourceMappingURL=SettingsPage-IBWVB4ZJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/routes/account/settings/SettingsPage.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIO,SAAS,aAAa,MAAA,EAA2B;AACtD,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,QAAA,EAAA,EAAS,MAAK,yBAAA,EAA0B,CAAA;AAAA,wBACxC,iBAAA,EAAA,EAAkB,CAAA;AAAA,oBACnB,GAAA,CAAC,QAAA,EAAA,EAAS,IAAA,EAAK,uBAAA,EAAwB;AAAA,GAAA,EACzC,CAAA;AAEJ","file":"SettingsPage-IBWVB4ZJ.js","sourcesContent":["import { SallaUserSettings } from '@salla.sa/twilight-components-react/user-settings';\nimport { HookSlot } from '../../../hooks';\nimport type { SettingsPageProps } from './types';\n\nexport function SettingsPage(_props: SettingsPageProps) {\n return (\n <>\n <HookSlot name=\"customer:settings.start\" />\n <SallaUserSettings />\n <HookSlot name=\"customer:settings.end\" />\n </>\n );\n}\n"]}
@@ -1,23 +1,24 @@
1
- export { StoreClosedNotification } from './chunk-RDMEIF2O.js';
2
- import './chunk-FBOWKMPX.js';
1
+ export { StoreClosedNotification } from './chunk-OR6HPFZT.js';
2
+ import './chunk-CGDUSBLK.js';
3
3
  import './chunk-FHAHE46U.js';
4
- import './chunk-FFIONN5M.js';
5
- import './chunk-747V3UL5.js';
6
- import './chunk-KQEBYXYB.js';
4
+ import './chunk-672DTSG4.js';
5
+ import './chunk-HH7WFQLN.js';
6
+ import './chunk-3CNXPHJE.js';
7
7
  import './chunk-JYV25VNZ.js';
8
- import './chunk-WQJT663R.js';
8
+ import './chunk-SCM4P6QG.js';
9
9
  import './chunk-OXMUPNMH.js';
10
- import './chunk-GJFWNFMU.js';
10
+ import './chunk-AXPZEXJN.js';
11
11
  import './chunk-VVZNW5CB.js';
12
12
  import './chunk-5FJFN3IW.js';
13
13
  import './chunk-GD26FI4J.js';
14
+ import './chunk-FID76MUV.js';
14
15
  import './chunk-OM2GRPDH.js';
15
- import './chunk-QPKK4LPK.js';
16
+ import './chunk-WYWI77EA.js';
16
17
  import './chunk-OUW6WESU.js';
17
18
  import './chunk-BK5TBUGG.js';
18
19
  import './chunk-HI5V5X3S.js';
19
- import './chunk-ECY5POOK.js';
20
- import './chunk-VWZG5QKQ.js';
20
+ import './chunk-GSI42HHP.js';
21
+ import './chunk-ELARAFMR.js';
21
22
  import './chunk-MVT5AF2A.js';
22
23
  import './chunk-Z653O7MX.js';
23
24
  import './chunk-ZCH7W7DZ.js';
@@ -28,16 +29,16 @@ import './chunk-7V36I5GT.js';
28
29
  import './chunk-6WI7R2BD.js';
29
30
  import './chunk-JGVEGQHJ.js';
30
31
  import './chunk-OAMIDZKW.js';
31
- import './chunk-763YWRXT.js';
32
+ import './chunk-D423MW2M.js';
32
33
  import './chunk-OQIIJRAS.js';
33
34
  import './chunk-V2ZDTY6H.js';
34
- import './chunk-QRFYOEZY.js';
35
+ import './chunk-54FS47CL.js';
35
36
  import './chunk-5XDPAKF5.js';
36
37
  import './chunk-GCPEMNSU.js';
37
- import './chunk-OQTBHL5T.js';
38
+ import './chunk-BSGHOYMT.js';
38
39
  import './chunk-Z5M4YYWT.js';
39
40
  import './chunk-TYNZ5B2B.js';
40
- import './chunk-AT3IL55G.js';
41
+ import './chunk-IUEYRDEI.js';
41
42
  import './chunk-AXW67SY7.js';
42
43
  import './chunk-BYMOPN2S.js';
43
44
  import './chunk-SKLEJJ6M.js';
@@ -53,5 +54,5 @@ import './chunk-7VNVCHID.js';
53
54
  import './chunk-T72DAX7R.js';
54
55
  import './chunk-DF6FBKDN.js';
55
56
  import './chunk-DGUM43GV.js';
56
- //# sourceMappingURL=StoreClosedNotification-PNOFS2B5.js.map
57
- //# sourceMappingURL=StoreClosedNotification-PNOFS2B5.js.map
57
+ //# sourceMappingURL=StoreClosedNotification-CMOHA4LU.js.map
58
+ //# sourceMappingURL=StoreClosedNotification-CMOHA4LU.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"StoreClosedNotification-PNOFS2B5.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"StoreClosedNotification-CMOHA4LU.js"}
@@ -1,6 +1,6 @@
1
1
  import { useComments } from './chunk-BK5TBUGG.js';
2
2
  import { useTranslation } from './chunk-TYNZ5B2B.js';
3
- import { LazyBreadcrumb } from './chunk-AT3IL55G.js';
3
+ import { LazyBreadcrumb } from './chunk-IUEYRDEI.js';
4
4
  import './chunk-AXW67SY7.js';
5
5
  import './chunk-BYMOPN2S.js';
6
6
  import './chunk-SKLEJJ6M.js';
@@ -77,5 +77,5 @@ function TestimonialsPage({ page }) {
77
77
  }
78
78
 
79
79
  export { TestimonialsPage };
80
- //# sourceMappingURL=TestimonialsPage-S64KZKPY.js.map
81
- //# sourceMappingURL=TestimonialsPage-S64KZKPY.js.map
80
+ //# sourceMappingURL=TestimonialsPage-WJMIDBRM.js.map
81
+ //# sourceMappingURL=TestimonialsPage-WJMIDBRM.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/routes/testimonials/TestimonialsPage.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;AAOA,IAAM,gBAAA,GAAmB,CAAC,CAAA,KAA2C;AAAA,EACnE,EAAE,EAAA,EAAI,QAAA,EAAU,OAAO,CAAA,CAAE,sCAAA,EAAwC,QAAQ,CAAA,EAAE;AAAA,EAC3E,EAAE,EAAA,EAAI,QAAA,EAAU,OAAO,CAAA,CAAE,qCAAA,EAAuC,QAAQ,CAAA,EAAE;AAAA,EAC1E;AAAA,IACE,EAAA,EAAI,YAAA;AAAA,IACJ,KAAA,EAAO,CAAA,CAAE,wCAAA,EAA0C,WAAW;AAAA,GAChE;AAAA,EACA;AAAA,IACE,EAAA,EAAI,eAAA;AAAA,IACJ,KAAA,EAAO,CAAA,CAAE,uCAAA,EAAyC,WAAW;AAAA;AAEjE,CAAA;AAEO,SAAS,gBAAA,CAAiB,EAAE,IAAA,EAAK,EAA0B;AAChE,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,cAAA,EAAe;AAC7B,EAAA,MAAM,EAAE,WAAA,EAAY,GAAI,WAAA,EAAY;AAGpC,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,SAAS,MAAM;AACrD,IAAA,MAAM,MAAA,GAAS,IAAI,eAAA,CAAgB,MAAA,CAAO,SAAS,MAAM,CAAA;AACzD,IAAA,OAAO,MAAA,CAAO,GAAA,CAAI,MAAM,CAAA,IAAK,QAAA;AAAA,EAC/B,CAAC,CAAA;AAGD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,MAAA,CAAO,SAAS,IAAI,CAAA;AACxC,IAAA,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,MAAA,EAAQ,YAAY,CAAA;AACzC,IAAA,MAAA,CAAO,QAAQ,YAAA,CAAa,IAAA,EAAM,EAAA,EAAI,GAAA,CAAI,UAAU,CAAA;AAAA,EACtD,CAAA,EAAG,CAAC,YAAY,CAAC,CAAA;AAEjB,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,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,6DAAA,EACb,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,gDAAA,EACb,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,oBAAA,EAAsB,QAAA,EAAA,IAAA,CAAK,KAAA,EAAM,CAAA;AAAA,wBAC/C,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mBAAA,EACb,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,qDAAA;AAAA,cACV,OAAA,EAAQ,qBAAA;AAAA,cAEP,QAAA,EAAA,CAAA,CAAE,4BAA4B,SAAS;AAAA;AAAA,WAC1C;AAAA,0BACA,GAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,EAAA,EAAG,qBAAA;AAAA,cACH,SAAA,EAAU,iEAAA;AAAA,cACV,KAAA,EAAO,YAAA;AAAA,cACP,UAAU,CAAC,CAAA,KAAM,eAAA,CAAgB,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,cAE9C,QAAA,EAAA,gBAAA,CAAiB,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,GAAA,qBACxB,GAAA,CAAC,QAAA,EAAA,EAAoB,KAAA,EAAO,IAAI,EAAA,EAC7B,QAAA,EAAA,GAAA,CAAI,KAAA,EAAA,EADM,GAAA,CAAI,EAEjB,CACD;AAAA;AAAA;AACH,SAAA,EACF;AAAA,OAAA,EACF,CAAA;AAAA,sBAGA,GAAA;AAAA,QAAC,aAAA;AAAA,QAAA;AAAA,UAEC,YAAA,EAAY,IAAA;AAAA,UAEZ,MAAA,EAAQ,MAAA;AAAA,UACR,IAAA,EAAM;AAAA,SAAA;AAAA,QAJD,CAAA,EAAG,YAAY,CAAA,CAAA,EAAI,WAAW,CAAA;AAAA;AAKrC,KAAA,EACF,CAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ","file":"TestimonialsPage-S64KZKPY.js","sourcesContent":["import { useState, useEffect } from 'react';\nimport { SallaComments } from '@salla.sa/twilight-components-react/comments';\nimport { useTranslation } from '../../providers/I18nProvider';\nimport { useComments } from '../../hooks/useComments';\nimport type { TestimonialsPageProps } from './types';\nimport { Breadcrumb } from '../../components/common';\n\nconst buildSortOptions = (t: (key: string, fb: string) => string) => [\n { id: 'latest', label: t('pages.testimonials.sort_by_date_desc', 'Latest') },\n { id: 'oldest', label: t('pages.testimonials.sort_by_date_asc', 'Oldest') },\n {\n id: 'top_rating',\n label: t('pages.testimonials.sort_by_rating_desc', 'Top rated'),\n },\n {\n id: 'bottom_rating',\n label: t('pages.testimonials.sort_by_rating_asc', 'Low rated'),\n },\n];\n\nexport function TestimonialsPage({ page }: TestimonialsPageProps) {\n const { t } = useTranslation();\n const { commentsKey } = useComments();\n\n // Sync sort state with URL\n const [selectedSort, setSelectedSort] = useState(() => {\n const params = new URLSearchParams(window.location.search);\n return params.get('sort') || 'latest';\n });\n\n // Update URL when sort changes\n useEffect(() => {\n const url = new URL(window.location.href);\n url.searchParams.set('sort', selectedSort);\n window.history.replaceState(null, '', url.toString());\n }, [selectedSort]);\n\n return (\n <div className=\"container\">\n <Breadcrumb page={page} />\n\n <div className=\"flex justify-center\">\n <div className=\"w-full lg:w-10/12 bg-white rounded p-6 lg:p-8 mt-4 lg:mt-12\">\n <div className=\"mb-4 sm:mb-6 flex justify-between items-center\">\n <h1 className=\"font-bold text-2xl\">{page.title}</h1>\n <div className=\"flex items-center\">\n <label\n className=\"hidden sm:block rtl:ml-3 ltr:mr-3 whitespace-nowrap\"\n htmlFor=\"testimonials-filter\"\n >\n {t('pages.categories.sorting', 'Sort by')}\n </label>\n <select\n id=\"testimonials-filter\"\n className=\"form-input pt-0 pb-1 rtl:pl-10 ltr:pr-10 bg-white text-gray-900\"\n value={selectedSort}\n onChange={(e) => setSelectedSort(e.target.value)}\n >\n {buildSortOptions(t).map((opt) => (\n <option key={opt.id} value={opt.id}>\n {opt.label}\n </option>\n ))}\n </select>\n </div>\n </div>\n\n {/* Key prop forces reload when sort changes or new comment added */}\n <SallaComments\n key={`${selectedSort}-${commentsKey}`}\n testimonials\n // drifted wrapper types require itemId; testimonials mode has none\n itemId={undefined as never}\n sort={selectedSort as any}\n />\n </div>\n </div>\n </div>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/routes/testimonials/TestimonialsPage.tsx"],"names":[],"mappings":"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","file":"TestimonialsPage-WJMIDBRM.js","sourcesContent":["import { useState, useEffect } from 'react';\nimport { SallaComments } from '@salla.sa/twilight-components-react/comments';\nimport { useTranslation } from '../../providers/I18nProvider';\nimport { useComments } from '../../hooks/useComments';\nimport type { TestimonialsPageProps } from './types';\nimport { Breadcrumb } from '../../components/common';\n\nconst buildSortOptions = (t: (key: string, fb: string) => string) => [\n { id: 'latest', label: t('pages.testimonials.sort_by_date_desc', 'Latest') },\n { id: 'oldest', label: t('pages.testimonials.sort_by_date_asc', 'Oldest') },\n {\n id: 'top_rating',\n label: t('pages.testimonials.sort_by_rating_desc', 'Top rated'),\n },\n {\n id: 'bottom_rating',\n label: t('pages.testimonials.sort_by_rating_asc', 'Low rated'),\n },\n];\n\nexport function TestimonialsPage({ page }: TestimonialsPageProps) {\n const { t } = useTranslation();\n const { commentsKey } = useComments();\n\n // Sync sort state with URL\n const [selectedSort, setSelectedSort] = useState(() => {\n const params = new URLSearchParams(window.location.search);\n return params.get('sort') || 'latest';\n });\n\n // Update URL when sort changes\n useEffect(() => {\n const url = new URL(window.location.href);\n url.searchParams.set('sort', selectedSort);\n window.history.replaceState(null, '', url.toString());\n }, [selectedSort]);\n\n return (\n <div className=\"container\">\n <Breadcrumb page={page} />\n\n <div className=\"flex justify-center\">\n <div className=\"w-full lg:w-10/12 bg-white rounded p-6 lg:p-8 mt-4 lg:mt-12\">\n <div className=\"mb-4 sm:mb-6 flex justify-between items-center\">\n <h1 className=\"font-bold text-2xl\">{page.title}</h1>\n <div className=\"flex items-center\">\n <label\n className=\"hidden sm:block rtl:ml-3 ltr:mr-3 whitespace-nowrap\"\n htmlFor=\"testimonials-filter\"\n >\n {t('pages.categories.sorting', 'Sort by')}\n </label>\n <select\n id=\"testimonials-filter\"\n className=\"form-input pt-0 pb-1 rtl:pl-10 ltr:pr-10 bg-white text-gray-900\"\n value={selectedSort}\n onChange={(e) => setSelectedSort(e.target.value)}\n >\n {buildSortOptions(t).map((opt) => (\n <option key={opt.id} value={opt.id}>\n {opt.label}\n </option>\n ))}\n </select>\n </div>\n </div>\n\n {/* Key prop forces reload when sort changes or new comment added */}\n <SallaComments\n key={`${selectedSort}-${commentsKey}`}\n testimonials\n // drifted wrapper types require itemId; testimonials mode has none\n itemId={undefined as never}\n sort={selectedSort as any}\n />\n </div>\n </div>\n </div>\n );\n}\n"]}