{"version":3,"sources":["webpack:///./src/components/global/RitualButton.js","webpack:///./src/utils/product.js","webpack:///./node_modules/object-fit-images/dist/ofi.common-js.js","webpack:///./src/components/global/QuantityPicker.js","webpack:///./node_modules/gatsby-image/withIEPolyfill/index.js","webpack:///./src/components/buildBundle/Navigation.js","webpack:///./src/components/buildBundle/SlideContainer.js","webpack:///./src/components/buildBundle/Disclaimer.js","webpack:///./src/utils/tracking/bundle.js","webpack:///./src/components/buildBundle/AbandonmentModal.js","webpack:///./src/components/buildBundle/QuizRibbon.js","webpack:///./src/components/buildBundle/QuizButton.js","webpack:///./src/components/buildBundle/YellowArrow.js","webpack:///./src/components/buildBundle/slides/Intro.js","webpack:///./src/components/buildBundle/slides/TakeVitamins.js","webpack:///./src/components/buildBundle/QuizDropdown.js","webpack:///./src/components/buildBundle/QuizAlternateButton.js","webpack:///./src/components/buildBundle/slides/ProductSelectionSlide.js","webpack:///./src/components/buildBundle/QuizInput.js","webpack:///./src/components/buildBundle/NonBinaryLink.js","webpack:///./src/components/buildBundle/NoProductMessage.js","webpack:///./src/components/buildBundle/slides/AgeGender.js","webpack:///./src/components/buildBundle/slides/Intermission.js","webpack:///./src/components/buildBundle/slides/ValuePropsIntermission.js","webpack:///./src/components/buildBundle/ProductResult.js","webpack:///./src/components/buildBundle/slides/Results.js","webpack:///./src/components/buildBundle/HouseholdMember.js","webpack:///./src/components/buildBundle/slides/HouseholdBuilderSlide.js","webpack:///./src/data/bundle-builder/slides.js","webpack:///./src/data/bundle-builder/default.js","webpack:///./src/components/buildBundle/BundleHouseholdFlow.js","webpack:///./src/templates/routes/build-a-bundle.js","webpack:///./src/components/product/SupplementFacts.js","webpack:///./node_modules/core-js/modules/es.array.find-index.js"],"names":["StyledButton","styled","MagicLink","Color","ritualBlue","responsive","sm","ritualYellow","white","rgba","StyledTextWrapper","div","StyledText","span","Font","circular","rem","md","AppendText","MagicButton","render","this","props","to","state","href","children","className","target","title","append","onClick","ariaLabel","id","disabled","settings","React","Component","ProductSKU","EFW60","E50PLUS60","EPRE60","EPOST60","EFM60","EFM50PLUS60","EFTG60","EFTB60","EFKIDS90","getGenderFromSKU","sku","getAgeGroupFromSKU","getIncentiveDemographicFromSKU","OFI","propRegex","testImg","Image","style","supportsObjectFit","supportsObjectPosition","supportsOFI","supportsCurrentSrc","currentSrc","nativeGetAttribute","getAttribute","nativeSetAttribute","setAttribute","autoModeEnabled","setPlaceholder","img","width","height","placeholder","call","onImageReady","callback","naturalWidth","setTimeout","fixOne","el","parsed","getComputedStyle","fontFamily","exec","getStyle","ofi","skipTest","srcset","src","naturalHeight","descriptors","get","prop","set","value","Object","defineProperty","ss","keepSrcUsable","err","window","console","warn","picturefill","pf","_","ns","evaled","fillImg","reselect","curSrc","supported","polyfillCurrentSrc","backgroundImage","replace","backgroundPosition","backgroundRepeat","backgroundOrigin","test","backgroundSize","fix","imgs","opts","startAutoMode","document","getElementsByTagName","querySelectorAll","i","length","body","addEventListener","e","tagName","watchMQ","bind","getOfiImageMaybe","name","HTMLImageElement","prototype","String","hijackAttributes","module","exports","Quantity","SelectWrapper","StyledLabel","label","Select","select","QuantityPicker","renderSelect","itemId","itemQuantity","totalQuantity","maxQuantity","allowZero","availableSpace","hasOtherItems","aria-labelledby","undefined","onChange","onQuantityChange","Array","map","amount","key","defaultMessage","values","labelId","aria-label","htmlFor","CaretDown","_interopRequireWildcard3","require","_interopRequireDefault","__esModule","default","_extends2","_objectWithoutPropertiesLoose2","_interopRequireWildcard2","_inheritsLoose2","_react","_propTypes","_index","ImageWithIEPolyfill","_Component","_this","_len","arguments","args","_key","apply","concat","imageRef","innerRef","createRef","placeholderRef","_proto","componentDidMount","_this2","createElement","objectFit","objectPosition","Promise","resolve","then","_ref","ObjectFitImages","current","_this$props","polyfillStyle","ref","imgStyle","placeholderStyle","propTypes","string","defaultProps","_default","forwardRef","SimpleNavWrapper","LeftColumn","lg","CenteredColumn","LogoWrapper","RightColumn","BackButton","button","CloseButton","Navigation","handleClick","goToPreviousSlide","displayBackButton","currentSlide","slideName","ArrowRoundedLeft","Text","RitualLogo","handleNavigateClick","onClose","Close","Wrapper","SlideContainerElement","SlideContent","SlideBackgroundImage","Img","ProgressWrapper","ritualGrey","ProgressBar","p","incompletionPercent","SlideContainer","completionPercent","transition","fluid","alt","backgroundColor","position","top","right","userSelect","userDrag","pointerEvents","touchCallout","DisclaimerCopy","FDALink","Disclaimer","trackCustomBundleAdded","bundle","products","_getBundleProductProperties","metrics","track","quantity","plan","getPropertiesForProduct","ModalStyle","css","Title","h1","Divider","hr","Message","dutch","ButtonsContainer","Button","RitualButton","AbandonmentModal","closed","handleAbanadon","setState","navigate","closePath","handleAddToCart","planIds","item","productsToAdd","getPlanIdAndQuantityArray","dispatchAddProductsToCart","MagicModal","isOpen","onRequestClose","contentStyle","connect","addProductsToCart","QuizRibbonStyle","QuizRibbon","Ribbon","twoSided","QuizButton","documentElement","scrollTop","clickHandler","YellowArrow","ArrowCurvedLg","ArrowCurvedSm","Copy","TagLine","IntroQuizButton","ArrowWrapper","Arrow","Intro","discount","nextSlide","slide","discountData","getDiscountData","sentenceCopy","componentContent","copy","answers","Buttons","Answer","TakeVitamins","answer","DropdownWrapper","ritualDisabledBlue","NativeDropdown","isPlaceholder","fadedBlue","DropdownGradient","CustomSelect","CustomSelectTrigger","CustomSelectOptions","CustomSelectOption","ShadowBorder","QuizDropdown","watchClickOutside","componentWillUnmount","removeEventListener","toggleCustomSelect","openSelectCustom","closeSelectCustom","getElementsByClassName","contains","handleOptionClick","newCurrentValue","_onSelectionMade","handleOptionEnter","onSelectionMade","renderNativeOptions","options","option","index","currentOption","smallOptions","smallPlaceholder","selectedOption","CaretUpRounded","aria-hidden","active","ButtonWrapper","Prenatal","location","interest","intl","t","forEach","push","InputWrapper","QuizInput","handleChange","substring","type","inputMode","min","max","step","Link","NonBinaryLink","MessagingWrapper","NoProductMessage","renderMessage","firstRun","over","under","message","Form","form","GenderDropdown","AgeInput","Age","genderOptions","debounce","timeout","handleChangeAge","handleChangeGender","handleSubmit","checkState","age","clearTimeout","Number","onAgeChange","gender","onGenderChange","preventDefault","answerGroup","under50","over50","currentGenderOption","onSubmit","SlideContentWrapper","ImageDescription","SmallHeader","Ingredient","Source","IntermissionComponent","contentfulData","images","folate","desktop","cf","folateDesktopImages","nodes","mobile","folateMobileImages","iron","ironDesktopImages","ironMobileImages","magnesium","magnesiumDesktopImages","magnesiumMobileImages","omega3","omega3DesktopImages","omega3MobileImages","vitaminA","vitaminADesktopImages","vitaminAMobileImages","vitaminB12","vitaminB12DesktopImages","vitaminB12MobileImages","vitaminD3","vitaminD3DesktopImages","vitaminD3MobileImages","pills","pillsDesktopImages","pillsMobileImages","kidsGummy","kidsGummyDesktopImages","kidsGummyMobileImages","getAnswer","renderImage","imageName","selectedImage","zIndex","mobileStyle","left","desktopStyle","transform","loading","description","smallHeader","imageIngredient","imageSource","slideCopy","ageCopy","componentQuery","ValueProps","ValueProp","MobileImageWrapper","DesktopImageWrapper","productsImageStyle","productsMobileImageStyle","productsDesktopImageStyle","ValuePropsIntermissionComponent","renderValueProp","valueProp","Icon","Icons","svg","heading","subheading","valueProps","productsImageMobile","productsMobileImages","productsImageDesktop","productsDesktopImages","Container","h4","InfoContainer","ProductImage","DescriptionContainer","Description","SupplementFactsButton","ProductResult","factsPopup","handlePopup","product","childMarkdownRemark","rawMarkdownBody","open","planId","renderOption","showSupplementFacts","showQuantityPicker","productQuantity","productName","NameMap","productImage","heroFeaturedImages","dangerouslySetInnerHTML","__html","html","headerDescription","SupplementFacts","supplementFacts","ProductResultsSection","ResultsButtonContainer","ResultsButton","FinishAddToCart","ValuePropsContainer","Results","userInput","_isFinalResults","input","getPlanForProductSku","planIdAndQuantityArray","isProcessing","_getBundle","updateResultsBundle","trackCustomBundleViewed","_getTotalQuantity","sum","obj","getContentfulProductForPlan","find","match","handleResultsButtonClick","hanldeAddAnother","filteredProductsToAdd","filter","nonInteraction","renderFinishAddToCart","icon","isFinalResults","multiItem","total","reduce","banner","amountOff","off","formatCurrency","round","percentOff","ctaHtml","discountPrice","titleCopy","unformattedTranslation","getBundleCartLimit","HouseholdMemberWrapper","attrs","MemberTitle","h2","lessFadedBlue","RemoveButton","numberToWords","1","2","3","4","5","6","productOptions","HouseholdMember","showSecondaryDropdown","user","_getSecondaryState","_checkDisabledState","removeUser","handleGenderChange","userIndex","_checkProductLogic","onProductChange","handleAgeChange","ageNumber","handleProductChange","renderProductDropdown","o","currentProductOption","onFieldChange","updateDisabledState","canRemove","Remove","AddAnotherPerson","HouseholdBuilderSlide","disabledStates","addHouseholdMember","householdUsers","slice","newProducts","ages","genders","toString","numberInHousehold","addAnotherPerson","splice","removeHouseholdMember","cartLimit","canAddAnother","some","v1Kids","componentName","Male","Female","components","IntroSlide","AgeGenderSlide","PrenatalSlide","ProductSelectionSlide","PostmenopausalSlide","IntermissionSlide","query","data","ValuePropsIntermission","BundleLoopFlow","abandonmentModalClosePath","showDisclaimer","slides","slideData","slideHistory","resultsBundle","setDisclaimerState","shouldShow","_handleSlideSku","_goToSlide","nextSlideName","scrollTo","_transition","_getCompletionPercent","findIndex","s","firstResultsIndex","firstSectionLength","firstSectionPercent","Math","offsetIndex","secondSectionLength","lastSlideName","pop","lastSlide","inputAge","_onChange","inputGender","inputProduct","field","path","_hasUnsavedChanges","onModalClose","SelectedComponent","slideProps","BuildABundlePage","OpenAnimation","keyframes","PopupWrapper","CloseWrapper","media","TableWrapper","tablet","handleEscDown","keyCode","close","renderTable","generateTable","stopPropagation","colSpan","servingSize","servingsPerContainer","labels","dv","generateIngredientRow","nutrients","ingredients","notations","notation","array","otherIngredients","notationReferences","attributions","attribution","dosage","tableElementWrapper","lockScroll","r","$","$findIndex","addToUnscopables","arrayMethodUsesToLength","SKIPS_HOLES","USES_TO_LENGTH","proto","forced","callbackfn"],"mappings":"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","file":"component---src-templates-routes-build-a-bundle-js-89a26f3e9167956a564f.js","sourcesContent":["import React from \"react\";\nimport styled from \"styled-components\";\n\n// Utils\nimport { Font, Color, rem, rgba, responsive } from \"../../utils/style\";\n\n// Components\nimport MagicLink from \"../MagicLink\";\n\n// Styled Elements\nconst StyledButton = styled(MagicLink)`\n box-sizing: border-box;\n padding: 0 24px;\n border-radius: 26px;\n height: 50px;\n cursor: pointer;\n background-color: ${Color.ritualBlue};\n border: 2px solid ${Color.ritualBlue};\n margin: 0;\n transition: all 0.2s;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n z-index: 1;\n position: relative;\n\n ${responsive.sm`\n padding: 0 30px;\n `};\n\n * {\n font-weight: 500;\n }\n\n &.bordered {\n background-color: transparent;\n }\n\n &.short {\n height: 40px;\n }\n\n &.fullwidth {\n width: 100%;\n }\n\n &.long-text {\n padding: 0 20px;\n\n ${responsive.sm`\n padding: 0 20px;\n `}\n }\n\n &:hover {\n border-color: ${Color.ritualYellow} !important;\n background-color: ${Color.ritualYellow} !important;\n\n span {\n color: ${Color.ritualBlue} !important;\n\n &:before {\n background-color: ${Color.ritualBlue} !important;\n }\n }\n }\n\n &.alt-hover {\n &:hover {\n border-color: ${Color.white} !important;\n background-color: ${Color.white} !important;\n\n span {\n color: ${Color.ritualBlue} !important;\n\n &:before {\n background-color: ${Color.ritualBlue} !important;\n }\n }\n }\n }\n\n &.primary-cta {\n background-color: white !important;\n border: none !important;\n color: ${Color.ritualBlue} !important;\n &:hover {\n color: white !important;\n background-color: ${Color.ritualBlue} !important;\n\n span {\n color: white !important;\n }\n }\n\n span {\n color: ${Color.ritualBlue} !important;\n }\n }\n\n &.yellow-cta {\n background-color: ${Color.ritualYellow} !important;\n border: none !important;\n color: ${Color.ritualBlue} !important;\n\n span {\n color: ${Color.ritualBlue} !important;\n\n &:before {\n background-color: ${Color.ritualBlue} !important;\n }\n }\n\n &:hover {\n color: white !important;\n background-color: ${Color.ritualBlue} !important;\n\n span {\n color: ${Color.white} !important;\n\n &:before {\n background-color: ${Color.white} !important;\n }\n }\n }\n\n &.disabled {\n background-color: ${Color.ritualBlue} !important;\n\n span {\n color: ${Color.white} !important;\n\n &:before {\n background-color: ${Color.white} !important;\n }\n }\n }\n }\n\n &.disabled {\n opacity: 0.24;\n cursor: default;\n pointer-events: none;\n\n &:hover {\n background-color: ${Color.ritualBlue} !important;\n border: 2px solid ${Color.ritualBlue} !important;\n\n span {\n color: white !important;\n\n &:before {\n background-color: white !important;\n }\n }\n }\n }\n\n &.outlined {\n background-color: white;\n border: 1px solid ${rgba(Color.ritualBlue, 0.16)} !important;\n\n span {\n color: ${Color.ritualBlue};\n }\n\n &:hover {\n background-color: ${Color.ritualBlue} !important;\n\n span {\n color: white !important;\n }\n\n &:before {\n background-color: ${Color.ritualBlue} !important;\n }\n }\n }\n`;\n\nconst StyledTextWrapper = styled.div`\n white-space: nowrap;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n`;\n\nconst StyledText = styled.span`\n ${Font.circular}\n font-size: ${rem(16)};\n line-height: ${rem(26)};\n font-weight: 500;\n color: ${Color.white};\n transition: all 0.2s;\n display: flex;\n align-items: center;\n align-content: center;\n\n &.short {\n font-size: ${rem(14)};\n line-height: ${rem(24)};\n }\n\n .isvg {\n height: auto;\n display: flex;\n }\n\n &.outlined {\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 &.bordered {\n color: ${Color.ritualBlue};\n\n span {\n color: ${Color.ritualBlue};\n\n &:before {\n background-color: ${Color.ritualBlue};\n }\n }\n }\n`;\n\nconst AppendText = styled.span`\n position: relative;\n ${Font.circular}\n font-size: ${rem(16)};\n line-height: ${rem(26)};\n font-weight: 500;\n color: ${Color.white};\n transition: all 0.2s;\n padding-left: 10px;\n margin-left: 8px;\n\n &.short {\n font-size: ${rem(14)};\n line-height: ${rem(24)};\n\n &:before {\n height: 16px;\n }\n }\n\n &:before {\n position: absolute;\n content: '';\n top: 50%;\n transform: translateY(-50%);\n height: 24px;\n left: 0;\n width: 1px;\n background-color: ${Color.white};\n transition: all 0.2s;\n opacity: 0.56;\n }\n`;\n\nexport default class MagicButton extends React.Component {\n render() {\n let {\n to,\n state,\n href,\n children,\n className,\n target,\n title,\n append,\n onClick,\n ariaLabel,\n id,\n disabled,\n } = this.props;\n\n if (disabled) {\n className = `${className || \"\"} disabled`;\n }\n\n let settings = {\n to,\n state,\n href,\n title,\n target,\n className,\n ariaLabel,\n id,\n };\n\n if (onClick) {\n settings.onClick = disabled ? null : onClick;\n }\n\n return (\n \n \n {children}\n {append && {append}}\n \n \n );\n }\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","/*! npm.im/object-fit-images 3.2.4 */\n'use strict';\n\nvar OFI = 'bfred-it:object-fit-images';\nvar propRegex = /(object-fit|object-position)\\s*:\\s*([-.\\w\\s%]+)/g;\nvar testImg = typeof Image === 'undefined' ? {\n style: {\n 'object-position': 1\n }\n} : new Image();\nvar supportsObjectFit = ('object-fit' in testImg.style);\nvar supportsObjectPosition = ('object-position' in testImg.style);\nvar supportsOFI = ('background-size' in testImg.style);\nvar supportsCurrentSrc = typeof testImg.currentSrc === 'string';\nvar nativeGetAttribute = testImg.getAttribute;\nvar nativeSetAttribute = testImg.setAttribute;\nvar autoModeEnabled = false;\n\nfunction createPlaceholder(w, h) {\n return \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='\" + w + \"' height='\" + h + \"'%3E%3C/svg%3E\";\n}\n\nfunction polyfillCurrentSrc(el) {\n if (el.srcset && !supportsCurrentSrc && window.picturefill) {\n var pf = window.picturefill._; // parse srcset with picturefill where currentSrc isn't available\n\n if (!el[pf.ns] || !el[pf.ns].evaled) {\n // force synchronous srcset parsing\n pf.fillImg(el, {\n reselect: true\n });\n }\n\n if (!el[pf.ns].curSrc) {\n // force picturefill to parse srcset\n el[pf.ns].supported = false;\n pf.fillImg(el, {\n reselect: true\n });\n } // retrieve parsed currentSrc, if any\n\n\n el.currentSrc = el[pf.ns].curSrc || el.src;\n }\n}\n\nfunction getStyle(el) {\n var style = getComputedStyle(el).fontFamily;\n var parsed;\n var props = {};\n\n while ((parsed = propRegex.exec(style)) !== null) {\n props[parsed[1]] = parsed[2];\n }\n\n return props;\n}\n\nfunction setPlaceholder(img, width, height) {\n // Default: fill width, no height\n var placeholder = createPlaceholder(width || 1, height || 0); // Only set placeholder if it's different\n\n if (nativeGetAttribute.call(img, 'src') !== placeholder) {\n nativeSetAttribute.call(img, 'src', placeholder);\n }\n}\n\nfunction onImageReady(img, callback) {\n // naturalWidth is only available when the image headers are loaded,\n // this loop will poll it every 100ms.\n if (img.naturalWidth) {\n callback(img);\n } else {\n setTimeout(onImageReady, 100, img, callback);\n }\n}\n\nfunction fixOne(el) {\n var style = getStyle(el);\n var ofi = el[OFI];\n style['object-fit'] = style['object-fit'] || 'fill'; // default value\n // Avoid running where unnecessary, unless OFI had already done its deed\n\n if (!ofi.img) {\n // fill is the default behavior so no action is necessary\n if (style['object-fit'] === 'fill') {\n return;\n } // Where object-fit is supported and object-position isn't (Safari < 10)\n\n\n if (!ofi.skipTest && // unless user wants to apply regardless of browser support\n supportsObjectFit && // if browser already supports object-fit\n !style['object-position'] // unless object-position is used\n ) {\n return;\n }\n } // keep a clone in memory while resetting the original to a blank\n\n\n if (!ofi.img) {\n ofi.img = new Image(el.width, el.height);\n ofi.img.srcset = nativeGetAttribute.call(el, \"data-ofi-srcset\") || el.srcset;\n ofi.img.src = nativeGetAttribute.call(el, \"data-ofi-src\") || el.src; // preserve for any future cloneNode calls\n // https://github.com/bfred-it/object-fit-images/issues/53\n\n nativeSetAttribute.call(el, \"data-ofi-src\", el.src);\n\n if (el.srcset) {\n nativeSetAttribute.call(el, \"data-ofi-srcset\", el.srcset);\n }\n\n setPlaceholder(el, el.naturalWidth || el.width, el.naturalHeight || el.height); // remove srcset because it overrides src\n\n if (el.srcset) {\n el.srcset = '';\n }\n\n try {\n keepSrcUsable(el);\n } catch (err) {\n if (window.console) {\n console.warn('https://bit.ly/ofi-old-browser');\n }\n }\n }\n\n polyfillCurrentSrc(ofi.img);\n el.style.backgroundImage = \"url(\\\"\" + (ofi.img.currentSrc || ofi.img.src).replace(/\"/g, '\\\\\"') + \"\\\")\";\n el.style.backgroundPosition = style['object-position'] || 'center';\n el.style.backgroundRepeat = 'no-repeat';\n el.style.backgroundOrigin = 'content-box';\n\n if (/scale-down/.test(style['object-fit'])) {\n onImageReady(ofi.img, function () {\n if (ofi.img.naturalWidth > el.width || ofi.img.naturalHeight > el.height) {\n el.style.backgroundSize = 'contain';\n } else {\n el.style.backgroundSize = 'auto';\n }\n });\n } else {\n el.style.backgroundSize = style['object-fit'].replace('none', 'auto').replace('fill', '100% 100%');\n }\n\n onImageReady(ofi.img, function (img) {\n setPlaceholder(el, img.naturalWidth, img.naturalHeight);\n });\n}\n\nfunction keepSrcUsable(el) {\n var descriptors = {\n get: function get(prop) {\n return el[OFI].img[prop ? prop : 'src'];\n },\n set: function set(value, prop) {\n el[OFI].img[prop ? prop : 'src'] = value;\n nativeSetAttribute.call(el, \"data-ofi-\" + prop, value); // preserve for any future cloneNode\n\n fixOne(el);\n return value;\n }\n };\n Object.defineProperty(el, 'src', descriptors);\n Object.defineProperty(el, 'currentSrc', {\n get: function get() {\n return descriptors.get('currentSrc');\n }\n });\n Object.defineProperty(el, 'srcset', {\n get: function get() {\n return descriptors.get('srcset');\n },\n set: function set(ss) {\n return descriptors.set(ss, 'srcset');\n }\n });\n}\n\nfunction hijackAttributes() {\n function getOfiImageMaybe(el, name) {\n return el[OFI] && el[OFI].img && (name === 'src' || name === 'srcset') ? el[OFI].img : el;\n }\n\n if (!supportsObjectPosition) {\n HTMLImageElement.prototype.getAttribute = function (name) {\n return nativeGetAttribute.call(getOfiImageMaybe(this, name), name);\n };\n\n HTMLImageElement.prototype.setAttribute = function (name, value) {\n return nativeSetAttribute.call(getOfiImageMaybe(this, name), name, String(value));\n };\n }\n}\n\nfunction fix(imgs, opts) {\n var startAutoMode = !autoModeEnabled && !imgs;\n opts = opts || {};\n imgs = imgs || 'img';\n\n if (supportsObjectPosition && !opts.skipTest || !supportsOFI) {\n return false;\n } // use imgs as a selector or just select all images\n\n\n if (imgs === 'img') {\n imgs = document.getElementsByTagName('img');\n } else if (typeof imgs === 'string') {\n imgs = document.querySelectorAll(imgs);\n } else if (!('length' in imgs)) {\n imgs = [imgs];\n } // apply fix to all\n\n\n for (var i = 0; i < imgs.length; i++) {\n imgs[i][OFI] = imgs[i][OFI] || {\n skipTest: opts.skipTest\n };\n fixOne(imgs[i]);\n }\n\n if (startAutoMode) {\n document.body.addEventListener('load', function (e) {\n if (e.target.tagName === 'IMG') {\n fix(e.target, {\n skipTest: opts.skipTest\n });\n }\n }, true);\n autoModeEnabled = true;\n imgs = 'img'; // reset to a generic selector for watchMQ\n } // if requested, watch media queries for object-fit change\n\n\n if (opts.watchMQ) {\n window.addEventListener('resize', fix.bind(null, imgs, {\n skipTest: opts.skipTest\n }));\n }\n}\n\nfix.supportsObjectFit = supportsObjectFit;\nfix.supportsObjectPosition = supportsObjectPosition;\nhijackAttributes();\nmodule.exports = fix;","import React from \"react\";\nimport styled from \"styled-components\";\n\nimport { Color, rem, responsive } from \"../../utils/style\";\nimport { Icons } from \"../../utils/svg\";\nimport Text from \"../Text\";\n\nconst Quantity = styled.div`\n display: flex;\n align-items: center;\n`;\n\nconst SelectWrapper = styled.div`\n position: relative;\n align-items: center;\n color: ${Color.ritualBlue};\n font-weight: 500;\n font-size: ${rem(16)};\n line-height: ${rem(26)};\n\n ${responsive.md`\n font-size: ${rem(14)};\n line-height: ${rem(24)};\n `}\n\n svg {\n display: none;\n\n ${responsive.md`\n display: block;\n width: 14px;\n height: 8px;\n position: absolute;\n top: calc(50% - 4px);\n right: 0;\n pointer-events: none;\n `};\n }\n\n > span {\n position: absolute;\n left: 0;\n pointer-events: none;\n }\n\n &.disabled {\n opacity: 0.24;\n }\n\n .sr-label {\n display: none;\n }\n`;\n\nconst StyledLabel = styled.label`\n position: relative;\n font-size: ${rem(12)};\n line-height: ${rem(18)};\n color: ${Color.ritualBlue};\n border-bottom: 2px solid ${Color.ritualBlue};\n margin: 0;\n padding: 0;\n`;\n\nconst Select = styled.select`\n position: absolute;\n font-size: ${rem(16)};\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n opacity: 0;\n border: none;\n border-radius: 0px !important;\n -webkit-appearance: none !important;\n appearance: none !important;\n margin: 0;\n background: 0;\n width: 100%;\n\n ${responsive.md`\n width: auto;\n position: relative;\n opacity: 1;\n padding: 0 0 0 35px;\n font-size: inherit;\n color: ${Color.ritualBlue};\n cursor: pointer;\n text-align: right !important;\n border-bottom: 2px solid ${Color.ritualBlue};\n border-bottom: none;\n padding: 0 15px 0 30px;\n width: calc(15px + 15px + 30px);\n text-align: left;\n `};\n\n [data-whatintent=\"mouse\"] &:focus,\n [data-whatintent=\"touch\"] &:focus {\n outline: none;\n }\n`;\n\nexport default class QuantityPicker extends React.Component {\n renderSelect(label = false) {\n const {\n itemId,\n itemQuantity,\n totalQuantity,\n maxQuantity,\n disabled,\n allowZero,\n } = this.props;\n\n // Numbers of spaces currently available.\n let availableSpace = maxQuantity - totalQuantity;\n let hasOtherItems = totalQuantity !== itemQuantity;\n\n if (availableSpace < 1) {\n // Default to current quantity if there's no room for more items.\n availableSpace = itemQuantity;\n } else {\n availableSpace += itemQuantity;\n }\n\n return (\n \n \n {allowZero && hasOtherItems && }\n {[...Array(availableSpace)].map((_, i) => {\n const amount = i + 1;\n return (\n \n );\n })}\n \n );\n }\n\n render() {\n const { itemId, itemQuantity, maxQuantity } = this.props;\n\n if (maxQuantity === 1) {\n return (\n \n \n \n \n \n );\n }\n\n const labelId = `${itemId}-label`;\n\n return (\n \n \n \n \n \n {this.renderSelect(labelId)}\n \n \n \n \n \n \n {this.renderSelect()}\n \n \n \n );\n }\n}\n","\"use strict\";\n\nvar _interopRequireWildcard3 = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _objectWithoutPropertiesLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutPropertiesLoose\"));\n\nvar _interopRequireWildcard2 = _interopRequireDefault(require(\"@babel/runtime/helpers/interopRequireWildcard\"));\n\nvar _inheritsLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inheritsLoose\"));\n\nvar _react = _interopRequireWildcard3(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _index = _interopRequireDefault(require(\"../index\"));\n\nvar ImageWithIEPolyfill = /*#__PURE__*/function (_Component) {\n (0, _inheritsLoose2.default)(ImageWithIEPolyfill, _Component);\n\n function ImageWithIEPolyfill() {\n var _this;\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 = _Component.call.apply(_Component, [this].concat(args)) || this;\n _this.imageRef = _this.props.innerRef || /*#__PURE__*/(0, _react.createRef)();\n _this.placeholderRef = /*#__PURE__*/(0, _react.createRef)();\n return _this;\n }\n\n var _proto = ImageWithIEPolyfill.prototype;\n\n // Load object-fit/position polyfill if required (e.g. in IE)\n _proto.componentDidMount = function componentDidMount() {\n var _this2 = this;\n\n var testImg = document.createElement(\"img\");\n\n if (typeof testImg.style.objectFit === \"undefined\" || typeof testImg.style.objectPosition === \"undefined\") {\n Promise.resolve().then(function () {\n return (0, _interopRequireWildcard2.default)(require(\"object-fit-images\"));\n }).then(function (_ref) {\n var ObjectFitImages = _ref.default;\n ObjectFitImages(_this2.imageRef.current.imageRef.current);\n ObjectFitImages(_this2.placeholderRef.current);\n });\n }\n };\n\n _proto.render = function render() {\n var _this$props = this.props,\n objectFit = _this$props.objectFit,\n objectPosition = _this$props.objectPosition,\n props = (0, _objectWithoutPropertiesLoose2.default)(_this$props, [\"objectFit\", \"objectPosition\"]);\n var polyfillStyle = {\n objectFit: objectFit,\n objectPosition: objectPosition,\n fontFamily: \"\\\"object-fit: \" + objectFit + \"; object-position: \" + objectPosition + \"\\\"\"\n };\n return /*#__PURE__*/_react.default.createElement(_index.default, (0, _extends2.default)({\n ref: this.imageRef,\n placeholderRef: this.placeholderRef\n }, props, {\n imgStyle: (0, _extends2.default)({}, props.imgStyle, polyfillStyle),\n placeholderStyle: (0, _extends2.default)({}, props.placeholderStyle, polyfillStyle)\n }));\n };\n\n return ImageWithIEPolyfill;\n}(_react.Component); // If you modify these propTypes, please don't forget to update following files as well:\n// https://github.com/gatsbyjs/gatsby/blob/master/packages/gatsby-image/withIEPolyfill/index.d.ts\n// https://github.com/gatsbyjs/gatsby/blob/master/packages/gatsby-image/README.md#gatsby-image-props\n// https://github.com/gatsbyjs/gatsby/blob/master/docs/docs/gatsby-image.md#gatsby-image-props\n\n\nImageWithIEPolyfill.propTypes = {\n objectFit: _propTypes.default.string,\n objectPosition: _propTypes.default.string\n};\nImageWithIEPolyfill.defaultProps = {\n objectFit: \"cover\",\n objectPosition: \"50% 50%\"\n};\n\nvar _default = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {\n return /*#__PURE__*/_react.default.createElement(ImageWithIEPolyfill, (0, _extends2.default)({}, props, {\n innerRef: ref\n }));\n});\n\nexports.default = _default;","import React from \"react\";\nimport styled from \"styled-components\";\n\n// Utils\nimport { Color, rem, responsive } from \"../../utils/style\";\nimport { Icons } from \"../../utils/svg\";\n\n// Components\nimport RitualLogo from \"../global/RitualLogo\";\nimport Text from \"../Text\";\n\n// Styled Elements\nconst SimpleNavWrapper = styled.div`\n width: 100%;\n height: 52px;\n display: flex;\n position: relative;\n align-items: center;\n justify-content: center;\n border-top: 4px solid ${Color.ritualBlue};\n background-color: #fff;\n z-index: 10;\n\n svg {\n color: ${Color.ritualBlue};\n }\n\n ${responsive.sm`\n height: 60px;\n `};\n\n ${responsive.md`\n height: 76px;\n `};\n`;\n\nconst LeftColumn = styled.div`\n display: flex;\n align-items: center;\n justify-content: flex-start;\n\n padding-left: 32px;\n\n ${responsive.sm`\n padding-left: 34px;\n `};\n\n ${responsive.md`\n padding-left: 45px;\n `};\n\n ${responsive.lg`\n padding-left: 98px;\n `};\n`;\n\nconst CenteredColumn = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n`;\n\nconst LogoWrapper = styled.div`\n svg {\n height: 16px;\n width: 51px;\n\n ${responsive.sm`\n height: 18px;\n width: 58px;\n `}\n\n ${responsive.md`\n height: 22px;\n width: 70px;\n `}\n }\n`;\n\nconst RightColumn = styled.div`\n display: flex;\n align-items: center;\n justify-content: flex-end;\n\n padding-right: 32px;\n\n ${responsive.sm`\n padding-right: 34px;\n `};\n\n ${responsive.md`\n padding-right: 45px;\n `};\n\n ${responsive.lg`\n padding-right: 98px;\n `};\n`;\n\nconst BackButton = styled.button`\n display: flex;\n align-items: center;\n justify-content: flex-start;\n margin: 0;\n padding: 0;\n appearance: none;\n background: none;\n border: none;\n color: ${Color.ritualBlue};\n\n [data-whatintent=\"mouse\"] &:focus,\n [data-whatintent=\"touch\"] &:focus {\n outline: none;\n }\n\n svg {\n width: 20px;\n height: 12px;\n }\n\n span {\n display: none;\n font-weight: 500;\n font-size: ${rem(16)};\n line-height: ${rem(26)};\n\n ${responsive.sm`\n display: block;\n margin-left: 16px;\n `};\n }\n`;\n\nconst CloseButton = styled.button`\n display: flex;\n align-items: center;\n justify-content: center;\n\n appearance: none;\n background: none;\n border: none;\n\n [data-whatintent=\"mouse\"] &:focus,\n [data-whatintent=\"touch\"] &:focus {\n outline: none;\n }\n\n svg {\n width: 16px;\n height: 16px;\n }\n`;\n\nexport default class Navigation extends React.Component {\n handleClick() {\n const { goToPreviousSlide } = this.props;\n goToPreviousSlide();\n }\n\n render() {\n const { currentSlide } = this.props;\n\n let displayBackButton = currentSlide.slideName !== \"intro\";\n\n return (\n \n
\n \n {displayBackButton && (\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\";\n\n// Utils\nimport { Color, responsive } from \"../../utils/style\";\n\n// Components\nimport Img from \"gatsby-image/withIEPolyfill\";\n\n// Styled Elements\nconst Wrapper = styled.div`\n position: relative;\n width: 100%;\n padding: 0 8px;\n\n ${responsive.sm`\n padding: 0 24px;\n `};\n\n ${responsive.lg`\n padding-left: 40px;\n padding-right: 40px;\n `};\n`;\n\nconst SlideContainerElement = styled.div`\n position: relative;\n width: 100%;\n height: 100%;\n overflow: hidden;\n margin: 0 auto;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: flex-start;\n height: 100%;\n min-height: calc(100vh - 66px);\n\n ${responsive.sm`\n min-height: calc(100vh - 68px - 24px);\n `};\n\n ${responsive.md`\n min-height: calc(100vh - 84px - 24px);\n `};\n\n ${responsive.lg`\n min-height: calc(100vh - 76px - 40px);\n `};\n`;\n\nconst SlideContent = styled.div`\n position: relative;\n z-index: 10;\n width: 100%;\n opacity: 1;\n transition: opacity 0.6s;\n height: 100%;\n min-height: calc(100vh - 66px);\n\n ${responsive.sm`\n min-height: calc(100vh - 68px - 24px);\n `};\n\n ${responsive.md`\n min-height: calc(100vh - 84px - 24px);\n `};\n\n ${responsive.lg`\n min-height: calc(100vh - 84px - 40px);\n `};\n\n &.fade {\n opacity: 0;\n }\n`;\n\nconst SlideBackgroundImage = styled(Img)`\n z-index: 1;\n`;\n\nconst ProgressWrapper = styled.div`\n width: 100%;\n background-color: ${Color.ritualGrey};\n`;\n\nconst ProgressBar = styled.div`\n width: 100%;\n background-color: ${Color.ritualBlue};\n transition: width 0.2s;\n height: 6px;\n width: ${p => 100 - p.incompletionPercent}%;\n\n ${responsive.sm`\n height: 8px;\n `};\n`;\n\nexport default class SlideContainer extends React.Component {\n render() {\n const {\n backgroundImage,\n completionPercent,\n children,\n transition,\n } = this.props;\n\n return (\n \n \n \n \n \n \n {children}\n \n {backgroundImage && (\n \n )}\n \n \n );\n }\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\n\n// Utils\nimport { media, Color, rem, Font, responsive } from \"../../utils/style\";\n\n// Components\nimport MagicLink from \"../MagicLink\";\nimport Text from \"../Text\";\n\n// Styled Elements\nconst Wrapper = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n margin: 50px 20px 112px;\n\n ${responsive.sm`\n max-width: 534px;\n margin: 48px auto;\n `};\n\n ${responsive.md`\n max-width: unset;\n width: 100%;\n margin: 56px 0;\n padding: 0 24px;\n `};\n`;\n\nconst DisclaimerCopy = styled.p`\n ${Font.circular}\n font-size: ${rem(12)};\n line-height: ${rem(18)};\n font-weight: 500;\n padding: 16px;\n margin: 0 0 16px;\n color: ${Color.ritualBlue};\n border: 1px solid rgba(0, 0, 0, 0.16);\n`;\n\nconst FDALink = styled.p`\n ${Font.circular}\n font-size: ${rem(12)};\n line-height: ${rem(18)};\n font-weight: 500;\n margin: 0;\n color: ${Color.ritualBlue};\n\n a {\n border-bottom: 1px solid ${Color.ritualBlue};\n transition: all 0.2s;\n\n &:hover {\n opacity: 0.56;\n }\n }\n`;\n\nexport default class Disclaimer extends React.Component {\n render() {\n return (\n \n \n \n \n \n {\" \"}\n \n \n \n .\n \n \n );\n }\n}\n","// Utils\nimport { getPropertiesForProduct } from \"./helpers\";\nimport metrics from \"../metrics\";\n\nexport function trackCustomBundleUpdated(planId) {\n const productProperties = getPropertiesForProduct(planId);\n\n metrics.track(\"Custom Bundle Updated\", productProperties);\n}\n\nexport function trackCustomBundleAdded(bundle) {\n const products = _getBundleProductProperties(bundle);\n\n metrics.track(\"Custom Bundle Added\", {\n products: products,\n quantity: bundle.length,\n });\n}\n\nexport function trackCustomBundleViewed(bundle) {\n const products = _getBundleProductProperties(bundle);\n\n metrics.track(\"Custom Bundle Viewed\", {\n products: products,\n quantity: bundle.length,\n });\n}\n\nfunction _getBundleProductProperties(bundle) {\n return bundle.map(plan => {\n return getPropertiesForProduct(plan.id);\n });\n}\n","import React from \"react\";\nimport styled, { css } from \"styled-components\";\n\n// Services\nimport { navigate } from \"../../services/navigation\";\n\n// Utils\nimport { Font, Color, responsive, rem } from \"../../utils/style\";\nimport { getPlanIdAndQuantityArray } from \"../../utils/bundle\";\nimport { trackCustomBundleAdded } from \"../../utils/tracking/bundle\";\n\n// Components\nimport MagicModal from \"../MagicModal\";\nimport RitualButton from \"../global/RitualButton\";\nimport Text from \"../Text\";\n\n// Store\nimport { connect } from \"react-redux\";\nimport { addProductsToCart } from \"../../store/cart/actions\";\n\nconst ModalStyle = css`\n padding: 40px 24px;\n\n ${responsive.sm`\n padding: 40px;\n max-width: 580px;\n `}\n\n ${responsive.md`\n padding: 56px 102px;\n max-width: 770px;\n `}\n\n ${responsive.lg`\n padding: 56px 100px;\n `}\n`;\n\nconst Title = styled.h1`\n margin: 0;\n font-weight: 500;\n\n letter-spacing: -0.2px;\n font-size: ${rem(22)};\n line-height: ${rem(32)};\n\n ${responsive.md`\n letter-spacing: -0.4px;\n font-size: ${rem(30)};\n line-height: ${rem(36)};\n `}\n`;\n\nconst Divider = styled.hr`\n border: none;\n height: 2px;\n background-color: ${Color.ritualBlue};\n width: 100%;\n\n margin: 24px 0 16px;\n\n ${responsive.md`\n margin: 40px 0 24px;\n `}\n`;\n\nconst Message = styled.p`\n margin: 0;\n ${Font.dutch};\n\n font-size: ${rem(16)};\n line-height: ${rem(26)};\n margin-bottom: 32px;\n\n ${responsive.md`\n margin: 0 0 40px;\n `}\n`;\n\nconst ButtonsContainer = styled.div`\n display: flex;\n flex-direction: column;\n\n ${responsive.sm`\n flex-direction: row;\n `}\n`;\n\nconst Button = styled(RitualButton)`\n a {\n padding: 0 32px;\n }\n margin-bottom: 16px;\n\n &:last-of-type {\n margin-bottom: 0;\n }\n\n ${responsive.sm`\n margin-bottom: 0;\n margin-left: 24px;\n\n &:last-of-type {\n order: -1;\n margin-left: 0;\n }\n `}\n`;\n\nexport class AbandonmentModal extends React.Component {\n constructor() {\n super();\n\n this.state = {\n closed: false,\n };\n }\n\n handleAbanadon() {\n this.setState(\n {\n closed: true,\n },\n () => {\n navigate(this.props.closePath);\n },\n );\n }\n\n handleAddToCart() {\n this.setState(\n {\n closed: true,\n },\n () => {\n const bundle = this.props.bundle;\n const planIds = bundle.map(item => item.id);\n const productsToAdd = getPlanIdAndQuantityArray(planIds);\n\n trackCustomBundleAdded(bundle);\n\n this.props.dispatchAddProductsToCart(productsToAdd);\n navigate(\"/cart\");\n },\n );\n }\n\n render() {\n return (\n \n \n <Text\n id=\"build-bundle.abandonment-modal.title\"\n defaultMessage=\"You’re almost there\"\n />\n \n \n \n \n \n \n \n \n \n \n );\n }\n}\n\nexport default connect(null, {\n dispatchAddProductsToCart: addProductsToCart,\n})(AbandonmentModal);\n","import React from \"react\";\nimport { css } from \"styled-components\";\n\n// Components\nimport Ribbon from \"../global/Ribbon\";\n\n// Utils\nimport { rem, responsive } from \"../../utils/style\";\n\n// Styled Elementscss\nconst QuizRibbonStyle = css`\n margin-bottom: 24px;\n\n height: 28px;\n padding: 0 11px;\n letter-spacing: 0.67px;\n font-size: ${rem(10)};\n line-height: ${rem(16)};\n\n &::before,\n &::after {\n border-width: 14px 6px;\n }\n\n ${responsive.sm`\n height: 32px;\n\n letter-spacing: 0.8px;\n font-size: ${rem(12)};\n line-height: ${rem(20)};\n\n &::before,\n &::after {\n border-width: 16px 8px;\n }\n `}\n`;\n\nexport default class QuizRibbon extends React.Component {\n render() {\n let { children } = this.props;\n return (\n \n {children}\n \n );\n }\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\n\n// Utils\nimport { Color, rem, responsive } from \"../../utils/style\";\n\n// Styled Elements\nconst Button = styled.button`\n color: ${Color.ritualBlue};\n font-size: ${rem(22)};\n line-height: ${rem(30)};\n text-align: center;\n user-select: none;\n outline: none;\n border: none;\n\n background-color: ${Color.white};\n padding: 16px 40px;\n border-radius: 16px;\n\n &:hover {\n padding: 14px 38px;\n border: 2px solid ${Color.ritualBlue};\n }\n\n &:active {\n outline: none;\n border: 2px solid ${Color.ritualBlue};\n }\n\n [data-whatintent=\"mouse\"] &:focus,\n [data-whatintent=\"touch\"] &:focus {\n outline: none;\n }\n\n &.disabled {\n opacity: 0.24;\n cursor: default;\n pointer-events: none;\n\n &:hover {\n background-color: ${Color.ritualBlue} !important;\n border: 2px solid ${Color.ritualBlue} !important;\n\n span {\n color: white !important;\n\n &:before {\n background-color: white !important;\n }\n }\n }\n }\n\n ${responsive.sm`\n font-size: ${rem(30)};\n letter-spacing: -0.4px;\n line-height: ${rem(36)};\n text-align: center;\n padding: 24px 48px;\n\n &:hover {\n padding: 22px 46px;\n border: 2px solid ${Color.ritualBlue};\n }\n `};\n`;\n\nexport default class QuizButton extends React.Component {\n handleClick() {\n if (document && document.documentElement) {\n document.documentElement.scrollTop = 0;\n }\n this.props.clickHandler();\n }\n\n render() {\n let { children, className, disabled } = this.props;\n\n return (\n \n {children}\n \n );\n }\n}\n","import React from \"react\";\n\n// Utils\nimport { Icons } from \"../../utils/svg\";\n\nexport default class YellowArrow extends React.Component {\n render() {\n const { className } = this.props;\n return (\n
\n \n \n
\n );\n }\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\n\n// Utils\nimport { Color, rem, Font, responsive, rgba } from \"../../../utils/style\";\nimport { getDiscountData } from \"../../../utils/bundle\";\n\n// Components\nimport QuizRibbon from \"../QuizRibbon\";\nimport QuizButton from \"../QuizButton\";\nimport YellowArrow from \"../YellowArrow\";\nimport Text from \"../../Text\";\n\n// Styled Elements\nconst Wrapper = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n text-align: center;\n margin: 48px 24px 38px;\n\n ${responsive.sm`\n max-width: 500px;\n margin: 80px auto;\n `};\n\n ${responsive.md`\n max-width: 500px;\n margin: 80px auto;\n `};\n\n ${responsive.lg`\n margin: 120px auto;\n `}\n`;\n\nconst Copy = styled.div`\n margin-bottom: 32px;\n\n h1 {\n font-size: ${rem(22)};\n letter-spacing: -0.2px;\n line-height: ${rem(32)};\n text-align: center;\n margin-bottom: 16px;\n }\n\n p {\n ${Font.dutch}\n font-size: ${rem(16)};\n letter-spacing: 0px;\n line-height: ${rem(26)};\n font-weight: normal;\n text-align: center;\n margin-bottom: 0;\n }\n\n ${responsive.sm`\n margin-bottom: 48px;\n h1 {\n font-size: ${rem(40)};\n letter-spacing: -1px;\n line-height: ${rem(50)};\n margin-bottom: 24px;\n }\n\n p {\n font-size: ${rem(18)};\n line-height: ${rem(28)};\n width: 500px;\n }\n\n `}\n`;\n\nconst TagLine = styled.p`\n color: ${rgba(Color.ritualBlue, 0.56)};\n font-size: ${rem(16)};\n line-height: ${rem(26)};\n text-align: center;\n margin-top: 40px;\n margin-bottom: 0;\n\n ${responsive.sm`\n margin-top: 48px;\n font-size: ${rem(18)};\n line-height: ${rem(28)};\n `}\n`;\n\nconst IntroQuizButton = styled(QuizButton)`\n width: 100%;\n\n ${responsive.sm`\n width: auto;\n `};\n`;\n\nconst ArrowWrapper = styled.div`\n position: relative;\n width: 100%;\n\n ${responsive.sm`\n width: auto;\n `};\n`;\n\nconst Arrow = styled(YellowArrow)`\n position: absolute;\n right: 9px;\n top: -25px;\n transform: scaleX(-1) rotate(-25deg);\n\n ${responsive.sm`\n right: -70px;\n top: -29px;\n transform: scaleX(-1) rotate(-20deg);\n `};\n`;\n\nexport default class Intro extends React.Component {\n render() {\n const { discount, nextSlide, slide } = this.props;\n const discountData = getDiscountData();\n return (\n \n {discount && (\n \n \n \n )}\n \n

\n \n

\n

\n \n

\n
\n \n {\n nextSlide(slide.answers[0]);\n }}\n >\n \n \n \n \n\n \n \n \n
\n );\n }\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\n\n// Utils\nimport { rem, responsive } from \"../../../utils/style\";\n\n// Components\nimport QuizButton from \"../QuizButton\";\nimport YellowArrow from \"../YellowArrow\";\nimport Text from \"../../Text\";\n\n// Styled Elements\nconst Wrapper = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n text-align: center;\n margin: 56px 24px;\n\n ${responsive.sm`\n max-width: 500px;\n margin: 80px auto;\n `};\n\n ${responsive.lg`\n margin: 120px auto;\n `}\n`;\n\nconst Copy = styled.div`\n margin-bottom: 24px;\n\n h1 {\n font-size: ${rem(26)};\n letter-spacing: -0.3px;\n line-height: ${rem(36)};\n text-align: center;\n margin-bottom: 0;\n }\n\n ${responsive.sm`\n margin-bottom: 40px;\n h1 {\n font-size: ${rem(48)};\n letter-spacing: -1.4px;\n line-height: ${rem(54)};\n width: 470px;\n }\n `}\n`;\n\nconst Buttons = styled.div`\n display: flex;\n flex-direction: column;\n\n button {\n margin-bottom: 8px;\n\n ${responsive.sm`\n margin-bottom: 16px;\n `}\n\n &:last-child {\n margin-bottom: 0;\n }\n }\n`;\n\nconst Answer = styled(QuizButton)`\n font-size: ${rem(20)};\n\n ${responsive.sm`\n font-size: ${rem(22)};\n line-height: ${rem(32)};\n `};\n`;\n\nconst ArrowWrapper = styled.div`\n position: relative;\n width: 100%;\n max-width: 256px;\n margin: 0 auto;\n\n ${responsive.sm`\n width: auto;\n max-width: unset;\n `};\n`;\n\nconst Arrow = styled(YellowArrow)`\n position: absolute;\n left: -11px;\n bottom: -40px;\n transform: rotate(48deg);\n\n @media (min-width: 375px) {\n left: -33px;\n bottom: -25px;\n }\n\n ${responsive.sm`\n left: -54px;\n bottom: -39px;\n transform: rotate(50deg);\n `};\n`;\n\nexport default class TakeVitamins extends React.Component {\n render() {\n let { slide, nextSlide } = this.props;\n return (\n \n \n \n

\n \n

\n \n
\n
\n \n {slide.answers.map((answer, i) => {\n return (\n {\n nextSlide(answer);\n }}\n key={i}\n >\n {answer.copy}\n \n );\n })}\n \n
\n );\n }\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\n\n// Utils\nimport { Color, rem, responsive, rgba } from \"../../utils/style\";\n\n// Components\nimport { Icons } from \"../../utils/svg\";\n\n// Styled Elements\nconst SelectWrapper = styled.div`\n display: flex;\n flex-direction: column;\n width: 100%;\n`;\n\nconst DropdownWrapper = styled.div`\n position: relative;\n outline: ${Color.ritualYellow};\n display: block;\n cursor: pointer;\n\n ${responsive.sm`\n margin: 0;\n `}\n\n svg {\n position: absolute;\n top: 28px;\n right: 32px;\n width: 16px;\n height: auto;\n z-index: 10;\n transform: ${p => (p.isOpen ? \"rotate(0deg)\" : \"rotate(180deg)\")};\n pointer-events: none;\n\n ${responsive.sm`\n top: 37px;\n right: 48px;\n width: 20px;\n `};\n\n g {\n fill: ${Color.ritualDisabledBlue};\n }\n }\n\n [data-whatintent=\"mouse\"] & {\n display: none;\n }\n`;\n\nconst NativeDropdown = styled.select`\n position: relative;\n display: flex;\n align-items: center;\n cursor: pointer;\n padding: 16px 32px;\n border-radius: 16px;\n width: 100%;\n border: none;\n background-color: ${Color.white};\n appearance: none;\n\n height: 64px;\n\n font-size: ${rem(22)};\n line-height: ${rem(32)};\n letter-spacing: -0.2px;\n color: ${p => (p.isPlaceholder ? Color.fadedBlue : Color.ritualBlue)};\n font-weight: 500;\n\n ${responsive.sm`\n height: 84px;\n font-size: ${rem(30)};\n line-height: ${rem(36)};\n letter-spacing: -0.4px;\n padding: 24px 48px;\n `};\n\n &.small {\n font-size: ${rem(16)};\n line-height: ${rem(26)};\n letter-spacing: 0;\n\n ${responsive.sm`\n font-size: ${rem(22)};\n line-height: ${rem(32)};\n letter-spacing: -0.2px;\n padding: 26px 48px;\n `};\n }\n`;\n\nconst DropdownGradient = styled.div`\n pointer-events: none;\n position: absolute;\n top: 1px;\n right: 1px;\n bottom: 1px;\n width: 80px;\n border-top-right-radius: 16px;\n border-bottom-right-radius: 16px;\n z-index: 1;\n\n background: rgb(255, 255, 255);\n background: linear-gradient(\n 90deg,\n rgba(255, 255, 255, 0) 0%,\n rgba(255, 255, 255, 1) 16%,\n rgba(255, 255, 255, 1) 100%,\n rgba(255, 255, 255, 0) 100%\n );\n`;\n\nconst CustomSelect = styled.div`\n position: relative;\n width: 100%;\n display: none;\n background: transparent;\n border: none;\n padding: 0;\n text-align: left;\n color: ${Color.ritualBlue};\n\n [data-whatintent=\"mouse\"] & {\n display: block;\n outline: none;\n }\n`;\n\nconst CustomSelectTrigger = styled.div`\n position: relative;\n display: flex;\n align-items: center;\n cursor: pointer;\n padding: 16px 32px;\n border-radius: 16px;\n background-color: ${Color.white};\n\n /* Hide overflowing text */\n overflow: hidden;\n white-space: nowrap;\n\n font-size: ${rem(22)};\n line-height: ${rem(32)};\n letter-spacing: -0.2px;\n color: ${p => (p.isPlaceholder ? Color.fadedBlue : Color.ritualBlue)};\n font-weight: 500;\n\n ${responsive.sm`\n font-size: ${rem(30)};\n line-height: ${rem(36)};\n letter-spacing: -0.4px;\n padding: 24px 48px;\n `};\n\n svg {\n position: absolute;\n top: 28px;\n right: 32px;\n width: 16px;\n height: auto;\n transform: ${p => (p.isOpen ? \"rotate(0deg)\" : \"rotate(180deg)\")};\n z-index: 10;\n\n ${responsive.sm`\n top: 37px;\n right: 48px;\n width: 20px;\n `};\n\n g {\n transition: fill 0.1s;\n fill: ${p => (p.isOpen ? Color.ritualBlue : Color.fadedBlue)};\n }\n }\n\n &.small {\n font-size: ${rem(16)};\n line-height: ${rem(26)};\n letter-spacing: 0;\n\n svg {\n top: 24px;\n }\n\n ${responsive.sm`\n font-size: ${rem(22)};\n line-height: ${rem(32)};\n letter-spacing: -0.2px;\n padding: 26px 48px;\n\n svg {\n top: 37px;\n }\n `};\n\n &::after {\n content: \"\";\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n width: 100px;\n border-top-right-radius: 16px;\n border-bottom-right-radius: 16px;\n z-index: 1;\n\n background: rgb(255, 255, 255);\n background: linear-gradient(\n 90deg,\n rgba(255, 255, 255, 0) 0%,\n rgba(255, 255, 255, 1) 16%,\n rgba(255, 255, 255, 1) 100%,\n rgba(255, 255, 255, 0) 100%\n );\n }\n }\n\n &:hover {\n svg {\n g {\n fill: ${Color.ritualBlue};\n }\n }\n }\n`;\n\nconst CustomSelectOptions = styled.div`\n display: ${p => (p.isOpen ? \"block\" : \"none\")};\n position: absolute;\n top: calc(100% - 10px);\n left: 0;\n right: 0;\n z-index: 40;\n`;\n\nconst CustomSelectOption = styled.div`\n position: relative;\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n cursor: pointer;\n user-select: none;\n background-color: ${Color.white};\n\n padding: 8px 32px;\n font-size: ${rem(22)};\n line-height: ${rem(32)};\n letter-spacing: 0;\n font-weight: 500;\n color: ${Color.ritualBlue};\n\n :hover {\n color: ${rgba(Color.ritualBlue, 0.56)};\n }\n\n &:last-of-type {\n border-bottom-left-radius: 16px;\n border-bottom-right-radius: 16px;\n padding-bottom: 16px;\n }\n\n ${responsive.sm`\n padding: 12px 48px;\n\n font-size: ${rem(30)};\n line-height: ${rem(36)};\n letter-spacing: -0.4px;\n\n &:last-of-type {\n padding-bottom: 24px;\n }\n `};\n\n &.small {\n padding: 14px 32px;\n font-size: ${rem(14)};\n line-height: ${rem(20)};\n letter-spacing: 0;\n font-weight: 300;\n\n &:last-of-type {\n padding-bottom: 18px;\n }\n\n ${responsive.sm`\n padding: 12px 48px;\n\n font-size: ${rem(18)};\n line-height: ${rem(28)};\n letter-spacing: 0px;\n\n &:last-of-type {\n padding-bottom: 32px;\n }\n `};\n }\n`;\n\nconst ShadowBorder = styled.div`\n position: absolute;\n top: 0;\n right: 0;\n bottom: calc(-46px * ${p => p.height});\n left: 0;\n border-radius: 16px;\n box-shadow: 0px 8px 30px -10px rgba(20, 43, 111, 0.16);\n`;\n\n/**\n *\n * @param {Array} options array of options for dropdown. NOTE: first object in array is used as placeholder\n * @param {Object} currentOption current selected option object (also exists in options array)\n * @param {Function} onSelectionMade passes new selection back to parent for setting state\n */\nexport default class QuizDropdown extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n isOpen: false,\n };\n\n this.watchClickOutside = this.watchClickOutside.bind(this);\n }\n\n componentWillUnmount() {\n document.removeEventListener(\"click\", this.watchClickOutside);\n }\n\n toggleCustomSelect() {\n const isClosed = !this.state.isOpen;\n\n if (isClosed) {\n this.openSelectCustom();\n } else {\n this.closeSelectCustom();\n }\n }\n\n openSelectCustom() {\n this.setState({\n isOpen: true,\n });\n\n // Add related event listeners\n document.addEventListener(\"click\", this.watchClickOutside);\n }\n\n closeSelectCustom() {\n this.setState({\n isOpen: false,\n });\n\n // Remove related event listeners\n document.removeEventListener(\"click\", this.watchClickOutside);\n }\n\n watchClickOutside(e) {\n const customSelectElement = document.getElementsByClassName(\n \"customSelect\",\n )[0];\n const didClickedOutside = !customSelectElement.contains(e.target);\n if (didClickedOutside) {\n this.closeSelectCustom();\n }\n }\n\n handleOptionClick(newCurrentValue) {\n this._onSelectionMade(newCurrentValue);\n }\n\n handleOptionEnter(e) {\n let newCurrentValue = e.target.value;\n\n this._onSelectionMade(newCurrentValue);\n }\n\n _onSelectionMade(value) {\n this.setState({\n isOpen: false,\n });\n\n this.props.onSelectionMade(value);\n }\n\n renderNativeOptions() {\n const { options } = this.props;\n\n return options.map((option, index) => {\n return (\n \n );\n });\n }\n\n render() {\n const {\n className,\n currentOption,\n options,\n smallOptions,\n smallPlaceholder,\n } = this.props;\n const { isOpen } = this.state;\n\n const selectedOption =\n currentOption && currentOption.value ? currentOption : options[0];\n\n return (\n \n \n \n {this.renderNativeOptions()}\n \n \n {smallPlaceholder && }\n \n\n {/* */}\n \n \n {selectedOption.title}\n \n \n \n {options.map((option, index) => {\n if (option.disabled) return null;\n\n return (\n \n {option.title}\n \n );\n })}\n \n {isOpen && }\n \n \n );\n }\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\n\n// Utils\nimport { Color, rem } from \"../../utils/style\";\n\n// Styled Elements\nconst Button = styled.button`\n position: relative;\n z-index: 1;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n border: none;\n transition: all 0.2s;\n\n width: 212px;\n height: 50px;\n padding: 0 24px;\n margin: 0;\n border-radius: 26px;\n background-color: ${Color.ritualBlue};\n\n color: ${Color.white};\n font-size: ${rem(16)};\n line-height: ${rem(26)};\n font-weight: 500;\n\n &:hover {\n background-color: ${Color.ritualYellow};\n color: ${Color.ritualBlue};\n }\n\n [data-whatintent=\"mouse\"] &:focus,\n [data-whatintent=\"touch\"] &:focus {\n outline: none;\n }\n\n &.disabled {\n opacity: 0.56;\n\n &:hover {\n background-color: ${Color.ritualBlue};\n color: ${Color.white};\n }\n }\n`;\n\nexport default class QuizButton extends React.Component {\n handleClick() {\n if (document && document.documentElement) {\n document.documentElement.scrollTop = 0;\n }\n this.props.onClick && this.props.onClick();\n }\n\n render() {\n let { children, className, disabled } = this.props;\n\n return (\n \n {children}\n \n );\n }\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\n\n// Services\nimport intl from \"../../../services/intl\";\n\n// Utils\nimport { Color, rem, responsive } from \"../../../utils/style\";\nimport metrics from \"../../../utils/metrics\";\n\n// Components\nimport YellowArrow from \"../YellowArrow\";\nimport QuizDropdown from \"../QuizDropdown\";\nimport QuizAlternateButton from \"../QuizAlternateButton\";\nimport Text from \"../../Text\";\n\n// Styled Elements\nconst Wrapper = styled.div`\n position: relative;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n flex-direction: column;\n width: 100%;\n height: 100%;\n padding: 56px 24px 0;\n\n ${responsive.sm`\n padding-top: 80px;\n `};\n`;\n\nconst Title = styled.h1`\n color: ${Color.ritualBlue};\n font-weight: 500;\n font-size: ${rem(26)};\n line-height: ${rem(36)};\n letter-spacing: -0.3px;\n margin: 0 0 24px;\n text-align: center !important;\n max-width: 220px;\n\n ${responsive.sm`\n font-size: ${rem(48)};\n line-height: ${rem(54)};\n letter-spacing: -1.4px;\n margin-bottom: 40px;\n max-width: 430px;\n `};\n`;\n\nconst ButtonWrapper = styled.div`\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n width: 100%;\n\n ${responsive.sm`\n width: 370px;\n `};\n`;\n\nconst ArrowWrapper = styled.div`\n position: relative;\n`;\n\nconst Arrow = styled(YellowArrow)`\n position: absolute;\n right: -9px;\n bottom: 8px;\n transform: scaleX(-1) rotate(54deg);\n\n ${responsive.sm`\n right: -23px;\n bottom: -16px;\n `};\n`;\n\nexport default class Prenatal extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n selectedOption: null,\n };\n\n this.handleClick = this.handleClick.bind(this);\n this.onSelectionMade = this.onSelectionMade.bind(this);\n }\n\n onSelectionMade(value) {\n this.setState({\n selectedOption: value,\n });\n }\n\n handleClick() {\n const { selectedOption } = this.state;\n const { slide } = this.props;\n\n if (!selectedOption) return;\n\n let answer = slide.answers[selectedOption - 1];\n\n metrics.track(\"Quiz CTA Clicked\", {\n title: \"Continue\",\n location: slide.slideName,\n interest: intl.t(answer.copy),\n });\n\n // Clone the answer and delete the copy field to ensure the\n // \"Quiz CTA Clicked\" event is not reported twice.\n answer = { ...answer };\n delete answer.copy;\n\n this.props.nextSlide(answer);\n }\n\n render() {\n const { selectedOption } = this.state;\n const disabled = !selectedOption;\n\n const options = [\n {\n title: intl.t(\n \"build-bundle.product-select.option-placeholder\",\n \"Interested in\",\n ),\n value: \"placeholder\",\n disabled: true,\n },\n ];\n\n this.props.slide.answers.forEach((answer, i) => {\n options.push({\n title: intl.t(answer.copy),\n value: i + 1,\n });\n });\n\n const currentOption = selectedOption ? options[selectedOption] : options[0];\n\n return (\n \n \n \n <Text\n id=\"build-bundle.product-select.title\"\n defaultMessage=\"What are you looking for?\"\n />\n \n \n \n \n \n \n \n \n \n \n );\n }\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\n\n// Utils\nimport { Color, rem, responsive } from \"../../utils/style\";\n\nconst InputWrapper = styled.div`\n position: relative;\n width: 100%;\n margin: 0 auto;\n\n input {\n width: 100%;\n padding: 0;\n margin: 0;\n border-radius: 16px;\n overflow: hidden;\n border: none;\n -webkit-appearance: none !important;\n -moz-appearance: textfield;\n\n [data-whatintent=\"mouse\"] &:focus,\n [data-whatintent=\"touch\"] &:focus {\n outline: none;\n }\n\n font-size: ${rem(22)};\n line-height: ${rem(32)};\n letter-spacing: -0.2px;\n color: ${Color.ritualBlue};\n\n padding: 16px 78px 16px 32px;\n\n ${responsive.sm`\n font-size: ${rem(30)};\n line-height: ${rem(36)};\n letter-spacing: -0.4px;\n padding: 24px 110px 24px 48px;\n `};\n\n ::placeholder {\n color: rgba(20, 43, 111, 0.24);\n }\n\n ::-webkit-outer-spin-button,\n ::-webkit-inner-spin-button {\n -webkit-appearance: none;\n }\n }\n`;\n\nexport default class QuizInput extends React.Component {\n handleChange(e) {\n const { length = 50 } = this.props;\n let value = e.target.value;\n value = value.substring(0, length);\n\n this.props.onChange(value);\n }\n\n render() {\n const {\n className,\n value,\n type = \"number\",\n inputMode = \"numeric\",\n placeholder,\n min = 0,\n max = 150,\n step = 1,\n } = this.props;\n\n return (\n \n \n \n );\n }\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\n\nimport { Color, responsive, rem } from \"../../utils/style\";\nimport MagicLink from \"../MagicLink\";\nimport Text from \"../Text\";\n\nconst Link = styled(MagicLink)`\n font-size: ${rem(14)};\n line-height: ${rem(24)};\n font-weight: 500;\n color: rgba(20, 43, 111, 0.56);\n border-bottom: 2px solid rgba(20, 43, 111, 0.56);\n margin: 32px auto 0;\n transition: all 0.2s;\n\n ${responsive.sm`\n font-size: ${rem(16)};\n line-height: ${rem(26)};\n margin-top: 40px;\n `};\n\n &:hover {\n color: ${Color.ritualBlue};\n border-color: ${Color.ritualBlue};\n }\n`;\n\nexport default class NonBinaryLink extends React.Component {\n render() {\n return (\n \n \n \n );\n }\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\n\nimport { Color, rem, responsive } from \"../../utils/style\";\nimport Text from \"../Text\";\n\nconst MessagingWrapper = styled.div`\n width: 100%;\n max-width: 256px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n\n ${responsive.sm`\n max-width: 370px;\n `};\n`;\n\nconst Message = styled.p`\n color: ${Color.ritualBlue};\n font-weight: 300;\n font-size: ${rem(12)};\n line-height: ${rem(18)};\n text-align: center;\n margin: 16px 0 0 0;\n\n ${responsive.sm`\n font-size: ${rem(14)};\n line-height: ${rem(20)};\n margin-top: 24px;\n `};\n`;\n\nexport default class NoProductMessage extends React.Component {\n renderMessage() {\n const { firstRun, over, under } = this.props;\n\n if (firstRun && under) {\n return (\n \n \n \n );\n }\n\n if (over) {\n return (\n \n \n \n );\n }\n\n if (under) {\n return (\n \n \n \n );\n }\n }\n\n render() {\n const message = this.renderMessage();\n if (!message) return null;\n\n const { className = \"mb-4\" } = this.props;\n\n return {message};\n }\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\n\n// Utils\nimport { Color, rem, responsive } from \"../../../utils/style\";\nimport metrics from \"../../../utils/metrics\";\nimport intl from \"../../../services/intl\";\n\n// Components\nimport QuizAlternateButton from \"../QuizAlternateButton\";\nimport QuizDropdown from \"../QuizDropdown\";\nimport QuizInput from \"../QuizInput\";\nimport YellowArrow from \"../YellowArrow\";\nimport NonBinaryLink from \"../NonBinaryLink\";\nimport NoProductMessage from \"../NoProductMessage\";\nimport Text from \"../../Text\";\n\n// Styled Elements\nconst Wrapper = styled.div`\n position: relative;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n flex-direction: column;\n width: 100%;\n height: 100%;\n padding: 56px 24px;\n\n ${responsive.sm`\n padding: 80px 24px;\n `};\n`;\n\nconst Title = styled.h1`\n max-width: 150px;\n text-align: center !important;\n color: ${Color.ritualBlue};\n font-weight: 500;\n font-size: ${rem(26)};\n line-height: ${rem(36)};\n letter-spacing: -0.3px;\n margin: 0 0 24px;\n\n ${responsive.sm`\n max-width: 300px;\n font-size: ${rem(48)};\n line-height: ${rem(54)};\n letter-spacing: -1.4px;\n margin-bottom: 40px;\n `};\n`;\n\nconst Form = styled.form`\n display: flex;\n flex-direction: column;\n align-items: center;\n\n width: 100%;\n\n ${responsive.sm`\n max-width: 370px;\n `};\n`;\n\nconst ArrowWrapper = styled.div`\n position: relative;\n`;\n\nconst Arrow = styled(YellowArrow)`\n position: absolute;\n left: -20px;\n bottom: 6px;\n transform: rotate(60deg);\n`;\n\nconst GenderDropdown = styled(QuizDropdown)`\n margin-bottom: 8px;\n\n ${responsive.sm`\n margin-bottom: 16px;\n `}\n`;\n\nconst AgeInput = styled(QuizInput)`\n margin-bottom: 32px;\n\n ${responsive.sm`\n margin-bottom: 40px;\n `}\n`;\n\nexport default class Age extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n disabled: true,\n under: false,\n over: false,\n };\n\n this.genderOptions = [\n {\n title: intl.t(\"build-bundle.slides.age-gender.sex\", \"Sex\"),\n value: intl.t(\"build-bundle.slides.age-gender.sex\", \"Sex\"),\n disabled: true,\n },\n {\n title: intl.t(\"build-bundle.slides.age-gender.female\", \"Female\"),\n value: intl.t(\"build-bundle.slides.age-gender.female\", \"Female\"),\n },\n {\n title: intl.t(\"build-bundle.slides.age-gender.male\", \"Male\"),\n value: intl.t(\"build-bundle.slides.age-gender.male\", \"Male\"),\n },\n ];\n\n this.debounce = null;\n this.timeout = null;\n this.handleChangeAge = this.handleChangeAge.bind(this);\n this.handleChangeGender = this.handleChangeGender.bind(this);\n this.handleSubmit = this.handleSubmit.bind(this);\n }\n\n componentDidMount() {\n this.checkState(null, this.props.age);\n }\n\n componentWillUnmount() {\n if (this.debounce) {\n clearTimeout(this.debounce);\n }\n if (this.timeout) {\n clearTimeout(this.timeout);\n }\n }\n\n handleChangeAge(age) {\n if (this.debounce) {\n clearTimeout(this.debounce);\n }\n\n age = Number(age);\n\n this.checkState(null, age);\n this.props.onAgeChange && this.props.onAgeChange(age);\n }\n\n handleChangeGender(gender) {\n this.checkState(gender);\n this.props.onGenderChange(gender);\n }\n\n checkState(gender, age) {\n gender = gender || this.props.gender;\n age = age || this.props.age;\n\n const underAgeThreshold = 13;\n\n const disabled = !gender || !age || age < underAgeThreshold || age > 100;\n\n this.setState({\n disabled,\n under: false,\n over: false,\n });\n\n // Immediately disable the input, but delay showing the over/under messages.\n this.debounce = setTimeout(() => {\n this.setState({\n under: age && age !== \"\" && age < underAgeThreshold,\n over: age && age !== \"\" && age > 100,\n });\n }, 800);\n }\n\n handleSubmit(e) {\n e.preventDefault();\n\n const { age, gender, slide } = this.props;\n\n if (!age || !gender) return;\n\n const answerGroup = slide.answers[gender];\n let answer = answerGroup.under50;\n\n if (age >= 50) {\n answer = answerGroup.over50;\n }\n\n metrics.track(\"Quiz Personal Info Entered\", {\n location: slide.slideName,\n gender,\n age,\n });\n\n metrics.track(\"Quiz CTA Clicked\", {\n title: \"Continue\",\n location: slide.slideName,\n gender,\n age,\n });\n\n this.props.nextSlide(answer);\n }\n\n render() {\n const { disabled, over, under } = this.state;\n const { age, gender } = this.props;\n\n const currentGenderOption = {\n title: gender || undefined,\n value: gender || undefined,\n };\n\n return (\n \n \n \n <Text\n id=\"build-bundle.slides.age-gender.title\"\n defaultMessage=\"Tell us about yourself\"\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 { graphql, StaticQuery } from \"gatsby\";\n\n// Services\nimport intl from \"../../../services/intl\";\n\n// Utils\nimport { Color, Font, rem, responsive } from \"../../../utils/style\";\n\n// Components\nimport Img from \"gatsby-image/withIEPolyfill\";\nimport QuizButton from \"../QuizButton\";\nimport Text from \"../../Text\";\n\n// Styled Elements\nconst Wrapper = styled.div`\n position: relative;\n display: flex;\n align-items: flex-start;\n justify-content: flex-start;\n flex-direction: column;\n width: 100%;\n height: 100%;\n min-height: calc(100vh - 66px);\n\n ${responsive.sm`\n flex-direction: row;\n min-height: calc(100vh - 68px - 24px);\n `};\n\n ${responsive.md`\n min-height: calc(100vh - 84px - 24px);\n `};\n\n ${responsive.lg`\n min-height: calc(100vh - 84px - 40px);\n `};\n`;\n\nconst SlideContentWrapper = styled.div`\n order: 1;\n display: flex;\n justify-content: flex-start;\n\n ${responsive.sm`\n order: 2;\n flex: 0 0 50%;\n `}\n\n ${responsive.md`\n justify-content: center;\n `}\n`;\n\nconst SlideContent = styled.div`\n position: relative;\n z-index: 10;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n padding: 56px 24px 0;\n order: 1;\n height: calc(100% - 238px);\n\n ${responsive.sm`\n height: 100%;\n min-height: calc(100vh - 60px - 24px);\n justify-content: center;\n align-items: flex-start;\n padding: 80px 40px;\n `};\n\n ${responsive.md`\n max-width: 454px;\n min-height: calc(100vh - 76px - 24px);\n `};\n\n ${responsive.lg`\n min-height: calc(100vh - 76px - 40px);\n `};\n`;\n\nconst ImageDescription = styled.div`\n position: relative;\n z-index: 10;\n order: 2;\n padding: 16px;\n height: 238px;\n width: 100%;\n display: flex;\n justify-content: flex-end;\n align-items: flex-end;\n flex-direction: column;\n\n ${responsive.sm`\n order: 1;\n height: 100%;\n flex: 0 0 50%;\n padding: 24px;\n justify-content: flex-start;\n align-items: flex-start;\n `};\n\n ${responsive.md`\n padding-top: 32px;\n padding-left: 32px;\n `};\n`;\n\nconst SmallHeader = styled.p`\n color: rgba(20, 43, 111, 0.56);\n font-weight: 500;\n font-size: ${rem(12)};\n line-height: ${rem(20)};\n letter-spacing: 0.8px;\n text-transform: uppercase;\n text-align: center !important;\n margin: 0 0 8px;\n\n ${responsive.sm`\n font-size: ${rem(14)};\n line-height: ${rem(22)};\n letter-spacing: 0.88px;\n text-align: left !important;\n margin-bottom: 16px;\n `};\n\n ${responsive.md`\n font-size: ${rem(16)};\n line-height: ${rem(26)};\n letter-spacing: 1px;\n `};\n`;\n\nconst Title = styled.h1`\n color: ${Color.ritualBlue};\n font-weight: 500;\n font-size: ${rem(20)};\n line-height: ${rem(30)};\n text-align: center !important;\n margin: 0 0 16px;\n\n ${responsive.sm`\n font-size: ${rem(30)};\n line-height: ${rem(36)};\n letter-spacing: -0.4px;\n text-align: left !important;\n margin-bottom: 24px;\n `};\n\n ${responsive.md`\n font-size: ${rem(34)};\n line-height: ${rem(40)};\n letter-spacing: -0.5px;\n `};\n`;\n\nconst Copy = styled.p`\n ${Font.dutch};\n color: ${Color.ritualBlue};\n font-weight: normal;\n font-size: ${rem(14)};\n line-height: ${rem(24)};\n text-align: center !important;\n margin: 0 0 32px;\n\n ${responsive.sm`\n text-align: left !important;\n margin-bottom: 40px;\n `};\n\n ${responsive.md`\n font-size: ${rem(16)};\n line-height: ${rem(26)};\n margin-bottom: 40px;\n `};\n`;\n\nconst Ingredient = styled.p`\n color: rgba(20, 43, 111, 0.56);\n font-weight: 500;\n font-size: ${rem(14)};\n line-height: ${rem(24)};\n text-align: right !important;\n margin: 0;\n\n ${responsive.sm`\n text-align: left !important;\n `};\n\n ${responsive.md`\n font-size: ${rem(16)};\n line-height: ${rem(26)};\n `};\n`;\n\nconst Source = styled.p`\n color: rgba(20, 43, 111, 0.56);\n font-weight: 500;\n font-size: ${rem(12)};\n line-height: ${rem(18)};\n text-align: right !important;\n margin: 0;\n\n ${responsive.sm`\n text-align: left !important;\n `};\n\n ${responsive.md`\n font-size: ${rem(14)};\n line-height: ${rem(24)};\n `};\n`;\n\nconst Button = styled(QuizButton)`\n width: 100% !important;\n\n ${responsive.sm`\n width: auto !important;\n `};\n`;\n\nexport const IntermissionComponent = class Intermission extends React.Component {\n constructor(props) {\n super(props);\n\n const { contentfulData } = this.props;\n\n this.images = {\n folate: {\n desktop: intl.cf(contentfulData?.folateDesktopImages?.nodes, true),\n mobile: intl.cf(contentfulData?.folateMobileImages?.nodes, true),\n },\n iron: {\n desktop: intl.cf(contentfulData?.ironDesktopImages?.nodes, true),\n mobile: intl.cf(contentfulData?.ironMobileImages?.nodes, true),\n },\n magnesium: {\n desktop: intl.cf(contentfulData?.magnesiumDesktopImages?.nodes, true),\n mobile: intl.cf(contentfulData?.magnesiumMobileImages?.nodes, true),\n },\n omega3: {\n desktop: intl.cf(contentfulData?.omega3DesktopImages?.nodes, true),\n mobile: intl.cf(contentfulData?.omega3MobileImages?.nodes, true),\n },\n vitaminA: {\n desktop: intl.cf(contentfulData?.vitaminADesktopImages?.nodes, true),\n mobile: intl.cf(contentfulData?.vitaminAMobileImages?.nodes, true),\n },\n vitaminB12: {\n desktop: intl.cf(contentfulData?.vitaminB12DesktopImages?.nodes, true),\n mobile: intl.cf(contentfulData?.vitaminB12MobileImages?.nodes, true),\n },\n vitaminD3: {\n desktop: intl.cf(contentfulData?.vitaminD3DesktopImages?.nodes, true),\n mobile: intl.cf(contentfulData?.vitaminD3MobileImages?.nodes, true),\n },\n pills: {\n desktop: intl.cf(contentfulData?.pillsDesktopImages?.nodes, true),\n mobile: intl.cf(contentfulData?.pillsMobileImages?.nodes, true),\n },\n kidsGummy: {\n desktop: intl.cf(contentfulData?.kidsGummyDesktopImages?.nodes, true),\n mobile: intl.cf(contentfulData?.kidsGummyMobileImages?.nodes, true),\n },\n };\n }\n\n handleClick() {\n const { nextSlide } = this.props;\n const answer = this.getAnswer();\n\n nextSlide(answer);\n }\n\n renderImage(imageName) {\n const selectedImage = this.images[imageName];\n\n if (!selectedImage) return null;\n\n const style = {\n position: \"absolute\",\n zIndex: \"0\",\n userSelect: \"none\",\n userDrag: \"none\",\n pointerEvents: \"none\",\n touchCallout: \"none\",\n };\n\n const mobileStyle = {\n ...style,\n right: 0,\n top: \"calc(100% - (100% - 295px))\",\n left: 0,\n width: \"100%\",\n };\n\n const desktopStyle = {\n ...style,\n top: \"50%\",\n transform: \"translateY(-50%)\",\n left: 0,\n width: \"50%\",\n };\n\n return (\n <>\n \n \n \n );\n }\n\n getAnswer() {\n const {\n age,\n slide: { answers },\n } = this.props;\n\n // If ages 13-17 and slide has alternate answer route\n if (answers[1] && age > 12 && age < 18) {\n return answers[1];\n }\n\n return answers[0];\n }\n\n render() {\n const { age, gender, slide } = this.props;\n const {\n smallHeader,\n title,\n copy,\n imageName,\n imageIngredient,\n imageSource,\n } = slide.componentContent;\n\n const answer = this.getAnswer();\n\n let slideCopy = copy;\n\n if (typeof copy === \"object\") {\n const ageCopy = age < 50 ? \"under50\" : \"over50\";\n slideCopy = copy?.[gender]?.[ageCopy];\n }\n\n return (\n \n {imageName && this.renderImage(imageName)}\n \n \n \n \n \n \n <Text id={title} />\n \n \n \n \n \n \n \n \n {imageIngredient && (\n \n \n \n )}\n {imageSource && (\n \n \n \n )}\n \n \n );\n }\n};\n\nexport default props => (\n }\n />\n);\n\n// GraphQL\nconst componentQuery = graphql`\n query IntermissionComponentQuery {\n pillsMobileImages: allContentfulAsset(\n filter: { contentful_id: { eq: \"4TCtwOgst4aXILZW1RFsZo\" } }\n ) {\n nodes {\n node_locale\n description\n fluid(maxWidth: 304, quality: 80) {\n ...GatsbyContentfulFluid_withWebp_noBase64\n }\n }\n }\n pillsDesktopImages: allContentfulAsset(\n filter: { contentful_id: { eq: \"1rP3JOaDzkZgXSnAoyMgc9\" } }\n ) {\n nodes {\n node_locale\n description\n fluid(maxWidth: 643, quality: 80) {\n ...GatsbyContentfulFluid_withWebp_noBase64\n }\n }\n }\n vitaminD3MobileImages: allContentfulAsset(\n filter: { contentful_id: { eq: \"7mB4FYs3Jb1oO4InEuSnvU\" } }\n ) {\n nodes {\n node_locale\n description\n fluid(maxWidth: 304, quality: 80) {\n ...GatsbyContentfulFluid_withWebp_noBase64\n }\n }\n }\n vitaminD3DesktopImages: allContentfulAsset(\n filter: { contentful_id: { eq: \"7JFoF7iY19f9f6YypGZb7V\" } }\n ) {\n nodes {\n node_locale\n description\n fluid(maxWidth: 643, quality: 80) {\n ...GatsbyContentfulFluid_withWebp_noBase64\n }\n }\n }\n vitaminB12MobileImages: allContentfulAsset(\n filter: { contentful_id: { eq: \"66M8NXoCP9EqrEW6mm19Pp\" } }\n ) {\n nodes {\n node_locale\n description\n fluid(maxWidth: 304, quality: 80) {\n ...GatsbyContentfulFluid_withWebp_noBase64\n }\n }\n }\n vitaminB12DesktopImages: allContentfulAsset(\n filter: { contentful_id: { eq: \"1M2s6KeqF0PgOu2eWtITkX\" } }\n ) {\n nodes {\n node_locale\n description\n fluid(maxWidth: 643, quality: 80) {\n ...GatsbyContentfulFluid_withWebp_noBase64\n }\n }\n }\n vitaminAMobileImages: allContentfulAsset(\n filter: { contentful_id: { eq: \"3KELdN26PCAqMnKdq6x4Qr\" } }\n ) {\n nodes {\n node_locale\n description\n fluid(maxWidth: 304, quality: 80) {\n ...GatsbyContentfulFluid_withWebp_noBase64\n }\n }\n }\n vitaminADesktopImages: allContentfulAsset(\n filter: { contentful_id: { eq: \"7Giv7T8oep7Fw2H2MaW90Z\" } }\n ) {\n nodes {\n node_locale\n description\n fluid(maxWidth: 643, quality: 80) {\n ...GatsbyContentfulFluid_withWebp_noBase64\n }\n }\n }\n folateMobileImages: allContentfulAsset(\n filter: { contentful_id: { eq: \"3t1bY5IQZ0QhNIhYeA4Wa2\" } }\n ) {\n nodes {\n node_locale\n description\n fluid(maxWidth: 304, quality: 80) {\n ...GatsbyContentfulFluid_withWebp_noBase64\n }\n }\n }\n folateDesktopImages: allContentfulAsset(\n filter: { contentful_id: { eq: \"4p1QpCjwxDnZ3kULbtTf9y\" } }\n ) {\n nodes {\n node_locale\n description\n fluid(maxWidth: 643, quality: 80) {\n ...GatsbyContentfulFluid_withWebp_noBase64\n }\n }\n }\n ironMobileImages: allContentfulAsset(\n filter: { contentful_id: { eq: \"5htfNpDwm8A4uYVmX7hJq1\" } }\n ) {\n nodes {\n node_locale\n description\n fluid(maxWidth: 304, quality: 80) {\n ...GatsbyContentfulFluid_withWebp_noBase64\n }\n }\n }\n ironDesktopImages: allContentfulAsset(\n filter: { contentful_id: { eq: \"6zjWpLrUcf9GPuVlhZqAIi\" } }\n ) {\n nodes {\n node_locale\n description\n fluid(maxWidth: 643, quality: 80) {\n ...GatsbyContentfulFluid_withWebp_noBase64\n }\n }\n }\n magnesiumMobileImages: allContentfulAsset(\n filter: { contentful_id: { eq: \"3swwhMzBPopqphBsFeCTQS\" } }\n ) {\n nodes {\n node_locale\n description\n fluid(maxWidth: 304, quality: 80) {\n ...GatsbyContentfulFluid_withWebp_noBase64\n }\n }\n }\n magnesiumDesktopImages: allContentfulAsset(\n filter: { contentful_id: { eq: \"3D4toMaVVdIL2s3qJGerrH\" } }\n ) {\n nodes {\n node_locale\n description\n fluid(maxWidth: 643, quality: 80) {\n ...GatsbyContentfulFluid_withWebp_noBase64\n }\n }\n }\n omega3MobileImages: allContentfulAsset(\n filter: { contentful_id: { eq: \"5QKPS0azxeylcSHfDP6Fl8\" } }\n ) {\n nodes {\n node_locale\n description\n fluid(maxWidth: 304, quality: 80) {\n ...GatsbyContentfulFluid_withWebp_noBase64\n }\n }\n }\n omega3DesktopImages: allContentfulAsset(\n filter: { contentful_id: { eq: \"HHJSaAFk8CJRAlsoS9PLe\" } }\n ) {\n nodes {\n node_locale\n description\n fluid(maxWidth: 643, quality: 80) {\n ...GatsbyContentfulFluid_withWebp_noBase64\n }\n }\n }\n kidsGummyMobileImages: allContentfulAsset(\n filter: { contentful_id: { eq: \"5uZD1A0FWLcQEIn8TxUdOP\" } }\n ) {\n nodes {\n node_locale\n description\n fluid(maxWidth: 304, quality: 90) {\n ...GatsbyContentfulFluid_withWebp_noBase64\n }\n }\n }\n kidsGummyDesktopImages: allContentfulAsset(\n filter: { contentful_id: { eq: \"2LyGL8L6uL9bETboqboI32\" } }\n ) {\n nodes {\n node_locale\n description\n fluid(maxWidth: 643, quality: 80) {\n ...GatsbyContentfulFluid_withWebp_noBase64\n }\n }\n }\n }\n`;\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { graphql, StaticQuery } from \"gatsby\";\n\n// Services\nimport intl from \"../../../services/intl\";\n\n// Utils\nimport { Color, rem, responsive, rgba } from \"../../../utils/style\";\nimport { Icons } from \"../../../utils/svg\";\n\n// Components\nimport Img from \"gatsby-image/withIEPolyfill\";\nimport QuizButton from \"../QuizButton\";\nimport Text from \"../../Text\";\n\n// Styled Elements\nconst Wrapper = styled.div`\n position: relative;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n flex-direction: column;\n width: 100%;\n height: 100%;\n min-height: calc(100vh - 66px);\n\n ${responsive.sm`\n flex-direction: row;\n justify-content: flex-start;\n align-items: flex-end;\n min-height: calc(100vh - 68px - 24px);\n `};\n\n ${responsive.md`\n min-height: calc(100vh - 84px - 24px);\n `};\n\n ${responsive.lg`\n min-height: calc(100vh - 84px - 40px);\n `};\n`;\n\nconst SlideContentWrapper = styled.div`\n display: flex;\n justify-content: flex-start;\n\n ${responsive.sm`\n flex: 0 0 50%;\n `}\n\n ${responsive.md`\n justify-content: center;\n `}\n`;\n\nconst SlideContent = styled.div`\n position: relative;\n z-index: 10;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n padding: 56px 24px;\n height: calc(100% - 238px);\n\n ${responsive.sm`\n height: 100%;\n min-height: calc(100vh - 60px - 24px);\n justify-content: center;\n align-items: flex-start;\n padding: 80px 40px;\n `};\n\n ${responsive.md`\n max-width: 454px;\n min-height: calc(100vh - 76px - 24px);\n `};\n\n ${responsive.lg`\n min-height: calc(100vh - 76px - 40px);\n `};\n`;\n\nconst SmallHeader = styled.p`\n color: rgba(20, 43, 111, 0.56);\n font-weight: 500;\n font-size: ${rem(12)};\n line-height: ${rem(20)};\n letter-spacing: 0.8px;\n text-transform: uppercase;\n text-align: center !important;\n margin: 0 0 8px;\n\n ${responsive.sm`\n font-size: ${rem(14)};\n line-height: ${rem(22)};\n letter-spacing: 0.88px;\n text-align: left !important;\n margin-bottom: 16px;\n `};\n\n ${responsive.md`\n font-size: ${rem(16)};\n line-height: ${rem(26)};\n letter-spacing: 1px;\n `};\n`;\n\nconst Title = styled.h1`\n color: ${Color.ritualBlue};\n font-weight: 500;\n font-size: ${rem(20)};\n line-height: ${rem(30)};\n text-align: center !important;\n margin: 0 0 24px;\n\n ${responsive.sm`\n font-size: ${rem(30)};\n line-height: ${rem(36)};\n letter-spacing: -0.4px;\n text-align: left !important;\n margin-bottom: 24px;\n `};\n\n ${responsive.md`\n font-size: ${rem(34)};\n line-height: ${rem(40)};\n letter-spacing: -0.5px;\n margin-bottom: 32px;\n `};\n`;\n\nconst Button = styled(QuizButton)`\n width: 100% !important;\n\n ${responsive.sm`\n width: auto !important;\n `};\n`;\n\nconst ValueProps = styled.div`\n display: flex;\n flex-direction: column;\n\n max-width: 300px;\n\n ${responsive.sm`\n max-width: unset;\n align-items: flex-start;\n `}\n`;\n\nconst ValueProp = styled.div`\n display: flex;\n flex-direction: row;\n margin-bottom: 22px;\n\n &:last-of-type {\n margin-bottom: 32px;\n }\n\n ${responsive.sm`\n margin-bottom: 24px;\n\n &:last-of-type {\n margin-bottom: 40px;\n }\n `}\n\n .svg-wrapper {\n height: 32px;\n width: 32px;\n position: relative;\n margin-right: 16px;\n flex: 1 0 auto;\n\n svg {\n position: absolute;\n height: 100%;\n width: 100%;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n }\n }\n\n .text-wrapper {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: flex-start;\n flex: 1 1 auto;\n\n h3 {\n font-size: ${rem(16)};\n line-height: ${rem(26)};\n margin: 2px 0 4px;\n }\n\n p {\n color: ${rgba(Color.ritualBlue, 0.56)};\n font-size: ${rem(14)};\n font-weight: 300;\n line-height: ${rem(20)};\n margin-bottom: 0;\n }\n\n ${responsive.sm`\n h3 {\n font-size: ${rem(18)};\n line-height: ${rem(28)};\n margin: 0 0 4px;\n }\n\n p {\n font-size: ${rem(16)};\n line-height: ${rem(22)};\n }\n `}\n }\n`;\n\nconst MobileImageWrapper = styled.div`\n position: relative;\n height: 244px;\n width: 100%;\n`;\n\nconst DesktopImageWrapper = styled.div`\n flex: 0 0 50%;\n`;\n\nconst productsImageStyle = {\n position: \"absolute\",\n zIndex: \"0\",\n userSelect: \"none\",\n userDrag: \"none\",\n pointerEvents: \"none\",\n touchCallout: \"none\",\n};\n\nconst productsMobileImageStyle = {\n ...productsImageStyle,\n right: 0,\n top: 0,\n left: 0,\n width: \"100%\",\n};\n\nconst productsDesktopImageStyle = {\n ...productsImageStyle,\n top: \"50%\",\n transform: \"translateY(-50%)\",\n left: 0,\n width: \"50%\",\n};\n\nexport const ValuePropsIntermissionComponent = class ValuePropsIntermission extends React.Component {\n handleClick() {\n const { slide, nextSlide } = this.props;\n const answer = slide.answers[0];\n\n nextSlide(answer);\n }\n\n renderValueProp(valueProp) {\n let Icon = Icons[valueProp.svg];\n return (\n \n
\n \n
\n
\n

\n \n

\n

\n \n

\n
\n
\n );\n }\n\n render() {\n const { slide, contentfulData } = this.props;\n const { smallHeader, title, valueProps } = slide.componentContent;\n\n const productsImageMobile = intl.cf(\n contentfulData.productsMobileImages.nodes,\n true,\n );\n const productsImageDesktop = intl.cf(\n contentfulData.productsDesktopImages.nodes,\n true,\n );\n\n const answer = slide.answers[0];\n\n return (\n \n \n \n \n \n \n \n \n \n \n <Text id={title} />\n \n \n {valueProps.map(valueProp => {\n return this.renderValueProp(valueProp);\n })}\n \n \n \n \n \n \n \n \n );\n }\n};\n\nexport default props => (\n (\n \n )}\n />\n);\n\n// GraphQL\nconst componentQuery = graphql`\n query ValuePropsIntermissionComponentQuery {\n productsMobileImages: allContentfulAsset(\n filter: { contentful_id: { eq: \"01LkK17xCCWIRDXVhorPZA\" } }\n ) {\n nodes {\n node_locale\n description\n fluid(maxWidth: 304, quality: 100) {\n ...GatsbyContentfulFluid_withWebp_noBase64\n }\n }\n }\n productsDesktopImages: allContentfulAsset(\n filter: { contentful_id: { eq: \"zDJLLVtyioMaIanMitVfn\" } }\n ) {\n nodes {\n node_locale\n description\n fluid(maxWidth: 643, quality: 100) {\n ...GatsbyContentfulFluid_withWebp_noBase64\n }\n }\n }\n }\n`;\n","import React from \"react\";\nimport styled from \"styled-components\";\n\n// Utils\nimport { Color, Font, rem, responsive, rgba } from \"../../utils/style\";\nimport NameMap from \"../../utils/nameMap\";\nimport metrics from \"../../utils/metrics\";\n\n// Components\nimport Img from \"gatsby-image\";\nimport SupplementFacts from \"../product/SupplementFacts\";\nimport QuantityPicker from \"../global/QuantityPicker\";\nimport Text from \"../Text\";\n\n// Styled Elements\nconst Container = styled.div`\n display: flex;\n flex-direction: column;\n\n ${responsive.sm`\n flex-direction: row;\n `}\n`;\n\nconst Title = styled.h4`\n font-size: ${rem(14)};\n font-weight: 500;\n line-height: ${rem(24)};\n margin-bottom: 10px;\n\n em {\n ${Font.dutch};\n }\n\n ${responsive.sm`\n font-size: ${rem(20)};\n font-weight: 500;\n line-height: ${rem(30)};\n margin-bottom: 0;\n `}\n`;\n\nconst InfoContainer = styled.div`\n display: flex;\n flex-direction: row;\n\n ${responsive.sm`\n flex-direction: column;\n width: calc(100% - 144px);\n `}\n`;\n\nconst ProductImage = styled.div`\n height: 56px;\n width: 56px;\n min-width: 56px;\n margin-right: 16px;\n margin-top: 2px;\n overflow: hidden;\n\n background-color: ${Color.ritualYellow};\n\n ${responsive.sm`\n height: 120px;\n width: 120px;\n min-width: 120px;\n margin-right: 24px;\n margin-top: 0;\n `}\n`;\n\nconst DescriptionContainer = styled.div`\n display: flex;\n flex-direction: column;\n\n ${responsive.sm`\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n margin-top: 10px;\n margin-bottom: 16px;\n `}\n`;\n\nconst Description = styled.p`\n color: ${rgba(Color.ritualBlue, 0.56)};\n font-size: ${rem(12)};\n font-weight: 300;\n line-height: ${rem(18)};\n margin-bottom: 4px;\n text-align: left;\n\n ${responsive.sm`\n font-size: ${rem(14)};\n line-height: ${rem(20)};\n margin-bottom: 0;\n `}\n\n ${responsive.md`\n font-size: ${rem(16)};\n line-height: ${rem(22)};\n `}\n`;\n\nconst SupplementFactsButton = styled.button`\n width: fit-content;\n color: ${Color.ritualBlue};\n font-size: ${rem(12)};\n font-weight: 500;\n letter-spacing: 0px;\n line-height: ${rem(18)};\n padding: 0;\n\n border: none;\n border-bottom: 2px solid ${Color.ritualBlue};\n background: none;\n\n transition: opacity 0.2s;\n\n &:hover {\n opacity: 0.56;\n }\n\n ${responsive.sm`\n font-size: ${rem(14)};\n line-height: ${rem(24)};\n `}\n\n ${responsive.md`\n font-size: ${rem(16)};\n line-height: ${rem(26)};\n `}\n`;\n\nexport default class ProductResult extends React.Component {\n constructor(props) {\n super(props);\n\n this.factsPopup = React.createRef();\n }\n\n handlePopup() {\n const name = this.props.product.name.childMarkdownRemark.rawMarkdownBody;\n\n if (this.factsPopup) {\n this.factsPopup.current.open();\n\n metrics.track(\"Modal Viewed\", {\n title: \"Supplement Facts\",\n location: \"Product result\",\n name,\n });\n }\n }\n\n onQuantityChange(e) {\n const quantity = Number(e.target.value);\n this.props.onQuantityChange(this.props.planId, quantity);\n }\n\n renderOption() {\n const {\n showSupplementFacts = true,\n showQuantityPicker = false,\n productQuantity,\n maxQuantity,\n totalQuantity,\n planId,\n } = this.props;\n\n return (\n <>\n {showSupplementFacts && (\n \n \n \n )}\n {!showSupplementFacts && showQuantityPicker && (\n \n )}\n \n );\n }\n\n render() {\n const { product } = this.props;\n\n const productName = NameMap({\n name: product.name.childMarkdownRemark.rawMarkdownBody,\n });\n\n const productImage = product?.heroFeaturedImages?.[0];\n\n return (\n \n
\n \n <InfoContainer>\n <ProductImage>\n {productImage && (\n <Img\n fluid={productImage.fluid}\n loading=\"eager\"\n alt={productImage.title}\n style={{\n userSelect: \"none\",\n userDrag: \"none\",\n pointerEvents: \"none\",\n touchCallout: \"none\",\n }}\n />\n )}\n </ProductImage>\n <DescriptionContainer>\n <Description>{product.headerDescription}</Description>\n {this.renderOption()}\n </DescriptionContainer>\n </InfoContainer>\n </div>\n\n <div className=\"desktop-layout d-none d-sm-flex w-100\">\n <ProductImage>\n {productImage && (\n <Img\n fluid={productImage.fluid}\n loading=\"eager\"\n alt={productImage.description}\n style={{\n userSelect: \"none\",\n userDrag: \"none\",\n pointerEvents: \"none\",\n touchCallout: \"none\",\n }}\n />\n )}\n </ProductImage>\n <InfoContainer>\n <DescriptionContainer>\n <Title dangerouslySetInnerHTML={{ __html: productName.html }} />\n {this.renderOption()}\n </DescriptionContainer>\n <Description>{product.headerDescription}</Description>\n </InfoContainer>\n </div>\n <SupplementFacts\n supplementFacts={product.supplementFacts}\n ref={this.factsPopup}\n />\n </Container>\n );\n }\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\n\n\n// Services\nimport intl from \"../../../services/intl\";\nimport { navigate } from \"../../../services/navigation\";\n\n// Utils\nimport { Font, rem, responsive, Color, rgba } from \"../../../utils/style\";\nimport { Icons } from \"../../../utils/svg\";\nimport {\n getDiscountData,\n getPlanIdAndQuantityArray,\n getBundleCartLimit,\n} from \"../../../utils/bundle\";\nimport {\n trackCustomBundleAdded,\n trackCustomBundleViewed,\n} from \"../../../utils/tracking/bundle\";\nimport metrics from \"../../../utils/metrics\";\nimport {\n getPlanForProductSku,\n getContentfulProductForPlan,\n} from \"../../../utils/planToProduct\";\n\n// Components\nimport ProductResult from \"../ProductResult\";\nimport QuizRibbon from \"../QuizRibbon\";\nimport MagicLink from \"../../MagicLink\";\nimport Text from \"../../Text\";\n\n// Store\nimport { connect } from \"react-redux\";\nimport { addProductsToCart } from \"../../../store/cart/actions\";\n\n// Styled Elements\nconst Wrapper = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n text-align: center;\n margin: 48px 16px 56px;\n\n ${responsive.sm`\n max-width: 580px;\n margin: 80px auto;\n `};\n\n ${responsive.md`\n max-width: 770px;\n `}\n`;\n\nconst Copy = styled.div`\n h1 {\n font-size: ${rem(18)};\n letter-spacing: 0px;\n line-height: ${rem(26)};\n text-align: center;\n margin-bottom: 0;\n width: 256px;\n }\n\n ${responsive.sm`\n h1 {\n font-size: ${rem(30)};\n letter-spacing: -0.4px;\n line-height: ${rem(36)};\n width: 500px;\n }\n `}\n`;\n\nconst ProductResultsSection = styled.div`\n background-color: ${Color.white};\n margin: 24px 16px;\n padding: 16px;\n width: 100%;\n\n & > div {\n padding-top: 16px;\n padding-bottom: 16px;\n border-bottom: 1px solid rgba(0, 0, 0, 0.16);\n\n &:first-of-type {\n padding-top: 0;\n }\n\n &:last-of-type {\n padding-bottom: 0;\n border-bottom: none;\n }\n }\n\n ${responsive.sm`\n margin: 40px 70px;\n padding: 24px;\n\n & > div {\n padding-top: 24px;\n padding-bottom: 24px;\n border-bottom: 1px solid rgba(0, 0, 0, 0.16);\n }\n `}\n\n ${responsive.md`\n width: 770px;\n margin: 40px auto;\n padding: 24px 32px;\n `}\n`;\n\nconst ResultsButtonContainer = styled.div`\n position: fixed;\n bottom: 0;\n left: 0;\n right: 0;\n width: 100%;\n padding: 12px 20px;\n border-top: 1px solid rgba(0, 0, 0, 0.16);\n z-index: 399;\n background: ${Color.white};\n\n ${responsive.sm`\n position: relative;\n background: transparent;\n border-top: none;\n padding: 0;\n z-index: auto;\n `}\n`;\n\nconst ResultsButton = styled.button`\n background-color: ${Color.ritualBlue};\n border: none;\n border-radius: 25px;\n padding: 8px 32px;\n width: 100%;\n\n &:disabled {\n opacity: 0.56;\n }\n\n &:hover {\n background: ${Color.ritualYellow};\n p {\n color: ${Color.ritualBlue};\n\n span {\n color: ${Color.ritualDisabledBlue};\n }\n }\n }\n\n &:active {\n outline: none;\n }\n\n [data-whatintent=\"mouse\"] &:focus,\n [data-whatintent=\"touch\"] &:focus {\n outline: none;\n }\n\n p {\n color: ${Color.white};\n font-size: ${rem(14)};\n line-height: ${rem(24)};\n text-align: center;\n margin-bottom: 0;\n\n span {\n color: ${rgba(Color.white, 0.56)};\n text-decoration: line-through;\n }\n }\n\n ${responsive.sm`\n margin-bottom: 32px;\n padding: 12px 32px;\n width: auto;\n\n p {\n font-size: ${rem(16)};\n line-height: ${rem(26)};\n }\n `}\n`;\n\nconst FinishAddToCart = styled.div`\n margin-bottom: 24px;\n width: 250px;\n\n p {\n ${Font.dutch};\n color: ${rgba(Color.ritualBlue, 0.72)};\n font-size: ${rem(14)};\n font-weight: normal;\n line-height: ${rem(24)};\n text-align: center;\n margin-bottom: 0;\n }\n\n a {\n color: ${rgba(Color.ritualBlue, 0.72)};\n border-bottom: 1px solid ${rgba(Color.ritualBlue, 0.72)};\n margin-left: 4px;\n }\n\n ${responsive.sm`\n margin-bottom: 64px;\n width: 100%;\n `}\n`;\n\nconst ValuePropsContainer = styled.div`\n display: flex;\n flex-direction: column;\n width: 100%;\n margin: 16px 16px 0;\n\n ${responsive.sm`\n flex-direction: row;\n justify-content: center;\n width: auto;\n margin: 0 -80px;\n `}\n`;\n\nconst ValueProp = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n align-items: center;\n margin-bottom: 16px;\n\n &:last-of-type {\n margin-bottom: 0;\n }\n\n div {\n flex-shrink: 0;\n height: 32px;\n width: 32px;\n position: relative;\n\n svg {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n height: 100%;\n width: 100%;\n }\n }\n\n p {\n font-size: ${rem(14)};\n font-weight: 300;\n line-height: ${rem(20)};\n text-align: left;\n margin: auto 8px;\n }\n\n ${responsive.sm`\n flex-direction: column;\n width: 134px;\n margin-right: 24px;\n margin-bottom: 0;\n\n &:last-of-type {\n margin-right: 0;\n }\n\n div {\n height: 40px;\n width: 40px;\n margin-bottom: 16px;\n }\n\n p {\n font-size: ${rem(16)};\n font-weight: 300;\n line-height: ${rem(22)};\n text-align: center;\n margin: 0;\n }\n `}\n\n ${responsive.md`\n margin-right: 40px;\n `}\n`;\n\nexport class Results extends React.Component {\n constructor(props) {\n super(props);\n\n const { userInput } = props;\n\n const planIds = [];\n\n if (this._isFinalResults()) {\n // If this is final results slide, display all products in the userInput.\n userInput.forEach(input => {\n // If the input does not have a product, it is ignored.\n if (!input.product) return;\n const plan = getPlanForProductSku(input.product);\n planIds.push(plan.id);\n });\n } else {\n // Default to displaying the planId for the first product in the userInput.\n planIds.push(getPlanForProductSku(userInput[0].product).id);\n }\n\n const planIdAndQuantityArray = getPlanIdAndQuantityArray(planIds);\n\n this.state = {\n isProcessing: false,\n planIdAndQuantityArray,\n };\n }\n\n componentDidMount() {\n if (!this.state.planIdAndQuantityArray.length) {\n navigate(\"/shop-bundles\");\n }\n\n const bundle = this._getBundle();\n\n // Update the top-level results bundle whenever the results slide is\n // rendered. The top level bundle is used to determine which products\n // are added during bundle builder abandonment.\n this.props.updateResultsBundle(bundle);\n trackCustomBundleViewed(bundle);\n }\n\n _isFinalResults() {\n return this.props.slide.slideName === \"final-results\";\n }\n\n _getTotalQuantity() {\n let sum = 0;\n this.state.planIdAndQuantityArray.forEach(obj => {\n sum += obj.quantity;\n });\n return sum;\n }\n\n // Gets the bundle data for tracking. This does not always match the\n // userInput, as the product quantities may have been adjusted.\n _getBundle() {\n const { planIdAndQuantityArray } = this.state;\n const bundle = [];\n\n planIdAndQuantityArray.forEach(obj => {\n const { quantity, planId } = obj;\n const product = getContentfulProductForPlan(planId);\n\n // Push a new object to the results bundle for each quanity in the array.\n // Items with quantity 0 are omitted.\n for (let i = 0; i < quantity; i++) {\n bundle.push(getPlanForProductSku(product.sku));\n }\n });\n\n return bundle;\n }\n\n onQuantityChange(planId, quantity) {\n const { planIdAndQuantityArray } = this.state;\n\n planIdAndQuantityArray.find(obj => {\n const match = obj.planId === planId;\n if (match) {\n obj.quantity = quantity;\n }\n return match;\n });\n\n metrics.track(\"Quantity Changed\", {\n quantity,\n });\n\n this.setState(\n {\n planIdAndQuantityArray,\n },\n () => {\n // Update the top-level results bundle with the new quantity.\n this.props.updateResultsBundle(this._getBundle());\n },\n );\n }\n\n handleResultsButtonClick() {\n if (this._isFinalResults()) {\n this.handleAddToCart();\n } else {\n this.hanldeAddAnother();\n }\n }\n\n handleAddToCart() {\n trackCustomBundleAdded(this._getBundle());\n this.setState({\n isProcessing: true,\n });\n\n // Reove all plans with no quantity when adding the products to the cart.\n const filteredProductsToAdd = this.state.planIdAndQuantityArray.filter(\n obj => obj.quantity > 0,\n );\n\n this.props.dispatchAddProductsToCart(filteredProductsToAdd);\n navigate(\"/cart\");\n }\n\n hanldeAddAnother() {\n this.props.nextSlide(this.props.slide.answers[0]);\n\n metrics.track(\"CTA Clicked\", {\n title: \"Add Another Person\",\n location: \"Quiz result page\",\n nonInteraction: false,\n });\n }\n\n renderFinishAddToCart() {\n return (\n <FinishAddToCart>\n <p>\n <Text\n id=\"build-bundle.slides.results.finish-add-copy\"\n defaultMessage=\"Not interested in adding another product?\"\n />\n <MagicLink onClick={this.handleAddToCart.bind(this)} to=\"/cart\">\n <Text\n id=\"build-bundle.slides.results.finish-add-cta\"\n defaultMessage=\"Finish & Add to Cart\"\n />\n </MagicLink>\n </p>\n </FinishAddToCart>\n );\n }\n\n renderValueProp(valueProp) {\n let Icon = Icons[valueProp.icon];\n return (\n <ValueProp key={valueProp.icon}>\n <div>\n <Icon />\n </div>\n <p>{valueProp.copy}</p>\n </ValueProp>\n );\n }\n\n render() {\n const { discount } = this.props;\n const { isProcessing, planIdAndQuantityArray } = this.state;\n\n const isFinalResults = this._isFinalResults();\n const multiItem = this._getTotalQuantity() > 1;\n\n const bundle = this._getBundle();\n\n const total =\n bundle.reduce((total, product) => {\n const amount = product?.amount || 0;\n return total + amount;\n }, 0) / 100;\n\n const discountData = getDiscountData(total);\n\n const banner = multiItem\n ? discountData.amountOff\n ? intl.t(\n \"build-bundle.slides.results.multi-bundle.unlock\",\n \"You unlocked a {off} bundle discount\",\n { off: intl.formatCurrency(discountData.amountOff, { round: true }) },\n )\n : intl.t(\n \"build-bundle.slides.results.multi-bundle.unlock-percent\",\n \"You unlocked a {off}% bundle discount\",\n { off: discountData.percentOff },\n )\n : intl.t(\n \"build-bundle.slides.results.single-bundle.banner\",\n \"Add another to save {copy}\",\n { copy: discountData.sentenceCopy },\n );\n\n const heading = isFinalResults\n ? intl.t(\n \"build-bundle.slides.results.multi-bundle.heading\",\n \"Getting key nutrients you need should be easy, so we help make it that way.\",\n )\n : intl.t(\n \"build-bundle.slides.results.single-bundle.heading-new\",\n \"Nice. Here's what we recommend for you. Now, let’s find a Ritual for the rest of your household.\",\n );\n\n const ctaHtml = isFinalResults\n ? multiItem\n ? `<p>${intl.t(\n \"build-bundle.slides.results.multi-item.cta\",\n \"Add to Cart — {copy}\",\n { copy: intl.formatCurrency(discountData.discountPrice, { round: true }) },\n )} <span>${intl.formatCurrency(total, { round: true })}</span></p>`\n : `<p>${intl.t(\n \"build-bundle.slides.results.single-item.cta\",\n \"Add to Cart — {copy}\",\n { copy: intl.formatCurrency(total, { round: true }) },\n )}</p>`\n : `<p>${intl.t(\n \"build-bundle.slides.results.single-bundle.cta\",\n \"Keep Going — {copy}\",\n { copy: discountData.titleCopy },\n )}</p>`;\n\n const valueProps = intl.unformattedTranslation(\n \"build-bundle.slides.results.valueProps\",\n );\n\n return (\n <Wrapper>\n {discount && <QuizRibbon>{banner}</QuizRibbon>}\n <Copy>\n <h1>{heading}</h1>\n </Copy>\n\n <ProductResultsSection>\n {planIdAndQuantityArray &&\n planIdAndQuantityArray.map((obj, i) => {\n const { planId, quantity } = obj;\n const product = getContentfulProductForPlan(planId);\n return (\n <ProductResult\n key={i}\n showSupplementFacts={false}\n showQuantityPicker={isFinalResults}\n planId={planId}\n product={product}\n productQuantity={quantity}\n totalQuantity={this._getTotalQuantity()}\n maxQuantity={getBundleCartLimit()}\n onQuantityChange={this.onQuantityChange.bind(this)}\n />\n );\n })}\n </ProductResultsSection>\n\n <ResultsButtonContainer>\n <ResultsButton\n disabled={isProcessing}\n onClick={this.handleResultsButtonClick.bind(this)}\n dangerouslySetInnerHTML={{ __html: ctaHtml }}\n />\n </ResultsButtonContainer>\n\n {!isFinalResults && this.renderFinishAddToCart()}\n\n <ValuePropsContainer>\n {valueProps.map(valueProp => {\n return this.renderValueProp(valueProp);\n })}\n </ValuePropsContainer>\n </Wrapper>\n );\n }\n}\n\nexport default connect(null, {\n dispatchAddProductsToCart: addProductsToCart,\n})(Results);\n","import React from \"react\";\nimport styled from \"styled-components\";\n\n// Services\nimport intl from \"../../services/intl\";\n\n// Utils\nimport { Color, rem, responsive } from \"../../utils/style\";\nimport { Icons } from \"../../utils/svg\";\nimport { ProductSKU } from \"../../utils/product\";\n\n// Components\nimport QuizDropdown from \"./QuizDropdown\";\nimport QuizInput from \"./QuizInput\";\nimport NoProductMessage from \"./NoProductMessage\";\n\n// Styled Elements\nconst HouseholdMemberWrapper = styled.div.attrs({\n className: \"d-flex align-items-center justify-content-center flex-column\",\n})`\n z-index: ${p => 10 + p.index};\n margin-bottom: 30px;\n\n ${responsive.sm`\n margin-bottom: 40px;\n `}\n\n &:last-of-type {\n margin-bottom: 24px;\n\n ${responsive.sm`\n margin-bottom: 32px;\n `}\n }\n`;\n\nconst MemberTitle = styled.h2`\n position: relative;\n font-size: ${rem(12)};\n line-height: ${rem(20)};\n letter-spacing: 0.8px;\n font-weight: 500;\n text-transform: uppercase;\n color: ${Color.lessFadedBlue};\n text-align: center !important;\n\n width: 100%;\n margin-bottom: 16px;\n\n ${responsive.sm`\n font-size: ${rem(16)};\n line-height: ${rem(26)};\n letter-spacing: 1px;\n `};\n`;\n\nconst RemoveButton = styled.button`\n position: absolute;\n top: 0;\n right: 0;\n\n padding: 0;\n margin: 0;\n border: none;\n appearance: none;\n\n display: flex;\n align-items: center;\n justify-content: center;\n background: none;\n\n opacity: 0.24;\n transition: opacity 0.2s;\n\n &:hover {\n opacity: 1;\n }\n\n ${responsive.sm`\n top: -3px;\n `};\n\n svg {\n width: 24px;\n height: 24px;\n\n ${responsive.sm`\n width: 32px;\n height: 32px;\n `};\n }\n\n [data-whatintent=\"mouse\"] & {\n outline: none;\n }\n`;\n\nconst numberToWords = {\n 1: \"First\",\n 2: \"Second\",\n 3: \"Third\",\n 4: \"Fourth\",\n 5: \"Fifth\",\n 6: \"Sixth\",\n};\n\nconst productOptions = {\n over50: [\n {\n value: \"over50disabled\",\n title: intl.t(\"build-bundle.slides.household.interested\", \"Interested In\"),\n disabled: true,\n },\n {\n value: ProductSKU.EFW60,\n title: intl.t(\"build-bundle.slides.household.EFW60\", \"Daily nutrient support\"),\n },\n {\n value: ProductSKU.E50PLUS60,\n title: intl.t(\n \"build-bundle.slides.household.E50PLUS60\",\n \"Post-menopause nutrient support\",\n ),\n },\n ],\n under50: [\n {\n value: \"under50disabled\",\n title: intl.t(\"build-bundle.slides.household.interested\", \"Interested In\"),\n disabled: true,\n },\n {\n value: ProductSKU.EFW60,\n title: intl.t(\"build-bundle.slides.household.EFW60\", \"Daily nutrient support\"),\n },\n {\n value: ProductSKU.EPRE60,\n title: intl.t(\n \"build-bundle.slides.household.EPRE60\",\n \"Prenatal nutrient support\",\n ),\n },\n {\n value: ProductSKU.EPOST60,\n title: intl.t(\n \"build-bundle.slides.household.EPOST60\",\n \"Postnatal nutrient support\",\n ),\n },\n ],\n};\n\nexport default class HouseholdMember extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n showSecondaryDropdown: false,\n under: false,\n over: false,\n };\n\n this.timeout = null;\n this.debounce = null;\n }\n\n componentDidMount() {\n const {\n user: { age, gender },\n } = this.props;\n\n if (age || gender) {\n const showSecondaryDropdown = this._getSecondaryState(gender, age);\n\n this.setState(\n {\n showSecondaryDropdown,\n },\n () => {\n this._checkDisabledState();\n },\n );\n }\n }\n\n componentWillUnmount() {\n if (this.debounce) {\n clearTimeout(this.debounce);\n }\n if (this.timeout) {\n clearTimeout(this.timeout);\n }\n }\n\n removeUser(index, e) {\n e.preventDefault();\n this.props.removeUser(index);\n }\n\n handleGenderChange(value) {\n const {\n userIndex,\n user: { age },\n } = this.props;\n\n const showSecondaryDropdown = this._getSecondaryState(value, age);\n\n this.setState({\n showSecondaryDropdown,\n });\n\n this.props.onGenderChange(value, userIndex);\n\n const product = this._checkProductLogic(value, age);\n this.props.onProductChange(product, userIndex);\n }\n\n handleAgeChange(value) {\n if (this.debounce) {\n clearTimeout(this.debounce);\n }\n\n const age = Number(value);\n\n const {\n user: { gender },\n userIndex,\n } = this.props;\n\n const showSecondaryDropdown = this._getSecondaryState(gender, age);\n\n this.setState({\n showSecondaryDropdown,\n under: false,\n over: false,\n });\n\n this.props.onAgeChange(age, userIndex);\n\n if (!showSecondaryDropdown) {\n // If no secondary dropdown, get corresponding product\n const product = this._checkProductLogic(gender, age);\n this.props.onProductChange(product, userIndex);\n } else {\n // If the age updates the secondary, we clear it to reduce product add errors\n // where they may have been under 50, then changed to over 50\n this.props.onProductChange(undefined, userIndex);\n }\n }\n\n _getSecondaryState(gender, age) {\n // Only show secondary dropdown for 18-50 and 50+\n return gender === \"Female\" && age >= 18 && age < 100;\n }\n\n _checkProductLogic(gender, age) {\n if (gender === \"Male\") {\n const ageNumber = Number(age);\n\n if (ageNumber >= 4 && ageNumber < 13) {\n return ProductSKU.EFKIDS90;\n }\n\n if (ageNumber >= 13 && ageNumber < 18) {\n return ProductSKU.EFTB60;\n }\n\n if (ageNumber >= 18 && ageNumber < 50) {\n return ProductSKU.EFM60;\n }\n\n if (ageNumber >= 50 && ageNumber < 100) {\n return ProductSKU.EFM50PLUS60;\n }\n } else if (gender === \"Female\") {\n const ageNumber = Number(age);\n\n if (ageNumber >= 4 && ageNumber < 13) {\n return ProductSKU.EFKIDS90;\n }\n\n if (ageNumber >= 13 && ageNumber < 18) {\n return ProductSKU.EFTG60;\n }\n // Ages 18-50 and 50+ are determined by secondary dropdown\n }\n\n return undefined;\n }\n\n handleProductChange(value) {\n this.props.onProductChange(value, this.props.userIndex);\n }\n\n renderProductDropdown() {\n const { user } = this.props;\n\n const over50 = user.age >= 50;\n const options = over50 ? productOptions.over50 : productOptions.under50;\n\n const title =\n options.find(o => o.value === user.product)?.title ||\n intl.t(\"build-bundle.slides.household.interested\", \"Interested In\");\n\n let currentProductOption = {\n title,\n value: user.product,\n disabled:\n title === intl.t(\"build-bundle.slides.household.interested\", \"Interested In\"),\n };\n\n return (\n <QuizDropdown\n className=\"secondary-dropdown mt-2 mt-sm-3\"\n smallOptions={true}\n smallPlaceholder={!!user.product}\n options={options}\n currentOption={currentProductOption}\n onSelectionMade={this.onFieldChange.bind(\n this,\n this.handleProductChange.bind(this),\n )}\n />\n );\n }\n\n onFieldChange(callback, value) {\n callback(value);\n\n // Check on next tick, once new props have been updated\n this.timeout = setTimeout(() => {\n this._checkDisabledState();\n }, 0);\n }\n\n _checkDisabledState() {\n const underAgeThreshold = 4;\n\n const { user, userIndex } = this.props;\n const { age, gender, product } = user;\n\n const showSecondaryDropdown = this._getSecondaryState(gender, age);\n\n let disabled = !gender || !age;\n\n if (showSecondaryDropdown && !product) {\n disabled = true;\n }\n\n this.props.updateDisabledState(userIndex - 1, disabled);\n\n // Keep the input enabled, but delay showing the over/under messages.\n this.debounce = setTimeout(() => {\n this.setState({\n under: age && age !== \"\" && age < underAgeThreshold,\n over: age && age !== \"\" && age > 100,\n });\n }, 800);\n }\n\n render() {\n const { canRemove = true, user, userIndex } = this.props;\n const { showSecondaryDropdown, over, under } = this.state;\n\n const currentGenderOption = {\n value: user.gender,\n title: user.gender,\n };\n\n return (\n <HouseholdMemberWrapper index={userIndex}>\n <MemberTitle>\n {numberToWords[userIndex]} Person\n {canRemove && (\n <RemoveButton onClick={this.removeUser.bind(this, userIndex)}>\n <Icons.Remove />\n </RemoveButton>\n )}\n </MemberTitle>\n <QuizDropdown\n className=\"mb-2 mb-sm-3\"\n currentOption={currentGenderOption}\n options={[\n {\n title: intl.t(\"general.sex\", \"Sex\"),\n value: \"Sex\",\n disabled: true,\n },\n {\n title: intl.t(\"general.female\", \"Female\"),\n value: \"Female\",\n },\n {\n title: intl.t(\"general.male\", \"Male\"),\n value: \"Male\",\n },\n ]}\n onSelectionMade={this.onFieldChange.bind(\n this,\n this.handleGenderChange.bind(this),\n )}\n />\n <QuizInput\n value={user.age}\n onChange={this.onFieldChange.bind(\n this,\n this.handleAgeChange.bind(this),\n )}\n placeholder={intl.t(\"general.age\", \"Age\")}\n length={3}\n />\n {showSecondaryDropdown && this.renderProductDropdown()}\n\n <NoProductMessage\n className=\"mb-2\"\n firstRun={false}\n over={over}\n under={under}\n />\n </HouseholdMemberWrapper>\n );\n }\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\n\n// Utils\nimport { Color, rem, responsive } from \"../../../utils/style\";\nimport { getBundleCartLimit } from \"../../../utils/bundle\";\nimport metrics from \"../../../utils/metrics\";\n\n// Components\nimport YellowArrow from \"../YellowArrow\";\nimport HouseholdMember from \"../HouseholdMember\";\nimport QuizAlternateButton from \"../QuizAlternateButton\";\nimport NonBinaryLink from \"../NonBinaryLink\";\nimport Text from \"../../Text\";\n\n// Styled Elements\nconst Wrapper = styled.div`\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n width: 100%;\n height: 100%;\n padding: 56px 24px;\n\n ${responsive.sm`\n padding: 80px 24px;\n `};\n`;\n\nconst Title = styled.h1`\n color: ${Color.ritualBlue};\n font-weight: 500;\n font-size: ${rem(26)};\n line-height: ${rem(36)};\n letter-spacing: -0.3px;\n text-align: center !important;\n margin: 0 0 24px;\n max-width: 256px;\n\n ${responsive.sm`\n font-size: ${rem(48)};\n line-height: ${rem(54)};\n letter-spacing: -1.4px;\n margin-bottom: 32px;\n max-width: 430px;\n `};\n`;\n\nconst Form = styled.form`\n width: 100%;\n\n display: flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n\n ${responsive.sm`\n max-width: 370px;\n `};\n`;\n\nconst ArrowWrapper = styled.div.attrs({\n className:\n \"d-flex align-items-center justify-content-center flex-direction-column\",\n})`\n position: relative;\n`;\n\nconst Arrow = styled(YellowArrow)`\n position: absolute;\n bottom: 1px;\n left: 30px;\n transform: rotate(28deg);\n\n ${responsive.sm`\n left: 32px;\n bottom: 1px;\n transform: rotate(61deg);\n `};\n`;\n\nconst InputWrapper = styled.div`\n width: 100%;\n`;\n\nconst AddAnotherPerson = styled.button`\n display: block;\n appearance: none;\n border: 0;\n padding: 0;\n margin: 0 auto 40px;\n border-bottom: 2px solid ${Color.ritualBlue};\n background: none;\n\n text-align: center;\n color: ${Color.ritualBlue};\n font-size: ${rem(14)};\n line-height: ${rem(24)};\n font-weight: 500;\n\n ${responsive.sm`\n font-size: ${rem(16)};\n line-height: ${rem(26)};\n margin-bottom: 48px;\n `};\n\n [data-whatintent=\"mouse\"] &:focus,\n [data-whatintent=\"touch\"] &:focus {\n outline: none;\n }\n`;\n\nexport default class HouseholdBuilderSlide extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n disabledStates: [],\n };\n\n this.handleSubmit = this.handleSubmit.bind(this);\n }\n\n componentDidMount() {\n const { addHouseholdMember, userInput } = this.props;\n\n // Add first household member if they do not exist\n if (userInput.length < 2) {\n addHouseholdMember();\n }\n }\n\n handleSubmit(e) {\n e.preventDefault();\n\n const { slide, userInput } = this.props;\n\n let answer = { ...slide.answers[0] };\n\n // Exclude first user\n const householdUsers = userInput.slice(1);\n const newProducts = householdUsers.map(\n user => user.product && user.product,\n );\n\n const ages = householdUsers.map(user => user.age);\n const genders = householdUsers.map(user => user.gender);\n\n metrics.track(\"Quiz Personal Info Entered\", {\n location: slide.slideName,\n gender: genders.toString(),\n age: ages.toString(),\n });\n\n metrics.track(\"Quiz CTA Clicked\", {\n title: \"Continue\",\n location: slide.slideName,\n numberInHousehold: newProducts.length,\n });\n\n answer.sku = newProducts;\n this.props.nextSlide(answer);\n }\n\n updateDisabledState(index, value) {\n const disabledStates = [...this.state.disabledStates];\n disabledStates[index] = value;\n\n this.setState({\n disabledStates,\n });\n }\n\n addAnotherPerson(e) {\n e.preventDefault();\n\n // Add disabled state for newly added household member\n let disabledStates = [...this.state.disabledStates];\n disabledStates.push(true);\n\n this.setState({\n disabledStates,\n });\n\n this.props.addHouseholdMember();\n }\n\n removeUser(index) {\n // Add disabled state for newly added household member\n let disabledStates = [...this.state.disabledStates];\n disabledStates.splice(1, index - 1);\n\n this.setState({\n disabledStates,\n });\n\n this.props.removeHouseholdMember(index);\n }\n\n render() {\n const { disabledStates } = this.state;\n const { userInput } = this.props;\n\n const householdUsers = userInput.slice(1);\n\n const cartLimit = getBundleCartLimit();\n const canAddAnother = userInput.length < cartLimit;\n\n const disabled =\n !disabledStates.length || disabledStates.some(state => !!state);\n\n return (\n <Wrapper>\n <ArrowWrapper>\n <Title>\n <Text\n id=\"build-bundle.slides.household.title\"\n defaultMessage=\"Tell us about your household\"\n />\n \n \n \n
\n \n {householdUsers.map((user, i) => {\n const userIndex = i + 1;\n return (\n \n );\n })}\n \n {canAddAnother && (\n \n +{\" \"}\n \n \n )}\n \n \n \n
\n\n \n \n );\n }\n}\n","// Slides\nimport { kidsSlides } from \"./default\";\n\n/*\n\nStructure of a slide:\n\n {\n // Required\n slideName: String, // Used as a slide ID, should be unique\n\n // Required\n componentName: String, // Represents which slide component to use on build-a-bundle.js\n\n // Optional (required for Intermission slide)\n componentContent: Object = { // Used for Intermission slide content\n smallHeader: String, // Eyebrow copy for slide \n title: String, // Title copy\n copy: String, // Body copy\n imageName: String, // References image from map in Intermission.js\n imageIngredient: String, // Ingredient name copy\n imageSource: String, // Ingredient source copy\n },\n\n // Required\n answers: Array = [ // Used to render buttons and trigger next route\n {\n copy: String, // Copy for button\n sku: String, // If SKU property exists, will add product to bundle when moving to next slide\n nextSlide: Object = {\n firstRun: String, // On first loop of quiz, go here (looks at slideName)\n onwards: String, // Subsequent loops, go here\n },\n },\n ],\n },\n\n When using age slide, `answer` array is now an object:\n\n answers: Object = {\n Male: Object = {\n under50: Object = {\n sku: String,\n nextSlide: Object = {\n firstRun: String,\n onwards: String,\n },\n },\n over50: Object ={\n sku: String,\n nextSlide: Object = {\n firstRun: String,\n onwards: String,\n },\n },\n },\n Female: Object = {\n under50: Object = {\n sku: String,\n nextSlide: Object = {\n firstRun: String,\n onwards: String,\n },\n },\n over50: Object = {\n sku: String,\n nextSlide: Object = {\n firstRun: String,\n onwards: String,\n },\n },\n },\n }\n\n*/\n\nexport default {\n v1Kids: kidsSlides,\n};\n","/* eslint-disable */\nexport const kidsSlides = [\n {\n slideName: \"intro\",\n componentName: \"IntroSlide\",\n componentContent: {\n title: \"build-bundle.slides.intro.title\",\n copy: \"build-bundle.slides.intro.copy\",\n },\n answers: [\n {\n copy: \"build-bundle.slides.intro.button\",\n nextSlide: {\n firstRun: \"age-gender\",\n },\n },\n ],\n },\n {\n slideName: \"age-gender\",\n componentName: \"AgeGenderSlide\",\n answers: {\n Male: {\n under50: {\n nextSlide: {\n firstRun: \"intermission-3.3\",\n },\n },\n over50: {\n nextSlide: {\n firstRun: \"intermission-3.4\",\n },\n },\n },\n Female: {\n under50: {\n nextSlide: {\n firstRun: \"intermission-3.1\",\n },\n },\n over50: {\n nextSlide: {\n firstRun: \"intermission-3.2\",\n },\n },\n },\n },\n },\n {\n slideName: \"intermission-3.1\",\n componentName: \"IntermissionSlide\",\n componentContent: {\n smallHeader: \"build-bundle.slides.intermission-3.1.smallHeader\",\n title: \"build-bundle.slides.intermission-3.1.title\",\n copy: {\n Female: {\n under50: \"build-bundle.slides.intermission-3.1.female-under-50\",\n over50: \"build-bundle.slides.intermission-3.1.female-over-50\",\n },\n },\n imageName: \"iron\",\n imageIngredient: \"build-bundle.slides.intermission-3.1.imageIngredient\",\n imageSource: \"build-bundle.slides.intermission-3.1.imageSource\",\n },\n answers: [\n {\n copy: \"build-bundle.slides.intermission-3.1.button\",\n nextSlide: {\n firstRun: \"prenatal\",\n },\n },\n {\n copy: \"build-bundle.slides.intermission-3.1.button\",\n sku: \"EFTG60\",\n nextSlide: {\n firstRun: \"results\",\n },\n },\n ],\n },\n {\n slideName: \"intermission-3.2\",\n componentName: \"IntermissionSlide\",\n componentContent: {\n smallHeader: \"build-bundle.slides.intermission-3.2.smallHeader\",\n title: \"build-bundle.slides.intermission-3.2.title\",\n copy: \"build-bundle.slides.intermission-3.2.copy\",\n imageName: \"vitaminB12\",\n imageIngredient: \"build-bundle.slides.intermission-3.2.imageIngredient\",\n imageSource: \"build-bundle.slides.intermission-3.2.imageSource\",\n },\n answers: [\n {\n copy: \"build-bundle.slides.intermission-3.2.button\",\n nextSlide: {\n firstRun: \"postmenopausal\",\n },\n },\n ],\n },\n {\n slideName: \"intermission-3.3\",\n componentName: \"IntermissionSlide\",\n componentContent: {\n smallHeader: \"build-bundle.slides.intermission-3.3.smallHeader\",\n title: \"build-bundle.slides.intermission-3.3.title\",\n copy: {\n Male: {\n under50: \"build-bundle.slides.intermission-3.3.male-under-50\",\n over50: \"build-bundle.slides.intermission-3.3.male-under-50\",\n },\n },\n imageName: \"vitaminA\",\n imageIngredient: \"build-bundle.slides.intermission-3.3.imageIngredient\",\n imageSource: \"build-bundle.slides.intermission-3.3.imageSource\",\n },\n answers: [\n {\n copy: \"build-bundle.slides.intermission-3.3.button\",\n sku: \"EFM60\",\n nextSlide: {\n firstRun: \"results\",\n },\n },\n {\n copy: \"build-bundle.slides.intermission-3.3.button\",\n sku: \"EFTB60\",\n nextSlide: {\n firstRun: \"results\",\n },\n },\n ],\n },\n {\n slideName: \"intermission-3.4\",\n componentName: \"IntermissionSlide\",\n componentContent: {\n smallHeader: \"build-bundle.slides.intermission-3.4.smallHeader\",\n title: \"build-bundle.slides.intermission-3.4.title\",\n copy: \"build-bundle.slides.intermission-3.4.copy\",\n imageName: \"magnesium\",\n imageIngredient: \"build-bundle.slides.intermission-3.4.imageIngredient\",\n imageSource: \"build-bundle.slides.intermission-3.4.imageSource\",\n },\n answers: [\n {\n copy: \"build-bundle.slides.intermission-3.4.button\",\n sku: \"EFM50PLUS60\",\n nextSlide: {\n firstRun: \"results\",\n },\n },\n ],\n },\n {\n slideName: \"prenatal\",\n componentName: \"PrenatalSlide\",\n answers: [\n {\n copy: \"build-bundle.slides.prenatal.answer-1\",\n nextSlide: {\n firstRun: \"intermission-4.1.2\",\n },\n },\n {\n copy: \"build-bundle.slides.prenatal.answer-2\",\n nextSlide: {\n firstRun: \"intermission-4.1.1\",\n },\n },\n {\n copy: \"build-bundle.slides.prenatal.answer-3\",\n nextSlide: {\n firstRun: \"intermission-4.1.3\",\n },\n },\n ],\n },\n {\n slideName: \"intermission-4.1.1\",\n componentName: \"IntermissionSlide\",\n componentContent: {\n smallHeader: \"build-bundle.slides.intermission-4.1.1.smallHeader\",\n title: \"build-bundle.slides.intermission-4.1.1.title\",\n copy: \"build-bundle.slides.intermission-4.1.1.copy\",\n imageName: \"folate\",\n imageIngredient: \"build-bundle.slides.intermission-4.1.1.imageIngredient\",\n imageSource: \"build-bundle.slides.intermission-4.1.1.imageSource\",\n },\n answers: [\n {\n copy: \"build-bundle.slides.intermission-4.1.1.button\",\n sku: \"EPRE60\",\n nextSlide: {\n firstRun: \"results\",\n },\n },\n ],\n },\n {\n slideName: \"intermission-4.1.2\",\n componentName: \"IntermissionSlide\",\n componentContent: {\n smallHeader: \"build-bundle.slides.intermission-4.1.2.smallHeader\",\n title: \"build-bundle.slides.intermission-4.1.2.title\",\n copy: \"build-bundle.slides.intermission-4.1.2.copy\",\n imageName: \"folate\",\n imageIngredient: \"build-bundle.slides.intermission-4.1.2.imageIngredient\",\n imageSource: \"build-bundle.slides.intermission-4.1.2.imageSource\",\n },\n answers: [\n {\n copy: \"build-bundle.slides.intermission-4.1.2.button\",\n sku: \"EFW60\",\n nextSlide: {\n firstRun: \"results\",\n },\n },\n ],\n },\n {\n slideName: \"intermission-4.1.3\",\n componentName: \"IntermissionSlide\",\n componentContent: {\n smallHeader: \"build-bundle.slides.intermission-4.1.3.smallHeader\",\n title: \"build-bundle.slides.intermission-4.1.3.title\",\n copy: \"build-bundle.slides.intermission-4.1.3.copy\",\n imageName: \"omega3\",\n imageIngredient: \"build-bundle.slides.intermission-4.1.3.imageIngredient\",\n imageSource: \"build-bundle.slides.intermission-4.1.3.imageSource\",\n },\n answers: [\n {\n copy: \"build-bundle.slides.intermission-4.1.3.button\",\n sku: \"EPOST60\",\n nextSlide: {\n firstRun: \"results\",\n },\n },\n ],\n },\n {\n slideName: \"intermission-7.1.2\",\n componentName: \"IntermissionSlide\",\n componentContent: {\n smallHeader: \"build-bundle.slides.intermission-7.1.2.smallHeader\",\n title: \"build-bundle.slides.intermission-7.1.2.title\",\n copy: \"build-bundle.slides.intermission-7.1.2.copy\",\n imageName: \"omega3\",\n imageIngredient: \"build-bundle.slides.intermission-7.1.2.imageIngredient\",\n imageSource: \"build-bundle.slides.intermission-7.1.2.imageSource\",\n },\n answers: [\n {\n copy: \"build-bundle.slides.intermission-7.1.2.button\",\n sku: \"EFW60\",\n nextSlide: {\n firstRun: \"results\",\n },\n },\n ],\n },\n {\n slideName: \"postmenopausal\",\n componentName: \"PostmenopausalSlide\",\n answers: [\n {\n copy: \"build-bundle.slides.postmenopausal.answer-1\",\n nextSlide: {\n firstRun: \"intermission-4.2.2\",\n },\n },\n {\n copy: \"build-bundle.slides.postmenopausal.answer-2\",\n nextSlide: {\n firstRun: \"intermission-4.2.1\",\n },\n },\n ],\n },\n {\n slideName: \"intermission-4.2.1\",\n componentName: \"IntermissionSlide\",\n componentContent: {\n smallHeader: \"build-bundle.slides.intermission-4.2.1.smallHeader\",\n title: \"build-bundle.slides.intermission-4.2.1.title\",\n copy: \"build-bundle.slides.intermission-4.2.1.copy\",\n imageName: \"iron\",\n imageIngredient: \"build-bundle.slides.intermission-4.2.1.imageIngredient\",\n imageSource: \"build-bundle.slides.intermission-4.2.1.imageSource\",\n },\n answers: [\n {\n copy: \"build-bundle.slides.intermission-4.2.1.button\",\n sku: \"E50PLUS60\",\n nextSlide: {\n firstRun: \"results\",\n },\n },\n ],\n },\n {\n slideName: \"intermission-4.2.2\",\n componentName: \"IntermissionSlide\",\n componentContent: {\n smallHeader: \"build-bundle.slides.intermission-4.2.2.smallHeader\",\n title: \"build-bundle.slides.intermission-4.2.2.title\",\n copy: \"build-bundle.slides.intermission-4.2.2.copy\",\n imageName: \"vitaminB12\",\n imageIngredient: \"build-bundle.slides.intermission-4.2.2.imageIngredient\",\n imageSource: \"build-bundle.slides.intermission-4.2.2.imageSource\",\n },\n answers: [\n {\n copy: \"build-bundle.slides.intermission-4.2.2.button\",\n sku: \"EFW60\",\n nextSlide: {\n firstRun: \"results\",\n },\n },\n ],\n },\n {\n slideName: \"results\",\n componentName: \"Results\",\n answers: [\n {\n nextSlide: {\n firstRun: \"household\",\n },\n },\n ],\n },\n {\n slideName: \"household\",\n componentName: \"HouseholdBuilderSlide\",\n answers: [\n {\n nextSlide: {\n firstRun: \"intermission-ProductDifference\",\n },\n },\n ],\n },\n {\n slideName: \"intermission-ProductDifference\",\n componentName: \"ValuePropsIntermission\",\n componentContent: {\n smallHeader:\n \"build-bundle.slides.intermission-ProductDifference.smallHeader\",\n title: \"build-bundle.slides.intermission-ProductDifference.title\",\n valueProps: [\n {\n svg: \"Gene\",\n heading:\n \"build-bundle.slides.intermission-ProductDifference.props.gene.heading\",\n subheading:\n \"build-bundle.slides.intermission-ProductDifference.props.gene.subheading\",\n },\n {\n svg: \"Traceable\",\n heading:\n \"build-bundle.slides.intermission-ProductDifference.props.traceable.heading\",\n subheading:\n \"build-bundle.slides.intermission-ProductDifference.props.traceable.subheading\",\n },\n {\n svg: \"Vegan\",\n heading:\n \"build-bundle.slides.intermission-ProductDifference.props.vegan.heading\",\n subheading:\n \"build-bundle.slides.intermission-ProductDifference.props.vegan.subheading\",\n },\n {\n svg: \"Nonausea\",\n heading:\n \"build-bundle.slides.intermission-ProductDifference.props.nonausea.heading\",\n subheading:\n \"build-bundle.slides.intermission-ProductDifference.props.nonausea.subheading\",\n },\n ],\n },\n answers: [\n {\n copy: \"build-bundle.slides.intermission-ProductDifference.button\",\n nextSlide: {\n firstRun: \"final-results\",\n },\n },\n ],\n },\n {\n slideName: \"final-results\",\n componentName: \"Results\",\n },\n];\n","import React from \"react\";\n\n// Services\nimport { navigate } from \"../../services/navigation\";\nimport intl from \"../../services/intl\";\n\n// Utils\nimport metrics from \"../../utils/metrics\";\n\n// Components\nimport Navigation from \"./Navigation\";\nimport SlideContainer from \"./SlideContainer\";\nimport Disclaimer from \"./Disclaimer\";\nimport AbandonmentModal from \"./AbandonmentModal\";\n\n// Slide Components\nimport Intro from \"./slides/Intro\";\nimport TakeVitamins from \"./slides/TakeVitamins\";\nimport ProductSelectionSlide from \"./slides/ProductSelectionSlide\";\nimport AgeGenderSlide from \"./slides/AgeGender\";\nimport Intermission from \"./slides/Intermission\";\nimport ValuePropsIntermission from \"./slides/ValuePropsIntermission\";\nimport Results from \"./slides/Results\";\nimport HouseholdBuilderSlide from \"./slides/HouseholdBuilderSlide\";\n\n// Data\nimport slideData from \"../../data/bundle-builder/slides\";\n\n// Map of slide components\nconst components = {\n IntroSlide: Intro,\n TakeVitamins: TakeVitamins,\n AgeGenderSlide: AgeGenderSlide,\n PrenatalSlide: ProductSelectionSlide,\n PostmenopausalSlide: ProductSelectionSlide,\n IntermissionSlide: Intermission,\n Results: Results,\n HouseholdBuilderSlide: HouseholdBuilderSlide,\n ValuePropsIntermission: ValuePropsIntermission,\n};\n\nexport default class BundleLoopFlow extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n abandonmentModalClosePath: null,\n showDisclaimer: true,\n transition: false,\n // Slide Logic State\n slides: slideData?.v1Kids,\n currentSlide: slideData?.v1Kids?.[0],\n slideHistory: [],\n /* User Input\n First item in the array is always the initial user,\n every item following the first item is every user added\n from the Household Builder slide\n */\n userInput: [\n {\n age: undefined,\n gender: undefined,\n product: undefined,\n },\n ],\n // Results\n resultsBundle: [],\n };\n\n this.timeout = null;\n }\n\n componentWillUnmount() {\n if (this.timeout) {\n clearTimeout(this.timeout);\n }\n }\n\n setDisclaimerState(shouldShow) {\n this.setState({\n showDisclaimer: shouldShow,\n });\n }\n\n updateResultsBundle(bundle) {\n this.setState({\n resultsBundle: bundle,\n });\n }\n\n // Slide Logic\n nextSlide(answer) {\n const { userInput, currentSlide } = this.state;\n // Handles which slide to show next\n let nextSlide = answer.nextSlide.firstRun;\n\n // If answer has SKU associated, we add the product\n // to newly created bundle. The Results slide will handle\n // displaying array of products in the bundle.\n if (answer.sku) {\n this._handleSlideSku(answer.sku);\n }\n\n // If a QuizButton is clicked (not a QuizAlternateButton) we trigger this\n // CTA.\n if (answer.copy) {\n metrics.track(\"Quiz CTA Clicked\", {\n title: intl.t(answer.copy),\n location: currentSlide.slideName,\n });\n }\n\n // Handles changing currently viewed slide\n this._goToSlide(nextSlide);\n }\n\n _handleSlideSku(sku) {\n // If single SKU as string\n if (typeof sku === \"string\") {\n this.onProductChange(sku, 0);\n }\n }\n\n _goToSlide(nextSlideName) {\n // Get slide object based on slideName\n const slide = this.state.slides.find(\n slide => slide.slideName === nextSlideName,\n );\n\n // Add slideName to list of slide history\n let slideHistory = [...this.state.slideHistory];\n slideHistory.push(this.state.currentSlide.slideName);\n\n window.scrollTo(0, 0);\n this._transition({\n currentSlide: slide,\n slideHistory,\n });\n }\n\n _transition(state) {\n this.setState({\n transition: true,\n });\n\n this.timeout = setTimeout(() => {\n this.setState({\n transition: false,\n ...state,\n });\n }, 600);\n }\n\n _getCompletionPercent() {\n const { slides, currentSlide } = this.state;\n\n // Give the 1-based index of our current slide and the first results slide.\n const index =\n slides.findIndex(s => s.slideName === currentSlide.slideName) + 1;\n const firstResultsIndex =\n slides.findIndex(s => s.slideName === \"results\") + 1;\n\n // If it's first slide, or the currentSlide does not existing in the array\n // (should not happen), return 0.\n if (index === 1) return 0;\n\n // Determines how far we've progressed through the first section of the\n // builder by checking our current index again the index of the first\n // results slide. If this index is equal to (or great than) the index of\n // the results slide, we know we've completed the first half of the quiz.\n const firstSectionLength = firstResultsIndex;\n const firstSectionPercent = Math.min(index / firstSectionLength, 1);\n\n // Determines how far we've progressed through the second section of the\n // builder by checking how many steps past the first results slide we've\n // moved against how many total slides exist past the first results slide.\n const offsetIndex = index - firstResultsIndex;\n const secondSectionLength = slides.length - firstResultsIndex;\n const secondSectionPercent = Math.max(offsetIndex / secondSectionLength, 0);\n\n // The first half and the second half should each be treated as 50% of the\n // builder progress.\n return (firstSectionPercent * 0.5 + secondSectionPercent * 0.5) * 100;\n }\n\n goToPreviousSlide() {\n const slideHistory = this.state.slideHistory;\n\n // Get last slide and remove from history\n const lastSlideName = slideHistory.pop();\n const lastSlide = this.state.slides.find(\n slide => slide.slideName === lastSlideName,\n );\n\n this._transition({\n currentSlide: lastSlide,\n slideHistory,\n });\n }\n\n addHouseholdMember() {\n // Adds new member to household, undefined values ready for user input\n let userInput = [...this.state.userInput];\n userInput.push({\n age: undefined,\n gender: undefined,\n product: undefined,\n });\n\n this.setState({\n userInput,\n });\n }\n\n removeHouseholdMember(index) {\n let userInput = [...this.state.userInput];\n userInput.splice(index, 1);\n\n this.setState({\n userInput,\n });\n }\n\n onAgeChange(inputAge, index = 0) {\n this._onChange(index, \"age\", inputAge);\n }\n\n onGenderChange(inputGender, index = 0) {\n this._onChange(index, \"gender\", inputGender);\n }\n\n onProductChange(inputProduct, index = 0) {\n this._onChange(index, \"product\", inputProduct);\n }\n\n _onChange(index, field, value) {\n let userInput = [...this.state.userInput];\n userInput[index][field] = value;\n\n this.setState({\n userInput,\n });\n }\n\n onClose(path, e) {\n e.preventDefault();\n\n if (!this._hasUnsavedChanges()) {\n navigate(path);\n return;\n }\n\n this.setState({\n abandonmentModalClosePath: path,\n });\n }\n\n _hasUnsavedChanges() {\n return !!this.state.resultsBundle.length;\n }\n\n onModalClose() {\n this.setState({\n abandonmentModalClosePath: null,\n });\n }\n\n render() {\n const {\n abandonmentModalClosePath,\n showDisclaimer,\n // Slide State\n currentSlide,\n slides,\n transition,\n // User input\n userInput,\n // Results\n resultsBundle,\n } = this.state;\n const { data, discount } = this.props;\n\n if (!currentSlide || !slides) return null;\n\n const completionPercent = this._getCompletionPercent();\n\n // Select slide component to show based on currentSlide `componentName` value\n const SelectedComponent = components[currentSlide.componentName];\n\n const slideProps = {\n // Slide State\n slide: currentSlide,\n nextSlide: this.nextSlide.bind(this),\n // User input\n userInput,\n age: userInput[0].age,\n gender: userInput[0].gender,\n onAgeChange: this.onAgeChange.bind(this),\n onGenderChange: this.onGenderChange.bind(this),\n onProductChange: this.onProductChange.bind(this),\n addHouseholdMember: this.addHouseholdMember.bind(this),\n removeHouseholdMember: this.removeHouseholdMember.bind(this),\n updateResultsBundle: this.updateResultsBundle.bind(this),\n // Bundle details\n data,\n discount,\n };\n\n return (\n <>\n \n \n \n \n {showDisclaimer && }\n \n \n );\n }\n}\n","import React from \"react\";\nimport { graphql } from \"gatsby\";\n\n// Components\nimport BundleHouseholdFlow from \"../../components/buildBundle/BundleHouseholdFlow\";\n\nexport default class BuildABundlePage extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n discount: 10,\n };\n }\n\n render() {\n const { data } = this.props;\n const { discount } = this.state;\n\n const props = {\n data,\n discount,\n };\n\n return ;\n }\n}\n\nexport const query = graphql`\n query BuildABundleQuery($locale: String!) {\n allProduct {\n nodes {\n id\n name\n sku\n }\n }\n allPlan {\n nodes {\n id\n product_id\n amount\n }\n }\n backgroundImage: contentfulAsset(\n node_locale: { eq: $locale }\n contentful_id: { eq: \"3bVbTPVG81x6cnbnwWc9iP\" }\n ) {\n description\n fluid(maxWidth: 1286, quality: 90) {\n ...GatsbyContentfulFluid_withWebp_noBase64\n }\n }\n allContentfulProduct(filter: { node_locale: { eq: $locale } }) {\n nodes {\n name {\n childMarkdownRemark {\n rawMarkdownBody\n }\n }\n headerDescription\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 heroFeaturedImages {\n title\n fluid(maxWidth: 120, quality: 90) {\n ...GatsbyContentfulFluid_withWebp_noBase64\n }\n description\n }\n }\n }\n }\n`;\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","'use strict';\nvar $ = require('../internals/export');\nvar $findIndex = require('../internals/array-iteration').findIndex;\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar FIND_INDEX = 'findIndex';\nvar SKIPS_HOLES = true;\n\nvar USES_TO_LENGTH = arrayMethodUsesToLength(FIND_INDEX);\n\n// Shouldn't skip holes\nif (FIND_INDEX in []) Array(1)[FIND_INDEX](function () { SKIPS_HOLES = false; });\n\n// `Array.prototype.findIndex` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.findindex\n$({ target: 'Array', proto: true, forced: SKIPS_HOLES || !USES_TO_LENGTH }, {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $findIndex(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables(FIND_INDEX);\n"],"sourceRoot":""}