{"version":3,"sources":["webpack:///./node_modules/lodash/property.js","webpack:///./node_modules/lodash/_basePropertyDeep.js","webpack:///./node_modules/lodash/memoize.js","webpack:///./node_modules/lodash/_hasPath.js","webpack:///./node_modules/lodash/_castPath.js","webpack:///./src/components/ingredients/MapboxMap.js","webpack:///./src/components/ingredients/IngredientsMapSidebarItem.js","webpack:///./src/components/ingredients/IngredientsMapSidebar.js","webpack:///./src/templates/ingredientsMap.js","webpack:///./node_modules/lodash/_baseProperty.js","webpack:///./node_modules/lodash/_createToPairs.js","webpack:///./node_modules/lodash/_toKey.js","webpack:///./node_modules/lodash/toPairs.js","webpack:///./node_modules/lodash/_isKey.js","webpack:///./node_modules/lodash/_isStrictComparable.js","webpack:///./node_modules/lodash/_baseMatchesProperty.js","webpack:///./node_modules/lodash/_stringToPath.js","webpack:///./node_modules/lodash/_memoizeCapped.js","webpack:///./node_modules/lodash/_matchesStrictComparable.js","webpack:///./node_modules/lodash/_baseForOwn.js","webpack:///./node_modules/lodash/_baseHasIn.js","webpack:///./node_modules/lodash/_getMatchData.js","webpack:///./node_modules/core-js/modules/es.math.hypot.js","webpack:///./node_modules/lodash/_baseMatches.js","webpack:///./node_modules/lodash/_baseGet.js","webpack:///./node_modules/lodash/hasIn.js","webpack:///./config/shims/mapbox-gl.js","webpack:///./node_modules/lodash/_baseIsMatch.js","webpack:///./node_modules/lodash/get.js","webpack:///./node_modules/lodash/mapValues.js","webpack:///./node_modules/lodash/_baseToPairs.js","webpack:///./node_modules/lodash/_baseIteratee.js","webpack:///./node_modules/lodash/_setToPairs.js"],"names":["baseProperty","basePropertyDeep","isKey","toKey","module","exports","path","baseGet","object","MapCache","memoize","func","resolver","TypeError","memoized","args","arguments","key","apply","this","cache","has","get","result","set","Cache","castPath","isArguments","isArray","isIndex","isLength","hasFunc","index","length","stringToPath","toString","value","Wrapper","styled","div","media","mobile","MapMarker","span","rem","Color","ritualBlue","ritualYellow","MapMarkerLink","MagicLink","Tooltip","Font","circular","tablet","MapboxMap","props","state","viewport","latitude","longitude","zoom","markerRefs","map","mapContainer","markerData","bind","centerMap","getBounds","padding","bounds","atMost","top","right","bottom","left","fitBounds","duration","resize","mapboxgl","LngLatBounds","forEach","item","location","lat","lon","extend","componentWillUnmount","window","removeEventListener","componentDidMount","addEventListener","accessToken","process","Map","container","style","center","getCenter","interactive","attributionControl","on","Marker","setLngLat","addTo","locations","locationGroup","ingredientLocationGroup","locationPath","toLowerCase","replace","ingredientNames","name","tooltip","slice","join","count","render","product","markers","basePath","slug","className","ref","x","display","i","classNames","push","r","ReactDOM","findDOMNode","to","React","Component","Header","attrs","responsive","md","Body","BodyDescription","p","dutch","IngredientImage","Img","notDesktop","Heading","Indicator","IngredientsMapSidebar","ingredient","onClick","active","node","description","image","activeClass","linkTarget","id","aria-expanded","aria-controls","fluid","thumbnail","fadeIn","alt","userSelect","userDrag","pointerEvents","touchCallout","borderRadius","color","backgroundColor","CaretDown","aria-labelledby","ariaLabel","Text","defaultmessage","Sidebar","Source","h1","activeItemIndex","onItemClick","ingredients","e","sm","OtherIngredientsColumn","OtherIngredientsSubheader","ProductCategoryCardsContainer","IngredientsMap","pageContext","pageDescription","data","allContentfulIngredientsPage","edges","modalOpen","seo","pageSEO","pagePath","title","getPageTitle","setActiveItemIndex","updatePageData","label","updateLayoutState","navColor","banner","allContentfulIngredient","innerWidth","evt","setState","loc","openIngredientsModal","closeIngredientsModal","contentfulIngredientsPage","subheadText","otherIngredients","articles","article","productSku","StickyProductNav","sku","ctaLocation","scrollOffset","showLearnMore","showTopBar","Container","Page","Helmet","bodyAttributes","class","href","rel","IngredientsHeader","Row","subheader","RitualButton","defaultMessage","ArticlePreview","ProductCategoryCards","OtherIngredientsModal","isOpen","onRequestClose","undefined","baseToPairs","getTag","mapToArray","setToPairs","keysFunc","tag","isSymbol","toPairs","createToPairs","reIsDeepProp","reIsPlainProp","type","test","Object","isObject","baseIsEqual","hasIn","isStrictComparable","matchesStrictComparable","srcValue","objValue","COMPARE_PARTIAL_FLAG","memoizeCapped","rePropName","reEscapeChar","string","charCodeAt","match","number","quote","subString","size","clear","baseFor","keys","iteratee","$","$hypot","Math","hypot","abs","sqrt","target","stat","forced","Infinity","NaN","value1","value2","arg","sum","aLen","larg","baseIsMatch","getMatchData","source","matchData","baseHasIn","hasPath","require","Stack","customizer","noCustomizer","stack","defaultValue","baseAssignValue","baseForOwn","baseIteratee","arrayMap","baseMatches","baseMatchesProperty","identity","property","Array"],"mappings":"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","file":"component---src-templates-ingredients-map-js-bfe786ea12e52fe3c526.js","sourcesContent":["var baseProperty = require('./_baseProperty'),\n basePropertyDeep = require('./_basePropertyDeep'),\n isKey = require('./_isKey'),\n toKey = require('./_toKey');\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nmodule.exports = property;\n","var baseGet = require('./_baseGet');\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n}\n\nmodule.exports = basePropertyDeep;\n","var MapCache = require('./_MapCache');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nmodule.exports = memoize;\n","var castPath = require('./_castPath'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isIndex = require('./_isIndex'),\n isLength = require('./isLength'),\n toKey = require('./_toKey');\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n}\n\nmodule.exports = hasPath;\n","var isArray = require('./isArray'),\n isKey = require('./_isKey'),\n stringToPath = require('./_stringToPath'),\n toString = require('./toString');\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nmodule.exports = castPath;\n","import React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport styled from \"styled-components\";\nimport { rem, media, Color, Font, atMost } from \"../../utils/style\";\nimport _ from \"lodash\";\nimport mapboxgl from \"mapboxgl\";\nimport MagicLink from \"../MagicLink\";\n\nconst Wrapper = styled.div`\n background-color: #ededed;\n flex: 4;\n position: relative;\n display: flex;\n align-items: end;\n\n @media (min-width: 750px) {\n width: calc(100vw - 25% - 8.33333% - ((100vw - 700px) / 2));\n }\n\n @media (min-width: 960px) {\n width: calc(100vw - 25% - 8.33333% - ((100vw - 934px) / 2));\n }\n\n @media (min-width: 1200px) {\n width: calc(100vw - 25% - 8.33333% - ((100vw - 1170px) / 2));\n }\n\n ${media.mobile`\n margin-left: 0;\n width: 100vw;\n height: calc(100vw * 0.625);\n flex: none;\n `};\n`;\n\nconst MapMarker = styled.span`\n &:hover {\n z-index: 1;\n }\n\n > div {\n display: block;\n width: ${rem(22)};\n height: ${rem(22)};\n border-radius: 50%;\n padding: 3px;\n\n &.active {\n border: 1px solid ${Color.ritualBlue};\n }\n\n &.large {\n width: ${rem(40)};\n height: ${rem(40)};\n }\n\n & > a {\n color: white;\n text-align: center;\n display: block;\n background-color: ${Color.ritualBlue};\n width: ${rem(14)};\n height: ${rem(14)};\n border-radius: 50%;\n font-size: ${rem(14)};\n }\n\n &.large > a {\n width: ${rem(32)};\n height: ${rem(32)};\n font-weight: 700;\n }\n\n &:hover {\n > a {\n color: ${Color.ritualBlue};\n background-color: ${Color.ritualYellow};\n }\n\n &.active {\n border: 1px solid ${Color.ritualYellow};\n }\n }\n }\n`;\n\nconst MapMarkerLink = styled(MagicLink)`\n color: white;\n text-align: center;\n display: block;\n background-color: ${Color.ritualBlue};\n width: ${rem(14)};\n height: ${rem(14)};\n border-radius: 50%;\n font-size: ${rem(14)};\n\n &:hover {\n color: white;\n }\n`;\n\nconst Tooltip = styled.div`\n display: none;\n position: absolute;\n z-index: 1000;\n height: 50px;\n top: ${rem(-60)};\n text-align: center;\n background-color: ${Color.ritualYellow};\n padding: ${rem(12)} ${rem(32)};\n border-radius: 25px;\n font-size: ${rem(16)};\n line-height: ${rem(26)};\n font-weight: 500;\n ${Font.circular};\n color: ${Color.ritualBlue};\n white-space: nowrap;\n\n ${media.tablet`\n /* tooltips won't fit without reduced font */\n font-size: ${rem(14)};\n `};\n\n &:after {\n content: \"\";\n display: block;\n position: absolute;\n z-index: 2147483647;\n width: ${rem(16)};\n height: ${rem(16)};\n left: calc(50% - 8px);\n transform: rotateZ(45deg);\n background-color: ${Color.ritualYellow};\n }\n\n ${MapMarker} > div:hover & {\n display: block;\n }\n\n ${media.mobile`\n display: none !important;\n `} & > .tooltip-text {\n display: inline-block;\n }\n`;\n\nconst mapStyle = \"mapbox://styles/ritual/cjmxq2bxb2hdg2slykbwsusw6\";\n\nexport default class MapboxMap extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n viewport: {\n latitude: 42,\n longitude: 12,\n zoom: [2],\n },\n markerRefs: [],\n };\n\n this.map = null;\n this.mapContainer = null;\n this.markerData = this.markerData.bind(this);\n this.centerMap = this.centerMap.bind(this);\n this.getBounds = this.getBounds.bind(this);\n }\n\n centerMap() {\n if (this.map) {\n const bounds = this.getBounds();\n\n let padding;\n\n if (atMost.mobile()) {\n padding = 10;\n } else {\n padding = {\n top: 75,\n right: 135,\n bottom: 75,\n left: 155,\n };\n }\n\n this.map.fitBounds(bounds, {\n duration: 0,\n padding,\n });\n\n this.map.resize();\n }\n }\n\n getBounds() {\n const bounds = new mapboxgl.LngLatBounds();\n\n this.state.markerRefs.forEach(item => {\n const { lat, lon } = item[1].location;\n // add the current coordinates to the bounds array,\n // so we can fit the map extent to the bounds of all markers\n bounds.extend([lon, lat]);\n });\n\n return bounds;\n }\n\n componentWillUnmount() {\n window.removeEventListener(\"resize\", this.centerMap);\n }\n\n componentDidMount() {\n window.addEventListener(\"resize\", this.centerMap);\n\n // NOTE: Must require mapbox-gl at runtime since the application will fail\n // to build using node. There is a reference to an object (ie window) that\n // is not present in node that causes the build to fail.\n if (this.map == null) {\n mapboxgl.accessToken = process.env.GATSBY_MAPBOX_TOKEN;\n\n const bounds = this.getBounds();\n\n this.map = new mapboxgl.Map({\n container: this.mapContainer,\n style: mapStyle,\n center: bounds.getCenter(),\n interactive: false,\n attributionControl: false,\n });\n\n this.map.on(\"load\", () => {\n this.centerMap();\n\n this.state.markerRefs.forEach(item => {\n const { lat, lon } = item[1].location;\n\n // TODO => Figure out why null marker references are filling the\n // markerRefs collection and remove them. Choosing to skip those that\n // are null for now. Null values result in default marker images.\n if (item[0] == null) return;\n\n new mapboxgl.Marker(item[0]).setLngLat([lon, lat]).addTo(this.map);\n });\n });\n }\n }\n\n markerData() {\n const { locations, locationGroup } = this.props;\n\n // NOTE => mapValues return an object with the following shape:\n // {\n // Utah: [ingredient1, ingredient2],\n // 'United Kingdom': [ingredient3]\n // }\n //\n // With each ingredient as an object with the following shape:\n // {\n // locationGroup: 'utah',\n // ingredientLocationGroup: 'United Kingdom',\n // locationPath = 'united-kingdom',\n // location {\n // lat,\n // lon\n // },\n // count: 1,\n // }\n //\n return _.mapValues(locations, (value, key) => {\n const ingredientLocationGroup = value[0].locationGroup;\n const locationPath = ingredientLocationGroup\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/(^-|-$)/g, \"\");\n const ingredientNames = value.map(item => item.name);\n\n let tooltip = \"\";\n\n if (ingredientNames.length > 2) {\n tooltip =\n ingredientNames.slice(0, ingredientNames.length - 1).join(\", \") +\n \" & \" +\n ingredientNames.slice(-1);\n } else {\n tooltip = ingredientNames.join(\" & \");\n }\n\n return {\n locationGroup,\n ingredientLocationGroup,\n locationPath,\n location: value[0].location,\n count: value.length,\n tooltip,\n };\n });\n }\n\n render() {\n const { locationGroup, product } = this.props;\n const markers = this.markerData();\n\n const basePath = product\n ? `/products/${product.slug}/ingredients/map`\n : \"/ingredients/map\";\n\n /* eslint-disable react/no-direct-mutation-state */\n this.state.markerRefs = [];\n\n return (\n \n
(this.mapContainer = x)} />\n
\n {_.toPairs(markers).map((item, i) => {\n const {\n ingredientLocationGroup,\n locationPath,\n count,\n tooltip,\n } = item[1];\n const classNames = [];\n\n if (count > 1) classNames.push(\"large\");\n if (locationGroup === ingredientLocationGroup)\n classNames.push(\"active\");\n\n return (\n {\n this.state.markerRefs.push([\n ReactDOM.findDOMNode(r),\n item[1],\n ]);\n }}\n >\n
\n \n {count > 1 ? count : null}\n \n {tooltip}\n \n \n
\n \n );\n })}\n
\n \n );\n }\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { rem, Color, media, Font, responsive } from \"../../utils/style\";\nimport { Icons } from \"../../utils/svg\";\nimport MagicLink from \"../MagicLink\";\nimport Img from \"gatsby-image\";\nimport Text from \"../Text\";\n\nconst Wrapper = styled.div`\n overflow: hidden;\n display: flex;\n flex-direction: column;\n\n &:last-child {\n margin-bottom: 0;\n\n div[class*=\"Header\"] {\n border-bottom: 1px solid rgba(0, 0, 0, 0.16);\n }\n\n &.active {\n padding-bottom: 0;\n }\n }\n\n &.active {\n padding-bottom: 40px;\n\n div[class*=\"Header\"] {\n border-bottom: 1px solid rgba(0, 0, 0, 0.16);\n }\n }\n`;\n\nconst Header = styled.div.attrs({})`\n width: 100%;\n padding: 16px 0;\n border-top: 2px solid ${Color.ritualBlue};\n display: flex;\n align-items: center;\n cursor: pointer;\n\n ${responsive.md`\n padding: 24px 0;\n `}\n`;\n\nconst Body = styled.div.attrs({})`\n ${Font.circular} font-weight: 500;\n display: none;\n\n > a {\n font-size: ${rem(16)};\n text-decoration: underline;\n }\n\n ${Wrapper}.active & {\n display: block;\n }\n`;\n\nconst BodyDescription = styled.p`\n ${Font.dutch}\n font-size: ${rem(16)};\n line-height: ${rem(26)};\n margin: 24px 0 16px;\n\n ${responsive.md`\n margin: 24px 0;\n `}\n`;\n\nconst IngredientImage = styled(Img)`\n background-repeat: no-repeat;\n background-position: center center;\n background-size: 100%;\n width: 64px;\n height: 64px;\n border-radius: 50%;\n background-color: #f1f5f7;\n\n ${media.notDesktop`\n width: 56px;\n height: 56px;\n `};\n`;\n\nconst Heading = styled.span.attrs({})`\n ${Font.circular}\n font-size: ${rem(22)};\n font-weight: 500;\n flex: 2;\n margin: 0 12px;\n\n ${media.notDesktop`\n font-size: ${rem(18)};\n `};\n`;\n\nconst Indicator = styled.div`\n width: 32px;\n height: 24px;\n position: relative;\n\n ${Wrapper}.active & {\n transform: rotate(-180deg);\n }\n\n svg {\n position: absolute;\n top: 50%;\n left: 50%;\n right: 0;\n bottom: 0;\n transform: translateX(-50%) translateY(-50%);\n }\n`;\n\nexport default class IngredientsMapSidebar extends React.Component {\n render() {\n const { ingredient, onClick, active } = this.props;\n const { name, description, image, slug } = ingredient.node;\n\n const activeClass = active ? \"active\" : null;\n const linkTarget = `/ingredients/${slug}`;\n\n return (\n \n
\n \n {name}\n \n \n \n
\n \n {description}\n \n \n \n \n \n );\n }\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { rem, media } from \"../../utils/style\";\nimport IngredientsMapSidebarItem from \"./IngredientsMapSidebarItem\";\n\nconst Sidebar = styled.div.attrs({\n className: \"col-sm-3 flush-left mt-5 mt-md-7 mb-sm-5 mb-md-7\",\n})`\n flex: 1;\n position: relative;\n margin-right: 8.33333%;\n\n @media (min-width: 750px) {\n margin-left: calc((100vw - 700px) / 2);\n }\n\n @media (min-width: 960px) {\n margin-left: calc((100vw - 934px) / 2);\n }\n\n @media (min-width: 1200px) {\n margin-left: calc((100vw - 1170px) / 2);\n }\n\n ${media.mobile`\n flex: none;\n `};\n`;\n\nconst Source = styled.h1`\n font-size: ${rem(16)};\n text-transform: uppercase;\n margin-bottom: ${rem(40)};\n\n ${media.mobile`\n margin-bottom: ${rem(24)};\n `};\n`;\n\nexport default class IngredientsMapSidebar extends React.Component {\n render() {\n const { activeItemIndex, onItemClick, locationGroup } = this.props;\n let ingredients = this.props.ingredients;\n\n return (\n \n {locationGroup}\n {ingredients.map((ingredient, i) => {\n const active = activeItemIndex === i;\n\n return (\n onItemClick(e, i)}\n ingredient={ingredient}\n />\n );\n })}\n \n );\n }\n}\n","import React from \"react\";\nimport { graphql } from \"gatsby\";\nimport styled from \"styled-components\";\n\n// Utils\nimport { rem, responsive, Color } from \"../utils/style\";\nimport { variation } from \"../utils/launchDarkly\";\n\n// Components\nimport Helmet from \"react-helmet\";\nimport PageSEO from \"../components/seo/Page\";\nimport Row from \"../components/Row\";\nimport Container from \"../components/Container\";\nimport MapboxMap from \"../components/ingredients/MapboxMap\";\nimport IngredientsHeader from \"../components/ingredients/IngredientsHeader\";\nimport IngredientsMapSidebar from \"../components/ingredients/IngredientsMapSidebar\";\nimport OtherIngredientsModal from \"../components/ingredients/OtherIngredientsModal\";\nimport RitualButton from \"../components/global/RitualButton\";\nimport ArticlePreview from \"../components/hub/ArticlePreview\";\nimport ProductCategoryCards from \"../components/product/ProductCategoryCards\";\nimport StickyProductNav from \"../components/global/StickyProductNav\";\nimport Text from \"../components/Text\";\n\nconst Wrapper = styled.div.attrs({})`\n border-top: 1px solid rgba(0, 0, 0, 0.16);\n margin-top: ${rem(24)};\n flex-direction: column-reverse;\n display: flex;\n overflow: hidden;\n\n ${responsive.sm`\n min-height: ${rem(550)};\n flex-direction: row;\n overflow: hidden;\n margin-top: ${rem(40)};\n `}\n\n ${responsive.md`\n min-height: ${rem(784)};\n `}\n`;\n\nconst OtherIngredientsColumn = styled.div.attrs({\n className: \"col-12\",\n})`\n display: flex;\n flex-direction: column;\n align-items: center;\n\n margin-top: 40px;\n padding-top: 24px;\n padding-left: 20px;\n padding-right: 20px;\n\n ${responsive.sm`\n padding-left: 0;\n padding-right: 0;\n `}\n\n &::before {\n content: \"\";\n width: 32px;\n height: 4px;\n background-color: ${Color.ritualBlue};\n position: absolute;\n top: 0;\n left: calc(50% - 16px);\n }\n`;\n\nconst OtherIngredientsSubheader = styled.p`\n margin: 0 0 24px;\n font-weight: 500;\n text-align: center !important;\n\n width: 100%;\n letter-spacing: 0px;\n font-size: ${rem(18)};\n line-height: ${rem(28)};\n\n ${responsive.sm`\n width: 460px;\n `}\n\n ${responsive.md`\n width: 570px;\n letter-spacing: -0.2px;\n font-size: ${rem(22)};\n line-height: ${rem(32)};\n `}\n`;\n\nconst ProductCategoryCardsContainer = styled.div`\n h3 {\n font-size: ${rem(24)};\n letter-spacing: -0.28px;\n line-height: ${rem(34)};\n text-align: center;\n margin-bottom: 24px;\n\n ${responsive.md`\n font-size: ${rem(40)};\n letter-spacing: -1.17px;\n line-height: ${rem(54)};\n margin-bottom: 56px;\n `}\n`;\n\nexport default class IngredientsMap extends React.Component {\n constructor(props) {\n super(props);\n const { locationPath } = props.pageContext;\n const {\n pageDescription,\n } = props.data.allContentfulIngredientsPage.edges[0].node;\n\n this.state = {\n activeItemIndex: -1,\n modalOpen: false,\n seo: {\n pageSEO: true,\n description: pageDescription,\n pagePath: `ingredients/map/${locationPath}`,\n title: this.getPageTitle(props.pageContext),\n },\n };\n\n this.onItemClick = this.onItemClick.bind(this);\n this.setActiveItemIndex = this.setActiveItemIndex.bind(this);\n }\n\n componentDidMount() {\n this.props.updatePageData({\n label: \"Ingredient Map\",\n });\n\n this.props.updateLayoutState({\n navColor: \"#FFFFFF\",\n banner: false,\n });\n\n const ingredients = this.props.data.allContentfulIngredient.edges;\n const { activeItemIndex } = this.state;\n\n if (\n activeItemIndex > -1 ||\n window.innerWidth > 749 ||\n ingredients.length === 1\n ) {\n this.setActiveItemIndex(0);\n }\n }\n\n onItemClick(evt, index) {\n this.setActiveItemIndex(index);\n }\n\n setActiveItemIndex(index) {\n const { activeItemIndex } = this.state;\n\n this.setState({\n activeItemIndex: activeItemIndex !== index ? index : null,\n });\n }\n\n getPageTitle({ locationGroup, locations }) {\n let pageTitle = \"\";\n const ingredients = locations[locationGroup].map(loc => loc.name);\n\n if (ingredients.length === 3) {\n pageTitle = `${ingredients[0]}, ${ingredients[1]}, and ${ingredients[2]}`;\n } else if (ingredients.length === 2) {\n pageTitle = `${ingredients[0]} and ${ingredients[1]}`;\n } else {\n pageTitle = ingredients[0];\n }\n\n return `${pageTitle} from ${locationGroup} | Ingredients - Ritual`;\n }\n\n openIngredientsModal() {\n this.setState({\n modalOpen: true,\n });\n }\n\n closeIngredientsModal() {\n this.setState({\n modalOpen: false,\n });\n }\n\n render() {\n const { activeItemIndex, modalOpen } = this.state;\n const ingredients = this.props.data.allContentfulIngredient.edges;\n const locations = this.props.pageContext.locations;\n const locationPath = this.props.pageContext.locationPath;\n const locationGroup = this.props.pageContext.locationGroup;\n const contentfulIngredientsPage = this.props.data\n .allContentfulIngredientsPage.edges[0].node;\n const {\n subheadText,\n otherIngredients,\n articles,\n } = contentfulIngredientsPage;\n const { location } = this.props;\n const article = articles[0];\n\n const productSku = location.state ? location.state.productSku : \"\";\n\n return (\n <>\n {productSku && (\n \n )}\n \n \n \n \n \n \n \n \n \n \n \n\n {/** Other Ingredients */}\n \n \n \n {otherIngredients.subheader}\n \n \n \n \n \n \n\n
\n \n
\n \n

\n \n

\n \n
\n \n \n );\n }\n}\n\nexport const pageQuery = graphql`\n query IngredientsMapQuery(\n $locale: String!\n $locationGroup: String!\n $ingredientsListPageId: String!\n ) {\n allContentfulIngredient(\n filter: {\n node_locale: { eq: $locale }\n locationGroup: { eq: $locationGroup }\n }\n ) {\n edges {\n node {\n __typename\n name\n slug\n description\n image {\n thumbnail: fluid(maxWidth: 56, quality: 90) {\n ...GatsbyContentfulFluid_withWebp_noBase64\n }\n }\n locationGroup\n productDosages {\n childMarkdownRemark {\n rawMarkdownBody\n }\n }\n productClassification\n }\n }\n }\n allContentfulProduct(filter: { node_locale: { eq: $locale } }) {\n edges {\n node {\n ...AllContentfulProductFragment\n }\n }\n }\n allContentfulIngredientsPage(\n filter: {\n node_locale: { eq: $locale }\n contentful_id: { eq: $ingredientsListPageId }\n }\n ) {\n edges {\n node {\n ...IngredientsPageFragment\n }\n }\n }\n }\n`;\n","/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\nmodule.exports = baseProperty;\n","var baseToPairs = require('./_baseToPairs'),\n getTag = require('./_getTag'),\n mapToArray = require('./_mapToArray'),\n setToPairs = require('./_setToPairs');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n setTag = '[object Set]';\n\n/**\n * Creates a `_.toPairs` or `_.toPairsIn` function.\n *\n * @private\n * @param {Function} keysFunc The function to get the keys of a given object.\n * @returns {Function} Returns the new pairs function.\n */\nfunction createToPairs(keysFunc) {\n return function(object) {\n var tag = getTag(object);\n if (tag == mapTag) {\n return mapToArray(object);\n }\n if (tag == setTag) {\n return setToPairs(object);\n }\n return baseToPairs(object, keysFunc(object));\n };\n}\n\nmodule.exports = createToPairs;\n","var isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = toKey;\n","var createToPairs = require('./_createToPairs'),\n keys = require('./keys');\n\n/**\n * Creates an array of own enumerable string keyed-value pairs for `object`\n * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n * entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entries\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairs(new Foo);\n * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n */\nvar toPairs = createToPairs(keys);\n\nmodule.exports = toPairs;\n","var isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nmodule.exports = isKey;\n","var isObject = require('./isObject');\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n return value === value && !isObject(value);\n}\n\nmodule.exports = isStrictComparable;\n","var baseIsEqual = require('./_baseIsEqual'),\n get = require('./get'),\n hasIn = require('./hasIn'),\n isKey = require('./_isKey'),\n isStrictComparable = require('./_isStrictComparable'),\n matchesStrictComparable = require('./_matchesStrictComparable'),\n toKey = require('./_toKey');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n}\n\nmodule.exports = baseMatchesProperty;\n","var memoizeCapped = require('./_memoizeCapped');\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nmodule.exports = stringToPath;\n","var memoize = require('./memoize');\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nmodule.exports = memoizeCapped;\n","/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n}\n\nmodule.exports = matchesStrictComparable;\n","var baseFor = require('./_baseFor'),\n keys = require('./keys');\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n}\n\nmodule.exports = baseForOwn;\n","/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n return object != null && key in Object(object);\n}\n\nmodule.exports = baseHasIn;\n","var isStrictComparable = require('./_isStrictComparable'),\n keys = require('./keys');\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n}\n\nmodule.exports = getMatchData;\n","var $ = require('../internals/export');\n\nvar $hypot = Math.hypot;\nvar abs = Math.abs;\nvar sqrt = Math.sqrt;\n\n// Chrome 77 bug\n// https://bugs.chromium.org/p/v8/issues/detail?id=9546\nvar BUGGY = !!$hypot && $hypot(Infinity, NaN) !== Infinity;\n\n// `Math.hypot` method\n// https://tc39.github.io/ecma262/#sec-math.hypot\n$({ target: 'Math', stat: true, forced: BUGGY }, {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * sqrt(sum);\n }\n});\n","var baseIsMatch = require('./_baseIsMatch'),\n getMatchData = require('./_getMatchData'),\n matchesStrictComparable = require('./_matchesStrictComparable');\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n}\n\nmodule.exports = baseMatches;\n","var castPath = require('./_castPath'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nmodule.exports = baseGet;\n","var baseHasIn = require('./_baseHasIn'),\n hasPath = require('./_hasPath');\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n}\n\nmodule.exports = hasIn;\n","if (typeof window === \"undefined\") {\n module.exports = {\n Map: function() {\n return {\n on: function() {},\n };\n },\n Marker: function() {},\n };\n} else {\n module.exports = require(\"../../node_modules/mapbox-gl/dist/mapbox-gl.js\");\n}\n","var Stack = require('./_Stack'),\n baseIsEqual = require('./_baseIsEqual');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n}\n\nmodule.exports = baseIsMatch;\n","var baseGet = require('./_baseGet');\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n","var baseAssignValue = require('./_baseAssignValue'),\n baseForOwn = require('./_baseForOwn'),\n baseIteratee = require('./_baseIteratee');\n\n/**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\nfunction mapValues(object, iteratee) {\n var result = {};\n iteratee = baseIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\n}\n\nmodule.exports = mapValues;\n","var arrayMap = require('./_arrayMap');\n\n/**\n * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n * of key-value pairs for `object` corresponding to the property names of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the key-value pairs.\n */\nfunction baseToPairs(object, props) {\n return arrayMap(props, function(key) {\n return [key, object[key]];\n });\n}\n\nmodule.exports = baseToPairs;\n","var baseMatches = require('./_baseMatches'),\n baseMatchesProperty = require('./_baseMatchesProperty'),\n identity = require('./identity'),\n isArray = require('./isArray'),\n property = require('./property');\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n}\n\nmodule.exports = baseIteratee;\n","/**\n * Converts `set` to its value-value pairs.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the value-value pairs.\n */\nfunction setToPairs(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = [value, value];\n });\n return result;\n}\n\nmodule.exports = setToPairs;\n"],"sourceRoot":""}