{"version":3,"sources":["webpack:///./src/internal/views/common/ColumnRenderer.tsx","webpack:///./src/internal/constants/ProductBriefCollection.ts","webpack:///./src/internal/views/product-brief-collection/ProductBriefCollection.tsx","webpack:///./src/internal/views/product-brief-collection/ProductBriefCollectionWrapper.tsx","webpack:///./src/internal/views/product-filters/components/CheckboxFilter.tsx","webpack:///./src/internal/views/product-filters/components/ButtonFilter.tsx","webpack:///./src/internal/views/product-filters/components/CategoryFiltersItem.tsx","webpack:///./src/internal/views/product-filters/components/ProductsNo.tsx","webpack:///./src/internal/views/product-filters/FilterItemWrapper.tsx","webpack:///./src/internal/views/product-filters/components/FilterItem.tsx","webpack:///./src/internal/views/product-filters/components/FiltersList.tsx","webpack:///./src/internal/utils/splitCamelCase.ts","webpack:///./src/internal/views/product-filters/components/ActiveFiltersNo.tsx","webpack:///./src/internal/views/product-filters/components/FiltersSets.tsx","webpack:///./node_modules/elc-icons/src/views/FilterIcon.tsx","webpack:///./src/internal/views/product-filters/components/ClearAllFilters.tsx","webpack:///./src/internal/views/product-filters/DesktopFilters.tsx","webpack:///./src/internal/views/product-filters/MobileFiltersModal.tsx","webpack:///./src/internal/views/product-filters/MobileFilters.tsx","webpack:///./src/internal/views/product-filters/FiltersConfig.ts","webpack:///./src/internal/views/product-grid/ProductGridFilters.tsx","webpack:///./src/internal/views/product-grid/ProductGrid.tsx","webpack:///./src/internal/views/product-grid/MobileSortingDropdown.tsx","webpack:///./src/internal/views/product-grid/ProductSortingDropdown.tsx","webpack:///./src/internal/views/product-accordion/ProductAccordion.tsx","webpack:///./src/internal/views/product-grid/CategoryHeader.tsx","webpack:///./src/internal/views/product-grid/ProductGridHeaders.tsx","webpack:///./src/exported/product-grid-wrapper/ProductGridWrapper.tsx"],"names":["TIME_DURATION","DefaultColumn","div","ContentSpacing","space8","Breakpoints","desktop","props","columns","rows","CarouselColumn","this","isCarousel","ColumnWrapper","className","children","PRODUCT_BRIEF_CLASS_NAMES","Object","freeze","GRID_ITEM_CLASS_NAME","COLUMN_WIDTH_SELECTOR","ITEMS_CLASSNAME","ProductBriefWrapper","breakpoints","columnWithMobile","columnWithDesktop","largeScreen","columnWithLargeScreen","LargeScreen","columnWithExtraLargeScreen","getColumnsWith","config","numColumnsMobile","numColumnsDesktop","numColumnsLargeScreen","numColumnsExtraLargeScreen","getPercentByColumnNumber","renderBriefViewContent","gridItems","enableGridCarousel","isMobile","reduce","components","item","push","key","itemId","w","h","itemType","getItemToRender","renderBriefView","isLoaded","Row","imageOverride","featuredProduct","gridItem","areFiltersApplied","hideProductBadge","showSubDisplayName","hideProductPrice","hideProductPriceRange","hideProductRating","ctaType","enableNotifyMe","enableQuickView","enableMobileQuickView","productGridHideReadReviewsLink","hideReviewsNumber","enableHoverInteraction","enableShadePicker","enableSizePicker","shortDescriptionLocation","enableProductDetailLink","enableQuickViewShortcut","featuredProductOverrideImage","enableLearnMoreLink","autoReplenishOptions","autoReplenishToggleType","enableNumberShades","sizePickerImages","hideProductPricePerUnit","showProductQuantitySelector","hideEmptyStars","enableAutoReplenishment","translationsOverwrites","productImages","lazyLoadGridItem","productBenefitTypes","positionIndex","getOverrideImage","isFeatured","product","CollectionItem","collectionItem","PRODUCT","id","productBriefProps","getBriefProps","TOUT","productBriefViewClassNames","minWidth","maxWidth","StyledLabel","space24","space16","space20","CheckboxFilter","classnames","disabled","CheckBox","enabled","label","value","onChange","onFilterSelect","isChecked","isSelected","StyledButton","Button","ButtonFilter","onClick","CategoryFiltersButton","FilterItem","checkboxFilter","onSelectFilterClick","StyledResultsRow","space12","styledResultsRowClassnames","styledResultsLabelClassnames","productsNumber","translations","resultsLabel","StyledFilterButton","space6","StyledRemoveIcon","RemoveIcon","ariaLabel","onRemoveTag","filter","setActiveState","appliedFiltersClassnames","StyledSelectedTagsRow","space40","styledSelectedCategoryRowClassnames","applyFiltersLabel","appliedFilters","length","filterSet","concat","activeFilters","map","splitCamelCase","text","split","join","ActiveFiltersWrapper","span","filtersNo","StyledCategory","isCategoryTagSelected","StyledCol","Column","StyledRow","StyledButtonRow","filterCategory","active","filterSets","styledButtonRowClassnames","filters","option","keyNumber","toggleActiveState","checkboxFilters","shouldHideFiltersForSet","getSelectedFilterSet","alwaysOn","showFiltersWhenToggled","isOpen","styledCategoryRowClassnames","handleFilterSetToggle","xs","sm","md","lg","computeStyledCategoryClassName","filterByLabel","getFilters","image","Icon","size","clearAllButtonClassnames","clearFiltersLabel","StyledToggleButton","clearAllFilters","productFiltersViewController","onClearAllAppliedFilters","singleFilterToggle","allowAllFiltersCollapsed","activeFilterSets","_filterSet","setOpenState","toggleOpenState","toggleFilters","data","isFiltersModalOpen","onCloseFiltersClick","onOpenFiltersClick","diContainer","get","showToggler","shouldHideSelectedFilterSet","selectedFilterSet","find","filtersAsCheckboxes","shouldHideFilterSets","alwaysToggled","filtersToggleClassNames","filtersLabel","totalAppliedFilters","getFiltersToggle","getFilterSets","getAppliedFilters","getClearFiltersCTA","Wrapper","FilterButton","MobileFiltersModal","onOpenFilters","onCloseFilters","mobileFiltersModalWrapperClassnames","filtersModalButtonClassnames","filtersModalClassnames","ResponsiveModal","title","deactivateModal","HeaderWrapper","FiltersTitle","ModalCTAContainer","removeIconAriaLabel","isFilterInProgress","applyFiltersClassname","applyFiltersLabelClassnames","mobileTagFiltersTitleClassnames","removeIconWrapperClassnames","headerWrapperClassnames","ctaWrapperClassnames","FILTER_TYPES","tabbedFiltersConfig","type","CHIPS","stackedFiltersConfig","FULL_WIDTH","filtersConfig","StyledResultsColumn","styledMobileResultsClassnames","styledMobileResultsLabelClassnames","filtersDisplayType","Formatter","MobileSelect","select","space10","MobileSortingDropdown","sortByLabel","onSelectValue","event","setProductSortingDropdownValue","currentTarget","name","mobileSortOptions","optionsArray","productSortingDropdownValue","StyledDropdown","Dropdown","ProductSortingDropdown","priceLowToHigh","priceHighToLow","topRated","SortingTypes","SORT_BY_LABEL","SORT_TOP_RATED","SORT_PRICE_HIGH_TO_LOW","SORT_PRICE_LOW_TO_HIGH","orderByNameDropDownClassNames","dropdownDataTestId","options","dataTestId","selectedValue","QUICK_VIEW_SELECTOR_CLASSNAME","ProductCTAWrapper","ProductCTA","a","space60","StickyRow","getProductCTA","productGridCTAConfig","productCTAWrapperClassNames","productCTAClassNames","absoluteUrl","url","newTab","ctaURL","baseUrl","RegExp","test","ctaUrlTarget","href","target","displaySortingDropdown","sortWrapperClassNames","wrapperClassName","hideSorting","enableFilters","getSorting","filterClassName","getFilterBarContent","carouselProps","briefProps","isAllGiftsFilterApplied","formatter","positionGridInsideAccordion","productGridCTA","CAROUSEL","ProductCarousel","getFilterBar","defaultProps","products","hideReadReviewsLink","product_full","product_brief","quickshop","CHECKBOX","defaultBreakpoints","DEFAULT","ProductAccordion","productAccordionClassNames","iconType","accordionDefaultOpen","accordionTitle","accordionSubtext","openIndex","Accordion","LabelSlide","StyledHeaderColumn","productTagHeaderWrapper","productTagHeaderClassnames","CategoryHeader","categoryTag","productGridHeaderWrapper","productGridHeaderClassnames","productGridSubheaderClassnames","ProductGridHeaders","productGridHeader","productGridSubheader","StyledContainer","Container","viewController","featuredProductId","propsConfig","productGridBreakpoints","productGridEnableSizePicker","lazyloadProductGridItems","renderGridHeader","enableCategoryHeader","showDynamicCategoryHeader","setGridPosition","renderGridCarousel","gridCTA","productCarouselProps","carouselSettings","dots","infinite","slidesToShow","slidesToScroll","responsive","breakpoint","extraLargeScreen","settings","arrows","productCarouselEnableSizePicker","productGrid","enableAccordion","gridAccordionIconType","handleState","loaded","isFilterDisplayStacked","filterData","isFilterDisplayTabbed","header","getMainGridContent","renderContainer","CartLimitReachedModal","displayName"],"mappings":"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","file":"ProductGrid.51205e74c9fd07b02373.bundle.js","sourcesContent":["import * as React from 'react';\nimport styled from 'styled-components';\nimport { ContentSpacing, Breakpoints } from '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`\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 ${props => props.columns};\n grid-row-end: span ${props => props.rows};\n width: auto;\n }\n &:hover {\n z-index: 1;\n }\n`;\n\nconst CarouselColumn = styled.div`\n padding: ${ContentSpacing.space8};\n`;\n\nexport class ColumnRenderer extends React.Component {\n public render() {\n const { isCarousel = false, columns = 1, rows = 1 } = this.props;\n const ColumnWrapper = isCarousel ? CarouselColumn : DefaultColumn;\n\n return (\n \n {this.props.children}\n \n );\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 { Row } from 'elc-grid';\nimport { gridItemType } from '../../constants/ProductGrid';\nimport { GridItem } from '../../domain/entities/GridItem';\nimport { ColumnRenderer } from '../common/ColumnRenderer';\nimport { CollectionItem, CollectionItemType } from '../product-grid/CollectionItem';\nimport {\n ISizePickerImages,\n IShortDescriptionConfig,\n IProductBenefitTypes\n} from '../../interfaces/IProdcat';\nimport { TOGGLE_TYPE } from '../../constants/AutoReplenish';\nimport { classes } from '../../utils/Classes';\nimport {\n ITranslationsOverwrites,\n IProductImages\n} from '../../../exported/product-grid-wrapper/ProductGridWrapper';\nimport { PRODUCT_BRIEF_CLASS_NAMES } from '../../constants/ProductBriefCollection';\nimport styled from 'styled-components';\nimport { Breakpoints } from 'elc-base-theme';\n\nexport interface IProductBriefWrapper {\n breakpoints: IBreakpointsWidth;\n}\n\nexport interface IBreakpointsWidth {\n columnWithMobile: string;\n columnWithDesktop: string;\n columnWithLargeScreen: string;\n columnWithExtraLargeScreen: string;\n}\n\nexport interface IBreakpoints {\n numColumnsMobile: number;\n numColumnsDesktop: number;\n numColumnsLargeScreen: number;\n numColumnsExtraLargeScreen: number;\n}\n\nconst ITEMS_CLASSNAME = 'js-grid-styled-column';\n\nexport interface IProductBriefCollection {\n config: {\n gridItems: GridItem[];\n breakpoints: IBreakpoints;\n defaultBreakpoints: IBreakpoints;\n hideProductBadge?: boolean;\n showSubDisplayName?: boolean;\n hideProductPrice?: boolean;\n hideProductPriceRange?: boolean;\n hideProductRating?: boolean;\n ctaType?: string;\n enableNotifyMe?: boolean;\n enableQuickView?: boolean;\n enableMobileQuickView?: boolean;\n toutWidth?: number;\n toutHeight?: number;\n hideReviewsNumber?: boolean;\n productGridHideReadReviewsLink?: boolean;\n enableGridCarousel?: boolean;\n featuredProductId?: string;\n enableHoverInteraction?: boolean;\n enableShadePicker?: boolean;\n enableSizePicker?: boolean;\n shortDescriptionLocation?: IShortDescriptionConfig;\n enableProductDetailLink?: boolean;\n enableQuickViewShortcut?: boolean;\n featuredProductOverrideImage?: string;\n enableLearnMoreLink?: boolean;\n isLoaded: boolean;\n autoReplenishOptions: number[];\n autoReplenishToggleType?: TOGGLE_TYPE;\n enableNumberShades?: boolean;\n sizePickerImages?: ISizePickerImages;\n hideProductPricePerUnit?: boolean;\n showProductQuantitySelector?: boolean;\n hideEmptyStars?: boolean;\n enableAutoReplenishment?: boolean;\n translationsOverwrites?: ITranslationsOverwrites;\n positionGridInsideAccordion?: boolean;\n productImages?: IProductImages;\n lazyLoadGridItem?: boolean;\n productBenefitTypes?: IProductBenefitTypes;\n };\n className?: string;\n isMobile: boolean;\n areFiltersApplied?: boolean;\n isAllGiftsFilterApplied?: boolean;\n}\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface IProductBriefCollectionWrapper extends Omit {}\n\nconst ProductBriefWrapper = styled.div`\n display: grid;\n grid-auto-flow: dense;\n grid-gap: 0;\n grid-template-columns: repeat(\n auto-fill,\n minmax(${({ breakpoints }) => breakpoints.columnWithMobile}, 1fr)\n );\n @media (min-width: ${Breakpoints.desktop}px) {\n grid-template-columns: repeat(\n auto-fill,\n minmax(${({ breakpoints }) => breakpoints.columnWithDesktop}, 1fr)\n );\n }\n @media (min-width: ${Breakpoints.largeScreen}px) {\n grid-template-columns: repeat(\n auto-fill,\n minmax(${({ breakpoints }) => breakpoints.columnWithLargeScreen}, 1fr)\n );\n }\n @media (min-width: ${Breakpoints.LargeScreen}px) {\n grid-template-columns: repeat(\n auto-fill,\n minmax(${({ breakpoints }) => breakpoints.columnWithExtraLargeScreen}, 1fr)\n );\n }\n`;\n\n@observer\nexport class ProductBriefCollection extends React.Component {\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 getPercentByColumnNumber(columns: number): string {\n return `${100 / columns}%`;\n }\n\n private getColumnsWith = (): IBreakpointsWidth => {\n const { breakpoints } = this.props.config;\n const {\n numColumnsMobile,\n numColumnsDesktop,\n numColumnsLargeScreen,\n numColumnsExtraLargeScreen\n } = breakpoints;\n\n return {\n columnWithMobile: this.getPercentByColumnNumber(numColumnsMobile),\n columnWithDesktop: this.getPercentByColumnNumber(numColumnsDesktop),\n columnWithLargeScreen: this.getPercentByColumnNumber(numColumnsLargeScreen),\n columnWithExtraLargeScreen: this.getPercentByColumnNumber(numColumnsExtraLargeScreen)\n };\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 {\n hideProductBadge,\n showSubDisplayName,\n hideProductPrice,\n hideProductPriceRange,\n hideProductRating,\n ctaType,\n enableNotifyMe,\n enableQuickView,\n enableMobileQuickView,\n productGridHideReadReviewsLink,\n hideReviewsNumber,\n enableHoverInteraction,\n enableShadePicker,\n enableSizePicker,\n shortDescriptionLocation,\n enableProductDetailLink,\n enableQuickViewShortcut,\n featuredProductOverrideImage,\n enableLearnMoreLink,\n autoReplenishOptions,\n autoReplenishToggleType,\n enableNumberShades,\n sizePickerImages,\n hideProductPricePerUnit,\n showProductQuantitySelector,\n hideEmptyStars,\n enableAutoReplenishment,\n translationsOverwrites,\n productImages,\n lazyLoadGridItem,\n isLoaded,\n productBenefitTypes\n } = this.props.config;\n\n return {\n key: `column-for-${gridItem.itemId}`,\n className: ITEMS_CLASSNAME,\n positionIndex: gridItem.positionIndex,\n hideProductBadge,\n showSubDisplayName,\n hideProductPrice,\n hideProductPriceRange,\n hideProductRating,\n ctaType,\n enableNotifyMe,\n enableQuickView,\n enableMobileQuickView,\n productGridHideReadReviewsLink,\n hideReviewsNumber,\n enableHoverInteraction,\n enableShadePicker,\n enableSizePicker,\n shortDescriptionLocation,\n enableProductDetailLink,\n enableQuickViewShortcut,\n imageOverride: this.getOverrideImage(gridItem, featuredProductOverrideImage),\n isFeatured: this.isFeatured(gridItem),\n featuredProductOverrideImage,\n enableLearnMoreLink,\n autoReplenishOptions,\n autoReplenishToggleType,\n enableNumberShades,\n sizePickerImages,\n hideProductPricePerUnit,\n showProductQuantitySelector,\n hideEmptyStars,\n enableAutoReplenishment,\n translationsOverwrites,\n isLoaded,\n productImages,\n lazyLoadGridItem,\n isMobile: this.props.isMobile,\n productBenefitTypes\n };\n }\n\n private getItemToRender(item: GridItem) {\n switch (item.itemType) {\n case gridItemType.product:\n case gridItemType.featuredProduct:\n return (\n item.product && (\n \n )\n );\n default:\n return ;\n }\n }\n\n private renderBriefViewContent = () => {\n const {\n config: { gridItems = [], enableGridCarousel },\n isMobile\n } = this.props;\n\n return gridItems.reduce((components: React.ReactElement[], item) => {\n components.push(\n \n {this.getItemToRender(item)}\n \n );\n\n return components;\n }, []);\n };\n\n private renderBriefView = () => {\n const {\n config: { isLoaded, enableGridCarousel }\n } = this.props;\n\n if (enableGridCarousel || !isLoaded) {\n return {this.renderBriefViewContent()};\n }\n\n return this.renderBriefViewContent();\n };\n\n public render() {\n const productBriefViewClassNames = classes('product-brief-view', this.props.className);\n\n return (\n \n {this.renderBriefView()}\n \n );\n }\n}\n","// handles product brief display on different resolutions\nimport * as React from 'react';\nimport { IProductBriefCollectionWrapper, ProductBriefCollection } from './ProductBriefCollection';\nimport { Breakpoints } from 'elc-base-theme';\nimport { Desktop, Mobile } from 'elc-layouts';\n\nexport class ProductBriefCollectionWrapper extends React.Component {\n public render() {\n return (\n <>\n \n {() => }\n \n \n {() => }\n \n \n );\n }\n}\n","import * as React from 'react';\nimport { observer } from 'mobx-react';\nimport { ContentSpacing } from 'elc-base-theme';\nimport styled from 'styled-components';\nimport * as classnames from 'classnames';\nimport { CheckBox } from 'elc-checkbox';\n\nexport interface ITagFilterButton {\n onFilterSelect(): void;\n isSelected: boolean;\n label: string;\n disabled?: boolean;\n}\n\nconst StyledLabel = styled('label')`\n margin-right: ${ContentSpacing.space24};\n margin-bottom: ${ContentSpacing.space16};\n [dir='rtl'] & {\n margin-right: 0;\n margin-left: ${ContentSpacing.space24};\n }\n\n &.elc-button.button--light,\n &.elc-button.button--dark {\n padding-left: a ${ContentSpacing.space20};\n padding-right: ${ContentSpacing.space20};\n }\n`;\n\nexport const CheckboxFilter = observer((props: ITagFilterButton) => {\n const className = classnames({\n 'elc-styled-filters-checkbox-label': true,\n disabled: props.disabled\n });\n\n return (\n \n \n \n );\n});\n","import * as React from 'react';\nimport { observer } from 'mobx-react';\nimport { Button } from 'elc-buttons';\nimport { ContentSpacing } from 'elc-base-theme';\nimport styled from 'styled-components';\nimport * as classnames from 'classnames';\n\nexport interface ITagFilterButton {\n onFilterSelect(): void;\n isSelected: boolean;\n label: string;\n disabled?: boolean;\n}\n\nconst StyledButton = styled(Button)`\n display: flex;\n margin-right: ${ContentSpacing.space24};\n margin-bottom: ${ContentSpacing.space16};\n\n [dir='rtl'] & {\n margin-right: 0;\n margin-left: ${ContentSpacing.space24};\n }\n\n &.elc-button {\n padding-left: ${ContentSpacing.space20};\n padding-right: ${ContentSpacing.space20};\n }\n`;\n\nexport const ButtonFilter = observer((props: ITagFilterButton) => {\n const className = classnames({\n 'elc-styled-filters-category-button': true,\n 'button--light': !props.isSelected,\n 'button--dark': props.isSelected\n });\n\n return (\n \n {props.label}\n \n );\n});\n","import * as React from 'react';\nimport { observer } from 'mobx-react';\nimport * as classnames from 'classnames';\nimport { CheckboxFilter } from './CheckboxFilter';\nimport { ButtonFilter } from './ButtonFilter';\n\nexport interface ITagFilterButton {\n onSelectFilterClick(): void;\n isSelected: boolean;\n label: string;\n disabled?: boolean;\n checkboxFilter?: boolean;\n}\n\nexport const CategoryFiltersButton = observer((props: ITagFilterButton) => {\n const className = classnames({\n 'elc-styled-filters-category-button': true,\n 'elc-styled-filters-category-button--selected': true\n });\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const FilterItem: any = props.checkboxFilter ? CheckboxFilter : ButtonFilter;\n\n return (\n \n );\n});\n","import * as React from 'react';\nimport styled from 'styled-components';\nimport { translate } from 'elc-service';\nimport { Row } from 'elc-grid';\nimport { ContentSpacing } from 'elc-base-theme';\nimport { classes } from '../../../utils/Classes';\n\nconst StyledResultsRow = styled(Row)`\n padding-top: ${ContentSpacing.space20};\n padding-bottom: ${ContentSpacing.space12};\n`;\n\nexport interface IProductsNo {\n productsNumber: number;\n translations?: IProductsNoTranlslations;\n}\n\ninterface IProductsNoTranlslations {\n resultsLabel: string;\n}\n\n@translate(['resultsLabel'])\nexport class ProductsNo extends React.Component {\n render() {\n const styledResultsRowClassnames: string = classes('styled-filters-result-row');\n const styledResultsLabelClassnames: string = classes('styled-filters-results-label');\n\n return (\n \n
\n {this.props.productsNumber} {this.props.translations?.resultsLabel}\n
\n
\n );\n }\n}\n","import * as React from 'react';\nimport { RemoveIcon } from 'elc-icons';\nimport { Button } from 'elc-buttons';\nimport styled from 'styled-components';\nimport { ContentSpacing } from 'elc-base-theme';\n\nconst StyledFilterButton = styled(Button)`\n margin-right: ${ContentSpacing.space16};\n margin-bottom: ${ContentSpacing.space6};\n cursor: pointer;\n\n [dir='rtl'] & {\n margin-right: 0;\n margin-left: ${ContentSpacing.space6};\n }\n`;\n\nconst StyledRemoveIcon = styled(RemoveIcon)`\n width: 8px;\n cursor: pointer;\n display: inline-block;\n margin-left: ${ContentSpacing.space6};\n\n [dir='rtl'] & {\n margin: {\n right: ${ContentSpacing.space6};\n left: 0;\n }\n }\n`;\n\nexport interface IFilterItemWrapper {\n onClick(): void;\n ariaLabel: string;\n className?: string;\n}\n\nexport class FilterItemWrapper extends React.Component {\n render() {\n return (\n \n {this.props.children}\n \n \n );\n }\n}\n","import * as React from 'react';\nimport { Filter } from '../../../domain/entities/Filter';\nimport { classes } from '../../../utils/Classes';\nimport { FilterItemWrapper } from '../FilterItemWrapper';\n\nexport interface IFilterItem {\n filter: Filter;\n ariaLabel: string;\n className?: string;\n}\n\nexport class FilterItem extends React.Component {\n private onRemoveTag = () => {\n this.props.filter.setActiveState(false);\n };\n\n render() {\n const appliedFiltersClassnames = classes(\n 'styled-filters-applied-filter',\n this.props.className\n );\n\n return (\n \n {this.props.filter.label}\n \n );\n }\n}\n","import * as React from 'react';\nimport { translate } from 'elc-service';\nimport { FilterSet } from '../../../domain/entities/FilterSet';\nimport styled from 'styled-components';\nimport { Row } from 'elc-grid';\nimport { ContentSpacing } from 'elc-base-theme';\nimport { classes } from '../../../utils/Classes';\nimport { FilterItem } from './FilterItem';\n\nexport interface IFiltersList {\n productsNumber: number;\n appliedFilters: FilterSet[];\n translations?: IFiltersListTranslations;\n}\n\nexport interface IFiltersListTranslations {\n applyFiltersLabel: string;\n}\n\nconst StyledSelectedTagsRow = styled(Row)`\n padding: ${ContentSpacing.space6} 0 ${ContentSpacing.space40};\n`;\n\n@translate(['applyFiltersLabel'])\nexport class FiltersList extends React.Component {\n render() {\n const styledSelectedCategoryRowClassnames = classes('styled-filters-selected-category-row');\n const { applyFiltersLabel } = this.props.translations as IFiltersListTranslations;\n\n return (\n \n {this.props.appliedFilters.length &&\n this.props.appliedFilters.reduce(\n (appliedFilters: JSX.Element[], filterSet: FilterSet) => {\n return appliedFilters.concat(\n filterSet.activeFilters.map(filter => (\n \n ))\n );\n },\n []\n )}\n \n );\n }\n}\n","export const splitCamelCase = (text: string) => {\n return text.split(/(?=[A-Z])/).join(' ');\n};\n","import * as React from 'react';\nimport styled from 'styled-components';\n\ninterface IActiveFiltersNo {\n filtersNo: number;\n}\n\nconst ActiveFiltersWrapper = styled.span`\n &::before {\n content: '(';\n }\n\n &::after {\n content: ')';\n }\n`;\n\nexport const ActiveFiltersNo: React.StatelessComponent = (\n props: IActiveFiltersNo\n) => {\n if (!props.filtersNo) {\n return null;\n }\n\n return (\n \n {props.filtersNo}\n \n );\n};\n","import * as React from 'react';\nimport * as classnames from 'classnames';\nimport { classes } from '../../../utils/Classes';\nimport { splitCamelCase } from '../../../utils/splitCamelCase';\nimport { SelectedCategoryTheme, UnselectedCategoryTheme } from '../../../../theme/default-theme';\nimport { Button } from 'elc-buttons';\nimport { FilterSet } from '../../../domain/entities/FilterSet';\nimport { observer } from 'mobx-react';\nimport { translate } from 'elc-service';\nimport styled from 'styled-components';\nimport { Row, Column } from 'elc-grid';\nimport { ContentSpacing } from 'elc-base-theme';\nimport { CategoryFiltersButton } from './CategoryFiltersItem';\nimport { Filter } from '../../../domain/entities/Filter';\nimport { ActiveFiltersNo } from './ActiveFiltersNo';\n\nexport interface IFiltersSet {\n handleFilterSetToggle(filterSet: FilterSet): void;\n filterSets: FilterSet[];\n showFiltersWhenToggled?: boolean;\n checkboxFilters?: boolean;\n alwaysOn?: boolean;\n translations?: {\n filterByLabel: string;\n };\n}\n\nconst StyledCategory = styled(Button)`\n cursor: pointer;\n text-transform: capitalize;\n ${(props: { isCategoryTagSelected: boolean }) =>\n props.isCategoryTagSelected ? SelectedCategoryTheme : UnselectedCategoryTheme};\n`;\n\nconst StyledCol = styled(Column)`\n padding-top: ${ContentSpacing.space8};\n`;\n\nconst StyledRow = styled(Row)`\n padding-top: ${ContentSpacing.space20};\n`;\n\nconst StyledButtonRow = styled(Row)`\n padding-top: ${ContentSpacing.space40};\n`;\n\n@translate(['filterByLabel'])\n@observer\nexport class FiltersSets extends React.Component {\n private computeStyledCategoryClassName(filterCategory: string, active: boolean) {\n return classnames('elc-styled-filters-category-tab', 'js-elc-styled-filters-category-tab', {\n active\n });\n }\n\n private getSelectedFilterSet(filterSet: FilterSet) {\n if (!this.props.filterSets || !this.props.filterSets.length) {\n return null;\n }\n\n const styledButtonRowClassnames = classes('styled-filters-button-row');\n\n return (\n \n {filterSet.filters.map((option: Filter, keyNumber: number) => {\n return (\n \n );\n })}\n \n );\n }\n\n private getFilters(filterSet: FilterSet) {\n if (this.shouldHideFiltersForSet(filterSet)) {\n return null;\n }\n\n return this.getSelectedFilterSet(filterSet);\n }\n\n private shouldHideFiltersForSet(filterSet: FilterSet) {\n return !this.props.alwaysOn && (!this.props.showFiltersWhenToggled || !filterSet.isOpen);\n }\n\n render() {\n const styledCategoryRowClassnames = classes('styled-filters-category-row');\n const { filterSets, handleFilterSetToggle } = this.props;\n\n if (!filterSets) {\n return null;\n }\n\n return (\n \n \n {filterSets\n ? filterSets.map((filterSet: FilterSet) => {\n return (\n \n handleFilterSetToggle(filterSet)}\n key={`${filterSet.key}`}\n isCategoryTagSelected={filterSet.isOpen}\n aria-label={filterSet.label}\n className={this.computeStyledCategoryClassName(\n filterSet.key,\n filterSet.isOpen\n )}\n >\n {this.props.translations?.filterByLabel}{' '}\n {splitCamelCase(filterSet.label)}{' '}\n \n \n {this.getFilters(filterSet)}\n \n );\n })\n : null}\n \n {this.props.children}\n \n );\n }\n}\n","import * as React from 'react';\nimport * as classNames from 'classnames';\nimport { Icon } from './Icon';\n\nexport interface IFilterIconProps {\n className?: string;\n}\n\nconst FilterIcon = (props: IFilterIconProps) => {\n const className = classNames('elc-filter-icon', props.className);\n const image = `url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' version='1.1'%3E%3Cpath d='M20 6H4V8H20V6Z' /%3E%3Cpath d='M14 11H4V13H14V11Z' /%3E%3Cpath d='M10 16H4V18H10V16Z' /%3E%3C/svg%3E\")`;\n\n return ;\n};\n\nexport { FilterIcon };\n","import * as React from 'react';\nimport { classes } from '../../../utils/Classes';\nimport { FilterItemWrapper } from '../FilterItemWrapper';\nimport { translate } from 'elc-service';\n\nexport interface IClearAllFilters {\n onClick(): void;\n className?: string;\n translations?: IClearAllFiltersTranslations;\n}\n\ninterface IClearAllFiltersTranslations {\n clearFiltersLabel: string;\n}\n\n@translate(['clearFiltersLabel'])\nexport class ClearAllFilters extends React.Component {\n render() {\n const clearAllButtonClassnames = classes(\n 'styled-filters-clear-all-button',\n this.props.className\n );\n const { clearFiltersLabel } = this.props.translations as IClearAllFiltersTranslations;\n\n return (\n \n {clearFiltersLabel}\n \n );\n }\n}\n","import * as React from 'react';\nimport { observer } from 'mobx-react';\nimport { translate } from 'elc-service';\nimport { Row } from 'elc-grid';\nimport styled from 'styled-components';\nimport { ContentSpacing } from 'elc-base-theme';\nimport { serviceNames, diContainer } from '../../../service-setup/diContainer';\nimport { ProductFiltersViewController } from '../../controllers/ProductFiltersViewController';\nimport { Filter } from '../../domain/entities/Filter';\nimport { classes } from '../../utils/Classes';\nimport { CategoryFiltersButton } from './components/CategoryFiltersItem';\nimport { FilterSet } from '../../domain/entities/FilterSet';\nimport { ProductsNo } from './components/ProductsNo';\nimport { observable, computed } from 'mobx';\nimport { FiltersList } from './components/FiltersList';\nimport { FiltersSets } from './components/FiltersSets';\nimport { OutlinedButton } from 'elc-buttons';\nimport { FilterIcon } from 'elc-icons';\nimport { IFilterConfig } from './FiltersConfig';\nimport { ClearAllFilters } from './components/ClearAllFilters';\n\nconst StyledButtonRow = styled(Row)`\n padding-top: ${ContentSpacing.space16};\n`;\n\nconst StyledToggleButton = styled(OutlinedButton)``;\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 IFiltersComponent {\n filterSets: FilterSet[];\n appliedFilters: FilterSet[];\n productsNumber: number;\n config: IFilterConfig;\n totalAppliedFilters?: number;\n translations?: IFiltersTranslation;\n}\n\n@translate(['clearFiltersLabel', 'filtersLabel'])\n@observer\nclass DesktopFilters extends React.Component {\n @observable\n private productFiltersViewController: ProductFiltersViewController;\n\n constructor(props: IFiltersComponent) {\n super(props);\n\n this.productFiltersViewController = diContainer.get(\n serviceNames.productFiltersViewController\n );\n }\n\n private clearAllFilters = () => {\n this.productFiltersViewController.onClearAllAppliedFilters(this.props.appliedFilters);\n };\n\n @computed\n private get shouldHideFilterSets() {\n return (\n this.props.config.showToggler &&\n !this.productFiltersViewController.data.isFiltersModalOpen\n );\n }\n\n @computed\n private get shouldHideSelectedFilterSet() {\n return (\n !this.props.filterSets || !this.props.filterSets.length || this.props.config.showToggler\n );\n }\n\n private getAppliedFilters() {\n if (!this.props.appliedFilters.length || this.props.config.showToggler) {\n return null;\n }\n\n return (\n <>\n \n {this.props.appliedFilters.length && (\n \n )}\n \n );\n }\n\n private getSelectedFilterSet() {\n if (this.shouldHideSelectedFilterSet) {\n return null;\n }\n\n const styledButtonRowClassnames = classes('styled-filters-button-row');\n const { allowAllFiltersCollapsed } = this.props.config;\n let selectedFilterSet = this.props.filterSets.find(filterSet => filterSet.isOpen);\n\n if (!selectedFilterSet) {\n if (allowAllFiltersCollapsed) {\n return null;\n }\n\n selectedFilterSet = this.props.filterSets[0];\n }\n\n return (\n \n {selectedFilterSet.filters.map((option: Filter, keyNumber: number) => {\n return (\n \n );\n })}\n \n );\n }\n\n private handleFilterSetToggle = (filterSet: FilterSet) => {\n if (!filterSet) {\n return null;\n }\n\n const { singleFilterToggle, allowAllFiltersCollapsed } = this.props.config;\n const activeFilterSets = this.props.filterSets.filter(_filterSet => _filterSet.isOpen);\n\n if (singleFilterToggle) {\n const activeFilterClicked =\n activeFilterSets[0] && activeFilterSets[0].key === filterSet.key;\n\n if (activeFilterClicked && !allowAllFiltersCollapsed) {\n return null;\n }\n\n filterSet.setOpenState(true);\n activeFilterSets[0] && activeFilterSets[0].setOpenState(false);\n } else {\n filterSet.toggleOpenState();\n }\n };\n\n private getFilterSets() {\n const { filterSets } = this.props;\n\n if (this.shouldHideFilterSets) {\n return null;\n }\n\n return (\n \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 getFiltersToggle() {\n const filtersToggleClassNames = classes('mobile-filters-modal-wrapper');\n const { filtersLabel } = this.props.translations as IFiltersTranslation;\n\n if (!this.props.config.showToggler) {\n return null;\n }\n\n return (\n \n {filtersLabel}{' '}\n {this.props.totalAppliedFilters ? `(${this.props.totalAppliedFilters})` : ''}\n \n \n );\n }\n\n private getClearFiltersCTA() {\n if (!this.props.appliedFilters.length) {\n return null;\n }\n\n return ;\n }\n\n public render() {\n return (\n <>\n {this.getFiltersToggle()}\n {this.getFilterSets()}\n {this.getSelectedFilterSet()}\n {this.getAppliedFilters()}\n {this.getClearFiltersCTA()}\n \n );\n }\n}\n\nexport { DesktopFilters };\n","import * as React from 'react';\nimport { observer } from 'mobx-react';\nimport { OutlinedButton } from 'elc-buttons';\nimport styled from 'styled-components';\nimport { ResponsiveModal } from 'elc-responsive-modal';\nimport * as classnames from 'classnames';\nimport { FilterIcon } from 'elc-icons';\nimport { classes } from '../../utils/Classes';\n\nexport interface IMobileFiltersModal {\n filtersLabel: string;\n isFiltersModalOpen: boolean;\n onOpenFilters(): void;\n onCloseFilters(): void;\n children: React.ReactNode;\n totalAppliedFilters?: number;\n}\n\nconst Wrapper = styled.div`\n height: 100%;\n`;\n\nconst FilterButton = styled(OutlinedButton)`\n width: 100%;\n height: 100%;\n`;\n\nexport const MobileFiltersModal = observer((props: IMobileFiltersModal) => {\n const {\n filtersLabel,\n isFiltersModalOpen,\n onOpenFilters,\n onCloseFilters,\n children,\n totalAppliedFilters\n } = props;\n\n const mobileFiltersModalWrapperClassnames = classes('mobile-filters-modal-wrapper');\n\n const filtersModalButtonClassnames = classes('mobile-filters-modal-button');\n\n const filtersModalClassnames = classnames(\n 'elc-mobile-filters-modal',\n 'js-elc-mobile-filters-modal',\n {\n 'is-open': isFiltersModalOpen\n }\n );\n\n return (\n \n \n {filtersLabel} {totalAppliedFilters ? `(${totalAppliedFilters})` : ''}{' '}\n \n \n \n {children}\n \n \n );\n});\n","import * as React from 'react';\nimport { observer } from 'mobx-react';\nimport { serviceNames, diContainer } from '../../../service-setup/diContainer';\nimport { ProductFiltersViewController } from '../../controllers/ProductFiltersViewController';\nimport styled from 'styled-components';\nimport { Body1, Subtitle1 } from 'elc-typography';\nimport { ContentSpacing } from 'elc-base-theme';\nimport { translate } from 'elc-service';\nimport { MobileFiltersModal } from './MobileFiltersModal';\nimport { Button } from 'elc-buttons';\nimport { IFiltersTranslation } from './DesktopFilters';\nimport { RemoveIcon } from 'elc-icons';\nimport { classes } from '../../utils/Classes';\nimport { IProductGridFilters } from '../product-grid/ProductGridFilters';\nimport { FiltersSets } from './components/FiltersSets';\nimport { FilterSet } from '../../domain/entities/FilterSet';\nimport { ClearAllFilters } from './components/ClearAllFilters';\n\nconst HeaderWrapper = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n`;\n\nconst FiltersTitle = styled(Subtitle1)`\n padding-bottom: ${ContentSpacing.space20};\n`;\n\nconst ModalCTAContainer = styled.div``;\n\n@translate([\n 'filtersLabel',\n 'filterByLabel',\n 'applyFiltersLabel',\n 'removeIconAriaLabel',\n 'collapseIconAriaLabel',\n 'expandIconAriaLabel'\n])\n@observer\nclass MobileFilters extends React.Component {\n private productFiltersViewController: ProductFiltersViewController;\n\n constructor(props: IProductGridFilters) {\n super(props);\n this.productFiltersViewController = diContainer.get(\n serviceNames.productFiltersViewController\n );\n }\n\n private handleFilterSetToggle(filterSet: FilterSet) {\n filterSet.toggleOpenState();\n }\n\n private clearAllFilters = () => {\n this.productFiltersViewController.onClearAllAppliedFilters(this.props.appliedFilters);\n };\n\n public render() {\n const { data, onOpenFiltersClick, onCloseFiltersClick } = this.productFiltersViewController;\n const { filtersLabel, applyFiltersLabel, filterByLabel, removeIconAriaLabel } = this.props\n .translations as IFiltersTranslation;\n\n const { isFilterInProgress, isFiltersModalOpen } = data;\n const applyFiltersClassname = classes('mobile-apply-filter-button');\n const applyFiltersLabelClassnames = classes('mobile-apply-filter-label');\n const mobileTagFiltersTitleClassnames = classes('mobile-category-filters-title');\n const removeIconWrapperClassnames = classes('mobile-category-filters-remove-icon-wrapper');\n const headerWrapperClassnames = classes('mobile-category-filters-header-wrapper');\n const ctaWrapperClassnames = classes('mobile-filters-cta');\n\n return (\n \n \n \n {filterByLabel}\n \n \n \n \n \n \n \n {this.props.appliedFilters.length ? (\n \n ) : null}\n \n {applyFiltersLabel}\n \n \n \n );\n }\n}\n\nexport { MobileFilters };\n","export enum FILTER_TYPES {\n CHIPS = 'tabbed',\n FULL_WIDTH = 'stacked'\n}\n\nexport interface IFilterConfig {\n alwaysToggled: boolean;\n singleFilterToggle: boolean;\n showToggler: boolean;\n filtersAsCheckboxes: boolean;\n type: FILTER_TYPES;\n toggleOnHover?: boolean;\n allowAllFiltersCollapsed?: boolean;\n}\n\nexport const tabbedFiltersConfig: IFilterConfig = {\n alwaysToggled: false,\n singleFilterToggle: true,\n showToggler: false,\n filtersAsCheckboxes: false,\n type: FILTER_TYPES.CHIPS\n};\n\nexport const stackedFiltersConfig: IFilterConfig = {\n alwaysToggled: false,\n singleFilterToggle: true,\n showToggler: false,\n filtersAsCheckboxes: true,\n type: FILTER_TYPES.FULL_WIDTH,\n allowAllFiltersCollapsed: true\n};\n\nexport const filtersConfig = {\n [FILTER_TYPES.CHIPS]: tabbedFiltersConfig,\n [FILTER_TYPES.FULL_WIDTH]: stackedFiltersConfig\n};\n","import * as React from 'react';\nimport styled from 'styled-components';\nimport { Desktop, Mobile } from 'elc-layouts';\nimport { DesktopFilters } from '../../../internal/views/product-filters/DesktopFilters';\nimport { Column } from 'elc-grid';\nimport { ContentSpacing, breakpoint, Breakpoints } from 'elc-base-theme';\nimport { translate } from 'elc-service';\nimport { observer } from 'mobx-react';\nimport { classes } from '../../utils/Classes';\nimport { FilterSet } from '../../domain/entities/FilterSet';\nimport { MobileFilters } from '../product-filters/MobileFilters';\nimport { filtersConfig, FILTER_TYPES, IFilterConfig } from '../product-filters/FiltersConfig';\n\nexport interface IProductGridFiltersTranslation {\n resultsLabel: string;\n}\n\nexport interface IProductGridFilters {\n productsNumber: number;\n filterSets: FilterSet[];\n appliedFilters: FilterSet[];\n totalAppliedFilters?: number;\n translations?: IProductGridFiltersTranslation;\n filtersDisplayType?: FILTER_TYPES;\n}\n\nconst StyledResultsColumn = styled(Column)`\n margin-top: ${ContentSpacing.space16};\n margin-bottom: ${ContentSpacing.space24};\n display: flex;\n ${breakpoint('desktop')`\n display: none;\n `};\n`;\n\n@translate(['resultsLabel'])\n@observer\nexport class ProductGridFilters extends React.Component {\n render() {\n const { resultsLabel } = this.props.translations as IProductGridFiltersTranslation;\n const styledMobileResultsClassnames = classes('mobile-attribute-filters-results');\n const styledMobileResultsLabelClassnames = classes(\n 'mobile-attribute-filters-results-label'\n );\n let config: IFilterConfig = filtersConfig[this.props.filtersDisplayType as FILTER_TYPES];\n\n if (!config) {\n config = filtersConfig[FILTER_TYPES.CHIPS];\n }\n\n return (\n <>\n \n {() => (\n \n )}\n \n \n {() => (\n <>\n \n \n
\n {this.props.productsNumber} {resultsLabel}\n
\n
\n \n )}\n
\n \n );\n }\n}\n","import * as React from 'react';\nimport { observer } from 'mobx-react';\nimport styled from 'styled-components';\nimport { StickyRowTheme } from '../../../theme/default-theme';\nimport { ProductCarousel, IProductCarousel } from '../product-carousel/ProductCarousel';\nimport { ProductBriefCollectionWrapper } from '../product-brief-collection/ProductBriefCollectionWrapper';\nimport { IProductBriefCollection } from '../product-brief-collection/ProductBriefCollection';\nimport { DEFAULT_GRID_BREAKPOINTS } from '../../constants/ProductGrid';\nimport { ICTAConfig } from '../../../exported/product-grid-wrapper/ProductGridWrapper';\nimport { ProductGridFilters } from './ProductGridFilters';\nimport { ContentSpacing, Breakpoints } from 'elc-base-theme';\nimport { Heading4 } from 'elc-typography';\nimport { classes } from '../../../internal/utils/Classes';\nimport { ProductSortingDropdown } from '../../../internal/views/product-grid/ProductSortingDropdown';\nimport { Row } from 'elc-grid';\nimport { TOGGLE_TYPE } from '../../constants/AutoReplenish';\nimport { FilterSet } from '../../domain/entities/FilterSet';\nimport { Desktop, Mobile } from 'elc-layouts';\nimport { FILTER_TYPES } from '../product-filters/FiltersConfig';\n\nexport enum Formatter {\n DEFAULT = 'default',\n CAROUSEL = 'carousel'\n}\n\nexport interface IProductGridProps {\n formatter: Formatter;\n carouselProps: IProductCarousel['config'];\n briefProps: IProductBriefCollection['config'];\n productSortingDropdownValue: string;\n productsNumber: number;\n appliedFilters?: FilterSet[];\n filterSets?: FilterSet[];\n isAllGiftsFilterApplied?: boolean;\n areFiltersApplied?: boolean;\n productGridCTAConfig: ICTAConfig;\n positionGridInsideAccordion?: boolean;\n enableFilters?: boolean;\n totalAppliedFilters?: number;\n hideSorting?: boolean;\n isFilterDisplayStacked?: boolean;\n isFilterDisplayTabbed?: boolean;\n className?: string;\n filtersDisplayType?: FILTER_TYPES;\n setProductSortingDropdownValue(_: string, v: string): 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`\n width: ${ContentSpacing.space60};\n`;\n\nconst StickyRow = styled(Row)`\n display: flex;\n justify-content: space-between;\n user-select: none;\n ${StickyRowTheme};\n`;\n\n@observer\nclass ProductGrid extends React.Component {\n public static defaultProps: IProductGridProps;\n\n private getProductCTA = (productGridCTAConfig: ICTAConfig) => {\n const productCTAWrapperClassNames = classes('product-cta-wrapper');\n const productCTAClassNames = classes('product-cta');\n const { label, absoluteUrl, url, newTab } = productGridCTAConfig;\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\n return (\n \n \n {label}\n \n \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 \n );\n }\n\n private getFilterBarContent(wrapperClassName: string) {\n const displaySortingDropdown = !this.props.hideSorting && this.props.productsNumber > 0;\n\n return (\n \n {this.props.enableFilters && (\n \n )}\n\n {this.getSorting(displaySortingDropdown)}\n \n );\n }\n\n private getFilterBar() {\n const { filtersDisplayType } = this.props;\n const filterClassName = `elc-styled-filters elc-styled-${filtersDisplayType}-filters`;\n\n return (\n <>\n \n {() => this.getFilterBarContent(filterClassName)}\n \n \n {() => this.getFilterBarContent('elc-styled-filters elc-mobile-filters')}\n \n \n );\n }\n\n public render() {\n const {\n carouselProps,\n briefProps,\n isAllGiftsFilterApplied,\n areFiltersApplied,\n formatter,\n productGridCTAConfig,\n positionGridInsideAccordion\n } = this.props;\n\n const productGridCTA =\n productGridCTAConfig.enabled && this.getProductCTA(productGridCTAConfig);\n\n if (formatter === Formatter.CAROUSEL) {\n return (\n <>\n \n {productGridCTA}\n \n );\n }\n\n return (\n <>\n {this.getFilterBar()}\n \n
\n {productGridCTA}\n \n );\n }\n}\n\nProductGrid.defaultProps = {\n carouselProps: {\n products: [],\n hideProductPrice: false,\n hideProductPriceRange: true,\n hideProductBadge: false,\n showSubDisplayName: false,\n hideProductRating: false,\n enableNotifyMe: false,\n enableQuickView: false,\n enableMobileQuickView: false,\n hideReviewsNumber: false,\n hideReadReviewsLink: true,\n enableShadePicker: true,\n enableSizePicker: true,\n shortDescriptionLocation: {\n product_full: true,\n product_brief: true,\n quickshop: true\n },\n enableProductDetailLink: true,\n autoReplenishOptions: [],\n autoReplenishToggleType: TOGGLE_TYPE.CHECKBOX\n },\n briefProps: {\n gridItems: [],\n defaultBreakpoints: DEFAULT_GRID_BREAKPOINTS,\n breakpoints: DEFAULT_GRID_BREAKPOINTS,\n isLoaded: false,\n autoReplenishOptions: [],\n autoReplenishToggleType: TOGGLE_TYPE.CHECKBOX\n },\n formatter: Formatter.DEFAULT,\n productGridCTAConfig: {\n enabled: false,\n label: '',\n absoluteUrl: false,\n url: '',\n newTab: false\n },\n productSortingDropdownValue: '',\n productsNumber: 9,\n setProductSortingDropdownValue: () => null\n};\n\nexport default ProductGrid;\n","import * as React from 'react';\nimport { observer } from 'mobx-react';\nimport styled from 'styled-components';\nimport { ContentSpacing } from 'elc-base-theme';\nimport { MobileSelectTheme } from '../../../theme/default-theme';\nimport { IProductSortingDropdownTranslations } from './ProductSortingDropdown';\nimport { translate } from '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((props: IMobileSortingDropdown) => {\n const { sortByLabel } = props.translations as IProductSortingDropdownTranslations;\n\n const onSelectValue = (event: React.ChangeEvent) => {\n props.setProductSortingDropdownValue(\n event.currentTarget.name,\n event.currentTarget.value\n );\n };\n\n const mobileSortOptions = props.optionsArray.map((option, key) => (\n \n ));\n\n return (\n \n );\n })\n);\n","import * as React from 'react';\nimport { observer } from 'mobx-react';\nimport { translate } from 'elc-service';\nimport { BackgroundWhiteTheme } from '../../../theme/default-theme';\nimport styled from 'styled-components';\nimport { Dropdown } from 'elc-dropdown';\nimport { Breakpoints } from '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 'elc-layouts';\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((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
\n \n {() => (\n \n )}\n \n \n {() => (\n \n )}\n \n
\n );\n })\n);\n","import * as React from 'react';\nimport { observer } from 'mobx-react';\nimport { Accordion, LabelSlide } from 'elc-accordion';\nimport { classes } from '../../utils/Classes';\n\nexport interface IProductAccordion {\n iconType?: string;\n accordionDefaultOpen: boolean;\n accordionTitle: string;\n accordionSubtext: string;\n children: JSX.Element;\n onChange?(openIndex: number): void;\n}\n\nexport const ProductAccordion = observer((props: IProductAccordion) => {\n const productAccordionClassNames = classes('product-accordion');\n\n const { iconType, accordionDefaultOpen, accordionTitle, accordionSubtext, onChange } = props;\n\n const openIndex = accordionDefaultOpen ? 0 : -1;\n\n return (\n \n \n {accordionSubtext}\n {props.children}\n \n \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 'elc-grid';\nimport { Heading2 } from '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((props: ICategoryHeader) => {\n return (\n \n \n {props.categoryTag}\n \n \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 'elc-grid';\n\ninterface IProductGridHeaders {\n productGridHeader?: string;\n productGridSubheader?: string;\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((props: IProductGridHeaders) => {\n const { productGridHeader, productGridSubheader } = props;\n\n if (!productGridHeader && !productGridSubheader) {\n return null;\n }\n\n return (\n \n \n {productGridHeader && (\n
{productGridHeader}
\n )}\n {productGridSubheader && (\n
{productGridSubheader}
\n )}\n
\n
\n );\n});\n","import * as React from 'react';\r\nimport { observer } from 'mobx-react';\r\nimport styled from 'styled-components';\r\nimport { config } from 'elc-service';\r\nimport { ISliderSettings } from 'elc-slider';\r\nimport { IconTypes } from 'elc-accordion';\r\nimport { ContentSpacing, Breakpoints } from 'elc-base-theme';\r\nimport { IItem, IParamsById } from '../../api/ProdcatApiSdk';\r\nimport { DEFAULT_GRID_BREAKPOINTS, contentSize } from '../../internal/constants/ProductGrid';\r\nimport { IProductCarousel } from '../../internal/views/product-carousel/ProductCarousel';\r\nimport { ProductGridViewController } from '../../internal/controllers/ProductGridViewController';\r\nimport {\r\n IBreakpoints,\r\n IProductBriefCollection\r\n} from '../../internal/views/product-brief-collection/ProductBriefCollection';\r\nimport { CartLimitReachedModal } from '../../internal/views/common/CartLimitReachedModal';\r\nimport { IFiltersTranslation } from '../../internal/views/product-filters/DesktopFilters';\r\nimport ProductGrid, { Formatter } from '../../internal/views/product-grid/ProductGrid';\r\nimport { ProductAccordion } from '../../internal/views/product-accordion/ProductAccordion';\r\nimport { mergeConfigs } from '../../internal/utils/ConfigUtils';\r\nimport {\r\n IProdcatConfig,\r\n ISizePickerImages,\r\n IInventoryStatusSorting,\r\n IProductBenefitTypes\r\n} from '../../internal/interfaces/IProdcat';\r\nimport { TOGGLE_TYPE } from '../../internal/constants/AutoReplenish';\r\nimport { IFilterData } from '../../internal/views/product-filters/IProductFilters';\r\nimport { Container, Column } from 'elc-grid';\r\nimport { CategoryHeader } from '../../internal/views/product-grid/CategoryHeader';\r\nimport { ProductGridHeaders } from '../../internal/views/product-grid/ProductGridHeaders';\r\n\r\nexport interface IContentItem {\r\n nId: number | string;\r\n nPsn: number;\r\n nSize: contentSize;\r\n}\r\n\r\nexport interface ITranslationsOverwrites {\r\n quickViewButtonLabel?: string;\r\n ctaButtonLabel?: string;\r\n pressedCtaButtonLabel?: string;\r\n}\r\n\r\nexport interface IProductImages {\r\n product_grid?: {\r\n lazyload?: boolean;\r\n };\r\n}\r\n\r\nexport interface IProductGridConfig extends IProdcatConfig {\r\n items?: IItem[];\r\n paramsById?: IParamsById;\r\n featuredProductId?: string;\r\n viewableInventoryStatuses?: string[];\r\n productTags?: string[];\r\n content?: IContentItem[];\r\n productGridBreakpoints: IBreakpoints;\r\n enableGridCarousel?: boolean;\r\n carouselSettings?: ISliderSettings;\r\n showSubDisplayName?: boolean;\r\n toutWidth?: number;\r\n toutHeight?: number;\r\n ctaType?: string;\r\n enableNotifyMe?: boolean;\r\n enableQuickView?: boolean;\r\n hideSorting?: boolean;\r\n hideReviewsNumber?: boolean;\r\n disableFeaturedProduct?: boolean;\r\n filterData?: IFilterData;\r\n enableFilters?: boolean;\r\n enableSizePicker?: boolean;\r\n featuredProductOverrideImage?: string;\r\n autoReplenishOptions?: number[];\r\n autoReplenishToggleType?: TOGGLE_TYPE;\r\n gridAccordionIconType?: IconTypes;\r\n enableAccordion?: boolean;\r\n accordionDefaultOpen?: boolean;\r\n accordionTitle?: string;\r\n accordionSubtext?: string;\r\n enableMobileQuickView?: boolean;\r\n productGridHeader?: string;\r\n productGridSubheader?: string;\r\n sizePickerImages?: ISizePickerImages;\r\n enableCategoryHeader?: boolean;\r\n showDynamicCategoryHeader?: boolean;\r\n hideEmptyStars?: boolean;\r\n translationsOverwrites?: ITranslationsOverwrites;\r\n gridCTA?: ICTAConfig;\r\n productImages?: IProductImages;\r\n lazyloadProductGridItems?: boolean;\r\n inventoryStatusSorting?: IInventoryStatusSorting;\r\n productBenefitTypes?: IProductBenefitTypes;\r\n}\r\n\r\nexport interface IProductGridWrapper {\r\n config: IProductGridConfig;\r\n className?: string;\r\n translations?: IFiltersTranslation;\r\n viewController: ProductGridViewController;\r\n}\r\n\r\nexport interface ICTAConfig {\r\n enabled?: boolean;\r\n label?: string;\r\n absoluteUrl?: boolean;\r\n url?: string;\r\n newTab?: boolean;\r\n}\r\n\r\nconst StyledContainer = styled(Container)`\r\n margin-top: ${ContentSpacing.space20};\r\n`;\r\n\r\nexport const StyledHeaderColumn = styled(Column)`\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n`;\r\n\r\n@config(['prodcatConfig'], mergeConfigs)\r\n@observer\r\nclass ProductGridWrapper extends React.Component {\r\n public static displayName: string;\r\n\r\n constructor(props: IProductGridWrapper) {\r\n super(props);\r\n\r\n props.viewController.handleState(props.config);\r\n }\r\n\r\n public async componentDidMount() {\r\n await this.props.viewController.loaded(this.props);\r\n }\r\n\r\n private getBriefProps = () => {\r\n const {\r\n data: { isLoaded, gridItems, featuredProductId }\r\n } = this.props.viewController;\r\n const { config: propsConfig } = this.props;\r\n\r\n const briefProps: IProductBriefCollection['config'] = {\r\n gridItems,\r\n isLoaded,\r\n featuredProductId,\r\n defaultBreakpoints: DEFAULT_GRID_BREAKPOINTS,\r\n breakpoints: propsConfig.productGridBreakpoints,\r\n hideProductBadge: propsConfig.hideProductBadge,\r\n showSubDisplayName: propsConfig.showSubDisplayName,\r\n enableGridCarousel: propsConfig.enableGridCarousel,\r\n hideProductPrice: propsConfig.hideProductPrice,\r\n hideProductPriceRange: propsConfig.hideProductPriceRange,\r\n hideProductRating: propsConfig.hideProductRating,\r\n ctaType: propsConfig.ctaType,\r\n enableNotifyMe: propsConfig.enableNotifyMe,\r\n enableQuickView: propsConfig.enableQuickView,\r\n enableMobileQuickView: propsConfig.enableMobileQuickView,\r\n hideReviewsNumber: propsConfig.hideReviewsNumber,\r\n productGridHideReadReviewsLink: propsConfig.productGridHideReadReviewsLink,\r\n enableHoverInteraction: propsConfig.enableHoverInteraction,\r\n enableShadePicker: propsConfig.enableShadePicker,\r\n enableSizePicker: propsConfig.productGridEnableSizePicker,\r\n shortDescriptionLocation: propsConfig.shortDescriptionLocation,\r\n enableProductDetailLink: propsConfig.enableProductDetailLink,\r\n enableQuickViewShortcut: propsConfig.enableQuickViewShortcut,\r\n featuredProductOverrideImage: propsConfig.featuredProductOverrideImage,\r\n enableLearnMoreLink: propsConfig.enableLearnMoreLink,\r\n autoReplenishOptions: propsConfig.autoReplenishOptions || [],\r\n autoReplenishToggleType: propsConfig.autoReplenishToggleType,\r\n enableNumberShades: propsConfig.enableNumberShades,\r\n sizePickerImages: propsConfig.sizePickerImages,\r\n hideProductPricePerUnit: propsConfig.hideProductPricePerUnit,\r\n showProductQuantitySelector: propsConfig.showProductQuantitySelector,\r\n hideEmptyStars: propsConfig.hideEmptyStars,\r\n enableAutoReplenishment: propsConfig.enableAutoReplenishment,\r\n translationsOverwrites: propsConfig.translationsOverwrites,\r\n productImages: propsConfig.productImages,\r\n lazyLoadGridItem: propsConfig.lazyloadProductGridItems,\r\n productBenefitTypes: propsConfig.productBenefitTypes\r\n };\r\n\r\n return briefProps;\r\n };\r\n\r\n private renderGridHeader = () => {\r\n const {\r\n productGridHeader,\r\n productGridSubheader,\r\n enableCategoryHeader,\r\n showDynamicCategoryHeader\r\n } = this.props.config;\r\n\r\n if (!enableCategoryHeader) {\r\n return null;\r\n }\r\n\r\n // If grid header or subheader were provided, use them to fill the header.\r\n if (productGridHeader || productGridSubheader) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n // Fall back to default category header if enabled\r\n const { categoryTag } = this.props.viewController.data;\r\n if (showDynamicCategoryHeader && categoryTag) {\r\n return ;\r\n }\r\n\r\n return null;\r\n };\r\n\r\n private setGridPosition = (openIndex: number) => {\r\n if (!this.props.config.accordionDefaultOpen && openIndex === 0) {\r\n this.props.viewController.setGridPosition();\r\n }\r\n };\r\n\r\n private renderGridCarousel = () => {\r\n const { config: propsConfig } = this.props;\r\n const { gridCTA } = propsConfig;\r\n const productGridCTAConfig = {\r\n enabled: gridCTA && gridCTA.enabled,\r\n label: gridCTA && gridCTA.label,\r\n absoluteUrl: gridCTA && gridCTA.absoluteUrl,\r\n url: gridCTA && gridCTA.url,\r\n newTab: gridCTA && gridCTA.newTab\r\n };\r\n const {\r\n numColumnsMobile,\r\n numColumnsDesktop,\r\n numColumnsLargeScreen,\r\n numColumnsExtraLargeScreen\r\n } = propsConfig.productGridBreakpoints;\r\n\r\n const carouselSettings = {\r\n dots: false,\r\n infinite: false,\r\n slidesToShow: numColumnsExtraLargeScreen,\r\n slidesToScroll: 1,\r\n responsive: [\r\n {\r\n breakpoint: Breakpoints.extraLargeScreen,\r\n settings: {\r\n slidesToShow: numColumnsLargeScreen,\r\n slidesToScroll: 1,\r\n infinite: false,\r\n dots: false\r\n }\r\n },\r\n {\r\n breakpoint: Breakpoints.largeScreen,\r\n settings: {\r\n slidesToShow: numColumnsDesktop,\r\n slidesToScroll: 1,\r\n infinite: false,\r\n dots: false\r\n }\r\n },\r\n {\r\n breakpoint: Breakpoints.desktop,\r\n settings: {\r\n slidesToShow: numColumnsMobile,\r\n slidesToScroll: 1,\r\n infinite: false,\r\n dots: false,\r\n arrows: true\r\n }\r\n }\r\n ]\r\n };\r\n\r\n const productCarouselProps: IProductCarousel['config'] = {\r\n carouselSettings,\r\n gridItems: this.props.viewController.data.gridItems,\r\n hideProductBadge: propsConfig.hideProductBadge,\r\n showSubDisplayName: propsConfig.showSubDisplayName,\r\n hideProductPrice: propsConfig.hideProductPrice,\r\n hideProductPriceRange: propsConfig.hideProductPriceRange,\r\n hideProductRating: propsConfig.hideProductRating,\r\n ctaType: propsConfig.ctaType,\r\n enableNotifyMe: propsConfig.enableNotifyMe,\r\n enableQuickView: propsConfig.enableQuickView,\r\n enableMobileQuickView: propsConfig.enableMobileQuickView,\r\n hideReadReviewsLink: propsConfig.productGridHideReadReviewsLink,\r\n hideReviewsNumber: propsConfig.hideReviewsNumber,\r\n enableShadePicker: propsConfig.enableShadePicker,\r\n enableSizePicker: propsConfig.productCarouselEnableSizePicker,\r\n enableHoverInteraction: propsConfig.enableHoverInteraction,\r\n shortDescriptionLocation: propsConfig.shortDescriptionLocation,\r\n enableProductDetailLink: propsConfig.enableProductDetailLink,\r\n enableQuickViewShortcut: propsConfig.enableQuickViewShortcut,\r\n enableAutoReplenishment: propsConfig.enableAutoReplenishment,\r\n autoReplenishOptions: propsConfig.autoReplenishOptions || [],\r\n autoReplenishToggleType: propsConfig.autoReplenishToggleType,\r\n showProductQuantitySelector: propsConfig.showProductQuantitySelector,\r\n hideProductPricePerUnit: propsConfig.hideProductPricePerUnit,\r\n translationsOverwrites: propsConfig.translationsOverwrites\r\n };\r\n\r\n const productGrid = (\r\n <>\r\n {this.renderGridHeader()}\r\n \r\n \r\n );\r\n\r\n return propsConfig.enableAccordion ? (\r\n \r\n {productGrid}\r\n \r\n ) : (\r\n productGrid\r\n );\r\n };\r\n\r\n private getMainGridContent() {\r\n const { data, setProductSortingDropdownValue } = this.props.viewController;\r\n const { isAllGiftsFilterApplied, appliedFilters } = this.props.viewController.data;\r\n\r\n const {\r\n productsNumber,\r\n isFilterDisplayStacked,\r\n areFiltersApplied,\r\n productSortingDropdownValue\r\n } = data;\r\n const { gridCTA, hideSorting, filterData } = this.props.config;\r\n\r\n const productGridCTAConfig = {\r\n enabled: gridCTA && gridCTA.enabled,\r\n label: gridCTA && gridCTA.label,\r\n absoluteUrl: gridCTA && gridCTA.absoluteUrl,\r\n url: gridCTA && gridCTA.url,\r\n newTab: gridCTA && gridCTA.newTab\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n private renderContainer() {\r\n const {\r\n gridAccordionIconType,\r\n accordionTitle = '',\r\n accordionSubtext = '',\r\n accordionDefaultOpen = false,\r\n enableAccordion\r\n } = this.props.config;\r\n\r\n const header = this.renderGridHeader();\r\n\r\n return (\r\n <>\r\n {header && {header}}\r\n {enableAccordion ? (\r\n \r\n {this.getMainGridContent()}\r\n \r\n ) : (\r\n this.getMainGridContent()\r\n )}\r\n \r\n );\r\n }\r\n\r\n public render() {\r\n const { enableGridCarousel } = this.props.config;\r\n const isLoaded = this.props.viewController.data.isLoaded;\r\n\r\n if (!isLoaded) {\r\n return null;\r\n }\r\n\r\n if (enableGridCarousel) {\r\n return this.renderGridCarousel();\r\n }\r\n\r\n return (\r\n <>\r\n {this.renderContainer()}\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nProductGridWrapper.displayName = 'ProductGrid';\r\n\r\nexport default ProductGridWrapper;\r\n"],"sourceRoot":""}