{"version":3,"sources":["webpack:///./src/utils/readingTime.js","webpack:///./src/utils/product.js","webpack:///./node_modules/react-draggable/build/cjs/utils/domFns.js","webpack:///./src/components/product/ClinicalModal.js","webpack:///./src/components/MagicZoom.js","webpack:///./src/components/product/ProductHeroCarousel.js","webpack:///./src/components/product/StarRating.js","webpack:///./src/components/product/ProductHero.js","webpack:///./src/components/product/IngredientCard.js","webpack:///./src/components/product/IngredientsOverviewSlide.js","webpack:///./src/components/product/IngredientsOverview.js","webpack:///./src/components/product/QAOverview.js","webpack:///./src/components/seo/Product.js","webpack:///./src/components/product/Timeline.js","webpack:///./src/components/product/CarouselArticle.js","webpack:///./src/components/home/FeaturedArticles.js","webpack:///./src/components/product/DownloadGuide.js","webpack:///./src/components/home/PressBar.js","webpack:///./src/components/home/PressCarousel.js","webpack:///./src/components/home/PressModule.js","webpack:///./src/components/reviews/AggregatedStarRating.js","webpack:///./src/components/reviews/HighlightedReview.js","webpack:///./src/components/reviews/MostHelpfulReviews.js","webpack:///./src/templates/productPage.js","webpack:///./node_modules/react-draggable/build/cjs/utils/getPrefix.js","webpack:///./src/utils/contentful.js","webpack:///./node_modules/react-draggable/build/cjs/DraggableCore.js","webpack:///./node_modules/classnames/index.js","webpack:///./src/components/ScrollMagicController.js","webpack:///./src/utils/tracking/product.js","webpack:///./node_modules/react-draggable/build/cjs/cjs.js","webpack:///./node_modules/react-draggable/build/cjs/utils/positionFns.js","webpack:///./node_modules/react-draggable/build/cjs/utils/shims.js","webpack:///./src/utils/markdown.js","webpack:///./src/components/product/AccordionItem.js","webpack:///./src/components/product/Accordion.js","webpack:///./node_modules/react-draggable/build/cjs/Draggable.js","webpack:///./node_modules/react-draggable/build/cjs/utils/log.js","webpack:///./src/components/product/SupplementFacts.js","webpack:///./src/components/product/PillSection.js","webpack:///./src/components/Carousel.js","webpack:///./node_modules/core-js/modules/es.string.small.js"],"names":["calculateReadingTime","primaryContent","reduce","total","node","contentBody","childMarkdownRemark","timeToRead","ProductSKU","EFW60","E50PLUS60","EPRE60","EPOST60","EFM60","EFM50PLUS60","EFTG60","EFTB60","EFKIDS90","getGenderFromSKU","sku","getAgeGroupFromSKU","getIncentiveDemographicFromSKU","_typeof","obj","Symbol","iterator","constructor","prototype","Object","defineProperty","exports","value","matchesSelector","matchesSelectorAndParentsTo","el","selector","baseNode","parentNode","addEvent","event","handler","inputOptions","options","_objectSpread","capture","addEventListener","attachEvent","removeEvent","removeEventListener","detachEvent","outerHeight","height","clientHeight","computedStyle","ownerDocument","defaultView","getComputedStyle","_shims","int","borderTopWidth","borderBottomWidth","outerWidth","width","clientWidth","borderLeftWidth","borderRightWidth","innerHeight","paddingTop","paddingBottom","innerWidth","paddingLeft","paddingRight","offsetXYFromParent","evt","offsetParent","scale","offsetParentRect","body","left","top","getBoundingClientRect","x","clientX","scrollLeft","y","clientY","scrollTop","createCSSTransform","controlPos","positionOffset","translation","getTranslation","_defineProperty","_getPrefix","browserPrefixToKey","default","createSVGTransform","getTouch","e","identifier","targetTouches","findInArray","t","changedTouches","getTouchIdentifier","addUserSelectStyles","doc","styleEl","getElementById","createElement","type","id","innerHTML","getElementsByTagName","appendChild","addClassName","removeUserSelectStyles","removeClassName","selection","empty","window","getSelection","removeAllRanges","__esModule","cache","_getRequireWildcardCache","has","get","newObj","hasPropertyDescriptor","getOwnPropertyDescriptor","key","hasOwnProperty","call","desc","set","_interopRequireWildcard","WeakMap","ownKeys","object","enumerableOnly","keys","getOwnPropertySymbols","symbols","filter","sym","enumerable","push","apply","target","i","arguments","length","source","forEach","getOwnPropertyDescriptors","defineProperties","configurable","writable","matchesSelectorFunc","method","isFunction","_ref2","unitSuffix","concat","defaultX","defaultY","className","classList","add","match","RegExp","remove","replace","contentStyle","css","responsive","sm","md","lg","ModalContentWrapper","styled","div","rem","TitleWrapper","Color","ritualBlue","Font","dutch","ResultContainer","IconWrapper","ResultWrapper","SummaryTitleWrapper","SummaryWrapper","ClinicalModal","state","isOpen","componentDidMount","this","_initTimeout","setTimeout","anchor","document","querySelector","_clickHandler","toggleVisibility","bind","componentWillUnmount","clearTimeout","preventDefault","setState","render","props","title","firstResult","secondResult","summaryTitle","summary","html","MagicModal","onRequestClose","mobileFullPage","data-test-title-wrapper","dangerouslySetInnerHTML","__html","data-test-first-result-wrapper","ArrowRoundedUp","data-test-second-result-wrapper","data-test-summary-title-wrapper","data-test-summary-wrapper","React","Component","ZoomOverlay","p","initialTop","initialLeft","initialWidth","initialHeight","transitionTop","transitionLeft","imageWidth","imageHeight","windowWidth","windowHeight","CarouselWrapper","visible","PanningContainer","TransitionImageWrapper","ImageWrapper","Button","button","white","CloseButton","PaginationButton","LeftButton","RightButton","ZoomComponent","index","entering","postEnter","preExit","exiting","handleEscDown","handleResize","handleClose","scrollableRef","createRef","panningRef","zoomImageResolvers","zoomImagePromises","images","Promise","resolve","a","lockScroll","current","_delay","all","_transitionToPostEnter","keyCode","onClose","centerImage","scrollToIndex","seconds","previousImage","updateIndex","nextImage","Math","max","min","position","smooth","onIndexChange","isSmall","getCurrentImage","getImageHeight","fluid","aspectRatio","getImageWidth","scrollOffset","getInitialScrollOffset","scrollTo","getDraggableSettings","bounds","right","bottom","isTransitioning","renderImage","image","callback","loading","fadeIn","alt","description","imgStyle","objectFit","style","userSelect","userDrag","pointerEvents","touchCallout","onLoad","renderImages","draggableSettings","zoomImages","ref","ScrollableOverflow","disableScroll","map","rect","domNodes","totalCount","onClick","Close","disabled","ArrowRoundedLeft","ArrowRoundedRight","MagicZoom","zoomRoot","createPortal","ImageContainer","ceil","Controls","ControlButton","ProductHeroCarousel","zoom","leftButtonEnabled","rightButtonEnabled","isMobile","imageRefs","findDOMNode","then","handleImageClick","metrics","track","location","toggleLeftButton","enabled","toggleRightButton","trackImageScroll","renderFlavorIcon","plan","icon","variantDescription","toLowerCase","includes","intl","FlavorMint","FlavorCitrusBerry","FlavorCitrus","getPlanForProductSku","r","renderCarousel","overflowOptions","bleedLeft","bleedRight","isAtStart","isAfterStart","isAtEnd","isBeforeEnd","StarRatingWrapper","attrs","productHero","StarCount","ReviewCount","circular","StarRating","trackStarRatingClick","nonInteraction","handleClick","reviewsSectionPosition","$","offset","atMost","tablet","score","readReviews","ReviewStars","toFixed","HeroArea","section","backgroundColor","StyledContainer","Container","StyledRow","Row","ContentArea","media","mobile","Divider","hr","ImageArea","ProductName","h1","ProductDescription","LinkContainer","LinkButton","ButtonWrapper","BarrierBusterWrapper","BarrierBuster","BarrierBusters","unformattedTranslation","EPREBarrierBusters","ProductHero","reviewsLinkActive","showReviews","factsPopup","variation","appendAccessibleFootnoteLink","headerDescription","showSupplementFacts","open","showClinicalModal","productName","buttonPrice","buttonCta","trackCTAClick","heroBackgroundColor","featuredImages","reviewScore","reviewCount","product","clinicalData","checkoutButtonProps","buttonText","appendText","stockStatus","headerDescriptionHtml","barrierBusters","aria-labelledby","NameMap","count","Text","defaultMessage","data-modal","CheckoutButton","text","CheckYellow","SupplementFacts","supplementFacts","Ingredient","IngredientContent","Name","h3","Benefit","Source","span","PlusIconWrapper","rgba","IngredientCard","ingredient","name","manufacturingLocation","benefit","cardImage","PlusIconElement","Icons","zIndex","SlideWrapper","SlideContent","IngredientTitle","h2","IngredientDosage","IngredientDescription","NutritionFactTitle","NutritionFact","LearnMore","MagicLink","IngredientsOverviewSlide","productDosages","modalDesktopImage","modalMobileImage","slug","modalDescription","nutritionFact","plain","dosage","JSON","parse","rawMarkdownBody","find","item","learnMoreLink","to","productSku","Wrapper","role","HeaderColumn","Header","Subhead","IngredientsRow","ArticleLinkColumn","ArticleLinkHeader","SupplementLink","ExpandIngredients","ArticleLink","IngredientsOverview","factsOpen","cardLimits","small","large","expandedView","deviceState","activeSlideIndex","carouselControls","resizeHandler","openCarousel","clickEvent","newDeviceState","handlePopup","toggleView","prevState","newScrollPosition","documentElement","hideCarousel","generateCarouselSlides","ingredients","ingredientsSubheader","somethingMissingTitle","visibleCards","caretType","CaretDown","values","n","slice","Carousel","slides","close","controls","repeat","additionalMargin","QAIntroColumn","QAIntroTitle","QAIntroSubheader","QuestionsColumn","MoreQuestionsArea","MoreQuestions","QAOverview","questions","accordianData","q","header","question","answer","Accordion","items","link","href","ProductSEO","getSchemaStockStatus","pagePath","imgUrlPartial","url","imgWidth","imgHeight","productAttributes","pageUrl","config","siteUrl","imgUrl","console","warn","productMeta","property","content","brand","availability","condition","productId","amount","currency","category","gender","ageGroup","meta","productSchema","mpn","offers","priceCurrency","price","aggregateRating","ratingValue","topReview","review","reviewBody","reviewRating","author","user","display_name","GeneralTags","ogTitle","Helmet","stringify","defaultProps","TimeLineWrapper","TimelineRow","CircleWrapper","TimeLineImage","TimeLineArea","TimelineIntroHeader","TimelineIntroSubhead","Line","TimeLineContent","TimelineItem","LastMarker","ItemMarker","ItemFill","ItemContent","hasMonth","ItemMonth","ItemTitle","Description","Timeline","elements","markers","fills","scene","imageScene","imageWrapper","componentDidUpdate","prevProps","controller","initializeAnimation","timeout","on","off","sceneDuration","sceneElement","destroy","itemScenes","ScrollMagic","Scene","triggerElement","triggerHook","duration","setTween","timelineTween","addTo","itemTween","_initializeImageScene","atLeast","setPin","elementsCount","timeline","gsap","marker","markerFill","opacity","fromTo","borderColor","color","ease","display","imageTween","wrapper","timelineHeading","timelineSubhead","data","desktop","stripWrappingParagraphTag","shortname","Fragment","month","children","ArticleContent","background","Article","ArticleReadtime","ArticleTitle","notDesktop","ArticlePreview","maxLines","CarouselArticle","article","showCount","showPreview","readTime","ariaLabel","fixed","heroImage","transition","heroSecondaryColor","previewText","FeaturedArticlesWrapper","ArticleHeader","ArticlesDescription","Headline","SubHead","CarouselColumn","LinkWrapper","FeaturedArticles","setVisibleSlides","articles","showButtons","disableCarousel","RitualButton","GuideColumn","GuideTitle","GuideButton","DownloadGuide","guideText","doctorGuide","file","Download","PressWrapper","PressContainer","PressRow","PressColumn","PressQuoteWrapper","PressIcon","PressQuote","SVGWrapper","QuoteWrapper","PressBar","quotes","quote","PressSvg","PressLogos","rel","PressCarousel","slide","PressModuleWrapper","PressModule","atLeastTablet","aria-label","Rating","Paragraph","StarWrapper","LearnMoreButton","AggregatedStarRating","modalIsOpen","openModal","closeModal","roundedScore","round","ReviewPolicyModal","ReviewTitle","ReviewComment","helpful","ReviewCommentContent","TitleContainer","ReadMoreButton","HighlightedReview","displayLongContent","handleReadMoreClick","renderComment","sanitizeHtml","allowedTags","shouldTruncate","shouldDisplayReadMoreButton","reviewTitle","ReviewWrapper","MainContainer","VsDiv","MostHelpfulReviews","mostHelpful","mostCritical","TestimonialsWrapper","ValuePropsWrapper","DefaultModuleOrder","KidsModuleOrder","ProductPageTemplate","handlePressQuotesData","nyt","popSugar","forbes","allContentfulProduct","edges","pageTitle","pageDescription","socialImage","reviewRatingsMap","reviewCountsMap","productNameMap","pageContext","planId","productType","moduleOrder","seo","details","toString","product_id","variant","quantity","process","image_url","updatePageData","label","updateLayoutState","navColor","banner","updateFooterUSPNotice","showPressBar","trackProductViewed","trackProductCTAClick","simpleName","heroFeaturedImages","heroZoomImages","pressQuotes","valuePropIcons","valuePropLabels","faq","timelinePhoto","timelineData","experts","pillSectionTitle","pillSectionImage","pillSectionAccordion","allContentfulClinical","heroButtonCta","expertsTitle","expertsSubhead","heroContent","formatCurrency","ingredientsOverviewContent","guide","productRating","initialReviews","allProductReview","showTestimonials","path","newPressQuotes","additionalQAMargin","Product","StickyProductNav","ctaLocation","offsetFromBanner","showTopBar","ValueProps","valueProps","icons","module","ScrollMagicController","PillSection","Testimonials","Experts","arrowsEnabled","Press","Reviews","reviews","productUrl","seeAllReviewsCta","isProductPage","totalReviews","connect","productSelectors","getPrefix","browserPrefixToStyle","prop","prefix","prefixes","undefined","str","out","shouldCapitalize","toUpperCase","kebabToTitleCase","_default","copy","_propTypes","_interopRequireDefault","_reactDom","_domFns","_positionFns","_log","_slicedToArray","arr","Array","isArray","_arrayWithHoles","_arr","_n","_d","_e","_s","_i","next","done","err","_iterableToArrayLimit","o","minLen","_arrayLikeToArray","from","test","_unsupportedIterableToArray","TypeError","_nonIterableRest","len","arr2","_classCallCheck","instance","Constructor","_defineProperties","descriptor","_setPrototypeOf","setPrototypeOf","__proto__","_createSuper","Derived","hasNativeReflectConstruct","Reflect","construct","sham","Proxy","Date","_isNativeReflectConstruct","result","Super","_getPrototypeOf","NewTarget","_possibleConstructorReturn","self","_assertThisInitialized","ReferenceError","getPrototypeOf","eventsFor","start","move","stop","dragEventFor","DraggableCore","_React$Component","subClass","superClass","create","_inherits","protoProps","staticProps","_super","_this","_len","args","_key","dragging","lastX","NaN","lastY","touchIdentifier","onMouseDown","allowAnyClick","thisNode","Error","Node","handle","cancel","getControlPosition","coreEvent","createCoreData","onStart","mounted","enableUserSelectHack","handleDrag","handleDragStop","grid","deltaX","deltaY","_snapToGrid2","snapToGrid","onDrag","MouseEvent","createEvent","initMouseEvent","onStop","handleDragStart","onTouchStart","passive","nodeRef","cloneElement","Children","only","onMouseUp","onTouchEnd","bool","propName","nodeType","arrayOf","number","string","func","dontSetMe","transform","hasOwn","classNames","classes","arg","argType","inner","join","Controller","additionalProperties","productProperties","getPropertiesForProduct","properties","products","addTraitsToContext","addEmail","addFacebookCookies","_require","Draggable","getBoundPosition","draggable","cloneBounds","boundNode","ownerWindow","HTMLElement","nodeStyle","boundNodeStyle","offsetLeft","marginLeft","offsetTop","marginTop","marginRight","marginBottom","isNum","pendingX","pendingY","canDragX","axis","canDragY","draggableCore","touchObj","isStart","createDraggableData","coreData","array","num","isNaN","parseInt","componentName","parseMarkdown","localized","_","g1","g2","localizePath","Marked","parseInline","processHtml","AccordionWrapper","AccordionHeader","HeaderText","AccordionBody","Toggle","AccordionItem","openIndex","handleHeaderClick","headerClick","sanitizedContent","markdownConvertedContent","aria-expanded","aria-controls","noGridAligment","openTab","eventDetails","oldIndex","newIndex","subscribe","reportOpenEvent","reportCloseEvent","_DraggableCore","_classnames","_extends","assign","_objectWithoutProperties","excluded","sourceKeys","indexOf","_objectWithoutPropertiesLoose","sourceSymbolKeys","propertyIsEnumerable","_createClass","dragged","uiData","newState","slackX","slackY","_getBoundPosition2","newStateX","newStateY","Boolean","_this$props$position","defaultPosition","prevPropsPosition","isElementSVG","_ref","SVGElement","_classNames","_this$props","defaultClassName","defaultClassNameDragging","defaultClassNameDragged","draggableCoreProps","svgTransform","validPosition","transformOpts","onDragStart","onDragStop","propTypes","oneOf","oneOfType","shape","OpenAnimation","keyframes","PopupWrapper","CloseWrapper","TableWrapper","renderTable","generateTable","stopPropagation","colSpan","servingSize","servingsPerContainer","labels","dv","generateIngredientRow","nutrients","notations","notation","otherIngredients","notationReferences","attributions","attribution","tableElementWrapper","PillSectionWrapper","PillSectionContainer","PillSectionColumn","PillSectionTitle","PillMobileImage","Img","PillDesktopImageWrapper","PillDesktopImage","ItemWrapper","ItemHeader","ItemHeaderText","ItemBody","Bullet","Overlay","Slide","ControlsContainer","Counter","initialSlideIndex","overlayRef","offsets","previousOffsets","handleGoToNextSlide","indexAtEnd","nextIndex","handleGoToPreviousSlide","indexAtStart","prevIndex","handleClickSlideCard","clickedLast","clickedFirst","forwardFromLast","backFromBeginning","newOffsets","pointer","abs","generateTransformOffsets","onSwipedRight","onSwipedLeft","activeSlide","styles","CarouselSlide","cursor","createHTML","proto","forced","forcedStringHTMLMethod"],"mappings":"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","file":"component---src-templates-product-page-js-5aaba2a6205d914cd233.js","sourcesContent":["export function calculateReadingTime(primaryContent) {\n return primaryContent.reduce((total, node) => {\n return node.contentBody\n ? total + node.contentBody.childMarkdownRemark.timeToRead\n : total;\n }, 0);\n}\n","export const ProductSKU = {\n EFW60: \"EFW60\",\n E50PLUS60: \"E50PLUS60\",\n EPRE60: \"EPRE60\",\n EPOST60: \"EPOST60\",\n EFM60: \"EFM60\",\n EFM50PLUS60: \"EFM50PLUS60\",\n EFTG60: \"EFTG60\",\n EFTB60: \"EFTB60\",\n EFKIDS90: \"EFKIDS90\",\n};\n\nexport const ProductDemographics = {\n EFW60: \"Womens 18+\",\n E50PLUS60: \"Womens 50+\",\n EPRE60: \"Prenatal\",\n EPOST60: \"Postnatal\",\n EFM60: \"Mens 18+\",\n EFM50PLUS60: \"Mens 50+\",\n EFTG60: \"Teen Girls\",\n EFTB60: \"Teen Boys\",\n EFKIDS90: \"Kids 4+\",\n};\n\nexport function getGenderFromSKU(sku) {\n switch (sku) {\n case ProductSKU.EFW60:\n case ProductSKU.E50PLUS60:\n case ProductSKU.EPRE60:\n case ProductSKU.EPOST60:\n case ProductSKU.EFTG60:\n return \"female\";\n case ProductSKU.EFM60:\n case ProductSKU.EFM50PLUS60:\n case ProductSKU.EFTB60:\n return \"male\";\n case ProductSKU.EFKIDS90:\n default:\n return \"unisex\";\n }\n}\n\nexport function getAgeGroupFromSKU(sku) {\n switch (sku) {\n case ProductSKU.EFKIDS90:\n return \"kids\";\n case ProductSKU.EFTG60:\n case ProductSKU.EFTB60:\n return \"teen\";\n case ProductSKU.EFW60:\n case ProductSKU.EFM60:\n case ProductSKU.E50PLUS60:\n case ProductSKU.EFM50PLUS60:\n case ProductSKU.EPRE60:\n case ProductSKU.EPOST60:\n return \"adult\";\n default:\n return \"\";\n }\n}\n\nexport function getIncentiveDemographicFromSKU(sku) {\n switch (sku) {\n case ProductSKU.EFKIDS90:\n return \"Kids 4+\";\n case ProductSKU.EFTG60:\n return \"Hers\";\n case ProductSKU.EFTB60:\n return \"His\";\n case ProductSKU.EFW60:\n case ProductSKU.EFM60:\n return \"Ages 18+\";\n case ProductSKU.E50PLUS60:\n case ProductSKU.EFM50PLUS60:\n return \"Ages 50+\";\n case ProductSKU.EPRE60:\n return \"Prenatal\";\n case ProductSKU.EPOST60:\n return \"Postnatal\";\n default:\n return \"\";\n }\n}\n\nexport function getEssentialHeadline({ subCategory, genders, ageRanges }) {\n if (subCategory === \"Protein\") {\n return \"essential.protein\";\n }\n if (ageRanges.includes(\"4-12\")) {\n return \"essential.kids\";\n }\n if (ageRanges.includes(\"13-17\")) {\n return \"essential.teens\";\n }\n if (genders.includes(\"Men\")) {\n return \"essential.men\";\n }\n return \"essential.women\";\n}\n","\"use strict\";\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.matchesSelector = matchesSelector;\nexports.matchesSelectorAndParentsTo = matchesSelectorAndParentsTo;\nexports.addEvent = addEvent;\nexports.removeEvent = removeEvent;\nexports.outerHeight = outerHeight;\nexports.outerWidth = outerWidth;\nexports.innerHeight = innerHeight;\nexports.innerWidth = innerWidth;\nexports.offsetXYFromParent = offsetXYFromParent;\nexports.createCSSTransform = createCSSTransform;\nexports.createSVGTransform = createSVGTransform;\nexports.getTranslation = getTranslation;\nexports.getTouch = getTouch;\nexports.getTouchIdentifier = getTouchIdentifier;\nexports.addUserSelectStyles = addUserSelectStyles;\nexports.removeUserSelectStyles = removeUserSelectStyles;\nexports.addClassName = addClassName;\nexports.removeClassName = removeClassName;\n\nvar _shims = require(\"./shims\");\n\nvar _getPrefix = _interopRequireWildcard(require(\"./getPrefix\"));\n\nfunction _getRequireWildcardCache() {\n if (typeof WeakMap !== \"function\") return null;\n var cache = new WeakMap();\n\n _getRequireWildcardCache = function _getRequireWildcardCache() {\n return cache;\n };\n\n return cache;\n}\n\nfunction _interopRequireWildcard(obj) {\n if (obj && obj.__esModule) {\n return obj;\n }\n\n if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") {\n return {\n default: obj\n };\n }\n\n var cache = _getRequireWildcardCache();\n\n if (cache && cache.has(obj)) {\n return cache.get(obj);\n }\n\n var newObj = {};\n var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;\n\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;\n\n if (desc && (desc.get || desc.set)) {\n Object.defineProperty(newObj, key, desc);\n } else {\n newObj[key] = obj[key];\n }\n }\n }\n\n newObj.default = obj;\n\n if (cache) {\n cache.set(obj, newObj);\n }\n\n return newObj;\n}\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nvar matchesSelectorFunc = '';\n\nfunction matchesSelector(el\n/*: Node*/\n, selector\n/*: string*/\n)\n/*: boolean*/\n{\n if (!matchesSelectorFunc) {\n matchesSelectorFunc = (0, _shims.findInArray)(['matches', 'webkitMatchesSelector', 'mozMatchesSelector', 'msMatchesSelector', 'oMatchesSelector'], function (method) {\n // $FlowIgnore: Doesn't think elements are indexable\n return (0, _shims.isFunction)(el[method]);\n });\n } // Might not be found entirely (not an Element?) - in that case, bail\n // $FlowIgnore: Doesn't think elements are indexable\n\n\n if (!(0, _shims.isFunction)(el[matchesSelectorFunc])) return false; // $FlowIgnore: Doesn't think elements are indexable\n\n return el[matchesSelectorFunc](selector);\n} // Works up the tree to the draggable itself attempting to match selector.\n\n\nfunction matchesSelectorAndParentsTo(el\n/*: Node*/\n, selector\n/*: string*/\n, baseNode\n/*: Node*/\n)\n/*: boolean*/\n{\n var node = el;\n\n do {\n if (matchesSelector(node, selector)) return true;\n if (node === baseNode) return false;\n node = node.parentNode;\n } while (node);\n\n return false;\n}\n\nfunction addEvent(el\n/*: ?Node*/\n, event\n/*: string*/\n, handler\n/*: Function*/\n, inputOptions\n/*: Object*/\n)\n/*: void*/\n{\n if (!el) return;\n\n var options = _objectSpread({\n capture: true\n }, inputOptions);\n\n if (el.addEventListener) {\n el.addEventListener(event, handler, options);\n } else if (el.attachEvent) {\n el.attachEvent('on' + event, handler);\n } else {\n // $FlowIgnore: Doesn't think elements are indexable\n el['on' + event] = handler;\n }\n}\n\nfunction removeEvent(el\n/*: ?Node*/\n, event\n/*: string*/\n, handler\n/*: Function*/\n, inputOptions\n/*: Object*/\n)\n/*: void*/\n{\n if (!el) return;\n\n var options = _objectSpread({\n capture: true\n }, inputOptions);\n\n if (el.removeEventListener) {\n el.removeEventListener(event, handler, options);\n } else if (el.detachEvent) {\n el.detachEvent('on' + event, handler);\n } else {\n // $FlowIgnore: Doesn't think elements are indexable\n el['on' + event] = null;\n }\n}\n\nfunction outerHeight(node\n/*: HTMLElement*/\n)\n/*: number*/\n{\n // This is deliberately excluding margin for our calculations, since we are using\n // offsetTop which is including margin. See getBoundPosition\n var height = node.clientHeight;\n var computedStyle = node.ownerDocument.defaultView.getComputedStyle(node);\n height += (0, _shims.int)(computedStyle.borderTopWidth);\n height += (0, _shims.int)(computedStyle.borderBottomWidth);\n return height;\n}\n\nfunction outerWidth(node\n/*: HTMLElement*/\n)\n/*: number*/\n{\n // This is deliberately excluding margin for our calculations, since we are using\n // offsetLeft which is including margin. See getBoundPosition\n var width = node.clientWidth;\n var computedStyle = node.ownerDocument.defaultView.getComputedStyle(node);\n width += (0, _shims.int)(computedStyle.borderLeftWidth);\n width += (0, _shims.int)(computedStyle.borderRightWidth);\n return width;\n}\n\nfunction innerHeight(node\n/*: HTMLElement*/\n)\n/*: number*/\n{\n var height = node.clientHeight;\n var computedStyle = node.ownerDocument.defaultView.getComputedStyle(node);\n height -= (0, _shims.int)(computedStyle.paddingTop);\n height -= (0, _shims.int)(computedStyle.paddingBottom);\n return height;\n}\n\nfunction innerWidth(node\n/*: HTMLElement*/\n)\n/*: number*/\n{\n var width = node.clientWidth;\n var computedStyle = node.ownerDocument.defaultView.getComputedStyle(node);\n width -= (0, _shims.int)(computedStyle.paddingLeft);\n width -= (0, _shims.int)(computedStyle.paddingRight);\n return width;\n} // Get from offsetParent\n\n\nfunction offsetXYFromParent(evt\n/*: {clientX: number, clientY: number}*/\n, offsetParent\n/*: HTMLElement*/\n, scale\n/*: number*/\n)\n/*: ControlPosition*/\n{\n var isBody = offsetParent === offsetParent.ownerDocument.body;\n var offsetParentRect = isBody ? {\n left: 0,\n top: 0\n } : offsetParent.getBoundingClientRect();\n var x = (evt.clientX + offsetParent.scrollLeft - offsetParentRect.left) / scale;\n var y = (evt.clientY + offsetParent.scrollTop - offsetParentRect.top) / scale;\n return {\n x: x,\n y: y\n };\n}\n\nfunction createCSSTransform(controlPos\n/*: ControlPosition*/\n, positionOffset\n/*: PositionOffsetControlPosition*/\n)\n/*: Object*/\n{\n var translation = getTranslation(controlPos, positionOffset, 'px');\n return _defineProperty({}, (0, _getPrefix.browserPrefixToKey)('transform', _getPrefix.default), translation);\n}\n\nfunction createSVGTransform(controlPos\n/*: ControlPosition*/\n, positionOffset\n/*: PositionOffsetControlPosition*/\n)\n/*: string*/\n{\n var translation = getTranslation(controlPos, positionOffset, '');\n return translation;\n}\n\nfunction getTranslation(_ref2, positionOffset\n/*: PositionOffsetControlPosition*/\n, unitSuffix\n/*: string*/\n)\n/*: string*/\n{\n var x = _ref2.x,\n y = _ref2.y;\n var translation = \"translate(\".concat(x).concat(unitSuffix, \",\").concat(y).concat(unitSuffix, \")\");\n\n if (positionOffset) {\n var defaultX = \"\".concat(typeof positionOffset.x === 'string' ? positionOffset.x : positionOffset.x + unitSuffix);\n var defaultY = \"\".concat(typeof positionOffset.y === 'string' ? positionOffset.y : positionOffset.y + unitSuffix);\n translation = \"translate(\".concat(defaultX, \", \").concat(defaultY, \")\") + translation;\n }\n\n return translation;\n}\n\nfunction getTouch(e\n/*: MouseTouchEvent*/\n, identifier\n/*: number*/\n)\n/*: ?{clientX: number, clientY: number}*/\n{\n return e.targetTouches && (0, _shims.findInArray)(e.targetTouches, function (t) {\n return identifier === t.identifier;\n }) || e.changedTouches && (0, _shims.findInArray)(e.changedTouches, function (t) {\n return identifier === t.identifier;\n });\n}\n\nfunction getTouchIdentifier(e\n/*: MouseTouchEvent*/\n)\n/*: ?number*/\n{\n if (e.targetTouches && e.targetTouches[0]) return e.targetTouches[0].identifier;\n if (e.changedTouches && e.changedTouches[0]) return e.changedTouches[0].identifier;\n} // User-select Hacks:\n//\n// Useful for preventing blue highlights all over everything when dragging.\n// Note we're passing `document` b/c we could be iframed\n\n\nfunction addUserSelectStyles(doc\n/*: ?Document*/\n) {\n if (!doc) return;\n var styleEl = doc.getElementById('react-draggable-style-el');\n\n if (!styleEl) {\n styleEl = doc.createElement('style');\n styleEl.type = 'text/css';\n styleEl.id = 'react-draggable-style-el';\n styleEl.innerHTML = '.react-draggable-transparent-selection *::-moz-selection {all: inherit;}\\n';\n styleEl.innerHTML += '.react-draggable-transparent-selection *::selection {all: inherit;}\\n';\n doc.getElementsByTagName('head')[0].appendChild(styleEl);\n }\n\n if (doc.body) addClassName(doc.body, 'react-draggable-transparent-selection');\n}\n\nfunction removeUserSelectStyles(doc\n/*: ?Document*/\n) {\n if (!doc) return;\n\n try {\n if (doc.body) removeClassName(doc.body, 'react-draggable-transparent-selection'); // $FlowIgnore: IE\n\n if (doc.selection) {\n // $FlowIgnore: IE\n doc.selection.empty();\n } else {\n // Remove selection caused by scroll, unless it's a focused input\n // (we use doc.defaultView in case we're in an iframe)\n var selection = (doc.defaultView || window).getSelection();\n\n if (selection && selection.type !== 'Caret') {\n selection.removeAllRanges();\n }\n }\n } catch (e) {// probably IE\n }\n}\n\nfunction addClassName(el\n/*: HTMLElement*/\n, className\n/*: string*/\n) {\n if (el.classList) {\n el.classList.add(className);\n } else {\n if (!el.className.match(new RegExp(\"(?:^|\\\\s)\".concat(className, \"(?!\\\\S)\")))) {\n el.className += \" \".concat(className);\n }\n }\n}\n\nfunction removeClassName(el\n/*: HTMLElement*/\n, className\n/*: string*/\n) {\n if (el.classList) {\n el.classList.remove(className);\n } else {\n el.className = el.className.replace(new RegExp(\"(?:^|\\\\s)\".concat(className, \"(?!\\\\S)\"), 'g'), '');\n }\n}","import React from \"react\";\nimport styled, { css } from \"styled-components\";\n\n// Components\nimport MagicModal from \"../MagicModal\";\n\n// Utils\nimport { rem, Color, responsive, Font } from \"../../utils/style\";\nimport { Icons } from \"../../utils/svg\";\n\nconst contentStyle = css`\n padding: 48px 24px 40px;\n\n ${responsive.sm`\n padding: 40px;\n max-width: 460px;\n max-height: 614px;\n `};\n\n ${responsive.md`\n padding: 56px 80px;\n max-width: 774px;\n `};\n\n ${responsive.lg`\n padding: 56px 100px;\n max-width: 770px;\n `};\n`;\n\nconst ModalContentWrapper = styled.div`\n p {\n font-size: ${rem(16)};\n line-height: 22px;\n letter-spacing: 0;\n margin-bottom: 0;\n\n ${responsive.lg`\n font-size: ${rem(18)};\n line-height: 28px;\n `};\n }\n`;\n\nconst TitleWrapper = styled.div`\n border-bottom: 2px solid ${Color.ritualBlue};\n font-size: ${rem(22)};\n line-height: 32px;\n letter-spacing: -0.2px;\n\n p {\n margin-bottom: 24px;\n\n ${responsive.lg`\n font-size: ${rem(30)};\n letter-spacing: -0.4px;\n line-height: 36px;\n margin-bottom: 32px;\n `};\n }\n\n .italic {\n ${Font.dutch};\n font-style: italic;\n }\n`;\n\nconst ResultContainer = styled.div`\n margin-top: 24px;\n\n ${responsive.lg`\n margin-top: 32px;\n `};\n`;\n\nconst IconWrapper = styled.div`\n margin-right: 8px;\n`;\n\nconst ResultWrapper = styled.div`\n display: flex;\n align-items: flex-start;\n margin-bottom: 24px;\n\n .light {\n color: rgba(20, 43, 111, 0.56);\n font-weight: 300;\n }\n\n &:last-of-type {\n margin-bottom: 40px;\n }\n\n ${responsive.sm`\n width: 272px;\n `};\n\n ${responsive.md`\n width: auto;\n `};\n\n ${responsive.lg`\n margin-bottom: 32px;\n\n &:last-of-type {\n margin-bottom: 56px;\n }\n `};\n`;\n\nconst SummaryTitleWrapper = styled.div`\n margin-bottom: 8px;\n p {\n line-height: 26px;\n\n ${responsive.lg`\n line-height: 28px;\n `};\n }\n`;\n\nconst SummaryWrapper = styled.div`\n ${Font.dutch};\n p {\n line-height: 26px;\n\n ${responsive.lg`\n line-height: 28px;\n `};\n }\n`;\n\nexport default class ClinicalModal extends React.Component {\n constructor() {\n super();\n this.state = {\n isOpen: false,\n };\n }\n\n componentDidMount() {\n this._initTimeout = setTimeout(() => {\n const anchorSelector = 'button[data-modal=\"clinical-modal\"]';\n const anchor = document.querySelector(anchorSelector);\n\n if (!anchor) return;\n\n this._clickHandler = this.toggleVisibility.bind(this);\n anchor.addEventListener(\"click\", this._clickHandler);\n }, 500);\n }\n\n componentWillUnmount() {\n if (this._initTimeout) clearTimeout(this._initTimeout);\n if (!this._clickHandler) return;\n\n const anchorSelector = 'button[data-modal=\"clinical-modal\"]';\n const anchor = document.querySelector(anchorSelector);\n\n anchor.removeEventListener(\"click\", this._clickHandler);\n }\n\n toggleVisibility(event) {\n if (event) event.preventDefault();\n const isOpen = !this.state.isOpen;\n this.setState({ isOpen });\n }\n\n render() {\n let {\n title,\n firstResult,\n secondResult,\n summaryTitle,\n summary,\n } = this.props;\n\n if (!title || !firstResult || !secondResult || !summaryTitle || !summary) {\n return null;\n }\n\n title = title.childMarkdownRemark.html;\n firstResult = firstResult.childMarkdownRemark.html;\n secondResult = secondResult.childMarkdownRemark.html;\n summaryTitle = summaryTitle.childMarkdownRemark.html;\n summary = summary.childMarkdownRemark.html;\n\n const { isOpen } = this.state;\n\n return (\n \n \n \n \n\n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n );\n }\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { createPortal } from \"react-dom\";\nimport Img from \"gatsby-image\";\nimport Draggable from \"react-draggable\";\n\n// Components\nimport ScrollableOverflow from \"./ScrollableOverflow\";\n\n// Utils\nimport { Color, responsive } from \"../utils/style\";\nimport { lockScroll } from \"../utils/lockScroll\";\nimport { Icons } from \"../utils/svg\";\n\nconst Transition = 0.5;\n\nconst ZoomOverlay = styled.div`\n position: fixed;\n\n top: ${p => p.initialTop}px;\n left: ${p => p.initialLeft}px;\n width: ${p => p.initialWidth}px;\n height: ${p => p.initialHeight}px;\n\n background-color: rgba(0, 0, 0, 0.56);\n z-index: 9999;\n\n &.entering {\n transition: top ${Transition}s, left ${Transition}s, width ${Transition}s,\n height ${Transition}s;\n top: ${p => p.transitionTop}px;\n left: ${p => p.transitionLeft}px;\n width: ${p => p.imageWidth}px;\n height: ${p => p.imageHeight}px;\n }\n\n &.post-enter {\n transition: none;\n top: 0;\n left: 0;\n width: ${p => p.windowWidth}px;\n height: ${p => p.windowHeight}px;\n }\n\n &.pre-exit {\n top: ${p => p.transitionTop}px;\n left: ${p => p.transitionLeft}px;\n width: ${p => p.imageWidth}px;\n height: ${p => p.imageHeight}px;\n }\n\n &.exiting {\n transition: top ${Transition}s, left ${Transition}s, width ${Transition}s,\n height ${Transition}s;\n top: ${p => p.initialTop}px;\n left: ${p => p.initialLeft}px;\n width: ${p => p.initialWidth}px;\n height: ${p => p.initialHeight}px;\n }\n`;\n\nconst CarouselWrapper = styled.div`\n visibility: ${p => (p.visible ? \"visible\" : \"hidden\")};\n width: 100%;\n height: ${p => (p.visible ? \"100%\" : 0)};\n\n overflow-y: scroll;\n overflow-x: hidden;\n`;\n\nconst PanningContainer = styled.div`\n width: ${p => p.width}px;\n height: ${p => p.height}px;\n`;\n\nconst TransitionImageWrapper = styled.div`\n width: 100%;\n height: 100%;\n transition: width ${Transition}s, height ${Transition}s;\n`;\n\nconst ImageWrapper = styled.div`\n width: ${p => p.width}px;\n height: ${p => p.height}px;\n`;\n\nconst Button = styled.button`\n appearance: none;\n background: none;\n border: none;\n padding: 0;\n\n border-radius: 50%;\n background-color: ${Color.white};\n width: 48px;\n height: 48px;\n\n display: flex;\n justify-content: center;\n align-items: center;\n\n &:disabled {\n svg {\n opacity 0.56;\n }\n }\n\n [data-whatintent=\"mouse\"] &:focus,\n [data-whatintent=\"touch\"] &:focus {\n outline: none;\n }\n`;\n\nconst CloseButton = styled(Button)`\n position: absolute;\n top: 20px;\n right: 20px;\n\n svg {\n width: 16px;\n height: 16px;\n }\n\n ${responsive.sm`\n top: 24px;\n right: 24px;\n `}\n\n ${responsive.md`\n top: 40px;\n right: 40px;\n `}\n`;\n\nconst PaginationButton = styled(Button)`\n width: 56px;\n height: 56px;\n\n svg {\n width: 26px;\n height: 16px;\n\n g {\n stroke-width: 1.75;\n }\n }\n\n &:hover {\n svg {\n opacity: 0.56;\n }\n }\n`;\n\nconst LeftButton = styled(PaginationButton)`\n position: absolute;\n bottom: 24px;\n left: calc(50% - 72px);\n\n ${responsive.sm`\n bottom: calc(50% - 56px);\n left: 24px;\n `}\n\n ${responsive.md`\n left: 40px;\n `}\n`;\n\nconst RightButton = styled(PaginationButton)`\n position: absolute;\n bottom: 24px;\n right: calc(50% - 72px);\n\n ${responsive.sm`\n bottom: calc(50% - 56px);\n right: 24px;\n `}\n\n ${responsive.md`\n right: 40px;\n `}\n`;\n\nexport class ZoomComponent extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n windowHeight: 0,\n windowWidth: 0,\n index: props.index || 0,\n entering: false,\n postEnter: false,\n preExit: false,\n exiting: false,\n };\n\n this.handleEscDown = this.handleEscDown.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleClose = this.handleClose.bind(this);\n\n this.scrollableRef = React.createRef();\n this.panningRef = React.createRef();\n\n this.zoomImageResolvers = [];\n this.zoomImagePromises = [];\n\n props.images.forEach(() => {\n this.zoomImagePromises.push(\n new Promise(resolve => {\n this.zoomImageResolvers.push(resolve);\n }),\n );\n });\n }\n\n async componentDidMount() {\n lockScroll(true, this.panningRef.current);\n\n window.addEventListener(\"keydown\", this.handleEscDown);\n window.addEventListener(\"resize\", this.handleResize);\n\n await this.handleResize();\n\n this.setState({\n entering: true,\n });\n\n await this._delay(Transition);\n await Promise.all(this.zoomImagePromises);\n\n this._transitionToPostEnter();\n }\n\n componentWillUnmount() {\n lockScroll(false, this.panningRef.current);\n window.removeEventListener(\"keydown\", this.handleEscDown);\n window.removeEventListener(\"resize\", this.handleResize);\n }\n\n handleEscDown(e) {\n if (e.keyCode === 27) {\n this.handleClose();\n }\n }\n\n handleResize() {\n const windowHeight = window.innerHeight;\n const windowWidth = window.innerWidth;\n\n return new Promise(resolve => {\n this.setState(\n {\n windowHeight,\n windowWidth,\n },\n resolve,\n );\n });\n }\n\n async handleClose() {\n this.setState(\n {\n preExit: true,\n },\n () => {\n this.setState({\n exiting: true,\n });\n },\n );\n\n await this._delay(Transition);\n this.props.onClose();\n }\n\n _transitionToPostEnter() {\n this.setState(\n {\n postEnter: true,\n },\n () => {\n this.centerImage();\n this.scrollToIndex(this.state.index, \"center\", false);\n },\n );\n }\n\n _delay(seconds) {\n return new Promise(resolve => {\n setTimeout(resolve, seconds * 1000);\n });\n }\n\n previousImage() {\n this.updateIndex(this.state.index - 1);\n }\n\n nextImage() {\n this.updateIndex(this.state.index + 1);\n }\n\n updateIndex(index) {\n index = Math.max(0, index);\n index = Math.min(index, this.props.images.length - 1);\n\n if (index === this.state.index) return;\n\n this.scrollToIndex(index);\n }\n\n scrollToIndex(index, position = \"left\", smooth = true) {\n if (this.props.onIndexChange) {\n this.props.onIndexChange(index);\n }\n\n this.setState({\n index,\n });\n this.scrollableRef.current.scrollToIndex(index, position, smooth);\n }\n\n isSmall() {\n return this.state.windowWidth < 960;\n }\n\n getCurrentImage() {\n return this.props.images[this.state.index];\n }\n\n getImageHeight() {\n if (this.isSmall()) {\n return this.state.windowHeight;\n }\n return this.state.windowWidth / this.getCurrentImage().fluid.aspectRatio;\n }\n\n getImageWidth() {\n if (this.isSmall()) {\n return this.state.windowHeight * this.getCurrentImage().fluid.aspectRatio;\n }\n return this.state.windowWidth;\n }\n\n centerImage() {\n const scrollOffset = this.getInitialScrollOffset();\n\n // This should only be false for testing.\n if (!this.panningRef.current.scrollTo) return;\n\n this.panningRef.current.scrollTo({\n top: scrollOffset.top,\n });\n }\n\n getInitialScrollOffset() {\n if (this.isSmall()) {\n return {\n top: 0,\n left: Math.max((this.getImageWidth() - this.state.windowWidth) / 2, 0),\n };\n }\n\n return {\n top: Math.max((this.getImageHeight() - this.state.windowHeight) / 2, 0),\n left: 0,\n };\n }\n\n getDraggableSettings() {\n const scrollOffset = this.getInitialScrollOffset();\n const isSmall = this.isSmall();\n\n const bounds = {\n left: isSmall ? scrollOffset.left * -1 : 0,\n right: isSmall ? scrollOffset.left : 0,\n top: 0,\n bottom: 0,\n };\n\n const positionOffset = {\n x: isSmall ? scrollOffset.left * -1 : 0,\n y: 0,\n };\n\n return {\n bounds,\n positionOffset,\n };\n }\n\n isTransitioning() {\n const { postEnter, preExit } = this.state;\n return !postEnter || preExit;\n }\n\n renderImage(image, callback) {\n return (\n \n );\n }\n\n renderImages() {\n const image = this.getCurrentImage();\n const isTransitioning = this.isTransitioning();\n const draggableSettings = this.getDraggableSettings();\n\n // If no higher quality zoom images are specified, simply use the images.\n const zoomImages = this.props.zoomImages || this.props.images;\n\n return (\n <>\n {/** Zoom Carousel */}\n \n \n \n \n {zoomImages.map((image, index) => {\n return (\n \n {this.renderImage(image, () => {\n this.zoomImageResolvers[index]();\n })}\n \n );\n })}\n \n \n \n \n\n {/** Transition Image */}\n {isTransitioning && (\n \n {this.renderImage(image)}\n \n )}\n \n );\n }\n\n render() {\n const { index } = this.state;\n const rect = this.props.domNodes[index].getBoundingClientRect();\n const scrollOffset = this.getInitialScrollOffset();\n const isTransitioning = this.isTransitioning();\n const totalCount = this.props.images.length;\n\n return (\n \n {this.renderImages()}\n\n {!isTransitioning && (\n <>\n \n \n \n {totalCount > 1 && (\n <>\n \n \n \n \n \n \n \n )}\n \n )}\n \n );\n }\n}\n\nexport default class MagicZoom extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n zoomRoot: null,\n };\n }\n\n componentDidMount() {\n const zoomRoot = document.getElementById(\"zoom-root\");\n\n if (zoomRoot) {\n this.setState({ zoomRoot });\n }\n }\n\n render() {\n const { zoomRoot } = this.state;\n if (zoomRoot) {\n return createPortal(, zoomRoot);\n }\n return <>;\n }\n}\n","import React from \"react\";\nimport { findDOMNode } from \"react-dom\";\nimport styled from \"styled-components\";\nimport Img from \"gatsby-image\";\n\nimport ScrollableOverflow from \"../ScrollableOverflow\";\nimport MagicZoom from \"../MagicZoom\";\n\n// Services\nimport intl from \"../../services/intl\";\n\n// Utils\nimport { Icons } from \"../../utils/svg\";\nimport { Color, responsive } from \"../../utils/style\";\nimport { getPlanForProductSku } from \"../../utils/planToProduct\";\nimport metrics from \"../../utils/metrics\";\n\nconst ImageContainer = styled.button`\n position: relative;\n scroll-snap-align: start;\n\n appearance: none;\n border: none;\n background: none;\n padding: 0;\n\n [data-whatintent=\"mouse\"] &:focus,\n [data-whatintent=\"touch\"] &:focus {\n outline: none;\n }\n\n width: ${p => {\n // We manually calculate and round width here, instead of using something\n // likw 70vw. If the width has a trailing decimal (e.g. 260.5), the it\n // seems to make the entire image carousel draggable on mobile iOS devices.\n return Math.ceil(p.windowWidth * 0.7);\n }}px;\n\n margin-right: 9px;\n\n &:last-of-type {\n margin-right: 0;\n }\n\n ${responsive.sm`\n width: 300px;\n margin-right: 20px;\n `}\n\n ${responsive.md`\n width: 400px;\n margin-right: 26px;\n `}\n\n ${responsive.lg`\n width: 500px;\n margin-right: 30px;\n `}\n`;\n\nconst IconWrapper = styled.div`\n position: absolute;\n top: 12px;\n left: 12px;\n\n ${responsive.md`\n top: 28px;\n left: 24px;\n `}\n\n svg {\n width: 56px;\n height: 56px;\n\n ${responsive.md`\n width: 92px;\n height: 92px;\n `}\n }\n`;\n\nconst Controls = styled.div`\n display: flex;\n position: absolute;\n bottom 0;\n left: 250px;\n\n ${responsive.md`\n left: 344px;\n `}\n\n ${responsive.lg`\n left: 446px;\n `}\n`;\n\nconst ControlButton = styled.button`\n appearance: none;\n background: none;\n border: none;\n\n width: 60px;\n height: 52px;\n padding: 0;\n background-color: ${Color.white};\n\n display: flex;\n justify-content: center;\n align-items: center;\n\n ${responsive.md`\n width: 69px;\n height: 56px;\n `}\n\n svg {\n width: 26px;\n height: 16px;\n\n g {\n stroke-width: 1.75;\n }\n }\n\n &:hover {\n svg {\n opacity: 0.56;\n }\n }\n\n &:disabled {\n svg {\n opacity 0.24;\n }\n }\n\n [data-whatintent=\"mouse\"] &:focus,\n [data-whatintent=\"touch\"] &:focus {\n outline: none;\n }\n`;\n\nexport default class ProductHeroCarousel extends React.Component {\n constructor() {\n super();\n\n this.state = {\n zoom: false,\n index: 0,\n leftButtonEnabled: false,\n rightButtonEnabled: true,\n windowWidth: 0,\n isMobile: false,\n };\n\n this.scrollableRef = React.createRef();\n this.imageRefs = [];\n\n this.handleResize = this.handleResize.bind(this);\n }\n\n componentDidMount() {\n window.addEventListener(\"resize\", this.handleResize);\n\n this.domNodes = this.imageRefs.map(ref => {\n return findDOMNode(ref);\n });\n\n // Once the image size has been defined, scroll to the first image.\n this.handleResize().then(() => {\n this.scrollableRef.current.scrollToIndex(0, \"left\", false);\n });\n }\n\n componentWillUnmount() {\n window.removeEventListener(\"resize\", this.handleResize);\n }\n\n handleImageClick(index) {\n metrics.track(\"Image Zoom\", {\n location: \"PDP Carousel\",\n });\n\n this.setState({\n zoom: true,\n index,\n });\n }\n\n onClose() {\n this.setState({\n zoom: false,\n });\n }\n\n handleResize() {\n return new Promise(resolve => {\n this.setState(\n {\n windowWidth: window.innerWidth,\n isMobile: window.innerWidth < 750,\n },\n resolve,\n );\n });\n }\n\n toggleLeftButton(enabled) {\n this.setState({\n leftButtonEnabled: enabled,\n });\n }\n\n toggleRightButton(enabled) {\n this.setState({\n rightButtonEnabled: enabled,\n });\n }\n\n previousImage() {\n this.trackImageScroll();\n this.updateIndex(this.state.index - 1);\n }\n\n nextImage() {\n this.trackImageScroll();\n this.updateIndex(this.state.index + 1);\n }\n\n trackImageScroll() {\n metrics.track(\"Image Scroll\", {\n location: \"Desktop PDP Carousel\",\n });\n }\n\n updateIndex(index) {\n index = Math.max(0, index);\n index = Math.min(index, this.props.images.length - 1);\n\n if (index === this.state.index) return;\n\n this.scrollToIndex(index);\n }\n\n scrollToIndex(index) {\n this.setState({\n index,\n });\n this.scrollableRef.current.scrollToIndex(index, \"left\");\n }\n\n renderFlavorIcon(plan) {\n const description = plan.variantDescription.toLowerCase();\n let icon;\n if (description.includes(intl.t(\"product.icon.mint\", \"mint\"))) {\n icon = ;\n } else if (description.includes(intl.t(\"product.icon.berry\", \"berry\"))) {\n icon = ;\n } else if (description.includes(intl.t(\"product.icon.citrus\", \"citrus\"))) {\n icon = ;\n }\n\n if (!icon) {\n return null;\n }\n\n return {icon};\n }\n\n renderImages() {\n const { sku, images } = this.props;\n const { windowWidth } = this.state;\n\n const plan = getPlanForProductSku(sku);\n\n return images.map((image, i) => {\n return (\n \n (this.imageRefs[i] = r)}\n fluid={image.fluid}\n loading=\"eager\"\n fadeIn={false}\n alt={image.description}\n style={{\n userSelect: \"none\",\n userDrag: \"none\",\n pointerEvents: \"none\",\n touchCallout: \"none\",\n width: \"100%\",\n height: \"100%\",\n }}\n />\n {i === 0 && this.renderFlavorIcon(plan)}\n \n );\n });\n }\n\n renderCarousel() {\n const { isMobile, rightButtonEnabled, leftButtonEnabled } = this.state;\n\n const overflowOptions = {\n bleedLeft: false,\n bleedRight: true,\n disableScroll: true,\n };\n\n if (isMobile) {\n overflowOptions.bleedLeft = true;\n overflowOptions.disableScroll = false;\n }\n\n return (\n <>\n \n {this.renderImages()}\n \n\n {!isMobile && (\n \n \n \n \n \n \n \n \n )}\n \n );\n }\n\n render() {\n return (\n <>\n {this.renderCarousel()}\n {this.state.zoom && (\n \n )}\n \n );\n }\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport $ from \"jquery\";\nimport ReviewStars from \"../reviews/ReviewStars\";\n\n// Services\nimport intl from \"../../services/intl\";\n\n// Utils\nimport { Font, rem, atMost } from \"../../utils/style\";\nimport metrics from \"../../utils/metrics\";\n\nconst StarRatingWrapper = styled.div.attrs(p => ({\n id: `${p.id}`,\n className: \"d-inline-flex align-items-center\",\n}))`\n margin-top: 8px;\n transition: opacity 0.2s ease-in-out;\n cursor: pointer;\n\n .ReviewStars--star {\n transition: opacity 200ms ease-in-out;\n }\n\n &:hover {\n p,\n .ReviewStars--star {\n opacity: ${p => (p.productHero ? 0.56 : 1)};\n }\n }\n`;\n\nconst StarCount = styled.div.attrs(p => ({\n id: `${p.id}_star-count`,\n className: \"d-flex\",\n}))`\n .ReviewStars--star {\n width: 15px;\n height: 14px;\n margin-right: 0;\n }\n`;\n\nconst ReviewCount = styled.p.attrs(p => ({\n id: `${p.id}_review-count`,\n className: \"d-flex m-0 ml-2\",\n}))`\n ${Font.circular};\n font-weight: bold;\n transition: opacity 200ms ease-in-out;\n\n font-size: ${rem(14)};\n line-height: ${rem(24)};\n\n &.-read {\n font-weight: 500;\n text-decoration: none;\n cursor: pointer;\n line-height: ${rem(20)};\n }\n`;\n\nexport default class StarRating extends React.Component {\n trackStarRatingClick(title, location, e) {\n e.preventDefault();\n const event = {\n title,\n nonInteraction: false,\n location,\n };\n\n metrics.track(\"CTA Clicked\", event);\n }\n\n handleClick(event) {\n if (!this.props.productHero) return;\n this.trackStarRatingClick(\"Star Rating\", \"hero\", event);\n const reviewsSectionPosition =\n $(\"#reviews\").offset().top - (atMost.tablet() ? 52 : 128);\n $(window).scrollTop(reviewsSectionPosition);\n }\n\n render() {\n const { score, productHero, readReviews, id = \"star-rating\" } = this.props;\n\n return (\n \n \n \n \n \n {readReviews\n ? intl.t(\"product.read-reviews\", \"Read Reviews\")\n : intl.t(\n \"product.star-rating.read-score\",\n \"{score} out of 5.0 stars\",\n {\n score: score.toFixed(1),\n },\n )}\n \n \n );\n }\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\n\n// Services\nimport intl from \"../../services/intl\";\n\n// Components\nimport CheckoutButton from \"./CheckoutButton\";\nimport ClinicalModal from \"./ClinicalModal\";\nimport ProductHeroCarousel from \"./ProductHeroCarousel\";\nimport StarRating from \"./StarRating\";\nimport SupplementFacts from \"./SupplementFacts\";\nimport Container from \"../Container\";\nimport Row from \"../Row\";\nimport Text from \"../Text\";\n\n// Utils\nimport { Font, Color, rem, media, responsive } from \"../../utils/style\";\nimport { Icons } from \"../../utils/svg\";\nimport NameMap from \"../../utils/nameMap\";\nimport { variation } from \"../../utils/launchDarkly\";\nimport metrics from \"../../utils/metrics\";\n\nconst HeroArea = styled.section.attrs({ id: \"product-hero\" })`\n background-color: ${p => (p.backgroundColor ? p.backgroundColor : \"#EEECF5\")};\n width: 100%;\n cursor: initial;\n`;\n\nconst StyledContainer = styled(Container).attrs({\n id: \"product-hero_container\",\n className: \"container\",\n})`\n height: 100%;\n overflow: visible !important;\n margin-top: 52px;\n\n ${responsive.sm`\n margin-bottom: 24px;\n `}\n\n ${responsive.md`\n margin-top: 68px;\n margin-bottom: 40px;\n `}\n`;\n\nconst StyledRow = styled(Row).attrs({\n id: \"product-hero_container_row\",\n className: \"row\",\n})`\n height: 100%;\n\n ${responsive.sm`\n padding-top: 24px;\n `}\n\n ${responsive.md`\n padding-top: 40px;\n `}\n`;\n\nconst ContentArea = styled.div.attrs({\n id: \"product-hero_container_row_content\",\n className: \"col-12 col-sm-5\",\n})`\n display: flex;\n flex-direction: column;\n\n order: 0;\n padding-left: 0;\n\n ${media.mobile`\n order: 1;\n padding: 16px 24px 0;\n `}\n\n ${responsive.lg`\n justify-content: center;\n `}\n`;\n\nconst Divider = styled.hr`\n background: rgba(0, 0, 0, 0.16);\n height: 1px;\n border: none;\n margin: 32px 0 0;\n\n ${responsive.sm`\n display: none;\n `}\n`;\n\nconst ImageArea = styled.div.attrs({\n id: \"product-hero_container_row_image\",\n className: \"col-12 col-sm-6 offset-sm-1\",\n})`\n order: 1;\n padding-left: 0;\n\n ${media.mobile`\n order: 0;\n padding: 0;\n `}\n`;\n\nconst ProductName = styled.h1.attrs({\n id: \"product-hero_container_row_content_product-name\",\n})`\n ${Font.circular}\n color: ${Color.ritualBlue};\n margin: 0;\n font-weight: 500;\n text-align: left;\n\n font-size: ${rem(22)};\n line-height: ${rem(32)};\n letter-spacing: -0.2px;\n\n ${responsive.md`\n font-size: ${rem(34)};\n line-height: ${rem(40)};\n letter-spacing: -0.5px;\n `}\n\n em {\n ${Font.dutch}\n font-style: italic;\n }\n`;\n\nconst ProductDescription = styled.div.attrs({\n id: \"product-hero_container_row_content_product-description\",\n})`\n margin-top: 16px;\n\n ${responsive.md`\n margin-top: 24px;\n `}\n\n p {\n margin: 0;\n font-weight: 300;\n letter-spacing: 0px;\n font-size: ${rem(14)};\n line-height: ${rem(24)};\n\n ${responsive.md`\n font-size: ${rem(16)};\n line-height: ${rem(26)};\n `}\n }\n`;\n\nconst LinkContainer = styled.div`\n margin-top: 8px;\n\n ${responsive.md`\n margin-top: 16px;\n `}\n`;\n\nconst LinkButton = styled.button`\n margin-right: 24px;\n\n ${responsive.md`\n margin-right: 32px;\n `}\n\n &:last-of-type {\n margin-right: 0;\n }\n\n appearance: none;\n border: none;\n background: none;\n\n display: inline-block;\n padding: 0;\n\n font-weight: 500;\n letter-spacing: 0px;\n font-size: ${rem(14)};\n line-height: ${rem(24)};\n\n ${responsive.md`\n font-size: ${rem(16)};\n line-height: ${rem(26)};\n `}\n\n color: ${Color.ritualBlue};\n border-bottom: 2px solid ${Color.ritualBlue};\n\n [data-whatintent=\"mouse\"] &:focus,\n [data-whatintent=\"touch\"] &:focus {\n outline: none;\n }\n\n &:hover {\n opacity: 0.56;\n }\n`;\n\nconst ButtonWrapper = styled.div.attrs({\n id: \"product-hero_container_row_content_button-wrapper\",\n})`\n margin: 32px 0 16px;\n\n display: flex;\n justify-content: center;\n\n ${responsive.sm`\n justify-content: flex-start;\n `}\n\n ${responsive.md`\n margin: 40px 0 32px;\n `}\n\n a {\n width: 100%;\n\n ${responsive.sm`\n width: auto;\n `}\n }\n`;\n\nconst BarrierBusterWrapper = styled.div`\n display: flex;\n flex-direction: column;\n padding-top: 8px;\n\n ${responsive.md`\n padding-top: 0;\n `}\n`;\n\nconst BarrierBuster = styled.p`\n margin-bottom: 16px;\n\n &:last-child {\n margin-bottom: 0;\n }\n\n font-weight: 300;\n letter-spacing: 0px;\n\n font-size: ${rem(14)};\n line-height: ${rem(20)};\n\n ${responsive.md`\n font-size: ${rem(16)};\n line-height: ${rem(22)};\n `};\n\n svg {\n height: 10px;\n width: 13px;\n margin-right: 16px;\n }\n`;\n\nconst CarouselWrapper = styled.div`\n position: relative;\n margin: 0 9px;\n\n ${responsive.sm`\n margin: 0;\n `}\n`;\n\nconst BarrierBusters = intl.unformattedTranslation(\n \"product.hero.barrier-busters\",\n);\n\n// If these barrier busters continue to become more product specific, this field\n// should be migrated to Contentful.\nconst EPREBarrierBusters = [\n ...BarrierBusters,\n ...intl.unformattedTranslation(\"product.hero.barrier-busters-epre\"),\n];\n\nexport default class ProductHero extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n reviewsLinkActive: true,\n showReviews: false,\n };\n\n this.factsPopup = React.createRef();\n }\n\n componentDidMount() {\n const showReviews = variation(\"pdp-hero-reviews-star-rating\");\n this.setState({\n showReviews,\n });\n }\n\n appendAccessibleFootnoteLink() {\n // include link to footer for a11y\n const { headerDescription } = this.props;\n const htmlHeaderDescription = `

${headerDescription}

`;\n const accessibleFooterLinkHtml =\n '*';\n\n return htmlHeaderDescription.replace(\"*\", accessibleFooterLinkHtml);\n }\n\n showSupplementFacts() {\n metrics.track(\"Overlay Opened\", {\n location: \"PDP Hero\",\n title: \"Supplement Facts\",\n });\n\n this.factsPopup.current.open();\n }\n\n showClinicalModal() {\n metrics.track(\"Overlay Opened\", {\n location: \"PDP Hero\",\n title: \"Our Clinical Study\",\n });\n }\n\n render() {\n let {\n productName,\n buttonPrice,\n buttonCta,\n trackCTAClick,\n heroBackgroundColor,\n featuredImages,\n zoomImages,\n reviewScore,\n reviewCount,\n product,\n clinicalData,\n } = this.props;\n\n const { showReviews } = this.state;\n\n let checkoutButtonProps = {\n buttonText: buttonPrice,\n appendText: buttonCta,\n className: \"product-hero__btn__primary-cta\",\n stockStatus: product.stockStatus,\n trackCTAClick: trackCTAClick.bind(null, buttonCta, \"Hero\"),\n product,\n id: \"product-hero_container_row_content_button-wrapper_button\",\n };\n\n const headerDescriptionHtml = this.appendAccessibleFootnoteLink();\n\n const barrierBusters =\n product.sku === \"EPRE60\" ? EPREBarrierBusters : BarrierBusters;\n\n return (\n \n \n \n \n \n {showReviews && !!reviewScore && (\n \n )}\n\n \n\n \n \n \n \n\n {clinicalData && (\n \n \n \n )}\n \n\n \n \n \n\n \n {barrierBusters.map((text, index) => {\n return (\n \n \n {text}\n \n );\n })}\n \n \n \n\n \n \n \n \n \n \n \n\n \n \n \n );\n }\n}\n","import React from \"react\";\nimport Img from \"gatsby-image\";\nimport styled from \"styled-components\";\n\n// Utils\nimport { Font, Color, rem, rgba, media, responsive } from \"../../utils/style\";\nimport { Icons } from \"../../utils/svg\";\n\n// Styled Elements\nconst Ingredient = styled.div.attrs({\n className: \"col-12 col-sm-6 col-md-4\",\n})``;\n\nconst IngredientContent = styled.button`\n appearance: none;\n border: 0;\n width: 100%;\n\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n\n background-color: rgba(242, 241, 245, 0.56);\n height: 156px;\n position: relative;\n margin-bottom: 24px;\n padding: 24px;\n z-index: 1;\n overflow: hidden;\n\n ${media.mobile`\n margin-bottom: 16px;\n `};\n\n ${responsive.sm`\n height: 180px;\n `};\n\n svg {\n circle {\n transition: all 0.2s;\n }\n }\n\n &:hover {\n svg {\n circle {\n fill-opacity: 0.56;\n }\n }\n }\n`;\n\nconst Name = styled.h3`\n ${Font.circular}\n color: ${Color.ritualBlue};\n font-size: ${rem(26)};\n line-height: ${rem(36)};\n font-weight: 500;\n text-align: left;\n letter-spacing: -0.3px;\n margin: 0 0 4px;\n z-index: 1;\n\n ${media.tablet`\n font-size: ${rem(22)};\n line-height: ${rem(32)};\n letter-spacing: -0.2px;\n margin: 0;\n `}\n`;\n\nconst Benefit = styled.p`\n ${Font.circular}\n color: ${Color.ritualBlue};\n font-size: ${rem(14)};\n line-height: ${rem(20)};\n font-weight: 300;\n text-align: left;\n letter-spacing: 0;\n margin: 0;\n\n ${responsive.md`\n font-size: ${rem(16)};\n line-height: ${rem(22)};\n `};\n`;\n\nconst Source = styled.span`\n ${Font.circular}\n color: ${Color.ritualBlue};\n font-size: ${rem(14)};\n line-height: ${rem(24)};\n font-weight: 500;\n text-align: left;\n letter-spacing: 0;\n margin: 0;\n z-index: 1;\n`;\n\nconst PlusIconWrapper = styled.span`\n position: absolute;\n bottom: 20px;\n right: 24px;\n margin: 0;\n z-index: 1;\n height: 24px;\n width: 24px;\n display: flex;\n align-items: center;\n background-color: ${rgba(Color.ritualBlue, 0.24)};\n border-radius: 50%;\n`;\n\nexport default class IngredientCard extends React.Component {\n render() {\n let { ingredient, handleClick } = this.props;\n let { name, manufacturingLocation, benefit, cardImage } = ingredient;\n\n const PlusIconElement = Icons[\"Plus\"];\n return (\n \n \n \n
\n {name}\n {benefit}\n
\n {manufacturingLocation}\n \n \n \n
\n
\n );\n }\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\n\n// Components\nimport Img from \"gatsby-image\";\nimport MagicLink from \"../MagicLink\";\nimport Text from \"../Text\";\n\n// Utils\nimport { Color, Font, rem, responsive } from \"../../utils/style\";\nimport NameMap from \"../../utils/nameMap\";\n\nconst SlideWrapper = styled.div`\n position: relative;\n overflow: hidden;\n width: 100%;\n height: 100%;\n background-color: #f2f1f6;\n`;\n\nconst SlideContent = styled.div`\n position: relative;\n z-index: 10;\n width: 100%;\n height: 100%;\n padding: 24px 24px 40px;\n\n ${responsive.sm`\n padding: 40px 60px 64px;\n `};\n\n ${responsive.md`\n padding: 56px 80px 64px;\n `};\n\n ${responsive.lg`\n padding: 56px 100px 64px;\n `};\n`;\n\nconst IngredientTitle = styled.h2`\n ${Font.circular};\n font-size: ${rem(22)};\n line-height: ${rem(32)};\n letter-spacing: -0.2px;\n font-weight: 500;\n margin: 0;\n`;\n\nconst IngredientDosage = styled.p`\n ${Font.circular};\n font-size: ${rem(14)};\n line-height: ${rem(20)};\n font-weight: 300;\n margin: 0 0 16px;\n padding-bottom: 16px;\n border-bottom: 1px solid #ccc;\n\n ${responsive.md`\n margin-bottom: 24px;\n padding-bottom: 24px;\n `};\n`;\n\nconst IngredientDescription = styled.p`\n ${Font.circular};\n font-size: ${rem(14)};\n line-height: ${rem(20)};\n font-weight: 300;\n margin: 0 0 24px;\n\n ${responsive.md`\n margin-bottom: 32px;\n `};\n`;\n\nconst NutritionFactTitle = styled.div`\n ${Font.circular};\n font-size: ${rem(12)};\n line-height: ${rem(20)};\n letter-spacing: 0.8px;\n font-weight: 500;\n margin: 0 0 8px;\n color: rgba(20, 43, 111, 0.56);\n text-transform: uppercase;\n`;\n\nconst NutritionFact = styled.p`\n ${Font.circular};\n font-size: ${rem(14)};\n line-height: ${rem(20)};\n font-weight: 300;\n margin: 0 0 24px;\n`;\n\nexport const LearnMore = styled(MagicLink)`\n border-bottom: 2px solid ${Color.ritualBlue};\n font-size: ${rem(14)};\n position: absolute;\n bottom: 40px;\n left: 24px;\n\n ${responsive.sm`\n bottom: 64px;\n left: 60px;\n `};\n\n ${responsive.md`\n bottom: 64px;\n left: 80px;\n `};\n\n ${responsive.lg`\n bottom: 64px;\n left: 100px;\n `};\n`;\n\nexport default class IngredientsOverviewSlide extends React.Component {\n render() {\n const { ingredient, product } = this.props;\n const {\n name,\n productDosages,\n modalDesktopImage,\n modalMobileImage,\n slug,\n modalDescription,\n nutritionFact,\n } = ingredient;\n const productName = NameMap(product.name).plain;\n const dosages = JSON.parse(\n productDosages.childMarkdownRemark.rawMarkdownBody,\n );\n const dosage = dosages.find(item => item.productName === productName);\n\n const learnMoreLink = `/ingredients/${slug}`;\n\n return (\n \n \n {name}\n {dosage && dosage.dosage}\n {modalDescription}\n \n \n \n {nutritionFact}\n {slug && (\n \n \n \n )}\n \n\n \n \n \n );\n }\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\n\n// Components\nimport Container from \"../Container\";\nimport Row from \"../Row\";\nimport IngredientCard from \"./IngredientCard\";\nimport SupplementFacts from \"./SupplementFacts\";\nimport Carousel from \"../Carousel\";\nimport IngredientsOverviewSlide from \"./IngredientsOverviewSlide\";\nimport Text from \"../Text\";\n\n// Utils\nimport { Font, Color, rem, responsive } from \"../../utils/style\";\nimport { Icons } from \"../../utils/svg\";\nimport metrics from \"../../utils/metrics\";\nimport MagicLink from \"../MagicLink\";\n\n// Styled Elements\nconst Wrapper = styled(Container).attrs({\n role: \"section\",\n \"aria-labelledby\": \"ingredients-overeview-header\",\n})`\n margin-bottom: 80px;\n\n ${responsive.md`\n margin-bottom: 120px;\n `};\n`;\n\nconst HeaderColumn = styled.div.attrs({\n className: \"col-12 col-sm-8 offset-sm-2\",\n})`\n margin-bottom: 40px;\n\n ${responsive.md`\n margin-bottom: 56px;\n `};\n`;\n\nconst Header = styled.h2.attrs({\n id: \"ingredients-overeview-header\",\n})`\n ${Font.circular};\n font-size: ${rem(30)};\n line-height: ${rem(36)};\n font-weight: 500;\n letter-spacing: -0.4px;\n text-align: center !important;\n color: ${Color.ritualBlue};\n margin: 0 auto 16px;\n\n ${responsive.md`\n font-size: ${rem(48)};\n line-height: ${rem(54)};\n letter-spacing: -1px;\n margin: 0 0 24px;\n `}\n`;\n\nconst Subhead = styled.p`\n ${Font.dutch};\n font-size: ${rem(16)};\n line-height: ${rem(26)};\n font-weight: normal;\n text-align: center;\n letter-spacing: 0;\n color: ${Color.ritualBlue};\n margin: 0;\n\n ${responsive.md`\n font-size: ${rem(18)};\n line-height: ${rem(28)};\n `}\n\n span {\n font: inherit;\n }\n`;\n\nconst IngredientsRow = styled(Row)``;\n\nconst ArticleLinkColumn = styled.div`\n text-align: center;\n margin-top: 40px;\n display: flex;\n align-items: center;\n flex-direction: column;\n\n ${responsive.md`\n margin-top: 56px;\n `};\n`;\n\nconst ArticleLinkHeader = styled.h2`\n ${Font.circular}\n color: ${Color.ritualBlue};\n font-size: ${rem(18)};\n line-height: ${rem(28)};\n font-weight: 500;\n text-align: center !important;\n margin: 0;\n padding: 0;\n\n ${responsive.md`\n font-size: ${rem(20)};\n line-height: ${rem(30)};\n max-width: 454px;\n `};\n`;\n\nconst SupplementLink = styled.span`\n border-bottom: 1px solid ${Color.ritualBlue};\n cursor: pointer;\n transition: opacity 200ms ease-in-out;\n\n &:hover {\n opacity: 0.56;\n }\n`;\n\nconst ExpandIngredients = styled.div`\n border-top: 1px solid rgba(0, 0, 0, 0.16);\n margin-top: 8px;\n padding-top: 16px;\n text-align: center;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n\n ${responsive.sm`\n margin-top: 0;\n `};\n\n ${responsive.md`\n margin-top: 16px;\n `};\n\n button {\n appearance: none;\n background: none;\n border: 0;\n padding: 0;\n margin: 0;\n\n span {\n ${Font.circular}\n color: ${Color.ritualBlue};\n font-size: ${rem(14)};\n line-height: ${rem(24)};\n font-weight: 500;\n margin: 0 8px 0 0;\n }\n\n svg {\n width: 14px;\n height: 8px;\n }\n }\n`;\n\nconst ArticleLink = styled(MagicLink)`\n ${Font.circular};\n font-size: ${rem(14)};\n line-height: ${rem(24)};\n font-weight: 500;\n display: inline-block;\n border-bottom: 2px solid ${Color.ritualBlue};\n margin: 24px 0 0;\n`;\n\nexport default class IngredientsOverview extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n factsOpen: false,\n cardLimits: {\n small: 4,\n large: 6,\n },\n expandedView: false,\n deviceState: \"large\",\n activeSlideIndex: -1,\n carouselControls: true,\n };\n\n this.resizeHandler = this.resizeHandler.bind(this);\n this.openCarousel = this.openCarousel.bind(this);\n this.clickEvent = this.clickEvent.bind(this);\n }\n\n componentDidMount() {\n window.addEventListener(\"resize\", this.resizeHandler);\n this.resizeHandler();\n }\n\n componentWillUnmount() {\n window.removeEventListener(\"resize\", this.resizeHandler);\n }\n\n resizeHandler() {\n const width = window.innerWidth;\n const newDeviceState = width >= 960 ? \"large\" : \"small\";\n\n if (newDeviceState !== this.state.deviceState) {\n this.setState({\n deviceState: newDeviceState,\n carouselControls: newDeviceState === \"large\",\n });\n }\n }\n\n handlePopup() {\n this.factsPopup.open();\n }\n\n toggleView() {\n this.setState(\n prevState => ({\n expandedView: !prevState.expandedView,\n }),\n () => {\n if (this.state.deviceState === \"small\" && !this.state.expandedView) {\n const element = document.getElementById(\n `ingredient-card-${this.state.cardLimits[\"small\"] - 1}`,\n );\n const newScrollPosition =\n element.getBoundingClientRect().top +\n document.documentElement.scrollTop;\n\n window && window.scrollTo(0, newScrollPosition);\n }\n },\n );\n }\n\n hideCarousel() {\n this.setState({\n activeSlideIndex: -1,\n });\n }\n\n openCarousel(index) {\n this.setState({\n activeSlideIndex: index,\n });\n }\n\n clickEvent(ingredient) {\n metrics.track(\"Ingredient Card Clicked\", {\n name: ingredient.name,\n location: \"Ingredient List\",\n nonInteraction: false,\n });\n }\n\n generateCarouselSlides() {\n const { ingredients, product } = this.props;\n return ingredients.map((ingredient, index) => {\n return (\n \n );\n });\n }\n\n render() {\n const {\n product,\n ingredients,\n ingredientsSubheader,\n somethingMissingTitle,\n } = this.props;\n const {\n activeSlideIndex,\n cardLimits,\n expandedView,\n deviceState,\n carouselControls,\n } = this.state;\n\n const visibleCards = expandedView\n ? ingredients.length\n : cardLimits[deviceState];\n\n const caretType = expandedView ? \"CaretUpRounded\" : \"CaretDownRounded\";\n const CaretDown = Icons[caretType];\n\n return (\n \n \n \n
\n \n
\n \n {ingredientsSubheader.childMarkdownRemark.rawMarkdownBody}{\" \"}\n \n \n \n \n
\n
\n\n \n {ingredients.slice(0, visibleCards).map((ingredient, i) => {\n return (\n {\n this.openCarousel(i);\n this.clickEvent(ingredient);\n }}\n />\n );\n })}\n \n\n \n \n \n \n \n\n \n \n {somethingMissingTitle}\n \n \n \n \n \n\n {product.supplementFacts && (\n (this.factsPopup = r)}\n />\n )}\n\n {activeSlideIndex >= 0 && (\n \n )}\n
\n );\n }\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport Accordion from \"./Accordion\";\nimport Row from \"../Row\";\nimport { Font, Color, rem, media } from \"../../utils/style\";\nimport Text from \"../Text\";\n\nconst Wrapper = styled.section.attrs({\n className: \"container\",\n \"aria-labelledby\": \"QAOverview-title\",\n})`\n margin-bottom: ${p => (p.additionalMargin ? \"120px\" : \"0\")};\n\n ${media.mobile`\n margin-top: 80px;\n margin-bottom: ${p => (p.additionalMargin ? \"64px\" : \"0\")};\n `};\n`;\n\nconst QAIntroColumn = styled.div.attrs({\n className: \"col-12 col-md-8 offset-md-2\",\n})`\n margin-bottom: 56px;\n z-index: 2;\n\n ${media.mobile`\n margin-bottom: 40px;\n `};\n`;\n\nconst QAIntroTitle = styled.h2.attrs({\n id: \"qa-overview-title\",\n})`\n ${Font.circular}\n color: ${Color.ritualBlue};\n font-size: ${rem(48)};\n line-height: ${rem(54)};\n font-weight: 500;\n text-align: center;\n letter-spacing: -1.4px;\n text-align: center !important;\n margin: 0 0 24px;\n\n ${media.tablet`\n font-size: ${rem(30)};\n line-height: ${rem(36)};\n letter-spacing: -0.4px;\n `}\n`;\n\nconst QAIntroSubheader = styled.p`\n ${Font.dutch}\n color: ${Color.ritualBlue};\n font-size: ${rem(18)};\n line-height: ${rem(28)};\n font-weight: normal;\n text-align: center;\n letter-spacing: 0;\n margin: 0;\n\n ${media.tablet`\n font-size: ${rem(16)};\n line-height: ${rem(26)};\n `}\n\n a {\n border-bottom: 1px solid ${Color.ritualBlue};\n }\n`;\n\nconst QuestionsColumn = styled.div.attrs({\n className: \"col-12 col-md-6 offset-md-3\",\n})`\n display: flex;\n align-items: center;\n justify-content: center;\n margin-top: 56px;\n padding-left: 0 !important;\n padding-right: 0 !important;\n\n ${media.mobile`\n margin-top: 40px;\n flex-direction: column;\n padding-left: 24px !important;\n padding-right: 24px !important;\n `};\n`;\n\nconst MoreQuestionsArea = styled.div`\n padding: 12px 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n`;\n\nconst MoreQuestions = styled.p`\n ${Font.dutch}\n color: ${Color.ritualBlue};\n font-size: ${rem(18)};\n line-height: ${rem(28)};\n font-weight: normal;\n text-align: center;\n margin: 0;\n\n a {\n border-bottom: 1px solid ${Color.ritualBlue};\n transition: opacity 200ms ease-in-out;\n\n &:hover {\n opacity: 0.56;\n }\n }\n\n ${media.mobile`\n margin-bottom: 16px;\n `}\n`;\n\nexport default class QAOverview extends React.Component {\n render() {\n let { questions, additionalMargin } = this.props;\n let questionData = JSON.parse(\n questions.childMarkdownRemark.rawMarkdownBody,\n );\n\n let accordianData = questionData.map(q => {\n return {\n header: q.question,\n body: q.answer,\n };\n });\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n \n \n \n \n \n \n \n ),\n }}\n />\n \n \n \n \n \n );\n }\n}\n","import React, { Component } from \"react\";\nimport Helmet from \"react-helmet\";\n\n// Utils\nimport config from \"../../utils/siteConfig\";\nimport { getGenderFromSKU, getAgeGroupFromSKU } from \"../../utils/product\";\n\n// Components\nimport GeneralTags from \"./GeneralTags\";\n\nclass ProductSEO extends Component {\n static defaultProps = {\n productAttributes: {\n brand: \"Ritual\",\n availability: \"in stock\",\n condition: \"new\",\n category:\n \"525 - Health & Beauty > Health Care > Fitness & Nutrition > Vitamins & Supplements\",\n currency: \"USD\",\n },\n };\n\n getSchemaStockStatus(stockStatus) {\n switch (stockStatus) {\n case \"preorder\":\n return \"http://schema.org/PreOrder\";\n case \"out of stock\":\n return \"http://schema.org/OutOfStock\";\n case \"in stock\":\n default:\n return \"http://schema.org/InStock\";\n }\n }\n\n render() {\n const {\n pagePath,\n title,\n description,\n image,\n image: { url: imgUrlPartial, width: imgWidth, height: imgHeight },\n productAttributes,\n } = this.props;\n\n const pageUrl = `${config.siteUrl}/${pagePath}`;\n const imgUrl = `https:${imgUrlPartial}`;\n\n if (!productAttributes) {\n console.warn(\"Missing productAttributes from page SEO\");\n }\n\n let productMeta = [\n { property: \"product:brand\", content: productAttributes.brand },\n {\n property: \"product:availability\",\n content: productAttributes.availability,\n },\n { property: \"product:condition\", content: productAttributes.condition },\n {\n property: \"product:retailer_item_id\",\n content: productAttributes.productId,\n },\n { property: \"og:price:amount\", content: productAttributes.amount },\n { property: \"og:price:currency\", content: productAttributes.currency },\n { property: \"product:price:amount\", content: productAttributes.amount },\n {\n property: \"product:price:currency\",\n content: productAttributes.currency,\n },\n { property: \"product:category\", content: productAttributes.category },\n ];\n\n const sku = productAttributes.sku;\n const gender = getGenderFromSKU(sku);\n const ageGroup = getAgeGroupFromSKU(sku);\n\n if (gender) {\n productMeta.push({ property: \"product:gender\", content: gender });\n }\n\n if (ageGroup) {\n productMeta.push({ property: \"product:age_group\", content: ageGroup });\n }\n\n // Overwrite properties below with new image attributes\n let meta = [\n { name: \"image\", content: imgUrl },\n { property: \"og:type\", content: \"product.item\" },\n { property: \"og:image\", content: imgUrl },\n { property: \"og:image:width\", content: imgWidth },\n { property: \"og:image:height\", content: imgHeight },\n { name: \"twitter:image\", content: imgUrl },\n ...productMeta,\n ];\n\n const availability = this.getSchemaStockStatus(\n productAttributes.availability,\n );\n\n let productSchema = [\n {\n \"@context\": \"http://schema.org\",\n \"@type\": \"Product\",\n name: productAttributes.name,\n description: productAttributes.description,\n brand: productAttributes.brand,\n image: {\n \"@type\": \"ImageObject\",\n url: imgUrl,\n width: imgWidth,\n height: imgHeight,\n },\n sku: productAttributes.productId,\n mpn: productAttributes.productId,\n offers: {\n \"@type\": \"Offer\",\n priceCurrency: \"USD\",\n price: productAttributes.amount,\n availability,\n url: pageUrl,\n },\n },\n ];\n\n if (productAttributes.reviewCount > 0) {\n productSchema[0].aggregateRating = {\n \"@type\": \"AggregateRating\",\n ratingValue: productAttributes.ratingValue,\n reviewCount: productAttributes.reviewCount,\n };\n if (productAttributes.topReview) {\n productSchema[0].review = {\n \"@type\": \"Review\",\n name: productAttributes.topReview.title,\n reviewBody: productAttributes.topReview.content,\n reviewRating: {\n \"@type\": \"Rating\",\n ratingValue: productAttributes.topReview.score,\n },\n author: {\n \"@type\": \"Person\",\n name: productAttributes.topReview.user.display_name,\n },\n };\n }\n }\n\n return (\n
\n \n \n \n \n
\n );\n }\n}\n\nexport default ProductSEO;\n","import React from \"react\";\nimport styled from \"styled-components\";\n\n// Animations\nimport ScrollMagic from \"scrollmagic\";\nimport gsap from \"gsap\";\n\nimport $ from \"jquery\";\n\n//Utils\nimport { Font, media, atLeast, rem, responsive } from \"../../utils/style\";\nimport { stripWrappingParagraphTag } from \"../../utils/contentful\";\n\n// Components\nimport Container from \"../Container\";\nimport Row from \"../Row\";\nimport Img from \"gatsby-image\";\n\n// Styled Elements\nconst TimeLineWrapper = styled(Container).attrs({\n id: \"timeline\",\n role: \"section\",\n \"aria-labelledby\": \"timeline-header\",\n})`\n margin: 0 auto 80px;\n position: relative;\n overflow: visible !important;\n\n ${responsive.md`\n margin: 0 auto 120px;\n `}\n`;\n\nconst TimelineRow = styled(Row)``;\n\nconst ImageArea = styled.div.attrs({\n className: \"col-12 col-sm-6\",\n})`\n position: relative;\n top: 0px;\n`;\n\nconst CircleWrapper = styled.div.attrs({\n className: \"timeline__circle\", // Required className for scrollmagic\n})``;\n\nconst TimeLineImage = styled.div`\n position: absolute;\n left: 0;\n top: 0;\n backface-visibility: hidden;\n max-width: 100%;\n margin: 0;\n z-index: 100;\n width: 470px;\n height: 470px;\n\n .gatsby-image-wrapper {\n max-width: 100%;\n max-height: 100%;\n }\n\n img {\n max-width: 100%;\n max-height: 100%;\n }\n\n ${media.tablet`\n display: block;\n margin: 0 auto;\n padding-bottom: 100%;\n height: 0;\n `}\n\n ${media.mobile`\n position: relative !important;\n width: 100%;\n top: 0;\n\n .gatsby-image-wrapper, .gatsby-image-wrapper > * {\n width: 100% !important;\n height: 100% !important;\n }\n\n img {\n width: 100%;\n height: 100%;\n }\n `}\n`;\n\nconst TimeLineArea = styled.div.attrs({\n className: \"col-12 col-sm-5 offset-sm-1\",\n})`\n position: relative;\n padding-right: 20px;\n`;\n\nconst TimelineIntroHeader = styled.h2.attrs({\n id: \"timeline-header\",\n})`\n ${Font.circular}\n font-size: ${rem(30)};\n line-height: ${rem(36)};\n letter-spacing: -0.4px;\n font-weight: 500;\n margin: 24px 0 16px;\n\n ${responsive.sm`\n margin-top: 0;\n margin-bottom: 24px;\n `};\n\n ${responsive.md`\n font-size: ${rem(48)};\n line-height: ${rem(54)};\n letter-spacing: -1.4px;\n `};\n\n em {\n ${Font.dutch};\n font-style: italic;\n }\n`;\n\nconst TimelineIntroSubhead = styled.p`\n ${Font.dutch}\n font-size: ${rem(18)};\n line-height: ${rem(28)};\n font-weight: normal;\n margin: 0 0 56px;\n\n ${media.mobile`\n font-size: ${rem(16)};\n line-height: ${rem(26)};\n margin-bottom: 40px;\n `}\n`;\n\nconst Line = styled.div.attrs({\n className: \"timeline__line\",\n})`\n left: calc(50% + 7px + 20px);\n height: calc(100% + 42px);\n position: absolute;\n left: 6px;\n height: calc(100% + 25px);\n width: 2px;\n background-color: #b3bbd1;\n\n ${media.tablet`\n left: 16px;\n height: calc(100% + 42px);\n `};\n`;\n\nconst TimeLineContent = styled.div`\n display: inline-block;\n position: relative;\n width: 100%;\n padding-bottom: 3px;\n`;\n\nconst TimelineItem = styled.div`\n padding: 0;\n position: relative;\n margin-bottom: 40px;\n padding-right: 20px;\n padding-left: 40px;\n transition: opacity 0.4s;\n box-sizing: border-box !important;\n max-width: 442px;\n\n ${media.mobile`\n padding-left: 40px;\n width: auto;\n `}\n\n opacity: 0.2;\n transition: opacity 0.4s;\n`;\n\nconst LastMarker = styled.div`\n display: none;\n position: absolute;\n left: 3px;\n bottom: 0;\n width: 4px;\n height: 4px;\n border: 2px solid #b3bbd1;\n background-color: #b3bbd1;\n border-radius: 18px;\n z-index: 11;\n box-sizing: content-box !important;\n\n ${media.tablet`\n left: 13px;\n `};\n`;\n\nconst ItemMarker = styled.span`\n position: absolute;\n left: 1px;\n width: 8px;\n height: 8px;\n border: 2px solid #ced5e1;\n background-color: #ffffff;\n border-radius: 18px;\n z-index: 11;\n box-sizing: content-box !important;\n\n ${media.tablet`\n left: 11px;\n `};\n`;\n\nconst ItemFill = styled.span`\n position: absolute;\n width: 10px;\n height: 10px;\n background-color: #142b6f;\n border-radius: 13px;\n top: 2px;\n left: 2px;\n z-index: 12;\n box-sizing: content-box !important;\n\n ${media.tablet`\n left: 12px;\n `};\n`;\n\nconst ItemContent = styled.div`\n ${p =>\n p.hasMonth\n ? `\n transform: translateY(-6px);\n `\n : `\n transform: translateY(-10px);\n\n & > span {\n display: none;\n }\n `};\n`;\n\nconst ItemMonth = styled.span`\n position: relative;\n ${Font.circular}\n font-size: ${rem(14)};\n line-height: ${rem(24)};\n font-weight: 500;\n display: block;\n margin: 0 0 16px;\n\n ${media.mobile`\n font-size: ${rem(12)};\n line-height: ${rem(18)};\n margin-bottom: 8px;\n position: relative;\n left: 0;\n top: 0;\n `}\n`;\n\nconst ItemTitle = styled.h3`\n ${Font.circular}\n font-size: ${rem(22)};\n line-height: ${rem(32)};\n letter-spacing: -0.2px;\n font-weight: 500;\n margin: 0 0 8px;\n\n ${media.mobile`\n font-size: ${rem(16)};\n line-height: ${rem(26)};\n letter-spacing: 0;\n `}\n`;\n\nconst Description = styled.p`\n ${Font.dutch}\n font-size: ${rem(18)};\n line-height: ${rem(28)};\n font-weight: normal;\n margin: 0;\n\n ${media.mobile`\n font-size: ${rem(16)};\n line-height: ${rem(26)};\n `}\n`;\n\nexport default class Timeline extends React.Component {\n constructor(props) {\n super(props);\n this.elements = [];\n this.markers = [];\n this.fills = [];\n this.scene = null;\n this.imageScene = null;\n this.imageWrapper = null;\n this.image = null;\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.controller && !prevProps.controller) {\n this.initializeAnimation();\n // Initialize it, then re-initialize after fonts loaded\n this.timeout = setTimeout(() => {\n this.initializeAnimation();\n }, 150);\n $(window).on(\"resize\", () => {\n this.initializeAnimation();\n });\n }\n }\n\n componentWillUnmount() {\n $(window).off(\"resize\");\n clearTimeout(this.timeout);\n }\n\n initializeAnimation() {\n let sceneDuration = $(this.sceneElement).outerHeight(true);\n // Destory all ongoing scenes.\n if (this.scene) {\n this.scene.destroy(true);\n }\n\n if (this.imageScene) {\n this.imageScene.destroy(true);\n }\n\n if (this.itemScenes) {\n this.itemScenes.forEach(scene => {\n scene.destroy(true);\n });\n }\n\n if (ScrollMagic && this.image && this.imageWrapper) {\n this.scene = new ScrollMagic.Scene({\n triggerElement: this.sceneElement,\n triggerHook: 0.5,\n duration: sceneDuration,\n offset: 0,\n })\n .setTween(this.timelineTween())\n .addTo(this.props.controller);\n\n this.itemScenes = this.elements.map((item, i) => {\n let duration = $(item).outerHeight(true);\n return new ScrollMagic.Scene({\n triggerElement: item,\n triggerHook: 0.5,\n duration: duration,\n offset: 0,\n })\n .setTween(this.itemTween(item, i, this.elements.length))\n .addTo(this.props.controller);\n });\n\n this._initializeImageScene();\n }\n }\n\n _initializeImageScene() {\n if (atLeast.tablet()) {\n let duration =\n $(this.imageWrapper).innerHeight() - $(this.image).outerHeight() - 165;\n this.imageScene = new ScrollMagic.Scene({\n triggerElement: this.imageWrapper,\n duration: duration,\n offset: 165,\n })\n .setPin(\".timeline__circle\")\n .addTo(this.props.controller);\n }\n }\n\n itemTween(item, i, elementsCount) {\n var timeline = gsap.timeline();\n var marker = this.markers[i];\n var markerFill = this.fills[i];\n\n timeline\n .set(item, {\n css: {\n opacity: 0,\n },\n })\n .fromTo(\n marker,\n {\n css: {\n borderColor: \"#ced5e1\",\n scale: 1,\n },\n },\n {\n duration: 0.01,\n css: {\n borderColor: \"#142b6f\",\n scale: 1,\n },\n },\n )\n .set(item, {\n css: {\n opacity: 1.0,\n },\n })\n .fromTo(\n markerFill,\n {\n css: {\n scale: 1,\n opacity: 0,\n },\n },\n {\n duration: 0.01,\n css: {\n scale: 1,\n color: \"#142b6f\",\n opacity: 1,\n },\n },\n )\n .to(marker, { duration: 0.5 })\n .to(marker, {\n duration: 0.7,\n css: {\n scale: 1,\n },\n ease: \"power1.easeOut\",\n })\n .to(marker, {\n duration: 0.7,\n css: {\n scale: 1,\n },\n ease: \"power1.easeIn\",\n });\n\n if (i === elementsCount - 1) {\n timeline.set(\".timeline__item__last-marker\", {\n css: {\n display: \"block\",\n },\n });\n }\n return timeline;\n }\n\n timelineTween() {\n return gsap.fromTo(\n \".timeline__line\",\n {\n css: {\n height: \"0\",\n },\n ease: \"none\",\n },\n {\n duration: 10,\n css: {\n height: \"100%\",\n },\n ease: \"none\",\n },\n );\n }\n\n imageTween() {\n let wrapper = $(this.imageWrapper);\n let image = $(this.image);\n let top = wrapper.innerHeight() - image.outerHeight() - 165;\n return gsap.fromTo(\n \".timeline__image,.timeline__circle\",\n {\n css: {\n y: \"0\",\n },\n ease: \"none\",\n },\n {\n duration: 1,\n css: {\n y: `${top > 0 ? top : 0}px`,\n },\n ease: \"none\",\n },\n );\n }\n\n render() {\n let { timelineHeading, timelineSubhead, image, data } = this.props;\n\n return (\n \n \n (this.imageWrapper = r)}>\n \n (this.image = r)}\n >\n \n \n \n \n \n\n \n \n {timelineSubhead}\n\n (this.sceneElement = r)}>\n \n {data.map((item, i) => {\n let shortname = \"point-\" + i;\n return (\n \n (this.elements[i] = r)}\n >\n (this.markers[i] = r)}\n className={`timeline__item__marker ${shortname}-marker`}\n />\n (this.fills[i] = r)}\n className={`timeline__item__fill ${shortname}-marker-fill`}\n />\n \n \n {item.month}\n \n {item.title}\n {item.description}\n \n \n {i === data.length - 1 && (\n \n )}\n \n );\n })}\n {this.props.children}\n \n \n \n \n );\n }\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport MagicLink from \"../MagicLink\";\nimport Img from \"gatsby-image\";\nimport { calculateReadingTime } from \"../../utils/readingTime\";\nimport {\n Color,\n rem,\n media,\n Font,\n maxLines,\n responsive,\n} from \"../../utils/style\";\nimport Text from \"../Text\";\n\nconst ArticleContent = styled.div`\n height: 341px;\n max-width: 335px;\n position: relative;\n margin: 0 auto;\n position: relative;\n overflow: hidden;\n display: flex;\n align-items: center;\n justify-content: left;\n padding: ${rem(24)};\n background-color: ${p => p.background};\n &:hover img {\n transform: none;\n }\n ${responsive.sm`\n img {\n transition: all 0.2s ease-in-out !important;\n }\n &:hover {\n cursor: pointer;\n\n img {\n transform: scale(1.1);\n }\n }\n `}\n\n ${responsive.md`\n max-width: 452px;\n height: 401px;\n padding: ${rem(40)};\n `};\n ${responsive.lg`\n height: 341px;\n `};\n`;\n\nconst Article = styled.div`\n align-self: flex-end;\n max-width: 320px;\n z-index: 2;\n\n span,\n p,\n h2 {\n color: ${p => (p.color ? p.color : Color.ritualBlue)};\n\n a {\n color: inherit;\n }\n }\n`;\n\nconst ArticleReadtime = styled.span`\n ${Font.circular};\n display: block;\n font-size: ${rem(16)};\n line-height: ${rem(26)};\n font-weight: 500;\n text-align: left;\n margin: 0 0 ${rem(6)};\n`;\n\nconst ArticleTitle = styled.h2`\n ${Font.circular}\n font-size: ${rem(22)};\n line-height: ${rem(30)};\n font-weight: 400;\n text-align: left;\n letter-spacing: -0.2px;\n margin: 0;\n\n a {\n color: inherit;\n\n &:hover {\n color: inherit;\n }\n }\n\n ${media.notDesktop`\n font-size: ${rem(22)};\n `}\n`;\n\nconst ArticlePreview = styled.p`\n ${Font.dutch}\n font-size: ${rem(16)};\n line-height: ${rem(26)};\n font-weight: normal;\n text-align: left;\n margin: ${rem(16)} 0 0;\n ${maxLines(30, 3)};\n\n ${media.notDesktop`\n font-size: ${rem(16)};\n line-height: ${rem(26)};\n ${maxLines(28, 3)};\n margin-top: ${rem(18)};\n `}\n`;\n\nexport default class CarouselArticle extends React.Component {\n render() {\n let {\n productSku,\n article,\n className,\n showCount,\n showPreview = false,\n index,\n } = this.props;\n let readTime = calculateReadingTime(article.primaryContent);\n\n return (\n \n \n \n \n
\n \n \n \n {article.title}\n {showPreview && (\n \n {article.previewText}\n \n )}\n
\n \n \n );\n }\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { rem, Font, media, Color, atMost } from \"../../utils/style\";\nimport Container from \"../Container\";\nimport $ from \"jquery\";\nimport Row from \"../Row\";\nimport CarouselArticle from \"../product/CarouselArticle\";\nimport RitualButton from \"../global/RitualButton\";\nimport { CarouselContainer, CarouselChild } from \"../Carousel.New\";\nimport Text from \"../Text\";\n\nconst FeaturedArticlesWrapper = styled.section.attrs({\n \"aria-labelledby\": \"featured-articles-headline\",\n})`\n overflow: hidden;\n padding: 0 !important;\n position: relative;\n`;\n\nconst StyledContainer = styled(Container)`\n z-index: 100;\n position: relative;\n`;\n\nconst ArticleHeader = styled.div.attrs({\n className: \"col-12\",\n})`\n margin-bottom: 56px;\n\n ${media.mobile`\n margin-bottom: 40px;\n `};\n`;\n\nconst ArticlesDescription = styled.div`\n text-align: center;\n`;\n\nconst Headline = styled.h2.attrs({\n id: \"featured-articles-headline\",\n})`\n ${Font.circular}\n color: ${Color.ritualBlue};\n font-size: ${rem(48)};\n line-height: ${rem(54)};\n font-weight: 500;\n letter-spacing: -1.4px;\n text-align: center !important;\n margin: 0 0 24px;\n\n ${media.tablet`\n font-size: ${rem(30)};\n line-height: ${rem(36)};\n letter-spacing: -0.4px;\n margin-bottom: 16px;\n letter-spacing: -0.4px;\n `}\n`;\n\nconst SubHead = styled.div`\n ${Font.dutch}\n color: ${Color.ritualBlue};\n font-size: ${rem(18)};\n line-height: ${rem(28)};\n font-weight: normal;\n text-align: center;\n letter-spacing: 0;\n margin: 0;\n\n ${media.mobile`\n font-size: ${rem(16)};\n line-height: ${rem(26)};\n `}\n`;\n\nconst CarouselColumn = styled.div`\n padding: 0 !important;\n\n .slider-list {\n touch-action: initial !important;\n }\n\n ${media.mobile`\n .slider-list {\n li {\n a {\n display: flex !important;\n justify-content: center !important;\n }\n }\n }\n `};\n\n .container {\n padding: 0 !important;\n\n ${media.mobile`\n padding: 0 20px !important;\n `};\n }\n`;\n\nconst LinkWrapper = styled.div`\n position: relative;\n text-align: center;\n padding: 56px 0 120px;\n z-index: 2;\n\n ${media.tablet`\n padding: 40px 0 80px;\n `};\n`;\n\nexport default class FeaturedArticles extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n isMobile: null,\n };\n }\n\n componentDidMount() {\n this.setVisibleSlides();\n $(window).on(\n \"resize.featuredArticlesCarousel\",\n this.setVisibleSlides.bind(this),\n );\n }\n\n componentWillUnmount() {\n $(window).off(\"resize.featuredArticlesCarousel\");\n }\n\n setVisibleSlides() {\n this.setState({\n isMobile: atMost.mobile(),\n });\n }\n\n render() {\n let { productSku, articles, children, showCount } = this.props;\n let { isMobile } = this.state;\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {articles.map((article, i) => {\n return (\n \n \n \n );\n })}\n \n \n \n \n\n \n \n \n \n \n {children}\n \n );\n }\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport Container from \"../Container\";\nimport Row from \"../Row\";\nimport Text from \"../Text\";\nimport RitualButton from \"../global/RitualButton\";\nimport { responsive, Color, rem, Font } from \"../../utils/style\";\nimport { Icons } from \"../../utils/svg\";\n\nconst GuideColumn = styled.section.attrs({\n className: \"col-12 col-sm-8 offset-sm-2\",\n \"aria-labelledby\": \"guide-title\",\n})`\n text-align: center;\n margin-top: 48px;\n margin-bottom: 80px;\n\n ${responsive.md`\n margin-top: 80px;\n margin-bottom: 120px;\n `}\n`;\n\nconst GuideTitle = styled.h2`\n ${Font.circular}\n font-size: ${rem(22)};\n line-height: ${rem(32)};\n color: ${Color.ritualBlue};\n font-weight: 500;\n letter-spacing: -0.2px;\n text-align: center !important;\n margin: 0 0 24px;\n padding-top: 28px;\n\n &:after {\n position: absolute;\n content: '';\n top: 0;\n left: calc(50% - 16px);\n width: 32px;\n height: 4px;\n background-color: ${Color.ritualBlue};\n }\n`;\n\nconst GuideButton = styled(RitualButton)`\n svg {\n width: 14px;\n height: 12px;\n margin-left: 8px;\n }\n`;\n\nexport default class DownloadGuide extends React.Component {\n render() {\n let { guideText, doctorGuide, trackCTAClick } = this.props;\n\n return (\n \n \n \n {guideText}\n \n {\" \"}\n \n \n \n \n \n );\n }\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { PressLogos } from \"../../utils/svg\";\nimport Container from \"../Container\";\nimport Row from \"../Row\";\nimport { Font, rem, responsive } from \"../../utils/style\";\nimport MagicLink from \"../MagicLink\";\n\nconst PressWrapper = styled.div.attrs({ id: \"press-bar\" })`\n background-color: ${p => (p.background ? p.background : \"transparent\")};\n`;\n\nconst PressContainer = styled(Container).attrs({\n id: \"press-bar_container\",\n})`\n height: 100%;\n`;\n\nconst PressRow = styled(Row).attrs({\n id: \"press-bar_container_row\",\n})`\n height: 100%;\n`;\n\nconst PressColumn = styled.div.attrs({\n id: \"press-bar_container_row_column\",\n className: \"col-12\",\n})`\n display: flex;\n padding-top: 48px;\n padding-bottom: 50px;\n justify-content: space-evenly;\n`;\n\nconst PressQuoteWrapper = styled.div.attrs(p => ({\n id: `press-bar_container_row_column-wrapper_quote-${p.index}`,\n className: \"col-4\",\n}))`\n display: flex;\n align-items: center;\n flex-direction: column;\n text-align: center;\n`;\n\nconst PressIcon = styled.div.attrs(p => ({\n id: `press-bar_container_row_column-wrapper_quote-${p.index}_icon`,\n}))`\n margin-bottom: 14px;\n svg {\n height: 40px;\n max-width: 100%;\n }\n`;\n\nconst PressQuote = styled.p.attrs(p => ({\n id: `press-bar_container_row_column-wrapper_quote-${p.index}_quote`,\n}))`\n ${Font.circular}\n font-size: ${rem(14)};\n font-weight: 500;\n letter-spacing: 0px;\n line-height: 24px;\n margin-bottom: 0;\n width: 214px;\n ${responsive.md`\n font-size: ${rem(16)};\n line-height: 26px;\n width: 270px;\n `}\n`;\n\nconst SVGWrapper = styled.div``;\n\nconst QuoteWrapper = styled.div`\n padding-top: 10px;\n`;\n\nexport default class PressBar extends React.Component {\n render() {\n const { quotes, background } = this.props;\n\n return (\n \n \n \n \n {quotes.map((quote, i) => {\n const PressSvg = PressLogos[quote.icon];\n if (quote.link) {\n return (\n \n \n \n \n \n \n \n {quote.quote && (\n “{quote.quote.quote}”\n )}\n \n \n \n \n );\n }\n return (\n \n \n \n \n {quote.quote && (\n “{quote.quote.quote}”\n )}\n \n );\n })}\n \n \n \n \n );\n }\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { PressLogos } from \"../../utils/svg\";\nimport { Font, rem } from \"../../utils/style\";\nimport MagicLink from \"../MagicLink\";\nimport { CarouselContainer, CarouselChild } from \"../Carousel.New\";\n\nconst CarouselWrapper = styled.div.attrs({\n id: \"press-carousel_wrapper\",\n})`\n padding: 0;\n margin-bottom: 0 !important;\n\n p,\n span {\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n }\n\n div[aria-hidden=\"true\"] {\n opacity: 0.75;\n }\n *,\n &:hover {\n outline: none !important;\n }\n`;\n\nconst PressWrapper = styled.div.attrs(p => ({\n id: `press-carousel_wrapper_slide-${p.index}`,\n}))`\n background: rgba(242, 241, 245, 0.56);\n display: flex;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n margin: 0 15px;\n padding: 32px;\n text-align: center;\n height: 165px;\n`;\n\nconst PressIcon = styled.div.attrs(p => ({\n id: `press-carousel_wrapper_slide-${p.index}_icon`,\n}))`\n margin-bottom: 8px;\n`;\n\nconst PressQuote = styled.p.attrs(p => ({\n id: `press-carousel_wrapper_slide-${p.index}_icon_quote`,\n}))`\n ${Font.circular}\n font-size: ${rem(14)};\n line-height: 24px;\n font-weight: 500;\n margin-bottom: 0;\n max-width: 231px;\n`;\n\nexport default class PressCarousel extends React.Component {\n render() {\n const { slides } = this.props;\n return (\n
\n \n \n {slides.map((slide, i) => {\n const PressSvg = PressLogos[slide.icon];\n if (slide.link) {\n return (\n \n \n \n \n \n “{slide.quote.quote}”\n \n \n \n \n );\n }\n return (\n \n \n \n \n \n “{slide.quote.quote}”\n \n \n );\n })}\n \n \n
\n );\n }\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { media, atLeast } from \"../../utils/style\";\nimport PressBar from \"./PressBar\";\nimport PressCarousel from \"./PressCarousel\";\nimport $ from \"jquery\";\n\nconst PressModuleWrapper = styled.section.attrs({\n id: \"product-press-module\",\n})`\n ${media.mobile`\n margin: 40px auto;\n `};\n`;\n\nexport default class PressModule extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n atLeastTablet: true,\n };\n }\n\n componentDidMount() {\n this.timeout = setTimeout(this.handleResize.bind(this), 200);\n $(window).on(\"resize.pressModule\", this.handleResize.bind(this));\n }\n\n componentWillUnmount() {\n if (this.timeout) clearTimeout(this.timeout);\n $(window).off(\"resize.pressModule\");\n }\n\n handleResize() {\n this.setState({ atLeastTablet: atLeast.tablet() });\n }\n\n render() {\n const { atLeastTablet } = this.state;\n const { quotes, background } = this.props;\n\n return (\n \n {atLeastTablet ? (\n \n ) : (\n \n )}\n \n );\n }\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { Font, Color, rem, media } from \"../../utils/style\";\nimport ReviewStars from \"./ReviewStars\";\nimport Container from \"../Container\";\nimport Row from \"../Row\";\nimport ReviewPolicyModal from \"../reviews/ReviewPolicyModal\";\nimport Text from \"../Text\";\n\nconst Wrapper = styled.div.attrs({\n className:\n \"col-12 col-sm-10 col-md-8 offset-sm-1 offset-md-2 text-center d-flex align-items-center justify-content-center flex-column\",\n})`\n margin-bottom: 56px;\n\n ${media.tablet`\n margin-bottom: 40px;\n `};\n`;\n\nconst Rating = styled.h2.attrs({\n className: \"text-center m-0 mb-3 mb-md-4\",\n})`\n font-size: ${rem(30)};\n line-height: ${rem(36)};\n letter-spacing: -0.4px;\n font-weight: 500;\n color: ${Color.ritualBlue};\n\n ${media.tablet`\n font-size: ${rem(22)};\n line-height: ${rem(32)};\n letter-spacing: -0.2px;\n `};\n`;\n\nconst Paragraph = styled.p.attrs({\n className: \"text-center m-0\",\n})`\n ${Font.dutch}\n font-size: ${rem(16)};\n line-height: ${rem(26)};\n max-width: 770px;\n`;\n\nconst StarWrapper = styled.div.attrs({\n className: \"d-flex m-0 mb-3\",\n})`\n .ReviewStars--star {\n width: 40px;\n height: 42px;\n\n ${media.tablet`\n width: 32px;\n height: 34px;\n `};\n }\n`;\n\nconst LearnMoreButton = styled.a.attrs({\n className: \"-underline\",\n})`\n border-width: 1px !important;\n white-space: nowrap;\n`;\n\nexport default class AggregatedStarRating extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n modalIsOpen: false,\n };\n this.openModal = this.openModal.bind(this);\n this.closeModal = this.closeModal.bind(this);\n }\n openModal(e) {\n e.preventDefault();\n this.setState({ modalIsOpen: true });\n }\n closeModal() {\n this.setState({ modalIsOpen: false });\n }\n render() {\n let { score } = this.props;\n let roundedScore = Math.round(score * 10) / 10;\n\n return (\n \n \n \n \n \n \n \n \n \n \n {\" \"}\n \n \n \n .\n \n \n \n\n \n \n );\n }\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { media, rem, Font, responsive } from \"../../utils/style\";\nimport ReviewStars from \"./ReviewStars\";\nimport sanitizeHtml from \"isomorphic-html-sanitize\";\nimport { Icons } from \"../../utils/svg\";\nimport Text from \"../Text\";\nimport intl from \"../../services/intl\";\n\nconst ReviewTitle = styled.h2`\n padding: 16px 0 0 40px;\n font-size: ${rem(22)};\n font-weight: 500;\n margin: 0;\n\n ${media.tablet`\n padding-left: ${rem(24)};\n font-size: ${rem(18)};\n `};\n`;\n\nconst Wrapper = styled.div`\n height: 100%;\n width: 100%;\n`;\n\nconst StarWrapper = styled.div.attrs({\n className: \"d-flex\",\n})`\n padding: 0 40px;\n\n .ReviewStars--star {\n width: 17px;\n height: 16px;\n margin-right: 0;\n\n ${media.tablet`\n width: 17px;\n height: 16px;\n `};\n }\n\n ${media.tablet`\n padding-left: 24px;\n `};\n`;\n\nconst ReviewComment = styled.div.attrs({\n className: \"mb-4\",\n})`\n ${p => (p.helpful ? \"padding: 8px 24px;\" : \"padding: 8px 24px 0;\")};\n\n ${responsive.sm`\n padding: 16px 40px;\n `}\n\n h2 {\n font-size: ${rem(16)};\n line-height: ${rem(26)};\n }\n`;\n\nconst ReviewCommentContent = styled.p.attrs({\n className: \"m-0\",\n})`\n ${Font.dutch};\n font-size: ${rem(16)};\n line-height: ${rem(26)};\n`;\n\nconst TitleContainer = styled.p`\n ${Font.circular}\n font-size: ${rem(14)};\n line-height: ${rem(24)};\n font-weight: 500;\n color: rgba(20, 43, 111, 0.56);\n padding: 40px 40px 24px;\n margin: 0;\n\n ${media.tablet`\n padding: 24px;\n `}\n`;\n\nconst ReadMoreButton = styled.button.attrs({\n className: \"d-flex align-items-center m-0 p-0 mt-3 mt-md-4\",\n})`\n background: none;\n border: none;\n color: #142b6f;\n font-size: ${rem(14)};\n font-weight: 500;\n transition: opacity 200ms ease-in-out;\n\n &:hover {\n cursor: pointer;\n opacity: 0.56;\n }\n\n .icon-down {\n display: block;\n position: relative;\n width: 12px;\n height: 7px;\n margin-left: 6px;\n\n svg {\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n }\n }\n`;\n\nexport default class HighlightedReview extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n displayLongContent: false,\n };\n }\n\n handleReadMoreClick() {\n this.setState({ displayLongContent: true });\n }\n\n renderComment() {\n const { displayLongContent } = this.state;\n let { content, helpful } = this.props;\n\n content = sanitizeHtml(content, { allowedTags: [] });\n\n const shouldTruncate = !displayLongContent && content.length > 250;\n\n if (shouldTruncate) {\n content = content.slice(0, 250).concat(\"… \");\n }\n\n const shouldDisplayReadMoreButton = !displayLongContent && shouldTruncate;\n\n return (\n \n \n {shouldDisplayReadMoreButton && (\n \n \n \n \n \n \n )}\n \n );\n }\n\n render() {\n let { score, title, helpful } = this.props;\n\n title = sanitizeHtml(title, { allowedTags: [] });\n\n const reviewTitle = helpful\n ? intl.t(\"reviews.highighted.title-helpful\", \"Making Us Blush\")\n : intl.t(\"reviews.highighted.title-not-helpful\", \"Keeping It Real\");\n\n return (\n \n {reviewTitle}\n \n \n \n \n {this.renderComment()}\n \n );\n }\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport Container from \"../Container\";\nimport Row from \"../Row\";\nimport HighlightedReview from \"./HighlightedReview\";\nimport { media, rem } from \"../../utils/style\";\n\nconst ReviewWrapper = styled.div.attrs({\n className: \"col-xs-12 col-sm-6\",\n})`\n border: 2px solid;\n padding: 0 !important;\n\n &:first-child {\n border-right: 1px solid;\n }\n\n ${media.mobile`\n margin: 0 10px;\n `};\n`;\n\nconst MainContainer = styled(Container).attrs({\n className: \"col-xs-12 container\",\n})`\n font-size: ${rem(22)};\n padding-bottom: 56px;\n\n .row {\n justify-content: center;\n position: relative;\n }\n\n .review-wrapper:first-child {\n border-right: 0;\n }\n\n ${media.tablet`\n padding-bottom: 40px;\n `} ${media.mobile`\n .review-wrapper:first-child {\n border-right: 2px solid;\n border-bottom: 0;\n }\n `};\n`;\n\nconst VsDiv = styled.div.attrs({\n className: \"d-flex align-items-center justify-content-center\",\n})`\n background-color: white;\n border: 2px solid;\n border-radius: 20px;\n position: absolute;\n top: calc(50% - 20px);\n left: calc(100% - 20px);\n height: 40px;\n width: 40px;\n text-transform: uppercase;\n font-size: ${rem(12)};\n line-height: ${rem(20)};\n letter-spacing: 0.8px;\n z-index: 1;\n\n ${media.mobile`\n left: calc(50% - 20px);\n top: calc(100% - 20px);\n `};\n`;\n\nexport default class MostHelpfulReviews extends React.Component {\n render() {\n const { mostHelpful, mostCritical } = this.props;\n\n return (\n \n \n \n \n \n vs\n \n \n \n \n \n \n \n );\n }\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { graphql } from \"gatsby\";\n\n// Services\nimport intl from \"../services/intl\";\n\n// Components\nimport ProductHero from \"../components/product/ProductHero\";\nimport IngredientsOverview from \"../components/product/IngredientsOverview\";\nimport QAOverview from \"../components/product/QAOverview\";\nimport ProductSEO from \"../components/seo/Product\";\nimport ValueProps from \"../components/product/ValueProps\";\nimport Timeline from \"../components/product/Timeline\";\nimport Experts from \"../components/product/Experts\";\nimport FeaturedArticles from \"../components/home/FeaturedArticles\";\nimport DownloadGuide from \"../components/product/DownloadGuide\";\nimport Press from \"../components/home/Press\";\nimport PressModule from \"../components/home/PressModule\";\nimport Testimonials from \"../components/testimonials/Testimonials\";\nimport Reviews from \"../components/product/Reviews\";\nimport ScrollMagicController from \"../components/ScrollMagicController\";\nimport AggregatedStarRating from \"../components/reviews/AggregatedStarRating\";\nimport MostHelpfulReviews from \"../components/reviews/MostHelpfulReviews\";\nimport CircleNew from \"../components/home/Circle.New\";\nimport PillSection from \"../components/product/PillSection\";\nimport StickyProductNav from \"../components/global/StickyProductNav\";\n\n// Utils\nimport { responsive } from \"../utils/style\";\nimport NameMap from \"../utils/nameMap\";\nimport { variation } from \"../utils/launchDarkly\";\nimport metrics from \"../utils/metrics\";\nimport { trackProductViewed } from \"../utils/tracking/product\";\n\n// Store\nimport { connect } from \"react-redux\";\nimport productSelectors from \"../store/product/selectors\";\nimport { updateFooterUSPNotice } from \"../store/navigation/actions\";\n\n// Styled Elements\nconst TestimonialsWrapper = styled.div`\n margin-top: 56px;\n margin-bottom: 56px;\n`;\n\nconst ValuePropsWrapper = styled.section.attrs({\n \"aria-label\": \"Product Value Propositions\",\n})`\n margin-bottom: 40px;\n\n ${responsive.md`\n margin-bottom: 56px;\n `}\n`;\n\nconst DefaultModuleOrder = [\"benefits\", \"ingredients\", \"pill\"];\nconst KidsModuleOrder = [\"pill\", \"ingredients\", \"benefits\"];\n\nexport class ProductPageTemplate extends React.Component {\n constructor(props) {\n super(props);\n\n const { mostHelpful } = props.data;\n\n let {\n name,\n slug,\n sku,\n summary,\n pageTitle,\n pageDescription,\n socialImage,\n stockStatus,\n price,\n } = props.data.allContentfulProduct.edges[0].node;\n\n const { reviewRatingsMap, reviewCountsMap } = props;\n\n let productNameMap = NameMap(name);\n let { productId, planId, productType } = props.pageContext;\n\n this.moduleOrder =\n sku === \"EFKIDS90\" ? KidsModuleOrder : DefaultModuleOrder;\n\n this.state = {\n controller: null,\n planId,\n productId,\n productType,\n seo: {\n pagePath: `products/${slug}`,\n title: pageTitle,\n description: pageDescription,\n image: {\n url: socialImage.file.url,\n width: socialImage.file.details.image.width,\n height: socialImage.file.details.image.height,\n },\n productAttributes: {\n ratingValue: reviewRatingsMap[productId],\n reviewCount: reviewCountsMap[productId],\n topReview: mostHelpful,\n // Strip non-alphanumeric characters from name\n name: productNameMap.plain,\n description: summary,\n productId,\n sku,\n brand: \"Ritual\",\n availability: stockStatus,\n condition: \"new\",\n category:\n \"525 - Health & Beauty > Health Care > Fitness & Nutrition > Vitamins & Supplements\",\n amount: price.toString(),\n currency: \"USD\",\n stockStatus,\n },\n },\n };\n }\n\n productAttributes() {\n let {\n sku,\n name,\n price,\n slug,\n socialImage,\n } = this.props.data.allContentfulProduct.edges[0].node;\n let { planId, productId } = this.state;\n let productAttributes = {\n product_id: productId,\n variant: planId,\n sku: sku,\n name: NameMap(name).plain,\n currency: \"USD\",\n price: price,\n quantity: 1,\n url: `${process.env.GATSBY_URL}/products/${slug}`,\n image_url: `https:${socialImage.file.url}`,\n nonInteraction: 0,\n };\n return productAttributes;\n }\n\n componentDidMount() {\n this.props.updatePageData({\n label: \"Product Page\",\n });\n\n this.props.updateLayoutState({\n navColor: \"#FFFFFF\",\n banner: true,\n });\n\n // TO-DO: Consider a CMS variable instead of hardcoding\n this.props.updateFooterUSPNotice(this.productAttributes().sku === \"EFW60\");\n\n const showPressBar = variation(\"pdp-press-bar\");\n\n this.setState({\n controller: this.controller,\n showPressBar,\n });\n\n trackProductViewed(this.state.planId, {\n nonInteraction: false,\n });\n }\n\n componentWillUnmount() {\n this.props.updateFooterUSPNotice(false);\n\n if (this.controller) {\n this.controller.destroy();\n }\n }\n\n trackCTAClick(title, location, url, e) {\n e.preventDefault();\n metrics\n .track(\"CTA Clicked\", {\n title: title,\n nonInteraction: false,\n location: location,\n })\n .then(() => {\n window.location.href = url;\n });\n }\n\n trackProductCTAClick(title, location, e) {\n let event = {\n title: title,\n nonInteraction: false,\n location: location,\n };\n metrics.track(\"CTA Clicked\", event);\n }\n\n handlePressQuotesData = url => {\n let data = [];\n const nyt = {\n id: \"\",\n author: \"The New York Times\",\n icon: \"nyt\",\n link: \"\",\n quote: {\n quote: \"Vitamins join the ‘clean label’ bandwagon\",\n },\n };\n const popSugar = {\n id: \"\",\n author: \"Popsugar\",\n icon: \"popsugar\",\n link: \"\",\n quote: {\n quote:\n \"9 quality essential ingredients backed by research, and 100% transparency on all fronts\",\n },\n };\n const forbes = {\n id: \"\",\n author: \"Forbes\",\n icon: \"forbes\",\n link: \"\",\n quote: {\n quote: \"Ritual is reinventing vitamins for women\",\n },\n };\n const byrdie = {\n id: \"\",\n author: \"Byrdie\",\n icon: \"byrdie\",\n link: \"\",\n quote: {\n quote:\n \"This Vitamin Company Just Launched The Perfect Multivitamin For Women Over 50\",\n },\n };\n const health = {\n id: \"\",\n author: \"Health\",\n icon: \"health\",\n link: \"\",\n quote: {\n quote:\n \"Their prenatal uses a delayed-release nesting capsule to reduce nausea\",\n },\n };\n switch (url) {\n case \"/products/essential-for-women-multivitamin\":\n data.push(nyt, popSugar, forbes);\n break;\n case \"/products/essential-multivitamin-for-women-over-50\":\n data.push(nyt, byrdie, forbes);\n break;\n case \"/products/essential-prenatal-multivitamin\":\n data.push(nyt, health, forbes);\n break;\n default:\n data.push(nyt, popSugar, forbes);\n }\n return data;\n };\n\n render() {\n let { controller, productType, productId, showPressBar } = this.state;\n let product = this.props.data.allContentfulProduct.edges[0].node;\n product = {\n id: productId,\n type: productType,\n simpleName: NameMap(product.name).plain,\n ...product,\n };\n let {\n articles,\n heroBackgroundColor,\n price,\n heroFeaturedImages,\n heroZoomImages,\n headerDescription,\n pressQuotes,\n valuePropIcons,\n valuePropLabels,\n faq,\n ingredientsSubheader,\n somethingMissingTitle,\n doctorGuide,\n timelineHeading,\n timelineSubhead,\n timelinePhoto,\n timelineData,\n experts,\n ingredients,\n sku,\n pillSectionTitle,\n pillSectionImage,\n pillSectionAccordion,\n } = product;\n\n const {\n mostHelpful,\n mostCritical,\n allContentfulClinical,\n } = this.props.data;\n\n const { reviewRatingsMap, reviewCountsMap } = this.props;\n\n const clinicalData =\n allContentfulClinical.edges.length > 0\n ? allContentfulClinical.edges[0].node\n : null;\n\n let timeline = JSON.parse(timelineData.childMarkdownRemark.rawMarkdownBody);\n\n const heroButtonCta = intl.t(\"templates.product.hero-cta\", \"Add to Cart\");\n const expertsTitle = intl.t(\n \"templates.product.experts-title\",\n \"Meet Our In-House Scientists and Expert Council\",\n );\n const expertsSubhead = intl.t(\n \"templates.product.experts-subhead\",\n `We work with a lot of exceptional and thoughtful people—like the scientists, nutritionists, and medical doctors on our Scientific Advisory Board, who help guide our product innovation and clinical research.`,\n );\n\n let heroContent = {\n buttonPrice: intl.t(\"product.hero.button-price\", \"{amount} per month\", {\n amount: intl.formatCurrency(price, { round: true }),\n }),\n buttonCta: heroButtonCta,\n featuredImages: heroFeaturedImages,\n zoomImages: heroZoomImages,\n heroBackgroundColor,\n };\n\n let ingredientsOverviewContent = {\n ingredientsSubheader,\n somethingMissingTitle,\n productType,\n };\n\n let guide = {\n guideText: intl.t(\n \"templates.product.guide-text\",\n `Ready to talk to your doctor about {product}?`,\n { product: product.name.name },\n ),\n doctorGuide,\n };\n\n let productRating = {\n reviewScore: reviewRatingsMap[productId],\n reviewCount: reviewCountsMap[productId],\n };\n\n let initialReviews = this.props.data.allProductReview.edges.map(\n e => e.node,\n );\n let showTestimonials = sku.includes(\"EFW\");\n\n let productAttributes = this.productAttributes();\n\n const { offset } = this.props;\n\n let url = this.props.path;\n let newPressQuotes = this.handlePressQuotesData(url) || pressQuotes;\n let additionalQAMargin = !showTestimonials && !doctorGuide;\n\n return (\n <>\n \n\n \n\n \n\n {showPressBar && (\n \n )}\n \n \n \n\n {this.moduleOrder.map(module => {\n if (module === \"benefits\") {\n // Render the Benefits Module\n return (\n \n \n\n {\n r && (this.controller = r.controller);\n }}\n />\n \n );\n }\n // Render the Ingredients Module\n if (module === \"ingredients\") {\n return (\n \n );\n }\n // Render the PillSection Module\n if (module === \"pill\") {\n return (\n \n );\n }\n })}\n\n \n\n {doctorGuide && (\n \n )}\n\n {showTestimonials && (\n \n \n \n )}\n\n \n \n \n\n \n \n \n\n {!showPressBar && (\n \n )}\n\n {!!productRating.reviewScore && !!initialReviews.length && (\n \n \n {mostHelpful && mostCritical && (\n \n )}\n \n )}\n \n );\n }\n}\n\nconst mapStateToProps = state => ({\n reviewCountsMap: productSelectors.reviewCountsMap(state),\n reviewRatingsMap: productSelectors.reviewRatingsMap(state),\n});\n\nexport default connect(mapStateToProps, {\n updateFooterUSPNotice,\n})(ProductPageTemplate);\n\nexport const query = graphql`\n query ProductQuery($locale: String!, $slug: String!, $productId: String!) {\n mostHelpful: highlightReview(\n reviewType: { eq: \"Most Helpful\" }\n destination: { eq: \"pdp\" }\n product_slug: { eq: $slug }\n ) {\n id\n score\n content\n title\n user {\n display_name\n }\n }\n mostCritical: highlightReview(\n reviewType: { eq: \"Most Critical\" }\n destination: { eq: \"pdp\" }\n product_slug: { eq: $slug }\n ) {\n id\n score\n content\n title\n user {\n display_name\n }\n }\n allProductReview(\n sort: { fields: [created_at], order: DESC }\n filter: { product_id: { eq: $productId } }\n ) {\n edges {\n node {\n id\n product_id\n score\n votes_up\n votes_down\n content\n title\n sentiment\n created_at\n verified_buyer\n sticker\n age_range\n subscription_age\n would_recommend\n comment {\n id\n content\n created_at\n }\n user {\n user_id\n display_name\n social_image\n }\n }\n }\n }\n allContentfulProduct(\n filter: { node_locale: { eq: $locale }, slug: { eq: $slug } }\n ) {\n edges {\n node {\n name {\n name\n childMarkdownRemark {\n html\n }\n }\n stockStatus\n pillSectionTitle {\n childMarkdownRemark {\n html\n }\n }\n pillSectionImage {\n description\n fluid(maxWidth: 470, maxHeight: 470, quality: 90) {\n ...GatsbyContentfulFluid_withWebp_noBase64\n }\n }\n pillSectionAccordion {\n title\n content\n }\n summary\n headerDescription\n slug\n articles {\n __typename\n slug\n title\n previewText\n heroBackgroundColor\n heroSecondaryColor\n heroImage {\n file {\n url\n }\n desktop: fixed(\n width: 470\n height: 341\n quality: 90\n cropFocus: LEFT\n ) {\n ...GatsbyContentfulFixed_withWebp_noBase64\n }\n mobile: fixed(\n width: 470\n height: 341\n quality: 90\n cropFocus: LEFT\n ) {\n ...GatsbyContentfulFixed_withWebp_noBase64\n }\n }\n ...expandPrimaryContent\n }\n ingredients {\n __typename\n name\n slug\n benefit\n nutritionFact\n productDosages {\n childMarkdownRemark {\n rawMarkdownBody\n }\n }\n manufacturingLocation\n cardImage {\n title\n fluid(maxWidth: 500, quality: 80) {\n ...GatsbyContentfulFluid_withWebp_noBase64\n }\n }\n image {\n fluid(maxWidth: 360, quality: 80) {\n ...GatsbyContentfulFluid_withWebp_noBase64\n }\n }\n modalDescription\n modalDesktopImage {\n fluid(maxWidth: 770, quality: 80) {\n ...GatsbyContentfulFluid_withWebp_noBase64\n }\n }\n modalMobileImage {\n fluid(maxWidth: 520, quality: 80) {\n ...GatsbyContentfulFluid_withWebp_noBase64\n }\n }\n icons {\n childMarkdownRemark {\n rawMarkdownBody\n }\n }\n }\n valuePropIcons\n valuePropLabels\n timelineHeading {\n childMarkdownRemark {\n html\n }\n }\n timelineSubhead\n timelinePhoto {\n title\n desktop: fluid(maxWidth: 470, quality: 90) {\n ...GatsbyContentfulFluid_withWebp_noBase64\n }\n mobile: fluid(maxWidth: 280, quality: 90) {\n ...GatsbyContentfulFluid_withWebp_noBase64\n }\n description\n }\n timelineData {\n childMarkdownRemark {\n rawMarkdownBody\n }\n }\n faq {\n childMarkdownRemark {\n rawMarkdownBody\n }\n }\n ingredientsSubheader {\n childMarkdownRemark {\n html\n rawMarkdownBody\n }\n }\n somethingMissingTitle\n experts {\n name\n title\n image {\n fluid(maxWidth: 80, quality: 90) {\n ...GatsbyContentfulFluid_withWebp_noBase64\n }\n }\n }\n doctorGuide {\n file {\n url\n }\n }\n price\n heroBackgroundColor\n heroFeaturedImages {\n title\n fluid(maxWidth: 555, quality: 90) {\n ...GatsbyContentfulFluid_withWebp_noBase64\n }\n description\n }\n heroZoomImages: heroFeaturedImages {\n title\n fluid(maxWidth: 1920, quality: 90) {\n ...GatsbyContentfulFluid_withWebp_noBase64\n }\n description\n }\n pressQuotes {\n author\n icon\n link\n quote {\n quote\n }\n }\n pageTitle\n pageDescription\n socialImage {\n file {\n details {\n image {\n width\n height\n }\n }\n url\n }\n }\n price\n sku\n supplementFacts {\n servingSize\n servingsPerContainer\n labels {\n dv\n }\n nutrients {\n label\n dosage\n dv\n }\n ingredients {\n label\n dosage\n dv\n }\n notations {\n label\n }\n otherIngredients\n notationReferences\n attributions {\n label\n }\n simpleIngredients {\n name\n dosage\n }\n }\n }\n }\n }\n allContentfulClinical(\n filter: { node_locale: { eq: $locale }, product: { slug: { eq: $slug } } }\n ) {\n edges {\n node {\n title {\n childMarkdownRemark {\n html\n }\n }\n firstResult {\n childMarkdownRemark {\n html\n }\n }\n secondResult {\n childMarkdownRemark {\n html\n }\n }\n summaryTitle {\n childMarkdownRemark {\n html\n }\n }\n summary {\n childMarkdownRemark {\n html\n }\n }\n }\n }\n }\n }\n`;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getPrefix = getPrefix;\nexports.browserPrefixToKey = browserPrefixToKey;\nexports.browserPrefixToStyle = browserPrefixToStyle;\nexports.default = void 0;\nvar prefixes = ['Moz', 'Webkit', 'O', 'ms'];\n\nfunction getPrefix()\n/*: string*/\n{\n var prop\n /*: string*/\n = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'transform'; // Checking specifically for 'window.document' is for pseudo-browser server-side\n // environments that define 'window' as the global context.\n // E.g. React-rails (see https://github.com/reactjs/react-rails/pull/84)\n\n if (typeof window === 'undefined' || typeof window.document === 'undefined') return '';\n var style = window.document.documentElement.style;\n if (prop in style) return '';\n\n for (var i = 0; i < prefixes.length; i++) {\n if (browserPrefixToKey(prop, prefixes[i]) in style) return prefixes[i];\n }\n\n return '';\n}\n\nfunction browserPrefixToKey(prop\n/*: string*/\n, prefix\n/*: string*/\n)\n/*: string*/\n{\n return prefix ? \"\".concat(prefix).concat(kebabToTitleCase(prop)) : prop;\n}\n\nfunction browserPrefixToStyle(prop\n/*: string*/\n, prefix\n/*: string*/\n)\n/*: string*/\n{\n return prefix ? \"-\".concat(prefix.toLowerCase(), \"-\").concat(prop) : prop;\n}\n\nfunction kebabToTitleCase(str\n/*: string*/\n)\n/*: string*/\n{\n var out = '';\n var shouldCapitalize = true;\n\n for (var i = 0; i < str.length; i++) {\n if (shouldCapitalize) {\n out += str[i].toUpperCase();\n shouldCapitalize = false;\n } else if (str[i] === '-') {\n shouldCapitalize = true;\n } else {\n out += str[i];\n }\n }\n\n return out;\n} // Default export is the prefix itself, like 'Moz', 'Webkit', etc\n// Note that you may have to re-test for certain things; for instance, Chrome 50\n// can handle unprefixed `transform`, but not unprefixed `user-select`\n\n\nvar _default = getPrefix();\n\nexports.default = _default;","export function stripWrappingParagraphTag(copy) {\n return copy.replace(\"

\", \"\").replace(\"

\", \"\");\n}\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _reactDom = _interopRequireDefault(require(\"react-dom\"));\n\nvar _domFns = require(\"./utils/domFns\");\n\nvar _positionFns = require(\"./utils/positionFns\");\n\nvar _shims = require(\"./utils/shims\");\n\nvar _log = _interopRequireDefault(require(\"./utils/log\"));\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n}\n\nfunction _getRequireWildcardCache() {\n if (typeof WeakMap !== \"function\") return null;\n var cache = new WeakMap();\n\n _getRequireWildcardCache = function _getRequireWildcardCache() {\n return cache;\n };\n\n return cache;\n}\n\nfunction _interopRequireWildcard(obj) {\n if (obj && obj.__esModule) {\n return obj;\n }\n\n if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") {\n return {\n default: obj\n };\n }\n\n var cache = _getRequireWildcardCache();\n\n if (cache && cache.has(obj)) {\n return cache.get(obj);\n }\n\n var newObj = {};\n var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;\n\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;\n\n if (desc && (desc.get || desc.set)) {\n Object.defineProperty(newObj, key, desc);\n } else {\n newObj[key] = obj[key];\n }\n }\n }\n\n newObj.default = obj;\n\n if (cache) {\n cache.set(obj, newObj);\n }\n\n return newObj;\n}\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _createSuper(Derived) {\n var hasNativeReflectConstruct = _isNativeReflectConstruct();\n\n return function () {\n var Super = _getPrototypeOf(Derived),\n result;\n\n if (hasNativeReflectConstruct) {\n var NewTarget = _getPrototypeOf(this).constructor;\n\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n\n return _possibleConstructorReturn(this, result);\n };\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n} // Simple abstraction for dragging events names.\n\n\nvar eventsFor = {\n touch: {\n start: 'touchstart',\n move: 'touchmove',\n stop: 'touchend'\n },\n mouse: {\n start: 'mousedown',\n move: 'mousemove',\n stop: 'mouseup'\n }\n}; // Default to mouse events.\n\nvar dragEventFor = eventsFor.mouse;\n/*:: type DraggableCoreState = {\n dragging: boolean,\n lastX: number,\n lastY: number,\n touchIdentifier: ?number\n};*/\n\n/*:: export type DraggableData = {\n node: HTMLElement,\n x: number, y: number,\n deltaX: number, deltaY: number,\n lastX: number, lastY: number,\n};*/\n\n/*:: export type DraggableEventHandler = (e: MouseEvent, data: DraggableData) => void;*/\n\n/*:: export type ControlPosition = {x: number, y: number};*/\n\n/*:: export type PositionOffsetControlPosition = {x: number|string, y: number|string};*/\n\n/*:: export type DraggableCoreProps = {\n allowAnyClick: boolean,\n cancel: string,\n children: ReactElement,\n disabled: boolean,\n enableUserSelectHack: boolean,\n offsetParent: HTMLElement,\n grid: [number, number],\n handle: string,\n nodeRef?: ?React.ElementRef,\n onStart: DraggableEventHandler,\n onDrag: DraggableEventHandler,\n onStop: DraggableEventHandler,\n onMouseDown: (e: MouseEvent) => void,\n scale: number,\n};*/\n//\n// Define .\n//\n// is for advanced usage of . It maintains minimal internal state so it can\n// work well with libraries that require more control over the element.\n//\n\nvar DraggableCore = /*#__PURE__*/function (_React$Component) {\n _inherits(DraggableCore, _React$Component);\n\n var _super = _createSuper(DraggableCore);\n\n function DraggableCore() {\n var _this;\n\n _classCallCheck(this, DraggableCore);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"state\", {\n dragging: false,\n // Used while dragging to determine deltas.\n lastX: NaN,\n lastY: NaN,\n touchIdentifier: null\n });\n\n _defineProperty(_assertThisInitialized(_this), \"mounted\", false);\n\n _defineProperty(_assertThisInitialized(_this), \"handleDragStart\", function (e) {\n // Make it possible to attach event handlers on top of this one.\n _this.props.onMouseDown(e); // Only accept left-clicks.\n\n\n if (!_this.props.allowAnyClick && typeof e.button === 'number' && e.button !== 0) return false; // Get nodes. Be sure to grab relative document (could be iframed)\n\n var thisNode = _this.findDOMNode();\n\n if (!thisNode || !thisNode.ownerDocument || !thisNode.ownerDocument.body) {\n throw new Error(' not mounted on DragStart!');\n }\n\n var ownerDocument = thisNode.ownerDocument; // Short circuit if handle or cancel prop was provided and selector doesn't match.\n\n if (_this.props.disabled || !(e.target instanceof ownerDocument.defaultView.Node) || _this.props.handle && !(0, _domFns.matchesSelectorAndParentsTo)(e.target, _this.props.handle, thisNode) || _this.props.cancel && (0, _domFns.matchesSelectorAndParentsTo)(e.target, _this.props.cancel, thisNode)) {\n return;\n } // Prevent scrolling on mobile devices, like ipad/iphone.\n // Important that this is after handle/cancel.\n\n\n if (e.type === 'touchstart') e.preventDefault(); // Set touch identifier in component state if this is a touch event. This allows us to\n // distinguish between individual touches on multitouch screens by identifying which\n // touchpoint was set to this element.\n\n var touchIdentifier = (0, _domFns.getTouchIdentifier)(e);\n\n _this.setState({\n touchIdentifier: touchIdentifier\n }); // Get the current drag point from the event. This is used as the offset.\n\n\n var position = (0, _positionFns.getControlPosition)(e, touchIdentifier, _assertThisInitialized(_this));\n if (position == null) return; // not possible but satisfies flow\n\n var x = position.x,\n y = position.y; // Create an event object with all the data parents need to make a decision here.\n\n var coreEvent = (0, _positionFns.createCoreData)(_assertThisInitialized(_this), x, y);\n (0, _log.default)('DraggableCore: handleDragStart: %j', coreEvent); // Call event handler. If it returns explicit false, cancel.\n\n (0, _log.default)('calling', _this.props.onStart);\n\n var shouldUpdate = _this.props.onStart(e, coreEvent);\n\n if (shouldUpdate === false || _this.mounted === false) return; // Add a style to the body to disable user-select. This prevents text from\n // being selected all over the page.\n\n if (_this.props.enableUserSelectHack) (0, _domFns.addUserSelectStyles)(ownerDocument); // Initiate dragging. Set the current x and y as offsets\n // so we know how much we've moved during the drag. This allows us\n // to drag elements around even if they have been moved, without issue.\n\n _this.setState({\n dragging: true,\n lastX: x,\n lastY: y\n }); // Add events to the document directly so we catch when the user's mouse/touch moves outside of\n // this element. We use different events depending on whether or not we have detected that this\n // is a touch-capable device.\n\n\n (0, _domFns.addEvent)(ownerDocument, dragEventFor.move, _this.handleDrag);\n (0, _domFns.addEvent)(ownerDocument, dragEventFor.stop, _this.handleDragStop);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"handleDrag\", function (e) {\n // Get the current drag point from the event. This is used as the offset.\n var position = (0, _positionFns.getControlPosition)(e, _this.state.touchIdentifier, _assertThisInitialized(_this));\n if (position == null) return;\n var x = position.x,\n y = position.y; // Snap to grid if prop has been provided\n\n if (Array.isArray(_this.props.grid)) {\n var deltaX = x - _this.state.lastX,\n deltaY = y - _this.state.lastY;\n\n var _snapToGrid = (0, _positionFns.snapToGrid)(_this.props.grid, deltaX, deltaY);\n\n var _snapToGrid2 = _slicedToArray(_snapToGrid, 2);\n\n deltaX = _snapToGrid2[0];\n deltaY = _snapToGrid2[1];\n if (!deltaX && !deltaY) return; // skip useless drag\n\n x = _this.state.lastX + deltaX, y = _this.state.lastY + deltaY;\n }\n\n var coreEvent = (0, _positionFns.createCoreData)(_assertThisInitialized(_this), x, y);\n (0, _log.default)('DraggableCore: handleDrag: %j', coreEvent); // Call event handler. If it returns explicit false, trigger end.\n\n var shouldUpdate = _this.props.onDrag(e, coreEvent);\n\n if (shouldUpdate === false || _this.mounted === false) {\n try {\n // $FlowIgnore\n _this.handleDragStop(new MouseEvent('mouseup'));\n } catch (err) {\n // Old browsers\n var event = document.createEvent('MouseEvents')\n /*: any*/\n ; // I see why this insanity was deprecated\n // $FlowIgnore\n\n event.initMouseEvent('mouseup', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n\n _this.handleDragStop(event);\n }\n\n return;\n }\n\n _this.setState({\n lastX: x,\n lastY: y\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"handleDragStop\", function (e) {\n if (!_this.state.dragging) return;\n var position = (0, _positionFns.getControlPosition)(e, _this.state.touchIdentifier, _assertThisInitialized(_this));\n if (position == null) return;\n var x = position.x,\n y = position.y;\n var coreEvent = (0, _positionFns.createCoreData)(_assertThisInitialized(_this), x, y); // Call event handler\n\n var shouldContinue = _this.props.onStop(e, coreEvent);\n\n if (shouldContinue === false || _this.mounted === false) return false;\n\n var thisNode = _this.findDOMNode();\n\n if (thisNode) {\n // Remove user-select hack\n if (_this.props.enableUserSelectHack) (0, _domFns.removeUserSelectStyles)(thisNode.ownerDocument);\n }\n\n (0, _log.default)('DraggableCore: handleDragStop: %j', coreEvent); // Reset the el.\n\n _this.setState({\n dragging: false,\n lastX: NaN,\n lastY: NaN\n });\n\n if (thisNode) {\n // Remove event handlers\n (0, _log.default)('DraggableCore: Removing handlers');\n (0, _domFns.removeEvent)(thisNode.ownerDocument, dragEventFor.move, _this.handleDrag);\n (0, _domFns.removeEvent)(thisNode.ownerDocument, dragEventFor.stop, _this.handleDragStop);\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onMouseDown\", function (e) {\n dragEventFor = eventsFor.mouse; // on touchscreen laptops we could switch back to mouse\n\n return _this.handleDragStart(e);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onMouseUp\", function (e) {\n dragEventFor = eventsFor.mouse;\n return _this.handleDragStop(e);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onTouchStart\", function (e) {\n // We're on a touch device now, so change the event handlers\n dragEventFor = eventsFor.touch;\n return _this.handleDragStart(e);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onTouchEnd\", function (e) {\n // We're on a touch device now, so change the event handlers\n dragEventFor = eventsFor.touch;\n return _this.handleDragStop(e);\n });\n\n return _this;\n }\n\n _createClass(DraggableCore, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n this.mounted = true; // Touch handlers must be added with {passive: false} to be cancelable.\n // https://developers.google.com/web/updates/2017/01/scrolling-intervention\n\n var thisNode = this.findDOMNode();\n\n if (thisNode) {\n (0, _domFns.addEvent)(thisNode, eventsFor.touch.start, this.onTouchStart, {\n passive: false\n });\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.mounted = false; // Remove any leftover event handlers. Remove both touch and mouse handlers in case\n // some browser quirk caused a touch event to fire during a mouse move, or vice versa.\n\n var thisNode = this.findDOMNode();\n\n if (thisNode) {\n var ownerDocument = thisNode.ownerDocument;\n (0, _domFns.removeEvent)(ownerDocument, eventsFor.mouse.move, this.handleDrag);\n (0, _domFns.removeEvent)(ownerDocument, eventsFor.touch.move, this.handleDrag);\n (0, _domFns.removeEvent)(ownerDocument, eventsFor.mouse.stop, this.handleDragStop);\n (0, _domFns.removeEvent)(ownerDocument, eventsFor.touch.stop, this.handleDragStop);\n (0, _domFns.removeEvent)(thisNode, eventsFor.touch.start, this.onTouchStart, {\n passive: false\n });\n if (this.props.enableUserSelectHack) (0, _domFns.removeUserSelectStyles)(ownerDocument);\n }\n } // React Strict Mode compatibility: if `nodeRef` is passed, we will use it instead of trying to find\n // the underlying DOM node ourselves. See the README for more information.\n\n }, {\n key: \"findDOMNode\",\n value: function findDOMNode()\n /*: ?HTMLElement*/\n {\n return this.props.nodeRef ? this.props.nodeRef.current : _reactDom.default.findDOMNode(this);\n }\n }, {\n key: \"render\",\n value: function render() {\n // Reuse the child provided\n // This makes it flexible to use whatever element is wanted (div, ul, etc)\n return React.cloneElement(React.Children.only(this.props.children), {\n // Note: mouseMove handler is attached to document so it will still function\n // when the user drags quickly and leaves the bounds of the element.\n onMouseDown: this.onMouseDown,\n onMouseUp: this.onMouseUp,\n // onTouchStart is added on `componentDidMount` so they can be added with\n // {passive: false}, which allows it to cancel. See \n // https://developers.google.com/web/updates/2017/01/scrolling-intervention\n onTouchEnd: this.onTouchEnd\n });\n }\n }]);\n\n return DraggableCore;\n}(React.Component);\n\nexports.default = DraggableCore;\n\n_defineProperty(DraggableCore, \"displayName\", 'DraggableCore');\n\n_defineProperty(DraggableCore, \"propTypes\", {\n /**\n * `allowAnyClick` allows dragging using any mouse button.\n * By default, we only accept the left button.\n *\n * Defaults to `false`.\n */\n allowAnyClick: _propTypes.default.bool,\n\n /**\n * `disabled`, if true, stops the from dragging. All handlers,\n * with the exception of `onMouseDown`, will not fire.\n */\n disabled: _propTypes.default.bool,\n\n /**\n * By default, we add 'user-select:none' attributes to the document body\n * to prevent ugly text selection during drag. If this is causing problems\n * for your app, set this to `false`.\n */\n enableUserSelectHack: _propTypes.default.bool,\n\n /**\n * `offsetParent`, if set, uses the passed DOM node to compute drag offsets\n * instead of using the parent node.\n */\n offsetParent: function offsetParent(props\n /*: DraggableCoreProps*/\n , propName\n /*: $Keys*/\n ) {\n if (props[propName] && props[propName].nodeType !== 1) {\n throw new Error('Draggable\\'s offsetParent must be a DOM Node.');\n }\n },\n\n /**\n * `grid` specifies the x and y that dragging should snap to.\n */\n grid: _propTypes.default.arrayOf(_propTypes.default.number),\n\n /**\n * `handle` specifies a selector to be used as the handle that initiates drag.\n *\n * Example:\n *\n * ```jsx\n * let App = React.createClass({\n * render: function () {\n * return (\n * \n *
\n *
Click me to drag
\n *
This is some other content
\n *
\n *
\n * );\n * }\n * });\n * ```\n */\n handle: _propTypes.default.string,\n\n /**\n * `cancel` specifies a selector to be used to prevent drag initialization.\n *\n * Example:\n *\n * ```jsx\n * let App = React.createClass({\n * render: function () {\n * return(\n * \n *
\n *
You can't drag from here
\n *
Dragging here works fine
\n *
\n *
\n * );\n * }\n * });\n * ```\n */\n cancel: _propTypes.default.string,\n\n /* If running in React Strict mode, ReactDOM.findDOMNode() is deprecated.\n * Unfortunately, in order for to work properly, we need raw access\n * to the underlying DOM node. If you want to avoid the warning, pass a `nodeRef`\n * as in this example:\n *\n * function MyComponent() {\n * const nodeRef = React.useRef(null);\n * return (\n * \n *
Example Target
\n *
\n * );\n * }\n *\n * This can be used for arbitrarily nested components, so long as the ref ends up\n * pointing to the actual child DOM node and not a custom component.\n */\n nodeRef: _propTypes.default.object,\n\n /**\n * Called when dragging starts.\n * If this function returns the boolean false, dragging will be canceled.\n */\n onStart: _propTypes.default.func,\n\n /**\n * Called while dragging.\n * If this function returns the boolean false, dragging will be canceled.\n */\n onDrag: _propTypes.default.func,\n\n /**\n * Called when dragging stops.\n * If this function returns the boolean false, the drag will remain active.\n */\n onStop: _propTypes.default.func,\n\n /**\n * A workaround option which can be passed if onMouseDown needs to be accessed,\n * since it'll always be blocked (as there is internal use of onMouseDown)\n */\n onMouseDown: _propTypes.default.func,\n\n /**\n * `scale`, if set, applies scaling while dragging an element\n */\n scale: _propTypes.default.number,\n\n /**\n * These properties should be defined on the child, not here.\n */\n className: _shims.dontSetMe,\n style: _shims.dontSetMe,\n transform: _shims.dontSetMe\n});\n\n_defineProperty(DraggableCore, \"defaultProps\", {\n allowAnyClick: false,\n // by default only accept left click\n cancel: null,\n disabled: false,\n enableUserSelectHack: true,\n offsetParent: null,\n handle: null,\n grid: null,\n transform: null,\n onStart: function onStart() {},\n onDrag: function onDrag() {},\n onStop: function onStop() {},\n onMouseDown: function onMouseDown() {},\n scale: 1\n});","/*!\n Copyright (c) 2017 Jed Watson.\n Licensed under the MIT License (MIT), see\n http://jedwatson.github.io/classnames\n*/\n\n/* global define */\n(function () {\n 'use strict';\n\n var hasOwn = {}.hasOwnProperty;\n\n function classNames() {\n var classes = [];\n\n for (var i = 0; i < arguments.length; i++) {\n var arg = arguments[i];\n if (!arg) continue;\n var argType = typeof arg;\n\n if (argType === 'string' || argType === 'number') {\n classes.push(arg);\n } else if (Array.isArray(arg) && arg.length) {\n var inner = classNames.apply(null, arg);\n\n if (inner) {\n classes.push(inner);\n }\n } else if (argType === 'object') {\n for (var key in arg) {\n if (hasOwn.call(arg, key) && arg[key]) {\n classes.push(key);\n }\n }\n }\n }\n\n return classes.join(' ');\n }\n\n if (typeof module !== 'undefined' && module.exports) {\n classNames.default = classNames;\n module.exports = classNames;\n } else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n // register as 'classnames', consistent with npm package name\n define('classnames', [], function () {\n return classNames;\n });\n } else {\n window.classNames = classNames;\n }\n})();","import React from \"react\";\nimport ScrollMagic from \"scrollmagic\";\n\nexport default class ScrollMagicController extends React.Component {\n constructor(props) {\n super(props);\n this.controller = null;\n }\n componentDidMount() {\n this.controller = new ScrollMagic.Controller();\n }\n render() {\n return null;\n }\n}\n","// Utils\nimport metrics from \"../metrics\";\nimport { getPropertiesForProduct } from \"./helpers\";\n\nexport function trackProductViewed(planId, additionalProperties) {\n const productProperties = getPropertiesForProduct(planId);\n\n let properties = {\n products: [productProperties],\n };\n\n properties = { ...properties, ...productProperties, ...additionalProperties };\n\n metrics.track(\"Product Viewed\", properties, {\n addTraitsToContext: true,\n addEmail: true,\n addFacebookCookies: true,\n });\n}\n","\"use strict\";\n\nvar _require = require('./Draggable'),\n Draggable = _require.default,\n DraggableCore = _require.DraggableCore; // Previous versions of this lib exported as the root export. As to no-// them, or TypeScript, we export *both* as the root and as 'default'.\n// See https://github.com/mzabriskie/react-draggable/pull/254\n// and https://github.com/mzabriskie/react-draggable/issues/266\n\n\nmodule.exports = Draggable;\nmodule.exports.default = Draggable;\nmodule.exports.DraggableCore = DraggableCore;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getBoundPosition = getBoundPosition;\nexports.snapToGrid = snapToGrid;\nexports.canDragX = canDragX;\nexports.canDragY = canDragY;\nexports.getControlPosition = getControlPosition;\nexports.createCoreData = createCoreData;\nexports.createDraggableData = createDraggableData;\n\nvar _shims = require(\"./shims\");\n\nvar _domFns = require(\"./domFns\");\n\nfunction getBoundPosition(draggable\n/*: Draggable*/\n, x\n/*: number*/\n, y\n/*: number*/\n)\n/*: [number, number]*/\n{\n // If no bounds, short-circuit and move on\n if (!draggable.props.bounds) return [x, y]; // Clone new bounds\n\n var bounds = draggable.props.bounds;\n bounds = typeof bounds === 'string' ? bounds : cloneBounds(bounds);\n var node = findDOMNode(draggable);\n\n if (typeof bounds === 'string') {\n var ownerDocument = node.ownerDocument;\n var ownerWindow = ownerDocument.defaultView;\n var boundNode;\n\n if (bounds === 'parent') {\n boundNode = node.parentNode;\n } else {\n boundNode = ownerDocument.querySelector(bounds);\n }\n\n if (!(boundNode instanceof ownerWindow.HTMLElement)) {\n throw new Error('Bounds selector \"' + bounds + '\" could not find an element.');\n }\n\n var nodeStyle = ownerWindow.getComputedStyle(node);\n var boundNodeStyle = ownerWindow.getComputedStyle(boundNode); // Compute bounds. This is a pain with padding and offsets but this gets it exactly right.\n\n bounds = {\n left: -node.offsetLeft + (0, _shims.int)(boundNodeStyle.paddingLeft) + (0, _shims.int)(nodeStyle.marginLeft),\n top: -node.offsetTop + (0, _shims.int)(boundNodeStyle.paddingTop) + (0, _shims.int)(nodeStyle.marginTop),\n right: (0, _domFns.innerWidth)(boundNode) - (0, _domFns.outerWidth)(node) - node.offsetLeft + (0, _shims.int)(boundNodeStyle.paddingRight) - (0, _shims.int)(nodeStyle.marginRight),\n bottom: (0, _domFns.innerHeight)(boundNode) - (0, _domFns.outerHeight)(node) - node.offsetTop + (0, _shims.int)(boundNodeStyle.paddingBottom) - (0, _shims.int)(nodeStyle.marginBottom)\n };\n } // Keep x and y below right and bottom limits...\n\n\n if ((0, _shims.isNum)(bounds.right)) x = Math.min(x, bounds.right);\n if ((0, _shims.isNum)(bounds.bottom)) y = Math.min(y, bounds.bottom); // But above left and top limits.\n\n if ((0, _shims.isNum)(bounds.left)) x = Math.max(x, bounds.left);\n if ((0, _shims.isNum)(bounds.top)) y = Math.max(y, bounds.top);\n return [x, y];\n}\n\nfunction snapToGrid(grid\n/*: [number, number]*/\n, pendingX\n/*: number*/\n, pendingY\n/*: number*/\n)\n/*: [number, number]*/\n{\n var x = Math.round(pendingX / grid[0]) * grid[0];\n var y = Math.round(pendingY / grid[1]) * grid[1];\n return [x, y];\n}\n\nfunction canDragX(draggable\n/*: Draggable*/\n)\n/*: boolean*/\n{\n return draggable.props.axis === 'both' || draggable.props.axis === 'x';\n}\n\nfunction canDragY(draggable\n/*: Draggable*/\n)\n/*: boolean*/\n{\n return draggable.props.axis === 'both' || draggable.props.axis === 'y';\n} // Get {x, y} positions from event.\n\n\nfunction getControlPosition(e\n/*: MouseTouchEvent*/\n, touchIdentifier\n/*: ?number*/\n, draggableCore\n/*: DraggableCore*/\n)\n/*: ?ControlPosition*/\n{\n var touchObj = typeof touchIdentifier === 'number' ? (0, _domFns.getTouch)(e, touchIdentifier) : null;\n if (typeof touchIdentifier === 'number' && !touchObj) return null; // not the right touch\n\n var node = findDOMNode(draggableCore); // User can provide an offsetParent if desired.\n\n var offsetParent = draggableCore.props.offsetParent || node.offsetParent || node.ownerDocument.body;\n return (0, _domFns.offsetXYFromParent)(touchObj || e, offsetParent, draggableCore.props.scale);\n} // Create an data object exposed by 's events\n\n\nfunction createCoreData(draggable\n/*: DraggableCore*/\n, x\n/*: number*/\n, y\n/*: number*/\n)\n/*: DraggableData*/\n{\n var state = draggable.state;\n var isStart = !(0, _shims.isNum)(state.lastX);\n var node = findDOMNode(draggable);\n\n if (isStart) {\n // If this is our first move, use the x and y as last coords.\n return {\n node: node,\n deltaX: 0,\n deltaY: 0,\n lastX: x,\n lastY: y,\n x: x,\n y: y\n };\n } else {\n // Otherwise calculate proper values.\n return {\n node: node,\n deltaX: x - state.lastX,\n deltaY: y - state.lastY,\n lastX: state.lastX,\n lastY: state.lastY,\n x: x,\n y: y\n };\n }\n} // Create an data exposed by 's events\n\n\nfunction createDraggableData(draggable\n/*: Draggable*/\n, coreData\n/*: DraggableData*/\n)\n/*: DraggableData*/\n{\n var scale = draggable.props.scale;\n return {\n node: coreData.node,\n x: draggable.state.x + coreData.deltaX / scale,\n y: draggable.state.y + coreData.deltaY / scale,\n deltaX: coreData.deltaX / scale,\n deltaY: coreData.deltaY / scale,\n lastX: draggable.state.x,\n lastY: draggable.state.y\n };\n} // A lot faster than stringify/parse\n\n\nfunction cloneBounds(bounds\n/*: Bounds*/\n)\n/*: Bounds*/\n{\n return {\n left: bounds.left,\n top: bounds.top,\n right: bounds.right,\n bottom: bounds.bottom\n };\n}\n\nfunction findDOMNode(draggable\n/*: Draggable | DraggableCore*/\n)\n/*: HTMLElement*/\n{\n var node = draggable.findDOMNode();\n\n if (!node) {\n throw new Error(': Unmounted during event!');\n } // $FlowIgnore we can't assert on HTMLElement due to tests... FIXME\n\n\n return node;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.findInArray = findInArray;\nexports.isFunction = isFunction;\nexports.isNum = isNum;\nexports.int = int;\nexports.dontSetMe = dontSetMe; // @credits https://gist.github.com/rogozhnikoff/a43cfed27c41e4e68cdc\n\nfunction findInArray(array\n/*: Array | TouchList*/\n, callback\n/*: Function*/\n)\n/*: any*/\n{\n for (var i = 0, length = array.length; i < length; i++) {\n if (callback.apply(callback, [array[i], i, array])) return array[i];\n }\n}\n\nfunction isFunction(func\n/*: any*/\n)\n/*: boolean %checks*/\n{\n return typeof func === 'function' || Object.prototype.toString.call(func) === '[object Function]';\n}\n\nfunction isNum(num\n/*: any*/\n)\n/*: boolean %checks*/\n{\n return typeof num === 'number' && !isNaN(num);\n}\n\nfunction int(a\n/*: string*/\n)\n/*: number*/\n{\n return parseInt(a, 10);\n}\n\nfunction dontSetMe(props\n/*: Object*/\n, propName\n/*: string*/\n, componentName\n/*: string*/\n) {\n if (props[propName]) {\n return new Error(\"Invalid prop \".concat(propName, \" passed to \").concat(componentName, \" - do not set this, set it on the child.\"));\n }\n}","import Marked from \"marked\";\nimport intl from \"../services/intl\";\n\nexport function localizeMarkdownLinks(data) {\n return data.replace(\n /\\[([^\\]]*)\\]\\(([^)]*)\\)/g,\n (_, g1, g2) => `[${g1}](${intl.localizePath(g2)})`,\n );\n}\n\nexport function localizeHtmlLinks(data) {\n return data.replace(\n /href=\"(.*?)\"/g,\n (_, g1) => `href=\"${intl.localizePath(g1)}\"`,\n );\n}\n\nexport function parseMarkdown(content) {\n const localized = localizeMarkdownLinks(content);\n return Marked.parseInline(localized);\n}\n\nexport function processHtml(content) {\n return localizeHtmlLinks(content);\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { Font, Color, rem, media, responsive } from \"../../utils/style\";\nimport { parseMarkdown } from \"../../utils/markdown\";\nimport sanitizeHtml from \"isomorphic-html-sanitize\";\n\nconst AccordionWrapper = styled.div.attrs(p => ({\n id: `accordion-item-${p.index}`,\n}))`\n border-top: 1px solid rgba(0, 0, 0, 0.16);\n\n &:last-child {\n border-bottom: 1px solid rgba(0, 0, 0, 0.16);\n }\n`;\n\nconst AccordionHeader = styled.button.attrs(p => ({\n id: `accordion-item-${p.index}_header`,\n className: \"product-questions__accordion__header\",\n}))`\n position: relative;\n background: transparent;\n border: none;\n width: 100%;\n padding: 0;\n`;\n\nconst HeaderText = styled.h3.attrs(p => ({\n id: `accordion-item-${p.index}_header_title`,\n}))`\n ${Font.circular}\n color: ${Color.ritualBlue};\n font-size: ${p => (p.small ? rem(16) : rem(18))};\n font-weight: 500;\n text-align: left;\n letter-spacing: 0;\n line-height: ${rem(28)};\n padding: ${p =>\n p.small\n ? p.open\n ? \"16px 0 8px\"\n : \"16px 0\"\n : p.open\n ? \"24px 0 16px\"\n : \"24px 0\"};\n margin: 0;\n max-width: calc(100% - 18px - 8px);\n\n ${media.mobile`\n font-size: ${rem(16)};\n `}\n\n ${responsive.md`\n max-width: calc(100% - 18px - 16px);\n `};\n\n &:hover {\n cursor: pointer;\n }\n`;\n\nconst AccordionBody = styled.div.attrs(p => ({\n id: `accordion-item-${p.index}_body`,\n}))`\n font-size: ${rem(18)};\n line-height: ${rem(28)};\n padding-bottom: ${rem(24)};\n display: none;\n\n ${Font.dutch} &.open {\n display: block;\n }\n\n a,\n a[data-modal=\"supplement-facts\"] {\n display: inline-block;\n border-bottom: 1px solid ${Color.ritualBlue};\n transition: opacity 0.2s ease-in-out;\n\n &:hover {\n opacity: 0.56;\n }\n }\n`;\n\nconst Toggle = styled.div.attrs(p => ({\n id: `accordion-item-${p.index}_header_toggle`,\n}))`\n position: absolute;\n right: 0;\n top: calc(50% - 5px);\n width: 18px;\n height: 12px;\n transform-origin: center;\n cursor: pointer;\n\n &.open {\n transform: rotateZ(180deg);\n }\n\n &:before {\n position: absolute;\n left: 0;\n content: \"\";\n height: 2px;\n width: 12px;\n background-color: ${Color.ritualBlue};\n transform: translateY(5px) rotate(45deg);\n transform-origin: center;\n }\n\n &:after {\n position: absolute;\n left: 0;\n content: \"\";\n height: 2px;\n width: 12px;\n background-color: ${Color.ritualBlue};\n transform: translateX(7.5px) translateY(5px) rotate(-45deg);\n transform-origin: center;\n }\n`;\n\nexport default class AccordionItem extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n openIndex: null,\n };\n }\n\n handleHeaderClick() {\n this.props.headerClick();\n }\n\n render() {\n const { item, open, small, index } = this.props;\n\n const sanitizedContent = sanitizeHtml(item.body, { allowedTags: [] });\n \n let markdownConvertedContent = parseMarkdown(sanitizedContent);\n\n return (\n \n \n \n \n {item.header}\n \n \n \n \n );\n }\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport AccordionItem from \"./AccordionItem\";\n\n// Utils\nimport metrics from \"../../utils/metrics\";\n\nconst AccordionWrapper = styled.div.attrs(\n p =>\n !p.noGridAligment && {\n className: \"col-12 col-md-8 offset-md-2\",\n },\n)`\n z-index: 10;\n`;\n\nexport default class Accordion extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n openIndex: null,\n };\n }\n\n openTab(index, eventDetails) {\n const oldIndex = this.state.openIndex;\n const newIndex = oldIndex === index ? null : index;\n\n this.setState({ openIndex: newIndex });\n if (this.props.subscribe) {\n this.props.subscribe(newIndex);\n }\n\n // If the index hasn't updated, do not report an event.\n if (newIndex !== null) {\n this.reportOpenEvent(newIndex, eventDetails);\n }\n\n // Only report the close event if the eventDetails prop exists. This prop\n // is an indication that we should override the default \"Dr. Luke QA\n // Expanded\" event.\n if (oldIndex !== null && eventDetails) {\n this.reportCloseEvent(oldIndex, eventDetails);\n }\n }\n\n reportOpenEvent(index, eventDetails) {\n let event = {\n title: this.props.items[index].header,\n nonInteraction: false,\n };\n let name = \"Dr. Luke QA Expanded\";\n // If additional event details have been passed, add those details to\n // the default event and use the generic (non Dr. Luke) name.\n if (eventDetails) {\n name = \"Accordion Open\";\n event = { ...event, ...eventDetails };\n }\n metrics.track(name, event);\n }\n\n reportCloseEvent(index, eventDetails) {\n let event = {\n title: this.props.items[index].header,\n nonInteraction: false,\n };\n // If additional event details have been passed, add those details to\n // the default event.\n if (eventDetails) {\n event = { ...event, ...eventDetails };\n }\n metrics.track(\"Accordion Close\", event);\n }\n\n render() {\n let { items, noGridAligment, small, eventDetails } = this.props;\n let { openIndex } = this.state;\n\n return (\n \n {items.map((item, i) => {\n return (\n \n );\n })}\n \n );\n }\n}\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"DraggableCore\", {\n enumerable: true,\n get: function get() {\n return _DraggableCore.default;\n }\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _reactDom = _interopRequireDefault(require(\"react-dom\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _domFns = require(\"./utils/domFns\");\n\nvar _positionFns = require(\"./utils/positionFns\");\n\nvar _shims = require(\"./utils/shims\");\n\nvar _DraggableCore = _interopRequireDefault(require(\"./DraggableCore\"));\n\nvar _log = _interopRequireDefault(require(\"./utils/log\"));\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n}\n\nfunction _getRequireWildcardCache() {\n if (typeof WeakMap !== \"function\") return null;\n var cache = new WeakMap();\n\n _getRequireWildcardCache = function _getRequireWildcardCache() {\n return cache;\n };\n\n return cache;\n}\n\nfunction _interopRequireWildcard(obj) {\n if (obj && obj.__esModule) {\n return obj;\n }\n\n if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") {\n return {\n default: obj\n };\n }\n\n var cache = _getRequireWildcardCache();\n\n if (cache && cache.has(obj)) {\n return cache.get(obj);\n }\n\n var newObj = {};\n var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;\n\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;\n\n if (desc && (desc.get || desc.set)) {\n Object.defineProperty(newObj, key, desc);\n } else {\n newObj[key] = obj[key];\n }\n }\n }\n\n newObj.default = obj;\n\n if (cache) {\n cache.set(obj, newObj);\n }\n\n return newObj;\n}\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _createSuper(Derived) {\n var hasNativeReflectConstruct = _isNativeReflectConstruct();\n\n return function () {\n var Super = _getPrototypeOf(Derived),\n result;\n\n if (hasNativeReflectConstruct) {\n var NewTarget = _getPrototypeOf(this).constructor;\n\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n\n return _possibleConstructorReturn(this, result);\n };\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n} //\n// Define \n//\n\n\nvar Draggable = /*#__PURE__*/function (_React$Component) {\n _inherits(Draggable, _React$Component);\n\n var _super = _createSuper(Draggable);\n\n _createClass(Draggable, null, [{\n key: \"getDerivedStateFromProps\",\n // React 16.3+\n // Arity (props, state)\n value: function getDerivedStateFromProps(_ref, _ref2) {\n var position = _ref.position;\n var prevPropsPosition = _ref2.prevPropsPosition; // Set x/y if a new position is provided in props that is different than the previous.\n\n if (position && (!prevPropsPosition || position.x !== prevPropsPosition.x || position.y !== prevPropsPosition.y)) {\n (0, _log.default)('Draggable: getDerivedStateFromProps %j', {\n position: position,\n prevPropsPosition: prevPropsPosition\n });\n return {\n x: position.x,\n y: position.y,\n prevPropsPosition: _objectSpread({}, position)\n };\n }\n\n return null;\n }\n }]);\n\n function Draggable(props\n /*: DraggableProps*/\n ) {\n var _this;\n\n _classCallCheck(this, Draggable);\n\n _this = _super.call(this, props);\n\n _defineProperty(_assertThisInitialized(_this), \"onDragStart\", function (e, coreData) {\n (0, _log.default)('Draggable: onDragStart: %j', coreData); // Short-circuit if user's callback killed it.\n\n var shouldStart = _this.props.onStart(e, (0, _positionFns.createDraggableData)(_assertThisInitialized(_this), coreData)); // Kills start event on core as well, so move handlers are never bound.\n\n\n if (shouldStart === false) return false;\n\n _this.setState({\n dragging: true,\n dragged: true\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onDrag\", function (e, coreData) {\n if (!_this.state.dragging) return false;\n (0, _log.default)('Draggable: onDrag: %j', coreData);\n var uiData = (0, _positionFns.createDraggableData)(_assertThisInitialized(_this), coreData);\n var newState\n /*: $Shape*/\n = {\n x: uiData.x,\n y: uiData.y\n }; // Keep within bounds.\n\n if (_this.props.bounds) {\n // Save original x and y.\n var x = newState.x,\n y = newState.y; // Add slack to the values used to calculate bound position. This will ensure that if\n // we start removing slack, the element won't react to it right away until it's been\n // completely removed.\n\n newState.x += _this.state.slackX;\n newState.y += _this.state.slackY; // Get bound position. This will ceil/floor the x and y within the boundaries.\n\n var _getBoundPosition = (0, _positionFns.getBoundPosition)(_assertThisInitialized(_this), newState.x, newState.y),\n _getBoundPosition2 = _slicedToArray(_getBoundPosition, 2),\n newStateX = _getBoundPosition2[0],\n newStateY = _getBoundPosition2[1];\n\n newState.x = newStateX;\n newState.y = newStateY; // Recalculate slack by noting how much was shaved by the boundPosition handler.\n\n newState.slackX = _this.state.slackX + (x - newState.x);\n newState.slackY = _this.state.slackY + (y - newState.y); // Update the event we fire to reflect what really happened after bounds took effect.\n\n uiData.x = newState.x;\n uiData.y = newState.y;\n uiData.deltaX = newState.x - _this.state.x;\n uiData.deltaY = newState.y - _this.state.y;\n } // Short-circuit if user's callback killed it.\n\n\n var shouldUpdate = _this.props.onDrag(e, uiData);\n\n if (shouldUpdate === false) return false;\n\n _this.setState(newState);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onDragStop\", function (e, coreData) {\n if (!_this.state.dragging) return false; // Short-circuit if user's callback killed it.\n\n var shouldContinue = _this.props.onStop(e, (0, _positionFns.createDraggableData)(_assertThisInitialized(_this), coreData));\n\n if (shouldContinue === false) return false;\n (0, _log.default)('Draggable: onDragStop: %j', coreData);\n var newState\n /*: $Shape*/\n = {\n dragging: false,\n slackX: 0,\n slackY: 0\n }; // If this is a controlled component, the result of this operation will be to\n // revert back to the old position. We expect a handler on `onDragStop`, at the least.\n\n var controlled = Boolean(_this.props.position);\n\n if (controlled) {\n var _this$props$position = _this.props.position,\n x = _this$props$position.x,\n y = _this$props$position.y;\n newState.x = x;\n newState.y = y;\n }\n\n _this.setState(newState);\n });\n\n _this.state = {\n // Whether or not we are currently dragging.\n dragging: false,\n // Whether or not we have been dragged before.\n dragged: false,\n // Current transform x and y.\n x: props.position ? props.position.x : props.defaultPosition.x,\n y: props.position ? props.position.y : props.defaultPosition.y,\n prevPropsPosition: _objectSpread({}, props.position),\n // Used for compensating for out-of-bounds drags\n slackX: 0,\n slackY: 0,\n // Can only determine if SVG after mounting\n isElementSVG: false\n };\n\n if (props.position && !(props.onDrag || props.onStop)) {\n // eslint-disable-next-line no-console\n console.warn('A `position` was applied to this , without drag handlers. This will make this ' + 'component effectively undraggable. Please attach `onDrag` or `onStop` handlers so you can adjust the ' + '`position` of this element.');\n }\n\n return _this;\n }\n\n _createClass(Draggable, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n // Check to see if the element passed is an instanceof SVGElement\n if (typeof window.SVGElement !== 'undefined' && this.findDOMNode() instanceof window.SVGElement) {\n this.setState({\n isElementSVG: true\n });\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.setState({\n dragging: false\n }); // prevents invariant if unmounted while dragging\n } // React Strict Mode compatibility: if `nodeRef` is passed, we will use it instead of trying to find\n // the underlying DOM node ourselves. See the README for more information.\n\n }, {\n key: \"findDOMNode\",\n value: function findDOMNode()\n /*: ?HTMLElement*/\n {\n return this.props.nodeRef ? this.props.nodeRef.current : _reactDom.default.findDOMNode(this);\n }\n }, {\n key: \"render\",\n value: function render()\n /*: ReactElement*/\n {\n var _classNames;\n\n var _this$props = this.props,\n axis = _this$props.axis,\n bounds = _this$props.bounds,\n children = _this$props.children,\n defaultPosition = _this$props.defaultPosition,\n defaultClassName = _this$props.defaultClassName,\n defaultClassNameDragging = _this$props.defaultClassNameDragging,\n defaultClassNameDragged = _this$props.defaultClassNameDragged,\n position = _this$props.position,\n positionOffset = _this$props.positionOffset,\n scale = _this$props.scale,\n draggableCoreProps = _objectWithoutProperties(_this$props, [\"axis\", \"bounds\", \"children\", \"defaultPosition\", \"defaultClassName\", \"defaultClassNameDragging\", \"defaultClassNameDragged\", \"position\", \"positionOffset\", \"scale\"]);\n\n var style = {};\n var svgTransform = null; // If this is controlled, we don't want to move it - unless it's dragging.\n\n var controlled = Boolean(position);\n var draggable = !controlled || this.state.dragging;\n var validPosition = position || defaultPosition;\n var transformOpts = {\n // Set left if horizontal drag is enabled\n x: (0, _positionFns.canDragX)(this) && draggable ? this.state.x : validPosition.x,\n // Set top if vertical drag is enabled\n y: (0, _positionFns.canDragY)(this) && draggable ? this.state.y : validPosition.y\n }; // If this element was SVG, we use the `transform` attribute.\n\n if (this.state.isElementSVG) {\n svgTransform = (0, _domFns.createSVGTransform)(transformOpts, positionOffset);\n } else {\n // Add a CSS transform to move the element around. This allows us to move the element around\n // without worrying about whether or not it is relatively or absolutely positioned.\n // If the item you are dragging already has a transform set, wrap it in a so \n // has a clean slate.\n style = (0, _domFns.createCSSTransform)(transformOpts, positionOffset);\n } // Mark with class while dragging\n\n\n var className = (0, _classnames.default)(children.props.className || '', defaultClassName, (_classNames = {}, _defineProperty(_classNames, defaultClassNameDragging, this.state.dragging), _defineProperty(_classNames, defaultClassNameDragged, this.state.dragged), _classNames)); // Reuse the child provided\n // This makes it flexible to use whatever element is wanted (div, ul, etc)\n\n return /*#__PURE__*/React.createElement(_DraggableCore.default, _extends({}, draggableCoreProps, {\n onStart: this.onDragStart,\n onDrag: this.onDrag,\n onStop: this.onDragStop\n }), React.cloneElement(React.Children.only(children), {\n className: className,\n style: _objectSpread(_objectSpread({}, children.props.style), style),\n transform: svgTransform\n }));\n }\n }]);\n\n return Draggable;\n}(React.Component);\n\nexports.default = Draggable;\n\n_defineProperty(Draggable, \"displayName\", 'Draggable');\n\n_defineProperty(Draggable, \"propTypes\", _objectSpread(_objectSpread({}, _DraggableCore.default.propTypes), {}, {\n /**\n * `axis` determines which axis the draggable can move.\n *\n * Note that all callbacks will still return data as normal. This only\n * controls flushing to the DOM.\n *\n * 'both' allows movement horizontally and vertically.\n * 'x' limits movement to horizontal axis.\n * 'y' limits movement to vertical axis.\n * 'none' limits all movement.\n *\n * Defaults to 'both'.\n */\n axis: _propTypes.default.oneOf(['both', 'x', 'y', 'none']),\n\n /**\n * `bounds` determines the range of movement available to the element.\n * Available values are:\n *\n * 'parent' restricts movement within the Draggable's parent node.\n *\n * Alternatively, pass an object with the following properties, all of which are optional:\n *\n * {left: LEFT_BOUND, right: RIGHT_BOUND, bottom: BOTTOM_BOUND, top: TOP_BOUND}\n *\n * All values are in px.\n *\n * Example:\n *\n * ```jsx\n * let App = React.createClass({\n * render: function () {\n * return (\n * \n *
Content
\n *
\n * );\n * }\n * });\n * ```\n */\n bounds: _propTypes.default.oneOfType([_propTypes.default.shape({\n left: _propTypes.default.number,\n right: _propTypes.default.number,\n top: _propTypes.default.number,\n bottom: _propTypes.default.number\n }), _propTypes.default.string, _propTypes.default.oneOf([false])]),\n defaultClassName: _propTypes.default.string,\n defaultClassNameDragging: _propTypes.default.string,\n defaultClassNameDragged: _propTypes.default.string,\n\n /**\n * `defaultPosition` specifies the x and y that the dragged item should start at\n *\n * Example:\n *\n * ```jsx\n * let App = React.createClass({\n * render: function () {\n * return (\n * \n *
I start with transformX: 25px and transformY: 25px;
\n *
\n * );\n * }\n * });\n * ```\n */\n defaultPosition: _propTypes.default.shape({\n x: _propTypes.default.number,\n y: _propTypes.default.number\n }),\n positionOffset: _propTypes.default.shape({\n x: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]),\n y: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string])\n }),\n\n /**\n * `position`, if present, defines the current position of the element.\n *\n * This is similar to how form elements in React work - if no `position` is supplied, the component\n * is uncontrolled.\n *\n * Example:\n *\n * ```jsx\n * let App = React.createClass({\n * render: function () {\n * return (\n * \n *
I start with transformX: 25px and transformY: 25px;
\n *
\n * );\n * }\n * });\n * ```\n */\n position: _propTypes.default.shape({\n x: _propTypes.default.number,\n y: _propTypes.default.number\n }),\n\n /**\n * These properties should be defined on the child, not here.\n */\n className: _shims.dontSetMe,\n style: _shims.dontSetMe,\n transform: _shims.dontSetMe\n}));\n\n_defineProperty(Draggable, \"defaultProps\", _objectSpread(_objectSpread({}, _DraggableCore.default.defaultProps), {}, {\n axis: 'both',\n bounds: false,\n defaultClassName: 'react-draggable',\n defaultClassNameDragging: 'react-draggable-dragging',\n defaultClassNameDragged: 'react-draggable-dragged',\n defaultPosition: {\n x: 0,\n y: 0\n },\n position: null,\n scale: 1\n}));","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = log;\n/*eslint no-console:0*/\n\nfunction log() {\n var _console;\n\n if (undefined) (_console = console).log.apply(_console, arguments);\n}","import React from \"react\";\nimport styled, { keyframes } from \"styled-components\";\nimport { Font, Color, rem, media } from \"../../utils/style\";\nimport { Icons } from \"../../utils/svg\";\nimport { lockScroll } from \"../../utils/lockScroll\";\nimport Text from \"../Text\";\n\nconst OpenAnimation = keyframes`\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n`;\n\nconst PopupWrapper = styled.div.attrs({ className: \"ajs_supplement-facts\" })`\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background-color: rgba(255, 255, 255, 0.8);\n z-index: 9999;\n animation: ${OpenAnimation} 0.2s ease-in-out 0s normal forwards;\n display: ${p => (p.open ? \"flex\" : \"none\")};\n flex-direction: column;\n justify-content: flex-start;\n backdrop-filter: blur(10px);\n`;\n\nconst CloseWrapper = styled.div.attrs({\n className: \"ajs_supplement-facts_close-wrapper\",\n})`\n min-height: 72px;\n\n ${media.mobile`\n min-height: 48px;\n `};\n`;\n\nconst CloseButton = styled.span.attrs({\n className: \"ajs_supplement-facts_close-wrapper_button\",\n})`\n display: block;\n width: 48px;\n height: 48px;\n cursor: pointer;\n position: absolute;\n top: 12px;\n right: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n\n ${media.mobile`\n top: 0;\n right: 0;\n `};\n\n &:hover {\n svg {\n opacity: 0.56;\n }\n }\n\n span {\n position: relative;\n width: 16px;\n height: 16px;\n }\n\n svg {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 100%;\n transition: opacity 200ms ease-in-out;\n color: ${Color.ritualBlue};\n\n g {\n fill: currentColor;\n }\n }\n`;\n\nconst TableWrapper = styled.div.attrs({\n className: \"ajs_supplement-facts_table-wrapper\",\n})`\n display: flex;\n align-items: flex-start;\n justify-content: center;\n width: 100%;\n height: calc(100% - 72px);\n\n ${media.mobile`\n height: calc(100% - 48px);\n `}\n\n & > div {\n position: relative;\n background-color: ${Color.white};\n box-sizing: border-box !important;\n max-height: calc(100vh - 40px - 72px);\n overflow: auto;\n padding: 20px;\n box-shadow: 0 0 2px rgba(${Color.ritualBlue},0.56);\n\n ${media.mobile`\n padding: 0;\n width: 100%;\n max-height: 100%;\n `}\n }\n\n table {\n table-layout: fixed;\n width: 650px;\n text-align: left;\n background-color: ${Color.white};\n\n ${media.tablet`\n width: 560px;\n `}\n\n ${media.mobile`\n width: calc(100% - 24px);\n margin: 12px;\n margin-bottom: calc(12px + env(safe-area-inset-bottom));\n `}\n\n thead {\n border: 1px solid ${Color.ritualBlue};\n\n tr {\n th {\n &:first-child {\n width: 50%;\n }\n }\n }\n }\n\n thead,\n tbody {\n\n tr {\n &.outline {\n border: 1px solid ${Color.ritualBlue};\n }\n\n &.no-top {\n border-top: none;\n }\n\n &.no-bottom {\n border-bottom: none;\n }\n }\n\n tr,\n td,\n th {\n ${Font.circular}\n font-size: ${rem(14)};\n line-height: ${rem(18)};\n font-weight: 500;\n text-align: left;\n padding: 4px 6px;\n word-break: break-word;\n\n ${media.mobile`\n font-size: ${rem(12)};\n line-height: ${rem(16)};\n padding: 2px 4px;\n `}\n\n &.title {\n font-size: ${rem(36)};\n line-height: ${rem(40)};\n font-weight: 700;\n }\n\n &.small {\n font-size: ${rem(12)};\n line-height: ${rem(16)};\n }\n\n &.attribution {\n font-weight: 300;\n font-size: ${rem(10)};\n line-height: ${rem(12)};\n }\n\n &.last {\n font-weight: 300;\n border: none !important;\n font-size: ${rem(12)};\n line-height: ${rem(16)};\n }\n\n span {\n display: block;\n font-size: ${rem(12)};\n line-height: ${rem(16)};\n padding-left: 16px;\n font-weight: 300;\n\n &.indent {\n display: inline;\n }\n\n &.light {\n display: inline;\n padding: 0;\n margin: 0;\n }\n\n ${media.mobile`\n padding-left: 8px;\n `}\n }\n }\n\n td + td,\n th {\n text-align: center;\n }\n }\n\n thead {\n tr {\n &.bottom-line,\n &:last-child {\n td,\n th {\n border-bottom: 18px solid ${Color.ritualBlue};\n }\n }\n }\n }\n\n tbody {\n tr {\n\n &:first-child {\n td,\n th {\n font-weight: 500;\n }\n }\n\n &.bottom-line {\n td,\n th {\n border-bottom: 9px solid ${Color.ritualBlue};\n }\n }\n\n &:first-child {\n td,\n th {\n border-bottom: 4px solid ${Color.ritualBlue};\n }\n }\n }\n }\n }\n`;\n\nexport default class SupplementFacts extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n open: false,\n };\n this.handleEscDown = this.handleEscDown.bind(this);\n }\n\n componentDidMount() {\n window.addEventListener(\"keydown\", this.handleEscDown);\n }\n\n componentWillUnmount() {\n window.removeEventListener(\"keydown\", this.handleEscDown);\n }\n\n handleEscDown(e) {\n if (e.keyCode === 27) {\n this.close();\n }\n }\n\n open() {\n this.setState({\n open: true,\n });\n }\n\n close() {\n this.setState({\n open: false,\n });\n }\n\n renderTable() {\n let { supplementFacts } = this.props;\n\n if (!supplementFacts) return null;\n\n return this.generateTable(supplementFacts);\n }\n\n generateTable(data) {\n return (\n {\n e.stopPropagation();\n }}\n >\n \n \n \n \n \n \n \n \n \n \n \n \n \n {\" \"}\n {data.servingSize}\n \n \n \n \n {\" \"}\n {data.servingsPerContainer}\n \n \n \n \n \n \n \n \n \n {data?.labels?.dv || \"% DV\"}\n \n {// Generate Nutrients\n this.generateIngredientRow(data.nutrients, \"nutrients\")}\n {// Generate Ingredients\n this.generateIngredientRow(data.ingredients, \"ingredients\")}\n {// Generate Notations\n data.notations &&\n data.notations.map((notation, i, array) => {\n let className = \"outline\";\n if (i + 1 === array.length) {\n className += \" no-top\";\n }\n if (array.length > 1 && i + 1 < array.length) {\n className += \" no-bottom\";\n }\n return (\n \n \n {notation.label}\n \n \n );\n })}\n {data.otherIngredients && (\n \n \n {\" \"}\n {data.otherIngredients}\n \n \n )}\n {data.notationReferences && (\n \n \n \n )}\n {// Generate Notations\n data.attributions &&\n data.attributions.map((attribution, i, array) => {\n return (\n \n \n {attribution.label}\n \n \n );\n })}\n \n \n );\n }\n\n generateIngredientRow(data, key) {\n if (!data) return null;\n\n return data.map((item, i, array) => {\n let className = \"outline\";\n if (i + 1 === array.length) {\n className += \" bottom-line\";\n }\n return (\n \n \n {item.dosage}\n {item.dv}\n \n );\n });\n }\n\n render() {\n let { open } = this.state;\n\n if (this.tableElementWrapper) {\n lockScroll(open, this.tableElementWrapper);\n }\n\n return (\n \n \n \n \n \n \n \n \n\n \n
(this.tableElementWrapper = r)}>\n {this.renderTable()}\n
\n
\n
\n );\n }\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport Img from \"gatsby-image\";\n\n// Utils\nimport { Font, Color, rem, responsive } from \"../../utils/style\";\nimport { stripWrappingParagraphTag } from \"../../utils/contentful\";\n\n// Styled Elements\nconst PillSectionWrapper = styled.section.attrs({\n \"aria-labelledby\": \"pill-section-title\",\n})`\n background-color: rgba(242, 241, 245, 0.56);\n\n padding: 64px 0;\n margin-bottom: 80px;\n\n ${responsive.sm`\n padding: 80px 0;\n `}\n\n ${responsive.md`\n padding: 120px 0;\n margin-bottom: 120px;\n `};\n`;\n\nconst PillSectionContainer = styled.div`\n padding-left: 20px;\n padding-right: 20px;\n\n ${responsive.sm`\n padding: 0;\n `}\n\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n\n ${responsive.sm`\n flex-direction: row;\n `}\n`;\n\nconst PillSectionColumn = styled.div`\n position: relative;\n width: 100%;\n margin-right: 0;\n\n display: flex;\n flex-direction: column;\n align-items: center;\n\n ${responsive.sm`\n align-items: flex-start;\n width: 340px;\n min-height: 340px;\n margin-right: 20px;\n `}\n\n ${responsive.md`\n width: 400px;\n min-height: 400px;\n margin-right: 64px;\n `}\n\n ${responsive.lg`\n width: 470px;\n min-height: 470px;\n margin-right: 120px;\n `}\n\n &:last-of-type {\n margin-right: 0;\n }\n`;\n\nconst PillSectionTitle = styled.h2.attrs({\n id: \"pill-section-title\",\n})`\n margin: 0;\n\n ${Font.circular};\n color: ${Color.ritualBlue};\n font-weight: 500;\n\n letter-spacing: -0.4px;\n font-size: ${rem(30)};\n line-height: ${rem(36)};\n\n max-width: 260px;\n text-align: center !important;\n\n ${responsive.sm`\n text-align: left !important;\n margin-bottom: 32px;\n `};\n\n ${responsive.md`\n margin-bottom: 40px;\n letter-spacing: -1.4px;\n font-size: ${rem(48)};\n line-height: ${rem(54)};\n max-width: 100%;\n `};\n\n em,\n i {\n ${Font.dutch};\n }\n`;\n\nconst PillMobileImage = styled(Img)`\n width: 280px;\n height: 280px;\n margin-bottom: 8px;\n\n ${responsive.sm`\n display: none !important;\n `};\n`;\n\nconst PillDesktopImageWrapper = styled.div`\n width: 100%;\n height: 100%;\n`;\n\nconst PillDesktopImage = styled(Img)`\n display: none;\n\n ${responsive.sm`\n display: block;\n `}\n`;\n\nconst ItemWrapper = styled.div`\n margin-bottom: 24px;\n\n ${responsive.md`\n margin-bottom: 32px;\n `};\n\n &:last-child {\n margin: 0;\n }\n`;\n\nconst ItemHeader = styled.div`\n display: flex;\n align-items: center;\n justify-content: flex-start;\n`;\n\nconst ItemHeaderText = styled.h3`\n ${Font.circular};\n scolor: ${Color.ritualBlue};\n font-size: ${rem(14)};\n line-height: ${rem(24)};\n font-weight: 500;\n text-transform: uppercase;\n margin: 0;\n\n ${responsive.md`\n font-size: ${rem(16)};\n line-height: ${rem(26)};\n `};\n`;\n\nconst ItemBody = styled.div`\n ${Font.dutch};\n font-size: ${rem(16)};\n line-height: ${rem(26)};\n\n padding: 8px 0 0 36px;\n\n ${responsive.sm`\n padding-left: 44px;\n `}\n\n ${responsive.md`\n padding-left: 40px;\n `}\n`;\n\nconst Bullet = styled.div`\n background-color: ${Color.ritualBlue};\n border-radius: 50%;\n\n display: flex;\n justify-content: center;\n align-items: center;\n\n height: 20px;\n width: 20px;\n margin-right: 16px;\n\n ${responsive.sm`\n margin-right: 24px;\n `}\n\n ${responsive.md`\n height: 24px;\n width: 24px;\n margin-right: 16px;\n `}\n\n span {\n ${Font.circular};\n color: ${Color.white};\n font-weight: 500;\n letter-spacing: 0px;\n\n font-size: ${rem(12)};\n line-height: ${rem(20)};\n\n ${responsive.md`\n font-size: ${rem(14)};\n line-height: ${rem(24)};\n s`}\n }\n`;\n\nexport default class PillSection extends React.Component {\n render() {\n const {\n pillSectionTitle,\n pillSectionImage,\n pillSectionAccordion,\n className,\n } = this.props;\n\n let title = stripWrappingParagraphTag(\n pillSectionTitle.childMarkdownRemark.html,\n );\n\n return (\n \n \n \n \n \n
\n {pillSectionAccordion.map((item, i) => {\n return (\n \n \n \n {i + 1}\n \n {item.title}\n \n \n \n );\n })}\n
\n
\n \n \n \n \n \n
\n
\n );\n }\n}\n","import React from \"react\";\nimport styled, { keyframes } from \"styled-components\";\nimport Swipeable from \"./Swipeable\";\nimport { Color, responsive } from \"../utils/style\";\nimport { Icons } from \"../utils/svg\";\nimport { lockScroll } from \"../utils/lockScroll\";\n\nconst TRANSITION_DURATION = 550;\n\nconst fadeIn = keyframes`\n from {opacity: 0}\n to {opacity: 1}\n`;\n\nconst Overlay = styled.div`\n position: fixed;\n height: 100vh;\n width: 100vw;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n overflow: hidden;\n z-index: 2147483647;\n\n display: flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n\n background-color: rgba(0, 0, 0, 0.56);\n opacity: 0;\n transition: opacity 500ms ease-in-out;\n animation: ${fadeIn} 300ms forwards;\n`;\n\nconst Container = styled.div`\n position: relative;\n display: flex;\n\n width: 280px;\n height: 482px;\n max-height: 482px;\n\n ${responsive.sm`\n width: 460px;\n height: 389px;\n max-height: 389px;\n `};\n\n ${responsive.md`\n width: 614px;\n height: 429px;\n max-height: 429px;\n `};\n\n ${responsive.lg`\n width: 770px;\n height: 425px;\n max-height: 425px;\n `};\n`;\n\nexport const Slide = styled.div`\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n transition: transform ${TRANSITION_DURATION}ms cubic-bezier(0.42, 0, 0.335, 1);\n\n &:focus {\n outline: none;\n }\n\n @media (max-height: 415px) and (orientation: landscape) {\n max-height: calc(100vh - 99px);\n }\n`;\n\nconst SlideContent = styled.div`\n position: relative;\n width: 100%;\n height: 100%;\n background-color: white;\n`;\n\nconst ControlsContainer = styled.div`\n position: absolute;\n bottom: -52px;\n left: 0;\n right: 0;\n height: 42px;\n\n display: flex;\n justify-content: center;\n align-items: flex-end;\n`;\n\nconst Counter = styled.div`\n color: ${Color.white};\n\n p {\n font-size: 16px;\n font-weight: 500;\n letter-spacing: 1px;\n line-height: 26px;\n text-transform: uppercase;\n margin: 0;\n }\n`;\n\n// exporting for testing purposes\nexport const ControlButton = styled.button`\n display: inline-flex;\n align-items: center;\n\n background: transparent;\n border: none;\n outline: none;\n\n width: 58px;\n height: 28px;\n\n &:first-child {\n justify-content: flex-start;\n }\n\n &:last-child {\n justify-content: flex-end;\n }\n\n &:focus {\n outline: none;\n }\n\n svg {\n width: 18px;\n height: 12px;\n transition: transform 0.2s;\n\n path {\n stroke: ${Color.white} !important;\n }\n }\n\n &:hover {\n svg {\n transform: scale(1.1666);\n }\n }\n`;\n\nconst CloseButton = styled.button`\n position: absolute;\n top: 16px;\n right: 16px;\n\n ${responsive.sm`\n right: 24px;\n `}\n\n background: transparent;\n border: none;\n outline: none;\n\n width: 16px;\n height: 16px;\n padding: 0;\n\n display: flex;\n justify-content: flex-end;\n z-index: 100;\n\n &:focus {\n outline: none;\n }\n`;\n\nexport default class Carousel extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n initialSlideIndex: props.activeSlideIndex,\n activeSlideIndex: props.activeSlideIndex,\n };\n\n this.overlayRef = null;\n\n this.offsets = [];\n this.previousOffsets = [];\n }\n\n componentDidMount() {\n lockScroll(true, this.overlayRef);\n }\n\n componentWillUnmount() {\n lockScroll(false, this.overlayRef);\n }\n\n handleGoToNextSlide(repeat = false) {\n const { activeSlideIndex } = this.state;\n\n // If we're repeating and we've reached the end, move back to the first\n // index. Otherwise remain at the current index.\n const indexAtEnd = repeat ? 0 : this.props.slides.length - 1;\n const nextIndex =\n activeSlideIndex === this.props.slides.length - 1\n ? indexAtEnd\n : activeSlideIndex + 1;\n\n if (nextIndex === activeSlideIndex) return;\n\n this.setState({\n activeSlideIndex: nextIndex,\n });\n }\n\n handleGoToPreviousSlide(repeat = false) {\n const { activeSlideIndex } = this.state;\n\n // If we're repeating and we've reached the beginning, move forward to the\n // last index. Otherwise remain at the current index.\n const indexAtStart = repeat ? this.props.slides.length - 1 : 0;\n const prevIndex =\n activeSlideIndex === 0 ? indexAtStart : activeSlideIndex - 1;\n\n if (prevIndex === activeSlideIndex) return;\n\n this.setState({\n activeSlideIndex: prevIndex,\n });\n }\n\n handleClickSlideCard(index) {\n const { activeSlideIndex } = this.state;\n const { repeat } = this.props;\n\n // active slide was clicked\n if (index === activeSlideIndex) return;\n\n const clickedLast = index === this.props.slides.length - 1;\n const clickedFirst = index === 0;\n const forwardFromLast =\n activeSlideIndex === this.props.slides.length - 1 && clickedFirst;\n const backFromBeginning = activeSlideIndex === 0 && clickedLast;\n\n // check if carousel repeats or not\n if (!repeat) {\n index === activeSlideIndex + 1 || forwardFromLast\n ? this.handleGoToNextSlide()\n : this.handleGoToPreviousSlide();\n } else {\n if (index === activeSlideIndex + 1 || forwardFromLast) {\n this.handleGoToNextSlide(repeat);\n } else if (index === activeSlideIndex - 1 || backFromBeginning) {\n this.handleGoToPreviousSlide(repeat);\n }\n }\n }\n\n render() {\n let { slides, close, repeat, controls = true } = this.props;\n const { activeSlideIndex } = this.state;\n\n this.previousOffsets = this.offsets;\n this.offsets = generateTransformOffsets(slides, activeSlideIndex, repeat);\n\n return (\n this.handleGoToPreviousSlide(repeat)}\n onSwipedLeft={() => this.handleGoToNextSlide(repeat)}\n >\n {\n this.overlayRef = r;\n }}\n onClick={() => close()}\n >\n e.stopPropagation()}>\n {slides.map((slide, index) => {\n const activeSlide = this.offsets[index] === 0;\n\n const transform = this.offsets[index];\n const scale = activeSlide ? 1 : 0.9;\n\n const isOffScreen =\n this.previousOffsets.length &&\n Math.abs(this.previousOffsets[index]) > 100 &&\n Math.abs(this.offsets[index]) > 100;\n\n const opacity = isOffScreen ? 0 : 1;\n\n const styles = {\n transform: `translateX(${transform}%) scale(${scale})`,\n opacity,\n };\n\n return (\n this.handleClickSlideCard(index)}\n close={() => close()}\n />\n );\n })}\n {controls && (\n \n this.handleGoToPreviousSlide(repeat)}\n >\n \n \n \n

\n {activeSlideIndex + 1} OF {slides.length}\n

\n
\n this.handleGoToNextSlide(repeat)}>\n \n \n
\n )}\n
\n \n \n );\n }\n}\n\nfunction CarouselSlide({ slide, styles, close, onClick }) {\n return (\n <>\n \n \n close()}>\n \n \n {slide}\n \n \n \n );\n}\n\nfunction generateTransformOffsets(slides, activeSlideIndex, repeat = false) {\n // If the slides are not repeating, we simply tranform the slides relative\n // to the active slide index.\n if (!repeat) {\n const offsets = slides.map((_, index) => {\n return (index - activeSlideIndex) * 100;\n });\n return offsets;\n }\n\n // If we want the slides to repeat, generate a different set of transforms.\n const offsets = slides.map((_, index) => {\n if (slides.length / 2 < index) {\n return (index - slides.length) * 100 * -1;\n } else {\n return index * 100 * -1;\n }\n });\n\n let newOffsets = [];\n\n for (let i = 0; i < offsets.length; i++) {\n let pointer =\n (Math.abs(i - offsets.length) + activeSlideIndex) % offsets.length;\n newOffsets.push(offsets[pointer]);\n }\n return newOffsets;\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar createHTML = require('../internals/create-html');\nvar forcedStringHTMLMethod = require('../internals/string-html-forced');\n\n// `String.prototype.small` method\n// https://tc39.github.io/ecma262/#sec-string.prototype.small\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('small') }, {\n small: function small() {\n return createHTML(this, 'small', '', '');\n }\n});\n"],"sourceRoot":""}