{"version":3,"file":"src_exported_product-grid-wrapper_ProductGridWrapper_tsx.93921792bedc80261ddb.bundle.js","mappings":"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","sources":["webpack://elc-service-prodcat/./src/internal/views/product-accordion/ProductAccordion.tsx","webpack://elc-service-prodcat/./src/internal/views/column-renderer/ColumnRenderer.tsx","webpack://elc-service-prodcat/./src/internal/constants/ProductBriefCollection.ts","webpack://elc-service-prodcat/./src/internal/views/product-brief-collection/ProductBriefItem.tsx","webpack://elc-service-prodcat/./src/internal/views/product-brief-collection/ProductBriefViewContent.tsx","webpack://elc-service-prodcat/./src/internal/views/product-brief-collection/ProductBriefCollection.tsx","webpack://elc-service-prodcat/./src/internal/views/product-brief-collection/ProductBriefCollectionWrapper.tsx","webpack://elc-service-prodcat/./src/internal/views/product-grid/MobileSortingDropdown.tsx","webpack://elc-service-prodcat/./src/internal/views/product-grid/ProductSortingDropdown.tsx","webpack://elc-service-prodcat/./src/internal/views/product-filters/orderable-filters/OrderableFilters.tsx","webpack://elc-service-prodcat/./src/internal/views/product-grid/GridHeaderBarWrapper.tsx","webpack://elc-service-prodcat/./src/internal/views/item-above-viewport/ItemAboveViewport.tsx","webpack://elc-service-prodcat/./src/internal/views/product-grid/ProductGrid.tsx","webpack://elc-service-prodcat/./src/internal/views/product-grid/CategoryHeader.tsx","webpack://elc-service-prodcat/./src/internal/views/product-grid/ProductGridHeaders.tsx","webpack://elc-service-prodcat/./src/internal/views/product-grid/ProductGridHeader.tsx","webpack://elc-service-prodcat/./src/internal/views/product-grid/ProductGridCarousel.tsx","webpack://elc-service-prodcat/./src/internal/views/scroll-into-view/ScrollIntoView.tsx","webpack://elc-service-prodcat/./src/internal/views/product-grid/ProductGridContent.tsx","webpack://elc-service-prodcat/./src/exported/product-grid-wrapper/ProductGridWrapper.tsx","webpack://elc-service-prodcat/./src/internal/utils/ResponsiveColumnsWidth.ts","webpack://elc-service-prodcat/./src/internal/utils/ResponsiveGridWrapper.ts","webpack://elc-service-prodcat/./src/internal/views/breakpoints-wrapper/BreakpointsWrapper.tsx","webpack://elc-service-prodcat/./src/internal/views/product-carousel/ProductCarousel.tsx","webpack://elc-service-prodcat/./src/internal/views/product-tout/ProductTout.tsx","webpack://elc-service-prodcat/./src/internal/views/product-grid/CollectionItem.tsx"],"sourcesContent":["import * as React from 'react';\nimport { observer } from 'mobx-react';\nimport { configConsumer } from '@estee/elc-service';\nimport { Accordion, LabelSlide } from '@estee/elc-accordion';\nimport { mergeComponentConfigs } from '~utils/ConfigUtils';\nimport { classes } from '../../utils/Classes';\nimport { PRODUCT_ACCORDION } from '~constants/DataTestIdAttributes';\n\ninterface IProductAccordionConfig {\n    gridAccordionIconType?: string;\n    accordionDefaultOpen: boolean;\n    accordionTitle: string;\n    accordionSubtext: string;\n}\n\nexport interface IProductAccordion {\n    config: IProductAccordionConfig;\n    children: JSX.Element;\n    onChange?(openIndex: number): void;\n}\n\nexport const ProductAccordion = configConsumer([\n    'gridAccordionIconType',\n    'accordionDefaultOpen',\n    'accordionTitle',\n    'accordionSubtext'\n])(\n    observer(function ProductAccordion(props: IProductAccordion) {\n        const productAccordionClassNames = classes('product-accordion');\n        const productAccordionLabelClassNames = classes('product-accordion-label');\n        const config = mergeComponentConfigs<IProductAccordionConfig>(props);\n\n        const {\n            gridAccordionIconType: iconType,\n            accordionDefaultOpen,\n            accordionTitle = '',\n            accordionSubtext = ''\n        } = config;\n        const { onChange } = props;\n\n        const openIndex = accordionDefaultOpen ? 0 : -1;\n\n        return (\n            <Accordion\n                className={productAccordionClassNames}\n                openIndex={openIndex}\n                onChange={onChange}\n                dataTestId={PRODUCT_ACCORDION}\n            >\n                <LabelSlide\n                    className={productAccordionLabelClassNames}\n                    id={accordionTitle}\n                    title={accordionTitle}\n                    iconType={iconType}\n                >\n                    {accordionSubtext}\n                    {props.children}\n                </LabelSlide>\n            </Accordion>\n        );\n    })\n);\n","import * as React from 'react';\nimport { observer } from 'mobx-react';\nimport styled from 'styled-components';\nimport { ContentSpacing, Breakpoints } from '@estee/elc-base-theme';\n\nexport interface IDefaultColumn {\n    columns: number;\n    rows: number;\n}\n\nexport interface IColumnRenderer {\n    isMobile: boolean;\n    children?: JSX.Element;\n    isCarousel?: boolean;\n    columns?: number;\n    rows?: number;\n    className?: string;\n}\n\nconst DefaultColumn = styled.div<IDefaultColumn>`\n    padding: ${ContentSpacing.space8};\n    grid-column-end: span 1;\n    grid-row-end: span 1;\n    width: 100%;\n    @media (min-width: ${Breakpoints.desktop}px) {\n        grid-column-end: span ${({ columns }) => columns};\n        grid-row-end: span ${({ rows }) => rows};\n        width: auto;\n        ${(props) => (props.columns === 0 ? 'grid-column: 1 / -1;' : '')}\n    }\n    &:hover {\n        z-index: 1;\n    }\n`;\n\nconst CarouselColumn = styled.div<IDefaultColumn>`\n    padding: ${ContentSpacing.space8};\n`;\n\nexport const ColumnRenderer = observer(function ColumnRenderer(props: IColumnRenderer) {\n    const { isCarousel = false, columns = 1, rows = 1 } = props;\n    const ColumnWrapper = isCarousel ? CarouselColumn : DefaultColumn;\n\n    return (\n        <ColumnWrapper columns={columns} rows={rows} className={props.className}>\n            {props.children}\n        </ColumnWrapper>\n    );\n});\n","export const PRODUCT_BRIEF_CLASS_NAMES = Object.freeze({\n    GRID_ITEM_CLASS_NAME: 'js-grid-item',\n    COLUMN_WIDTH_SELECTOR: 'js-grid-column-width'\n});\n\nexport enum TIME_DURATION {\n    DEFER_RESET_HEIGHT_VALUE = 100,\n    TRANSITION_DURATION = 0\n}\n","import * as React from 'react';\nimport { observer } from 'mobx-react';\nimport { configConsumer } from '@estee/elc-service';\nimport { gridItemType } from '~constants/ProductGrid';\nimport { ComponentTypes } from '~constants/ComponentTypes';\nimport { CollectionItem, CollectionItemType } from '../product-grid/CollectionItem';\nimport { IProductBriefCollectionConfig } from './ProductBriefCollection';\nimport { IOrderConfigCollection } from '~interfaces/IOrderableComponents';\nimport { GridItem } from '~domain/entities/GridItem';\nimport { IBreakpoints } from '~interfaces/IBreakpoints';\n\nconst ITEMS_CLASSNAME = 'js-grid-styled-column';\n\nexport interface IProductBriefItem {\n    breakpoints?: IBreakpoints;\n    config?: IProductBriefItemConfig;\n    gridItem: GridItem;\n    isMobile?: boolean;\n    isLoaded: boolean;\n    areFiltersApplied?: boolean;\n}\n\ninterface IProductBriefItemConfig {\n    componentElementsOrderConfig?: { [key: string]: IOrderConfigCollection };\n    featuredProductOverrideImage?: string;\n}\n\n@configConsumer(['componentElementsOrderConfig', 'featuredProductOverrideImage'])\n@observer\nexport class ProductBriefItem extends React.Component<IProductBriefItem> {\n    private getOverrideImage(item: GridItem, imageOverride?: string) {\n        if (item.itemType !== gridItemType.featuredProduct || !imageOverride) {\n            return '';\n        }\n\n        return imageOverride;\n    }\n\n    private isFeatured(gridItem: GridItem) {\n        return !this.props.areFiltersApplied\n            ? gridItem.itemType === gridItemType.featuredProduct\n            : false;\n    }\n\n    private getBriefProps(gridItem: GridItem) {\n        const { featuredProductOverrideImage } = this.props.config as IProductBriefItemConfig;\n        const { isLoaded } = this.props;\n\n        return {\n            key: `column-for-${gridItem.itemId}`,\n            className: ITEMS_CLASSNAME,\n            positionIndex: gridItem.positionIndex,\n            imageOverride: this.getOverrideImage(gridItem, featuredProductOverrideImage),\n            isFeatured: this.isFeatured(gridItem),\n            isLoaded,\n            isMobile: this.props.isMobile,\n            componentType: ComponentTypes.PRODUCT_BRIEF\n        };\n    }\n\n    render() {\n        const { componentElementsOrderConfig } = this.props.config as IProductBriefCollectionConfig;\n        const { gridItem, breakpoints } = this.props;\n        const lazyLoadImageMobile = gridItem.positionIndex >= Number(breakpoints?.numColumnsMobile);\n        const lazyLoadImageDesktop =\n            gridItem.positionIndex >= Number(breakpoints?.numColumnsDesktop);\n\n        switch (gridItem.itemType) {\n            case gridItemType.product:\n            case gridItemType.featuredProduct:\n                return (\n                    gridItem.product && (\n                        <CollectionItem\n                            collectionItem={CollectionItemType.PRODUCT}\n                            id={gridItem.itemId}\n                            productBriefProps={{\n                                ...this.getBriefProps(gridItem),\n                                product: gridItem.product,\n                                lazyLoadImageMobile,\n                                lazyLoadImageDesktop\n                            }}\n                            config={{\n                                componentElementsOrderConfig\n                            }}\n                        />\n                    )\n                );\n            default:\n                return (\n                    <CollectionItem collectionItem={CollectionItemType.TOUT} id={gridItem.itemId} />\n                );\n        }\n    }\n}\n","import * as React from 'react';\nimport { observer } from 'mobx-react';\nimport { configConsumer } from '@estee/elc-service';\nimport { GridItem } from '~domain/entities/GridItem';\nimport { gridItemType } from '~constants/ProductGrid';\nimport { ColumnRenderer } from '../column-renderer/ColumnRenderer';\nimport { classes } from '~utils/Classes';\nimport { PRODUCT_BRIEF_CLASS_NAMES } from '~constants/ProductBriefCollection';\nimport { IOrderConfigCollection } from '~interfaces/IOrderableComponents';\nimport { ProductBriefItem } from './ProductBriefItem';\nimport { IBreakpoints } from '../../interfaces/IBreakpoints';\n\ninterface IProductBriefViewContent {\n    breakpoints?: IBreakpoints;\n    config?: IProductBriefViewContentConfig;\n    gridItems: GridItem[];\n    isMobile?: boolean;\n    isLoaded: boolean;\n    areFiltersApplied?: boolean;\n}\n\ninterface IProductBriefViewContentConfig {\n    enableGridCarousel?: boolean;\n    featuredProductOverrideImage?: string;\n    componentElementsOrderConfig?: { [key: string]: IOrderConfigCollection };\n}\n\n@configConsumer([\n    'enableGridCarousel',\n    'featuredProductOverrideImage',\n    'componentElementsOrderConfig'\n])\n@observer\nexport class ProductBriefViewContent extends React.Component<IProductBriefViewContent> {\n    private shouldRenderItem = (item: GridItem) => {\n        const { areFiltersApplied } = this.props;\n\n        return (areFiltersApplied && item.itemType === gridItemType.product) || !areFiltersApplied;\n    };\n\n    public render() {\n        const {\n            config: { enableGridCarousel } = {},\n            gridItems = [],\n            isMobile,\n            isLoaded,\n            areFiltersApplied,\n            breakpoints\n        } = this.props;\n\n        return gridItems.reduce((components: React.ReactElement[], item) => {\n            const shouldRenderItem: boolean = this.shouldRenderItem(item);\n            shouldRenderItem &&\n                components.push(\n                    <ColumnRenderer\n                        key={`column-for-${item.itemId}`}\n                        isCarousel={enableGridCarousel}\n                        isMobile={!!isMobile}\n                        columns={item.w}\n                        rows={item.h}\n                        className={classes(\n                            `grid-item-${item.itemType}`,\n                            PRODUCT_BRIEF_CLASS_NAMES.GRID_ITEM_CLASS_NAME\n                        )}\n                    >\n                        <ProductBriefItem\n                            breakpoints={breakpoints}\n                            gridItem={item}\n                            isMobile={isMobile}\n                            isLoaded={isLoaded}\n                            areFiltersApplied={areFiltersApplied}\n                        />\n                    </ColumnRenderer>\n                );\n\n            return components;\n        }, []);\n    }\n}\n","import * as React from 'react';\nimport { observer } from 'mobx-react';\nimport { Row } from '@estee/elc-grid';\nimport { DEFAULT_GRID_BREAKPOINTS } from '~constants/ProductGrid';\nimport { GridItem } from '../../domain/entities/GridItem';\nimport { classes } from '../../utils/Classes';\nimport { ResponsiveGridWrapper } from '../../utils/ResponsiveGridWrapper';\nimport { getColumnsWidth } from '../../utils/ResponsiveColumnsWidth';\nimport { IBreakpoints } from '../../interfaces/IBreakpoints';\nimport { configConsumer } from '@estee/elc-service';\nimport { IOrderConfigCollection } from '../../interfaces/IOrderableComponents';\nimport { ProductBriefViewContent } from './ProductBriefViewContent';\n\nexport interface IProductBriefCollectionConfig {\n    productGridBreakpoints?: IBreakpoints;\n    ctaType?: string;\n    toutWidth?: number;\n    toutHeight?: number;\n    enableGridCarousel?: boolean;\n    featuredProductOverrideImage?: string;\n    componentElementsOrderConfig?: { [key: string]: IOrderConfigCollection };\n}\nexport interface IProductBriefCollection {\n    config?: IProductBriefCollectionConfig;\n    className?: string;\n    featuredProductId?: string;\n    isAllGiftsFilterApplied?: boolean;\n    isLoaded: boolean;\n    isMobile?: boolean;\n    areFiltersApplied?: boolean;\n    gridItems: GridItem[];\n    positionGridInsideAccordion?: boolean;\n}\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface IProductBriefCollectionWrapper extends Omit<IProductBriefCollection, 'isMobile'> {}\n\nexport const ProductBriefCollection = configConsumer([\n    'productGridBreakpoints',\n    'enableGridCarousel',\n    'featuredProductOverrideImage',\n    'componentElementsOrderConfig'\n])(\n    observer(function ProductBriefCollection(props: IProductBriefCollection) {\n        const productBriefViewClassNames = classes('product-brief-view', props.className);\n        const carouselWrapperRowClassNames = classes('carousel-wrapper-row');\n\n        const {\n            config: {\n                enableGridCarousel,\n                productGridBreakpoints: breakpoints = DEFAULT_GRID_BREAKPOINTS\n            } = {},\n            isMobile,\n            isLoaded,\n            gridItems,\n            areFiltersApplied\n        } = props;\n\n        return (\n            <ResponsiveGridWrapper\n                breakpoints={getColumnsWidth(breakpoints)}\n                className={productBriefViewClassNames}\n            >\n                {enableGridCarousel || !isLoaded ? (\n                    <Row className={carouselWrapperRowClassNames}>\n                        <ProductBriefViewContent\n                            breakpoints={breakpoints}\n                            gridItems={gridItems}\n                            isMobile={isMobile}\n                            isLoaded={isLoaded}\n                            areFiltersApplied={areFiltersApplied}\n                        />\n                    </Row>\n                ) : (\n                    <ProductBriefViewContent\n                        breakpoints={breakpoints}\n                        gridItems={gridItems}\n                        isMobile={isMobile}\n                        isLoaded={isLoaded}\n                        areFiltersApplied={areFiltersApplied}\n                    />\n                )}\n            </ResponsiveGridWrapper>\n        );\n    })\n);\n","// handles product brief display on different resolutions\nimport * as React from 'react';\nimport { observer } from 'mobx-react';\nimport { IProductBriefCollectionWrapper, ProductBriefCollection } from './ProductBriefCollection';\nimport { Breakpoints } from '@estee/elc-base-theme';\nimport { Desktop, Mobile } from '@estee/elc-layouts';\n\nexport const ProductBriefCollectionWrapper = observer(function ProductBriefCollectionWrapper(\n    props: IProductBriefCollectionWrapper\n) {\n    return (\n        <>\n            <Desktop minWidth={Breakpoints.desktop}>\n                {() => <ProductBriefCollection {...props} isMobile={false} />}\n            </Desktop>\n            <Mobile maxWidth={Breakpoints.desktop - 1}>\n                {() => <ProductBriefCollection {...props} isMobile />}\n            </Mobile>\n        </>\n    );\n});\n","import * as React from 'react';\nimport { observer } from 'mobx-react';\nimport styled from 'styled-components';\nimport { ContentSpacing } from '@estee/elc-base-theme';\nimport { MobileSelectTheme } from '../../../theme/default-theme';\nimport { IProductSortingDropdownTranslations } from './ProductSortingDropdown';\nimport { translate } from '@estee/elc-service';\n\nexport interface IMobileSortingDropdown {\n    productSortingDropdownValue: string;\n    setProductSortingDropdownValue(inputName: string, value: string): void;\n    optionsArray: {\n        label: string;\n        value: string;\n    }[];\n    translations?: IProductSortingDropdownTranslations;\n}\n\nconst MobileSelect = styled.select`\n    position: relative;\n    width: 100%;\n    height: ${ContentSpacing.space40};\n    padding-left: ${ContentSpacing.space10};\n    appearance: none;\n    ${MobileSelectTheme};\n\n    [dir='rtl'] & {\n        padding-left: 0;\n        padding-right: ${ContentSpacing.space10};\n    }\n`;\n\nexport const MobileSortingDropdown = translate(['sortByLabel'])(\n    observer(function MobileSortingDropdown(props: IMobileSortingDropdown) {\n        const { sortByLabel } = props.translations as IProductSortingDropdownTranslations;\n\n        const onSelectValue = (event: React.ChangeEvent<HTMLSelectElement>) => {\n            props.setProductSortingDropdownValue(\n                event.currentTarget.name,\n                event.currentTarget.value\n            );\n        };\n\n        const mobileSortOptions = props.optionsArray.map((option, key) => (\n            <option key={`${key}-${option.value}`} value={option.value} aria-label={option.label}>\n                {option.label}\n            </option>\n        ));\n\n        return (\n            <label data-test-id=\"sort_by\" aria-label={sortByLabel}>\n                <MobileSelect value={props.productSortingDropdownValue} onChange={onSelectValue}>\n                    {mobileSortOptions}\n                </MobileSelect>\n            </label>\n        );\n    })\n);\n","import * as React from 'react';\nimport { observer } from 'mobx-react';\nimport { translate } from '@estee/elc-service';\nimport { BackgroundWhiteTheme } from '../../../theme/default-theme';\nimport styled from 'styled-components';\nimport { Breakpoints } from '@estee/elc-base-theme';\nimport { MobileSortingDropdown } from './MobileSortingDropdown';\nimport { SortingTypes } from '../../constants/SortingTypes';\nimport { MPP_SORT_BY, MPP_PRODUCT_SORTING_DROPDOWN } from '../../constants/DataTestIdAttributes';\nimport { classes } from '../../utils/Classes';\nimport { Desktop, Mobile } from '@estee/elc-layouts';\nimport { Dropdown } from '../lazy-dropdown/LazyDropdown';\n\nexport interface IProductSortingDropdownTranslations {\n    priceLowToHigh: string;\n    priceHighToLow: string;\n    topRated: string;\n    sortByLabel: string;\n}\n\nexport interface IProductSortingDropdown {\n    productSortingDropdownValue: string;\n    className: string;\n    translations?: IProductSortingDropdownTranslations;\n    setProductSortingDropdownValue(inputName: string, value: string): void;\n}\n\nexport interface IResponsive {\n    children: React.ReactNode;\n    minWidth?: number;\n    maxWidth?: number;\n}\n\nconst StyledDropdown = styled(Dropdown)`\n    ${BackgroundWhiteTheme};\n`;\n\nexport const ProductSortingDropdown = translate([\n    'priceLowToHigh',\n    'priceHighToLow',\n    'topRated',\n    'sortByLabel'\n])(\n    observer(function ProductSortingDropdown(props: IProductSortingDropdown) {\n        const {\n            priceLowToHigh,\n            priceHighToLow,\n            topRated,\n            sortByLabel\n        } = props.translations as IProductSortingDropdownTranslations;\n\n        const optionsArray = [\n            { label: sortByLabel, value: SortingTypes.SORT_BY_LABEL },\n            { label: topRated, value: SortingTypes.SORT_TOP_RATED },\n            { label: priceHighToLow, value: SortingTypes.SORT_PRICE_HIGH_TO_LOW },\n            { label: priceLowToHigh, value: SortingTypes.SORT_PRICE_LOW_TO_HIGH }\n        ];\n\n        const orderByNameDropDownClassNames = classes('product-sorting-dropdown');\n\n        return (\n            <div className={props.className}>\n                <Desktop minWidth={Breakpoints.desktop}>\n                    {() => (\n                        <StyledDropdown\n                            dropdownDataTestId={MPP_SORT_BY}\n                            options={optionsArray}\n                            name=\"order\"\n                            dataTestId={MPP_PRODUCT_SORTING_DROPDOWN}\n                            selectedValue={\n                                props.productSortingDropdownValue\n                                    ? props.productSortingDropdownValue\n                                    : sortByLabel\n                            }\n                            onChange={props.setProductSortingDropdownValue}\n                            className={orderByNameDropDownClassNames}\n                        />\n                    )}\n                </Desktop>\n                <Mobile maxWidth={Breakpoints.desktop - 1}>\n                    {() => (\n                        <MobileSortingDropdown\n                            productSortingDropdownValue={props.productSortingDropdownValue}\n                            setProductSortingDropdownValue={props.setProductSortingDropdownValue}\n                            optionsArray={optionsArray}\n                        />\n                    )}\n                </Mobile>\n            </div>\n        );\n    })\n);\n","import * as React from 'react';\nimport { observer } from 'mobx-react';\nimport classnames from 'classnames';\nimport { addContext, addTranslation, translationConsumer } from '@estee/elc-service';\nimport { diContainer } from '../../../../service-setup/diContainer';\nimport serviceNames from '../../../../service-setup/ProductService';\nimport { ProductFiltersViewController } from '../../../controllers/ProductFiltersViewController';\nimport { classes } from '../../../utils/Classes';\nimport { FilterSet } from '../../../domain/entities/FilterSet';\nimport { observable, computed } from 'mobx';\nimport { IFiltersConfig } from '../../../interfaces/IFilters';\nimport { FilterOptionTypes, FilterSetTypes } from '../../../constants/Filters';\nimport { OrderRender } from '@estee/elc-layouts';\nimport { getFiltersViewRegistry } from '../../../utils/orderableUtils/getViewRegistry';\nimport {\n    IFiltersFeatureData,\n    IOrderConfigCollection\n} from '../../../interfaces/IOrderableComponents';\nimport { ComponentTypes } from '~constants/ComponentTypes';\nimport { ArrayMinOne } from '@estee/elc-universal-utils';\n\nexport interface IFiltersTranslation {\n    filtersLabel: string;\n    clearFiltersLabel: string;\n    applyFiltersLabel: string;\n    filterByCategoryLabel: string;\n    filterByPriceLabel: string;\n    resultsLabel: string;\n    filterByLabel: string;\n    removeIconAriaLabel: string;\n    collapseIconAriaLabel: string;\n    expandIconAriaLabel: string;\n}\n\nexport interface IOrderableFilters {\n    filterSets: FilterSet[];\n    appliedFilters: FilterSet[];\n    productsNumber: number;\n    totalAppliedFilters?: number;\n    translations?: IFiltersTranslation;\n    filtersConfig?: IFiltersConfig;\n    scrollToGridTop?(): void;\n}\n\nconst translationFields: ArrayMinOne<string> = [\n    'filtersLabel',\n    'applyFiltersLabel',\n    'filterByLabel',\n    'removeIconAriaLabel',\n    'hideFiltersLabel'\n];\n@addContext()\n@addTranslation(translationFields)\n@translationConsumer(translationFields)\n@observer\nclass OrderableFilters extends React.Component<IOrderableFilters> {\n    @observable\n    private productFiltersViewController: ProductFiltersViewController;\n    private productFiltersOrder: IOrderConfigCollection;\n\n    constructor(props: IOrderableFilters) {\n        super(props);\n\n        this.productFiltersViewController = diContainer.get(\n            serviceNames.productFiltersViewController\n        );\n        this.productFiltersOrder = this.filtersOrderConfig as IOrderConfigCollection;\n    }\n\n    private get filtersOrderConfig() {\n        const { filtersConfig } = this.props;\n\n        return filtersConfig && filtersConfig.componentElementsOrderConfig;\n    }\n\n    private get filtersAsCheckboxes() {\n        const filterOptionsType =\n            this.props.filtersConfig &&\n            this.props.filtersConfig.filterOptions &&\n            this.props.filtersConfig.filterOptions.type;\n\n        return filterOptionsType === FilterOptionTypes.CHECKBOX;\n    }\n\n    @computed\n    private get activeFilterSet() {\n        const allowAllFiltersCollapsed =\n            this.props.filtersConfig && this.props.filtersConfig.allowAllFiltersCollapsed;\n        const type = this.props.filtersConfig && this.props.filtersConfig.filterSets.type;\n        let activeFilter = this.props.filterSets.filter((_filterSet) => _filterSet.isOpen)[0];\n        if (!allowAllFiltersCollapsed && type !== FilterSetTypes.ACCORDIONS && !activeFilter) {\n            activeFilter = this.props.filterSets[0];\n        }\n\n        return activeFilter;\n    }\n\n    @computed\n    private get isFiltersOverlayOpen() {\n        return this.productFiltersViewController.data.isFiltersModalOpen;\n    }\n\n    private handleFilterSetToggle = (filterSet: FilterSet) => {\n        const allowAllFiltersCollapsed =\n            this.props.filtersConfig && this.props.filtersConfig.allowAllFiltersCollapsed;\n        const filterSetsConfig = this.props.filtersConfig && this.props.filtersConfig.filterSets;\n        const type = filterSetsConfig && filterSetsConfig.type;\n        const activeFilterSets = this.props.filterSets.filter((_filterSet) => _filterSet.isOpen);\n\n        if (type === FilterSetTypes.TOGGLES) {\n            const activeFilterClicked =\n                activeFilterSets[0] && activeFilterSets[0].key === filterSet.key;\n\n            if (activeFilterClicked && !allowAllFiltersCollapsed) {\n                return null;\n            }\n\n            filterSet.toggleOpenState();\n            // close all colapsed filters\n            activeFilterSets[0] && activeFilterSets[0].setOpenState(false);\n        } else if (type === FilterSetTypes.ACCORDIONS) {\n            filterSet.toggleOpenState();\n        }\n    };\n\n    private toggleFilters = () => {\n        if (this.productFiltersViewController.data.isFiltersModalOpen) {\n            this.productFiltersViewController.onCloseFiltersClick();\n        } else {\n            this.productFiltersViewController.onOpenFiltersClick();\n        }\n    };\n\n    private closeOverlayHandler = () => {\n        this.productFiltersViewController.onCloseFiltersClick();\n        this.props.scrollToGridTop && setTimeout(this.props.scrollToGridTop, 0);\n    };\n\n    public render() {\n        const filtersConfig = this.props.filtersConfig as IFiltersConfig;\n        const orderableFiltersWrapperClassNames = classnames(classes('orderable-filters-wrapper'), {\n            'filters-applied': !!this.props.appliedFilters.length\n        });\n        const filtersModalClassnames = classnames(classes('mobile-filters-modal'), {\n            'is-open': this.productFiltersViewController.data.isFiltersModalOpen\n        });\n\n        const featureConfig: IFiltersFeatureData = {\n            ...this.productFiltersViewController.data,\n            onClearAllAppliedFilters: this.productFiltersViewController.onClearAllAppliedFilters,\n            onOpenFiltersClick: this.productFiltersViewController.onOpenFiltersClick,\n            onCloseFiltersClick: this.productFiltersViewController.onCloseFiltersClick,\n            appliedFilters: this.props.appliedFilters,\n            toggleFilters: this.toggleFilters,\n            filterSets: this.props.filterSets,\n            totalAppliedFilters: this.props.totalAppliedFilters,\n            activeFilterSet: this.activeFilterSet,\n            filtersAsCheckboxes: this.filtersAsCheckboxes,\n            filterSetConfig: filtersConfig.filterSets,\n            handleFilterSetToggle: this.handleFilterSetToggle,\n            itemsNumber: this.props.productsNumber,\n            showIndividualFilterByLabel: filtersConfig.showIndividualFilterByLabel,\n            selectedFilterValues: filtersConfig.selectedFilterValues,\n            isOverlayOpen: this.isFiltersOverlayOpen,\n            translations: this.props.translations,\n            closeOverlay: this.closeOverlayHandler,\n            closeOnOverlayMaskClick: filtersConfig.closeOnOverlayMaskClick,\n            scrollToGridTop: this.props.scrollToGridTop,\n            overlayClassNames: filtersModalClassnames,\n            componentType: ComponentTypes.PRODUCT_FILTERS\n        };\n\n        return (\n            <div className={orderableFiltersWrapperClassNames}>\n                {Object.keys(this.productFiltersOrder).map((sectionName: string) => (\n                    <div className={classes(`${sectionName}-section`)} key={sectionName}>\n                        <OrderRender\n                            data-test-id={`${sectionName}-section`}\n                            orderConfig={this.productFiltersOrder[sectionName]}\n                            serviceName={'elc-service-prodcat'}\n                            viewRegistry={getFiltersViewRegistry<IFiltersFeatureData>(\n                                featureConfig\n                            )}\n                        />\n                    </div>\n                ))}\n            </div>\n        );\n    }\n}\n\nexport { OrderableFilters };\n","import { Row } from '@estee/elc-grid';\nimport { configConsumer } from '@estee/elc-service';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\nimport styled from 'styled-components';\nimport { StickyWrapper } from '../sticky-wrapper/StickyWrapper';\n\nexport enum GridActionsBarTypes {\n    STICKY = 'sticky',\n    INLINE = 'inline'\n}\n\nexport interface IGridActionsBarConfig {\n    type: GridActionsBarTypes;\n    stickyElementsSelectors: string[];\n}\n\nexport interface IGridActionsBarWrapper {\n    children: JSX.Element;\n    className?: string;\n    config?: {\n        gridActionsBar: IGridActionsBarConfig;\n    };\n}\n\nconst StyledRow = styled(Row)`\n    display: flex;\n    justify-content: space-between;\n    user-select: none;\n`;\n\nexport const GridActionsBarWrapper = configConsumer(['gridActionsBar'])(\n    observer(function GridActionsBarWrapper(props: IGridActionsBarWrapper) {\n        if (props.config?.gridActionsBar?.type === GridActionsBarTypes.STICKY) {\n            return (\n                <StickyWrapper\n                    className={props.className}\n                    stickyElementsSelectors={props.config?.gridActionsBar.stickyElementsSelectors}\n                >\n                    {props.children}\n                </StickyWrapper>\n            );\n        }\n\n        return <StyledRow className={props.className}>{props.children}</StyledRow>;\n    })\n);\n","import { action, observable } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\nimport classnames from 'classnames';\n\nconst SCROLL_DEBOUNCE_TIME = 100;\n\ninterface IItemAboveViewport {\n    children: JSX.Element | JSX.Element[];\n    component: string;\n    className?: string;\n}\n\n@observer\nexport class ItemAboveViewport extends React.Component<IItemAboveViewport> {\n    private ref: React.RefObject<HTMLDivElement> = React.createRef();\n    private scrollTimeout: NodeJS.Timeout | number;\n    @observable private isAboveViewPort: boolean;\n\n    componentDidMount() {\n        window.addEventListener('scroll', this.scrollHandler);\n        this.updateAboveScroll();\n    }\n\n    componentWillUnmount() {\n        window.removeEventListener('scroll', this.scrollHandler);\n    }\n\n    public scrollHandler = () => {\n        if (this.scrollTimeout) {\n            clearTimeout(this.scrollTimeout as number);\n        }\n\n        this.scrollTimeout = setTimeout(this.updateAboveScroll, SCROLL_DEBOUNCE_TIME);\n    };\n\n    @action\n    public updateAboveScroll = () => {\n        const { top = 0 } = this.ref.current?.getBoundingClientRect() || {};\n\n        this.isAboveViewPort = top < 0;\n    };\n\n    render() {\n        const componentClassName = classnames(\n            this.props.className,\n            this.isAboveViewPort && `elc-${this.props.component}--is-above-viewport`\n        );\n\n        return (\n            <div className={componentClassName} ref={this.ref}>\n                {this.props.children}\n            </div>\n        );\n    }\n}\n","import * as React from 'react';\nimport { observer } from 'mobx-react';\nimport styled from 'styled-components';\nimport { ProductCarousel, IProductCarousel } from '../product-carousel/ProductCarousel';\nimport { ProductBriefCollectionWrapper } from '../product-brief-collection/ProductBriefCollectionWrapper';\nimport { IProductBriefCollection } from '../product-brief-collection/ProductBriefCollection';\nimport { ICTAConfig } from '../../../exported/product-grid-wrapper/ProductGridWrapper';\nimport { ContentSpacing, Breakpoints } from '@estee/elc-base-theme';\nimport { Heading4 } from '@estee/elc-typography';\nimport { classes } from '../../../internal/utils/Classes';\nimport { ProductSortingDropdown } from '../../../internal/views/product-grid/ProductSortingDropdown';\nimport { FilterSet } from '../../domain/entities/FilterSet';\nimport { Desktop, Mobile } from '@estee/elc-layouts';\nimport { configConsumer } from '@estee/elc-service';\nimport { IFiltersConfig } from '../../interfaces/IFilters';\nimport { getResponsiveConfig } from '../../utils/ConfigUtils';\nimport { OrderableFilters } from '../product-filters/orderable-filters/OrderableFilters';\nimport { GridActionsBarWrapper, IGridActionsBarConfig } from './GridHeaderBarWrapper';\nimport { Filter } from '~domain/entities/Filter';\nimport { ItemAboveViewport } from '../item-above-viewport/ItemAboveViewport';\n\nexport enum Formatter {\n    DEFAULT = 'default',\n    CAROUSEL = 'carousel'\n}\n\ninterface IProductGridConfig {\n    gridCTA: ICTAConfig;\n    gridActionsBar: IGridActionsBarConfig;\n}\n\ninterface IProductCTA {\n    backgroundColor?: string;\n    borderColor?: string;\n}\n\ninterface IProductCTAText {\n    textColor?: string;\n}\n\nexport interface IProductGridProps {\n    formatter: Formatter;\n    carouselProps: IProductCarousel['config'];\n    briefProps: IProductBriefCollection;\n    productSortingDropdownValue: string;\n    productsNumber: number;\n    appliedFiltersList?: Filter[];\n    appliedFilters?: FilterSet[];\n    filterSets?: FilterSet[];\n    isAllGiftsFilterApplied?: boolean;\n    areFiltersApplied?: boolean;\n    positionGridInsideAccordion?: boolean;\n    totalAppliedFilters?: number;\n    hideSorting?: boolean;\n    isFilterDisplayStacked?: boolean;\n    isFilterDisplayTabbed?: boolean;\n    className?: string;\n    setProductSortingDropdownValue(_: string, v: string): void;\n    config?: IProductGridConfig;\n    filters?: IFiltersConfig;\n    scrollIntoView?(offset?: number): void;\n}\n\nexport const QUICK_VIEW_SELECTOR_CLASSNAME = 'elc-quickview-renderer';\n\nconst ProductCTAWrapper = styled.div`\n    margin-top: ${ContentSpacing.space24};\n`;\n\nconst ProductCTA = styled.a<IProductCTA>`\n    width: ${ContentSpacing.space60};\n    background-color: ${(props) => (props.backgroundColor ? props.backgroundColor : '')};\n    box-shadow: ${(props) => (props.borderColor ? `inset 0 0 0 1px ${props.borderColor}` : '')};\n`;\n\nconst ProductCTAText = styled.span<IProductCTAText>`\n    color: ${(props) => (props.textColor ? props.textColor : '')};\n`;\n\n@configConsumer(['gridCTA', 'gridActionsBar'])\n@observer\nclass ProductGrid extends React.Component<IProductGridProps> {\n    public static defaultProps: IProductGridProps;\n\n    componentDidUpdate(oldProps: IProductGridProps) {\n        if (this.props.appliedFiltersList?.length !== oldProps.appliedFiltersList?.length) {\n            this.props.scrollIntoView && this.props.scrollIntoView();\n        }\n    }\n\n    private getProductCTA = () => {\n        const productCTAWrapperClassNames = classes('product-cta-wrapper');\n        const {\n            gridCTA: {\n                label,\n                absoluteUrl,\n                url,\n                newTab,\n                ctaCustomStyleClassName,\n                backgroundColor,\n                borderColor,\n                textColor\n            } = {}\n        } = this.props.config as IProductGridConfig;\n        const productCTAClassNames = ctaCustomStyleClassName\n            ? classes('custom-cta', ctaCustomStyleClassName)\n            : classes('product-cta');\n\n        let ctaURL = url;\n        if (absoluteUrl && url) {\n            const isAbsoluteUrlRegex = new RegExp('^(?:[a-z]+:)?//', 'i');\n            const baseUrl = isAbsoluteUrlRegex.test(url) ? '' : 'https://';\n            ctaURL = `${baseUrl}${url}`;\n        }\n\n        const ctaUrlTarget = newTab ? '_blank' : '';\n        const ctaLabel =\n            ctaCustomStyleClassName || textColor ? (\n                <ProductCTAText textColor={textColor}>{label}</ProductCTAText>\n            ) : (\n                <Heading4>{label}</Heading4>\n            );\n\n        return (\n            <ProductCTAWrapper className={productCTAWrapperClassNames}>\n                <ProductCTA\n                    className={productCTAClassNames}\n                    href={ctaURL}\n                    target={ctaUrlTarget}\n                    backgroundColor={backgroundColor}\n                    borderColor={borderColor}\n                >\n                    {ctaLabel}\n                </ProductCTA>\n            </ProductCTAWrapper>\n        );\n    };\n\n    private getSorting(displaySortingDropdown: boolean) {\n        if (!displaySortingDropdown) {\n            return null;\n        }\n\n        const sortWrapperClassNames = classes('sort-wrapper');\n\n        return (\n            <ProductSortingDropdown\n                className={sortWrapperClassNames}\n                productSortingDropdownValue={this.props.productSortingDropdownValue}\n                setProductSortingDropdownValue={this.props.setProductSortingDropdownValue}\n            />\n        );\n    }\n\n    private getHeaderBarContent(wrapperClassName: string, filtersConfig?: IFiltersConfig) {\n        const displaySortingDropdown = !this.props.hideSorting && this.props.productsNumber > 0;\n        const isFilterEnabled = filtersConfig && filtersConfig.enabled;\n        const isGridAvailable = isFilterEnabled || displaySortingDropdown;\n\n        if (!isGridAvailable) {\n            return null;\n        }\n\n        return (\n            <GridActionsBarWrapper className={wrapperClassName}>\n                {isFilterEnabled && (\n                    <OrderableFilters\n                        productsNumber={this.props.productsNumber}\n                        filterSets={this.props.filterSets || []}\n                        appliedFilters={this.props.appliedFilters || []}\n                        totalAppliedFilters={this.props.totalAppliedFilters}\n                        filtersConfig={filtersConfig}\n                        scrollToGridTop={this.props.scrollIntoView}\n                    />\n                )}\n\n                {this.getSorting(displaySortingDropdown)}\n            </GridActionsBarWrapper>\n        );\n    }\n\n    private getHeaderBar() {\n        const headerBarClassNames = classes('product-grid--header');\n        const headerBarMobileClassNames = classes(\n            'product-grid--header',\n            'product-grid--header-mobile'\n        );\n\n        const { filters } = this.props;\n        let desktopConfig: IFiltersConfig | undefined;\n        let mobileConfig: IFiltersConfig | undefined;\n        if (filters) {\n            const { componentElementsOrderConfig, responsive, ...config } = filters;\n            desktopConfig = {\n                ...config,\n                ...getResponsiveConfig(Breakpoints.desktop, responsive),\n                componentElementsOrderConfig\n            };\n            mobileConfig = {\n                ...config,\n                componentElementsOrderConfig\n            };\n        }\n\n        return (\n            <>\n                <Desktop minWidth={Breakpoints.desktop}>\n                    {() => this.getHeaderBarContent(headerBarClassNames, desktopConfig)}\n                </Desktop>\n                <Mobile maxWidth={Breakpoints.desktop - 1}>\n                    {() => this.getHeaderBarContent(headerBarMobileClassNames, mobileConfig)}\n                </Mobile>\n            </>\n        );\n    }\n\n    public render() {\n        const {\n            carouselProps,\n            briefProps,\n            isAllGiftsFilterApplied,\n            areFiltersApplied,\n            formatter\n        } = this.props;\n\n        const { gridCTA: { enabled: gridCTAEnabled } = {} } = this.props\n            .config as IProductGridConfig;\n\n        const productGridCTA = gridCTAEnabled && this.getProductCTA();\n\n        if (formatter === Formatter.CAROUSEL) {\n            return (\n                <>\n                    <ProductCarousel config={carouselProps} />\n                    {productGridCTA}\n                </>\n            );\n        }\n\n        return (\n            <ItemAboveViewport component=\"product-grid\">\n                <>\n                    {this.getHeaderBar()}\n                    <ProductBriefCollectionWrapper\n                        isAllGiftsFilterApplied={isAllGiftsFilterApplied}\n                        areFiltersApplied={areFiltersApplied}\n                        {...briefProps}\n                    />\n                    <div className={QUICK_VIEW_SELECTOR_CLASSNAME} />\n                    {productGridCTA}\n                </>\n            </ItemAboveViewport>\n        );\n    }\n}\nexport default ProductGrid;\n","import * as React from 'react';\nimport styled from 'styled-components';\nimport { observer } from 'mobx-react';\nimport { classes } from '../../utils/Classes';\nimport { Row, Column } from '@estee/elc-grid';\nimport { Heading2 } from '@estee/elc-typography';\n\ninterface ICategoryHeader {\n    categoryTag: string;\n}\n\nexport const StyledHeaderColumn = styled(Column)`\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n`;\n\nconst productTagHeaderWrapper = classes('product-tag-header-wrapper');\nconst productTagHeaderClassnames = classes('product-tag-header');\n\nexport const CategoryHeader = observer(function CategoryHeader(props: ICategoryHeader) {\n    return (\n        <Row>\n            <StyledHeaderColumn className={productTagHeaderWrapper}>\n                <Heading2 className={productTagHeaderClassnames}>{props.categoryTag}</Heading2>\n            </StyledHeaderColumn>\n        </Row>\n    );\n});\n","import * as React from 'react';\nimport styled from 'styled-components';\nimport { observer } from 'mobx-react';\nimport { classes } from '../../utils/Classes';\nimport { Row, Column } from '@estee/elc-grid';\nimport { PRODUCT_GRID_HEADER, PRODUCT_GRID_SUBHEADER } from '~constants/DataTestIdAttributes';\n\ninterface IProductGridHeaders {\n    productGridHeader?: string;\n    productGridSubheader?: string;\n    categoryHeaderH1?: boolean;\n}\n\nexport const StyledHeaderColumn = styled(Column)`\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n`;\n\nconst productGridHeaderWrapper = classes('product-grid-header-wrapper');\nconst productGridHeaderClassnames = classes('product-grid-header');\nconst productGridSubheaderClassnames = classes('product-grid-subheader');\n\nexport const ProductGridHeaders = observer(function ProductGridHeaders(props: IProductGridHeaders) {\n    const { productGridHeader, productGridSubheader, categoryHeaderH1 } = props;\n\n    if (!productGridHeader && !productGridSubheader) {\n        return null;\n    }\n\n    return (\n        <Row>\n            <StyledHeaderColumn className={productGridHeaderWrapper}>\n                {productGridHeader && !categoryHeaderH1 && (\n                    <div data-test-id={PRODUCT_GRID_HEADER} className={productGridHeaderClassnames}>\n                        {productGridHeader}\n                    </div>\n                )}\n                {productGridHeader && categoryHeaderH1 && (\n                    <h1 data-test-id={PRODUCT_GRID_HEADER} className={productGridHeaderClassnames}>\n                        {productGridHeader}\n                    </h1>\n                )}\n                {productGridSubheader && (\n                    <div\n                        data-test-id={PRODUCT_GRID_SUBHEADER}\n                        className={productGridSubheaderClassnames}\n                    >\n                        {productGridSubheader}\n                    </div>\n                )}\n            </StyledHeaderColumn>\n        </Row>\n    );\n});\n","import * as React from 'react';\nimport { Container } from '@estee/elc-grid';\nimport { configConsumer } from '@estee/elc-service';\nimport { observer } from 'mobx-react';\nimport { CategoryHeader } from './CategoryHeader';\nimport { ProductGridHeaders } from './ProductGridHeaders';\n\nexport interface IProductGridHeader {\n    config?: IProductGridHeaderConfig;\n    categoryTag: string;\n    isWrappedByContainer: boolean;\n}\n\ninterface IProductGridHeaderConfig {\n    productGridHeader?: string;\n    productGridSubheader?: string;\n    enableCategoryHeader?: boolean;\n    showDynamicCategoryHeader?: boolean;\n    categoryHeaderH1?: boolean;\n}\n\nexport const ProductGridHeader = configConsumer([\n    'productGridHeader',\n    'productGridSubheader',\n    'enableCategoryHeader',\n    'showDynamicCategoryHeader',\n    'categoryHeaderH1'\n])(\n    observer(function ProductGridHeader(props: IProductGridHeader) {\n        const {\n            productGridHeader,\n            productGridSubheader,\n            enableCategoryHeader,\n            showDynamicCategoryHeader,\n            categoryHeaderH1\n        } = props.config as IProductGridHeaderConfig;\n\n        const { categoryTag, isWrappedByContainer } = props;\n\n        if (!enableCategoryHeader) {\n            return null;\n        }\n\n        const generateContent = (): JSX.Element | null => {\n            // If grid header or subheader were provided, use them to fill the header.\n            if (productGridHeader || productGridSubheader) {\n                return (\n                    <ProductGridHeaders\n                        productGridHeader={productGridHeader}\n                        productGridSubheader={productGridSubheader}\n                        categoryHeaderH1={categoryHeaderH1}\n                    />\n                );\n            } else if (showDynamicCategoryHeader && categoryTag) {\n                // Fall back to default category header if enabled\n                return <CategoryHeader categoryTag={categoryTag} />;\n            }\n\n            return null;\n        };\n\n        const content = generateContent();\n\n        if (!content) {\n            return null;\n        }\n\n        return isWrappedByContainer ? <Container>{content}</Container> : content;\n    })\n);\n","import * as React from 'react';\nimport { configConsumer } from '@estee/elc-service';\nimport { observer } from 'mobx-react';\nimport { ProductAccordion } from '../product-accordion/ProductAccordion';\nimport { IProductBriefCollection } from '../product-brief-collection/ProductBriefCollection';\nimport { BreakpointsWrapper } from '../breakpoints-wrapper/BreakpointsWrapper';\nimport ProductGrid, { Formatter } from './ProductGrid';\nimport { Breakpoints } from '@estee/elc-base-theme';\nimport { IBreakpoints } from '~interfaces/IBreakpoints';\nimport { GridItem } from '~domain/entities/GridItem';\nimport { IProductCarousel } from 'src/internal/views/product-carousel/ProductCarousel';\nimport { ProductGridHeader } from './ProductGridHeader';\nimport { ISliderSettings } from '@estee/elc-slider';\n\nexport interface IProductGridCarousel {\n    config?: IProductGridCarouselConfig;\n    positionGridInsideAccordion: boolean;\n    isLoaded: boolean;\n    gridItems: GridItem[];\n    featuredProductId?: string;\n    setGridPosition(): void;\n    categoryTag: string;\n    carouselSettings?: ISliderSettings;\n}\n\ninterface IProductGridCarouselConfig {\n    accordionDefaultOpen?: boolean;\n    productGridBreakpoints: IBreakpoints;\n    enableAccordion?: boolean;\n}\n\nconst productAccordionChangeHandler = (\n    setGridPosition: () => void,\n    accordionDefaultOpen?: boolean\n) => (openIndex: number) => {\n    if (!accordionDefaultOpen && openIndex === 0) {\n        setGridPosition();\n    }\n};\n\nconst buildBriefProps = (props: IProductGridCarousel) => {\n    const { gridItems, featuredProductId, isLoaded, positionGridInsideAccordion } = props;\n\n    const briefProps: IProductBriefCollection = {\n        gridItems,\n        isLoaded,\n        featuredProductId,\n        positionGridInsideAccordion\n    };\n\n    return briefProps;\n};\n\nexport const ProductGridCarousel = configConsumer([\n    'accordionDefaultOpen',\n    'productGridBreakpoints',\n    'enableAccordion'\n])(\n    observer(function ProductGridCarousel(props: IProductGridCarousel) {\n        const {\n            productGridBreakpoints,\n            enableAccordion,\n            accordionDefaultOpen\n        } = props.config as IProductGridCarouselConfig;\n        const {\n            numColumnsMobile,\n            numColumnsDesktop,\n            numColumnsLargeScreen,\n            numColumnsExtraLargeScreen\n        } = productGridBreakpoints;\n\n        const carouselSettings = props.carouselSettings || {\n            dots: false,\n            infinite: false,\n            slidesToShow: numColumnsExtraLargeScreen,\n            slidesToScroll: 1,\n            responsive: [\n                {\n                    breakpoint: Breakpoints.extraLargeScreen,\n                    settings: {\n                        slidesToShow: numColumnsLargeScreen,\n                        slidesToScroll: 1,\n                        infinite: false,\n                        dots: false\n                    }\n                },\n                {\n                    breakpoint: Breakpoints.largeScreen,\n                    settings: {\n                        slidesToShow: numColumnsDesktop,\n                        slidesToScroll: 1,\n                        infinite: false,\n                        dots: false\n                    }\n                },\n                {\n                    breakpoint: Breakpoints.desktop,\n                    settings: {\n                        slidesToShow: numColumnsMobile,\n                        slidesToScroll: 1,\n                        infinite: false,\n                        dots: false,\n                        arrows: true\n                    }\n                }\n            ]\n        };\n\n        const productCarouselProps: IProductCarousel['config'] = {\n            carouselSettings,\n            gridItems: props.gridItems\n        };\n        const { categoryTag, setGridPosition } = props;\n\n        const productGrid = (\n            <>\n                <ProductGridHeader categoryTag={categoryTag} isWrappedByContainer={false} />\n                <BreakpointsWrapper breakpoints={productGridBreakpoints}>\n                    <ProductGrid\n                        formatter={Formatter.CAROUSEL}\n                        carouselProps={productCarouselProps}\n                        briefProps={buildBriefProps(props)}\n                    />\n                </BreakpointsWrapper>\n            </>\n        );\n\n        return enableAccordion ? (\n            <ProductAccordion\n                onChange={productAccordionChangeHandler(setGridPosition, accordionDefaultOpen)}\n            >\n                {productGrid}\n            </ProductAccordion>\n        ) : (\n            productGrid\n        );\n    })\n);\n","import { observer } from 'mobx-react';\nimport * as React from 'react';\n\ninterface IScrollIntoView {\n    children: JSX.Element;\n    offset?: number;\n    enabled?: boolean;\n}\n\n@observer\nexport class ScrollIntoView extends React.Component<IScrollIntoView> {\n    private refElement: React.RefObject<HTMLDivElement> = React.createRef();\n\n    public scrollIntoViewCallback = (offset?: number) => {\n        if (!this.refElement?.current) {\n            return null;\n        }\n\n        const _offset = offset || this.props.offset || 0;\n\n        if (this.refElement && this.refElement.current) {\n            const scrollTop = window.pageYOffset || document.documentElement.scrollTop;\n            const { top } = this.refElement.current.getBoundingClientRect() || {};\n\n            window.scrollTo({\n                top: scrollTop + top + _offset,\n                behavior: 'smooth'\n            });\n        }\n    };\n\n    render() {\n        if (!this.props.enabled) {\n            return this.props.children;\n        }\n\n        const childrenWithProps = React.cloneElement(this.props.children, {\n            scrollIntoView: this.scrollIntoViewCallback\n        });\n\n        return <div ref={this.refElement}>{childrenWithProps}</div>;\n    }\n}\n","import * as React from 'react';\nimport { observer } from 'mobx-react';\nimport { configConsumer } from '@estee/elc-service';\nimport { BreakpointsWrapper } from 'src/internal/views/breakpoints-wrapper/BreakpointsWrapper';\nimport styled from 'styled-components';\nimport { Container } from '@estee/elc-grid';\nimport { ContentSpacing } from '@estee/elc-base-theme';\nimport { PRODUCT_GRID_WRAPPER } from '~constants/DataTestIdAttributes';\nimport { ScrollIntoView } from 'src/internal/views/scroll-into-view/ScrollIntoView';\nimport ProductGrid, { Formatter } from 'src/internal/views/product-grid/ProductGrid';\nimport classnames from 'classnames';\nimport {\n    GridActionsBarTypes,\n    IGridActionsBarConfig\n} from 'src/internal/views/product-grid/GridHeaderBarWrapper';\nimport { IFiltersConfig } from '~interfaces/IFilters';\nimport { IBreakpoints } from '~interfaces/IBreakpoints';\nimport { IProductBriefCollection } from 'src/internal/views/product-brief-collection/ProductBriefCollection';\nimport { FilterSet } from '~domain/entities/FilterSet';\nimport { Filter } from '~domain/entities/Filter';\nimport { GridItem } from '~domain/entities/GridItem';\n\nexport interface IProductGridContent {\n    config?: IProductGridContentConfig;\n    setProductSortingDropdownValue(_: string, value: string): Promise<void>;\n    isAllGiftsFilterApplied: boolean;\n    appliedFilters: FilterSet[];\n    productsNumber: number;\n    isFilterDisplayStacked: boolean;\n    areFiltersApplied: boolean;\n    productSortingDropdownValue: string;\n    filters: FilterSet[];\n    scrollTopOffset: number;\n    totalAppliedFilters: number;\n    extractedAppliedFilters: Filter[];\n    positionGridInsideAccordion: boolean;\n    isLoaded: boolean;\n    gridItems: GridItem[];\n    featuredProductId?: string;\n}\n\ninterface IProductGridContentConfig {\n    hideSorting: boolean;\n    filters: IFiltersConfig;\n    productGridBreakpoints: IBreakpoints;\n    gridActionsBar?: IGridActionsBarConfig;\n}\n\nconst StyledContainer = styled(Container)`\n    margin-top: ${ContentSpacing.space20};\n`;\n\nconst buildBriefProps = (props: IProductGridContent) => {\n    const { gridItems, featuredProductId, isLoaded, positionGridInsideAccordion } = props;\n    const briefProps: IProductBriefCollection = {\n        gridItems,\n        isLoaded,\n        featuredProductId,\n        positionGridInsideAccordion\n    };\n\n    return briefProps;\n};\n\nexport const ProductGridContent = configConsumer([\n    'hideSorting',\n    'filters',\n    'productGridBreakpoints',\n    'gridActionsBar'\n])(\n    observer(function ProductGridContent(props: IProductGridContent) {\n        const config = props.config as IProductGridContentConfig;\n        const {\n            setProductSortingDropdownValue,\n            isAllGiftsFilterApplied,\n            appliedFilters,\n            productsNumber,\n            isFilterDisplayStacked,\n            areFiltersApplied,\n            productSortingDropdownValue,\n            filters: filtersProp,\n            scrollTopOffset,\n            totalAppliedFilters,\n            extractedAppliedFilters\n        } = props;\n\n        const gridWrapperClassNames = classnames('elc-product-grid-wrapper', {\n            'has-filters': filtersProp?.length > 0,\n            'filters-applied': areFiltersApplied\n        });\n        const {\n            hideSorting,\n            filters: filtersConfig,\n            productGridBreakpoints,\n            gridActionsBar\n        } = config;\n        const isStickyActionBar = gridActionsBar?.type === GridActionsBarTypes.STICKY;\n\n        return (\n            <BreakpointsWrapper breakpoints={productGridBreakpoints}>\n                <StyledContainer\n                    className={gridWrapperClassNames}\n                    data-test-id={PRODUCT_GRID_WRAPPER}\n                >\n                    <ScrollIntoView offset={-scrollTopOffset} enabled={isStickyActionBar}>\n                        <ProductGrid\n                            formatter={Formatter.DEFAULT}\n                            briefProps={buildBriefProps(props)}\n                            isAllGiftsFilterApplied={isAllGiftsFilterApplied}\n                            areFiltersApplied={areFiltersApplied}\n                            hideSorting={hideSorting}\n                            productsNumber={productsNumber}\n                            isFilterDisplayStacked={isFilterDisplayStacked}\n                            isFilterDisplayTabbed={!isFilterDisplayStacked}\n                            productSortingDropdownValue={productSortingDropdownValue}\n                            setProductSortingDropdownValue={setProductSortingDropdownValue}\n                            filterSets={filtersProp}\n                            appliedFilters={appliedFilters}\n                            totalAppliedFilters={totalAppliedFilters}\n                            appliedFiltersList={extractedAppliedFilters}\n                            filters={filtersConfig}\n                        />\n                    </ScrollIntoView>\n                </StyledContainer>\n            </BreakpointsWrapper>\n        );\n    })\n);\n","import * as React from 'react';\nimport { observer } from 'mobx-react';\nimport styled from 'styled-components';\nimport { addConfig, addContext, configConsumer } from '@estee/elc-service';\nimport type { ISliderSettings } from '@estee/elc-slider';\nimport { Column } from '@estee/elc-grid';\nimport type { IconTypes } from '@estee/elc-accordion';\nimport { contentSize } from '../../internal/constants/ProductGrid';\nimport type { ProductGridViewController } from '../../internal/controllers/ProductGridViewController';\nimport { CartLimitReachedModal } from '../../internal/views/cart-limit-modal/CartLimitReachedModal';\nimport { ProductAccordion } from '../../internal/views/product-accordion/ProductAccordion';\nimport { mergeConfigsFor } from '../../internal/utils/ConfigUtils';\nimport type {\n    IInventoryStatusSorting,\n    IProdcatConfig,\n    IProductBenefitTypes,\n    ISizePickerImages\n} from '../../internal/interfaces/IProdcat';\nimport type { IFilterData } from '../../internal/views/product-filters/IProductFilters';\nimport type { IFiltersConfig } from '../../internal/interfaces/IFilters';\nimport type { IProductImages } from '../../internal/interfaces/IProductImage';\nimport type { IBreakpoints } from '../../internal/interfaces/IBreakpoints';\nimport type { IOrderConfigCollection } from '../../internal/interfaces/IOrderableComponents';\nimport type { IGridActionsBarConfig } from 'src/internal/views/product-grid/GridHeaderBarWrapper';\nimport type { IItem } from '~api/interfaces/IItem';\nimport type { IParamsById } from '~api/interfaces/IParamsById';\nimport {\n    ProductGridCarousel,\n    IProductGridCarousel\n} from '../../internal/views/product-grid/ProductGridCarousel';\nimport {\n    IProductGridContent,\n    ProductGridContent\n} from '../../internal/views/product-grid/ProductGridContent';\nimport { ComponentTypes } from '~constants/ComponentTypes';\nimport { ProductGridHeader } from '../../internal/views/product-grid/ProductGridHeader';\n\nexport interface IContentItem {\n    nId: number | string;\n    nPsn: number;\n    nSize: contentSize;\n}\n\nexport interface ITranslationsOverwrites {\n    quickViewButtonLabel?: string;\n    ctaButtonLabel?: string;\n    pressedCtaButtonLabel?: string;\n}\n\nexport interface ICTAConfig {\n    enabled?: boolean;\n    label?: string;\n    absoluteUrl?: boolean;\n    url?: string;\n    newTab?: boolean;\n    ctaCustomStyleClassName?: string;\n    backgroundColor?: string;\n    borderColor?: string;\n    textColor?: string;\n}\n\nexport interface IProductGridConfig extends IProdcatConfig {\n    hideReadReviewsLink?: boolean;\n    items?: IItem[];\n    paramsById?: IParamsById;\n    featuredProductId?: string;\n    viewableInventoryStatuses?: string[];\n    productTags?: string[];\n    content?: IContentItem[];\n    productGridBreakpoints: IBreakpoints;\n    enableGridCarousel?: boolean;\n    carouselSettings?: ISliderSettings;\n    showSubDisplayName?: boolean;\n    toutWidth?: number;\n    toutHeight?: number;\n    ctaType?: string;\n    enableNotifyMe?: boolean;\n    enableQuickView?: boolean;\n    hideSorting?: boolean;\n    hideReviewsNumber?: boolean;\n    disableFeaturedProduct?: boolean;\n    filterData?: IFilterData;\n    featuredProductOverrideImage?: string;\n    gridAccordionIconType?: IconTypes;\n    enableAccordion?: boolean;\n    accordionDefaultOpen?: boolean;\n    accordionTitle?: string;\n    accordionSubtext?: string;\n    enableMobileQuickView?: boolean;\n    productGridHeader?: string;\n    productGridSubheader?: string;\n    sizePickerImages?: ISizePickerImages;\n    enableCategoryHeader?: boolean;\n    showDynamicCategoryHeader?: boolean;\n    translationsOverwrites?: ITranslationsOverwrites;\n    gridCTA?: ICTAConfig;\n    productImages?: IProductImages;\n    lazyloadProductGridItems?: boolean;\n    inventoryStatusSorting?: IInventoryStatusSorting;\n    productBenefitTypes?: IProductBenefitTypes;\n    enableProgressiveImages?: boolean;\n    lazyLoadRootMargin?: string;\n    filters?: IFiltersConfig;\n    showIncludeTaxLabel?: boolean;\n    componentElementsOrderConfig?: { [key: string]: IOrderConfigCollection };\n    loadCarouselFirstSlide?: boolean;\n    gridActionsBar?: IGridActionsBarConfig;\n    categoryHeaderH1?: boolean;\n}\n\nexport interface IFiltersTranslation {\n    filtersLabel: string;\n    clearFiltersLabel: string;\n    applyFiltersLabel: string;\n    filterByCategoryLabel: string;\n    filterByPriceLabel: string;\n    resultsLabel: string;\n    filterByLabel: string;\n    removeIconAriaLabel: string;\n    collapseIconAriaLabel: string;\n    expandIconAriaLabel: string;\n}\n\nexport interface IProductGridWrapper {\n    config: IProductGridConfig;\n    className?: string;\n    translations?: IFiltersTranslation;\n    viewController: ProductGridViewController;\n}\n\nexport const StyledHeaderColumn = styled(Column)`\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n`;\n@addContext()\n@addConfig(\n    ['prodcatConfig', 'features', 'itemMaxQuantity', 'sizePicker', 'gridActionsBar'],\n    mergeConfigsFor(ComponentTypes.PRODUCT_GRID)\n)\n@configConsumer([\n    'productGridBreakpoints',\n    'enableGridCarousel',\n    'carouselSettings',\n    'accordionDefaultOpen',\n    'enableAccordion',\n    'features',\n    'backorder',\n    'inventoryStatusSorting'\n])\n@observer\nclass ProductGridWrapper extends React.Component<IProductGridWrapper> {\n    public static displayName: string;\n    public gridRef: React.RefObject<HTMLDivElement> = React.createRef();\n\n    public async componentDidMount() {\n        await this.props.viewController.loaded(this.props);\n    }\n\n    async componentDidUpdate() {\n        if (!this.props.viewController.isLoaded) {\n            await this.props.viewController.loaded(this.props);\n        }\n    }\n\n    private getProductGridContentProps = (): IProductGridContent => {\n        const {\n            data: {\n                featuredProductId,\n                isAllGiftsFilterApplied,\n                appliedFilters,\n                productsNumber,\n                isFilterDisplayStacked,\n                areFiltersApplied,\n                productSortingDropdownValue,\n                scrollTopOffset,\n                gridItems\n            },\n            filters,\n            totalAppliedFilters,\n            extractedAppliedFilters,\n            positionGridInsideAccordion,\n            setProductSortingDropdownValue,\n            isLoaded\n        } = this.props.viewController;\n\n        return {\n            featuredProductId,\n            isAllGiftsFilterApplied,\n            appliedFilters,\n            productsNumber,\n            isFilterDisplayStacked,\n            areFiltersApplied,\n            productSortingDropdownValue,\n            filters,\n            scrollTopOffset,\n            totalAppliedFilters,\n            extractedAppliedFilters,\n            positionGridInsideAccordion,\n            isLoaded,\n            gridItems,\n            setProductSortingDropdownValue\n        };\n    };\n\n    private getProductGridCarouselProps = (): IProductGridCarousel => {\n        const {\n            positionGridInsideAccordion,\n            isLoaded,\n            setGridPosition,\n            data: { gridItems, featuredProductId, categoryTag }\n        } = this.props.viewController;\n\n        const { carouselSettings } = this.props.config;\n\n        return {\n            positionGridInsideAccordion,\n            isLoaded,\n            setGridPosition,\n            gridItems,\n            featuredProductId,\n            categoryTag,\n            carouselSettings\n        };\n    };\n\n    public render() {\n        const { enableGridCarousel, enableAccordion } = this.props.config;\n\n        const isLoaded = this.props.viewController.isLoaded;\n\n        if (!isLoaded) {\n            return null;\n        }\n\n        if (enableGridCarousel) {\n            return <ProductGridCarousel {...this.getProductGridCarouselProps()} />;\n        }\n\n        const { categoryTag } = this.props.viewController.data;\n        const productGridContent = <ProductGridContent {...this.getProductGridContentProps()} />;\n\n        return (\n            <>\n                <ProductGridHeader categoryTag={categoryTag} isWrappedByContainer />\n                {enableAccordion ? (\n                    <ProductAccordion>{productGridContent}</ProductAccordion>\n                ) : (\n                    productGridContent\n                )}\n                <CartLimitReachedModal />\n            </>\n        );\n    }\n}\n\nProductGridWrapper.displayName = 'ProductGrid';\n\nexport default ProductGridWrapper;\n","import { IBreakpoints, IBreakpointsWidth } from '../interfaces/IBreakpoints';\n\nconst getPercentByColumnNumber = (columns: number): string => {\n    return `${100 / columns}%`;\n};\n\nexport const getColumnsWidth = (breakpoints: IBreakpoints): IBreakpointsWidth => {\n    const {\n        numColumnsMobile,\n        numColumnsDesktop,\n        numColumnsLargeScreen,\n        numColumnsExtraLargeScreen\n    } = breakpoints;\n\n    return {\n        columnWidthMobile: getPercentByColumnNumber(numColumnsMobile),\n        columnWidthDesktop: getPercentByColumnNumber(numColumnsDesktop),\n        columnWidthLargeScreen: getPercentByColumnNumber(numColumnsLargeScreen),\n        columnWidthExtraLargeScreen: getPercentByColumnNumber(numColumnsExtraLargeScreen)\n    };\n};\n","import { Breakpoints } from '@estee/elc-base-theme';\nimport styled from 'styled-components';\nimport { IBreakpointsWidth } from '../interfaces/IBreakpoints';\n\ninterface IResponsiveGridWrapper {\n    breakpoints: IBreakpointsWidth;\n}\n\nexport const ResponsiveGridWrapper = styled.div<IResponsiveGridWrapper>`\n    display: grid;\n    grid-auto-flow: dense;\n    grid-gap: 0;\n    grid-template-columns: repeat(\n        auto-fill,\n        minmax(${({ breakpoints: { columnWidthMobile } }) => columnWidthMobile}, 1fr)\n    );\n    @media (min-width: ${Breakpoints.desktop}px) {\n        grid-template-columns: repeat(\n            auto-fill,\n            minmax(${({ breakpoints: { columnWidthDesktop } }) => columnWidthDesktop}, 1fr)\n        );\n    }\n    @media (min-width: ${Breakpoints.largeScreen}px) {\n        grid-template-columns: repeat(\n            auto-fill,\n            minmax(${({ breakpoints: { columnWidthLargeScreen } }) => columnWidthLargeScreen}, 1fr)\n        );\n    }\n    @media (min-width: ${Breakpoints.LargeScreen}px) {\n        grid-template-columns: repeat(\n            auto-fill,\n            minmax(${({ breakpoints: { columnWidthExtraLargeScreen } }) => columnWidthExtraLargeScreen}, 1fr)\n        );\n    }\n`;\n","import * as React from 'react';\nimport { observer } from 'mobx-react';\nimport { IBreakpoints } from '../../interfaces/IBreakpoints';\nimport { classes } from '~utils/Classes';\nimport { BREAKPOINTS_WRAPPER } from '~constants/DataTestIdAttributes';\n\nexport interface IBreakpointsWrapper {\n    children?: JSX.Element | JSX.Element[];\n    breakpoints: IBreakpoints;\n}\n\nexport const BreakpointsWrapper = observer(function BreakpointsWrapper({\n    breakpoints,\n    children\n}: IBreakpointsWrapper) {\n    const {\n        numColumnsMobile,\n        numColumnsDesktop,\n        numColumnsLargeScreen,\n        numColumnsExtraLargeScreen\n    } = breakpoints;\n\n    const breakpointsWrapperClassName = classes('breakpoints-wrapper');\n\n    return (\n        <div\n            className={breakpointsWrapperClassName}\n            data-test-id={BREAKPOINTS_WRAPPER}\n            data-num-columns-mobile={numColumnsMobile}\n            data-num-columns-desktop={numColumnsDesktop}\n            data-num-columns-large={numColumnsLargeScreen}\n            data-num-columns-extra-large={numColumnsExtraLargeScreen}\n        >\n            {children}\n        </div>\n    );\n});\n","import * as React from 'react';\nimport { observer } from 'mobx-react';\nimport { configConsumer } from '@estee/elc-service';\nimport { SliderView, ISliderSettings, ISliderBreakpoints } from '@estee/elc-slider';\nimport { Container } from '@estee/elc-grid';\nimport styled from 'styled-components';\nimport { Breakpoints, ContentSpacing } from '@estee/elc-base-theme';\nimport { IContentItem } from '../../../exported/product-grid-wrapper/ProductGridWrapper';\nimport { Product } from '../../domain/entities/Product';\nimport { GridItem } from '../../domain/entities/GridItem';\nimport { DEFAULT_CAROUSEL_SETTINGS, gridItemType } from '../../constants/ProductGrid';\nimport { CollectionItem, CollectionItemType } from '../product-grid/CollectionItem';\nimport { ComponentTypes } from '../../constants/ComponentTypes';\nimport { classes } from '../../utils/Classes';\nimport { PRODUCT_CAROUSEL } from '~constants/DataTestIdAttributes';\nimport { getResponsiveConfig } from '~utils/ConfigUtils';\n\nexport interface IProductCarousel {\n    config: {\n        products?: Product[];\n        gridItems?: GridItem[];\n        content?: IContentItem[];\n        carouselSettings?: ISliderSettings;\n        defaultCarouselSettings?: ISliderSettings;\n        toutWidth?: number;\n        toutHeight?: number;\n        loadCarouselFirstSlide?: boolean;\n    };\n    className?: string;\n    disableFullHeight?: boolean;\n}\n\nconst SliderViewStyled = styled.div`\n    margin-bottom: ${ContentSpacing.space20};\n\n    .slick-track {\n        margin-left: 0;\n        padding: ${ContentSpacing.space4} 0;\n        display: flex;\n    }\n\n    .slick-slide {\n        & > div {\n            height: ${(props) => (props.theme.disableFullHeight ? 'auto' : '100%')};\n        }\n\n        height: auto;\n        float: none;\n        margin: 0 ${ContentSpacing.space4};\n    }\n\n    [dir='rtl'] .slick-track {\n        margin-right: 0;\n        margin-left: auto;\n    }\n\n    .elc-slider-arrow-wrapper {\n        &::before {\n            content: none;\n        }\n        &.slick-prev {\n            left: -15px;\n        }\n\n        [dir='rtl'] &.slick-prev {\n            left: 0;\n            right: -15px;\n        }\n    }\n`;\n@configConsumer(['loadCarouselFirstSlide'])\n@observer\nexport class ProductCarousel extends React.Component<IProductCarousel> {\n    public static displayName: string;\n\n    public overrideCarouselSettings = () => {\n        const { carouselSettings, defaultCarouselSettings, loadCarouselFirstSlide } =\n            this.props.config;\n\n        if (!carouselSettings) {\n            return defaultCarouselSettings || DEFAULT_CAROUSEL_SETTINGS;\n        }\n\n        const { responsive: responsiveDefault, ...restDefaultProperties } =\n            DEFAULT_CAROUSEL_SETTINGS;\n\n        const { responsive: responsiveOverrideSettings, ...restOverrideProperties } =\n            carouselSettings;\n\n        const restSettings = {\n            ...restDefaultProperties,\n            ...restOverrideProperties\n        };\n\n        if (!responsiveOverrideSettings) {\n            const settings = {\n                ...restSettings,\n                responsive: responsiveDefault\n            };\n\n            return { ...settings };\n        }\n        const responsiveSettings = responsiveDefault.map(function (responsive, index) {\n            const responsiveOverrides =\n                getResponsiveConfig(responsive.breakpoint, responsiveOverrideSettings) || {};\n\n            return {\n                ...responsive,\n                settings: {\n                    ...responsive.settings,\n                    ...responsiveOverrides\n                }\n            };\n        });\n\n        const finalSettings = {\n            ...restSettings,\n            lazyLoad: loadCarouselFirstSlide ? 'ondemand' : null,\n            responsive: responsiveSettings\n        };\n\n        return { ...finalSettings };\n    };\n\n    public mobileCarouselSettings = (carouselSettings: ISliderSettings): ISliderBreakpoints =>\n        carouselSettings?.responsive?.find(\n            (setting) => setting.breakpoint === Breakpoints.desktop\n        ) as ISliderBreakpoints;\n\n    private lazyLoadImage = (positionIndex: number, carouselSettings: ISliderSettings) => {\n        const mobileSettings = this.mobileCarouselSettings(carouselSettings);\n        const lazyLoadImageMobile = positionIndex >= Number(mobileSettings.settings.slidesToShow);\n        const lazyLoadImageDesktop = positionIndex >= Number(carouselSettings.slidesToShow);\n\n        return {\n            lazyLoadImageMobile,\n            lazyLoadImageDesktop\n        };\n    };\n\n    private renderProductItem = (\n        product: Product,\n        carouselSettings: ISliderSettings,\n        positionIndex: number\n    ) => {\n        const { lazyLoadImageMobile, lazyLoadImageDesktop } = this.lazyLoadImage(\n            positionIndex,\n            carouselSettings\n        );\n\n        return (\n            product && (\n                <CollectionItem\n                    key={`product-item-${product.productId}`}\n                    id={product.productId}\n                    collectionItem={CollectionItemType.PRODUCT}\n                    productBriefProps={{\n                        componentType: ComponentTypes.PRODUCT_BRIEF,\n                        product,\n                        lazyLoadImageMobile,\n                        lazyLoadImageDesktop\n                    }}\n                />\n            )\n        );\n    };\n\n    private renderGridItems(\n        item: GridItem,\n        carouselSettings: ISliderSettings,\n        positionIndex: number\n    ) {\n        const { lazyLoadImageMobile, lazyLoadImageDesktop } = this.lazyLoadImage(\n            positionIndex,\n            carouselSettings\n        );\n        switch (item.itemType) {\n            case gridItemType.product:\n            case gridItemType.featuredProduct:\n                return item.product ? (\n                    <CollectionItem\n                        key={`grid-item-${item.itemId}`}\n                        id={item.itemId}\n                        collectionItem={CollectionItemType.PRODUCT}\n                        productBriefProps={{\n                            componentType: ComponentTypes.PRODUCT_BRIEF,\n                            product: item.product,\n                            lazyLoadImageMobile,\n                            lazyLoadImageDesktop\n                        }}\n                    />\n                ) : (\n                    <></>\n                );\n            default:\n                return (\n                    <CollectionItem\n                        key={`default-item-${item.itemId}`}\n                        id={item.itemId}\n                        collectionItem={CollectionItemType.TOUT}\n                    />\n                );\n        }\n    }\n\n    public render() {\n        const carouselContainerClassNames = classes('product-carousel-container');\n        const carouselSettings = this.overrideCarouselSettings();\n        const {\n            disableFullHeight,\n            config: { gridItems, products }\n        } = this.props;\n\n        let carouselItems: React.ReactElement[] = [];\n\n        if (gridItems && gridItems.length > 0) {\n            carouselItems = gridItems.reduce(\n                (accumulator: React.ReactElement[], item, currentIndex) => {\n                    if (item.itemType !== gridItemType.featuredProduct) {\n                        accumulator.push(\n                            this.renderGridItems(item, carouselSettings, currentIndex)\n                        );\n                    }\n\n                    return accumulator;\n                },\n                []\n            );\n        } else if (products && products.length > 0) {\n            carouselItems = products.map((product, index) =>\n                this.renderProductItem(product, carouselSettings, index)\n            );\n        }\n\n        return (\n            carouselItems.length > 0 && (\n                <Container data-test-id={PRODUCT_CAROUSEL} className={carouselContainerClassNames}>\n                    <SliderViewStyled\n                        className=\"elc-product-carousel-slider-view\"\n                        theme={{ disableFullHeight }}\n                    >\n                        <SliderView sliderSettings={carouselSettings} items={carouselItems} />\n                    </SliderViewStyled>\n                </Container>\n            )\n        );\n    }\n}\n\nProductCarousel.displayName = 'ProductCarousel';\n","import * as React from 'react';\nimport { observer } from 'mobx-react';\nimport styled from 'styled-components';\nimport { classes } from '../../utils/Classes';\nimport { ProductContent } from '../product-content/ProductContent';\nimport { PRODUCT_TOUT_WRAPPER } from '~constants/DataTestIdAttributes';\n\nexport interface IProductToutProps {\n    toutWidth?: number;\n    toutHeight?: number;\n    className?: string;\n    nid: number;\n}\n\nconst ProductToutWrapper = styled.div`\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    width: 100%;\n    height: 100%;\n\n    /*\n        Fallback for touts with no content displayed\n    */\n    .elc-service-view-renderer {\n        width: 100%;\n        height: 100%;\n\n        & > div:empty {\n            height: 100%;\n            background-color: #eee;\n        }\n    }\n`;\n\nexport const ProductTout = observer(function ProductTout(props: IProductToutProps) {\n    const productToutClassNames = classes('product-tout-wrapper');\n\n    return (\n        <ProductToutWrapper data-test-id={PRODUCT_TOUT_WRAPPER} className={productToutClassNames}>\n            <ProductContent nid={props.nid} />\n        </ProductToutWrapper>\n    );\n});\n","import * as React from 'react';\nimport { observer } from 'mobx-react';\nimport { ProductTout } from '../product-tout/ProductTout';\nimport { configConsumer } from '@estee/elc-service';\nimport { IProductBriefConfig, IProductBriefProps } from '~interfaces/IProductBrief';\nimport ProductBrief from 'src/exported/product-brief/ProductBrief';\n\nexport enum CollectionItemType {\n    PRODUCT = 'product',\n    TOUT = 'tout',\n    FEATURED_PRODUCT = 'featured'\n}\n\nexport interface ICollectionItemProps {\n    collectionItem: CollectionItemType;\n    productBriefProps?: IProductBriefProps;\n    id: number | string;\n    config?: IProductBriefConfig;\n}\n\n@configConsumer([\n    'componentElementsOrderConfig',\n    'enableClickableBrief',\n    'productBenefitTypes',\n    'translationsOverwrites',\n    'imageCarouselSettings'\n])\n@observer\nexport class CollectionItem extends React.Component<ICollectionItemProps> {\n    public static displayName: string;\n\n    public getBrief() {\n        const props = {\n            config: {\n                ...(this.props.productBriefProps as IProductBriefProps),\n                ...this.props.config\n            }\n        };\n\n        return <ProductBrief {...props} />;\n    }\n\n    render() {\n        const { collectionItem, id } = this.props;\n\n        switch (collectionItem) {\n            case CollectionItemType.PRODUCT:\n                return this.getBrief();\n            case CollectionItemType.TOUT:\n                return <ProductTout nid={id as number} />;\n            default:\n                return null;\n        }\n    }\n}\n\nCollectionItem.displayName = 'CollectionItem';\n"],"names":["ProductAccordion","observer","props","productAccordionClassNames","productAccordionLabelClassNames","config","gridAccordionIconType","iconType","accordionDefaultOpen","accordionTitle","accordionSubtext","onChange","openIndex","Accordion","className","dataTestId","LabelSlide","id","title","children","DefaultColumn","ContentSpacing","Breakpoints","columns","rows","CarouselColumn","ColumnRenderer","isCarousel","ColumnWrapper","PRODUCT_BRIEF_CLASS_NAMES","Object","freeze","GRID_ITEM_CLASS_NAME","COLUMN_WIDTH_SELECTOR","ProductBriefItem","getOverrideImage","item","imageOverride","itemType","isFeatured","gridItem","this","areFiltersApplied","getBriefProps","featuredProductOverrideImage","isLoaded","key","itemId","positionIndex","isMobile","componentType","ComponentTypes","render","componentElementsOrderConfig","breakpoints","lazyLoadImageMobile","Number","numColumnsMobile","lazyLoadImageDesktop","numColumnsDesktop","product","CollectionItem","collectionItem","productBriefProps","ProductBriefViewContent","shouldRenderItem","enableGridCarousel","gridItems","reduce","components","push","w","h","ProductBriefCollection","productBriefViewClassNames","carouselWrapperRowClassNames","productGridBreakpoints","ResponsiveGridWrapper","R","Row","ProductBriefCollectionWrapper","minWidth","maxWidth","MobileSelect","MobileSortingDropdown","sortByLabel","translations","mobileSortOptions","optionsArray","map","option","value","label","productSortingDropdownValue","event","setProductSortingDropdownValue","currentTarget","name","StyledDropdown","ProductSortingDropdown","priceLowToHigh","priceHighToLow","topRated","SortingTypes","orderByNameDropDownClassNames","dropdownDataTestId","options","selectedValue","translationFields","OrderableFilters","constructor","super","handleFilterSetToggle","filterSet","allowAllFiltersCollapsed","filtersConfig","filterSetsConfig","filterSets","type","activeFilterSets","filter","_filterSet","isOpen","toggleOpenState","setOpenState","toggleFilters","productFiltersViewController","data","isFiltersModalOpen","onCloseFiltersClick","onOpenFiltersClick","closeOverlayHandler","scrollToGridTop","setTimeout","diContainer","productFiltersOrder","filtersOrderConfig","filtersAsCheckboxes","filterOptions","activeFilterSet","activeFilter","isFiltersOverlayOpen","orderableFiltersWrapperClassNames","appliedFilters","length","filtersModalClassnames","featureConfig","onClearAllAppliedFilters","totalAppliedFilters","filterSetConfig","itemsNumber","productsNumber","showIndividualFilterByLabel","selectedFilterValues","isOverlayOpen","closeOverlay","closeOnOverlayMaskClick","overlayClassNames","keys","sectionName","OrderRender","orderConfig","serviceName","viewRegistry","addContext","addTranslation","GridActionsBarTypes","StyledRow","GridActionsBarWrapper","gridActionsBar","StickyWrapper","stickyElementsSelectors","ItemAboveViewport","ref","scrollHandler","scrollTimeout","clearTimeout","updateAboveScroll","top","current","getBoundingClientRect","isAboveViewPort","componentDidMount","window","addEventListener","componentWillUnmount","removeEventListener","componentClassName","component","Formatter","ProductCTAWrapper","ProductCTA","backgroundColor","borderColor","ProductCTAText","textColor","getProductCTA","productCTAWrapperClassNames","gridCTA","absoluteUrl","url","newTab","ctaCustomStyleClassName","productCTAClassNames","ctaURL","RegExp","test","ctaUrlTarget","ctaLabel","href","target","componentDidUpdate","oldProps","appliedFiltersList","scrollIntoView","getSorting","displaySortingDropdown","sortWrapperClassNames","getHeaderBarContent","wrapperClassName","hideSorting","isFilterEnabled","enabled","getHeaderBar","headerBarClassNames","headerBarMobileClassNames","filters","desktopConfig","mobileConfig","responsive","carouselProps","briefProps","isAllGiftsFilterApplied","formatter","gridCTAEnabled","productGridCTA","ProductCarousel","StyledHeaderColumn","Column","productTagHeaderWrapper","productTagHeaderClassnames","CategoryHeader","categoryTag","productGridHeaderWrapper","productGridHeaderClassnames","productGridSubheaderClassnames","ProductGridHeaders","productGridHeader","productGridSubheader","categoryHeaderH1","ProductGridHeader","enableCategoryHeader","showDynamicCategoryHeader","isWrappedByContainer","content","Container","productAccordionChangeHandler","setGridPosition","buildBriefProps","featuredProductId","positionGridInsideAccordion","ProductGridCarousel","enableAccordion","numColumnsLargeScreen","numColumnsExtraLargeScreen","productCarouselProps","carouselSettings","dots","infinite","slidesToShow","slidesToScroll","breakpoint","settings","arrows","productGrid","BreakpointsWrapper","CAROUSEL","ScrollIntoView","refElement","scrollIntoViewCallback","offset","_offset","scrollTop","pageYOffset","document","documentElement","scrollTo","behavior","childrenWithProps","StyledContainer","ProductGridContent","isFilterDisplayStacked","filtersProp","scrollTopOffset","extractedAppliedFilters","gridWrapperClassNames","isStickyActionBar","STICKY","DEFAULT","isFilterDisplayTabbed","ProductGridWrapper","gridRef","getProductGridContentProps","viewController","getProductGridCarouselProps","loaded","productGridContent","CartLimitReachedModal","addConfig","displayName","getPercentByColumnNumber","getColumnsWidth","columnWidthMobile","columnWidthDesktop","columnWidthLargeScreen","columnWidthExtraLargeScreen","breakpointsWrapperClassName","SliderViewStyled","theme","disableFullHeight","overrideCarouselSettings","defaultCarouselSettings","loadCarouselFirstSlide","responsiveDefault","restDefaultProperties","responsiveOverrideSettings","restOverrideProperties","restSettings","responsiveSettings","index","responsiveOverrides","finalSettings","lazyLoad","mobileCarouselSettings","find","setting","lazyLoadImage","mobileSettings","renderProductItem","productId","renderGridItems","carouselContainerClassNames","products","carouselItems","accumulator","currentIndex","sliderSettings","items","ProductToutWrapper","ProductTout","productToutClassNames","ProductContent","nid","CollectionItemType","getBrief","ProductBrief"],"sourceRoot":""}