{"version":3,"sources":["webpack:///./node_modules/date-fns/esm/compareAsc/index.js","webpack:///./node_modules/date-fns/esm/_lib/assign/index.js","webpack:///./node_modules/date-fns/esm/_lib/cloneObject/index.js","webpack:///./node_modules/date-fns/esm/formatDistanceStrict/index.js","webpack:///./img/pages/blog/share_facebook.svg","webpack:///./img/pages/blog/share_twitter.svg","webpack:///./src/util.tsx","webpack:///./img/pages/blog/share_linkedin.svg","webpack:///./src/components/legacy/blog/AuthorBlock.tsx","webpack:///./src/components/legacy/blog/PostTile.tsx","webpack:///./src/components/legacy/blog/ShareBlock.tsx","webpack:///./src/components/legacy/blog/SpecialSliceDownloadRdfTemplate.tsx","webpack:///./src/components/legacy/blog/SubscribePromptModal.tsx","webpack:///./src/templates/blog-post.tsx"],"names":["compareAsc","dirtyDateLeft","dirtyDateRight","requiredArgs","arguments","dateLeft","toDate","dateRight","diff","getTime","target","object","TypeError","property","Object","prototype","hasOwnProperty","call","cloneObject","formatDistanceStrict","dirtyDate","dirtyBaseDate","options","_ref","_options$locale","_options$roundingMeth","defaultOptions","locale","defaultLocale","formatDistance","RangeError","comparison","isNaN","localizeOptions","addSuffix","Boolean","roundingMethodFn","roundingMethod","String","Math","floor","ceil","round","unit","milliseconds","minutes","timezoneOffset","getTimezoneOffsetInMilliseconds","dstNormalizedMinutes","defaultUnit","MINUTES_IN_DAY","seconds","roundedMinutes","hours","days","months","years","module","exports","unwrapConnection","connection","edges","filter","map","edge","node","unwrapFirst","first","Error","AuthorBlock","_post$tags","author","post","tagNames","tags","tag","_tag$tag_link","_tag$tag_link$documen","tagLink","tag_link","document","__typename","data","name","React","StyledContainer","avatar_image","StyledAvatar","fixed","fixedImage","w","h","StyledDetails","first_name","last_name","job_title","StyledPostInfo","publish_date","format","parseISO","className","calculateReadTime","length","StyledTags","tagName","key","styled","div","withConfig","displayName","componentId","Img","Color","grey","Dimen","breakpointDefault","ul","BlogPostTile","postNode","featuredImageFluid","fluidImage","featured_image","LinkTile","to","uid","dark","imageFluid","infoLeft","topic_name","infoRight","Date","title","description","extractBlogSnippet","readTime","ShareBlock","shareUrl","Config","rootUrl","encoded","encodeURI","StyledButtons","href","src","SHARE_LINKEDIN","SHARE_TWITTER","SHARE_FACEBOOK","SpecialSliceDownloadRdfTemplate","modalVisible","setModalVisible","success","setSuccess","StyledSlice","Button","color","label","onClick","Modal","onDismiss","width","height","frameBorder","allowTransparency","style","border","form","input","button","darkBlue","white","blue","BlogPostTemplate","_data$prismicBlogInde","_post$author","_post$author$document","_post$body","prismicBlogPost","prismicBlogIndexPage","relatedPostNodes","allPrismicBlogPost","Layout","footerBackColor","lightGrey","HelmetSeo","seo_title","seo_description","share_image","HorizontalContainer","StyledInfoBar","StyledTitle","StyledFeaturedImage","fluid","Cols","Col","flex","StyledContentWrap","body","slice","i","toString","_slice$primary$conten","primary","FormattedRichText","render","content","raw","image","inner","StyledImageEmbed","link_url","_embed$embed_url","_embed$embed_url2","_embed$html","embed","matches","embed_url","match","StyledVideoIframeEmbed","allow","allowFullScreen","dangerouslySetInnerHTML","__html","html","identifier","content_identifier","joinedCss","StyledSectionRelated","StyledRelatedTiles","PostTile","h1","iframe","section"],"mappings":"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","file":"component---src-templates-blog-post-tsx-9ac81881f42c193c57be.js","sourcesContent":["import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name compareAsc\n * @category Common Helpers\n * @summary Compare the two dates and return -1, 0 or 1.\n *\n * @description\n * Compare the two dates and return 1 if the first date is after the second,\n * -1 if the first date is before the second or 0 if dates are equal.\n *\n * @param {Date|Number} dateLeft - the first date to compare\n * @param {Date|Number} dateRight - the second date to compare\n * @returns {Number} the result of the comparison\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Compare 11 February 1987 and 10 July 1989:\n * const result = compareAsc(new Date(1987, 1, 11), new Date(1989, 6, 10))\n * //=> -1\n *\n * @example\n * // Sort the array of dates:\n * const result = [\n * new Date(1995, 6, 2),\n * new Date(1987, 1, 11),\n * new Date(1989, 6, 10)\n * ].sort(compareAsc)\n * //=> [\n * // Wed Feb 11 1987 00:00:00,\n * // Mon Jul 10 1989 00:00:00,\n * // Sun Jul 02 1995 00:00:00\n * // ]\n */\n\nexport default function compareAsc(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeft = toDate(dirtyDateLeft);\n var dateRight = toDate(dirtyDateRight);\n var diff = dateLeft.getTime() - dateRight.getTime();\n if (diff < 0) {\n return -1;\n } else if (diff > 0) {\n return 1; // Return 0 if diff is 0; return NaN if diff is NaN\n } else {\n return diff;\n }\n}","export default function assign(target, object) {\n if (target == null) {\n throw new TypeError('assign requires that input parameter not be null or undefined');\n }\n for (var property in object) {\n if (Object.prototype.hasOwnProperty.call(object, property)) {\n ;\n target[property] = object[property];\n }\n }\n return target;\n}","import assign from \"../assign/index.js\";\nexport default function cloneObject(object) {\n return assign({}, object);\n}","import { getDefaultOptions } from \"../_lib/defaultOptions/index.js\";\nimport getTimezoneOffsetInMilliseconds from \"../_lib/getTimezoneOffsetInMilliseconds/index.js\";\nimport compareAsc from \"../compareAsc/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport cloneObject from \"../_lib/cloneObject/index.js\";\nimport assign from \"../_lib/assign/index.js\";\nimport defaultLocale from \"../_lib/defaultLocale/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar MILLISECONDS_IN_MINUTE = 1000 * 60;\nvar MINUTES_IN_DAY = 60 * 24;\nvar MINUTES_IN_MONTH = MINUTES_IN_DAY * 30;\nvar MINUTES_IN_YEAR = MINUTES_IN_DAY * 365;\n/**\n * @name formatDistanceStrict\n * @category Common Helpers\n * @summary Return the distance between the given dates in words.\n *\n * @description\n * Return the distance between the given dates in words, using strict units.\n * This is like `formatDistance`, but does not use helpers like 'almost', 'over',\n * 'less than' and the like.\n *\n * | Distance between dates | Result |\n * |------------------------|---------------------|\n * | 0 ... 59 secs | [0..59] seconds |\n * | 1 ... 59 mins | [1..59] minutes |\n * | 1 ... 23 hrs | [1..23] hours |\n * | 1 ... 29 days | [1..29] days |\n * | 1 ... 11 months | [1..11] months |\n * | 1 ... N years | [1..N] years |\n *\n * @param {Date|Number} date - the date\n * @param {Date|Number} baseDate - the date to compare with\n * @param {Object} [options] - an object with options.\n * @param {Boolean} [options.addSuffix=false] - result indicates if the second date is earlier or later than the first\n * @param {'second'|'minute'|'hour'|'day'|'month'|'year'} [options.unit] - if specified, will force a unit\n * @param {'floor'|'ceil'|'round'} [options.roundingMethod='round'] - which way to round partial units\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {String} the distance in words\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `date` must not be Invalid Date\n * @throws {RangeError} `baseDate` must not be Invalid Date\n * @throws {RangeError} `options.roundingMethod` must be 'floor', 'ceil' or 'round'\n * @throws {RangeError} `options.unit` must be 'second', 'minute', 'hour', 'day', 'month' or 'year'\n * @throws {RangeError} `options.locale` must contain `formatDistance` property\n *\n * @example\n * // What is the distance between 2 July 2014 and 1 January 2015?\n * const result = formatDistanceStrict(new Date(2014, 6, 2), new Date(2015, 0, 2))\n * //=> '6 months'\n *\n * @example\n * // What is the distance between 1 January 2015 00:00:15\n * // and 1 January 2015 00:00:00?\n * const result = formatDistanceStrict(\n * new Date(2015, 0, 1, 0, 0, 15),\n * new Date(2015, 0, 1, 0, 0, 0)\n * )\n * //=> '15 seconds'\n *\n * @example\n * // What is the distance from 1 January 2016\n * // to 1 January 2015, with a suffix?\n * const result = formatDistanceStrict(new Date(2015, 0, 1), new Date(2016, 0, 1), {\n * addSuffix: true\n * })\n * //=> '1 year ago'\n *\n * @example\n * // What is the distance from 1 January 2016\n * // to 1 January 2015, in minutes?\n * const result = formatDistanceStrict(new Date(2016, 0, 1), new Date(2015, 0, 1), {\n * unit: 'minute'\n * })\n * //=> '525600 minutes'\n *\n * @example\n * // What is the distance from 1 January 2015\n * // to 28 January 2015, in months, rounded up?\n * const result = formatDistanceStrict(new Date(2015, 0, 28), new Date(2015, 0, 1), {\n * unit: 'month',\n * roundingMethod: 'ceil'\n * })\n * //=> '1 month'\n *\n * @example\n * // What is the distance between 1 August 2016 and 1 January 2015 in Esperanto?\n * import { eoLocale } from 'date-fns/locale/eo'\n * const result = formatDistanceStrict(new Date(2016, 7, 1), new Date(2015, 0, 1), {\n * locale: eoLocale\n * })\n * //=> '1 jaro'\n */\n\nexport default function formatDistanceStrict(dirtyDate, dirtyBaseDate, options) {\n var _ref, _options$locale, _options$roundingMeth;\n requiredArgs(2, arguments);\n var defaultOptions = getDefaultOptions();\n var locale = (_ref = (_options$locale = options === null || options === void 0 ? void 0 : options.locale) !== null && _options$locale !== void 0 ? _options$locale : defaultOptions.locale) !== null && _ref !== void 0 ? _ref : defaultLocale;\n if (!locale.formatDistance) {\n throw new RangeError('locale must contain localize.formatDistance property');\n }\n var comparison = compareAsc(dirtyDate, dirtyBaseDate);\n if (isNaN(comparison)) {\n throw new RangeError('Invalid time value');\n }\n var localizeOptions = assign(cloneObject(options), {\n addSuffix: Boolean(options === null || options === void 0 ? void 0 : options.addSuffix),\n comparison: comparison\n });\n var dateLeft;\n var dateRight;\n if (comparison > 0) {\n dateLeft = toDate(dirtyBaseDate);\n dateRight = toDate(dirtyDate);\n } else {\n dateLeft = toDate(dirtyDate);\n dateRight = toDate(dirtyBaseDate);\n }\n var roundingMethod = String((_options$roundingMeth = options === null || options === void 0 ? void 0 : options.roundingMethod) !== null && _options$roundingMeth !== void 0 ? _options$roundingMeth : 'round');\n var roundingMethodFn;\n if (roundingMethod === 'floor') {\n roundingMethodFn = Math.floor;\n } else if (roundingMethod === 'ceil') {\n roundingMethodFn = Math.ceil;\n } else if (roundingMethod === 'round') {\n roundingMethodFn = Math.round;\n } else {\n throw new RangeError(\"roundingMethod must be 'floor', 'ceil' or 'round'\");\n }\n var milliseconds = dateRight.getTime() - dateLeft.getTime();\n var minutes = milliseconds / MILLISECONDS_IN_MINUTE;\n var timezoneOffset = getTimezoneOffsetInMilliseconds(dateRight) - getTimezoneOffsetInMilliseconds(dateLeft); // Use DST-normalized difference in minutes for years, months and days;\n // use regular difference in minutes for hours, minutes and seconds.\n\n var dstNormalizedMinutes = (milliseconds - timezoneOffset) / MILLISECONDS_IN_MINUTE;\n var defaultUnit = options === null || options === void 0 ? void 0 : options.unit;\n var unit;\n if (!defaultUnit) {\n if (minutes < 1) {\n unit = 'second';\n } else if (minutes < 60) {\n unit = 'minute';\n } else if (minutes < MINUTES_IN_DAY) {\n unit = 'hour';\n } else if (dstNormalizedMinutes < MINUTES_IN_MONTH) {\n unit = 'day';\n } else if (dstNormalizedMinutes < MINUTES_IN_YEAR) {\n unit = 'month';\n } else {\n unit = 'year';\n }\n } else {\n unit = String(defaultUnit);\n } // 0 up to 60 seconds\n\n if (unit === 'second') {\n var seconds = roundingMethodFn(milliseconds / 1000);\n return locale.formatDistance('xSeconds', seconds, localizeOptions); // 1 up to 60 mins\n } else if (unit === 'minute') {\n var roundedMinutes = roundingMethodFn(minutes);\n return locale.formatDistance('xMinutes', roundedMinutes, localizeOptions); // 1 up to 24 hours\n } else if (unit === 'hour') {\n var hours = roundingMethodFn(minutes / 60);\n return locale.formatDistance('xHours', hours, localizeOptions); // 1 up to 30 days\n } else if (unit === 'day') {\n var days = roundingMethodFn(dstNormalizedMinutes / MINUTES_IN_DAY);\n return locale.formatDistance('xDays', days, localizeOptions); // 1 up to 12 months\n } else if (unit === 'month') {\n var months = roundingMethodFn(dstNormalizedMinutes / MINUTES_IN_MONTH);\n return months === 12 && defaultUnit !== 'month' ? locale.formatDistance('xYears', 1, localizeOptions) : locale.formatDistance('xMonths', months, localizeOptions); // 1 year up to max Date\n } else if (unit === 'year') {\n var years = roundingMethodFn(dstNormalizedMinutes / MINUTES_IN_YEAR);\n return locale.formatDistance('xYears', years, localizeOptions);\n }\n throw new RangeError(\"unit must be 'second', 'minute', 'hour', 'day', 'month' or 'year'\");\n}","module.exports = \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAzMiAzMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgaWQ9IkZhY2Vib29rIj4KPGcgaWQ9IkZhY2Vib29rXzIiPgo8cmVjdCBpZD0iUmVjdGFuZ2xlIiB3aWR0aD0iMzEuMTAzMyIgaGVpZ2h0PSIzMS4xMDMzIiByeD0iMTUuNTUxNyIgZmlsbD0iI0VBRUFFQSIvPgo8cGF0aCBpZD0iVmVjdG9yIiBkPSJNMTYuNTkxMSAyNS45MTkzVjE2LjQ2MDhIMTkuNzY1OUwyMC4yNDEzIDEyLjc3NDdIMTYuNTkxMVYxMC40MjEyQzE2LjU5MTEgOS4zNTQgMTYuODg3NSA4LjYyNjY1IDE4LjQxOCA4LjYyNjY1TDIwLjM2OTkgOC42MjU3NFY1LjMyODkzQzIwLjAzMjIgNS4yODQxNyAxOC44NzM2IDUuMTgzODQgMTcuNTI1NiA1LjE4Mzg0QzE0LjcxMTMgNS4xODM4NCAxMi43ODQ2IDYuOTAxNTkgMTIuNzg0NiAxMC4wNTYzVjEyLjc3NDhIOS42MDE1NlYxNi40NjA5SDEyLjc4NDVWMjUuOTE5NEwxNi41OTExIDI1LjkxOTNaIiBmaWxsPSIjODA4MDgwIi8+CjwvZz4KPC9nPgo8L3N2Zz4K\"","module.exports = \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzMiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAzMyAzMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgaWQ9IlR3aXR0ZXIiPgo8ZyBpZD0iVHdpdHRlcl8yIj4KPHJlY3QgaWQ9IlJlY3RhbmdsZSIgeD0iMC45Mzc1IiB3aWR0aD0iMzEuMTAzMyIgaGVpZ2h0PSIzMS4xMDMzIiByeD0iMTUuNTUxNyIgZmlsbD0iI0VBRUFFQSIvPgo8cGF0aCBpZD0iUGF0aCIgZD0iTTI0LjExMTcgMTIuMTkwMkMyNC4xMTE3IDEyLjM2MDMgMjQuMTExNyAxMi41MzA0IDI0LjExMTcgMTIuNjc2MkMyNC4xMTE3IDE3LjcwNjIgMjAuMjcyNCAyMy41MTM4IDEzLjI3NDEgMjMuNTEzOEMxMS4xMTE1IDIzLjUxMzggOS4xMTg5MyAyMi44ODIgNy40MTc5NyAyMS44MTI4QzcuNzA5NTYgMjEuODM3MSA4LjAyNTQ2IDIxLjg2MTQgOC4zMTcwNSAyMS44NjE0QzEwLjA5MDkgMjEuODYxNCAxMS43NDMzIDIxLjI1NCAxMy4wNTU0IDIwLjIzMzRDMTEuMzc4OCAyMC4yMDkxIDkuOTY5NDEgMTkuMDkxMyA5LjUwNzcyIDE3LjU4NDdDOS43NTA3MiAxNy42MzMzIDkuOTY5NDEgMTcuNjU3NiAxMC4yMzY3IDE3LjY1NzZDMTAuNTc2OSAxNy42NTc2IDEwLjkxNzEgMTcuNjA5IDExLjIzMyAxNy41MTE4QzkuNDgzNDIgMTcuMTcxNiA4LjE3MTI1IDE1LjY0MDggOC4xNzEyNSAxMy43OTRDOC4xNzEyNSAxMy43Njk3IDguMTcxMjUgMTMuNzY5NyA4LjE3MTI1IDEzLjc0NTRDOC42ODE1NCAxNC4wMzcgOS4yNjQ3MyAxNC4yMDcxIDkuODk2NTEgMTQuMjMxNEM4Ljg3NTk0IDEzLjU1MSA4LjE5NTU1IDEyLjM4NDYgOC4xOTU1NSAxMS4wNDgyQzguMTk1NTUgMTAuMzQzNSA4LjM4OTk1IDkuNjg3NCA4LjcwNTg0IDkuMTI4NTFDMTAuNTc2OSAxMS40MzcgMTMuMzk1NiAxMi45NDM1IDE2LjU1NDYgMTMuMTEzNkMxNi40ODE3IDEyLjg0NjMgMTYuNDU3NCAxMi41MzA0IDE2LjQ1NzQgMTIuMjM4OEMxNi40NTc0IDEwLjEyNDggMTguMTU4MyA4LjQyMzgzIDIwLjI3MjQgOC40MjM4M0MyMS4zNjU5IDguNDIzODMgMjIuMzYyMSA4Ljg4NTUyIDIzLjA0MjUgOS42MTQ1QzIzLjkxNzMgOS40NDQ0MSAyNC43MTkyIDkuMTI4NTEgMjUuNDcyNSA4LjY5MTEyQzI1LjE4MDkgOS41OTAyIDI0LjU3MzQgMTAuMzE5MiAyMy43OTU4IDEwLjgwNTJDMjQuNTczNCAxMC43MDggMjUuMzAyNCAxMC41MTM2IDI1Ljk4MjggMTAuMTk3N0MyNS40OTY4IDEwLjk3NTMgMjQuODY1IDExLjY1NTcgMjQuMTExNyAxMi4xOTAyWiIgZmlsbD0iIzgwODA4MCIvPgo8L2c+CjwvZz4KPC9zdmc+Cg==\"","type Maybe = T | undefined;\n\ntype Connection = {\n edges: Maybe<\n ReadonlyArray<\n Maybe<{\n node: T;\n }>\n >\n >;\n};\n\nexport function unwrapConnection(connection: Connection): T[] {\n const edges = (connection?.edges || []).filter(Boolean);\n return edges.map((edge) => edge?.node).filter(Boolean) as T[];\n}\n\nexport function unwrapFirst(connection: Connection): T {\n const first = unwrapConnection(connection)[0];\n if (!first) {\n throw new Error(\"Called unwrapFirst on a connection with no edges\");\n }\n return first;\n}\n","module.exports = \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAzMiAzMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3QgeD0iMC44Nzg5MDYiIHdpZHRoPSIzMS4xMDMzIiBoZWlnaHQ9IjMxLjEwMzMiIHJ4PSIxNS41NTE3IiBmaWxsPSIjRUFFQUVBIi8+CjxwYXRoIGQ9Ik0yNS4wNjY4IDIyLjg5QzI0LjA0NjIgMjIuODY1NyAyMy4wNDk5IDIyLjg2NTcgMjIuMDI5MyAyMi44OUMyMS44MTA2IDIyLjg5IDIxLjc2MiAyMi44NDE0IDIxLjc2MiAyMi42MjI3QzIxLjc2MiAyMC44MjQ2IDIxLjc2MiAxOS4wMDIxIDIxLjc2MiAxNy4yMDRDMjEuNzYyIDE2Ljc5MDkgMjEuNzM3NyAxNi4zNzc4IDIxLjYxNjIgMTUuOTg5QzIxLjI1MTggMTQuNzI1NCAxOS43OTM4IDE0LjI2MzcgMTguNzQ4OSAxNS4xMTQyQzE4LjE5IDE1LjU1MTYgMTcuOTcxMyAxNi4xNTkxIDE3Ljk3MTMgMTYuODg4MUMxNy45NzEzIDE4LjU4OSAxNy45NzEzIDIwLjI5IDE3Ljk3MTMgMjEuOTkxQzE3Ljk3MTMgMjIuMjA5NyAxNy45NDcgMjIuNDI4MyAxNy45NzEzIDIyLjY3MTNDMTcuOTk1NiAyMi44NjU3IDE3Ljg5ODQgMjIuOTE0MyAxNy43MjgzIDIyLjg5QzE2LjY4MzUgMjIuODkgMTUuNjYyOSAyMi44OSAxNC42MTggMjIuODlDMTQuNDIzNiAyMi44OSAxNC4zNzUgMjIuODQxNCAxNC4zNzUgMjIuNjQ3QzE0LjM5OTMgMjEuMTE2MiAxNC4zOTkzIDE5LjU4NTMgMTQuMzk5MyAxOC4wMzAxQzE0LjM5OTMgMTYuMTM0OCAxNC4zOTkzIDE0LjIzOTQgMTQuMzc1IDEyLjM2ODRDMTQuMzc1IDEyLjE0OTcgMTQuNDIzNiAxMi4xMDExIDE0LjYxOCAxMi4xMDExQzE1LjY2MjkgMTIuMTAxMSAxNi42ODM1IDEyLjEwMTEgMTcuNzI4MyAxMi4xMDExQzE3LjkyMjcgMTIuMTAxMSAxNy45NzEzIDEyLjE0OTcgMTcuOTcxMyAxMi4zNDQxQzE3Ljk3MTMgMTIuNzMyOSAxNy45NzEzIDEzLjEyMTcgMTcuOTcxMyAxMy41ODMzQzE4LjA0NDIgMTMuNTEwNCAxOC4wNjg1IDEzLjQ4NjEgMTguMDkyOCAxMy40NjE4QzE5LjA0MDUgMTIuMDc2OCAyMC4zNzcgMTEuNjg4IDIxLjk1NjQgMTEuOTMxQzIzLjc3ODkgMTIuMjIyNiAyNC45NDUzIDEzLjQ4NjEgMjUuMjM2OSAxNS40MzAxQzI1LjMwOTggMTUuODkxOCAyNS4zMzQxIDE2LjM1MzUgMjUuMzM0MSAxNi44MTUyQzI1LjMzNDEgMTguNzU5MSAyNS4zMzQxIDIwLjY3ODggMjUuMzM0MSAyMi42MjI3QzI1LjMzNDEgMjIuODE3MSAyNS4yODU1IDIyLjg5IDI1LjA2NjggMjIuODlaIiBmaWxsPSIjODA4MDgwIi8+CjxwYXRoIGQ9Ik0xMi40MzE0IDE3LjQ5NThDMTIuNDMxNCAxOS4xOTY4IDEyLjQzMTQgMjAuODk3NyAxMi40MzE0IDIyLjU5ODdDMTIuNDMxNCAyMi44MTc0IDEyLjM4MjggMjIuODkwMyAxMi4xNjQxIDIyLjg5MDNDMTEuMTQzNSAyMi44NjYgMTAuMTIyOSAyMi44OTAzIDkuMTAyMzcgMjIuODkwM0M4LjkwNzk3IDIyLjg5MDMgOC44NTkzOCAyMi44NDE3IDguODU5MzggMjIuNjQ3M0M4Ljg1OTM4IDE5LjIyMTEgOC44NTkzOCAxNS43NzA1IDguODU5MzggMTIuMzQ0M0M4Ljg1OTM4IDEyLjE3NDIgOC45MDc5NyAxMi4xMDEzIDkuMTAyMzcgMTIuMTAxM0MxMC4xNDcyIDEyLjEwMTMgMTEuMTkyMSAxMi4xMDEzIDEyLjIzNyAxMi4xMDEzQzEyLjQ1NTcgMTIuMTAxMyAxMi40OCAxMi4xNzQyIDEyLjQ4IDEyLjM2ODZDMTIuNDMxNCAxNC4wNjk2IDEyLjQzMTQgMTUuNzcwNSAxMi40MzE0IDE3LjQ5NThaIiBmaWxsPSIjODA4MDgwIi8+CjxwYXRoIGQ9Ik0xMi42MDEzIDkuMjgyNTdDMTIuMzU4MyAxMC4yNTQ1IDExLjM2MjEgMTAuODEzNCAxMC4yMiAxMC42MTlDOS4wMDUwMSAxMC40MjQ2IDguMzI0NjIgOS4yMzM5NyA4Ljc2MjAxIDguMDY3NkM5LjA1MzYxIDcuMzM4NjEgOS43NTgyOSA2LjkwMTIyIDEwLjY1NzQgNi45MjU1MkMxMi4wMTgxIDYuOTAxMjIgMTIuOTE3MiA3Ljk5NDcgMTIuNjAxMyA5LjI4MjU3WiIgZmlsbD0iIzgwODA4MCIvPgo8L3N2Zz4K\"","import { format, parseISO } from \"date-fns\";\nimport { graphql } from \"gatsby\";\nimport Img from \"gatsby-image\";\nimport * as React from \"react\";\nimport styled from \"styled-components\";\nimport { calculateReadTime, fixedImage } from \"../../../prismic-tools\";\nimport { Dimen, Color } from \"../../../constants/legacy\";\n\ntype Props = {\n author: GatsbyTypes.AuthorBlockAuthorFragment;\n post: GatsbyTypes.AuthorBlockPostFragment;\n};\n\nexport const query = graphql`\n fragment AuthorBlockAuthor on PrismicBlogAuthorDataType {\n first_name\n last_name\n job_title\n avatar_image {\n alt\n dimensions {\n width\n height\n }\n url\n }\n }\n\n fragment AuthorBlockPost on PrismicBlogPostDataType {\n publish_date\n ...ToolsBlogContent\n\n tags {\n tag_link {\n document {\n __typename\n ... on PrismicBlogTag {\n data {\n name\n }\n }\n }\n }\n }\n }\n`;\n\nexport default function AuthorBlock({ author, post }: Props) {\n const tagNames =\n (post.tags\n ?.map((tag) => {\n let tagLink = null;\n if (tag?.tag_link?.document?.__typename === \"PrismicBlogTag\") {\n tagLink = tag?.tag_link.document.data;\n }\n if (!tagLink) return null;\n return tagLink.name;\n })\n .filter(Boolean) as string[]) || [];\n\n return (\n \n {author.avatar_image && (\n \n )}\n \n \n {author.first_name} {author.last_name}\n \n {author.job_title}\n\n \n
\n {post.publish_date && format(parseISO(post.publish_date), \"MMMM y\")}\n
\n
{calculateReadTime(post)} min read
\n\n {tagNames.length > 0 && (\n \n {tagNames.map((tagName) => (\n
  • {tagName}
  • \n ))}\n
    \n )}\n
    \n
    \n
    \n );\n}\n\nconst StyledContainer = styled.div`\n display: flex;\n font-size: 15px;\n margin-bottom: 50px;\n`;\n\nconst StyledAvatar = styled(Img)`\n border-radius: 50%;\n margin-right: 15px;\n` as any;\n\nconst StyledDetails = styled.div`\n strong {\n display: block;\n margin-bottom: 3px;\n }\n`;\n\nconst StyledPostInfo = styled.div`\n margin-top: 20px;\n color: ${Color.grey};\n font-weight: 300;\n\n @media (max-width: ${Dimen.breakpointDefault}px) {\n .min-read {\n display: none;\n }\n }\n`;\n\nconst StyledTags = styled.ul`\n margin: 20px 0 0;\n padding: 0;\n list-style-type: none;\n\n li {\n margin: 0 0 3px;\n padding: 0;\n }\n`;\n","import { formatDistanceStrict, parseISO } from \"date-fns\";\nimport { graphql } from \"gatsby\";\nimport * as React from \"react\";\nimport {\n calculateReadTime,\n extractBlogSnippet,\n fluidImage,\n} from \"../../../prismic-tools\";\nimport LinkTile from \"../LinkTile\";\n\ntype Props = {\n postNode: GatsbyTypes.PostTileLegacyFragment;\n};\n\nexport const query = graphql`\n fragment PostTileLegacy on PrismicBlogPost {\n uid\n data {\n title\n publish_date\n topic_name\n featured_image {\n alt\n dimensions {\n width\n height\n }\n url\n }\n ...ToolsBlogContent\n }\n }\n`;\n\nexport default function BlogPostTile({ postNode }: Props) {\n const post = postNode.data;\n if (!post) return null;\n const featuredImageFluid = fluidImage(post.featured_image, 400);\n\n return (\n \n );\n}\n","import * as React from \"react\";\nimport styled from \"styled-components\";\n\nimport SHARE_FACEBOOK from \"../../../../img/pages/blog/share_facebook.svg\";\nimport SHARE_LINKEDIN from \"../../../../img/pages/blog/share_linkedin.svg\";\nimport SHARE_TWITTER from \"../../../../img/pages/blog/share_twitter.svg\";\nimport { Dimen } from \"../../../constants/legacy\";\nimport { Config } from \"../../../constants\";\n\ntype Props = {\n uid: string | undefined;\n};\n\nexport default function ShareBlock({ uid }: Props) {\n if (!uid) return null;\n\n const shareUrl = `${Config.rootUrl}/blog/${uid}`;\n const encoded = encodeURI(shareUrl);\n\n return (\n \n Share this post\n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n\nconst StyledContainer = styled.div`\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n margin: 40px 0 70px;\n\n strong {\n margin-bottom: 20px;\n }\n\n @media (max-width: ${Dimen.breakpointDefault}px) {\n align-items: flex-start;\n }\n`;\n\nconst StyledButtons = styled.div`\n display: flex;\n align-items: center;\n transition: opacity 0.25s;\n\n a {\n margin: 0 4px;\n &:hover {\n opacity: 0.75;\n }\n }\n`;\n","import * as React from \"react\";\nimport styled from \"styled-components\";\n\nimport Button from \"../Button\";\nimport Modal from \"../Modal\";\nimport { useForm } from \"react-typed-form\";\nimport { Config, Domain } from \"../../../constants\";\nimport { FieldText, SubmitButton, FieldSelect } from \"../../../form/legacy\";\n\nexport default function SpecialSliceDownloadRdfTemplate() {\n const [modalVisible, setModalVisible] = React.useState(false);\n const [success, setSuccess] = React.useState(false);\n\n return (\n <>\n \n setModalVisible(true)}\n />\n \n\n {modalVisible && (\n {\n setModalVisible(false);\n }}\n >\n \n \n )}\n \n );\n}\n\nconst StyledSlice = styled.div`\n display: flex;\n justify-content: center;\n padding: 30px 0;\n`;\n\nconst StyledForm = styled.form`\n display: flex;\n flex-direction: column;\n align-items: stretch;\n margin: 0;\n padding: 0;\n`;\n\nconst StyledFormSpacer = styled.div`\n height: 20px;\n`;\n","import { graphql } from \"gatsby\";\nimport * as React from \"react\";\nimport styled from \"styled-components\";\nimport { Color } from \"../../../constants/legacy\";\nimport Modal from \"../Modal\";\n\ntype Props = {\n blogIndexPage: GatsbyTypes.SubscribePromptModalFragment | undefined;\n onDismiss: () => void;\n};\n\nexport const query = graphql`\n fragment SubscribePromptModal on PrismicBlogIndexPageDataType {\n subscribe_modal_heading\n subscribe_modal_content\n subscribe_modal_first_button\n subscribe_modal_thanks_heading\n subscribe_modal_thanks_content\n }\n`;\n\nexport default function SubscribePromptModal({\n blogIndexPage,\n onDismiss,\n}: Props) {\n const [openedForm, setOpenedForm] = React.useState(false);\n\n if (!blogIndexPage) return null;\n\n return (\n \n \n \n );\n}\n\nconst StyledForm = styled.form`\n display: flex;\n align-items: center;\n margin: 0;\n`;\n\nconst StyledInput = styled.input`\n box-sizing: border-box;\n width: 100%;\n height: 60px;\n border: 1px #ccc solid;\n padding: 0 25px;\n\n @media (max-width: 400px) {\n padding: 0 10px;\n }\n`;\n\nconst StyledButton = styled.button`\n box-sizing: border-box;\n height: 60px;\n border: 0;\n background-color: ${Color.darkBlue};\n color: ${Color.white};\n padding: 15px;\n cursor: pointer;\n transition: background-color 0.25s;\n\n &:hover {\n background-color: ${Color.blue};\n }\n`;\n","import Img from \"gatsby-image\";\nimport * as React from \"react\";\nimport styled from \"styled-components\";\nimport {\n Layout,\n HorizontalContainer,\n Cols,\n Col,\n HelmetSeo,\n FormattedRichText,\n} from \"../components/legacy\";\nimport { graphql } from \"gatsby\";\nimport {\n AuthorBlock,\n PostTile,\n ShareBlock,\n SpecialSliceDownloadRdfTemplate,\n} from \"../components/legacy/blog\";\nimport { unwrapConnection } from \"../util\";\nimport { extractBlogSnippet, fluidImage } from \"../prismic-tools\";\nimport { Color } from \"../constants/legacy\";\n\nexport const pageQuery = graphql`\n query BlogPost($uid: String!) {\n prismicBlogPost(uid: { eq: $uid }) {\n uid\n data {\n title\n topic_name\n featured_image {\n alt\n dimensions {\n width\n height\n }\n url\n }\n body {\n __typename\n ... on PrismicBlogPostBodyText {\n primary {\n content {\n raw\n }\n }\n }\n ... on PrismicBlogPostBodyEmbed {\n primary {\n embed {\n embed_url\n html\n }\n }\n }\n ... on PrismicBlogPostBodyImage {\n primary {\n image {\n alt\n dimensions {\n width\n height\n }\n url\n }\n link_url\n }\n }\n ... on PrismicBlogPostBodySpecial {\n primary {\n content_identifier\n }\n }\n }\n author {\n document {\n __typename\n ... on PrismicBlogAuthor {\n data {\n ...AuthorBlockAuthor\n }\n }\n }\n }\n ...AuthorBlockPost\n ...ToolsBlogContent\n\n seo_title\n seo_description\n share_image {\n alt\n dimensions {\n width\n height\n }\n url\n }\n }\n }\n\n allPrismicBlogPost(\n limit: 3\n sort: { fields: [data___publish_date], order: DESC }\n ) {\n edges {\n node {\n uid\n ...PostTileLegacy\n }\n }\n }\n\n prismicBlogIndexPage {\n data {\n ...SubscribePromptModal\n }\n }\n }\n`;\n\ntype Props = {\n data: GatsbyTypes.BlogPostQuery;\n};\n\nexport default function BlogPostTemplate({ data }: Props) {\n // Show a subscription prompt when the user reaches the end of an article\n /* const endReachedRef = React.useRef(null);\n const [hasPrompted, setHasPrompted] = React.useState(false);\n const [promptVisible, setPromptVisible] = React.useState(false);\n React.useEffect(() => {\n let observer = new IntersectionObserver((entries) => {\n if (entries[0].intersectionRatio > 0 && !hasPrompted) {\n setHasPrompted(true);\n setTimeout(() => {\n setPromptVisible(true);\n }, 2000);\n }\n });\n\n endReachedRef.current && observer.observe(endReachedRef.current);\n\n return () => {\n observer.disconnect();\n };\n }, [endReachedRef.current]); */\n\n const postNode = data.prismicBlogPost;\n const post = postNode?.data;\n if (!postNode || !post) {\n return null;\n }\n\n const blogIndexPage = data.prismicBlogIndexPage?.data;\n if (!blogIndexPage) throw new Error(\"page missing\");\n\n const featuredImageFluid = fluidImage(post.featured_image, 960);\n\n let author = null;\n if (post.author?.document?.__typename === \"PrismicBlogAuthor\") {\n author = post.author.document.data;\n }\n\n const relatedPostNodes = unwrapConnection(data.allPrismicBlogPost);\n\n return (\n \n {/* The blog post has enough info to create defaults for all of these,\n but let the user override them if they want */}\n \n\n \n \n {post.topic_name}\n \n\n {post.title}\n\n {featuredImageFluid && (\n \n )}\n\n \n \n \n {post.body?.map((slice, i) => {\n if (!slice) return null;\n const key = i.toString();\n if (slice.__typename === \"PrismicBlogPostBodyText\") {\n if (!slice.primary) {\n throw new Error(\"slice.primary is missing\");\n }\n return (\n \n );\n } else if (slice.__typename === \"PrismicBlogPostBodyImage\") {\n if (!slice.primary) {\n throw new Error(\"slice.primary is missing\");\n }\n const imageFluid = fluidImage(slice.primary.image, 620);\n\n const inner = (\n \n );\n return slice.primary.link_url ? (\n \n {inner}\n \n ) : (\n inner\n );\n } else if (slice.__typename === \"PrismicBlogPostBodyEmbed\") {\n if (!slice.primary) {\n throw new Error(\"slice.primary is missing\");\n }\n const embed = slice.primary.embed;\n if (!embed) return null;\n\n let matches;\n if (\n (matches = embed.embed_url?.match(\n /youtube\\.com\\/watch\\?v=([a-z0-9_-]+)/i\n ))\n ) {\n return (\n \n );\n } else if (\n (matches = embed.embed_url?.match(\n /wistia.com\\/medias\\/([a-z0-9_-]+)/i\n ))\n ) {\n return (\n \n );\n }\n\n return (\n \n );\n } else if (slice.__typename === \"PrismicBlogPostBodySpecial\") {\n if (!slice.primary) {\n throw new Error(\"slice.primary is missing\");\n }\n const identifier = slice.primary.content_identifier;\n\n if (identifier === \"download_rfp_template\") {\n return ;\n } else {\n throw new Error(\n `Unknown special content type: ${identifier}`\n );\n }\n } else {\n throw new Error(\n `Unknown slice type: ${(slice as any).__typename}`\n );\n }\n })}\n \n \n \n {author ? :
    }\n \n \n \n \n\n {/* Once their viewport intersects with this invisible div,\n we consider it as reaching the end of the artcile */}\n {/*
    */}\n\n \n \n

    You might also like

    \n \n {relatedPostNodes.map((postNode) => (\n \n ))}\n \n
    \n
    \n\n {/* promptVisible && (\n setPromptVisible(false)}\n />\n ) */}\n \n );\n}\n\nconst StyledInfoBar = styled.div`\n padding: 50px 0 20px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n\n .topic {\n font-size: 14;\n font-weight: 300;\n text-transform: uppercase;\n }\n`;\n\nconst StyledTitle = styled.h1`\n font-weight: 400;\n font-size: 40px;\n max-width: 800px;\n margin-bottom: 40px;\n`;\n\nconst StyledFeaturedImage = styled(Img)`\n margin-bottom: 50px;\n height: 400px;\n` as any;\n\nconst StyledImageEmbed = styled(Img)`\n margin: 40px 0 40px;\n` as any;\n\nconst StyledVideoIframeEmbed = styled.iframe`\n width: 100%;\n height: 349px;\n margin: 20px 0 40px;\n`;\n\nconst StyledContentWrap = styled.div`\n padding-bottom: 70px;\n`;\n\nconst StyledSectionRelated = styled.section`\n padding: 3rem 0;\n background-color: ${Color.lightGrey};\n\n h2 {\n font-size: 17px;\n text-transform: uppercase;\n text-align: center;\n }\n`;\n\nconst StyledRelatedTiles = styled.div`\n display: flex;\n flex-wrap: wrap;\n margin: 10px -10px;\n`;\n"],"sourceRoot":""}