@salla.sa/twilight-theme-engine 1.0.0-beta.9 → 1.0.1
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-VS67AFNL.js → AddToCartForm-E6LDRNGM.js} +24 -25
- package/dist/AddToCartForm-E6LDRNGM.js.map +1 -0
- package/dist/{BlogAuthorPage-276K2KQS.js → BlogAuthorPage-SK7ZTUPN.js} +30 -27
- package/dist/BlogAuthorPage-SK7ZTUPN.js.map +1 -0
- package/dist/{BlogCategoryPage-GF5PLRG7.js → BlogCategoryPage-XEUUE3H2.js} +30 -27
- package/dist/BlogCategoryPage-XEUUE3H2.js.map +1 -0
- package/dist/{BlogPage-BU672BXD.js → BlogPage-67ZEZTMY.js} +33 -24
- package/dist/BlogPage-67ZEZTMY.js.map +1 -0
- package/dist/{BlogSinglePage-ELV4S5EV.js → BlogSinglePage-H5NWL37R.js} +25 -23
- package/dist/BlogSinglePage-H5NWL37R.js.map +1 -0
- package/dist/{BlogTagPage-TXQP6ZOI.js → BlogTagPage-I6YXVDTH.js} +30 -27
- package/dist/BlogTagPage-I6YXVDTH.js.map +1 -0
- package/dist/{BrandsPage-C6ZHC4KC.js → BrandsPage-RVK36ZAV.js} +24 -23
- package/dist/BrandsPage-RVK36ZAV.js.map +1 -0
- package/dist/{Breadcrumb-TG4UTNRM.js → Breadcrumb-KINELHN4.js} +24 -23
- package/dist/Breadcrumb-KINELHN4.js.map +1 -0
- package/dist/{CartItem-55JV6HDS.js → CartItem-YPIGZYJX.js} +27 -26
- package/dist/CartItem-YPIGZYJX.js.map +1 -0
- package/dist/{CartSummary-CUWMHHMD.js → CartSummary-FHG4IR4S.js} +24 -23
- package/dist/CartSummary-FHG4IR4S.js.map +1 -0
- package/dist/Copyright-TWAHRC7V.js +9 -0
- package/dist/{Copyright-PG76AVV6.js.map → Copyright-TWAHRC7V.js.map} +1 -1
- package/dist/{CustomerLayout-SLNVCNZ6.js → CustomerLayout-NI3HBOZB.js} +24 -23
- package/dist/CustomerLayout-NI3HBOZB.js.map +1 -0
- package/dist/ErrorPage-XGBROULF.js +6 -0
- package/dist/{ErrorPage-TK4U3ENF.js.map → ErrorPage-XGBROULF.js.map} +1 -1
- package/dist/Footer-6XXLPWRH.js +40 -0
- package/dist/{Footer-MZDSEK57.js.map → Footer-6XXLPWRH.js.map} +1 -1
- package/dist/Header-56YZL6PB.js +15 -0
- package/dist/{Header-CXFKDTOA.js.map → Header-56YZL6PB.js.map} +1 -1
- package/dist/ImageModal-LHFSYPSU.js +32 -0
- package/dist/ImageModal-LHFSYPSU.js.map +1 -0
- package/dist/{LoyaltyPage-AIA3CUYI.js → LoyaltyPage-3QLMFVWD.js} +29 -28
- package/dist/LoyaltyPage-3QLMFVWD.js.map +1 -0
- package/dist/{MainMenu-T3M5RB7L.js → MainMenu-TDLQET2Y.js} +16 -37
- package/dist/MainMenu-TDLQET2Y.js.map +1 -0
- package/dist/MasterLayout-4IYMFDYJ.js +40 -0
- package/dist/{MasterLayout-QUBHRA32.js.map → MasterLayout-4IYMFDYJ.js.map} +1 -1
- package/dist/{MobileMenu-6D52JOQA.js → MobileMenu-GVXPV5HQ.js} +47 -60
- package/dist/MobileMenu-GVXPV5HQ.js.map +1 -0
- package/dist/{NotificationsPage-6H45SAS7.js → NotificationsPage-AOZRDULT.js} +24 -23
- package/dist/NotificationsPage-AOZRDULT.js.map +1 -0
- package/dist/{OrderSinglePage-GP2M3YVH.js → OrderSinglePage-M6GBDZPD.js} +73 -61
- package/dist/OrderSinglePage-M6GBDZPD.js.map +1 -0
- package/dist/{OrdersPage-OQGJLTQP.js → OrdersPage-DJMOQVJP.js} +25 -24
- package/dist/OrdersPage-DJMOQVJP.js.map +1 -0
- package/dist/{PageSingle-44NVAUIT.js → PageSingle-TQC47BEK.js} +3 -3
- package/dist/{PageSingle-44NVAUIT.js.map → PageSingle-TQC47BEK.js.map} +1 -1
- package/dist/{PreOrderNotification-ZVTGNV7K.js → PreOrderNotification-OP57EA6F.js} +3 -3
- package/dist/PreOrderNotification-OP57EA6F.js.map +1 -0
- package/dist/{PriceQuoteButton-RAAPL4N4.js → PriceQuoteButton-CGRNHY3E.js} +6 -6
- package/dist/PriceQuoteButton-CGRNHY3E.js.map +1 -0
- package/dist/{ProductDetails-2JUCRU4W.js → ProductDetails-4YZW7CKN.js} +11 -10
- package/dist/ProductDetails-4YZW7CKN.js.map +1 -0
- package/dist/{ProfilePage-XGZ2HCQH.js → ProfilePage-KFR7PX6Z.js} +24 -23
- package/dist/ProfilePage-KFR7PX6Z.js.map +1 -0
- package/dist/{SeoCartWidget-PDK6IQ2H.js → SeoCartWidget-N6KHTRZA.js} +24 -23
- package/dist/SeoCartWidget-N6KHTRZA.js.map +1 -0
- package/dist/{SettingsPage-VCQNV2PP.js → SettingsPage-7VCOR3YR.js} +24 -23
- package/dist/SettingsPage-7VCOR3YR.js.map +1 -0
- package/dist/StoreClosedNotification-7XSPEVKM.js +41 -0
- package/dist/{StoreClosedNotification-3JRNBNQK.js.map → StoreClosedNotification-7XSPEVKM.js.map} +1 -1
- package/dist/{TestimonialsPage-ENMVJ4QG.js → TestimonialsPage-YWWIGHDX.js} +4 -4
- package/dist/TestimonialsPage-YWWIGHDX.js.map +1 -0
- package/dist/{ThankYouPage-4FTP6E2Y.js → ThankYouPage-O6NMGVNQ.js} +32 -26
- package/dist/ThankYouPage-O6NMGVNQ.js.map +1 -0
- package/dist/{WalletPage-VKV44EEG.js → WalletPage-TGFDG6JQ.js} +25 -24
- package/dist/WalletPage-TGFDG6JQ.js.map +1 -0
- package/dist/WidgetHead-RWL7D3CT.js +7 -0
- package/dist/{WidgetHead-FXEPCB23.js.map → WidgetHead-RWL7D3CT.js.map} +1 -1
- package/dist/{WishlistPage-GJZCXQUY.js → WishlistPage-XDXSQXME.js} +25 -24
- package/dist/WishlistPage-XDXSQXME.js.map +1 -0
- package/dist/ambient/virtual-modules.d.ts +28 -0
- package/dist/api/apps.js +2 -2
- package/dist/api/brands.js +5 -34
- package/dist/api/cart.js +5 -34
- package/dist/api/category.js +5 -34
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/client.js +2 -2
- package/dist/api/home.js +3 -3
- package/dist/api/loyalty.js +5 -34
- package/dist/api/menu.js +3 -3
- package/dist/api/notification.js +3 -3
- package/dist/api/order.js +5 -34
- package/dist/api/page.js +5 -34
- package/dist/api/product.js +5 -34
- package/dist/api/profile.js +2 -2
- package/dist/api/store.js +3 -3
- package/dist/api/translations.d.ts +1 -1
- package/dist/api/translations.d.ts.map +1 -1
- package/dist/api/translations.js +3 -3
- package/dist/api/user.js +3 -3
- package/dist/api/wishlist.js +3 -3
- package/dist/{chunk-THXWAZX2.js → chunk-2FG3NNIK.js} +12 -17
- package/dist/chunk-2FG3NNIK.js.map +1 -0
- package/dist/chunk-2JV6WZ6O.js +136 -0
- package/dist/chunk-2JV6WZ6O.js.map +1 -0
- package/dist/{chunk-TQUHDSKQ.js → chunk-2TB2LTL2.js} +3 -11
- package/dist/chunk-2TB2LTL2.js.map +1 -0
- package/dist/{chunk-JIJOXZPF.js → chunk-2ZRLSZ4V.js} +6 -12
- package/dist/chunk-2ZRLSZ4V.js.map +1 -0
- package/dist/{chunk-HL3HSO4R.js → chunk-4UG4W72N.js} +5 -5
- package/dist/chunk-4UG4W72N.js.map +1 -0
- package/dist/{chunk-GFMVML6I.js → chunk-6D7SF3YR.js} +3 -3
- package/dist/{chunk-GFMVML6I.js.map → chunk-6D7SF3YR.js.map} +1 -1
- package/dist/{chunk-FCZRF6DB.js → chunk-6NBBXERE.js} +3 -3
- package/dist/{chunk-FCZRF6DB.js.map → chunk-6NBBXERE.js.map} +1 -1
- package/dist/{chunk-5DZ7HLSO.js → chunk-6Q5BFHFA.js} +3 -3
- package/dist/{chunk-5DZ7HLSO.js.map → chunk-6Q5BFHFA.js.map} +1 -1
- package/dist/{chunk-XHGF75TM.js → chunk-6TKIUG5C.js} +11 -4
- package/dist/chunk-6TKIUG5C.js.map +1 -0
- package/dist/{chunk-TQLEQSXE.js → chunk-6Z4MOC4S.js} +3 -19
- package/dist/chunk-6Z4MOC4S.js.map +1 -0
- package/dist/{chunk-SUFCEN4T.js → chunk-7LP7D75V.js} +3 -3
- package/dist/{chunk-SUFCEN4T.js.map → chunk-7LP7D75V.js.map} +1 -1
- package/dist/{chunk-GS3G4O2R.js → chunk-7O5DYSLX.js} +4 -4
- package/dist/chunk-7O5DYSLX.js.map +1 -0
- package/dist/{chunk-EB7X4YMZ.js → chunk-7UZEHQEQ.js} +4 -4
- package/dist/{chunk-EB7X4YMZ.js.map → chunk-7UZEHQEQ.js.map} +1 -1
- package/dist/{chunk-REQC7YOE.js → chunk-A4HWQ5PP.js} +9 -14
- package/dist/chunk-A4HWQ5PP.js.map +1 -0
- package/dist/{chunk-D4SRWUMH.js → chunk-B2NXQJEO.js} +4 -4
- package/dist/{chunk-D4SRWUMH.js.map → chunk-B2NXQJEO.js.map} +1 -1
- package/dist/{chunk-2FU6CVSB.js → chunk-C5X6CVXC.js} +3 -3
- package/dist/{chunk-2FU6CVSB.js.map → chunk-C5X6CVXC.js.map} +1 -1
- package/dist/{chunk-S6AVEFCN.js → chunk-CJEBLY6D.js} +19 -12
- package/dist/chunk-CJEBLY6D.js.map +1 -0
- package/dist/chunk-CUG6VOLM.js +10 -0
- package/dist/{chunk-3DCZJDDK.js.map → chunk-CUG6VOLM.js.map} +1 -1
- package/dist/{chunk-BWFBVXT3.js → chunk-DF6FBKDN.js} +2 -2
- package/dist/chunk-DF6FBKDN.js.map +1 -0
- package/dist/{chunk-SAZBQNQK.js → chunk-DHXE3JE6.js} +7 -7
- package/dist/chunk-DHXE3JE6.js.map +1 -0
- package/dist/{chunk-YRKMHN7W.js → chunk-EHKTHLXK.js} +3 -3
- package/dist/{chunk-YRKMHN7W.js.map → chunk-EHKTHLXK.js.map} +1 -1
- package/dist/{chunk-U33UQAWO.js → chunk-FH5YDZFQ.js} +10 -9
- package/dist/chunk-FH5YDZFQ.js.map +1 -0
- package/dist/{chunk-UE3BUFZI.js → chunk-FZKRSGLP.js} +3 -3
- package/dist/{chunk-UE3BUFZI.js.map → chunk-FZKRSGLP.js.map} +1 -1
- package/dist/{chunk-C5GWTTB6.js → chunk-GQG4KE5Z.js} +4 -4
- package/dist/chunk-GQG4KE5Z.js.map +1 -0
- package/dist/{chunk-J37AYLWL.js → chunk-GU2KUQVD.js} +4 -3
- package/dist/chunk-GU2KUQVD.js.map +1 -0
- package/dist/{chunk-SVZOWI7E.js → chunk-HTGBIA7K.js} +3 -6
- package/dist/chunk-HTGBIA7K.js.map +1 -0
- package/dist/{chunk-ZZ7Q5LEG.js → chunk-HWVEOUG4.js} +3 -3
- package/dist/{chunk-ZZ7Q5LEG.js.map → chunk-HWVEOUG4.js.map} +1 -1
- package/dist/{chunk-3UHSMGPY.js → chunk-HX3YKS5W.js} +9 -3
- package/dist/chunk-HX3YKS5W.js.map +1 -0
- package/dist/{chunk-WA5QBFRU.js → chunk-I5Z4NJBB.js} +4 -4
- package/dist/{chunk-WA5QBFRU.js.map → chunk-I5Z4NJBB.js.map} +1 -1
- package/dist/{chunk-TWAHYRKI.js → chunk-IWMGDYNN.js} +4 -4
- package/dist/chunk-IWMGDYNN.js.map +1 -0
- package/dist/{chunk-TFZ2RT6P.js → chunk-JKIRRMBU.js} +3 -3
- package/dist/chunk-JKIRRMBU.js.map +1 -0
- package/dist/{chunk-YU36GBMB.js → chunk-KCKHA75V.js} +3 -3
- package/dist/{chunk-YU36GBMB.js.map → chunk-KCKHA75V.js.map} +1 -1
- package/dist/{chunk-W4CSWDEH.js → chunk-KIPZQN3Y.js} +2 -7
- package/dist/chunk-KIPZQN3Y.js.map +1 -0
- package/dist/{chunk-2SUOZEX2.js → chunk-KJRALAYM.js} +3 -3
- package/dist/chunk-KJRALAYM.js.map +1 -0
- package/dist/{chunk-O7Z6BIPP.js → chunk-LSDIFHXZ.js} +4 -4
- package/dist/{chunk-O7Z6BIPP.js.map → chunk-LSDIFHXZ.js.map} +1 -1
- package/dist/{chunk-7RVUSB5C.js → chunk-NBHI5X36.js} +4 -4
- package/dist/{chunk-7RVUSB5C.js.map → chunk-NBHI5X36.js.map} +1 -1
- package/dist/{chunk-UIX3W2PN.js → chunk-OAMIDZKW.js} +3 -3
- package/dist/chunk-OAMIDZKW.js.map +1 -0
- package/dist/{chunk-MXQCE3KA.js → chunk-OBSAH7K6.js} +4 -45
- package/dist/chunk-OBSAH7K6.js.map +1 -0
- package/dist/chunk-P4M64WVZ.js +14 -0
- package/dist/{chunk-ZOCDYJPX.js.map → chunk-P4M64WVZ.js.map} +1 -1
- package/dist/{chunk-25SSLQAJ.js → chunk-Q7VWURUR.js} +5 -12
- package/dist/chunk-Q7VWURUR.js.map +1 -0
- package/dist/{chunk-SSQ75CKA.js → chunk-RINZVHVS.js} +4 -4
- package/dist/chunk-RINZVHVS.js.map +1 -0
- package/dist/{chunk-RYBA3JDM.js → chunk-RJPPO3ET.js} +4 -4
- package/dist/{chunk-RYBA3JDM.js.map → chunk-RJPPO3ET.js.map} +1 -1
- package/dist/{chunk-433EFDBW.js → chunk-SM7VMQZY.js} +4 -4
- package/dist/chunk-SM7VMQZY.js.map +1 -0
- package/dist/{chunk-GTM2GV2N.js → chunk-SSZR6JBK.js} +65 -43
- package/dist/chunk-SSZR6JBK.js.map +1 -0
- package/dist/{chunk-Q6MQLAYL.js → chunk-TCSNNCRH.js} +3 -3
- package/dist/{chunk-Q6MQLAYL.js.map → chunk-TCSNNCRH.js.map} +1 -1
- package/dist/{chunk-IILTG4A6.js → chunk-THMQ2Z3N.js} +84 -63
- package/dist/chunk-THMQ2Z3N.js.map +1 -0
- package/dist/{chunk-GOYYO4NI.js → chunk-TP3LCGE7.js} +2 -2
- package/dist/{chunk-GOYYO4NI.js.map → chunk-TP3LCGE7.js.map} +1 -1
- package/dist/{chunk-VVRYP6IL.js → chunk-TYNZ5B2B.js} +2 -2
- package/dist/chunk-TYNZ5B2B.js.map +1 -0
- package/dist/{chunk-CI4HKXVH.js → chunk-W6HFR7YA.js} +4 -4
- package/dist/chunk-W6HFR7YA.js.map +1 -0
- package/dist/{chunk-P43TLDS6.js → chunk-XECKVHG7.js} +6 -6
- package/dist/chunk-XECKVHG7.js.map +1 -0
- package/dist/{chunk-4AYOFKHU.js → chunk-XK42WXU5.js} +3 -3
- package/dist/chunk-XK42WXU5.js.map +1 -0
- package/dist/{chunk-FBFPH5BB.js → chunk-Z4Y55HWX.js} +8 -8
- package/dist/chunk-Z4Y55HWX.js.map +1 -0
- package/dist/{chunk-6LQFMCWK.js → chunk-ZNOJPVX3.js} +4 -4
- package/dist/chunk-ZNOJPVX3.js.map +1 -0
- package/dist/components/cart/CartItem.d.ts.map +1 -1
- package/dist/components/cart/PriceQuoteButton.d.ts.map +1 -1
- package/dist/components/cart/index.js +1 -1
- package/dist/components/collapse/Collapse.d.ts +2 -2
- package/dist/components/collapse/Collapse.d.ts.map +1 -1
- package/dist/components/collapse/index.js +3 -3
- package/dist/components/collapse/index.js.map +1 -1
- package/dist/components/common/DeferredData.d.ts +0 -1
- package/dist/components/common/DeferredData.d.ts.map +1 -1
- package/dist/components/common/ErrorPage.d.ts.map +1 -1
- package/dist/components/common/index.js +1 -1
- package/dist/components/drawer/Drawer.d.ts.map +1 -1
- package/dist/components/drawer/index.js +23 -22
- package/dist/components/dropdown/Dropdown.d.ts.map +1 -1
- package/dist/components/dropdown/index.js +17 -1
- package/dist/components/dropdown/index.js.map +1 -1
- package/dist/components/home/ComponentErrorBoundary.d.ts +1 -1
- package/dist/components/home/ComponentErrorBoundary.d.ts.map +1 -1
- package/dist/components/home/PhotosSlider.d.ts +1 -0
- package/dist/components/home/PhotosSlider.d.ts.map +1 -1
- package/dist/components/home/SquarePhotos.d.ts +1 -0
- package/dist/components/home/SquarePhotos.d.ts.map +1 -1
- package/dist/components/home/StoreFeatures.d.ts.map +1 -1
- package/dist/components/home/index.js +25 -24
- package/dist/components/layout/Header.d.ts.map +1 -1
- package/dist/components/layout/index.js +10 -10
- package/dist/components/modal/ImageModal.d.ts.map +1 -1
- package/dist/components/modal/Modal.d.ts.map +1 -1
- package/dist/components/modal/index.js +2 -2
- package/dist/components/navigation/MainMenu.d.ts.map +1 -1
- package/dist/components/navigation/MobileMenu.d.ts +1 -1
- package/dist/components/navigation/MobileMenu.d.ts.map +1 -1
- package/dist/components/product/AddToCartForm.d.ts +1 -1
- package/dist/components/product/AddToCartForm.d.ts.map +1 -1
- package/dist/components/product/ProductGallery.d.ts.map +1 -1
- package/dist/components/product/index.js +23 -22
- package/dist/components/store/index.js +24 -23
- package/dist/components/store/index.js.map +1 -1
- package/dist/components/toast/index.js +47 -2
- package/dist/components/toast/index.js.map +1 -1
- package/dist/dev/DevSettingsWidget.d.ts +19 -0
- package/dist/dev/DevSettingsWidget.d.ts.map +1 -0
- package/dist/dev/dev-settings-store.d.ts +62 -0
- package/dist/dev/dev-settings-store.d.ts.map +1 -0
- package/dist/dev/index.d.ts +9 -0
- package/dist/dev/index.d.ts.map +1 -0
- package/dist/dev/index.js +330 -0
- package/dist/dev/index.js.map +1 -0
- package/dist/dev/schema-types.d.ts +43 -0
- package/dist/dev/schema-types.d.ts.map +1 -0
- package/dist/document-class-4EILSNLT.js +21 -0
- package/dist/{document-class-V5XSWLMX.js.map → document-class-4EILSNLT.js.map} +1 -1
- package/dist/hooks/HookRegistry.d.ts +1 -0
- package/dist/hooks/HookRegistry.d.ts.map +1 -1
- package/dist/hooks/HookRegistry.js +1 -1
- package/dist/hooks/HookSlot.d.ts +1 -1
- package/dist/hooks/HookSlot.d.ts.map +1 -1
- package/dist/hooks/HookSlot.js +3 -3
- package/dist/hooks/index.d.ts +0 -1
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +22 -21
- package/dist/hooks/useBlogLike.js +2 -2
- package/dist/hooks/useGtm.js +22 -21
- package/dist/hooks/useHook.js +2 -2
- package/dist/hooks/useMoney.d.ts.map +1 -1
- package/dist/hooks/useMoney.js +22 -21
- package/dist/hooks/useNumber.d.ts.map +1 -1
- package/dist/hooks/useStore.js +22 -21
- package/dist/hooks/useTheme.js +2 -2
- package/dist/hooks/useUser.js +4 -4
- package/dist/i18n.d.ts +1 -1
- package/dist/i18n.js +1 -1
- package/dist/index.d.ts +1 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +22 -21
- package/dist/index.js.map +1 -1
- package/dist/navigation-ZCEGLIHD.js +10 -0
- package/dist/{navigation-77T2NTFS.js.map → navigation-ZCEGLIHD.js.map} +1 -1
- package/dist/{navigation-JPUI67XY.js → navigation-ZIULIDFF.js} +6 -6
- package/dist/{navigation-JPUI67XY.js.map → navigation-ZIULIDFF.js.map} +1 -1
- package/dist/nextjs/index.d.ts +1 -2
- package/dist/nextjs/index.d.ts.map +1 -1
- package/dist/nextjs/link.d.ts +0 -4
- package/dist/nextjs/link.d.ts.map +1 -1
- package/dist/nextjs/router.d.ts +0 -6
- package/dist/nextjs/router.d.ts.map +1 -1
- package/dist/nextjs.js +2 -7
- package/dist/nextjs.js.map +1 -1
- package/dist/{not-found-73ZVE5QO.js → not-found-MGLRWOWH.js} +24 -23
- package/dist/not-found-MGLRWOWH.js.map +1 -0
- package/dist/providers/{i18n.d.ts → I18nProvider.d.ts} +1 -1
- package/dist/providers/I18nProvider.d.ts.map +1 -0
- package/dist/providers/NavigationProvider.d.ts +1 -4
- package/dist/providers/NavigationProvider.d.ts.map +1 -1
- package/dist/providers/TwilightProvider.d.ts +1 -1
- package/dist/providers/TwilightProvider.d.ts.map +1 -1
- package/dist/providers/index.js +22 -21
- package/dist/providers/navigation-setups.d.ts +5 -0
- package/dist/providers/navigation-setups.d.ts.map +1 -0
- package/dist/providers/twilight-context.d.ts +1 -1
- package/dist/providers/twilight-context.d.ts.map +1 -1
- package/dist/providers/twilight-init.d.ts +1 -2
- package/dist/providers/twilight-init.d.ts.map +1 -1
- package/dist/routes/account/orders/OrderSinglePage.d.ts.map +1 -1
- package/dist/routes/account/orders.js +6 -35
- package/dist/routes/account.js +14 -43
- package/dist/routes/account.js.map +1 -1
- package/dist/routes/blog/BlogAuthorPage.d.ts.map +1 -1
- package/dist/routes/blog/BlogCategoryPage.d.ts.map +1 -1
- package/dist/routes/blog/BlogPage.d.ts +1 -1
- package/dist/routes/blog/BlogPage.d.ts.map +1 -1
- package/dist/routes/blog/BlogSinglePage.d.ts.map +1 -1
- package/dist/routes/blog/BlogTagPage.d.ts.map +1 -1
- package/dist/routes/blog.js +10 -39
- package/dist/routes/blog.js.map +1 -1
- package/dist/routes/brands.js +6 -35
- package/dist/routes/brands.js.map +1 -1
- package/dist/routes/cart.js +30 -29
- package/dist/routes/cart.js.map +1 -1
- package/dist/routes/home/HomePage.d.ts.map +1 -1
- package/dist/routes/home.js +27 -26
- package/dist/routes/index.d.ts +2 -2
- package/dist/routes/index.d.ts.map +1 -1
- package/dist/routes/index.js +5 -35
- package/dist/routes/loyalty.js +6 -35
- package/dist/routes/loyalty.js.map +1 -1
- package/dist/routes/page.js +6 -35
- package/dist/routes/page.js.map +1 -1
- package/dist/routes/product-listing/ProductListPage.d.ts.map +1 -1
- package/dist/routes/product-listing.js +30 -32
- package/dist/routes/product-listing.js.map +1 -1
- package/dist/routes/product.js +25 -24
- package/dist/routes/product.js.map +1 -1
- package/dist/routes/root/beforeLoad.d.ts +0 -2
- package/dist/routes/root/beforeLoad.d.ts.map +1 -1
- package/dist/routes/seo-redirects.js +4 -35
- package/dist/routes/testimonials.js +2 -2
- package/dist/routes/thank-you/ThankYouPage.d.ts +1 -1
- package/dist/routes/thank-you/ThankYouPage.d.ts.map +1 -1
- package/dist/routes/thank-you.js +6 -35
- package/dist/routes/thank-you.js.map +1 -1
- package/dist/skeleton.js +27 -26
- package/dist/tanstack/middleware/twilight.d.ts.map +1 -1
- package/dist/tanstack/router.d.ts +0 -3
- package/dist/tanstack/router.d.ts.map +1 -1
- package/dist/tanstack.js +16 -31
- package/dist/tanstack.js.map +1 -1
- package/dist/twilight/context.d.ts +0 -1
- package/dist/twilight/context.d.ts.map +1 -1
- package/dist/types/hooks.d.ts +1 -0
- package/dist/types/hooks.d.ts.map +1 -1
- package/dist/types/hooks.js +1 -1
- package/dist/types/index.js +1 -1
- package/dist/{providers/salla-sdk.types.d.ts → types/salla-sdk.d.ts} +3 -1
- package/dist/types/salla-sdk.d.ts.map +1 -0
- package/dist/{providers/twilight.types.d.ts → types/twilight.d.ts} +4 -5
- package/dist/types/twilight.d.ts.map +1 -0
- package/dist/utils/breadcrumb.d.ts +0 -1
- package/dist/utils/breadcrumb.d.ts.map +1 -1
- package/dist/utils/engine-version.d.ts +10 -0
- package/dist/utils/engine-version.d.ts.map +1 -0
- package/dist/utils/index.js +21 -3
- package/dist/utils/index.js.map +1 -1
- package/dist/vite/adapters/tanstack.adapter.d.ts.map +1 -1
- package/dist/vite/index.js +174 -4
- package/dist/vite/index.js.map +1 -1
- package/dist/vite/plugins/twilight-schema.d.ts +18 -0
- package/dist/vite/plugins/twilight-schema.d.ts.map +1 -0
- package/dist/vite/plugins/twilight-schema.plugin.d.ts +20 -0
- package/dist/vite/plugins/twilight-schema.plugin.d.ts.map +1 -0
- package/dist/vite/types.d.ts +7 -0
- package/dist/vite/types.d.ts.map +1 -1
- package/package.json +10 -3
- package/dist/AddToCartForm-VS67AFNL.js.map +0 -1
- package/dist/BlogAuthorPage-276K2KQS.js.map +0 -1
- package/dist/BlogCategoryPage-GF5PLRG7.js.map +0 -1
- package/dist/BlogPage-BU672BXD.js.map +0 -1
- package/dist/BlogSinglePage-ELV4S5EV.js.map +0 -1
- package/dist/BlogTagPage-TXQP6ZOI.js.map +0 -1
- package/dist/BrandsPage-C6ZHC4KC.js.map +0 -1
- package/dist/Breadcrumb-TG4UTNRM.js.map +0 -1
- package/dist/CartItem-55JV6HDS.js.map +0 -1
- package/dist/CartSummary-CUWMHHMD.js.map +0 -1
- package/dist/Copyright-PG76AVV6.js +0 -9
- package/dist/CustomerLayout-SLNVCNZ6.js.map +0 -1
- package/dist/ErrorPage-TK4U3ENF.js +0 -6
- package/dist/Footer-MZDSEK57.js +0 -39
- package/dist/Header-CXFKDTOA.js +0 -15
- package/dist/ImageModal-WLJM3WIE.js +0 -41
- package/dist/ImageModal-WLJM3WIE.js.map +0 -1
- package/dist/LoyaltyPage-AIA3CUYI.js.map +0 -1
- package/dist/MainMenu-T3M5RB7L.js.map +0 -1
- package/dist/MasterLayout-QUBHRA32.js +0 -39
- package/dist/MobileMenu-6D52JOQA.js.map +0 -1
- package/dist/NotificationsPage-6H45SAS7.js.map +0 -1
- package/dist/OrderSinglePage-GP2M3YVH.js.map +0 -1
- package/dist/OrdersPage-OQGJLTQP.js.map +0 -1
- package/dist/PreOrderNotification-ZVTGNV7K.js.map +0 -1
- package/dist/PriceQuoteButton-RAAPL4N4.js.map +0 -1
- package/dist/ProductDetails-2JUCRU4W.js.map +0 -1
- package/dist/ProfilePage-XGZ2HCQH.js.map +0 -1
- package/dist/SeoCartWidget-PDK6IQ2H.js.map +0 -1
- package/dist/SettingsPage-VCQNV2PP.js.map +0 -1
- package/dist/StoreClosedNotification-3JRNBNQK.js +0 -40
- package/dist/TestimonialsPage-ENMVJ4QG.js.map +0 -1
- package/dist/ThankYouPage-4FTP6E2Y.js.map +0 -1
- package/dist/WalletPage-VKV44EEG.js.map +0 -1
- package/dist/WidgetHead-FXEPCB23.js +0 -7
- package/dist/WishlistPage-GJZCXQUY.js.map +0 -1
- package/dist/chunk-25SSLQAJ.js.map +0 -1
- package/dist/chunk-2SUOZEX2.js.map +0 -1
- package/dist/chunk-3DCZJDDK.js +0 -10
- package/dist/chunk-3UHSMGPY.js.map +0 -1
- package/dist/chunk-433EFDBW.js.map +0 -1
- package/dist/chunk-4AYOFKHU.js.map +0 -1
- package/dist/chunk-6LQFMCWK.js.map +0 -1
- package/dist/chunk-BWFBVXT3.js.map +0 -1
- package/dist/chunk-C5GWTTB6.js.map +0 -1
- package/dist/chunk-CI4HKXVH.js.map +0 -1
- package/dist/chunk-FBFPH5BB.js.map +0 -1
- package/dist/chunk-GS3G4O2R.js.map +0 -1
- package/dist/chunk-GTM2GV2N.js.map +0 -1
- package/dist/chunk-HL3HSO4R.js.map +0 -1
- package/dist/chunk-IILTG4A6.js.map +0 -1
- package/dist/chunk-J37AYLWL.js.map +0 -1
- package/dist/chunk-JIJOXZPF.js.map +0 -1
- package/dist/chunk-MXQCE3KA.js.map +0 -1
- package/dist/chunk-P43TLDS6.js.map +0 -1
- package/dist/chunk-REQC7YOE.js.map +0 -1
- package/dist/chunk-S6AVEFCN.js.map +0 -1
- package/dist/chunk-SAZBQNQK.js.map +0 -1
- package/dist/chunk-SSQ75CKA.js.map +0 -1
- package/dist/chunk-SVZOWI7E.js.map +0 -1
- package/dist/chunk-TFZ2RT6P.js.map +0 -1
- package/dist/chunk-THXWAZX2.js.map +0 -1
- package/dist/chunk-TQLEQSXE.js.map +0 -1
- package/dist/chunk-TQUHDSKQ.js.map +0 -1
- package/dist/chunk-TWAHYRKI.js.map +0 -1
- package/dist/chunk-U33UQAWO.js.map +0 -1
- package/dist/chunk-UIX3W2PN.js.map +0 -1
- package/dist/chunk-VVRYP6IL.js.map +0 -1
- package/dist/chunk-W4CSWDEH.js.map +0 -1
- package/dist/chunk-XHGF75TM.js.map +0 -1
- package/dist/chunk-ZOCDYJPX.js +0 -14
- package/dist/components/common/types.d.ts +0 -7
- package/dist/components/common/types.d.ts.map +0 -1
- package/dist/document-class-V5XSWLMX.js +0 -21
- package/dist/hooks/useIsMobile.d.ts +0 -2
- package/dist/hooks/useIsMobile.d.ts.map +0 -1
- package/dist/lib/services/index.d.ts +0 -1
- package/dist/lib/services/index.d.ts.map +0 -1
- package/dist/navigation-77T2NTFS.js +0 -10
- package/dist/not-found-73ZVE5QO.js.map +0 -1
- package/dist/providers/i18n.d.ts.map +0 -1
- package/dist/providers/salla-sdk.types.d.ts.map +0 -1
- package/dist/providers/twilight.types.d.ts.map +0 -1
- package/dist/router/context.d.ts +0 -3
- package/dist/router/context.d.ts.map +0 -1
- package/dist/router/index.d.ts +0 -4
- package/dist/router/index.d.ts.map +0 -1
- package/dist/twilight/index.d.ts +0 -3
- package/dist/twilight/index.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/api/store.ts"],"names":[],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/api/store.ts"],"names":[],"mappings":";;;;AAKA,IAAM,qBAAA,GAAwB;AAAA,EAC5B,OAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,gBAAA;AAAA,EACA,mBAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,iBAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA;AA6CO,SAAS,uBAAuB,QAAA,EAA2B;AAChE,EAAA,IAAI,UAAU,OAAO,QAAA;AACrB,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAW,YAAyD,GAAA,EACtE,iBAAA;AACJ,IAAA,IAAI,SAAS,OAAO,OAAA;AAAA,EACtB,CAAA,CAAA,MAAQ;AAAA,EAER;AACA,EAAA,MAAM,SAAA,GAAY,OAAO,MAAA,KAAW,WAAA;AACpC,EAAA,IAAI,SAAA,EAAW,OAAO,MAAA,CAAO,QAAA,CAAS,IAAA;AACtC,EAAA,OAAQ,OAAO,OAAA,KAAY,WAAA,IAAe,OAAA,CAAQ,KAAK,YAAA,IAAiB,EAAA;AAC1E;AAQA,SAAS,iBAAiB,SAAA,EAA8D;AACtF,EAAA,IAAI,CAAC,WAAW,OAAO,MAAA;AAGvB,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,SAAS,CAAA,CAAE,GAAA,CAAI,CAAC,IAAA,MAAU,EAAE,QAAA,EAAU,IAAA,CAAK,IAAA,EAAM,GAAG,MAAK,CAAE,CAAA;AAClF;AAEO,IAAM,KAAA,GAAQ;AAAA,EACnB,QAAA,EAAU,OAAO,eAAA,KAA2D;AAC1E,IAAA,MAAM,UAAA,GAAa,mBAAmB,sBAAA,EAAuB;AAE7D,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,OAAA,CAAQ,KAAK,gDAAgD,CAAA;AAC7D,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,aAAA,GAAgB,qBAAA,CAAsB,GAAA,CAAI,CAAC,CAAA,KAAM,aAAa,CAAC,CAAA,CAAE,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AACjF,IAAA,MAAM,UAAU,gBAAA,EAAiB;AACjC,IAAA,MAAM,SAAS,OAAA,IAAW,IAAA,GAAO,GAAG,aAAa,CAAA,OAAA,EAAU,OAAO,CAAA,CAAA,GAAK,aAAA;AAEvE,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAChB,GAAA,CAAI,CAAA,eAAA,EAAkB,MAAM,CAAA,CAAA,EAAI,EAAE,OAAA,EAAS,GAAA,EAAM,CAAA,CACjD,IAAA,EAAqC;AAExC,MAAA,MAAM,OAAO,IAAA,EAAM,IAAA;AACnB,MAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAGlB,MAAA,MAAM,SAAA,GAAY,gBAAA,CAAiB,IAAA,CAAK,SAAS,CAAA;AAEjD,MAAA,OAAO;AAAA,QACL,OAAO,IAAA,CAAK,KAAA;AAAA,QACZ,OAAO,IAAA,CAAK,KAAA;AAAA,QACZ,SAAA;AAAA,QACA,YAAY,IAAA,CAAK,UAAA;AAAA,QACjB,mBAAmB,IAAA,CAAK,iBAAA;AAAA,QACxB,SAAS,IAAA,CAAK,OAAA;AAAA,QACd,OAAO,IAAA,CAAK,KAAA;AAAA,QACZ,WAAW,IAAA,CAAK,SAAA;AAAA,QAChB,YAAY,IAAA,CAAK;AAAA,OACnB;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,4BAA4B,KAAK,CAAA;AAC/C,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF,CAAA;AAAA,EAEA,OAAA,EAAS;AAAA,IACP,QAAA,EAAU,CAAC,eAAA,KACT,YAAA,CAAkC;AAAA,MAChC,QAAA,EAAU;AAAA,QACR,OAAA;AAAA,QACA,UAAA;AAAA,QACA,eAAA;AAAA,QACA,oBAAmB,CAAE,MAAA;AAAA,QACrB,gBAAA;AAAiB,OACnB;AAAA,MACA,OAAA,EAAS,MAAM,KAAA,CAAM,QAAA,CAAS,eAAe;AAAA,KAC9C;AAAA;AAEP","file":"chunk-LSDIFHXZ.js","sourcesContent":["import { queryOptions } from '@tanstack/react-query';\nimport { api, getActiveScopeId } from './client';\nimport type { Store, Theme, Language } from '../types';\nimport { getTwilightContext } from '../twilight/context';\n\nconst DEFAULT_INCLUDE_ITEMS = [\n 'store',\n 'settings',\n 'theme',\n 'theme_settings',\n 'external_services',\n 'currencies',\n 'languages',\n 'payments',\n 'product_widgets',\n 'rating',\n 'ratings',\n];\n\n/**\n * Raw API response for settings endpoint.\n * Languages come as object: { \"AR\": { code, name, ... }, \"EN\": {...} }\n */\ninterface SettingsApiResponse {\n store?: Store;\n theme?: Theme;\n languages?: Record<string, Language>;\n currencies?: Record<\n string,\n { code: string; name: string; symbol: string; amount: number; country_code: string }\n >;\n external_services?: Record<string, unknown>;\n headers?: Record<string, unknown>;\n login?: { url: string; turnstile_site_key: string };\n affiliate?: { utm_url: string; cta_enabled: boolean };\n debug?: boolean;\n trace_console?: boolean;\n policy_url?: string;\n}\n\n/**\n * Central settings context - single source of truth for all API data.\n * Contains everything from the settings endpoint response after processing.\n */\nexport interface StoreContext {\n store?: Store;\n theme?: Theme;\n /** Languages as array after conversion from API object format */\n languages?: Language[];\n currencies?: Record<\n string,\n { code: string; name: string; symbol: string; amount: number; country_code: string }\n >;\n external_services?: Record<string, unknown>;\n headers?: Record<string, unknown>;\n login?: { url: string; turnstile_site_key: string };\n affiliate?: { utm_url: string; cta_enabled: boolean };\n debug?: boolean;\n trace_console?: boolean; // todo:: remove it\n policy_url?: string;\n}\n\nexport function resolveStoreIdentifier(explicit?: string): string {\n if (explicit) return explicit;\n try {\n const viteEnv = (import.meta as { env?: { VITE_STORE_DOMAIN?: string } }).env\n ?.VITE_STORE_DOMAIN;\n if (viteEnv) return viteEnv;\n } catch {\n /* import.meta not available in all environments */\n }\n const isBrowser = typeof window !== 'undefined';\n if (isBrowser) return window.location.host;\n return (typeof process !== 'undefined' && process.env?.STORE_DOMAIN) || '';\n}\n\n/**\n * Converts languages object from API to array format.\n * API returns: { \"AR\": { code, name, ... }, \"EN\": { ... } }\n * We need: [{ code, name, ... }, { code, name, ... }]\n * todo:: return the languages as object from the APIs to avoid this\n */\nfunction languagesToArray(languages?: Record<string, Language>): Language[] | undefined {\n if (!languages) return undefined;\n // The SDK's localization modal reads `lang.iso_code` (not `code`) when a language is\n // selected — without it the switch navigates to `/undefined/...`.\n return Object.values(languages).map((lang) => ({ iso_code: lang.code, ...lang }));\n}\n\nexport const store = {\n settings: async (storeIdentifier?: string): Promise<StoreContext | null> => {\n const identifier = storeIdentifier ?? resolveStoreIdentifier();\n\n if (!identifier) {\n console.warn('[store.settings] No store identifier available');\n return null;\n }\n\n const includeParams = DEFAULT_INCLUDE_ITEMS.map((i) => `include[]=${i}`).join('&');\n const scopeId = getActiveScopeId();\n const params = scopeId != null ? `${includeParams}&scope=${scopeId}` : includeParams;\n\n try {\n const json = await api\n .get(`store/settings?${params}`, { timeout: 5000 })\n .json<{ data?: SettingsApiResponse }>();\n\n const data = json?.data;\n if (!data) return null;\n\n // Convert languages from object to array\n const languages = languagesToArray(data.languages);\n\n return {\n store: data.store,\n theme: data.theme,\n languages,\n currencies: data.currencies,\n external_services: data.external_services,\n headers: data.headers,\n login: data.login,\n affiliate: data.affiliate,\n policy_url: data.policy_url,\n };\n } catch (error) {\n console.error('[store.settings] Failed:', error);\n return null;\n }\n },\n\n queries: {\n settings: (storeIdentifier?: string) =>\n queryOptions<StoreContext | null>({\n queryKey: [\n 'store',\n 'settings',\n storeIdentifier,\n getTwilightContext().locale,\n getActiveScopeId(),\n ],\n queryFn: () => store.settings(storeIdentifier),\n }),\n },\n};\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { api } from './chunk-
|
|
2
|
-
import { getTwilightContext } from './chunk-
|
|
1
|
+
import { api } from './chunk-2TB2LTL2.js';
|
|
2
|
+
import { getTwilightContext } from './chunk-KIPZQN3Y.js';
|
|
3
3
|
import { queryOptions } from '@tanstack/react-query';
|
|
4
4
|
|
|
5
5
|
var menu = {
|
|
@@ -23,5 +23,5 @@ var menu = {
|
|
|
23
23
|
};
|
|
24
24
|
|
|
25
25
|
export { menu };
|
|
26
|
-
//# sourceMappingURL=chunk-
|
|
27
|
-
//# sourceMappingURL=chunk-
|
|
26
|
+
//# sourceMappingURL=chunk-NBHI5X36.js.map
|
|
27
|
+
//# sourceMappingURL=chunk-NBHI5X36.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/api/menu.ts"],"names":[],"mappings":";;;;AAKO,IAAM,IAAA,GAAO;AAAA,EAClB,QAAQ,YAAiC;AACvC,IAAA,MAAM,EAAE,MAAA,EAAO,GAAI,kBAAA,EAAmB;AACtC,IAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,GAAA,CAAI,IAAI,CAAA,kBAAA,EAAqB,MAAM,CAAA,CAAE,CAAA,CAAE,IAAA,EAA2B;AACzF,IAAA,OAAO,QAAQ,EAAC;AAAA,EAClB,CAAA;AAAA,EAEA,QAAQ,YAAiC;AACvC,IAAA,MAAM,EAAE,MAAA,EAAO,GAAI,kBAAA,EAAmB;AACtC,IAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,GAAA,CAAI,IAAI,CAAA,kBAAA,EAAqB,MAAM,CAAA,CAAE,CAAA,CAAE,IAAA,EAA2B;AACzF,IAAA,OAAO,QAAQ,EAAC;AAAA,EAClB,CAAA;AAAA,EAEA,OAAA,EAAS;AAAA,IACP,MAAA,EAAQ,MACN,YAAA,CAAa;AAAA,MACX,UAAU,CAAC,OAAA,EAAS,QAAA,EAAU,kBAAA,GAAqB,MAAM,CAAA;AAAA,MACzD,OAAA,EAAS,MAAM,IAAA,CAAK,MAAA,EAAO;AAAA,MAC3B,SAAA,EAAW,IAAI,EAAA,GAAK;AAAA,KACrB;AAAA;AAEP","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/api/menu.ts"],"names":[],"mappings":";;;;AAKO,IAAM,IAAA,GAAO;AAAA,EAClB,QAAQ,YAAiC;AACvC,IAAA,MAAM,EAAE,MAAA,EAAO,GAAI,kBAAA,EAAmB;AACtC,IAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,GAAA,CAAI,IAAI,CAAA,kBAAA,EAAqB,MAAM,CAAA,CAAE,CAAA,CAAE,IAAA,EAA2B;AACzF,IAAA,OAAO,QAAQ,EAAC;AAAA,EAClB,CAAA;AAAA,EAEA,QAAQ,YAAiC;AACvC,IAAA,MAAM,EAAE,MAAA,EAAO,GAAI,kBAAA,EAAmB;AACtC,IAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,GAAA,CAAI,IAAI,CAAA,kBAAA,EAAqB,MAAM,CAAA,CAAE,CAAA,CAAE,IAAA,EAA2B;AACzF,IAAA,OAAO,QAAQ,EAAC;AAAA,EAClB,CAAA;AAAA,EAEA,OAAA,EAAS;AAAA,IACP,MAAA,EAAQ,MACN,YAAA,CAAa;AAAA,MACX,UAAU,CAAC,OAAA,EAAS,QAAA,EAAU,kBAAA,GAAqB,MAAM,CAAA;AAAA,MACzD,OAAA,EAAS,MAAM,IAAA,CAAK,MAAA,EAAO;AAAA,MAC3B,SAAA,EAAW,IAAI,EAAA,GAAK;AAAA,KACrB;AAAA;AAEP","file":"chunk-NBHI5X36.js","sourcesContent":["import { queryOptions } from '@tanstack/react-query';\nimport { api } from './client';\nimport { getTwilightContext } from '../twilight/context';\nimport type { MenuItem } from '../types';\n\nexport const menu = {\n header: async (): Promise<MenuItem[]> => {\n const { locale } = getTwilightContext();\n const { data } = await api.get(`menus/header?lang=${locale}`).json<{ data: MenuItem[] }>();\n return data || [];\n },\n\n footer: async (): Promise<MenuItem[]> => {\n const { locale } = getTwilightContext();\n const { data } = await api.get(`menus/footer?lang=${locale}`).json<{ data: MenuItem[] }>();\n return data || [];\n },\n\n queries: {\n header: () =>\n queryOptions({\n queryKey: ['menus', 'header', getTwilightContext().locale],\n queryFn: () => menu.header(),\n staleTime: 5 * 60 * 1000,\n }),\n },\n};\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useTranslation } from './chunk-
|
|
1
|
+
import { useTranslation } from './chunk-TYNZ5B2B.js';
|
|
2
2
|
import { useAsyncFn } from './chunk-6BZ5TKEV.js';
|
|
3
3
|
import { useState, useEffect, useCallback } from 'react';
|
|
4
4
|
|
|
@@ -52,5 +52,5 @@ function useBlogLike(blogId, initialCount = 0) {
|
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
export { useBlogLike };
|
|
55
|
-
//# sourceMappingURL=chunk-
|
|
56
|
-
//# sourceMappingURL=chunk-
|
|
55
|
+
//# sourceMappingURL=chunk-OAMIDZKW.js.map
|
|
56
|
+
//# sourceMappingURL=chunk-OAMIDZKW.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/hooks/useBlogLike.ts"],"names":[],"mappings":";;;;AA6CA,IAAM,eAAA,GAAkB,aAAA;AAEjB,SAAS,WAAA,CAAY,MAAA,EAAgB,YAAA,GAAuB,CAAA,EAAsB;AACvF,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,QAAA,CAAmB,EAAE,CAAA;AAEzD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,YAAA,CAAa,OAAA,CAAQ,eAAe,CAAA;AACnD,MAAA,IAAI,MAAA,EAAQ,aAAA,CAAc,IAAA,CAAK,KAAA,CAAM,MAAM,CAAC,CAAA;AAAA,IAC9C,SAAS,MAAA,EAAQ;AAAA,IAEjB;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI;AACF,MAAA,YAAA,CAAa,OAAA,CAAQ,eAAA,EAAiB,IAAA,CAAK,SAAA,CAAU,UAAU,CAAC,CAAA;AAAA,IAClE,SAAS,MAAA,EAAQ;AAAA,IAEjB;AAAA,EACF,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AACf,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAS,YAAY,CAAA;AAC/C,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,cAAA,EAAe;AAE7B,EAAA,MAAM,MAAA,GAAS,UAAA,CAAW,QAAA,CAAS,MAAM,CAAA;AAEzC,EAAA,MAAM,CAAC,QAAA,EAAU,KAAK,CAAA,GAAI,WAAW,YAAY;AAC/C,IAAA,MAAM,QAAQ,MAAA,CAAO,KAAA;AACrB,IAAA,IAAI,KAAA,EAAO,MAAA,EAAQ,OAAA,IAAU,EAAG;AAC9B,MAAA,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,CAAA,CAAE,4BAAA,EAA8B,oBAAoB,CAAC,CAAA;AACxE,MAAA;AAAA,IACF;AACA,IAAA,MAAM,KAAA,EAAO,IAAI,OAAA,CAAQ,CAAA,MAAA,EAAS,MAAM,CAAA,KAAA,CAAA,EAAS,IAAI,KAAK,CAAA;AAC1D,IAAA,aAAA,CAAc,CAAC,IAAA,KAAU,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA,GAAI,IAAA,GAAO,CAAC,GAAG,IAAA,EAAM,MAAM,CAAE,CAAA;AAC1E,IAAA,QAAA,CAAS,CAAC,IAAA,KAAS,IAAA,GAAO,CAAC,CAAA;AAAA,EAC7B,CAAA,EAAG,CAAC,MAAA,EAAQ,aAAa,CAAC,CAAA;AAE1B,EAAA,MAAM,CAAC,WAAA,EAAa,QAAQ,CAAA,GAAI,WAAW,YAAY;AACrD,IAAA,MAAM,QAAQ,MAAA,CAAO,KAAA;AACrB,IAAA,MAAM,KAAA,EAAO,IAAI,OAAA,CAAQ,CAAA,MAAA,EAAS,MAAM,CAAA,OAAA,CAAA,EAAW,IAAI,QAAQ,CAAA;AAC/D,IAAA,aAAA,CAAc,CAAC,SAAS,IAAA,CAAK,MAAA,CAAO,CAAC,EAAA,KAAO,EAAA,KAAO,MAAM,CAAC,CAAA;AAC1D,IAAA,QAAA,CAAS,CAAC,IAAA,KAAS,IAAA,CAAK,IAAI,CAAA,EAAG,IAAA,GAAO,CAAC,CAAC,CAAA;AAAA,EAC1C,CAAA,EAAG,CAAC,MAAA,EAAQ,aAAa,CAAC,CAAA;AAE1B,EAAA,MAAM,GAAA,GAAM,YAA8B,EAAI,MAAM,OAAM,YAA0B,KAAA,CAAA;AACpF,EAAA,MAAM,MAAA,GAAS,YAA8B,EAAI,MAAM,UAAS,YAA0B,KAAA,CAAA;AAE1F,EAAA,MAAM,MAAA,GAAS,WAAA,CAAY,MAAO,MAAA,GAAS,MAAA,EAAO,GAAI,GAAA,EAAI,EAAI,CAAC,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAC,CAAA;AAEvF,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,KAAA;AAAA,IACA,GAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA,EAAS,QAAA,CAAS,OAAA,IAAW,WAAA,CAAY,OAAA;AAAA,IACzC,KAAA,EAAA,CAAQ,QAAA,CAAS,KAAA,IAAS,WAAA,CAAY,QAAQ,OAAA,IAAW;AAAA,GAC3D;AACF","file":"chunk-OAMIDZKW.js","sourcesContent":["import { useState, useCallback, useEffect } from 'react';\nimport { useAsyncFn } from './useAsyncFn';\nimport { useTranslation } from '../providers/I18nProvider';\nimport type { UseToggle } from './types';\n\n/**\n * UseBlogLikeResult - Return type for useBlogLike hook\n */\nexport type UseBlogLikeResult = UseToggle;\n\n/**\n * useBlogLike - Hook for managing blog like functionality\n *\n * Handles blog likes with local storage persistence to remember liked blogs\n * across sessions. Integrates with the Salla SDK for API operations and\n * maintains like counts.\n *\n * @param blogId - The ID of the blog to manage likes for\n * @param initialCount - Initial like count (optional, defaults to 0)\n *\n * @returns Blog like state and management functions\n *\n * @example\n * ```tsx\n * function BlogLikeButton({ blogId, initialCount }) {\n * const { active, count, toggle, loading } = useBlogLike(blogId, initialCount);\n *\n * return (\n * <button\n * onClick={toggle}\n * disabled={loading}\n * className={active ? 'liked' : ''}\n * >\n * {loading ? (\n * <span className=\"loader loader--small\"></span>\n * ) : (\n * <i className=\"sicon-thumbs-up\"></i>\n * )}\n * {count}\n * </button>\n * );\n * }\n * ```\n */\n\nconst LIKED_BLOGS_KEY = 'liked_blogs';\n\nexport function useBlogLike(blogId: number, initialCount: number = 0): UseBlogLikeResult {\n const [likedBlogs, setLikedBlogs] = useState<number[]>([]);\n\n useEffect(() => {\n try {\n const stored = localStorage.getItem(LIKED_BLOGS_KEY);\n if (stored) setLikedBlogs(JSON.parse(stored));\n } catch (_error) {\n /* ignore storage errors */\n }\n }, []);\n\n useEffect(() => {\n try {\n localStorage.setItem(LIKED_BLOGS_KEY, JSON.stringify(likedBlogs));\n } catch (_error) {\n /* ignore storage errors */\n }\n }, [likedBlogs]);\n const [count, setCount] = useState(initialCount);\n const { t } = useTranslation();\n\n const active = likedBlogs.includes(blogId);\n\n const [addState, addFn] = useAsyncFn(async () => {\n const salla = window.salla;\n if (salla?.config?.isGuest?.()) {\n salla.notify.error(t('common.messages.must_login', 'Please login first'));\n return;\n }\n await salla?.api.request(`blogs/${blogId}/like`, {}, 'put');\n setLikedBlogs((prev) => (prev.includes(blogId) ? prev : [...prev, blogId]));\n setCount((prev) => prev + 1);\n }, [blogId, setLikedBlogs]);\n\n const [removeState, removeFn] = useAsyncFn(async () => {\n const salla = window.salla;\n await salla?.api.request(`blogs/${blogId}/unlike`, {}, 'delete');\n setLikedBlogs((prev) => prev.filter((id) => id !== blogId));\n setCount((prev) => Math.max(0, prev - 1));\n }, [blogId, setLikedBlogs]);\n\n const add = async (): Promise<boolean> => !(((await addFn()) as unknown) instanceof Error);\n const remove = async (): Promise<boolean> => !(((await removeFn()) as unknown) instanceof Error);\n\n const toggle = useCallback(() => (active ? remove() : add()), [active, addFn, removeFn]);\n\n return {\n active,\n count,\n add,\n remove,\n toggle,\n loading: addState.loading || removeState.loading,\n error: (addState.error ?? removeState.error)?.message ?? null,\n };\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useTwilight } from './chunk-
|
|
1
|
+
import { useTwilight } from './chunk-DF6FBKDN.js';
|
|
2
2
|
import { useRef, useState, useEffect } from 'react';
|
|
3
3
|
import { toast, Toaster as Toaster$1 } from 'sonner';
|
|
4
4
|
import { jsx } from 'react/jsx-runtime';
|
|
@@ -126,48 +126,7 @@ function Toaster({
|
|
|
126
126
|
}
|
|
127
127
|
);
|
|
128
128
|
}
|
|
129
|
-
var useToast = Object.assign(
|
|
130
|
-
(title, options) => toast(title, options),
|
|
131
|
-
{
|
|
132
|
-
success: (title, options) => toast.success(title, options),
|
|
133
|
-
error: (title, options) => toast.error(title, options),
|
|
134
|
-
warning: (title, options) => toast.warning(title, options),
|
|
135
|
-
info: (title, options) => toast.info(title, options),
|
|
136
|
-
loading: (title, options) => toast.loading(title, options),
|
|
137
|
-
update: (id, options) => {
|
|
138
|
-
const { title, type, ...rest } = options;
|
|
139
|
-
if (type === "success") {
|
|
140
|
-
toast.success(id, { ...rest, description: title });
|
|
141
|
-
} else if (type === "error") {
|
|
142
|
-
toast.error(id, { ...rest, description: title });
|
|
143
|
-
} else if (type === "warning") {
|
|
144
|
-
toast.warning(id, { ...rest, description: title });
|
|
145
|
-
} else if (type === "info") {
|
|
146
|
-
toast.info(id, { ...rest, description: title });
|
|
147
|
-
} else if (type === "loading") {
|
|
148
|
-
toast.loading(id, { ...rest, description: title });
|
|
149
|
-
} else {
|
|
150
|
-
toast(id, { ...rest, description: title });
|
|
151
|
-
}
|
|
152
|
-
},
|
|
153
|
-
dismiss: (id) => {
|
|
154
|
-
if (id !== void 0) {
|
|
155
|
-
toast.dismiss(id);
|
|
156
|
-
} else {
|
|
157
|
-
toast.dismiss();
|
|
158
|
-
}
|
|
159
|
-
},
|
|
160
|
-
promise: (promise, options) => {
|
|
161
|
-
toast.promise(promise, {
|
|
162
|
-
loading: options.loading,
|
|
163
|
-
success: options.success,
|
|
164
|
-
error: options.error
|
|
165
|
-
});
|
|
166
|
-
return promise;
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
);
|
|
170
129
|
|
|
171
|
-
export { Toaster
|
|
172
|
-
//# sourceMappingURL=chunk-
|
|
173
|
-
//# sourceMappingURL=chunk-
|
|
130
|
+
export { Toaster };
|
|
131
|
+
//# sourceMappingURL=chunk-OBSAH7K6.js.map
|
|
132
|
+
//# sourceMappingURL=chunk-OBSAH7K6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/toast/Toaster.tsx"],"names":["SonnerToaster"],"mappings":"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","file":"chunk-OBSAH7K6.js","sourcesContent":["import { useEffect, useRef, useState } from 'react';\nimport { Toaster as SonnerToaster, toast } from 'sonner';\nimport { useTwilight } from '../../providers/twilight-context';\nimport type { ToastPosition } from './types';\n\nconst toastClassNames = {\n toast: 'group bg-white border-2 rounded-xl shadow-2xl p-4 font-primary',\n title: 'text-base font-bold',\n description: 'text-sm mt-1 text-gray-600',\n actionButton: 'bg-primary text-white px-3 py-1 rounded',\n cancelButton: 'bg-gray-100 px-3 py-1 rounded',\n success: 'border-green-500 [&_svg]:text-green-500 [&_aside]:text-green-700',\n error: 'border-red-500 [&_svg]:text-red-500 [&_aside]:text-red-700',\n warning: 'border-yellow-500 [&_svg]:text-yellow-500 [&_aside]:text-yellow-700',\n info: 'border-blue-500 [&_svg]:text-blue-500 [&_aside]:text-blue-700',\n loading: 'border-gray-400',\n};\n\ntype RawMessage = string | { title?: string; text?: string; icon?: string };\ntype ToastVariant = 'success' | 'error' | 'warning' | 'info';\n\nconst MOBILE_BREAKPOINT = 768;\nconst NATIVE_ALERT_EVENT = 'ui::alert';\n\nfunction dispatchNativeAlert(type: ToastVariant, message: string, title?: string) {\n const salla = window.salla;\n if (!salla?.mobile?.isEnabled?.() || !salla.event?.dispatch) return false;\n\n salla.event.dispatch(NATIVE_ALERT_EVENT, {\n type,\n message,\n ...(title ? { title } : {}),\n });\n return true;\n}\n\nexport function Toaster({\n mobilePosition = 'bottom-center',\n addToCartToast = true,\n}: {\n mobilePosition?: ToastPosition;\n /** Show the default add-to-cart toast. Themes whose cart badge is the feedback can turn it off. */\n addToCartToast?: boolean;\n}) {\n const { theme } = useTwilight();\n const themeRef = useRef(theme);\n themeRef.current = theme;\n const flashShownRef = useRef(false);\n\n const isRtl = theme.is_rtl;\n const desktopPosition: ToastPosition = isRtl ? 'top-left' : 'top-right';\n\n const [position, setPosition] = useState<ToastPosition>(() => {\n if (typeof window === 'undefined') return desktopPosition;\n return window.innerWidth < MOBILE_BREAKPOINT ? mobilePosition : desktopPosition;\n });\n\n useEffect(() => {\n const handleResize = () => {\n setPosition(window.innerWidth < MOBILE_BREAKPOINT ? mobilePosition : desktopPosition);\n };\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, [desktopPosition, mobilePosition]);\n\n useEffect(() => {\n const salla = window.salla;\n if (!salla?.notify?.setNotifier) return;\n\n const handleNotify = (message: RawMessage, type: string, data?: unknown) => {\n const eventData = data as { data?: { googleTags?: { event?: string } } } | undefined;\n const shouldSuppressAddToCartToast =\n (!addToCartToast || themeRef.current.settings?.enable_add_product_toast) &&\n eventData?.data?.googleTags?.event === 'addToCart';\n let title: string;\n let toastType: ToastVariant;\n\n if (typeof message === 'object' && message !== null) {\n title = message.title || message.text || '';\n toastType = (message.icon || type || 'info') as ToastVariant;\n } else {\n title = message;\n toastType = (type || 'info') as ToastVariant;\n }\n\n // Suppress the default addToCart toast when the theme opted out (addToCartToast=false)\n // or renders its own rich toast (enable_add_product_toast) so they don't double up.\n if (shouldSuppressAddToCartToast) {\n return;\n }\n\n if (dispatchNativeAlert(toastType, title)) {\n return;\n }\n\n if (toastType === 'success') {\n toast.success(title, { duration: 3000 });\n } else if (toastType === 'error') {\n toast.error(title, { duration: 3000 });\n } else if (toastType === 'warning') {\n toast.warning(title, { duration: 3000 });\n } else {\n toast.info(title, { duration: 3000 });\n }\n };\n\n salla.notify.setNotifier(handleNotify);\n return () => {\n salla.notify?.setNotifier?.(() => {});\n };\n }, [addToCartToast]);\n\n useEffect(() => {\n if (flashShownRef.current || typeof window === 'undefined') return;\n\n const params = new URLSearchParams(window.location.search);\n const successMsg = params.get('success');\n const dangerMsg = params.get('danger');\n\n if (!successMsg && !dangerMsg) return;\n\n flashShownRef.current = true;\n\n const message = successMsg || dangerMsg || '';\n const toastType = dangerMsg ? 'error' : 'success';\n\n const url = new URL(window.location.href);\n url.searchParams.delete('success');\n url.searchParams.delete('danger');\n window.history.replaceState({}, '', url.toString());\n\n const timer = setTimeout(() => {\n if (dispatchNativeAlert(toastType, message)) return;\n\n if (toastType === 'success') {\n toast.success(message, { duration: 3000 });\n } else {\n toast.error(message, { duration: 3000 });\n }\n }, 100);\n\n return () => clearTimeout(timer);\n }, []);\n\n return (\n <SonnerToaster\n position={position}\n // Keep sonner's default gaps (24px desktop / 16px mobile) but clear the\n // native status bar inset (--app-safe-area-top, set by useSafeAreaInset)\n // so top-positioned toasts aren't covered in the app webview.\n offset={{ top: 'calc(var(--app-safe-area-top, 0px) + 24px)' }}\n mobileOffset={{ top: 'calc(var(--app-safe-area-top, 0px) + 16px)' }}\n toastOptions={{\n classNames: toastClassNames,\n style: {\n fontFamily: 'var(--font-main, inherit)',\n },\n }}\n style={{\n fontFamily: 'var(--font-main, inherit)',\n }}\n />\n );\n}\n\nexport type { ToasterProps } from 'sonner';\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { lazy } from 'react';
|
|
2
|
+
|
|
3
|
+
// src/components/cart/lazy.ts
|
|
4
|
+
var LazyCartItem = lazy(() => import('./CartItem-YPIGZYJX.js').then((m) => ({ default: m.CartItem })));
|
|
5
|
+
var LazyCartSummary = lazy(
|
|
6
|
+
() => import('./CartSummary-FHG4IR4S.js').then((m) => ({ default: m.CartSummary }))
|
|
7
|
+
);
|
|
8
|
+
var LazySeoCartWidget = lazy(
|
|
9
|
+
() => import('./SeoCartWidget-N6KHTRZA.js').then((m) => ({ default: m.SeoCartWidget }))
|
|
10
|
+
);
|
|
11
|
+
|
|
12
|
+
export { LazyCartItem, LazyCartSummary, LazySeoCartWidget };
|
|
13
|
+
//# sourceMappingURL=chunk-P4M64WVZ.js.map
|
|
14
|
+
//# sourceMappingURL=chunk-P4M64WVZ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/cart/lazy.ts"],"names":[],"mappings":";;;AAMO,IAAM,YAAA,GAAe,IAAA,CAAK,MAAM,OAAO,wBAAY,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,MAAO,EAAE,OAAA,EAAS,CAAA,CAAE,QAAA,GAAW,CAAC;AAE3F,IAAM,eAAA,GAAkB,IAAA;AAAA,EAAK,MAClC,OAAO,2BAAe,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,MAAO,EAAE,OAAA,EAAS,CAAA,CAAE,WAAA,EAAY,CAAE;AAClE;AAEO,IAAM,iBAAA,GAAoB,IAAA;AAAA,EAAK,MACpC,OAAO,6BAAiB,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,MAAO,EAAE,OAAA,EAAS,CAAA,CAAE,aAAA,EAAc,CAAE;AACtE","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/components/cart/lazy.ts"],"names":[],"mappings":";;;AAMO,IAAM,YAAA,GAAe,IAAA,CAAK,MAAM,OAAO,wBAAY,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,MAAO,EAAE,OAAA,EAAS,CAAA,CAAE,QAAA,GAAW,CAAC;AAE3F,IAAM,eAAA,GAAkB,IAAA;AAAA,EAAK,MAClC,OAAO,2BAAe,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,MAAO,EAAE,OAAA,EAAS,CAAA,CAAE,WAAA,EAAY,CAAE;AAClE;AAEO,IAAM,iBAAA,GAAoB,IAAA;AAAA,EAAK,MACpC,OAAO,6BAAiB,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,MAAO,EAAE,OAAA,EAAS,CAAA,CAAE,aAAA,EAAc,CAAE;AACtE","file":"chunk-P4M64WVZ.js","sourcesContent":["import { lazy } from 'react';\n\n/**\n * Lazy-loaded cart components\n * Use these for code-splitting cart sections\n */\nexport const LazyCartItem = lazy(() => import('./CartItem').then((m) => ({ default: m.CartItem })));\n\nexport const LazyCartSummary = lazy(() =>\n import('./CartSummary').then((m) => ({ default: m.CartSummary }))\n);\n\nexport const LazySeoCartWidget = lazy(() =>\n import('./SeoCartWidget').then((m) => ({ default: m.SeoCartWidget }))\n);\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { hookRegistry } from './chunk-
|
|
2
|
-
import { useTwilight } from './chunk-
|
|
1
|
+
import { hookRegistry } from './chunk-GU2KUQVD.js';
|
|
2
|
+
import { useTwilight } from './chunk-DF6FBKDN.js';
|
|
3
3
|
import { useState, useEffect } from 'react';
|
|
4
4
|
import { SallaHook as SallaHook$1 } from '@salla.sa/twilight-components-react/hook';
|
|
5
5
|
import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
|
|
@@ -47,14 +47,7 @@ function HookSlot({
|
|
|
47
47
|
twilight
|
|
48
48
|
};
|
|
49
49
|
const handlers = hookRegistry.getHandlers(hookName);
|
|
50
|
-
const reactHooks = handlers.length > 0 ? /* @__PURE__ */ jsx(Fragment, { children: handlers.map((def
|
|
51
|
-
HookHandlerComponent,
|
|
52
|
-
{
|
|
53
|
-
handler: def.handler,
|
|
54
|
-
context: fullContext
|
|
55
|
-
},
|
|
56
|
-
`${hookName}-${index}`
|
|
57
|
-
)) }) : fallback;
|
|
50
|
+
const reactHooks = handlers.length > 0 ? /* @__PURE__ */ jsx(Fragment, { children: handlers.map((def) => /* @__PURE__ */ jsx(HookHandlerComponent, { handler: def.handler, context: fullContext }, def.id)) }) : fallback;
|
|
58
51
|
const shouldRenderSallaHook = ssr || isClient;
|
|
59
52
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
60
53
|
shouldRenderSallaHook && /* @__PURE__ */ jsx(SallaHook, { name: hookName }),
|
|
@@ -63,5 +56,5 @@ function HookSlot({
|
|
|
63
56
|
}
|
|
64
57
|
|
|
65
58
|
export { HookSlot, useIsClient };
|
|
66
|
-
//# sourceMappingURL=chunk-
|
|
67
|
-
//# sourceMappingURL=chunk-
|
|
59
|
+
//# sourceMappingURL=chunk-Q7VWURUR.js.map
|
|
60
|
+
//# sourceMappingURL=chunk-Q7VWURUR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/hooks/useIsClient.ts","../src/hooks/HookSlot.tsx"],"names":["SallaHookComponent","useState","useEffect"],"mappings":";;;;;;AAOO,SAAS,WAAA,GAAuB;AACrC,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,SAAS,KAAK,CAAA;AAC9C,EAAA,SAAA,CAAU,MAAM,WAAA,CAAY,IAAI,CAAA,EAAG,EAAE,CAAA;AACrC,EAAA,OAAO,QAAA;AACT;AC2FA,SAAS,oBAAA,CAAqB;AAAA,EAC5B,OAAA;AAAA,EACA;AACF,CAAA,EAG6B;AAC3B,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,QAAQ,OAAO,CAAA;AAE9B,IAAA,IAAI,MAAA,KAAW,IAAA,IAAQ,MAAA,KAAW,KAAA,CAAA,EAAW;AAC3C,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,uCAAU,QAAA,EAAA,MAAA,EAAO,CAAA;AAAA,EACnB,SAAS,KAAA,EAAO;AACd,IAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,aAAA,EAAe;AAC1C,MAAA,MAAA,CAAO,KAAA,EAAO,MAAA,EAAQ,KAAA,CAAM,8BAAA,EAAgC,KAAK,CAAA;AAAA,IACnE;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAEA,SAAS,SAAA,CAAU,EAAE,IAAA,EAAK,EAAqB;AAC7C,EAAA,uBAAO,GAAA,CAACA,eAAmB,IAAA,EAAY,CAAA;AACzC;AAEO,SAAS,QAAA,CAAS;AAAA,EACvB,IAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA,GAAW,IAAA;AAAA,EACX,GAAA,GAAM;AACR,CAAA,EAA4C;AAC1C,EAAA,MAAM,QAAA,GAAW,OAAO,IAAA,KAAS,QAAA,GAAW,IAAA,GAAO,IAAA;AACnD,EAAA,MAAM,GAAG,WAAW,CAAA,GAAIC,SAAS,CAAC,CAAA;AAClC,EAAA,MAAM,WAAW,WAAA,EAAY;AAC7B,EAAA,MAAM,WAAW,WAAA,EAAY;AAE7B,EAAAC,UAAU,MAAM;AACd,IAAA,OAAO,YAAA,CAAa,UAAU,QAAA,EAAU,MAAM,YAAY,CAAC,CAAA,KAAM,CAAA,GAAI,CAAC,CAAC,CAAA;AAAA,EACzE,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,MAAM,WAAA,GAA2B;AAAA,IAC/B,GAAG,OAAA;AAAA,IACH;AAAA,GACF;AAEA,EAAA,MAAM,QAAA,GAAW,YAAA,CAAa,WAAA,CAAY,QAAQ,CAAA;AAGlD,EAAA,MAAM,UAAA,GACJ,SAAS,MAAA,GAAS,CAAA,mCAEb,QAAA,EAAA,QAAA,CAAS,GAAA,CAAI,CAAC,GAAA,qBACb,GAAA,CAAC,wBAAkC,OAAA,EAAS,GAAA,CAAI,SAAS,OAAA,EAAS,WAAA,EAAA,EAAvC,IAAI,EAAgD,CAChF,GACH,CAAA,GAEA,QAAA;AAMJ,EAAA,MAAM,wBAAwB,GAAA,IAAO,QAAA;AAErC,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,qBAAA,oBAAyB,GAAA,CAAC,SAAA,EAAA,EAAU,IAAA,EAAM,QAAA,EAAU,CAAA;AAAA,IACpD;AAAA,GAAA,EACH,CAAA;AAEJ","file":"chunk-Q7VWURUR.js","sourcesContent":["import { useEffect, useState } from 'react';\n\n/**\n * Returns true only after the component mounts on the client.\n * Useful for avoiding hydration mismatches with browser-only APIs\n * or web components that inject DOM content before React hydrates.\n */\nexport function useIsClient(): boolean {\n const [isClient, setIsClient] = useState(false);\n useEffect(() => setIsClient(true), []);\n return isClient;\n}\n","import React, { useEffect, useState } from 'react';\nimport { SallaHook as SallaHookComponent } from '@salla.sa/twilight-components-react/hook';\nimport { hookRegistry } from './HookRegistry';\nimport { useIsClient } from './useIsClient';\nimport { useTwilight } from '../providers/twilight-context';\nimport type { HookHandler, HookName } from '../types';\nimport type { TwilightContextValue } from '../types/twilight';\n\n/**\n * HookSlot - Renders hook handlers and Salla web component hook slots\n *\n * A React component that renders all registered hooks for a given hook name,\n * along with a custom `<salla-hook>` element for the Salla SDK to hook into.\n * Supports React hook handlers and falls back to rendering fallback content\n * when no hooks are registered.\n *\n * Handlers receive context with full twilight data merged in:\n * - isReady, store, theme, currency, config, api, salla\n *\n * @example\n * ```tsx\n * function Header() {\n * return (\n * <header>\n * <HookSlot name=\"header.before\" />\n * <nav>Main navigation</nav>\n * <HookSlot name=\"header.after\" fallback={<SearchForm />} />\n * </header>\n * );\n * }\n * ```\n *\n * @example Using twilight context in hook handler\n * ```tsx\n * import type { HookContext } from '@salla.sa/twilight-theme-engine';\n *\n * hookRegistry.register('body:end', (context: HookContext) => {\n * const { twilight } = context;\n * if (!twilight?.theme?.settings?.enable_toast) return null;\n * return <MyToast />;\n * });\n *\n * // With custom context - extend the interface\n * interface ProductHookContext extends HookContext {\n * digital_files_settings?: DigitalFilesSettings;\n * }\n * hookRegistry.register('product:single.description', (context: ProductHookContext) => {\n * const { digital_files_settings } = context;\n * if (!digital_files_settings) return null;\n * return <DigitalFilesSettings {...digital_files_settings} />;\n * });\n * ```\n *\n * Note: Add `salla-hook{all:unset;display:none}` to your global CSS for proper styling.\n */\n\n/**\n * Hook context with full twilight context merged in.\n * Use this type for hook handlers to get proper DX.\n *\n * @example\n * ```tsx\n * // Basic usage with twilight context only\n * hookRegistry.register('body:end', (context: HookContext) => {\n * const { twilight } = context;\n * if (!twilight?.theme?.settings?.enable_toast) return null;\n * return <MyToast />;\n * });\n *\n * // With custom context - extend the interface\n * interface MyHookContext extends HookContext {\n * digital_files_settings?: DigitalFilesSettings;\n * }\n * hookRegistry.register('product:single.description', (context: MyHookContext) => {\n * const { digital_files_settings } = context;\n * if (!digital_files_settings) return null;\n * return <DigitalFilesSettings {...digital_files_settings} />;\n * });\n * ```\n */\nexport interface HookContext {\n /** Full twilight context (store, theme, currency, etc.) */\n twilight: TwilightContextValue;\n /** Custom context passed via HookSlot context prop */\n [K: string]: unknown;\n}\n\nexport interface HookSlotProps {\n /** The hook name to render handlers for (HookName enum or string) */\n name: HookName | string;\n /** Context data passed to each hook handler (merged with twilight context) */\n context?: Record<string, unknown>;\n /** Fallback content when no hook handlers are registered */\n fallback?: React.ReactNode;\n /**\n * Render <SallaHook> during SSR. Default is client-only to avoid\n * hydration mismatches when external JS injects DOM content.\n * Set to true for head hooks where no external JS injection occurs.\n */\n ssr?: boolean;\n}\n\nfunction HookHandlerComponent({\n handler,\n context,\n}: {\n handler: HookHandler;\n context: HookContext;\n}): React.JSX.Element | null {\n try {\n const result = handler(context);\n\n if (result === null || result === undefined) {\n return null;\n }\n\n return <>{result}</>;\n } catch (error) {\n if (process.env.NODE_ENV === 'development') {\n window.salla?.logger?.error('HookSlot::Hook handler error', error);\n }\n return null;\n }\n}\n\nfunction SallaHook({ name }: { name: string }) {\n return <SallaHookComponent name={name} />;\n}\n\nexport function HookSlot({\n name,\n context,\n fallback = null,\n ssr = false,\n}: HookSlotProps): React.JSX.Element | null {\n const hookName = typeof name === 'string' ? name : name;\n const [, forceUpdate] = useState(0);\n const twilight = useTwilight();\n const isClient = useIsClient();\n\n useEffect(() => {\n return hookRegistry.subscribe(hookName, () => forceUpdate((n) => n + 1));\n }, [hookName]);\n\n const fullContext: HookContext = {\n ...context,\n twilight,\n };\n\n const handlers = hookRegistry.getHandlers(hookName);\n\n // Render React hook handlers if registered\n const reactHooks =\n handlers.length > 0 ? (\n <>\n {handlers.map((def) => (\n <HookHandlerComponent key={def.id} handler={def.handler} context={fullContext} />\n ))}\n </>\n ) : (\n fallback\n );\n\n // Client-only by default to avoid hydration mismatches from external JS\n // injecting DOM content into <salla-hook> before React hydrates.\n // Head hooks use ssr=true since no external JS injection occurs there.\n const shouldRenderSallaHook = ssr || isClient;\n\n return (\n <>\n {shouldRenderSallaHook && <SallaHook name={hookName} />}\n {reactHooks}\n </>\n );\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { orThrow } from './chunk-
|
|
2
|
-
import { getAuthToken, api } from './chunk-
|
|
1
|
+
import { orThrow } from './chunk-2ZRLSZ4V.js';
|
|
2
|
+
import { getAuthToken, api } from './chunk-2TB2LTL2.js';
|
|
3
3
|
import { queryOptions } from '@tanstack/react-query';
|
|
4
4
|
|
|
5
5
|
var loyalty = {
|
|
@@ -29,5 +29,5 @@ var loyalty = {
|
|
|
29
29
|
};
|
|
30
30
|
|
|
31
31
|
export { loyalty };
|
|
32
|
-
//# sourceMappingURL=chunk-
|
|
33
|
-
//# sourceMappingURL=chunk-
|
|
32
|
+
//# sourceMappingURL=chunk-RINZVHVS.js.map
|
|
33
|
+
//# sourceMappingURL=chunk-RINZVHVS.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/api/loyalty.ts"],"names":[],"mappings":";;;;AAKO,IAAM,OAAA,GAAU;AAAA,EACrB,KAAK,YAA8B;AACjC,IAAA,MAAM,EAAE,MAAK,GAAI,MAAM,IAAI,GAAA,CAAI,SAAS,EAAE,IAAA,EAAwB;AAClE,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AAAA,EAEA,UAAA,EAAY,MAAwB,OAAA,CAAQ,OAAA,CAAQ,KAAK,CAAA;AAAA,EAEzD,kBAAkB,YAA6B;AAC7C,IAAA,MAAM,WAAW,MAAM,GAAA,CAAI,GAAA,CAAI,gBAAgB,EAAE,IAAA,EAA2B;AAC5E,IAAA,OAAO,QAAA,CAAS,OAAA;AAAA,EAClB,CAAA;AAAA,EAEA,OAAA,EAAS;AAAA,IACP,MAAA,EAAQ,MACN,YAAA,CAAa;AAAA,MACX,QAAA,EAAU,CAAC,SAAS,CAAA;AAAA,MACpB,OAAA,EAAS,MAAM,OAAA,CAAQ,GAAA;AAAI,KAC5B,CAAA;AAAA,IACH,MAAA,EAAQ,MACN,YAAA,CAA4B;AAAA,MAC1B,QAAA,EAAU,CAAC,SAAA,EAAW,QAAQ,CAAA;AAAA,MAC9B,OAAA,EAAS,MAAM,OAAA,CAAQ,gBAAA,EAAiB;AAAA;AAAA;AAAA,MAGxC,OAAA,EAAS,CAAC,CAAC,YAAA,EAAa;AAAA,MACxB,SAAA,EAAW;AAAA,KACZ;AAAA;AAEP","file":"chunk-RINZVHVS.js","sourcesContent":["import { queryOptions } from '@tanstack/react-query';\nimport { api, getAuthToken } from './client';\nimport type { Loyalty, PointBalanceResponse } from '../routes/loyalty/types';\nimport { orThrow } from '../providers/NavigationProvider';\n\nexport const loyalty = {\n get: async (): Promise<Loyalty> => {\n const { data } = await api.get('loyalty').json<{ data: Loyalty }>();\n return data;\n },\n\n getOrThrow: (): Promise<Loyalty> => orThrow(loyalty.get()),\n\n getPointsBalance: async (): Promise<number> => {\n const response = await api.get('balance/points').json<PointBalanceResponse>();\n return response.balance;\n },\n\n queries: {\n detail: () =>\n queryOptions({\n queryKey: ['loyalty'],\n queryFn: () => loyalty.get(),\n }),\n points: () =>\n queryOptions<number | null>({\n queryKey: ['loyalty', 'points'],\n queryFn: () => loyalty.getPointsBalance(),\n // Points are customer-scoped; skip for guests (no token) — the request would\n // otherwise 400 with `token_not_provided`.\n enabled: !!getAuthToken(),\n staleTime: 30_000,\n }),\n },\n};\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { HookSlot } from './chunk-
|
|
2
|
-
import { useTwilight } from './chunk-
|
|
1
|
+
import { HookSlot } from './chunk-Q7VWURUR.js';
|
|
2
|
+
import { useTwilight } from './chunk-DF6FBKDN.js';
|
|
3
3
|
import { useEffect } from 'react';
|
|
4
4
|
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
5
5
|
|
|
@@ -29,5 +29,5 @@ function WidgetHead() {
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
export { WidgetHead, pushEqualHeightConfig };
|
|
32
|
-
//# sourceMappingURL=chunk-
|
|
33
|
-
//# sourceMappingURL=chunk-
|
|
32
|
+
//# sourceMappingURL=chunk-RJPPO3ET.js.map
|
|
33
|
+
//# sourceMappingURL=chunk-RJPPO3ET.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/layout/WidgetHead.tsx"],"names":[],"mappings":";;;;;AAUO,SAAS,sBAAsB,QAAA,EAAyC;AAC7E,EAAA,MAAM,SAAA,GAAY,SAAS,qCAAqC,CAAA;AAChE,EAAA,IAAI,SAAA,KAAc,MAAA,IAAa,SAAA,KAAc,IAAA,EAAM;AAEnD,EAAA,MAAA,CAAO,SAAA,GAAY,MAAA,CAAO,SAAA,IAAa,EAAC;AACxC,EAAA,MAAA,CAAO,UAAU,IAAA,CAAK;AAAA,IACpB,WAAA,EAAa;AAAA,MACX,SAAA,EAAW,QAAQ,SAAS,CAAA;AAAA,MAC5B,GAAA,EAAK,MAAA,CAAO,QAAA,CAAS,uCAAuC,KAAK,GAAG,CAAA;AAAA,MACpE,SAAA,EAAW,MAAA,CAAO,QAAA,CAAS,kCAAkC,KAAK,KAAK;AAAA;AACzE,GACD,CAAA;AACH;AAcO,SAAS,UAAA,GAAa;AAC3B,EAAA,MAAM,EAAE,KAAA,EAAM,GAAI,WAAA,EAAY;AAG9B,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,QAAA,GAAY,KAAA,CAAM,QAAA,IAAmD,EAAC;AAC5E,IAAA,qBAAA,CAAsB,QAAQ,CAAA;AAAA,EAChC,GAAG,CAAC,KAAA,CAAM,EAAA,EAAI,KAAA,CAAM,QAAQ,CAAC,CAAA;AAE7B,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,QAAA,EAAA,EAAS,IAAA,EAAK,YAAA,EAAa,GAAA,EAAG,IAAA,EAAC,CAAA;AAAA,oBAChC,GAAA,CAAC,QAAA,EAAA,EAAS,IAAA,EAAK,MAAA,EAAO,KAAG,IAAA,EAAC,CAAA;AAAA,oBAC1B,GAAA,CAAC,QAAA,EAAA,EAAS,IAAA,EAAK,UAAA,EAAW,KAAG,IAAA,EAAC;AAAA,GAAA,EAChC,CAAA;AAEJ","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/components/layout/WidgetHead.tsx"],"names":[],"mappings":";;;;;AAUO,SAAS,sBAAsB,QAAA,EAAyC;AAC7E,EAAA,MAAM,SAAA,GAAY,SAAS,qCAAqC,CAAA;AAChE,EAAA,IAAI,SAAA,KAAc,MAAA,IAAa,SAAA,KAAc,IAAA,EAAM;AAEnD,EAAA,MAAA,CAAO,SAAA,GAAY,MAAA,CAAO,SAAA,IAAa,EAAC;AACxC,EAAA,MAAA,CAAO,UAAU,IAAA,CAAK;AAAA,IACpB,WAAA,EAAa;AAAA,MACX,SAAA,EAAW,QAAQ,SAAS,CAAA;AAAA,MAC5B,GAAA,EAAK,MAAA,CAAO,QAAA,CAAS,uCAAuC,KAAK,GAAG,CAAA;AAAA,MACpE,SAAA,EAAW,MAAA,CAAO,QAAA,CAAS,kCAAkC,KAAK,KAAK;AAAA;AACzE,GACD,CAAA;AACH;AAcO,SAAS,UAAA,GAAa;AAC3B,EAAA,MAAM,EAAE,KAAA,EAAM,GAAI,WAAA,EAAY;AAG9B,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,QAAA,GAAY,KAAA,CAAM,QAAA,IAAmD,EAAC;AAC5E,IAAA,qBAAA,CAAsB,QAAQ,CAAA;AAAA,EAChC,GAAG,CAAC,KAAA,CAAM,EAAA,EAAI,KAAA,CAAM,QAAQ,CAAC,CAAA;AAE7B,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,QAAA,EAAA,EAAS,IAAA,EAAK,YAAA,EAAa,GAAA,EAAG,IAAA,EAAC,CAAA;AAAA,oBAChC,GAAA,CAAC,QAAA,EAAA,EAAS,IAAA,EAAK,MAAA,EAAO,KAAG,IAAA,EAAC,CAAA;AAAA,oBAC1B,GAAA,CAAC,QAAA,EAAA,EAAS,IAAA,EAAK,UAAA,EAAW,KAAG,IAAA,EAAC;AAAA,GAAA,EAChC,CAAA;AAEJ","file":"chunk-RJPPO3ET.js","sourcesContent":["import { useEffect } from 'react';\nimport { useTwilight } from '../../providers/twilight-context';\nimport { HookSlot } from '../../hooks/HookSlot';\n\n/**\n * Pushes the equal-height product card configuration to the GTM dataLayer.\n * Mirrors PHP `HeadWidget::run()` -> `GoogleTagManager::set('equalHeight', ...)`.\n *\n * @param settings - Flat settings map from the store (keyed by dot-path strings).\n */\nexport function pushEqualHeightConfig(settings: Record<string, unknown>): void {\n const isEnabled = settings['products::card.equal-height.enabled'];\n if (isEnabled === undefined || isEnabled === null) return;\n\n window.dataLayer = window.dataLayer ?? [];\n window.dataLayer.push({\n equalHeight: {\n isEnabled: Boolean(isEnabled),\n max: Number(settings['products::card.equal-height.max-pixel'] ?? 300),\n classType: String(settings['products::card.equal-height.type'] ?? 'min'),\n },\n });\n}\n\n/**\n * WidgetHead - Client-side head infrastructure widget.\n *\n * Handles runtime-only head operations that cannot be done in SSR head():\n * - Pushes `equalHeight` config to GTM dataLayer (requires window).\n * - Exposes `head:start`, `head`, and `head:end` HookSlots for theme customisation.\n *\n * Static head elements (favicon, msapplication tiles, theme colors, hreflang, custom CSS/JS)\n * are handled in __root.tsx head() function.\n *\n * Renders no visible UI.\n */\nexport function WidgetHead() {\n const { store } = useTwilight();\n\n // ── equalHeight → GTM dataLayer ───────────────────────────────────────────\n useEffect(() => {\n const settings = (store.settings as unknown as Record<string, unknown>) ?? {};\n pushEqualHeightConfig(settings);\n }, [store.id, store.settings]);\n\n return (\n <>\n <HookSlot name=\"head:start\" ssr />\n <HookSlot name=\"head\" ssr />\n <HookSlot name=\"head:end\" ssr />\n </>\n );\n}\n"]}
|
|
@@ -4,7 +4,7 @@ export { BlogSkeleton, BreadcrumbSkeleton, CustomerLayoutSkeleton, CustomerPageS
|
|
|
4
4
|
|
|
5
5
|
// src/components/common/lazy.ts
|
|
6
6
|
var LazyBreadcrumb = lazy(
|
|
7
|
-
() => import('./Breadcrumb-
|
|
7
|
+
() => import('./Breadcrumb-KINELHN4.js').then((m) => ({ default: m.Breadcrumb }))
|
|
8
8
|
);
|
|
9
9
|
var LazyNoContent = lazy(
|
|
10
10
|
() => import('./NoContent-63TMCPGY.js').then((m) => ({ default: m.NoContent }))
|
|
@@ -16,7 +16,7 @@ var LazyCurrencySymbol = lazy(
|
|
|
16
16
|
() => import('./CurrencySymbol-TARAYUOT.js').then((m) => ({ default: m.CurrencySymbol }))
|
|
17
17
|
);
|
|
18
18
|
var LazyErrorPage = lazy(
|
|
19
|
-
() => import('./ErrorPage-
|
|
19
|
+
() => import('./ErrorPage-XGBROULF.js').then((m) => ({ default: m.ErrorPage }))
|
|
20
20
|
);
|
|
21
21
|
|
|
22
22
|
// src/utils/cdn-image.ts
|
|
@@ -165,5 +165,5 @@ function DeferredData({ promise, fallback, children }) {
|
|
|
165
165
|
}
|
|
166
166
|
|
|
167
167
|
export { DeferredData, Image, LazyBreadcrumb, LazyCurrencySymbol, LazyErrorPage, LazyNoContent, LazyRenderWhenVisible, resolveDeferred };
|
|
168
|
-
//# sourceMappingURL=chunk-
|
|
169
|
-
//# sourceMappingURL=chunk-
|
|
168
|
+
//# sourceMappingURL=chunk-SM7VMQZY.js.map
|
|
169
|
+
//# sourceMappingURL=chunk-SM7VMQZY.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/common/lazy.ts","../src/utils/cdn-image.ts","../src/components/common/Image.tsx","../src/components/common/DeferredData.tsx"],"names":["Image","memo","DeferredRenderer","jsx"],"mappings":"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","file":"chunk-SM7VMQZY.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","const CDN_HOSTS = ['cdn.salla.sa', 'cdn.salla.network', 'cdn.files.salla.network'];\n\nexport function getCdnImageUrl(\n url: string | undefined,\n options: { width?: number | string; height?: number | string }\n): string | undefined {\n if (!url) return url;\n\n try {\n const parsed = new URL(url);\n if (!CDN_HOSTS.includes(parsed.hostname)) return url;\n if (parsed.pathname.startsWith('/cdn-cgi/image/')) return url;\n\n const w = options.width ? Number(options.width) : undefined;\n const h = options.height ? Number(options.height) : undefined;\n if (!w && !h) return url;\n\n const parts: string[] = ['fit=scale-down', 'onerror=redirect', 'format=auto'];\n if (w) parts.push(`width=${w}`);\n if (h) parts.push(`height=${h}`);\n\n return `${parsed.origin}/cdn-cgi/image/${parts.join(',')}${parsed.pathname}${parsed.search}`;\n } catch {\n return url;\n }\n}\n","import { memo } from 'react';\nimport { 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\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 */\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 ...rest\n}: ImageProps) {\n if (!src) return null;\n\n const optimizedSrc = getCdnImageUrl(src, { width, height });\n const optimizedMobileSrc = getCdnImageUrl(mobileSrc, { width, height });\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 imgElement = optimizedMobileSrc ? (\n <picture>\n <source media={`(max-width: ${mobileBreakpoint}px)`} srcSet={optimizedMobileSrc} />\n <img\n src={optimizedSrc}\n alt={alt}\n className={imgClasses}\n width={width}\n height={height}\n {...loadingProps}\n {...rest}\n />\n </picture>\n ) : (\n <img\n src={optimizedSrc}\n alt={alt}\n className={imgClasses}\n width={width}\n height={height}\n {...loadingProps}\n {...rest}\n />\n );\n\n if (noWrapper || !aspectRatio) {\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,11 +1,11 @@
|
|
|
1
|
-
import { product } from './chunk-
|
|
2
|
-
import { ProductCard } from './chunk-
|
|
1
|
+
import { product } from './chunk-ZNOJPVX3.js';
|
|
2
|
+
import { ProductCard } from './chunk-CJEBLY6D.js';
|
|
3
3
|
import { registry } from './chunk-G7ALL4BC.js';
|
|
4
|
-
import { useTranslation } from './chunk-
|
|
5
|
-
import { Image, LazyRenderWhenVisible } from './chunk-
|
|
4
|
+
import { useTranslation } from './chunk-TYNZ5B2B.js';
|
|
5
|
+
import { Image, LazyRenderWhenVisible } from './chunk-SM7VMQZY.js';
|
|
6
6
|
import { Link } from './chunk-AXW67SY7.js';
|
|
7
|
-
import { TwilightContext } from './chunk-
|
|
8
|
-
import { memo, useState, useCallback, useEffect, lazy, Component, useRef, useMemo, Suspense } from 'react';
|
|
7
|
+
import { TwilightContext } from './chunk-DF6FBKDN.js';
|
|
8
|
+
import { memo, useState, useCallback, createElement, useEffect, lazy, Component, useRef, useMemo, Suspense } from 'react';
|
|
9
9
|
import { SallaProductsSlider, SallaProductsList, ProductsSliderSkeleton, ListSkeleton, SliderSkeleton, BackgroundSliderSkeleton, BulletDeliverySkeleton, ReviewItemSkeleton, FixedProductsSkeleton, Pulse } from '@salla.sa/twilight-components-react';
|
|
10
10
|
import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
|
|
11
11
|
import { useQuery } from '@tanstack/react-query';
|
|
@@ -65,11 +65,18 @@ function ProductsSlider({ data }) {
|
|
|
65
65
|
var StoreFeatures = memo(function StoreFeatures2({ data }) {
|
|
66
66
|
const { features } = data;
|
|
67
67
|
if (!features.length) return null;
|
|
68
|
-
return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx("div", { className: "grid grid-cols-[repeat(2,minmax(0,1fr))] md:grid-cols-[repeat(3,minmax(0,1fr))] gap-4 sm:gap-6 xl:gap-8", children: features.map((feature
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
68
|
+
return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx("div", { className: "grid grid-cols-[repeat(2,minmax(0,1fr))] md:grid-cols-[repeat(3,minmax(0,1fr))] gap-4 sm:gap-6 xl:gap-8", children: features.map((feature) => /* @__PURE__ */ jsxs(
|
|
69
|
+
"div",
|
|
70
|
+
{
|
|
71
|
+
className: "s-block--features__item",
|
|
72
|
+
children: [
|
|
73
|
+
/* @__PURE__ */ jsx("div", { className: "feature-icon", children: /* @__PURE__ */ jsx("i", { className: feature.icon }) }),
|
|
74
|
+
/* @__PURE__ */ jsx("h2", { children: feature.title }),
|
|
75
|
+
/* @__PURE__ */ jsx("p", { children: feature.description })
|
|
76
|
+
]
|
|
77
|
+
},
|
|
78
|
+
`${feature.icon}:${feature.title}:${feature.description ?? ""}`
|
|
79
|
+
)) }) });
|
|
73
80
|
});
|
|
74
81
|
var FixedBanner = memo(function FixedBanner2(props) {
|
|
75
82
|
const { data, priority = false } = props;
|
|
@@ -364,17 +371,25 @@ var PhotosSlider = memo(function PhotosSlider2({ data }) {
|
|
|
364
371
|
pagination: true,
|
|
365
372
|
id: `photos-${position}-slider`,
|
|
366
373
|
sliderConfig: { watchOverflow: true },
|
|
367
|
-
children: /* @__PURE__ */ jsx("div", { slot: "items", children: items.map((item, index) => /* @__PURE__ */ jsx(
|
|
368
|
-
|
|
374
|
+
children: /* @__PURE__ */ jsx("div", { slot: "items", children: items.map((item, index) => /* @__PURE__ */ jsx(
|
|
375
|
+
"div",
|
|
369
376
|
{
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
377
|
+
className: "swiper-slide",
|
|
378
|
+
style: { aspectRatio: "1200/300" },
|
|
379
|
+
children: /* @__PURE__ */ jsx(Link, { to: item.url || "#", children: /* @__PURE__ */ jsx(
|
|
380
|
+
Image,
|
|
381
|
+
{
|
|
382
|
+
src: item.image,
|
|
383
|
+
className: "w-full h-full object-contain rounded-md",
|
|
384
|
+
alt: `image-slider-${index}`,
|
|
385
|
+
width: 1200,
|
|
386
|
+
height: 300,
|
|
387
|
+
priority: index === 0
|
|
388
|
+
}
|
|
389
|
+
) })
|
|
390
|
+
},
|
|
391
|
+
item.id ?? `${item.url ?? ""}:${item.image ?? ""}`
|
|
392
|
+
)) })
|
|
378
393
|
}
|
|
379
394
|
) });
|
|
380
395
|
});
|
|
@@ -385,16 +400,16 @@ var SquarePhotos = memo(function SquarePhotos2({ data }) {
|
|
|
385
400
|
const gridCols = items.length <= 3 ? `one-row md:grid-cols-${items.length}` : "md:grid-cols-3 two-row";
|
|
386
401
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
387
402
|
title && /* @__PURE__ */ jsx("div", { className: "s-block__title", children: /* @__PURE__ */ jsx("div", { className: "right-side", children: /* @__PURE__ */ jsx("h2", { children: title }) }) }),
|
|
388
|
-
/* @__PURE__ */ jsx("div", { className: `grid ${gridCols} grid-flow-row gap-3 sm:gap-8`, children: items.map((item
|
|
403
|
+
/* @__PURE__ */ jsx("div", { className: `grid ${gridCols} grid-flow-row gap-3 sm:gap-8`, children: items.map((item) => /* @__PURE__ */ createElement(
|
|
389
404
|
Link,
|
|
390
405
|
{
|
|
406
|
+
...item.link_type === "external_link" ? { target: "_blank" } : {},
|
|
407
|
+
key: item.id ?? item.image?.url ?? item.url,
|
|
391
408
|
className: `banner-entry square-photos ${item.text ? "has-overlay with-hover" : ""}`,
|
|
392
409
|
style: { backgroundImage: `url(${item.image?.url})` },
|
|
393
|
-
to: item.url || "#"
|
|
394
|
-
...item.link_type === "external_link" ? { target: "_blank" } : {},
|
|
395
|
-
children: item.text && /* @__PURE__ */ jsx("h3", { className: "text-with-border", children: /* @__PURE__ */ jsx("span", { children: item.text }) })
|
|
410
|
+
to: item.url || "#"
|
|
396
411
|
},
|
|
397
|
-
|
|
412
|
+
item.text && /* @__PURE__ */ jsx("h3", { className: "text-with-border", children: /* @__PURE__ */ jsx("span", { children: item.text }) })
|
|
398
413
|
)) })
|
|
399
414
|
] });
|
|
400
415
|
});
|
|
@@ -466,21 +481,28 @@ function registerHomeComponents(components = DefaultHomeComponents, prefix = "ho
|
|
|
466
481
|
});
|
|
467
482
|
}
|
|
468
483
|
function DevelopmentErrorCard({ error, data }) {
|
|
469
|
-
return /* @__PURE__ */ jsxs(
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
+
return /* @__PURE__ */ jsxs(
|
|
485
|
+
"section",
|
|
486
|
+
{
|
|
487
|
+
dir: "ltr",
|
|
488
|
+
className: "s-block container overflow-hidden bg-red-50 border border-red-300 p-4",
|
|
489
|
+
children: [
|
|
490
|
+
/* @__PURE__ */ jsxs("p", { className: "text-red-800 text-sm font-bold", children: [
|
|
491
|
+
"Home Component Error: ",
|
|
492
|
+
data.path
|
|
493
|
+
] }),
|
|
494
|
+
/* @__PURE__ */ jsx("p", { className: "text-red-700 text-sm mt-2", children: error.message }),
|
|
495
|
+
/* @__PURE__ */ jsxs("details", { className: "mt-2", children: [
|
|
496
|
+
/* @__PURE__ */ jsx("summary", { className: "text-xs cursor-pointer text-red-600", children: "Stack Trace" }),
|
|
497
|
+
/* @__PURE__ */ jsx("pre", { className: "text-xs mt-1 overflow-auto max-h-32 text-red-700", children: error.stack })
|
|
498
|
+
] }),
|
|
499
|
+
/* @__PURE__ */ jsxs("details", { className: "mt-2", children: [
|
|
500
|
+
/* @__PURE__ */ jsx("summary", { className: "text-xs cursor-pointer text-red-600", children: "Component Data" }),
|
|
501
|
+
/* @__PURE__ */ jsx("pre", { className: "text-xs mt-1 overflow-auto max-h-32 text-red-700", children: JSON.stringify(data, null, 2) })
|
|
502
|
+
] })
|
|
503
|
+
]
|
|
504
|
+
}
|
|
505
|
+
);
|
|
484
506
|
}
|
|
485
507
|
var ComponentErrorBoundary = class extends Component {
|
|
486
508
|
static {
|
|
@@ -669,5 +691,5 @@ var HomeComponentRenderer = memo(function HomeComponentRenderer2({
|
|
|
669
691
|
});
|
|
670
692
|
|
|
671
693
|
export { BundleComponent, ComponentErrorBoundary, DefaultHomeComponents, FeaturedProductsStyle1, FeaturedProductsStyle2, FeaturedProductsStyle3, FixedBanner, FixedProducts, HomeComponentRenderer, LazyTestimonials, ParallaxBackground, PhotosSlider, ProductsSlider, SquarePhotos, StoreFeatures, Youtube, registerHomeComponentConfig, registerHomeComponents };
|
|
672
|
-
//# sourceMappingURL=chunk-
|
|
673
|
-
//# sourceMappingURL=chunk-
|
|
694
|
+
//# sourceMappingURL=chunk-SSZR6JBK.js.map
|
|
695
|
+
//# sourceMappingURL=chunk-SSZR6JBK.js.map
|