{"version":3,"sources":["webpack:///./node_modules/date-fns/esm/constants/index.js","webpack:///./node_modules/date-fns/esm/parseISO/index.js","webpack:///./src/components/blog/FeaturedPost.tsx","webpack:///./src/templates/blog-index.tsx","webpack:///./src/util.tsx"],"names":["Math","pow","parseISO","argument","options","_options$additionalDi","requiredArgs","arguments","additionalDigits","toInteger","RangeError","Object","prototype","toString","call","Date","NaN","date","dateStrings","splitDateString","parseYearResult","parseYear","parseDate","restDateString","year","isNaN","getTime","offset","timestamp","time","parseTime","timezone","dirtyDate","result","setFullYear","getUTCFullYear","getUTCMonth","getUTCDate","setHours","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","parseTimezone","patterns","dateTimeDelimiter","timeZoneDelimiter","dateRegex","timeRegex","timezoneRegex","dateString","timeString","array","split","length","test","substr","token","exec","replace","regex","RegExp","captures","match","parseInt","century","slice","isWeekDate","dayOfYear","parseDateUnit","month","day","week","dayOfWeek","_year","validateWeekDate","isoWeekYear","setUTCFullYear","fourthOfJanuaryDay","getUTCDay","diff","setUTCDate","dayOfISOWeekYear","daysInMonths","isLeapYearIndex","validateDate","validateDayOfYearDate","max","value","hours","parseTimeUnit","minutes","seconds","validateTime","parseFloat","timezoneString","sign","_hours","validateTimezone","FeaturedPost","_ref","postNode","post","data","React","Grid","alignColumns","justifyColumns","reverseColumns","Column","size","Gutter","md","MaxWidth","width","StyledImageBorder","Img","fluid","fluidImage","featured_image","StyledAreaMain","style","flex","Text","as","typeface","publish_date","format","bold","title","extractBlogSnippet","StyledBottomRow","calculateReadTime","StyledLink","to","uid","color","xlinkHref","styled","div","withConfig","displayName","componentId","Link","Color","blue1","BlogIndexTemplate","_data$prismicBlogInde","_data$prismicBlogInde2","_data$prismicBlogInde3","_data$prismicBlogInde4","pageContext","page","prismicBlogIndexPage","Error","postNodes","unwrapConnection","allPrismicBlogPost","featuredPostNode","document","featured_post","__typename","currentPageNumber","helmetSeoProps","seo_title","Layout","HelmetSeo","Section","background","PageMaxWidth","CurvedSectionDividerGlow","position","glowColor","backColor","map","key","BlogCard","image","undefined","description","readTime","Visibility","hideBelow","StyledPageLinks","previousPagePath","className","nextPagePath","dark4","orange1","Dimen","gutterWidth","connection","edges","filter","Boolean","edge","node","unwrapFirst","first"],"mappings":"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","file":"component---src-templates-blog-index-tsx-a7bdf9ddf30d16fbfa93.js","sourcesContent":["/**\n * Days in 1 week.\n *\n * @name daysInWeek\n * @constant\n * @type {number}\n * @default\n */\nexport var daysInWeek = 7;\n/**\n * Days in 1 year\n * One years equals 365.2425 days according to the formula:\n *\n * > Leap year occures every 4 years, except for years that are divisable by 100 and not divisable by 400.\n * > 1 mean year = (365+1/4-1/100+1/400) days = 365.2425 days\n *\n * @name daysInYear\n * @constant\n * @type {number}\n * @default\n */\n\nexport var daysInYear = 365.2425;\n/**\n * Maximum allowed time.\n *\n * @name maxTime\n * @constant\n * @type {number}\n * @default\n */\n\nexport var maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1000;\n/**\n * Milliseconds in 1 minute\n *\n * @name millisecondsInMinute\n * @constant\n * @type {number}\n * @default\n */\n\nexport var millisecondsInMinute = 60000;\n/**\n * Milliseconds in 1 hour\n *\n * @name millisecondsInHour\n * @constant\n * @type {number}\n * @default\n */\n\nexport var millisecondsInHour = 3600000;\n/**\n * Milliseconds in 1 second\n *\n * @name millisecondsInSecond\n * @constant\n * @type {number}\n * @default\n */\n\nexport var millisecondsInSecond = 1000;\n/**\n * Minimum allowed time.\n *\n * @name minTime\n * @constant\n * @type {number}\n * @default\n */\n\nexport var minTime = -maxTime;\n/**\n * Minutes in 1 hour\n *\n * @name minutesInHour\n * @constant\n * @type {number}\n * @default\n */\n\nexport var minutesInHour = 60;\n/**\n * Months in 1 quarter\n *\n * @name monthsInQuarter\n * @constant\n * @type {number}\n * @default\n */\n\nexport var monthsInQuarter = 3;\n/**\n * Months in 1 year\n *\n * @name monthsInYear\n * @constant\n * @type {number}\n * @default\n */\n\nexport var monthsInYear = 12;\n/**\n * Quarters in 1 year\n *\n * @name quartersInYear\n * @constant\n * @type {number}\n * @default\n */\n\nexport var quartersInYear = 4;\n/**\n * Seconds in 1 hour\n *\n * @name secondsInHour\n * @constant\n * @type {number}\n * @default\n */\n\nexport var secondsInHour = 3600;\n/**\n * Seconds in 1 minute\n *\n * @name secondsInMinute\n * @constant\n * @type {number}\n * @default\n */\n\nexport var secondsInMinute = 60;\n/**\n * Seconds in 1 day\n *\n * @name secondsInDay\n * @constant\n * @type {number}\n * @default\n */\n\nexport var secondsInDay = secondsInHour * 24;\n/**\n * Seconds in 1 week\n *\n * @name secondsInWeek\n * @constant\n * @type {number}\n * @default\n */\n\nexport var secondsInWeek = secondsInDay * 7;\n/**\n * Seconds in 1 year\n *\n * @name secondsInYear\n * @constant\n * @type {number}\n * @default\n */\n\nexport var secondsInYear = secondsInDay * daysInYear;\n/**\n * Seconds in 1 month\n *\n * @name secondsInMonth\n * @constant\n * @type {number}\n * @default\n */\n\nexport var secondsInMonth = secondsInYear / 12;\n/**\n * Seconds in 1 quarter\n *\n * @name secondsInQuarter\n * @constant\n * @type {number}\n * @default\n */\n\nexport var secondsInQuarter = secondsInMonth * 3;","import { millisecondsInHour, millisecondsInMinute } from \"../constants/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name parseISO\n * @category Common Helpers\n * @summary Parse ISO string\n *\n * @description\n * Parse the given string in ISO 8601 format and return an instance of Date.\n *\n * Function accepts complete ISO 8601 formats as well as partial implementations.\n * ISO 8601: http://en.wikipedia.org/wiki/ISO_8601\n *\n * If the argument isn't a string, the function cannot parse the string or\n * the values are invalid, it returns Invalid Date.\n *\n * @param {String} argument - the value to convert\n * @param {Object} [options] - an object with options.\n * @param {0|1|2} [options.additionalDigits=2] - the additional number of digits in the extended year format\n * @returns {Date} the parsed date in the local time zone\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2\n *\n * @example\n * // Convert string '2014-02-11T11:30:30' to date:\n * const result = parseISO('2014-02-11T11:30:30')\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert string '+02014101' to date,\n * // if the additional number of digits in the extended year format is 1:\n * const result = parseISO('+02014101', { additionalDigits: 1 })\n * //=> Fri Apr 11 2014 00:00:00\n */\n\nexport default function parseISO(argument, options) {\n var _options$additionalDi;\n requiredArgs(1, arguments);\n var additionalDigits = toInteger((_options$additionalDi = options === null || options === void 0 ? void 0 : options.additionalDigits) !== null && _options$additionalDi !== void 0 ? _options$additionalDi : 2);\n if (additionalDigits !== 2 && additionalDigits !== 1 && additionalDigits !== 0) {\n throw new RangeError('additionalDigits must be 0, 1 or 2');\n }\n if (!(typeof argument === 'string' || Object.prototype.toString.call(argument) === '[object String]')) {\n return new Date(NaN);\n }\n var dateStrings = splitDateString(argument);\n var date;\n if (dateStrings.date) {\n var parseYearResult = parseYear(dateStrings.date, additionalDigits);\n date = parseDate(parseYearResult.restDateString, parseYearResult.year);\n }\n if (!date || isNaN(date.getTime())) {\n return new Date(NaN);\n }\n var timestamp = date.getTime();\n var time = 0;\n var offset;\n if (dateStrings.time) {\n time = parseTime(dateStrings.time);\n if (isNaN(time)) {\n return new Date(NaN);\n }\n }\n if (dateStrings.timezone) {\n offset = parseTimezone(dateStrings.timezone);\n if (isNaN(offset)) {\n return new Date(NaN);\n }\n } else {\n var dirtyDate = new Date(timestamp + time); // js parsed string assuming it's in UTC timezone\n // but we need it to be parsed in our timezone\n // so we use utc values to build date in our timezone.\n // Year values from 0 to 99 map to the years 1900 to 1999\n // so set year explicitly with setFullYear.\n\n var result = new Date(0);\n result.setFullYear(dirtyDate.getUTCFullYear(), dirtyDate.getUTCMonth(), dirtyDate.getUTCDate());\n result.setHours(dirtyDate.getUTCHours(), dirtyDate.getUTCMinutes(), dirtyDate.getUTCSeconds(), dirtyDate.getUTCMilliseconds());\n return result;\n }\n return new Date(timestamp + time + offset);\n}\nvar patterns = {\n dateTimeDelimiter: /[T ]/,\n timeZoneDelimiter: /[Z ]/i,\n timezone: /([Z+-].*)$/\n};\nvar dateRegex = /^-?(?:(\\d{3})|(\\d{2})(?:-?(\\d{2}))?|W(\\d{2})(?:-?(\\d{1}))?|)$/;\nvar timeRegex = /^(\\d{2}(?:[.,]\\d*)?)(?::?(\\d{2}(?:[.,]\\d*)?))?(?::?(\\d{2}(?:[.,]\\d*)?))?$/;\nvar timezoneRegex = /^([+-])(\\d{2})(?::?(\\d{2}))?$/;\nfunction splitDateString(dateString) {\n var dateStrings = {};\n var array = dateString.split(patterns.dateTimeDelimiter);\n var timeString; // The regex match should only return at maximum two array elements.\n // [date], [time], or [date, time].\n\n if (array.length > 2) {\n return dateStrings;\n }\n if (/:/.test(array[0])) {\n timeString = array[0];\n } else {\n dateStrings.date = array[0];\n timeString = array[1];\n if (patterns.timeZoneDelimiter.test(dateStrings.date)) {\n dateStrings.date = dateString.split(patterns.timeZoneDelimiter)[0];\n timeString = dateString.substr(dateStrings.date.length, dateString.length);\n }\n }\n if (timeString) {\n var token = patterns.timezone.exec(timeString);\n if (token) {\n dateStrings.time = timeString.replace(token[1], '');\n dateStrings.timezone = token[1];\n } else {\n dateStrings.time = timeString;\n }\n }\n return dateStrings;\n}\nfunction parseYear(dateString, additionalDigits) {\n var regex = new RegExp('^(?:(\\\\d{4}|[+-]\\\\d{' + (4 + additionalDigits) + '})|(\\\\d{2}|[+-]\\\\d{' + (2 + additionalDigits) + '})$)');\n var captures = dateString.match(regex); // Invalid ISO-formatted year\n\n if (!captures) return {\n year: NaN,\n restDateString: ''\n };\n var year = captures[1] ? parseInt(captures[1]) : null;\n var century = captures[2] ? parseInt(captures[2]) : null; // either year or century is null, not both\n\n return {\n year: century === null ? year : century * 100,\n restDateString: dateString.slice((captures[1] || captures[2]).length)\n };\n}\nfunction parseDate(dateString, year) {\n // Invalid ISO-formatted year\n if (year === null) return new Date(NaN);\n var captures = dateString.match(dateRegex); // Invalid ISO-formatted string\n\n if (!captures) return new Date(NaN);\n var isWeekDate = !!captures[4];\n var dayOfYear = parseDateUnit(captures[1]);\n var month = parseDateUnit(captures[2]) - 1;\n var day = parseDateUnit(captures[3]);\n var week = parseDateUnit(captures[4]);\n var dayOfWeek = parseDateUnit(captures[5]) - 1;\n if (isWeekDate) {\n if (!validateWeekDate(year, week, dayOfWeek)) {\n return new Date(NaN);\n }\n return dayOfISOWeekYear(year, week, dayOfWeek);\n } else {\n var date = new Date(0);\n if (!validateDate(year, month, day) || !validateDayOfYearDate(year, dayOfYear)) {\n return new Date(NaN);\n }\n date.setUTCFullYear(year, month, Math.max(dayOfYear, day));\n return date;\n }\n}\nfunction parseDateUnit(value) {\n return value ? parseInt(value) : 1;\n}\nfunction parseTime(timeString) {\n var captures = timeString.match(timeRegex);\n if (!captures) return NaN; // Invalid ISO-formatted time\n\n var hours = parseTimeUnit(captures[1]);\n var minutes = parseTimeUnit(captures[2]);\n var seconds = parseTimeUnit(captures[3]);\n if (!validateTime(hours, minutes, seconds)) {\n return NaN;\n }\n return hours * millisecondsInHour + minutes * millisecondsInMinute + seconds * 1000;\n}\nfunction parseTimeUnit(value) {\n return value && parseFloat(value.replace(',', '.')) || 0;\n}\nfunction parseTimezone(timezoneString) {\n if (timezoneString === 'Z') return 0;\n var captures = timezoneString.match(timezoneRegex);\n if (!captures) return 0;\n var sign = captures[1] === '+' ? -1 : 1;\n var hours = parseInt(captures[2]);\n var minutes = captures[3] && parseInt(captures[3]) || 0;\n if (!validateTimezone(hours, minutes)) {\n return NaN;\n }\n return sign * (hours * millisecondsInHour + minutes * millisecondsInMinute);\n}\nfunction dayOfISOWeekYear(isoWeekYear, week, day) {\n var date = new Date(0);\n date.setUTCFullYear(isoWeekYear, 0, 4);\n var fourthOfJanuaryDay = date.getUTCDay() || 7;\n var diff = (week - 1) * 7 + day + 1 - fourthOfJanuaryDay;\n date.setUTCDate(date.getUTCDate() + diff);\n return date;\n} // Validation functions\n// February is null to handle the leap year (using ||)\n\nvar daysInMonths = [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nfunction isLeapYearIndex(year) {\n return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0;\n}\nfunction validateDate(year, month, date) {\n return month >= 0 && month <= 11 && date >= 1 && date <= (daysInMonths[month] || (isLeapYearIndex(year) ? 29 : 28));\n}\nfunction validateDayOfYearDate(year, dayOfYear) {\n return dayOfYear >= 1 && dayOfYear <= (isLeapYearIndex(year) ? 366 : 365);\n}\nfunction validateWeekDate(_year, week, day) {\n return week >= 1 && week <= 53 && day >= 0 && day <= 6;\n}\nfunction validateTime(hours, minutes, seconds) {\n if (hours === 24) {\n return minutes === 0 && seconds === 0;\n }\n return seconds >= 0 && seconds < 60 && minutes >= 0 && minutes < 60 && hours >= 0 && hours < 25;\n}\nfunction validateTimezone(_hours, minutes) {\n return minutes >= 0 && minutes <= 59;\n}","import { format, parseISO } from \"date-fns\";\nimport { graphql, Link } from \"gatsby\";\nimport Img from \"gatsby-image\";\nimport * as React from \"react\";\n\nimport {\n calculateReadTime,\n extractBlogSnippet,\n fluidImage,\n} from \"../../prismic-tools\";\nimport { Column, Grid, Gutter, MaxWidth, PageMaxWidth, Text } from \"..\";\nimport styled from \"styled-components\";\nimport { Color } from \"../../constants\";\n\ntype Props = {\n postNode: GatsbyTypes.FeaturedPostFragment;\n};\n\nexport const query = graphql`\n fragment FeaturedPost on PrismicBlogPost {\n uid\n data {\n title\n publish_date\n featured_image {\n alt\n dimensions {\n width\n height\n }\n url\n }\n ...ToolsBlogContent\n }\n }\n`;\n\nexport default function FeaturedPost({ postNode }: Props) {\n const post = postNode.data;\n if (!post) return null;\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n
\n \n {post.publish_date &&\n format(parseISO(post.publish_date), \"MMMM Y\")}\n \n \n \n {post.title}\n \n \n {extractBlogSnippet(post)}…\n \n
\n \n
\n Blog\n \n {calculateReadTime(post)} min read\n
\n \n \n Read More\n \n \n \n \n \n
\n
\n
\n
\n );\n}\n\nconst StyledAreaMain = styled.div`\n height: 100%;\n display: flex;\n flex-direction: column;\n`;\n\nconst StyledBottomRow = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin: -5px 0;\n\n > div {\n display: flex;\n align-items: center;\n }\n`;\n\nconst StyledLink = styled(Link)`\n padding: 5px 0;\n\n svg {\n fill: ${Color.blue1};\n margin-left: 6px;\n width: 13px;\n height: 12px;\n transition: transform 150ms;\n }\n\n &:hover {\n svg {\n transform: translateX(7px);\n }\n }\n`;\n\nconst StyledImageBorder = styled.div`\n border-radius: 8px;\n overflow: hidden;\n`;\n","import { parseISO } from \"date-fns\";\nimport { graphql, Link } from \"gatsby\";\nimport * as React from \"react\";\nimport styled from \"styled-components\";\nimport {\n BlogCard,\n Column,\n CurvedSectionDividerGlow,\n Grid,\n Gutter,\n HelmetSeo,\n Layout,\n PageMaxWidth,\n Section,\n Text,\n Visibility,\n} from \"../components\";\nimport { FeaturedPost } from \"../components/blog\";\nimport { Color, Dimen } from \"../constants\";\nimport { calculateReadTime, extractBlogSnippet } from \"../prismic-tools\";\nimport { unwrapConnection } from \"../util\";\n\ntype Props = {\n data: GatsbyTypes.BlogIndexQuery;\n pageContext: any;\n};\n\nexport const query = graphql`\n query BlogIndex($skip: Int!, $limit: Int!) {\n prismicBlogIndexPage {\n data {\n featured_post {\n document {\n __typename\n ... on PrismicBlogPost {\n ...FeaturedPost\n }\n }\n }\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 skip: $skip\n limit: $limit\n sort: { fields: [data___publish_date], order: DESC }\n ) {\n edges {\n node {\n uid\n data {\n title\n publish_date\n featured_image {\n alt\n dimensions {\n width\n height\n }\n url\n }\n ...ToolsBlogContent\n }\n }\n }\n }\n }\n`;\n\nexport default function BlogIndexTemplate({ data, pageContext }: Props) {\n const page = data.prismicBlogIndexPage?.data;\n if (!page) throw new Error(\"Page missing\");\n\n const postNodes = unwrapConnection(data.allPrismicBlogPost);\n\n let featuredPostNode = postNodes[0];\n const document = data.prismicBlogIndexPage?.data?.featured_post?.document;\n if (document?.__typename === \"PrismicBlogPost\") {\n featuredPostNode = document;\n }\n\n const { currentPageNumber } = pageContext;\n const helmetSeoProps = {\n ...page,\n ...(currentPageNumber > 1 && {\n seo_title: `${page.seo_title} | Page ${currentPageNumber}`,\n }),\n };\n\n return (\n \n \n\n {currentPageNumber === 1 ? (\n <>\n
\n \n \n \n \n
\n \n \n ) : (\n \n )}\n\n
\n \n \n \n {postNodes.map((postNode) => {\n const post = postNode.data;\n if (!post) return null;\n return (\n \n \n \n \n \n \n );\n })}\n \n \n\n \n {pageContext.previousPagePath ? (\n \n \n \n \n Previous Page\n \n ) : (\n \n \n \n \n Previous Page\n \n )}\n\n
\n\n {pageContext.nextPagePath ? (\n \n Next Page\n \n \n \n \n ) : (\n \n Next Page\n \n \n \n \n )}\n \n \n \n
\n
\n );\n}\n\nconst StyledPageLinks = styled.div`\n display: flex;\n align-items: stretch;\n justify-content: center;\n\n > a,\n > span {\n height: 42px;\n width: 140px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n\n svg {\n fill: ${Color.dark4};\n margin-left: 6px;\n width: 13px;\n height: 12px;\n transition: all 150ms;\n\n &.mirror {\n transform: rotate(180deg);\n }\n }\n }\n\n > span {\n opacity: 0.25;\n }\n\n > a {\n span {\n transition: color 0.25s;\n }\n\n &:hover {\n span {\n color: ${Color.blue1};\n }\n\n svg {\n fill: ${Color.blue1};\n transform: translateX(7px);\n\n &.mirror {\n transform: translateX(-7px) rotate(180deg);\n }\n }\n }\n }\n\n > .divider {\n width: 1px;\n background-color: ${Color.orange1};\n margin: 0 ${Dimen.gutterWidth / 2}px;\n }\n`;\n","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"],"sourceRoot":""}