{"version":3,"file":"coopse.script.1678.bb671aca.chunk.js","mappings":"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","sources":["webpack:///./src/microApps/common/components/ListBlock/ListBlock.module.less","webpack:///./src/microApps/common/components/Heading/Heading.module.less","webpack:///./src/microApps/common/components/Heading/Heading.tsx","webpack:///./src/microApps/common/components/ListBlock/ListBlock.utils.ts","webpack:///./src/microApps/common/components/ListBlock/ListBlock.hooks.ts","webpack:///./src/microApps/common/hooks/useInViewWithPrerender.ts","webpack:///./src/microApps/ecommerce/components/ItemGrid/ItemGridWithLoading.tsx","webpack:///./src/microApps/common/components/ListBlock/ListBlock.tsx","webpack:///./src/microApps/common/hooks/useGaListPositionCalculation.ts","webpack:///./src/microApps/common/components/SwipableList/SwipableList.tsx","webpack:///./src/microApps/common/hooks/useA11yAnnouncerDispatch.ts","webpack:///./src/microApps/common/components/atoms/RawPicture/RawPicture.tsx","webpack:///./src/microApps/common/components/atoms/RawPicture/RawPicture.module.less","webpack:///./src/microApps/common/components/organisms/ImageTextPropertyBlock/ImageTextPropertyBlock.module.scss","webpack:///./src/microApps/common/components/organisms/ImageTextPropertyBlock/ImageTextPropertyBlock.tsx","webpack:///./src/microApps/common/tracking/hooks/usePromotionTracking.ts"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"WithBackgroundMixin\":\"b65Amywg\",\"Container\":\"WDsaDiRu\",\"Background--light1Green2\":\"W3bm0CoR\",\"Background--light1Green3\":\"Yx1KyJ9k\",\"Background--light1Green4\":\"j6LYvUjx\",\"SwiperContainer\":\"OCD_W3n9\",\"Banner\":\"GbEqA3cO\",\"GridBanner\":\"CV3g0Mw5\",\"ListContainer\":\"cLfu9QdN\",\"WithBanner\":\"zJ7EaBlZ\",\"Swiper\":\"Cly_TVWq\",\"SwiperPagination\":\"_SDu9HmR\",\"HeaderContainer\":\"Fz59m8zD\",\"Header\":\"y6lOtOf1\",\"Link\":\"c4WCyKHO\",\"BannerCell1of1\":\"M6gHKoNb\",\"BannerCell2of2\":\"ncyp1nr0\",\"BannerCell2of3\":\"sEGu_rWG\",\"BannerCell2of4\":\"YlXeup8u\",\"BannerCell2of5\":\"RLaVsKyL\",\"BannerCell2of6\":\"TloHg7FQ\",\"BannerCell3of7\":\"ZV6tHixn\",\"BannerCell3of8\":\"mHBC5kOY\"};","// extracted by mini-css-extract-plugin\nexport default {\"Heading\":\"E17FI2IV\",\"Heading--coopGreen\":\"JZ_2qqd6\",\"Heading--darkGreen\":\"htkN9xWM\",\"Heading--white\":\"y1M7QAC6\",\"Heading--black\":\"K8xICLcl\",\"Heading--colorGreen2\":\"wUVrHEa9\",\"FontFamilySecondary\":\"CO0BQ7N3\"};","import classNames from 'classnames';\nimport * as React from 'react';\nimport { useEffect } from 'react';\n\nimport styles from './Heading.module.less';\n\ninterface HeadingProps extends React.HTMLAttributes<HTMLHeadingElement> {\n    element: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'p';\n    stylingElement?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n    fontFamilySecondary?: boolean;\n    color?: 'coopGreen' | 'darkGreen' | 'white' | 'black' | 'colorGreen2';\n    alignment?: 'start' | 'center' | 'end';\n}\n\nconst Heading = React.forwardRef<HTMLHeadingElement, React.PropsWithChildren<HeadingProps>>(\n    (props, ref) => {\n        if (!props.children) return null;\n\n        // eslint-disable-next-line unused-imports/no-unused-vars\n        const { fontFamilySecondary, stylingElement, element, className, alignment, ...rest } =\n            props;\n\n        const alignStyles: React.CSSProperties = {\n            width: '100%',\n        };\n        switch (alignment) {\n            case 'start': {\n                alignStyles.textAlign = 'left';\n                break;\n            }\n            case 'end': {\n                alignStyles.textAlign = 'right';\n                break;\n            }\n            case 'center':\n            default: {\n                alignStyles.textAlign = 'center';\n                break;\n            }\n        }\n        return (\n            <props.element\n                ref={ref}\n                className={classNames(\n                    styles.Heading,\n                    stylingElement && `Heading--${stylingElement}`,\n                    props.color ? styles[`Heading--${props.color}`] : styles['Heading--black'],\n                    fontFamilySecondary && styles.FontFamilySecondary,\n                    className,\n                )}\n                style={{\n                    ...rest.style,\n                    ...alignStyles,\n                }}\n                // eslint-disable-next-line react/jsx-props-no-spreading\n                {...rest}\n            >\n                {props.children}\n            </props.element>\n        );\n    },\n);\n\ninterface PageHeadingProps extends Omit<HeadingProps, 'element'> {\n    visuallyHidden?: boolean;\n}\n\nexport const PageHeading = React.forwardRef<\n    HTMLHeadingElement,\n    React.PropsWithChildren<PageHeadingProps>\n>((props, ref) => {\n    // The effect simulates what browsers do on a normal non-SPA apps - they reloading a page and set focus to the top of the page (body).\n    useEffect(() => {\n        document.body.focus();\n    }, []);\n\n    return (\n        <Heading\n            ref={ref}\n            element=\"h1\"\n            tabIndex={-1}\n            stylingElement={props.stylingElement}\n            fontFamilySecondary={props.fontFamilySecondary}\n            className={classNames(props.className, props.visuallyHidden && 'u-hiddenVisually')}\n            color={props.color}\n        >\n            {props.children}\n        </Heading>\n    );\n});\n\nexport default Heading;\n","export const getBannerSize = (cellsInRow: number) => {\n    let x = 1;\n\n    switch (cellsInRow) {\n        case 1:\n            x = 1;\n            break;\n        case 2:\n            x = 2;\n            break;\n        case 3:\n            x = 2;\n            break;\n        case 4:\n            x = 2;\n            break;\n        case 5:\n            x = 2;\n            break;\n        case 6:\n            x = 2;\n            break;\n        case 7:\n            x = 3;\n            break;\n        case 8:\n            x = 3;\n            break;\n        default:\n            break;\n    }\n\n    return x;\n};\n","import { useInViewWithPrerender } from '../../hooks/useInViewWithPrerender';\nimport { useBrowserMinMediaQuery } from '../atoms/ResponsiveBreakpoints';\nimport styles from './ListBlock.module.less';\nimport { getBannerSize } from './ListBlock.utils';\n\nexport const useListBlockLazyLoading = (lazyLoad: boolean = true) => {\n    const inView = useInViewWithPrerender({\n        triggerOnce: true,\n        threshold: 0,\n        rootMargin: '50px',\n        initialInView: !lazyLoad,\n    });\n\n    return inView;\n};\n\nexport const useGridBannerSize = (cellsInRow: number) => {\n    const isMoreThan900px = useBrowserMinMediaQuery(900);\n    const bannerCellSize = getBannerSize(cellsInRow);\n\n    if (cellsInRow === 3 && !isMoreThan900px) {\n        return styles[`BannerCell${3}of${cellsInRow}`];\n    }\n\n    return styles[`BannerCell${bannerCellSize}of${cellsInRow}`];\n};\n","import { useInView } from 'react-intersection-observer';\n\nexport const useInViewWithPrerender = (options: Parameters<typeof useInView>[0]) => {\n    const inView = useInView({\n        ...options,\n        initialInView: (options && options.initialInView) || window.isPrerenderCrawler,\n    });\n\n    return inView;\n};\n","import classnames from 'classnames';\nimport * as React from 'react';\n\nimport ItemGrid from './ItemGrid';\n\ntype ItemGridWithLoadingProps<T> = {\n    horizontalHidden: boolean;\n    isLoading: boolean;\n    skeletonCount?: number;\n    renderSkeleton?: () => React.ReactNode;\n} & React.ComponentPropsWithoutRef<typeof ItemGrid<T>>;\n\nconst ItemGridWithLoading = <T,>(\n    props: ItemGridWithLoadingProps<T>,\n    ref?: React.Ref<HTMLUListElement>,\n) => {\n    if (!props.isLoading && props.items?.length === 0) return null;\n\n    return props.isLoading ? (\n        <ItemGrid\n            ref={ref}\n            cellsInRow={props.cellsInRow}\n            gridClasses={classnames(\n                props.horizontalHidden && 'Grid--horizontalHidden',\n                props.gridClasses,\n            )}\n            itemUniqueKey={(item, index) => `${item.identifier}_${index}`}\n            items={[...Array(props.skeletonCount || props.cellsInRow)].map((x, index) => ({\n                identifier: index.toString(),\n            }))}\n            renderItem={() => (props.renderSkeleton ? props.renderSkeleton() : null)}\n            renderAtRowStart={props.renderAtRowStart}\n            renderAtRowEnd={props.renderAtRowEnd}\n            itemClasses={props.itemClasses}\n            noDefaultClasses={props.noDefaultClasses}\n            styles={props.styles}\n        />\n    ) : (\n        <ItemGrid\n            ref={ref}\n            cellsInRow={props.cellsInRow}\n            gridClasses={classnames(\n                props.horizontalHidden && 'Grid--horizontalHidden',\n                props.gridClasses,\n            )}\n            items={props.items}\n            itemUniqueKey={props.itemUniqueKey}\n            renderItem={props.renderItem}\n            renderAtRowStart={props.renderAtRowStart}\n            renderAtRowEnd={props.renderAtRowEnd}\n            itemClasses={props.itemClasses}\n            noDefaultClasses={props.noDefaultClasses}\n            styles={props.styles}\n        />\n    );\n};\n\nexport default React.forwardRef(ItemGridWithLoading);\n","/* eslint-disable react/jsx-props-no-spreading */\nimport classnames from 'classnames';\nimport * as React from 'react';\nimport { useImperativeHandle, useRef } from 'react';\nimport type { SwiperOptions } from 'swiper/types';\n\nimport { SkipLinkScoped } from '../../../base/components/SkipLink';\nimport ItemGridWithLoading from '../../../ecommerce/components/ItemGrid/ItemGridWithLoading';\nimport useGaListPositionCalculation from '../../hooks/useGaListPositionCalculation';\nimport type { ImageTextPropertyBlockProps } from '../organisms/ImageTextPropertyBlock/ImageTextPropertyBlock';\nimport ImageTextPropertyBlock from '../organisms/ImageTextPropertyBlock/ImageTextPropertyBlock';\nimport { SwipableList } from '../SwipableList';\nimport { useGridBannerSize } from './ListBlock.hooks';\nimport styles from './ListBlock.module.less';\n\nexport interface ListBlockProps<T> extends Omit<ListBlockOptions, 'lazyLoad'> {\n    headerSlot?: React.ReactNode;\n    items?: T[];\n    renderItem: (item: T, index: number, listPosition: number | undefined) => React.ReactElement;\n    itemUniqueKey: (item: T, index: number) => string;\n    isLoading: boolean;\n    cellsInRow: number;\n    swiperOptions?: SwiperOptions;\n    swiperMainClassName?: string;\n    gridClasses?: string;\n    skeletonCount?: number;\n    renderSkeleton: () => React.ReactNode;\n}\n\nexport interface ListBlockOptions {\n    analyticsListName: string;\n    useSwiper: boolean;\n    lazyLoad: boolean;\n    horizontalHidden: boolean;\n    backgroundColor?:\n        | ''\n        | 'Background--light1Green2'\n        | 'Background--light1Green3'\n        | 'Background--light1Green4';\n    banner?: ImageTextPropertyBlockProps;\n}\n\nexport interface TeaserOptions {\n    disableLink: boolean;\n    disableAsyncLink: boolean;\n}\n\nconst ListBlock = React.forwardRef(\n    <T, C extends React.ElementType = 'div'>(\n        props: React.PolymorphicComponentPropsWithRef<C, ListBlockProps<T>>,\n        ref: React.PolymorphicRef<C>,\n    ) => {\n        const listBlockRef = useRef<React.PolymorphicRef<C>>(null);\n\n        const { isLoading, items, itemUniqueKey, renderSkeleton, cellsInRow, skeletonCount } =\n            props;\n\n        const { listPosition } = useGaListPositionCalculation(listBlockRef);\n\n        useImperativeHandle(ref, () => listBlockRef.current);\n\n        const renderItem = (product: T, index: number) =>\n            props.renderItem(product, index, listPosition);\n\n        const swiperOptions: SwiperOptions = {\n            spaceBetween: 2,\n            ...props.swiperOptions,\n        };\n\n        const bannerCellSize = useGridBannerSize(cellsInRow);\n\n        const Component = props.as || 'div';\n\n        return (\n            <Component\n                aria-labelledby={props['aria-labelledby']}\n                role=\"group\"\n                ref={listBlockRef}\n                className={classnames(\n                    styles.Container,\n                    props.backgroundColor && styles[props.backgroundColor],\n                )}\n                data-list={props.analyticsListName}\n            >\n                <SkipLinkScoped\n                    skipLinkText=\"Hoppa över listan\"\n                    skipTargetText=\"Listan har hoppats över\"\n                >\n                    {(isLoading || !!items?.length) && props.headerSlot}\n                    {props.useSwiper ? (\n                        <div\n                            className={classnames(\n                                styles.ListContainer,\n                                props.banner && styles.WithBanner,\n                            )}\n                        >\n                            {props.banner && (\n                                <div className={styles.Banner}>\n                                    <ImageTextPropertyBlock {...props.banner} />\n                                </div>\n                            )}\n                            <div className={styles.SwiperContainer}>\n                                <SwipableList\n                                    swiperMainClassName={classnames(\n                                        props.swiperMainClassName,\n                                        styles.Swiper,\n                                    )}\n                                    swiperPaginationClass={props.banner && styles.SwiperPagination}\n                                    swiperOptions={swiperOptions}\n                                >\n                                    {!items || !items.length\n                                        ? Array.from({ length: 8 }).map((_item, index) => (\n                                              // eslint-disable-next-line react/no-array-index-key\n                                              <React.Fragment key={index}>\n                                                  {renderSkeleton()}\n                                              </React.Fragment>\n                                          ))\n                                        : items.map((item, index) => (\n                                              <React.Fragment\n                                                  key={props.itemUniqueKey(item, index)}\n                                              >\n                                                  {renderItem(item, index)}\n                                              </React.Fragment>\n                                          ))}\n                                </SwipableList>\n                            </div>\n                        </div>\n                    ) : (\n                        <ItemGridWithLoading\n                            renderAtRowStart={(row) => {\n                                if (row === 0) {\n                                    return (\n                                        props.banner && (\n                                            <div className={`Grid-cell ${bannerCellSize}`}>\n                                                <div\n                                                    className={classnames(\n                                                        styles.Banner,\n                                                        styles.GridBanner,\n                                                    )}\n                                                >\n                                                    <ImageTextPropertyBlock {...props.banner} />\n                                                </div>\n                                            </div>\n                                        )\n                                    );\n                                }\n                                return undefined;\n                            }}\n                            isLoading={isLoading}\n                            items={items}\n                            itemUniqueKey={itemUniqueKey}\n                            renderItem={renderItem}\n                            renderSkeleton={renderSkeleton}\n                            horizontalHidden={props.horizontalHidden}\n                            cellsInRow={cellsInRow}\n                            gridClasses={classnames(props.gridClasses)}\n                            skeletonCount={skeletonCount}\n                        />\n                    )}\n                </SkipLinkScoped>\n            </Component>\n        );\n    },\n);\n\nexport default ListBlock;\n","import type React from 'react';\nimport { useLayoutEffect, useState } from 'react';\n\nconst useGaListPositionCalculation = <T extends Element>(ref: React.RefObject<T>) => {\n    const [listPosition, setListPosition] = useState<number>();\n\n    useLayoutEffect(() => {\n        const lists = document.querySelectorAll('[data-list]');\n        const position = Array.from(lists).findIndex((el) => el === ref.current);\n        setListPosition(position > -1 ? position : undefined);\n    }, [ref]);\n\n    return {\n        listPosition,\n    };\n};\n\nexport default useGaListPositionCalculation;\n","/* eslint-disable no-param-reassign */\n/* eslint-disable react/jsx-props-no-spreading */\nimport 'swiper/less';\nimport 'swiper/less/navigation';\nimport 'swiper/less/pagination';\nimport 'swiper/less/scrollbar';\nimport './Swiper.less';\n\nimport { Icon } from '@coop/components';\nimport { ChevronLeftIcon, ChevronRightIcon } from '@coop/icons';\nimport classNames from 'classnames';\nimport type { FC } from 'react';\nimport * as React from 'react';\nimport { useMemo, useRef, useState } from 'react';\nimport { Navigation, Pagination, Scrollbar } from 'swiper/modules';\nimport { Swiper, SwiperSlide } from 'swiper/react';\nimport type { NavigationOptions, ScrollbarOptions, SwiperOptions } from 'swiper/types';\n\nimport { useA11yAnnouncerDispatch } from '../../hooks/useA11yAnnouncerDispatch';\nimport { useIsMobile } from '../atoms/ResponsiveBreakpoints';\n\nexport interface SwipableListProps {\n    swiperMainClassName?: string;\n    swiperButtonClassName?: string;\n    swiperPaginationClass?: string;\n    swiperOptions?: SwiperOptions;\n    onSwiper?: React.ComponentProps<typeof Swiper>['onSwiper'];\n}\n\ninterface NavButtonProps {\n    hasScrollbar: boolean;\n    class?: string;\n}\n\nconst PrevButton = React.forwardRef<HTMLButtonElement, NavButtonProps>((props, ref) => (\n    <button\n        ref={ref}\n        type=\"button\"\n        className={classNames(\n            'swiper-button swiper-button--prev',\n            props.hasScrollbar && 'swiper-button--scrollbar',\n            props.class,\n        )}\n        aria-label=\"Se tidigare i listan\"\n    >\n        <Icon icon={ChevronLeftIcon} className=\"swiper-arrow\" aria-hidden />\n    </button>\n));\n\nconst NextButton = React.forwardRef<HTMLButtonElement, NavButtonProps>((props, ref) => (\n    <button\n        ref={ref}\n        type=\"button\"\n        className={classNames(\n            'swiper-button swiper-button--next',\n            props.hasScrollbar && 'swiper-button--scrollbar',\n            props.class,\n        )}\n        aria-label=\"Se fler i listan\"\n    >\n        <Icon icon={ChevronRightIcon} className=\"swiper-arrow\" aria-hidden />\n    </button>\n));\n\nconst isScrollbarOptions = (\n    scrollbar: boolean | ScrollbarOptions,\n): scrollbar is ScrollbarOptions => {\n    return (scrollbar as ScrollbarOptions).el !== undefined;\n};\n\nconst modifySwiperOptions = (customSwiperOptions?: SwiperOptions): SwiperOptions => {\n    let scrollbar: boolean | ScrollbarOptions = false;\n\n    if (customSwiperOptions && customSwiperOptions.scrollbar) {\n        if (!isScrollbarOptions(customSwiperOptions.scrollbar)) {\n            scrollbar = {\n                el: '.swiper-scrollbar-container',\n                draggable: true,\n            };\n        } else {\n            scrollbar = {\n                el: '.swiper-scrollbar-container',\n                draggable: true,\n                ...customSwiperOptions.scrollbar,\n            };\n        }\n    }\n\n    return {\n        watchSlidesProgress: true,\n        ...customSwiperOptions,\n        containerModifierClass: classNames('swiper-container--'),\n        scrollbar,\n    };\n};\n\nconst SwipableList: FC<React.PropsWithChildren<SwipableListProps>> = (props) => {\n    const [nextEl, setNextEl] = useState<HTMLButtonElement | null>(null);\n    const [prevEl, setPrevEl] = useState<HTMLButtonElement | null>(null);\n    const [paginationEl, setPaginationEl] = useState<HTMLDivElement | null>(null);\n\n    const focusTimer = useRef<NodeJS.Timeout | null>(null);\n    const containerRef = useRef<HTMLDivElement | null>(null);\n    const announce = useA11yAnnouncerDispatch();\n\n    // iphone crashes if we have too many items in the swiper\n    const MAX_NUMBER_OF_SWIPABLE_ITEMS = 60;\n\n    // this is important becase the ref wont change but the value in the ref will. So we need to use the element to trigger useMemo, not the ref\n    const swiperOptions: SwiperOptions = useMemo(() => {\n        return {\n            threshold: 5,\n            navigation: {\n                ...(props.swiperOptions?.navigation as NavigationOptions),\n                disabledClass: 'is-hidden',\n                nextEl,\n                prevEl,\n            },\n            pagination: {\n                clickable: true,\n                el: paginationEl,\n                lockClass: 'is-hidden',\n                dynamicBullets: true,\n                dynamicMainBullets: 5,\n            },\n            ...modifySwiperOptions(props.swiperOptions),\n        };\n    }, [nextEl, prevEl, paginationEl, props.swiperOptions]);\n    const isMobile = useIsMobile();\n    return (\n        <>\n            <div\n                ref={containerRef}\n                className={classNames(\n                    'swiper',\n                    props.swiperMainClassName,\n                    isMobile && 'swiper-disabledNavigation',\n                    !isMobile && swiperOptions?.watchSlidesProgress && 'swiper-watch',\n                )}\n            >\n                <PrevButton\n                    class={props.swiperButtonClassName}\n                    ref={setPrevEl}\n                    hasScrollbar={!!swiperOptions.scrollbar}\n                />\n\n                <Swiper\n                    // eslint-disable-next-line react/jsx-props-no-spreading\n                    {...swiperOptions}\n                    modules={[Navigation, Pagination, Scrollbar]}\n                    onSwiper={props.onSwiper}\n                    wrapperTag=\"ul\"\n                    onSlideChange={(swiper) => {\n                        if (focusTimer.current) {\n                            clearTimeout(focusTimer.current);\n                        }\n                        const setFocus = () => {\n                            const focusElement = containerRef.current?.querySelector<HTMLElement>(\n                                '.swiper-slide-active a, .swiper-slide-active button',\n                            );\n                            if (focusElement) {\n                                focusElement.focus();\n                            }\n                        };\n\n                        announce(`Visar sida ${swiper.snapIndex + 1}`);\n                        /** timeout much match transitiontime which is 400ms */\n                        focusTimer.current = setTimeout(setFocus, 500);\n                    }}\n                >\n                    {React.Children.map(\n                        props.children,\n                        (child, index) =>\n                            child &&\n                            index < MAX_NUMBER_OF_SWIPABLE_ITEMS && (\n                                <SwiperSlide tag=\"li\">{child}</SwiperSlide>\n                            ),\n                    )}\n                    {swiperOptions.scrollbar && <div className=\"swiper-scrollbar-container\" />}\n                </Swiper>\n\n                <NextButton\n                    class={props.swiperButtonClassName}\n                    ref={setNextEl}\n                    hasScrollbar={!!swiperOptions.scrollbar}\n                />\n            </div>\n            {swiperOptions.pagination && (\n                <div\n                    ref={setPaginationEl}\n                    className={classNames('swiper-pagination', props.swiperPaginationClass)}\n                />\n            )}\n        </>\n    );\n};\n\nexport default SwipableList;\n","import { useCallback, useEffect } from 'react';\n\nimport { currentPageActions } from '../store/slices/currentPage/currentPageSlice';\nimport { useAppDispatch } from './useThunkDispatch';\n\nexport const useA11yAnnouncerDispatch = () => {\n    const dispatch = useAppDispatch();\n\n    const a11yAnnounceDispatch = useCallback(\n        (value: string) => {\n            dispatch(currentPageActions.setA11yAnnounceText(value));\n        },\n        [dispatch],\n    );\n\n    return a11yAnnounceDispatch;\n};\n\nexport const useA11yAnnouncerDispatchEffect = (value: string | undefined) => {\n    const dispatchA11yAnnouncer = useA11yAnnouncerDispatch();\n\n    useEffect(() => {\n        if (!value) {\n            return;\n        }\n\n        dispatchA11yAnnouncer(value);\n    }, [dispatchA11yAnnouncer, value]);\n};\n","import classNames from 'classnames';\n\nimport styles from './RawPicture.module.less';\n\ntype SourceMedia = {\n    minWidth: number;\n    height?: number;\n    srcSet: string;\n};\n\ninterface RawPictureProps {\n    altText?: string;\n    src?: string;\n    height?: number;\n    srcSet?: SourceMedia[];\n    imgClassName?: string;\n    className?: string;\n    lazy?: boolean;\n}\n\n/**\n * Use this component for solving Art Direction problem in the images.\n * As opposed to RawImage component, browser will not download the image it thinks is the best - you tell it which image to download based on the viewport size size.\n */\nconst RawPicture = (props: RawPictureProps) => {\n    const srcSet = props.srcSet?.sort((a, b) => b.minWidth - a.minWidth);\n\n    return (\n        <picture className={classNames(styles.Container, props.className)}>\n            {srcSet?.map((item, index) => {\n                return (\n                    <source\n                        // eslint-disable-next-line react/no-array-index-key\n                        key={index}\n                        media={`(min-width: ${item.minWidth}px)`}\n                        srcSet={item.srcSet}\n                        height={item.height}\n                    />\n                );\n            })}\n            <img\n                loading={props.lazy ? 'lazy' : undefined}\n                className={classNames(styles.Image, props.imgClassName)}\n                src={props.src}\n                alt={props.altText || ''}\n                height={props.height}\n            />\n        </picture>\n    );\n};\n\nexport default RawPicture;\n","// extracted by mini-css-extract-plugin\nexport default {\"Container\":\"J5qjoGvQ\",\"Image\":\"qk0vMZV4\"};","// extracted by mini-css-extract-plugin\nexport default {\"Container\":\"Ypd0HvZh\",\"LinkWrapper\":\"UB_NKnuP\",\"ButtonWrapper\":\"clSqay92\",\"Content\":\"krz_Qx3J\",\"Content--horizontalCenter\":\"qCMRntMQ\",\"Content--verticalCenter\":\"QpI1gwuM\",\"Content--noVerticalCenter\":\"aW1pr0rh\",\"Content--contentLessPadding\":\"hIdzuq5u\",\"Content--contentLessHorizontalPadding\":\"MQ5LaEBg\",\"Image\":\"ZT2h_6Ah\",\"ImageContainer\":\"rZSamSNn\",\"ImageContainer--absolute\":\"FThob5tX\",\"ImageContainer--relative\":\"rX4dLvHh\",\"Image--noExplicitHeight\":\"Sj8KwF9F\",\"Heading\":\"dZ6aR3XU\"};","/* eslint-disable react/jsx-props-no-spreading */\nimport type { Button } from '@coop/components';\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { useCallback } from 'react';\n\nimport usePromotionTracking from '../../../tracking/hooks/usePromotionTracking';\nimport type { IGaPromoData } from '../../../tracking/models/IGaPromoData';\nimport RawHtml from '../../atoms/RawHtml';\nimport RawPicture from '../../atoms/RawPicture';\nimport type Heading from '../../Heading';\nimport styles from './ImageTextPropertyBlock.module.scss';\n\nexport interface ImageTextPropertyBlockProps extends IGaPromoData {\n    imageUrl?: string;\n    imageHeight?: number;\n    srcSet?: { srcSet: string; height?: number; minWidth: number }[];\n    imageAltText?: string;\n\n    centerBlockVertically: boolean;\n    centerBlockHorizontally: boolean;\n    contentLessPadding: boolean;\n    contentLessHorizontalPadding: boolean;\n    backgroundColor?:\n        | 'u-bgWhite'\n        | 'u-bgGreenDark'\n        | 'u-bgGreen'\n        | 'u-bgGreenLight2'\n        | 'u-bgGrayLight';\n    linkUrl?: string;\n    target: '_self' | '_blank';\n    isClickable: boolean;\n    body?: string;\n    textColor?: string;\n    lazy?: boolean;\n    ariaLabel: string;\n    buttonProps?: React.ComponentPropsWithoutRef<typeof Button>;\n    renderButton?: (props: React.ComponentPropsWithoutRef<typeof Button>) => React.ReactNode;\n    secondaryButtonProps?: React.ComponentPropsWithoutRef<typeof Button>;\n    renderSecondaryButton?: (\n        props: React.ComponentPropsWithoutRef<typeof Button>,\n    ) => React.ReactNode;\n    headingProps?: React.ComponentPropsWithoutRef<typeof Heading>;\n    renderHeading?: (props: React.ComponentPropsWithoutRef<typeof Heading>) => React.ReactNode;\n}\n\nconst ImageTextPropertyBlock = (props: ImageTextPropertyBlockProps) => {\n    const { ref: trackingRef, click: trackClick } = usePromotionTracking({\n        gaPromoCreative: props.gaPromoCreative,\n        gaPromoId: props.gaPromoId,\n        gaPromoName: props.gaPromoName,\n        gaPromoPosition: props.gaPromoPosition,\n    });\n\n    const ref = useCallback(\n        (node: HTMLElement | null) => {\n            trackingRef(node);\n        },\n        [trackingRef],\n    );\n\n    const anchorRel = props.target?.includes('blank') ? 'noopener noreferrer' : undefined;\n\n    // If whole banner is clickable, render is as anchor and dont render the button inside to not have nested interactive elements\n    if (props.isClickable) {\n        return (\n            <a\n                ref={ref}\n                className={classNames(styles.Container, styles.LinkWrapper, props.backgroundColor)}\n                href={props.linkUrl}\n                target={props.target}\n                rel={anchorRel}\n                onClick={trackClick}\n                aria-label={props.ariaLabel}\n            >\n                <Content {...props} />\n            </a>\n        );\n    }\n    return (\n        <div ref={ref} className={classNames(styles.Container, props.backgroundColor)}>\n            <Content\n                {...props}\n                belowTextSlot={\n                    !!props.buttonProps &&\n                    !!props.renderButton && (\n                        <BottomSlot\n                            onClick={trackClick}\n                            centerBlockHorizontally={props.centerBlockHorizontally}\n                            centerBlockVertically={props.centerBlockVertically}\n                            buttonProps={props.buttonProps}\n                            renderButton={props.renderButton}\n                            secondaryButtonProps={props.secondaryButtonProps}\n                            renderSecondaryButton={props.renderSecondaryButton}\n                        />\n                    )\n                }\n            />\n        </div>\n    );\n};\n\nconst Content = (props: ImageTextPropertyBlockProps & { belowTextSlot?: React.ReactNode }) => {\n    const bannerPositionClassNames = classNames(\n        styles.Content,\n        props.centerBlockHorizontally && styles['Content--horizontalCenter'],\n        props.centerBlockVertically\n            ? styles['Content--verticalCenter']\n            : styles['Content--noVerticalCenter'],\n        props.contentLessPadding && styles['Content--contentLessPadding'],\n        props.contentLessHorizontalPadding && styles['Content--contentLessHorizontalPadding'],\n    );\n\n    const hasContent =\n        !!props.body ||\n        React.isValidElement(props.belowTextSlot) ||\n        (!!props.headingProps &&\n            !!props.renderHeading &&\n            React.isValidElement(props.renderHeading(props.headingProps)));\n\n    return (\n        <>\n            {(props.imageUrl || !!props.srcSet?.length) && (\n                <RawPicture\n                    altText={props.imageAltText}\n                    srcSet={props.srcSet}\n                    src={props.imageUrl}\n                    height={props.imageHeight}\n                    imgClassName={classNames(\n                        styles.Image,\n                        !props.imageHeight && styles['Image--noExplicitHeight'],\n                    )}\n                    className={classNames(\n                        styles.ImageContainer,\n                        hasContent && styles['ImageContainer--absolute'], // if there is any content, it should dictate the height of the block, so make image absolute to be positioned behind the content\n                        !hasContent && styles['ImageContainer--relative'], // no content - image is dictating the height of the block\n                    )}\n                    lazy={props.lazy}\n                />\n            )}\n            {hasContent && (\n                <div className={bannerPositionClassNames}>\n                    <div className=\"u-sizeFull\">\n                        {!!props.headingProps &&\n                            !!props.renderHeading &&\n                            props.renderHeading({\n                                ...props.headingProps,\n                                fontFamilySecondary: true,\n                                alignment: props.centerBlockHorizontally\n                                    ? 'center'\n                                    : props.headingProps.alignment,\n                                className: classNames(\n                                    props.headingProps.className,\n                                    styles.Heading,\n                                    'u-marginBsm',\n                                ),\n                            })}\n                        {props.body && (\n                            <div className={classNames('Editorial', props.textColor)}>\n                                <RawHtml html={props.body} />\n                            </div>\n                        )}\n                    </div>\n\n                    {props.belowTextSlot}\n                </div>\n            )}\n        </>\n    );\n};\n\nconst BottomSlot = (props: {\n    centerBlockHorizontally: boolean;\n    centerBlockVertically: boolean;\n    onClick: (e: React.MouseEvent<HTMLButtonElement>) => void;\n    buttonProps: React.ComponentPropsWithoutRef<typeof Button>;\n    renderButton: (props: React.ComponentPropsWithoutRef<typeof Button>) => React.ReactNode;\n    secondaryButtonProps?: React.ComponentPropsWithoutRef<typeof Button>;\n    renderSecondaryButton?: (\n        props: React.ComponentPropsWithoutRef<typeof Button>,\n    ) => React.ReactNode;\n}) => {\n    const bothButtonsExist = props.buttonProps && props.secondaryButtonProps;\n\n    const wrapperClassNames = classNames(\n        styles.ButtonWrapper,\n        bothButtonsExist && props.centerBlockHorizontally && 'u-flexJustifyCenter',\n    );\n\n    return (\n        <div className={wrapperClassNames}>\n            {props.renderButton({\n                ...props.buttonProps,\n                style:\n                    bothButtonsExist && props.centerBlockHorizontally\n                        ? {\n                              ...props.buttonProps.style,\n                              // when two buttons exist and are centered then they will be aligned not by themselves, but by the parent component\n                              margin: 0,\n                          }\n                        : props.buttonProps.style,\n                onClick: (e) => {\n                    props.onClick?.(e);\n                    props.buttonProps?.onClick?.(e);\n                },\n            })}\n            {/* Secondary is rendered only if primary already exists */}\n            {!!props.buttonProps &&\n                !!props.renderButton &&\n                !!props.secondaryButtonProps &&\n                props.renderSecondaryButton?.({\n                    ...props.secondaryButtonProps,\n                    style:\n                        bothButtonsExist && props.centerBlockHorizontally\n                            ? {\n                                  ...props.secondaryButtonProps.style,\n                                  // when two buttons exist and are centered then they will be aligned not by themselves, but by the parent component\n                                  margin: 0,\n                              }\n                            : props.secondaryButtonProps.style,\n                    onClick: (e) => {\n                        props.onClick?.(e);\n                        props.secondaryButtonProps?.onClick?.(e);\n                    },\n                })}\n        </div>\n    );\n};\n\nexport default ImageTextPropertyBlock;\n","import { useEffect } from 'react';\nimport { useInView } from 'react-intersection-observer';\n\nimport { ga4PromotionTracking } from '../ga4/promotion';\nimport type { IGaPromoData } from '../models/IGaPromoData';\n\nconst usePromotionTracking = ({\n    gaPromoCreative,\n    gaPromoId,\n    gaPromoName,\n    gaPromoPosition,\n}: IGaPromoData) => {\n    const [ref, inView] = useInView({\n        triggerOnce: true,\n        threshold: 0.5,\n    });\n\n    useEffect(() => {\n        if (inView) {\n            ga4PromotionTracking.viewPromotion({\n                gaPromoCreative,\n                gaPromoId,\n                gaPromoName,\n                gaPromoPosition,\n            });\n        }\n    }, [gaPromoCreative, gaPromoId, gaPromoName, gaPromoPosition, inView]);\n\n    const click = () => {\n        ga4PromotionTracking.selectPromotion({\n            gaPromoCreative,\n            gaPromoId,\n            gaPromoName,\n            gaPromoPosition,\n        });\n    };\n\n    return { ref, click };\n};\n\nexport default usePromotionTracking;\n"],"names":["Heading","props","ref","children","fontFamilySecondary","stylingElement","element","className","alignment","rest","alignStyles","width","textAlign","color","FontFamilySecondary","style","useEffect","document","body","focus","tabIndex","visuallyHidden","useListBlockLazyLoading","lazyLoad","options","triggerOnce","threshold","rootMargin","initialInView","window","isPrerenderCrawler","useGridBannerSize","cellsInRow","isMoreThan900px","bannerCellSize","x","getBannerSize","isLoading","items","length","ItemGrid","gridClasses","horizontalHidden","itemUniqueKey","item","index","identifier","Array","skeletonCount","map","toString","renderItem","renderSkeleton","renderAtRowStart","renderAtRowEnd","itemClasses","noDefaultClasses","styles","listBlockRef","useRef","listPosition","setListPosition","useState","useLayoutEffect","lists","querySelectorAll","position","from","findIndex","el","current","undefined","useImperativeHandle","product","swiperOptions","spaceBetween","Component","as","role","Container","backgroundColor","analyticsListName","SkipLink","skipLinkText","skipTargetText","headerSlot","useSwiper","ListContainer","banner","WithBanner","Banner","ImageTextPropertyBlock","SwiperContainer","SwipableList","swiperMainClassName","Swiper","swiperPaginationClass","SwiperPagination","_item","row","GridBanner","PrevButton","type","hasScrollbar","class","Icon","icon","NextButton","nextEl","setNextEl","prevEl","setPrevEl","paginationEl","setPaginationEl","focusTimer","containerRef","announce","dispatch","useCallback","value","c","setA11yAnnounceText","useA11yAnnouncerDispatch","useMemo","navigation","disabledClass","pagination","clickable","lockClass","dynamicBullets","dynamicMainBullets","customSwiperOptions","scrollbar","isScrollbarOptions","draggable","watchSlidesProgress","containerModifierClass","modifySwiperOptions","isMobile","swiperButtonClassName","modules","onSwiper","wrapperTag","onSlideChange","swiper","clearTimeout","snapIndex","setTimeout","focusElement","querySelector","child","tag","srcSet","sort","a","b","minWidth","media","height","loading","lazy","imgClassName","src","alt","altText","Content","bannerPositionClassNames","centerBlockHorizontally","centerBlockVertically","contentLessPadding","contentLessHorizontalPadding","hasContent","belowTextSlot","headingProps","renderHeading","imageUrl","RawPicture","imageAltText","imageHeight","textColor","RawHtml","html","BottomSlot","bothButtonsExist","buttonProps","secondaryButtonProps","wrapperClassNames","renderButton","margin","onClick","e","renderSecondaryButton","trackingRef","click","trackClick","usePromotionTracking","gaPromoCreative","gaPromoId","gaPromoName","gaPromoPosition","node","anchorRel","target","includes","isClickable","href","linkUrl","rel","ariaLabel","inView","viewPromotion","selectPromotion"],"sourceRoot":""}