@salla.sa/twilight-theme-engine 1.0.0-beta.4
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/README.md +165 -0
- package/dist/AddToCartForm-HOWNKCKX.js +304 -0
- package/dist/AddToCartForm-HOWNKCKX.js.map +1 -0
- package/dist/BlogAuthorPage-W3BZIJHJ.js +101 -0
- package/dist/BlogAuthorPage-W3BZIJHJ.js.map +1 -0
- package/dist/BlogCategoryPage-AIAJ5JBR.js +101 -0
- package/dist/BlogCategoryPage-AIAJ5JBR.js.map +1 -0
- package/dist/BlogPage-4BYF2EQW.js +190 -0
- package/dist/BlogPage-4BYF2EQW.js.map +1 -0
- package/dist/BlogSinglePage-AMNAUMWW.js +187 -0
- package/dist/BlogSinglePage-AMNAUMWW.js.map +1 -0
- package/dist/BlogTagPage-ELG2H5N5.js +101 -0
- package/dist/BlogTagPage-ELG2H5N5.js.map +1 -0
- package/dist/BrandsPage-ZSO3PYAV.js +127 -0
- package/dist/BrandsPage-ZSO3PYAV.js.map +1 -0
- package/dist/Breadcrumb-N32QFMVK.js +152 -0
- package/dist/Breadcrumb-N32QFMVK.js.map +1 -0
- package/dist/CartItem-SGTGOTEC.js +171 -0
- package/dist/CartItem-SGTGOTEC.js.map +1 -0
- package/dist/CartSummary-OKDGVSX2.js +236 -0
- package/dist/CartSummary-OKDGVSX2.js.map +1 -0
- package/dist/Copyright-F3HLYXFJ.js +9 -0
- package/dist/Copyright-F3HLYXFJ.js.map +1 -0
- package/dist/CurrencySymbol-TARAYUOT.js +11 -0
- package/dist/CurrencySymbol-TARAYUOT.js.map +1 -0
- package/dist/CustomerLayout-LB4E2LHT.js +68 -0
- package/dist/CustomerLayout-LB4E2LHT.js.map +1 -0
- package/dist/ErrorPage-TK4U3ENF.js +6 -0
- package/dist/ErrorPage-TK4U3ENF.js.map +1 -0
- package/dist/Footer-UVCSKTW3.js +39 -0
- package/dist/Footer-UVCSKTW3.js.map +1 -0
- package/dist/GoogleTag-4LHWC365.js +52 -0
- package/dist/GoogleTag-4LHWC365.js.map +1 -0
- package/dist/Header-BF6SPZJC.js +15 -0
- package/dist/Header-BF6SPZJC.js.map +1 -0
- package/dist/ImageModal-WLJM3WIE.js +41 -0
- package/dist/ImageModal-WLJM3WIE.js.map +1 -0
- package/dist/LoyaltyPage-X4PHPUFC.js +188 -0
- package/dist/LoyaltyPage-X4PHPUFC.js.map +1 -0
- package/dist/MainMenu-R3EWTNNC.js +91 -0
- package/dist/MainMenu-R3EWTNNC.js.map +1 -0
- package/dist/MasterLayout-5JLM7IMW.js +39 -0
- package/dist/MasterLayout-5JLM7IMW.js.map +1 -0
- package/dist/MobileMenu-QXESUQXC.js +175 -0
- package/dist/MobileMenu-QXESUQXC.js.map +1 -0
- package/dist/NoContent-PBGESHBJ.js +21 -0
- package/dist/NoContent-PBGESHBJ.js.map +1 -0
- package/dist/NotificationsPage-V6UIPDJD.js +84 -0
- package/dist/NotificationsPage-V6UIPDJD.js.map +1 -0
- package/dist/OrderSinglePage-ZMEKPLE3.js +441 -0
- package/dist/OrderSinglePage-ZMEKPLE3.js.map +1 -0
- package/dist/OrdersPage-EAATVPYK.js +184 -0
- package/dist/OrdersPage-EAATVPYK.js.map +1 -0
- package/dist/PageSingle-Y6ARZ5LS.js +28 -0
- package/dist/PageSingle-Y6ARZ5LS.js.map +1 -0
- package/dist/PreOrderNotification-ZVTGNV7K.js +23 -0
- package/dist/PreOrderNotification-ZVTGNV7K.js.map +1 -0
- package/dist/PriceQuoteButton-RAAPL4N4.js +26 -0
- package/dist/PriceQuoteButton-RAAPL4N4.js.map +1 -0
- package/dist/ProductDetails-KTY4ZSFM.js +194 -0
- package/dist/ProductDetails-KTY4ZSFM.js.map +1 -0
- package/dist/ProfilePage-6SK34MDJ.js +64 -0
- package/dist/ProfilePage-6SK34MDJ.js.map +1 -0
- package/dist/RenderWhenVisible-TR7G2KUC.js +50 -0
- package/dist/RenderWhenVisible-TR7G2KUC.js.map +1 -0
- package/dist/SeoCartWidget-XF4GEJK7.js +109 -0
- package/dist/SeoCartWidget-XF4GEJK7.js.map +1 -0
- package/dist/SettingsPage-DPYARBPO.js +51 -0
- package/dist/SettingsPage-DPYARBPO.js.map +1 -0
- package/dist/SiftSnippet-X74S5KDO.js +29 -0
- package/dist/SiftSnippet-X74S5KDO.js.map +1 -0
- package/dist/StoreClosedNotification-KSB2GPEZ.js +91 -0
- package/dist/StoreClosedNotification-KSB2GPEZ.js.map +1 -0
- package/dist/Testimonials-MZCVP66E.js +26 -0
- package/dist/Testimonials-MZCVP66E.js.map +1 -0
- package/dist/TestimonialsPage-4OFS5Z4V.js +77 -0
- package/dist/TestimonialsPage-4OFS5Z4V.js.map +1 -0
- package/dist/ThankYouPage-C7PA3RJP.js +236 -0
- package/dist/ThankYouPage-C7PA3RJP.js.map +1 -0
- package/dist/TwilightBundles-5F2H75VV.js +46 -0
- package/dist/TwilightBundles-5F2H75VV.js.map +1 -0
- package/dist/WalletPage-66XGZKO7.js +189 -0
- package/dist/WalletPage-66XGZKO7.js.map +1 -0
- package/dist/WidgetHead-FXEPCB23.js +7 -0
- package/dist/WidgetHead-FXEPCB23.js.map +1 -0
- package/dist/WishlistPage-7ZZYHBSZ.js +144 -0
- package/dist/WishlistPage-7ZZYHBSZ.js.map +1 -0
- package/dist/ambient/salla-components.d.ts +312 -0
- package/dist/ambient/virtual-modules.d.ts +22 -0
- package/dist/api/apps.d.ts +28 -0
- package/dist/api/apps.d.ts.map +1 -0
- package/dist/api/apps.js +26 -0
- package/dist/api/apps.js.map +1 -0
- package/dist/api/blog.d.ts +61 -0
- package/dist/api/blog.d.ts.map +1 -0
- package/dist/api/brands.d.ts +25 -0
- package/dist/api/brands.d.ts.map +1 -0
- package/dist/api/brands.js +40 -0
- package/dist/api/brands.js.map +1 -0
- package/dist/api/cart.d.ts +21 -0
- package/dist/api/cart.d.ts.map +1 -0
- package/dist/api/cart.js +40 -0
- package/dist/api/cart.js.map +1 -0
- package/dist/api/category.d.ts +31 -0
- package/dist/api/category.d.ts.map +1 -0
- package/dist/api/category.js +40 -0
- package/dist/api/category.js.map +1 -0
- package/dist/api/client.d.ts +17 -0
- package/dist/api/client.d.ts.map +1 -0
- package/dist/api/client.js +7 -0
- package/dist/api/client.js.map +1 -0
- package/dist/api/home.d.ts +15 -0
- package/dist/api/home.d.ts.map +1 -0
- package/dist/api/home.js +8 -0
- package/dist/api/home.js.map +1 -0
- package/dist/api/loyalty.d.ts +25 -0
- package/dist/api/loyalty.d.ts.map +1 -0
- package/dist/api/loyalty.js +40 -0
- package/dist/api/loyalty.js.map +1 -0
- package/dist/api/menu.d.ts +16 -0
- package/dist/api/menu.d.ts.map +1 -0
- package/dist/api/menu.js +8 -0
- package/dist/api/menu.js.map +1 -0
- package/dist/api/notification.d.ts +26 -0
- package/dist/api/notification.d.ts.map +1 -0
- package/dist/api/order.d.ts +74 -0
- package/dist/api/order.d.ts.map +1 -0
- package/dist/api/order.js +40 -0
- package/dist/api/order.js.map +1 -0
- package/dist/api/page.d.ts +16 -0
- package/dist/api/page.d.ts.map +1 -0
- package/dist/api/page.js +40 -0
- package/dist/api/page.js.map +1 -0
- package/dist/api/product.d.ts +80 -0
- package/dist/api/product.d.ts.map +1 -0
- package/dist/api/product.js +40 -0
- package/dist/api/product.js.map +1 -0
- package/dist/api/profile.d.ts +9 -0
- package/dist/api/profile.d.ts.map +1 -0
- package/dist/api/profile.js +23 -0
- package/dist/api/profile.js.map +1 -0
- package/dist/api/store.d.ts +46 -0
- package/dist/api/store.d.ts.map +1 -0
- package/dist/api/store.js +8 -0
- package/dist/api/store.js.map +1 -0
- package/dist/api/translations.d.ts +15 -0
- package/dist/api/translations.d.ts.map +1 -0
- package/dist/api/translations.js +8 -0
- package/dist/api/translations.js.map +1 -0
- package/dist/api/types.d.ts +54 -0
- package/dist/api/types.d.ts.map +1 -0
- package/dist/api/types.js +3 -0
- package/dist/api/types.js.map +1 -0
- package/dist/api/user.d.ts +15 -0
- package/dist/api/user.d.ts.map +1 -0
- package/dist/api/user.js +8 -0
- package/dist/api/user.js.map +1 -0
- package/dist/api/wallet.d.ts +30 -0
- package/dist/api/wallet.d.ts.map +1 -0
- package/dist/api/wishlist.d.ts +25 -0
- package/dist/api/wishlist.d.ts.map +1 -0
- package/dist/chunk-25SSLQAJ.js +67 -0
- package/dist/chunk-25SSLQAJ.js.map +1 -0
- package/dist/chunk-2FU6CVSB.js +18 -0
- package/dist/chunk-2FU6CVSB.js.map +1 -0
- package/dist/chunk-2KF5JJU6.js +169 -0
- package/dist/chunk-2KF5JJU6.js.map +1 -0
- package/dist/chunk-2TB2LTL2.js +103 -0
- package/dist/chunk-2TB2LTL2.js.map +1 -0
- package/dist/chunk-3DCZJDDK.js +10 -0
- package/dist/chunk-3DCZJDDK.js.map +1 -0
- package/dist/chunk-3UHSMGPY.js +145 -0
- package/dist/chunk-3UHSMGPY.js.map +1 -0
- package/dist/chunk-4EQEYRZ7.js +65 -0
- package/dist/chunk-4EQEYRZ7.js.map +1 -0
- package/dist/chunk-562ZMVI3.js +592 -0
- package/dist/chunk-562ZMVI3.js.map +1 -0
- package/dist/chunk-5Q6PFLDN.js +20 -0
- package/dist/chunk-5Q6PFLDN.js.map +1 -0
- package/dist/chunk-6B6VCCMC.js +28 -0
- package/dist/chunk-6B6VCCMC.js.map +1 -0
- package/dist/chunk-6BZ5TKEV.js +44 -0
- package/dist/chunk-6BZ5TKEV.js.map +1 -0
- package/dist/chunk-6NBBXERE.js +24 -0
- package/dist/chunk-6NBBXERE.js.map +1 -0
- package/dist/chunk-6Q5BFHFA.js +88 -0
- package/dist/chunk-6Q5BFHFA.js.map +1 -0
- package/dist/chunk-6YX4RS55.js +33 -0
- package/dist/chunk-6YX4RS55.js.map +1 -0
- package/dist/chunk-7LP7D75V.js +14 -0
- package/dist/chunk-7LP7D75V.js.map +1 -0
- package/dist/chunk-A5ZRUAMT.js +16 -0
- package/dist/chunk-A5ZRUAMT.js.map +1 -0
- package/dist/chunk-B3EFOE57.js +32 -0
- package/dist/chunk-B3EFOE57.js.map +1 -0
- package/dist/chunk-BT6HEEAP.js +31 -0
- package/dist/chunk-BT6HEEAP.js.map +1 -0
- package/dist/chunk-BVSJPBJ6.js +26 -0
- package/dist/chunk-BVSJPBJ6.js.map +1 -0
- package/dist/chunk-BWFBVXT3.js +13 -0
- package/dist/chunk-BWFBVXT3.js.map +1 -0
- package/dist/chunk-CW625T2E.js +62 -0
- package/dist/chunk-CW625T2E.js.map +1 -0
- package/dist/chunk-DFMO5KBU.js +67 -0
- package/dist/chunk-DFMO5KBU.js.map +1 -0
- package/dist/chunk-DGUM43GV.js +10 -0
- package/dist/chunk-DGUM43GV.js.map +1 -0
- package/dist/chunk-EQ5ZGAVR.js +89 -0
- package/dist/chunk-EQ5ZGAVR.js.map +1 -0
- package/dist/chunk-FBFPH5BB.js +34 -0
- package/dist/chunk-FBFPH5BB.js.map +1 -0
- package/dist/chunk-G7ALL4BC.js +52 -0
- package/dist/chunk-G7ALL4BC.js.map +1 -0
- package/dist/chunk-GBWCXUPD.js +99 -0
- package/dist/chunk-GBWCXUPD.js.map +1 -0
- package/dist/chunk-GLM3RPCP.js +1167 -0
- package/dist/chunk-GLM3RPCP.js.map +1 -0
- package/dist/chunk-GN34LCTG.js +92 -0
- package/dist/chunk-GN34LCTG.js.map +1 -0
- package/dist/chunk-GO34DE35.js +247 -0
- package/dist/chunk-GO34DE35.js.map +1 -0
- package/dist/chunk-HOSHJBPS.js +52 -0
- package/dist/chunk-HOSHJBPS.js.map +1 -0
- package/dist/chunk-I5Z4NJBB.js +17 -0
- package/dist/chunk-I5Z4NJBB.js.map +1 -0
- package/dist/chunk-J37AYLWL.js +66 -0
- package/dist/chunk-J37AYLWL.js.map +1 -0
- package/dist/chunk-KCKHA75V.js +19 -0
- package/dist/chunk-KCKHA75V.js.map +1 -0
- package/dist/chunk-KIPZQN3Y.js +158 -0
- package/dist/chunk-KIPZQN3Y.js.map +1 -0
- package/dist/chunk-LBUMC5PB.js +34 -0
- package/dist/chunk-LBUMC5PB.js.map +1 -0
- package/dist/chunk-LSDIFHXZ.js +80 -0
- package/dist/chunk-LSDIFHXZ.js.map +1 -0
- package/dist/chunk-M6ICEIWY.js +25 -0
- package/dist/chunk-M6ICEIWY.js.map +1 -0
- package/dist/chunk-MTONGOJD.js +42 -0
- package/dist/chunk-MTONGOJD.js.map +1 -0
- package/dist/chunk-MXQCE3KA.js +173 -0
- package/dist/chunk-MXQCE3KA.js.map +1 -0
- package/dist/chunk-N5RSKJP4.js +65 -0
- package/dist/chunk-N5RSKJP4.js.map +1 -0
- package/dist/chunk-N7CCSGZF.js +3 -0
- package/dist/chunk-N7CCSGZF.js.map +1 -0
- package/dist/chunk-NBHI5X36.js +27 -0
- package/dist/chunk-NBHI5X36.js.map +1 -0
- package/dist/chunk-NSX6XPDU.js +673 -0
- package/dist/chunk-NSX6XPDU.js.map +1 -0
- package/dist/chunk-O2UOV5RK.js +32 -0
- package/dist/chunk-O2UOV5RK.js.map +1 -0
- package/dist/chunk-OZTGUF7K.js +66 -0
- package/dist/chunk-OZTGUF7K.js.map +1 -0
- package/dist/chunk-Q3VACSSR.js +21 -0
- package/dist/chunk-Q3VACSSR.js.map +1 -0
- package/dist/chunk-QTDGM2SO.js +123 -0
- package/dist/chunk-QTDGM2SO.js.map +1 -0
- package/dist/chunk-QYL5OHAV.js +70 -0
- package/dist/chunk-QYL5OHAV.js.map +1 -0
- package/dist/chunk-RH32IGQD.js +372 -0
- package/dist/chunk-RH32IGQD.js.map +1 -0
- package/dist/chunk-RUHSV4Z6.js +12 -0
- package/dist/chunk-RUHSV4Z6.js.map +1 -0
- package/dist/chunk-RYBA3JDM.js +33 -0
- package/dist/chunk-RYBA3JDM.js.map +1 -0
- package/dist/chunk-SBIXBX6J.js +29 -0
- package/dist/chunk-SBIXBX6J.js.map +1 -0
- package/dist/chunk-SSRNIBVV.js +75 -0
- package/dist/chunk-SSRNIBVV.js.map +1 -0
- package/dist/chunk-SVZOWI7E.js +51 -0
- package/dist/chunk-SVZOWI7E.js.map +1 -0
- package/dist/chunk-SYHTMNYF.js +89 -0
- package/dist/chunk-SYHTMNYF.js.map +1 -0
- package/dist/chunk-T72DAX7R.js +65 -0
- package/dist/chunk-T72DAX7R.js.map +1 -0
- package/dist/chunk-TCSNNCRH.js +23 -0
- package/dist/chunk-TCSNNCRH.js.map +1 -0
- package/dist/chunk-TQLEQSXE.js +48 -0
- package/dist/chunk-TQLEQSXE.js.map +1 -0
- package/dist/chunk-TRUQDEMI.js +14 -0
- package/dist/chunk-TRUQDEMI.js.map +1 -0
- package/dist/chunk-TZ3E5BN4.js +91 -0
- package/dist/chunk-TZ3E5BN4.js.map +1 -0
- package/dist/chunk-TZ4YD5CU.js +16 -0
- package/dist/chunk-TZ4YD5CU.js.map +1 -0
- package/dist/chunk-U7HAK5U7.js +105 -0
- package/dist/chunk-U7HAK5U7.js.map +1 -0
- package/dist/chunk-UE3BUFZI.js +16 -0
- package/dist/chunk-UE3BUFZI.js.map +1 -0
- package/dist/chunk-UIX3W2PN.js +56 -0
- package/dist/chunk-UIX3W2PN.js.map +1 -0
- package/dist/chunk-VVRYP6IL.js +61 -0
- package/dist/chunk-VVRYP6IL.js.map +1 -0
- package/dist/chunk-VVZNW5CB.js +49 -0
- package/dist/chunk-VVZNW5CB.js.map +1 -0
- package/dist/chunk-XHGF75TM.js +133 -0
- package/dist/chunk-XHGF75TM.js.map +1 -0
- package/dist/chunk-XUI3TRXF.js +26 -0
- package/dist/chunk-XUI3TRXF.js.map +1 -0
- package/dist/chunk-YCYTBRYB.js +30 -0
- package/dist/chunk-YCYTBRYB.js.map +1 -0
- package/dist/chunk-YMVLYYLU.js +25 -0
- package/dist/chunk-YMVLYYLU.js.map +1 -0
- package/dist/chunk-Z653O7MX.js +10 -0
- package/dist/chunk-Z653O7MX.js.map +1 -0
- package/dist/chunk-ZCH7W7DZ.js +30 -0
- package/dist/chunk-ZCH7W7DZ.js.map +1 -0
- package/dist/components/Component.d.ts +8 -0
- package/dist/components/Component.d.ts.map +1 -0
- package/dist/components/ComponentRegistry.d.ts +19 -0
- package/dist/components/ComponentRegistry.d.ts.map +1 -0
- package/dist/components/cart/CartItem.d.ts +8 -0
- package/dist/components/cart/CartItem.d.ts.map +1 -0
- package/dist/components/cart/CartSummary.d.ts +12 -0
- package/dist/components/cart/CartSummary.d.ts.map +1 -0
- package/dist/components/cart/PreOrderNotification.d.ts +2 -0
- package/dist/components/cart/PreOrderNotification.d.ts.map +1 -0
- package/dist/components/cart/PriceQuoteButton.d.ts +2 -0
- package/dist/components/cart/PriceQuoteButton.d.ts.map +1 -0
- package/dist/components/cart/SeoCartWidget.d.ts +34 -0
- package/dist/components/cart/SeoCartWidget.d.ts.map +1 -0
- package/dist/components/cart/index.d.ts +4 -0
- package/dist/components/cart/index.d.ts.map +1 -0
- package/dist/components/cart/index.js +4 -0
- package/dist/components/cart/index.js.map +1 -0
- package/dist/components/cart/lazy.d.ts +8 -0
- package/dist/components/cart/lazy.d.ts.map +1 -0
- package/dist/components/collapse/Collapse.d.ts +51 -0
- package/dist/components/collapse/Collapse.d.ts.map +1 -0
- package/dist/components/collapse/index.d.ts +36 -0
- package/dist/components/collapse/index.d.ts.map +1 -0
- package/dist/components/collapse/index.js +44 -0
- package/dist/components/collapse/index.js.map +1 -0
- package/dist/components/common/Breadcrumb.d.ts +7 -0
- package/dist/components/common/Breadcrumb.d.ts.map +1 -0
- package/dist/components/common/BreadcrumbJsonLd.d.ts +8 -0
- package/dist/components/common/BreadcrumbJsonLd.d.ts.map +1 -0
- package/dist/components/common/BreadcrumbTrail.d.ts +8 -0
- package/dist/components/common/BreadcrumbTrail.d.ts.map +1 -0
- package/dist/components/common/CurrencySymbol.d.ts +8 -0
- package/dist/components/common/CurrencySymbol.d.ts.map +1 -0
- package/dist/components/common/DeferredData.d.ts +20 -0
- package/dist/components/common/DeferredData.d.ts.map +1 -0
- package/dist/components/common/ErrorPage.d.ts +18 -0
- package/dist/components/common/ErrorPage.d.ts.map +1 -0
- package/dist/components/common/Image.d.ts +28 -0
- package/dist/components/common/Image.d.ts.map +1 -0
- package/dist/components/common/Link.d.ts +21 -0
- package/dist/components/common/Link.d.ts.map +1 -0
- package/dist/components/common/Link.types.d.ts +82 -0
- package/dist/components/common/Link.types.d.ts.map +1 -0
- package/dist/components/common/NoContent.d.ts +9 -0
- package/dist/components/common/NoContent.d.ts.map +1 -0
- package/dist/components/common/RenderWhenVisible.d.ts +23 -0
- package/dist/components/common/RenderWhenVisible.d.ts.map +1 -0
- package/dist/components/common/index.d.ts +11 -0
- package/dist/components/common/index.d.ts.map +1 -0
- package/dist/components/common/index.js +6 -0
- package/dist/components/common/index.js.map +1 -0
- package/dist/components/common/lazy.d.ts +13 -0
- package/dist/components/common/lazy.d.ts.map +1 -0
- package/dist/components/common/types.d.ts +7 -0
- package/dist/components/common/types.d.ts.map +1 -0
- package/dist/components/defineComponent.d.ts +11 -0
- package/dist/components/defineComponent.d.ts.map +1 -0
- package/dist/components/drawer/Drawer.d.ts +53 -0
- package/dist/components/drawer/Drawer.d.ts.map +1 -0
- package/dist/components/drawer/index.d.ts +32 -0
- package/dist/components/drawer/index.d.ts.map +1 -0
- package/dist/components/drawer/index.js +40 -0
- package/dist/components/drawer/index.js.map +1 -0
- package/dist/components/dropdown/Dropdown.d.ts +63 -0
- package/dist/components/dropdown/Dropdown.d.ts.map +1 -0
- package/dist/components/dropdown/index.d.ts +34 -0
- package/dist/components/dropdown/index.d.ts.map +1 -0
- package/dist/components/dropdown/index.js +67 -0
- package/dist/components/dropdown/index.js.map +1 -0
- package/dist/components/home/BundleComponent.d.ts +9 -0
- package/dist/components/home/BundleComponent.d.ts.map +1 -0
- package/dist/components/home/ComponentErrorBoundary.d.ts +22 -0
- package/dist/components/home/ComponentErrorBoundary.d.ts.map +1 -0
- package/dist/components/home/FeaturedProductsStyle1.d.ts +26 -0
- package/dist/components/home/FeaturedProductsStyle1.d.ts.map +1 -0
- package/dist/components/home/FeaturedProductsStyle2.d.ts +25 -0
- package/dist/components/home/FeaturedProductsStyle2.d.ts.map +1 -0
- package/dist/components/home/FeaturedProductsStyle3.d.ts +20 -0
- package/dist/components/home/FeaturedProductsStyle3.d.ts.map +1 -0
- package/dist/components/home/FixedBanner.d.ts +16 -0
- package/dist/components/home/FixedBanner.d.ts.map +1 -0
- package/dist/components/home/FixedProducts.d.ts +18 -0
- package/dist/components/home/FixedProducts.d.ts.map +1 -0
- package/dist/components/home/HomePageRenderer.d.ts +37 -0
- package/dist/components/home/HomePageRenderer.d.ts.map +1 -0
- package/dist/components/home/ParallaxBackground.d.ts +17 -0
- package/dist/components/home/ParallaxBackground.d.ts.map +1 -0
- package/dist/components/home/PhotosSlider.d.ts +16 -0
- package/dist/components/home/PhotosSlider.d.ts.map +1 -0
- package/dist/components/home/ProductsSlider.d.ts +25 -0
- package/dist/components/home/ProductsSlider.d.ts.map +1 -0
- package/dist/components/home/SquarePhotos.d.ts +21 -0
- package/dist/components/home/SquarePhotos.d.ts.map +1 -0
- package/dist/components/home/StoreFeatures.d.ts +9 -0
- package/dist/components/home/StoreFeatures.d.ts.map +1 -0
- package/dist/components/home/Testimonials.d.ts +15 -0
- package/dist/components/home/Testimonials.d.ts.map +1 -0
- package/dist/components/home/Youtube.d.ts +9 -0
- package/dist/components/home/Youtube.d.ts.map +1 -0
- package/dist/components/home/index.d.ts +9 -0
- package/dist/components/home/index.d.ts.map +1 -0
- package/dist/components/home/index.js +43 -0
- package/dist/components/home/index.js.map +1 -0
- package/dist/components/home/lazy.d.ts +14 -0
- package/dist/components/home/lazy.d.ts.map +1 -0
- package/dist/components/home/register.d.ts +4 -0
- package/dist/components/home/register.d.ts.map +1 -0
- package/dist/components/home/types.d.ts +6 -0
- package/dist/components/home/types.d.ts.map +1 -0
- package/dist/components/layout/Copyright.d.ts +8 -0
- package/dist/components/layout/Copyright.d.ts.map +1 -0
- package/dist/components/layout/CustomerLayout.d.ts +8 -0
- package/dist/components/layout/CustomerLayout.d.ts.map +1 -0
- package/dist/components/layout/Footer.d.ts +2 -0
- package/dist/components/layout/Footer.d.ts.map +1 -0
- package/dist/components/layout/Header.d.ts +7 -0
- package/dist/components/layout/Header.d.ts.map +1 -0
- package/dist/components/layout/MasterLayout.d.ts +3 -0
- package/dist/components/layout/MasterLayout.d.ts.map +1 -0
- package/dist/components/layout/WidgetHead.d.ts +21 -0
- package/dist/components/layout/WidgetHead.d.ts.map +1 -0
- package/dist/components/layout/index.d.ts +5 -0
- package/dist/components/layout/index.d.ts.map +1 -0
- package/dist/components/layout/index.js +25 -0
- package/dist/components/layout/index.js.map +1 -0
- package/dist/components/layout/lazy.d.ts +11 -0
- package/dist/components/layout/lazy.d.ts.map +1 -0
- package/dist/components/layout/types.d.ts +10 -0
- package/dist/components/layout/types.d.ts.map +1 -0
- package/dist/components/modal/ImageModal.d.ts +37 -0
- package/dist/components/modal/ImageModal.d.ts.map +1 -0
- package/dist/components/modal/Modal.d.ts +78 -0
- package/dist/components/modal/Modal.d.ts.map +1 -0
- package/dist/components/modal/index.d.ts +30 -0
- package/dist/components/modal/index.d.ts.map +1 -0
- package/dist/components/modal/index.js +5 -0
- package/dist/components/modal/index.js.map +1 -0
- package/dist/components/modal/lazy.d.ts +7 -0
- package/dist/components/modal/lazy.d.ts.map +1 -0
- package/dist/components/navigation/MainMenu.d.ts +2 -0
- package/dist/components/navigation/MainMenu.d.ts.map +1 -0
- package/dist/components/navigation/MobileMenu.d.ts +6 -0
- package/dist/components/navigation/MobileMenu.d.ts.map +1 -0
- package/dist/components/navigation/index.d.ts +3 -0
- package/dist/components/navigation/index.d.ts.map +1 -0
- package/dist/components/navigation/lazy.d.ts +7 -0
- package/dist/components/navigation/lazy.d.ts.map +1 -0
- package/dist/components/product/AddToCartForm.d.ts +12 -0
- package/dist/components/product/AddToCartForm.d.ts.map +1 -0
- package/dist/components/product/ProductCard.d.ts +16 -0
- package/dist/components/product/ProductCard.d.ts.map +1 -0
- package/dist/components/product/ProductDetails.d.ts +8 -0
- package/dist/components/product/ProductDetails.d.ts.map +1 -0
- package/dist/components/product/ProductGallery.d.ts +7 -0
- package/dist/components/product/ProductGallery.d.ts.map +1 -0
- package/dist/components/product/index.d.ts +8 -0
- package/dist/components/product/index.d.ts.map +1 -0
- package/dist/components/product/index.js +41 -0
- package/dist/components/product/index.js.map +1 -0
- package/dist/components/product/lazy.d.ts +3 -0
- package/dist/components/product/lazy.d.ts.map +1 -0
- package/dist/components/store/StoreClosedNotification.d.ts +17 -0
- package/dist/components/store/StoreClosedNotification.d.ts.map +1 -0
- package/dist/components/store/index.d.ts +3 -0
- package/dist/components/store/index.d.ts.map +1 -0
- package/dist/components/store/lazy.d.ts +3 -0
- package/dist/components/store/lazy.d.ts.map +1 -0
- package/dist/components/toast/Toaster.d.ts +8 -0
- package/dist/components/toast/Toaster.d.ts.map +1 -0
- package/dist/components/toast/index.d.ts +4 -0
- package/dist/components/toast/index.d.ts.map +1 -0
- package/dist/components/toast/index.js +5 -0
- package/dist/components/toast/index.js.map +1 -0
- package/dist/components/toast/types.d.ts +27 -0
- package/dist/components/toast/types.d.ts.map +1 -0
- package/dist/components/toast/useToast.d.ts +5 -0
- package/dist/components/toast/useToast.d.ts.map +1 -0
- package/dist/components/tracking/GoogleTag.d.ts +13 -0
- package/dist/components/tracking/GoogleTag.d.ts.map +1 -0
- package/dist/components/tracking/SiftSnippet.d.ts +16 -0
- package/dist/components/tracking/SiftSnippet.d.ts.map +1 -0
- package/dist/components/tracking/TwilightBundles.d.ts +11 -0
- package/dist/components/tracking/TwilightBundles.d.ts.map +1 -0
- package/dist/components/tracking/index.d.ts +5 -0
- package/dist/components/tracking/index.d.ts.map +1 -0
- package/dist/components/tracking/lazy.d.ts +5 -0
- package/dist/components/tracking/lazy.d.ts.map +1 -0
- package/dist/components/useComponent.d.ts +4 -0
- package/dist/components/useComponent.d.ts.map +1 -0
- package/dist/contexts/CartContext.d.ts +34 -0
- package/dist/contexts/CartContext.d.ts.map +1 -0
- package/dist/contexts/ProductContext.d.ts +34 -0
- package/dist/contexts/ProductContext.d.ts.map +1 -0
- package/dist/contexts/index.d.ts +3 -0
- package/dist/contexts/index.d.ts.map +1 -0
- package/dist/document-class-PLK3HUM6.js +21 -0
- package/dist/document-class-PLK3HUM6.js.map +1 -0
- package/dist/dom/document.d.ts +26 -0
- package/dist/dom/document.d.ts.map +1 -0
- package/dist/dom/index.d.ts +24 -0
- package/dist/dom/index.d.ts.map +1 -0
- package/dist/dom.d.ts +1 -0
- package/dist/dom.js +18 -0
- package/dist/dom.js.map +1 -0
- package/dist/eslint/index.d.ts +17 -0
- package/dist/eslint/index.d.ts.map +1 -0
- package/dist/eslint/index.js +86 -0
- package/dist/eslint/index.js.map +1 -0
- package/dist/hooks/HookRegistry.d.ts +47 -0
- package/dist/hooks/HookRegistry.d.ts.map +1 -0
- package/dist/hooks/HookRegistry.js +4 -0
- package/dist/hooks/HookRegistry.js.map +1 -0
- package/dist/hooks/HookSlot.d.ts +96 -0
- package/dist/hooks/HookSlot.d.ts.map +1 -0
- package/dist/hooks/HookSlot.js +6 -0
- package/dist/hooks/HookSlot.js.map +1 -0
- package/dist/hooks/index.d.ts +27 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +39 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/registerDefaultHooks.d.ts +18 -0
- package/dist/hooks/registerDefaultHooks.d.ts.map +1 -0
- package/dist/hooks/types.d.ts +100 -0
- package/dist/hooks/types.d.ts.map +1 -0
- package/dist/hooks/useAsset.d.ts +26 -0
- package/dist/hooks/useAsset.d.ts.map +1 -0
- package/dist/hooks/useAsset.js +5 -0
- package/dist/hooks/useAsset.js.map +1 -0
- package/dist/hooks/useAsyncFn.d.ts +68 -0
- package/dist/hooks/useAsyncFn.d.ts.map +1 -0
- package/dist/hooks/useAsyncFn.js +4 -0
- package/dist/hooks/useAsyncFn.js.map +1 -0
- package/dist/hooks/useBlogLike.d.ts +7 -0
- package/dist/hooks/useBlogLike.d.ts.map +1 -0
- package/dist/hooks/useBlogLike.js +7 -0
- package/dist/hooks/useBlogLike.js.map +1 -0
- package/dist/hooks/useBreadcrumbs.d.ts +3 -0
- package/dist/hooks/useBreadcrumbs.d.ts.map +1 -0
- package/dist/hooks/useComments.d.ts +36 -0
- package/dist/hooks/useComments.d.ts.map +1 -0
- package/dist/hooks/useComments.js +4 -0
- package/dist/hooks/useComments.js.map +1 -0
- package/dist/hooks/useCoupon.d.ts +66 -0
- package/dist/hooks/useCoupon.d.ts.map +1 -0
- package/dist/hooks/useCoupon.js +5 -0
- package/dist/hooks/useCoupon.js.map +1 -0
- package/dist/hooks/useDate.d.ts +24 -0
- package/dist/hooks/useDate.d.ts.map +1 -0
- package/dist/hooks/useDocumentClass.d.ts +42 -0
- package/dist/hooks/useDocumentClass.d.ts.map +1 -0
- package/dist/hooks/useDocumentClass.js +5 -0
- package/dist/hooks/useDocumentClass.js.map +1 -0
- package/dist/hooks/useGtm.d.ts +38 -0
- package/dist/hooks/useGtm.d.ts.map +1 -0
- package/dist/hooks/useHook.d.ts +24 -0
- package/dist/hooks/useHook.d.ts.map +1 -0
- package/dist/hooks/useHook.js +5 -0
- package/dist/hooks/useHook.js.map +1 -0
- package/dist/hooks/useIsClient.d.ts +7 -0
- package/dist/hooks/useIsClient.d.ts.map +1 -0
- package/dist/hooks/useMoney.d.ts +26 -0
- package/dist/hooks/useMoney.d.ts.map +1 -0
- package/dist/hooks/useMoney.js +39 -0
- package/dist/hooks/useMoney.js.map +1 -0
- package/dist/hooks/useNumber.d.ts +24 -0
- package/dist/hooks/useNumber.d.ts.map +1 -0
- package/dist/hooks/useOpeningHours.d.ts +28 -0
- package/dist/hooks/useOpeningHours.d.ts.map +1 -0
- package/dist/hooks/usePageConfig.d.ts +44 -0
- package/dist/hooks/usePageConfig.d.ts.map +1 -0
- package/dist/hooks/useProduct.d.ts +47 -0
- package/dist/hooks/useProduct.d.ts.map +1 -0
- package/dist/hooks/useProduct.js +4 -0
- package/dist/hooks/useProduct.js.map +1 -0
- package/dist/hooks/useStore.d.ts +36 -0
- package/dist/hooks/useStore.d.ts.map +1 -0
- package/dist/hooks/useStore.js +39 -0
- package/dist/hooks/useStore.js.map +1 -0
- package/dist/hooks/useTheme.d.ts +41 -0
- package/dist/hooks/useTheme.d.ts.map +1 -0
- package/dist/hooks/useTheme.js +5 -0
- package/dist/hooks/useTheme.js.map +1 -0
- package/dist/hooks/useUser.d.ts +8 -0
- package/dist/hooks/useUser.d.ts.map +1 -0
- package/dist/hooks/useUser.js +9 -0
- package/dist/hooks/useUser.js.map +1 -0
- package/dist/hooks/useWishlist.d.ts +5 -0
- package/dist/hooks/useWishlist.d.ts.map +1 -0
- package/dist/hooks/useWishlist.js +5 -0
- package/dist/hooks/useWishlist.js.map +1 -0
- package/dist/i18n.d.ts +1 -0
- package/dist/i18n.js +5 -0
- package/dist/i18n.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +83 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/analytics/gtm.d.ts +38 -0
- package/dist/lib/analytics/gtm.d.ts.map +1 -0
- package/dist/lib/services/index.d.ts +1 -0
- package/dist/lib/services/index.d.ts.map +1 -0
- package/dist/navigation-N4H65RUN.js +17 -0
- package/dist/navigation-N4H65RUN.js.map +1 -0
- package/dist/navigation-YCYHW4MK.js +10 -0
- package/dist/navigation-YCYHW4MK.js.map +1 -0
- package/dist/nextjs/document-class.d.ts +92 -0
- package/dist/nextjs/document-class.d.ts.map +1 -0
- package/dist/nextjs/head.d.ts +36 -0
- package/dist/nextjs/head.d.ts.map +1 -0
- package/dist/nextjs/index.d.ts +29 -0
- package/dist/nextjs/index.d.ts.map +1 -0
- package/dist/nextjs/link.d.ts +14 -0
- package/dist/nextjs/link.d.ts.map +1 -0
- package/dist/nextjs/navigation.d.ts +9 -0
- package/dist/nextjs/navigation.d.ts.map +1 -0
- package/dist/nextjs/router.d.ts +15 -0
- package/dist/nextjs/router.d.ts.map +1 -0
- package/dist/nextjs.d.ts +1 -0
- package/dist/nextjs.js +22 -0
- package/dist/nextjs.js.map +1 -0
- package/dist/not-found-BJ3VK5VJ.js +69 -0
- package/dist/not-found-BJ3VK5VJ.js.map +1 -0
- package/dist/providers/DocumentClassProvider.d.ts +56 -0
- package/dist/providers/DocumentClassProvider.d.ts.map +1 -0
- package/dist/providers/DocumentSyncRegistry.d.ts +20 -0
- package/dist/providers/DocumentSyncRegistry.d.ts.map +1 -0
- package/dist/providers/LinkProvider.d.ts +34 -0
- package/dist/providers/LinkProvider.d.ts.map +1 -0
- package/dist/providers/NavigationProvider.d.ts +223 -0
- package/dist/providers/NavigationProvider.d.ts.map +1 -0
- package/dist/providers/TwilightProvider.d.ts +7 -0
- package/dist/providers/TwilightProvider.d.ts.map +1 -0
- package/dist/providers/i18n-factory.d.ts +17 -0
- package/dist/providers/i18n-factory.d.ts.map +1 -0
- package/dist/providers/i18n.d.ts +31 -0
- package/dist/providers/i18n.d.ts.map +1 -0
- package/dist/providers/index.d.ts +6 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/locale-constants.d.ts +17 -0
- package/dist/providers/locale-constants.d.ts.map +1 -0
- package/dist/providers/salla-sdk.types.d.ts +352 -0
- package/dist/providers/salla-sdk.types.d.ts.map +1 -0
- package/dist/providers/twilight-context.d.ts +4 -0
- package/dist/providers/twilight-context.d.ts.map +1 -0
- package/dist/providers/twilight-init.d.ts +24 -0
- package/dist/providers/twilight-init.d.ts.map +1 -0
- package/dist/providers/twilight-theme.d.ts +9 -0
- package/dist/providers/twilight-theme.d.ts.map +1 -0
- package/dist/providers/twilight.types.d.ts +95 -0
- package/dist/providers/twilight.types.d.ts.map +1 -0
- package/dist/router/context.d.ts +3 -0
- package/dist/router/context.d.ts.map +1 -0
- package/dist/router/index.d.ts +4 -0
- package/dist/router/index.d.ts.map +1 -0
- package/dist/router/route-ids.d.ts +37 -0
- package/dist/router/route-ids.d.ts.map +1 -0
- package/dist/routes/account/index.d.ts +8 -0
- package/dist/routes/account/index.d.ts.map +1 -0
- package/dist/routes/account/notifications/NotificationsPage.d.ts +3 -0
- package/dist/routes/account/notifications/NotificationsPage.d.ts.map +1 -0
- package/dist/routes/account/notifications/index.d.ts +17 -0
- package/dist/routes/account/notifications/index.d.ts.map +1 -0
- package/dist/routes/account/notifications/loader.d.ts +5 -0
- package/dist/routes/account/notifications/loader.d.ts.map +1 -0
- package/dist/routes/account/notifications/types.d.ts +17 -0
- package/dist/routes/account/notifications/types.d.ts.map +1 -0
- package/dist/routes/account/orders/OrderSinglePage.d.ts +3 -0
- package/dist/routes/account/orders/OrderSinglePage.d.ts.map +1 -0
- package/dist/routes/account/orders/OrdersPage.d.ts +3 -0
- package/dist/routes/account/orders/OrdersPage.d.ts.map +1 -0
- package/dist/routes/account/orders/index.d.ts +35 -0
- package/dist/routes/account/orders/index.d.ts.map +1 -0
- package/dist/routes/account/orders/loader.d.ts +11 -0
- package/dist/routes/account/orders/loader.d.ts.map +1 -0
- package/dist/routes/account/orders/types.d.ts +22 -0
- package/dist/routes/account/orders/types.d.ts.map +1 -0
- package/dist/routes/account/orders.d.ts +1 -0
- package/dist/routes/account/orders.js +42 -0
- package/dist/routes/account/orders.js.map +1 -0
- package/dist/routes/account/profile/ProfilePage.d.ts +3 -0
- package/dist/routes/account/profile/ProfilePage.d.ts.map +1 -0
- package/dist/routes/account/profile/index.d.ts +17 -0
- package/dist/routes/account/profile/index.d.ts.map +1 -0
- package/dist/routes/account/profile/loader.d.ts +5 -0
- package/dist/routes/account/profile/loader.d.ts.map +1 -0
- package/dist/routes/account/profile/types.d.ts +5 -0
- package/dist/routes/account/profile/types.d.ts.map +1 -0
- package/dist/routes/account/settings/SettingsPage.d.ts +3 -0
- package/dist/routes/account/settings/SettingsPage.d.ts.map +1 -0
- package/dist/routes/account/settings/index.d.ts +17 -0
- package/dist/routes/account/settings/index.d.ts.map +1 -0
- package/dist/routes/account/settings/loader.d.ts +5 -0
- package/dist/routes/account/settings/loader.d.ts.map +1 -0
- package/dist/routes/account/settings/types.d.ts +5 -0
- package/dist/routes/account/settings/types.d.ts.map +1 -0
- package/dist/routes/account/types.d.ts +300 -0
- package/dist/routes/account/types.d.ts.map +1 -0
- package/dist/routes/account/wallet/WalletPage.d.ts +3 -0
- package/dist/routes/account/wallet/WalletPage.d.ts.map +1 -0
- package/dist/routes/account/wallet/index.d.ts +16 -0
- package/dist/routes/account/wallet/index.d.ts.map +1 -0
- package/dist/routes/account/wallet/loader.d.ts +4 -0
- package/dist/routes/account/wallet/loader.d.ts.map +1 -0
- package/dist/routes/account/wallet/types.d.ts +11 -0
- package/dist/routes/account/wallet/types.d.ts.map +1 -0
- package/dist/routes/account/wishlist/WishlistPage.d.ts +3 -0
- package/dist/routes/account/wishlist/WishlistPage.d.ts.map +1 -0
- package/dist/routes/account/wishlist/index.d.ts +16 -0
- package/dist/routes/account/wishlist/index.d.ts.map +1 -0
- package/dist/routes/account/wishlist/loader.d.ts +4 -0
- package/dist/routes/account/wishlist/loader.d.ts.map +1 -0
- package/dist/routes/account/wishlist/types.d.ts +9 -0
- package/dist/routes/account/wishlist/types.d.ts.map +1 -0
- package/dist/routes/account.d.ts +1 -0
- package/dist/routes/account.js +253 -0
- package/dist/routes/account.js.map +1 -0
- package/dist/routes/blog/BlogAuthorPage.d.ts +3 -0
- package/dist/routes/blog/BlogAuthorPage.d.ts.map +1 -0
- package/dist/routes/blog/BlogCategoryPage.d.ts +3 -0
- package/dist/routes/blog/BlogCategoryPage.d.ts.map +1 -0
- package/dist/routes/blog/BlogPage.d.ts +3 -0
- package/dist/routes/blog/BlogPage.d.ts.map +1 -0
- package/dist/routes/blog/BlogSinglePage.d.ts +3 -0
- package/dist/routes/blog/BlogSinglePage.d.ts.map +1 -0
- package/dist/routes/blog/BlogTagPage.d.ts +3 -0
- package/dist/routes/blog/BlogTagPage.d.ts.map +1 -0
- package/dist/routes/blog/components.d.ts +14 -0
- package/dist/routes/blog/components.d.ts.map +1 -0
- package/dist/routes/blog/index.d.ts +76 -0
- package/dist/routes/blog/index.d.ts.map +1 -0
- package/dist/routes/blog/loader.d.ts +16 -0
- package/dist/routes/blog/loader.d.ts.map +1 -0
- package/dist/routes/blog/types.d.ts +92 -0
- package/dist/routes/blog/types.d.ts.map +1 -0
- package/dist/routes/blog.d.ts +1 -0
- package/dist/routes/blog.js +303 -0
- package/dist/routes/blog.js.map +1 -0
- package/dist/routes/brands/BrandsPage.d.ts +5 -0
- package/dist/routes/brands/BrandsPage.d.ts.map +1 -0
- package/dist/routes/brands/index.d.ts +20 -0
- package/dist/routes/brands/index.d.ts.map +1 -0
- package/dist/routes/brands/loader.d.ts +3 -0
- package/dist/routes/brands/loader.d.ts.map +1 -0
- package/dist/routes/brands/types.d.ts +32 -0
- package/dist/routes/brands/types.d.ts.map +1 -0
- package/dist/routes/brands.d.ts +1 -0
- package/dist/routes/brands.js +92 -0
- package/dist/routes/brands.js.map +1 -0
- package/dist/routes/cart/CartPage.d.ts +3 -0
- package/dist/routes/cart/CartPage.d.ts.map +1 -0
- package/dist/routes/cart/index.d.ts +20 -0
- package/dist/routes/cart/index.d.ts.map +1 -0
- package/dist/routes/cart/loader.d.ts +8 -0
- package/dist/routes/cart/loader.d.ts.map +1 -0
- package/dist/routes/cart/types.d.ts +6 -0
- package/dist/routes/cart/types.d.ts.map +1 -0
- package/dist/routes/cart.d.ts +1 -0
- package/dist/routes/cart.js +168 -0
- package/dist/routes/cart.js.map +1 -0
- package/dist/routes/home/HomePage.d.ts +5 -0
- package/dist/routes/home/HomePage.d.ts.map +1 -0
- package/dist/routes/home/index.d.ts +22 -0
- package/dist/routes/home/index.d.ts.map +1 -0
- package/dist/routes/home/loader.d.ts +12 -0
- package/dist/routes/home/loader.d.ts.map +1 -0
- package/dist/routes/home/types.d.ts +10 -0
- package/dist/routes/home/types.d.ts.map +1 -0
- package/dist/routes/home.d.ts +1 -0
- package/dist/routes/home.js +46 -0
- package/dist/routes/home.js.map +1 -0
- package/dist/routes/index.d.ts +20 -0
- package/dist/routes/index.d.ts.map +1 -0
- package/dist/routes/index.js +40 -0
- package/dist/routes/index.js.map +1 -0
- package/dist/routes/lazy.d.ts +23 -0
- package/dist/routes/lazy.d.ts.map +1 -0
- package/dist/routes/loyalty/LoyaltyPage.d.ts +3 -0
- package/dist/routes/loyalty/LoyaltyPage.d.ts.map +1 -0
- package/dist/routes/loyalty/index.d.ts +19 -0
- package/dist/routes/loyalty/index.d.ts.map +1 -0
- package/dist/routes/loyalty/loader.d.ts +3 -0
- package/dist/routes/loyalty/loader.d.ts.map +1 -0
- package/dist/routes/loyalty/types.d.ts +96 -0
- package/dist/routes/loyalty/types.d.ts.map +1 -0
- package/dist/routes/loyalty.d.ts +1 -0
- package/dist/routes/loyalty.js +73 -0
- package/dist/routes/loyalty.js.map +1 -0
- package/dist/routes/not-found.d.ts +15 -0
- package/dist/routes/not-found.d.ts.map +1 -0
- package/dist/routes/page/PageSingle.d.ts +3 -0
- package/dist/routes/page/PageSingle.d.ts.map +1 -0
- package/dist/routes/page/index.d.ts +21 -0
- package/dist/routes/page/index.d.ts.map +1 -0
- package/dist/routes/page/loader.d.ts +6 -0
- package/dist/routes/page/loader.d.ts.map +1 -0
- package/dist/routes/page/types.d.ts +32 -0
- package/dist/routes/page/types.d.ts.map +1 -0
- package/dist/routes/page.d.ts +1 -0
- package/dist/routes/page.js +97 -0
- package/dist/routes/page.js.map +1 -0
- package/dist/routes/product/ProductPage.d.ts +3 -0
- package/dist/routes/product/ProductPage.d.ts.map +1 -0
- package/dist/routes/product/index.d.ts +21 -0
- package/dist/routes/product/index.d.ts.map +1 -0
- package/dist/routes/product/loader.d.ts +6 -0
- package/dist/routes/product/loader.d.ts.map +1 -0
- package/dist/routes/product/types.d.ts +6 -0
- package/dist/routes/product/types.d.ts.map +1 -0
- package/dist/routes/product-listing/ProductListPage.d.ts +13 -0
- package/dist/routes/product-listing/ProductListPage.d.ts.map +1 -0
- package/dist/routes/product-listing/index.d.ts +16 -0
- package/dist/routes/product-listing/index.d.ts.map +1 -0
- package/dist/routes/product-listing/loader.d.ts +3 -0
- package/dist/routes/product-listing/loader.d.ts.map +1 -0
- package/dist/routes/product-listing/types.d.ts +71 -0
- package/dist/routes/product-listing/types.d.ts.map +1 -0
- package/dist/routes/product-listing.d.ts +1 -0
- package/dist/routes/product-listing.js +516 -0
- package/dist/routes/product-listing.js.map +1 -0
- package/dist/routes/product.d.ts +1 -0
- package/dist/routes/product.js +225 -0
- package/dist/routes/product.js.map +1 -0
- package/dist/routes/root/beforeLoad.d.ts +21 -0
- package/dist/routes/root/beforeLoad.d.ts.map +1 -0
- package/dist/routes/root/head.d.ts +5 -0
- package/dist/routes/root/head.d.ts.map +1 -0
- package/dist/routes/root/index.d.ts +3 -0
- package/dist/routes/root/index.d.ts.map +1 -0
- package/dist/routes/seo-redirects.d.ts +19 -0
- package/dist/routes/seo-redirects.d.ts.map +1 -0
- package/dist/routes/seo-redirects.js +40 -0
- package/dist/routes/seo-redirects.js.map +1 -0
- package/dist/routes/testimonials/TestimonialsPage.d.ts +3 -0
- package/dist/routes/testimonials/TestimonialsPage.d.ts.map +1 -0
- package/dist/routes/testimonials/index.d.ts +19 -0
- package/dist/routes/testimonials/index.d.ts.map +1 -0
- package/dist/routes/testimonials/loader.d.ts +5 -0
- package/dist/routes/testimonials/loader.d.ts.map +1 -0
- package/dist/routes/testimonials/types.d.ts +5 -0
- package/dist/routes/testimonials/types.d.ts.map +1 -0
- package/dist/routes/testimonials.d.ts +1 -0
- package/dist/routes/testimonials.js +49 -0
- package/dist/routes/testimonials.js.map +1 -0
- package/dist/routes/thank-you/ThankYouPage.d.ts +3 -0
- package/dist/routes/thank-you/ThankYouPage.d.ts.map +1 -0
- package/dist/routes/thank-you/index.d.ts +20 -0
- package/dist/routes/thank-you/index.d.ts.map +1 -0
- package/dist/routes/thank-you/loader.d.ts +5 -0
- package/dist/routes/thank-you/loader.d.ts.map +1 -0
- package/dist/routes/thank-you/types.d.ts +14 -0
- package/dist/routes/thank-you/types.d.ts.map +1 -0
- package/dist/routes/thank-you.d.ts +1 -0
- package/dist/routes/thank-you.js +95 -0
- package/dist/routes/thank-you.js.map +1 -0
- package/dist/routes/types.d.ts +36 -0
- package/dist/routes/types.d.ts.map +1 -0
- package/dist/sentry/client.d.ts +6 -0
- package/dist/sentry/client.d.ts.map +1 -0
- package/dist/sentry/client.js +17 -0
- package/dist/sentry/client.js.map +1 -0
- package/dist/sentry/server.d.ts +10 -0
- package/dist/sentry/server.d.ts.map +1 -0
- package/dist/sentry/server.js +16 -0
- package/dist/sentry/server.js.map +1 -0
- package/dist/skeleton.d.ts +4 -0
- package/dist/skeleton.d.ts.map +1 -0
- package/dist/skeleton.js +47 -0
- package/dist/skeleton.js.map +1 -0
- package/dist/tanstack/document-class.d.ts +44 -0
- package/dist/tanstack/document-class.d.ts.map +1 -0
- package/dist/tanstack/head.d.ts +24 -0
- package/dist/tanstack/head.d.ts.map +1 -0
- package/dist/tanstack/index.d.ts +28 -0
- package/dist/tanstack/index.d.ts.map +1 -0
- package/dist/tanstack/link.d.ts +18 -0
- package/dist/tanstack/link.d.ts.map +1 -0
- package/dist/tanstack/middleware/earlyHints.d.ts +3 -0
- package/dist/tanstack/middleware/earlyHints.d.ts.map +1 -0
- package/dist/tanstack/middleware/twilight.d.ts +7 -0
- package/dist/tanstack/middleware/twilight.d.ts.map +1 -0
- package/dist/tanstack/navigation.d.ts +13 -0
- package/dist/tanstack/navigation.d.ts.map +1 -0
- package/dist/tanstack/router.d.ts +85 -0
- package/dist/tanstack/router.d.ts.map +1 -0
- package/dist/tanstack/templates/account-layout.d.ts +8 -0
- package/dist/tanstack/templates/account-layout.d.ts.map +1 -0
- package/dist/tanstack/templates/index.d.ts +4 -0
- package/dist/tanstack/templates/index.d.ts.map +1 -0
- package/dist/tanstack/templates/locale-wrapper.d.ts +15 -0
- package/dist/tanstack/templates/locale-wrapper.d.ts.map +1 -0
- package/dist/tanstack/templates/redirect.d.ts +6 -0
- package/dist/tanstack/templates/redirect.d.ts.map +1 -0
- package/dist/tanstack.d.ts +1 -0
- package/dist/tanstack.js +137 -0
- package/dist/tanstack.js.map +1 -0
- package/dist/twilight/context.d.ts +46 -0
- package/dist/twilight/context.d.ts.map +1 -0
- package/dist/twilight/index.d.ts +3 -0
- package/dist/twilight/index.d.ts.map +1 -0
- package/dist/types/hooks.d.ts +58 -0
- package/dist/types/hooks.d.ts.map +1 -0
- package/dist/types/index.d.ts +724 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +4 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/apply-theme.d.ts +3 -0
- package/dist/utils/apply-theme.d.ts.map +1 -0
- package/dist/utils/asset.d.ts +27 -0
- package/dist/utils/asset.d.ts.map +1 -0
- package/dist/utils/baseHead.d.ts +23 -0
- package/dist/utils/baseHead.d.ts.map +1 -0
- package/dist/utils/baseHead.js +5 -0
- package/dist/utils/baseHead.js.map +1 -0
- package/dist/utils/breadcrumb.d.ts +5 -0
- package/dist/utils/breadcrumb.d.ts.map +1 -0
- package/dist/utils/cdn-image.d.ts +5 -0
- package/dist/utils/cdn-image.d.ts.map +1 -0
- package/dist/utils/color.d.ts +34 -0
- package/dist/utils/color.d.ts.map +1 -0
- package/dist/utils/cookies.d.ts +16 -0
- package/dist/utils/cookies.d.ts.map +1 -0
- package/dist/utils/device.d.ts +19 -0
- package/dist/utils/device.d.ts.map +1 -0
- package/dist/utils/document-class.d.ts +67 -0
- package/dist/utils/document-class.d.ts.map +1 -0
- package/dist/utils/errors.d.ts +4 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/head.d.ts +100 -0
- package/dist/utils/head.d.ts.map +1 -0
- package/dist/utils/head.js +4 -0
- package/dist/utils/head.js.map +1 -0
- package/dist/utils/index.d.ts +22 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +15 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/number.d.ts +21 -0
- package/dist/utils/number.d.ts.map +1 -0
- package/dist/utils/salla-plural.d.ts +14 -0
- package/dist/utils/salla-plural.d.ts.map +1 -0
- package/dist/utils/sanitize.d.ts +2 -0
- package/dist/utils/sanitize.d.ts.map +1 -0
- package/dist/utils/sdk-events.d.ts +25 -0
- package/dist/utils/sdk-events.d.ts.map +1 -0
- package/dist/utils/sdk-helpers.d.ts +30 -0
- package/dist/utils/sdk-helpers.d.ts.map +1 -0
- package/dist/utils/sort-options.d.ts +8 -0
- package/dist/utils/sort-options.d.ts.map +1 -0
- package/dist/vite/adapters/index.d.ts +18 -0
- package/dist/vite/adapters/index.d.ts.map +1 -0
- package/dist/vite/adapters/nextjs.adapter.d.ts +12 -0
- package/dist/vite/adapters/nextjs.adapter.d.ts.map +1 -0
- package/dist/vite/adapters/tanstack.adapter.d.ts +71 -0
- package/dist/vite/adapters/tanstack.adapter.d.ts.map +1 -0
- package/dist/vite/index.d.ts +6 -0
- package/dist/vite/index.d.ts.map +1 -0
- package/dist/vite/index.js +2193 -0
- package/dist/vite/index.js.map +1 -0
- package/dist/vite/plugins/best-practices/best-practices.plugin.d.ts +4 -0
- package/dist/vite/plugins/best-practices/best-practices.plugin.d.ts.map +1 -0
- package/dist/vite/plugins/best-practices/hooks-registry.d.ts +27 -0
- package/dist/vite/plugins/best-practices/hooks-registry.d.ts.map +1 -0
- package/dist/vite/plugins/best-practices/reporter.d.ts +4 -0
- package/dist/vite/plugins/best-practices/reporter.d.ts.map +1 -0
- package/dist/vite/plugins/best-practices/rules/index.d.ts +4 -0
- package/dist/vite/plugins/best-practices/rules/index.d.ts.map +1 -0
- package/dist/vite/plugins/best-practices/rules/no-deep-component-import.d.ts +3 -0
- package/dist/vite/plugins/best-practices/rules/no-deep-component-import.d.ts.map +1 -0
- package/dist/vite/plugins/best-practices/rules/no-direct-product-card-import.d.ts +3 -0
- package/dist/vite/plugins/best-practices/rules/no-direct-product-card-import.d.ts.map +1 -0
- package/dist/vite/plugins/best-practices/rules/no-img-without-dimensions.d.ts +3 -0
- package/dist/vite/plugins/best-practices/rules/no-img-without-dimensions.d.ts.map +1 -0
- package/dist/vite/plugins/best-practices/rules/no-manual-dom.d.ts +3 -0
- package/dist/vite/plugins/best-practices/rules/no-manual-dom.d.ts.map +1 -0
- package/dist/vite/plugins/best-practices/rules/no-window-location-reload.d.ts +3 -0
- package/dist/vite/plugins/best-practices/rules/no-window-location-reload.d.ts.map +1 -0
- package/dist/vite/plugins/best-practices/rules/require-page-hooks.d.ts +16 -0
- package/dist/vite/plugins/best-practices/rules/require-page-hooks.d.ts.map +1 -0
- package/dist/vite/plugins/best-practices/types.d.ts +34 -0
- package/dist/vite/plugins/best-practices/types.d.ts.map +1 -0
- package/dist/vite/plugins/package-aliases.plugin.d.ts +3 -0
- package/dist/vite/plugins/package-aliases.plugin.d.ts.map +1 -0
- package/dist/vite/plugins/salla-hydration.plugin.d.ts +12 -0
- package/dist/vite/plugins/salla-hydration.plugin.d.ts.map +1 -0
- package/dist/vite/plugins/theme-translations.plugin.d.ts +20 -0
- package/dist/vite/plugins/theme-translations.plugin.d.ts.map +1 -0
- package/dist/vite/twilight-react.d.ts +22 -0
- package/dist/vite/twilight-react.d.ts.map +1 -0
- package/dist/vite/types.d.ts +110 -0
- package/dist/vite/types.d.ts.map +1 -0
- package/package.json +474 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/apply-theme.ts","../src/providers/twilight-theme.ts","../src/providers/twilight-init.ts","../src/providers/DocumentSyncRegistry.ts","../src/hooks/useDate.ts","../src/hooks/useNumber.ts","../src/hooks/useMoney.tsx","../src/hooks/useGtm.ts","../src/hooks/useOpeningHours.ts","../src/hooks/usePageConfig.ts","../src/utils/breadcrumb.ts","../src/hooks/useBreadcrumbs.ts","../src/hooks/registerDefaultHooks.tsx","../src/components/layout/Footer.tsx","../src/components/layout/MasterLayout.tsx","../src/providers/TwilightProvider.tsx","../src/hooks/useStore.ts"],"names":["color","useEffect","useState","useMemo","lazy","jsx","jsxs","Fragment","Suspense","getSalla","React","useCallback"],"mappings":"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","file":"chunk-GLM3RPCP.js","sourcesContent":["import type { Theme } from '../types';\nimport { color as makeColor } from './color';\n\nexport function applyTheme(theme: Theme): void {\n if (typeof document === 'undefined') return;\n\n const vars: [string, string][] = [];\n\n if (theme.font?.name) {\n vars.push(\n ['--font-main', theme.font.name],\n ['--font-light', theme.font.name],\n ['--font-regular', theme.font.name],\n ['--font-medium', `${theme.font.name}-Medium`],\n ['--font-bold', `${theme.font.name}-Bold`]\n );\n }\n\n const { color } = theme;\n if (color) {\n vars.push(['--color-text', '#222222']);\n\n if (color.primary) {\n const c = makeColor(color.primary);\n vars.push(\n ['--color-primary', color.primary],\n ['--color-primary-dark', c.darken(0.15)],\n ['--color-primary-light', c.lighten(0.15)],\n ['--color-title', color.primary],\n ['--color-secondary', color.primary]\n );\n }\n\n if (color.reverse_text) {\n vars.push(\n ['--color-primary-reverse', color.reverse_text],\n ['--color-text-reverse', color.reverse_text],\n ['--color-reverse-text', color.reverse_text]\n );\n }\n\n if (color.reverse_primary) {\n vars.push(['--color-reverse-primary', color.reverse_primary]);\n }\n }\n\n vars.push(['--page-height', '100%']);\n\n const root = document.documentElement;\n for (const [prop, val] of vars) {\n root.style.setProperty(prop, val);\n }\n}\n","import { useEffect } from 'react';\nimport { applyTheme } from '../utils/apply-theme';\nimport { useDocumentClass } from '../hooks/useDocumentClass';\nimport type { Theme } from '../types';\n\nexport function fontToClass(name: string | undefined): string | null {\n if (!name) return null;\n const slug = name\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '');\n return slug ? `font-${slug}` : null;\n}\n\nexport function ThemeDocumentSync({\n theme,\n locale,\n direction,\n isMobileWebview,\n}: {\n theme: Theme;\n locale: string;\n direction: 'rtl' | 'ltr';\n isMobileWebview: boolean;\n}): null {\n const bodyClasses = [\n theme.name ? `salla-${theme.name}` : null,\n `color-mode-${theme.color?.is_dark ? 'dark' : 'light'}`,\n direction,\n theme.mode === 'preview' ? 'preview-mode' : null,\n fontToClass(theme.font?.name),\n isMobileWebview ? 'mobile-webview' : null,\n theme.settings?.footer_is_dark ? 'footer-is-dark' : 'footer-is-light',\n theme.settings?.topnav_is_dark ? 'topnav-is-dark' : null,\n theme.settings?.sticky_add_to_cart ? 'is-sticky-product-bar' : null,\n ].filter(Boolean) as string[];\n\n useDocumentClass({\n html: { lang: locale, dir: direction },\n body: { class: bodyClasses },\n });\n\n useEffect(() => {\n applyTheme(theme);\n }, [theme]);\n\n return null;\n}\n","import { useState, useEffect, type Dispatch, type SetStateAction } from 'react';\nimport type { Store, Theme } from '../types';\nimport type { SallaCurrency, SallaSDK } from './salla-sdk.types';\nimport { getLanguageInfo } from '../providers/i18n';\nimport { type StoreContext, syncSdkLocale } from '../utils/sdk-helpers';\nimport { getTwilightContext } from '../twilight/context';\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\nfunction getSalla(): SallaSDK | undefined {\n if (typeof window === 'undefined') return undefined;\n return window.salla;\n}\n\n// ─── Hook ─────────────────────────────────────────────────────────────────────\n\nexport interface UseTwilightInitOptions {\n debug: boolean;\n initialData?: StoreContext | Record<string, unknown>;\n onReady?: (data: { store: Store; theme: Theme }) => void;\n onError?: (error: Error) => void;\n initialLocale: string;\n}\n\nexport interface UseTwilightInitReturn {\n isReady: boolean;\n storeData: Store;\n setStoreData: Dispatch<SetStateAction<Store>>;\n themeData: Theme;\n currency: SallaCurrency | null;\n isMobileWebview: boolean;\n}\n\nexport function useTwilightInit({\n debug: _debug,\n initialData,\n onReady,\n onError: _onError,\n initialLocale,\n}: UseTwilightInitOptions): UseTwilightInitReturn {\n const isBrowser = typeof window !== 'undefined';\n const initialLanguage = getLanguageInfo(initialLocale);\n const settingsData = initialData as StoreContext | undefined;\n\n const [isReady, setReady] = useState<boolean>(() => !!settingsData);\n const [storeData, setStoreData] = useState<Store>(\n () => (settingsData?.store as Store) ?? ({} as Store)\n );\n const [themeData] = useState<Theme>(() => {\n const theme = settingsData?.theme as Partial<Theme> | undefined;\n if (theme) {\n return {\n ...theme,\n is_rtl: theme.is_rtl ?? initialLanguage.dir === 'rtl',\n } as Theme;\n }\n return { is_rtl: initialLanguage.dir === 'rtl' } as Theme;\n });\n const [currency] = useState<SallaCurrency | null>(null);\n const [isMobileWebview] = useState<boolean>(false); // todo :: add a flage in the store data for mobile\n\n useEffect(() => {\n if (!isBrowser || !themeData) return;\n const sdk = getSalla();\n sdk?.config?.set?.('theme.is_rtl', themeData.is_rtl ?? false);\n window.enable_more_menu = String(themeData.settings?.enable_more_menu ?? true);\n }, [themeData, isBrowser]);\n\n useEffect(() => {\n const sdk = getSalla();\n if (!sdk) return;\n\n if (initialLocale) {\n // Sync UI translations + the SDK's axios accept-language header to the route locale.\n // The header set may be a no-op now if the SDK isn't fully ready; it's re-asserted\n // after onReady below, and on every navigation in rootBeforeLoad.\n syncSdkLocale(initialLocale);\n }\n\n if (typeof sdk.init !== 'function') return;\n\n const ctx = getTwilightContext();\n const pageCtx = ctx.page;\n const initData = pageCtx\n ? {\n ...settingsData,\n page: {\n ...pageCtx,\n url: pageCtx.url ?? ctx.location.pathname + ctx.location.searchStr,\n },\n }\n : settingsData;\n\n sdk.init(initData);\n\n const initSdk = async () => {\n try {\n await sdk.onReady();\n } catch {\n // sdk.onReady() may fail during partial initialization\n }\n\n // The SDK loads async; the sync above may have run against a not-yet-ready SDK.\n // Now that it's ready, re-assert so the very first SDK API calls use the route locale.\n syncSdkLocale(initialLocale);\n\n setReady(true);\n document.dispatchEvent(new CustomEvent('theme::ready'));\n\n onReady?.({\n store: storeData,\n theme: themeData,\n });\n };\n\n initSdk();\n // eslint-disable-next-line react-hooks/exhaustive-deps -- Intentional: SDK init runs once per locale change only\n }, [initialLocale]);\n\n return {\n isReady,\n storeData,\n setStoreData,\n themeData,\n currency,\n isMobileWebview,\n };\n}\n","import { lazy, type FC, type LazyExoticComponent } from 'react';\n\n/**\n * Registry for framework-specific document sync components.\n * Each framework (tanstack, nextjs, etc.) can register its own sync component.\n * Used by TwilightProvider to automatically apply route-based body classes.\n *\n * @example Adding a new framework\n * ```ts\n * import { registerDocumentSync } from '@salla.sa/twilight-theme-engine';\n *\n * registerDocumentSync('my-framework', lazy(() => import('./my-document-sync')));\n * ```\n */\nexport const routeDocumentSyncs: Record<string, LazyExoticComponent<FC>> = {\n tanstack: lazy(() =>\n import('../tanstack/document-class').then((m) => ({\n default: m.TanStackDocumentSync,\n }))\n ),\n // Add other frameworks here:\n // nextjs: lazy(() => import('../nextjs/document-sync').then(m => ({ default: m.NextjsDocumentSync }))),\n};\n\n/**\n * Register a framework-specific document sync component.\n * Convenience function for adding new frameworks to the registry.\n */\nexport function registerDocumentSync(framework: string, component: LazyExoticComponent<FC>): void {\n routeDocumentSyncs[framework] = component;\n}\n","import { useTranslation } from '../providers/i18n';\n\ntype DateFormat = 'full' | 'long' | 'medium' | 'short' | 'time';\n\nexport type DateInput =\n | string\n | number\n | Date\n | { date: string; timezone_type: number; timezone: string }\n | undefined;\n\nfunction normalizeDate(input: DateInput): Date {\n if (!input) return new Date();\n if (input instanceof Date) return input;\n if (typeof input === 'number') return new Date(input);\n if (typeof input === 'object' && 'date' in input) return new Date(input.date);\n return new Date(input);\n}\n\nexport interface UseDateResult {\n format: (date: DateInput, formatType?: DateFormat) => string;\n ago: (date: DateInput) => string;\n now: Date;\n}\n\n/**\n * useDate - Hook for formatting dates\n *\n * @example\n * const { format, ago, now } = useDate();\n * format('2024-03-15') // 'March 15, 2024'\n * format('2024-03-15', 'full') // 'Friday, March 15, 2024'\n * ago(Date.now() - 3600000) // '1 hour ago'\n * now // current Date object\n */\nexport function useDate(): UseDateResult {\n const { locale } = useTranslation();\n\n const format = (date: DateInput, formatType: DateFormat = 'medium'): string => {\n const dateObj = normalizeDate(date);\n\n const formatOptionsMap: Record<DateFormat, Intl.DateTimeFormatOptions> = {\n full: { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' },\n long: { year: 'numeric', month: 'long', day: 'numeric' },\n medium: { year: 'numeric', month: 'long', day: 'numeric' },\n short: { year: 'numeric', month: 'short', day: 'numeric' },\n time: { hour: '2-digit', minute: '2-digit' },\n };\n\n try {\n return new Intl.DateTimeFormat(locale, formatOptionsMap[formatType]).format(dateObj);\n } catch {\n return dateObj.toLocaleDateString(locale);\n }\n };\n\n const ago = (date: DateInput): string => {\n const dateObj = normalizeDate(date);\n const diffInSeconds = Math.floor((Date.now() - dateObj.getTime()) / 1000);\n\n const units: Array<{ unit: Intl.RelativeTimeFormatUnit; threshold: number; divisor: number }> =\n [\n { unit: 'year', threshold: 31536000, divisor: 31536000 },\n { unit: 'month', threshold: 2592000, divisor: 2592000 },\n { unit: 'week', threshold: 604800, divisor: 604800 },\n { unit: 'day', threshold: 86400, divisor: 86400 },\n { unit: 'hour', threshold: 3600, divisor: 3600 },\n { unit: 'minute', threshold: 60, divisor: 60 },\n { unit: 'second', threshold: 1, divisor: 1 },\n ];\n\n for (const { unit, threshold, divisor } of units) {\n if (diffInSeconds >= threshold) {\n const value = Math.floor(diffInSeconds / divisor);\n try {\n return new Intl.RelativeTimeFormat(locale, { numeric: 'auto', style: 'long' }).format(\n -value,\n unit\n );\n } catch {\n return new Intl.RelativeTimeFormat('en', { numeric: 'auto' }).format(-value, unit);\n }\n }\n }\n\n return locale.startsWith('ar') ? 'الآن' : 'just now';\n };\n\n return { format, ago, now: new Date() };\n}\n","import { useTwilight } from '../providers/TwilightProvider';\n\nconst ARABIC_NUMERALS = ['٠', '١', '٢', '٣', '٤', '٥', '٦', '٧', '٨', '٩'];\n\n/**\n * UseNumberResult - Return type for useNumber hook\n */\nexport interface UseNumberResult {\n /** Format number with store settings */\n format: (number: number | string) => string;\n /** Convert to Arabic numerals */\n toArabic: (input: number | string) => string;\n /** Whether Arabic numerals are enabled */\n useArabicNumerals: boolean;\n}\n\n/**\n * useNumber - Hook for number formatting\n *\n * @returns Object with number formatting utilities\n *\n * @example\n * const { format, toArabic, useArabicNumerals } = useNumber();\n * format(1234) // '١٢٣٤' if arabic numbers enabled, else '1234'\n * toArabic(1234) // '١٢٣٤'\n * useArabicNumerals // boolean from store settings\n */\nexport function useNumber(): UseNumberResult {\n const { store } = useTwilight();\n const useArabicNumerals = store?.settings?.arabic_numbers_enabled ?? false;\n\n const toArabic = (input: number | string): string => {\n const str = String(input);\n return str.replace(/[0-9]/g, (d) => ARABIC_NUMERALS[parseInt(d)]);\n };\n\n const format = (number: number | string): string => {\n return useArabicNumerals ? toArabic(number) : String(number);\n };\n\n return {\n /** Format number with store settings */\n format,\n /** Convert to Arabic numerals */\n toArabic,\n /** Whether Arabic numerals are enabled */\n useArabicNumerals,\n };\n}\n","import { useTwilight } from '../providers/TwilightProvider';\nimport { useTranslation } from '../providers/i18n';\nimport React from 'react';\n\nconst AR_LOCALE = 'ar';\nconst SAR_CURRENCY = 'SAR';\n\n/**\n * UseMoneyResult - Return type for useMoney hook\n */\nexport interface UseMoneyResult {\n /** Format amount with currency */\n format: (\n amount: number | string | undefined,\n options?: { currency?: string; locale?: string; type?: 'product' | 'general' }\n ) => React.ReactNode;\n /** Parse money string to number */\n parse: (moneyString: string) => number;\n /** Check if value is valid monetary amount */\n isValid: (value: unknown) => boolean;\n}\n\n/**\n * useMoney - Hook for formatting monetary values\n *\n * @example\n * const { format, parse, isValid } = useMoney();\n * // Render price (SAR shows with icon):\n * <span>{format(100)}</span> // '100.00' with <i className=\"sicon-sar\" />\n */\nexport function useMoney(): UseMoneyResult {\n const { store } = useTwilight();\n const { locale } = useTranslation();\n const useArabicNumerals = store?.settings?.arabic_numbers_enabled ?? false;\n\n const format = (\n amount: number | string | undefined,\n options?: { currency?: string; locale?: string; type?: 'product' | 'general' }\n ): React.ReactNode => {\n const currency = options?.currency ?? 'SAR';\n const loc = options?.locale ?? locale;\n const type = options?.type ?? 'product'; // Default to 'product'\n\n // Handle undefined or null case\n if (amount == null || amount === '') {\n const showDash = type === 'product' ? store?.settings?.product?.show_price_as_dash : false; // General type defaults to not showing dash\n\n return showDash ? '-' : '';\n }\n\n const numericAmount = typeof amount === 'string' ? parseFloat(amount) : amount;\n\n if (typeof amount === 'string' && amount === '-') return amount;\n if (isNaN(numericAmount)) return String(amount);\n\n // Handle zero amounts with dash based on settings\n if (!numericAmount && numericAmount !== 0) {\n // This covers cases where amount evaluates to falsy but isn't explicitly 0\n const showDash = type === 'product' ? store?.settings?.product?.show_price_as_dash : false; // General type defaults to not showing dash\n\n return showDash ? '-' : '';\n }\n\n // Format number\n let formatted = new Intl.NumberFormat(loc, {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n }).format(numericAmount);\n\n // Apply Arabic numerals if enabled\n if (useArabicNumerals && loc.startsWith(AR_LOCALE)) {\n formatted = formatted.replace(/[0-9]/g, (d) => '٠١٢٣٤٥٦٧٨٩'[parseInt(d)]);\n }\n\n // For SAR, return with icon element\n if (currency === SAR_CURRENCY) {\n return (\n <>\n {formatted} <i className=\"sicon-sar\" />\n </>\n );\n }\n\n // For non-SAR currencies, try standard currency formatting\n try {\n return new Intl.NumberFormat(loc, {\n style: 'currency',\n currency,\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n }).format(numericAmount);\n } catch {\n return `${formatted} ${currency}`;\n }\n };\n\n const parse = (moneyString: string): number => {\n const cleaned = moneyString.replace(/[^\\d.,٬٫]/g, '');\n const normalized = cleaned.replace(/٬/g, '').replace(/٫/g, '.');\n const parts = normalized.split(/[.,]/);\n if (parts.length > 2) {\n return parseFloat(`${parts.slice(0, -1).join('')}.${parts[parts.length - 1]}`);\n }\n return parseFloat(normalized.replace(/,/g, ''));\n };\n\n const isValid = (value: unknown): boolean => {\n if (typeof value === 'number' && !isNaN(value) && isFinite(value)) return true;\n if (typeof value === 'string') {\n const parsed = parseFloat(value);\n return !isNaN(parsed) && isFinite(parsed);\n }\n return false;\n };\n\n return { format, parse, isValid };\n}\n","import { useCallback } from 'react';\nimport type { Product, Cart, CartItem } from '../types';\nimport { useTwilight } from '../providers';\nimport { useUser } from './useUser';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface UseGtmResult {\n /** Check if GTM is enabled */\n enabled: boolean;\n /** Raw push to dataLayer */\n push: (data: Record<string, unknown>) => void;\n /** Track page view */\n viewPage: (pageType: string) => void;\n /** Track product detail view */\n detail: (product: Product) => void;\n /** Track product impressions (listing) */\n impressions: (products: Product[], list?: string) => void;\n /** Track product click */\n click: (product: Product, list?: string, position?: number) => void;\n /** Track add to cart */\n add: (product: Product, quantity?: number) => void;\n /** Track remove from cart */\n remove: (item: CartItem) => void;\n /** Track checkout */\n checkout: (cart: Cart, step?: number) => void;\n /** Track purchase */\n purchase: (orderId: string | number, cart: Cart) => void;\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\n/** Generate unique event ID */\nfunction eventId(prefix: string): string {\n return `${prefix}_${Date.now()}_${Math.random().toString(36).slice(2, 9)}`;\n}\n\n/** Convert Product to GTM format */\nfunction toProduct(product: Product, overrides?: Record<string, unknown>): Record<string, unknown> {\n return {\n id: product.id,\n name: product.name,\n price: product.sale_price,\n brand: product.brand?.name,\n category: product.category?.name,\n quantity: 1,\n ...overrides,\n };\n}\n\n/** Get currency from product or fallback */\nfunction getCurrency(product?: Product, fallback = 'SAR'): string {\n return product?.currency ?? fallback;\n}\n\n// ============================================================================\n// Hook Implementation\n// ============================================================================\n\n/**\n * useGtm - Google Tag Manager hook for tracking events\n *\n * @example\n * ```tsx\n * function ProductPage({ product }) {\n * const gtm = useGtm();\n *\n * useEffect(() => { gtm.detail(product); }, [product.id]);\n * return <button onClick={() => gtm.add(product)}>Add to Cart</button>;\n * }\n * ```\n */\nexport function useGtm(): UseGtmResult {\n const { store } = useTwilight();\n const { data: user } = useUser();\n\n const gtmIds = store.settings?.keys?.gtm;\n const enabled = !!(gtmIds && gtmIds.length > 0);\n const currency = user?.preferences?.currency_code ?? 'SAR';\n\n const push = useCallback(\n (data: Record<string, unknown>) => {\n if (!enabled) return;\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push(data);\n },\n [enabled]\n );\n\n const viewPage = useCallback((pageType: string) => push({ event: 'viewPage', pageType }), [push]);\n\n const detail = useCallback(\n (product: Product) =>\n push({\n event: 'detail',\n ecommerce: {\n currencyCode: getCurrency(product, currency),\n event_id: eventId('detail'),\n detail: { products: [toProduct(product)] },\n },\n }),\n [push, currency]\n );\n\n const impressions = useCallback(\n (products: Product[], list?: string) => {\n if (products.length === 0) return;\n push({\n event: 'impressions',\n ecommerce: {\n currencyCode: getCurrency(products[0], currency),\n event_id: eventId('impressions'),\n impressions: {\n products: products.map((p, i) => toProduct(p, { position: i + 1, list })),\n },\n },\n });\n },\n [push, currency]\n );\n\n const click = useCallback(\n (product: Product, list?: string, position?: number) =>\n push({\n event: 'click',\n ecommerce: {\n currencyCode: getCurrency(product, currency),\n event_id: eventId('click'),\n click: {\n actionField: { list },\n products: [toProduct(product, { position, list })],\n },\n },\n }),\n [push, currency]\n );\n\n const add = useCallback(\n (product: Product, quantity = 1) =>\n push({\n event: 'addToCart',\n ecommerce: {\n currencyCode: getCurrency(product, currency),\n event_id: eventId('addToCart'),\n add: { products: [toProduct(product, { quantity })] },\n },\n }),\n [push, currency]\n );\n\n const remove = useCallback(\n (item: CartItem) =>\n push({\n event: 'removeFromCart',\n ecommerce: {\n currencyCode: currency,\n event_id: eventId('removeFromCart'),\n remove: {\n products: [\n {\n id: item.product_id,\n name: item.product_name,\n price: typeof item.price === 'number' ? item.price : item.price.amount,\n quantity: item.quantity,\n },\n ],\n },\n },\n }),\n [push, currency]\n );\n\n const checkout = useCallback(\n (cart: Cart, step = 1) =>\n push({\n event: 'checkout',\n ecommerce: {\n currencyCode: currency,\n event_id: eventId('checkout'),\n checkout: {\n actionField: { step, id: cart.id },\n products: cart.items.map((item) => ({\n id: item.product_id,\n name: item.product_name,\n price: typeof item.price === 'number' ? item.price : item.price.amount,\n quantity: item.quantity,\n })),\n },\n },\n }),\n [push, currency]\n );\n\n const purchase = useCallback(\n (orderId: string | number, cart: Cart) =>\n push({\n event: 'purchase',\n ecommerce: {\n currencyCode: currency,\n event_id: eventId('purchase'),\n purchase: {\n actionField: {\n id: orderId,\n revenue: cart.total,\n tax: cart.tax_amount,\n coupon: cart.coupon,\n },\n products: cart.items.map((item) => ({\n id: item.product_id,\n name: item.product_name,\n price: typeof item.price === 'number' ? item.price : item.price.amount,\n quantity: item.quantity,\n })),\n },\n },\n }),\n [push, currency]\n );\n\n return { enabled, push, viewPage, detail, impressions, click, add, remove, checkout, purchase };\n}\n","import { useMemo } from 'react';\nimport { useTranslation } from '../providers/i18n';\nimport type { OpeningHoursSettings } from '../types';\n\ntype DayOfWeek = 'monday' | 'tuesday' | 'wednesday' | 'thursday' | 'friday' | 'saturday' | 'sunday';\n\nconst DAYS: DayOfWeek[] = [\n 'monday',\n 'tuesday',\n 'wednesday',\n 'thursday',\n 'friday',\n 'saturday',\n 'sunday',\n];\n\nconst DAY_NAMES: Record<string, string> = {\n monday: 'common.days.monday',\n tuesday: 'common.days.tuesday',\n wednesday: 'common.days.wednesday',\n thursday: 'common.days.thursday',\n friday: 'common.days.friday',\n saturday: 'common.days.saturday',\n sunday: 'common.days.sunday',\n};\n\nconst TIME_NAMES: Record<string, string> = {\n AM: 'common.time.am',\n PM: 'common.time.pm',\n};\n\ninterface ParsedTimeRange {\n start: number; // minutes from midnight\n end: number; // minutes from midnight\n}\n\ninterface DaySchedule {\n ranges: ParsedTimeRange[];\n}\n\nexport interface UseOpeningHoursResult {\n /** Whether the store is currently open */\n isOpen: boolean;\n /** Whether opening hours feature is enabled and configured */\n isEnabled: boolean;\n /** Next opening time as Date object, null if currently open or not configured */\n nextOpen: Date | null;\n /** Formatted next opening time string, empty if currently open or not configured */\n nextOpenFormatted: string;\n}\n\n/**\n * Parse a time string like \"09:00\" or \"9:00 AM\" to minutes from midnight.\n */\nfunction parseTime(timeStr: string): number {\n const cleaned = timeStr.trim().toLowerCase();\n const match = cleaned.match(/^(\\d{1,2}):(\\d{2})(?:\\s*(am|pm))?$/);\n\n if (!match) {\n return 0;\n }\n\n let hours = parseInt(match[1], 10);\n const minutes = parseInt(match[2], 10);\n const meridiem = match[3];\n\n if (meridiem === 'pm' && hours < 12) {\n hours += 12;\n } else if (meridiem === 'am' && hours === 12) {\n hours = 0;\n }\n\n return hours * 60 + minutes;\n}\n\n/**\n * Parse opening hours ranges for a day.\n * Input format: [\"09:00-12:00\", \"13:00-18:00\"] or [\"09:00 AM - 12:00 PM\"]\n */\nfunction parseRanges(ranges: string[]): ParsedTimeRange[] {\n return ranges\n .map((range) => {\n const parts = range.split('-').map((s) => s.trim());\n if (parts.length !== 2) return null;\n\n const start = parseTime(parts[0]);\n const end = parseTime(parts[1]);\n\n return { start, end };\n })\n .filter((r): r is ParsedTimeRange => r !== null && r.start < r.end);\n}\n\n/**\n * Convert day index (0 = Monday) to day name.\n */\nfunction indexToDay(index: number): DayOfWeek {\n return DAYS[index % 7];\n}\n\n/**\n * Get the day index for a date (0 = Monday, 6 = Sunday).\n */\nfunction getDayIndex(date: Date): number {\n const jsDay = date.getDay(); // 0 = Sunday, 1 = Monday, etc.\n return jsDay === 0 ? 6 : jsDay - 1; // Convert to 0 = Monday\n}\n\n/**\n * Get current time in minutes from midnight.\n */\nfunction getTimeInMinutes(date: Date): number {\n return date.getHours() * 60 + date.getMinutes();\n}\n\n/**\n * Check if the given time falls within any of the ranges.\n */\nfunction isInRanges(time: number, ranges: ParsedTimeRange[]): boolean {\n return ranges.some((range) => time >= range.start && time < range.end);\n}\n\n/**\n * Find the next time range that starts after the given time.\n */\nfunction findNextRange(time: number, ranges: ParsedTimeRange[]): ParsedTimeRange | null {\n const sorted = [...ranges].sort((a, b) => a.start - b.start);\n return sorted.find((range) => range.start > time) ?? null;\n}\n\n/**\n * useOpeningHours - Hook for checking store opening status and next open time.\n *\n * @param settings - Opening hours settings from the store\n * @returns Opening status information\n *\n * @example\n * ```tsx\n * const { isOpen, nextOpenFormatted } = useOpeningHours(store.settings.opening_hours);\n *\n * if (!isOpen) {\n * return <div>Store closed. Opens at {nextOpenFormatted}</div>;\n * }\n * ```\n */\nexport function useOpeningHours(settings?: OpeningHoursSettings): UseOpeningHoursResult {\n const { t } = useTranslation();\n\n return useMemo(() => {\n if (!settings?.enabled || !settings?.hours) {\n return {\n isOpen: true, // Assume open if not configured\n isEnabled: false,\n nextOpen: null,\n nextOpenFormatted: '',\n };\n }\n\n const hours = settings.hours;\n const now = new Date();\n const currentDayIndex = getDayIndex(now);\n const currentTime = getTimeInMinutes(now);\n\n // Build schedule for all days\n const schedule: Record<DayOfWeek, DaySchedule> = {} as Record<DayOfWeek, DaySchedule>;\n for (const day of DAYS) {\n const dayRanges = hours[day];\n schedule[day] = {\n ranges: dayRanges ? parseRanges(dayRanges) : [],\n };\n }\n\n // Check if currently open\n const todaySchedule = schedule[indexToDay(currentDayIndex)];\n if (isInRanges(currentTime, todaySchedule.ranges)) {\n return {\n isOpen: true,\n isEnabled: true,\n nextOpen: null,\n nextOpenFormatted: '',\n };\n }\n\n // Find next open time\n // Check remaining ranges today\n const nextRangeToday = findNextRange(currentTime, todaySchedule.ranges);\n if (nextRangeToday) {\n const nextOpen = new Date(now);\n nextOpen.setHours(Math.floor(nextRangeToday.start / 60), nextRangeToday.start % 60, 0, 0);\n\n return {\n isOpen: false,\n isEnabled: true,\n nextOpen,\n nextOpenFormatted: formatNextOpen(nextOpen, t),\n };\n }\n\n // Check subsequent days (up to 7 days ahead)\n for (let i = 1; i <= 7; i++) {\n const nextDayIndex = (currentDayIndex + i) % 7;\n const nextDayName = indexToDay(nextDayIndex);\n const nextDaySchedule = schedule[nextDayName];\n\n if (nextDaySchedule.ranges.length > 0) {\n // Get the first range of that day\n const firstRange = [...nextDaySchedule.ranges].sort((a, b) => a.start - b.start)[0];\n\n const nextOpen = new Date(now);\n nextOpen.setDate(nextOpen.getDate() + i);\n nextOpen.setHours(Math.floor(firstRange.start / 60), firstRange.start % 60, 0, 0);\n\n return {\n isOpen: false,\n isEnabled: true,\n nextOpen,\n nextOpenFormatted: formatNextOpen(nextOpen, t),\n };\n }\n }\n\n // No opening hours found in the next week - assume open\n return {\n isOpen: true,\n isEnabled: true,\n nextOpen: null,\n nextOpenFormatted: '',\n };\n }, [settings, t]);\n}\n\n/**\n * Format the next open time similar to the PHP widget.\n * Output: \"Sunday 09:00 AM\" (translated)\n */\nfunction formatNextOpen(date: Date, t: (key: string) => string): string {\n const dayName = t(DAY_NAMES[indexToDay(getDayIndex(date))]);\n const hours = date.getHours();\n const minutes = date.getMinutes().toString().padStart(2, '0');\n const isPM = hours >= 12;\n const displayHours = hours > 12 ? hours - 12 : hours === 0 ? 12 : hours;\n const meridiem = t(TIME_NAMES[isPM ? 'PM' : 'AM']);\n\n return `${dayName} ${displayHours}:${minutes} ${meridiem}`;\n}\n","import { useEffect, useRef } from 'react';\n\n/**\n * Page config data structure for salla.config.set('page', ...)\n */\nexport interface PageConfigData {\n slug: string;\n id?: string | number;\n title: string;\n /** Optional - defaults to current location pathname + search */\n url?: string;\n parent?: { id: string | number; name: string; url: string } | null;\n}\n\n/**\n * usePageConfig - Centralized hook for setting salla.config.page\n *\n * Replaces scattered salla?.config?.set('page', ...) calls across multiple pages.\n * Handles optional salla object safely.\n * Automatically uses current URL from router context if url not provided.\n *\n * @param pageData - Page configuration data to set\n *\n * @example\n * ```tsx\n * // URL is auto-detected from router context\n * usePageConfig({\n * slug: 'product.index',\n * id: categoryId,\n * title: category.name,\n * });\n *\n * // With explicit URL override\n * usePageConfig({\n * slug: 'product.index',\n * id: categoryId,\n * title: category.name,\n * url: '/custom-url',\n * });\n * ```\n */\nexport function usePageConfig(pageData: PageConfigData): void {\n const pageDataRef = useRef(pageData);\n pageDataRef.current = pageData;\n\n useEffect(() => {\n const salla = window.salla;\n if (!salla?.config?.set) {\n if (process.env.NODE_ENV === 'development') {\n console.warn('[usePageConfig] salla.config.set not available. Page config not set.');\n }\n return;\n }\n\n const current = pageDataRef.current;\n const url = current.url ?? window.location.pathname + window.location.search;\n\n salla.config.set('page', {\n ...current,\n url,\n });\n }, []);\n}\n","import type { Breadcrumb } from '../types';\n\nexport const BREADCRUMB_REFERRER_KEY = 'breadcrumb-referrer';\n\nexport function getBreadcrumbReferrer(): Breadcrumb | null {\n try {\n const raw = sessionStorage.getItem(BREADCRUMB_REFERRER_KEY);\n if (!raw) return null;\n const { name, url } = JSON.parse(raw);\n return typeof name === 'string' && typeof url === 'string' ? { name, url } : null;\n } catch {\n return null;\n }\n}\n\nexport function setBreadcrumbReferrer(breadcrumb: Breadcrumb): void {\n try {\n sessionStorage.setItem(BREADCRUMB_REFERRER_KEY, JSON.stringify(breadcrumb));\n } catch {\n // sessionStorage unavailable (private browsing quota, etc.)\n }\n}\n","import { useMemo, useEffect, useState } from 'react';\nimport { useLocation, useIsHome } from '../providers';\nimport { useTranslation } from '../providers/i18n';\nimport { getBreadcrumbReferrer, setBreadcrumbReferrer } from '../utils/breadcrumb';\nimport type { Breadcrumb, Page } from '../types';\n\nexport function useBreadcrumbs(page?: Page | null): Breadcrumb[] {\n const location = useLocation();\n const isHome = useIsHome();\n const { t } = useTranslation();\n\n const [referrerCrumb, setReferrerCrumb] = useState<Breadcrumb | null>(null);\n\n useEffect(() => {\n if (page?.slug === 'product.single') {\n const ref = getBreadcrumbReferrer();\n if (ref) setReferrerCrumb(ref);\n return;\n }\n\n setReferrerCrumb(null);\n\n if (!isHome && page) {\n setBreadcrumbReferrer({ name: page.title, url: location.pathname + location.searchStr });\n }\n }, [page, isHome, location.pathname, location.searchStr]);\n\n return useMemo(() => {\n if (!page) return [];\n\n if (page.breadcrumbs?.length) {\n if (page.slug === 'product.single' && referrerCrumb) {\n const last = page.breadcrumbs.at(-1);\n return last ? [page.breadcrumbs[0], referrerCrumb, last] : page.breadcrumbs;\n }\n return page.breadcrumbs;\n }\n\n if (isHome) return [];\n\n const home: Breadcrumb = { name: t('common.titles.home'), url: '/' };\n return [home, { name: page.title, url: location.pathname }];\n }, [isHome, location.pathname, page, t, referrerCrumb]);\n}\n","/**\n * Auto-registered default hooks for tracking/notification components.\n *\n * This module is imported automatically by hooks/index.ts to register\n * default handlers for body:start and body:end hooks.\n *\n * All handlers check conditions at render time via twilight context,\n * so they work without any setup from theme-custom.\n */\n\nimport React, { lazy, Suspense } from 'react';\nimport { hookRegistry } from './HookRegistry';\nimport { HookName } from '../types/hooks';\nimport type { HookContext } from './HookSlot';\nimport { useUser } from './useUser';\n\n// Lazy load tracking/notification components from theme-engine\nconst GoogleTagBody = lazy(() =>\n import('../components/tracking/GoogleTag').then((m) => ({ default: m.GoogleTagBody }))\n);\n\nconst TwilightBundles = lazy(() =>\n import('../components/tracking/TwilightBundles').then((m) => ({ default: m.TwilightBundles }))\n);\n\nconst LazySiftSnippet = lazy(() =>\n import('../components/tracking/SiftSnippet').then((m) => ({ default: m.SiftSnippet }))\n);\n\nconst LazyStoreClosedNotification = lazy(() =>\n import('../components/store/StoreClosedNotification').then((m) => ({\n default: m.StoreClosedNotification,\n }))\n);\n\n// Lazy load cart widget components\nconst LazyPriceQuoteButton = lazy(() =>\n import('../components/cart/PriceQuoteButton').then((m) => ({ default: m.PriceQuoteButton }))\n);\n\nconst LazyPreOrderNotification = lazy(() =>\n import('../components/cart/PreOrderNotification').then((m) => ({\n default: m.PreOrderNotification,\n }))\n);\n\n/**\n * GTM handler - renders GoogleTagBody if store has GTM keys configured.\n */\nfunction gtmHandler({ twilight }: HookContext): React.ReactNode {\n if (!twilight?.store?.settings?.keys?.gtm?.length) {\n return null;\n }\n\n return (\n <Suspense fallback={null}>\n <GoogleTagBody gtmIds={twilight.store.settings.keys.gtm} />\n </Suspense>\n );\n}\n\n/**\n * Sift handler - renders SiftSnippet if store has sift key configured.\n */\nfunction useSiftHandler({ twilight }: HookContext): React.ReactNode {\n const { data: user } = useUser();\n\n if (!twilight?.store?.settings?.keys?.sift) {\n return null;\n }\n\n const customerId = user?.type === 'user' && user.id ? String(user.id) : '';\n\n return (\n <Suspense fallback={null}>\n <LazySiftSnippet beaconKey={twilight.store.settings.keys.sift} customerId={customerId} />\n </Suspense>\n );\n}\n\n/**\n * Store closed notification handler - renders if opening hours feature is enabled.\n */\nfunction storeClosedHandler({ twilight }: HookContext): React.ReactNode {\n if (!twilight?.store?.settings?.opening_hours?.enabled) {\n return null;\n }\n\n return (\n <Suspense fallback={null}>\n <LazyStoreClosedNotification />\n </Suspense>\n );\n}\n\n/**\n * Twilight bundles handler - always renders (core tracking).\n */\nfunction bundlesHandler(): React.ReactNode {\n return (\n <Suspense fallback={null}>\n <TwilightBundles />\n </Suspense>\n );\n}\n\n/**\n * Price quote handler - renders if price-quote feature is enabled.\n * Twig: PriceQuoteWidget - checks feature('price-quote')->isAccessibleForCustomers()\n */\nfunction priceQuoteHandler({ twilight }: HookContext): React.ReactNode {\n // TODO: support price_quote in store settings API response\n if (!twilight?.store?.settings?.features?.price_quote) {\n return null;\n }\n\n return (\n <Suspense fallback={null}>\n <LazyPriceQuoteButton />\n </Suspense>\n );\n}\n\n/**\n * Pre-order notification handler - renders if cart has items with active pre-order campaigns.\n * Twig: PreOrderNotificationWidget - checks cart items for getHasActivePreorderCampaign()\n */\nfunction preOrderNotificationHandler({ twilight, cartItems }: HookContext): React.ReactNode {\n if (!twilight?.store?.settings?.features?.['pre-order-campaigns']) {\n return null;\n }\n\n const items = cartItems as\n | Array<{ has_pre_order_campaign?: boolean; parent_id?: unknown }>\n | undefined;\n const hasPreOrder = items?.some((item) => !item.parent_id && item.has_pre_order_campaign);\n\n if (!hasPreOrder) {\n return null;\n }\n\n return (\n <Suspense fallback={null}>\n <LazyPreOrderNotification />\n </Suspense>\n );\n}\n\n/**\n * Register all default hooks from theme-engine.\n * Called automatically on module import.\n *\n * Note: theme-custom can register additional handlers like AddProductToast.\n */\nfunction registerDefaultHooks(): void {\n // Body start hooks (tracking, notifications)\n hookRegistry.register(HookName.BODY_START, gtmHandler, 100);\n hookRegistry.register(HookName.BODY_START, useSiftHandler, 90);\n hookRegistry.register(HookName.BODY_START, storeClosedHandler, 80);\n\n // Body end hooks (bundles)\n hookRegistry.register(HookName.BODY_END, bundlesHandler, 100);\n\n // Cart hooks\n hookRegistry.register('cart:submit.start', priceQuoteHandler, 100);\n hookRegistry.register('cart:items.start', preOrderNotificationHandler, 100);\n}\n\n// Auto-register on module load\nregisterDefaultHooks();\n\nexport { registerDefaultHooks };\n","import { useState } from 'react';\nimport { SallaAppsIcons } from '@salla.sa/twilight-components-react/apps-icons';\nimport { SallaContacts } from '@salla.sa/twilight-components-react/contacts';\nimport { SallaMenu } from '@salla.sa/twilight-components-react/menu';\nimport { SallaPayments } from '@salla.sa/twilight-components-react/payments';\nimport { SallaSocial } from '@salla.sa/twilight-components-react/social';\nimport { SallaTrustBadges } from '@salla.sa/twilight-components-react/trust-badges';\nimport { useTranslation } from '../../providers/i18n';\nimport { HookSlot } from '../../hooks/HookSlot';\nimport { Copyright } from './Copyright';\nimport { useTwilight } from '../../providers/twilight-context';\nimport { Link, Image } from '../common';\nimport { ImageModal } from '../../components/modal';\nimport { useAsset } from '../../hooks';\n\nexport function Footer() {\n const { store, theme } = useTwilight();\n const { cdn } = useAsset();\n const { t } = useTranslation();\n const [isTaxModalOpen, setIsTaxModalOpen] = useState(false);\n const [taxImageSrc, setTaxImageSrc] = useState('');\n\n const handleTaxImageClick = (event: React.MouseEvent<HTMLAnchorElement>) => {\n event.preventDefault();\n const modalId = event.currentTarget.dataset.modalId;\n const modal = document.getElementById(modalId || '');\n const img = modal?.querySelector('img');\n const imgSrc = img?.dataset.src;\n\n if (imgSrc) {\n setTaxImageSrc(imgSrc);\n setIsTaxModalOpen(true);\n }\n };\n\n return (\n <footer className=\"store-footer\" suppressHydrationWarning>\n <HookSlot name=\"footer:start\" />\n <div aria-label=\"footer\" className=\"store-footer__inner\">\n <div className=\"container grid grid-cols-1 lg:grid-cols-6 gap-8 lg:gap-6\">\n {/* Store Info */}\n <div className=\"lg:col-span-2 rtl:lg:pl-20 ltr:lg:pr-20\">\n <Link to=\"/\" className=\"flex items-center m-0\">\n <h3>{store.name}</h3>\n </Link>\n {store.description && (\n <div\n className=\"max-w-sm leading-6 mb-6\"\n dangerouslySetInnerHTML={{ __html: store.description }}\n />\n )}\n\n <div className=\"hidden lg:block\">\n <SallaSocial className=\"block mb-6\" />\n </div>\n\n <div className=\"flex gap-4\">\n <SallaTrustBadges {...(theme.settings?.footer_is_dark ? { dark: true } : {})} />\n\n {store.settings?.tax?.number && (\n <div className=\"flex rtl:space-x-reverse space-x-2 items-end\">\n {store.settings?.tax?.certificate && (\n <a\n data-modal-id=\"modal-value-tax\"\n href=\"#/\"\n aria-label={store.settings?.tax?.number}\n onClick={handleTaxImageClick}\n >\n <img\n width={40}\n height={40}\n src={cdn('/images/placeholder.png')}\n className=\"w-10 rounded-sm hover:opacity-80 transition-opacity\"\n alt=\"value added tax\"\n loading=\"lazy\"\n decoding=\"async\"\n />\n </a>\n )}\n <div>\n <p className=\"text-sm text-text-grey mb-1\">\n {t('common.elements.tax_number', 'Tax Number')}\n </p>\n <b className=\"text-sm\">{store.settings?.tax?.number}</b>\n </div>\n </div>\n )}\n </div>\n </div>\n\n {/* Footer Links */}\n <div>\n <h3>{t('blocks.footer.pages_links', 'Important Links')}</h3>\n <SallaMenu source=\"footer\" />\n </div>\n\n {/* Contact Info */}\n <div>\n <SallaContacts\n contacts={store.contacts}\n contactsTitle={t('blocks.footer.social', 'Stay in touch')}\n />\n\n <div className=\"lg:hidden contact-social\">\n <SallaSocial />\n </div>\n </div>\n\n {/* App Icons */}\n <SallaAppsIcons\n apps={store.apps}\n appsTitle={t('blocks.footer.download_apps', 'Get our apps')}\n className=\"lg:col-span-2 rtl:lg:pr-20 ltr:lg:pl-20\"\n />\n </div>\n </div>\n\n {/* Copyright */}\n <div className=\"md:flex items-center justify-between py-4 container text-center\">\n <span className=\"text-sm copyright-text\">\n <HookSlot\n name=\"copyright\"\n context={{ storeName: store.name }}\n fallback={<Copyright storeName={store.name} />}\n />\n </span>\n <SallaPayments />\n </div>\n\n {/* Hidden modal content for data extraction */}\n <div id=\"modal-value-tax\" className=\"hidden\">\n <Image src={store.settings?.tax?.certificate || undefined} alt=\"Tax Certificate\" />\n </div>\n\n {/* Image Modal */}\n <ImageModal\n isOpen={isTaxModalOpen}\n onClose={() => setIsTaxModalOpen(false)}\n src={taxImageSrc}\n alt=\"Tax Certificate\"\n title={t('common.elements.tax_certificate', 'Tax Certificate')}\n />\n <HookSlot name=\"footer:end\" />\n </footer>\n );\n}\n","import { lazy, Suspense } from 'react';\nimport { Header } from './Header';\nimport { Footer } from './Footer';\nimport type { LayoutProps } from '../../types';\nimport { useTwilight } from '../../providers/twilight-context';\nimport { useUser } from '../../hooks';\n\nconst SallaLoginModal = lazy(() =>\n import('@salla.sa/twilight-components-react/login-modal').then((m) => ({\n default: m.SallaLoginModal,\n }))\n);\nconst SallaScopes = lazy(() =>\n import('@salla.sa/twilight-components-react/scopes').then((m) => ({\n default: m.SallaScopes,\n }))\n);\nconst SallaOfferModal = lazy(() =>\n import('@salla.sa/twilight-components-react/offer-modal').then((m) => ({\n default: m.SallaOfferModal,\n }))\n);\n\nexport function MasterLayout({ children }: LayoutProps) {\n const { store } = useTwilight();\n const { isLoggedIn } = useUser();\n\n return (\n <>\n <div className=\"app-inner flex flex-col min-h-full\">\n <Header />\n <main id=\"main-content\" role=\"main\" className=\"flex-1\">\n {children}\n </main>\n <Footer />\n </div>\n\n <Suspense>\n <SallaOfferModal />\n </Suspense>\n\n {!isLoggedIn && (\n <Suspense>\n <SallaLoginModal\n isEmailAllowed={store?.settings?.auth?.email_allowed}\n isMobileAllowed={store?.settings?.auth?.mobile_allowed}\n isEmailRequired={store?.settings?.auth?.is_email_required}\n suppressHydrationWarning\n />\n </Suspense>\n )}\n\n {store?.scope && (\n <Suspense>\n <SallaScopes\n selection={store?.scope?.display_as === 'popup' ? 'mandatory' : 'optional'}\n suppressHydrationWarning\n />\n </Suspense>\n )}\n </>\n );\n}\n","import React, { useMemo, Suspense, useState, useEffect } from 'react';\nimport { WidgetHead } from '../components/layout/WidgetHead';\nimport { HookSlot } from '../hooks/HookSlot';\nimport { HookName } from '../types/hooks';\nimport { DocumentClassProvider } from './DocumentClassProvider';\nimport { TwilightContext } from './twilight-context';\nimport { ThemeDocumentSync } from './twilight-theme';\nimport { useTwilightInit } from './twilight-init';\nimport { I18nProvider } from './i18n';\nimport { FALLBACK_LOCALE } from './i18n';\nimport { navigationSetups, NavigationInterceptor } from './NavigationProvider';\nimport { routeDocumentSyncs } from './DocumentSyncRegistry';\nimport { MasterLayout } from '../components/layout/MasterLayout';\nimport { Toaster } from '../components/toast';\nimport { getTwilightContext, updateTwilightContext } from '../twilight/context';\nimport { AUTH_TOKEN_COOKIE_NAME, clearAuthTokenCookie } from '../utils/cookies';\nimport type {\n TwilightContextValue,\n TwilightConfig,\n TwilightProviderProps,\n TwilightLog,\n} from './twilight.types';\nimport type { StoreContext } from '../api/store';\n\nconst getSalla = () => (typeof window !== 'undefined' ? window.salla : undefined);\n\nconst TWILIGHT_LOG_STYLES = {\n header:\n 'background: linear-gradient(90deg, #7c3aed, #6366f1); color: white; padding: 4px 8px; border-radius: 4px; font-weight: bold;',\n error:\n 'background: #dc2626; color: white; padding: 2px 6px; border-radius: 3px; font-weight: bold;',\n warn: 'background: #f59e0b; color: white; padding: 2px 6px; border-radius: 3px; font-weight: bold;',\n info: 'background: #3b82f6; color: white; padding: 2px 6px; border-radius: 3px; font-weight: bold;',\n label: 'color: #7c3aed; font-weight: bold;',\n value: 'color: inherit;',\n};\n\nexport { useTwilight } from './twilight-context';\nexport type { TwilightProviderProps };\n\nexport function TwilightProvider({\n children,\n debug = false,\n skeleton,\n translations: themeTranslations,\n onReady,\n onError,\n client = { framework: 'tanstack', interceptLinks: true },\n toast = true,\n toastMobilePosition = 'bottom-center',\n addToCartToast = true,\n routeClass = true,\n layout: LayoutComponent = MasterLayout,\n}: TwilightProviderProps): React.ReactElement {\n const ctx = getTwilightContext();\n const initialLocale = ctx.locale || FALLBACK_LOCALE;\n let initialData: StoreContext | undefined;\n try {\n initialData = ctx.settings;\n } catch {\n // Settings not initialized yet — loading state\n }\n\n // Auth token state for React re-renders on login/logout\n const [authToken, setAuthToken] = useState<string | null>(() => {\n if (typeof window !== 'undefined') {\n return ctx.authToken ?? window.localStorage.getItem(AUTH_TOKEN_COOKIE_NAME);\n }\n return null;\n });\n\n // SDK auth event listeners\n useEffect(() => {\n if (typeof window === 'undefined') return;\n\n const sdk = getSalla();\n if (!sdk?.auth?.event) return;\n\n // Symmetric counterpart to handleTokenInvalid's clear below. path=/ + Lax so the\n // cookie is sent on the native webview's top-level navigation to /account/orders,\n // letting twilightMiddleware authenticate the SSR render — the SDK only stores the\n // token in localStorage, which the server can't read.\n const writeAuthCookie = (token: string) => {\n document.cookie = `${AUTH_TOKEN_COOKIE_NAME}=${token}; path=/; max-age=${60 * 60 * 24 * 30}; SameSite=Lax; Secure`;\n };\n\n const clearAuthCookie = clearAuthTokenCookie;\n\n // The SDK only refreshes `user.type` on a full page load, but our auth flows update\n // the UI without one — SDK components read it directly (e.g. salla-login-modal's\n // render bails for 'user' and never creates its inner modal), so keep it in sync.\n const setSdkUserType = (type: 'user' | 'guest') => {\n sdk.config?.set?.('user.type', type);\n };\n\n const handleLogin = () => {\n const newToken = sdk.storage.get(AUTH_TOKEN_COOKIE_NAME) as string | null;\n // logged.in can fire before the token is stored (iframe mirror) — don't clobber\n if (!newToken) return;\n setAuthToken(newToken);\n updateTwilightContext({ authToken: newToken });\n setSdkUserType('user');\n };\n\n // Fires on a fresh token fetch (login / web-session refresh — the native app flow).\n // Mirror the token into a cookie so SSR loads of authenticated pages are authenticated.\n const handleTokenFetched = (token: unknown) => {\n if (typeof token !== 'string' || !token) return;\n setAuthToken(token);\n updateTwilightContext({ authToken: token });\n writeAuthCookie(token);\n setSdkUserType('user');\n };\n\n const handleLogout = () => {\n const wasLoggedIn = Boolean(getTwilightContext().authToken);\n setAuthToken(null);\n updateTwilightContext({ authToken: null });\n setSdkUserType('guest');\n // Clear the SSR cookie too, otherwise a logged-out user's next full-page load\n // would still send a stale token to the server.\n try {\n clearAuthCookie();\n } catch {\n // Cookie removal may fail in restricted environments\n }\n // SDK logout redirects via location.href only after an accounts-iframe roundtrip\n // that can hang forever (iOS webview). If its redirect hasn't unloaded the page\n // by then, reload so SSR re-renders as guest. Guarded to logged-in users so the\n // SDK's force_logout guest flow can't reload-loop.\n if (wasLoggedIn) {\n window.setTimeout(() => window.location.reload(), 3500);\n }\n };\n\n const handleTokenInvalid = () => {\n setAuthToken(null);\n updateTwilightContext({ authToken: null });\n setSdkUserType('guest');\n try {\n window.localStorage.removeItem(AUTH_TOKEN_COOKIE_NAME);\n sdk.storage.remove?.(AUTH_TOKEN_COOKIE_NAME);\n clearAuthCookie();\n } catch {\n // Storage/cookie removal may fail in restricted environments\n }\n };\n\n sdk.auth.event.onLoggedIn(handleLogin);\n sdk.auth.event.onLoggedOut(handleLogout);\n sdk.event.on('auth::token.invalid', handleTokenInvalid);\n sdk.event.on('auth::token.fetched', handleTokenFetched);\n // fires on every token path, and BEFORE logged.in in the login-iframe flow\n sdk.event.on('api::token.injected', handleTokenFetched);\n\n return () => {\n // Sub-emitters use root salla.event.off for cleanup\n sdk.event.off('auth::loggedIn', handleLogin);\n sdk.event.off('auth::loggedOut', handleLogout);\n sdk.event.off('auth::token.invalid', handleTokenInvalid);\n sdk.event.off('auth::token.fetched', handleTokenFetched);\n sdk.event.off('api::token.injected', handleTokenFetched);\n };\n }, []);\n\n const { isReady, storeData, setStoreData, themeData, currency, isMobileWebview } =\n useTwilightInit({\n debug,\n initialData,\n onReady,\n onError,\n initialLocale,\n });\n\n const config = useMemo<TwilightConfig>(() => ({ debug }), [debug]);\n\n const log = useMemo<TwilightLog>(\n () => ({\n groupCollapsed: (title) =>\n console.groupCollapsed(`%c ⚡ Twilight: ${title} `, TWILIGHT_LOG_STYLES.header),\n group: (title) => console.group(`%c${title}`, TWILIGHT_LOG_STYLES.label),\n groupEnd: () => console.groupEnd(),\n error: (label, value) =>\n console.log(`%c[${label}]%c`, TWILIGHT_LOG_STYLES.error, TWILIGHT_LOG_STYLES.value, value),\n warn: (label, value) =>\n console.log(`%c[${label}]%c`, TWILIGHT_LOG_STYLES.warn, TWILIGHT_LOG_STYLES.value, value),\n info: (label, value) =>\n console.log(`%c[${label}]%c`, TWILIGHT_LOG_STYLES.info, TWILIGHT_LOG_STYLES.value, value),\n label: (label, value) =>\n console.log(`%c[${label}]%c`, TWILIGHT_LOG_STYLES.label, TWILIGHT_LOG_STYLES.value, value),\n dir: (label, value) => {\n console.log(`%c${label}`, TWILIGHT_LOG_STYLES.label);\n console.dir(value);\n },\n trace: (label, trace) => {\n console.log(`%c${label}`, TWILIGHT_LOG_STYLES.label);\n console.error(trace);\n },\n }),\n []\n );\n\n const contextValue = useMemo<TwilightContextValue>(\n () => ({\n isReady,\n store: storeData,\n _setStore: setStoreData,\n theme: themeData,\n currency,\n config,\n log,\n get salla() {\n return getSalla();\n },\n get settings() {\n return getTwilightContext().settings;\n },\n get locale() {\n return getTwilightContext().locale;\n },\n get routeId() {\n return getTwilightContext().routeId;\n },\n get location() {\n return getTwilightContext().location;\n },\n get authToken() {\n return authToken;\n },\n get i18n() {\n return getTwilightContext().i18n;\n },\n get dir() {\n return getTwilightContext().dir;\n },\n get extras() {\n return getTwilightContext().extras;\n },\n }),\n [isReady, storeData, setStoreData, themeData, currency, config, log, authToken]\n );\n\n const framework = client !== false ? (client?.framework ?? 'tanstack') : null;\n const LazyNavSetup = framework ? navigationSetups[framework] : null;\n const LazyDocumentSync = routeClass && framework ? routeDocumentSyncs[framework] : null;\n const interceptLinks = client !== false && (client?.interceptLinks ?? true);\n\n const documentSyncElement = useMemo(\n () => (LazyDocumentSync ? React.createElement(LazyDocumentSync) : null),\n [LazyDocumentSync]\n );\n\n const readyShell = useMemo(() => {\n if (!isReady) return null;\n return {\n LayoutComponent,\n LazyNavSetup,\n toast,\n toastMobilePosition,\n addToCartToast,\n interceptLinks,\n };\n }, [\n isReady,\n LazyNavSetup,\n LayoutComponent,\n toast,\n toastMobilePosition,\n addToCartToast,\n interceptLinks,\n ]);\n\n const readyContent = useMemo(() => {\n if (!readyShell) return null;\n\n const inner = readyShell.LayoutComponent ? (\n <readyShell.LayoutComponent>{children}</readyShell.LayoutComponent>\n ) : (\n children\n );\n\n const wrapped = (\n <>\n <WidgetHead />\n <HookSlot name={HookName.BODY_START} />\n <Suspense fallback={null}>\n {readyShell.toast && (\n <Toaster\n mobilePosition={readyShell.toastMobilePosition}\n addToCartToast={readyShell.addToCartToast}\n />\n )}\n {readyShell.interceptLinks && <NavigationInterceptor />}\n </Suspense>\n {inner}\n <HookSlot name={HookName.BODY_END} />\n </>\n );\n\n if (readyShell.LazyNavSetup) {\n return React.createElement(readyShell.LazyNavSetup, null, wrapped);\n }\n return wrapped;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [readyShell]);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const i18nInstance = useMemo(() => getTwilightContext().i18n, [initialLocale]);\n\n return (\n <DocumentClassProvider>\n <TwilightContext.Provider value={contextValue}>\n <I18nProvider i18nInstance={i18nInstance} themeTranslations={themeTranslations}>\n <ThemeDocumentSync\n theme={themeData}\n locale={initialLocale}\n direction={getTwilightContext().dir}\n isMobileWebview={isMobileWebview}\n />\n {documentSyncElement}\n {!isReady && (\n <div className=\"loading-overlay\">{skeleton || <div className=\"loading-spinner\" />}</div>\n )}\n {readyContent}\n </I18nProvider>\n </TwilightContext.Provider>\n </DocumentClassProvider>\n );\n}\n\nexport default TwilightProvider;\n","import { useCallback } from 'react';\nimport { useTwilight } from '../providers/TwilightProvider';\nimport type { Store } from '../types';\n\n/**\n * UseStoreResult - Return type for useStore hook\n *\n * Extends the Store interface with a refresh method to re-fetch\n * the latest store configuration from the Salla SDK.\n */\nexport interface UseStoreResult extends Store {\n refresh: () => Promise<void>;\n}\n\n/**\n * useStore - Hook for accessing and managing store state\n *\n * Provides access to the store configuration and metadata from the\n * Twilight provider. Includes a refresh method to update the store\n * state with the latest data from the Salla SDK.\n *\n * @returns Store object with refresh() method to reload store data\n *\n * @example\n * ```tsx\n * function StoreInfo() {\n * const { name, currency, refresh } = useStore();\n *\n * return (\n * <div>\n * <h1>{name}</h1>\n * <button onClick={refresh}>Refresh store data</button>\n * <p>Current currency: {currency}</p>\n * </div>\n * );\n * }\n * ```\n */\nexport function useStore(): UseStoreResult {\n const { store, _setStore, salla } = useTwilight();\n\n const refresh = useCallback(async () => {\n if (!salla) return;\n try {\n const data = salla.config.all();\n if (data?.store && typeof data.store === 'object') {\n _setStore((prev) => ({ ...prev, ...(data.store as Partial<Store>) }));\n }\n } catch {\n // Silently ignore errors - store remains unchanged\n }\n }, [salla, _setStore]);\n\n return { ...store, refresh };\n}\n"]}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { mergeElementAttrs, syncAttrsToElement } from './chunk-CW625T2E.js';
|
|
2
|
+
import { createContext, useRef, useMemo, useSyncExternalStore, useEffect, useId, useContext } from 'react';
|
|
3
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
4
|
+
|
|
5
|
+
function createDocumentElementStore() {
|
|
6
|
+
const map = /* @__PURE__ */ new Map();
|
|
7
|
+
const listeners = /* @__PURE__ */ new Set();
|
|
8
|
+
let snapshot = new Map(map);
|
|
9
|
+
const notify = () => {
|
|
10
|
+
snapshot = new Map(map);
|
|
11
|
+
for (const l of listeners) l();
|
|
12
|
+
};
|
|
13
|
+
return {
|
|
14
|
+
subscribe: (listener) => {
|
|
15
|
+
listeners.add(listener);
|
|
16
|
+
return () => listeners.delete(listener);
|
|
17
|
+
},
|
|
18
|
+
getSnapshot: () => snapshot,
|
|
19
|
+
getServerSnapshot: () => snapshot,
|
|
20
|
+
register: (id, descriptor) => {
|
|
21
|
+
map.set(id, descriptor);
|
|
22
|
+
notify();
|
|
23
|
+
},
|
|
24
|
+
unregister: (id) => {
|
|
25
|
+
if (map.delete(id)) notify();
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
var DocumentClassContext = createContext(null);
|
|
30
|
+
function useDocumentClassContext() {
|
|
31
|
+
return useContext(DocumentClassContext);
|
|
32
|
+
}
|
|
33
|
+
function DocumentClassProvider({ children }) {
|
|
34
|
+
const storeRef = useRef(null);
|
|
35
|
+
if (!storeRef.current) {
|
|
36
|
+
storeRef.current = createDocumentElementStore();
|
|
37
|
+
}
|
|
38
|
+
const value = useMemo(() => ({ store: storeRef.current }), []);
|
|
39
|
+
return /* @__PURE__ */ jsxs(DocumentClassContext.Provider, { value, children: [
|
|
40
|
+
children,
|
|
41
|
+
/* @__PURE__ */ jsx(DocumentElementDOMSync, { store: storeRef.current })
|
|
42
|
+
] });
|
|
43
|
+
}
|
|
44
|
+
function DocumentElementDOMSync({ store }) {
|
|
45
|
+
const registrations = useSyncExternalStore(
|
|
46
|
+
store.subscribe,
|
|
47
|
+
store.getSnapshot,
|
|
48
|
+
store.getServerSnapshot
|
|
49
|
+
);
|
|
50
|
+
useEffect(() => {
|
|
51
|
+
if (typeof document === "undefined") return;
|
|
52
|
+
const bodyAttrs = mergeElementAttrs([...registrations.values()].map((d) => d.body ?? {}));
|
|
53
|
+
const htmlAttrs = mergeElementAttrs([...registrations.values()].map((d) => d.html ?? {}));
|
|
54
|
+
syncAttrsToElement(document.body, bodyAttrs);
|
|
55
|
+
syncAttrsToElement(document.documentElement, htmlAttrs);
|
|
56
|
+
}, [registrations]);
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// src/hooks/useDocumentClass.ts
|
|
61
|
+
function useDocumentClass(descriptor) {
|
|
62
|
+
const id = useId();
|
|
63
|
+
const ctx = useDocumentClassContext();
|
|
64
|
+
const descriptorRef = useRef(descriptor);
|
|
65
|
+
descriptorRef.current = descriptor;
|
|
66
|
+
const descriptorKey = useMemo(
|
|
67
|
+
() => JSON.stringify(descriptor),
|
|
68
|
+
[
|
|
69
|
+
JSON.stringify(descriptor)
|
|
70
|
+
// intentional: content-based comparison
|
|
71
|
+
]
|
|
72
|
+
);
|
|
73
|
+
useEffect(() => {
|
|
74
|
+
if (ctx) {
|
|
75
|
+
ctx.store.register(id, descriptorRef.current);
|
|
76
|
+
return () => ctx.store.unregister(id);
|
|
77
|
+
}
|
|
78
|
+
if (typeof document === "undefined") return;
|
|
79
|
+
const bodyAttrs = mergeElementAttrs([descriptorRef.current.body ?? {}]);
|
|
80
|
+
const htmlAttrs = mergeElementAttrs([descriptorRef.current.html ?? {}]);
|
|
81
|
+
syncAttrsToElement(document.body, bodyAttrs);
|
|
82
|
+
syncAttrsToElement(document.documentElement, htmlAttrs);
|
|
83
|
+
return () => {
|
|
84
|
+
syncAttrsToElement(document.body, {});
|
|
85
|
+
syncAttrsToElement(document.documentElement, {});
|
|
86
|
+
};
|
|
87
|
+
}, [id, ctx, descriptorKey]);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export { DocumentClassProvider, useDocumentClass };
|
|
91
|
+
//# sourceMappingURL=chunk-GN34LCTG.js.map
|
|
92
|
+
//# sourceMappingURL=chunk-GN34LCTG.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/providers/DocumentClassProvider.tsx","../src/hooks/useDocumentClass.ts"],"names":["useRef","useMemo","useEffect"],"mappings":";;;;AA4BA,SAAS,0BAAA,GAAmD;AAC1D,EAAA,MAAM,GAAA,uBAAU,GAAA,EAAuC;AACvD,EAAA,MAAM,SAAA,uBAAgB,GAAA,EAAgB;AAGtC,EAAA,IAAI,QAAA,GAA6D,IAAI,GAAA,CAAI,GAAG,CAAA;AAE5E,EAAA,MAAM,SAAS,MAAM;AACnB,IAAA,QAAA,GAAW,IAAI,IAAI,GAAG,CAAA;AACtB,IAAA,KAAA,MAAW,CAAA,IAAK,WAAW,CAAA,EAAE;AAAA,EAC/B,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,SAAA,EAAW,CAAC,QAAA,KAAa;AACvB,MAAA,SAAA,CAAU,IAAI,QAAQ,CAAA;AACtB,MAAA,OAAO,MAAM,SAAA,CAAU,MAAA,CAAO,QAAQ,CAAA;AAAA,IACxC,CAAA;AAAA,IACA,aAAa,MAAM,QAAA;AAAA,IACnB,mBAAmB,MAAM,QAAA;AAAA,IACzB,QAAA,EAAU,CAAC,EAAA,EAAI,UAAA,KAAe;AAC5B,MAAA,GAAA,CAAI,GAAA,CAAI,IAAI,UAAU,CAAA;AACtB,MAAA,MAAA,EAAO;AAAA,IACT,CAAA;AAAA,IACA,UAAA,EAAY,CAAC,EAAA,KAAO;AAClB,MAAA,IAAI,GAAA,CAAI,MAAA,CAAO,EAAE,CAAA,EAAG,MAAA,EAAO;AAAA,IAC7B;AAAA,GACF;AACF;AAUA,IAAM,oBAAA,GAAuB,cAAgD,IAAI,CAAA;AAE1E,SAAS,uBAAA,GAA4D;AAC1E,EAAA,OAAO,WAAW,oBAAoB,CAAA;AACxC;AAUO,SAAS,qBAAA,CAAsB,EAAE,QAAA,EAAS,EAA+B;AAC9E,EAAA,MAAM,QAAA,GAAW,OAAoC,IAAI,CAAA;AACzD,EAAA,IAAI,CAAC,SAAS,OAAA,EAAS;AACrB,IAAA,QAAA,CAAS,UAAU,0BAAA,EAA2B;AAAA,EAChD;AAEA,EAAA,MAAM,KAAA,GAAQ,QAAQ,OAAO,EAAE,OAAO,QAAA,CAAS,OAAA,EAAS,CAAA,EAAI,EAAE,CAAA;AAE9D,EAAA,uBACE,IAAA,CAAC,oBAAA,CAAqB,QAAA,EAArB,EAA8B,KAAA,EAC5B,QAAA,EAAA;AAAA,IAAA,QAAA;AAAA,oBACD,GAAA,CAAC,sBAAA,EAAA,EAAuB,KAAA,EAAO,QAAA,CAAS,OAAA,EAAS;AAAA,GAAA,EACnD,CAAA;AAEJ;AAMA,SAAS,sBAAA,CAAuB,EAAE,KAAA,EAAM,EAAoC;AAC1E,EAAA,MAAM,aAAA,GAAgB,oBAAA;AAAA,IACpB,KAAA,CAAM,SAAA;AAAA,IACN,KAAA,CAAM,WAAA;AAAA,IACN,KAAA,CAAM;AAAA,GACR;AAEA,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AAErC,IAAA,MAAM,SAAA,GAAY,iBAAA,CAAkB,CAAC,GAAG,cAAc,MAAA,EAAQ,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,IAAQ,EAAE,CAAC,CAAA;AACxF,IAAA,MAAM,SAAA,GAAY,iBAAA,CAAkB,CAAC,GAAG,cAAc,MAAA,EAAQ,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,IAAQ,EAAE,CAAC,CAAA;AAExF,IAAA,kBAAA,CAAmB,QAAA,CAAS,MAAM,SAAS,CAAA;AAC3C,IAAA,kBAAA,CAAmB,QAAA,CAAS,iBAAiB,SAAS,CAAA;AAAA,EACxD,CAAA,EAAG,CAAC,aAAa,CAAC,CAAA;AAElB,EAAA,OAAO,IAAA;AACT;;;ACtEO,SAAS,iBAAiB,UAAA,EAA6C;AAC5E,EAAA,MAAM,KAAK,KAAA,EAAM;AACjB,EAAA,MAAM,MAAM,uBAAA,EAAwB;AACpC,EAAA,MAAM,aAAA,GAAgBA,OAAO,UAAU,CAAA;AACvC,EAAA,aAAA,CAAc,OAAA,GAAU,UAAA;AAKxB,EAAA,MAAM,aAAA,GAAgBC,OAAAA;AAAA,IACpB,MAAM,IAAA,CAAK,SAAA,CAAU,UAAU,CAAA;AAAA,IAC/B;AAAA,MACE,IAAA,CAAK,UAAU,UAAU;AAAA;AAAA;AAC3B,GACF;AAEA,EAAAC,UAAU,MAAM;AACd,IAAA,IAAI,GAAA,EAAK;AAGP,MAAA,GAAA,CAAI,KAAA,CAAM,QAAA,CAAS,EAAA,EAAI,aAAA,CAAc,OAAO,CAAA;AAC5C,MAAA,OAAO,MAAM,GAAA,CAAI,KAAA,CAAM,UAAA,CAAW,EAAE,CAAA;AAAA,IACtC;AAGA,IAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AAErC,IAAA,MAAM,SAAA,GAAY,kBAAkB,CAAC,aAAA,CAAc,QAAQ,IAAA,IAAQ,EAAE,CAAC,CAAA;AACtE,IAAA,MAAM,SAAA,GAAY,kBAAkB,CAAC,aAAA,CAAc,QAAQ,IAAA,IAAQ,EAAE,CAAC,CAAA;AAEtE,IAAA,kBAAA,CAAmB,QAAA,CAAS,MAAM,SAAS,CAAA;AAC3C,IAAA,kBAAA,CAAmB,QAAA,CAAS,iBAAiB,SAAS,CAAA;AAEtD,IAAA,OAAO,MAAM;AACX,MAAA,kBAAA,CAAmB,QAAA,CAAS,IAAA,EAAM,EAAE,CAAA;AACpC,MAAA,kBAAA,CAAmB,QAAA,CAAS,eAAA,EAAiB,EAAE,CAAA;AAAA,IACjD,CAAA;AAAA,EAGF,CAAA,EAAG,CAAC,EAAA,EAAI,GAAA,EAAK,aAAa,CAAC,CAAA;AAC7B","file":"chunk-GN34LCTG.js","sourcesContent":["import {\n createContext,\n useContext,\n useRef,\n useMemo,\n useEffect,\n useSyncExternalStore,\n type ReactNode,\n} from 'react';\nimport {\n mergeElementAttrs,\n syncAttrsToElement,\n toReactProps,\n type DocumentElementDescriptor,\n} from '../utils/document-class';\n\n// ============================================================================\n// Internal store (framework-agnostic, works in SSR and CSR)\n// ============================================================================\n\ninterface DocumentElementStore {\n subscribe: (listener: () => void) => () => void;\n getSnapshot: () => Readonly<Map<string, DocumentElementDescriptor>>;\n getServerSnapshot: () => Readonly<Map<string, DocumentElementDescriptor>>;\n register: (id: string, descriptor: DocumentElementDescriptor) => void;\n unregister: (id: string) => void;\n}\n\nfunction createDocumentElementStore(): DocumentElementStore {\n const map = new Map<string, DocumentElementDescriptor>();\n const listeners = new Set<() => void>();\n // Snapshot reference replaced on every mutation so useSyncExternalStore\n // detects the change via reference equality.\n let snapshot: Readonly<Map<string, DocumentElementDescriptor>> = new Map(map);\n\n const notify = () => {\n snapshot = new Map(map);\n for (const l of listeners) l();\n };\n\n return {\n subscribe: (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n getSnapshot: () => snapshot,\n getServerSnapshot: () => snapshot,\n register: (id, descriptor) => {\n map.set(id, descriptor);\n notify();\n },\n unregister: (id) => {\n if (map.delete(id)) notify();\n },\n };\n}\n\n// ============================================================================\n// Context\n// ============================================================================\n\ninterface DocumentClassContextValue {\n store: DocumentElementStore;\n}\n\nconst DocumentClassContext = createContext<DocumentClassContextValue | null>(null);\n\nexport function useDocumentClassContext(): DocumentClassContextValue | null {\n return useContext(DocumentClassContext);\n}\n\n// ============================================================================\n// Provider\n// ============================================================================\n\nexport interface DocumentClassProviderProps {\n children: ReactNode;\n}\n\nexport function DocumentClassProvider({ children }: DocumentClassProviderProps) {\n const storeRef = useRef<DocumentElementStore | null>(null);\n if (!storeRef.current) {\n storeRef.current = createDocumentElementStore();\n }\n\n const value = useMemo(() => ({ store: storeRef.current! }), []);\n\n return (\n <DocumentClassContext.Provider value={value}>\n {children}\n <DocumentElementDOMSync store={storeRef.current} />\n </DocumentClassContext.Provider>\n );\n}\n\n// ============================================================================\n// DOM Sync — client only, separate component so it doesn't affect SSR output\n// ============================================================================\n\nfunction DocumentElementDOMSync({ store }: { store: DocumentElementStore }) {\n const registrations = useSyncExternalStore(\n store.subscribe,\n store.getSnapshot,\n store.getServerSnapshot\n );\n\n useEffect(() => {\n if (typeof document === 'undefined') return;\n\n const bodyAttrs = mergeElementAttrs([...registrations.values()].map((d) => d.body ?? {}));\n const htmlAttrs = mergeElementAttrs([...registrations.values()].map((d) => d.html ?? {}));\n\n syncAttrsToElement(document.body, bodyAttrs);\n syncAttrsToElement(document.documentElement, htmlAttrs);\n }, [registrations]);\n\n return null;\n}\n\n// ============================================================================\n// useDocumentClassOutput — for root layouts (SSR + CSR)\n// ============================================================================\n\n/**\n * Returns computed React prop objects for `<body>` and `<html>` built from all\n * active `useDocumentClass` registrations.\n *\n * Spread the returned objects directly onto JSX elements in your root layout so\n * SSR-rendered HTML already contains all attributes before hydration.\n *\n * @example TanStack Start `__root.tsx`\n * ```tsx\n * function RootDocument() {\n * const { bodyAttrs, htmlAttrs } = useDocumentClassOutput();\n * return (\n * <html {...htmlAttrs}>\n * <body {...bodyAttrs}>\n * <Outlet />\n * </body>\n * </html>\n * );\n * }\n * ```\n *\n * @example Next.js `layout.tsx`\n * ```tsx\n * export default function RootLayout({ children }) {\n * const { bodyAttrs, htmlAttrs } = useDocumentClassOutput();\n * return (\n * <html {...htmlAttrs}>\n * <body {...bodyAttrs}>{children}</body>\n * </html>\n * );\n * }\n * ```\n */\nexport function useDocumentClassOutput(): {\n bodyAttrs: Record<string, string>;\n htmlAttrs: Record<string, string>;\n} {\n const ctx = useDocumentClassContext();\n\n const registrations = useSyncExternalStore(\n ctx?.store.subscribe ?? noopSubscribe,\n ctx?.store.getSnapshot ?? emptySnapshot,\n ctx?.store.getServerSnapshot ?? emptySnapshot\n );\n\n return useMemo(() => {\n const bodyAttrs = mergeElementAttrs([...registrations.values()].map((d) => d.body ?? {}));\n const htmlAttrs = mergeElementAttrs([...registrations.values()].map((d) => d.html ?? {}));\n return {\n bodyAttrs: toReactProps(bodyAttrs),\n htmlAttrs: toReactProps(htmlAttrs),\n };\n }, [registrations]);\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nconst emptyMap: Readonly<Map<string, DocumentElementDescriptor>> = new Map();\nconst emptySnapshot = () => emptyMap;\nconst noopSubscribe = (_: () => void) => () => {};\n","import { useId, useEffect, useRef, useMemo } from 'react';\nimport { useDocumentClassContext } from '../providers/DocumentClassProvider';\nimport {\n syncAttrsToElement,\n mergeElementAttrs,\n type DocumentElementDescriptor,\n} from '../utils/document-class';\n\n/**\n * useDocumentClass - Hook for managing HTML and body element attributes\n *\n * Registers attributes for the `<html>` and `<body>` elements that are\n * automatically applied on mount and cleaned up on unmount. Supports\n * both SSR (via DocumentClassProvider) and client-side-only environments.\n *\n * @param descriptor - Object with html and/or body properties containing\n * attribute objects (class names, data attributes, etc.)\n *\n * @example Static per-route attrs\n * ```tsx\n * function ProductPage() {\n * useDocumentClass({\n * body: { class: 'page-product', 'data-page': 'product' },\n * html: { 'data-layout': 'detail' },\n * });\n * return <div>...</div>;\n * }\n * ```\n *\n * @example Dynamic attrs\n * ```tsx\n * function Layout({ isRtl }) {\n * useDocumentClass({\n * html: { dir: isRtl ? 'rtl' : 'ltr', lang: isRtl ? 'ar' : 'en' },\n * });\n * return <Outlet />;\n * }\n * ```\n *\n * @example Multiple classes + data attributes\n * ```tsx\n * useDocumentClass({\n * body: { class: ['page-blog', 'has-sidebar'], 'data-theme': 'light' },\n * html: { class: 'blog-layout', lang: 'en' },\n * });\n * ```\n */\nexport function useDocumentClass(descriptor: DocumentElementDescriptor): void {\n const id = useId();\n const ctx = useDocumentClassContext();\n const descriptorRef = useRef(descriptor);\n descriptorRef.current = descriptor;\n\n // Stable serialised key — causes the effect to re-run only when the\n // descriptor content actually changes, not on every render.\n\n const descriptorKey = useMemo(\n () => JSON.stringify(descriptor),\n [\n JSON.stringify(descriptor), // intentional: content-based comparison\n ]\n );\n\n useEffect(() => {\n if (ctx) {\n // Register after render — avoids triggering state updates in sibling\n // components during the render phase (React \"setState during render\" warning).\n ctx.store.register(id, descriptorRef.current);\n return () => ctx.store.unregister(id);\n }\n\n // Fallback: direct DOM manipulation when no provider is present\n if (typeof document === 'undefined') return;\n\n const bodyAttrs = mergeElementAttrs([descriptorRef.current.body ?? {}]);\n const htmlAttrs = mergeElementAttrs([descriptorRef.current.html ?? {}]);\n\n syncAttrsToElement(document.body, bodyAttrs);\n syncAttrsToElement(document.documentElement, htmlAttrs);\n\n return () => {\n syncAttrsToElement(document.body, {});\n syncAttrsToElement(document.documentElement, {});\n };\n // descriptorKey drives re-registration when content changes; id/ctx handle\n // mount/provider changes.\n }, [id, ctx, descriptorKey]);\n}\n"]}
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
import { RouteId } from './chunk-MTONGOJD.js';
|
|
2
|
+
import { subscribeTwilight, getTwilightContext } from './chunk-KIPZQN3Y.js';
|
|
3
|
+
import { useTwilight } from './chunk-BWFBVXT3.js';
|
|
4
|
+
import { createContext, lazy, createElement, useContext, useSyncExternalStore, useRef, useEffect, useCallback } from 'react';
|
|
5
|
+
|
|
6
|
+
var RedirectError = class extends Error {
|
|
7
|
+
constructor(path, replace = false) {
|
|
8
|
+
super(`Redirect to ${path}`);
|
|
9
|
+
this.path = path;
|
|
10
|
+
this.replace = replace;
|
|
11
|
+
this.name = "RedirectError";
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
var NotFoundError = class extends Error {
|
|
15
|
+
constructor(message) {
|
|
16
|
+
super(message ?? "Not Found");
|
|
17
|
+
this.name = "NotFoundError";
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
var UnauthorizedError = class extends Error {
|
|
21
|
+
constructor(message) {
|
|
22
|
+
super(message ?? "Unauthorized");
|
|
23
|
+
this.name = "UnauthorizedError";
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
var defaultNavigate = (to, opts) => {
|
|
27
|
+
if (opts?.replace) window.location.replace(to);
|
|
28
|
+
else window.location.href = to;
|
|
29
|
+
};
|
|
30
|
+
var defaultRedirect = (path, opts) => {
|
|
31
|
+
const replace = opts?.replace ?? false;
|
|
32
|
+
if (typeof window !== "undefined") {
|
|
33
|
+
if (replace) window.location.replace(path);
|
|
34
|
+
else window.location.href = path;
|
|
35
|
+
}
|
|
36
|
+
throw new RedirectError(path, replace);
|
|
37
|
+
};
|
|
38
|
+
var defaultNotFound = (message) => {
|
|
39
|
+
throw new NotFoundError(message);
|
|
40
|
+
};
|
|
41
|
+
var defaultUnauthorized = (message) => {
|
|
42
|
+
throw new UnauthorizedError(message);
|
|
43
|
+
};
|
|
44
|
+
var notFound = defaultNotFound;
|
|
45
|
+
var unauthorized = defaultUnauthorized;
|
|
46
|
+
var redirect = defaultRedirect;
|
|
47
|
+
function configureNavigation(config) {
|
|
48
|
+
if (config.notFound) notFound = config.notFound;
|
|
49
|
+
if (config.redirect) redirect = config.redirect;
|
|
50
|
+
if (config.unauthorized) unauthorized = config.unauthorized;
|
|
51
|
+
}
|
|
52
|
+
async function orThrow(promise) {
|
|
53
|
+
try {
|
|
54
|
+
return await promise;
|
|
55
|
+
} catch (error) {
|
|
56
|
+
console.debug("[loader error]", error);
|
|
57
|
+
throw new NotFoundError();
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
async function orUnauthorized(promise) {
|
|
61
|
+
try {
|
|
62
|
+
return await promise;
|
|
63
|
+
} catch (error) {
|
|
64
|
+
const status = error?.response?.status;
|
|
65
|
+
if (status === 401 || status === 403) {
|
|
66
|
+
throw unauthorized();
|
|
67
|
+
}
|
|
68
|
+
throw error;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
var NavigationContext = createContext({
|
|
72
|
+
navigate: defaultNavigate
|
|
73
|
+
});
|
|
74
|
+
function NavigationProvider({
|
|
75
|
+
navigate,
|
|
76
|
+
children
|
|
77
|
+
}) {
|
|
78
|
+
return createElement(NavigationContext.Provider, { value: { navigate } }, children);
|
|
79
|
+
}
|
|
80
|
+
function useNavigate() {
|
|
81
|
+
return useContext(NavigationContext).navigate;
|
|
82
|
+
}
|
|
83
|
+
function useRouteId() {
|
|
84
|
+
return useSyncExternalStore(
|
|
85
|
+
subscribeTwilight,
|
|
86
|
+
() => getTwilightContext().routeId,
|
|
87
|
+
() => getTwilightContext().routeId
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
function useLocation() {
|
|
91
|
+
useTwilight();
|
|
92
|
+
return getTwilightContext().location;
|
|
93
|
+
}
|
|
94
|
+
function useIsHome() {
|
|
95
|
+
return useRouteId() === RouteId.INDEX;
|
|
96
|
+
}
|
|
97
|
+
function useIsProduct() {
|
|
98
|
+
return useRouteId() === RouteId.PRODUCT_SINGLE;
|
|
99
|
+
}
|
|
100
|
+
function useIsCart() {
|
|
101
|
+
return useRouteId() === RouteId.CART;
|
|
102
|
+
}
|
|
103
|
+
function useIsCustomer() {
|
|
104
|
+
return useRouteId().startsWith("customer");
|
|
105
|
+
}
|
|
106
|
+
function useIsBlog() {
|
|
107
|
+
const routeId = useRouteId();
|
|
108
|
+
return routeId === RouteId.BLOG_INDEX || routeId === RouteId.BLOG_SINGLE;
|
|
109
|
+
}
|
|
110
|
+
function useIsBrands() {
|
|
111
|
+
const routeId = useRouteId();
|
|
112
|
+
return routeId === RouteId.BRANDS_INDEX || routeId === RouteId.BRANDS_SINGLE;
|
|
113
|
+
}
|
|
114
|
+
function useIsSearch() {
|
|
115
|
+
return useRouteId() === RouteId.SEARCH;
|
|
116
|
+
}
|
|
117
|
+
function NavigationInterceptor() {
|
|
118
|
+
const navigate = useNavigate();
|
|
119
|
+
const { store } = useTwilight();
|
|
120
|
+
useNavigationInterceptor(navigate, store?.url);
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
123
|
+
function resolveRelativePath(href, storeUrl) {
|
|
124
|
+
try {
|
|
125
|
+
const target = new URL(href, window.location.href);
|
|
126
|
+
const base = new URL(storeUrl);
|
|
127
|
+
if (target.origin !== base.origin) return null;
|
|
128
|
+
const path = target.pathname + target.search + target.hash;
|
|
129
|
+
return path || "/";
|
|
130
|
+
} catch {
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
var EXTERNAL_TARGETS = /* @__PURE__ */ new Set(["_blank", "_parent", "_top"]);
|
|
135
|
+
function shouldIntercept(anchor, event) {
|
|
136
|
+
if (event.defaultPrevented) return false;
|
|
137
|
+
if (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return false;
|
|
138
|
+
const targetAttr = anchor.getAttribute("target");
|
|
139
|
+
if (targetAttr && EXTERNAL_TARGETS.has(targetAttr)) return false;
|
|
140
|
+
if (anchor.hasAttribute("download")) return false;
|
|
141
|
+
const rel = (anchor.getAttribute("rel") ?? "").split(/\s+/);
|
|
142
|
+
if (rel.includes("external")) return false;
|
|
143
|
+
const href = anchor.getAttribute("href") ?? "";
|
|
144
|
+
if (!href) return false;
|
|
145
|
+
try {
|
|
146
|
+
const url = new URL(href, window.location.href);
|
|
147
|
+
if (url.protocol.startsWith("javascript:")) return false;
|
|
148
|
+
} catch {
|
|
149
|
+
return false;
|
|
150
|
+
}
|
|
151
|
+
return true;
|
|
152
|
+
}
|
|
153
|
+
function useNavigationInterceptor(navigate, storeUrl) {
|
|
154
|
+
const storeUrlRef = useRef(storeUrl);
|
|
155
|
+
useEffect(() => {
|
|
156
|
+
storeUrlRef.current = storeUrl;
|
|
157
|
+
}, [storeUrl]);
|
|
158
|
+
const tryNavigate = useCallback(
|
|
159
|
+
(href, replace = false) => {
|
|
160
|
+
const currentStoreUrl = storeUrlRef.current;
|
|
161
|
+
if (!currentStoreUrl) return false;
|
|
162
|
+
const relativePath = resolveRelativePath(href, currentStoreUrl);
|
|
163
|
+
if (!relativePath) return false;
|
|
164
|
+
navigate(relativePath, { replace });
|
|
165
|
+
return true;
|
|
166
|
+
},
|
|
167
|
+
[navigate]
|
|
168
|
+
);
|
|
169
|
+
useEffect(() => {
|
|
170
|
+
let pointerStartX = 0;
|
|
171
|
+
let pointerStartY = 0;
|
|
172
|
+
let pointerSwiped = false;
|
|
173
|
+
const MOVE_THRESHOLD = 10;
|
|
174
|
+
function handlePointerDown(event) {
|
|
175
|
+
pointerStartX = event.clientX;
|
|
176
|
+
pointerStartY = event.clientY;
|
|
177
|
+
pointerSwiped = false;
|
|
178
|
+
}
|
|
179
|
+
function handlePointerUp(event) {
|
|
180
|
+
const dx = Math.abs(event.clientX - pointerStartX);
|
|
181
|
+
const dy = Math.abs(event.clientY - pointerStartY);
|
|
182
|
+
pointerSwiped = dx > MOVE_THRESHOLD || dy > MOVE_THRESHOLD;
|
|
183
|
+
}
|
|
184
|
+
function handleClick(event) {
|
|
185
|
+
if (pointerSwiped) {
|
|
186
|
+
pointerSwiped = false;
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
const path = event.composedPath();
|
|
190
|
+
const anchor = path.find((el) => el instanceof HTMLAnchorElement);
|
|
191
|
+
if (!anchor || !shouldIntercept(anchor, event)) return;
|
|
192
|
+
if (tryNavigate(anchor.href, false)) {
|
|
193
|
+
event.preventDefault();
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
const origAssign = window.location.assign;
|
|
197
|
+
function patchedAssign(url) {
|
|
198
|
+
if (!tryNavigate(url, false)) origAssign.call(window.location, url);
|
|
199
|
+
}
|
|
200
|
+
const origReplace = window.location.replace;
|
|
201
|
+
function patchedReplace(url) {
|
|
202
|
+
if (!tryNavigate(url, true)) origReplace.call(window.location, url);
|
|
203
|
+
}
|
|
204
|
+
let assignPatched = false;
|
|
205
|
+
let replacePatched = false;
|
|
206
|
+
try {
|
|
207
|
+
window.location.assign = patchedAssign;
|
|
208
|
+
assignPatched = true;
|
|
209
|
+
} catch {
|
|
210
|
+
}
|
|
211
|
+
try {
|
|
212
|
+
window.location.replace = patchedReplace;
|
|
213
|
+
replacePatched = true;
|
|
214
|
+
} catch {
|
|
215
|
+
}
|
|
216
|
+
document.addEventListener("click", handleClick, { capture: true });
|
|
217
|
+
document.addEventListener("pointerdown", handlePointerDown, { passive: true });
|
|
218
|
+
document.addEventListener("pointerup", handlePointerUp, { passive: true });
|
|
219
|
+
return () => {
|
|
220
|
+
document.removeEventListener("click", handleClick, { capture: true });
|
|
221
|
+
document.removeEventListener("pointerdown", handlePointerDown);
|
|
222
|
+
document.removeEventListener("pointerup", handlePointerUp);
|
|
223
|
+
if (assignPatched) {
|
|
224
|
+
try {
|
|
225
|
+
window.location.assign = origAssign;
|
|
226
|
+
} catch {
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
if (replacePatched) {
|
|
230
|
+
try {
|
|
231
|
+
window.location.replace = origReplace;
|
|
232
|
+
} catch {
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
};
|
|
236
|
+
}, [tryNavigate]);
|
|
237
|
+
}
|
|
238
|
+
var navigationSetups = {
|
|
239
|
+
tanstack: lazy(
|
|
240
|
+
() => import('./navigation-YCYHW4MK.js').then((m) => ({ default: m.NavigationSetup }))
|
|
241
|
+
),
|
|
242
|
+
nextjs: lazy(() => import('./navigation-N4H65RUN.js').then((m) => ({ default: m.NavigationSetup })))
|
|
243
|
+
};
|
|
244
|
+
|
|
245
|
+
export { NavigationInterceptor, NavigationProvider, NotFoundError, RedirectError, UnauthorizedError, configureNavigation, defaultNavigate, navigationSetups, notFound, orThrow, orUnauthorized, redirect, unauthorized, useIsBlog, useIsBrands, useIsCart, useIsCustomer, useIsHome, useIsProduct, useIsSearch, useLocation, useNavigate, useRouteId };
|
|
246
|
+
//# sourceMappingURL=chunk-GO34DE35.js.map
|
|
247
|
+
//# sourceMappingURL=chunk-GO34DE35.js.map
|