{"version":3,"sources":["webpack:///./src/internal/constants/ProductContentPosition.ts","webpack:///./src/internal/constants/ElementPosition.ts","webpack:///./src/internal/views/product-full/ProductFullImageList.tsx","webpack:///./src/exported/product-full/LeftStickyColumn.tsx","webpack:///./src/exported/product-full/RightStickyColumn.tsx","webpack:///./src/exported/product-full/ProductFull.tsx","webpack:///./src/exported/product-image-nav-menu/ProductImageNavMenu.tsx"],"names":["ProductContentPosition","ElementPosition","ProductImagesMainWrapper","div","ProductImageList","ImageWrapper","space24","NavMenu","space100","space28","currentViewedImageIndex","handleScroll","imageRefs","scrollPosition","window","scrollY","topmostVisibleIndex","reduce","lastVisibleIndex","currentRef","currentIndex","component","current","offsetTop","debounceScroll","clearTimeout","scrollResetTimeout","setTimeout","scrollToImage","ref","scrollIntoView","behavior","block","zoomIconWrapperClassNames","classnames","imageListWrapperClassNames","imageListClassNames","navMenuClassNames","addEventListener","this","removeEventListener","props","images","isProductLoaded","enableZoom","imageList","navItemList","map","image","index","push","isFirstImage","waypoint","innerRef","key","src","imgPath","altText","alt","progressiveLoad","enableProgressiveImages","minWidth","desktop","ProductZoomButton","className","showIcon","productImageNavMenuClassNames","active","dot","ProductImageNavMenu","onClick","stickyColumnStyle","StyledAccordionColumn","ComponentWrapper","stickyColumn","LEFT","ProductFullImageListWrapper","ItemWrapper","product","translations","leftStickyColumnConfig","config","socialShareProps","shareTitle","displayName","shareUrl","productUrl","socialShare","dataTestId","useOverviewAccordions","useLegacyDescription","productFullFieldAccordion","ProductOverview","vtoProps","toggleProductImageSection","vtoConfig","selectedSku","isVtoMakeupEnabled","name","useIngredientsAccordion","allIngredients","ProductIngredients","useAccordion","howDoesItWork","howDoesItWorkLabel","useHowDoesItWorkAccordion","ProductUsageField","usageField","usageFieldAccordionLabel","ProductShortDescription","description","shortDescription","promoBanner","nId","nodeId","ProductPromoBanner","nid","leftStickyColumnClassNames","perfectFor","perfectForClassNames","customSizeImages","smallImages","hideProductImageSection","hideProductBadge","productInformationColumnFixed","productOverviewPosition","productIngredientsPosition","productHowDoesItWorkPosition","productFullBadgePosition","imageCarouselSettings","perfectForConfig","displayBadgeOnLeftColumn","productFullImageCarouselSettings","productFull","productFullCarouselProps","displayBadgeOnCurrentColumn","leftsideOverview","LEFT_COLUMN","leftsideHowDoesItWork","leftsideIngredients","leftSidePromoBanner","enabled","position","enableImageCarousel","shortDescriptionConfigs","overrides","renderShortDescription","location","showBadges","perfectForEnabled","xs","sm","lg","ProductFullCarousel","ProductBadge","getVto","getSocialShare","getProductShortDescription","getPromoBanner","getProductOverview","getProductHowDoesItWork","getProductIngredients","RIGHT","RightBreadcrumbsWrapper","ProductRatingWrapperStyled","space16","CTAWrapper","space8","StyledPricesWrapper","ProductPricePerUnitRowWrapper","classNames","ProductBreadcrumbs","siteUrl","productFullCarouselConfig","displayBadgeOnRightColumn","productUpdateQuantity","ProductQuantitySelector","onQuantitySelect","maxQuantity","itemMaxQuantity","skuId","currentQuantity","quantity","rightStickyColumnConfig","ProductFullBaseInfo","ratingWrapperClassNames","productId","hideReviewsNumber","productFullHideReadReviewsLink","hideEmptyStars","ratingsEnabled","ratingPropsConfig","isDisabled","numberOfStars","hideStars","hideReadReviewsLink","getProductRating","ProductOverviewSummary","parentProduct","handleSizeSelect","productFullSizePicker","sizePicker","wrapperClassNames","ProductSizePicker","sizes","selectedSize","onSelect","type","options","product_full","autoReplenishment","autoReplenishmentProductFull","productFullQuantityAutoreplenishSectionClassNames","selectedAutoReplenishOption","isAutoReplenishSelected","setAutoReplenishOption","setAutoReplenishSelection","autoReplenishToggleType","toggleAutoReplenishSelection","autoReplenishmentConfig","getAutoReplenishmentConfig","productAutoReplenishProps","selectedOption","autoReplenishOptions","isSelected","ProductAutoReplenish","handleShadeSelect","enableShadesSidebar","shadeSwatches","shadeSwatchesProductFull","shadeSwatchesConfig","productShadePickerProps","isShaded","shades","selectedShade","onShadeSelect","separator","isButtonModal","ProductFullShadePicker","dropdownComponentConfig","componentType","ComponentTypes","PRODUCT_FULL","shadeDropdownProps","selectedHexValue","hexVal","viewController","diContainer","get","productShadePickerComponentViewController","ProductShadePickerComponent","productFullCTAWrapperClassNames","largeImages","configCTA","replenishment","isCoreSite","getFindInStoreButton","formattedPrice","formattedOriginalPrice","ProductPriceFormatted","productPricePerUnitRowWrapperClassNames","productPricePerUnitClassNames","formattedPricePerUnit","priceTag","defaultPromoMessage","promoMessage","skuPromoMessaging","ProductPromoMessage","productInstallmentPriceProps","defaultPrice","Number","originalPrice","ProductInstallmentsPrice","engravingClassNames","ProductEngraving","findInStoreClassNames","skuBaseId","perlgem","SKU_BASE_ID","isFavorite","handleFavoriteClick","FavoriteButton","togglePerfectShades","isPerfectShadeEnabled","isVtoFoundationEnabled","vtoShadeGridProps","subHeader","perfectShades","isCarousel","rightStickyColumnClassNames","pricesWrapperClassNames","engravingEnabled","favoritesEnabled","isReplenishable","isEngravable","isLoaded","showProductQuantitySelector","breadcrumbsAlignment","showProductMiniOverview","hideProductRating","hideSizeWhenSingular","hideProductPrice","hideProductPricePerUnit","hidePromoMessage","showFindInStore","productFullCta","enableAutoReplenishment","ctaType","rightsideBreadcrumbs","rightsideOverview","RIGHT_COLUMN","rightsideIngredients","rightsideHowDoesItWork","rightSidePromoBanner","displayPromoBanner","displayIngredients","NONE","displayInvMessage","mobileCarouselSettings","isCarouselEnabledOnMobile","autoReplenishmentEnabled","undefined","getProductBreadcrumbs","getRatingAndReviews","maxWidth","getProductFullCarousel","getProductFullAddToBagButton","getProductFullBaseInfo","getProductOverviewSummary","hasMultipleSizes","isSized","getProductSizePicker","getProductFullShadePicker","getProductShadePickerComponent","getProductQuantitySelector","getProductAutoReplenish","getProductPriceRow","getProductPricePerUnit","getProductPromoMessage","getProductInstallmentsPrice","getProductEngraving","getFindInStoreLink","getPickUpInStoreButton","getFavoriteButton","InventoryStatusMessage","inventoryStatus","StickyColumnContainer","space20","StyledStickyContainer","ProductFullWrapper","ProductInfoPopupCTAContainer","ProductInfoPopupCTA","space60","initReviews","emitReviewsInit","productFullLoaded","emitProductFullLoaded","onLoad","productFullRef","handleState","loaded","document","readyState","data","productInfoPopupCTAContainerClassNames","productInfoPopupCTAClassNames","toggleProductInfoPopup","isProductInfoPopupOpen","productInfoPopupData","productInfoPopupFieldType","productInfoPopupHeader","productInfoPopupConfig","popupHeader","popupDataField","productInfoPopupField","productInfoPopupCtaLabel","ProductInfoPopup","title","onCloseButtonClick","ProductInfoPopupContent","dataToLoad","header","productFullConfig","getCustomSizeImages","mobile","ProductZoom","modelAndSmooshImages","selectShade","isUpdatedInventorySource","productFullAddToBagProps","productShadesSidebarConfig","productShadesSidebarStickyContainerClassName","targetSelector","direction","distance","displayOrder","ProductShadesSidebar","setShowStickyAddToBag","stickyAddToBagVisibleClassName","showStickyAddToBag","gdpr","compliance","productShadesSidebarProps","productSizePickerProps","useDropup","addToBagStickyContainer","stickyAddToBagConfig","ProductStickyAddToBag","productShadesSidebar","productFullClassNames","defaultProductFullConfig","stickyAddToBag","leftsideBreadcrumbs","fullWidthOverview","FULL_WIDTH","fullWidthIngredients","fullWidthHowDoesItWork","fullWidthPromoBanner","stickyAddToBagView","getStickyAddToBag","getProductShadesSidebar","getProductZoom","getRightStickyColumn","getLeftStickyColumn","getProductInfoPopup","Boolean","CartLimitReachedModal","NavItem","button","imageNavMenuItemClassNames"],"mappings":"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","file":"ProductFull.415e32ed1a0c31ecc56c.bundle.js","sourcesContent":["export enum ProductContentPosition {\n LEFT_COLUMN = 'left_column',\n RIGHT_COLUMN = 'right_column',\n FULL_WIDTH = 'full_width',\n NONE = 'none'\n}\n","export enum ElementPosition {\n 'RIGHT' = 'right',\n 'LEFT' = 'left'\n}\n","import * as classnames from 'classnames';\nimport { ContentSpacing, Breakpoints } from 'elc-base-theme';\nimport { ProductImages } from 'elc-images';\nimport { observable } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\nimport styled from 'styled-components';\nimport { IAsset } from '../../domain/entities/Asset';\nimport { SCROLLSPY_OFFSET_TOP } from '../../constants/ImageThumbnailCarouselSettings';\nimport ProductImageNavMenu from '../../../exported/product-image-nav-menu/ProductImageNavMenu';\nimport { Desktop } from 'elc-layouts';\nimport { ProductZoomButton } from '../product-zoom/ProductZoomButton';\nexport interface IProductFullImageList {\n enableZoom?: boolean;\n images: IAsset[];\n productUrl: string;\n displayName: string;\n isProductLoaded: boolean;\n enableProgressiveImages?: boolean;\n}\n\nconst ProductImagesMainWrapper = styled.div`\n display: flex;\n flex-direction: row;\n\n [dir='rtl'] & {\n flex-direction: row-reverse;\n }\n`;\n\nconst ProductImageList = styled.div`\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n`;\n\nconst ImageWrapper = styled.div`\n margin-bottom: ${ContentSpacing.space24};\n position: relative;\n`;\n\nconst NavMenu = styled.div`\n display: flex;\n flex-direction: column;\n align-self: flex-end;\n position: sticky;\n bottom: ${ContentSpacing.space100};\n margin-bottom: ${ContentSpacing.space100};\n margin-left: -${ContentSpacing.space28};\n\n [dir='rtl'] & {\n margin-left: 0;\n margin-right: -${ContentSpacing.space28};\n }\n`;\n\n@observer\nexport class ProductFullImageList extends React.Component {\n @observable\n private currentViewedImageIndex: number = 0;\n private scrollResetTimeout: number;\n private imageRefs: React.RefObject[];\n\n private handleScroll = () => {\n if (this.imageRefs) {\n const scrollPosition = window.scrollY + SCROLLSPY_OFFSET_TOP;\n const topmostVisibleIndex = this.imageRefs.reduce(\n (lastVisibleIndex, currentRef, currentIndex) => {\n const component = currentRef.current;\n if (component && component.offsetTop > scrollPosition) {\n return lastVisibleIndex;\n } else {\n return currentIndex;\n }\n },\n 0\n );\n this.currentViewedImageIndex = topmostVisibleIndex;\n }\n };\n\n private debounceScroll = () => {\n clearTimeout(this.scrollResetTimeout);\n this.scrollResetTimeout = window.setTimeout(() => {\n this.handleScroll();\n }, 100);\n };\n\n public componentDidMount() {\n window.addEventListener('scroll', this.debounceScroll);\n }\n\n public componentWillUnmount() {\n window.removeEventListener('scroll', this.debounceScroll);\n }\n\n private scrollToImage = (ref: React.RefObject) => {\n return () => {\n if (ref && ref.current) {\n ref.current.scrollIntoView({\n behavior: 'smooth',\n block: 'start'\n });\n }\n };\n };\n\n private zoomIconWrapperClassNames = classnames(\n 'elc-image-list-zoom-wrapper',\n 'js-image-list-zoom-wrapper'\n );\n private imageListWrapperClassNames = classnames(\n 'elc-product-image-list-wrapper',\n 'js-product-image-list-wrapper'\n );\n private imageListClassNames = classnames('elc-product-image-list', 'js-product-image-list');\n private navMenuClassNames = classnames(\n 'elc-product-image-nav-menu',\n 'js-product-image-nav-menu'\n );\n\n public render() {\n const { images, isProductLoaded, enableZoom } = this.props;\n const imageList: JSX.Element[] = [];\n const navItemList: JSX.Element[] = [];\n\n if (!isProductLoaded) {\n return ;\n }\n\n if (images) {\n this.imageRefs = [];\n images.map((image, index) => {\n const ref = React.createRef();\n this.imageRefs.push(ref);\n const isFirstImage = !index;\n const waypoint = (\n \n \n {enableZoom && (\n \n {() => (\n \n )}\n \n )}\n \n );\n\n const productImageNavMenuClassNames = classnames(\n 'elc-image-list-nav-item',\n 'js-image-list-nav-item',\n {\n active: this.currentViewedImageIndex === index\n }\n );\n\n const dot = (\n \n );\n\n imageList.push(waypoint);\n navItemList.push(dot);\n });\n }\n\n return (\n \n {navItemList}\n \n {imageList}\n \n \n );\n }\n}\n","import * as React from 'react';\nimport { observer } from 'mobx-react';\nimport { IProductFullConfig } from './ProductFull';\nimport { ITranslationsCollection, config, ServiceView, translate } from 'elc-service';\nimport { VTO } from 'elc-service-view-names';\nimport styled, { css } from 'styled-components';\nimport { Column } from 'elc-grid';\nimport { Product } from '../../internal/domain/entities/Product';\nimport { Sku } from '../../internal/domain/entities/Sku';\nimport { SocialShare } from 'elc-social-share';\nimport { ProductOverview } from '../../internal/views/common/ProductOverview';\nimport { ProductIngredients } from '../../internal/views/common/ProductIngredients';\nimport { Desktop } from 'elc-layouts';\nimport { Breakpoints, ContentSpacing } from 'elc-base-theme';\nimport {\n ProductFullCarousel,\n IProductFullCarousel\n} from '../../internal/views/product-full/ProductFullCarousel';\nimport { ProductFullImageList } from '../../internal/views/product-full/ProductFullImageList';\nimport { ProductBadge } from '../../internal/views/product-badge/ProductBadge';\nimport { classes } from '../../internal/utils/Classes';\nimport { ElementPosition } from '../../internal/constants/ElementPosition';\nimport { ProductContentPosition } from '../../internal/constants/ProductContentPosition';\nimport { SOCIAL_SHARE } from '../../internal/constants/DataTestIdAttributes';\nimport { ProductUsageField } from '../../internal/views/common/ProductUsageField';\nimport { ProductPromoBanner } from '../../internal/views/product-promo-banner/ProductPromoBanner';\nimport { IVto } from '../../internal/interfaces/IVto';\nimport { ProductShortDescription } from '../../internal/views/common/ProductShortDescription';\n\nexport const stickyColumnStyle = css`\n position: sticky;\n top: 0;\n`;\n\nexport interface IStickyColumn {\n stickyColumn?: string;\n}\n\nexport interface IProductImage {\n src: string;\n alt: string;\n assetType?: string;\n}\n\nconst StyledAccordionColumn = styled(Column)`\n margin-bottom: ${ContentSpacing.space24};\n`;\n\nexport interface IStickyLeftColumn {\n className?: string;\n config: IProductFullConfig;\n translations?: ITranslationsCollection;\n product: Product;\n selectedSku: Sku;\n customSizeImages: IProductImage[];\n smallImages: IProductImage[];\n isProductLoaded: boolean;\n allIngredients: string;\n howDoesItWork: string;\n howDoesItWorkLabel: string;\n hideProductImageSection: boolean;\n isVtoMakeupEnabled?: boolean;\n toggleProductImageSection(isHidden: boolean): void;\n enableProgressiveImages?: boolean;\n}\n\nconst ComponentWrapper = styled(Column)`\n ${({ stickyColumn }: IStickyColumn) =>\n stickyColumn !== 'disabled' && stickyColumn === ElementPosition.LEFT\n ? stickyColumnStyle\n : ''}\n`;\n\nconst ProductFullImageListWrapper = styled.div`\n position: relative;\n`;\n\nconst ItemWrapper = styled.div``;\n@config(['imageCarouselSettings', 'shortDescription', 'perfectFor'])\n@translate(['perfectFor'])\n@observer\nexport class LeftStickyColumn extends React.Component {\n private getSocialShare() {\n const { product, translations, config: leftStickyColumnConfig } = this.props;\n\n const socialShareProps = {\n shareTitle: product.displayName,\n shareUrl: product.productUrl,\n translations: translations,\n config: leftStickyColumnConfig.socialShare,\n dataTestId: SOCIAL_SHARE\n };\n\n return ;\n }\n\n private getProductOverview() {\n const { config: leftStickyColumnConfig } = this.props;\n const {\n useOverviewAccordions,\n useLegacyDescription,\n productFullFieldAccordion\n } = leftStickyColumnConfig;\n\n return (\n \n \n \n );\n }\n\n private getVto() {\n const {\n toggleProductImageSection,\n config: leftStickyColumnConfig,\n selectedSku,\n product,\n isVtoMakeupEnabled\n } = this.props;\n const vtoProps: IVto = {\n toggleProductImageSection,\n vtoConfig: leftStickyColumnConfig,\n selectedSku,\n product,\n isVtoMakeupEnabled\n };\n\n return ;\n }\n\n private getProductIngredients() {\n const { useIngredientsAccordion } = this.props.config;\n const { allIngredients } = this.props;\n\n return (\n \n );\n }\n\n private getProductHowDoesItWork() {\n const { howDoesItWork, config: leftStickyColumnConfig, howDoesItWorkLabel } = this.props;\n const { useHowDoesItWorkAccordion } = leftStickyColumnConfig;\n\n return (\n \n );\n }\n\n private getProductShortDescription() {\n return ;\n }\n\n private getPromoBanner() {\n const {\n config: { promoBanner }\n } = this.props;\n\n const nId = promoBanner && promoBanner.nodeId;\n\n return ;\n }\n\n public render() {\n const leftStickyColumnClassNames = classes('left-sticky-column');\n const translations = this.props.translations as ITranslationsCollection;\n const { perfectFor } = translations;\n const perfectForClassNames = classes('perfect-for-wrapper');\n const {\n config: leftStickyColumnConfig,\n customSizeImages,\n smallImages,\n isProductLoaded,\n product,\n selectedSku,\n hideProductImageSection,\n isVtoMakeupEnabled,\n allIngredients,\n howDoesItWork,\n enableProgressiveImages\n } = this.props;\n\n const {\n enableZoom,\n hideProductBadge,\n productInformationColumnFixed,\n productOverviewPosition,\n productIngredientsPosition,\n productHowDoesItWorkPosition,\n productFullBadgePosition,\n promoBanner,\n imageCarouselSettings,\n shortDescription,\n perfectFor: perfectForConfig\n } = leftStickyColumnConfig;\n\n const displayBadgeOnLeftColumn = productFullBadgePosition === ElementPosition.LEFT;\n\n const productFullImageCarouselSettings =\n imageCarouselSettings && imageCarouselSettings.productFull;\n\n const productFullCarouselProps: IProductFullCarousel = {\n config: {\n ...this.props.config,\n displayBadgeOnCurrentColumn: displayBadgeOnLeftColumn,\n imageCarouselSettings: productFullImageCarouselSettings,\n enableProgressiveImages\n },\n customSizeImages,\n smallImages\n };\n\n const leftsideOverview = productOverviewPosition === ProductContentPosition.LEFT_COLUMN;\n const leftsideHowDoesItWork =\n howDoesItWork && productHowDoesItWorkPosition === ProductContentPosition.LEFT_COLUMN;\n const leftsideIngredients =\n allIngredients && productIngredientsPosition === ProductContentPosition.LEFT_COLUMN;\n const leftSidePromoBanner =\n promoBanner &&\n promoBanner.enabled &&\n promoBanner.position === ProductContentPosition.LEFT_COLUMN;\n\n const enableImageCarousel =\n productFullImageCarouselSettings && productFullImageCarouselSettings.enabled;\n const shortDescriptionConfigs =\n shortDescription && shortDescription.overrides && shortDescription.overrides.productFull\n ? { ...shortDescription, ...shortDescription.overrides.productFull }\n : shortDescription;\n const renderShortDescription =\n shortDescriptionConfigs && shortDescriptionConfigs.location === ElementPosition.LEFT;\n const showBadges = !hideProductBadge && displayBadgeOnLeftColumn;\n const perfectForEnabled = perfectForConfig && perfectForConfig.enabled;\n\n return (\n \n \n {() => (\n <>\n {enableImageCarousel && !hideProductImageSection && (\n \n )}\n {!enableImageCarousel && !hideProductImageSection && (\n \n \n {showBadges && (\n \n )}\n \n )}\n {isVtoMakeupEnabled && this.getVto()}\n {this.getSocialShare()}\n {perfectForEnabled && (\n \n {perfectFor}\n \n )}\n {renderShortDescription && this.getProductShortDescription()}\n {leftSidePromoBanner && this.getPromoBanner()}\n {leftsideOverview && this.getProductOverview()}\n {leftsideHowDoesItWork && this.getProductHowDoesItWork()}\n {leftsideIngredients && this.getProductIngredients()}\n \n )}\n \n \n );\n }\n}\n","import * as React from 'react';\nimport { observer } from 'mobx-react';\nimport { IProductFullConfig } from './ProductFull';\nimport { ITranslationsCollection, ServiceView, config } from 'elc-service';\nimport styled from 'styled-components';\nimport { Column } from 'elc-grid';\nimport { stickyColumnStyle, IStickyColumn, IProductImage } from './LeftStickyColumn';\nimport { ContentSpacing, Breakpoints, breakpoint } from 'elc-base-theme';\nimport { ProductBreadcrumbs } from '../product-breadcrumbs/ProductBreadcrumbs';\nimport { Product } from '../../internal/domain/entities/Product';\nimport { Sku } from '../../internal/domain/entities/Sku';\nimport { ProductFullCarousel } from '../../internal/views/product-full/ProductFullCarousel';\nimport ProductQuantitySelector from '../product-quantity-selector/ProductQuantitySelector';\nimport { DEFAULT_NUMBER_OF_STARS } from '../../internal/constants/ProductReview';\nimport { ProductFullBaseInfo } from '../../internal/views/product-full/ProductFullBaseInfo';\nimport { ProductOverviewSummary } from '../../internal/views/common/ProductOverviewSummary';\nimport ProductSizePicker from '../../internal/views/product-size-picker/ProductSizePicker';\nimport {\n IProductAutoReplenish,\n ProductAutoReplenish\n} from '../../internal/views/product-auto-replenish/ProductAutoReplenish';\nimport { ProductFullShadePicker } from '../../internal/views/product-full/ProductFullShadePicker';\nimport { ProductShadePickerComponent } from '../../internal/views/common/ProductShadePickerComponent';\nimport { ProductPromoMessage } from '../../internal/views/common/ProductPromoMessage';\nimport { ProductOverview } from '../../internal/views/common/ProductOverview';\nimport { ProductIngredients } from '../../internal/views/common/ProductIngredients';\nimport ProductInstallmentsPrice, {\n IProductInstallmentsPrice\n} from '../../internal/views/product-installments-price/ProductInstallmentsPrice';\nimport { InventoryStatusMessage } from '../../internal/views/common/InventoryStatusMessage';\nimport { Mobile, Desktop } from 'elc-layouts';\nimport { classes } from '../../internal/utils/Classes';\nimport { ProductCTAWrapperTheme } from '../../theme/default-theme';\nimport { SocialShare } from 'elc-social-share';\nimport { ElementPosition } from '../../internal/constants/ElementPosition';\nimport { ProductContentPosition } from '../../internal/constants/ProductContentPosition';\nimport { SOCIAL_SHARE } from '../../internal/constants/DataTestIdAttributes';\nimport { ProductEngraving } from '../../internal/views/product-engraving/ProductEngraving';\nimport { FavoriteButton } from '../../internal/views/product-favorites/FavoriteButton';\nimport { ProductUsageField } from '../../internal/views/common/ProductUsageField';\nimport { ProductBadge } from '../../internal/views/product-badge/ProductBadge';\nimport {\n PRODUCT_CTA,\n PRODUCT_RATING,\n PRODUCT_RATING_WRAPPER,\n FIND_IN_STORE_BUTTON,\n VTO,\n PICK_UP_IN_STORE\n} from 'elc-service-view-names';\nimport { ProductPromoBanner } from '../../internal/views/product-promo-banner/ProductPromoBanner';\nimport { IVto } from '../../internal/interfaces/IVto';\nimport { IShadePickerConfig } from '../../internal/interfaces/IShadePicker';\nimport { PriceFormatted } from 'elc-formatters';\nimport { ProductPriceFormatted } from '../../internal/views/common/ProductPriceFormatted';\nimport { ComponentTypes } from '../../internal/constants/ComponentTypes';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\nimport { getMobileCarouselSettings } from '../../internal/constants/ImageThumbnailCarouselSettings';\nimport { ADD_TO_BAG } from '../../internal/constants/CTATypes';\nimport { IProductRatingConfig } from '../product-rating/ProductRatingWrapper';\n\nexport interface IStickyRightColumn {\n className?: string;\n config: IProductFullConfig;\n translations?: ITranslationsCollection;\n product: Product;\n selectedSku: Sku;\n customSizeImages: IProductImage[];\n largeImages: IProductImage[];\n smallImages: IProductImage[];\n isAutoReplenishSelected: boolean;\n selectedAutoReplenishOption: number;\n toggleAutoReplenishSelection(): void;\n productUpdateQuantity(quantity: number): void;\n handleSizeSelect(label: string, productId: string): void;\n handleShadeSelect(name: string, productId: string): void;\n setAutoReplenishOption(option: number): void;\n setAutoReplenishSelection(isSelected: boolean): void;\n toggleProductImageSection(isHidden: boolean): void;\n togglePerfectShades(isHidden: boolean): void;\n autoReplenishToggleType?: string;\n handleFavoriteClick(): void;\n allIngredients: string;\n howDoesItWork: string;\n howDoesItWorkLabel: string;\n productFullSizePicker?: string;\n productFullCta: boolean;\n enableAutoReplenishment?: boolean;\n renderShortDescription?: boolean;\n isVtoMakeupEnabled?: boolean;\n isVtoFoundationEnabled?: boolean;\n isPerfectShadeEnabled: boolean;\n engravingEnabled?: boolean;\n favoritesEnabled?: boolean;\n productFullRef?: React.RefObject;\n isLoaded: boolean;\n}\n\nconst ComponentWrapper = styled(Column)`\n display: flex;\n flex-flow: row wrap;\n order: 2;\n ${({ stickyColumn }: IStickyColumn) =>\n stickyColumn !== 'disabled' && stickyColumn === ElementPosition.RIGHT\n ? stickyColumnStyle\n : ''}\n`;\n\nconst RightBreadcrumbsWrapper = styled.div`\n width: 100%;\n\n .elc-breadcrumbs {\n padding: 0;\n }\n`;\n\nconst ProductRatingWrapperStyled = styled.div`\n margin: ${ContentSpacing.space24} 0 ${ContentSpacing.space16};\n ${breakpoint('desktop')`\n margin: 0;\n `};\n`;\n\nconst CTAWrapper = styled.div`\n position: fixed;\n width: 50%;\n padding: ${ContentSpacing.space8} 0;\n z-index: 10;\n ${ProductCTAWrapperTheme};\n ${breakpoint('desktop')`\n background: inherit;\n box-shadow: inherit;\n position: inherit;\n `};\n`;\n\nconst StyledPricesWrapper = styled.div`\n padding: ${ContentSpacing.space8} 0;\n`;\n\nconst ProductPricePerUnitRowWrapper = styled.div`\n margin: 0 ${ContentSpacing.space8} 0;\n ${breakpoint('desktop')`\n margin: 0;\n `};\n`;\n\n@config([\n 'shadeSwatches',\n 'shadeDropdown',\n 'ratingsEnabled',\n 'imageCarouselSettings',\n 'autoReplenishment',\n 'shortDescription',\n 'isCoreSite'\n])\n@observer\nexport class RightStickyColumn extends React.Component {\n public static displayName: string;\n\n private getProductBreadcrumbs() {\n const classNames = classes('breadcrumbs');\n\n return (\n \n \n \n );\n }\n\n private getProductFullCarousel() {\n const { customSizeImages, smallImages, config: productFullCarouselConfig } = this.props;\n const { productFullBadgePosition, imageCarouselSettings } = productFullCarouselConfig;\n const displayBadgeOnRightColumn = productFullBadgePosition === ElementPosition.RIGHT;\n const productFullImageCarouselSettings =\n imageCarouselSettings && imageCarouselSettings.productFull;\n\n return (\n \n );\n }\n\n private getProductQuantitySelector() {\n const { productUpdateQuantity, selectedSku, product } = this.props;\n\n return (\n \n );\n }\n\n private getProductFullBaseInfo() {\n const {\n product,\n selectedSku,\n config: rightStickyColumnConfig,\n config: { shortDescription }\n } = this.props;\n const { hideProductBadge, productFullBadgePosition } = rightStickyColumnConfig;\n\n const displayBadgeOnRightColumn = productFullBadgePosition === ElementPosition.RIGHT;\n\n const shortDescriptionConfigs =\n shortDescription && shortDescription.overrides && shortDescription.overrides.productFull\n ? { ...shortDescription, ...shortDescription.overrides.productFull }\n : shortDescription;\n const renderShortDescription =\n shortDescriptionConfigs && shortDescriptionConfigs.location === ElementPosition.RIGHT;\n const showBadges = !hideProductBadge && displayBadgeOnRightColumn;\n\n return (\n <>\n \n {() =>\n showBadges && \n }\n \n \n \n );\n }\n\n private getRatingAndReviews() {\n const ratingWrapperClassNames = classes('rating-component');\n const {\n product: { productId }\n } = this.props;\n const {\n hideReviewsNumber,\n productFullHideReadReviewsLink,\n hideEmptyStars,\n ratingsEnabled\n } = this.props.config;\n\n const ratingPropsConfig = {\n isDisabled: true,\n numberOfStars: DEFAULT_NUMBER_OF_STARS,\n hideStars: hideEmptyStars,\n productId,\n hideReviewsNumber,\n hideReadReviewsLink: productFullHideReadReviewsLink\n };\n\n return (\n \n {ratingsEnabled ? (\n this.getProductRating(ratingPropsConfig)\n ) : (\n \n )}\n \n );\n }\n\n private getProductRating(ratingPropsConfig: IProductRatingConfig) {\n return ;\n }\n\n private getProductOverviewSummary() {\n const { selectedSku } = this.props;\n const classNames = classes('product-overview');\n\n return (\n \n );\n }\n\n private getProductSizePicker() {\n const { product, selectedSku, handleSizeSelect, productFullSizePicker } = this.props;\n const { sizePicker } = this.props.config;\n const wrapperClassNames = classes('size-picker-container');\n\n return (\n
\n \n
\n );\n }\n\n private getAutoReplenishmentConfig() {\n const { autoReplenishment } = this.props.config;\n const autoReplenishmentProductFull =\n autoReplenishment &&\n autoReplenishment.overrides &&\n autoReplenishment.overrides.productFull;\n\n return { ...autoReplenishment, ...autoReplenishmentProductFull };\n }\n\n private getProductAutoReplenish() {\n const productFullQuantityAutoreplenishSectionClassNames = classes(\n 'product-quantity-autoreplenish-section'\n );\n\n const {\n selectedAutoReplenishOption,\n isAutoReplenishSelected,\n setAutoReplenishOption,\n setAutoReplenishSelection,\n autoReplenishToggleType,\n toggleAutoReplenishSelection\n } = this.props;\n\n const autoReplenishmentConfig = this.getAutoReplenishmentConfig();\n\n const productAutoReplenishProps: IProductAutoReplenish = {\n selectedOption: selectedAutoReplenishOption,\n onSelect: setAutoReplenishOption,\n autoReplenishOptions: this.props.config.autoReplenishOptions,\n isSelected: isAutoReplenishSelected,\n toggleAutoReplenishSelection,\n setAutoReplenishSelection,\n translations: this.props.translations,\n autoReplenishToggleType,\n autoReplenishmentConfig\n };\n\n return (\n \n );\n }\n\n private getProductFullShadePicker() {\n const { product, selectedSku, handleShadeSelect } = this.props;\n const { enableShadesSidebar, shadeSwatches } = this.props.config;\n const shadeSwatchesProductFull =\n shadeSwatches && shadeSwatches.overrides && shadeSwatches.overrides.productFull;\n const shadeSwatchesConfig = { ...shadeSwatches, ...shadeSwatchesProductFull };\n\n const productShadePickerProps: IShadePickerConfig = {\n isShaded: product.isShaded,\n shades: product.shades,\n selectedShade: selectedSku.selectedShade,\n onShadeSelect: handleShadeSelect,\n separator: ' ',\n isButtonModal: enableShadesSidebar,\n productId: product.productId,\n shadeSwatchesConfig\n };\n\n return ;\n }\n\n private getProductShadePickerComponent() {\n const {\n selectedSku: { selectedShade },\n product: { isShaded, shades, productId },\n handleShadeSelect\n } = this.props;\n\n const dropdownComponentConfig = {\n componentType: ComponentTypes.PRODUCT_FULL,\n shadeDropdownProps: {\n selectedShade,\n selectedHexValue: selectedShade.hexVal,\n shades,\n onShadeSelect: handleShadeSelect,\n productId\n },\n viewController: diContainer.get(serviceNames.productShadePickerComponentViewController)\n };\n\n return isShaded && ;\n }\n\n private getProductFullAddToBagButton() {\n const productFullCTAWrapperClassNames = classes('product-full-cta-wrapper');\n\n const {\n product,\n selectedSku,\n largeImages,\n selectedAutoReplenishOption,\n config: rightStickyColumnConfig\n } = this.props;\n\n const configCTA = {\n selectedSku,\n skuId: selectedSku.skuId,\n largeImages,\n ...rightStickyColumnConfig,\n replenishment: selectedAutoReplenishOption,\n quantity: product.quantity\n };\n\n const ctaButton = configCTA.isCoreSite ? (\n this.getFindInStoreButton()\n ) : (\n \n \n \n );\n\n return ctaButton;\n }\n\n private getProductPriceRow() {\n const { formattedPrice, formattedOriginalPrice } = this.props.selectedSku;\n\n return (\n \n );\n }\n\n private getProductPricePerUnit() {\n const productPricePerUnitRowWrapperClassNames = classes(\n 'product-price-per-unit-row-wrapper'\n );\n const productPricePerUnitClassNames = classes('product-price-per-unit');\n\n const { formattedPricePerUnit } = this.props.selectedSku;\n\n return (\n \n \n \n );\n }\n\n private getProductPromoMessage() {\n const translations = this.props.translations as ITranslationsCollection;\n const { defaultPromoMessage } = translations;\n const { selectedSku } = this.props;\n const { skuPromoMessaging: skuPromoMessage } = selectedSku;\n const promoMessage = skuPromoMessage || defaultPromoMessage;\n\n return ;\n }\n\n private getProductOverview() {\n const {\n useOverviewAccordions,\n useLegacyDescription,\n productFullFieldAccordion\n } = this.props.config;\n\n return (\n \n );\n }\n\n private getProductIngredients() {\n const { allIngredients, config: rightStickyColumnConfig } = this.props;\n const { useIngredientsAccordion } = rightStickyColumnConfig;\n\n return (\n \n );\n }\n\n private getProductHowDoesItWork() {\n const { config: rightStickyColumnConfig, howDoesItWork, howDoesItWorkLabel } = this.props;\n const { useHowDoesItWorkAccordion } = rightStickyColumnConfig;\n\n return (\n \n );\n }\n\n private getProductInstallmentsPrice() {\n const { selectedSku } = this.props;\n\n const productInstallmentPriceProps: IProductInstallmentsPrice = {\n defaultPrice: Number(selectedSku.originalPrice),\n componentType: ComponentTypes.PRODUCT_FULL\n };\n\n return ;\n }\n\n private getSocialShare() {\n const translations = this.props.translations as ITranslationsCollection;\n const { product, config: rightStickyColumnConfig } = this.props;\n\n const socialShareProps = {\n shareTitle: product.displayName,\n shareUrl: product.productUrl,\n translations: translations,\n config: rightStickyColumnConfig.socialShare,\n dataTestId: SOCIAL_SHARE\n };\n\n return ;\n }\n\n private getProductEngraving() {\n const engravingClassNames = classes('product-engraving');\n\n return (\n \n );\n }\n\n private getFindInStoreButton() {\n const findInStoreClassNames = classes('find-in-store-button');\n\n return (\n
\n \n
\n );\n }\n\n private getFindInStoreLink() {\n const findInStoreClassNames = classes('find-in-store');\n\n return (\n
\n \n
\n );\n }\n\n private getPickUpInStoreButton() {\n\n return (\n \n );\n }\n\n private getFavoriteButton() {\n const {\n selectedSku: { isFavorite },\n handleFavoriteClick\n } = this.props;\n\n return ;\n }\n\n private getVto() {\n const {\n toggleProductImageSection,\n product,\n selectedSku,\n handleShadeSelect,\n largeImages,\n selectedAutoReplenishOption,\n config: rightStickyColumnConfig,\n togglePerfectShades,\n isPerfectShadeEnabled,\n isVtoFoundationEnabled,\n isVtoMakeupEnabled\n } = this.props;\n const {\n productId,\n isShaded,\n shades,\n displayName,\n quantity,\n subHeader,\n perfectShades\n } = product;\n const productShadePickerProps = {\n isShaded,\n shades,\n perfectShades,\n selectedShade: selectedSku.selectedShade,\n onShadeSelect: handleShadeSelect,\n separator: ' ',\n isCarousel: true,\n productId,\n isPerfectShadeEnabled\n };\n const vtoProps: IVto = {\n toggleProductImageSection,\n vtoConfig: rightStickyColumnConfig,\n selectedSku,\n isVtoFoundationEnabled,\n isVtoMakeupEnabled,\n handleShadeSelect,\n product,\n vtoShadeGridProps: {\n subHeader,\n productShadePickerProps,\n largeImages,\n selectedAutoReplenishOption,\n selectedSku,\n displayName,\n quantity,\n config: rightStickyColumnConfig,\n togglePerfectShades,\n isPerfectShadeEnabled\n }\n };\n\n return ;\n }\n\n private getPromoBanner() {\n const {\n config: { promoBanner }\n } = this.props;\n\n const nId = promoBanner && promoBanner.nodeId;\n\n return ;\n }\n\n // eslint-disable-next-line complexity\n public render() {\n const rightStickyColumnClassNames = classes('right-sticky-column');\n const pricesWrapperClassNames = classes('product-prices-wrapper');\n\n const {\n config: rightStickyColumnConfig,\n product,\n isVtoMakeupEnabled,\n isVtoFoundationEnabled,\n engravingEnabled,\n favoritesEnabled,\n selectedSku: { isReplenishable, isEngravable },\n allIngredients,\n howDoesItWork,\n isLoaded,\n selectedSku\n } = this.props;\n const {\n showProductQuantitySelector,\n breadcrumbsAlignment,\n showProductMiniOverview,\n hideProductRating,\n hideSizeWhenSingular,\n hideProductPrice,\n hideProductPricePerUnit,\n hidePromoMessage,\n productInformationColumnFixed,\n productOverviewPosition,\n productIngredientsPosition,\n showFindInStore,\n productHowDoesItWorkPosition,\n productFullCta,\n enableAutoReplenishment,\n promoBanner,\n imageCarouselSettings,\n ctaType,\n isCoreSite\n } = rightStickyColumnConfig;\n\n const rightsideBreadcrumbs = breadcrumbsAlignment === ElementPosition.RIGHT;\n const rightsideOverview = productOverviewPosition === ProductContentPosition.RIGHT_COLUMN;\n const rightsideIngredients =\n allIngredients && productIngredientsPosition === ProductContentPosition.RIGHT_COLUMN;\n const rightsideHowDoesItWork =\n howDoesItWork && productHowDoesItWorkPosition === ProductContentPosition.RIGHT_COLUMN;\n const rightSidePromoBanner =\n promoBanner &&\n promoBanner.enabled &&\n promoBanner.position === ProductContentPosition.RIGHT_COLUMN;\n const displayPromoBanner = promoBanner && promoBanner.enabled;\n const displayIngredients =\n allIngredients && productIngredientsPosition !== ProductContentPosition.NONE;\n const displayInvMessage = !isCoreSite && (!ctaType || ctaType === ADD_TO_BAG);\n\n const productFullImageCarouselSettings =\n imageCarouselSettings && imageCarouselSettings.productFull;\n const mobileCarouselSettings =\n productFullImageCarouselSettings &&\n getMobileCarouselSettings(productFullImageCarouselSettings);\n const isCarouselEnabledOnMobile = mobileCarouselSettings && mobileCarouselSettings.enabled;\n const enableImageCarousel = productFullImageCarouselSettings\n ? isCarouselEnabledOnMobile\n : true;\n\n const autoReplenishmentConfig = this.getAutoReplenishmentConfig();\n const autoReplenishmentEnabled =\n autoReplenishmentConfig && autoReplenishmentConfig.enabled !== undefined\n ? autoReplenishmentConfig.enabled\n : enableAutoReplenishment;\n\n return (\n \n {rightsideBreadcrumbs && this.getProductBreadcrumbs()}\n {!hideProductRating && isLoaded && this.getRatingAndReviews()}\n \n {() => (\n <>\n {enableImageCarousel && this.getProductFullCarousel()}\n {(isVtoMakeupEnabled || isVtoFoundationEnabled) && this.getVto()}\n {this.getProductOverview()}\n {displayIngredients && this.getProductIngredients()}\n {this.getSocialShare()}\n {howDoesItWork && this.getProductHowDoesItWork()}\n {productFullCta && this.getProductFullAddToBagButton()}\n {displayPromoBanner && this.getPromoBanner()}\n \n )}\n \n {this.getProductFullBaseInfo()}\n {showProductMiniOverview && this.getProductOverviewSummary()}\n {((hideSizeWhenSingular && product.hasMultipleSizes) ||\n (!hideSizeWhenSingular && product.isSized)) &&\n this.getProductSizePicker()}\n {this.getProductFullShadePicker()}\n {this.getProductShadePickerComponent()}\n {showProductQuantitySelector && this.getProductQuantitySelector()}\n {isReplenishable && autoReplenishmentEnabled && this.getProductAutoReplenish()}\n \n {() => (\n <>\n {this.getProductFullAddToBagButton()}\n {rightSidePromoBanner && this.getPromoBanner()}\n {rightsideOverview && this.getProductOverview()}\n {rightsideIngredients && this.getProductIngredients()}\n {rightsideHowDoesItWork && this.getProductHowDoesItWork()}\n \n )}\n \n {!hideProductPrice && (\n \n {this.getProductPriceRow()}\n {!hideProductPricePerUnit && this.getProductPricePerUnit()}\n \n )}\n {!hidePromoMessage && this.getProductPromoMessage()}\n {this.getProductInstallmentsPrice()}\n {engravingEnabled && isEngravable && this.getProductEngraving()}\n {!isCoreSite && showFindInStore && this.getFindInStoreLink()}\n {this.getPickUpInStoreButton()}\n {favoritesEnabled && this.getFavoriteButton()}\n {displayInvMessage && (\n \n )}\n \n );\n }\n}\n\nRightStickyColumn.displayName = 'RightStickyColumn';\n","import * as React from 'react';\nimport styled from 'styled-components';\nimport { observer } from 'mobx-react';\nimport { translate, ITranslationsCollection, config } from 'elc-service';\nimport { Portal } from 'elc-portal';\nimport { ISocialShareConfig } from 'elc-social-share';\nimport { Container, Row } from 'elc-grid';\nimport { ContentSpacing, Breakpoints } from 'elc-base-theme';\nimport { StickyContainer } from 'elc-sticky-container';\nimport { ICoreProduct } from '../../api/ProdcatApiSdk';\nimport { ProductBreadcrumbs } from '../product-breadcrumbs/ProductBreadcrumbs';\nimport { ProductFullViewController } from '../../internal/controllers/ProductFullViewController';\nimport { CartLimitReachedModal } from '../../internal/views/common/CartLimitReachedModal';\nimport { IInventoryStatusMessageConfig } from '../../internal/views/common/InventoryStatusMessage';\nimport {\n ISizePicker,\n ISizePickerConfigs\n} from '../../internal/views/product-size-picker/ProductSizePicker';\nimport { IProductFullBaseInfoConfig } from '../../internal/views/product-full/ProductFullBaseInfo';\nimport { ProductStickyAddToBag } from '../../internal/views/product-sticky-add-to-bag/ProductStickyAddToBag';\nimport { ProductZoom } from '../../internal/views/product-zoom/ProductZoom';\nimport { IProductRatingConfig } from '../product-rating/ProductRatingWrapper';\nimport {\n IProductFullAddToBagButtonConfig,\n IProductCTAProps\n} from '../../exported/product-cta/ProductCTA';\nimport { IProductInstallmentsConfig } from '../../internal/views/product-installments-price/ProductInstallmentsPrice';\nimport { ProductOverview } from '../../internal/views/common/ProductOverview';\nimport { ProductIngredients } from '../../internal/views/common/ProductIngredients';\nimport { ProductInfoPopupContent } from '../../internal/views/common/ProductInfoPopupContent';\nimport { ProductUsageField } from '../../internal/views/common/ProductUsageField';\nimport { Desktop, Mobile } from 'elc-layouts';\nimport { IProdcatConfig, IInventoryStatusSorting } from '../../internal/interfaces/IProdcat';\nimport { TOGGLE_TYPE } from '../../internal/constants/AutoReplenish';\nimport { ProductContentPosition } from '../../internal/constants/ProductContentPosition';\nimport { ElementPosition } from '../../internal/constants/ElementPosition';\nimport { mergeConfigs } from '../../internal/utils/ConfigUtils';\nimport { classes } from '../../internal/utils/Classes';\nimport { LeftStickyColumn } from './LeftStickyColumn';\nimport { RightStickyColumn } from './RightStickyColumn';\nimport ProductShadesSidebar, {\n IProductShadesSidebarConfig,\n IProductShadesSidebarProps\n} from '../../internal/views/product-shades-sidebar/ProductShadesSidebar';\nimport { SIZE_PICKER_TYPE } from '../../internal/constants/SizePickerTypes';\nimport { ProductPromoBanner } from '../../internal/views/product-promo-banner/ProductPromoBanner';\nimport { ProductInfoPopup } from './ProductInfoPopup';\nimport { ComponentTypes } from '../../internal/constants/ComponentTypes';\nimport { IProductAutoReplenishOptions } from '../../internal/views/product-auto-replenish/ProductAutoReplenish';\nimport { Button } from 'elc-buttons';\nimport { IShortDescription } from '../../internal/views/common/ProductShortDescription';\nimport { IPerfectForConfig } from '../../internal/interfaces/ITranslations';\nimport { IFieldAccordion } from '../../internal/interfaces/IProductFull';\n\nexport interface IProductFullConfig\n extends IInventoryStatusMessageConfig,\n IProductFullAddToBagButtonConfig,\n IProductFullBaseInfoConfig,\n IProductRatingConfig,\n IProdcatConfig {\n itemMaxQuantity: number;\n autoReplenishOptions: number[];\n socialShare: ISocialShareConfig;\n useOverviewAccordions?: boolean;\n useIngredientsAccordion?: boolean;\n useHowDoesItWorkAccordion?: boolean;\n useInitialRepositoryInventory?: boolean;\n useLegacyDescription?: boolean;\n hideDropdownArrow?: boolean;\n siteUrl?: string;\n enableZoom?: boolean;\n hideEmptyStars?: boolean;\n installments: IProductInstallmentsConfig;\n hideProductRating?: boolean;\n hideProductPrice?: boolean;\n compliance: {\n gdpr: boolean;\n };\n productFullHideReadReviewsLink?: boolean;\n viewableInventoryStatuses: string[];\n autoReplenishToggleType?: TOGGLE_TYPE;\n productOverviewPosition?: string;\n productHowDoesItWorkPosition?: string;\n productIngredientsPosition?: string;\n enableFindInStore?: boolean;\n showFindInStore?: boolean;\n showPriceOnStickyAddToBag?: boolean;\n productFullSizePicker?: SIZE_PICKER_TYPE;\n sizePicker?: ISizePickerConfigs;\n shortDescription?: IShortDescription;\n promoBanner?: IPromoBanner;\n autoReplenishment?: IProductAutoReplenishOptions;\n ratingsEnabled?: boolean;\n productInfoPopupConfig?: IProductInfoPopupConfig;\n inventoryStatusSorting?: IInventoryStatusSorting;\n ctaType?: string;\n enableProgressiveImages?: boolean;\n perfectFor?: IPerfectForConfig;\n productFullFieldAccordion?: IFieldAccordion;\n}\n\nexport interface IProductInfoPopupConfig {\n enabled: boolean;\n productInfoPopupCtaLabel: string;\n productInfoPopupField: string;\n productInfoPopupHeader: string;\n}\n\nexport interface IPromoBanner {\n enabled: boolean;\n nodeId: number;\n position: ProductContentPosition;\n}\n\nexport interface IProductFullState {\n product: ICoreProduct;\n}\n\nexport interface IProductFull {\n className?: string;\n config: IProductFullConfig;\n translations?: ITranslationsCollection;\n viewController: ProductFullViewController;\n}\n\nexport interface IStickyColumn {\n stickyColumn?: string;\n}\n\nexport interface IProductFullAccordionValues {\n [key: string]: string;\n}\n\nexport interface IProductDetailsMapping {\n [key: string]: string;\n}\n\nconst StickyColumnContainer = styled(Row)`\n align-items: flex-start;\n margin-bottom: ${ContentSpacing.space20};\n width: 100%;\n`;\n\nconst StyledStickyContainer = styled(StickyContainer)`\n height: 0;\n`;\n\nconst ProductFullWrapper = styled.div`\n margin: auto;\n padding: ${ContentSpacing.space20};\n`;\n\nconst ProductInfoPopupCTAContainer = styled.div`\n display: flex;\n`;\n\nconst ProductInfoPopupCTA = styled(Button)`\n cursor: pointer;\n margin: 0 auto ${ContentSpacing.space60};\n`;\n\n@config(\n [\n 'itemMaxQuantity',\n 'showProductQuantitySelector',\n 'compliance',\n 'siteUrl',\n 'prodcatConfig',\n 'features',\n 'vto'\n ],\n mergeConfigs\n)\n@translate([\n 'defaultPromoMessage',\n 'autoReplenishLabel',\n 'subscribeLabel',\n 'subscribeCopyLabel',\n 'selectFrequencyLabel',\n 'homeLabel',\n 'selectASizeLabel',\n 'naturalFinishLabel',\n 'shimmerFinishLabel',\n 'tempOutOfStockLabel',\n 'tempOutOfStockMessage',\n 'shareLabel',\n 'emailShareLabel',\n 'facebookShareUrl',\n 'twitterShareUrl',\n 'pinterestShareUrl'\n])\n@observer\nclass ProductFull extends React.Component {\n private productFullRef: React.RefObject;\n\n public static defaultProps: IProductFull;\n\n public static displayName: string;\n\n constructor(props: IProductFull) {\n super(props);\n this.productFullRef = React.createRef();\n\n props.viewController.handleState(props.config);\n }\n\n private initReviews = () => {\n this.props.viewController.emitReviewsInit(this.props.config.productId);\n };\n\n private productFullLoaded = () => {\n this.props.viewController.emitProductFullLoaded(this.props.config.productId);\n };\n\n public async componentDidMount() {\n await this.props.viewController.loaded(this.props);\n\n if (document.readyState === 'complete') {\n this.onLoad();\n } else {\n window.addEventListener('load', this.onLoad);\n }\n }\n\n public componentWillUnmount() {\n window.removeEventListener('load', this.onLoad);\n }\n\n private onLoad = () => {\n this.initReviews();\n this.productFullLoaded();\n };\n\n private getProductOverview() {\n const {\n useOverviewAccordions,\n useLegacyDescription,\n productFullFieldAccordion\n } = this.props.config;\n\n return (\n \n );\n }\n\n private getProductIngredients() {\n const { useIngredientsAccordion } = this.props.config;\n const { allIngredients } = this.props.viewController.data;\n\n return (\n \n );\n }\n\n private getProductInfoPopup() {\n const productInfoPopupCTAContainerClassNames = classes('product-info-popup-cta-container');\n const productInfoPopupCTAClassNames = classes('product-info-popup-cta');\n const {\n toggleProductInfoPopup,\n isProductInfoPopupOpen,\n data: { productInfoPopupData, productInfoPopupFieldType, productInfoPopupHeader }\n } = this.props.viewController;\n const {\n config: { productInfoPopupConfig }\n } = this.props;\n let popupHeader = '';\n let popupDataField = '';\n\n if (productInfoPopupConfig && productInfoPopupConfig.enabled) {\n popupHeader = productInfoPopupConfig.productInfoPopupHeader;\n popupDataField = productInfoPopupConfig.productInfoPopupField;\n } else {\n popupHeader = productInfoPopupHeader ? productInfoPopupHeader : '';\n popupDataField = productInfoPopupFieldType;\n }\n\n return (\n <>\n \n {productInfoPopupConfig && productInfoPopupConfig.enabled && (\n \n {productInfoPopupConfig.productInfoPopupCtaLabel}\n \n )}\n \n {isProductInfoPopupOpen && productInfoPopupData && (\n \n \n \n )}\n \n );\n }\n\n private getProductHowDoesItWork() {\n const { useHowDoesItWorkAccordion } = this.props.config;\n const { howDoesItWork, howDoesItWorkLabel } = this.props.viewController.data;\n\n return (\n \n );\n }\n\n private getProductBreadcrumbs(productFullConfig: IProductFullConfig) {\n return (\n \n );\n }\n\n private getCustomSizeImages() {\n return this.props.viewController.getCustomSizeImages(ComponentTypes.PRODUCT_FULL);\n }\n\n private getLeftStickyColumn(productFullConfig: IProductFullConfig) {\n const translations = this.props.translations as ITranslationsCollection;\n const {\n data,\n hideProductImageSection,\n toggleProductImageSection\n } = this.props.viewController;\n\n const {\n product,\n selectedSku,\n smallImages,\n isLoaded,\n howDoesItWork,\n howDoesItWorkLabel,\n isVtoMakeupEnabled,\n allIngredients\n } = data;\n\n const customSizeImages = this.getCustomSizeImages().desktop.images;\n\n return (\n \n );\n }\n\n private getRightStickyColumn(productFullConfig: IProductFullConfig) {\n const translations = this.props.translations as ITranslationsCollection;\n const {\n toggleAutoReplenishSelection,\n handleSizeSelect,\n setAutoReplenishOption,\n handleShadeSelect,\n productUpdateQuantity,\n setAutoReplenishSelection,\n handleFavoriteClick,\n toggleProductImageSection,\n togglePerfectShades,\n data\n } = this.props.viewController;\n\n const {\n product,\n selectedSku,\n largeImages,\n smallImages,\n isAutoReplenishSelected,\n selectedAutoReplenishOption,\n isVtoMakeupEnabled,\n isVtoFoundationEnabled,\n isPerfectShadeEnabled,\n engravingEnabled,\n favoritesEnabled,\n isLoaded\n } = data;\n\n const {\n autoReplenishToggleType,\n productFullCta = false,\n productFullSizePicker\n } = productFullConfig;\n const {\n howDoesItWork,\n howDoesItWorkLabel,\n allIngredients\n } = this.props.viewController.data;\n\n const customSizeImages = this.getCustomSizeImages().mobile.images;\n\n return (\n \n );\n }\n\n private getProductZoom(productFullConfig: IProductFullConfig) {\n const { enableZoom } = productFullConfig;\n const { largeImages, smallImages } = this.props.viewController.data;\n\n return enableZoom && ;\n }\n\n private getProductShadesSidebar(productFullConfig: IProductFullConfig) {\n const {\n data: { selectedSku, modelAndSmooshImages },\n selectShade\n } = this.props.viewController;\n const { isUpdatedInventorySource } = selectedSku;\n const { enableShadesSidebar } = productFullConfig;\n const productFullAddToBagProps: IProductCTAProps = {\n config: {\n isUpdatedInventorySource,\n selectedSku,\n skuId: selectedSku.skuId,\n ...productFullConfig\n }\n };\n const productShadesSidebarConfig: IProductShadesSidebarConfig = {\n modelAndSmooshImages,\n selectedSku,\n productFullAddToBagProps,\n ...productFullConfig,\n isButtonModal: enableShadesSidebar,\n autoReplenishOptions: this.props.config.autoReplenishOptions\n };\n const productShadesSidebarStickyContainerClassName = classes(\n 'product-shades-sidebar-sticky-container',\n 'elc-product-full'\n );\n\n return (\n productShadesSidebarConfig &&\n productShadesSidebarConfig.isButtonModal && (\n \n \n \n \n \n )\n );\n }\n\n private getStickyAddToBag(productFullConfig: IProductFullConfig) {\n const translations = this.props.translations as ITranslationsCollection;\n const {\n handleSizeSelect,\n handleShadeSelect,\n setShowStickyAddToBag,\n data\n } = this.props.viewController;\n const {\n selectedSku: { isUpdatedInventorySource, selectedSize },\n selectedSku,\n product,\n modelAndSmooshImages,\n selectedAutoReplenishOption,\n stickyAddToBagVisibleClassName,\n showStickyAddToBag\n } = data;\n const { gdpr } = productFullConfig.compliance;\n\n const productFullAddToBagProps: IProductCTAProps = {\n config: {\n ...productFullConfig,\n compliance: { gdpr },\n selectedSku,\n skuId: selectedSku.skuId,\n quantity: product.quantity,\n replenishment: selectedAutoReplenishOption,\n isUpdatedInventorySource,\n autoReplenishOptions: this.props.config.autoReplenishOptions\n }\n };\n const productShadesSidebarProps: IProductShadesSidebarProps = {\n translations,\n config: {\n ...productFullConfig,\n isButtonModal: productFullConfig.enableShadesSidebar,\n productFullAddToBagProps,\n modelAndSmooshImages,\n selectedSku,\n autoReplenishOptions: this.props.config.autoReplenishOptions\n }\n };\n\n const productSizePickerProps: ISizePicker = {\n sizes: product.sizes,\n selectedSize,\n onSelect: handleSizeSelect,\n useDropup: true,\n productId: product.productId\n };\n\n const addToBagStickyContainer = classes('add-to-bag-sticky-container');\n const stickyAddToBagConfig = {\n handleShadeSelect,\n ...productFullConfig\n };\n\n return (\n \n \n \n \n \n );\n }\n\n private getPromoBanner() {\n const {\n config: { promoBanner }\n } = this.props;\n\n const nId = promoBanner && promoBanner.nodeId;\n\n return ;\n }\n\n public render() {\n const { isLoaded } = this.props.viewController;\n\n if (!isLoaded) {\n return null;\n }\n\n const productFullClassNames = classes('product-full', this.props.className);\n\n const defaultProductFullConfig = {\n breadcrumbsAlignment: ''\n };\n\n const productFullConfig = {\n ...defaultProductFullConfig,\n ...this.props.config\n };\n const {\n breadcrumbsAlignment,\n productOverviewPosition,\n productIngredientsPosition,\n productHowDoesItWorkPosition,\n stickyAddToBag,\n promoBanner,\n productInfoPopupConfig\n } = productFullConfig;\n const leftsideBreadcrumbs = breadcrumbsAlignment === ElementPosition.LEFT;\n const fullWidthOverview = productOverviewPosition === ProductContentPosition.FULL_WIDTH;\n const fullWidthIngredients =\n productIngredientsPosition === ProductContentPosition.FULL_WIDTH;\n const fullWidthHowDoesItWork =\n productHowDoesItWorkPosition === ProductContentPosition.FULL_WIDTH;\n const fullWidthPromoBanner =\n promoBanner &&\n promoBanner.enabled &&\n promoBanner.position === ProductContentPosition.FULL_WIDTH;\n\n const { howDoesItWork, allIngredients } = this.props.viewController.data;\n\n let stickyAddToBagView: React.ReactElement | null = null;\n\n if (stickyAddToBag && (stickyAddToBag.mobile || stickyAddToBag.desktop)) {\n stickyAddToBagView = this.getStickyAddToBag(productFullConfig);\n }\n\n return (\n \n {this.getProductShadesSidebar(productFullConfig)}\n {this.getProductZoom(productFullConfig)}\n \n {leftsideBreadcrumbs && this.getProductBreadcrumbs(productFullConfig)}\n \n {this.getRightStickyColumn(productFullConfig)}\n {this.getLeftStickyColumn(productFullConfig)}\n \n {productInfoPopupConfig && this.getProductInfoPopup()}\n \n \n {() => (\n <>\n {fullWidthPromoBanner && this.getPromoBanner()}\n {fullWidthOverview && this.getProductOverview()}\n {fullWidthIngredients && allIngredients && this.getProductIngredients()}\n {fullWidthHowDoesItWork &&\n howDoesItWork &&\n this.getProductHowDoesItWork()}\n {Boolean(stickyAddToBag && stickyAddToBag.desktop) &&\n stickyAddToBagView}\n \n )}\n \n {Boolean(stickyAddToBag && stickyAddToBag.mobile) && (\n {() => stickyAddToBagView}\n )}\n \n \n );\n }\n}\n\nProductFull.displayName = 'ProductFull';\n\nexport default ProductFull;\n","import { ContentSpacing } from 'elc-base-theme';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\nimport styled from 'styled-components';\nimport { ScrollSliderDotTheme } from '../../theme/default-theme';\nimport { classes } from '../../internal/utils/Classes';\n\nexport interface IProductImageNavMenu {\n key?: string;\n className?: string;\n onClick?(): void;\n}\n\nexport const NavItem = styled.button`\n &::before {\n display: block;\n width: 8px;\n height: 8px;\n }\n\n cursor: pointer;\n padding: ${ContentSpacing.space8};\n margin-right: ${ContentSpacing.space16};\n\n [dir='rtl'] & {\n margin-right: 0;\n margin-left: ${ContentSpacing.space16};\n }\n\n ${ScrollSliderDotTheme};\n`;\n\n@observer\nclass ProductImageNavMenu extends React.Component {\n public static displayName: string;\n private imageNavMenuItemClassNames = classes('image-nav-menu-item', this.props.className);\n\n render() {\n return (\n \n );\n }\n}\n\nProductImageNavMenu.displayName = 'ProductImageNavMenu';\n\nexport default ProductImageNavMenu;\n"],"sourceRoot":""}