@salla.sa/twilight-theme-engine 1.0.85 → 1.0.86

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 (372) hide show
  1. package/dist/{AddToCartForm-B5C2M4OZ.js → AddToCartForm-5X2WZDWR.js} +3 -3
  2. package/dist/{AddToCartForm-B5C2M4OZ.js.map → AddToCartForm-5X2WZDWR.js.map} +1 -1
  3. package/dist/{BlogAuthorPage-GTF4UGSS.js → BlogAuthorPage-LO7FSSJR.js} +12 -10
  4. package/dist/BlogAuthorPage-LO7FSSJR.js.map +1 -0
  5. package/dist/{BlogCategoryPage-TN7Y4NBP.js → BlogCategoryPage-KKFQ3PGR.js} +12 -10
  6. package/dist/BlogCategoryPage-KKFQ3PGR.js.map +1 -0
  7. package/dist/{BlogPage-TDB3M3PI.js → BlogPage-VLF3NSGE.js} +11 -9
  8. package/dist/BlogPage-VLF3NSGE.js.map +1 -0
  9. package/dist/{BlogSinglePage-4A52Q5QW.js → BlogSinglePage-AVK535IW.js} +11 -9
  10. package/dist/BlogSinglePage-AVK535IW.js.map +1 -0
  11. package/dist/{BlogTagPage-TOVPBETA.js → BlogTagPage-F3T4D7RH.js} +12 -10
  12. package/dist/BlogTagPage-F3T4D7RH.js.map +1 -0
  13. package/dist/{BrandsPage-VUDGYSQI.js → BrandsPage-LVSBZSVC.js} +11 -9
  14. package/dist/BrandsPage-LVSBZSVC.js.map +1 -0
  15. package/dist/{Breadcrumb-CI3SN5YR.js → Breadcrumb-VLFTXRFC.js} +11 -9
  16. package/dist/Breadcrumb-VLFTXRFC.js.map +1 -0
  17. package/dist/{CartItem-BHLEURAB.js → CartItem-G3H34GW6.js} +11 -9
  18. package/dist/CartItem-G3H34GW6.js.map +1 -0
  19. package/dist/{CartSummary-QERVESYN.js → CartSummary-VH37RPUI.js} +11 -9
  20. package/dist/CartSummary-VH37RPUI.js.map +1 -0
  21. package/dist/{Copyright-RL6ALKRC.js → Copyright-HE5ZWINZ.js} +3 -3
  22. package/dist/{Copyright-RL6ALKRC.js.map → Copyright-HE5ZWINZ.js.map} +1 -1
  23. package/dist/{CustomerLayout-VRZUWGQK.js → CustomerLayout-LKBLOAVW.js} +11 -9
  24. package/dist/CustomerLayout-LKBLOAVW.js.map +1 -0
  25. package/dist/{Footer-ZWBZCMDL.js → Footer-HHXAST72.js} +5 -5
  26. package/dist/{Footer-ZWBZCMDL.js.map → Footer-HHXAST72.js.map} +1 -1
  27. package/dist/{Header-WNK4O66B.js → Header-GEVZM2YG.js} +8 -6
  28. package/dist/{Header-WNK4O66B.js.map → Header-GEVZM2YG.js.map} +1 -1
  29. package/dist/{LoyaltyPage-CGTHWJ76.js → LoyaltyPage-M5CT3CFD.js} +11 -9
  30. package/dist/LoyaltyPage-M5CT3CFD.js.map +1 -0
  31. package/dist/{LoyaltyPointsPage-QSU6K3PW.js → LoyaltyPointsPage-SDJB52U6.js} +10 -3
  32. package/dist/LoyaltyPointsPage-SDJB52U6.js.map +1 -0
  33. package/dist/{MainMenu-V3T7F32R.js → MainMenu-I7EYS752.js} +3 -3
  34. package/dist/{MainMenu-V3T7F32R.js.map → MainMenu-I7EYS752.js.map} +1 -1
  35. package/dist/{MasterLayout-XQF644LD.js → MasterLayout-QDK4T3NE.js} +11 -9
  36. package/dist/{MasterLayout-XQF644LD.js.map → MasterLayout-QDK4T3NE.js.map} +1 -1
  37. package/dist/{MobileMenu-U4BVQYKH.js → MobileMenu-7VTCWAVJ.js} +11 -9
  38. package/dist/MobileMenu-7VTCWAVJ.js.map +1 -0
  39. package/dist/{NotificationsPage-ZRRQY7TF.js → NotificationsPage-QCABE6QD.js} +11 -9
  40. package/dist/NotificationsPage-QCABE6QD.js.map +1 -0
  41. package/dist/{OrderSinglePage-O3XYVMG5.js → OrderSinglePage-2HVBKBG4.js} +11 -9
  42. package/dist/OrderSinglePage-2HVBKBG4.js.map +1 -0
  43. package/dist/{OrdersPage-CMXZF5MI.js → OrdersPage-5MNCPCM3.js} +11 -9
  44. package/dist/OrdersPage-5MNCPCM3.js.map +1 -0
  45. package/dist/{PageSingle-IIG2US43.js → PageSingle-EN5XIM2B.js} +3 -3
  46. package/dist/{PageSingle-IIG2US43.js.map → PageSingle-EN5XIM2B.js.map} +1 -1
  47. package/dist/{ProductDetails-65GDABI7.js → ProductDetails-UEWQPPDZ.js} +13 -6
  48. package/dist/ProductDetails-UEWQPPDZ.js.map +1 -0
  49. package/dist/{ProfilePage-SNJ4WXU4.js → ProfilePage-TZSU3GHZ.js} +11 -9
  50. package/dist/ProfilePage-TZSU3GHZ.js.map +1 -0
  51. package/dist/{ReviewsPage-UT7UT55J.js → ReviewsPage-WYZ6CHF2.js} +3 -3
  52. package/dist/{ReviewsPage-UT7UT55J.js.map → ReviewsPage-WYZ6CHF2.js.map} +1 -1
  53. package/dist/{SeoCartWidget-DBJAXJKT.js → SeoCartWidget-5JR5RXQM.js} +11 -9
  54. package/dist/SeoCartWidget-5JR5RXQM.js.map +1 -0
  55. package/dist/{SettingsPage-FLTIOPU5.js → SettingsPage-DIDRQXMM.js} +11 -9
  56. package/dist/SettingsPage-DIDRQXMM.js.map +1 -0
  57. package/dist/{StoreClosedNotification-ZT3QKDKS.js → StoreClosedNotification-C2G32E34.js} +12 -10
  58. package/dist/{StoreClosedNotification-ZT3QKDKS.js.map → StoreClosedNotification-C2G32E34.js.map} +1 -1
  59. package/dist/{TestimonialsPage-CU7HKU4O.js → TestimonialsPage-XPHFRBZ7.js} +3 -3
  60. package/dist/{TestimonialsPage-CU7HKU4O.js.map → TestimonialsPage-XPHFRBZ7.js.map} +1 -1
  61. package/dist/{ThankYouPage-5X6B4X3T.js → ThankYouPage-UA6YYFB2.js} +11 -9
  62. package/dist/ThankYouPage-UA6YYFB2.js.map +1 -0
  63. package/dist/{WalletPage-H2BKIDPA.js → WalletPage-AJVV7LVL.js} +11 -9
  64. package/dist/WalletPage-AJVV7LVL.js.map +1 -0
  65. package/dist/{WishlistPage-RS5UCIQ3.js → WishlistPage-UW6LJLSW.js} +11 -9
  66. package/dist/WishlistPage-UW6LJLSW.js.map +1 -0
  67. package/dist/api/advertisement.d.ts +33 -0
  68. package/dist/api/advertisement.d.ts.map +1 -0
  69. package/dist/api/advertisement.js +8 -0
  70. package/dist/api/advertisement.js.map +1 -0
  71. package/dist/boot/critical-style.d.ts +3 -0
  72. package/dist/boot/critical-style.d.ts.map +1 -0
  73. package/dist/boot/index.d.ts +15 -0
  74. package/dist/boot/index.d.ts.map +1 -0
  75. package/dist/boot.d.ts +1 -0
  76. package/dist/boot.js +69 -0
  77. package/dist/boot.js.map +1 -0
  78. package/dist/{chunk-SE5JYWOK.js → chunk-2HCCIHU7.js} +4 -4
  79. package/dist/{chunk-SE5JYWOK.js.map → chunk-2HCCIHU7.js.map} +1 -1
  80. package/dist/chunk-4FJGZQD3.js +6 -0
  81. package/dist/chunk-4FJGZQD3.js.map +1 -0
  82. package/dist/{chunk-SDFDS4Q3.js → chunk-4WVJJ7SN.js} +20 -4
  83. package/dist/chunk-4WVJJ7SN.js.map +1 -0
  84. package/dist/{chunk-NXQJA7D3.js → chunk-BAYGWTNM.js} +3 -3
  85. package/dist/{chunk-NXQJA7D3.js.map → chunk-BAYGWTNM.js.map} +1 -1
  86. package/dist/{chunk-OWX2CPNQ.js → chunk-CLBFF2CY.js} +3 -3
  87. package/dist/{chunk-OWX2CPNQ.js.map → chunk-CLBFF2CY.js.map} +1 -1
  88. package/dist/chunk-DBW7XXNE.js +103 -0
  89. package/dist/chunk-DBW7XXNE.js.map +1 -0
  90. package/dist/{chunk-KHBSGD2D.js → chunk-DBXH3EMJ.js} +3 -3
  91. package/dist/{chunk-KHBSGD2D.js.map → chunk-DBXH3EMJ.js.map} +1 -1
  92. package/dist/{chunk-JRNH3FUF.js → chunk-E26YG3AO.js} +4 -4
  93. package/dist/{chunk-JRNH3FUF.js.map → chunk-E26YG3AO.js.map} +1 -1
  94. package/dist/{chunk-22SH7OVF.js → chunk-E7WWO3V3.js} +3 -3
  95. package/dist/{chunk-22SH7OVF.js.map → chunk-E7WWO3V3.js.map} +1 -1
  96. package/dist/{chunk-UJKFBZFJ.js → chunk-HQ7WA37L.js} +7 -7
  97. package/dist/{chunk-UJKFBZFJ.js.map → chunk-HQ7WA37L.js.map} +1 -1
  98. package/dist/chunk-IVBOLREE.js +29 -0
  99. package/dist/chunk-IVBOLREE.js.map +1 -0
  100. package/dist/{chunk-6SWDSRIL.js → chunk-KP3VYG4F.js} +6 -6
  101. package/dist/{chunk-6SWDSRIL.js.map → chunk-KP3VYG4F.js.map} +1 -1
  102. package/dist/{chunk-4CZRUAZB.js → chunk-PWTXR4RR.js} +10 -10
  103. package/dist/{chunk-4CZRUAZB.js.map → chunk-PWTXR4RR.js.map} +1 -1
  104. package/dist/chunk-QJYUTRAQ.js +14 -0
  105. package/dist/{chunk-7WAXN2PP.js.map → chunk-QJYUTRAQ.js.map} +1 -1
  106. package/dist/{chunk-JO7JWV34.js → chunk-U55ZJC2X.js} +4 -4
  107. package/dist/{chunk-JO7JWV34.js.map → chunk-U55ZJC2X.js.map} +1 -1
  108. package/dist/{chunk-SX5MF2YA.js → chunk-WSDG4ZRI.js} +4 -4
  109. package/dist/{chunk-SX5MF2YA.js.map → chunk-WSDG4ZRI.js.map} +1 -1
  110. package/dist/{chunk-NZVR4OF7.js → chunk-X54QP332.js} +8 -8
  111. package/dist/chunk-X54QP332.js.map +1 -0
  112. package/dist/components/cart/index.js +1 -1
  113. package/dist/components/common/index.js +1 -1
  114. package/dist/components/drawer/index.js +9 -7
  115. package/dist/components/home/index.js +11 -9
  116. package/dist/components/layout/PageAdvertisements.d.ts +7 -0
  117. package/dist/components/layout/PageAdvertisements.d.ts.map +1 -0
  118. package/dist/components/layout/index.d.ts +1 -0
  119. package/dist/components/layout/index.d.ts.map +1 -1
  120. package/dist/components/layout/index.js +8 -1
  121. package/dist/components/product/index.js +10 -8
  122. package/dist/components/store/index.js +11 -9
  123. package/dist/components/store/index.js.map +1 -1
  124. package/dist/{document-class-67HTP45G.js → document-class-7AXAAWGZ.js} +6 -5
  125. package/dist/{document-class-67HTP45G.js.map → document-class-7AXAAWGZ.js.map} +1 -1
  126. package/dist/hooks/index.js +9 -7
  127. package/dist/hooks/useGtm.js +9 -7
  128. package/dist/hooks/useMoney.js +9 -7
  129. package/dist/hooks/useStore.js +9 -7
  130. package/dist/index.js +9 -7
  131. package/dist/index.js.map +1 -1
  132. package/dist/{not-found-QTHBFPNT.js → not-found-3EEMQZMU.js} +11 -9
  133. package/dist/not-found-3EEMQZMU.js.map +1 -0
  134. package/dist/providers/index.js +9 -7
  135. package/dist/routes/account/orders.js +1 -1
  136. package/dist/routes/account.js +6 -6
  137. package/dist/routes/blog.js +5 -5
  138. package/dist/routes/brands.js +1 -1
  139. package/dist/routes/cart.js +13 -11
  140. package/dist/routes/cart.js.map +1 -1
  141. package/dist/routes/home.js +12 -10
  142. package/dist/routes/loyalty.js +2 -2
  143. package/dist/routes/page.js +1 -1
  144. package/dist/routes/product-listing.js +11 -9
  145. package/dist/routes/product-listing.js.map +1 -1
  146. package/dist/routes/product.js +11 -9
  147. package/dist/routes/product.js.map +1 -1
  148. package/dist/routes/root/beforeLoad.d.ts +2 -2
  149. package/dist/routes/root/beforeLoad.d.ts.map +1 -1
  150. package/dist/routes/root/head.d.ts.map +1 -1
  151. package/dist/routes/testimonials.js +2 -2
  152. package/dist/routes/thank-you.js +1 -1
  153. package/dist/skeleton.js +12 -10
  154. package/dist/tanstack/document-class.d.ts.map +1 -1
  155. package/dist/tanstack/index.d.ts +1 -0
  156. package/dist/tanstack/index.d.ts.map +1 -1
  157. package/dist/tanstack/stylesheet.d.ts +15 -0
  158. package/dist/tanstack/stylesheet.d.ts.map +1 -0
  159. package/dist/tanstack.js +34 -5
  160. package/dist/tanstack.js.map +1 -1
  161. package/dist/utils/index.js +1 -1
  162. package/dist/vite/index.js +1 -1
  163. package/package.json +12 -3
  164. package/tailwind/components/Component.tsx.txt +21 -0
  165. package/tailwind/components/ComponentRegistry.ts.txt +66 -0
  166. package/tailwind/components/cart/CartItem.tsx.txt +211 -0
  167. package/tailwind/components/cart/CartSummary.tsx.txt +269 -0
  168. package/tailwind/components/cart/PreOrderNotification.tsx.txt +16 -0
  169. package/tailwind/components/cart/PriceQuoteButton.tsx.txt +21 -0
  170. package/tailwind/components/cart/SeoCartWidget.tsx.txt +99 -0
  171. package/tailwind/components/cart/index.ts.txt +11 -0
  172. package/tailwind/components/cart/lazy.ts.txt +15 -0
  173. package/tailwind/components/collapse/Collapse.tsx.txt +95 -0
  174. package/tailwind/components/collapse/index.ts.txt +41 -0
  175. package/tailwind/components/common/Breadcrumb.tsx.txt +27 -0
  176. package/tailwind/components/common/BreadcrumbJsonLd.tsx.txt +40 -0
  177. package/tailwind/components/common/BreadcrumbTrail.tsx.txt +97 -0
  178. package/tailwind/components/common/CurrencySymbol.tsx.txt +8 -0
  179. package/tailwind/components/common/DeferredData.tsx.txt +122 -0
  180. package/tailwind/components/common/ErrorPage.tsx.txt +69 -0
  181. package/tailwind/components/common/Image.tsx.txt +119 -0
  182. package/tailwind/components/common/Link.tsx.txt +36 -0
  183. package/tailwind/components/common/Link.types.ts.txt +85 -0
  184. package/tailwind/components/common/NoContent.tsx.txt +27 -0
  185. package/tailwind/components/common/RenderWhenVisible.tsx.txt +92 -0
  186. package/tailwind/components/common/index.ts.txt +42 -0
  187. package/tailwind/components/common/lazy.ts.txt +28 -0
  188. package/tailwind/components/defineComponent.ts.txt +32 -0
  189. package/tailwind/components/drawer/Drawer.tsx.txt +219 -0
  190. package/tailwind/components/drawer/index.ts.txt +38 -0
  191. package/tailwind/components/dropdown/Dropdown.tsx.txt +166 -0
  192. package/tailwind/components/dropdown/index.ts.txt +40 -0
  193. package/tailwind/components/home/BundleComponent.tsx.txt +35 -0
  194. package/tailwind/components/home/ComponentErrorBoundary.tsx.txt +98 -0
  195. package/tailwind/components/home/FeaturedProductsStyle1.tsx.txt +125 -0
  196. package/tailwind/components/home/FeaturedProductsStyle2.tsx.txt +127 -0
  197. package/tailwind/components/home/FeaturedProductsStyle3.tsx.txt +71 -0
  198. package/tailwind/components/home/FixedBanner.tsx.txt +68 -0
  199. package/tailwind/components/home/FixedProducts.tsx.txt +72 -0
  200. package/tailwind/components/home/HomePageRenderer.tsx.txt +284 -0
  201. package/tailwind/components/home/PageBlocks.tsx.txt +24 -0
  202. package/tailwind/components/home/ParallaxBackground.tsx.txt +50 -0
  203. package/tailwind/components/home/PhotosSlider.tsx.txt +61 -0
  204. package/tailwind/components/home/ProductsSlider.tsx.txt +87 -0
  205. package/tailwind/components/home/ReorderProducts.tsx.txt +38 -0
  206. package/tailwind/components/home/SquarePhotos.tsx.txt +68 -0
  207. package/tailwind/components/home/StoreFeatures.tsx.txt +34 -0
  208. package/tailwind/components/home/Testimonials.tsx.txt +36 -0
  209. package/tailwind/components/home/Youtube.tsx.txt +48 -0
  210. package/tailwind/components/home/index.ts.txt +50 -0
  211. package/tailwind/components/home/lazy.ts.txt +17 -0
  212. package/tailwind/components/home/register.ts.txt +44 -0
  213. package/tailwind/components/home/reorder-hooks.ts.txt +52 -0
  214. package/tailwind/components/home/types.ts.txt +4 -0
  215. package/tailwind/components/layout/Copyright.tsx.txt +23 -0
  216. package/tailwind/components/layout/CustomerLayout.tsx.txt +91 -0
  217. package/tailwind/components/layout/Footer.tsx.txt +343 -0
  218. package/tailwind/components/layout/Header.tsx.txt +154 -0
  219. package/tailwind/components/layout/MasterLayout.tsx.txt +63 -0
  220. package/tailwind/components/layout/PageAdvertisements.tsx.txt +131 -0
  221. package/tailwind/components/layout/WidgetHead.tsx.txt +53 -0
  222. package/tailwind/components/layout/index.ts.txt +27 -0
  223. package/tailwind/components/layout/lazy.ts.txt +25 -0
  224. package/tailwind/components/layout/types.ts.txt +11 -0
  225. package/tailwind/components/modal/ImageModal.tsx.txt +70 -0
  226. package/tailwind/components/modal/Modal.tsx.txt +245 -0
  227. package/tailwind/components/modal/index.ts.txt +39 -0
  228. package/tailwind/components/modal/lazy.ts.txt +10 -0
  229. package/tailwind/components/navigation/MainMenu.tsx.txt +94 -0
  230. package/tailwind/components/navigation/MobileMenu.tsx.txt +160 -0
  231. package/tailwind/components/navigation/index.ts.txt +4 -0
  232. package/tailwind/components/navigation/lazy.ts.txt +11 -0
  233. package/tailwind/components/product/AddToCartForm.tsx.txt +365 -0
  234. package/tailwind/components/product/ProductCard.tsx.txt +305 -0
  235. package/tailwind/components/product/ProductDetails.tsx.txt +267 -0
  236. package/tailwind/components/product/ProductGallery.tsx.txt +234 -0
  237. package/tailwind/components/product/index.ts.txt +15 -0
  238. package/tailwind/components/product/lazy.ts.txt +9 -0
  239. package/tailwind/components/snippets/AppsSnippets.tsx.txt +225 -0
  240. package/tailwind/components/snippets/SallaSdkScripts.tsx.txt +14 -0
  241. package/tailwind/components/snippets/index.ts.txt +4 -0
  242. package/tailwind/components/store/StoreClosedNotification.tsx.txt +73 -0
  243. package/tailwind/components/store/index.ts.txt +8 -0
  244. package/tailwind/components/store/lazy.ts.txt +8 -0
  245. package/tailwind/components/toast/Toaster.tsx.txt +177 -0
  246. package/tailwind/components/toast/index.ts.txt +10 -0
  247. package/tailwind/components/toast/types.ts.txt +38 -0
  248. package/tailwind/components/toast/useToast.ts.txt +61 -0
  249. package/tailwind/components/tracking/GoogleTag.tsx.txt +77 -0
  250. package/tailwind/components/tracking/SiftSnippet.tsx.txt +49 -0
  251. package/tailwind/components/tracking/TwilightBundles.tsx.txt +67 -0
  252. package/tailwind/components/tracking/index.ts.txt +11 -0
  253. package/tailwind/components/tracking/lazy.ts.txt +11 -0
  254. package/tailwind/components/useComponent.ts.txt +12 -0
  255. package/tailwind/routes/account/index.tsx.txt +16 -0
  256. package/tailwind/routes/account/notifications/NotificationsPage.tsx.txt +54 -0
  257. package/tailwind/routes/account/notifications/index.tsx.txt +39 -0
  258. package/tailwind/routes/account/notifications/loader.ts.txt +22 -0
  259. package/tailwind/routes/account/notifications/types.ts.txt +18 -0
  260. package/tailwind/routes/account/orders/OrderSinglePage.tsx.txt +181 -0
  261. package/tailwind/routes/account/orders/OrdersPage.tsx.txt +28 -0
  262. package/tailwind/routes/account/orders/index.tsx.txt +86 -0
  263. package/tailwind/routes/account/orders/loader.ts.txt +66 -0
  264. package/tailwind/routes/account/orders/single/OrderActions.tsx.txt +197 -0
  265. package/tailwind/routes/account/orders/single/OrderHeader.tsx.txt +143 -0
  266. package/tailwind/routes/account/orders/single/OrderItemRow.tsx.txt +209 -0
  267. package/tailwind/routes/account/orders/single/OrderSections.tsx.txt +215 -0
  268. package/tailwind/routes/account/orders/single/types.ts.txt +38 -0
  269. package/tailwind/routes/account/orders/types.ts.txt +29 -0
  270. package/tailwind/routes/account/profile/ProfilePage.tsx.txt +30 -0
  271. package/tailwind/routes/account/profile/index.tsx.txt +39 -0
  272. package/tailwind/routes/account/profile/loader.ts.txt +16 -0
  273. package/tailwind/routes/account/profile/types.ts.txt +5 -0
  274. package/tailwind/routes/account/settings/SettingsPage.tsx.txt +13 -0
  275. package/tailwind/routes/account/settings/index.tsx.txt +39 -0
  276. package/tailwind/routes/account/settings/loader.ts.txt +13 -0
  277. package/tailwind/routes/account/settings/types.ts.txt +5 -0
  278. package/tailwind/routes/account/types.ts.txt +320 -0
  279. package/tailwind/routes/account/wallet/WalletPage.tsx.txt +195 -0
  280. package/tailwind/routes/account/wallet/index.tsx.txt +38 -0
  281. package/tailwind/routes/account/wallet/loader.ts.txt +27 -0
  282. package/tailwind/routes/account/wallet/types.ts.txt +11 -0
  283. package/tailwind/routes/account/wishlist/WishlistPage.tsx.txt +314 -0
  284. package/tailwind/routes/account/wishlist/WishlistShare.tsx.txt +248 -0
  285. package/tailwind/routes/account/wishlist/index.tsx.txt +40 -0
  286. package/tailwind/routes/account/wishlist/loader.ts.txt +26 -0
  287. package/tailwind/routes/account/wishlist/types.ts.txt +9 -0
  288. package/tailwind/routes/blog/BlogAuthorPage.tsx.txt +82 -0
  289. package/tailwind/routes/blog/BlogCategoryPage.tsx.txt +84 -0
  290. package/tailwind/routes/blog/BlogPage.tsx.txt +191 -0
  291. package/tailwind/routes/blog/BlogSinglePage.tsx.txt +168 -0
  292. package/tailwind/routes/blog/BlogTagPage.tsx.txt +84 -0
  293. package/tailwind/routes/blog/BlogTags.tsx.txt +54 -0
  294. package/tailwind/routes/blog/components.tsx.txt +87 -0
  295. package/tailwind/routes/blog/index.tsx.txt +238 -0
  296. package/tailwind/routes/blog/loader.ts.txt +173 -0
  297. package/tailwind/routes/blog/types.ts.txt +106 -0
  298. package/tailwind/routes/brands/BrandsPage.tsx.txt +179 -0
  299. package/tailwind/routes/brands/index.tsx.txt +47 -0
  300. package/tailwind/routes/brands/loader.ts.txt +14 -0
  301. package/tailwind/routes/brands/types.ts.txt +53 -0
  302. package/tailwind/routes/cart/CartPage.tsx.txt +112 -0
  303. package/tailwind/routes/cart/index.tsx.txt +39 -0
  304. package/tailwind/routes/cart/loader.ts.txt +15 -0
  305. package/tailwind/routes/cart/types.ts.txt +6 -0
  306. package/tailwind/routes/home/HomePage.tsx.txt +53 -0
  307. package/tailwind/routes/home/index.tsx.txt +56 -0
  308. package/tailwind/routes/home/loader.ts.txt +24 -0
  309. package/tailwind/routes/home/types.ts.txt +11 -0
  310. package/tailwind/routes/index.ts.txt +94 -0
  311. package/tailwind/routes/lazy.ts.txt +105 -0
  312. package/tailwind/routes/loyalty/LoyaltyPage.tsx.txt +17 -0
  313. package/tailwind/routes/loyalty/LoyaltyPointsPage.tsx.txt +11 -0
  314. package/tailwind/routes/loyalty/index.tsx.txt +81 -0
  315. package/tailwind/routes/loyalty/loader.ts.txt +53 -0
  316. package/tailwind/routes/loyalty/types.ts.txt +109 -0
  317. package/tailwind/routes/not-found.tsx.txt +50 -0
  318. package/tailwind/routes/page/PageSingle.tsx.txt +34 -0
  319. package/tailwind/routes/page/index.tsx.txt +60 -0
  320. package/tailwind/routes/page/loader.ts.txt +19 -0
  321. package/tailwind/routes/page/types.ts.txt +34 -0
  322. package/tailwind/routes/product/ProductPage.tsx.txt +77 -0
  323. package/tailwind/routes/product/index.tsx.txt +157 -0
  324. package/tailwind/routes/product/loader.ts.txt +35 -0
  325. package/tailwind/routes/product/types.ts.txt +6 -0
  326. package/tailwind/routes/product-listing/ProductListPage.tsx.txt +321 -0
  327. package/tailwind/routes/product-listing/index.tsx.txt +95 -0
  328. package/tailwind/routes/product-listing/loader.ts.txt +323 -0
  329. package/tailwind/routes/product-listing/types.ts.txt +96 -0
  330. package/tailwind/routes/product-listing/useAppliedFilters.ts.txt +130 -0
  331. package/tailwind/routes/product-short-link.ts.txt +104 -0
  332. package/tailwind/routes/root/beforeLoad.ts.txt +354 -0
  333. package/tailwind/routes/root/head.ts.txt +424 -0
  334. package/tailwind/routes/root/index.ts.txt +2 -0
  335. package/tailwind/routes/seo-redirects.ts.txt +82 -0
  336. package/tailwind/routes/testimonials/ReviewsPage.tsx.txt +12 -0
  337. package/tailwind/routes/testimonials/TestimonialsPage.tsx.txt +80 -0
  338. package/tailwind/routes/testimonials/index.tsx.txt +80 -0
  339. package/tailwind/routes/testimonials/loader.ts.txt +29 -0
  340. package/tailwind/routes/testimonials/types.ts.txt +9 -0
  341. package/tailwind/routes/thank-you/ThankYouPage.tsx.txt +241 -0
  342. package/tailwind/routes/thank-you/index.tsx.txt +49 -0
  343. package/tailwind/routes/thank-you/loader.ts.txt +40 -0
  344. package/tailwind/routes/thank-you/types.ts.txt +16 -0
  345. package/tailwind/routes/types.ts.txt +41 -0
  346. package/dist/BlogAuthorPage-GTF4UGSS.js.map +0 -1
  347. package/dist/BlogCategoryPage-TN7Y4NBP.js.map +0 -1
  348. package/dist/BlogPage-TDB3M3PI.js.map +0 -1
  349. package/dist/BlogSinglePage-4A52Q5QW.js.map +0 -1
  350. package/dist/BlogTagPage-TOVPBETA.js.map +0 -1
  351. package/dist/BrandsPage-VUDGYSQI.js.map +0 -1
  352. package/dist/Breadcrumb-CI3SN5YR.js.map +0 -1
  353. package/dist/CartItem-BHLEURAB.js.map +0 -1
  354. package/dist/CartSummary-QERVESYN.js.map +0 -1
  355. package/dist/CustomerLayout-VRZUWGQK.js.map +0 -1
  356. package/dist/LoyaltyPage-CGTHWJ76.js.map +0 -1
  357. package/dist/LoyaltyPointsPage-QSU6K3PW.js.map +0 -1
  358. package/dist/MobileMenu-U4BVQYKH.js.map +0 -1
  359. package/dist/NotificationsPage-ZRRQY7TF.js.map +0 -1
  360. package/dist/OrderSinglePage-O3XYVMG5.js.map +0 -1
  361. package/dist/OrdersPage-CMXZF5MI.js.map +0 -1
  362. package/dist/ProductDetails-65GDABI7.js.map +0 -1
  363. package/dist/ProfilePage-SNJ4WXU4.js.map +0 -1
  364. package/dist/SeoCartWidget-DBJAXJKT.js.map +0 -1
  365. package/dist/SettingsPage-FLTIOPU5.js.map +0 -1
  366. package/dist/ThankYouPage-5X6B4X3T.js.map +0 -1
  367. package/dist/WalletPage-H2BKIDPA.js.map +0 -1
  368. package/dist/WishlistPage-RS5UCIQ3.js.map +0 -1
  369. package/dist/chunk-7WAXN2PP.js +0 -14
  370. package/dist/chunk-NZVR4OF7.js.map +0 -1
  371. package/dist/chunk-SDFDS4Q3.js.map +0 -1
  372. package/dist/not-found-QTHBFPNT.js.map +0 -1
@@ -0,0 +1,86 @@
1
+ import type { HeadDescriptor } from '../../../utils/head';
2
+ import { buildHreflangAlternates } from '../../../utils/baseHead';
3
+ import { lazy } from 'react';
4
+ import { ordersLoader, orderSingleLoader } from './loader';
5
+ import type { OrdersPageProps, OrderSinglePageProps, OrdersSearchParams } from './types';
6
+ import type { IdParams } from '../../types';
7
+ import type { TwilightContext } from '../../../twilight/context';
8
+ import { RouteId } from '../../../router/route-ids';
9
+
10
+ // Lazy-load components for code-splitting
11
+ const LazyOrdersPage = lazy(() => import('./OrdersPage').then((m) => ({ default: m.OrdersPage })));
12
+ const LazyOrderSinglePage = lazy(() =>
13
+ import('./OrderSinglePage').then((m) => ({ default: m.OrderSinglePage }))
14
+ );
15
+
16
+ export const OrdersPage = LazyOrdersPage;
17
+ export const OrderSinglePage = LazyOrderSinglePage;
18
+ export { ordersLoader, orderSingleLoader } from './loader';
19
+ export type {
20
+ OrdersPageProps,
21
+ OrderSinglePageProps,
22
+ OrdersSearchParams,
23
+ OrdersQuery,
24
+ } from './types';
25
+
26
+ async function ordersLoaderWithExtend(
27
+ ctx: { search?: OrdersSearchParams; locale?: string; with_items?: boolean | number },
28
+ extend?: (
29
+ data: OrdersPageProps,
30
+ ctx: { params: Record<string, never> }
31
+ ) => Promise<Record<string, unknown>> | Record<string, unknown>
32
+ ): Promise<OrdersPageProps> {
33
+ const query = ctx.search;
34
+ // ordersLoader already merges the result of `extend`; calling it again here ran it twice.
35
+ return ordersLoader({ query, with_items: ctx.with_items }, extend);
36
+ }
37
+
38
+ function ordersHead(ctx: TwilightContext, data: OrdersPageProps): HeadDescriptor {
39
+ const isPending = data.query?.status === 'pending';
40
+ const base: HeadDescriptor = {
41
+ title: ctx.i18n.t(isPending ? 'common.titles.pending_orders' : 'common.titles.orders'),
42
+ description: data.page.description,
43
+ alternateLanguages: buildHreflangAlternates(ctx.settings, ctx.location.pathname),
44
+ };
45
+
46
+ return base;
47
+ }
48
+
49
+ async function orderSingleLoaderWithExtend(
50
+ ctx: { params: IdParams; locale?: string },
51
+ extend?: (
52
+ data: OrderSinglePageProps,
53
+ ctx: { params: IdParams }
54
+ ) => Promise<Record<string, unknown>> | Record<string, unknown>
55
+ ): Promise<OrderSinglePageProps> {
56
+ const data = await orderSingleLoader({ params: ctx.params });
57
+
58
+ if (extend) {
59
+ const extra = await extend(data, ctx);
60
+ return { ...data, ...extra } as OrderSinglePageProps;
61
+ }
62
+ return data;
63
+ }
64
+
65
+ function orderSingleHead(ctx: TwilightContext, data: OrderSinglePageProps): HeadDescriptor {
66
+ const base: HeadDescriptor = {
67
+ title: data.page.title,
68
+ description: data.page.description,
69
+ alternateLanguages: buildHreflangAlternates(ctx.settings, ctx.location.pathname),
70
+ };
71
+
72
+ return base;
73
+ }
74
+
75
+ export const Orders = {
76
+ id: RouteId.CUSTOMER_ORDERS_INDEX,
77
+ loader: ordersLoaderWithExtend,
78
+ head: ordersHead,
79
+ Component: LazyOrdersPage,
80
+ } as const;
81
+ export const OrderSingle = {
82
+ id: RouteId.CUSTOMER_ORDERS_SINGLE,
83
+ loader: orderSingleLoaderWithExtend,
84
+ head: orderSingleHead,
85
+ Component: LazyOrderSinglePage,
86
+ } as const;
@@ -0,0 +1,66 @@
1
+ import { order } from '../../../api/order';
2
+ import { getTwilightContext } from '../../../twilight/context';
3
+ import { RouteId } from '../../../router/route-ids';
4
+ import { orThrow, orUnauthorized, unauthorized } from '../../../providers/NavigationProvider';
5
+ import { getAuthToken } from '../../../api/client';
6
+ import type { OrdersPageProps, OrderSinglePageProps, OrdersQuery } from './types';
7
+ import type { IdParams } from '../../types';
8
+
9
+ export async function ordersLoader(
10
+ ctx: { query?: OrdersQuery; with_items?: boolean | number },
11
+ extend?: (
12
+ data: OrdersPageProps,
13
+ ctx: { params: Record<string, never> }
14
+ ) => Promise<Record<string, unknown>> | Record<string, unknown>
15
+ ): Promise<OrdersPageProps> {
16
+ if (!getAuthToken()) throw unauthorized();
17
+ const query = ctx.query;
18
+ const isPending = query?.status === 'pending';
19
+ const response = await orUnauthorized(
20
+ order.list({
21
+ // Only decides the empty state; <salla-orders> applies its own review filter (`?tab=waiting`).
22
+ status: query?.status,
23
+ ...(ctx.with_items ? { with_items: ctx.with_items } : {}),
24
+ })
25
+ );
26
+ const i18n = getTwilightContext().i18n;
27
+ const pageData: OrdersPageProps = {
28
+ page: {
29
+ title: isPending ? i18n.t('common.titles.pending_orders') : i18n.t('common.titles.orders'),
30
+ slug: RouteId.CUSTOMER_ORDERS_INDEX,
31
+ },
32
+ orders: response.data,
33
+ cursor: response.cursor,
34
+ query,
35
+ };
36
+
37
+ if (extend) {
38
+ const extra = await extend(pageData, { params: {} });
39
+ return { ...pageData, ...extra } as OrdersPageProps;
40
+ }
41
+ return pageData;
42
+ }
43
+
44
+ export async function orderSingleLoader({
45
+ params,
46
+ }: {
47
+ params: IdParams;
48
+ }): Promise<OrderSinglePageProps> {
49
+ if (!getAuthToken()) throw unauthorized();
50
+ const [data, componentsOrder] = await Promise.all([
51
+ order.findOrThrow(params.id),
52
+ orThrow(orUnauthorized(order.findForComponents(params.id))),
53
+ ]);
54
+ const i18n = getTwilightContext().i18n;
55
+ return {
56
+ page: {
57
+ slug: RouteId.CUSTOMER_ORDERS_SINGLE,
58
+ id: String(params.id),
59
+ title: i18n
60
+ .t('pages.orders.order_details')
61
+ .replace(':id', String(data.order.reference_id ?? params.id)),
62
+ },
63
+ order: data.order,
64
+ componentsOrder,
65
+ };
66
+ }
@@ -0,0 +1,197 @@
1
+ import { useState } from 'react';
2
+ import { SallaButton } from '@salla.sa/twilight-components-react/button';
3
+ import { SallaModal } from '@salla.sa/twilight-components-react/modal';
4
+ import { useIsClient, useUser } from '../../../../hooks';
5
+ import { useAsyncFn } from '../../../../hooks/useAsyncFn';
6
+ import { useTranslation } from '../../../../providers/I18nProvider';
7
+ import { useLocation, useNavigate } from '../../../../providers/NavigationProvider';
8
+ import type { Order } from './types';
9
+
10
+ function ConfirmModal({
11
+ visible,
12
+ onVisibleChange,
13
+ title,
14
+ subTitle,
15
+ iconStyle,
16
+ confirmColor,
17
+ onConfirm,
18
+ busy,
19
+ }: {
20
+ visible: boolean;
21
+ onVisibleChange: (visible: boolean) => void;
22
+ title: string;
23
+ subTitle: string;
24
+ iconStyle: 'success' | 'error';
25
+ confirmColor?: 'danger';
26
+ onConfirm: () => void;
27
+ busy: boolean;
28
+ }) {
29
+ const { t } = useTranslation();
30
+ // The modal wrapper renders only in the browser, so mount after hydration to match the server.
31
+ const isClient = useIsClient();
32
+ if (!isClient) return null;
33
+ return (
34
+ <SallaModal
35
+ width="sm"
36
+ visible={visible}
37
+ onModalVisibilityChanged={(e) => onVisibleChange(Boolean(e.detail))}
38
+ {...{ 'modal-title': title }}
39
+ subTitle={subTitle}
40
+ iconStyle={iconStyle}
41
+ >
42
+ <div slot="footer" className="grid grid-cols-2 gap-3">
43
+ <SallaButton
44
+ width="wide"
45
+ color={confirmColor}
46
+ className="w-full cursor-pointer"
47
+ onClick={onConfirm}
48
+ disabled={busy}
49
+ >
50
+ {t('common.elements.ok')}
51
+ </SallaButton>
52
+ <SallaButton
53
+ className="w-full"
54
+ fill="outline"
55
+ color="light"
56
+ onClick={() => onVisibleChange(false)}
57
+ disabled={busy}
58
+ >
59
+ {t('common.elements.cancel')}
60
+ </SallaButton>
61
+ </div>
62
+ </SallaModal>
63
+ );
64
+ }
65
+
66
+ function PaymentOrReorder({
67
+ order,
68
+ paymentExpired,
69
+ canReorder,
70
+ onReorder,
71
+ busy,
72
+ }: {
73
+ order: Order;
74
+ paymentExpired: boolean;
75
+ canReorder: boolean;
76
+ onReorder: () => void;
77
+ busy: boolean;
78
+ }) {
79
+ const { t } = useTranslation();
80
+ if (order.actions.payable) {
81
+ return paymentExpired || !order.urls.checkout ? (
82
+ <span className="text-red-500">{t('pages.orders.pending_payment_expired')}</span>
83
+ ) : (
84
+ <SallaButton width="wide" href={order.urls.checkout}>
85
+ <i className="sicon sicon-wallet rtl:ml-2 ltr:mr-2"></i>
86
+ <span>{t('pages.orders.finish_payment')}</span>
87
+ </SallaButton>
88
+ );
89
+ }
90
+ if (!canReorder) return null;
91
+ return (
92
+ <>
93
+ <div className="text-sm">
94
+ <h3 className="font-bold text-lg leading-none mb-1">{t('pages.orders.reorder')}</h3>
95
+ <p className="text-gray-500">{t('pages.orders.reorder_description')}</p>
96
+ </div>
97
+ <SallaButton
98
+ data-testid="store-order-reorder-btn"
99
+ shape="link"
100
+ onClick={onReorder}
101
+ disabled={busy}
102
+ >
103
+ <i className="sicon sicon-rotate rtl:ml-2 ltr:mr-2"></i>
104
+ <span>{t('pages.orders.reorder')}</span>
105
+ </SallaButton>
106
+ </>
107
+ );
108
+ }
109
+
110
+ /** The "Reorder & Cancel" card, its pending-payment state and the two confirmations. */
111
+ export function OrderActions({ order, paymentExpired }: { order: Order; paymentExpired: boolean }) {
112
+ const { t } = useTranslation();
113
+ // Token-based, so the server and the first client render agree (the user query loads later).
114
+ const { isLoggedIn } = useUser();
115
+ const navigate = useNavigate();
116
+ const location = useLocation();
117
+ const [showReorder, setShowReorder] = useState(false);
118
+ const [showCancel, setShowCancel] = useState(false);
119
+ const { reorderable, cancellable, payable } = order.actions;
120
+ const canReorder = isLoggedIn && reorderable;
121
+
122
+ const [reorderState, handleReorder] = useAsyncFn(async () => {
123
+ await window.salla?.order.createCartFromOrder(Number(order.id));
124
+ setShowReorder(false);
125
+ navigate('/cart');
126
+ }, [navigate, order.id]);
127
+
128
+ const [cancelState, handleCancel] = useAsyncFn(async () => {
129
+ await window.salla?.order.cancel(Number(order.id));
130
+ setShowCancel(false);
131
+ navigate(location.pathname, { replace: true });
132
+ }, [navigate, order.id, location.pathname]);
133
+
134
+ if (!reorderable && !cancellable && !payable) return null;
135
+
136
+ return (
137
+ <>
138
+ <div className="bg-white rounded-md p-5 divide-y divide-border-color space-y-4">
139
+ {(reorderable || payable) && (
140
+ <div className={payable ? 'flex-center' : 'center-between'}>
141
+ <PaymentOrReorder
142
+ order={order}
143
+ paymentExpired={paymentExpired}
144
+ canReorder={!!canReorder}
145
+ onReorder={() => setShowReorder(true)}
146
+ busy={reorderState.loading}
147
+ />
148
+ </div>
149
+ )}
150
+
151
+ {cancellable && (
152
+ <div className="center-between pt-4">
153
+ <div className="text-sm">
154
+ <h3 className="font-bold text-lg leading-none mb-1">{t('pages.orders.cancel')}</h3>
155
+ <p className="text-gray-500">{t('pages.order.order_cancelation_desc')}</p>
156
+ </div>
157
+ <SallaButton
158
+ data-testid="store-order-cancel-btn"
159
+ shape="link"
160
+ color="danger"
161
+ onClick={() => setShowCancel(true)}
162
+ disabled={cancelState.loading}
163
+ >
164
+ <i className="sicon sicon-cancel-circle rtl:ml-2 ltr:mr-2"></i>
165
+ <span>{t('pages.orders.cancel')}</span>
166
+ </SallaButton>
167
+ </div>
168
+ )}
169
+ </div>
170
+
171
+ {/* Always mounted: salla-modal moves itself under <body> and opens from `visible`. */}
172
+ {canReorder && (
173
+ <ConfirmModal
174
+ visible={showReorder}
175
+ onVisibleChange={setShowReorder}
176
+ title={t('pages.orders.reorder')}
177
+ subTitle={t('pages.orders.reorder_confirmation')}
178
+ iconStyle="success"
179
+ onConfirm={handleReorder}
180
+ busy={reorderState.loading}
181
+ />
182
+ )}
183
+ {cancellable && (
184
+ <ConfirmModal
185
+ visible={showCancel}
186
+ onVisibleChange={setShowCancel}
187
+ title={t('common.elements.warning')}
188
+ subTitle={t('pages.orders.cancel_confirmation')}
189
+ iconStyle="error"
190
+ confirmColor="danger"
191
+ onConfirm={handleCancel}
192
+ busy={cancelState.loading}
193
+ />
194
+ )}
195
+ </>
196
+ );
197
+ }
@@ -0,0 +1,143 @@
1
+ import { useState } from 'react';
2
+ import { SallaButton } from '@salla.sa/twilight-components-react/button';
3
+ import { useDate, useNumber } from '../../../../hooks';
4
+ import { useTranslation } from '../../../../providers/I18nProvider';
5
+ import { useTwilight } from '../../../../providers/twilight-context';
6
+ import type { Order, TwigOrder } from './types';
7
+
8
+ const PRINT_WINDOW = 'noopener, toolbar=yes, scrollbars=yes, resizable=yes, width=900, height=700';
9
+
10
+ function OrderStatus({ order, paymentExpired }: { order: Order; paymentExpired: boolean }) {
11
+ const { t } = useTranslation();
12
+ if (paymentExpired) {
13
+ return <span className="text-red-500">{t('pages.orders.pending_payment_expired')}</span>;
14
+ }
15
+ return (
16
+ <span
17
+ className="text-primary inline-flex items-center rtl:space-x-reverse space-x-1"
18
+ style={{ color: order.status.color }}
19
+ >
20
+ <i className={`mt-1 ${order.status.icon}`}></i>
21
+ <span> {order.status.name}</span>
22
+ </span>
23
+ );
24
+ }
25
+
26
+ /** Twig's `order.print_url()`; `urls.receipt` is the buyer's bank-transfer image. */
27
+ function PrintAction({ order }: { order: Order }) {
28
+ const { t } = useTranslation();
29
+ const { store } = useTwilight();
30
+ const [printNoticeOpen, setPrintNoticeOpen] = useState(false);
31
+ const print = () =>
32
+ window.open(
33
+ order.urls.print ??
34
+ `${(store?.url ?? '').replace(/\/$/, '')}/account/orders/${order.id}/print`,
35
+ '_blank',
36
+ PRINT_WINDOW
37
+ );
38
+
39
+ return order.actions.invoice_printable === false ? (
40
+ <div
41
+ className={`tooltip-toggle tooltip-toggle--clickable inline-block${printNoticeOpen ? ' visible' : ''}`}
42
+ >
43
+ <button
44
+ type="button"
45
+ className="text-primary border border-primary rounded text-center px-4 py-2 cursor-pointer"
46
+ onClick={() => setPrintNoticeOpen(true)}
47
+ >
48
+ <i className="sicon-printer2 v-align"></i> {t('pages.orders.print')}
49
+ </button>
50
+ <div className="tooltip-content shadow-md rounded text-gray-500">
51
+ <small>
52
+ {' '}
53
+ {t('pages.orders.to_order_invoice_contact_vendor')}
54
+ <br />
55
+ {t('pages.orders.print_order_details')}{' '}
56
+ <button type="button" className="text-primary underline cursor-pointer" onClick={print}>
57
+ {t('pages.orders.click_here')}
58
+ </button>
59
+ </small>
60
+ <SallaButton
61
+ shape="link"
62
+ color="danger"
63
+ size="small"
64
+ className="close-tooltip"
65
+ onClick={() => setPrintNoticeOpen(false)}
66
+ >
67
+ <i className="sicon-cancel"></i>
68
+ </SallaButton>
69
+ </div>
70
+ </div>
71
+ ) : (
72
+ <SallaButton fill="outline" size="small" onClick={print}>
73
+ <i className="sicon-printer2 v-align"></i> {t('pages.orders.print')}
74
+ </SallaButton>
75
+ );
76
+ }
77
+
78
+ /** The date / status / links / print row at the top of the order page. */
79
+ export function OrderHeader({
80
+ order,
81
+ links,
82
+ paymentExpired,
83
+ }: {
84
+ order: Order;
85
+ links: TwigOrder['links'];
86
+ paymentExpired: boolean;
87
+ }) {
88
+ const { t, direction } = useTranslation();
89
+ const { format: formatDate } = useDate();
90
+ const { format: formatNumber } = useNumber();
91
+
92
+ return (
93
+ <table className="min-w-full rounded-md overflow-hidden">
94
+ <tbody>
95
+ <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">
96
+ <td
97
+ data-testid="store-order-status"
98
+ 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 "
99
+ >
100
+ <div className="rtl:ml-2 ltr:mr-2 font-normal text-gray-400">
101
+ {t('pages.orders.date')}
102
+ </div>
103
+ <b>{formatNumber(formatDate(order.created_at.date))}</b>
104
+ </td>
105
+
106
+ <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 ">
107
+ <OrderStatus order={order} paymentExpired={paymentExpired} />
108
+
109
+ <div className="flex items-center justify-between">
110
+ {order.type === 'quote' && (
111
+ <span className="text-red-500 ml-4">
112
+ {t('pages.orders.your_order_is_under_review')}
113
+ </span>
114
+ )}
115
+
116
+ {!!links?.length && (
117
+ <div className="flex space-x-2 rtl:space-x-reverse text-start flex-none px-2">
118
+ {links.map((link) => (
119
+ <a
120
+ key={link.url}
121
+ href={link.url}
122
+ className="text-primary-reverse bg-primary px-4 py-2 rounded"
123
+ target="_blank"
124
+ rel="noreferrer"
125
+ >
126
+ {link.label}{' '}
127
+ <i
128
+ className={
129
+ direction === 'rtl' ? 'sicon-arrow-up-left' : 'sicon-arrow-up-right'
130
+ }
131
+ ></i>
132
+ </a>
133
+ ))}
134
+ </div>
135
+ )}
136
+ <PrintAction order={order} />
137
+ </div>
138
+ </td>
139
+ </tr>
140
+ </tbody>
141
+ </table>
142
+ );
143
+ }