{"version":3,"sources":["webpack:///./Avensia.Common/Features/Checkout/Pages/OrderConfirmation/UpsellProducts.tsx","webpack:///./Avensia.Common/Features/Checkout/ProductsPanel/ItemUpsell.tsx","webpack:///./Avensia.Common/Features/Checkout/Pages/OrderConfirmation/OrderConfirmationPage.tsx","webpack:///./Avensia.Common/Features/Product/ProductDetails/AverageRating.tsx","webpack:///./Avensia.Common/Features/Product/ProductAddToCart/index.tsx","webpack:///./Avensia.Common/Features/Product/ProductCard/Badge.tsx","webpack:///./Avensia.Common/Features/Shared/string-format.tsx","webpack:///./Avensia.Common/Features/Shared/SlideIn/index.tsx","webpack:///./Avensia.Common/Features/Shared/Panel/index.tsx","webpack:///./Avensia.Common/Features/Shared/Carousel/Carousel.tsx","webpack:///./Avensia.Common/Features/Shared/Carousel/Navigation.tsx","webpack:///./Avensia.Common/Features/Shared/Carousel/SlideIndexMarkers.tsx","webpack:///./Avensia.Common/Features/Shared/Carousel/ElementDimensions.tsx","webpack:///./Avensia.Common/Features/Shared/Carousel/CommonCarousel.tsx","webpack:///./Avensia.Common/Features/Shared/Carousel/Bullet.tsx","webpack:///./Avensia.Common/Features/Shared/Carousel/index.tsx","webpack:///./Avensia.Common/Features/Shared/ProductsPanel/index.tsx","webpack:///./Avensia.Common/Features/Checkout/ProductsPanel/Item.tsx","webpack:///./Avensia.Common/Features/Checkout/ProductsPanel/utils.tsx","webpack:///./Avensia.Common/Features/Checkout/Pages/Checkout/Cover.tsx"],"names":["PriceType","props","hasPromotion","hasDiscount","isNew","isUpsellModal","averageRating","imageUrls","displayName","price","brand","current","original","currency","topProps","productHasDiscount","imageUrl","length","upsell","bottomProps","currentPrice","upsellAllProps","buttonApperance","selected","Upsell","Full","Primary","toggleSelect","onSelect","code","variantCode","ticket","checkBoxSelect","CheckBox","appearance","onClick","checkBoxSelectModal","CheckBoxModal","Fragment","ContentUpsellModal","ButtonWrapper","css","compose","Content","div","color","theme","textColor","width","display","borderBottom","style","Button","lineHeight","height","borderRadius","alignSelf","justifyContent","alignContent","getProductsPriceSum","products","mode","reduce","accum","currVal","getTimeLeft","availableUntilTimestamp","timeOffset","Math","floor","Date","getTime","now","panelRef","createRef","currentServerTimestamp","updateOrderProducts","selectedProduct","setState","prevState","orderProducts","isSelected","filter","product","timerTimeIsUp","timeIsUp","toggleUpsellViewAllModal","upsellViewAllModalOpen","state","confirmOrder","e","preventDefault","feedback","push","sendRequest","this","lockMode","codes","map","tickets","url","requestUrl","pathname","query","id","orderGroupId","includeAppShellData","upsellFail","Promise","reject","timeLeft","componentDidUpdate","prevProps","setTimeout","FAILED_TEXT_VISIBLE_DELAY","componentDidMount","startTimer","componentWillUnmount","stopTimer","timer","setInterval","clearInterval","Boolean","find","getTotalPrice","getTotalUpsellSavings","Original","getAddText","addText","culture","count","total","savings","render","upsellProducts","confirmText","introText","title","subTitle","FeedbackButton","feedbackButtonStyle","fontSize","letterSpacing","margin","x","padding","left","right","upsellModalCardStyle","Div","ONE_MINUTE","fontWeight","num","twoDigits","n","String","formatTime","Section","TimesUpBody","timeIsUpText","FailedText","opacity","failedText","SubTitle","substring","indexOf","xy","OpenModalButton","Body","Panel","isOpen","onClose","TimeMessage","UpsellViewAllModalContent","variation","key","ConfirmSection","Text","disabled","Viewport","isCompact","ProductsPanel","slideQuantityToShow","navigationOffsetWidth","CARD_WIDTH","MOBILE_CARDS","DESKTOP_CARDS","Cover","visibleElement","Component","connect","appShellData","cart","dispatch","upsellOrderComplete","orderConfirmation","behavior","KeepEnabled","textStyle","y","textAlign","property","backgroundColor","border","top","borderColor","flexDirection","marginBottom","maxWidth","position","bottom","overflowY","marginTop","cursor","textDecoration","section","Header","header","OrderDetails","OrderDetailsText","span","ProductDetails","ProductRow","ProductImage","flex","grow","shrink","basis","mixBlendMode","marginRight","ProductDescription","ProductDescriptionMobile","ProductDescriptionHeader","textTransform","ProductTitle","Quantity","QuantityHeader","PaymentDetails","PaymentDetailsRow","PaymentLabel","StyledPrice","Price","UnitPriceHeader","UnitPrice","alignItems","TotalUnitsPriceHeader","TotalUnitsPrice","BasePrice","TotalPrice","PriceWrapperMobile","ProductRowsWrapperMobile","flexBasis","Wrapper","paddingBottom","InnerWrapper","orderValue","setOrderValue","programID","setProgramID","orderNumber","discountCodes","billingAddress","trackIDCookie","getCookieData","trackID","parseInt","discountedCodes","adRecordData","couponCode","appendAdRecordScript","window","tp","trustpilot_invitation","recipientEmail","email","recipientName","firstName","referenceId","source","orderDetails","orderLineItems","sum","lineItem","hostName","hostname","domainID","split","toLowerCase","t","document","cookie","r","p","data","adrecord","orderID","isMobile","currentBreakpoint","Medium","paymentMethodName","paymentType","shippingMethodName","paymentFee","totalPrice","shippingFee","tradedoublerIFrame","tradedoublerViewModel","src","organization","event","tduid","voucher","reportInfo","frameBorder","loading","Narrow","page","upsellTitle","upsellSubTitle","upsellAddText","upsellIntroText","upsellConfirmText","upsellTimeIsUpText","upsellFailedText","upsellAvailableUntilTimestamp","upsellOrderGroupId","trackingInformationTransaction","emailAddress","instaboxDeliveryPoint","order","productName","alt","ratio","OneToOne","productUrl","quantity","listPrice","marginLeft","Spacing","Size","floatPart","Number","average","trunc","toFixed","parsedFloat","parseFloat","starStyles","size","spacing","Micro","Tiny","Normal","Large","Huge","Wide","getStyles","Base","rating","ceil","whiteSpace","addToCart","stopPropagation","variant","children","zIndex","Badge","CampaignBadge","campaignTextProductcard","backgroundClip","WebkitBackgroundClip","textShadow","sharedStyle","triStyle","OuterWrapper","discountBadgeColor","NewBadge","badgeColor","DiscountBadge","DiscountTriBadge","formatTitleCase","str","replace","txt","charAt","toUpperCase","substr","DEFAULT_SCALE","DEFAULT_ROTATE","DEFAULT_OPACITY","SlideIn","scaleX","onCloseEnd","transform","CloseType","CompactBase","className","onTransitionEnd","duration","ExtensiveBase","maxHeight","primaryColor","flexShrink","paddingLeft","Heading","flexGrow","ActionButton","paddingRight","BackIcon","Back","verticalAlign","contentDisplay","toggleContentDisplay","closeCompletely","keyDown","keyCode","UNSAFE_componentWillMount","addEventListener","scrollFreeze","removeEventListener","freeze","unfreezeScroll","requestAnimationFrame","appendToDOM","panelProps","panelHeader","None","Bare","closeType","Close","panelBody","minHeight","Overlay","enabled","AnimationStyle","Variant","Container","SWIPE_THRESHOLD","lastDeltaX","lastDir","offsetDeltaX","slideWillChange","goToSlide","index","continuous","min","itemCount","slidesPerPage","max","currentSlide","translateX","getTranslateX","onSlideChange","getAbsoluteIndex","goBack","steps","goForward","onSwiping","deltaX","velocity","items","isResting","diff","dir","sign","sameDir","onSwiped","currentDeltaX","slideWidth","onRest","onSwipeRest","carouselWidth","slideWidthPercent","Children","toArray","concat","itemCountUnique","itemCountCloned","setUpAutoSlide","autoSlideTimer","autoSlideTime","undefined","hidden","componentWillReceiveProps","nextProps","hasNewSlideIndex","hasNewCarouselWidth","hasNewSlideWidth","hasNewSlidesAdded","slideShouldMoveToFront","itemCountToMoveToFront","isFirstHalf","isActiveSlideInFirstHalf","activeSlideIsInFront","slideIsInOtherHalf","indexOffsetFromEnd","getSlideTransformPercent","slideIndex","thisSlidIsInFirstHalf","getLoopCount","getSpringConfig","animationStyle","Gentle","stiffness","damping","precision","noWobble","motionStyle","innerRef","elementRef","delta","trackTouch","interpolatedStyle","listStyle","item","onSlideClick","defaultProps","PureComponent","uniqueItemCount","Direction","SlideContainer","SlideContainerActive","pointerEvents","SlideIndex","isActive","radius","boxShadow","restProps","SlideIndexActive","onSlideIndexClick","relativeIndex","activeSlideIndex","Array","nbrOfSlides","fill","i","Tray","mounted","unsubscribeResize","el","measureElement","onDimensionChange","dimensions","getElementDimensions","getBoundingClientRect","initialDimensions","CarouselBase","overflow","ButtonContainer","SiteBanner","handleKeyPress","goPrev","goNext","nbrOfItems","isFirstSlide","isLastSlide","dimensionsProp","hideNavigationButtons","Navigation","direction","Prev","offset","navigationOffset","Next","hideIndexMarkers","svg","circle","transition","visibility","userSelect","noRippleEffect","existingItem","isGift","hasMultipleVariants","button","textOverflow","to","inStock","ContentLink","linkIdentifier","Top","Bottom","TopBase","backgroundImage","discountPercentage","itemProp","preset","includes","RatingsPlaceholder","Ratings","discount","Title","Prices","round","priceType","New","Regular","Old","SaveUpsellTextContainer","SaveUpsellText","UpsellAll","UpsellModalItemBase","ImagePriceWrapper","ImageModal","TitlePriceWrapper","TitleModal","TinySaveText","Arrow","Item","flexFlow","wordBreak","WebkitLineClamp","WebkitBoxOrient","minWidth","clipPath","getProduct","esalesProduct","Element","setCoverRef","element","elementContainerRef","appendChild","ref"],"mappings":"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","file":"assets/12.chunk.6ba8b587f49a228ecccb.js","sourcesContent":["import React from 'react';\r\nimport { URLX, pathCombine, postJson, replaceState, translate } from '@avensia/scope';\r\nimport { epiPropertyValue } from '@avensia/scope-episerver';\r\nimport { Style } from '@glitz/type';\r\nimport { styled } from '@glitz/react';\r\nimport EsalesProductForList from '../../../../Esales/Models/EsalesProductForList.type';\r\nimport {\r\n pixelsToUnit,\r\n thin,\r\n huge,\r\n theta,\r\n beta,\r\n carnation,\r\n minSmallMediaQuery,\r\n transition,\r\n white,\r\n wildwatermelon,\r\n lightGrey,\r\n} from 'Shared/Style';\r\nimport Viewport from 'Shared/Viewport';\r\nimport ProductsPanel from 'Shared/ProductsPanel';\r\nimport {\r\n connectWithFeedback,\r\n Behavior as ButtonBehavior,\r\n Appearance as ButtonAppearance,\r\n ConnectPropType as FeedbackPropType,\r\n} from 'Shared/Button/Feedback';\r\nimport { formatPrice } from 'Shared/number-format';\r\nimport connect from 'Shared/connect';\r\nimport Product, { ProductType } from 'Checkout/ProductsPanel/ItemUpsell';\r\nimport { getProduct as getPanelProduct } from 'Checkout/ProductsPanel/utils';\r\nimport { completeUpsellPurchase } from 'Checkout/action-creators';\r\nimport Cover from 'Checkout/Pages/Checkout/Cover';\r\nimport { Section, Header as Title } from './OrderConfirmationPage';\r\nimport OrderConfirmationType from './OrderConfirmationPageViewModel.type';\r\nimport { format } from '@avensia/scope';\r\nimport Panel from 'Shared/Panel';\r\nimport Icon from 'Shared/Icon/Close';\r\n\r\nenum PriceType {\r\n Current = 'current',\r\n Original = 'original',\r\n Upsell = 'upsell',\r\n}\r\n\r\ntype TimerType = {\r\n availableUntilTimestamp?: number;\r\n currentServerTimestamp?: number;\r\n};\r\n\r\ntype ConnectStateType = {\r\n currency: string;\r\n culture: string;\r\n};\r\n\r\ntype ConnectActionType = {\r\n upsellOrderComplete: (orderConfirmation: OrderConfirmationType) => void;\r\n};\r\n\r\ntype PropType = {\r\n title: string;\r\n subTitle: string;\r\n addText: string;\r\n introText: string;\r\n confirmText: string;\r\n timeIsUpText: string;\r\n failedText: string;\r\n orderGroupId: string;\r\n requestUrl: string;\r\n upsellProducts: EsalesProductForList[];\r\n} & FeedbackPropType &\r\n ConnectStateType &\r\n ConnectActionType &\r\n TimerType;\r\n\r\ntype StateType = {\r\n orderProducts: ProductType[];\r\n lockMode: boolean;\r\n timeIsUp: boolean;\r\n upsellFail: boolean;\r\n upsellViewAllModalOpen: boolean;\r\n timeLeft: number;\r\n};\r\n\r\nfunction getProductsPriceSum(products: ProductType[], mode: PriceType) {\r\n if (products.length) {\r\n return products.reduce((accum, currVal) => accum + currVal.price[mode], 0);\r\n } else {\r\n return 0;\r\n }\r\n}\r\n\r\nfunction formatTime(num: number) {\r\n function twoDigits(n: number) {\r\n return n <= 9 ? `0${n}` : String(n);\r\n }\r\n\r\n if (num >= 60) {\r\n // tslint:disable-next-line:no-bitwise\r\n return `${twoDigits((num / 60) | 0)}:${twoDigits(num % 60 | 0)}`;\r\n } else {\r\n return `00:${twoDigits(num)}`;\r\n }\r\n}\r\n\r\nfunction getTimeLeft(availableUntilTimestamp: number, timeOffset: number) {\r\n return Math.floor((new Date(availableUntilTimestamp * 1000).getTime() - Date.now() + timeOffset) / 1000);\r\n}\r\nclass UpsellProducts extends React.Component {\r\n panelRef = React.createRef();\r\n timer: number;\r\n timeOffset = Date.now() - new Date(this.props.currentServerTimestamp * 1000).getTime();\r\n constructor(props: PropType) {\r\n super(props);\r\n this.state = {\r\n orderProducts: [],\r\n lockMode: false,\r\n timeIsUp: false,\r\n upsellFail: false,\r\n upsellViewAllModalOpen: false,\r\n timeLeft: getTimeLeft(this.props.availableUntilTimestamp, this.timeOffset),\r\n };\r\n }\r\n\r\n componentDidUpdate(prevProps: PropType, prevState: StateType) {\r\n if (!prevState.upsellFail && this.state.upsellFail) {\r\n setTimeout(() => {\r\n this.setState(() => ({ upsellFail: false }));\r\n }, FAILED_TEXT_VISIBLE_DELAY);\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n if (this.state.timeLeft) {\r\n this.startTimer();\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n this.stopTimer();\r\n }\r\n\r\n startTimer() {\r\n this.timer = setInterval(() => {\r\n const timeLeft = getTimeLeft(this.props.availableUntilTimestamp, this.timeOffset);\r\n if (timeLeft) {\r\n this.setState({ timeLeft });\r\n } else {\r\n this.stopTimer();\r\n this.timerTimeIsUp();\r\n }\r\n }, 1000);\r\n }\r\n\r\n stopTimer() {\r\n if (this.timer) {\r\n clearInterval(this.timer);\r\n this.timer = null;\r\n }\r\n }\r\n\r\n updateOrderProducts = (selectedProduct: ProductType) => {\r\n this.setState((prevState) => {\r\n const selected = this.isSelected(prevState.orderProducts, selectedProduct.code);\r\n return {\r\n orderProducts: selected\r\n ? prevState.orderProducts.filter((product) => product.code !== selectedProduct.code)\r\n : [...prevState.orderProducts, selectedProduct],\r\n };\r\n });\r\n };\r\n\r\n isSelected(products: ProductType[], code: string) {\r\n return Boolean(products.find((product) => product.code === code));\r\n }\r\n\r\n getTotalPrice() {\r\n return getProductsPriceSum(this.state.orderProducts, PriceType.Upsell);\r\n }\r\n\r\n getTotalUpsellSavings() {\r\n return getProductsPriceSum(this.state.orderProducts, PriceType.Original) - this.getTotalPrice();\r\n }\r\n\r\n getAddText() {\r\n const { addText, currency, culture } = this.props;\r\n return format(addText, {\r\n count: this.state.orderProducts.length,\r\n total: formatPrice(this.getTotalPrice(), currency, culture),\r\n savings: formatPrice(this.getTotalUpsellSavings(), currency, culture),\r\n });\r\n }\r\n\r\n timerTimeIsUp = () => this.setState(() => ({ timeIsUp: true }));\r\n\r\n toggleUpsellViewAllModal = () =>\r\n this.setState(() => ({ upsellViewAllModalOpen: !this.state.upsellViewAllModalOpen }));\r\n\r\n confirmOrder = (e: React.MouseEvent) => {\r\n e.preventDefault();\r\n this.props.feedback.push(this.sendRequest());\r\n };\r\n\r\n sendRequest = async () => {\r\n const { orderProducts } = this.state;\r\n if (orderProducts.length) {\r\n this.setState(() => ({ lockMode: true }));\r\n\r\n const codes = orderProducts.map((product) => product.code);\r\n const tickets = orderProducts.map((product) => product.ticket);\r\n\r\n const url = new URLX(this.props.requestUrl);\r\n url.pathname = pathCombine(url.pathname, 'add');\r\n\r\n const query = {\r\n id: this.props.orderGroupId,\r\n codes,\r\n tickets,\r\n };\r\n\r\n try {\r\n await postJson(url, query);\r\n replaceState(null, { includeAppShellData: true });\r\n } catch (error) {\r\n console.error('Upsell sendRequest error:', error.status);\r\n this.setState(() => ({ upsellFail: true, lockMode: false }));\r\n return Promise.reject(null);\r\n }\r\n }\r\n };\r\n\r\n render() {\r\n const { orderProducts } = this.state;\r\n const { upsellProducts, confirmText, introText, title, subTitle } = this.props;\r\n const FeedbackButton = this.props.feedback.Button;\r\n const feedbackButtonStyle: Style = {\r\n fontSize: theta,\r\n letterSpacing: pixelsToUnit(0.75),\r\n margin: {\r\n x: 'auto',\r\n },\r\n padding: {\r\n x: huge,\r\n },\r\n [minSmallMediaQuery]: {\r\n margin: {\r\n left: 'auto',\r\n right: 0,\r\n },\r\n },\r\n };\r\n const upsellModalCardStyle: Style = {\r\n width: '100%',\r\n height: '10rem',\r\n };\r\n\r\n const timer = (\r\n ONE_MINUTE ? { fontWeight: 'bold' } : { fontWeight: 'bold', color: wildwatermelon }}\r\n >\r\n {`${formatTime(this.state.timeLeft)} ${\r\n this.state.timeLeft >= ONE_MINUTE\r\n ? translate('/CountdownBanner/Minutes')\r\n : this.state.timeLeft < ONE_MINUTE\r\n ? translate('/CountdownBanner/Seconds')\r\n : translate('/CountdownBanner/Second')\r\n }`}\r\n \r\n );\r\n\r\n return (\r\n
\r\n {this.state.timeIsUp ? (\r\n {this.props.timeIsUpText}\r\n ) : (\r\n \r\n {title}\r\n \r\n {this.props.failedText}\r\n \r\n \r\n {subTitle.substring(0, subTitle.indexOf('{'))}\r\n {timer}\r\n \r\n {translate('/Upsell/ShowYourPersonalOffers')}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {translate('/Upsell/PersonalOffersExpiresIn')}\r\n {timer}\r\n \r\n\r\n \r\n \r\n \r\n \r\n {upsellProducts.map((product) => {\r\n const code = epiPropertyValue(product.variation.code);\r\n return (\r\n \r\n );\r\n })}\r\n \r\n \r\n {!!orderProducts.length ? this.getAddText() : introText}\r\n \r\n {confirmText}\r\n \r\n \r\n \r\n \r\n \r\n {(isCompact: boolean) => (\r\n \r\n {upsellProducts.map((product) => {\r\n const code = epiPropertyValue(product.variation.code);\r\n return (\r\n \r\n );\r\n })}\r\n \r\n )}\r\n \r\n \r\n {!!orderProducts.length ? this.getAddText() : introText}\r\n \r\n {confirmText}\r\n \r\n \r\n \r\n \r\n )}\r\n {this.state.lockMode && }\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default connect(\r\n (state): ConnectStateType => ({\r\n currency: state.appShellData.cart.currency,\r\n culture: state.appShellData.culture,\r\n }),\r\n (dispatch): ConnectActionType => ({\r\n upsellOrderComplete: (orderConfirmation: OrderConfirmationType) => {\r\n return dispatch(completeUpsellPurchase(orderConfirmation));\r\n },\r\n }),\r\n)(connectWithFeedback({ behavior: ButtonBehavior.KeepEnabled })(UpsellProducts));\r\n\r\nconst CARD_WIDTH = 132;\r\nconst DESKTOP_CARDS = 5;\r\nconst MOBILE_CARDS = 1;\r\nconst FAILED_TEXT_VISIBLE_DELAY = 2500;\r\nconst ONE_MINUTE = 60;\r\n\r\nconst textStyle = {\r\n fontSize: theta,\r\n lineHeight: pixelsToUnit(22),\r\n letterSpacing: pixelsToUnit(0.3),\r\n};\r\n\r\nconst SubTitle = styled.div({\r\n padding: {\r\n y: pixelsToUnit(30),\r\n x: pixelsToUnit(10),\r\n },\r\n textAlign: 'center',\r\n ...textStyle,\r\n ...transition({ property: 'opacity ' }),\r\n});\r\n\r\nconst Body = styled.div({\r\n backgroundColor: 'rgba(243, 244, 251, 0.4)',\r\n padding: {\r\n xy: pixelsToUnit(30),\r\n },\r\n});\r\n\r\nconst ConfirmSection = styled.div({\r\n padding: { x: 0, y: pixelsToUnit(20) },\r\n margin: { x: pixelsToUnit(15) },\r\n textAlign: 'center',\r\n border: {\r\n top: {\r\n width: thin,\r\n style: 'solid',\r\n color: (theme) => theme.borderColor,\r\n },\r\n },\r\n [minSmallMediaQuery]: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n textAlign: 'right',\r\n },\r\n});\r\n\r\nconst Text = styled.div({\r\n marginBottom: pixelsToUnit(20),\r\n textAlign: 'center',\r\n ...textStyle,\r\n [minSmallMediaQuery]: {\r\n maxWidth: pixelsToUnit(490),\r\n margin: 0,\r\n textAlign: 'left',\r\n },\r\n});\r\n\r\nconst TimesUpBody = styled(Body, {\r\n fontSize: beta,\r\n lineHeight: 1.5,\r\n textAlign: 'center',\r\n});\r\n\r\nconst FailedText = styled(SubTitle, {\r\n color: carnation,\r\n position: 'absolute',\r\n width: '100%',\r\n});\r\n\r\nconst Close = styled.div({\r\n position: 'absolute',\r\n right: pixelsToUnit(15),\r\n top: pixelsToUnit(15),\r\n bottom: pixelsToUnit(15),\r\n});\r\n\r\nconst UpsellViewAllModalContent = styled.div({\r\n overflowY: 'auto',\r\n padding: { x: '1rem', y: 0 },\r\n});\r\n\r\nconst OpenModalButton = styled.div({\r\n backgroundColor: wildwatermelon,\r\n fontWeight: 'bold',\r\n color: white,\r\n borderRadius: pixelsToUnit(5),\r\n padding: { xy: pixelsToUnit(5) },\r\n marginTop: pixelsToUnit(5),\r\n cursor: 'pointer',\r\n ':hover': { textDecoration: 'underline' },\r\n});\r\n\r\nconst TimeMessage = styled.div({\r\n textAlign: 'center',\r\n padding: { xy: pixelsToUnit(15) },\r\n border: {\r\n bottom: {\r\n width: thin,\r\n style: 'solid',\r\n color: lightGrey,\r\n },\r\n },\r\n});\r\n","import React from 'react';\r\nimport { translate } from '@avensia/scope';\r\nimport { StyledProps, styled } from '@glitz/react';\r\nimport Button, { Appearance } from 'Shared/Button';\r\nimport FulfilledIcon from 'Shared/Icon/Check';\r\nimport { ItemType, Top, Bottom, Base, UpsellAll } from './Item';\r\nimport PriceViewModel from 'Pricing/PriceViewModel.type';\r\nimport { pixelsToUnit, lightGrey, minMediumMediaQuery } from 'Shared/Style';\r\n\r\nexport type ProductType = {\r\n code: string;\r\n ticket: string;\r\n price: PriceViewModel;\r\n};\r\n\r\ntype PropType = ItemType & {\r\n selected: boolean;\r\n onSelect: (product: ProductType) => void;\r\n} & StyledProps;\r\nexport default styled((props: PropType) => {\r\n const {\r\n hasPromotion,\r\n hasDiscount: productHasDiscount,\r\n isNew,\r\n isUpsellModal,\r\n averageRating,\r\n imageUrls,\r\n displayName,\r\n price,\r\n brand,\r\n } = props;\r\n const { current, original, currency } = price;\r\n const hasDiscount = current < original;\r\n\r\n const topProps = {\r\n hasPromotion,\r\n productHasDiscount,\r\n isNew,\r\n averageRating,\r\n imageUrl: imageUrls.length ? imageUrls[0] : '',\r\n displayName,\r\n currency,\r\n price,\r\n original,\r\n upsell: price.upsell,\r\n };\r\n\r\n const bottomProps = {\r\n brand,\r\n currency: price.currency,\r\n displayName,\r\n productHasDiscount,\r\n hasDiscount,\r\n current,\r\n original,\r\n upsell: price.upsell,\r\n currentPrice: price.upsell ? price.upsell : price.current,\r\n };\r\n\r\n const upsellAllProps = {\r\n hasPromotion,\r\n productHasDiscount,\r\n isNew,\r\n isUpsellModal,\r\n averageRating,\r\n imageUrl: imageUrls.length ? imageUrls[0] : '',\r\n displayName,\r\n currency,\r\n price,\r\n original,\r\n upsell: price.upsell,\r\n brand,\r\n hasDiscount,\r\n current,\r\n currentPrice: price.upsell ? price.upsell : price.current,\r\n };\r\n\r\n const buttonApperance = props.selected ? [Appearance.Upsell, Appearance.Full] : [Appearance.Primary, Appearance.Full];\r\n\r\n function toggleSelect() {\r\n props.onSelect({ code: props.variantCode, ticket: props.ticket, price: props.price });\r\n }\r\n\r\n const checkBoxSelect = (\r\n \r\n {props.selected ? : translate('/Upsell/Choose')}\r\n \r\n );\r\n\r\n const checkBoxSelectModal = (\r\n \r\n {props.selected ? : translate('/Upsell/Choose')}\r\n \r\n );\r\n\r\n return (\r\n \r\n {isUpsellModal ? (\r\n \r\n \r\n {checkBoxSelectModal}\r\n \r\n ) : (\r\n \r\n \r\n \r\n \r\n \r\n {checkBoxSelect}\r\n \r\n )}\r\n \r\n );\r\n});\r\n\r\nconst Content = styled.div({\r\n color: theme => theme.textColor,\r\n width: '100%',\r\n});\r\n\r\nconst ContentUpsellModal = styled.div({\r\n display: 'flex',\r\n color: theme => theme.textColor,\r\n width: '100%',\r\n borderBottom: {\r\n color: lightGrey,\r\n style: 'solid',\r\n width: pixelsToUnit(1),\r\n },\r\n});\r\n\r\nconst CheckBox = styled(Button, {\r\n lineHeight: 2.25,\r\n});\r\n\r\nconst CheckBoxModal = styled(Button, {\r\n width: '4rem',\r\n height: '4rem',\r\n borderRadius: '100%',\r\n alignSelf: 'center',\r\n [minMediumMediaQuery]: {\r\n width: '5rem',\r\n height: '5rem',\r\n },\r\n});\r\n\r\nconst ButtonWrapper = styled.div({\r\n width: '20%',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignContent: 'center',\r\n});\r\n","/**\r\n * @ComponentFor OrderConfirmationPageViewModel\r\n */\r\nimport React from 'react';\r\nimport { styled } from '@glitz/react';\r\nimport { pseudo } from '@glitz/core';\r\nimport connect from 'Shared/connect';\r\nimport { translate, loadScript, currentUrl, Breakpoint } from '@avensia/scope';\r\nimport { epiPropertyValue } from '@avensia/scope-episerver';\r\nimport {\r\n theta,\r\n sigma,\r\n gamma,\r\n epsilon,\r\n iota,\r\n tundora,\r\n zeta,\r\n mountainmeadow,\r\n minMicroMediaQuery,\r\n minSmallMediaQuery,\r\n pixelsToUnit,\r\n alpha,\r\n omega,\r\n whitelilac,\r\n small,\r\n} from 'Shared/Style';\r\nimport Image, { Ratio as ImageRatio } from 'Shared/Image/Ratio';\r\nimport { Main, Appearance } from 'Shared/PageLayout';\r\nimport Price from 'Pricing/Price';\r\nimport OrderConfirmationPageViewModelType from './OrderConfirmationPageViewModel.type';\r\nimport UpsellProducts from './UpsellProducts';\r\n\r\ntype StateType = {\r\n orderValue: number;\r\n programID: number;\r\n};\r\n\r\ntype ConnectStateType = { currentBreakpoint: number };\r\n\r\ntype PropType = OrderConfirmationPageViewModelType & ConnectStateType;\r\n\r\nexport const Section = styled.section({\r\n color: (theme) => theme.textColor,\r\n maxWidth: pixelsToUnit(800),\r\n margin: {\r\n x: 'auto',\r\n },\r\n padding: {\r\n y: pixelsToUnit(20),\r\n },\r\n position: 'relative',\r\n width: '100%',\r\n});\r\n\r\nexport const Header = styled.header({\r\n color: (theme) => theme.textColor,\r\n fontSize: omega,\r\n lineHeight: pixelsToUnit(42),\r\n textAlign: 'center',\r\n [minSmallMediaQuery]: {\r\n fontSize: alpha,\r\n },\r\n});\r\n\r\nconst OrderDetails = styled.div({\r\n maxWidth: pixelsToUnit(500),\r\n margin: {\r\n x: 'auto',\r\n },\r\n textAlign: 'center',\r\n fontSize: theta,\r\n lineHeight: 1.47,\r\n padding: {\r\n y: pixelsToUnit(60),\r\n },\r\n});\r\n\r\nconst OrderDetailsText = styled.span({\r\n display: 'block',\r\n marginBottom: pixelsToUnit(20),\r\n ':last-of-type': {\r\n marginBottom: 0,\r\n },\r\n ...pseudo(':nth-child(3)', {\r\n marginBottom: 0,\r\n }),\r\n});\r\n\r\nconst ProductDetails = styled.div({\r\n marginBottom: pixelsToUnit(60),\r\n backgroundColor: whitelilac,\r\n});\r\n\r\nconst ProductRow = styled.div({\r\n width: '100%',\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n padding: {\r\n xy: pixelsToUnit(6),\r\n },\r\n [minSmallMediaQuery]: {\r\n padding: {\r\n xy: small,\r\n },\r\n },\r\n});\r\n\r\nconst ProductImage = styled.div({\r\n flex: {\r\n grow: 1,\r\n shrink: 1,\r\n basis: pixelsToUnit(190),\r\n },\r\n mixBlendMode: 'multiply',\r\n [minSmallMediaQuery]: {\r\n marginRight: pixelsToUnit(15),\r\n },\r\n});\r\n\r\nconst ProductDescription = styled.div({\r\n display: 'flex',\r\n width: '100%',\r\n});\r\n\r\nconst ProductDescriptionMobile = styled(ProductDescription, {\r\n padding: {\r\n xy: small,\r\n },\r\n flex: {\r\n grow: 1,\r\n shrink: 1,\r\n basis: pixelsToUnit(900),\r\n },\r\n});\r\n\r\nconst ProductDescriptionHeader = styled(ProductDescription, {\r\n fontSize: zeta,\r\n textTransform: 'uppercase',\r\n});\r\n\r\nconst ProductTitle = styled.div({\r\n alignSelf: 'center',\r\n fontSize: sigma,\r\n color: tundora,\r\n lineHeight: 'normal',\r\n flex: {\r\n grow: 1,\r\n shrink: 1,\r\n },\r\n});\r\n\r\nconst Quantity = styled.div({\r\n fontWeight: 'bold',\r\n textAlign: 'center',\r\n alignSelf: 'center',\r\n width: '30%',\r\n});\r\n\r\nconst QuantityHeader = styled(Quantity, {\r\n fontSize: zeta,\r\n fontWeight: 'normal',\r\n textTransform: 'uppercase',\r\n width: '30%',\r\n});\r\n\r\nconst PaymentDetails = styled.div({\r\n maxWidth: pixelsToUnit(800),\r\n margin: {\r\n x: 'auto',\r\n bottom: pixelsToUnit(130),\r\n },\r\n});\r\n\r\nconst PaymentDetailsRow = styled.div({\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n color: tundora,\r\n});\r\n\r\nconst PaymentLabel = styled.div({\r\n fontSize: theta,\r\n lineHeight: 2,\r\n});\r\n\r\nconst StyledPrice = styled(Price, {\r\n fontWeight: 'bold',\r\n});\r\n\r\nconst UnitPriceHeader = styled.div({\r\n fontSize: zeta,\r\n textTransform: 'uppercase',\r\n textAlign: 'center',\r\n width: '30%',\r\n});\r\n\r\nconst UnitPrice = styled(StyledPrice, {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n fontSize: epsilon,\r\n textAlign: 'center',\r\n width: '30%',\r\n});\r\n\r\nconst TotalUnitsPriceHeader = styled(UnitPriceHeader, {\r\n textAlign: 'center',\r\n width: '30%',\r\n});\r\n\r\nconst TotalUnitsPrice = styled(UnitPrice, {\r\n textAlign: 'center',\r\n width: '30%',\r\n});\r\n\r\nconst BasePrice = styled(StyledPrice, {\r\n fontSize: gamma,\r\n lineHeight: pixelsToUnit(30),\r\n});\r\n\r\nconst TotalPrice = styled(BasePrice, {\r\n fontSize: iota,\r\n color: mountainmeadow,\r\n});\r\n\r\nconst PriceWrapperMobile = styled.div({\r\n display: 'flex',\r\n width: '100%',\r\n justifyContent: 'space-between',\r\n});\r\n\r\nconst ProductRowsWrapperMobile = styled.div({\r\n alignSelf: 'center',\r\n flexBasis: '35rem',\r\n [minMicroMediaQuery]: {\r\n flexBasis: pixelsToUnit(750),\r\n },\r\n});\r\n\r\nconst Wrapper = styled.div({\r\n borderBottom: {\r\n style: 'solid',\r\n color: (theme) => theme.borderColor,\r\n width: '1px',\r\n },\r\n paddingBottom: pixelsToUnit(20),\r\n});\r\n\r\nconst InnerWrapper = styled.div({\r\n display: 'flex',\r\n});\r\n\r\nclass OrderconfirmationPage extends React.Component {\r\n constructor(props: PropType) {\r\n super(props);\r\n this.state = {\r\n orderValue: this.setOrderValue(),\r\n programID: this.setProgramID(),\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n const { orderNumber, discountCodes, billingAddress } = this.props.orderDetails;\r\n const trackIDCookie = this.getCookieData('trackID');\r\n const trackID: number = trackIDCookie.length > 0 ? parseInt(trackIDCookie, 10) : null;\r\n const discountedCodes = discountCodes || '';\r\n\r\n const adRecordData = {\r\n ...this.state,\r\n orderNumber,\r\n couponCode: discountedCodes,\r\n trackID,\r\n };\r\n\r\n this.appendAdRecordScript(adRecordData);\r\n\r\n if (!!window.tp) {\r\n const trustpilot_invitation = {\r\n recipientEmail: billingAddress.email,\r\n recipientName: billingAddress.firstName,\r\n referenceId: orderNumber,\r\n source: 'InvitationScript',\r\n };\r\n\r\n window.tp('createInvitation', trustpilot_invitation);\r\n }\r\n }\r\n setOrderValue() {\r\n return this.props.orderDetails.orderLineItems.reduce((sum, lineItem) => sum + lineItem.price, 0);\r\n }\r\n setProgramID() {\r\n const hostName = currentUrl().hostname;\r\n const isDoggieSite = hostName.indexOf('doggie') !== -1;\r\n let domainID = 0;\r\n\r\n if (isDoggieSite) {\r\n domainID = 242;\r\n } else {\r\n const DOMAIN_NAME = 2;\r\n const domainName = hostName.split('.')[DOMAIN_NAME].toLowerCase();\r\n\r\n switch (domainName) {\r\n case 'se':\r\n domainID = 241;\r\n break;\r\n\r\n case 'fi':\r\n domainID = 779;\r\n break;\r\n\r\n case 'no':\r\n domainID = 780;\r\n break;\r\n\r\n case 'dk':\r\n domainID = 781;\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n }\r\n return domainID;\r\n }\r\n\r\n // This script is from adrecord\r\n getCookieData(t: string) {\r\n for (let n = document.cookie.split('; '), r = 0; r < n.length; r++) {\r\n const p = n[r].split('=');\r\n\r\n if (p[0] === t) {\r\n return p[1];\r\n }\r\n }\r\n return '';\r\n }\r\n\r\n appendAdRecordScript(data: any) {\r\n window.adrecord = {\r\n programID: data.programID,\r\n orderID: data.orderNumber,\r\n orderValue: data.orderValue,\r\n couponCode: data.couponCode,\r\n trackID: data.trackID,\r\n };\r\n\r\n loadScript('https://track.adrecord.com/track.js');\r\n }\r\n\r\n render() {\r\n const isMobile = this.props.currentBreakpoint < Breakpoint.Medium;\r\n const { orderDetails } = this.props;\r\n const {\r\n orderNumber,\r\n paymentMethodName,\r\n paymentType,\r\n shippingMethodName,\r\n orderLineItems,\r\n currency,\r\n paymentFee,\r\n totalPrice,\r\n shippingFee,\r\n } = orderDetails;\r\n const productImageSize = '&w=100&h=100';\r\n const tradedoublerIFrame = this.props.tradedoublerViewModel ? (\r\n \r\n ) : null;\r\n\r\n return (\r\n
\r\n {tradedoublerIFrame}\r\n\r\n {!!(this.props.upsellProducts || []).length && (\r\n \r\n )}\r\n\r\n
\r\n
{translate('/OrderConfirmation/Heading')}
\r\n \r\n {`${translate('/OrderConfirmation/OrderNumber')} : ${orderNumber}`}\r\n \r\n {`${translate('/OrderConfirmation/ConfirmationMessage')}: ${\r\n this.props.trackingInformationTransaction.emailAddress\r\n }`}\r\n \r\n \r\n {`${translate('/OrderConfirmation/PaymentMethod')}: `}\r\n {paymentMethodName}\r\n {paymentType ? ` - ${paymentType}` : ''}\r\n \r\n {`${translate(\r\n '/OrderConfirmation/ShippingMethod',\r\n )}: ${shippingMethodName}`}\r\n {this.props.orderDetails.instaboxDeliveryPoint ? (\r\n {this.props.orderDetails.instaboxDeliveryPoint}\r\n ) : null}\r\n \r\n \r\n {!isMobile && (\r\n \r\n \r\n {translate('/OrderConfirmation/Product')}\r\n {translate('/OrderConfirmation/Amount')}\r\n {translate('/OrderConfirmation/PriceEach')}\r\n {translate('/OrderConfirmation/Price')}\r\n \r\n )}\r\n {orderLineItems.map((order) =>\r\n isMobile ? (\r\n \r\n \r\n \r\n {order.productName}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {translate('/OrderConfirmation/Amount')}\r\n {translate('/OrderConfirmation/PriceEach')}\r\n {translate('/OrderConfirmation/Price')}\r\n \r\n \r\n \r\n {order.quantity}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ) : (\r\n \r\n \r\n \r\n \r\n \r\n {order.productName}\r\n \r\n {order.quantity}\r\n \r\n \r\n \r\n ),\r\n )}\r\n \r\n \r\n \r\n {translate('/OrderConfirmation/ShippingLabel')}\r\n \r\n \r\n \r\n {translate('/OrderConfirmation/PaymentLabel')}\r\n \r\n \r\n \r\n {translate('/OrderConfirmation/PaymentTotal')}\r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default connect(\r\n (state): ConnectStateType => ({\r\n currentBreakpoint: state.currentBreakpoint,\r\n }),\r\n)(OrderconfirmationPage);\r\n","import React from 'react';\r\nimport { styled, StyledProps } from '@glitz/react';\r\nimport { pixelsToUnit } from 'Shared/Style';\r\nimport { Star, StarOutline, HalfStar } from 'Shared/Icon/Star';\r\n\r\nexport enum Spacing {\r\n Normal,\r\n Medium,\r\n Wide,\r\n}\r\n\r\nexport enum Size {\r\n Micro,\r\n Tiny,\r\n Normal,\r\n Large,\r\n Huge,\r\n}\r\n\r\ntype PropType = {\r\n average: number;\r\n spacing: Spacing;\r\n size: Size;\r\n} & StyledProps;\r\n\r\nfunction getStyles(size: Size, spacing: Spacing) {\r\n let height;\r\n let width;\r\n let marginLeft;\r\n switch (size) {\r\n case Size.Micro:\r\n height = pixelsToUnit(10);\r\n width = pixelsToUnit(10);\r\n break;\r\n case Size.Tiny:\r\n height = pixelsToUnit(12.8);\r\n width = pixelsToUnit(13.8);\r\n break;\r\n case Size.Normal:\r\n height = pixelsToUnit(15);\r\n width = pixelsToUnit(15);\r\n break;\r\n case Size.Large:\r\n height = pixelsToUnit(20);\r\n width = pixelsToUnit(20);\r\n break;\r\n case Size.Huge:\r\n height = pixelsToUnit(24);\r\n width = pixelsToUnit(24);\r\n break;\r\n default:\r\n break;\r\n }\r\n switch (spacing) {\r\n case Spacing.Normal:\r\n marginLeft = pixelsToUnit(5);\r\n break;\r\n case Spacing.Medium:\r\n marginLeft = pixelsToUnit(10);\r\n break;\r\n case Spacing.Wide:\r\n marginLeft = pixelsToUnit(15);\r\n break;\r\n default:\r\n break;\r\n }\r\n return {\r\n height,\r\n width,\r\n ':not(:first-child)': {\r\n marginLeft,\r\n },\r\n };\r\n}\r\n\r\nexport default styled((props: PropType) => {\r\n const RATINGS = [1, 2, 3, 4, 5];\r\n const floatPart = Number(props.average - Math.trunc(props.average)).toFixed(1);\r\n const parsedFloat = parseFloat(floatPart);\r\n const starStyles = getStyles(props.size, props.spacing);\r\n return (\r\n \r\n {RATINGS.map((rating) => {\r\n if (rating <= props.average) {\r\n return ;\r\n } else if (rating <= Math.ceil(props.average)) {\r\n if (parsedFloat < 0.4) {\r\n return ;\r\n } else if (parsedFloat < 0.8) {\r\n return ;\r\n } else {\r\n return ;\r\n }\r\n } else {\r\n return ;\r\n }\r\n })}\r\n \r\n );\r\n});\r\n\r\nconst Base = styled.div({\r\n whiteSpace: 'nowrap',\r\n});\r\n","import React from 'react';\r\nimport { styled, StyledProps } from '@glitz/react';\r\nimport {\r\n connectWithFeedback,\r\n Behavior as ButtonBehavior,\r\n Appearance as ButtonAppearance,\r\n ConnectPropType as FeedbackPropType,\r\n} from 'Shared/Button/Feedback';\r\nimport { Variant } from 'Shared/Button';\r\n\r\ntype PropType = {\r\n addToCart: () => Promise;\r\n disabled?: boolean;\r\n variant?: Variant;\r\n children?: React.ReactNode;\r\n} & StyledProps &\r\n FeedbackPropType;\r\n\r\nexport default styled(\r\n connectWithFeedback({ behavior: ButtonBehavior.KeepEnabled })(\r\n class AddToCart extends React.Component {\r\n onClick = (event: React.MouseEvent) => {\r\n this.props.feedback.push(this.props.addToCart());\r\n event.stopPropagation();\r\n event.preventDefault();\r\n };\r\n render() {\r\n const FeedbackButton = this.props.feedback.Button;\r\n return (\r\n \r\n {this.props.children}\r\n \r\n );\r\n }\r\n },\r\n ),\r\n);\r\n","import React from 'react';\r\nimport { styled, StyledProps } from '@glitz/react';\r\nimport { pixelsToUnit, white, sigma, kappa, minTinyMediaQuery } from 'Shared/Style';\r\nimport { Style } from '@glitz/type';\r\n\r\ntype PropType = StyledProps & {\r\n children?: React.ReactNode;\r\n};\r\n\r\nconst Base = styled.div({\r\n fontSize: kappa,\r\n position: 'absolute',\r\n textTransform: 'uppercase',\r\n zIndex: 1,\r\n [minTinyMediaQuery]: {\r\n fontSize: sigma,\r\n },\r\n});\r\n\r\nconst Badge = (props: PropType) => {props.children};\r\nconst TriBadge = (props: PropType) => (\r\n \r\n \r\n {props.children}\r\n \r\n \r\n);\r\n\r\nexport const CampaignBadge = styled(Badge, {\r\n color: (theme) => theme.campaignTextProductcard,\r\n position: 'absolute',\r\n top: 0,\r\n right: 0,\r\n fontWeight: 'bold',\r\n letterSpacing: pixelsToUnit(0.7),\r\n textAlign: 'left',\r\n backgroundClip: 'text',\r\n margin: { xy: '0.5rem' },\r\n WebkitBackgroundClip: 'text',\r\n textShadow: '-1px -1px 0 #fff, 1px -1px 0 #fff, -1px 1px 0 #fff, 1px 1px 0 #fff',\r\n});\r\n\r\nconst sharedStyle: Style = {\r\n borderRadius: '50%',\r\n color: white,\r\n margin: { xy: '0.5rem' },\r\n height: pixelsToUnit(32),\r\n lineHeight: pixelsToUnit(32),\r\n textAlign: 'center',\r\n width: pixelsToUnit(32),\r\n [minTinyMediaQuery]: {\r\n height: pixelsToUnit(40),\r\n lineHeight: pixelsToUnit(40),\r\n width: pixelsToUnit(40),\r\n },\r\n};\r\n\r\nconst triStyle: Style = {\r\n height: pixelsToUnit(32),\r\n width: pixelsToUnit(32),\r\n lineHeight: pixelsToUnit(32),\r\n textAlign: 'center',\r\n};\r\n\r\nconst OuterWrapper = styled.div({\r\n position: 'relative',\r\n height: '100%',\r\n width: '100%',\r\n border: {\r\n top: {\r\n color: (theme) => theme.discountBadgeColor,\r\n width: '75px',\r\n style: 'solid',\r\n },\r\n right: {\r\n color: 'transparent',\r\n width: '75px',\r\n style: 'solid',\r\n },\r\n },\r\n});\r\n\r\nconst InnerWrapper = styled.div({\r\n position: 'absolute',\r\n top: pixelsToUnit(-75),\r\n left: pixelsToUnit(8),\r\n color: white,\r\n fontWeight: 'bold',\r\n fontSize: pixelsToUnit(16),\r\n});\r\n\r\nexport const NewBadge = styled(Badge, {\r\n backgroundColor: (theme) => theme.badgeColor,\r\n ...sharedStyle,\r\n});\r\n\r\nexport const DiscountBadge = styled(Badge, {\r\n backgroundColor: (theme) => theme.discountBadgeColor,\r\n ...sharedStyle,\r\n});\r\n\r\nexport const DiscountTriBadge = styled(TriBadge, {\r\n ...triStyle,\r\n});\r\n","export function formatTitleCase(str: string) {\r\n if (str === '') {\r\n return str;\r\n }\r\n return str.replace(/\\S*/g, function(txt) {\r\n return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();\r\n });\r\n}\r\n","import React from 'react';\r\nimport { isIOS } from '@avensia/scope/device-type';\r\n\r\nconst DEFAULT_SCALE = 0.8;\r\nconst DEFAULT_ROTATE = 20;\r\nconst DEFAULT_OPACITY = 0;\r\n\r\ntype PropType = {\r\n isOpen: boolean;\r\n children?: (style: React.CSSProperties, onCloseEnd: () => void) => React.ReactElement;\r\n scaleX?: boolean;\r\n onCloseEnd?: () => void;\r\n};\r\n\r\nexport default function SlideIn({ isOpen, scaleX = true, children, onCloseEnd }: PropType) {\r\n return children(\r\n {\r\n transform: isIOS()\r\n ? `scale(${isOpen ? 1 : DEFAULT_SCALE})`\r\n : `perspective(40cm) scale(${isOpen ? 1 : DEFAULT_SCALE}) rotateX(${isOpen ? 0 : DEFAULT_ROTATE}deg)`,\r\n opacity: isOpen ? 1 : DEFAULT_OPACITY,\r\n },\r\n onCloseEnd,\r\n );\r\n}\r\n","import React from 'react';\r\nimport { styled, StyledProps, StyledElementProps, applyClassName } from '@glitz/react';\r\nimport { ESC_KEY, Breakpoint } from '@avensia/scope';\r\nimport Button, { Appearance as ButtonAppearance, Variant as ButtonVariant } from 'Shared/Button';\r\nimport SlideIn from 'Shared/SlideIn';\r\nimport Close from 'Shared/Icon/Close';\r\nimport Back from 'Shared/Icon/Back';\r\nimport Overlay, { closeOpenOverlay } from 'Shared/Overlay';\r\nimport Viewport from 'Shared/Viewport';\r\nimport { ZIndex, large, depth, white, zeta, pixelsToUnit, transition } from 'Shared/Style';\r\nimport connect from 'Shared/connect';\r\nimport freezeScroll from 'Shared/freeze-scroll';\r\n\r\nexport enum CloseType {\r\n Close,\r\n Back,\r\n}\r\n\r\ntype ConnectStateType = {\r\n currentBreakpoint: number;\r\n};\r\n\r\ntype BasePropType = StyledProps & {\r\n isOpen: boolean;\r\n maxWidth: string;\r\n maxHeight: string;\r\n onCloseEnd?: () => void;\r\n};\r\n\r\nexport type StrictPropType = StyledProps & {\r\n isOpen?: boolean;\r\n maxWidth?: string;\r\n maxHeight?: string;\r\n};\r\n\r\nexport type PropType = StyledProps &\r\n StrictPropType &\r\n ConnectStateType & {\r\n title?: string;\r\n action?: React.StatelessComponent | React.ComponentClass;\r\n onClose: () => void;\r\n onCloseEnd?: () => void;\r\n closeType?: CloseType;\r\n };\r\n\r\nconst Transition: React.StatelessComponent = ({\r\n className,\r\n isOpen,\r\n children,\r\n onCloseEnd,\r\n}) => (\r\n \r\n {(style: React.CSSProperties) => (\r\n
\r\n {children}\r\n
\r\n )}\r\n
\r\n );\r\n\r\nconst HEADER_HEIGHT = 50;\r\nconst CompactBase = styled(applyClassName(Transition), {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n height: '100%',\r\n width: '100%',\r\n backgroundColor: 'white',\r\n zIndex: ZIndex.Panel,\r\n ...transition({\r\n property: ['opacity', 'transform'],\r\n duration: '300ms',\r\n }),\r\n});\r\n\r\nconst ExtensiveBase = styled((props: BasePropType) => (\r\n \r\n));\r\n\r\nconst Header = styled.header({\r\n backgroundColor: theme => theme.primaryColor,\r\n display: 'flex',\r\n alignItems: 'center',\r\n flexShrink: 0,\r\n color: white,\r\n paddingLeft: '20px',\r\n height: pixelsToUnit(HEADER_HEIGHT),\r\n});\r\n\r\nconst Heading = styled.div({\r\n flexGrow: 1,\r\n fontSize: zeta,\r\n fontWeight: 'bold',\r\n textTransform: 'uppercase',\r\n});\r\n\r\n// Using flexbox here helps us growing children to\r\n// full height in some cases\r\nconst Body = styled.div({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n flexGrow: 1,\r\n height: '100%',\r\n position: 'relative',\r\n overflowY: 'auto',\r\n});\r\n\r\nconst ActionButton = styled(Button, {\r\n paddingRight: '20px',\r\n});\r\n\r\nconst BackIcon = styled(Back, {\r\n width: pixelsToUnit(10.2),\r\n height: pixelsToUnit(17.6),\r\n verticalAlign: 'middle',\r\n});\r\n\r\nexport const StrictPanel = (props: StrictPropType) => {\r\n // @ts-ignore: type 'typeof globalThis' has no index signature\r\n const isOpen = !!this.props.isOpen;\r\n const panelProps = {\r\n isOpen,\r\n maxWidth: props.maxWidth,\r\n maxHeight: props.maxHeight,\r\n };\r\n return (\r\n \r\n {(isCompact: boolean) =>\r\n isCompact ? (\r\n // @ts-ignore: type 'typeof globalThis' has no index signature\r\n {this.props.children}\r\n ) : (\r\n \r\n // @ts-ignore: type 'typeof globalThis' has no index signature\r\n {this.props.children}\r\n \r\n )\r\n }\r\n \r\n );\r\n};\r\n\r\ntype StateType = {\r\n contentDisplay: boolean;\r\n};\r\nclass Panel extends React.Component {\r\n unfreezeScroll: () => void;\r\n state: StateType = {\r\n contentDisplay: false,\r\n };\r\n UNSAFE_componentWillMount() {\r\n if (this.props.isOpen) {\r\n closeOpenOverlay();\r\n }\r\n }\r\n componentDidMount() {\r\n window.addEventListener('keydown', this.keyDown);\r\n }\r\n componentWillUnmount() {\r\n this.scrollFreeze(false);\r\n window.removeEventListener('keydown', this.keyDown);\r\n }\r\n scrollFreeze(freeze: boolean) {\r\n if (this.unfreezeScroll) {\r\n this.unfreezeScroll();\r\n }\r\n this.unfreezeScroll = freeze ? freezeScroll() : null;\r\n }\r\n toggleContentDisplay = () => {\r\n this.setState({\r\n contentDisplay: this.props.isOpen,\r\n });\r\n };\r\n closeCompletely = () => {\r\n if (!this.props.isOpen) {\r\n this.toggleContentDisplay();\r\n }\r\n if (this.props.onCloseEnd) {\r\n this.props.onCloseEnd();\r\n }\r\n };\r\n componentDidUpdate(prevProps: PropType) {\r\n if (prevProps.isOpen !== this.props.isOpen) {\r\n if (this.props.currentBreakpoint < Breakpoint.Medium) {\r\n this.scrollFreeze(this.props.isOpen);\r\n }\r\n if (this.props.isOpen) {\r\n requestAnimationFrame(() => {\r\n requestAnimationFrame(() => {\r\n this.toggleContentDisplay();\r\n });\r\n });\r\n }\r\n }\r\n }\r\n keyDown = (e: KeyboardEvent) => {\r\n if (e.keyCode === ESC_KEY && this.props.isOpen) {\r\n this.props.onClose();\r\n }\r\n };\r\n\r\n render() {\r\n const { contentDisplay } = this.state;\r\n const { maxWidth, maxHeight, isOpen } = this.props;\r\n const appendToDOM = isOpen ? isOpen : contentDisplay;\r\n const displayPanel = isOpen ? contentDisplay : isOpen;\r\n const panelProps = {\r\n isOpen: displayPanel,\r\n maxWidth,\r\n maxHeight,\r\n onCloseEnd: this.closeCompletely,\r\n };\r\n const panelHeader = this.props.title && (\r\n
\r\n {this.props.title}\r\n \r\n {this.props.closeType && this.props.closeType === CloseType.Back ? : }\r\n \r\n
\r\n );\r\n const panelBody = (\r\n \r\n {this.props.children}\r\n \r\n );\r\n return (\r\n \r\n {(isCompact: boolean) =>\r\n appendToDOM &&\r\n (isCompact ? (\r\n \r\n {panelHeader}\r\n {panelBody}\r\n \r\n ) : (\r\n \r\n \r\n {panelHeader}\r\n {panelBody}\r\n \r\n \r\n ))\r\n }\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default styled(\r\n connect(\r\n (state): ConnectStateType => ({\r\n currentBreakpoint: state.currentBreakpoint,\r\n }),\r\n )(Panel),\r\n);\r\n","import React from 'react';\r\nimport { Motion, spring, OpaqueConfig, presets } from 'react-motion';\r\nimport { Swipeable } from 'react-swipeable';\r\nimport { styled, applyClassName } from '@glitz/react';\r\n\r\nexport enum AnimationStyle {\r\n Default,\r\n Gentle,\r\n}\r\n\r\nexport enum Variant {\r\n Variation,\r\n HtmlBlock,\r\n}\r\n\r\ntype Props = {\r\n currentSlide: number;\r\n onSlideChange?: (index: number) => void;\r\n className?: string;\r\n elementRef: (element: HTMLElement) => void;\r\n carouselWidth: number;\r\n slidesPerPage: number;\r\n autoSlideTime?: number;\r\n continuous?: boolean;\r\n disabled?: boolean;\r\n animationStyle?: AnimationStyle;\r\n children?: React.ReactNode;\r\n variant?: Variant;\r\n center?: boolean;\r\n height?: string;\r\n backgroundColor?: string;\r\n assumedImageWidth?: number;\r\n onSwipeRest?: () => void;\r\n onSlideClick?: (index: number) => void;\r\n};\r\n\r\ntype State = {\r\n translateX: number;\r\n currentSlide: number;\r\n items: React.ReactNode[];\r\n};\r\n\r\ntype PlainStyleType = {\r\n translateX: TValue;\r\n};\r\n\r\nconst Container = styled.div({\r\n display: 'block',\r\n whiteSpace: 'nowrap',\r\n});\r\n\r\nconst DELTA = 3;\r\nconst SWIPE_THRESHOLD = 25;\r\n\r\nclass Carousel extends React.PureComponent {\r\n autoSlideTimer: number;\r\n slideWidth: number;\r\n slideWidthPercent: number;\r\n itemCountUnique: number;\r\n itemCountCloned: number;\r\n isResting: boolean;\r\n container: Element;\r\n lastDeltaX = 0;\r\n lastDir = 0;\r\n offsetDeltaX = 0;\r\n slideWillChange = 0;\r\n\r\n static defaultProps = {\r\n slidesPerPage: 1,\r\n };\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n\r\n this.slideWidth = props.carouselWidth / props.slidesPerPage;\r\n this.slideWidthPercent = 100 / props.slidesPerPage;\r\n\r\n let children = React.Children.toArray(this.props.children);\r\n const items = this.props.continuous ? children.concat(children) : children;\r\n this.itemCountUnique = children.length;\r\n this.itemCountCloned = items.length;\r\n\r\n this.isResting = true;\r\n this.itemCount = children.length;\r\n\r\n this.state = {\r\n translateX: 0,\r\n items,\r\n currentSlide: this.props.currentSlide ? this.props.currentSlide : 0,\r\n };\r\n }\r\n\r\n itemCount: number;\r\n\r\n componentDidMount() {\r\n this.setState({\r\n translateX: this.getTranslateX(this.props.currentSlide),\r\n });\r\n this.setUpAutoSlide();\r\n }\r\n\r\n componentWillUnmount() {\r\n clearInterval(this.autoSlideTimer);\r\n }\r\n\r\n setUpAutoSlide() {\r\n const { autoSlideTime, disabled } = this.props;\r\n if (\r\n !disabled &&\r\n this.state.items.length > 1 &&\r\n typeof autoSlideTime === 'number' &&\r\n autoSlideTime > 0 &&\r\n document.hidden !== undefined\r\n ) {\r\n this.autoSlideTimer && clearInterval(this.autoSlideTimer);\r\n this.autoSlideTimer = setInterval(() => {\r\n this.goForward(1);\r\n }, autoSlideTime);\r\n\r\n //Prevent autosliding when browser window is hidden\r\n document.addEventListener(\r\n 'visibilitychange',\r\n () => {\r\n if (document.hidden) {\r\n clearInterval(this.autoSlideTimer);\r\n } else {\r\n this.setUpAutoSlide();\r\n }\r\n },\r\n false,\r\n );\r\n }\r\n }\r\n\r\n getTranslateX(currentSlide: number) {\r\n return !this.props.disabled ? currentSlide * -this.slideWidth : 0;\r\n }\r\n\r\n componentWillReceiveProps(nextProps: Props) {\r\n const hasNewSlideIndex = nextProps.currentSlide !== this.state.currentSlide;\r\n const hasNewCarouselWidth = nextProps.carouselWidth !== this.props.carouselWidth;\r\n const hasNewSlideWidth = nextProps.slidesPerPage !== this.props.slidesPerPage;\r\n const hasNewSlidesAdded =\r\n React.Children.toArray(nextProps.children).length !== React.Children.toArray(this.props.children).length;\r\n\r\n if (hasNewCarouselWidth || hasNewSlideWidth) {\r\n this.slideWidth = nextProps.carouselWidth / nextProps.slidesPerPage;\r\n this.slideWidthPercent = 100 / nextProps.slidesPerPage;\r\n }\r\n if (hasNewSlideIndex) {\r\n this.setState({\r\n currentSlide: nextProps.currentSlide,\r\n translateX: this.getTranslateX(nextProps.currentSlide),\r\n });\r\n }\r\n if (hasNewSlideIndex || hasNewCarouselWidth || hasNewSlideWidth) {\r\n if (!hasNewSlidesAdded && !hasNewCarouselWidth && !hasNewSlideWidth) {\r\n this.isResting = false;\r\n }\r\n this.setUpAutoSlide();\r\n this.setState({ translateX: this.getTranslateX(nextProps.currentSlide) });\r\n }\r\n if (hasNewSlidesAdded) {\r\n const children = React.Children.toArray(nextProps.children);\r\n //Duplicate the slides if the carousel should be able to loop:\r\n const items = nextProps.continuous ? children.concat(children) : children;\r\n\r\n this.itemCountUnique = children.length;\r\n this.itemCountCloned = items.length;\r\n\r\n this.isResting = true;\r\n\r\n this.setState({\r\n items,\r\n translateX: this.getTranslateX(nextProps.currentSlide),\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * To enable looping and to have enough items to break out of page container we duplicate all items in array.\r\n * When we navigate in the carousel we are moving the container first and foremost.\r\n * Let's say we have X unique items.\r\n * Since we support looping, we will run out of slides to show when we are have navigated X*2 times.\r\n * To overcome this we are moving all individual items X*2 * 100 percent at this stage. No it's looping!\r\n * We also want to have slides visible at the right hand side all the time so when we have stepped X times we will move\r\n * the X first slides to the right so that our two duplicate halves of slides will rotate.\r\n * Since we want to have our start slide aligned with the left hand side of the page container and items are\r\n * flowing right we need slides to move infront of the first slide. We handle this with slideShouldMoveToFront method.\r\n */\r\n slideShouldMoveToFront(index: number) {\r\n // We visibly move items from the end of the non-active half to before the active half.\r\n const itemCountToMoveToFront = this.itemCountUnique > 2 ? 2 : 1;\r\n const isFirstHalf = this.isActiveSlideInFirstHalf();\r\n const activeSlideIsInFront =\r\n getAbsoluteIndex(this.state.currentSlide, this.itemCountUnique) < itemCountToMoveToFront;\r\n const slideIsInOtherHalf =\r\n (isFirstHalf && index >= this.itemCountUnique) || (!isFirstHalf && index < this.itemCountUnique);\r\n const indexOffsetFromEnd = (isFirstHalf ? this.itemCountCloned : this.itemCountUnique) - 1 - index;\r\n return activeSlideIsInFront && slideIsInOtherHalf && indexOffsetFromEnd < itemCountToMoveToFront;\r\n }\r\n getSlideTransformPercent(slideIndex: number) {\r\n if (!this.props.continuous) {\r\n return 0;\r\n }\r\n\r\n // When all slides have passed, move them all forward so index point on first item. Enables looping.\r\n const itemCountClonedLoopCount = Math.floor(this.state.currentSlide / this.itemCountCloned);\r\n let steps = itemCountClonedLoopCount * this.itemCountCloned;\r\n\r\n /* When the half of them items has passed move it back so that our two halfs will rotate being \"active\".\r\n Balances out the slides so that we have slides in viewport all the time. */\r\n const thisSlidIsInFirstHalf = slideIndex < this.itemCountUnique;\r\n if (!this.isActiveSlideInFirstHalf() && thisSlidIsInFirstHalf) {\r\n steps += this.itemCountCloned;\r\n }\r\n\r\n /* At the start of every loop we need to move some slides to the front of first slide.\r\n Some carousels breakout of container and needs slides before active slide all the time */\r\n if (this.slideShouldMoveToFront(slideIndex)) {\r\n steps -= this.itemCountCloned;\r\n }\r\n return steps * 100;\r\n }\r\n getLoopCount() {\r\n // 1 loop means when all the unique items has passed\r\n return this.itemCountUnique < 1 ? 0 : Math.floor(this.props.currentSlide / this.itemCountUnique);\r\n }\r\n isActiveSlideInFirstHalf() {\r\n return this.getLoopCount() % 2 === 0;\r\n }\r\n\r\n goToSlide = (index: number) => {\r\n if (!this.props.continuous) {\r\n index = Math.min(index, this.itemCount - this.props.slidesPerPage);\r\n index = Math.max(index, 0);\r\n }\r\n this.setState({\r\n currentSlide: index,\r\n translateX: this.getTranslateX(index),\r\n });\r\n this.props.onSlideChange && this.props.onSlideChange(getAbsoluteIndex(index, this.itemCount));\r\n };\r\n goBack = (steps: number) => {\r\n this.goToSlide(this.state.currentSlide - steps);\r\n };\r\n goForward = (steps: number) => {\r\n this.goToSlide(this.state.currentSlide + steps);\r\n };\r\n\r\n onSwiping = ({ deltaX, velocity }: { deltaX: number; velocity: number }) => {\r\n if (!!this.props.disabled || this.state.items.length <= 1) return;\r\n this.isResting = false;\r\n const { translateX } = this.state;\r\n const diff = deltaX - this.lastDeltaX;\r\n const dir = Math.sign(diff);\r\n const sameDir = dir === this.lastDir || dir === 0;\r\n if (dir !== 0) this.lastDir = dir;\r\n //If the user changes direction, use this point as the new starting point for calculating whether to trigger a slide change\r\n if (!sameDir) {\r\n this.offsetDeltaX = this.lastDeltaX;\r\n }\r\n this.lastDeltaX = deltaX;\r\n this.setState({\r\n translateX: translateX - diff,\r\n });\r\n };\r\n\r\n onSwiped = ({ deltaX, velocity }: { deltaX: number; velocity: number }) => {\r\n if (!!this.props.disabled || this.state.items.length <= 1) return;\r\n const currentDeltaX = deltaX - this.offsetDeltaX;\r\n //Trigger a slide change if swiped over the middle of the carousel, or swipe is fast or long enough:\r\n if (\r\n deltaX < -this.slideWidth / 2 ||\r\n (currentDeltaX < -SWIPE_THRESHOLD && velocity * velocity * currentDeltaX < -2 * SWIPE_THRESHOLD)\r\n ) {\r\n this.goBack(1);\r\n } else if (\r\n deltaX > this.slideWidth / 2 ||\r\n (currentDeltaX > SWIPE_THRESHOLD && velocity * velocity * currentDeltaX > 2 * SWIPE_THRESHOLD)\r\n ) {\r\n this.goForward(1);\r\n } else {\r\n this.setState({\r\n translateX: this.getTranslateX(this.state.currentSlide),\r\n });\r\n }\r\n this.lastDeltaX = 0;\r\n this.offsetDeltaX = 0;\r\n };\r\n\r\n getSpringConfig() {\r\n if (this.props.animationStyle === AnimationStyle.Gentle) {\r\n return {\r\n stiffness: 180,\r\n damping: 25,\r\n precision: 0.01,\r\n };\r\n }\r\n return presets.noWobble;\r\n }\r\n\r\n onRest = () => {\r\n this.isResting = true;\r\n this.props.onSwipeRest && this.props.onSwipeRest();\r\n };\r\n\r\n render() {\r\n const motionStyle: PlainStyleType = {\r\n translateX: this.isResting ? this.state.translateX : spring(this.state.translateX, this.getSpringConfig()),\r\n };\r\n\r\n return (\r\n 1}\r\n style={{ height: this.props.height || 'auto' }}\r\n >\r\n \r\n {(interpolatedStyle) => (\r\n \r\n {React.Children.toArray(this.props.children).map((item, index) => {\r\n //const isActive = index % this.itemCountUnique === getAbsoluteIndex(this.state.currentSlide, this.itemCountUnique);\r\n return (\r\n \r\n this.props.onSlideClick && this.props.onSlideClick(getAbsoluteIndex(index, this.itemCountUnique))\r\n }\r\n >\r\n {item}\r\n \r\n );\r\n })}\r\n \r\n )}\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nexport default styled(applyClassName(Carousel));\r\n\r\nexport function getAbsoluteIndex(index: number, uniqueItemCount: number) {\r\n return index < 0 ? (uniqueItemCount + (index % uniqueItemCount)) % uniqueItemCount : index % uniqueItemCount;\r\n}\r\n","import React from 'react';\r\nimport { Style } from '@glitz/type';\r\nimport { styled, StyledProps } from '@glitz/react';\r\nimport { transition, white, pixelsToUnit, minTinyMediaQuery } from 'Shared/Style';\r\nimport Button, { Variant as ButtonVariant, Appearance as ButtonAppearance } from 'Shared/Button';\r\nimport { Left as Prev, Right as Next } from 'Shared/Icon/Arrow';\r\n\r\nexport enum Direction {\r\n Next,\r\n Prev,\r\n}\r\n\r\ntype PropType = {\r\n onClick: (direction: Direction) => void;\r\n direction: Direction;\r\n disabled: boolean;\r\n offset?: boolean;\r\n};\r\n\r\nexport default styled((props: PropType & StyledProps) => {\r\n const { compose, disabled, offset, ...restProps } = props;\r\n const css: Style = {\r\n fontSize: pixelsToUnit(20),\r\n visibility: 'hidden',\r\n position: 'absolute',\r\n backgroundColor: white,\r\n borderRadius: '50%',\r\n padding: { xy: pixelsToUnit(5) },\r\n top: '50%',\r\n userSelect: 'none',\r\n ...transition({ property: 'opacity' }),\r\n ...(restProps.direction === Direction.Next\r\n ? {\r\n right: offset ? '-2.4rem' : 0,\r\n }\r\n : {\r\n left: offset ? '-2.4rem' : 0,\r\n }),\r\n [minTinyMediaQuery]: {\r\n visibility: 'visible',\r\n },\r\n opacity: 0.5,\r\n pointerEvents: 'auto',\r\n ...(!disabled && {\r\n cursor: 'pointer',\r\n ':hover': {\r\n opacity: 0.6,\r\n },\r\n }),\r\n ...(disabled && {\r\n cursor: 'none',\r\n opacity: 0.2,\r\n backgroundColor: 'transparent',\r\n }),\r\n };\r\n\r\n function handleClick() {\r\n restProps.onClick(restProps.direction);\r\n }\r\n\r\n return (\r\n \r\n \r\n {restProps.direction === Direction.Prev ? : }\r\n \r\n \r\n );\r\n});\r\n","import React from 'react';\r\nimport { styled, StyledProps } from '@glitz/react';\r\nimport * as style from 'Shared/Style';\r\nimport { media } from '@glitz/core';\r\n\r\ntype PropType = React.HTMLAttributes & {\r\n nbrOfSlides: number;\r\n activeSlideIndex: number;\r\n onSlideIndexClick: (relativeIndex: number) => void;\r\n} & StyledProps;\r\n\r\nconst SlideContainer = styled.div({\r\n position: 'relative',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n});\r\n\r\nconst SlideContainerActive = styled(SlideContainer, {\r\n position: 'absolute',\r\n left: 0,\r\n right: 0,\r\n zIndex: 1,\r\n pointerEvents: 'none',\r\n});\r\n\r\nconst SlideIndex = styled(\r\n ({ isActive, compose, ...restProps }: { isActive: boolean } & StyledProps & React.HTMLAttributes) => (\r\n \r\n ),\r\n);\r\n\r\nconst SlideIndexActive = styled(\r\n ({ isActive, compose, ...restProps }: { isActive: boolean } & StyledProps & React.HTMLAttributes) => (\r\n theme.primaryColor,\r\n opacity: 0,\r\n transform: 'scale(0.25)',\r\n ...style.transition({ property: ['opacity', 'transform'], duration: '0.5s' }),\r\n ...(isActive && {\r\n opacity: 1,\r\n transform: 'scale(1)',\r\n }),\r\n })}\r\n {...restProps}\r\n isActive={isActive}\r\n />\r\n ),\r\n);\r\n\r\nclass SlideIndexMarkers extends React.PureComponent {\r\n onSlideIndexClick = (index: number) => {\r\n const relativeIndex = index - this.props.activeSlideIndex;\r\n this.props.onSlideIndexClick(relativeIndex);\r\n };\r\n render() {\r\n return (\r\n \r\n \r\n {[...Array(this.props.nbrOfSlides).fill(1)].map((x, i) => (\r\n this.onSlideIndexClick(i)}\r\n />\r\n ))}\r\n \r\n {[...Array(this.props.nbrOfSlides).fill(1)].map((x, i) => (\r\n this.onSlideIndexClick(i)}\r\n />\r\n ))}\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nexport default styled(SlideIndexMarkers, {\r\n position: 'absolute',\r\n zIndex: style.ZIndex.Tray,\r\n bottom: style.pixelsToUnit(8),\r\n left: 0,\r\n right: 0,\r\n width: '100%',\r\n ...media('print', {\r\n display: 'none',\r\n }),\r\n});\r\n","import React, { ReactNode } from 'react';\r\n\r\ntype State = {\r\n dimensions: Dimensions;\r\n};\r\ntype Props = {\r\n children?: (args: RenderArgs) => ReactNode;\r\n onDimensionChange?: (dimensions: Dimensions) => void;\r\n};\r\ntype Dimensions = {\r\n width: number;\r\n height: number;\r\n left: number;\r\n right: number;\r\n top: number;\r\n bottom: number;\r\n};\r\ntype RenderArgs = {\r\n dimensions: Dimensions;\r\n elementRef: (el: HTMLElement) => void;\r\n};\r\n\r\nexport default class ElementDimensions extends React.PureComponent {\r\n measureElement: HTMLElement;\r\n mounted = false;\r\n unsubscribeResize = () => {};\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n dimensions: {\r\n width: null,\r\n height: null,\r\n left: null,\r\n right: null,\r\n top: null,\r\n bottom: null,\r\n },\r\n };\r\n }\r\n getElementDimensions() {\r\n return !!this.measureElement ? this.measureElement.getBoundingClientRect() : this.state.dimensions;\r\n }\r\n componentDidMount() {\r\n const initialDimensions = this.getElementDimensions();\r\n this.onDimensionChange(initialDimensions);\r\n this.setState({ dimensions: initialDimensions });\r\n\r\n window.addEventListener('resize', () => {\r\n const dimensions = this.getElementDimensions();\r\n if (this.state.dimensions !== dimensions) {\r\n this.onDimensionChange(dimensions);\r\n this.setState({ dimensions });\r\n }\r\n });\r\n }\r\n componentWillUnmount() {\r\n this.unsubscribeResize();\r\n }\r\n elementRef = (el: HTMLElement) => {\r\n this.measureElement = el;\r\n };\r\n onDimensionChange = (dimensions: Dimensions) => {\r\n this.props.onDimensionChange && this.props.onDimensionChange(dimensions);\r\n };\r\n render() {\r\n return this.props.children({ dimensions: this.state.dimensions, elementRef: this.elementRef });\r\n }\r\n}\r\n","import React, { ReactNode } from 'react';\r\nimport { styled } from '@glitz/react';\r\nimport SlideIndexMarkers from './SlideIndexMarkers';\r\nimport { Carousel, getAbsoluteIndex, AnimationStyle, Navigation, Direction } from './';\r\nimport ElementDimensions from './ElementDimensions';\r\nimport * as style from 'Shared/Style';\r\n\r\ntype BasePropType = {\r\n height?: string;\r\n children: ReactNode;\r\n};\r\n\r\nconst Base = ({ height, children }: BasePropType) => (\r\n \r\n {children}\r\n \r\n);\r\n\r\nconst CarouselBase = styled.div({\r\n overflow: 'hidden',\r\n});\r\n\r\nconst ButtonContainer = styled.div({\r\n position: 'absolute',\r\n width: '100%',\r\n top: '50%',\r\n transform: 'translateY(-50%)',\r\n zIndex: style.ZIndex.SiteBanner,\r\n pointerEvents: 'none',\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n});\r\n\r\ntype PropType = {\r\n isHero?: boolean;\r\n continuous?: boolean;\r\n disabled?: boolean;\r\n autoSlideTime?: number;\r\n hideNavigationButtons?: boolean;\r\n hideIndexMarkers?: boolean;\r\n currentSlide?: number;\r\n onSlideChange?: (index: number) => void;\r\n height?: string;\r\n backgroundColor?: string; //We could have used a glitz´ styles for this, but this is easier to follow\r\n slidesPerPage?: number;\r\n navigationOffset?: boolean;\r\n};\r\n\r\ntype StateType = {\r\n currentSlide: number;\r\n};\r\n\r\nexport default class CommonCarousel extends React.Component {\r\n static defaultProps = {\r\n slidesPerPage: 1,\r\n };\r\n\r\n constructor(props: PropType) {\r\n super(props);\r\n\r\n const children = React.Children.toArray(this.props.children);\r\n this.itemCount = children.length;\r\n this.state = {\r\n currentSlide: this.props.currentSlide ? this.props.currentSlide : 0,\r\n };\r\n }\r\n\r\n itemCount: number;\r\n\r\n componentDidMount() {\r\n window.addEventListener('keydown', this.handleKeyPress);\r\n }\r\n componentWillUnmount() {\r\n window.removeEventListener('keydown', this.handleKeyPress);\r\n }\r\n\r\n componentWillReceiveProps(nextProps: PropType) {\r\n const children = React.Children.toArray(this.props.children);\r\n this.itemCount = children.length;\r\n if (nextProps.currentSlide !== this.props.currentSlide) {\r\n this.setState({\r\n currentSlide: nextProps.currentSlide ? nextProps.currentSlide : 0,\r\n });\r\n }\r\n }\r\n\r\n goToSlide = (index: number) => {\r\n if (!this.props.continuous) {\r\n index = Math.min(index, this.itemCount - this.props.slidesPerPage);\r\n index = Math.max(index, 0);\r\n }\r\n this.setState({ currentSlide: index });\r\n this.props.onSlideChange && this.props.onSlideChange(getAbsoluteIndex(index, this.itemCount));\r\n };\r\n\r\n handleKeyPress = (e: KeyboardEvent) => {\r\n if (e.keyCode === 37) {\r\n this.goPrev();\r\n } else if (e.keyCode === 39) {\r\n this.goNext();\r\n }\r\n };\r\n\r\n goPrev = () => {\r\n this.goToSlide(this.state.currentSlide - this.props.slidesPerPage);\r\n };\r\n goNext = () => {\r\n this.goToSlide(this.state.currentSlide + this.props.slidesPerPage);\r\n };\r\n onSlideIndexClick = (relativeIndex: number) => {\r\n this.goToSlide(this.state.currentSlide + relativeIndex);\r\n };\r\n render() {\r\n const { slidesPerPage } = this.props;\r\n const children = React.Children.toArray(this.props.children);\r\n const nbrOfItems = children.length > slidesPerPage ? children.length : slidesPerPage;\r\n const isFirstSlide = this.state.currentSlide === 0;\r\n const isLastSlide = this.state.currentSlide === nbrOfItems - slidesPerPage;\r\n\r\n return (\r\n \r\n \r\n \r\n {(dimensionsProp) => (\r\n {\r\n this.setState({ currentSlide: index });\r\n this.props.onSlideChange && this.props.onSlideChange(getAbsoluteIndex(index, this.itemCount));\r\n }}\r\n continuous={this.props.continuous}\r\n autoSlideTime={this.props.autoSlideTime}\r\n animationStyle={AnimationStyle.Gentle}\r\n >\r\n {children}\r\n \r\n )}\r\n \r\n \r\n {!this.props.hideNavigationButtons && !this.props.disabled && children.length > 1 && (\r\n \r\n {this.props.continuous || !isFirstSlide ? (\r\n \r\n ) : (\r\n {\r\n return false;\r\n }}\r\n direction={Direction.Prev}\r\n disabled={true}\r\n offset={this.props.navigationOffset}\r\n />\r\n )}\r\n {this.props.continuous || !isLastSlide ? (\r\n \r\n ) : (\r\n {\r\n return false;\r\n }}\r\n direction={Direction.Next}\r\n offset={this.props.navigationOffset}\r\n />\r\n )}\r\n \r\n )}\r\n {!this.props.hideIndexMarkers && !this.props.disabled && children.length > 1 && (\r\n \r\n )}\r\n \r\n );\r\n }\r\n}\r\n","import React from 'react';\r\nimport { styled } from '@glitz/react';\r\nimport { pseudo } from '@glitz/core';\r\nimport Button, { Variant as ButtonVariant, Appearance as ButtonAppearance } from 'Shared/Button';\r\nimport { gamma, delison, silver, scorpion } from 'Shared/Style';\r\n\r\nconst Entry = styled(Button, {\r\n borderRadius: '50%',\r\n width: gamma,\r\n height: gamma,\r\n ...pseudo(':not(:last-child)', {\r\n marginRight: '9px',\r\n }),\r\n});\r\n\r\nconst Svg = styled.svg({\r\n width: delison,\r\n height: delison,\r\n});\r\nconst Circle = styled.circle({\r\n transition: {\r\n property: 'opacity',\r\n duration: '0.5s',\r\n },\r\n});\r\n\r\ntype PropType = {\r\n isCurrent: boolean;\r\n onClick: () => void;\r\n};\r\n\r\nconst SIZE = 100;\r\nconst CENTER = SIZE / 2;\r\nconst BULLET_RADIUS = SIZE * 0.425;\r\n\r\nconst Bullet = (props: PropType) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport default Bullet;\r\n","export { default as Carousel, getAbsoluteIndex, AnimationStyle } from './Carousel';\r\nexport { default as CommonCarousel } from './CommonCarousel';\r\nexport { default as Bullet } from './Bullet';\r\nexport { default as Navigation, Direction } from './Navigation';\r\n","import React from 'react';\r\nimport { styled, StyledElementProps } from '@glitz/react';\r\nimport { CommonCarousel } from 'Shared/Carousel';\r\n\r\ntype PropType = {\r\n prev?: () => void;\r\n next?: () => void;\r\n children: React.ReactNode;\r\n slideQuantityToShow: number;\r\n navigationOffsetWidth: number;\r\n} & StyledElementProps;\r\n\r\nclass ProductsPanel extends React.Component {\r\n render() {\r\n return (\r\n \r\n \r\n {this.props.children}\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nexport default ProductsPanel;\r\n\r\nconst Base = styled.div({\r\n position: 'relative',\r\n});\r\n","import React from 'react';\r\nimport { styled, StyledProps } from '@glitz/react';\r\nimport { pseudo } from '@glitz/core';\r\nimport { translate, isIE } from '@avensia/scope';\r\nimport Price, { Type as PriceType } from 'Pricing/Price';\r\nimport Image, { Ratio, Preset } from 'Shared/Image/Ratio';\r\nimport {\r\n iota,\r\n gamma,\r\n epsilon,\r\n zeta,\r\n pixelsToUnit,\r\n whitelilac,\r\n minTinyMediaQuery,\r\n theta,\r\n kappa,\r\n wildwatermelon,\r\n white,\r\n minMicroMediaQuery,\r\n black,\r\n} from 'Shared/Style';\r\nimport connect from 'Shared/connect';\r\nimport Button, { Appearance, Variant } from 'Shared/Button';\r\nimport { formatTitleCase } from 'Shared/string-format';\r\nimport Link from 'Shared/Link';\r\nimport AddToCart from 'Product/ProductAddToCart';\r\nimport AverageRating, { Spacing, Size } from 'Product/ProductDetails/AverageRating';\r\nimport { CampaignBadge, DiscountBadge, NewBadge } from 'Product/ProductCard/Badge';\r\nimport PriceViewModel from 'Pricing/PriceViewModel.type';\r\nimport { addCartItem } from 'Checkout/action-creators';\r\nimport CartItemViewModel from 'Cart/Models/CartItemViewModel.type';\r\n\r\ntype ConnectStateType = {\r\n items: CartItemViewModel[];\r\n};\r\n\r\ntype ConnectActionType = {\r\n addToCart: (code: string, quantity: number, ticket: string) => any;\r\n};\r\n\r\nexport type ItemType = {\r\n brand: string;\r\n averageRating: number;\r\n ticket: string;\r\n price: PriceViewModel;\r\n displayName: string;\r\n variantCode: string;\r\n imageUrls: string[];\r\n isNew: boolean;\r\n inStock: boolean;\r\n isUpsellModal?: boolean;\r\n hasPromotion: boolean;\r\n hasDiscount: boolean;\r\n url: string;\r\n hasMultipleVariants: boolean;\r\n};\r\n\r\ntype PropType = {\r\n product: ItemType;\r\n} & ConnectStateType &\r\n ConnectActionType &\r\n StyledProps;\r\n\r\nclass Item extends React.Component {\r\n addToCart = () => {\r\n const code = this.props.product.variantCode;\r\n const existingItem = this.props.items.find((i) => i.code === code && !i.isGift);\r\n const quantity = existingItem ? existingItem.quantity + 1 : 1;\r\n\r\n return this.props.addToCart(code, quantity, this.props.product.ticket);\r\n };\r\n\r\n render() {\r\n const {\r\n hasPromotion,\r\n hasDiscount: productHasDiscount,\r\n isNew,\r\n averageRating,\r\n imageUrls,\r\n displayName,\r\n price,\r\n brand,\r\n url,\r\n ticket,\r\n isUpsellModal,\r\n hasMultipleVariants,\r\n } = this.props.product;\r\n const { current, original } = price;\r\n const hasDiscount = current < original;\r\n\r\n const topProps = {\r\n hasPromotion,\r\n productHasDiscount,\r\n isNew,\r\n isUpsellModal,\r\n averageRating,\r\n imageUrl: imageUrls.length ? imageUrls[0] : '',\r\n displayName,\r\n price,\r\n currency: price.currency,\r\n current,\r\n original,\r\n currentPrice: price.current,\r\n upsell: price.upsell,\r\n };\r\n\r\n const bottomProps = {\r\n brand,\r\n currency: price.currency,\r\n displayName,\r\n productHasDiscount,\r\n hasDiscount,\r\n current,\r\n original,\r\n currentPrice: price.current,\r\n upsell: price.upsell,\r\n };\r\n\r\n const button = hasMultipleVariants ? (\r\n \r\n {translate('/ProductListing/ViewProduct')}\r\n \r\n ) : (\r\n \r\n {this.props.product.inStock ? translate('/Cart/BuyMobile') : translate('/Cart/OutOfStrock')}\r\n \r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {button}\r\n \r\n );\r\n }\r\n}\r\n\r\ntype TopPropType = {\r\n hasPromotion: boolean;\r\n productHasDiscount: boolean;\r\n isNew: boolean;\r\n currency: string;\r\n averageRating: number;\r\n imageUrl: string;\r\n displayName: string;\r\n price: PriceViewModel;\r\n original: number;\r\n upsell: number;\r\n};\r\n\r\nexport function Top(props: TopPropType) {\r\n return (\r\n \r\n {props.hasPromotion && (\r\n \r\n {translate('/Product/Badge/Campaign')}\r\n \r\n )}\r\n {props.productHasDiscount && !props.upsell ? (\r\n {`-${props.price.discountPercentage}%`}\r\n ) : (\r\n props.isNew && {`${translate('/Product/Badge/New')}!`}\r\n )}\r\n \r\n \r\n {!!props.averageRating && }\r\n \r\n \r\n );\r\n}\r\n\r\ntype BottomPropType = {\r\n brand: string;\r\n currency: string;\r\n displayName: string;\r\n productHasDiscount: boolean;\r\n hasDiscount: boolean;\r\n current: number;\r\n original: number;\r\n currentPrice: number;\r\n upsell: number;\r\n};\r\n\r\nexport function Bottom(props: BottomPropType) {\r\n const discount = props.original - props.currentPrice;\r\n return (\r\n \r\n {`${props.brand || ''} ${formatTitleCase(\r\n props.displayName,\r\n )}`}\r\n \r\n 0 ? { fontSize: iota, color: wildwatermelon } : { fontSize: iota, color: black }}\r\n current={props.hasDiscount && !props.upsell ? Math.round(props.current) : Math.round(props.currentPrice)}\r\n currency={props.currency}\r\n priceType={props.hasDiscount ? PriceType.New : PriceType.Regular}\r\n />\r\n {props.productHasDiscount && (\r\n \r\n )}\r\n {props.upsell > 0 && !props.productHasDiscount && props.currentPrice !== props.original && (\r\n \r\n )}\r\n \r\n \r\n {props.currentPrice !== props.original && (\r\n \r\n {translate('/Upsell/Save') + ' '}\r\n {Math.round(discount)}\r\n {translate('/Upsell/Currency')}\r\n \r\n )}\r\n \r\n \r\n );\r\n}\r\n\r\ntype UpsellAllPropType = {\r\n hasPromotion: boolean;\r\n productHasDiscount: boolean;\r\n isNew: boolean;\r\n currency: string;\r\n averageRating: number;\r\n imageUrl: string;\r\n displayName: string;\r\n price: PriceViewModel;\r\n original: number;\r\n upsell: number;\r\n isUpsellModal: boolean;\r\n brand: string;\r\n hasDiscount: boolean;\r\n current: number;\r\n currentPrice: number;\r\n};\r\n\r\nexport function UpsellAll(props: UpsellAllPropType) {\r\n const discount = props.original - props.upsell;\r\n return (\r\n \r\n {props.hasPromotion && (\r\n \r\n {translate('/Product/Badge/Campaign')}\r\n \r\n )}\r\n {props.productHasDiscount && !props.upsell ? (\r\n {`-${props.price.discountPercentage}%`}\r\n ) : (\r\n props.isNew && {`${translate('/Product/Badge/New')}!`}\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {`${props.brand || ''} ${formatTitleCase(\r\n props.displayName,\r\n )}`}\r\n \r\n \r\n {props.productHasDiscount && (\r\n \r\n )}\r\n {props.upsell > 0 && !props.productHasDiscount && (\r\n \r\n )}\r\n \r\n \r\n {translate('/Upsell/Save')} {discount}\r\n {translate('/Upsell/Currency')}\r\n \r\n \r\n \r\n \r\n \r\n {translate('/Upsell/Save')} {discount}\r\n {translate('/Upsell/Currency')}\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default styled(\r\n connect(\r\n (state): ConnectStateType => ({\r\n items: state.cart.items,\r\n }),\r\n (dispatch): ConnectActionType => ({\r\n addToCart(code: string, quantity: number, ticket: string) {\r\n return dispatch(addCartItem(code, quantity, ticket, 'Kassakampanjer'));\r\n },\r\n }),\r\n )(Item),\r\n);\r\n\r\nexport const Base = styled.div({\r\n backgroundColor: whitelilac,\r\n display: 'flex',\r\n flexFlow: 'column nowrap',\r\n flex: {\r\n grow: 0,\r\n shrink: 0,\r\n basis: pixelsToUnit(132),\r\n },\r\n height: '100%',\r\n padding: {\r\n xy: pixelsToUnit(2),\r\n },\r\n margin: { xy: '0.2rem' },\r\n textAlign: 'center',\r\n ...pseudo(':not(:first-child)', {\r\n marginLeft: pixelsToUnit(5),\r\n }),\r\n});\r\n\r\nconst ContentLink = styled(Link, {\r\n color: (theme) => theme.textColor,\r\n display: 'flex',\r\n flexFlow: 'column nowrap',\r\n});\r\n\r\nconst TopBase = styled.div({});\r\n\r\nconst UpsellModalItemBase = styled.div({\r\n width: '100%',\r\n position: 'relative',\r\n});\r\n\r\nconst RatingsPlaceholder = styled.div({\r\n height: pixelsToUnit(13),\r\n});\r\n\r\nconst Ratings = styled(AverageRating, {\r\n height: pixelsToUnit(13),\r\n width: '100%',\r\n zIndex: 1,\r\n});\r\n\r\nconst Title = styled.div({\r\n whiteSpace: 'nowrap',\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n fontSize: zeta,\r\n fontWeight: 'bold',\r\n maxHeight: pixelsToUnit(66),\r\n padding: {\r\n top: pixelsToUnit(15),\r\n x: pixelsToUnit(10),\r\n bottom: 0,\r\n },\r\n wordBreak: 'break-word',\r\n WebkitLineClamp: 2,\r\n WebkitBoxOrient: 'vertical',\r\n lineHeight: pixelsToUnit(18),\r\n});\r\n\r\nconst TitleModal = styled(Title, {\r\n whiteSpace: 'normal',\r\n fontWeight: 'bold',\r\n padding: {\r\n top: pixelsToUnit(5),\r\n x: pixelsToUnit(0),\r\n bottom: 0,\r\n },\r\n});\r\n\r\nconst Prices = styled.div({\r\n flex: {\r\n grow: 0,\r\n shrink: 0,\r\n basis: pixelsToUnit(47),\r\n },\r\n fontSize: gamma,\r\n fontWeight: 'bold',\r\n maxHeight: pixelsToUnit(47),\r\n padding: {\r\n top: pixelsToUnit(8),\r\n bottom: pixelsToUnit(8),\r\n x: 0,\r\n },\r\n});\r\n\r\nconst Text = styled.span({\r\n fontSize: kappa,\r\n whiteSpace: 'nowrap',\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n letterSpacing: pixelsToUnit(0.8),\r\n lineHeight: pixelsToUnit(36),\r\n [minMicroMediaQuery]: {\r\n fontSize: theta,\r\n },\r\n});\r\n\r\nconst SaveUpsellText = styled.div({\r\n backgroundColor: wildwatermelon,\r\n color: white,\r\n borderRadius: pixelsToUnit(5),\r\n padding: { xy: pixelsToUnit(2) },\r\n fontWeight: 'bold',\r\n height: pixelsToUnit(30),\r\n});\r\n\r\nconst SaveUpsellTextContainer = styled.div({\r\n height: pixelsToUnit(30),\r\n marginBottom: pixelsToUnit(5),\r\n});\r\n\r\nconst ImagePriceWrapper = styled.div({\r\n display: 'flex',\r\n alignItems: 'center',\r\n});\r\n\r\nconst TitlePriceWrapper = styled.div({\r\n marginLeft: pixelsToUnit(15),\r\n whiteSpace: 'nowrap',\r\n textOverflow: 'ellipsis',\r\n overflow: 'hidden',\r\n width: '100%',\r\n});\r\n\r\nconst Arrow = styled.div({\r\n color: white,\r\n fontWeight: 'bold',\r\n width: '9rem',\r\n height: '5rem',\r\n minWidth: '9rem',\r\n backgroundImage: 'linear-gradient(90deg, rgba(255,255,255,0) 0%, rgba(255,75,106,1) 35%, rgba(255,75,106,1) 100%)',\r\n clipPath: 'polygon(0% 20%, 60% 20%, 60% 0%, 100% 50%, 60% 100%, 60% 80%, 0% 80%)',\r\n display: 'none',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n [minTinyMediaQuery]: {\r\n display: 'flex',\r\n },\r\n});\r\n\r\nconst Wrapper = styled.div({\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n minHeight: '8rem',\r\n});\r\n\r\nconst ImageModal = styled(Image, {\r\n height: '4rem',\r\n width: '4rem',\r\n minWidth: '4rem',\r\n [minMicroMediaQuery]: {\r\n height: '6rem',\r\n width: '6rem',\r\n minWidth: '6rem',\r\n },\r\n});\r\n\r\nconst TinySaveText = styled(SaveUpsellText, {\r\n width: '7rem',\r\n fontWeight: 'bold',\r\n textAlign: 'center',\r\n marginBottom: pixelsToUnit(10),\r\n [minTinyMediaQuery]: {\r\n display: 'none',\r\n },\r\n});\r\n","import EsalesProductForList from '../../../Esales/Models/EsalesProductForList.type';\r\nimport { epiPropertyValue } from '@avensia/scope-episerver';\r\n\r\nexport function getProduct(esalesProduct: EsalesProductForList) {\r\n // return only properties that'll be displayed\r\n return {\r\n brand: esalesProduct.brand,\r\n averageRating: esalesProduct.averageRating,\r\n ticket: esalesProduct.ticket,\r\n price: esalesProduct.price,\r\n displayName: epiPropertyValue(esalesProduct.variation.displayName),\r\n variantCode: epiPropertyValue(esalesProduct.variation.code),\r\n imageUrls: esalesProduct.imageUrls || [],\r\n isNew: esalesProduct.isNew,\r\n inStock: esalesProduct.inStock,\r\n hasPromotion: esalesProduct.hasPromotion,\r\n hasDiscount: esalesProduct.hasDiscount,\r\n url: esalesProduct.url,\r\n hasMultipleVariants: esalesProduct.hasMultipleVariants,\r\n };\r\n}\r\n","import * as React from 'react';\r\nimport { styled, StyledProps } from '@glitz/react';\r\nimport { thin, white, black, ZIndex } from 'Shared/Style';\r\n\r\ntype PropType = {\r\n visibleElement: HTMLElement;\r\n} & StyledProps;\r\n\r\nconst Overlay = styled.div({\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n right: 0,\r\n bottom: 0,\r\n backgroundColor: white,\r\n opacity: 0.5,\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n zIndex: ZIndex.Overlay,\r\n});\r\n\r\nconst Element = styled.div({\r\n backgroundColor: white,\r\n border: {\r\n xy: {\r\n style: 'solid',\r\n width: thin,\r\n color: black,\r\n },\r\n },\r\n});\r\n\r\nexport default styled(\r\n class Cover extends React.Component {\r\n elementContainerRef: HTMLDivElement;\r\n componentDidMount() {\r\n if (this.props.visibleElement) {\r\n this.elementContainerRef.appendChild(this.props.visibleElement);\r\n }\r\n }\r\n setCoverRef = (element: HTMLDivElement) => (this.elementContainerRef = element);\r\n render() {\r\n return (\r\n {this.props.visibleElement && }\r\n );\r\n }\r\n },\r\n);\r\n"],"sourceRoot":""}