@salla.sa/twilight-theme-engine 1.0.73 → 1.0.74
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-G2HK5QB3.js → AddToCartForm-H2PRWRO7.js} +8 -6
- package/dist/AddToCartForm-H2PRWRO7.js.map +1 -0
- package/dist/{BlogAuthorPage-BU2LVISS.js → BlogAuthorPage-QDGBWGGT.js} +22 -22
- package/dist/{BlogAuthorPage-BU2LVISS.js.map → BlogAuthorPage-QDGBWGGT.js.map} +1 -1
- package/dist/{BlogCategoryPage-UR4MPDLE.js → BlogCategoryPage-BK4OL6T4.js} +22 -22
- package/dist/{BlogCategoryPage-UR4MPDLE.js.map → BlogCategoryPage-BK4OL6T4.js.map} +1 -1
- package/dist/{BlogPage-E2XZGFOP.js → BlogPage-5LLIKUOQ.js} +20 -20
- package/dist/{BlogPage-E2XZGFOP.js.map → BlogPage-5LLIKUOQ.js.map} +1 -1
- package/dist/{BlogSinglePage-ZK2K6WEU.js → BlogSinglePage-3BDXSFTY.js} +20 -20
- package/dist/{BlogSinglePage-ZK2K6WEU.js.map → BlogSinglePage-3BDXSFTY.js.map} +1 -1
- package/dist/{BlogTagPage-5N4VTPDN.js → BlogTagPage-S77JPNEZ.js} +22 -22
- package/dist/{BlogTagPage-5N4VTPDN.js.map → BlogTagPage-S77JPNEZ.js.map} +1 -1
- package/dist/{BrandsPage-XE7RYGXA.js → BrandsPage-2TJALMEG.js} +21 -21
- package/dist/{BrandsPage-XE7RYGXA.js.map → BrandsPage-2TJALMEG.js.map} +1 -1
- package/dist/{Breadcrumb-NX6BUSOA.js → Breadcrumb-SXC43X3D.js} +20 -20
- package/dist/{Breadcrumb-NX6BUSOA.js.map → Breadcrumb-SXC43X3D.js.map} +1 -1
- package/dist/{CartItem-SO34G6GZ.js → CartItem-R6BYAM4O.js} +20 -20
- package/dist/{CartItem-SO34G6GZ.js.map → CartItem-R6BYAM4O.js.map} +1 -1
- package/dist/{CartSummary-SDTY2CR2.js → CartSummary-YQ2RMHID.js} +20 -20
- package/dist/{CartSummary-SDTY2CR2.js.map → CartSummary-YQ2RMHID.js.map} +1 -1
- package/dist/{Copyright-C426OB5D.js → Copyright-5VLQICDY.js} +3 -3
- package/dist/{Copyright-C426OB5D.js.map → Copyright-5VLQICDY.js.map} +1 -1
- package/dist/{CustomerLayout-UXX5KJWR.js → CustomerLayout-DUT7BEKW.js} +20 -20
- package/dist/{CustomerLayout-UXX5KJWR.js.map → CustomerLayout-DUT7BEKW.js.map} +1 -1
- package/dist/{Footer-M5QEXJ4Z.js → Footer-J2KXYFB3.js} +20 -20
- package/dist/{Footer-M5QEXJ4Z.js.map → Footer-J2KXYFB3.js.map} +1 -1
- package/dist/{Header-CUJ4SYDF.js → Header-GZQINLEQ.js} +7 -7
- package/dist/{Header-CUJ4SYDF.js.map → Header-GZQINLEQ.js.map} +1 -1
- package/dist/{LoyaltyPage-UMQ2ZWA6.js → LoyaltyPage-IXLUF6MF.js} +20 -20
- package/dist/{LoyaltyPage-UMQ2ZWA6.js.map → LoyaltyPage-IXLUF6MF.js.map} +1 -1
- package/dist/{LoyaltyPointsPage-5YHEQSLT.js → LoyaltyPointsPage-RDNXI5VY.js} +3 -3
- package/dist/{LoyaltyPointsPage-5YHEQSLT.js.map → LoyaltyPointsPage-RDNXI5VY.js.map} +1 -1
- package/dist/{MainMenu-OFQDXUGW.js → MainMenu-KNJDJFJX.js} +7 -7
- package/dist/{MainMenu-OFQDXUGW.js.map → MainMenu-KNJDJFJX.js.map} +1 -1
- package/dist/{MasterLayout-TSHKSJ7U.js → MasterLayout-MFL2NYPF.js} +20 -20
- package/dist/{MasterLayout-TSHKSJ7U.js.map → MasterLayout-MFL2NYPF.js.map} +1 -1
- package/dist/{MobileMenu-7EKUQ4MU.js → MobileMenu-RXLYUAWL.js} +21 -21
- package/dist/{MobileMenu-7EKUQ4MU.js.map → MobileMenu-RXLYUAWL.js.map} +1 -1
- package/dist/{NotificationsPage-TBDOI7YB.js → NotificationsPage-QSF7S2PD.js} +20 -20
- package/dist/{NotificationsPage-TBDOI7YB.js.map → NotificationsPage-QSF7S2PD.js.map} +1 -1
- package/dist/{OrderSinglePage-7A37FKJE.js → OrderSinglePage-CWBHU2C6.js} +28 -23
- package/dist/OrderSinglePage-CWBHU2C6.js.map +1 -0
- package/dist/{OrdersPage-NJ3JH6SG.js → OrdersPage-L76IEAXR.js} +20 -20
- package/dist/{OrdersPage-NJ3JH6SG.js.map → OrdersPage-L76IEAXR.js.map} +1 -1
- package/dist/{PageSingle-UKA2U3E5.js → PageSingle-BUAZBPIQ.js} +6 -6
- package/dist/{PageSingle-UKA2U3E5.js.map → PageSingle-BUAZBPIQ.js.map} +1 -1
- package/dist/{ProductDetails-XDNE62ZZ.js → ProductDetails-MPNSWRTQ.js} +15 -7
- package/dist/ProductDetails-MPNSWRTQ.js.map +1 -0
- package/dist/{ProfilePage-WPJYGKYR.js → ProfilePage-I72265CD.js} +20 -20
- package/dist/{ProfilePage-WPJYGKYR.js.map → ProfilePage-I72265CD.js.map} +1 -1
- package/dist/ReviewsPage-M5GNHNZG.js +18 -0
- package/dist/ReviewsPage-M5GNHNZG.js.map +1 -0
- package/dist/{SeoCartWidget-G7NAANUN.js → SeoCartWidget-KV3T3BO7.js} +20 -20
- package/dist/{SeoCartWidget-G7NAANUN.js.map → SeoCartWidget-KV3T3BO7.js.map} +1 -1
- package/dist/{SettingsPage-X7GPCBJL.js → SettingsPage-3F5HZNXX.js} +20 -20
- package/dist/{SettingsPage-X7GPCBJL.js.map → SettingsPage-3F5HZNXX.js.map} +1 -1
- package/dist/{StoreClosedNotification-NKRYCLKX.js → StoreClosedNotification-65QIOIAM.js} +21 -21
- package/dist/{StoreClosedNotification-NKRYCLKX.js.map → StoreClosedNotification-65QIOIAM.js.map} +1 -1
- package/dist/{TestimonialsPage-JTUWHKPU.js → TestimonialsPage-5U7PH4TT.js} +6 -6
- package/dist/{TestimonialsPage-JTUWHKPU.js.map → TestimonialsPage-5U7PH4TT.js.map} +1 -1
- package/dist/{ThankYouPage-MCMBGHO2.js → ThankYouPage-HFUTJCRT.js} +20 -20
- package/dist/{ThankYouPage-MCMBGHO2.js.map → ThankYouPage-HFUTJCRT.js.map} +1 -1
- package/dist/{WalletPage-JJI6WPNT.js → WalletPage-KURO6WSP.js} +21 -21
- package/dist/{WalletPage-JJI6WPNT.js.map → WalletPage-KURO6WSP.js.map} +1 -1
- package/dist/{WishlistPage-HAOYS7NV.js → WishlistPage-RLUK4JRD.js} +22 -22
- package/dist/{WishlistPage-HAOYS7NV.js.map → WishlistPage-RLUK4JRD.js.map} +1 -1
- package/dist/api/apps.js +4 -4
- package/dist/api/blog.js +6 -6
- package/dist/api/brands.js +6 -6
- package/dist/api/cart.d.ts +1 -1
- package/dist/api/cart.d.ts.map +1 -1
- package/dist/api/cart.js +6 -6
- package/dist/api/category.js +6 -6
- package/dist/api/client.d.ts +6 -0
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/client.js +3 -3
- package/dist/api/home.js +4 -4
- package/dist/api/loyalty.js +6 -6
- package/dist/api/menu.js +4 -4
- package/dist/api/notification.js +4 -4
- package/dist/api/order.js +6 -6
- package/dist/api/page.js +6 -6
- package/dist/api/product.d.ts +20 -0
- package/dist/api/product.d.ts.map +1 -1
- package/dist/api/product.js +6 -6
- package/dist/api/profile.js +3 -3
- package/dist/api/store.d.ts +3 -1
- package/dist/api/store.d.ts.map +1 -1
- package/dist/api/store.js +4 -4
- package/dist/api/translations.js +4 -4
- package/dist/api/user.js +4 -4
- package/dist/api/wallet.js +4 -4
- package/dist/api/wishlist.js +7 -7
- package/dist/{chunk-3EE62REP.js → chunk-2OYXPNCE.js} +3 -3
- package/dist/{chunk-3EE62REP.js.map → chunk-2OYXPNCE.js.map} +1 -1
- package/dist/{chunk-YLSG4MEK.js → chunk-2ZQKAGSZ.js} +4 -4
- package/dist/{chunk-YLSG4MEK.js.map → chunk-2ZQKAGSZ.js.map} +1 -1
- package/dist/{chunk-RO6KBURF.js → chunk-3EBAXWBJ.js} +7 -6
- package/dist/chunk-3EBAXWBJ.js.map +1 -0
- package/dist/{chunk-KOMV5SEF.js → chunk-3EHECJ7M.js} +7 -6
- package/dist/chunk-3EHECJ7M.js.map +1 -0
- package/dist/{chunk-VFYT2VWC.js → chunk-3QT7JMAD.js} +13 -4
- package/dist/chunk-3QT7JMAD.js.map +1 -0
- package/dist/{chunk-OYP5CGHU.js → chunk-3TJKB3WR.js} +3 -3
- package/dist/{chunk-OYP5CGHU.js.map → chunk-3TJKB3WR.js.map} +1 -1
- package/dist/{chunk-WSXRUOI2.js → chunk-4VWWIA4M.js} +4 -4
- package/dist/{chunk-WSXRUOI2.js.map → chunk-4VWWIA4M.js.map} +1 -1
- package/dist/{chunk-DIVEHHMD.js → chunk-4YVGMXG7.js} +3 -3
- package/dist/{chunk-DIVEHHMD.js.map → chunk-4YVGMXG7.js.map} +1 -1
- package/dist/{chunk-5AFTFN72.js → chunk-5NUDOT33.js} +3 -3
- package/dist/{chunk-5AFTFN72.js.map → chunk-5NUDOT33.js.map} +1 -1
- package/dist/{chunk-IXUY5RMV.js → chunk-6I4LWF5Y.js} +3 -3
- package/dist/{chunk-IXUY5RMV.js.map → chunk-6I4LWF5Y.js.map} +1 -1
- package/dist/{chunk-JZ7BOB4G.js → chunk-6KVB2WHE.js} +4 -4
- package/dist/{chunk-JZ7BOB4G.js.map → chunk-6KVB2WHE.js.map} +1 -1
- package/dist/{chunk-BVSJPBJ6.js → chunk-6WI7R2BD.js} +14 -3
- package/dist/chunk-6WI7R2BD.js.map +1 -0
- package/dist/{chunk-CMD3ARR2.js → chunk-BLWLKRKH.js} +59 -28
- package/dist/chunk-BLWLKRKH.js.map +1 -0
- package/dist/{chunk-J427UFSZ.js → chunk-CJDAZQV6.js} +6 -6
- package/dist/{chunk-J427UFSZ.js.map → chunk-CJDAZQV6.js.map} +1 -1
- package/dist/{chunk-OGVUFMLX.js → chunk-D2T6246Q.js} +3 -3
- package/dist/{chunk-OGVUFMLX.js.map → chunk-D2T6246Q.js.map} +1 -1
- package/dist/chunk-E5O5ICIY.js +40 -0
- package/dist/chunk-E5O5ICIY.js.map +1 -0
- package/dist/{chunk-RSVAPXXI.js → chunk-E7EBWXCA.js} +23 -15
- package/dist/chunk-E7EBWXCA.js.map +1 -0
- package/dist/{chunk-L3X2H2RP.js → chunk-FIFNYC7B.js} +7 -7
- package/dist/{chunk-L3X2H2RP.js.map → chunk-FIFNYC7B.js.map} +1 -1
- package/dist/{chunk-WLDDKFSZ.js → chunk-FVDUTMH6.js} +4 -4
- package/dist/{chunk-WLDDKFSZ.js.map → chunk-FVDUTMH6.js.map} +1 -1
- package/dist/{chunk-L5K7VBOH.js → chunk-GFSTJ2PF.js} +3 -3
- package/dist/{chunk-L5K7VBOH.js.map → chunk-GFSTJ2PF.js.map} +1 -1
- package/dist/{chunk-HFISEQPK.js → chunk-IDY6OEXA.js} +8 -8
- package/dist/{chunk-HFISEQPK.js.map → chunk-IDY6OEXA.js.map} +1 -1
- package/dist/{chunk-EXBH6RGD.js → chunk-IK57LAIA.js} +19 -5
- package/dist/chunk-IK57LAIA.js.map +1 -0
- package/dist/{chunk-B5FDWE4U.js → chunk-JAPH535M.js} +4 -4
- package/dist/{chunk-B5FDWE4U.js.map → chunk-JAPH535M.js.map} +1 -1
- package/dist/{chunk-3IHFA2X5.js → chunk-JEG5WPNT.js} +3 -3
- package/dist/{chunk-3IHFA2X5.js.map → chunk-JEG5WPNT.js.map} +1 -1
- package/dist/{chunk-54XX3YPP.js → chunk-JHCLU3PS.js} +8 -8
- package/dist/{chunk-54XX3YPP.js.map → chunk-JHCLU3PS.js.map} +1 -1
- package/dist/{chunk-U53LIN2F.js → chunk-JNZLH2OR.js} +58 -9
- package/dist/chunk-JNZLH2OR.js.map +1 -0
- package/dist/{chunk-3CYIB6BL.js → chunk-KO3HG5GQ.js} +3 -3
- package/dist/{chunk-3CYIB6BL.js.map → chunk-KO3HG5GQ.js.map} +1 -1
- package/dist/{chunk-MISI3T6V.js → chunk-M6BXZTRK.js} +3 -3
- package/dist/{chunk-MISI3T6V.js.map → chunk-M6BXZTRK.js.map} +1 -1
- package/dist/{chunk-WYW7USLQ.js → chunk-MEMB7JYJ.js} +4 -4
- package/dist/{chunk-WYW7USLQ.js.map → chunk-MEMB7JYJ.js.map} +1 -1
- package/dist/{chunk-SDIQHTDG.js → chunk-OKNJFS44.js} +4 -4
- package/dist/{chunk-SDIQHTDG.js.map → chunk-OKNJFS44.js.map} +1 -1
- package/dist/{chunk-3YAR2SXQ.js → chunk-OQA2MKZA.js} +30 -17
- package/dist/chunk-OQA2MKZA.js.map +1 -0
- package/dist/{chunk-ZGHRSRDO.js → chunk-OUW6WESU.js} +3 -2
- package/dist/chunk-OUW6WESU.js.map +1 -0
- package/dist/{chunk-YKFGUVF7.js → chunk-P2YAPWMS.js} +5 -4
- package/dist/chunk-P2YAPWMS.js.map +1 -0
- package/dist/{chunk-QVJDYSCT.js → chunk-P4GOLSA2.js} +3 -3
- package/dist/{chunk-QVJDYSCT.js.map → chunk-P4GOLSA2.js.map} +1 -1
- package/dist/{chunk-5DPR7GWH.js → chunk-PNM4NP4U.js} +3 -3
- package/dist/{chunk-5DPR7GWH.js.map → chunk-PNM4NP4U.js.map} +1 -1
- package/dist/{chunk-52ETYODY.js → chunk-R72Q5Z6M.js} +4 -4
- package/dist/{chunk-52ETYODY.js.map → chunk-R72Q5Z6M.js.map} +1 -1
- package/dist/{chunk-HBTIZWT2.js → chunk-RYSJOCHI.js} +3 -3
- package/dist/{chunk-HBTIZWT2.js.map → chunk-RYSJOCHI.js.map} +1 -1
- package/dist/{chunk-XVNXXF67.js → chunk-TWVTIAMO.js} +3 -3
- package/dist/{chunk-XVNXXF67.js.map → chunk-TWVTIAMO.js.map} +1 -1
- package/dist/{chunk-2ALN2BPM.js → chunk-VYCNB6VN.js} +3 -3
- package/dist/{chunk-2ALN2BPM.js.map → chunk-VYCNB6VN.js.map} +1 -1
- package/dist/chunk-WG47KLHH.js +14 -0
- package/dist/{chunk-4LVBS3VI.js.map → chunk-WG47KLHH.js.map} +1 -1
- package/dist/{chunk-L2QUP6J3.js → chunk-WHGOO4A2.js} +6 -6
- package/dist/{chunk-L2QUP6J3.js.map → chunk-WHGOO4A2.js.map} +1 -1
- package/dist/{chunk-25FWAL3O.js → chunk-WS3WQ3OL.js} +4 -4
- package/dist/{chunk-25FWAL3O.js.map → chunk-WS3WQ3OL.js.map} +1 -1
- package/dist/{chunk-UAY6LTWB.js → chunk-XN7TVPAU.js} +4 -4
- package/dist/{chunk-UAY6LTWB.js.map → chunk-XN7TVPAU.js.map} +1 -1
- package/dist/{chunk-LPQFTXBB.js → chunk-Y5OGXJLH.js} +10 -3
- package/dist/chunk-Y5OGXJLH.js.map +1 -0
- package/dist/{chunk-R5MZV6KW.js → chunk-YUGZDWD6.js} +4 -4
- package/dist/{chunk-R5MZV6KW.js.map → chunk-YUGZDWD6.js.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 +18 -18
- package/dist/components/home/ReorderProducts.d.ts +7 -0
- package/dist/components/home/ReorderProducts.d.ts.map +1 -0
- package/dist/components/home/SquarePhotos.d.ts +2 -1
- package/dist/components/home/SquarePhotos.d.ts.map +1 -1
- package/dist/components/home/index.d.ts +2 -0
- package/dist/components/home/index.d.ts.map +1 -1
- package/dist/components/home/index.js +22 -22
- package/dist/components/home/reorder-hooks.d.ts +6 -0
- package/dist/components/home/reorder-hooks.d.ts.map +1 -0
- package/dist/components/layout/index.js +1 -1
- package/dist/components/product/AddToCartForm.d.ts.map +1 -1
- package/dist/components/product/ProductDetails.d.ts.map +1 -1
- package/dist/components/product/index.js +19 -19
- package/dist/components/snippets/AppsSnippets.d.ts +2 -0
- package/dist/components/snippets/AppsSnippets.d.ts.map +1 -1
- package/dist/components/store/index.js +20 -20
- package/dist/components/toast/index.js +4 -4
- package/dist/document-class-5FTU6EZE.js +25 -0
- package/dist/{document-class-DOQDO2DN.js.map → document-class-5FTU6EZE.js.map} +1 -1
- package/dist/hooks/index.js +18 -18
- package/dist/hooks/useComments.js +3 -3
- package/dist/hooks/useCoupon.d.ts +0 -41
- package/dist/hooks/useCoupon.d.ts.map +1 -1
- package/dist/hooks/useCoupon.js +3 -1
- package/dist/hooks/useGtm.js +18 -18
- package/dist/hooks/useMoney.js +18 -18
- package/dist/hooks/useProduct.js +3 -3
- package/dist/hooks/useStore.js +18 -18
- package/dist/hooks/useUser.js +5 -5
- package/dist/hooks/useWishlist.d.ts.map +1 -1
- package/dist/hooks/useWishlist.js +4 -1
- package/dist/index.js +18 -18
- package/dist/native-app/index.js +3 -3
- package/dist/navigation-CDITJYUW.js +13 -0
- package/dist/{navigation-P3GZOWUU.js.map → navigation-CDITJYUW.js.map} +1 -1
- package/dist/{navigation-TA3I3XEC.js → navigation-WCGV6RUK.js} +5 -5
- package/dist/{navigation-TA3I3XEC.js.map → navigation-WCGV6RUK.js.map} +1 -1
- package/dist/{not-found-6B6QSJYA.js → not-found-EL2XQE5D.js} +59 -33
- package/dist/not-found-EL2XQE5D.js.map +1 -0
- package/dist/providers/index.js +18 -18
- package/dist/providers/twilight-init.d.ts.map +1 -1
- package/dist/router/route-ids.d.ts +1 -0
- package/dist/router/route-ids.d.ts.map +1 -1
- package/dist/routes/account/orders/single/OrderHeader.d.ts.map +1 -1
- package/dist/routes/account/orders.js +7 -7
- package/dist/routes/account.js +16 -16
- package/dist/routes/blog.js +11 -11
- package/dist/routes/brands.js +7 -7
- package/dist/routes/cart.js +26 -26
- package/dist/routes/home/HomePage.d.ts.map +1 -1
- package/dist/routes/home.js +23 -23
- package/dist/routes/index.d.ts +1 -1
- package/dist/routes/index.d.ts.map +1 -1
- package/dist/routes/index.js +4 -4
- package/dist/routes/loyalty.js +8 -8
- package/dist/routes/page.js +7 -7
- package/dist/routes/product/index.d.ts.map +1 -1
- package/dist/routes/product-listing/ProductListPage.d.ts.map +1 -1
- package/dist/routes/product-listing/loader.d.ts.map +1 -1
- package/dist/routes/product-listing/types.d.ts +1 -1
- package/dist/routes/product-listing/types.d.ts.map +1 -1
- package/dist/routes/product-listing.js +204 -183
- package/dist/routes/product-listing.js.map +1 -1
- package/dist/routes/product-short-link.d.ts +9 -5
- package/dist/routes/product-short-link.d.ts.map +1 -1
- package/dist/routes/product.js +23 -23
- package/dist/routes/product.js.map +1 -1
- package/dist/routes/seo-redirects.js +4 -4
- package/dist/routes/testimonials/ReviewsPage.d.ts +3 -0
- package/dist/routes/testimonials/ReviewsPage.d.ts.map +1 -0
- package/dist/routes/testimonials/index.d.ts +15 -3
- package/dist/routes/testimonials/index.d.ts.map +1 -1
- package/dist/routes/testimonials/loader.d.ts +3 -1
- package/dist/routes/testimonials/loader.d.ts.map +1 -1
- package/dist/routes/testimonials/types.d.ts +3 -0
- package/dist/routes/testimonials/types.d.ts.map +1 -1
- package/dist/routes/testimonials.js +38 -3
- package/dist/routes/testimonials.js.map +1 -1
- package/dist/routes/thank-you.js +7 -7
- package/dist/skeleton.js +23 -23
- package/dist/tanstack/document-class.d.ts.map +1 -1
- package/dist/tanstack/router.d.ts.map +1 -1
- package/dist/tanstack.js +16 -16
- package/dist/types/index.d.ts +3 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/salla-sdk.d.ts +4 -0
- package/dist/types/salla-sdk.d.ts.map +1 -1
- package/dist/utils/cookies.d.ts +5 -0
- package/dist/utils/cookies.d.ts.map +1 -1
- package/dist/utils/index.js +5 -4
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/sdk-events.d.ts +6 -0
- package/dist/utils/sdk-events.d.ts.map +1 -1
- package/dist/vite/adapters/tanstack.adapter.d.ts.map +1 -1
- package/dist/vite/index.js +60 -1
- package/dist/vite/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/AddToCartForm-G2HK5QB3.js.map +0 -1
- package/dist/OrderSinglePage-7A37FKJE.js.map +0 -1
- package/dist/ProductDetails-XDNE62ZZ.js.map +0 -1
- package/dist/chunk-3YAR2SXQ.js.map +0 -1
- package/dist/chunk-4LVBS3VI.js +0 -14
- package/dist/chunk-5ZR2HKZ7.js +0 -14
- package/dist/chunk-5ZR2HKZ7.js.map +0 -1
- package/dist/chunk-BVSJPBJ6.js.map +0 -1
- package/dist/chunk-CMD3ARR2.js.map +0 -1
- package/dist/chunk-EXBH6RGD.js.map +0 -1
- package/dist/chunk-KOMV5SEF.js.map +0 -1
- package/dist/chunk-LPQFTXBB.js.map +0 -1
- package/dist/chunk-RO6KBURF.js.map +0 -1
- package/dist/chunk-RSVAPXXI.js.map +0 -1
- package/dist/chunk-U53LIN2F.js.map +0 -1
- package/dist/chunk-VFYT2VWC.js.map +0 -1
- package/dist/chunk-YKFGUVF7.js.map +0 -1
- package/dist/chunk-ZGHRSRDO.js.map +0 -1
- package/dist/document-class-DOQDO2DN.js +0 -25
- package/dist/navigation-P3GZOWUU.js +0 -13
- package/dist/not-found-6B6QSJYA.js.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { onSallaEvent } from './chunk-
|
|
1
|
+
import { onSallaEvent } from './chunk-P4GOLSA2.js';
|
|
2
2
|
import { useState, useCallback, useEffect } from 'react';
|
|
3
3
|
|
|
4
4
|
function useComments() {
|
|
@@ -16,5 +16,5 @@ function useComments() {
|
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
export { useComments };
|
|
19
|
-
//# sourceMappingURL=chunk-
|
|
20
|
-
//# sourceMappingURL=chunk-
|
|
19
|
+
//# sourceMappingURL=chunk-4YVGMXG7.js.map
|
|
20
|
+
//# sourceMappingURL=chunk-4YVGMXG7.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/hooks/useComments.ts"],"names":[],"mappings":";;;AAuCO,SAAS,WAAA,GAAiC;AAC/C,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAAS,CAAC,CAAA;AAEhD,EAAA,MAAM,OAAA,GAAU,YAAY,MAAM;AAChC,IAAA,cAAA,CAAe,CAAC,IAAA,KAAS,IAAA,GAAO,CAAC,CAAA;AAAA,EACnC,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,qBAAqB,MAAM;AAC/B,MAAA,cAAA,CAAe,CAAC,IAAA,KAAS,IAAA,GAAO,CAAC,CAAA;AAAA,IACnC,CAAA;AAEA,IAAA,OAAO,YAAA,CAAa,kBAAkB,kBAAkB,CAAA;AAAA,EAC1D,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO,EAAE,aAAa,OAAA,EAAQ;AAChC","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/hooks/useComments.ts"],"names":[],"mappings":";;;AAuCO,SAAS,WAAA,GAAiC;AAC/C,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAAS,CAAC,CAAA;AAEhD,EAAA,MAAM,OAAA,GAAU,YAAY,MAAM;AAChC,IAAA,cAAA,CAAe,CAAC,IAAA,KAAS,IAAA,GAAO,CAAC,CAAA;AAAA,EACnC,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,qBAAqB,MAAM;AAC/B,MAAA,cAAA,CAAe,CAAC,IAAA,KAAS,IAAA,GAAO,CAAC,CAAA;AAAA,IACnC,CAAA;AAEA,IAAA,OAAO,YAAA,CAAa,kBAAkB,kBAAkB,CAAA;AAAA,EAC1D,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO,EAAE,aAAa,OAAA,EAAQ;AAChC","file":"chunk-4YVGMXG7.js","sourcesContent":["import { useState, useEffect, useCallback } from 'react';\nimport { onSallaEvent } from '../utils/sdk-helpers';\n\n/**\n * UseCommentsResult - Return type for useComments hook\n *\n * @property commentsKey - Key to pass to salla-comments component for re-render\n * @property refresh - Function to manually trigger a comments refresh\n */\nexport interface UseCommentsResult {\n commentsKey: number;\n refresh: () => void;\n}\n\n/**\n * useComments - Hook for managing salla-comments web component re-renders\n *\n * Listens to the Salla SDK's comment added events and automatically\n * increments a re-render key for the salla-comments component. This\n * eliminates the need for full page reloads when comments are added.\n *\n * @returns Object with comments key for component re-rendering and manual refresh function\n *\n * @example\n * ```tsx\n * function ProductPage({ product }) {\n * const { commentsKey } = useComments();\n *\n * return (\n * <salla-comments\n * key={commentsKey}\n * item-id={product.id}\n * type=\"product\"\n * />\n * );\n * }\n * ```\n */\n\nexport function useComments(): UseCommentsResult {\n const [commentsKey, setCommentsKey] = useState(0);\n\n const refresh = useCallback(() => {\n setCommentsKey((prev) => prev + 1);\n }, []);\n\n useEffect(() => {\n const handleCommentAdded = () => {\n setCommentsKey((prev) => prev + 1);\n };\n\n return onSallaEvent('comment::added', handleCommentAdded);\n }, []);\n\n return { commentsKey, refresh };\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { api } from './chunk-
|
|
1
|
+
import { api } from './chunk-IK57LAIA.js';
|
|
2
2
|
|
|
3
3
|
// src/api/wallet.ts
|
|
4
4
|
var wallet = {
|
|
@@ -20,5 +20,5 @@ var wallet = {
|
|
|
20
20
|
};
|
|
21
21
|
|
|
22
22
|
export { wallet };
|
|
23
|
-
//# sourceMappingURL=chunk-
|
|
24
|
-
//# sourceMappingURL=chunk-
|
|
23
|
+
//# sourceMappingURL=chunk-5NUDOT33.js.map
|
|
24
|
+
//# sourceMappingURL=chunk-5NUDOT33.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/api/wallet.ts"],"names":[],"mappings":";;;AAgCO,IAAM,MAAA,GAAS;AAAA,EACpB,IAAA,EAAM,OAAO,MAAA,GAA2B,EAAC,KAAiC;AACxE,IAAA,MAAM,EAAE,IAAA,GAAO,CAAA,EAAG,OAAA,GAAU,EAAA,EAAI,QAAO,GAAI,MAAA;AAE3C,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,IAAA,YAAA,CAAa,GAAA,CAAI,MAAA,EAAQ,MAAA,CAAO,IAAI,CAAC,CAAA;AACrC,IAAA,YAAA,CAAa,GAAA,CAAI,UAAA,EAAY,MAAA,CAAO,OAAO,CAAC,CAAA;AAE5C,IAAA,MAAM,UAAmC,EAAC;AAC1C,IAAA,IAAI,MAAA,UAAgB,MAAA,GAAS,MAAA;AAE7B,IAAA,MAAM,QAAA,GAAW,MAAM,GAAA,CACpB,GAAA,CAAI,CAAA,eAAA,EAAkB,YAAA,CAAa,QAAA,EAAU,CAAA,CAAA,EAAI,OAAc,CAAA,CAC/D,IAAA,EAAsE;AAEzE,IAAA,MAAM,YAAA,GAAe,SAAS,IAAA,CAAK,YAAA;AAEnC,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,YAAA,CAAa,IAAA,IAAQ,EAAC;AAAA,MAC7B,MAAM,YAAA,CAAa,aAAA;AAAA,MACnB,OAAA,EAAS,SAAS,IAAA,CAAK;AAAA,KACzB;AAAA,EACF;AACF","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/api/wallet.ts"],"names":[],"mappings":";;;AAgCO,IAAM,MAAA,GAAS;AAAA,EACpB,IAAA,EAAM,OAAO,MAAA,GAA2B,EAAC,KAAiC;AACxE,IAAA,MAAM,EAAE,IAAA,GAAO,CAAA,EAAG,OAAA,GAAU,EAAA,EAAI,QAAO,GAAI,MAAA;AAE3C,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,IAAA,YAAA,CAAa,GAAA,CAAI,MAAA,EAAQ,MAAA,CAAO,IAAI,CAAC,CAAA;AACrC,IAAA,YAAA,CAAa,GAAA,CAAI,UAAA,EAAY,MAAA,CAAO,OAAO,CAAC,CAAA;AAE5C,IAAA,MAAM,UAAmC,EAAC;AAC1C,IAAA,IAAI,MAAA,UAAgB,MAAA,GAAS,MAAA;AAE7B,IAAA,MAAM,QAAA,GAAW,MAAM,GAAA,CACpB,GAAA,CAAI,CAAA,eAAA,EAAkB,YAAA,CAAa,QAAA,EAAU,CAAA,CAAA,EAAI,OAAc,CAAA,CAC/D,IAAA,EAAsE;AAEzE,IAAA,MAAM,YAAA,GAAe,SAAS,IAAA,CAAK,YAAA;AAEnC,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,YAAA,CAAa,IAAA,IAAQ,EAAC;AAAA,MAC7B,MAAM,YAAA,CAAa,aAAA;AAAA,MACnB,OAAA,EAAS,SAAS,IAAA,CAAK;AAAA,KACzB;AAAA,EACF;AACF","file":"chunk-5NUDOT33.js","sourcesContent":["import { api } from './client';\n\nexport interface TransactionItem {\n id: number;\n order_id: number;\n transaction_type: string;\n action_type: string;\n type: string;\n title: string;\n description: string;\n amount: number;\n created_at: number;\n expired_at: number;\n}\n\nexport interface WalletListParams {\n page?: number;\n perPage?: number;\n signal?: AbortSignal;\n}\n\nexport interface WalletListResponse {\n data: TransactionItem[];\n next_page_url: string | null;\n}\n\nexport interface WalletListResult {\n items: TransactionItem[];\n next: string | null;\n balance: number;\n}\n\nexport const wallet = {\n list: async (params: WalletListParams = {}): Promise<WalletListResult> => {\n const { page = 1, perPage = 10, signal } = params;\n\n const searchParams = new URLSearchParams();\n searchParams.set('page', String(page));\n searchParams.set('per_page', String(perPage));\n\n const options: Record<string, unknown> = {};\n if (signal) options.signal = signal;\n\n const response = await api\n .get(`balance/wallet?${searchParams.toString()}`, options as any)\n .json<{ data: { transactions: WalletListResponse; balance: number } }>();\n\n const transactions = response.data.transactions;\n\n return {\n items: transactions.data ?? [],\n next: transactions.next_page_url,\n balance: response.data.balance,\n };\n },\n};\n"]}
|
|
@@ -4,7 +4,7 @@ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
|
4
4
|
export { BlogSkeleton, BreadcrumbSkeleton, CustomerLayoutSkeleton, CustomerPageSkeleton, PageSkeleton, ProductCardSkeleton, ProductDetailSkeleton, ProductGridSkeleton, SkeletonPulse } from '@salla.sa/twilight-components-react';
|
|
5
5
|
|
|
6
6
|
var LazyBreadcrumb = lazy(
|
|
7
|
-
() => import('./Breadcrumb-
|
|
7
|
+
() => import('./Breadcrumb-SXC43X3D.js').then((m) => ({ default: m.Breadcrumb }))
|
|
8
8
|
);
|
|
9
9
|
var LazyNoContent = lazy(
|
|
10
10
|
() => import('./NoContent-63TMCPGY.js').then((m) => ({ default: m.NoContent }))
|
|
@@ -153,5 +153,5 @@ function DeferredData({ promise, fallback, children }) {
|
|
|
153
153
|
}
|
|
154
154
|
|
|
155
155
|
export { DeferredData, Image, LazyBreadcrumb, LazyCurrencySymbol, LazyErrorPage, LazyNoContent, LazyRenderWhenVisible, resolveDeferred };
|
|
156
|
-
//# sourceMappingURL=chunk-
|
|
157
|
-
//# sourceMappingURL=chunk-
|
|
156
|
+
//# sourceMappingURL=chunk-6I4LWF5Y.js.map
|
|
157
|
+
//# sourceMappingURL=chunk-6I4LWF5Y.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/common/lazy.ts","../src/components/common/Image.tsx","../src/components/common/DeferredData.tsx"],"names":["Image","memo","DeferredRenderer","jsx"],"mappings":"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","file":"chunk-IXUY5RMV.js","sourcesContent":["import { lazy } from 'react';\n\n/**\n * Lazy-loaded common components\n * Use these for code-splitting non-critical components\n *\n * NOTE: Skeleton components are sourced from @salla.sa/twilight-components-react\n * because they must render instantly during route transitions.\n */\nexport const LazyBreadcrumb = lazy(() =>\n import('./Breadcrumb').then((m) => ({ default: m.Breadcrumb }))\n);\n\nexport const LazyNoContent = lazy(() =>\n import('./NoContent').then((m) => ({ default: m.NoContent }))\n);\n\nexport const LazyRenderWhenVisible = lazy(() =>\n import('./RenderWhenVisible').then((m) => ({ default: m.RenderWhenVisible }))\n);\n\nexport const LazyCurrencySymbol = lazy(() =>\n import('./CurrencySymbol').then((m) => ({ default: m.CurrencySymbol }))\n);\n\nexport const LazyErrorPage = lazy(() =>\n import('./ErrorPage').then((m) => ({ default: m.ErrorPage }))\n);\n","import { memo } from 'react';\nimport { getCdnImageSrcSet, getCdnImageUrl } from '../../utils/cdn-image';\n\nexport interface ImageProps extends React.ImgHTMLAttributes<HTMLImageElement> {\n /** Image source URL */\n src?: string;\n /** Alt text for accessibility */\n alt: string;\n /** Whether this image is above the fold / LCP candidate */\n priority?: boolean;\n /** Aspect ratio for CLS prevention (e.g. \"16/9\", \"1/1\", \"4/3\") */\n aspectRatio?: string;\n /** Object fit mode */\n objectFit?: 'cover' | 'contain' | 'fill' | 'none' | 'scale-down';\n /** Mobile image source for <picture> element */\n mobileSrc?: string;\n /** Mobile breakpoint for <source> media query (default: 768px) */\n mobileBreakpoint?: number;\n /** Skip the wrapper div */\n noWrapper?: boolean;\n /**\n * CDN widths for a density `srcset`. Pass `sizes` so the browser picks a\n * candidate close to the displayed CSS size.\n */\n srcSetWidths?: readonly number[];\n}\n\n/**\n * Optimized Image component with native browser lazy loading.\n *\n * - Uses `loading=\"lazy\"` + `decoding=\"async\"` by default for below-the-fold images.\n * - Uses `loading=\"eager\"` + `fetchPriority=\"high\"` for priority (above-the-fold / LCP) images.\n * - Supports responsive `<picture>` with mobile source.\n * - Provides `aspectRatio` for CLS prevention.\n * - When `srcSetWidths` + `sizes` are set, emits a sized CDN `srcset`.\n */\nexport const Image = memo(function Image({\n src,\n alt,\n priority = false,\n aspectRatio,\n objectFit = 'cover',\n mobileSrc,\n mobileBreakpoint = 768,\n noWrapper = false,\n className = '',\n style,\n width,\n height,\n sizes,\n srcSet: srcSetProp,\n srcSetWidths,\n ...rest\n}: ImageProps) {\n if (!src) return null;\n\n const generatedSrcSet =\n srcSetProp || (srcSetWidths?.length ? getCdnImageSrcSet(src, srcSetWidths) : undefined);\n const generatedMobileSrcSet =\n srcSetWidths?.length && mobileSrc ? getCdnImageSrcSet(mobileSrc, srcSetWidths) : undefined;\n const cdnWidth = srcSetWidths?.length\n ? width != null && srcSetWidths.includes(Number(width))\n ? Number(width)\n : srcSetWidths[0]\n : width;\n // Width-only CDN URLs so `src` matches a srcset candidate for preload.\n const cdnOptions = generatedSrcSet ? { width: cdnWidth } : { width: cdnWidth, height };\n\n const optimizedSrc = getCdnImageUrl(src, cdnOptions);\n const optimizedMobileSrc = getCdnImageUrl(mobileSrc, cdnOptions);\n\n const objectFitClass = `object-${objectFit}`;\n const imgClasses = [className, objectFitClass].filter(Boolean).join(' ');\n\n const loadingProps: React.ImgHTMLAttributes<HTMLImageElement> = priority\n ? { loading: 'eager' as const, fetchPriority: 'high' as const, decoding: 'sync' as const }\n : { loading: 'lazy' as const, decoding: 'async' as const };\n\n const hasWrapper = !noWrapper && !!aspectRatio;\n\n const img = (\n <img\n src={optimizedSrc}\n alt={alt}\n className={imgClasses}\n width={width}\n height={height}\n sizes={sizes}\n srcSet={generatedSrcSet}\n // With a wrapper, `style` goes to the wrapper; otherwise it must land on the <img>.\n style={hasWrapper ? undefined : style}\n {...loadingProps}\n {...rest}\n />\n );\n\n const imgElement = optimizedMobileSrc ? (\n <picture>\n <source\n media={`(max-width: ${mobileBreakpoint}px)`}\n srcSet={generatedMobileSrcSet || optimizedMobileSrc}\n sizes={generatedMobileSrcSet ? sizes : undefined}\n />\n {img}\n </picture>\n ) : (\n img\n );\n\n if (!hasWrapper) {\n return imgElement;\n }\n\n return (\n <div className=\"relative overflow-hidden\" style={{ aspectRatio, ...style }}>\n {imgElement}\n </div>\n );\n});\n","import { Suspense, memo, use, type ReactNode } from 'react';\n\nexport interface DeferredDataProps<T> {\n promise: Promise<T> | T;\n fallback: ReactNode;\n children: (data: T) => ReactNode;\n}\n\nconst DEFERRED_KEY = Symbol.for('twilight.deferred');\n\ninterface DeferredState<T> {\n status: 'pending' | 'success' | 'error';\n value?: T;\n error?: unknown;\n}\n\nexport interface DeferredPromise<T> extends Promise<T> {\n [DEFERRED_KEY]?: DeferredState<T>;\n}\n\nconst seenPromises = typeof WeakSet !== 'undefined' ? new WeakSet() : null;\n\nfunction defer<T>(promise: Promise<T>): DeferredPromise<T> {\n const existing = (promise as DeferredPromise<T>)[DEFERRED_KEY];\n if (existing) return promise as DeferredPromise<T>;\n\n const state: DeferredState<T> = { status: 'pending' };\n\n const deferred = promise as DeferredPromise<T>;\n deferred[DEFERRED_KEY] = state;\n\n promise.then(\n (value) => {\n state.status = 'success';\n state.value = value;\n },\n (error) => {\n state.status = 'error';\n state.error = error;\n }\n );\n\n return deferred;\n}\n\nconst DeferredRenderer = memo(function DeferredRenderer<T>({\n promise,\n children,\n}: {\n promise: DeferredPromise<T>;\n children: (data: T) => ReactNode;\n}) {\n const state = promise[DEFERRED_KEY];\n\n if (state?.status === 'success') {\n return children(state.value!);\n }\n\n if (state?.status === 'error') {\n throw state.error;\n }\n\n const data = use(promise);\n return children(data);\n}) as <T>(props: { promise: DeferredPromise<T>; children: (data: T) => ReactNode }) => ReactNode;\n\nfunction DeferredFallback<T>({\n promise,\n fallback,\n children,\n}: {\n promise: DeferredPromise<T>;\n fallback: ReactNode;\n children: (data: T) => ReactNode;\n}) {\n const state = promise[DEFERRED_KEY];\n if (state?.status === 'success') {\n return children(state.value!);\n }\n return <>{fallback}</>;\n}\n\nexport function resolveDeferred<T>(\n promiseOrValue: Promise<T> | T | undefined\n): T | Promise<T> | undefined {\n if (promiseOrValue == null || !(promiseOrValue instanceof Promise)) return promiseOrValue;\n const deferred = defer(promiseOrValue);\n const state = deferred[DEFERRED_KEY];\n if (state?.status === 'success') return state.value as T;\n return promiseOrValue;\n}\n\nexport function DeferredData<T>({ promise, fallback, children }: DeferredDataProps<T>) {\n if (!(promise instanceof Promise)) {\n return children(promise);\n }\n\n if (seenPromises && promise instanceof Promise) seenPromises.add(promise);\n\n const deferred = defer(promise);\n const state = deferred[DEFERRED_KEY];\n\n if (state?.status === 'success') {\n return children(state.value!);\n }\n\n if (state?.status === 'error') {\n throw state.error;\n }\n\n return (\n <Suspense\n fallback={\n <DeferredFallback promise={deferred} fallback={fallback}>\n {children}\n </DeferredFallback>\n }\n >\n <DeferredRenderer promise={deferred}>{children}</DeferredRenderer>\n </Suspense>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/common/lazy.ts","../src/components/common/Image.tsx","../src/components/common/DeferredData.tsx"],"names":["Image","memo","DeferredRenderer","jsx"],"mappings":"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","file":"chunk-6I4LWF5Y.js","sourcesContent":["import { lazy } from 'react';\n\n/**\n * Lazy-loaded common components\n * Use these for code-splitting non-critical components\n *\n * NOTE: Skeleton components are sourced from @salla.sa/twilight-components-react\n * because they must render instantly during route transitions.\n */\nexport const LazyBreadcrumb = lazy(() =>\n import('./Breadcrumb').then((m) => ({ default: m.Breadcrumb }))\n);\n\nexport const LazyNoContent = lazy(() =>\n import('./NoContent').then((m) => ({ default: m.NoContent }))\n);\n\nexport const LazyRenderWhenVisible = lazy(() =>\n import('./RenderWhenVisible').then((m) => ({ default: m.RenderWhenVisible }))\n);\n\nexport const LazyCurrencySymbol = lazy(() =>\n import('./CurrencySymbol').then((m) => ({ default: m.CurrencySymbol }))\n);\n\nexport const LazyErrorPage = lazy(() =>\n import('./ErrorPage').then((m) => ({ default: m.ErrorPage }))\n);\n","import { memo } from 'react';\nimport { getCdnImageSrcSet, getCdnImageUrl } from '../../utils/cdn-image';\n\nexport interface ImageProps extends React.ImgHTMLAttributes<HTMLImageElement> {\n /** Image source URL */\n src?: string;\n /** Alt text for accessibility */\n alt: string;\n /** Whether this image is above the fold / LCP candidate */\n priority?: boolean;\n /** Aspect ratio for CLS prevention (e.g. \"16/9\", \"1/1\", \"4/3\") */\n aspectRatio?: string;\n /** Object fit mode */\n objectFit?: 'cover' | 'contain' | 'fill' | 'none' | 'scale-down';\n /** Mobile image source for <picture> element */\n mobileSrc?: string;\n /** Mobile breakpoint for <source> media query (default: 768px) */\n mobileBreakpoint?: number;\n /** Skip the wrapper div */\n noWrapper?: boolean;\n /**\n * CDN widths for a density `srcset`. Pass `sizes` so the browser picks a\n * candidate close to the displayed CSS size.\n */\n srcSetWidths?: readonly number[];\n}\n\n/**\n * Optimized Image component with native browser lazy loading.\n *\n * - Uses `loading=\"lazy\"` + `decoding=\"async\"` by default for below-the-fold images.\n * - Uses `loading=\"eager\"` + `fetchPriority=\"high\"` for priority (above-the-fold / LCP) images.\n * - Supports responsive `<picture>` with mobile source.\n * - Provides `aspectRatio` for CLS prevention.\n * - When `srcSetWidths` + `sizes` are set, emits a sized CDN `srcset`.\n */\nexport const Image = memo(function Image({\n src,\n alt,\n priority = false,\n aspectRatio,\n objectFit = 'cover',\n mobileSrc,\n mobileBreakpoint = 768,\n noWrapper = false,\n className = '',\n style,\n width,\n height,\n sizes,\n srcSet: srcSetProp,\n srcSetWidths,\n ...rest\n}: ImageProps) {\n if (!src) return null;\n\n const generatedSrcSet =\n srcSetProp || (srcSetWidths?.length ? getCdnImageSrcSet(src, srcSetWidths) : undefined);\n const generatedMobileSrcSet =\n srcSetWidths?.length && mobileSrc ? getCdnImageSrcSet(mobileSrc, srcSetWidths) : undefined;\n const cdnWidth = srcSetWidths?.length\n ? width != null && srcSetWidths.includes(Number(width))\n ? Number(width)\n : srcSetWidths[0]\n : width;\n // Width-only CDN URLs so `src` matches a srcset candidate for preload.\n const cdnOptions = generatedSrcSet ? { width: cdnWidth } : { width: cdnWidth, height };\n\n const optimizedSrc = getCdnImageUrl(src, cdnOptions);\n const optimizedMobileSrc = getCdnImageUrl(mobileSrc, cdnOptions);\n\n const objectFitClass = `object-${objectFit}`;\n const imgClasses = [className, objectFitClass].filter(Boolean).join(' ');\n\n const loadingProps: React.ImgHTMLAttributes<HTMLImageElement> = priority\n ? { loading: 'eager' as const, fetchPriority: 'high' as const, decoding: 'sync' as const }\n : { loading: 'lazy' as const, decoding: 'async' as const };\n\n const hasWrapper = !noWrapper && !!aspectRatio;\n\n const img = (\n <img\n src={optimizedSrc}\n alt={alt}\n className={imgClasses}\n width={width}\n height={height}\n sizes={sizes}\n srcSet={generatedSrcSet}\n // With a wrapper, `style` goes to the wrapper; otherwise it must land on the <img>.\n style={hasWrapper ? undefined : style}\n {...loadingProps}\n {...rest}\n />\n );\n\n const imgElement = optimizedMobileSrc ? (\n <picture>\n <source\n media={`(max-width: ${mobileBreakpoint}px)`}\n srcSet={generatedMobileSrcSet || optimizedMobileSrc}\n sizes={generatedMobileSrcSet ? sizes : undefined}\n />\n {img}\n </picture>\n ) : (\n img\n );\n\n if (!hasWrapper) {\n return imgElement;\n }\n\n return (\n <div className=\"relative overflow-hidden\" style={{ aspectRatio, ...style }}>\n {imgElement}\n </div>\n );\n});\n","import { Suspense, memo, use, type ReactNode } from 'react';\n\nexport interface DeferredDataProps<T> {\n promise: Promise<T> | T;\n fallback: ReactNode;\n children: (data: T) => ReactNode;\n}\n\nconst DEFERRED_KEY = Symbol.for('twilight.deferred');\n\ninterface DeferredState<T> {\n status: 'pending' | 'success' | 'error';\n value?: T;\n error?: unknown;\n}\n\nexport interface DeferredPromise<T> extends Promise<T> {\n [DEFERRED_KEY]?: DeferredState<T>;\n}\n\nconst seenPromises = typeof WeakSet !== 'undefined' ? new WeakSet() : null;\n\nfunction defer<T>(promise: Promise<T>): DeferredPromise<T> {\n const existing = (promise as DeferredPromise<T>)[DEFERRED_KEY];\n if (existing) return promise as DeferredPromise<T>;\n\n const state: DeferredState<T> = { status: 'pending' };\n\n const deferred = promise as DeferredPromise<T>;\n deferred[DEFERRED_KEY] = state;\n\n promise.then(\n (value) => {\n state.status = 'success';\n state.value = value;\n },\n (error) => {\n state.status = 'error';\n state.error = error;\n }\n );\n\n return deferred;\n}\n\nconst DeferredRenderer = memo(function DeferredRenderer<T>({\n promise,\n children,\n}: {\n promise: DeferredPromise<T>;\n children: (data: T) => ReactNode;\n}) {\n const state = promise[DEFERRED_KEY];\n\n if (state?.status === 'success') {\n return children(state.value!);\n }\n\n if (state?.status === 'error') {\n throw state.error;\n }\n\n const data = use(promise);\n return children(data);\n}) as <T>(props: { promise: DeferredPromise<T>; children: (data: T) => ReactNode }) => ReactNode;\n\nfunction DeferredFallback<T>({\n promise,\n fallback,\n children,\n}: {\n promise: DeferredPromise<T>;\n fallback: ReactNode;\n children: (data: T) => ReactNode;\n}) {\n const state = promise[DEFERRED_KEY];\n if (state?.status === 'success') {\n return children(state.value!);\n }\n return <>{fallback}</>;\n}\n\nexport function resolveDeferred<T>(\n promiseOrValue: Promise<T> | T | undefined\n): T | Promise<T> | undefined {\n if (promiseOrValue == null || !(promiseOrValue instanceof Promise)) return promiseOrValue;\n const deferred = defer(promiseOrValue);\n const state = deferred[DEFERRED_KEY];\n if (state?.status === 'success') return state.value as T;\n return promiseOrValue;\n}\n\nexport function DeferredData<T>({ promise, fallback, children }: DeferredDataProps<T>) {\n if (!(promise instanceof Promise)) {\n return children(promise);\n }\n\n if (seenPromises && promise instanceof Promise) seenPromises.add(promise);\n\n const deferred = defer(promise);\n const state = deferred[DEFERRED_KEY];\n\n if (state?.status === 'success') {\n return children(state.value!);\n }\n\n if (state?.status === 'error') {\n throw state.error;\n }\n\n return (\n <Suspense\n fallback={\n <DeferredFallback promise={deferred} fallback={fallback}>\n {children}\n </DeferredFallback>\n }\n >\n <DeferredRenderer promise={deferred}>{children}</DeferredRenderer>\n </Suspense>\n );\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { orThrow } from './chunk-
|
|
2
|
-
import { api } from './chunk-
|
|
1
|
+
import { orThrow } from './chunk-OKNJFS44.js';
|
|
2
|
+
import { api } from './chunk-IK57LAIA.js';
|
|
3
3
|
import { queryOptions } from '@tanstack/react-query';
|
|
4
4
|
|
|
5
5
|
var page = {
|
|
@@ -17,5 +17,5 @@ var page = {
|
|
|
17
17
|
};
|
|
18
18
|
|
|
19
19
|
export { page };
|
|
20
|
-
//# sourceMappingURL=chunk-
|
|
21
|
-
//# sourceMappingURL=chunk-
|
|
20
|
+
//# sourceMappingURL=chunk-6KVB2WHE.js.map
|
|
21
|
+
//# sourceMappingURL=chunk-6KVB2WHE.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/api/page.ts"],"names":[],"mappings":";;;;AAKO,IAAM,IAAA,GAAO;AAAA,EAClB,IAAA,EAAM,OAAO,IAAA,KAA2C;AACtD,IAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,GAAA,CAAI,IAAI,CAAA,MAAA,EAAS,IAAI,CAAA,CAAE,CAAA,CAAE,IAAA,EAAgC;AAChF,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AAAA,EAEA,aAAa,CAAC,IAAA,KAA2C,QAAQ,IAAA,CAAK,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,EAEhF,OAAA,EAAS;AAAA,IACP,MAAA,EAAQ,CAAC,IAAA,KACP,YAAA,CAAa;AAAA,MACX,QAAA,EAAU,CAAC,OAAA,EAAS,QAAA,EAAU,IAAI,CAAA;AAAA,MAClC,OAAA,EAAS,MAAM,IAAA,CAAK,IAAA,CAAK,IAAI;AAAA,KAC9B;AAAA;AAEP","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/api/page.ts"],"names":[],"mappings":";;;;AAKO,IAAM,IAAA,GAAO;AAAA,EAClB,IAAA,EAAM,OAAO,IAAA,KAA2C;AACtD,IAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,GAAA,CAAI,IAAI,CAAA,MAAA,EAAS,IAAI,CAAA,CAAE,CAAA,CAAE,IAAA,EAAgC;AAChF,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AAAA,EAEA,aAAa,CAAC,IAAA,KAA2C,QAAQ,IAAA,CAAK,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,EAEhF,OAAA,EAAS;AAAA,IACP,MAAA,EAAQ,CAAC,IAAA,KACP,YAAA,CAAa;AAAA,MACX,QAAA,EAAU,CAAC,OAAA,EAAS,QAAA,EAAU,IAAI,CAAA;AAAA,MAClC,OAAA,EAAS,MAAM,IAAA,CAAK,IAAA,CAAK,IAAI;AAAA,KAC9B;AAAA;AAEP","file":"chunk-6KVB2WHE.js","sourcesContent":["import { queryOptions } from '@tanstack/react-query';\nimport { api } from './client';\nimport type { ApiPageResponse } from '../routes/page/types';\nimport { orThrow } from '../providers/NavigationProvider';\n\nexport const page = {\n find: async (slug: string): Promise<ApiPageResponse> => {\n const { data } = await api.get(`pages/${slug}`).json<{ data: ApiPageResponse }>();\n return data;\n },\n\n findOrThrow: (slug: string): Promise<ApiPageResponse> => orThrow(page.find(slug)),\n\n queries: {\n detail: (slug: string) =>\n queryOptions({\n queryKey: ['pages', 'detail', slug],\n queryFn: () => page.find(slug),\n }),\n },\n};\n"]}
|
|
@@ -1,7 +1,15 @@
|
|
|
1
|
+
import { useTranslation } from './chunk-TYNZ5B2B.js';
|
|
1
2
|
import { useAsyncFn } from './chunk-6BZ5TKEV.js';
|
|
2
3
|
import { useState } from 'react';
|
|
3
4
|
|
|
5
|
+
function couponError(error, fallback) {
|
|
6
|
+
if (!error) return null;
|
|
7
|
+
const { response } = error;
|
|
8
|
+
if (!response) return error.message;
|
|
9
|
+
return response.data?.error?.message || fallback;
|
|
10
|
+
}
|
|
4
11
|
function useCoupon() {
|
|
12
|
+
const { t } = useTranslation();
|
|
5
13
|
const [value, setValue] = useState(null);
|
|
6
14
|
const [applyState, applyFn] = useAsyncFn(async (code) => {
|
|
7
15
|
if (!code.trim()) throw new Error("Please enter a coupon code");
|
|
@@ -15,12 +23,15 @@ function useCoupon() {
|
|
|
15
23
|
return {
|
|
16
24
|
value,
|
|
17
25
|
loading: applyState.loading || removeState.loading,
|
|
18
|
-
error: (
|
|
26
|
+
error: couponError(
|
|
27
|
+
applyState.error ?? removeState.error,
|
|
28
|
+
t("pages.cart.coupon_application_error", "Could not apply the coupon")
|
|
29
|
+
),
|
|
19
30
|
apply: async (code) => !(await applyFn(code) instanceof Error),
|
|
20
31
|
remove: async () => !(await removeFn() instanceof Error)
|
|
21
32
|
};
|
|
22
33
|
}
|
|
23
34
|
|
|
24
35
|
export { useCoupon };
|
|
25
|
-
//# sourceMappingURL=chunk-
|
|
26
|
-
//# sourceMappingURL=chunk-
|
|
36
|
+
//# sourceMappingURL=chunk-6WI7R2BD.js.map
|
|
37
|
+
//# sourceMappingURL=chunk-6WI7R2BD.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/hooks/useCoupon.ts"],"names":[],"mappings":";;;;AAuEA,SAAS,WAAA,CAAY,OAA0B,QAAA,EAAiC;AAC9E,EAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AACnB,EAAA,MAAM,EAAE,UAAS,GAAI,KAAA;AAGrB,EAAA,IAAI,CAAC,QAAA,EAAU,OAAO,KAAA,CAAM,OAAA;AAC5B,EAAA,OAAO,QAAA,CAAS,IAAA,EAAM,KAAA,EAAO,OAAA,IAAW,QAAA;AAC1C;AAEO,SAAS,SAAA,GAA6B;AAC3C,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,cAAA,EAAe;AAC7B,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAwB,IAAI,CAAA;AAEtD,EAAA,MAAM,CAAC,UAAA,EAAY,OAAO,CAAA,GAAI,UAAA,CAAW,OAAO,IAAA,KAAiB;AAC/D,IAAA,IAAI,CAAC,IAAA,CAAK,IAAA,IAAQ,MAAM,IAAI,MAAM,4BAA4B,CAAA;AAC9D,IAAA,MAAM,OAAO,KAAA,EAAO,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,MAAM,CAAA;AAC9C,IAAA,QAAA,CAAS,IAAA,CAAK,MAAM,CAAA;AAAA,EACtB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,CAAC,WAAA,EAAa,QAAQ,CAAA,GAAI,WAAW,YAAY;AACrD,IAAA,MAAM,MAAA,CAAO,KAAA,EAAO,IAAA,CAAK,YAAA,EAAa;AACtC,IAAA,QAAA,CAAS,IAAI,CAAA;AAAA,EACf,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO;AAAA,IACL,KAAA;AAAA,IACA,OAAA,EAAS,UAAA,CAAW,OAAA,IAAW,WAAA,CAAY,OAAA;AAAA,IAC3C,KAAA,EAAO,WAAA;AAAA,MACL,UAAA,CAAW,SAAS,WAAA,CAAY,KAAA;AAAA,MAChC,CAAA,CAAE,uCAAuC,4BAA4B;AAAA,KACvE;AAAA,IACA,OAAO,OAAO,IAAA,KAAS,EAAI,MAAM,OAAA,CAAQ,IAAI,CAAA,YAA0B,KAAA,CAAA;AAAA,IACvE,MAAA,EAAQ,YAAY,EAAI,MAAM,UAAS,YAA0B,KAAA;AAAA,GACnE;AACF","file":"chunk-6WI7R2BD.js","sourcesContent":["/**\n * useCoupon - Hook for managing coupon functionality in cart\n *\n * @example\n * ```tsx\n * function CouponInput() {\n * const { value, apply, remove, error, loading } = useCoupon();\n *\n * return (\n * <div>\n * <input placeholder=\"Enter coupon\" />\n * <button onClick={() => apply(code)}>Apply</button>\n * {error && <span>{error}</span>}\n * </div>\n * );\n * }\n * ```\n */\n\nimport { useState } from 'react';\nimport { useAsyncFn } from './useAsyncFn';\nimport { useTranslation } from '../providers/I18nProvider';\nimport type { UseApply } from './types';\n\n/**\n * UseCouponResult - Return type for useCoupon hook\n */\nexport type UseCouponResult = UseApply<string>;\n\n/**\n * useCoupon - Hook for managing cart coupons\n *\n * Handles applying and removing coupons from the cart using the\n * Salla SDK. Returns state for loading, errors, and the current\n * coupon value.\n *\n * @returns Coupon management object with apply and remove functions\n *\n * @example\n * ```tsx\n * function CouponInput() {\n * const { value, apply, remove, error, loading } = useCoupon();\n *\n * const [code, setCode] = useState('');\n *\n * return (\n * <div>\n * {value ? (\n * <>\n * <span>Coupon applied: {value}</span>\n * <button onClick={remove}>Remove</button>\n * </>\n * ) : (\n * <div>\n * <input\n * placeholder=\"Enter coupon code\"\n * value={code}\n * onChange={(e) => setCode(e.target.value)}\n * />\n * <button onClick={() => apply(code)} disabled={loading}>\n * Apply\n * </button>\n * </div>\n * )}\n * {error && <span className=\"error\">{error}</span>}\n * </div>\n * );\n * }\n * ```\n */\n/** The API's own reason, as `salla-cart-coupons` shows it, not the HTTP client's message. */\nfunction couponError(error: Error | undefined, fallback: string): string | null {\n if (!error) return null;\n const { response } = error as Error & {\n response?: { data?: { error?: { message?: string } } };\n };\n if (!response) return error.message;\n return response.data?.error?.message || fallback;\n}\n\nexport function useCoupon(): UseCouponResult {\n const { t } = useTranslation();\n const [value, setValue] = useState<string | null>(null);\n\n const [applyState, applyFn] = useAsyncFn(async (code: string) => {\n if (!code.trim()) throw new Error('Please enter a coupon code');\n await window.salla?.cart.addCoupon(code.trim());\n setValue(code.trim());\n }, []);\n\n const [removeState, removeFn] = useAsyncFn(async () => {\n await window.salla?.cart.deleteCoupon();\n setValue(null);\n }, []);\n\n return {\n value,\n loading: applyState.loading || removeState.loading,\n error: couponError(\n applyState.error ?? removeState.error,\n t('pages.cart.coupon_application_error', 'Could not apply the coupon')\n ),\n apply: async (code) => !(((await applyFn(code)) as unknown) instanceof Error),\n remove: async () => !(((await removeFn()) as unknown) instanceof Error),\n };\n}\n"]}
|
|
@@ -1,24 +1,25 @@
|
|
|
1
|
-
import { Header } from './chunk-
|
|
1
|
+
import { Header } from './chunk-WHGOO4A2.js';
|
|
2
2
|
import { Copyright } from './chunk-JKIRRMBU.js';
|
|
3
3
|
import { useDevSettingsOverrides } from './chunk-2JV6WZ6O.js';
|
|
4
|
-
import { apps } from './chunk-
|
|
4
|
+
import { apps } from './chunk-3TJKB3WR.js';
|
|
5
5
|
import { color } from './chunk-VVZNW5CB.js';
|
|
6
|
-
import { applyThemeHookSlots, installAppScope } from './chunk-
|
|
7
|
-
import { useLocation, useIsHome, NavigationInterceptor } from './chunk-
|
|
8
|
-
import { useUser } from './chunk-
|
|
6
|
+
import { applyThemeHookSlots, installAppScope } from './chunk-RYSJOCHI.js';
|
|
7
|
+
import { useLocation, useIsHome, NavigationInterceptor } from './chunk-OKNJFS44.js';
|
|
8
|
+
import { useUser } from './chunk-2OYXPNCE.js';
|
|
9
|
+
import { getActiveCurrency } from './chunk-IK57LAIA.js';
|
|
9
10
|
import { useAsset } from './chunk-Z653O7MX.js';
|
|
10
11
|
import { DocumentClassProvider, useDocumentClass } from './chunk-JWXJPJBO.js';
|
|
11
12
|
import { useTranslation, I18nProvider } from './chunk-TYNZ5B2B.js';
|
|
12
13
|
import { WidgetHead } from './chunk-V2ZDTY6H.js';
|
|
13
14
|
import { HookSlot } from './chunk-5XDPAKF5.js';
|
|
14
15
|
import { hookRegistry } from './chunk-GCPEMNSU.js';
|
|
15
|
-
import { Image } from './chunk-
|
|
16
|
+
import { Image } from './chunk-6I4LWF5Y.js';
|
|
16
17
|
import { Link } from './chunk-AXW67SY7.js';
|
|
17
18
|
import { LazyImageModal } from './chunk-7V5HOZW4.js';
|
|
18
|
-
import { Toaster } from './chunk-
|
|
19
|
-
import { isNativeApp } from './chunk-
|
|
20
|
-
import { whenSallaLoaded, whenSallaReady, onSallaEvent, syncSdkLocale } from './chunk-
|
|
21
|
-
import { AUTH_TOKEN_COOKIE_NAME, rememberDevStoreId, clearAuthTokenCookie, syncScopeCookie } from './chunk-
|
|
19
|
+
import { Toaster } from './chunk-M6BXZTRK.js';
|
|
20
|
+
import { isNativeApp } from './chunk-JEG5WPNT.js';
|
|
21
|
+
import { whenSallaLoaded, whenSallaReady, onSallaEvent, syncSdkLocale } from './chunk-P4GOLSA2.js';
|
|
22
|
+
import { AUTH_TOKEN_COOKIE_NAME, rememberDevStoreId, clearAuthTokenCookie, syncScopeCookie } from './chunk-Y5OGXJLH.js';
|
|
22
23
|
import { getTwilightContext, updateTwilightContext } from './chunk-N2S25NXP.js';
|
|
23
24
|
import { FALLBACK_LOCALE, getLanguageInfo } from './chunk-T72DAX7R.js';
|
|
24
25
|
import { useTwilight, TwilightContext } from './chunk-DF6FBKDN.js';
|
|
@@ -110,7 +111,7 @@ function ThemeDocumentSync({
|
|
|
110
111
|
}
|
|
111
112
|
|
|
112
113
|
// src/utils/engine-version.ts
|
|
113
|
-
var ENGINE_VERSION = "1.0.
|
|
114
|
+
var ENGINE_VERSION = "1.0.74" ;
|
|
114
115
|
|
|
115
116
|
// src/providers/twilight-init.ts
|
|
116
117
|
function getSalla() {
|
|
@@ -118,10 +119,19 @@ function getSalla() {
|
|
|
118
119
|
return window.salla;
|
|
119
120
|
}
|
|
120
121
|
var SDK_GUEST_CURRENCY = "SAR";
|
|
122
|
+
function withCookieLocale(sdk, stored) {
|
|
123
|
+
return {
|
|
124
|
+
...stored,
|
|
125
|
+
language_code: sdk.cookie?.get?.("s-lang") ?? stored.language_code,
|
|
126
|
+
currency_code: sdk.cookie?.get?.("s-curr") ?? stored.currency_code ?? SDK_GUEST_CURRENCY
|
|
127
|
+
};
|
|
128
|
+
}
|
|
121
129
|
function withSettingsUser(sdk, settings) {
|
|
122
130
|
if (!settings) return settings;
|
|
123
131
|
const { user: guest, ...rest } = settings;
|
|
124
|
-
|
|
132
|
+
const stored = sdk.storage?.get?.("user");
|
|
133
|
+
if (stored) return { ...rest, user: withCookieLocale(sdk, stored) };
|
|
134
|
+
if (!guest) return rest;
|
|
125
135
|
const {
|
|
126
136
|
currency_code: _currency,
|
|
127
137
|
country_code: _country,
|
|
@@ -180,7 +190,11 @@ function useTwilightInit({
|
|
|
180
190
|
}
|
|
181
191
|
return baseTheme;
|
|
182
192
|
}, [baseTheme, devOverrides]);
|
|
183
|
-
const [currency] = useState(
|
|
193
|
+
const [currency] = useState(() => {
|
|
194
|
+
const code = getActiveCurrency();
|
|
195
|
+
const active = code ? settingsData?.currencies?.[code] : void 0;
|
|
196
|
+
return active ? { code: active.code, name: active.name, symbol: active.symbol } : null;
|
|
197
|
+
});
|
|
184
198
|
const [isMobileWebview] = useState(false);
|
|
185
199
|
useEffect(() => {
|
|
186
200
|
if (!isBrowser || !themeData) return;
|
|
@@ -262,13 +276,13 @@ function applySafeArea(data) {
|
|
|
262
276
|
}
|
|
263
277
|
var navigationSetups = {
|
|
264
278
|
tanstack: lazy(
|
|
265
|
-
() => import('./navigation-
|
|
279
|
+
() => import('./navigation-CDITJYUW.js').then((m) => ({ default: m.NavigationSetup }))
|
|
266
280
|
),
|
|
267
|
-
nextjs: lazy(() => import('./navigation-
|
|
281
|
+
nextjs: lazy(() => import('./navigation-WCGV6RUK.js').then((m) => ({ default: m.NavigationSetup })))
|
|
268
282
|
};
|
|
269
283
|
var routeDocumentSyncs = {
|
|
270
284
|
tanstack: lazy(
|
|
271
|
-
() => import('./document-class-
|
|
285
|
+
() => import('./document-class-5FTU6EZE.js').then((m) => ({
|
|
272
286
|
default: m.TanStackDocumentSync
|
|
273
287
|
}))
|
|
274
288
|
)
|
|
@@ -381,11 +395,11 @@ var isValid = (value) => {
|
|
|
381
395
|
return false;
|
|
382
396
|
};
|
|
383
397
|
function useMoney() {
|
|
384
|
-
const { store, settings } = useTwilight();
|
|
398
|
+
const { store, settings, currency: active } = useTwilight();
|
|
385
399
|
const useArabicNumerals = store?.settings?.arabic_numbers_enabled ?? false;
|
|
386
400
|
const useSarSymbol = store?.settings?.use_sar_symbol ?? false;
|
|
387
401
|
const format = (amount, options) => {
|
|
388
|
-
const currency = options?.currency ?? "SAR";
|
|
402
|
+
const currency = options?.currency ?? active?.code ?? "SAR";
|
|
389
403
|
const type = options?.type ?? "product";
|
|
390
404
|
if (amount == null || amount === "") {
|
|
391
405
|
const showDash = type === "product" ? store?.settings?.product?.show_price_as_dash : false;
|
|
@@ -790,7 +804,7 @@ var LazySiftSnippet = lazy(
|
|
|
790
804
|
() => import('./SiftSnippet-5FCU6TR6.js').then((m) => ({ default: m.SiftSnippet }))
|
|
791
805
|
);
|
|
792
806
|
var LazyStoreClosedNotification = lazy(
|
|
793
|
-
() => import('./StoreClosedNotification-
|
|
807
|
+
() => import('./StoreClosedNotification-65QIOIAM.js').then((m) => ({
|
|
794
808
|
default: m.StoreClosedNotification
|
|
795
809
|
}))
|
|
796
810
|
);
|
|
@@ -1056,6 +1070,21 @@ var waitForSdk = () => {
|
|
|
1056
1070
|
const ready = window.salla?.onReady();
|
|
1057
1071
|
return ready ? Promise.race([ready, timeout(READY_TIMEOUT_MS)]) : Promise.resolve();
|
|
1058
1072
|
};
|
|
1073
|
+
function withDeferredOnReady(inject) {
|
|
1074
|
+
const sdk = window.salla;
|
|
1075
|
+
const onReady = sdk?.onReady;
|
|
1076
|
+
if (!sdk || typeof onReady !== "function") return inject();
|
|
1077
|
+
const queued = [];
|
|
1078
|
+
sdk.onReady = (callback) => new Promise((resolve, reject) => {
|
|
1079
|
+
queued.push(() => onReady.call(sdk, callback).then(resolve, reject));
|
|
1080
|
+
});
|
|
1081
|
+
try {
|
|
1082
|
+
inject();
|
|
1083
|
+
} finally {
|
|
1084
|
+
sdk.onReady = onReady;
|
|
1085
|
+
}
|
|
1086
|
+
queued.forEach((run) => run());
|
|
1087
|
+
}
|
|
1059
1088
|
function mountSnippets(owned, clientSnippets, buckets) {
|
|
1060
1089
|
applyThemeHookSlots();
|
|
1061
1090
|
installAppScope({ apps: buckets });
|
|
@@ -1063,14 +1092,16 @@ function mountSnippets(owned, clientSnippets, buckets) {
|
|
|
1063
1092
|
for (const s of owned) {
|
|
1064
1093
|
if (s.url && !(s.appScopeId in buckets)) unresolved.add(s.appScopeId);
|
|
1065
1094
|
}
|
|
1066
|
-
|
|
1067
|
-
const
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1095
|
+
withDeferredOnReady(() => {
|
|
1096
|
+
for (const snippet of clientSnippets) {
|
|
1097
|
+
const target = snippet.place?.includes("head") ? document.head : document.body;
|
|
1098
|
+
try {
|
|
1099
|
+
injectHtml(resolveCustomerParams(snippet.content, snippet.customer_parameters), target);
|
|
1100
|
+
} catch (error) {
|
|
1101
|
+
console.error(`[salla] failed to inject snippet for app ${snippet.appScopeId}`, error);
|
|
1102
|
+
}
|
|
1072
1103
|
}
|
|
1073
|
-
}
|
|
1104
|
+
});
|
|
1074
1105
|
if (unresolved.size) {
|
|
1075
1106
|
console.warn(
|
|
1076
1107
|
`[salla] app settings missing for ${unresolved.size} app(s); their snippets ran without app.* config`,
|
|
@@ -1377,5 +1408,5 @@ function useStore() {
|
|
|
1377
1408
|
}
|
|
1378
1409
|
|
|
1379
1410
|
export { Footer, MasterLayout, TwilightProvider, fastCheckoutScript, registerDefaultHooks, registerDocumentSync, routeDocumentSyncs, useBreadcrumbs, useDate, useGtm, useMoney, useNumber, useOpeningHours, usePageConfig, useStore };
|
|
1380
|
-
//# sourceMappingURL=chunk-
|
|
1381
|
-
//# sourceMappingURL=chunk-
|
|
1411
|
+
//# sourceMappingURL=chunk-BLWLKRKH.js.map
|
|
1412
|
+
//# sourceMappingURL=chunk-BLWLKRKH.js.map
|