@salla.sa/twilight-theme-engine 1.0.119 → 1.0.120
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{AddToCartForm-2E25Z3JH.js → AddToCartForm-3JMN4PL4.js} +3 -3
- package/dist/{AddToCartForm-2E25Z3JH.js.map → AddToCartForm-3JMN4PL4.js.map} +1 -1
- package/dist/{BlogAuthorPage-DIQMXVKT.js → BlogAuthorPage-HRPTZ6KW.js} +7 -7
- package/dist/{BlogAuthorPage-DIQMXVKT.js.map → BlogAuthorPage-HRPTZ6KW.js.map} +1 -1
- package/dist/{BlogCategoryPage-CIEC3I3C.js → BlogCategoryPage-2NNWTOTW.js} +7 -7
- package/dist/{BlogCategoryPage-CIEC3I3C.js.map → BlogCategoryPage-2NNWTOTW.js.map} +1 -1
- package/dist/{BlogPage-SRBQBKLP.js → BlogPage-JMVHQBYK.js} +6 -6
- package/dist/{BlogPage-SRBQBKLP.js.map → BlogPage-JMVHQBYK.js.map} +1 -1
- package/dist/{BlogSinglePage-5BD3OVXK.js → BlogSinglePage-Y6V66JG6.js} +6 -6
- package/dist/{BlogSinglePage-5BD3OVXK.js.map → BlogSinglePage-Y6V66JG6.js.map} +1 -1
- package/dist/{BlogTagPage-ZCDTNTKI.js → BlogTagPage-B4NJLSQ7.js} +7 -7
- package/dist/{BlogTagPage-ZCDTNTKI.js.map → BlogTagPage-B4NJLSQ7.js.map} +1 -1
- package/dist/{BrandsPage-XHWYHEQS.js → BrandsPage-NBVF64JF.js} +6 -6
- package/dist/{BrandsPage-XHWYHEQS.js.map → BrandsPage-NBVF64JF.js.map} +1 -1
- package/dist/{Breadcrumb-OODSTILO.js → Breadcrumb-JYGYQJLB.js} +6 -6
- package/dist/{Breadcrumb-OODSTILO.js.map → Breadcrumb-JYGYQJLB.js.map} +1 -1
- package/dist/{CartItem-N7PX7K6E.js → CartItem-B3GIVKO6.js} +6 -6
- package/dist/{CartItem-N7PX7K6E.js.map → CartItem-B3GIVKO6.js.map} +1 -1
- package/dist/{CartSummary-FVM26G2M.js → CartSummary-KYDOZM5M.js} +6 -6
- package/dist/{CartSummary-FVM26G2M.js.map → CartSummary-KYDOZM5M.js.map} +1 -1
- package/dist/{Copyright-JCBJN5YN.js → Copyright-EODCFCIG.js} +3 -3
- package/dist/{Copyright-JCBJN5YN.js.map → Copyright-EODCFCIG.js.map} +1 -1
- package/dist/{CustomerLayout-B3W377Y4.js → CustomerLayout-76NGJTMK.js} +6 -6
- package/dist/{CustomerLayout-B3W377Y4.js.map → CustomerLayout-76NGJTMK.js.map} +1 -1
- package/dist/{Footer-JYJDPUSD.js → Footer-JKHEL74P.js} +4 -4
- package/dist/{Footer-JYJDPUSD.js.map → Footer-JKHEL74P.js.map} +1 -1
- package/dist/{Header-DETRFG6N.js → Header-WJAMZDMT.js} +4 -4
- package/dist/{Header-DETRFG6N.js.map → Header-WJAMZDMT.js.map} +1 -1
- package/dist/{LoyaltyPage-UBYNGW6Z.js → LoyaltyPage-JPZEXI2N.js} +6 -6
- package/dist/{LoyaltyPage-UBYNGW6Z.js.map → LoyaltyPage-JPZEXI2N.js.map} +1 -1
- package/dist/{LoyaltyPointsPage-OMCCDBLI.js → LoyaltyPointsPage-C4IZPAOG.js} +3 -3
- package/dist/{LoyaltyPointsPage-OMCCDBLI.js.map → LoyaltyPointsPage-C4IZPAOG.js.map} +1 -1
- package/dist/{MainMenu-BNVH3EVF.js → MainMenu-EIK6QDPF.js} +3 -3
- package/dist/{MainMenu-BNVH3EVF.js.map → MainMenu-EIK6QDPF.js.map} +1 -1
- package/dist/{MasterLayout-OLB2JUUR.js → MasterLayout-IVOF3YTF.js} +6 -6
- package/dist/{MasterLayout-OLB2JUUR.js.map → MasterLayout-IVOF3YTF.js.map} +1 -1
- package/dist/{MobileMenu-2EAPAHX5.js → MobileMenu-5PNZNRXJ.js} +6 -6
- package/dist/{MobileMenu-2EAPAHX5.js.map → MobileMenu-5PNZNRXJ.js.map} +1 -1
- package/dist/{NotificationsPage-PIQJTEHJ.js → NotificationsPage-LO74N5F7.js} +6 -6
- package/dist/{NotificationsPage-PIQJTEHJ.js.map → NotificationsPage-LO74N5F7.js.map} +1 -1
- package/dist/{OrderSinglePage-YPNO5B3Z.js → OrderSinglePage-6PYW65SG.js} +6 -6
- package/dist/{OrderSinglePage-YPNO5B3Z.js.map → OrderSinglePage-6PYW65SG.js.map} +1 -1
- package/dist/{OrdersPage-FYL73WZO.js → OrdersPage-KTZJCAXM.js} +6 -6
- package/dist/{OrdersPage-FYL73WZO.js.map → OrdersPage-KTZJCAXM.js.map} +1 -1
- package/dist/{PageSingle-3VAW7S6B.js → PageSingle-2IY5TNSQ.js} +3 -3
- package/dist/{PageSingle-3VAW7S6B.js.map → PageSingle-2IY5TNSQ.js.map} +1 -1
- package/dist/{ProductDetails-UJ4MKTFM.js → ProductDetails-EXHNDRRN.js} +3 -3
- package/dist/{ProductDetails-UJ4MKTFM.js.map → ProductDetails-EXHNDRRN.js.map} +1 -1
- package/dist/{ProfilePage-5NZVZU2S.js → ProfilePage-4W6ZGYOE.js} +6 -6
- package/dist/{ProfilePage-5NZVZU2S.js.map → ProfilePage-4W6ZGYOE.js.map} +1 -1
- package/dist/{ReviewsPage-SYD5UUVN.js → ReviewsPage-P6UX4LHI.js} +3 -3
- package/dist/{ReviewsPage-SYD5UUVN.js.map → ReviewsPage-P6UX4LHI.js.map} +1 -1
- package/dist/{SeoCartWidget-R45K7M4U.js → SeoCartWidget-2WHHI6QF.js} +6 -6
- package/dist/{SeoCartWidget-R45K7M4U.js.map → SeoCartWidget-2WHHI6QF.js.map} +1 -1
- package/dist/{SettingsPage-DWTUF5TO.js → SettingsPage-U2B5JI5K.js} +6 -6
- package/dist/{SettingsPage-DWTUF5TO.js.map → SettingsPage-U2B5JI5K.js.map} +1 -1
- package/dist/{StoreClosedNotification-2NARK6HJ.js → StoreClosedNotification-MJQT66GR.js} +7 -7
- package/dist/{StoreClosedNotification-2NARK6HJ.js.map → StoreClosedNotification-MJQT66GR.js.map} +1 -1
- package/dist/{TestimonialsPage-QAOBCMAV.js → TestimonialsPage-BGJND2VC.js} +3 -3
- package/dist/{TestimonialsPage-QAOBCMAV.js.map → TestimonialsPage-BGJND2VC.js.map} +1 -1
- package/dist/{ThankYouPage-GBAAHFWB.js → ThankYouPage-B3KOZKMZ.js} +6 -6
- package/dist/{ThankYouPage-GBAAHFWB.js.map → ThankYouPage-B3KOZKMZ.js.map} +1 -1
- package/dist/{WalletPage-QWJM6DTB.js → WalletPage-KVG6MYQ4.js} +6 -6
- package/dist/{WalletPage-QWJM6DTB.js.map → WalletPage-KVG6MYQ4.js.map} +1 -1
- package/dist/{WishlistPage-PCQR3DEF.js → WishlistPage-ZAXYF5WP.js} +6 -6
- package/dist/{WishlistPage-PCQR3DEF.js.map → WishlistPage-ZAXYF5WP.js.map} +1 -1
- package/dist/{chunk-3LJF7ECP.js → chunk-25MXTMV4.js} +4 -4
- package/dist/{chunk-3LJF7ECP.js.map → chunk-25MXTMV4.js.map} +1 -1
- package/dist/{chunk-I46KQSZH.js → chunk-4GWHDLUF.js} +6 -6
- package/dist/{chunk-I46KQSZH.js.map → chunk-4GWHDLUF.js.map} +1 -1
- package/dist/{chunk-AVW4CLTB.js → chunk-5QYNHHPE.js} +3 -3
- package/dist/{chunk-AVW4CLTB.js.map → chunk-5QYNHHPE.js.map} +1 -1
- package/dist/{chunk-R5TTR2G7.js → chunk-5YXJC35L.js} +9 -9
- package/dist/{chunk-R5TTR2G7.js.map → chunk-5YXJC35L.js.map} +1 -1
- package/dist/{chunk-XM22O2B2.js → chunk-FIDNPYLL.js} +3 -3
- package/dist/{chunk-XM22O2B2.js.map → chunk-FIDNPYLL.js.map} +1 -1
- package/dist/{chunk-Y36VLQGV.js → chunk-NHEMVF3B.js} +3 -3
- package/dist/{chunk-Y36VLQGV.js.map → chunk-NHEMVF3B.js.map} +1 -1
- package/dist/{chunk-7K3AK6IC.js → chunk-TI6S5KW3.js} +3 -3
- package/dist/{chunk-7K3AK6IC.js.map → chunk-TI6S5KW3.js.map} +1 -1
- package/dist/chunk-TM5MVVTX.js +14 -0
- package/dist/{chunk-UI625G7U.js.map → chunk-TM5MVVTX.js.map} +1 -1
- package/dist/{chunk-QWGSGNM7.js → chunk-ULPH6647.js} +5 -5
- package/dist/{chunk-QWGSGNM7.js.map → chunk-ULPH6647.js.map} +1 -1
- package/dist/{chunk-CTNSIK3V.js → chunk-UNLQTOEN.js} +4 -4
- package/dist/{chunk-CTNSIK3V.js.map → chunk-UNLQTOEN.js.map} +1 -1
- package/dist/{chunk-S4VVTUCI.js → chunk-UVQ3QASG.js} +7 -7
- package/dist/{chunk-S4VVTUCI.js.map → chunk-UVQ3QASG.js.map} +1 -1
- package/dist/{chunk-CKMLOJGM.js → chunk-Y5ZHBECO.js} +4 -4
- package/dist/{chunk-CKMLOJGM.js.map → chunk-Y5ZHBECO.js.map} +1 -1
- package/dist/{chunk-EQ7I4AFL.js → chunk-Y6VKKGXJ.js} +3 -3
- package/dist/{chunk-EQ7I4AFL.js.map → chunk-Y6VKKGXJ.js.map} +1 -1
- package/dist/components/cart/index.js +1 -1
- package/dist/components/common/index.js +1 -1
- package/dist/components/drawer/index.js +4 -4
- package/dist/components/home/index.js +6 -6
- package/dist/components/layout/index.js +1 -1
- package/dist/components/product/index.js +5 -5
- package/dist/components/store/index.js +5 -5
- package/dist/{document-class-TSDZIVXW.js → document-class-OSMTFGJJ.js} +3 -3
- package/dist/{document-class-TSDZIVXW.js.map → document-class-OSMTFGJJ.js.map} +1 -1
- package/dist/hooks/index.js +4 -4
- package/dist/hooks/useGtm.js +4 -4
- package/dist/hooks/useMoney.js +4 -4
- package/dist/hooks/useStore.js +4 -4
- package/dist/index.js +4 -4
- package/dist/{not-found-5DFPFQ4B.js → not-found-ZX6EJRVW.js} +6 -6
- package/dist/{not-found-5DFPFQ4B.js.map → not-found-ZX6EJRVW.js.map} +1 -1
- package/dist/providers/index.js +4 -4
- package/dist/routes/account/orders.js +1 -1
- package/dist/routes/account.js +6 -6
- package/dist/routes/blog.js +5 -5
- package/dist/routes/brands.js +1 -1
- package/dist/routes/cart.js +8 -8
- package/dist/routes/home.js +7 -7
- package/dist/routes/loyalty.js +2 -2
- package/dist/routes/page.js +1 -1
- package/dist/routes/product-listing.js +6 -6
- package/dist/routes/product.js +6 -6
- package/dist/routes/testimonials.js +2 -2
- package/dist/routes/thank-you.js +1 -1
- package/dist/skeleton.js +7 -7
- package/dist/tanstack.js +1 -1
- package/dist/utils/fast-checkout.d.ts +1 -1
- package/dist/utils/fast-checkout.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-UI625G7U.js +0 -14
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/home/ProductsSlider.tsx","../src/components/home/StoreFeatures.tsx","../src/components/home/FixedBanner.tsx","../src/components/home/FixedProducts.tsx","../src/components/home/FeaturedProductsStyle1.tsx","../src/components/home/FeaturedProductsStyle2.tsx","../src/components/home/FeaturedProductsStyle3.tsx","../src/components/home/ParallaxBackground.tsx","../src/components/home/PhotosSlider.tsx","../src/components/home/SquarePhotos.tsx","../src/components/home/Youtube.tsx","../src/components/home/BundleComponent.tsx","../src/components/home/lazy.ts","../src/components/home/register.ts","../src/components/home/ComponentErrorBoundary.tsx","../src/components/home/HomePageRenderer.tsx","../src/components/home/PageBlocks.tsx","../src/components/home/reorder-hooks.ts","../src/components/home/ReorderProducts.tsx"],"names":["product","StoreFeatures","jsx","memo","FixedBanner","Fragment","jsxs","Suspense","FeaturedProductsStyle1","useCallback","FeaturedProductsStyle2","useState","SallaButton","SallaProductsSlider","FeaturedProductsStyle3","ParallaxBackground","PhotosSlider","SquarePhotos","Youtube","BundleComponent","useEffect","FallbackComponent","ProductsSliderSkeleton","FixedProductsSkeleton","HomeComponentRenderer","Component","PageBlocks","useQuery","ReorderProducts","useMemo"],"mappings":"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","file":"chunk-CKMLOJGM.js","sourcesContent":["import { Suspense, useCallback, useMemo } from 'react';\nimport { product, ProductsListSource } from '../../api/product';\nimport { ProductCard } from '../../components/product';\nimport { ProductsSliderSkeleton, SallaProductsSlider } from '@salla.sa/twilight-components-react';\nimport { useTranslation } from '../../providers/I18nProvider';\n\ninterface ProductsSourceConfig {\n source: ProductsListSource;\n source_value?: number | number[] | null;\n}\n\nexport interface ProductsSliderProps {\n data: {\n products: ProductsSourceConfig;\n title?: string;\n display_all_url?: string;\n position?: number;\n priority?: boolean;\n show_controls?: boolean;\n controls_outer?: boolean;\n loop?: boolean;\n centered?: boolean;\n slides_per_view?: number | 'auto';\n direction?: 'rtl' | 'ltr';\n autoplay?: boolean;\n [key: string]: unknown;\n };\n}\n\nexport function ProductsSlider({ data }: ProductsSliderProps) {\n const { t } = useTranslation();\n const {\n products,\n title,\n display_all_url: displayAllUrl,\n position = 1,\n priority = false,\n show_controls: showControls,\n controls_outer: controlsOuter,\n loop,\n centered,\n slides_per_view: slidesPerView,\n direction,\n autoplay,\n } = data;\n\n const sliderProps = useMemo(\n () => ({\n id: `slider-${position}`,\n displayAllTitle: t('blocks.home.display_all', 'View All'),\n ...(showControls !== undefined && { showControls }),\n ...(controlsOuter !== undefined && { controlsOuter }),\n ...(loop !== undefined && { loop }),\n ...(centered !== undefined && { centered }),\n ...(slidesPerView !== undefined && { slidesPerView }),\n ...(direction !== undefined && { direction }),\n }),\n [position, t, showControls, controlsOuter, loop, centered, slidesPerView, direction]\n );\n\n const loader = useCallback(\n () =>\n product.list({\n source: products.source,\n sourceValue: products.source_value,\n }),\n [products.source, products.source_value]\n );\n\n return (\n <Suspense fallback={<ProductsSliderSkeleton />}>\n <SallaProductsSlider\n id={`best-offers-${position}-slider`}\n loader={loader}\n sliderProps={sliderProps}\n {...(displayAllUrl ? { displayAllUrl } : {})}\n {...(title ? { blockTitle: title } : {})}\n {...(autoplay !== undefined ? { autoplay } : {})}\n skeleton={<ProductsSliderSkeleton />}\n >\n {(product, index) => (\n <ProductCard product={product} imagePriority={priority && index < 2} />\n )}\n </SallaProductsSlider>\n </Suspense>\n );\n}\n","import { memo } from 'react';\nimport type { Feature } from '../../types';\n\nexport interface StoreFeaturesProps {\n data: {\n features: Feature[];\n [key: string]: unknown;\n };\n}\n\nexport const StoreFeatures = memo(function StoreFeatures({ data }: StoreFeaturesProps) {\n const { features } = data;\n\n if (!features.length) return null;\n\n return (\n <>\n <div className=\"grid grid-cols-[repeat(2,minmax(0,1fr))] md:grid-cols-[repeat(3,minmax(0,1fr))] gap-4 sm:gap-6 xl:gap-8\">\n {features.map((feature) => (\n <div\n key={`${feature.icon}:${feature.title}:${feature.description ?? ''}`}\n className=\"s-block--features__item\"\n >\n <div className=\"feature-icon\">\n <i className={feature.icon}></i>\n </div>\n <h2>{feature.title}</h2>\n <p>{feature.description}</p>\n </div>\n ))}\n </div>\n </>\n );\n});\n","import { memo } from 'react';\nimport { Link } from '../common';\n\nexport interface FixedBannerComponentProps {\n data: {\n image: {\n url: string;\n alt?: string;\n small_url?: string;\n };\n url?: string;\n title?: string;\n position?: number;\n [key: string]: unknown;\n };\n priority?: boolean;\n}\n\nexport const FixedBanner = memo(function FixedBanner(props: FixedBannerComponentProps) {\n const { data, priority = false } = props;\n const image = data.image?.url;\n\n if (!image) {\n return null;\n }\n\n const url = data.url;\n const altText = data.image.alt?.trim() ? data.image.alt : data.title || 'fixed banner';\n\n const imgProps = priority\n ? {\n loading: 'eager' as const,\n fetchPriority: 'high' as const,\n decoding: 'sync' as const,\n }\n : {\n loading: 'lazy' as const,\n decoding: 'async' as const,\n };\n\n const smallUrl = data.image.small_url;\n\n return (\n <>\n <div className=\"container\">\n <Link\n to={url || '#'}\n className=\"banner banner--fixed overflow-hidden\"\n aria-label={`Banner ${altText}`}\n >\n <picture>\n {smallUrl && <source media=\"(max-width: 767px)\" srcSet={smallUrl} />}\n <img\n width=\"1200\"\n height=\"300\"\n src={image}\n alt={altText}\n style={{ maxWidth: '100%', objectFit: 'contain' }}\n loading={imgProps.loading}\n decoding={imgProps.decoding}\n {...(priority && { fetchPriority: imgProps.fetchPriority })}\n />\n </picture>\n </Link>\n </div>\n </>\n );\n});\n","import { Suspense } from 'react';\nimport { useQuery } from '@tanstack/react-query';\nimport { FixedProductsSkeleton } from '@salla.sa/twilight-components-react';\nimport { Link } from '../common';\nimport { product, ProductsListSource } from '../../api/product';\nimport { ProductCard } from '../../components/product';\nimport { useTranslation } from '../../providers/I18nProvider';\nimport { useTwilight } from '../../providers/TwilightProvider';\n\nexport interface FixedProductsProps {\n data: {\n products: { source: ProductsListSource; source_value?: number[] | null };\n title?: string;\n limit?: number | string;\n display_all_url?: string | null;\n key?: string | null;\n isVertical?: boolean;\n position?: number;\n [key: string]: unknown;\n };\n}\n\nexport function FixedProducts({ data }: FixedProductsProps) {\n const { t } = useTranslation();\n const { theme } = useTwilight();\n\n const title = data.title;\n // The merchant's product count: a number, or the same as a string. Anything that\n // isn't a positive whole number falls back to what the API returns.\n const parsedLimit = Number(data.limit);\n const limit = Number.isInteger(parsedLimit) && parsedLimit > 0 ? parsedLimit : undefined;\n // Matches Twig Raed: `theme.settings.get('vertical_fixed_products', true)`.\n const isVertical = data.isVertical ?? theme.settings.vertical_fixed_products ?? true;\n\n const { data: result, isLoading } = useQuery(\n product.queries.list({\n source: data.products.source,\n sourceValue: data.products?.source_value,\n perPage: limit,\n })\n );\n\n const products = result?.items ?? [];\n\n if (isLoading) {\n return <FixedProductsSkeleton />;\n }\n\n if (!products.length) return null;\n\n return (\n <Suspense fallback={<FixedProductsSkeleton />}>\n {title && (\n <div className=\"s-block__title\">\n <div className=\"right-side\">\n <h2>{title}</h2>\n </div>\n {data.display_all_url && (\n <Link to={data.display_all_url} className=\"s-block__display-all\">\n {t('blocks.home.display_all', 'View All')}\n <i className=\"sicon-arrow-left\"></i>\n </Link>\n )}\n </div>\n )}\n <div\n className={\n 's-products-list-wrapper ' +\n (isVertical ? 's-products-list-vertical-cards' : 's-products-list-horizontal-cards')\n }\n >\n {products.slice(0, limit).map((product) => (\n <ProductCard\n key={product.id}\n product={product}\n layout={isVertical ? 'vertical' : 'horizontal'}\n />\n ))}\n </div>\n </Suspense>\n );\n}\n","import { memo, useState, useCallback } from 'react';\nimport { SallaButton } from '@salla.sa/twilight-components-react/button';\nimport type { Product } from '../../types';\n\ninterface SectionItem {\n title?: string;\n name?: string;\n type?: string;\n id?: string;\n products?: Product[];\n limit?: number;\n}\n\ninterface MainProduct {\n id?: string;\n title?: string;\n value?: string;\n product?: Product;\n}\n\nexport interface FeaturedProductsStyle1Props {\n data: {\n items: SectionItem[];\n main_product?: MainProduct;\n position?: number;\n [key: string]: unknown;\n };\n}\n\nexport const FeaturedProductsStyle1 = memo(function FeaturedProductsStyle1({\n data,\n}: FeaturedProductsStyle1Props) {\n const items = data.items || [];\n const mainProduct = data.main_product;\n\n const [activeTab, setActiveTab] = useState<string>(items[0]?.id || '');\n const [isAnimating, setIsAnimating] = useState(false);\n\n const handleTabClick = useCallback(\n (tabId: string) => {\n if (tabId === activeTab) return;\n setIsAnimating(true);\n setActiveTab(tabId);\n setTimeout(() => setIsAnimating(false), 100);\n },\n [activeTab]\n );\n\n if (!items.length) return null;\n\n const hasMultipleSections = items.length > 1;\n\n return (\n <>\n <div className=\"s-block__title\">\n <div className=\"right-side\">\n <h2>{mainProduct?.title}</h2>\n </div>\n {hasMultipleSections && (\n <div className=\"tabs hide-scroll hidden lg:flex\">\n {items.map((section) => (\n <SallaButton\n key={section.id}\n shape=\"link\"\n onClick={() => handleTabClick(section.id || '')}\n className={`tab-trigger ${activeTab === section.id ? 'is-active' : ''}`}\n >\n {section.title || section.name}\n </SallaButton>\n ))}\n </div>\n )}\n </div>\n\n <div className={`grid grid-cols-1 gap-8 ${mainProduct?.product ? 'lg:grid-cols-2' : ''}`}>\n {mainProduct?.product && (\n <div className=\"flex flex-col\">\n <custom-salla-product-card\n shadow-on-hover\n product={JSON.stringify(mainProduct.product)}\n isSpecial\n ></custom-salla-product-card>\n </div>\n )}\n <div className=\"flex flex-col\">\n {hasMultipleSections && (\n <div className=\"tabs mb-4 sm:mb-8 hide-scroll lg:hidden\">\n {items.map((section) => (\n <SallaButton\n key={section.id}\n shape=\"link\"\n onClick={() => handleTabClick(section.id || '')}\n className={`tab-trigger ${activeTab === section.id ? 'is-active' : ''}`}\n >\n {section.title || section.name}\n </SallaButton>\n ))}\n </div>\n )}\n\n <div className=\"tabs-wrapper flex flex-1\">\n {items.map((section) => {\n const isActive = activeTab === section.id;\n return (\n <div\n key={section.id}\n className={`tabs__item grid-cols-2 ${mainProduct?.product ? '' : 'lg:grid-cols-4'} ${isActive ? 'is-active' : ''} ${isAnimating && isActive ? 'opacity-0 translate-y-3' : ''} ${!isAnimating && isActive ? 'opacity-100 translate-y-0' : ''}`}\n >\n {section.products\n ?.slice(0, mainProduct?.product ? 4 : 8)\n .map((product, productIndex) => (\n <custom-salla-product-card\n key={product.id || productIndex}\n product={JSON.stringify(product)}\n ></custom-salla-product-card>\n ))}\n </div>\n );\n })}\n </div>\n </div>\n </div>\n </>\n );\n});\n","import { memo, useState, useCallback } from 'react';\nimport { SallaButton } from '@salla.sa/twilight-components-react/button';\nimport { SallaProductsList } from '@salla.sa/twilight-components-react';\nimport { SallaProductsSlider } from '@salla.sa/twilight-components-react';\nimport { product, ProductsListSource } from '../../api/product';\nimport { ProductCard } from '../../components/product';\nimport { useTwilight } from '../../providers/TwilightProvider';\n\ninterface ProductSource {\n source: ProductsListSource;\n limit?: number;\n source_value?: number | number[];\n}\n\ninterface SectionItem {\n title?: string;\n name?: string;\n type?: string;\n id?: string;\n products: ProductSource;\n limit?: number;\n}\n\nexport interface FeaturedProductsStyle2Props {\n data: {\n items: SectionItem[];\n position?: number;\n is_slider?: boolean;\n [key: string]: unknown;\n };\n}\n\n// Like Twig Raed, the grid honors `vertical_fixed_products`; the slider never does.\nexport const FeaturedProductsStyle2 = memo(function FeaturedProductsStyle2({\n data,\n}: FeaturedProductsStyle2Props) {\n const { theme } = useTwilight();\n const items = data.items || [];\n const isSlider = data.is_slider ?? true;\n const cardLayout = (theme.settings.vertical_fixed_products ?? true) ? 'vertical' : 'horizontal';\n\n const [activeTab, setActiveTab] = useState<string>(items[0]?.id || '');\n const [isAnimating, setIsAnimating] = useState(false);\n\n const handleTabClick = useCallback(\n (tabId: string) => {\n if (tabId === activeTab) return;\n setIsAnimating(true);\n setActiveTab(tabId);\n setTimeout(() => setIsAnimating(false), 100);\n },\n [activeTab]\n );\n\n const loader = useCallback(\n (source: ProductsListSource, value?: number | number[], limit?: number) => {\n return () =>\n product.list({\n source: source,\n sourceValue: value,\n perPage: limit,\n });\n },\n []\n );\n\n if (!items.length) return null;\n\n const hasMultipleSections = items.length > 1;\n\n return (\n <>\n <div className=\"container\">\n {hasMultipleSections && (\n <div className=\"tabs hide-scroll\">\n {items.map((section) => (\n <SallaButton\n key={section.id}\n fill=\"outline\"\n onClick={() => handleTabClick(section.id || '')}\n className={`tab-trigger ${activeTab === section.id ? 'is-active' : ''}`}\n >\n {section.title || section.name}\n </SallaButton>\n ))}\n </div>\n )}\n\n <div className=\"tabs-wrapper\">\n {items.map((section) => {\n const isActive = activeTab === section.id;\n return (\n <div\n key={section.id}\n className={`tabs__item ${isActive ? 'is-active' : ''} ${isAnimating && isActive ? 'opacity-0 translate-y-3' : ''} ${!isAnimating && isActive ? 'opacity-100 translate-y-0' : ''}`}\n >\n {isSlider ? (\n <SallaProductsSlider\n loader={loader(\n section.products.source,\n section.products?.source_value,\n section.products?.limit\n )}\n sliderProps={{ id: `section-${section.id}-slider` }}\n >\n {(product) => (\n <ProductCard className=\"s-products-slider-card\" product={product} />\n )}\n </SallaProductsSlider>\n ) : (\n <SallaProductsList\n loader={loader(\n section.products.source,\n section.products?.source_value,\n section.products?.limit\n )}\n itemsClassName={`s-products-list-${cardLayout}-cards`}\n >\n {(products) =>\n products.map((product) => (\n <ProductCard key={product.id} product={product} layout={cardLayout} />\n ))\n }\n </SallaProductsList>\n )}\n </div>\n );\n })}\n </div>\n </div>\n </>\n );\n});\n","import { memo } from 'react';\nimport { ProductCard } from '../product/ProductCard';\nimport type { Product } from '../../types';\n\ninterface SectionItem {\n title?: string;\n name?: string;\n type?: string;\n products?: Product[];\n featured_product?: Product;\n limit?: number;\n id?: string;\n}\n\nexport interface FeaturedProductsStyle3Props {\n data: {\n items: SectionItem[];\n position?: number;\n [key: string]: unknown;\n };\n}\n\nexport const FeaturedProductsStyle3 = memo(function FeaturedProductsStyle3({\n data,\n}: FeaturedProductsStyle3Props) {\n const items = data.items || [];\n\n if (!items.length) return null;\n\n return (\n <>\n <div className=\"inner\">\n {items.map((section, sectionIndex) => (\n <div key={section.id || sectionIndex}>\n <div className=\"s-block__title\">\n <h2>{section.title}</h2>\n </div>\n <div className=\"flex-1 grid lg:grid-cols-2 gap-4 sm:gap-8\">\n {section.featured_product ? (\n <>\n <ProductCard product={section.featured_product} layout=\"fullImage\" withShadow />\n <div className=\"grid gap-4 sm:gap-8\">\n {section.products?.slice(0, 3).map((product, idx) => (\n <ProductCard\n key={product.id}\n product={product}\n layout=\"minimal\"\n withShadow\n index={idx}\n />\n ))}\n </div>\n </>\n ) : (\n section.products?.map((product, idx) => (\n <ProductCard\n key={product.id}\n product={product}\n layout=\"minimal\"\n withShadow\n index={idx}\n />\n ))\n )}\n </div>\n </div>\n ))}\n </div>\n </>\n );\n});\n","import { memo } from 'react';\nimport { Link } from '../common';\n\ninterface ImageData {\n url?: string;\n}\n\nexport interface ParallaxBackgroundProps {\n data: {\n image: ImageData;\n url?: string;\n title?: string;\n link_text?: string;\n is_opacity?: boolean;\n position?: number;\n [key: string]: unknown;\n };\n}\n\nexport const ParallaxBackground = memo(function ParallaxBackground({\n data,\n}: ParallaxBackgroundProps) {\n const { image, url, title, link_text: linkText, is_opacity: isOpacity = false } = data;\n\n if (!image?.url) return null;\n\n return (\n <>\n <div className=\"full-banner-entry\" style={{ backgroundImage: `url(${image.url})` }}>\n <div\n className={`overlay h-full w-full ${isOpacity ? 'bg-black' : ''} opacity-60 absolute top-0 left-0`}\n ></div>\n <div className=\"flex h-full items-center justify-center p-5 xs:p-11 relative\">\n <div>\n {title && <h2 className=\"text-2xl font-bold leading-12\">{title}</h2>}\n\n {url && linkText && (\n <Link\n to={url}\n className=\"inline-block text-white text-sm border rounded-md font-bold px-8 py-4\"\n >\n {linkText}\n </Link>\n )}\n </div>\n </div>\n </div>\n </>\n );\n});\n","import { memo } from 'react';\nimport { SallaSlider } from '@salla.sa/twilight-components-react/slider';\nimport { Link, Image } from '../common';\n\ninterface PhotoItem {\n id?: string | number;\n url?: string;\n link_type?: string;\n image?: string;\n}\n\nexport interface PhotosSliderProps {\n data: {\n items: PhotoItem[];\n position?: number;\n is_repeated?: boolean;\n [key: string]: unknown;\n };\n}\n\nexport const PhotosSlider = memo(function PhotosSlider({ data }: PhotosSliderProps) {\n const items = data.items || [];\n const position = data.position ?? 1;\n\n if (!items.length) return null;\n\n return (\n <>\n <SallaSlider\n type=\"carousel\"\n className=\"home-slider photos-slider\"\n centered\n autoPlay\n pagination\n id={`photos-${position}-slider`}\n sliderConfig={{ watchOverflow: true }}\n >\n <div slot=\"items\">\n {items.map((item, index) => (\n <div\n key={item.id ?? `${item.url ?? ''}:${item.image ?? ''}`}\n className=\"swiper-slide\"\n style={{ aspectRatio: '1200/300' }}\n >\n <Link to={item.url || '#'}>\n <Image\n src={item.image}\n className=\"w-full h-full object-contain rounded-md\"\n alt={`image-slider-${index}`}\n width={1200}\n height={300}\n priority={index === 0}\n />\n </Link>\n </div>\n ))}\n </div>\n </SallaSlider>\n </>\n );\n});\n","import { memo } from 'react';\nimport { Link } from '../common';\n\ninterface ImageData {\n url?: string;\n alt?: string;\n}\n\ninterface SquarePhotoItem {\n id?: string | number;\n url?: string;\n link_type?: string;\n /** The Store API sends the URL itself to the engine; Twig gets `{ url, alt }`. */\n image?: string | ImageData;\n text?: string;\n}\n\nconst imageUrl = (item: SquarePhotoItem) =>\n typeof item.image === 'string' ? item.image : item.image?.url;\n\nexport interface SquarePhotosProps {\n data: {\n title?: string;\n items: SquarePhotoItem[];\n position?: number;\n [key: string]: unknown;\n };\n}\n\nexport const SquarePhotos = memo(function SquarePhotos({ data }: SquarePhotosProps) {\n const items = data.items || [];\n const title = data.title;\n\n if (!items.length) return null;\n\n const gridCols =\n items.length <= 3 ? `one-row md:grid-cols-${items.length}` : 'md:grid-cols-3 two-row';\n\n return (\n <>\n {title && (\n <div className=\"s-block__title\">\n <div className=\"right-side\">\n <h2>{title}</h2>\n </div>\n </div>\n )}\n\n <div className={`grid ${gridCols} grid-flow-row gap-3 sm:gap-8`}>\n {items.map((item) => (\n <Link\n {...(item.link_type === 'external_link' ? { target: '_blank' } : {})}\n key={item.id ?? imageUrl(item) ?? item.url}\n className={`banner-entry square-photos ${item.text ? 'has-overlay with-hover' : ''}`}\n style={{ backgroundImage: `url(${imageUrl(item)})` }}\n to={item.url || '#'}\n >\n {item.text && (\n <h3 className=\"text-with-border\">\n <span>{item.text}</span>\n </h3>\n )}\n </Link>\n ))}\n </div>\n </>\n );\n});\n","import { memo, useEffect, useState } from 'react';\n\nexport interface YoutubeProps {\n data: {\n youtube_id: string;\n position?: number;\n [key: string]: unknown;\n };\n}\n\nexport const Youtube = memo(function Youtube({ data }: YoutubeProps) {\n const { youtube_id: youtubeId } = data;\n const [isLoaded, setIsLoaded] = useState(false);\n\n useEffect(() => {\n if (!youtubeId) return;\n\n // Lazy load the lite-youtube web component\n let mounted = true;\n import('@justinribeiro/lite-youtube')\n .then(() => {\n if (mounted) setIsLoaded(true);\n })\n .catch((err) => {\n console.error('Failed to load lite-youtube:', err);\n });\n\n return () => {\n mounted = false;\n };\n }, [youtubeId]);\n\n if (!youtubeId) return null;\n\n return (\n <>\n <div className=\"container\">\n <div className=\"videoWrapper\">\n {isLoaded ? (\n <lite-youtube videoid={youtubeId} params=\"rel=0\"></lite-youtube>\n ) : (\n <div className=\"animate-pulse bg-gray-200 w-full h-full min-h-[300px] rounded\" />\n )}\n </div>\n </div>\n </>\n );\n});\n","import { memo, useState, useEffect } from 'react';\n\nexport interface BundleComponentProps {\n data: {\n component_name: string;\n bundle_id: string;\n [key: string]: unknown;\n };\n}\n\nexport const BundleComponent = memo(function BundleComponent(props: BundleComponentProps) {\n const [mounted, setMounted] = useState(false);\n\n useEffect(() => {\n setMounted(true);\n }, []);\n\n if (!mounted) {\n return null;\n }\n\n const { component_name: componentName, bundle_id: bundleId, ...rest } = props.data;\n const config = JSON.stringify(rest);\n\n return (\n <>\n <salla-custom-component\n component-name={componentName}\n bundle-id={bundleId}\n config={config}\n suppressHydrationWarning\n />\n </>\n );\n});\n","import { lazy } from 'react';\n\nexport { ProductsSlider as LazyProductsSlider } from './ProductsSlider';\nexport { StoreFeatures as LazyStoreFeatures } from './StoreFeatures';\nexport { FixedBanner as LazyFixedBanner } from './FixedBanner';\nexport { FixedProducts as LazyFixedProducts } from './FixedProducts';\nexport { FeaturedProductsStyle1 as LazyFeaturedProductsStyle1 } from './FeaturedProductsStyle1';\nexport { FeaturedProductsStyle2 as LazyFeaturedProductsStyle2 } from './FeaturedProductsStyle2';\nexport { FeaturedProductsStyle3 as LazyFeaturedProductsStyle3 } from './FeaturedProductsStyle3';\nexport { ParallaxBackground as LazyParallaxBackground } from './ParallaxBackground';\nexport { PhotosSlider as LazyPhotosSlider } from './PhotosSlider';\nexport { SquarePhotos as LazySquarePhotos } from './SquarePhotos';\nexport const LazyTestimonials = lazy(() =>\n import('./Testimonials').then((m) => ({ default: m.Testimonials }))\n);\nexport { Youtube as LazyYoutube } from './Youtube';\nexport { BundleComponent as LazyBundleComponent } from './BundleComponent';\n","import {\n LazyProductsSlider,\n LazyStoreFeatures,\n LazyFixedBanner,\n LazyFixedProducts,\n LazyFeaturedProductsStyle1,\n LazyFeaturedProductsStyle2,\n LazyFeaturedProductsStyle3,\n LazyParallaxBackground,\n LazyPhotosSlider,\n LazySquarePhotos,\n LazyTestimonials,\n LazyYoutube,\n LazyBundleComponent,\n} from './lazy';\nimport type { AnyHomeComponent } from './types';\nimport { registry } from '../ComponentRegistry';\n\nexport const DefaultHomeComponents: Record<string, AnyHomeComponent | null> = {\n 'fixed-banner': LazyFixedBanner,\n 'photos-slider': LazyPhotosSlider,\n testimonial: LazyTestimonials,\n 'store-features': LazyStoreFeatures,\n youtube: LazyYoutube,\n 'square-photos': LazySquarePhotos,\n 'fixed-products': LazyFixedProducts,\n 'products-slider': LazyProductsSlider,\n 'parallax-background': LazyParallaxBackground,\n 'featured-products:style1': LazyFeaturedProductsStyle1,\n 'featured-products:style2': LazyFeaturedProductsStyle2,\n 'featured-products:style3': LazyFeaturedProductsStyle3,\n 'bundle-component': LazyBundleComponent,\n};\n\nexport function registerHomeComponents(\n components: Record<string, AnyHomeComponent | null> = DefaultHomeComponents,\n prefix = 'home:'\n): void {\n Object.entries(components).forEach(([path, component]) => {\n if (component) {\n registry.register(`${prefix}${path}`, component);\n }\n });\n}\n","import { Component, type ReactNode, type ErrorInfo } from 'react';\nimport { TwilightContext } from '../../providers/twilight-context';\nimport type { TwilightContextValue } from '../../types/twilight';\nimport type { HomeComponentData } from '../../types';\n\ninterface ComponentErrorBoundaryProps {\n children: ReactNode;\n data: HomeComponentData;\n position: number;\n}\n\ninterface ComponentErrorBoundaryState {\n hasError: boolean;\n error: Error | null;\n}\n\nfunction DevelopmentErrorCard({ error, data }: { error: Error; data: HomeComponentData }) {\n return (\n <section\n dir=\"ltr\"\n className=\"s-block container overflow-hidden bg-red-50 border border-red-300 p-4\"\n >\n <p className=\"text-red-800 text-sm font-bold\">Home Component Error: {data.path}</p>\n <p className=\"text-red-700 text-sm mt-2\">{error.message}</p>\n <details className=\"mt-2\">\n <summary className=\"text-xs cursor-pointer text-red-600\">Stack Trace</summary>\n <pre className=\"text-xs mt-1 overflow-auto max-h-32 text-red-700\">{error.stack}</pre>\n </details>\n <details className=\"mt-2\">\n <summary className=\"text-xs cursor-pointer text-red-600\">Component Data</summary>\n <pre className=\"text-xs mt-1 overflow-auto max-h-32 text-red-700\">\n {JSON.stringify(data, null, 2)}\n </pre>\n </details>\n </section>\n );\n}\n\nexport class ComponentErrorBoundary extends Component<\n ComponentErrorBoundaryProps,\n ComponentErrorBoundaryState\n> {\n static contextType = TwilightContext;\n\n declare context: TwilightContextValue | null;\n\n constructor(props: ComponentErrorBoundaryProps) {\n super(props);\n this.state = { hasError: false, error: null };\n }\n\n static getDerivedStateFromError(error: Error): ComponentErrorBoundaryState {\n return { hasError: true, error };\n }\n\n // Blocks are keyed by position, so a replacement block at the same position reuses\n // this boundary. An error belongs to the block that threw it, not the position.\n componentDidUpdate(prevProps: ComponentErrorBoundaryProps): void {\n if (this.state.hasError && prevProps.data !== this.props.data) {\n this.setState({ hasError: false, error: null });\n }\n }\n\n componentDidCatch(error: Error, errorInfo: ErrorInfo): void {\n if (!this.context) {\n console.error('[ComponentErrorBoundary] Must be used within TwilightProvider');\n return;\n }\n const { log } = this.context;\n const { data, position } = this.props;\n\n log.groupCollapsed(`HomeComponent Error: ${data.path || 'unknown'}`);\n log.error('ERROR', error.message);\n log.label('COMPONENT', data.path || 'unknown');\n log.label('POSITION', position);\n log.label('URL', typeof window !== 'undefined' ? window.location.href : 'SSR');\n log.label('TIME', new Date().toISOString());\n log.trace('STACK TRACE', error.stack || '');\n log.trace('COMPONENT STACK', errorInfo.componentStack || '');\n log.dir('COMPONENT DATA', data);\n log.groupEnd();\n }\n\n render(): ReactNode {\n const { hasError, error } = this.state;\n const { children, data } = this.props;\n\n if (hasError && error) {\n if (process.env.NODE_ENV === 'production') {\n return null;\n }\n\n return <DevelopmentErrorCard error={error} data={data} />;\n }\n\n return children;\n }\n}\n","import { memo, useEffect, useRef, type ReactNode } from 'react';\nimport { registry } from '../ComponentRegistry';\nimport { RenderWhenVisible } from '../common';\nimport { ComponentErrorBoundary } from './ComponentErrorBoundary';\nimport type { AnyHomeComponent } from './index';\nimport type { HomeComponentData } from '../../types';\nimport {\n BackgroundSliderSkeleton,\n BulletDeliverySkeleton,\n FixedProductsSkeleton,\n ListSkeleton,\n ProductsSliderSkeleton,\n Pulse,\n ReviewItemSkeleton,\n SliderSkeleton,\n} from '@salla.sa/twilight-components-react';\n\nfunction SquareGridSkeleton() {\n return (\n <div className=\"s-block container grid grid-cols-2 sm:grid-cols-4 gap-4 py-8\">\n {[1, 2, 3, 4].map((i) => (\n <Pulse key={i} className=\"aspect-square\" />\n ))}\n </div>\n );\n}\n\nexport type HomeComponentsProps = {\n data: HomeComponentData & {\n position?: number;\n [key: string]: unknown;\n };\n};\n\n/**\n * Fallback component for unknown/unregistered components\n * Only shows in development mode\n */\nconst FallbackComponent = memo(function FallbackComponent({ data }: HomeComponentsProps) {\n if (process.env.NODE_ENV === 'production') return null;\n\n return (\n <section\n dir=\"ltr\"\n className=\"s-block container overflow-hidden bg-yellow-50 border border-yellow-200 p-4\"\n >\n <p className=\"text-yellow-800 text-sm\">\n <strong>Unknown component:</strong> {data.path}\n </p>\n <p className=\"text-yellow-700 text-xs mt-1\">\n Register it in setup.ts: <code>registry.register('home:{data.path}', YourComponent)</code>\n </p>\n <details className=\"mt-2\">\n <summary className=\"text-xs cursor-pointer\">Component Data</summary>\n <pre className=\"text-xs mt-1 overflow-auto max-h-32\">{JSON.stringify(data, null, 2)}</pre>\n </details>\n </section>\n );\n});\n\n/**\n * Get the React component for a given home component path\n * Looks up from registry only - theme must register components\n */\nfunction getComponentByPath(data: HomeComponentData): AnyHomeComponent {\n const { path, view_style: viewStyle } = data;\n\n // 1. Check for view_style variant first\n if (viewStyle) {\n const variantKey = `home:${path}:${viewStyle}`;\n const variant = registry.resolve(variantKey);\n if (variant) {\n return variant as AnyHomeComponent;\n }\n }\n\n // 2. Check registry for component\n const registryKey = `home:${path}`;\n const component = registry.resolve(registryKey);\n if (component) {\n return component as AnyHomeComponent;\n }\n\n // 3. Fallback for unknown components\n return FallbackComponent;\n}\n\n/** Same breakpoint and rules the Store injects for Twig themes (`ComponentVisibilityStyles`). */\nconst CHANNEL_VISIBILITY_CSS =\n '@media (max-width:767.98px){.s-hide-on-mobile{display:none!important}}' +\n '@media (min-width:768px){.s-hide-on-desktop{display:none!important}}';\n\n/**\n * Hide class for the merchant's per-channel pick. A missing key, or one that\n * hides on both channels, means visible everywhere: hiding a block outright\n * is the `is_visible` toggle's job, and stores without the feature send no key.\n */\nexport function channelVisibilityClass(data: HomeComponentData): string {\n const raw = data.channel_visibility;\n if (!raw || typeof raw !== 'object') return '';\n const desktop = raw.desktop !== false;\n const mobile = raw.mobile !== false;\n if (desktop && !mobile) return 's-hide-on-mobile';\n if (mobile && !desktop) return 's-hide-on-desktop';\n return '';\n}\n\n/**\n * Render-shell config for a home block: the values the lazy-load wrapper\n * (`RenderWhenVisible`) needs *before* the block mounts — reserved height, the\n * skeleton placeholder, and the wrapper's className/id.\n *\n * Themes register config for blocks they own via `registerHomeComponentConfig`;\n * the engine knows nothing about theme-specific blocks.\n */\nexport type HomeComponentConfig = {\n height?: string;\n className?: string | ((data: HomeComponentData) => string);\n id?: string | ((data: HomeComponentData) => string);\n placeholder?: ReactNode;\n /** Mount on page load instead of when the block nears the viewport. */\n renderOnMount?: boolean;\n};\n\nconst COMPONENT_CONFIG: Record<string, HomeComponentConfig> = {\n 'products-slider': { height: '450px', placeholder: <ProductsSliderSkeleton /> },\n 'fixed-products': { height: '450px', placeholder: <FixedProductsSkeleton /> },\n 'featured-products': {\n height: '450px',\n placeholder: <ProductsSliderSkeleton />,\n className: (data) => {\n const style = data.view_style;\n if (style === 'style1')\n return 's-block s-block--featured-products s-block-tabs s-block--special-products container tabs-initialized';\n if (style === 'style2')\n return `s-block s-block--featured-products s-block-tabs s-block--tabs-produtcs s-block--full-bg tabs-initialized ${data.is_slider ? 'as-slider' : 'as-grid'} bg-gray-100 py-8 sm:py-16`;\n if (style === 'style3')\n return `s-block s-block--featured-products s-block--features-products${Array.isArray(data.items) && data.items.length > 1 ? ' two-cols' : ''} container`;\n return 's-block s-block--featured-products container overflow-hidden';\n },\n id: (data) => `featured-products-${data.view_style}-${data.position ?? 0}`,\n },\n testimonial: { height: '350px', placeholder: <ReviewItemSkeleton /> },\n 'store-features': { height: '200px', placeholder: <BulletDeliverySkeleton /> },\n 'parallax-background': { height: '500px', placeholder: <BackgroundSliderSkeleton /> },\n 'fixed-banner': { height: '350px', placeholder: <BackgroundSliderSkeleton /> },\n 'photos-slider': {\n height: 'clamp(130px, 30vw, 350px)',\n placeholder: <SliderSkeleton />,\n className: (data) =>\n `s-block s-block--photos-slider${data.is_repeated ? ' repeated-block' : ''}`,\n },\n 'square-photos': { height: '250px', placeholder: <SquareGridSkeleton /> },\n youtube: { height: '350px', placeholder: <SliderSkeleton /> },\n 'bundle-component': {\n // As in Twig: reserve nothing, the bundle grows the block from 0.\n height: '0px',\n placeholder: <></>,\n className: (data) => `s-block s-block--bundle-${data.component_name}`,\n // As in Twig, where merchant scripts wait a limited time for the bundle's markup.\n renderOnMount: true,\n },\n 'main-links': {\n height: '200px',\n placeholder: <ListSkeleton />,\n className: (data) => {\n const mergeWithTop = data.merge_links_with_top_component;\n const position = data.position;\n return [\n 's-block',\n 's-block--main-links',\n mergeWithTop && position ? 'merge-with-top-component' : '',\n !data.title && mergeWithTop ? 'merged-has-no-title' : '',\n ]\n .filter(Boolean)\n .join(' ');\n },\n },\n 'square-links': { height: '200px', placeholder: <SquareGridSkeleton /> },\n};\n\n/**\n * Theme-registered render-shell config, keyed by home component path. Themes own\n * the display of their blocks by registering config here; at render time a path's\n * theme entry replaces (not field-merges) the engine's built-in `COMPONENT_CONFIG`\n * entry for that path.\n */\nconst themeComponentConfig: Record<string, HomeComponentConfig> = {};\n\n/**\n * Register render-shell config for home blocks a theme owns (height, placeholder,\n * className, id). Merges by path and overwrites existing keys, so it is safe to\n * call more than once and idempotent for the same keys.\n */\nexport function registerHomeComponentConfig(config: Record<string, HomeComponentConfig>): void {\n Object.assign(themeComponentConfig, config);\n}\n\n/**\n * Resolve a block's render-shell config: theme-registered config takes precedence\n * over the engine's built-in config; returns `undefined` when neither defines the\n * path so the renderer can apply generic defaults.\n */\nfunction resolveComponentConfig(path: string): HomeComponentConfig | undefined {\n return themeComponentConfig[path] ?? COMPONENT_CONFIG[path];\n}\n\n/**\n * Memoized component renderer with scroll-based lazy loading\n * Components only mount when scrolled into view - preventing API calls until needed\n */\nexport const HomeComponentRenderer = memo(function HomeComponentRenderer({\n data,\n index,\n priority,\n}: {\n data: HomeComponentData;\n index: number;\n /** Mount right away with eager images. Defaults to the first three blocks of the page. */\n priority?: boolean;\n}) {\n const renderCountRef = useRef(0);\n renderCountRef.current += 1;\n\n if (process.env.NODE_ENV === 'development') {\n console.log(\n `[HomeComponentRenderer] RENDER: path=${data.path}, index=${index}, renderCount=${renderCountRef.current}`\n );\n }\n\n useEffect(() => {\n console.log(\n `[HomeComponentRenderer] MOUNT: path=${data.path}, index=${index}, renderCount=${renderCountRef.current}`\n );\n return () => {\n console.log(`[HomeComponentRenderer] UNMOUNT: path=${data.path}, index=${index}`);\n };\n }, [data.path, index]);\n\n const isFirstComponent = priority ?? index <= 2;\n const Component = getComponentByPath(data);\n\n const config = resolveComponentConfig(data.path);\n\n const resolvedClassName = config?.className\n ? typeof config.className === 'function'\n ? config.className(data)\n : config.className\n : `s-block s-block--${data.path}`;\n const hideClass = channelVisibilityClass(data);\n const resolvedId = config?.id\n ? typeof config.id === 'function'\n ? config.id(data)\n : config.id\n : undefined;\n const height = config?.height || '400px';\n // A theme's config replaces the engine's, but keeps its mount timing unless the theme sets one.\n const renderOnMount = config?.renderOnMount ?? COMPONENT_CONFIG[data.path]?.renderOnMount;\n\n const content = (\n <ComponentErrorBoundary data={data} position={index + 1}>\n <Component data={{ ...data, position: index + 1, priority: isFirstComponent }} />\n </ComponentErrorBoundary>\n );\n\n return (\n <>\n {hideClass && (\n <style href=\"twilight-channel-visibility\" precedence=\"default\">\n {CHANNEL_VISIBILITY_CSS}\n </style>\n )}\n <RenderWhenVisible\n rootMargin=\"50px\"\n className={hideClass ? `${resolvedClassName} ${hideClass}` : resolvedClassName}\n id={resolvedId}\n estimatedHeight={height}\n renderOnMount={isFirstComponent || renderOnMount === true}\n placeholder={config?.placeholder ?? <ProductsSliderSkeleton />}\n // Dev only: lets the theme editor scroll the preview to a block.\n blockIndex={import.meta.env.DEV ? index : undefined}\n >\n {content}\n </RenderWhenVisible>\n </>\n );\n});\n","import { memo } from 'react';\nimport { useQuery } from '@tanstack/react-query';\nimport { home, type BlockScope } from '../../api/home';\nimport { HomeComponentRenderer } from './HomePageRenderer';\n\nexport interface PageBlocksProps {\n /** The page hook the merchant placed the blocks at, e.g. `product.single.before_customer_reviews`. */\n hook: string;\n /** The product, category or page being shown. */\n scope: BlockScope;\n}\n\n/** Draws the blocks placed at a product, category or page hook, loaded in the browser. */\nexport const PageBlocks = memo(function PageBlocks({ hook, scope }: PageBlocksProps) {\n const { data: blocks = [] } = useQuery(home.queries.blocks(hook, scope));\n\n return (\n <>\n {blocks.map((data, index) => (\n <HomeComponentRenderer key={index} data={data} index={index} priority={false} />\n ))}\n </>\n );\n});\n","import { useEffect } from 'react';\nimport { useTranslation } from '../../providers/I18nProvider';\nimport { whenSallaLoaded } from '../../utils/sdk-helpers';\n\ninterface ReorderLabels {\n /** The add button's text in a reorder list. */\n add: string;\n /** Its text for an out-of-stock product. */\n outOfStock: string;\n}\n\nlet registered = false;\n\n/**\n * Twig's ReorderProductsWidget script: inside a reorder list the add button reads the block's\n * title and adds the product as the customer last ordered it. The SDK has no way to remove a\n * hook, so it is registered once per page load.\n */\nfunction registerReorderHooks(labels: ReorderLabels): void {\n if (registered) return;\n registered = true;\n whenSallaLoaded((sdk) => {\n sdk.hooks?.registerHook?.('salla-add-product-button', 'componentDidLoad', (component) => {\n if (!component.host?.closest('[source=\"reorder\"], [data-source=\"reorder\"]')) return;\n const isOutOfStock =\n component.productStatus === 'out' || component.productStatus === 'out-and-notify';\n const setLabel = () => component.btn?.setText(isOutOfStock ? labels.outOfStock : labels.add);\n setLabel();\n sdk.lang?.onLoaded?.(setLabel);\n if (isOutOfStock) return;\n component.addProductToCart = async (event: Event) => {\n event.preventDefault();\n // The click lands on the inner button, which has no product-id; without one the SDK uses the page's.\n const productId = component.productId ?? component.host.getAttribute('product-id');\n await sdk.order.api.reorderProduct?.(productId ?? undefined);\n };\n });\n });\n}\n\n/**\n * Inside an element with `data-source=\"reorder\"`, make each add button read \"order again\" and\n * add the product as the customer last ordered it, as Twig's reorder block and page do.\n */\nexport function useReorderButtons(enabled: boolean): void {\n const { t } = useTranslation();\n const add = t('pages.orders.repurchase');\n const outOfStock = t('pages.products.out_of_stock');\n useEffect(() => {\n if (enabled) registerReorderHooks({ add, outOfStock });\n }, [enabled, add, outOfStock]);\n}\n","import { memo, useMemo } from 'react';\nimport { useTranslation } from '../../providers/I18nProvider';\nimport { getTwilightContext } from '../../twilight/context';\nimport type { HomeComponentData } from '../../types';\nimport { HomeComponentRenderer } from './HomePageRenderer';\nimport { useReorderButtons } from './reorder-hooks';\n\n/**\n * Twig's \"order again\" block (the Store app's ReorderProductsWidget): on the home page, for a\n * signed-in customer of a store with Reorder on, the products they ordered before, drawn by the\n * theme's own `products-slider` like the home's other product rows.\n */\nexport const ReorderProducts = memo(function ReorderProducts() {\n const { t } = useTranslation();\n const { authToken, settings } = getTwilightContext();\n // The platform lists `reorder` in the store's features exactly when the Reorder setting is on.\n const enabled = !!authToken && !!settings?.store?.features?.includes('reorder');\n const title = t('pages.orders.repurchase');\n useReorderButtons(enabled);\n\n const data = useMemo<HomeComponentData>(\n () => ({\n path: 'products-slider',\n title,\n display_all_url: '/products?source=reorder',\n products: { source: 'reorder' },\n }),\n [title]\n );\n\n if (!enabled) return null;\n\n return (\n <div id=\"reorder-section\" data-source=\"reorder\">\n <HomeComponentRenderer data={data} index={-1} priority={false} />\n </div>\n );\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/home/ProductsSlider.tsx","../src/components/home/StoreFeatures.tsx","../src/components/home/FixedBanner.tsx","../src/components/home/FixedProducts.tsx","../src/components/home/FeaturedProductsStyle1.tsx","../src/components/home/FeaturedProductsStyle2.tsx","../src/components/home/FeaturedProductsStyle3.tsx","../src/components/home/ParallaxBackground.tsx","../src/components/home/PhotosSlider.tsx","../src/components/home/SquarePhotos.tsx","../src/components/home/Youtube.tsx","../src/components/home/BundleComponent.tsx","../src/components/home/lazy.ts","../src/components/home/register.ts","../src/components/home/ComponentErrorBoundary.tsx","../src/components/home/HomePageRenderer.tsx","../src/components/home/PageBlocks.tsx","../src/components/home/reorder-hooks.ts","../src/components/home/ReorderProducts.tsx"],"names":["product","StoreFeatures","jsx","memo","FixedBanner","Fragment","jsxs","Suspense","FeaturedProductsStyle1","useCallback","FeaturedProductsStyle2","useState","SallaButton","SallaProductsSlider","FeaturedProductsStyle3","ParallaxBackground","PhotosSlider","SquarePhotos","Youtube","BundleComponent","useEffect","FallbackComponent","ProductsSliderSkeleton","FixedProductsSkeleton","HomeComponentRenderer","Component","PageBlocks","useQuery","ReorderProducts","useMemo"],"mappings":"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","file":"chunk-Y5ZHBECO.js","sourcesContent":["import { Suspense, useCallback, useMemo } from 'react';\nimport { product, ProductsListSource } from '../../api/product';\nimport { ProductCard } from '../../components/product';\nimport { ProductsSliderSkeleton, SallaProductsSlider } from '@salla.sa/twilight-components-react';\nimport { useTranslation } from '../../providers/I18nProvider';\n\ninterface ProductsSourceConfig {\n source: ProductsListSource;\n source_value?: number | number[] | null;\n}\n\nexport interface ProductsSliderProps {\n data: {\n products: ProductsSourceConfig;\n title?: string;\n display_all_url?: string;\n position?: number;\n priority?: boolean;\n show_controls?: boolean;\n controls_outer?: boolean;\n loop?: boolean;\n centered?: boolean;\n slides_per_view?: number | 'auto';\n direction?: 'rtl' | 'ltr';\n autoplay?: boolean;\n [key: string]: unknown;\n };\n}\n\nexport function ProductsSlider({ data }: ProductsSliderProps) {\n const { t } = useTranslation();\n const {\n products,\n title,\n display_all_url: displayAllUrl,\n position = 1,\n priority = false,\n show_controls: showControls,\n controls_outer: controlsOuter,\n loop,\n centered,\n slides_per_view: slidesPerView,\n direction,\n autoplay,\n } = data;\n\n const sliderProps = useMemo(\n () => ({\n id: `slider-${position}`,\n displayAllTitle: t('blocks.home.display_all', 'View All'),\n ...(showControls !== undefined && { showControls }),\n ...(controlsOuter !== undefined && { controlsOuter }),\n ...(loop !== undefined && { loop }),\n ...(centered !== undefined && { centered }),\n ...(slidesPerView !== undefined && { slidesPerView }),\n ...(direction !== undefined && { direction }),\n }),\n [position, t, showControls, controlsOuter, loop, centered, slidesPerView, direction]\n );\n\n const loader = useCallback(\n () =>\n product.list({\n source: products.source,\n sourceValue: products.source_value,\n }),\n [products.source, products.source_value]\n );\n\n return (\n <Suspense fallback={<ProductsSliderSkeleton />}>\n <SallaProductsSlider\n id={`best-offers-${position}-slider`}\n loader={loader}\n sliderProps={sliderProps}\n {...(displayAllUrl ? { displayAllUrl } : {})}\n {...(title ? { blockTitle: title } : {})}\n {...(autoplay !== undefined ? { autoplay } : {})}\n skeleton={<ProductsSliderSkeleton />}\n >\n {(product, index) => (\n <ProductCard product={product} imagePriority={priority && index < 2} />\n )}\n </SallaProductsSlider>\n </Suspense>\n );\n}\n","import { memo } from 'react';\nimport type { Feature } from '../../types';\n\nexport interface StoreFeaturesProps {\n data: {\n features: Feature[];\n [key: string]: unknown;\n };\n}\n\nexport const StoreFeatures = memo(function StoreFeatures({ data }: StoreFeaturesProps) {\n const { features } = data;\n\n if (!features.length) return null;\n\n return (\n <>\n <div className=\"grid grid-cols-[repeat(2,minmax(0,1fr))] md:grid-cols-[repeat(3,minmax(0,1fr))] gap-4 sm:gap-6 xl:gap-8\">\n {features.map((feature) => (\n <div\n key={`${feature.icon}:${feature.title}:${feature.description ?? ''}`}\n className=\"s-block--features__item\"\n >\n <div className=\"feature-icon\">\n <i className={feature.icon}></i>\n </div>\n <h2>{feature.title}</h2>\n <p>{feature.description}</p>\n </div>\n ))}\n </div>\n </>\n );\n});\n","import { memo } from 'react';\nimport { Link } from '../common';\n\nexport interface FixedBannerComponentProps {\n data: {\n image: {\n url: string;\n alt?: string;\n small_url?: string;\n };\n url?: string;\n title?: string;\n position?: number;\n [key: string]: unknown;\n };\n priority?: boolean;\n}\n\nexport const FixedBanner = memo(function FixedBanner(props: FixedBannerComponentProps) {\n const { data, priority = false } = props;\n const image = data.image?.url;\n\n if (!image) {\n return null;\n }\n\n const url = data.url;\n const altText = data.image.alt?.trim() ? data.image.alt : data.title || 'fixed banner';\n\n const imgProps = priority\n ? {\n loading: 'eager' as const,\n fetchPriority: 'high' as const,\n decoding: 'sync' as const,\n }\n : {\n loading: 'lazy' as const,\n decoding: 'async' as const,\n };\n\n const smallUrl = data.image.small_url;\n\n return (\n <>\n <div className=\"container\">\n <Link\n to={url || '#'}\n className=\"banner banner--fixed overflow-hidden\"\n aria-label={`Banner ${altText}`}\n >\n <picture>\n {smallUrl && <source media=\"(max-width: 767px)\" srcSet={smallUrl} />}\n <img\n width=\"1200\"\n height=\"300\"\n src={image}\n alt={altText}\n style={{ maxWidth: '100%', objectFit: 'contain' }}\n loading={imgProps.loading}\n decoding={imgProps.decoding}\n {...(priority && { fetchPriority: imgProps.fetchPriority })}\n />\n </picture>\n </Link>\n </div>\n </>\n );\n});\n","import { Suspense } from 'react';\nimport { useQuery } from '@tanstack/react-query';\nimport { FixedProductsSkeleton } from '@salla.sa/twilight-components-react';\nimport { Link } from '../common';\nimport { product, ProductsListSource } from '../../api/product';\nimport { ProductCard } from '../../components/product';\nimport { useTranslation } from '../../providers/I18nProvider';\nimport { useTwilight } from '../../providers/TwilightProvider';\n\nexport interface FixedProductsProps {\n data: {\n products: { source: ProductsListSource; source_value?: number[] | null };\n title?: string;\n limit?: number | string;\n display_all_url?: string | null;\n key?: string | null;\n isVertical?: boolean;\n position?: number;\n [key: string]: unknown;\n };\n}\n\nexport function FixedProducts({ data }: FixedProductsProps) {\n const { t } = useTranslation();\n const { theme } = useTwilight();\n\n const title = data.title;\n // The merchant's product count: a number, or the same as a string. Anything that\n // isn't a positive whole number falls back to what the API returns.\n const parsedLimit = Number(data.limit);\n const limit = Number.isInteger(parsedLimit) && parsedLimit > 0 ? parsedLimit : undefined;\n // Matches Twig Raed: `theme.settings.get('vertical_fixed_products', true)`.\n const isVertical = data.isVertical ?? theme.settings.vertical_fixed_products ?? true;\n\n const { data: result, isLoading } = useQuery(\n product.queries.list({\n source: data.products.source,\n sourceValue: data.products?.source_value,\n perPage: limit,\n })\n );\n\n const products = result?.items ?? [];\n\n if (isLoading) {\n return <FixedProductsSkeleton />;\n }\n\n if (!products.length) return null;\n\n return (\n <Suspense fallback={<FixedProductsSkeleton />}>\n {title && (\n <div className=\"s-block__title\">\n <div className=\"right-side\">\n <h2>{title}</h2>\n </div>\n {data.display_all_url && (\n <Link to={data.display_all_url} className=\"s-block__display-all\">\n {t('blocks.home.display_all', 'View All')}\n <i className=\"sicon-arrow-left\"></i>\n </Link>\n )}\n </div>\n )}\n <div\n className={\n 's-products-list-wrapper ' +\n (isVertical ? 's-products-list-vertical-cards' : 's-products-list-horizontal-cards')\n }\n >\n {products.slice(0, limit).map((product) => (\n <ProductCard\n key={product.id}\n product={product}\n layout={isVertical ? 'vertical' : 'horizontal'}\n />\n ))}\n </div>\n </Suspense>\n );\n}\n","import { memo, useState, useCallback } from 'react';\nimport { SallaButton } from '@salla.sa/twilight-components-react/button';\nimport type { Product } from '../../types';\n\ninterface SectionItem {\n title?: string;\n name?: string;\n type?: string;\n id?: string;\n products?: Product[];\n limit?: number;\n}\n\ninterface MainProduct {\n id?: string;\n title?: string;\n value?: string;\n product?: Product;\n}\n\nexport interface FeaturedProductsStyle1Props {\n data: {\n items: SectionItem[];\n main_product?: MainProduct;\n position?: number;\n [key: string]: unknown;\n };\n}\n\nexport const FeaturedProductsStyle1 = memo(function FeaturedProductsStyle1({\n data,\n}: FeaturedProductsStyle1Props) {\n const items = data.items || [];\n const mainProduct = data.main_product;\n\n const [activeTab, setActiveTab] = useState<string>(items[0]?.id || '');\n const [isAnimating, setIsAnimating] = useState(false);\n\n const handleTabClick = useCallback(\n (tabId: string) => {\n if (tabId === activeTab) return;\n setIsAnimating(true);\n setActiveTab(tabId);\n setTimeout(() => setIsAnimating(false), 100);\n },\n [activeTab]\n );\n\n if (!items.length) return null;\n\n const hasMultipleSections = items.length > 1;\n\n return (\n <>\n <div className=\"s-block__title\">\n <div className=\"right-side\">\n <h2>{mainProduct?.title}</h2>\n </div>\n {hasMultipleSections && (\n <div className=\"tabs hide-scroll hidden lg:flex\">\n {items.map((section) => (\n <SallaButton\n key={section.id}\n shape=\"link\"\n onClick={() => handleTabClick(section.id || '')}\n className={`tab-trigger ${activeTab === section.id ? 'is-active' : ''}`}\n >\n {section.title || section.name}\n </SallaButton>\n ))}\n </div>\n )}\n </div>\n\n <div className={`grid grid-cols-1 gap-8 ${mainProduct?.product ? 'lg:grid-cols-2' : ''}`}>\n {mainProduct?.product && (\n <div className=\"flex flex-col\">\n <custom-salla-product-card\n shadow-on-hover\n product={JSON.stringify(mainProduct.product)}\n isSpecial\n ></custom-salla-product-card>\n </div>\n )}\n <div className=\"flex flex-col\">\n {hasMultipleSections && (\n <div className=\"tabs mb-4 sm:mb-8 hide-scroll lg:hidden\">\n {items.map((section) => (\n <SallaButton\n key={section.id}\n shape=\"link\"\n onClick={() => handleTabClick(section.id || '')}\n className={`tab-trigger ${activeTab === section.id ? 'is-active' : ''}`}\n >\n {section.title || section.name}\n </SallaButton>\n ))}\n </div>\n )}\n\n <div className=\"tabs-wrapper flex flex-1\">\n {items.map((section) => {\n const isActive = activeTab === section.id;\n return (\n <div\n key={section.id}\n className={`tabs__item grid-cols-2 ${mainProduct?.product ? '' : 'lg:grid-cols-4'} ${isActive ? 'is-active' : ''} ${isAnimating && isActive ? 'opacity-0 translate-y-3' : ''} ${!isAnimating && isActive ? 'opacity-100 translate-y-0' : ''}`}\n >\n {section.products\n ?.slice(0, mainProduct?.product ? 4 : 8)\n .map((product, productIndex) => (\n <custom-salla-product-card\n key={product.id || productIndex}\n product={JSON.stringify(product)}\n ></custom-salla-product-card>\n ))}\n </div>\n );\n })}\n </div>\n </div>\n </div>\n </>\n );\n});\n","import { memo, useState, useCallback } from 'react';\nimport { SallaButton } from '@salla.sa/twilight-components-react/button';\nimport { SallaProductsList } from '@salla.sa/twilight-components-react';\nimport { SallaProductsSlider } from '@salla.sa/twilight-components-react';\nimport { product, ProductsListSource } from '../../api/product';\nimport { ProductCard } from '../../components/product';\nimport { useTwilight } from '../../providers/TwilightProvider';\n\ninterface ProductSource {\n source: ProductsListSource;\n limit?: number;\n source_value?: number | number[];\n}\n\ninterface SectionItem {\n title?: string;\n name?: string;\n type?: string;\n id?: string;\n products: ProductSource;\n limit?: number;\n}\n\nexport interface FeaturedProductsStyle2Props {\n data: {\n items: SectionItem[];\n position?: number;\n is_slider?: boolean;\n [key: string]: unknown;\n };\n}\n\n// Like Twig Raed, the grid honors `vertical_fixed_products`; the slider never does.\nexport const FeaturedProductsStyle2 = memo(function FeaturedProductsStyle2({\n data,\n}: FeaturedProductsStyle2Props) {\n const { theme } = useTwilight();\n const items = data.items || [];\n const isSlider = data.is_slider ?? true;\n const cardLayout = (theme.settings.vertical_fixed_products ?? true) ? 'vertical' : 'horizontal';\n\n const [activeTab, setActiveTab] = useState<string>(items[0]?.id || '');\n const [isAnimating, setIsAnimating] = useState(false);\n\n const handleTabClick = useCallback(\n (tabId: string) => {\n if (tabId === activeTab) return;\n setIsAnimating(true);\n setActiveTab(tabId);\n setTimeout(() => setIsAnimating(false), 100);\n },\n [activeTab]\n );\n\n const loader = useCallback(\n (source: ProductsListSource, value?: number | number[], limit?: number) => {\n return () =>\n product.list({\n source: source,\n sourceValue: value,\n perPage: limit,\n });\n },\n []\n );\n\n if (!items.length) return null;\n\n const hasMultipleSections = items.length > 1;\n\n return (\n <>\n <div className=\"container\">\n {hasMultipleSections && (\n <div className=\"tabs hide-scroll\">\n {items.map((section) => (\n <SallaButton\n key={section.id}\n fill=\"outline\"\n onClick={() => handleTabClick(section.id || '')}\n className={`tab-trigger ${activeTab === section.id ? 'is-active' : ''}`}\n >\n {section.title || section.name}\n </SallaButton>\n ))}\n </div>\n )}\n\n <div className=\"tabs-wrapper\">\n {items.map((section) => {\n const isActive = activeTab === section.id;\n return (\n <div\n key={section.id}\n className={`tabs__item ${isActive ? 'is-active' : ''} ${isAnimating && isActive ? 'opacity-0 translate-y-3' : ''} ${!isAnimating && isActive ? 'opacity-100 translate-y-0' : ''}`}\n >\n {isSlider ? (\n <SallaProductsSlider\n loader={loader(\n section.products.source,\n section.products?.source_value,\n section.products?.limit\n )}\n sliderProps={{ id: `section-${section.id}-slider` }}\n >\n {(product) => (\n <ProductCard className=\"s-products-slider-card\" product={product} />\n )}\n </SallaProductsSlider>\n ) : (\n <SallaProductsList\n loader={loader(\n section.products.source,\n section.products?.source_value,\n section.products?.limit\n )}\n itemsClassName={`s-products-list-${cardLayout}-cards`}\n >\n {(products) =>\n products.map((product) => (\n <ProductCard key={product.id} product={product} layout={cardLayout} />\n ))\n }\n </SallaProductsList>\n )}\n </div>\n );\n })}\n </div>\n </div>\n </>\n );\n});\n","import { memo } from 'react';\nimport { ProductCard } from '../product/ProductCard';\nimport type { Product } from '../../types';\n\ninterface SectionItem {\n title?: string;\n name?: string;\n type?: string;\n products?: Product[];\n featured_product?: Product;\n limit?: number;\n id?: string;\n}\n\nexport interface FeaturedProductsStyle3Props {\n data: {\n items: SectionItem[];\n position?: number;\n [key: string]: unknown;\n };\n}\n\nexport const FeaturedProductsStyle3 = memo(function FeaturedProductsStyle3({\n data,\n}: FeaturedProductsStyle3Props) {\n const items = data.items || [];\n\n if (!items.length) return null;\n\n return (\n <>\n <div className=\"inner\">\n {items.map((section, sectionIndex) => (\n <div key={section.id || sectionIndex}>\n <div className=\"s-block__title\">\n <h2>{section.title}</h2>\n </div>\n <div className=\"flex-1 grid lg:grid-cols-2 gap-4 sm:gap-8\">\n {section.featured_product ? (\n <>\n <ProductCard product={section.featured_product} layout=\"fullImage\" withShadow />\n <div className=\"grid gap-4 sm:gap-8\">\n {section.products?.slice(0, 3).map((product, idx) => (\n <ProductCard\n key={product.id}\n product={product}\n layout=\"minimal\"\n withShadow\n index={idx}\n />\n ))}\n </div>\n </>\n ) : (\n section.products?.map((product, idx) => (\n <ProductCard\n key={product.id}\n product={product}\n layout=\"minimal\"\n withShadow\n index={idx}\n />\n ))\n )}\n </div>\n </div>\n ))}\n </div>\n </>\n );\n});\n","import { memo } from 'react';\nimport { Link } from '../common';\n\ninterface ImageData {\n url?: string;\n}\n\nexport interface ParallaxBackgroundProps {\n data: {\n image: ImageData;\n url?: string;\n title?: string;\n link_text?: string;\n is_opacity?: boolean;\n position?: number;\n [key: string]: unknown;\n };\n}\n\nexport const ParallaxBackground = memo(function ParallaxBackground({\n data,\n}: ParallaxBackgroundProps) {\n const { image, url, title, link_text: linkText, is_opacity: isOpacity = false } = data;\n\n if (!image?.url) return null;\n\n return (\n <>\n <div className=\"full-banner-entry\" style={{ backgroundImage: `url(${image.url})` }}>\n <div\n className={`overlay h-full w-full ${isOpacity ? 'bg-black' : ''} opacity-60 absolute top-0 left-0`}\n ></div>\n <div className=\"flex h-full items-center justify-center p-5 xs:p-11 relative\">\n <div>\n {title && <h2 className=\"text-2xl font-bold leading-12\">{title}</h2>}\n\n {url && linkText && (\n <Link\n to={url}\n className=\"inline-block text-white text-sm border rounded-md font-bold px-8 py-4\"\n >\n {linkText}\n </Link>\n )}\n </div>\n </div>\n </div>\n </>\n );\n});\n","import { memo } from 'react';\nimport { SallaSlider } from '@salla.sa/twilight-components-react/slider';\nimport { Link, Image } from '../common';\n\ninterface PhotoItem {\n id?: string | number;\n url?: string;\n link_type?: string;\n image?: string;\n}\n\nexport interface PhotosSliderProps {\n data: {\n items: PhotoItem[];\n position?: number;\n is_repeated?: boolean;\n [key: string]: unknown;\n };\n}\n\nexport const PhotosSlider = memo(function PhotosSlider({ data }: PhotosSliderProps) {\n const items = data.items || [];\n const position = data.position ?? 1;\n\n if (!items.length) return null;\n\n return (\n <>\n <SallaSlider\n type=\"carousel\"\n className=\"home-slider photos-slider\"\n centered\n autoPlay\n pagination\n id={`photos-${position}-slider`}\n sliderConfig={{ watchOverflow: true }}\n >\n <div slot=\"items\">\n {items.map((item, index) => (\n <div\n key={item.id ?? `${item.url ?? ''}:${item.image ?? ''}`}\n className=\"swiper-slide\"\n style={{ aspectRatio: '1200/300' }}\n >\n <Link to={item.url || '#'}>\n <Image\n src={item.image}\n className=\"w-full h-full object-contain rounded-md\"\n alt={`image-slider-${index}`}\n width={1200}\n height={300}\n priority={index === 0}\n />\n </Link>\n </div>\n ))}\n </div>\n </SallaSlider>\n </>\n );\n});\n","import { memo } from 'react';\nimport { Link } from '../common';\n\ninterface ImageData {\n url?: string;\n alt?: string;\n}\n\ninterface SquarePhotoItem {\n id?: string | number;\n url?: string;\n link_type?: string;\n /** The Store API sends the URL itself to the engine; Twig gets `{ url, alt }`. */\n image?: string | ImageData;\n text?: string;\n}\n\nconst imageUrl = (item: SquarePhotoItem) =>\n typeof item.image === 'string' ? item.image : item.image?.url;\n\nexport interface SquarePhotosProps {\n data: {\n title?: string;\n items: SquarePhotoItem[];\n position?: number;\n [key: string]: unknown;\n };\n}\n\nexport const SquarePhotos = memo(function SquarePhotos({ data }: SquarePhotosProps) {\n const items = data.items || [];\n const title = data.title;\n\n if (!items.length) return null;\n\n const gridCols =\n items.length <= 3 ? `one-row md:grid-cols-${items.length}` : 'md:grid-cols-3 two-row';\n\n return (\n <>\n {title && (\n <div className=\"s-block__title\">\n <div className=\"right-side\">\n <h2>{title}</h2>\n </div>\n </div>\n )}\n\n <div className={`grid ${gridCols} grid-flow-row gap-3 sm:gap-8`}>\n {items.map((item) => (\n <Link\n {...(item.link_type === 'external_link' ? { target: '_blank' } : {})}\n key={item.id ?? imageUrl(item) ?? item.url}\n className={`banner-entry square-photos ${item.text ? 'has-overlay with-hover' : ''}`}\n style={{ backgroundImage: `url(${imageUrl(item)})` }}\n to={item.url || '#'}\n >\n {item.text && (\n <h3 className=\"text-with-border\">\n <span>{item.text}</span>\n </h3>\n )}\n </Link>\n ))}\n </div>\n </>\n );\n});\n","import { memo, useEffect, useState } from 'react';\n\nexport interface YoutubeProps {\n data: {\n youtube_id: string;\n position?: number;\n [key: string]: unknown;\n };\n}\n\nexport const Youtube = memo(function Youtube({ data }: YoutubeProps) {\n const { youtube_id: youtubeId } = data;\n const [isLoaded, setIsLoaded] = useState(false);\n\n useEffect(() => {\n if (!youtubeId) return;\n\n // Lazy load the lite-youtube web component\n let mounted = true;\n import('@justinribeiro/lite-youtube')\n .then(() => {\n if (mounted) setIsLoaded(true);\n })\n .catch((err) => {\n console.error('Failed to load lite-youtube:', err);\n });\n\n return () => {\n mounted = false;\n };\n }, [youtubeId]);\n\n if (!youtubeId) return null;\n\n return (\n <>\n <div className=\"container\">\n <div className=\"videoWrapper\">\n {isLoaded ? (\n <lite-youtube videoid={youtubeId} params=\"rel=0\"></lite-youtube>\n ) : (\n <div className=\"animate-pulse bg-gray-200 w-full h-full min-h-[300px] rounded\" />\n )}\n </div>\n </div>\n </>\n );\n});\n","import { memo, useState, useEffect } from 'react';\n\nexport interface BundleComponentProps {\n data: {\n component_name: string;\n bundle_id: string;\n [key: string]: unknown;\n };\n}\n\nexport const BundleComponent = memo(function BundleComponent(props: BundleComponentProps) {\n const [mounted, setMounted] = useState(false);\n\n useEffect(() => {\n setMounted(true);\n }, []);\n\n if (!mounted) {\n return null;\n }\n\n const { component_name: componentName, bundle_id: bundleId, ...rest } = props.data;\n const config = JSON.stringify(rest);\n\n return (\n <>\n <salla-custom-component\n component-name={componentName}\n bundle-id={bundleId}\n config={config}\n suppressHydrationWarning\n />\n </>\n );\n});\n","import { lazy } from 'react';\n\nexport { ProductsSlider as LazyProductsSlider } from './ProductsSlider';\nexport { StoreFeatures as LazyStoreFeatures } from './StoreFeatures';\nexport { FixedBanner as LazyFixedBanner } from './FixedBanner';\nexport { FixedProducts as LazyFixedProducts } from './FixedProducts';\nexport { FeaturedProductsStyle1 as LazyFeaturedProductsStyle1 } from './FeaturedProductsStyle1';\nexport { FeaturedProductsStyle2 as LazyFeaturedProductsStyle2 } from './FeaturedProductsStyle2';\nexport { FeaturedProductsStyle3 as LazyFeaturedProductsStyle3 } from './FeaturedProductsStyle3';\nexport { ParallaxBackground as LazyParallaxBackground } from './ParallaxBackground';\nexport { PhotosSlider as LazyPhotosSlider } from './PhotosSlider';\nexport { SquarePhotos as LazySquarePhotos } from './SquarePhotos';\nexport const LazyTestimonials = lazy(() =>\n import('./Testimonials').then((m) => ({ default: m.Testimonials }))\n);\nexport { Youtube as LazyYoutube } from './Youtube';\nexport { BundleComponent as LazyBundleComponent } from './BundleComponent';\n","import {\n LazyProductsSlider,\n LazyStoreFeatures,\n LazyFixedBanner,\n LazyFixedProducts,\n LazyFeaturedProductsStyle1,\n LazyFeaturedProductsStyle2,\n LazyFeaturedProductsStyle3,\n LazyParallaxBackground,\n LazyPhotosSlider,\n LazySquarePhotos,\n LazyTestimonials,\n LazyYoutube,\n LazyBundleComponent,\n} from './lazy';\nimport type { AnyHomeComponent } from './types';\nimport { registry } from '../ComponentRegistry';\n\nexport const DefaultHomeComponents: Record<string, AnyHomeComponent | null> = {\n 'fixed-banner': LazyFixedBanner,\n 'photos-slider': LazyPhotosSlider,\n testimonial: LazyTestimonials,\n 'store-features': LazyStoreFeatures,\n youtube: LazyYoutube,\n 'square-photos': LazySquarePhotos,\n 'fixed-products': LazyFixedProducts,\n 'products-slider': LazyProductsSlider,\n 'parallax-background': LazyParallaxBackground,\n 'featured-products:style1': LazyFeaturedProductsStyle1,\n 'featured-products:style2': LazyFeaturedProductsStyle2,\n 'featured-products:style3': LazyFeaturedProductsStyle3,\n 'bundle-component': LazyBundleComponent,\n};\n\nexport function registerHomeComponents(\n components: Record<string, AnyHomeComponent | null> = DefaultHomeComponents,\n prefix = 'home:'\n): void {\n Object.entries(components).forEach(([path, component]) => {\n if (component) {\n registry.register(`${prefix}${path}`, component);\n }\n });\n}\n","import { Component, type ReactNode, type ErrorInfo } from 'react';\nimport { TwilightContext } from '../../providers/twilight-context';\nimport type { TwilightContextValue } from '../../types/twilight';\nimport type { HomeComponentData } from '../../types';\n\ninterface ComponentErrorBoundaryProps {\n children: ReactNode;\n data: HomeComponentData;\n position: number;\n}\n\ninterface ComponentErrorBoundaryState {\n hasError: boolean;\n error: Error | null;\n}\n\nfunction DevelopmentErrorCard({ error, data }: { error: Error; data: HomeComponentData }) {\n return (\n <section\n dir=\"ltr\"\n className=\"s-block container overflow-hidden bg-red-50 border border-red-300 p-4\"\n >\n <p className=\"text-red-800 text-sm font-bold\">Home Component Error: {data.path}</p>\n <p className=\"text-red-700 text-sm mt-2\">{error.message}</p>\n <details className=\"mt-2\">\n <summary className=\"text-xs cursor-pointer text-red-600\">Stack Trace</summary>\n <pre className=\"text-xs mt-1 overflow-auto max-h-32 text-red-700\">{error.stack}</pre>\n </details>\n <details className=\"mt-2\">\n <summary className=\"text-xs cursor-pointer text-red-600\">Component Data</summary>\n <pre className=\"text-xs mt-1 overflow-auto max-h-32 text-red-700\">\n {JSON.stringify(data, null, 2)}\n </pre>\n </details>\n </section>\n );\n}\n\nexport class ComponentErrorBoundary extends Component<\n ComponentErrorBoundaryProps,\n ComponentErrorBoundaryState\n> {\n static contextType = TwilightContext;\n\n declare context: TwilightContextValue | null;\n\n constructor(props: ComponentErrorBoundaryProps) {\n super(props);\n this.state = { hasError: false, error: null };\n }\n\n static getDerivedStateFromError(error: Error): ComponentErrorBoundaryState {\n return { hasError: true, error };\n }\n\n // Blocks are keyed by position, so a replacement block at the same position reuses\n // this boundary. An error belongs to the block that threw it, not the position.\n componentDidUpdate(prevProps: ComponentErrorBoundaryProps): void {\n if (this.state.hasError && prevProps.data !== this.props.data) {\n this.setState({ hasError: false, error: null });\n }\n }\n\n componentDidCatch(error: Error, errorInfo: ErrorInfo): void {\n if (!this.context) {\n console.error('[ComponentErrorBoundary] Must be used within TwilightProvider');\n return;\n }\n const { log } = this.context;\n const { data, position } = this.props;\n\n log.groupCollapsed(`HomeComponent Error: ${data.path || 'unknown'}`);\n log.error('ERROR', error.message);\n log.label('COMPONENT', data.path || 'unknown');\n log.label('POSITION', position);\n log.label('URL', typeof window !== 'undefined' ? window.location.href : 'SSR');\n log.label('TIME', new Date().toISOString());\n log.trace('STACK TRACE', error.stack || '');\n log.trace('COMPONENT STACK', errorInfo.componentStack || '');\n log.dir('COMPONENT DATA', data);\n log.groupEnd();\n }\n\n render(): ReactNode {\n const { hasError, error } = this.state;\n const { children, data } = this.props;\n\n if (hasError && error) {\n if (process.env.NODE_ENV === 'production') {\n return null;\n }\n\n return <DevelopmentErrorCard error={error} data={data} />;\n }\n\n return children;\n }\n}\n","import { memo, useEffect, useRef, type ReactNode } from 'react';\nimport { registry } from '../ComponentRegistry';\nimport { RenderWhenVisible } from '../common';\nimport { ComponentErrorBoundary } from './ComponentErrorBoundary';\nimport type { AnyHomeComponent } from './index';\nimport type { HomeComponentData } from '../../types';\nimport {\n BackgroundSliderSkeleton,\n BulletDeliverySkeleton,\n FixedProductsSkeleton,\n ListSkeleton,\n ProductsSliderSkeleton,\n Pulse,\n ReviewItemSkeleton,\n SliderSkeleton,\n} from '@salla.sa/twilight-components-react';\n\nfunction SquareGridSkeleton() {\n return (\n <div className=\"s-block container grid grid-cols-2 sm:grid-cols-4 gap-4 py-8\">\n {[1, 2, 3, 4].map((i) => (\n <Pulse key={i} className=\"aspect-square\" />\n ))}\n </div>\n );\n}\n\nexport type HomeComponentsProps = {\n data: HomeComponentData & {\n position?: number;\n [key: string]: unknown;\n };\n};\n\n/**\n * Fallback component for unknown/unregistered components\n * Only shows in development mode\n */\nconst FallbackComponent = memo(function FallbackComponent({ data }: HomeComponentsProps) {\n if (process.env.NODE_ENV === 'production') return null;\n\n return (\n <section\n dir=\"ltr\"\n className=\"s-block container overflow-hidden bg-yellow-50 border border-yellow-200 p-4\"\n >\n <p className=\"text-yellow-800 text-sm\">\n <strong>Unknown component:</strong> {data.path}\n </p>\n <p className=\"text-yellow-700 text-xs mt-1\">\n Register it in setup.ts: <code>registry.register('home:{data.path}', YourComponent)</code>\n </p>\n <details className=\"mt-2\">\n <summary className=\"text-xs cursor-pointer\">Component Data</summary>\n <pre className=\"text-xs mt-1 overflow-auto max-h-32\">{JSON.stringify(data, null, 2)}</pre>\n </details>\n </section>\n );\n});\n\n/**\n * Get the React component for a given home component path\n * Looks up from registry only - theme must register components\n */\nfunction getComponentByPath(data: HomeComponentData): AnyHomeComponent {\n const { path, view_style: viewStyle } = data;\n\n // 1. Check for view_style variant first\n if (viewStyle) {\n const variantKey = `home:${path}:${viewStyle}`;\n const variant = registry.resolve(variantKey);\n if (variant) {\n return variant as AnyHomeComponent;\n }\n }\n\n // 2. Check registry for component\n const registryKey = `home:${path}`;\n const component = registry.resolve(registryKey);\n if (component) {\n return component as AnyHomeComponent;\n }\n\n // 3. Fallback for unknown components\n return FallbackComponent;\n}\n\n/** Same breakpoint and rules the Store injects for Twig themes (`ComponentVisibilityStyles`). */\nconst CHANNEL_VISIBILITY_CSS =\n '@media (max-width:767.98px){.s-hide-on-mobile{display:none!important}}' +\n '@media (min-width:768px){.s-hide-on-desktop{display:none!important}}';\n\n/**\n * Hide class for the merchant's per-channel pick. A missing key, or one that\n * hides on both channels, means visible everywhere: hiding a block outright\n * is the `is_visible` toggle's job, and stores without the feature send no key.\n */\nexport function channelVisibilityClass(data: HomeComponentData): string {\n const raw = data.channel_visibility;\n if (!raw || typeof raw !== 'object') return '';\n const desktop = raw.desktop !== false;\n const mobile = raw.mobile !== false;\n if (desktop && !mobile) return 's-hide-on-mobile';\n if (mobile && !desktop) return 's-hide-on-desktop';\n return '';\n}\n\n/**\n * Render-shell config for a home block: the values the lazy-load wrapper\n * (`RenderWhenVisible`) needs *before* the block mounts — reserved height, the\n * skeleton placeholder, and the wrapper's className/id.\n *\n * Themes register config for blocks they own via `registerHomeComponentConfig`;\n * the engine knows nothing about theme-specific blocks.\n */\nexport type HomeComponentConfig = {\n height?: string;\n className?: string | ((data: HomeComponentData) => string);\n id?: string | ((data: HomeComponentData) => string);\n placeholder?: ReactNode;\n /** Mount on page load instead of when the block nears the viewport. */\n renderOnMount?: boolean;\n};\n\nconst COMPONENT_CONFIG: Record<string, HomeComponentConfig> = {\n 'products-slider': { height: '450px', placeholder: <ProductsSliderSkeleton /> },\n 'fixed-products': { height: '450px', placeholder: <FixedProductsSkeleton /> },\n 'featured-products': {\n height: '450px',\n placeholder: <ProductsSliderSkeleton />,\n className: (data) => {\n const style = data.view_style;\n if (style === 'style1')\n return 's-block s-block--featured-products s-block-tabs s-block--special-products container tabs-initialized';\n if (style === 'style2')\n return `s-block s-block--featured-products s-block-tabs s-block--tabs-produtcs s-block--full-bg tabs-initialized ${data.is_slider ? 'as-slider' : 'as-grid'} bg-gray-100 py-8 sm:py-16`;\n if (style === 'style3')\n return `s-block s-block--featured-products s-block--features-products${Array.isArray(data.items) && data.items.length > 1 ? ' two-cols' : ''} container`;\n return 's-block s-block--featured-products container overflow-hidden';\n },\n id: (data) => `featured-products-${data.view_style}-${data.position ?? 0}`,\n },\n testimonial: { height: '350px', placeholder: <ReviewItemSkeleton /> },\n 'store-features': { height: '200px', placeholder: <BulletDeliverySkeleton /> },\n 'parallax-background': { height: '500px', placeholder: <BackgroundSliderSkeleton /> },\n 'fixed-banner': { height: '350px', placeholder: <BackgroundSliderSkeleton /> },\n 'photos-slider': {\n height: 'clamp(130px, 30vw, 350px)',\n placeholder: <SliderSkeleton />,\n className: (data) =>\n `s-block s-block--photos-slider${data.is_repeated ? ' repeated-block' : ''}`,\n },\n 'square-photos': { height: '250px', placeholder: <SquareGridSkeleton /> },\n youtube: { height: '350px', placeholder: <SliderSkeleton /> },\n 'bundle-component': {\n // As in Twig: reserve nothing, the bundle grows the block from 0.\n height: '0px',\n placeholder: <></>,\n className: (data) => `s-block s-block--bundle-${data.component_name}`,\n // As in Twig, where merchant scripts wait a limited time for the bundle's markup.\n renderOnMount: true,\n },\n 'main-links': {\n height: '200px',\n placeholder: <ListSkeleton />,\n className: (data) => {\n const mergeWithTop = data.merge_links_with_top_component;\n const position = data.position;\n return [\n 's-block',\n 's-block--main-links',\n mergeWithTop && position ? 'merge-with-top-component' : '',\n !data.title && mergeWithTop ? 'merged-has-no-title' : '',\n ]\n .filter(Boolean)\n .join(' ');\n },\n },\n 'square-links': { height: '200px', placeholder: <SquareGridSkeleton /> },\n};\n\n/**\n * Theme-registered render-shell config, keyed by home component path. Themes own\n * the display of their blocks by registering config here; at render time a path's\n * theme entry replaces (not field-merges) the engine's built-in `COMPONENT_CONFIG`\n * entry for that path.\n */\nconst themeComponentConfig: Record<string, HomeComponentConfig> = {};\n\n/**\n * Register render-shell config for home blocks a theme owns (height, placeholder,\n * className, id). Merges by path and overwrites existing keys, so it is safe to\n * call more than once and idempotent for the same keys.\n */\nexport function registerHomeComponentConfig(config: Record<string, HomeComponentConfig>): void {\n Object.assign(themeComponentConfig, config);\n}\n\n/**\n * Resolve a block's render-shell config: theme-registered config takes precedence\n * over the engine's built-in config; returns `undefined` when neither defines the\n * path so the renderer can apply generic defaults.\n */\nfunction resolveComponentConfig(path: string): HomeComponentConfig | undefined {\n return themeComponentConfig[path] ?? COMPONENT_CONFIG[path];\n}\n\n/**\n * Memoized component renderer with scroll-based lazy loading\n * Components only mount when scrolled into view - preventing API calls until needed\n */\nexport const HomeComponentRenderer = memo(function HomeComponentRenderer({\n data,\n index,\n priority,\n}: {\n data: HomeComponentData;\n index: number;\n /** Mount right away with eager images. Defaults to the first three blocks of the page. */\n priority?: boolean;\n}) {\n const renderCountRef = useRef(0);\n renderCountRef.current += 1;\n\n if (process.env.NODE_ENV === 'development') {\n console.log(\n `[HomeComponentRenderer] RENDER: path=${data.path}, index=${index}, renderCount=${renderCountRef.current}`\n );\n }\n\n useEffect(() => {\n console.log(\n `[HomeComponentRenderer] MOUNT: path=${data.path}, index=${index}, renderCount=${renderCountRef.current}`\n );\n return () => {\n console.log(`[HomeComponentRenderer] UNMOUNT: path=${data.path}, index=${index}`);\n };\n }, [data.path, index]);\n\n const isFirstComponent = priority ?? index <= 2;\n const Component = getComponentByPath(data);\n\n const config = resolveComponentConfig(data.path);\n\n const resolvedClassName = config?.className\n ? typeof config.className === 'function'\n ? config.className(data)\n : config.className\n : `s-block s-block--${data.path}`;\n const hideClass = channelVisibilityClass(data);\n const resolvedId = config?.id\n ? typeof config.id === 'function'\n ? config.id(data)\n : config.id\n : undefined;\n const height = config?.height || '400px';\n // A theme's config replaces the engine's, but keeps its mount timing unless the theme sets one.\n const renderOnMount = config?.renderOnMount ?? COMPONENT_CONFIG[data.path]?.renderOnMount;\n\n const content = (\n <ComponentErrorBoundary data={data} position={index + 1}>\n <Component data={{ ...data, position: index + 1, priority: isFirstComponent }} />\n </ComponentErrorBoundary>\n );\n\n return (\n <>\n {hideClass && (\n <style href=\"twilight-channel-visibility\" precedence=\"default\">\n {CHANNEL_VISIBILITY_CSS}\n </style>\n )}\n <RenderWhenVisible\n rootMargin=\"50px\"\n className={hideClass ? `${resolvedClassName} ${hideClass}` : resolvedClassName}\n id={resolvedId}\n estimatedHeight={height}\n renderOnMount={isFirstComponent || renderOnMount === true}\n placeholder={config?.placeholder ?? <ProductsSliderSkeleton />}\n // Dev only: lets the theme editor scroll the preview to a block.\n blockIndex={import.meta.env.DEV ? index : undefined}\n >\n {content}\n </RenderWhenVisible>\n </>\n );\n});\n","import { memo } from 'react';\nimport { useQuery } from '@tanstack/react-query';\nimport { home, type BlockScope } from '../../api/home';\nimport { HomeComponentRenderer } from './HomePageRenderer';\n\nexport interface PageBlocksProps {\n /** The page hook the merchant placed the blocks at, e.g. `product.single.before_customer_reviews`. */\n hook: string;\n /** The product, category or page being shown. */\n scope: BlockScope;\n}\n\n/** Draws the blocks placed at a product, category or page hook, loaded in the browser. */\nexport const PageBlocks = memo(function PageBlocks({ hook, scope }: PageBlocksProps) {\n const { data: blocks = [] } = useQuery(home.queries.blocks(hook, scope));\n\n return (\n <>\n {blocks.map((data, index) => (\n <HomeComponentRenderer key={index} data={data} index={index} priority={false} />\n ))}\n </>\n );\n});\n","import { useEffect } from 'react';\nimport { useTranslation } from '../../providers/I18nProvider';\nimport { whenSallaLoaded } from '../../utils/sdk-helpers';\n\ninterface ReorderLabels {\n /** The add button's text in a reorder list. */\n add: string;\n /** Its text for an out-of-stock product. */\n outOfStock: string;\n}\n\nlet registered = false;\n\n/**\n * Twig's ReorderProductsWidget script: inside a reorder list the add button reads the block's\n * title and adds the product as the customer last ordered it. The SDK has no way to remove a\n * hook, so it is registered once per page load.\n */\nfunction registerReorderHooks(labels: ReorderLabels): void {\n if (registered) return;\n registered = true;\n whenSallaLoaded((sdk) => {\n sdk.hooks?.registerHook?.('salla-add-product-button', 'componentDidLoad', (component) => {\n if (!component.host?.closest('[source=\"reorder\"], [data-source=\"reorder\"]')) return;\n const isOutOfStock =\n component.productStatus === 'out' || component.productStatus === 'out-and-notify';\n const setLabel = () => component.btn?.setText(isOutOfStock ? labels.outOfStock : labels.add);\n setLabel();\n sdk.lang?.onLoaded?.(setLabel);\n if (isOutOfStock) return;\n component.addProductToCart = async (event: Event) => {\n event.preventDefault();\n // The click lands on the inner button, which has no product-id; without one the SDK uses the page's.\n const productId = component.productId ?? component.host.getAttribute('product-id');\n await sdk.order.api.reorderProduct?.(productId ?? undefined);\n };\n });\n });\n}\n\n/**\n * Inside an element with `data-source=\"reorder\"`, make each add button read \"order again\" and\n * add the product as the customer last ordered it, as Twig's reorder block and page do.\n */\nexport function useReorderButtons(enabled: boolean): void {\n const { t } = useTranslation();\n const add = t('pages.orders.repurchase');\n const outOfStock = t('pages.products.out_of_stock');\n useEffect(() => {\n if (enabled) registerReorderHooks({ add, outOfStock });\n }, [enabled, add, outOfStock]);\n}\n","import { memo, useMemo } from 'react';\nimport { useTranslation } from '../../providers/I18nProvider';\nimport { getTwilightContext } from '../../twilight/context';\nimport type { HomeComponentData } from '../../types';\nimport { HomeComponentRenderer } from './HomePageRenderer';\nimport { useReorderButtons } from './reorder-hooks';\n\n/**\n * Twig's \"order again\" block (the Store app's ReorderProductsWidget): on the home page, for a\n * signed-in customer of a store with Reorder on, the products they ordered before, drawn by the\n * theme's own `products-slider` like the home's other product rows.\n */\nexport const ReorderProducts = memo(function ReorderProducts() {\n const { t } = useTranslation();\n const { authToken, settings } = getTwilightContext();\n // The platform lists `reorder` in the store's features exactly when the Reorder setting is on.\n const enabled = !!authToken && !!settings?.store?.features?.includes('reorder');\n const title = t('pages.orders.repurchase');\n useReorderButtons(enabled);\n\n const data = useMemo<HomeComponentData>(\n () => ({\n path: 'products-slider',\n title,\n display_all_url: '/products?source=reorder',\n products: { source: 'reorder' },\n }),\n [title]\n );\n\n if (!enabled) return null;\n\n return (\n <div id=\"reorder-section\" data-source=\"reorder\">\n <HomeComponentRenderer data={data} index={-1} priority={false} />\n </div>\n );\n});\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { HomeComponentRenderer, ReorderProducts } from './chunk-
|
|
1
|
+
import { HomeComponentRenderer, ReorderProducts } from './chunk-Y5ZHBECO.js';
|
|
2
2
|
import { home } from './chunk-5CKTQAFX.js';
|
|
3
3
|
import { useDevHomeBlocks } from './chunk-XMFVSBEO.js';
|
|
4
4
|
import { storePageUrl, buildHreflangAlternates } from './chunk-OM2GRPDH.js';
|
|
@@ -87,5 +87,5 @@ function head(ctx) {
|
|
|
87
87
|
var Home = { id: RouteId.INDEX, loader, head, Component: HomePage };
|
|
88
88
|
|
|
89
89
|
export { Home, HomeSkeleton, homeLoader };
|
|
90
|
-
//# sourceMappingURL=chunk-
|
|
91
|
-
//# sourceMappingURL=chunk-
|
|
90
|
+
//# sourceMappingURL=chunk-Y6VKKGXJ.js.map
|
|
91
|
+
//# sourceMappingURL=chunk-Y6VKKGXJ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/routes/home/loader.ts","../src/routes/home/HomePage.tsx","../src/routes/home/index.tsx"],"names":["HomeSkeleton","HomePage"],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/routes/home/loader.ts","../src/routes/home/HomePage.tsx","../src/routes/home/index.tsx"],"names":["HomeSkeleton","HomePage"],"mappings":"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","file":"chunk-Y6VKKGXJ.js","sourcesContent":["import { getTwilightContext } from '../../twilight/context';\nimport { home } from '../../api/home';\nimport type { HomeComponentData } from '../../types';\nimport { RouteId } from '../../router/route-ids';\n\nexport interface HomeLoaderData {\n locale: string;\n components: HomeComponentData[];\n page: { slug: string };\n}\n\nexport async function homeLoader(ctx?: { locale?: string }): Promise<HomeLoaderData> {\n const { queryClient } = getTwilightContext();\n const components = await queryClient.ensureQueryData(home.queries.components());\n const result = {\n locale: ctx?.locale || 'ar',\n components: components.map((comp) => ({\n ...comp,\n path: comp.path?.replace('home.', '') || comp.path,\n })),\n page: { slug: RouteId.INDEX },\n };\n return result;\n}\n","import { memo } from 'react';\nimport { useDevHomeBlocks } from '../../dev/dev-settings-store';\nimport { HookSlot } from '../../hooks';\nimport { HomeComponentRenderer, ReorderProducts } from '../../components/home';\nimport type { HomePageProps } from './types';\nimport { Pulse } from '@salla.sa/twilight-components-react';\n\nexport const HomeSkeleton = memo(function HomeSkeleton() {\n return (\n <>\n <div className=\"s-block container skeleton-block-hero\">\n <Pulse className=\"h-64 sm:h-80 rounded-md\" />\n </div>\n <div className=\"s-block container skeleton-block-products\">\n <Pulse className=\"h-10 w-48 mb-4\" />\n <div className=\"grid grid-cols-2 sm:grid-cols-4 gap-4\">\n {[1, 2, 3, 4].map((i) => (\n <Pulse key={i} className=\"h-56\" />\n ))}\n </div>\n </div>\n <div className=\"s-block container skeleton-block-products\">\n <Pulse className=\"h-10 w-48 mb-4\" />\n <div className=\"grid grid-cols-2 sm:grid-cols-4 gap-4\">\n {[1, 2, 3, 4].map((i) => (\n <Pulse key={i} className=\"h-56\" />\n ))}\n </div>\n </div>\n </>\n );\n});\n\nexport const HomePage = memo(function HomePage({ components = [] }: HomePageProps) {\n // Dev-mode only: the dev editor's layout replaces the store's blocks while it\n // is on. No-op passthrough in production builds.\n const renderedComponents = useDevHomeBlocks(components);\n return (\n <>\n <HookSlot name=\"home:start\" />\n <HookSlot name=\"home:content\" />\n {renderedComponents.map((data, index) => (\n // `data.key` is the twilight.json catalog id, shared by every placement\n // of that block. Platform blocks send null. Position is unique; a dev\n // layout block keeps its own id so a reorder doesn't remount the rest.\n <HomeComponentRenderer key={data.__dev_id ?? index} data={data} index={index} />\n ))}\n <HookSlot name=\"home:end\" />\n <ReorderProducts />\n </>\n );\n});\n\nexport { HomePage as default };\n","import type { HeadDescriptor } from '../../utils/head';\nimport { buildHreflangAlternates, storePageUrl } from '../../utils/baseHead';\nimport type { HomeLoaderData } from './loader';\nimport { homeLoader } from './loader';\nimport type { TwilightContext } from '../../twilight/context';\nimport { HomePage } from './HomePage';\nimport { RouteId } from '../../router/route-ids';\n\nexport { HomeSkeleton } from './HomePage';\nexport { registerHomeComponents, DefaultHomeComponents } from '../../components/home/register';\nexport { registerHomeComponentConfig } from '../../components/home';\nexport type { HomePageProps } from './types';\nexport type { HomeLoaderData } from './loader';\nexport type {\n HomeComponentsProps,\n AnyHomeComponent,\n HomeComponentConfig,\n} from '../../components/home';\n\nfunction loader(_ctx?: { locale?: string }): Promise<HomeLoaderData> {\n return homeLoader({ locale: _ctx?.locale });\n}\n\nfunction head(ctx: TwilightContext): HeadDescriptor {\n const store = ctx.settings?.store;\n if (!store) return {};\n\n const title = store.meta?.title ?? store.name;\n const description = store.meta?.description ?? store.description;\n const keywords = store.meta?.keywords;\n // `/ar`, like Twig, where store.url reads `/ar/`.\n const url = storePageUrl(ctx.settings, ctx.location.pathname) ?? store.url;\n\n return {\n title,\n description,\n keywords,\n canonical: url,\n openGraph: {\n type: 'website',\n title,\n description,\n images: store.logo,\n url,\n },\n twitter: {\n card: 'summary_large_image',\n title,\n description,\n images: store.logo,\n },\n alternateLanguages: buildHreflangAlternates(ctx.settings, ctx.location.pathname),\n };\n}\n\nexport const Home = { id: RouteId.INDEX, loader, head, Component: HomePage } as const;\n\nexport { homeLoader };\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { LazyCartItem as CartItem, LazyCartSummary as CartSummary, LazySeoCartWidget as SeoCartWidget } from '../../chunk-
|
|
1
|
+
export { LazyCartItem as CartItem, LazyCartSummary as CartSummary, LazySeoCartWidget as SeoCartWidget } from '../../chunk-TM5MVVTX.js';
|
|
2
2
|
import '../../chunk-DGUM43GV.js';
|
|
3
3
|
//# sourceMappingURL=index.js.map
|
|
4
4
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { BlogSkeleton, LazyBreadcrumb as Breadcrumb, BreadcrumbSkeleton, LazyCurrencySymbol as CurrencySymbol, CustomerLayoutSkeleton, CustomerPageSkeleton, DeferredData, LazyErrorPage as ErrorPage, Image, LazyNoContent as NoContent, PageSkeleton, ProductCardSkeleton, ProductDetailSkeleton, ProductGridSkeleton, LazyRenderWhenVisible as RenderWhenVisible, SkeletonPulse, resolveDeferred } from '../../chunk-
|
|
1
|
+
export { BlogSkeleton, LazyBreadcrumb as Breadcrumb, BreadcrumbSkeleton, LazyCurrencySymbol as CurrencySymbol, CustomerLayoutSkeleton, CustomerPageSkeleton, DeferredData, LazyErrorPage as ErrorPage, Image, LazyNoContent as NoContent, PageSkeleton, ProductCardSkeleton, ProductDetailSkeleton, ProductGridSkeleton, LazyRenderWhenVisible as RenderWhenVisible, SkeletonPulse, resolveDeferred } from '../../chunk-5QYNHHPE.js';
|
|
2
2
|
export { Link } from '../../chunk-AXW67SY7.js';
|
|
3
3
|
import '../../chunk-BYMOPN2S.js';
|
|
4
4
|
import '../../chunk-SKLEJJ6M.js';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { Drawer } from '../../chunk-6TKIUG5C.js';
|
|
2
|
-
import '../../chunk-
|
|
3
|
-
import '../../chunk-
|
|
4
|
-
import '../../chunk-
|
|
2
|
+
import '../../chunk-5YXJC35L.js';
|
|
3
|
+
import '../../chunk-ULPH6647.js';
|
|
4
|
+
import '../../chunk-FIDNPYLL.js';
|
|
5
5
|
import '../../chunk-D6XHL6VQ.js';
|
|
6
6
|
import '../../chunk-JYV25VNZ.js';
|
|
7
7
|
import '../../chunk-XMFVSBEO.js';
|
|
@@ -35,7 +35,7 @@ import '../../chunk-5XDPAKF5.js';
|
|
|
35
35
|
import '../../chunk-GCPEMNSU.js';
|
|
36
36
|
import '../../chunk-PFAPRJVF.js';
|
|
37
37
|
import '../../chunk-TYNZ5B2B.js';
|
|
38
|
-
import '../../chunk-
|
|
38
|
+
import '../../chunk-5QYNHHPE.js';
|
|
39
39
|
import '../../chunk-AXW67SY7.js';
|
|
40
40
|
import '../../chunk-BYMOPN2S.js';
|
|
41
41
|
import '../../chunk-SKLEJJ6M.js';
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
export { BundleComponent, ComponentErrorBoundary, DefaultHomeComponents, FeaturedProductsStyle1, FeaturedProductsStyle2, FeaturedProductsStyle3, FixedBanner, FixedProducts, HomeComponentRenderer, PageBlocks, ParallaxBackground, PhotosSlider, ProductsSlider, ReorderProducts, SquarePhotos, StoreFeatures, LazyTestimonials as Testimonials, Youtube, registerHomeComponentConfig, registerHomeComponents, useReorderButtons } from '../../chunk-
|
|
1
|
+
export { BundleComponent, ComponentErrorBoundary, DefaultHomeComponents, FeaturedProductsStyle1, FeaturedProductsStyle2, FeaturedProductsStyle3, FixedBanner, FixedProducts, HomeComponentRenderer, PageBlocks, ParallaxBackground, PhotosSlider, ProductsSlider, ReorderProducts, SquarePhotos, StoreFeatures, LazyTestimonials as Testimonials, Youtube, registerHomeComponentConfig, registerHomeComponents, useReorderButtons } from '../../chunk-Y5ZHBECO.js';
|
|
2
2
|
import '../../chunk-5CKTQAFX.js';
|
|
3
3
|
import '../../chunk-MQALPNFL.js';
|
|
4
|
-
import '../../chunk-
|
|
4
|
+
import '../../chunk-4GWHDLUF.js';
|
|
5
5
|
import '../../chunk-Y32RHCOH.js';
|
|
6
|
-
import '../../chunk-
|
|
7
|
-
import '../../chunk-
|
|
8
|
-
import '../../chunk-
|
|
6
|
+
import '../../chunk-5YXJC35L.js';
|
|
7
|
+
import '../../chunk-ULPH6647.js';
|
|
8
|
+
import '../../chunk-FIDNPYLL.js';
|
|
9
9
|
import '../../chunk-D6XHL6VQ.js';
|
|
10
10
|
import '../../chunk-JYV25VNZ.js';
|
|
11
11
|
import '../../chunk-XMFVSBEO.js';
|
|
@@ -39,7 +39,7 @@ import '../../chunk-5XDPAKF5.js';
|
|
|
39
39
|
import '../../chunk-GCPEMNSU.js';
|
|
40
40
|
import '../../chunk-PFAPRJVF.js';
|
|
41
41
|
import '../../chunk-TYNZ5B2B.js';
|
|
42
|
-
import '../../chunk-
|
|
42
|
+
import '../../chunk-5QYNHHPE.js';
|
|
43
43
|
import '../../chunk-AXW67SY7.js';
|
|
44
44
|
import '../../chunk-BYMOPN2S.js';
|
|
45
45
|
import '../../chunk-SKLEJJ6M.js';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { LazyCopyright as Copyright, LazyCustomerLayout as CustomerLayout, LazyFooter as Footer, LazyHeader as Header, LazyMasterLayout as MasterLayout, LazyWidgetHead as WidgetHead } from '../../chunk-
|
|
1
|
+
export { LazyCopyright as Copyright, LazyCustomerLayout as CustomerLayout, LazyFooter as Footer, LazyHeader as Header, LazyMasterLayout as MasterLayout, LazyWidgetHead as WidgetHead } from '../../chunk-UVQ3QASG.js';
|
|
2
2
|
export { PageAdvertisements } from '../../chunk-EFT442TN.js';
|
|
3
3
|
export { MadeWithSalla } from '../../chunk-OQIIJRAS.js';
|
|
4
4
|
export { pushEqualHeightConfig } from '../../chunk-V2ZDTY6H.js';
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export { LazyAddToCartForm as AddToCartForm, ProductCard, LazyProductDetails as ProductDetails, ProductGallery } from '../../chunk-
|
|
1
|
+
export { LazyAddToCartForm as AddToCartForm, ProductCard, LazyProductDetails as ProductDetails, ProductGallery } from '../../chunk-4GWHDLUF.js';
|
|
2
2
|
import '../../chunk-Y32RHCOH.js';
|
|
3
|
-
import '../../chunk-
|
|
4
|
-
import '../../chunk-
|
|
5
|
-
import '../../chunk-
|
|
3
|
+
import '../../chunk-5YXJC35L.js';
|
|
4
|
+
import '../../chunk-ULPH6647.js';
|
|
5
|
+
import '../../chunk-FIDNPYLL.js';
|
|
6
6
|
import '../../chunk-D6XHL6VQ.js';
|
|
7
7
|
import '../../chunk-JYV25VNZ.js';
|
|
8
8
|
import '../../chunk-XMFVSBEO.js';
|
|
@@ -36,7 +36,7 @@ import '../../chunk-5XDPAKF5.js';
|
|
|
36
36
|
import '../../chunk-GCPEMNSU.js';
|
|
37
37
|
import '../../chunk-PFAPRJVF.js';
|
|
38
38
|
import '../../chunk-TYNZ5B2B.js';
|
|
39
|
-
import '../../chunk-
|
|
39
|
+
import '../../chunk-5QYNHHPE.js';
|
|
40
40
|
import '../../chunk-AXW67SY7.js';
|
|
41
41
|
import '../../chunk-BYMOPN2S.js';
|
|
42
42
|
import '../../chunk-SKLEJJ6M.js';
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
export { MaintenancePage } from '../../chunk-J5DGBS7Q.js';
|
|
2
|
-
export { StoreClosedNotification } from '../../chunk-
|
|
3
|
-
export { LazyMaintenancePage, LazyStoreClosedNotification } from '../../chunk-
|
|
4
|
-
import '../../chunk-
|
|
5
|
-
import '../../chunk-
|
|
2
|
+
export { StoreClosedNotification } from '../../chunk-TI6S5KW3.js';
|
|
3
|
+
export { LazyMaintenancePage, LazyStoreClosedNotification } from '../../chunk-5YXJC35L.js';
|
|
4
|
+
import '../../chunk-ULPH6647.js';
|
|
5
|
+
import '../../chunk-FIDNPYLL.js';
|
|
6
6
|
import '../../chunk-D6XHL6VQ.js';
|
|
7
7
|
import '../../chunk-JYV25VNZ.js';
|
|
8
8
|
import '../../chunk-XMFVSBEO.js';
|
|
@@ -36,7 +36,7 @@ import '../../chunk-5XDPAKF5.js';
|
|
|
36
36
|
import '../../chunk-GCPEMNSU.js';
|
|
37
37
|
import '../../chunk-PFAPRJVF.js';
|
|
38
38
|
import '../../chunk-TYNZ5B2B.js';
|
|
39
|
-
import '../../chunk-
|
|
39
|
+
import '../../chunk-5QYNHHPE.js';
|
|
40
40
|
import '../../chunk-AXW67SY7.js';
|
|
41
41
|
import '../../chunk-BYMOPN2S.js';
|
|
42
42
|
import '../../chunk-SKLEJJ6M.js';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { RouteDocumentSync, TanStackDocumentSync, tanstackDocumentAdapter, useTanstackDocumentAttrs } from './chunk-
|
|
1
|
+
export { RouteDocumentSync, TanStackDocumentSync, tanstackDocumentAdapter, useTanstackDocumentAttrs } from './chunk-NHEMVF3B.js';
|
|
2
2
|
import './chunk-Z4Y55HWX.js';
|
|
3
3
|
import './chunk-EHTLXK5F.js';
|
|
4
4
|
import './chunk-EFCIK5NI.js';
|
|
@@ -25,5 +25,5 @@ import './chunk-7VNVCHID.js';
|
|
|
25
25
|
import './chunk-T72DAX7R.js';
|
|
26
26
|
import './chunk-DF6FBKDN.js';
|
|
27
27
|
import './chunk-DGUM43GV.js';
|
|
28
|
-
//# sourceMappingURL=document-class-
|
|
29
|
-
//# sourceMappingURL=document-class-
|
|
28
|
+
//# sourceMappingURL=document-class-OSMTFGJJ.js.map
|
|
29
|
+
//# sourceMappingURL=document-class-OSMTFGJJ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"document-class-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"document-class-OSMTFGJJ.js"}
|