@salla.sa/twilight-theme-engine 1.0.60 → 1.0.62
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.
- package/dist/{AddToCartForm-GFAJUB4Y.js → AddToCartForm-HC24EPIH.js} +26 -6
- package/dist/AddToCartForm-HC24EPIH.js.map +1 -0
- package/dist/{BlogAuthorPage-WWA75UTA.js → BlogAuthorPage-BYPC2H3B.js} +19 -17
- package/dist/BlogAuthorPage-BYPC2H3B.js.map +1 -0
- package/dist/{BlogCategoryPage-VGIAMWPH.js → BlogCategoryPage-SDOHIF4O.js} +19 -17
- package/dist/BlogCategoryPage-SDOHIF4O.js.map +1 -0
- package/dist/{BlogPage-5MW4WSOH.js → BlogPage-WMFITGI7.js} +17 -15
- package/dist/BlogPage-WMFITGI7.js.map +1 -0
- package/dist/{BlogSinglePage-67E3PVMP.js → BlogSinglePage-32GR3ARO.js} +17 -15
- package/dist/BlogSinglePage-32GR3ARO.js.map +1 -0
- package/dist/{BlogTagPage-EEOIAALL.js → BlogTagPage-FMH7YMYW.js} +19 -17
- package/dist/BlogTagPage-FMH7YMYW.js.map +1 -0
- package/dist/BrandsPage-QLO4XO5V.js +188 -0
- package/dist/BrandsPage-QLO4XO5V.js.map +1 -0
- package/dist/{Breadcrumb-4I2HVAFR.js → Breadcrumb-6I4ZXJP6.js} +17 -15
- package/dist/Breadcrumb-6I4ZXJP6.js.map +1 -0
- package/dist/{CartItem-A7Y6MZXS.js → CartItem-FLPJREOC.js} +90 -65
- package/dist/CartItem-FLPJREOC.js.map +1 -0
- package/dist/{CartSummary-MUCVTNKG.js → CartSummary-4LVQXTO2.js} +17 -15
- package/dist/CartSummary-4LVQXTO2.js.map +1 -0
- package/dist/{Copyright-VJYMP42V.js → Copyright-DHXKJXS3.js} +3 -3
- package/dist/{Copyright-VJYMP42V.js.map → Copyright-DHXKJXS3.js.map} +1 -1
- package/dist/{CustomerLayout-L3Y2TIPF.js → CustomerLayout-RIJ2KLKV.js} +17 -15
- package/dist/CustomerLayout-RIJ2KLKV.js.map +1 -0
- package/dist/{Footer-OQFU25J4.js → Footer-OAUEPXMT.js} +17 -15
- package/dist/{Footer-OQFU25J4.js.map → Footer-OAUEPXMT.js.map} +1 -1
- package/dist/{Header-QNNAHZJL.js → Header-SLIN3ZSS.js} +7 -7
- package/dist/{Header-QNNAHZJL.js.map → Header-SLIN3ZSS.js.map} +1 -1
- package/dist/{LoyaltyPage-IULR2XKZ.js → LoyaltyPage-BQB7BDUO.js} +18 -16
- package/dist/LoyaltyPage-BQB7BDUO.js.map +1 -0
- package/dist/{MainMenu-3KKSHFCS.js → MainMenu-EHFPPGYJ.js} +9 -8
- package/dist/MainMenu-EHFPPGYJ.js.map +1 -0
- package/dist/{MasterLayout-HJWMQHWO.js → MasterLayout-K737DLVH.js} +17 -15
- package/dist/{MasterLayout-HJWMQHWO.js.map → MasterLayout-K737DLVH.js.map} +1 -1
- package/dist/{MobileMenu-DBJ23EKX.js → MobileMenu-S5CBPTOC.js} +18 -16
- package/dist/MobileMenu-S5CBPTOC.js.map +1 -0
- package/dist/{NotificationsPage-PUS3WBU6.js → NotificationsPage-W2N5QD5U.js} +17 -15
- package/dist/NotificationsPage-W2N5QD5U.js.map +1 -0
- package/dist/{OrderSinglePage-4CK6OT6U.js → OrderSinglePage-GOGNRVPM.js} +18 -16
- package/dist/OrderSinglePage-GOGNRVPM.js.map +1 -0
- package/dist/{OrdersPage-EGIDHSYS.js → OrdersPage-YB7WU5QV.js} +18 -16
- package/dist/OrdersPage-YB7WU5QV.js.map +1 -0
- package/dist/{PageSingle-ORPH52QX.js → PageSingle-6HBQPKK5.js} +3 -3
- package/dist/{PageSingle-ORPH52QX.js.map → PageSingle-6HBQPKK5.js.map} +1 -1
- package/dist/{ProductDetails-RY6PNKKJ.js → ProductDetails-HLSACRJJ.js} +3 -3
- package/dist/{ProductDetails-RY6PNKKJ.js.map → ProductDetails-HLSACRJJ.js.map} +1 -1
- package/dist/{ProfilePage-IO2MDE53.js → ProfilePage-Z3CXGXWV.js} +17 -15
- package/dist/ProfilePage-Z3CXGXWV.js.map +1 -0
- package/dist/{SeoCartWidget-TPSVEGMI.js → SeoCartWidget-SUXBLTDW.js} +17 -15
- package/dist/SeoCartWidget-SUXBLTDW.js.map +1 -0
- package/dist/{SettingsPage-ZTD4ALAA.js → SettingsPage-BNELVWPX.js} +17 -15
- package/dist/SettingsPage-BNELVWPX.js.map +1 -0
- package/dist/{StoreClosedNotification-52REE2T5.js → StoreClosedNotification-PLPV6EJS.js} +18 -16
- package/dist/{StoreClosedNotification-52REE2T5.js.map → StoreClosedNotification-PLPV6EJS.js.map} +1 -1
- package/dist/{TestimonialsPage-QDBHJADT.js → TestimonialsPage-LRITI3DU.js} +4 -4
- package/dist/{TestimonialsPage-QDBHJADT.js.map → TestimonialsPage-LRITI3DU.js.map} +1 -1
- package/dist/{ThankYouPage-IRLZI3HI.js → ThankYouPage-IR2ZJJ47.js} +17 -15
- package/dist/ThankYouPage-IR2ZJJ47.js.map +1 -0
- package/dist/{WalletPage-ZTSSGFMO.js → WalletPage-RDG4DJ75.js} +18 -16
- package/dist/WalletPage-RDG4DJ75.js.map +1 -0
- package/dist/{WishlistPage-OADS7B5J.js → WishlistPage-TCI3MFCX.js} +19 -17
- package/dist/WishlistPage-TCI3MFCX.js.map +1 -0
- package/dist/api/apps.js +6 -5
- package/dist/api/brands.d.ts +6 -5
- package/dist/api/brands.d.ts.map +1 -1
- package/dist/api/brands.js +7 -6
- package/dist/api/cart.js +7 -6
- package/dist/api/category.js +7 -6
- package/dist/api/client.js +5 -4
- package/dist/api/home.js +6 -5
- package/dist/api/loyalty.js +7 -6
- package/dist/api/menu.js +6 -5
- package/dist/api/notification.js +6 -5
- package/dist/api/order.js +7 -6
- package/dist/api/page.js +7 -6
- package/dist/api/product.js +7 -6
- package/dist/api/profile.js +5 -4
- package/dist/api/profile.js.map +1 -1
- package/dist/api/store.js +6 -5
- package/dist/api/translations.js +6 -5
- package/dist/api/user.js +6 -5
- package/dist/api/wishlist.js +8 -7
- package/dist/{chunk-R3TPJHLI.js → chunk-2SDIXR52.js} +4 -4
- package/dist/{chunk-R3TPJHLI.js.map → chunk-2SDIXR52.js.map} +1 -1
- package/dist/{chunk-YGDAYFQY.js → chunk-2XGQSJKH.js} +3 -3
- package/dist/{chunk-YGDAYFQY.js.map → chunk-2XGQSJKH.js.map} +1 -1
- package/dist/{chunk-J7BQY4ZK.js → chunk-3ITQB3PY.js} +4 -4
- package/dist/{chunk-J7BQY4ZK.js.map → chunk-3ITQB3PY.js.map} +1 -1
- package/dist/{chunk-K34A2LBY.js → chunk-4DHLIY6V.js} +4 -4
- package/dist/{chunk-K34A2LBY.js.map → chunk-4DHLIY6V.js.map} +1 -1
- package/dist/{chunk-KZMUU5ZD.js → chunk-5X2UFNKY.js} +3 -3
- package/dist/{chunk-KZMUU5ZD.js.map → chunk-5X2UFNKY.js.map} +1 -1
- package/dist/{chunk-S7JSNUU2.js → chunk-5ZR2HKZ7.js} +3 -3
- package/dist/{chunk-S7JSNUU2.js.map → chunk-5ZR2HKZ7.js.map} +1 -1
- package/dist/{chunk-IFWQTDEY.js → chunk-6HJLG7KF.js} +6 -6
- package/dist/{chunk-IFWQTDEY.js.map → chunk-6HJLG7KF.js.map} +1 -1
- package/dist/{chunk-GXXWHVLS.js → chunk-7OIP65ER.js} +5 -5
- package/dist/{chunk-GXXWHVLS.js.map → chunk-7OIP65ER.js.map} +1 -1
- package/dist/chunk-7V36I5GT.js +26 -0
- package/dist/chunk-7V36I5GT.js.map +1 -0
- package/dist/{chunk-R2ULWW5T.js → chunk-DPWX5WRB.js} +28 -21
- package/dist/chunk-DPWX5WRB.js.map +1 -0
- package/dist/{chunk-GX3EDS32.js → chunk-E2JXP2PP.js} +9 -6
- package/dist/chunk-E2JXP2PP.js.map +1 -0
- package/dist/{chunk-ICPO2ELD.js → chunk-EAZGFREP.js} +3 -3
- package/dist/{chunk-ICPO2ELD.js.map → chunk-EAZGFREP.js.map} +1 -1
- package/dist/{chunk-T63KKKW2.js → chunk-GUGZ4CEG.js} +4 -4
- package/dist/{chunk-T63KKKW2.js.map → chunk-GUGZ4CEG.js.map} +1 -1
- package/dist/{chunk-GZKCZ6X7.js → chunk-H5CFMW4M.js} +5 -5
- package/dist/{chunk-GZKCZ6X7.js.map → chunk-H5CFMW4M.js.map} +1 -1
- package/dist/{chunk-NYD5Z4RJ.js → chunk-J3WIGP64.js} +4 -4
- package/dist/{chunk-NYD5Z4RJ.js.map → chunk-J3WIGP64.js.map} +1 -1
- package/dist/chunk-JSV64SPM.js +14 -0
- package/dist/{chunk-6EES4C7J.js.map → chunk-JSV64SPM.js.map} +1 -1
- package/dist/{chunk-KRCPBXFJ.js → chunk-JVGZDLFP.js} +4 -4
- package/dist/{chunk-KRCPBXFJ.js.map → chunk-JVGZDLFP.js.map} +1 -1
- package/dist/{chunk-6LIGRH4O.js → chunk-MSMFH6BM.js} +5 -5
- package/dist/{chunk-6LIGRH4O.js.map → chunk-MSMFH6BM.js.map} +1 -1
- package/dist/{chunk-OGQXRBCR.js → chunk-N2S25NXP.js} +37 -9
- package/dist/chunk-N2S25NXP.js.map +1 -0
- package/dist/{chunk-NOB7OWFA.js → chunk-NQVJ7NJ6.js} +3 -3
- package/dist/{chunk-NOB7OWFA.js.map → chunk-NQVJ7NJ6.js.map} +1 -1
- package/dist/{chunk-NKLKKZM6.js → chunk-OET4G4XC.js} +3 -3
- package/dist/{chunk-NKLKKZM6.js.map → chunk-OET4G4XC.js.map} +1 -1
- package/dist/{chunk-ANWDPISS.js → chunk-OIH4XW47.js} +18 -16
- package/dist/chunk-OIH4XW47.js.map +1 -0
- package/dist/{chunk-BHU25UEW.js → chunk-P3OPJL6I.js} +6 -5
- package/dist/chunk-P3OPJL6I.js.map +1 -0
- package/dist/{chunk-B3EFOE57.js → chunk-PK7EU5TM.js} +2 -2
- package/dist/chunk-PK7EU5TM.js.map +1 -0
- package/dist/{chunk-ZOZLNUNA.js → chunk-Q3COPV5Z.js} +4 -4
- package/dist/{chunk-ZOZLNUNA.js.map → chunk-Q3COPV5Z.js.map} +1 -1
- package/dist/{chunk-UQAUDOI7.js → chunk-QVLEF2GR.js} +10 -7
- package/dist/chunk-QVLEF2GR.js.map +1 -0
- package/dist/{chunk-YGSU36MZ.js → chunk-RJAVZBUK.js} +3 -3
- package/dist/{chunk-YGSU36MZ.js.map → chunk-RJAVZBUK.js.map} +1 -1
- package/dist/{chunk-XTMHHLNK.js → chunk-SR4OTLTJ.js} +23 -5
- package/dist/chunk-SR4OTLTJ.js.map +1 -0
- package/dist/{chunk-HAV32VZS.js → chunk-TDZSHACC.js} +30 -5
- package/dist/chunk-TDZSHACC.js.map +1 -0
- package/dist/{chunk-NK2V2SW5.js → chunk-TLO2M5TJ.js} +5 -5
- package/dist/{chunk-NK2V2SW5.js.map → chunk-TLO2M5TJ.js.map} +1 -1
- package/dist/{chunk-T26Y47JL.js → chunk-TTMYT3RB.js} +4 -4
- package/dist/{chunk-T26Y47JL.js.map → chunk-TTMYT3RB.js.map} +1 -1
- package/dist/{chunk-VRV5F6G7.js → chunk-TYLKNVQA.js} +5 -25
- package/dist/chunk-TYLKNVQA.js.map +1 -0
- package/dist/{chunk-X7P2WSNU.js → chunk-UIOLSYKV.js} +3 -3
- package/dist/{chunk-X7P2WSNU.js.map → chunk-UIOLSYKV.js.map} +1 -1
- package/dist/{chunk-6DVYW7OA.js → chunk-UZKTK6YV.js} +4 -4
- package/dist/{chunk-6DVYW7OA.js.map → chunk-UZKTK6YV.js.map} +1 -1
- package/dist/{chunk-HF6RCUMD.js → chunk-VJHDE6UT.js} +4 -4
- package/dist/{chunk-HF6RCUMD.js.map → chunk-VJHDE6UT.js.map} +1 -1
- package/dist/{chunk-AODO3GFK.js → chunk-VSJLPWFI.js} +4 -4
- package/dist/{chunk-AODO3GFK.js.map → chunk-VSJLPWFI.js.map} +1 -1
- package/dist/{chunk-JDDQHFIW.js → chunk-W2B5P54C.js} +4 -4
- package/dist/{chunk-JDDQHFIW.js.map → chunk-W2B5P54C.js.map} +1 -1
- package/dist/{chunk-RLSYCDI4.js → chunk-WH225GEC.js} +26 -11
- package/dist/chunk-WH225GEC.js.map +1 -0
- package/dist/chunk-WY4IYO3G.js +25 -0
- package/dist/chunk-WY4IYO3G.js.map +1 -0
- package/dist/{chunk-CUX7O42G.js → chunk-Y7EOX2OE.js} +3 -3
- package/dist/{chunk-CUX7O42G.js.map → chunk-Y7EOX2OE.js.map} +1 -1
- package/dist/{chunk-WPHI6Q6N.js → chunk-YH4O3H4R.js} +4 -4
- package/dist/{chunk-WPHI6Q6N.js.map → chunk-YH4O3H4R.js.map} +1 -1
- package/dist/chunk-ZQGMVUPE.js +29 -0
- package/dist/chunk-ZQGMVUPE.js.map +1 -0
- package/dist/components/cart/CartItem.d.ts.map +1 -1
- package/dist/components/cart/index.js +1 -1
- package/dist/components/common/index.js +1 -1
- package/dist/components/drawer/index.js +15 -13
- package/dist/components/home/index.js +18 -16
- package/dist/components/layout/index.js +5 -5
- package/dist/components/product/AddToCartForm.d.ts.map +1 -1
- package/dist/components/product/ProductCard.d.ts.map +1 -1
- package/dist/components/product/index.js +16 -14
- package/dist/components/store/index.js +17 -15
- package/dist/components/store/index.js.map +1 -1
- package/dist/document-class-5KOR5KVY.js +26 -0
- package/dist/{document-class-SX2LHILG.js.map → document-class-5KOR5KVY.js.map} +1 -1
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +15 -13
- package/dist/hooks/useGtm.js +15 -13
- package/dist/hooks/useHostAttributes.d.ts +4 -0
- package/dist/hooks/useHostAttributes.d.ts.map +1 -0
- package/dist/hooks/useHostAttributes.js +4 -0
- package/dist/hooks/useHostAttributes.js.map +1 -0
- package/dist/hooks/useMoney.js +15 -13
- package/dist/hooks/useStore.js +15 -13
- package/dist/hooks/useUser.js +7 -6
- package/dist/index.js +15 -13
- package/dist/index.js.map +1 -1
- package/dist/navigation-QMBOIYJI.js +12 -0
- package/dist/{navigation-Z6JMJ4FZ.js.map → navigation-QMBOIYJI.js.map} +1 -1
- package/dist/{navigation-7WGWEDLB.js → navigation-XZJCQXY3.js} +5 -5
- package/dist/{navigation-7WGWEDLB.js.map → navigation-XZJCQXY3.js.map} +1 -1
- package/dist/{not-found-CDXSWL7T.js → not-found-ZJXJJYD3.js} +18 -16
- package/dist/not-found-ZJXJJYD3.js.map +1 -0
- package/dist/providers/NavigationProvider.d.ts +5 -5
- package/dist/providers/NavigationProvider.d.ts.map +1 -1
- package/dist/providers/TwilightProvider.d.ts.map +1 -1
- package/dist/providers/index.js +15 -13
- package/dist/routes/account/notifications/loader.d.ts.map +1 -1
- package/dist/routes/account/orders/loader.d.ts.map +1 -1
- package/dist/routes/account/orders.js +8 -7
- package/dist/routes/account/profile/loader.d.ts.map +1 -1
- package/dist/routes/account/settings/loader.d.ts.map +1 -1
- package/dist/routes/account/wallet/loader.d.ts.map +1 -1
- package/dist/routes/account/wishlist/loader.d.ts.map +1 -1
- package/dist/routes/account.js +24 -20
- package/dist/routes/account.js.map +1 -1
- package/dist/routes/blog.js +12 -11
- package/dist/routes/blog.js.map +1 -1
- package/dist/routes/brands/BrandsPage.d.ts +1 -1
- package/dist/routes/brands/BrandsPage.d.ts.map +1 -1
- package/dist/routes/brands/index.d.ts +2 -2
- package/dist/routes/brands/index.d.ts.map +1 -1
- package/dist/routes/brands/loader.d.ts.map +1 -1
- package/dist/routes/brands/types.d.ts +4 -1
- package/dist/routes/brands/types.d.ts.map +1 -1
- package/dist/routes/brands.js +12 -22
- package/dist/routes/brands.js.map +1 -1
- package/dist/routes/cart.js +23 -21
- package/dist/routes/cart.js.map +1 -1
- package/dist/routes/home.js +20 -18
- package/dist/routes/index.js +4 -4
- package/dist/routes/lazy.d.ts +1 -1
- package/dist/routes/lazy.d.ts.map +1 -1
- package/dist/routes/loyalty/index.d.ts +1 -1
- package/dist/routes/loyalty/index.d.ts.map +1 -1
- package/dist/routes/loyalty/loader.d.ts +1 -1
- package/dist/routes/loyalty/loader.d.ts.map +1 -1
- package/dist/routes/loyalty.js +21 -12
- package/dist/routes/loyalty.js.map +1 -1
- package/dist/routes/page.js +8 -7
- package/dist/routes/page.js.map +1 -1
- package/dist/routes/product-listing.js +20 -18
- package/dist/routes/product-listing.js.map +1 -1
- package/dist/routes/product.js +18 -16
- package/dist/routes/product.js.map +1 -1
- package/dist/routes/seo-redirects.js +4 -4
- package/dist/routes/testimonials.js +2 -2
- package/dist/routes/thank-you.js +8 -7
- package/dist/routes/thank-you.js.map +1 -1
- package/dist/skeleton.js +20 -18
- package/dist/tanstack/navigation.d.ts.map +1 -1
- package/dist/tanstack.js +19 -28
- package/dist/tanstack.js.map +1 -1
- package/dist/twilight/context.d.ts.map +1 -1
- package/dist/types/salla-sdk.d.ts +1 -1
- package/dist/types/salla-sdk.d.ts.map +1 -1
- package/dist/utils/cookies.d.ts +7 -0
- package/dist/utils/cookies.d.ts.map +1 -1
- package/dist/utils/head.d.ts +3 -0
- package/dist/utils/head.d.ts.map +1 -1
- package/dist/utils/head.js +1 -1
- package/dist/utils/index.js +7 -6
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/request-host.d.ts +2 -8
- package/dist/utils/request-host.d.ts.map +1 -1
- package/dist/utils/store-base.d.ts +11 -0
- package/dist/utils/store-base.d.ts.map +1 -1
- package/dist/vite/index.js +7 -3
- package/dist/vite/index.js.map +1 -1
- package/dist/vite/plugins/package-aliases.plugin.d.ts.map +1 -1
- package/package.json +5 -1
- package/dist/AddToCartForm-GFAJUB4Y.js.map +0 -1
- package/dist/BlogAuthorPage-WWA75UTA.js.map +0 -1
- package/dist/BlogCategoryPage-VGIAMWPH.js.map +0 -1
- package/dist/BlogPage-5MW4WSOH.js.map +0 -1
- package/dist/BlogSinglePage-67E3PVMP.js.map +0 -1
- package/dist/BlogTagPage-EEOIAALL.js.map +0 -1
- package/dist/BrandsPage-SNVIBZGR.js +0 -132
- package/dist/BrandsPage-SNVIBZGR.js.map +0 -1
- package/dist/Breadcrumb-4I2HVAFR.js.map +0 -1
- package/dist/CartItem-A7Y6MZXS.js.map +0 -1
- package/dist/CartSummary-MUCVTNKG.js.map +0 -1
- package/dist/CustomerLayout-L3Y2TIPF.js.map +0 -1
- package/dist/LoyaltyPage-IULR2XKZ.js.map +0 -1
- package/dist/MainMenu-3KKSHFCS.js.map +0 -1
- package/dist/MobileMenu-DBJ23EKX.js.map +0 -1
- package/dist/NotificationsPage-PUS3WBU6.js.map +0 -1
- package/dist/OrderSinglePage-4CK6OT6U.js.map +0 -1
- package/dist/OrdersPage-EGIDHSYS.js.map +0 -1
- package/dist/ProfilePage-IO2MDE53.js.map +0 -1
- package/dist/SeoCartWidget-TPSVEGMI.js.map +0 -1
- package/dist/SettingsPage-ZTD4ALAA.js.map +0 -1
- package/dist/ThankYouPage-IRLZI3HI.js.map +0 -1
- package/dist/WalletPage-ZTSSGFMO.js.map +0 -1
- package/dist/WishlistPage-OADS7B5J.js.map +0 -1
- package/dist/chunk-6EES4C7J.js +0 -14
- package/dist/chunk-ANWDPISS.js.map +0 -1
- package/dist/chunk-AVUX6GAG.js +0 -29
- package/dist/chunk-AVUX6GAG.js.map +0 -1
- package/dist/chunk-B3EFOE57.js.map +0 -1
- package/dist/chunk-BHU25UEW.js.map +0 -1
- package/dist/chunk-GX3EDS32.js.map +0 -1
- package/dist/chunk-HAV32VZS.js.map +0 -1
- package/dist/chunk-OGQXRBCR.js.map +0 -1
- package/dist/chunk-R2ULWW5T.js.map +0 -1
- package/dist/chunk-RLSYCDI4.js.map +0 -1
- package/dist/chunk-UQAUDOI7.js.map +0 -1
- package/dist/chunk-VRV5F6G7.js.map +0 -1
- package/dist/chunk-XTMHHLNK.js.map +0 -1
- package/dist/document-class-SX2LHILG.js +0 -25
- package/dist/navigation-Z6JMJ4FZ.js +0 -11
- package/dist/not-found-CDXSWL7T.js.map +0 -1
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { brand } from './chunk-ZQGMVUPE.js';
|
|
2
|
+
import './chunk-OIH4XW47.js';
|
|
3
|
+
import './chunk-6HJLG7KF.js';
|
|
4
|
+
import './chunk-JKIRRMBU.js';
|
|
5
|
+
import './chunk-2JV6WZ6O.js';
|
|
6
|
+
import './chunk-UIOLSYKV.js';
|
|
7
|
+
import './chunk-VVZNW5CB.js';
|
|
8
|
+
import './chunk-2XGQSJKH.js';
|
|
9
|
+
import './chunk-WH225GEC.js';
|
|
10
|
+
import './chunk-TFB3QXYH.js';
|
|
11
|
+
import './chunk-YMVLYYLU.js';
|
|
12
|
+
import './chunk-C5X6CVXC.js';
|
|
13
|
+
import './chunk-UZKTK6YV.js';
|
|
14
|
+
import './chunk-5X2UFNKY.js';
|
|
15
|
+
import './chunk-P3OPJL6I.js';
|
|
16
|
+
import './chunk-WY4IYO3G.js';
|
|
17
|
+
import './chunk-TYLKNVQA.js';
|
|
18
|
+
import './chunk-SR4OTLTJ.js';
|
|
19
|
+
import './chunk-N2S25NXP.js';
|
|
20
|
+
import './chunk-TP3LCGE7.js';
|
|
21
|
+
import './chunk-Z653O7MX.js';
|
|
22
|
+
import './chunk-ZCH7W7DZ.js';
|
|
23
|
+
import './chunk-3U26OMNO.js';
|
|
24
|
+
import './chunk-JWXJPJBO.js';
|
|
25
|
+
import './chunk-CW625T2E.js';
|
|
26
|
+
import './chunk-7V36I5GT.js';
|
|
27
|
+
import './chunk-BVSJPBJ6.js';
|
|
28
|
+
import './chunk-GBWCXUPD.js';
|
|
29
|
+
import './chunk-OAMIDZKW.js';
|
|
30
|
+
import { useTranslation } from './chunk-TYNZ5B2B.js';
|
|
31
|
+
import './chunk-T72DAX7R.js';
|
|
32
|
+
import './chunk-RJPPO3ET.js';
|
|
33
|
+
import { HookSlot } from './chunk-Q7VWURUR.js';
|
|
34
|
+
import './chunk-GU2KUQVD.js';
|
|
35
|
+
import { LazyBreadcrumb, LazyNoContent, Image } from './chunk-Y7EOX2OE.js';
|
|
36
|
+
import { Link } from './chunk-AXW67SY7.js';
|
|
37
|
+
import './chunk-BYMOPN2S.js';
|
|
38
|
+
import './chunk-SKLEJJ6M.js';
|
|
39
|
+
import './chunk-6BZ5TKEV.js';
|
|
40
|
+
import './chunk-FZKRSGLP.js';
|
|
41
|
+
import './chunk-CUG6VOLM.js';
|
|
42
|
+
import './chunk-HX3YKS5W.js';
|
|
43
|
+
import './chunk-OBSAH7K6.js';
|
|
44
|
+
import './chunk-DF6FBKDN.js';
|
|
45
|
+
import './chunk-DGUM43GV.js';
|
|
46
|
+
import { memo, useMemo, useState, useRef, useCallback, useEffect } from 'react';
|
|
47
|
+
import { useInfiniteQuery } from '@tanstack/react-query';
|
|
48
|
+
import { useWindowScroll } from '@uidotdev/usehooks';
|
|
49
|
+
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
50
|
+
|
|
51
|
+
function byLetter(brands, locale) {
|
|
52
|
+
const groups = {};
|
|
53
|
+
for (const item of brands) {
|
|
54
|
+
(groups[(locale === "ar" ? item.ar_char : item.en_char) || "#"] ??= []).push(item);
|
|
55
|
+
}
|
|
56
|
+
return Object.entries(groups).sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0);
|
|
57
|
+
}
|
|
58
|
+
function BrandSection({ char, brands, sectionRef }) {
|
|
59
|
+
return /* @__PURE__ */ jsxs(
|
|
60
|
+
"section",
|
|
61
|
+
{
|
|
62
|
+
id: `brand-section-${char}`,
|
|
63
|
+
ref: sectionRef,
|
|
64
|
+
className: "pt-24 first:pt-16 md:first:pt-24",
|
|
65
|
+
children: [
|
|
66
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center mb-10", children: [
|
|
67
|
+
/* @__PURE__ */ jsx("span", { "data-id": char, className: "brand-char", children: /* @__PURE__ */ jsx("span", { className: "fix-align", children: char }) }),
|
|
68
|
+
/* @__PURE__ */ jsx("div", { className: "bg-border-color h-px flex-1" })
|
|
69
|
+
] }),
|
|
70
|
+
/* @__PURE__ */ jsx("div", { className: "grid grid-cols-3 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-6 grid-flow-row gap-4 md:gap-8", children: brands.map((item) => (
|
|
71
|
+
// A grid of logos would preload a brand for every logo the mouse crosses.
|
|
72
|
+
/* @__PURE__ */ jsx(Link, { to: `/brands/${item.id}`, className: "brand-item", preload: false, children: /* @__PURE__ */ jsx(
|
|
73
|
+
Image,
|
|
74
|
+
{
|
|
75
|
+
className: "max-h-full",
|
|
76
|
+
width: 400,
|
|
77
|
+
height: 300,
|
|
78
|
+
src: item.logo,
|
|
79
|
+
alt: item.name
|
|
80
|
+
}
|
|
81
|
+
) }, item.id)
|
|
82
|
+
)) })
|
|
83
|
+
]
|
|
84
|
+
}
|
|
85
|
+
);
|
|
86
|
+
}
|
|
87
|
+
var PAGES_PER_WAVE = 6;
|
|
88
|
+
var fetchPage = (page) => brand.list(page).catch(() => brand.list(page));
|
|
89
|
+
async function fetchWave(from) {
|
|
90
|
+
const settled = await Promise.allSettled(
|
|
91
|
+
Array.from({ length: PAGES_PER_WAVE }, (_, i) => fetchPage(from + i))
|
|
92
|
+
);
|
|
93
|
+
const pages = settled.flatMap((result) => result.status === "fulfilled" ? [result.value] : []);
|
|
94
|
+
return {
|
|
95
|
+
items: pages.flatMap((result) => result.items),
|
|
96
|
+
// Stop at the last page, or when a whole wave fails.
|
|
97
|
+
done: pages.length === 0 || pages.some((result) => !result.next)
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
function useAllBrands(first, next, locale) {
|
|
101
|
+
const startPage = Number(next?.match(/[?&]page=(\d+)/)?.[1]) || 0;
|
|
102
|
+
const { data, hasNextPage, isFetchingNextPage, fetchNextPage } = useInfiniteQuery({
|
|
103
|
+
queryKey: ["brands", "after-first-page", locale, startPage],
|
|
104
|
+
queryFn: ({ pageParam }) => fetchWave(pageParam),
|
|
105
|
+
initialPageParam: startPage,
|
|
106
|
+
getNextPageParam: (wave, _waves, from) => wave.done ? void 0 : from + PAGES_PER_WAVE,
|
|
107
|
+
enabled: startPage > 0,
|
|
108
|
+
// Not reused across visits: it must match the first page the loader just fetched.
|
|
109
|
+
gcTime: 0
|
|
110
|
+
});
|
|
111
|
+
useEffect(() => {
|
|
112
|
+
if (hasNextPage && !isFetchingNextPage) void fetchNextPage();
|
|
113
|
+
}, [hasNextPage, isFetchingNextPage, fetchNextPage]);
|
|
114
|
+
return useMemo(() => {
|
|
115
|
+
const extra = data?.pages.flatMap((wave) => wave.items) ?? [];
|
|
116
|
+
return extra.length ? [...first, ...extra] : first;
|
|
117
|
+
}, [first, data]);
|
|
118
|
+
}
|
|
119
|
+
function BrandsPageComponent({ page, brands, pagination }) {
|
|
120
|
+
const { t, locale } = useTranslation();
|
|
121
|
+
const allBrands = useAllBrands(brands, pagination?.next, locale);
|
|
122
|
+
const brandEntries = useMemo(() => byLetter(allBrands, locale), [allBrands, locale]);
|
|
123
|
+
const [selectedChar, setSelectedChar] = useState(null);
|
|
124
|
+
const sectionRefs = useRef({});
|
|
125
|
+
const [{ y }] = useWindowScroll();
|
|
126
|
+
const isSticky = (y ?? 0) > 200;
|
|
127
|
+
const handleBrandClick = useCallback((e) => {
|
|
128
|
+
e.preventDefault();
|
|
129
|
+
const char = e.currentTarget.dataset.id;
|
|
130
|
+
if (char) {
|
|
131
|
+
setSelectedChar(char);
|
|
132
|
+
sectionRefs.current[char]?.scrollIntoView({ behavior: "smooth" });
|
|
133
|
+
}
|
|
134
|
+
}, []);
|
|
135
|
+
return /* @__PURE__ */ jsxs("div", { className: "container mb-20", children: [
|
|
136
|
+
/* @__PURE__ */ jsx(LazyBreadcrumb, { page }),
|
|
137
|
+
/* @__PURE__ */ jsx("div", { className: "flex justify-between pt-2 pb-6", children: /* @__PURE__ */ jsx("h1", { className: "font-bold mb-6 md:mb-0", children: page.title }) }),
|
|
138
|
+
brandEntries.length > 0 ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
139
|
+
/* @__PURE__ */ jsx("div", { className: "brands-nav-wrap", children: /* @__PURE__ */ jsxs(
|
|
140
|
+
"ul",
|
|
141
|
+
{
|
|
142
|
+
id: "brands-nav",
|
|
143
|
+
className: `brands-nav ${isSticky ? "is-sticky" : "is-not-sticky"}`,
|
|
144
|
+
children: [
|
|
145
|
+
/* @__PURE__ */ jsx("li", {}),
|
|
146
|
+
brandEntries.map(([char]) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(
|
|
147
|
+
"a",
|
|
148
|
+
{
|
|
149
|
+
className: `brands-nav__item ${selectedChar === char ? "is-selected" : "unselected"}`,
|
|
150
|
+
href: `#brand-section-${char}`,
|
|
151
|
+
onClick: handleBrandClick,
|
|
152
|
+
"data-id": char,
|
|
153
|
+
children: /* @__PURE__ */ jsx("span", { className: "fix-align", children: char })
|
|
154
|
+
}
|
|
155
|
+
) }, char))
|
|
156
|
+
]
|
|
157
|
+
}
|
|
158
|
+
) }),
|
|
159
|
+
/* @__PURE__ */ jsxs("div", { className: "px-8 xl:px-0", children: [
|
|
160
|
+
/* @__PURE__ */ jsx(HookSlot, { name: "brands:index.items.start" }),
|
|
161
|
+
brandEntries.map(([char, brandGroup]) => /* @__PURE__ */ jsx(
|
|
162
|
+
BrandSection,
|
|
163
|
+
{
|
|
164
|
+
char,
|
|
165
|
+
brands: brandGroup,
|
|
166
|
+
sectionRef: (el) => {
|
|
167
|
+
sectionRefs.current[char] = el;
|
|
168
|
+
}
|
|
169
|
+
},
|
|
170
|
+
char
|
|
171
|
+
)),
|
|
172
|
+
/* @__PURE__ */ jsx(HookSlot, { name: "brands:index.items.end" })
|
|
173
|
+
] })
|
|
174
|
+
] }) : /* @__PURE__ */ jsx(
|
|
175
|
+
LazyNoContent,
|
|
176
|
+
{
|
|
177
|
+
icon: "sicon-award-ribbon",
|
|
178
|
+
message: t("pages.brands.non_brands"),
|
|
179
|
+
actionLabel: t("common.elements.back_home")
|
|
180
|
+
}
|
|
181
|
+
)
|
|
182
|
+
] });
|
|
183
|
+
}
|
|
184
|
+
var BrandsPage = memo(BrandsPageComponent);
|
|
185
|
+
|
|
186
|
+
export { BrandsPage };
|
|
187
|
+
//# sourceMappingURL=BrandsPage-QLO4XO5V.js.map
|
|
188
|
+
//# sourceMappingURL=BrandsPage-QLO4XO5V.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/routes/brands/BrandsPage.tsx"],"names":[],"mappings":"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","file":"BrandsPage-QLO4XO5V.js","sourcesContent":["import { memo, useState, useRef, useCallback, useEffect, useMemo } from 'react';\nimport { useInfiniteQuery } from '@tanstack/react-query';\nimport { useWindowScroll } from '@uidotdev/usehooks';\nimport { Link, Breadcrumb, NoContent, Image } from '../../components/common';\nimport { HookSlot } from '../../hooks';\nimport { useTranslation } from '../../providers/I18nProvider';\nimport { brand } from '../../api/brands';\nimport type { Brand, BrandsGroup, BrandsPageProps } from './types';\n\nfunction byLetter(brands: Brand[], locale: string): [string, Brand[]][] {\n const groups: BrandsGroup = {};\n for (const item of brands) {\n (groups[(locale === 'ar' ? item.ar_char : item.en_char) || '#'] ??= []).push(item);\n }\n // Code point order is alphabetical for Arabic and Latin, and the same on server and browser.\n return Object.entries(groups).sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0));\n}\n\ninterface BrandSectionProps {\n char: string;\n brands: Brand[];\n sectionRef: (el: HTMLElement | null) => void;\n}\n\nfunction BrandSection({ char, brands, sectionRef }: BrandSectionProps) {\n return (\n <section\n id={`brand-section-${char}`}\n ref={sectionRef}\n className=\"pt-24 first:pt-16 md:first:pt-24\"\n >\n <div className=\"flex items-center mb-10\">\n <span data-id={char} className=\"brand-char\">\n <span className=\"fix-align\">{char}</span>\n </span>\n <div className=\"bg-border-color h-px flex-1\"></div>\n </div>\n <div className=\"grid grid-cols-3 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-6 grid-flow-row gap-4 md:gap-8\">\n {brands.map((item) => (\n // A grid of logos would preload a brand for every logo the mouse crosses.\n <Link key={item.id} to={`/brands/${item.id}`} className=\"brand-item\" preload={false}>\n <Image\n className=\"max-h-full\"\n width={400}\n height={300}\n src={item.logo}\n alt={item.name}\n />\n </Link>\n ))}\n </div>\n </section>\n );\n}\n\nconst PAGES_PER_WAVE = 6;\n\n// One retry per page, so a network blip does not drop it.\nconst fetchPage = (page: number) => brand.list(page).catch(() => brand.list(page));\n\nasync function fetchWave(from: number): Promise<{ items: Brand[]; done: boolean }> {\n const settled = await Promise.allSettled(\n Array.from({ length: PAGES_PER_WAVE }, (_, i) => fetchPage(from + i))\n );\n const pages = settled.flatMap((result) => (result.status === 'fulfilled' ? [result.value] : []));\n return {\n items: pages.flatMap((result) => result.items),\n // Stop at the last page, or when a whole wave fails.\n done: pages.length === 0 || pages.some((result) => !result.next),\n };\n}\n\n/**\n * The first page plus every page after `next`, fetched in the background so the letter menu is\n * complete without scrolling. The API has no page count, so pages load in parallel waves.\n */\nfunction useAllBrands(first: Brand[], next: string | null | undefined, locale: string): Brand[] {\n const startPage = Number(next?.match(/[?&]page=(\\d+)/)?.[1]) || 0;\n const { data, hasNextPage, isFetchingNextPage, fetchNextPage } = useInfiniteQuery({\n queryKey: ['brands', 'after-first-page', locale, startPage],\n queryFn: ({ pageParam }) => fetchWave(pageParam),\n initialPageParam: startPage,\n getNextPageParam: (wave, _waves, from) => (wave.done ? undefined : from + PAGES_PER_WAVE),\n enabled: startPage > 0,\n // Not reused across visits: it must match the first page the loader just fetched.\n gcTime: 0,\n });\n\n useEffect(() => {\n if (hasNextPage && !isFetchingNextPage) void fetchNextPage();\n }, [hasNextPage, isFetchingNextPage, fetchNextPage]);\n\n return useMemo(() => {\n const extra = data?.pages.flatMap((wave) => wave.items) ?? [];\n return extra.length ? [...first, ...extra] : first;\n }, [first, data]);\n}\n\nfunction BrandsPageComponent({ page, brands, pagination }: BrandsPageProps) {\n const { t, locale } = useTranslation();\n const allBrands = useAllBrands(brands, pagination?.next, locale);\n const brandEntries = useMemo(() => byLetter(allBrands, locale), [allBrands, locale]);\n const [selectedChar, setSelectedChar] = useState<string | null>(null);\n const sectionRefs = useRef<Record<string, HTMLElement | null>>({});\n\n // Use useWindowScroll hook instead of manual listener\n const [{ y }] = useWindowScroll();\n const isSticky = (y ?? 0) > 200;\n\n // Handle brand nav item click - matches brands.js toggle class logic\n const handleBrandClick = useCallback((e: React.MouseEvent<HTMLAnchorElement>) => {\n e.preventDefault();\n const char = e.currentTarget.dataset.id;\n if (char) {\n setSelectedChar(char);\n sectionRefs.current[char]?.scrollIntoView({ behavior: 'smooth' });\n }\n }, []);\n\n return (\n <div className=\"container mb-20\">\n <Breadcrumb page={page} />\n\n <div className=\"flex justify-between pt-2 pb-6\">\n <h1 className=\"font-bold mb-6 md:mb-0\">{page.title}</h1>\n </div>\n\n {brandEntries.length > 0 ? (\n <>\n <div className=\"brands-nav-wrap\">\n <ul\n id=\"brands-nav\"\n className={`brands-nav ${isSticky ? 'is-sticky' : 'is-not-sticky'}`}\n >\n <li></li>\n {brandEntries.map(([char]) => (\n <li key={char}>\n <a\n className={`brands-nav__item ${selectedChar === char ? 'is-selected' : 'unselected'}`}\n href={`#brand-section-${char}`}\n onClick={handleBrandClick}\n data-id={char}\n >\n <span className=\"fix-align\">{char}</span>\n </a>\n </li>\n ))}\n </ul>\n </div>\n\n <div className=\"px-8 xl:px-0\">\n <HookSlot name=\"brands:index.items.start\" />\n\n {brandEntries.map(([char, brandGroup]) => (\n <BrandSection\n key={char}\n char={char}\n brands={brandGroup}\n sectionRef={(el) => {\n sectionRefs.current[char] = el;\n }}\n />\n ))}\n\n <HookSlot name=\"brands:index.items.end\" />\n </div>\n </>\n ) : (\n <NoContent\n icon=\"sicon-award-ribbon\"\n message={t('pages.brands.non_brands')}\n actionLabel={t('common.elements.back_home')}\n />\n )}\n </div>\n );\n}\n\nexport const BrandsPage = memo(BrandsPageComponent);\n"]}
|
|
@@ -1,35 +1,37 @@
|
|
|
1
|
-
import { useBreadcrumbs } from './chunk-
|
|
2
|
-
import './chunk-
|
|
1
|
+
import { useBreadcrumbs } from './chunk-OIH4XW47.js';
|
|
2
|
+
import './chunk-6HJLG7KF.js';
|
|
3
3
|
import './chunk-JKIRRMBU.js';
|
|
4
4
|
import './chunk-2JV6WZ6O.js';
|
|
5
|
-
import './chunk-
|
|
5
|
+
import './chunk-UIOLSYKV.js';
|
|
6
6
|
import './chunk-VVZNW5CB.js';
|
|
7
|
-
import './chunk-
|
|
8
|
-
import './chunk-
|
|
7
|
+
import './chunk-2XGQSJKH.js';
|
|
8
|
+
import './chunk-WH225GEC.js';
|
|
9
9
|
import './chunk-TFB3QXYH.js';
|
|
10
|
+
import './chunk-YMVLYYLU.js';
|
|
10
11
|
import './chunk-C5X6CVXC.js';
|
|
11
|
-
import './chunk-
|
|
12
|
-
import './chunk-
|
|
13
|
-
import './chunk-
|
|
14
|
-
import './chunk-
|
|
15
|
-
import './chunk-
|
|
16
|
-
import './chunk-
|
|
12
|
+
import './chunk-UZKTK6YV.js';
|
|
13
|
+
import './chunk-5X2UFNKY.js';
|
|
14
|
+
import './chunk-P3OPJL6I.js';
|
|
15
|
+
import './chunk-WY4IYO3G.js';
|
|
16
|
+
import './chunk-TYLKNVQA.js';
|
|
17
|
+
import './chunk-SR4OTLTJ.js';
|
|
18
|
+
import './chunk-N2S25NXP.js';
|
|
17
19
|
import './chunk-TP3LCGE7.js';
|
|
18
20
|
import './chunk-Z653O7MX.js';
|
|
19
21
|
import './chunk-ZCH7W7DZ.js';
|
|
20
22
|
import './chunk-3U26OMNO.js';
|
|
21
23
|
import './chunk-JWXJPJBO.js';
|
|
22
24
|
import './chunk-CW625T2E.js';
|
|
25
|
+
import './chunk-7V36I5GT.js';
|
|
23
26
|
import './chunk-BVSJPBJ6.js';
|
|
24
27
|
import './chunk-GBWCXUPD.js';
|
|
25
28
|
import './chunk-OAMIDZKW.js';
|
|
26
29
|
import './chunk-TYNZ5B2B.js';
|
|
27
30
|
import './chunk-T72DAX7R.js';
|
|
28
|
-
import './chunk-YMVLYYLU.js';
|
|
29
31
|
import './chunk-RJPPO3ET.js';
|
|
30
32
|
import './chunk-Q7VWURUR.js';
|
|
31
33
|
import './chunk-GU2KUQVD.js';
|
|
32
|
-
import './chunk-
|
|
34
|
+
import './chunk-Y7EOX2OE.js';
|
|
33
35
|
import { Link } from './chunk-AXW67SY7.js';
|
|
34
36
|
import './chunk-BYMOPN2S.js';
|
|
35
37
|
import './chunk-SKLEJJ6M.js';
|
|
@@ -153,5 +155,5 @@ function Breadcrumb({ page, className }) {
|
|
|
153
155
|
}
|
|
154
156
|
|
|
155
157
|
export { Breadcrumb };
|
|
156
|
-
//# sourceMappingURL=Breadcrumb-
|
|
157
|
-
//# sourceMappingURL=Breadcrumb-
|
|
158
|
+
//# sourceMappingURL=Breadcrumb-6I4ZXJP6.js.map
|
|
159
|
+
//# sourceMappingURL=Breadcrumb-6I4ZXJP6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/common/BreadcrumbTrail.tsx","../src/components/common/BreadcrumbJsonLd.tsx","../src/components/common/Breadcrumb.tsx"],"names":["BreadcrumbTrail","jsx","jsxs","Fragment"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,IAAM,iBAAA,GAAoB,CAAA;AAO1B,IAAM,cAAc,sBAClB,IAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,OAAA,EAAQ,KAAA;AAAA,IACR,KAAA,EAAM,4BAAA;AAAA,IACN,KAAA,EAAM,IAAA;AAAA,IACN,MAAA,EAAO,IAAA;AAAA,IACP,OAAA,EAAQ,WAAA;AAAA,IACR,aAAA,EAAY,MAAA;AAAA,IAEZ,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,WAAM,QAAA,EAAA,qBAAA,EAAmB,CAAA;AAAA,sBAC1B,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,8DAAA,EAA+D;AAAA;AAAA;AACzE,CAAA;AAGF,SAAS,cAAc,KAAA,EAAmC;AACxD,EAAA,IAAI,KAAA,CAAM,MAAA,IAAU,iBAAA,EAAmB,OAAO,KAAA;AAE9C,EAAA,OAAO,CAAC,KAAA,CAAM,CAAC,CAAA,EAAG,EAAE,IAAA,EAAM,QAAA,EAAK,GAAA,EAAK,EAAA,EAAG,EAAG,GAAG,KAAA,CAAM,KAAA,CAAM,EAAE,CAAC,CAAA;AAC9D;AAEO,IAAM,eAAA,GAAkB,IAAA,CAAK,SAASA,gBAAAA,CAAgB;AAAA,EAC3D,KAAA;AAAA,EACA;AACF,CAAA,EAAyB;AACvB,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,SAAS,KAAK,CAAA;AAE9C,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,WAAA,CAAY,KAAK,CAAA;AAAA,EACnB,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAE/B,EAAA,MAAM,YAAA,GAAe,QAAA,GAAW,KAAA,GAAQ,aAAA,CAAc,KAAK,CAAA;AAE3D,EAAA,2BACG,KAAA,EAAA,EAAI,SAAA,EAAW,aAAa,yBAAA,EAA2B,YAAA,EAAW,cACjE,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAG,WAAU,sBAAA,EAAuB,SAAA,EAAS,MAAC,QAAA,EAAS,mCAAA,EACrD,uBAAa,GAAA,CAAI,CAAC,MAAM,KAAA,KAAU;AACjC,IAAA,MAAM,MAAA,GAAS,KAAA,KAAU,YAAA,CAAa,MAAA,GAAS,CAAA;AAC/C,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,IAAA,KAAS,QAAA,IAAO,CAAC,IAAA,CAAK,GAAA;AAE9C,IAAA,uBACE,IAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QAEC,WAAW,CAAC,mBAAA,EAAqB,UAAA,GAAa,4BAAA,GAA+B,EAAE,CAAA,CAAE,IAAA;AAAA,UAC/E;AAAA,SACF;AAAA,QACA,cAAA,EAAc,SAAS,MAAA,GAAS,MAAA;AAAA,QAChC,QAAA,EAAS,iBAAA;AAAA,QACT,SAAA,EAAS,IAAA;AAAA,QACT,QAAA,EAAS,6BAAA;AAAA,QAER,QAAA,EAAA;AAAA,UAAA,UAAA,mBACC,GAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,SAAS,MAAM;AACb,gBAAA,WAAA,CAAY,IAAI,CAAA;AAAA,cAClB,CAAA;AAAA,cACA,SAAA,EAAU,gDAAA;AAAA,cACV,YAAA,EAAW,sBAAA;AAAA,cAEX,8BAAC,MAAA,EAAA,EAAK,aAAA,EAAY,MAAA,EAAO,SAAA,EAAU,WAAU,QAAA,EAAA,oBAAA,EAE7C;AAAA;AAAA,WACF,GACE,yBACF,GAAA,CAAC,MAAA,EAAA,EAAK,UAAS,MAAA,EAAQ,QAAA,EAAA,IAAA,CAAK,IAAA,EAAK,CAAA,mBAEjC,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAI,IAAA,CAAK,GAAA,EAAK,QAAA,EAAS,MAAA,EAC3B,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAS,MAAA,EAAQ,QAAA,EAAA,IAAA,CAAK,IAAA,EAAK,CAAA,EACnC,CAAA;AAAA,4BACA,GAAA,CAAC,UAAK,aAAA,EAAY,MAAA,EAAO,WAAU,gCAAA,EACjC,QAAA,kBAAA,GAAA,CAAC,eAAY,CAAA,EACf,CAAA;AAAA,4BACA,GAAA,CAAC,UAAK,QAAA,EAAS,UAAA,EAAW,SAAS,MAAA,CAAO,KAAA,GAAQ,CAAC,CAAA,EAAG;AAAA,WAAA,EACxD,CAAA;AAAA,UAED,MAAA,wBAAW,MAAA,EAAA,EAAK,QAAA,EAAS,YAAW,OAAA,EAAS,MAAA,CAAO,KAAA,GAAQ,CAAC,CAAA,EAAG;AAAA;AAAA,OAAA;AAAA,MAnC5D,CAAA,EAAG,IAAA,CAAK,GAAG,CAAA,CAAA,EAAI,KAAK,IAAI,CAAA;AAAA,KAoC/B;AAAA,EAEJ,CAAC,GACH,CAAA,EACF,CAAA;AAEJ,CAAC,CAAA;ACzFD,SAAS,aAAA,CAAc,QAAgB,IAAA,EAAsB;AAC3D,EAAA,IAAI,IAAA,CAAK,UAAA,CAAW,MAAM,CAAA,EAAG,OAAO,IAAA;AACpC,EAAA,OAAO,MAAA,GAAS,IAAA;AAClB;AAEO,SAAS,gBAAA,CAAiB,EAAE,KAAA,EAAO,MAAA,EAAO,EAA0B;AACzE,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAE/B,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,UAAA,EAAY,oBAAA;AAAA,IACZ,OAAA,EAAS,gBAAA;AAAA,IACT,eAAA,EAAiB,KAAA,CAAM,GAAA,CAAI,CAAC,MAAM,KAAA,KAAU;AAC1C,MAAA,MAAM,MAAA,GAAS,KAAA,KAAU,KAAA,CAAM,MAAA,GAAS,CAAA;AACxC,MAAA,MAAM,GAAA,GAAM,aAAA,CAAc,MAAA,EAAQ,IAAA,CAAK,GAAG,CAAA;AAC1C,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,UAAA;AAAA,QACT,UAAU,KAAA,GAAQ,CAAA;AAAA,QAClB,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,GAAI,SAAS,EAAE,KAAA,EAAO,KAAI,GAAI,EAAE,MAAM,GAAA;AAAI,OAC5C;AAAA,IACF,CAAC;AAAA,GACH;AAEA,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,MAAM,CAAA;AAElC,EAAA,uBACEC,GAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,qBAAA;AAAA,MACL,wBAAA,EAAwB,IAAA;AAAA,MACxB,uBAAA,EAAyB,EAAE,MAAA,EAAQ,IAAA;AAAK;AAAA,GAC1C;AAEJ;AC5BO,SAAS,UAAA,CAAW,EAAE,IAAA,EAAM,SAAA,EAAU,EAAoB;AAC/D,EAAA,MAAM,EAAE,KAAA,EAAO,KAAA,EAAM,GAAI,WAAA,EAAY;AACrC,EAAA,MAAM,kBAAA,GAAqB,KAAA,CAAM,QAAA,CAAS,sBAAA,IAA0B,IAAA;AACpE,EAAA,MAAM,SAAS,KAAA,CAAM,GAAA;AAErB,EAAA,MAAM,KAAA,GAAQ,eAAe,IAAI,CAAA;AAEjC,EAAA,IAAI,CAAC,oBAAoB,OAAO,IAAA;AAEhC,EAAA,uBACEC,IAAAA,CAAAC,QAAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAF,GAAAA,CAAC,eAAA,EAAA,EAAgB,KAAA,EAAc,SAAA,EAAsB,CAAA;AAAA,oBACrDA,GAAAA,CAAC,gBAAA,EAAA,EAAiB,KAAA,EAAc,MAAA,EAAgB;AAAA,GAAA,EAClD,CAAA;AAEJ","file":"Breadcrumb-6I4ZXJP6.js","sourcesContent":["import { memo, useState, useEffect } from 'react';\nimport type { Breadcrumb } from '../../types';\nimport { Link } from './Link';\n\nconst MAX_VISIBLE_ITEMS = 4;\n\ninterface BreadcrumbTrailProps {\n items: Breadcrumb[];\n className?: string;\n}\n\nconst ChevronIcon = () => (\n <svg\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"32\"\n height=\"32\"\n viewBox=\"0 0 32 32\"\n aria-hidden=\"true\"\n >\n <title>keyboard_arrow_left</title>\n <path d=\"M20.563 22.104l-1.875 1.875-8-8 8-8 1.875 1.875-6.125 6.125z\"></path>\n </svg>\n);\n\nfunction truncateItems(items: Breadcrumb[]): Breadcrumb[] {\n if (items.length <= MAX_VISIBLE_ITEMS) return items;\n\n return [items[0], { name: '…', url: '' }, ...items.slice(-2)];\n}\n\nexport const BreadcrumbTrail = memo(function BreadcrumbTrail({\n items,\n className,\n}: BreadcrumbTrailProps) {\n const [expanded, setExpanded] = useState(false);\n\n useEffect(() => {\n setExpanded(false);\n }, [items]);\n\n if (items.length === 0) return null;\n\n const displayItems = expanded ? items : truncateItems(items);\n\n return (\n <nav className={className ?? 'breadcrumbs w-full py-5'} aria-label=\"Breadcrumb\">\n <ol className=\"s-breadcrumb-wrapper\" itemScope itemType=\"https://schema.org/BreadcrumbList\">\n {displayItems.map((item, index) => {\n const isLast = index === displayItems.length - 1;\n const isEllipsis = item.name === '…' && !item.url;\n\n return (\n <li\n key={`${item.url}-${item.name}`}\n className={['s-breadcrumb-item', isEllipsis ? 'cursor-pointer select-none' : ''].join(\n ' '\n )}\n aria-current={isLast ? 'page' : undefined}\n itemProp=\"itemListElement\"\n itemScope\n itemType=\"https://schema.org/ListItem\"\n >\n {isEllipsis ? (\n <button\n type=\"button\"\n onClick={() => {\n setExpanded(true);\n }}\n className=\"inline-flex items-center gap-1 hover:underline\"\n aria-label=\"Show all breadcrumbs\"\n >\n <span aria-hidden=\"true\" className=\"text-xs\">\n •••\n </span>\n </button>\n ) : isLast ? (\n <span itemProp=\"name\">{item.name}</span>\n ) : (\n <>\n <Link to={item.url} itemProp=\"item\">\n <span itemProp=\"name\">{item.name}</span>\n </Link>\n <span aria-hidden=\"true\" className=\"s-breadcrumb-arrow inline-flex\">\n <ChevronIcon />\n </span>\n <meta itemProp=\"position\" content={String(index + 1)} />\n </>\n )}\n {isLast && <meta itemProp=\"position\" content={String(index + 1)} />}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n});\n","import type { Breadcrumb } from '../../types';\n\ninterface BreadcrumbJsonLdProps {\n items: Breadcrumb[];\n origin: string;\n}\n\nfunction toAbsoluteUrl(origin: string, path: string): string {\n if (path.startsWith('http')) return path;\n return origin + path;\n}\n\nexport function BreadcrumbJsonLd({ items, origin }: BreadcrumbJsonLdProps) {\n if (items.length === 0) return null;\n\n const schema = {\n '@context': 'https://schema.org',\n '@type': 'BreadcrumbList',\n itemListElement: items.map((item, index) => {\n const isLast = index === items.length - 1;\n const url = toAbsoluteUrl(origin, item.url);\n return {\n '@type': 'ListItem',\n position: index + 1,\n name: item.name,\n ...(isLast ? { '@id': url } : { item: url }),\n };\n }),\n };\n\n const html = JSON.stringify(schema);\n\n return (\n <script\n type=\"application/ld+json\"\n suppressHydrationWarning\n dangerouslySetInnerHTML={{ __html: html }}\n />\n );\n}\n","import type { Page } from '../../types';\nimport { useBreadcrumbs } from '../../hooks/useBreadcrumbs';\nimport { useTwilight } from '../../providers/TwilightProvider';\nimport { BreadcrumbTrail } from './BreadcrumbTrail';\nimport { BreadcrumbJsonLd } from './BreadcrumbJsonLd';\n\nexport interface BreadcrumbProps {\n page?: Page | null;\n className?: string;\n}\n\nexport function Breadcrumb({ page, className }: BreadcrumbProps) {\n const { theme, store } = useTwilight();\n const breadcrumbsEnabled = theme.settings.is_breadcrumbs_enabled ?? true;\n const origin = store.url;\n\n const items = useBreadcrumbs(page);\n\n if (!breadcrumbsEnabled) return null;\n\n return (\n <>\n <BreadcrumbTrail items={items} className={className} />\n <BreadcrumbJsonLd items={items} origin={origin} />\n </>\n );\n}\n"]}
|
|
@@ -1,35 +1,37 @@
|
|
|
1
|
-
import { useMoney } from './chunk-
|
|
2
|
-
import './chunk-
|
|
1
|
+
import { useMoney } from './chunk-OIH4XW47.js';
|
|
2
|
+
import './chunk-6HJLG7KF.js';
|
|
3
3
|
import './chunk-JKIRRMBU.js';
|
|
4
4
|
import './chunk-2JV6WZ6O.js';
|
|
5
|
-
import './chunk-
|
|
5
|
+
import './chunk-UIOLSYKV.js';
|
|
6
6
|
import './chunk-VVZNW5CB.js';
|
|
7
|
-
import './chunk-
|
|
8
|
-
import './chunk-
|
|
7
|
+
import './chunk-2XGQSJKH.js';
|
|
8
|
+
import './chunk-WH225GEC.js';
|
|
9
9
|
import './chunk-TFB3QXYH.js';
|
|
10
|
+
import './chunk-YMVLYYLU.js';
|
|
10
11
|
import './chunk-C5X6CVXC.js';
|
|
11
|
-
import './chunk-
|
|
12
|
-
import './chunk-
|
|
13
|
-
import './chunk-
|
|
14
|
-
import './chunk-
|
|
15
|
-
import './chunk-
|
|
16
|
-
import './chunk-
|
|
12
|
+
import './chunk-UZKTK6YV.js';
|
|
13
|
+
import './chunk-5X2UFNKY.js';
|
|
14
|
+
import './chunk-P3OPJL6I.js';
|
|
15
|
+
import './chunk-WY4IYO3G.js';
|
|
16
|
+
import './chunk-TYLKNVQA.js';
|
|
17
|
+
import './chunk-SR4OTLTJ.js';
|
|
18
|
+
import './chunk-N2S25NXP.js';
|
|
17
19
|
import './chunk-TP3LCGE7.js';
|
|
18
20
|
import './chunk-Z653O7MX.js';
|
|
19
21
|
import './chunk-ZCH7W7DZ.js';
|
|
20
22
|
import './chunk-3U26OMNO.js';
|
|
21
23
|
import './chunk-JWXJPJBO.js';
|
|
22
24
|
import './chunk-CW625T2E.js';
|
|
25
|
+
import './chunk-7V36I5GT.js';
|
|
23
26
|
import './chunk-BVSJPBJ6.js';
|
|
24
27
|
import './chunk-GBWCXUPD.js';
|
|
25
28
|
import './chunk-OAMIDZKW.js';
|
|
26
29
|
import { useTranslation } from './chunk-TYNZ5B2B.js';
|
|
27
30
|
import './chunk-T72DAX7R.js';
|
|
28
|
-
import './chunk-YMVLYYLU.js';
|
|
29
31
|
import './chunk-RJPPO3ET.js';
|
|
30
32
|
import './chunk-Q7VWURUR.js';
|
|
31
33
|
import './chunk-GU2KUQVD.js';
|
|
32
|
-
import { Image } from './chunk-
|
|
34
|
+
import { Image } from './chunk-Y7EOX2OE.js';
|
|
33
35
|
import { Link } from './chunk-AXW67SY7.js';
|
|
34
36
|
import './chunk-BYMOPN2S.js';
|
|
35
37
|
import './chunk-SKLEJJ6M.js';
|
|
@@ -44,6 +46,7 @@ import { SallaCartItemOffers } from '@salla.sa/twilight-components-react/cart-it
|
|
|
44
46
|
import { SallaQuantityInput } from '@salla.sa/twilight-components-react/quantity-input';
|
|
45
47
|
import { SallaButton } from '@salla.sa/twilight-components-react/button';
|
|
46
48
|
import { SallaProductOptions } from '@salla.sa/twilight-components-react/product-options';
|
|
49
|
+
import { useHostAttributes } from '@salla.sa/twilight-theme-engine/hooks/useHostAttributes';
|
|
47
50
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
48
51
|
|
|
49
52
|
function toNumber(value) {
|
|
@@ -55,12 +58,77 @@ function moneyCurrency(value) {
|
|
|
55
58
|
if (typeof value !== "object") return void 0;
|
|
56
59
|
return value.currency;
|
|
57
60
|
}
|
|
61
|
+
function CartItemPrices({ item }) {
|
|
62
|
+
const { format } = useMoney();
|
|
63
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 flex-wrap", children: [
|
|
64
|
+
item.offer && /* @__PURE__ */ jsx("span", { className: "text-sm text-gray-500 line-through item-regular-price", children: format(toNumber(item.product_price), {
|
|
65
|
+
currency: moneyCurrency(item.product_price)
|
|
66
|
+
}) }),
|
|
67
|
+
item.is_on_sale && /* @__PURE__ */ jsx("span", { className: "inline-flex gap-1 leading-4 text-sm text-gray-500 line-through item-original-price", children: format(toNumber(item.original_price), {
|
|
68
|
+
currency: moneyCurrency(item.original_price)
|
|
69
|
+
}) }),
|
|
70
|
+
/* @__PURE__ */ jsx(
|
|
71
|
+
"span",
|
|
72
|
+
{
|
|
73
|
+
className: `inline-flex gap-1 leading-4 item-price ${item.has_discount ? "text-red-800" : "text-sm text-gray-500"}`,
|
|
74
|
+
children: format(toNumber(item.price), { currency: moneyCurrency(item.price) })
|
|
75
|
+
}
|
|
76
|
+
)
|
|
77
|
+
] });
|
|
78
|
+
}
|
|
79
|
+
function CartItemQuantity({ item }) {
|
|
80
|
+
const { t } = useTranslation();
|
|
81
|
+
const quantityRef = useHostAttributes({
|
|
82
|
+
max: item.max_quantity,
|
|
83
|
+
value: item.quantity,
|
|
84
|
+
name: "quantity"
|
|
85
|
+
});
|
|
86
|
+
if (item.type === "donating") return /* @__PURE__ */ jsx("span", {});
|
|
87
|
+
if (item.is_hidden_quantity) {
|
|
88
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
89
|
+
/* @__PURE__ */ jsx(
|
|
90
|
+
"input",
|
|
91
|
+
{
|
|
92
|
+
type: "hidden",
|
|
93
|
+
value: item.quantity,
|
|
94
|
+
name: "quantity",
|
|
95
|
+
"aria-label": t("pages.products.quantity")
|
|
96
|
+
}
|
|
97
|
+
),
|
|
98
|
+
/* @__PURE__ */ jsx("span", { className: "w-10 text-center", children: item.quantity })
|
|
99
|
+
] });
|
|
100
|
+
}
|
|
101
|
+
return /* @__PURE__ */ jsx(
|
|
102
|
+
SallaQuantityInput,
|
|
103
|
+
{
|
|
104
|
+
ref: quantityRef,
|
|
105
|
+
cartItemId: item.id,
|
|
106
|
+
max: item.max_quantity ?? void 0,
|
|
107
|
+
className: "transition transition-color duration-300",
|
|
108
|
+
"aria-label": t("pages.products.quantity"),
|
|
109
|
+
value: item.quantity,
|
|
110
|
+
name: "quantity"
|
|
111
|
+
},
|
|
112
|
+
`${item.id}-${item.quantity}`
|
|
113
|
+
);
|
|
114
|
+
}
|
|
115
|
+
function CartItemTotal({ item }) {
|
|
116
|
+
const { t } = useTranslation();
|
|
117
|
+
const { format } = useMoney();
|
|
118
|
+
const total = item.detailed_offers?.length ? item.total_special_price : item.total;
|
|
119
|
+
return /* @__PURE__ */ jsxs("p", { className: "text-primary flex-none font-bold text-sm rtl:md:pl-12 ltr:md:pr-12", children: [
|
|
120
|
+
/* @__PURE__ */ jsxs("span", { children: [
|
|
121
|
+
t("pages.cart.total"),
|
|
122
|
+
":"
|
|
123
|
+
] }),
|
|
124
|
+
/* @__PURE__ */ jsx("span", { className: "inline-block item-total", children: item.is_available ? format(toNumber(total), { currency: moneyCurrency(total) }) : t("pages.products.out_of_stock") })
|
|
125
|
+
] });
|
|
126
|
+
}
|
|
58
127
|
var handleChange = (e) => {
|
|
59
128
|
window.salla?.form.onChange("cart.updateItem", e);
|
|
60
129
|
};
|
|
61
130
|
function CartItem({ item, isFirst = false }) {
|
|
62
131
|
const { t } = useTranslation();
|
|
63
|
-
const { format } = useMoney();
|
|
64
132
|
const handleDelete = async () => {
|
|
65
133
|
await window.salla?.cart.deleteItem(item.id);
|
|
66
134
|
document.querySelector(`#item-${item.id}`)?.remove();
|
|
@@ -81,27 +149,13 @@ function CartItem({ item, isFirst = false }) {
|
|
|
81
149
|
priority: isFirst
|
|
82
150
|
}
|
|
83
151
|
),
|
|
84
|
-
isFreeProduct && /* @__PURE__ */ jsx("div", { className: "free-ribbon absolute top-[11px] right-[-38px] w-32 bg-red-600 text-white text-xs font-bold text-center py-1 rotate-45 shadow-md", children: t("pages.loyalty_program.free_product"
|
|
152
|
+
isFreeProduct && /* @__PURE__ */ jsx("div", { className: "free-ribbon absolute top-[11px] right-[-38px] w-32 bg-red-600 text-white text-xs font-bold text-center py-1 rotate-45 shadow-md", children: t("pages.loyalty_program.free_product") })
|
|
85
153
|
] }),
|
|
86
154
|
/* @__PURE__ */ jsxs("div", { className: "space-y-1", children: [
|
|
87
155
|
/* @__PURE__ */ jsx("div", { className: "text-gray-900 leading-6 text-lg font-bold", children: /* @__PURE__ */ jsx(Link, { to: item.url, className: "text-base", children: item.product_name }) }),
|
|
88
|
-
/* @__PURE__ */
|
|
89
|
-
item.offer && /* @__PURE__ */ jsx("span", { className: "text-sm text-gray-500 line-through item-regular-price", children: format(toNumber(item.product_price), {
|
|
90
|
-
currency: moneyCurrency(item.product_price)
|
|
91
|
-
}) }),
|
|
92
|
-
item.is_on_sale && /* @__PURE__ */ jsx("span", { className: "inline-flex gap-1 leading-4 text-sm text-gray-500 line-through item-original-price", children: format(toNumber(item.original_price), {
|
|
93
|
-
currency: moneyCurrency(item.original_price)
|
|
94
|
-
}) }),
|
|
95
|
-
/* @__PURE__ */ jsx(
|
|
96
|
-
"span",
|
|
97
|
-
{
|
|
98
|
-
className: `inline-flex gap-1 leading-4 item-price ${item.has_discount ? "text-red-800" : "text-sm text-gray-500"}`,
|
|
99
|
-
children: format(toNumber(item.price), { currency: moneyCurrency(item.price) })
|
|
100
|
-
}
|
|
101
|
-
)
|
|
102
|
-
] }),
|
|
156
|
+
/* @__PURE__ */ jsx(CartItemPrices, { item }),
|
|
103
157
|
item.weight_label && /* @__PURE__ */ jsxs("p", { className: "text-sm text-gray-500", children: [
|
|
104
|
-
t("pages.
|
|
158
|
+
t("pages.products.weight"),
|
|
105
159
|
": ",
|
|
106
160
|
/* @__PURE__ */ jsx("span", { children: item.weight_label })
|
|
107
161
|
] }),
|
|
@@ -121,37 +175,8 @@ function CartItem({ item, isFirst = false }) {
|
|
|
121
175
|
] })
|
|
122
176
|
] }),
|
|
123
177
|
/* @__PURE__ */ jsxs("div", { className: "border-t border-b border-gray-200 py-3 md:p-0 md:border-none mt-5 md:mt-0 flex gap-8 justify-between items-center md:items-start", children: [
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
"input",
|
|
127
|
-
{
|
|
128
|
-
type: "hidden",
|
|
129
|
-
value: item.quantity,
|
|
130
|
-
name: "quantity",
|
|
131
|
-
"aria-label": t("pages.products.quantity", "Quantity")
|
|
132
|
-
}
|
|
133
|
-
),
|
|
134
|
-
/* @__PURE__ */ jsx("span", { className: "w-10 text-center", children: item.quantity })
|
|
135
|
-
] }) : /* @__PURE__ */ jsx(
|
|
136
|
-
SallaQuantityInput,
|
|
137
|
-
{
|
|
138
|
-
cartItemId: item.id,
|
|
139
|
-
max: item.max_quantity ?? void 0,
|
|
140
|
-
className: "transition transition-color duration-300",
|
|
141
|
-
"aria-label": t("pages.products.quantity", "Quantity"),
|
|
142
|
-
value: item.quantity,
|
|
143
|
-
name: "quantity"
|
|
144
|
-
}
|
|
145
|
-
),
|
|
146
|
-
/* @__PURE__ */ jsxs("p", { className: "text-primary flex-none font-bold text-sm rtl:md:pl-12 ltr:md:pr-12", children: [
|
|
147
|
-
/* @__PURE__ */ jsxs("span", { children: [
|
|
148
|
-
t("pages.cart.total", "Total"),
|
|
149
|
-
":"
|
|
150
|
-
] }),
|
|
151
|
-
/* @__PURE__ */ jsx("span", { className: "inline-block item-total", children: item.is_available ? item.detailed_offers?.length ? format(toNumber(item.total_special_price), {
|
|
152
|
-
currency: moneyCurrency(item.total_special_price)
|
|
153
|
-
}) : format(toNumber(item.total), { currency: moneyCurrency(item.total) }) : t("pages.products.out_of_stock", "Out of Stock") })
|
|
154
|
-
] })
|
|
178
|
+
/* @__PURE__ */ jsx(CartItemQuantity, { item }),
|
|
179
|
+
/* @__PURE__ */ jsx(CartItemTotal, { item })
|
|
155
180
|
] })
|
|
156
181
|
] }),
|
|
157
182
|
item.options && item.options.length > 0 && /* @__PURE__ */ jsx(SallaProductOptions, { options: JSON.stringify(item.options), productId: item.product_id }),
|
|
@@ -163,7 +188,7 @@ function CartItem({ item, isFirst = false }) {
|
|
|
163
188
|
size: "small",
|
|
164
189
|
color: "danger",
|
|
165
190
|
className: "btn--delete",
|
|
166
|
-
ariaLabel: t("common.elements.remove"
|
|
191
|
+
ariaLabel: t("common.elements.remove"),
|
|
167
192
|
onClick: handleDelete,
|
|
168
193
|
children: /* @__PURE__ */ jsx("i", { className: "sicon-cancel" })
|
|
169
194
|
}
|
|
@@ -172,5 +197,5 @@ function CartItem({ item, isFirst = false }) {
|
|
|
172
197
|
}
|
|
173
198
|
|
|
174
199
|
export { CartItem };
|
|
175
|
-
//# sourceMappingURL=CartItem-
|
|
176
|
-
//# sourceMappingURL=CartItem-
|
|
200
|
+
//# sourceMappingURL=CartItem-FLPJREOC.js.map
|
|
201
|
+
//# sourceMappingURL=CartItem-FLPJREOC.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/cart/CartItem.tsx"],"names":[],"mappings":"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","file":"CartItem-FLPJREOC.js","sourcesContent":["import type { Money, CartItem as CartItemType } from '../../types';\nimport { useTranslation } from '../../providers/I18nProvider';\nimport { useMoney } from '../../hooks/useMoney';\nimport { Link, Image } from '../common';\nimport { SallaCartItemOffers } from '@salla.sa/twilight-components-react/cart-item-offers';\nimport { SallaQuantityInput } from '@salla.sa/twilight-components-react/quantity-input';\nimport { SallaButton } from '@salla.sa/twilight-components-react/button';\nimport { SallaProductOptions } from '@salla.sa/twilight-components-react/product-options';\nimport { useHostAttributes } from '@salla.sa/twilight-theme-engine/hooks/useHostAttributes';\n\ninterface CartItemProps {\n item: CartItemType;\n isFirst?: boolean;\n}\n\nfunction toNumber(value: number | Money | undefined): number | undefined {\n if (value === undefined) return undefined;\n if (typeof value === 'number') return value;\n return value.amount;\n}\n\nfunction moneyCurrency(value: number | Money | undefined): string | undefined {\n if (typeof value !== 'object') return undefined;\n return value.currency;\n}\n\nfunction CartItemPrices({ item }: { item: CartItemType }) {\n const { format } = useMoney();\n return (\n <div className=\"flex items-center gap-2 flex-wrap\">\n {item.offer && (\n <span className=\"text-sm text-gray-500 line-through item-regular-price\">\n {format(toNumber(item.product_price), {\n currency: moneyCurrency(item.product_price),\n })}\n </span>\n )}\n\n {item.is_on_sale && (\n <span className=\"inline-flex gap-1 leading-4 text-sm text-gray-500 line-through item-original-price\">\n {format(toNumber(item.original_price), {\n currency: moneyCurrency(item.original_price),\n })}\n </span>\n )}\n\n <span\n className={`inline-flex gap-1 leading-4 item-price ${item.has_discount ? 'text-red-800' : 'text-sm text-gray-500'}`}\n >\n {format(toNumber(item.price), { currency: moneyCurrency(item.price) })}\n </span>\n </div>\n );\n}\n\nfunction CartItemQuantity({ item }: { item: CartItemType }) {\n const { t } = useTranslation();\n const quantityRef = useHostAttributes({\n max: item.max_quantity,\n value: item.quantity,\n name: 'quantity',\n });\n\n if (item.type === 'donating') return <span></span>;\n\n if (item.is_hidden_quantity) {\n return (\n <>\n <input\n type=\"hidden\"\n value={item.quantity}\n name=\"quantity\"\n aria-label={t('pages.products.quantity')}\n />\n <span className=\"w-10 text-center\">{item.quantity}</span>\n </>\n );\n }\n\n return (\n <SallaQuantityInput\n // The loaded component reads `value` only once, so remount when the quantity changes.\n key={`${item.id}-${item.quantity}`}\n ref={quantityRef}\n cartItemId={item.id}\n max={item.max_quantity ?? undefined}\n className=\"transition transition-color duration-300\"\n aria-label={t('pages.products.quantity')}\n value={item.quantity}\n name=\"quantity\"\n />\n );\n}\n\nfunction CartItemTotal({ item }: { item: CartItemType }) {\n const { t } = useTranslation();\n const { format } = useMoney();\n const total = item.detailed_offers?.length ? item.total_special_price : item.total;\n return (\n <p className=\"text-primary flex-none font-bold text-sm rtl:md:pl-12 ltr:md:pr-12\">\n <span>{t('pages.cart.total')}:</span>\n <span className=\"inline-block item-total\">\n {item.is_available\n ? format(toNumber(total), { currency: moneyCurrency(total) })\n : t('pages.products.out_of_stock')}\n </span>\n </p>\n );\n}\n\nconst handleChange = (e: React.ChangeEvent<HTMLFormElement>) => {\n window.salla?.form.onChange('cart.updateItem', e);\n};\n\nexport function CartItem({ item, isFirst = false }: CartItemProps) {\n const { t } = useTranslation();\n\n const handleDelete = async () => {\n await window.salla?.cart.deleteItem(item.id);\n document.querySelector(`#item-${item.id}`)?.remove();\n };\n\n const isFreeProduct = toNumber(item.price) === 0 && item.has_discount;\n\n return (\n <form onChange={handleChange} id={`item-${item.id}`}>\n <section className=\"cart-item bg-white p-5 xs:p-7 rounded-md mb-5 relative\">\n <input type=\"hidden\" name=\"id\" value={item.id} />\n\n <div className=\"md:flex rtl:space-x-reverse md:space-x-12 items-start justify-between mb-8 last:mb-0\">\n <div className=\"flex flex-1 rtl:space-x-reverse space-x-4\">\n <Link to={item.url} className=\"relative overflow-hidden shrink-0\">\n <Image\n src={item.product_image}\n alt={item.product_name}\n className=\"flex-none w-24 h-20 border border-gray-200 bg-gray-100 rounded-md object-center object-cover\"\n aspectRatio=\"6/5\"\n priority={isFirst}\n />\n\n {isFreeProduct && (\n <div className=\"free-ribbon absolute top-[11px] right-[-38px] w-32 bg-red-600 text-white text-xs font-bold text-center py-1 rotate-45 shadow-md\">\n {/* Twig: trans('pages.loyalty_program.free_product') */}\n {t('pages.loyalty_program.free_product')}\n </div>\n )}\n </Link>\n\n <div className=\"space-y-1\">\n <div className=\"text-gray-900 leading-6 text-lg font-bold\">\n <Link to={item.url} className=\"text-base\">\n {item.product_name}\n </Link>\n </div>\n\n <CartItemPrices item={item} />\n\n {item.weight_label && (\n <p className=\"text-sm text-gray-500\">\n {t('pages.products.weight')}: <span>{item.weight_label}</span>\n </p>\n )}\n\n {/* Twig: class=\"{{ item.detailed_offers ? 'hidden' : '' }}\": hide old offer when detailed_offers present */}\n {item.offer && !item.detailed_offers?.length && (\n <span className=\"old-offers flex items-center gap-1 mx-1.5\">\n <i className=\"sicon-discount-calculator text-gray-500 offer-icon\"></i>\n <span className=\"text-sm text-gray-500 offer-name\">{item.offer.names}</span>\n </span>\n )}\n\n {item.detailed_offers && item.detailed_offers.length > 0 && (\n <SallaCartItemOffers\n quantity={item.quantity}\n itemId={String(item.id) as any}\n productPrice={toNumber(item.product_price) ?? 0}\n offers={JSON.stringify(item.detailed_offers)}\n />\n )}\n </div>\n </div>\n\n <div className=\"border-t border-b border-gray-200 py-3 md:p-0 md:border-none mt-5 md:mt-0 flex gap-8 justify-between items-center md:items-start\">\n <CartItemQuantity item={item} />\n\n <CartItemTotal item={item} />\n </div>\n </div>\n\n {/* Twig: {% include 'pages.partials.product.options' with {product:item} %} */}\n {item.options && item.options.length > 0 && (\n <SallaProductOptions options={JSON.stringify(item.options)} productId={item.product_id} />\n )}\n\n <span className=\"absolute top-1.5 rtl:left-1.5 ltr:right-1.5 rtl:xs:left-5 ltr:xs:right-5 xs:top-5\">\n <SallaButton\n type=\"button\"\n shape=\"icon\"\n size=\"small\"\n color=\"danger\"\n className=\"btn--delete\"\n ariaLabel={t('common.elements.remove')}\n onClick={handleDelete}\n >\n <i className=\"sicon-cancel\"></i>\n </SallaButton>\n </span>\n </section>\n </form>\n );\n}\n"]}
|
|
@@ -1,36 +1,38 @@
|
|
|
1
1
|
import { stripUnsafeHtml } from './chunk-RUHSV4Z6.js';
|
|
2
|
-
import { useMoney } from './chunk-
|
|
3
|
-
import './chunk-
|
|
2
|
+
import { useMoney } from './chunk-OIH4XW47.js';
|
|
3
|
+
import './chunk-6HJLG7KF.js';
|
|
4
4
|
import './chunk-JKIRRMBU.js';
|
|
5
5
|
import './chunk-2JV6WZ6O.js';
|
|
6
|
-
import './chunk-
|
|
6
|
+
import './chunk-UIOLSYKV.js';
|
|
7
7
|
import './chunk-VVZNW5CB.js';
|
|
8
|
-
import './chunk-
|
|
9
|
-
import './chunk-
|
|
8
|
+
import './chunk-2XGQSJKH.js';
|
|
9
|
+
import './chunk-WH225GEC.js';
|
|
10
10
|
import './chunk-TFB3QXYH.js';
|
|
11
|
+
import './chunk-YMVLYYLU.js';
|
|
11
12
|
import './chunk-C5X6CVXC.js';
|
|
12
|
-
import './chunk-
|
|
13
|
-
import './chunk-
|
|
14
|
-
import './chunk-
|
|
15
|
-
import './chunk-
|
|
16
|
-
import './chunk-
|
|
17
|
-
import './chunk-
|
|
13
|
+
import './chunk-UZKTK6YV.js';
|
|
14
|
+
import './chunk-5X2UFNKY.js';
|
|
15
|
+
import './chunk-P3OPJL6I.js';
|
|
16
|
+
import './chunk-WY4IYO3G.js';
|
|
17
|
+
import './chunk-TYLKNVQA.js';
|
|
18
|
+
import './chunk-SR4OTLTJ.js';
|
|
19
|
+
import './chunk-N2S25NXP.js';
|
|
18
20
|
import './chunk-TP3LCGE7.js';
|
|
19
21
|
import './chunk-Z653O7MX.js';
|
|
20
22
|
import './chunk-ZCH7W7DZ.js';
|
|
21
23
|
import './chunk-3U26OMNO.js';
|
|
22
24
|
import './chunk-JWXJPJBO.js';
|
|
23
25
|
import './chunk-CW625T2E.js';
|
|
26
|
+
import './chunk-7V36I5GT.js';
|
|
24
27
|
import { useCoupon } from './chunk-BVSJPBJ6.js';
|
|
25
28
|
import './chunk-GBWCXUPD.js';
|
|
26
29
|
import './chunk-OAMIDZKW.js';
|
|
27
30
|
import { useTranslation } from './chunk-TYNZ5B2B.js';
|
|
28
31
|
import './chunk-T72DAX7R.js';
|
|
29
|
-
import './chunk-YMVLYYLU.js';
|
|
30
32
|
import './chunk-RJPPO3ET.js';
|
|
31
33
|
import { HookSlot } from './chunk-Q7VWURUR.js';
|
|
32
34
|
import './chunk-GU2KUQVD.js';
|
|
33
|
-
import './chunk-
|
|
35
|
+
import './chunk-Y7EOX2OE.js';
|
|
34
36
|
import './chunk-AXW67SY7.js';
|
|
35
37
|
import './chunk-BYMOPN2S.js';
|
|
36
38
|
import './chunk-SKLEJJ6M.js';
|
|
@@ -237,5 +239,5 @@ function CouponInput({ initialCoupon }) {
|
|
|
237
239
|
}
|
|
238
240
|
|
|
239
241
|
export { CartSummary };
|
|
240
|
-
//# sourceMappingURL=CartSummary-
|
|
241
|
-
//# sourceMappingURL=CartSummary-
|
|
242
|
+
//# sourceMappingURL=CartSummary-4LVQXTO2.js.map
|
|
243
|
+
//# sourceMappingURL=CartSummary-4LVQXTO2.js.map
|