{"version":3,"sources":["webpack:///./src/components/bundleLanding/Hero.js","webpack:///./src/components/bundleLanding/ProductBundle.js","webpack:///./src/components/bundleLanding/CustomBundle.js","webpack:///./src/components/bundleLanding/ModalIngredientList.js","webpack:///./src/components/bundleLanding/BundleModal.js","webpack:///./src/components/bundleLanding/PopularBundles.js","webpack:///./src/components/bundleLanding/BundleBenefits.js","webpack:///./src/components/global/LargeContainer.js","webpack:///./src/components/bundleLanding/UGCBanner.js","webpack:///./src/templates/bundleLandingPage.js","webpack:///./src/components/global/AsyncRitualButton.js","webpack:///./src/components/product/ValueProps.js","webpack:///./src/store/banners/selectors.js","webpack:///./src/components/bundle/DiscountButton.js","webpack:///./src/components/bundle/index.js","webpack:///./src/components/global/StrikeText.js","webpack:///./src/components/bundle/DiscountButtonCopy.js"],"names":["Wrapper","styled","div","HeroContent","responsive","sm","rem","Color","ritualBlue","md","lg","Font","dutch","MobileColumn","BarrierBustersList","ul","ButtonWrapper","BundleButton","RitualButton","DiscountBanner","HeroSizedBanner","BarrierBustersBanner","circular","DiscountBannerMobile","BundleRibbonStyle","css","BundleLandingHero","handleSegmentEvent","title","metrics","track","location","nonInteraction","heroContent","this","props","discount","subheader","hasActiveSubscription","hasBundlePromoEligibleSubscription","short","white","className","contentStyle","to","intl","t","onClick","bind","ArrowRoundedRight","render","heroImageDesktop","heroImageMobile","PageHero","imageDesktop","imageMobile","backgroundColor","ritualYellow","columnStyling","CheckRounded","Container","Row","React","Component","Bundle","BundleTitle","h3","BundleProducts","BundleIcon","span","ImageWrapper","ProductImage","Img","DiscountButton","LearnMoreLink","ProductBundle","bundle","plans","total","getBundleTotalFromPlans","state","firstDemographic","products","sku","demographic","secondDemographic","handleStartNowClick","handleLearnMoreClick","renderProductImage","image","fluid","alt","description","loading","style","userSelect","userDrag","pointerEvents","touchCallout","bundleIndex","planIds","map","product","getPlanIdForProductSku","productAttributes","planId","getProductAttributes","name","position","dispatchAddProductsToCart","getPlanIdAndQuantityArray","navigate","openModal","firstProductImage","secondProductImage","prefix","price","role","connect","addProductsToCart","BundleRibbon","CustomBundle","bottleImage","data","Text","id","defaultMessage","twoSided","query","ToggleWrapper","p","open","media","mobile","ProductName","Label","IngredientRow","IngredientText","IngredientDosage","ListWrapper","ModalIngredientList","toggleList","setState","prevState","ingredients","supplementFacts","simpleIngredients","productName","NameMap","dangerouslySetInnerHTML","__html","html","CaretDownRounded","length","ingredient","i","key","dosage","Divider","Column","BottomRow","MobileDiscountButton","BundleIncludes","BundleModal","isOpen","onRequestClose","MagicModal","mobileFixedClose","mobileFullPage","PopularBundlesTitle","h2","BundlesWrapper","PopularBundles","isModalOpen","selectedBundle","closeModal","productBundles","slice","BenefitsWrapper","BenefitsList","BenefitsTitle","BundleBenefits","handleClick","benefits","indexId","align","background","markdown","undefined","items","item","Icon","Icons","icon","body","LargeContainer","children","ContentColumn","ImageColumn","Title","Content","UGCBannerComponent","content","cf","ugcImages","nodes","width","height","BundleLandingPage","contentfulBundleLandingPage","slug","pageTitle","pageDescription","socialImage","seo","pagePath","url","file","details","componentDidMount","updatePageData","label","isBundleBanner","bannerType","bannerVariation","variation","showBanner","updateLayoutState","navColor","banner","pageContext","popularBundlesHeadline","valueProps","bundleBenefitsImage","bundleBenefits","heroProps","popularBundleProps","Page","noIndex","ValueProps","margin20","labels","icons","removePadding","bannersSelectors","subscriptionSelectors","AsyncRitualButton","processing","_updateLocation","href","window","_navigate","navigateHrefOnClick","e","a","preventDefault","navigateToOnClick","disabled","newProps","attrs","StyledRow","PropsArea","ValueProp","index","tablet","ValuePropLabel","renderValueProp","valueProp","cleanedIconName","replace","IconElement","capitalize","ClinicalIcons","createSelector","banners","newYearsPromoEnabled","showStrikethrough","ModalTitle","h1","ModalDescription","ModalDescriptionTopMargin","Strike","StrikeText","DiscountButtonCopy","discountPrice","getDiscountData","Currency","value","round"],"mappings":"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","file":"component---src-templates-bundle-landing-page-js-977367b00a881efb6e8d.js","sourcesContent":["import React from \"react\";\nimport styled, { css } from \"styled-components\";\n\n// Services\nimport intl from \"../../services/intl\";\n\n// Utils\nimport { Font, Color, rem, responsive } from \"../../utils/style\";\nimport { Icons } from \"../../utils/svg\";\nimport metrics from \"../../utils/metrics\";\n\n// Components\nimport Container from \"../Container\";\nimport Row from \"../Row\";\nimport PageHero from \"../PageHero\";\nimport RitualButton from \"../global/RitualButton\";\nimport BundleRibbon from \"../bundle/Ribbon\";\n\n// Styled Elements\nconst Wrapper = styled.div``;\n\nconst HeroContent = styled.div`\n position: relative;\n height: 100%;\n display: flex;\n align-items: flex-start;\n justify-content: center;\n flex-direction: column;\n display: none;\n\n ${responsive.sm`\n display: flex;\n `};\n\n h1 {\n font-size: ${rem(30)};\n line-height: ${rem(36)};\n font-weight: 500;\n letter-spacing: -0.4px;\n color: ${Color.ritualBlue};\n margin: 0 0 16px;\n\n ${responsive.md`\n font-size: ${rem(48)};\n line-height: ${rem(54)};\n letter-spacing: -1.4px;\n margin-bottom: 24px;\n `};\n\n ${responsive.lg`\n font-size: ${rem(66)};\n line-height: ${rem(72)};\n letter-spacing: -2px;\n `};\n }\n\n p {\n ${Font.dutch};\n font-size: ${rem(16)};\n line-height: ${rem(26)};\n font-weight: normal;\n color: ${Color.ritualBlue};\n margin: 0;\n\n ${responsive.md`\n font-size: ${rem(18)};\n line-height: ${rem(28)};\n `};\n }\n`;\n\nconst MobileColumn = styled.div`\n padding-left: 20px;\n padding-right: 20px;\n\n h1 {\n font-size: ${rem(30)};\n line-height: ${rem(36)};\n font-weight: 500;\n letter-spacing: -0.4px;\n color: ${Color.ritualBlue};\n margin: 0 0 16px;\n }\n\n p {\n ${Font.dutch};\n font-size: ${rem(16)};\n line-height: ${rem(26)};\n font-weight: normal;\n color: ${Color.ritualBlue};\n margin: 0 0 24px;\n }\n`;\n\nconst BarrierBustersList = styled.ul`\n list-style: none;\n margin: 24px 0 0;\n padding: 0;\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n li {\n margin-right: 20px;\n font-size: ${rem(14)};\n line-height: ${rem(20)};\n font-weight: 300;\n color: ${Color.ritualBlue};\n display: flex;\n align-items: center;\n justify-content: center;\n\n svg {\n width: 12px;\n height: 9px;\n margin-right: 8px;\n }\n\n &:last-child {\n margin: 0;\n }\n }\n`;\n\nconst ButtonWrapper = styled.div`\n margin-top: 24px;\n\n ${responsive.sm`\n display: flex;\n flex-direction: column;\n `};\n\n ${responsive.md`\n display: flex;\n align-items: center;\n justify-content: center;\n margin-top: 32px;\n flex-direction: row;\n `};\n\n &.activeSubscription {\n a {\n width: 165px !important;\n }\n }\n`;\n\nconst BundleButton = styled(RitualButton)`\n margin-right: 24px;\n margin-bottom: 8px;\n width: 100%;\n\n &:last-of-type {\n margin-right: 0;\n margin-bottom: 0;\n }\n\n ${responsive.md`\n margin-bottom: 0;\n width: auto;\n `};\n\n svg {\n width: 19px;\n height: 12px;\n margin-left: 16px;\n\n g {\n transition: stroke 0.2s;\n stroke: white;\n }\n }\n\n &:hover {\n svg {\n g {\n stroke: ${Color.ritualBlue};\n }\n }\n }\n`;\n\nconst DiscountBanner = styled.div`\n width: fit-content;\n margin-top: 24px;\n\n ${responsive.md`\n margin-top: 0;\n margin-left: 24px;\n `}\n`;\n\nconst HeroSizedBanner = styled.div`\n position: relative;\n margin: 0 auto;\n width: calc(100vw - 16px);\n\n ${responsive.sm`\n width: calc(100vw - 48px);\n `}\n\n ${responsive.lg`\n width: calc(100vw - 80px);\n max-width: 1920px;\n `}\n`;\n\nconst BarrierBustersBanner = styled(HeroSizedBanner)`\n background: rgba(242, 241, 245, 0.56);\n color: ${Color.ritualBlue};\n padding: 17px 0;\n text-align: center;\n\n padding-left: 8px;\n padding-right: 8px;\n\n align-items: center;\n justify-content: center;\n\n display: none;\n\n ${responsive.sm`\n display: flex;\n padding-left: 0px;\n padding-right: 0px;\n `}\n\n ${responsive.md`\n padding: 20px 0;\n `};\n\n p {\n ${Font.circular};\n font-size: ${rem(14)};\n line-height: ${rem(20)};\n font-weight: 300;\n margin: 0 48px 0 0;\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n &:last-child {\n margin-right: 0;\n }\n\n svg {\n width: 14px;\n height: 11px;\n margin-right: 16px;\n }\n\n ${responsive.md`\n font-size: ${rem(16)};\n line-height: ${rem(22)};\n margin-right: 56px;\n `};\n }\n`;\n\nconst DiscountBannerMobile = styled(DiscountBanner)`\n position: absolute;\n bottom: 12px;\n left: -11px;\n\n ${responsive.sm`\n display: none;\n `};\n`;\n\nconst BundleRibbonStyle = css`\n display: inline-flex;\n transform: translateY(-5px);\n margin-left: 12px;\n\n ${responsive.md`\n transform: translateY(-10px);\n `};\n`;\n\nexport default class BundleLandingHero extends React.Component {\n handleSegmentEvent(title) {\n metrics.track(\"CTA Clicked\", {\n location: \"hero\",\n title,\n nonInteraction: false,\n });\n }\n\n heroContent() {\n const {\n discount,\n subheader,\n title,\n hasActiveSubscription,\n hasBundlePromoEligibleSubscription,\n } = this.props;\n\n return (\n <>\n \n

\n {title}{\" \"}\n {hasBundlePromoEligibleSubscription && (\n <>\n \n \n \n )}\n

\n

{subheader}

\n {hasActiveSubscription ? (\n \n \n {intl.t(\"bundle-landing.benefits.button-mens\", \"Add Men’s\")}\n \n \n {intl.t(\"bundle-landing.benefits.button-womens\", \"Add Women’s\")}\n \n \n ) : (\n \n \n {intl.t(\n \"bundle-landing.benefits.button-build\",\n \"Build Your Bundle\",\n )}{\" \"}\n \n \n {discount && (\n \n \n \n )}\n \n )}\n
\n {discount && (\n \n {\" \"}\n \n \n )}\n \n );\n }\n\n render() {\n const {\n title,\n subheader,\n heroImageDesktop,\n heroImageMobile,\n hasActiveSubscription,\n } = this.props;\n\n return (\n \n \n {this.heroContent()}\n \n\n \n

\n \n Free shipping—always\n

\n

\n \n Easy cancellation—anytime\n

\n

\n \n Don’t love it? It’s on us.\n

\n
\n\n \n \n \n

{title}

\n

{subheader}

\n {hasActiveSubscription ? (\n \n \n Add Men’s\n \n \n Add Women’s\n \n \n ) : (\n \n Build Your Bundle \n \n )}\n \n
  • \n \n Free shipping\n
  • \n
  • \n \n Easy cancellation\n
  • \n
    \n
    \n
    \n
    \n
    \n );\n }\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\n\n// Services\nimport intl from \"../../services/intl\";\nimport { navigate } from \"../../services/navigation\";\n\n// Utils\nimport { Color, rem, responsive } from \"../../utils/style\";\nimport {\n getBundleTotalFromPlans,\n getPlanIdAndQuantityArray,\n} from \"../../utils/bundle\";\nimport {\n getPlanIdForProductSku,\n getProductAttributes,\n} from \"../../utils/planToProduct\";\nimport metrics from \"../../utils/metrics\";\n\n// Components\nimport DiscountButton from \"../bundle/DiscountButton\";\nimport Img from \"gatsby-image\";\n\n// Store\nimport { connect } from \"react-redux\";\nimport { addProductsToCart } from \"../../store/cart/actions\";\n\n// Styled Elements\nconst Bundle = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n\n width: 100%;\n\n margin: 0 0 24px 0;\n border-radius: 16px;\n background: rgba(242, 241, 245, 0.56);\n padding: 24px 16px 32px;\n\n &:last-child {\n margin-bottom: 0;\n }\n\n ${responsive.sm`\n width: 280px;\n margin: 0 10px 24px;\n `};\n\n ${responsive.md`\n width: 294px;\n margin: 0 26px 0 0;\n padding: 32px 0 40px;\n\n &:last-child {\n margin-right: 0;\n }\n `};\n\n ${responsive.lg`\n width: 370px;\n margin: 0 30px 0 0;\n padding-left: 25px;\n padding-right: 25px;\n\n &:last-child {\n margin-right: 0;\n }\n `};\n`;\n\nconst BundleTitle = styled.h3`\n font-size: ${rem(20)};\n line-height: ${rem(30)};\n font-weight: 500;\n margin-bottom: 6px;\n\n ${responsive.md`\n font-size: ${rem(26)};\n line-height: ${rem(36)};\n letter-spacing: -0.3px;\n `};\n`;\n\nconst BundleProducts = styled.div`\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n margin: 0 0 16px 0;\n width: 100%;\n\n ${responsive.md`\n margin-bottom: 32px;\n `};\n`;\n\nconst BundleIcon = styled.span`\n position: absolute;\n z-index: 10;\n top: calc(50% - 21px);\n left: calc(50% - 21px);\n width: 42px;\n height: 42px;\n border-radius: 50%;\n background-color: #fff;\n margin-top: -12px;\n\n &::after,\n &::before {\n content: \"\";\n width: 2px;\n height: 18px;\n background-color: ${Color.ritualBlue};\n\n position: absolute;\n left: calc(50% - 1px);\n top: calc(50% - 9px);\n }\n\n &::after {\n transform: rotate(90deg);\n }\n\n ${responsive.md`\n width: 56px;\n height: 56px;\n top: calc(50% - 28px);\n left: calc(50% - 28px);\n\n &::after,\n &::before {\n height: 20px;\n top: calc(50% - 10px);\n }\n `};\n`;\n\nconst ImageWrapper = styled.div`\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n flex: 0 0 50%;\n\n p {\n margin: 0;\n font-size: ${rem(14)};\n line-height: ${rem(24)};\n font-weight: 500;\n opacity: 0.56;\n\n ${responsive.md`\n font-size: ${rem(16)};\n line-height: ${rem(26)};\n `};\n }\n`;\n\nconst ProductImage = styled(Img)`\n width: 100%;\n height: auto;\n`;\n\nconst BundleButton = styled(DiscountButton)`\n width: 100%;\n\n ${responsive.md`\n width: auto;\n `};\n`;\n\nconst StrikedPrice = styled.span`\n text-decoration: line-through;\n margin-left: 7px;\n opacity: 0.56;\n`;\n\nconst LearnMoreLink = styled.span`\n margin: 16px 0 0;\n font-size: ${rem(16)};\n line-height: ${rem(26)};\n font-weight: 500;\n border-bottom: 2px solid ${Color.ritualBlue};\n cursor: pointer;\n transition: opacity 0.2s;\n\n &:hover {\n opacity: 0.56;\n }\n`;\n\nexport class ProductBundle extends React.Component {\n constructor(props) {\n super(props);\n\n const { bundle, plans } = this.props;\n const total = getBundleTotalFromPlans(bundle, plans);\n\n this.state = {\n firstDemographic: plans[bundle?.products[0]?.sku]?.demographic,\n secondDemographic: plans[bundle?.products[1]?.sku]?.demographic,\n total,\n };\n\n this.handleStartNowClick = this.handleStartNowClick.bind(this);\n this.handleLearnMoreClick = this.handleLearnMoreClick.bind(this);\n }\n\n renderProductImage(image, demographic) {\n return (\n \n {image && (\n \n )}\n

    {demographic}

    \n
    \n );\n }\n\n handleStartNowClick() {\n const { bundleIndex, bundle } = this.props;\n const { products } = bundle;\n const planIds = products.map(product =>\n getPlanIdForProductSku(product.sku),\n );\n\n const productAttributes = products.map(product => {\n const planId = getPlanIdForProductSku(product.sku);\n return getProductAttributes(planId);\n });\n\n metrics.track(\"Featured Product Bundle Added\", {\n name: bundle.title,\n products: productAttributes,\n position: bundleIndex + 1,\n });\n\n this.props.dispatchAddProductsToCart(getPlanIdAndQuantityArray(planIds));\n navigate(\"/cart\");\n }\n\n handleLearnMoreClick() {\n const { bundleIndex, openModal, bundle } = this.props;\n openModal(bundleIndex, bundle);\n }\n\n render() {\n const { firstDemographic, secondDemographic, total } = this.state;\n const { bundle } = this.props;\n const { title, firstProductImage, secondProductImage } = bundle;\n\n return (\n \n {title}\n \n {this.renderProductImage(firstProductImage, firstDemographic)}\n \n {this.renderProductImage(secondProductImage, secondDemographic)}\n \n \n \n {intl.t(\"general.learn-more\", \"Learn More\")}\n \n \n );\n }\n}\n\nexport default connect(null, {\n dispatchAddProductsToCart: addProductsToCart,\n})(ProductBundle);\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 } from \"../../utils/style\";\nimport { Icons } from \"../../utils/svg\";\nimport metrics from \"../../utils/metrics\";\n\n// Components\nimport RitualButton from \"../global/RitualButton\";\nimport BundleRibbon from \"../bundle/Ribbon\";\nimport Img from \"gatsby-image\";\nimport Text from \"../Text\";\n\n// graphql query\nconst componentQuery = graphql`\n query CustomBundleQuery {\n bottleImage: contentfulAsset(\n contentful_id: { eq: \"77kYdlYrh6chRwfLgqImWB\" }\n ) {\n title\n fluid(maxWidth: 912, quality: 90) {\n ...GatsbyContentfulFluid_withWebp_noBase64\n }\n description\n }\n }\n`;\n\n// Styled Elements\nconst Bundle = styled.div`\n display: flex;\n align-items: center;\n justify-content: flex-start;\n flex-direction: column;\n\n width: 100%;\n\n margin: 0 0 24px 0;\n border-radius: 16px;\n background: rgba(242, 241, 245, 0.56);\n padding: 24px 16px 32px;\n\n &:last-child {\n margin-bottom: 0;\n }\n\n ${responsive.sm`\n width: 280px;\n margin: 0 10px 24px;\n padding-bottom: 74px;\n `};\n\n ${responsive.md`\n width: 294px;\n margin: 0 26px 0 0;\n padding: 32px 0 40px;\n\n &:last-child {\n margin-right: 0;\n }\n `};\n\n ${responsive.lg`\n width: 370px;\n margin: 0 30px 0 0;\n padding-left: 25px;\n padding-right: 25px;\n\n &:last-child {\n margin-right: 0;\n }\n `};\n`;\n\nconst BundleTitle = styled.h3`\n font-size: ${rem(20)};\n line-height: ${rem(30)};\n font-weight: 500;\n margin-bottom: 6px;\n\n ${responsive.md`\n font-size: ${rem(26)};\n line-height: ${rem(36)};\n letter-spacing: -0.3px;\n `};\n`;\n\nconst BundleProducts = styled.div`\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n margin: 0 0 16px 0;\n width: 100%;\n\n ${responsive.md`\n margin-bottom: 32px;\n `};\n`;\n\nconst BundleIcon = styled.span`\n position: absolute;\n z-index: 10;\n top: calc(50% - 21px);\n left: calc(50% - 21px);\n width: 42px;\n height: 42px;\n border-radius: 50%;\n background-color: #fff;\n margin-top: -12px;\n\n &::after,\n &::before {\n content: \"\";\n width: 2px;\n height: 18px;\n background-color: ${Color.ritualBlue};\n\n position: absolute;\n left: calc(50% - 1px);\n top: calc(50% - 9px);\n }\n\n &::after {\n transform: rotate(90deg);\n }\n\n ${responsive.md`\n width: 56px;\n height: 56px;\n top: calc(50% - 28px);\n left: calc(50% - 28px);\n\n &::after,\n &::before {\n height: 20px;\n top: calc(50% - 10px);\n }\n `};\n`;\n\nconst ImageWrapper = styled.div`\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n flex: 0 0 50%;\n\n p {\n margin: 0;\n font-size: ${rem(14)};\n line-height: ${rem(24)};\n font-weight: 500;\n opacity: 0.56;\n\n ${responsive.md`\n font-size: ${rem(16)};\n line-height: ${rem(26)};\n `};\n }\n`;\n\nconst ProductImage = styled(Img)`\n width: 100%;\n height: auto;\n`;\n\nconst BundleButton = styled(RitualButton)`\n width: 100%;\n\n svg {\n width: 18px;\n height: 12px;\n margin-left: 16px;\n transition: all 0.2s;\n }\n\n ${responsive.md`\n width: auto;\n `};\n\n &:hover {\n svg {\n g {\n stroke: ${Color.white};\n }\n }\n }\n`;\n\nconst DiscountBanner = styled(BundleRibbon)`\n margin: 18px 0 0 0;\n background-color: #ffed8d;\n\n &::before {\n border-color: #ffed8d;\n border-left-color: transparent;\n }\n\n &::after {\n border-color: #ffed8d;\n border-right-color: transparent;\n }\n\n font-size: ${rem(12)};\n line-height: ${rem(20)};\n`;\n\nexport const CustomBundle = class CustomBundle extends React.Component {\n handleSegmentEvent() {\n metrics.track(\"CTA Clicked\", {\n location: \"featured bundle section\",\n title: \"build a bundle\",\n nonInteraction: false,\n });\n }\n\n renderProductImage(image, title) {\n return (\n \n {image && (\n \n )}\n

    {title}

    \n
    \n );\n }\n\n render() {\n const bottleImage = this.props?.data?.bottleImage;\n\n return (\n \n \n \n \n \n {bottleImage &&\n this.renderProductImage(\n bottleImage,\n intl.t(\"general.yours\", \"Yours\"),\n )}\n \n {bottleImage &&\n this.renderProductImage(\n bottleImage,\n intl.t(\"general.theirs\", \"Theirs\"),\n )}\n \n \n {\" \"}\n \n \n \n \n );\n }\n};\n\nexport default props => (\n }\n />\n);\n","import React from \"react\";\nimport styled from \"styled-components\";\n\n// Utils\nimport { Font, media, Color, rem, responsive } from \"../../utils/style\";\nimport NameMap from \"../../utils/nameMap\";\nimport { Icons } from \"../../utils/svg\";\n\n// Styled Elements\nconst ToggleWrapper = styled.div`\n position: relative;\n\n border-bottom: ${p => (p.open ? \"none\" : `2px solid ${Color.ritualBlue}`)};\n\n ${media.mobile`\n cursor: pointer;\n `};\n\n ${responsive.sm`\n border-bottom: none;\n `};\n`;\n\nconst ProductName = styled.div`\n position: relative;\n\n h2 {\n ${Font.circular};\n font-size: ${rem(20)};\n line-height: 30px;\n color: ${Color.ritualBlue};\n margin: 16px 0 8px;\n\n ${responsive.sm`\n margin-top: 0;\n `};\n\n em {\n ${Font.dutch};\n font-style: italic;\n }\n }\n\n svg {\n position: absolute;\n top: calc(50% - 9px);\n right: 0;\n width: 18px;\n height: 18px;\n\n transform: ${p => (p.open ? \"rotate(180deg)\" : \"rotate(0deg)\")};\n\n ${responsive.sm`\n display: none;\n `};\n }\n`;\n\nconst Label = styled.p`\n color: rgba(20, 43, 111, 0.56);\n ${Font.circular}\n font-size: 12px;\n font-weight: 500;\n letter-spacing: 0.8px;\n line-height: 20px;\n text-transform: uppercase;\n margin-bottom: 16px;\n`;\n\nconst IngredientRow = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 8px;\n\n &:last-child {\n margin-bottom: 0;\n }\n`;\n\nconst IngredientText = styled.p`\n ${Font.circular};\n color: ${Color.ritualBlue};\n font-size: ${rem(16)};\n line-height: ${rem(26)};\n font-weight: 500;\n margin: 0;\n`;\n\nconst IngredientDosage = styled.p`\n ${Font.circular};\n color: ${Color.ritualBlue};\n font-size: ${rem(14)};\n line-height: ${rem(20)};\n font-weight: 300;\n margin: 0;\n`;\n\nconst ListWrapper = styled.div`\n display: block;\n\n display: ${p => (p.open ? `block;` : `none`)};\n border-bottom: ${p => (p.open ? `2px solid ${Color.ritualBlue}` : \"none\")};\n padding-bottom: 16px;\n\n ${responsive.sm`\n display: block !important;\n border-bottom: none;\n `};\n`;\n\nexport default class ModalIngredientList extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n open: false,\n };\n }\n\n toggleList() {\n this.setState(prevState => ({\n open: !prevState.open,\n }));\n }\n\n render() {\n const { open } = this.state;\n const { product } = this.props;\n\n if (!product) return null;\n\n const ingredients = product?.supplementFacts?.simpleIngredients;\n if (!ingredients) return null;\n\n const productName = NameMap(product.name);\n\n return (\n <>\n \n \n \n \n \n \n \n \n {ingredients &&\n ingredients.map((ingredient, i) => {\n return (\n \n {ingredient.name}\n {`${ingredient.dosage}`}\n \n );\n })}\n \n \n );\n }\n}\n","import React from \"react\";\nimport styled, { css } from \"styled-components\";\n\n// Services\nimport intl from \"../../services/intl\";\nimport { navigate } from \"../../services/navigation\";\n\n// Utils\nimport { Color, rem, responsive } from \"../../utils/style\";\nimport {\n getBundleTotalFromPlans,\n getPlanIdAndQuantityArray,\n} from \"../../utils/bundle\";\nimport { getPlanIdForProductSku } from \"../../utils/planToProduct\";\n\n// Components\nimport { ModalTitle, ModalDescription } from \"../bundle/index\";\nimport ModalIngredientList from \"./ModalIngredientList\";\nimport DiscountButton from \"../bundle/DiscountButton\";\nimport MagicModal from \"../MagicModal\";\nimport Text from \"../Text\";\n\n// Store\nimport { connect } from \"react-redux\";\nimport { addProductsToCart } from \"../../store/cart/actions\";\n\n// Styled Elements\nconst contentStyle = css`\n padding: 24px 20px;\n\n ${responsive.sm`\n width: 700px;\n padding: 56px 40px;\n `};\n\n ${responsive.md`\n width: 774px;\n padding: 56px 80px;\n `};\n\n ${responsive.lg`\n width: 782px;\n padding: 56px 100px;\n `};\n`;\n\nconst Divider = styled.div`\n background: ${Color.ritualBlue};\n height: 2px;\n margin-top: 32px;\n\n ${responsive.sm`\n margin-top: 24px;\n margin-bottom: 26px;\n `};\n`;\n\nconst Column = styled.div`\n display: flex;\n flex-direction: column;\n width: 100%;\n\n ${responsive.sm`\n width: calc(50% - (40px / 2));\n margin-right: 40px;\n\n &:last-child {\n margin-right: 0;\n }\n `};\n`;\n\nconst Row = styled.div`\n display: flex;\n width: 100%;\n margin: 0 auto;\n flex-direction: column;\n\n ${responsive.sm`\n flex-direction: row;\n `};\n`;\n\nconst BottomRow = styled(Row)`\n display: none;\n\n ${responsive.sm`\n display: flex;\n margin-top: 24px;\n justify-content: center;\n `}\n`;\n\nconst MobileDiscountButton = styled(DiscountButton)`\n width: 100%;\n\n ${responsive.sm`\n display: none;\n `}\n`;\n\nconst BundleIncludes = styled.p`\n color: rgba(20, 43, 111, 0.56);\n font-size: ${rem(12)};\n line-height: ${rem(20)};\n letter-spacing: 0.8px;\n text-transform: uppercase;\n margin: 61px 0 8px;\n\n ${responsive.sm`\n margin-top: 0;\n `};\n`;\n\nexport class BundleModal extends React.Component {\n constructor() {\n super();\n\n this.handleStartNowClick = this.handleStartNowClick.bind(this);\n }\n\n handleStartNowClick() {\n const products = this.props.bundle.products;\n const planIds = products.map(product =>\n getPlanIdForProductSku(product.sku),\n );\n this.props.dispatchAddProductsToCart(getPlanIdAndQuantityArray(planIds));\n navigate(\"/cart\");\n }\n\n render() {\n const { isOpen, onRequestClose, bundle, plans } = this.props;\n if (!bundle || !plans) return null;\n\n const { title, description, products } = bundle;\n if (!products) return null;\n\n const price = getBundleTotalFromPlans(bundle, plans);\n\n return (\n \n {title}\n \n \n \n {description}\n\n \n \n \n {products.map((product, i) => {\n return (\n \n \n \n );\n })}\n \n \n \n \n \n );\n }\n}\n\nexport default connect(null, {\n dispatchAddProductsToCart: addProductsToCart,\n})(BundleModal);\n","import React from \"react\";\nimport styled, { css } from \"styled-components\";\n\n// Utils\nimport { Font, Color, rem, responsive } from \"../../utils/style\";\nimport {\n getPlanIdForProductSku,\n getProductAttributes,\n} from \"../../utils/planToProduct\";\nimport metrics from \"../../utils/metrics\";\n\n// Components\nimport Container from \"../Container\";\nimport Row from \"../Row\";\nimport ProductBundle from \"./ProductBundle\";\nimport CustomBundle from \"./CustomBundle\";\nimport BundleModal from \"./BundleModal\";\n\n// Styled Elements\nconst Wrapper = styled.div`\n margin-top: 56px;\n\n ${responsive.md`\n margin-top: 80px;\n `}\n`;\n\nconst PopularBundlesTitle = styled.h2`\n text-align: center !important;\n ${Font.circular};\n color: ${Color.ritualBlue};\n font-size: ${rem(26)};\n line-height: ${rem(36)};\n letter-spacing: -0.3px;\n font-weight: 500;\n margin: 0 auto 32px;\n\n ${responsive.md`\n font-size: ${rem(40)};\n line-height: ${rem(50)};\n letter-spacing: -1px;\n margin-bottom: 56px;\n `};\n`;\n\nconst BundlesWrapper = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-direction: column;\n\n ${responsive.sm`\n flex-direction: row;\n justify-content: center;\n flex-wrap: wrap;\n align-items: stretch;\n `};\n\n ${responsive.md`\n flex-wrap: nowrap;\n `};\n`;\n\nexport default class PopularBundles extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n isModalOpen: false,\n selectedBundle: 0,\n };\n\n this.openModal = this.openModal.bind(this);\n this.closeModal = this.closeModal.bind(this);\n }\n\n openModal(bundleIndex, bundle) {\n this.setState({\n isModalOpen: true,\n selectedBundle: bundleIndex,\n });\n\n const productAttributes = bundle.products.map(product => {\n const planId = getPlanIdForProductSku(product.sku);\n return getProductAttributes(planId);\n });\n\n metrics.track(\"Overlay Opened\", {\n title: \"Learn More\",\n location: \"Featured Product Bundle\",\n name: bundle.title,\n products: productAttributes,\n });\n }\n\n closeModal() {\n this.setState({\n isModalOpen: false,\n });\n }\n\n render() {\n const { isModalOpen, selectedBundle } = this.state;\n const {\n discount,\n title,\n productBundles,\n plans,\n className = \"\",\n } = this.props;\n\n const customBundle = {\n title: \"The Home Made\",\n firstProductImage: undefined,\n secondProductImage: undefined,\n products: undefined,\n };\n\n return (\n <>\n \n \n \n
    \n {title}\n\n \n {productBundles &&\n productBundles\n .slice(0, 2)\n .map((bundle, i) => (\n \n ))}\n \n \n
    \n
    \n
    \n
    \n {productBundles && (\n \n )}\n \n );\n }\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\n\n// Services\nimport intl from \"../../services/intl\";\n\n// Utils\nimport { Font, responsive, Color, rem } from \"../../utils/style\";\nimport { Icons } from \"../../utils/svg\";\nimport metrics from \"../../utils/metrics\";\n\n// Components\nimport Container from \"../Container\";\nimport Row from \"../Row\";\nimport FeaturedArea from \"../home/FeaturedArea.New\";\nimport RitualButton from \"../global/RitualButton\";\nimport Text from \"../Text\";\n\n// Styled Elements\nconst Wrapper = styled.div`\n .flex-column {\n margin-top: 0 !important;\n }\n`;\n\nconst BenefitsWrapper = styled.div`\n display: flex;\n align-items: flex-start;\n justify-content: center;\n flex-direction: column;\n`;\n\nconst BenefitsList = styled.ul`\n margin: 0 0 32px !important;\n padding: 0 !important;\n list-style: none;\n\n ${responsive.sm`\n margin-bottom: 0 !important;\n `};\n\n ${responsive.md`\n margin-bottom: 40px !important;\n `};\n\n li {\n margin: 0 0 24px !important;\n padding: 0 !important;\n\n display: flex;\n\n ${responsive.md`\n margin-bottom: 32px !important;\n `};\n\n &:last-child {\n margin-bottom: 0 !important;\n }\n\n svg {\n flex: 0 0 32px;\n width: 32px !important;\n height: 32px !important;\n margin-right: 16px;\n\n ${responsive.md`\n width: 40px !important;\n height: 40px !important;\n flex: 0 0 40px;\n `}\n }\n\n h4 {\n ${Font.circular};\n font-size: ${rem(18)};\n line-height: ${rem(28)};\n font-weight: 500;\n margin: 0 0 8px;\n\n ${responsive.md`\n font-size: ${rem(22)};\n line-height: ${rem(32)};\n letter-spacing: -0.2px;\n `};\n }\n\n p {\n ${Font.circular};\n font-size: ${rem(14)};\n line-height: ${rem(20)};\n font-weight: 300;\n margin: 0;\n\n ${responsive.md`\n font-size: ${rem(16)};\n line-height: ${rem(22)};\n `};\n }\n }\n`;\n\nconst BundleButton = styled(RitualButton)`\n width: 100% !important;\n\n ${responsive.sm`\n width: auto !important;\n `};\n\n ${responsive.md`\n width: auto !important;\n `};\n\n svg {\n width: 19px;\n height: 12px;\n margin-left: 16px;\n\n g {\n transition: stroke 0.2s;\n stroke: white;\n }\n }\n\n &:hover {\n opacity: 1 !important;\n\n svg {\n g {\n stroke: ${Color.ritualBlue};\n }\n }\n }\n`;\n\nconst BenefitsTitle = styled.h3`\n text-align: left;\n font-size: ${rem(26)} !important;\n line-height: ${rem(36)} !important;\n font-weight: 500;\n letter-spacing: -0.3px !important;\n margin: 32px 0 24px !important;\n max-width: 230px;\n\n ${responsive.sm`\n text-align: center !important;\n margin-top: 0 !important;\n margin-bottom: 40px !important;\n max-width: none;\n `};\n\n ${responsive.md`\n font-size: ${rem(40)} !important;\n line-height: ${rem(50)} !important;\n letter-spacing: -1px !important;\n margin-bottom: 56px !important;\n `};\n`;\n\nconst ButtonWrapper = styled.div`\n width: 100%;\n\n ${responsive.sm`\n width: unset;\n `};\n\n a {\n width: 100% !important;\n\n ${responsive.sm`\n width: 165px !important;\n `};\n\n &:first-child {\n margin-right: 24px;\n }\n\n &:last-child {\n margin-right: 0;\n }\n }\n`;\n\nexport default class BundleBenefits extends React.Component {\n handleClick(title) {\n metrics.track(\"CTA Clicked\", {\n location: \"benefits\",\n title,\n nonInteraction: false,\n });\n }\n\n render() {\n const { benefits, className, image, hasActiveSubscription } = this.props;\n\n if (!benefits) return null;\n\n return (\n \n \n \n
    \n {benefits.title}\n
    \n
    \n
    \n\n \n \n \n {benefits.title}\n \n \n {benefits.items &&\n benefits.items.map((item, i) => {\n const Icon = Icons[item.icon];\n return (\n
  • \n {Icon && }\n
    \n

    {item.title}

    \n

    {item.body}

    \n
    \n
  • \n );\n })}\n
    \n {hasActiveSubscription ? (\n \n \n \n \n \n \n \n \n ) : (\n \n \n \n \n )}\n
    \n \n\n \n \n
    \n {hasActiveSubscription ? (\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 { responsive } from \"../../utils/style\";\n\n// Styled Elements\nconst Wrapper = styled.div`\n height: fit-content;\n max-height: fit-content;\n width: calc(100vw - 16px);\n\n margin-left: auto;\n margin-right: auto;\n padding-left: 8px;\n padding-right: 8px;\n\n ${responsive.sm`\n width: calc(100vw - 48px);\n padding-left: 0px;\n padding-right: 0px;\n `};\n\n ${responsive.lg`\n width: calc(100vw - 80px);\n max-width: 1920px;\n max-height: calc(1920px * 0.3888024883);\n `};\n`;\nexport default class LargeContainer extends React.Component {\n render() {\n const { children, className = \"\" } = this.props;\n return {children};\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 { rem, responsive } from \"../../utils/style\";\n\n// Components\nimport LargeContainer from \"../global/LargeContainer\";\nimport Img from \"gatsby-image\";\n\n// graphql query\nconst componentQuery = graphql`\n query UGCBannerQuery {\n ugcImages: allContentfulAsset(\n filter: { contentful_id: { eq: \"1zmcKgHPtggFFLESVZc7Q6\" } }\n ) {\n nodes {\n node_locale\n title\n fluid(maxWidth: 500, quality: 100) {\n ...GatsbyContentfulFluid_withWebp_noBase64\n }\n description\n }\n }\n }\n`;\n\n// Styled Elements\nconst Container = styled(LargeContainer)`\n background-color: rgba(242, 241, 245, 0.56);\n margin-bottom: 56px;\n\n ${responsive.md`\n margin-bottom: 120px;\n `};\n`;\n\nconst Row = styled.div`\n display: flex;\n flex-direction: column;\n\n ${responsive.sm`\n flex-direction: row;\n justify-content: center;\n padding: 80px 0;\n `};\n`;\n\nconst ContentColumn = styled.div`\n order: 1;\n padding: 0 16px 48px;\n width: 100%;\n\n ${responsive.sm`\n width: 300px;\n margin-right: 60px;\n order: 0;\n padding: 0;\n display: flex;\n justify-content: center;\n flex-direction: column;\n `};\n\n ${responsive.md`\n width: 400px;\n margin-right: 80px;\n `};\n\n ${responsive.lg`\n width: 470px;\n margin-right: 130px;\n `};\n`;\n\nconst ImageColumn = styled.div`\n order: 0;\n padding: 48px 16px 40px;\n\n ${responsive.sm`\n order: 1;\n padding: 0;\n width: 260px;\n height: 260px;\n `};\n\n ${responsive.md`\n width: 346px;\n height: 346px;\n `};\n\n ${responsive.lg`\n width: 430px;\n height: 430px;\n `};\n`;\n\nconst Title = styled.h3`\n font-size: ${rem(26)};\n line-height: ${rem(36)};\n letter-spacing: -0.3px;\n font-weight: 500;\n margin-bottom: 24px;\n text-align: center !important;\n\n ${responsive.sm`\n text-align: left !important;\n `};\n\n ${responsive.md`\n font-size: ${rem(40)};\n line-height: ${rem(50)};\n letter-spacing: -1px;\n margin-bottom: 40px;\n `};\n`;\n\nconst Content = styled.p`\n font-size: ${rem(18)};\n line-height: ${rem(28)};\n font-weight: 500;\n margin-bottom: 0;\n text-align: center !important;\n\n ${responsive.sm`\n text-align: left !important;\n `};\n\n ${responsive.md`\n font-size: ${rem(26)};\n line-height: ${rem(36)};\n letter-spacing: -0.3px;\n `};\n`;\n\nconst ImageWrapper = styled.div`\n position: relative;\n width: 100%;\n`;\n\nexport const UGCBannerComponent = class UGCBanner extends React.Component {\n render() {\n const title = intl.t(\n \"bundle-landing.ugc-banner.title\",\n `A healthy home is what you make it`,\n );\n\n const content = intl.t(\n \"bundle-landing.ugc-banner.content\",\n `We’re here to help make it easier for everyone. Create a bundle that’s right for your home, and help turn healthy habits into a shared Ritual.*`,\n );\n\n const image = intl.cf(this.props?.data?.ugcImages.nodes, true);\n\n return (\n \n \n \n {title}\n {content}\n \n \n {title}\n \n {image && (\n \n )}\n \n \n \n \n );\n }\n};\n\nexport default props => (\n }\n />\n);\n","import React from \"react\";\nimport { graphql } from \"gatsby\";\n\n// Components\nimport PageSEO from \"../components/seo/Page\";\nimport Hero from \"../components/bundleLanding/Hero\";\nimport PopularBundles from \"../components/bundleLanding/PopularBundles\";\nimport ValueProps from \"../components/product/ValueProps\";\nimport BundleBenefits from \"../components/bundleLanding/BundleBenefits\";\nimport UGCBanner from \"../components/bundleLanding/UGCBanner\";\n\nimport { variation } from \"../utils/launchDarkly\";\n\n// Redux\nimport { connect } from \"react-redux\";\nimport bannersSelectors from \"../store/banners/selectors\";\nimport subscriptionSelectors from \"../store/subscription/selectors\";\n\nexport class BundleLandingPage extends React.Component {\n constructor(props) {\n super(props);\n\n const {\n slug,\n pageTitle,\n pageDescription,\n socialImage,\n } = props.data.contentfulBundleLandingPage;\n\n this.state = {\n seo: {\n pagePath: `${slug}`,\n title: pageTitle,\n description: pageDescription,\n image: {\n url: socialImage.file.url,\n width: socialImage.file.details.image.width,\n height: socialImage.file.details.image.height,\n },\n },\n };\n }\n\n componentDidMount() {\n this.props.updatePageData({\n label: \"Shop Bundles\",\n });\n\n // hide the bundle banner if its the clickable variant\n const isBundleBanner = this.props.bannerType === \"BUNDLE\";\n const bannerVariation = variation(\"bundle-banner\");\n const showBanner =\n isBundleBanner && bannerVariation === \"with-cta\" ? false : true;\n\n this.props.updateLayoutState({\n navColor: \"#FFFFFF\",\n banner: showBanner,\n });\n }\n\n render() {\n const {\n data,\n hasActiveSubscription,\n hasBundlePromoEligibleSubscription,\n pageContext,\n } = this.props;\n const {\n title,\n subheader,\n discount,\n heroImageDesktop,\n heroImageMobile,\n popularBundlesHeadline,\n valueProps,\n bundleBenefitsImage,\n bundleBenefits,\n productBundles,\n } = data.contentfulBundleLandingPage;\n\n const { plans } = pageContext;\n\n const heroProps = {\n title,\n subheader,\n heroImageDesktop,\n heroImageMobile,\n discount,\n hasActiveSubscription,\n hasBundlePromoEligibleSubscription,\n };\n\n const popularBundleProps = {\n title: popularBundlesHeadline,\n productBundles,\n plans,\n discount,\n };\n\n return (\n <>\n \n\n \n\n \n\n
    \n \n
    \n\n \n\n \n \n );\n }\n}\n\nconst mapStateToProps = state => {\n return {\n bannerType: bannersSelectors.bannerType(state),\n hasActiveSubscription: subscriptionSelectors.hasActiveSubscription(state),\n hasBundlePromoEligibleSubscription: subscriptionSelectors.hasBundlePromoEligibleSubscription(\n state,\n ),\n };\n};\n\nexport default connect(mapStateToProps)(BundleLandingPage);\n\nexport const pageQuery = graphql`\n query BundleLandingPage($locale: String!, $slug: String!) {\n contentfulBundleLandingPage(\n node_locale: { eq: $locale }\n slug: { eq: $slug }\n ) {\n title\n slug\n subheader\n discount\n heroImageDesktop {\n title\n fluid(maxWidth: 1920, quality: 90) {\n ...GatsbyContentfulFluid_withWebp_noBase64\n }\n description\n }\n heroImageMobile {\n title\n fluid(maxWidth: 757, quality: 90) {\n ...GatsbyContentfulFluid_withWebp_noBase64\n }\n description\n }\n popularBundlesHeadline\n valueProps {\n labels\n icons\n }\n bundleBenefitsImage {\n title\n fluid(maxWidth: 555, quality: 90) {\n ...GatsbyContentfulFluid_withWebp_noBase64\n }\n description\n }\n bundleBenefits {\n title\n items {\n body\n icon\n title\n }\n }\n productBundles {\n title\n slug\n description\n firstProductImage {\n title\n fluid(maxWidth: 912, quality: 90) {\n ...GatsbyContentfulFluid_withWebp_noBase64\n }\n description\n }\n secondProductImage {\n title\n fluid(maxWidth: 912, quality: 90) {\n ...GatsbyContentfulFluid_withWebp_noBase64\n }\n description\n }\n products {\n sku\n name {\n name\n childMarkdownRemark {\n html\n }\n }\n headerDescription\n heroFeaturedImages {\n title\n fluid(maxWidth: 555, quality: 90) {\n ...GatsbyContentfulFluid_withWebp_noBase64\n }\n description\n }\n supplementFacts {\n simpleIngredients {\n name\n dosage\n }\n }\n }\n }\n pageTitle\n pageDescription\n socialImage {\n file {\n url\n details {\n image {\n width\n height\n }\n }\n }\n }\n }\n }\n`;\n","import React from \"react\";\nimport RitualButton from \"./RitualButton\";\nimport { navigate } from \"../../services/navigation\";\n\nexport default class AsyncRitualButton extends React.Component {\n constructor() {\n super();\n\n this.state = {\n processing: false,\n };\n }\n\n _updateLocation(href) {\n window.location.href = href;\n }\n\n _navigate(to) {\n navigate(to);\n }\n\n async navigateHrefOnClick(onClick, href, e) {\n e.preventDefault();\n this.setState({\n processing: true,\n });\n await onClick(e);\n this._updateLocation(href);\n }\n\n async navigateToOnClick(onClick, to, e) {\n e.preventDefault();\n this.setState({\n processing: true,\n });\n await onClick(e);\n this._navigate(to);\n }\n\n render() {\n const { processing } = this.state;\n\n if (!this.props.onClick) {\n return ;\n }\n\n const newProps = { ...this.props };\n const onClick = newProps.onClick;\n\n if (newProps.to) {\n newProps.onClick = e => {\n this.navigateToOnClick(onClick, newProps.to, e);\n };\n } else if (newProps.href) {\n newProps.onClick = e => {\n this.navigateHrefOnClick(onClick, newProps.href, e);\n };\n }\n\n return (\n \n );\n }\n}\n","import React from \"react\";\nimport { Icons, ClinicalIcons } from \"../../utils/svg\";\nimport {\n Font,\n Color,\n rem,\n media,\n capitalize,\n responsive,\n} from \"../../utils/style\";\nimport styled, { css } from \"styled-components\";\nimport Container from \"../Container\";\nimport Row from \"../Row\";\n\nconst Wrapper = styled(Container).attrs({\n id: \"value-props\",\n})`\n ${p =>\n p.margin20 &&\n css`\n ${media.mobile`\n padding: 0 20px;\n `}\n `}\n`;\n\nconst StyledRow = styled(Row).attrs({\n id: \"value-props_row\",\n})`\n position: relative;\n z-index: 1;\n\n ${media.mobile`\n border: none;\n `};\n`;\n\nconst Column = styled.div`\n padding-top: ${p => (p.removePadding ? \"0px\" : \"40px\")};\n padding-bottom: ${p => (p.removePadding ? \"0px\" : \"40px\")};\n position: relative;\n\n ${media.mobile`\n\n &:after {\n position: absolute;\n content: '';\n bottom: 0;\n left: 20px;\n right: 20px;\n }\n `};\n`;\n\nconst PropsArea = styled.div.attrs({\n id: \"value-props_row_column_area\",\n})`\n display: flex;\n justify-content: space-between;\n\n ${media.mobile`\n flex-direction: column;\n justify-content: flex-start;\n align-items: center;\n `};\n`;\n\nconst ValueProp = styled.div.attrs(p => ({\n id: `value-props_row_column_area_prop-${p.index}`,\n}))`\n display: flex;\n flex-direction: column;\n width: 134px;\n\n &:last-child {\n margin-right: 0;\n }\n\n ${media.tablet`\n margin-right: 8px;\n `};\n\n ${media.mobile`\n flex-direction: row;\n width: 100%;\n margin: 0 0 24px 0;\n\n\n &:last-child {\n margin: 0;\n }\n `};\n`;\n\nconst Icon = styled.div.attrs(p => ({\n id: `value-props_row_column_area_prop-${p.index}_icon`,\n}))`\n position: relative;\n width: 32px;\n height: 32px;\n flex: 0 0 32px;\n margin: 0 8px 0 0;\n\n svg {\n width: 100%;\n height: 100%;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n }\n\n ${responsive.sm`\n width: 40px;\n height: 40px;\n margin: 0 auto 16px;\n `}\n\n ${responsive.md`\n min-height: 40px;\n `}\n`;\n\nconst ValuePropLabel = styled.span.attrs(p => ({\n id: `value-props_row_column_area_prop-${p.index}_label`,\n}))`\n ${Font.circular}\n color: ${Color.ritualBlue};\n font-size: ${rem(16)};\n line-height: ${rem(22)};\n font-weight: 300;\n text-align: center;\n flex: 1 1 100%;\n\n ${media.mobile`\n text-align: left;\n flex: 1 1 auto;\n align-self: center;\n `}\n`;\n\nexport default class ValueProps extends React.Component {\n renderValueProp(valueProp, icon, i) {\n let cleanedIconName = icon.replace(\"icon\", \"\").replace(/-/gi, \"\");\n let IconElement =\n Icons[capitalize(cleanedIconName)] ||\n ClinicalIcons[capitalize(cleanedIconName)];\n return (\n \n \n \n \n {valueProp}\n \n );\n }\n\n render() {\n let {\n valueProps,\n icons,\n location,\n removePadding,\n className = \"col-lg-10 offset-lg-1\",\n margin20,\n } = this.props;\n\n if (typeof valueProps !== \"object\" || typeof icons !== \"object\")\n return null;\n\n return (\n \n \n \n \n {valueProps.map((valueProp, i) => {\n return this.renderValueProp(valueProp, icons[i], i);\n })}\n \n \n \n \n );\n }\n}\n","import { createSelector } from \"reselect\";\n\nconst banners = state => state.banners;\n\nconst bannerType = createSelector(banners, banners => banners.bannerType);\n\nexport default {\n bannerType,\n};\n","import React from \"react\";\n\n// Components\nimport AsyncRitualButton from \"../global/AsyncRitualButton\";\nimport DiscountButtonCopy from \"./DiscountButtonCopy\";\n\n// Utils\nimport { variation } from \"../../utils/launchDarkly\";\n\nexport default class DiscountButton extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n newYearsPromoEnabled: false,\n };\n }\n\n componentDidMount() {\n const newYearsPromoEnabled = variation(\"new-years-promo\");\n\n this.setState({\n newYearsPromoEnabled,\n });\n }\n\n render() {\n let { className, showStrikethrough, prefix, price } = this.props;\n const { newYearsPromoEnabled } = this.state;\n // include long text formatting for strikethrough button when new years promo\n // is enabled (ie $23.70)\n if (newYearsPromoEnabled && showStrikethrough) {\n className = className || \"\";\n className += \" long-text\";\n }\n return (\n \n \n \n );\n }\n}\n","import styled from \"styled-components\";\n\n// Utils\nimport { Font, Color, responsive } from \"../../utils/style\";\n\nexport const ModalTitle = styled.h1`\n ${Font.circular};\n color: ${Color.ritualBlue};\n font-size: 20px;\n font-weight: 500;\n letter-spacing: -0.4px;\n line-height: 36px;\n\n em {\n ${Font.dutch};\n font-style: italic;\n }\n\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n padding: 16px 20px;\n border-bottom: 1px solid #ccc;\n background-color: ${Color.white};\n z-index: 10;\n\n ${responsive.sm`\n position: relative;\n top: unset;\n left: unset;\n right: unset;\n padding: 0;\n border: none;\n background: none;\n font-size: 30px;\n margin-bottom: 16px;\n `};\n`;\n\nexport const ModalDescription = styled.p`\n ${Font.circular};\n color: ${Color.ritualBlue};\n color: rgb(20, 43, 111);\n font-size: 14px;\n font-weight: 300;\n letter-spacing: 0px;\n margin-bottom: 24px;\n\n ${responsive.sm`\n margin-bottom: 0;\n `};\n`;\n\nexport const ModalDescriptionTopMargin = styled(ModalDescription)`\n margin: 61px 0 24px;\n\n ${responsive.sm`\n margin-top: 0;\n margin-bottom: 0;\n `};\n`;\n","import React from \"react\";\nimport styled from \"styled-components\";\n\nconst Strike = styled.span`\n opacity: 0.56;\n text-decoration: line-through;\n margin-left: 7px;\n\n ${p => p.contentStyle};\n`;\n\nexport default class StrikeText extends React.Component {\n render() {\n const { className, contentStyle } = this.props;\n return (\n \n {this.props.children}\n \n );\n }\n}\n","import React from \"react\";\n\n// Components\nimport StrikeText from \"../global/StrikeText\";\nimport Currency from \"../Currency\";\n\n// Utils\nimport { getDiscountData } from \"../../utils/bundle\";\n\nexport default function DiscountButtonCopy({\n prefix,\n price,\n showStrikethrough = true,\n}) {\n const { discountPrice } = getDiscountData(price);\n\n if (price === discountPrice || !showStrikethrough) {\n return (\n \n {prefix} — \n \n );\n }\n\n return (\n <>\n {prefix} — ${discountPrice}{\" \"}\n \n \n \n \n );\n}\n"],"sourceRoot":""}