-
Notifications
You must be signed in to change notification settings - Fork 0
/
8c033e095789c4c224b38ecf9addd0a89534142e-2f2eae825a6ce756439d.js.map
1 lines (1 loc) · 160 KB
/
8c033e095789c4c224b38ecf9addd0a89534142e-2f2eae825a6ce756439d.js.map
1
{"version":3,"file":"8c033e095789c4c224b38ecf9addd0a89534142e-2f2eae825a6ce756439d.js","mappings":"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","sources":["webpack://robli-co-gatsby-src/./node_modules/@react-icons/all-files/fa/FaRss.js","webpack://robli-co-gatsby-src/./node_modules/@react-icons/all-files/lib/esm/iconsManifest.js","webpack://robli-co-gatsby-src/./node_modules/@react-icons/all-files/lib/esm/iconContext.js","webpack://robli-co-gatsby-src/./node_modules/@react-icons/all-files/lib/esm/iconBase.js","webpack://robli-co-gatsby-src/./node_modules/camelcase/index.js","webpack://robli-co-gatsby-src/./node_modules/classnames/index.js","webpack://robli-co-gatsby-src/./node_modules/gatsby/dist/internal-plugins/bundle-optimisations/polyfills/object-assign.js","webpack://robli-co-gatsby-src/../src/image-utils.ts","webpack://robli-co-gatsby-src/../src/components/hooks.ts","webpack://robli-co-gatsby-src/../src/components/layout-wrapper.tsx","webpack://robli-co-gatsby-src/../src/components/picture.tsx","webpack://robli-co-gatsby-src/../src/components/placeholder.tsx","webpack://robli-co-gatsby-src/../src/components/main-image.tsx","webpack://robli-co-gatsby-src/../src/components/gatsby-image.server.tsx","webpack://robli-co-gatsby-src/../src/components/gatsby-image.browser.tsx","webpack://robli-co-gatsby-src/../src/components/static-image.server.tsx","webpack://robli-co-gatsby-src/../src/components/static-image.tsx","webpack://robli-co-gatsby-src/./src/components/custom-styled-components.js","webpack://robli-co-gatsby-src/./node_modules/react-bootstrap/esm/Container.js","webpack://robli-co-gatsby-src/./src/components/navbar.js","webpack://robli-co-gatsby-src/./src/components/layout.js","webpack://robli-co-gatsby-src/./node_modules/react-helmet/es/Helmet.js","webpack://robli-co-gatsby-src/./src/components/seo.js","webpack://robli-co-gatsby-src/./node_modules/react-bootstrap/esm/ThemeProvider.js","webpack://robli-co-gatsby-src/./node_modules/react-fast-compare/index.js","webpack://robli-co-gatsby-src/./node_modules/react-side-effect/lib/index.js"],"sourcesContent":["// THIS FILE IS AUTO GENERATED\nvar GenIcon = require('../lib').GenIcon\nmodule.exports.FaRss = function FaRss (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 448 512\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M128.081 415.959c0 35.369-28.672 64.041-64.041 64.041S0 451.328 0 415.959s28.672-64.041 64.041-64.041 64.04 28.673 64.04 64.041zm175.66 47.25c-8.354-154.6-132.185-278.587-286.95-286.95C7.656 175.765 0 183.105 0 192.253v48.069c0 8.415 6.49 15.472 14.887 16.018 111.832 7.284 201.473 96.702 208.772 208.772.547 8.397 7.604 14.887 16.018 14.887h48.069c9.149.001 16.489-7.655 15.995-16.79zm144.249.288C439.596 229.677 251.465 40.445 16.503 32.01 7.473 31.686 0 38.981 0 48.016v48.068c0 8.625 6.835 15.645 15.453 15.999 191.179 7.839 344.627 161.316 352.465 352.465.353 8.618 7.373 15.453 15.999 15.453h48.068c9.034-.001 16.329-7.474 16.005-16.504z\"}}]})(props);\n};\n","export var IconsManifest = [\n {\n \"id\": \"fa\",\n \"name\": \"Font Awesome\",\n \"projectUrl\": \"https://fontawesome.com/\",\n \"license\": \"CC BY 4.0 License\",\n \"licenseUrl\": \"https://creativecommons.org/licenses/by/4.0/\"\n },\n {\n \"id\": \"io\",\n \"name\": \"Ionicons 4\",\n \"projectUrl\": \"https://ionicons.com/\",\n \"license\": \"MIT\",\n \"licenseUrl\": \"https://github.com/ionic-team/ionicons/blob/master/LICENSE\"\n },\n {\n \"id\": \"io5\",\n \"name\": \"Ionicons 5\",\n \"projectUrl\": \"https://ionicons.com/\",\n \"license\": \"MIT\",\n \"licenseUrl\": \"https://github.com/ionic-team/ionicons/blob/master/LICENSE\"\n },\n {\n \"id\": \"md\",\n \"name\": \"Material Design icons\",\n \"projectUrl\": \"http://google.github.io/material-design-icons/\",\n \"license\": \"Apache License Version 2.0\",\n \"licenseUrl\": \"https://github.com/google/material-design-icons/blob/master/LICENSE\"\n },\n {\n \"id\": \"ti\",\n \"name\": \"Typicons\",\n \"projectUrl\": \"http://s-ings.com/typicons/\",\n \"license\": \"CC BY-SA 3.0\",\n \"licenseUrl\": \"https://creativecommons.org/licenses/by-sa/3.0/\"\n },\n {\n \"id\": \"go\",\n \"name\": \"Github Octicons icons\",\n \"projectUrl\": \"https://octicons.github.com/\",\n \"license\": \"MIT\",\n \"licenseUrl\": \"https://github.com/primer/octicons/blob/master/LICENSE\"\n },\n {\n \"id\": \"fi\",\n \"name\": \"Feather\",\n \"projectUrl\": \"https://feathericons.com/\",\n \"license\": \"MIT\",\n \"licenseUrl\": \"https://github.com/feathericons/feather/blob/master/LICENSE\"\n },\n {\n \"id\": \"gi\",\n \"name\": \"Game Icons\",\n \"projectUrl\": \"https://game-icons.net/\",\n \"license\": \"CC BY 3.0\",\n \"licenseUrl\": \"https://creativecommons.org/licenses/by/3.0/\"\n },\n {\n \"id\": \"wi\",\n \"name\": \"Weather Icons\",\n \"projectUrl\": \"https://erikflowers.github.io/weather-icons/\",\n \"license\": \"SIL OFL 1.1\",\n \"licenseUrl\": \"http://scripts.sil.org/OFL\"\n },\n {\n \"id\": \"di\",\n \"name\": \"Devicons\",\n \"projectUrl\": \"https://vorillaz.github.io/devicons/\",\n \"license\": \"MIT\",\n \"licenseUrl\": \"https://opensource.org/licenses/MIT\"\n },\n {\n \"id\": \"ai\",\n \"name\": \"Ant Design Icons\",\n \"projectUrl\": \"https://github.com/ant-design/ant-design-icons\",\n \"license\": \"MIT\",\n \"licenseUrl\": \"https://opensource.org/licenses/MIT\"\n },\n {\n \"id\": \"bs\",\n \"name\": \"Bootstrap Icons\",\n \"projectUrl\": \"https://github.com/twbs/icons\",\n \"license\": \"MIT\",\n \"licenseUrl\": \"https://opensource.org/licenses/MIT\"\n },\n {\n \"id\": \"ri\",\n \"name\": \"Remix Icon\",\n \"projectUrl\": \"https://github.com/Remix-Design/RemixIcon\",\n \"license\": \"Apache License Version 2.0\",\n \"licenseUrl\": \"http://www.apache.org/licenses/\"\n },\n {\n \"id\": \"fc\",\n \"name\": \"Flat Color Icons\",\n \"projectUrl\": \"https://github.com/icons8/flat-color-icons\",\n \"license\": \"MIT\",\n \"licenseUrl\": \"https://opensource.org/licenses/MIT\"\n },\n {\n \"id\": \"gr\",\n \"name\": \"Grommet-Icons\",\n \"projectUrl\": \"https://github.com/grommet/grommet-icons\",\n \"license\": \"Apache License Version 2.0\",\n \"licenseUrl\": \"http://www.apache.org/licenses/\"\n },\n {\n \"id\": \"hi\",\n \"name\": \"Heroicons\",\n \"projectUrl\": \"https://github.com/refactoringui/heroicons\",\n \"license\": \"MIT\",\n \"licenseUrl\": \"https://opensource.org/licenses/MIT\"\n },\n {\n \"id\": \"si\",\n \"name\": \"Simple Icons\",\n \"projectUrl\": \"https://simpleicons.org/\",\n \"license\": \"CC0 1.0 Universal\",\n \"licenseUrl\": \"https://creativecommons.org/publicdomain/zero/1.0/\"\n },\n {\n \"id\": \"im\",\n \"name\": \"IcoMoon Free\",\n \"projectUrl\": \"https://github.com/Keyamoon/IcoMoon-Free\",\n \"license\": \"CC BY 4.0 License\"\n },\n {\n \"id\": \"bi\",\n \"name\": \"BoxIcons\",\n \"projectUrl\": \"https://github.com/atisawd/boxicons\",\n \"license\": \"CC BY 4.0 License\"\n },\n {\n \"id\": \"cg\",\n \"name\": \"css.gg\",\n \"projectUrl\": \"https://github.com/astrit/css.gg\",\n \"license\": \"MIT\",\n \"licenseUrl\": \"https://opensource.org/licenses/MIT\"\n },\n {\n \"id\": \"vsc\",\n \"name\": \"VS Code Icons\",\n \"projectUrl\": \"https://github.com/microsoft/vscode-codicons\",\n \"license\": \"CC BY 4.0\",\n \"licenseUrl\": \"https://creativecommons.org/licenses/by/4.0/\"\n }\n]","import React from 'react';\nexport var DefaultContext = {\n color: undefined,\n size: undefined,\n className: undefined,\n style: undefined,\n attr: undefined\n};\nexport var IconContext = React.createContext && React.createContext(DefaultContext);","var __assign = this && this.__assign || function () {\n __assign = Object.assign || function (t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n\n return t;\n };\n\n return __assign.apply(this, arguments);\n};\n\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\n\nimport React from 'react';\nimport { IconContext, DefaultContext } from './iconContext';\n\nfunction Tree2Element(tree) {\n return tree && tree.map(function (node, i) {\n return React.createElement(node.tag, __assign({\n key: i\n }, node.attr), Tree2Element(node.child));\n });\n}\n\nexport function GenIcon(data) {\n return function (props) {\n return React.createElement(IconBase, __assign({\n attr: __assign({}, data.attr)\n }, props), Tree2Element(data.child));\n };\n}\nexport function IconBase(props) {\n var elem = function (conf) {\n var attr = props.attr,\n size = props.size,\n title = props.title,\n svgProps = __rest(props, [\"attr\", \"size\", \"title\"]);\n\n var computedSize = size || conf.size || \"1em\";\n var className;\n if (conf.className) className = conf.className;\n if (props.className) className = (className ? className + ' ' : '') + props.className;\n return React.createElement(\"svg\", __assign({\n stroke: \"currentColor\",\n fill: \"currentColor\",\n strokeWidth: \"0\"\n }, conf.attr, attr, svgProps, {\n className: className,\n style: __assign(__assign({\n color: props.color || conf.color\n }, conf.style), props.style),\n height: computedSize,\n width: computedSize,\n xmlns: \"http://www.w3.org/2000/svg\"\n }), title && React.createElement(\"title\", null, title), props.children);\n };\n\n return IconContext !== undefined ? React.createElement(IconContext.Consumer, null, function (conf) {\n return elem(conf);\n }) : elem(DefaultContext);\n}","'use strict';\n\nconst UPPERCASE = /[\\p{Lu}]/u;\nconst LOWERCASE = /[\\p{Ll}]/u;\nconst LEADING_CAPITAL = /^[\\p{Lu}](?![\\p{Lu}])/gu;\nconst IDENTIFIER = /([\\p{Alpha}\\p{N}_]|$)/u;\nconst SEPARATORS = /[_.\\- ]+/;\n\nconst LEADING_SEPARATORS = new RegExp('^' + SEPARATORS.source);\nconst SEPARATORS_AND_IDENTIFIER = new RegExp(SEPARATORS.source + IDENTIFIER.source, 'gu');\nconst NUMBERS_AND_IDENTIFIER = new RegExp('\\\\d+' + IDENTIFIER.source, 'gu');\n\nconst preserveCamelCase = (string, toLowerCase, toUpperCase) => {\n\tlet isLastCharLower = false;\n\tlet isLastCharUpper = false;\n\tlet isLastLastCharUpper = false;\n\n\tfor (let i = 0; i < string.length; i++) {\n\t\tconst character = string[i];\n\n\t\tif (isLastCharLower && UPPERCASE.test(character)) {\n\t\t\tstring = string.slice(0, i) + '-' + string.slice(i);\n\t\t\tisLastCharLower = false;\n\t\t\tisLastLastCharUpper = isLastCharUpper;\n\t\t\tisLastCharUpper = true;\n\t\t\ti++;\n\t\t} else if (isLastCharUpper && isLastLastCharUpper && LOWERCASE.test(character)) {\n\t\t\tstring = string.slice(0, i - 1) + '-' + string.slice(i - 1);\n\t\t\tisLastLastCharUpper = isLastCharUpper;\n\t\t\tisLastCharUpper = false;\n\t\t\tisLastCharLower = true;\n\t\t} else {\n\t\t\tisLastCharLower = toLowerCase(character) === character && toUpperCase(character) !== character;\n\t\t\tisLastLastCharUpper = isLastCharUpper;\n\t\t\tisLastCharUpper = toUpperCase(character) === character && toLowerCase(character) !== character;\n\t\t}\n\t}\n\n\treturn string;\n};\n\nconst preserveConsecutiveUppercase = (input, toLowerCase) => {\n\tLEADING_CAPITAL.lastIndex = 0;\n\n\treturn input.replace(LEADING_CAPITAL, m1 => toLowerCase(m1));\n};\n\nconst postProcess = (input, toUpperCase) => {\n\tSEPARATORS_AND_IDENTIFIER.lastIndex = 0;\n\tNUMBERS_AND_IDENTIFIER.lastIndex = 0;\n\n\treturn input.replace(SEPARATORS_AND_IDENTIFIER, (_, identifier) => toUpperCase(identifier))\n\t\t.replace(NUMBERS_AND_IDENTIFIER, m => toUpperCase(m));\n};\n\nconst camelCase = (input, options) => {\n\tif (!(typeof input === 'string' || Array.isArray(input))) {\n\t\tthrow new TypeError('Expected the input to be `string | string[]`');\n\t}\n\n\toptions = {\n\t\tpascalCase: false,\n\t\tpreserveConsecutiveUppercase: false,\n\t\t...options\n\t};\n\n\tif (Array.isArray(input)) {\n\t\tinput = input.map(x => x.trim())\n\t\t\t.filter(x => x.length)\n\t\t\t.join('-');\n\t} else {\n\t\tinput = input.trim();\n\t}\n\n\tif (input.length === 0) {\n\t\treturn '';\n\t}\n\n\tconst toLowerCase = options.locale === false ?\n\t\tstring => string.toLowerCase() :\n\t\tstring => string.toLocaleLowerCase(options.locale);\n\tconst toUpperCase = options.locale === false ?\n\t\tstring => string.toUpperCase() :\n\t\tstring => string.toLocaleUpperCase(options.locale);\n\n\tif (input.length === 1) {\n\t\treturn options.pascalCase ? toUpperCase(input) : toLowerCase(input);\n\t}\n\n\tconst hasUpperCase = input !== toLowerCase(input);\n\n\tif (hasUpperCase) {\n\t\tinput = preserveCamelCase(input, toLowerCase, toUpperCase);\n\t}\n\n\tinput = input.replace(LEADING_SEPARATORS, '');\n\n\tif (options.preserveConsecutiveUppercase) {\n\t\tinput = preserveConsecutiveUppercase(input, toLowerCase);\n\t} else {\n\t\tinput = toLowerCase(input);\n\t}\n\n\tif (options.pascalCase) {\n\t\tinput = toUpperCase(input.charAt(0)) + input.slice(1);\n\t}\n\n\treturn postProcess(input, toUpperCase);\n};\n\nmodule.exports = camelCase;\n// TODO: Remove this for the next major release\nmodule.exports.default = camelCase;\n","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\tvar nativeCodeString = '[native code]';\n\n\tfunction classNames() {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(arg);\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\tif (arg.length) {\n\t\t\t\t\tvar inner = classNames.apply(null, arg);\n\t\t\t\t\tif (inner) {\n\t\t\t\t\t\tclasses.push(inner);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\t\t\tclasses.push(arg.toString());\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tfor (var key in arg) {\n\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","\"use strict\";\n\nmodule.exports = Object.assign;\n//# sourceMappingURL=object-assign.js.map","import camelCase from \"camelcase\"\nimport type { IGatsbyImageData } from \"./index\"\n\nconst DEFAULT_PIXEL_DENSITIES = [0.25, 0.5, 1, 2]\nexport const DEFAULT_BREAKPOINTS = [750, 1080, 1366, 1920]\nexport const EVERY_BREAKPOINT = [\n 320, 654, 768, 1024, 1366, 1600, 1920, 2048, 2560, 3440, 3840, 4096,\n]\nconst DEFAULT_FLUID_WIDTH = 800\nconst DEFAULT_FIXED_WIDTH = 800\nconst DEFAULT_ASPECT_RATIO = 4 / 3\n\nexport type Fit = \"cover\" | \"fill\" | \"inside\" | \"outside\" | \"contain\"\n\nexport type Layout = \"fixed\" | \"fullWidth\" | \"constrained\"\nexport type ImageFormat = \"jpg\" | \"png\" | \"webp\" | \"avif\" | \"auto\" | \"\"\n\n/**\n * The minimal required reporter, as we don't want to import it from gatsby-cli\n */\nexport interface IReporter {\n warn(message: string): void\n}\n\nexport interface ISharpGatsbyImageArgs {\n layout?: Layout\n formats?: Array<ImageFormat>\n placeholder?: \"tracedSVG\" | \"dominantColor\" | \"blurred\" | \"none\"\n tracedSVGOptions?: Record<string, unknown>\n width?: number\n height?: number\n aspectRatio?: number\n sizes?: string\n quality?: number\n transformOptions?: {\n fit?: Fit\n cropFocus?: number | string\n duotone?: {\n highlight: string\n shadow: string\n opacity?: number\n }\n grayscale?: boolean\n rotate?: number\n trim?: number\n }\n jpgOptions?: Record<string, unknown>\n pngOptions?: Record<string, unknown>\n webpOptions?: Record<string, unknown>\n avifOptions?: Record<string, unknown>\n blurredOptions?: { width?: number; toFormat?: ImageFormat }\n breakpoints?: Array<number>\n outputPixelDensities?: Array<number>\n backgroundColor?: string\n}\n\nexport interface IImageSizeArgs {\n width?: number\n height?: number\n layout?: Layout\n filename: string\n outputPixelDensities?: Array<number>\n breakpoints?: Array<number>\n fit?: Fit\n reporter?: IReporter\n sourceMetadata: { width: number; height: number }\n}\n\nexport interface IImageSizes {\n sizes: Array<number>\n presentationWidth: number\n presentationHeight: number\n aspectRatio: number\n unscaledWidth: number\n}\n\nexport interface IImage {\n src: string\n width: number\n height: number\n format: ImageFormat\n}\n\nexport interface IGatsbyImageHelperArgs {\n pluginName: string\n generateImageSource: (\n filename: string,\n width: number,\n height: number,\n format: ImageFormat,\n fit?: Fit,\n options?: Record<string, unknown>\n ) => IImage\n layout?: Layout\n formats?: Array<ImageFormat>\n filename: string\n placeholderURL?: string\n width?: number\n height?: number\n sizes?: string\n reporter?: IReporter\n sourceMetadata?: { width: number; height: number; format: ImageFormat }\n fit?: Fit\n options?: Record<string, unknown>\n breakpoints?: Array<number>\n backgroundColor?: string\n aspectRatio?: number\n}\n\nconst warn = (message: string): void => console.warn(message)\n\nconst sortNumeric = (a: number, b: number): number => a - b\n\nexport const getSizes = (width: number, layout: Layout): string | undefined => {\n switch (layout) {\n // If screen is wider than the max size, image width is the max size,\n // otherwise it's the width of the screen\n case `constrained`:\n return `(min-width: ${width}px) ${width}px, 100vw`\n\n // Image is always the same width, whatever the size of the screen\n case `fixed`:\n return `${width}px`\n\n // Image is always the width of the screen\n case `fullWidth`:\n return `100vw`\n\n default:\n return undefined\n }\n}\n\nexport const getSrcSet = (images: Array<IImage>): string =>\n images.map(image => `${image.src} ${image.width}w`).join(`,\\n`)\n\nexport function formatFromFilename(filename: string): ImageFormat | undefined {\n const dot = filename.lastIndexOf(`.`)\n if (dot !== -1) {\n const ext = filename.slice(dot + 1)\n if (ext === `jpeg`) {\n return `jpg`\n }\n if (ext.length === 3 || ext.length === 4) {\n return ext as ImageFormat\n }\n }\n return undefined\n}\n\nexport function setDefaultDimensions(\n args: IGatsbyImageHelperArgs\n): IGatsbyImageHelperArgs {\n let {\n layout = `constrained`,\n width,\n height,\n sourceMetadata,\n breakpoints,\n aspectRatio,\n formats = [`auto`, `webp`],\n } = args\n formats = formats.map(format => format.toLowerCase() as ImageFormat)\n layout = camelCase(layout) as Layout\n\n if (width && height) {\n return { ...args, formats, layout, aspectRatio: width / height }\n }\n if (sourceMetadata.width && sourceMetadata.height && !aspectRatio) {\n aspectRatio = sourceMetadata.width / sourceMetadata.height\n }\n\n if (layout === `fullWidth`) {\n width = width || sourceMetadata.width || breakpoints[breakpoints.length - 1]\n height = height || Math.round(width / (aspectRatio || DEFAULT_ASPECT_RATIO))\n } else {\n if (!width) {\n if (height && aspectRatio) {\n width = height * aspectRatio\n } else if (sourceMetadata.width) {\n width = sourceMetadata.width\n } else if (height) {\n width = Math.round(height / DEFAULT_ASPECT_RATIO)\n } else {\n width = DEFAULT_FIXED_WIDTH\n }\n }\n\n if (aspectRatio && !height) {\n height = Math.round(width / aspectRatio)\n } else if (!aspectRatio) {\n aspectRatio = width / height\n }\n }\n return { ...args, width, height, aspectRatio, layout, formats }\n}\n\n/**\n * Use this for getting an image for the blurred placeholder. This ensures the\n * aspect ratio and crop match the main image\n */\nexport function getLowResolutionImageURL(\n args: IGatsbyImageHelperArgs,\n width = 20\n): string {\n args = setDefaultDimensions(args)\n const { generateImageSource, filename, aspectRatio } = args\n return generateImageSource(\n filename,\n width,\n Math.round(width / aspectRatio),\n args.sourceMetadata.format || `jpg`,\n args.fit,\n args.options\n )?.src\n}\n\nexport function generateImageData(\n args: IGatsbyImageHelperArgs\n): IGatsbyImageData {\n args = setDefaultDimensions(args)\n\n let {\n pluginName,\n sourceMetadata,\n generateImageSource,\n layout,\n fit,\n options,\n width,\n height,\n filename,\n reporter = { warn },\n backgroundColor,\n placeholderURL,\n } = args\n\n if (!pluginName) {\n reporter.warn(\n `[gatsby-plugin-image] \"generateImageData\" was not passed a plugin name`\n )\n }\n\n if (typeof generateImageSource !== `function`) {\n throw new Error(`generateImageSource must be a function`)\n }\n\n if (!sourceMetadata || (!sourceMetadata.width && !sourceMetadata.height)) {\n // No metadata means we let the CDN handle max size etc, aspect ratio etc\n sourceMetadata = {\n width,\n height,\n format: sourceMetadata?.format || formatFromFilename(filename) || `auto`,\n }\n } else if (!sourceMetadata.format) {\n sourceMetadata.format = formatFromFilename(filename)\n }\n\n const formats = new Set<ImageFormat>(args.formats)\n\n if (formats.size === 0 || formats.has(`auto`) || formats.has(``)) {\n formats.delete(`auto`)\n formats.delete(``)\n formats.add(sourceMetadata.format)\n }\n\n if (formats.has(`jpg`) && formats.has(`png`)) {\n reporter.warn(\n `[${pluginName}] Specifying both 'jpg' and 'png' formats is not supported. Using 'auto' instead`\n )\n if (sourceMetadata.format === `jpg`) {\n formats.delete(`png`)\n } else {\n formats.delete(`jpg`)\n }\n }\n\n const imageSizes = calculateImageSizes({ ...args, sourceMetadata })\n\n const result: IGatsbyImageData[\"images\"] = {\n sources: [],\n }\n\n let sizes = args.sizes\n if (!sizes) {\n sizes = getSizes(imageSizes.presentationWidth, layout)\n }\n\n formats.forEach(format => {\n const images = imageSizes.sizes\n .map(size => {\n const imageSrc = generateImageSource(\n filename,\n size,\n Math.round(size / imageSizes.aspectRatio),\n format,\n fit,\n options\n )\n if (\n !imageSrc?.width ||\n !imageSrc.height ||\n !imageSrc.src ||\n !imageSrc.format\n ) {\n reporter.warn(\n `[${pluginName}] The resolver for image ${filename} returned an invalid value.`\n )\n return undefined\n }\n return imageSrc\n })\n .filter(Boolean)\n\n if (format === `jpg` || format === `png` || format === `auto`) {\n const unscaled =\n images.find(img => img.width === imageSizes.unscaledWidth) || images[0]\n\n if (unscaled) {\n result.fallback = {\n src: unscaled.src,\n srcSet: getSrcSet(images),\n sizes,\n }\n }\n } else {\n result.sources?.push({\n srcSet: getSrcSet(images),\n sizes,\n type: `image/${format}`,\n })\n }\n })\n\n const imageProps: Partial<IGatsbyImageData> = {\n images: result,\n layout,\n backgroundColor,\n }\n\n if (placeholderURL) {\n imageProps.placeholder = { fallback: placeholderURL }\n }\n\n switch (layout) {\n case `fixed`:\n imageProps.width = imageSizes.presentationWidth\n imageProps.height = imageSizes.presentationHeight\n break\n\n case `fullWidth`:\n imageProps.width = 1\n imageProps.height = 1 / imageSizes.aspectRatio\n break\n\n case `constrained`:\n imageProps.width = args.width || imageSizes.presentationWidth || 1\n imageProps.height = (imageProps.width || 1) / imageSizes.aspectRatio\n }\n\n return imageProps as IGatsbyImageData\n}\n\nconst dedupeAndSortDensities = (values: Array<number>): Array<number> =>\n Array.from(new Set([1, ...values])).sort(sortNumeric)\n\nexport function calculateImageSizes(args: IImageSizeArgs): IImageSizes {\n const {\n width,\n height,\n filename,\n layout = `constrained`,\n sourceMetadata: imgDimensions,\n reporter = { warn },\n breakpoints = DEFAULT_BREAKPOINTS,\n } = args\n\n // check that all dimensions provided are positive\n const userDimensions = { width, height }\n const erroneousUserDimensions = Object.entries(userDimensions).filter(\n ([_, size]) => typeof size === `number` && size < 1\n )\n if (erroneousUserDimensions.length) {\n throw new Error(\n `Specified dimensions for images must be positive numbers (> 0). Problem dimensions you have are ${erroneousUserDimensions\n .map(dim => dim.join(`: `))\n .join(`, `)}`\n )\n }\n\n if (layout === `fixed`) {\n return fixedImageSizes(args)\n } else if (layout === `constrained`) {\n return responsiveImageSizes(args)\n } else if (layout === `fullWidth`) {\n return responsiveImageSizes({ breakpoints, ...args })\n } else {\n reporter.warn(\n `No valid layout was provided for the image at ${filename}. Valid image layouts are fixed, fullWidth, and constrained. Found ${layout}`\n )\n return {\n sizes: [imgDimensions.width],\n presentationWidth: imgDimensions.width,\n presentationHeight: imgDimensions.height,\n aspectRatio: imgDimensions.width / imgDimensions.height,\n unscaledWidth: imgDimensions.width,\n }\n }\n}\nexport function fixedImageSizes({\n filename,\n sourceMetadata: imgDimensions,\n width,\n height,\n fit = `cover`,\n outputPixelDensities = DEFAULT_PIXEL_DENSITIES,\n reporter = { warn },\n}: IImageSizeArgs): IImageSizes {\n let aspectRatio = imgDimensions.width / imgDimensions.height\n // Sort, dedupe and ensure there's a 1\n const densities = dedupeAndSortDensities(outputPixelDensities)\n\n // If both are provided then we need to check the fit\n if (width && height) {\n const calculated = getDimensionsAndAspectRatio(imgDimensions, {\n width,\n height,\n fit,\n })\n width = calculated.width\n height = calculated.height\n aspectRatio = calculated.aspectRatio\n }\n\n if (!width) {\n if (!height) {\n width = DEFAULT_FIXED_WIDTH\n } else {\n width = Math.round(height * aspectRatio)\n }\n } else if (!height) {\n height = Math.round(width / aspectRatio)\n }\n\n const originalWidth = width // will use this for presentationWidth, don't want to lose it\n const isTopSizeOverriden =\n imgDimensions.width < width || imgDimensions.height < (height as number)\n\n // If the image is smaller than requested, warn the user that it's being processed as such\n // print out this message with the necessary information before we overwrite it for sizing\n if (isTopSizeOverriden) {\n const fixedDimension = imgDimensions.width < width ? `width` : `height`\n reporter.warn(`\nThe requested ${fixedDimension} \"${\n fixedDimension === `width` ? width : height\n }px\" for the image ${filename} was larger than the actual image ${fixedDimension} of ${\n imgDimensions[fixedDimension]\n }px. If possible, replace the current image with a larger one.`)\n\n if (fixedDimension === `width`) {\n width = imgDimensions.width\n height = Math.round(width / aspectRatio)\n } else {\n height = imgDimensions.height\n width = height * aspectRatio\n }\n }\n\n const sizes = densities\n .filter(size => size >= 1) // remove smaller densities because fixed images don't need them\n .map(density => Math.round(density * (width as number)))\n .filter(size => size <= imgDimensions.width)\n\n return {\n sizes,\n aspectRatio,\n presentationWidth: originalWidth,\n presentationHeight: Math.round(originalWidth / aspectRatio),\n unscaledWidth: width,\n }\n}\n\nexport function responsiveImageSizes({\n sourceMetadata: imgDimensions,\n width,\n height,\n fit = `cover`,\n outputPixelDensities = DEFAULT_PIXEL_DENSITIES,\n breakpoints,\n layout,\n}: IImageSizeArgs): IImageSizes {\n let sizes\n let aspectRatio = imgDimensions.width / imgDimensions.height\n // Sort, dedupe and ensure there's a 1\n const densities = dedupeAndSortDensities(outputPixelDensities)\n\n // If both are provided then we need to check the fit\n if (width && height) {\n const calculated = getDimensionsAndAspectRatio(imgDimensions, {\n width,\n height,\n fit,\n })\n width = calculated.width\n height = calculated.height\n aspectRatio = calculated.aspectRatio\n }\n\n // Case 1: width of height were passed in, make sure it isn't larger than the actual image\n width = width && Math.min(width, imgDimensions.width)\n height = height && Math.min(height, imgDimensions.height)\n\n // Case 2: neither width or height were passed in, use default size\n if (!width && !height) {\n width = Math.min(DEFAULT_FLUID_WIDTH, imgDimensions.width)\n height = width / aspectRatio\n }\n\n // if it still hasn't been found, calculate width from the derived height.\n // TS isn't smart enough to realise the type for height has been narrowed here\n if (!width) {\n width = (height as number) * aspectRatio\n }\n\n const originalWidth = width\n const isTopSizeOverriden =\n imgDimensions.width < width || imgDimensions.height < (height as number)\n if (isTopSizeOverriden) {\n width = imgDimensions.width\n height = imgDimensions.height\n }\n\n width = Math.round(width)\n\n if (breakpoints?.length > 0) {\n sizes = breakpoints.filter(size => size <= imgDimensions.width)\n\n // If a larger breakpoint has been filtered-out, add the actual image width instead\n if (\n sizes.length < breakpoints.length &&\n !sizes.includes(imgDimensions.width)\n ) {\n sizes.push(imgDimensions.width)\n }\n } else {\n sizes = densities.map(density => Math.round(density * (width as number)))\n sizes = sizes.filter(size => size <= imgDimensions.width)\n }\n\n // ensure that the size passed in is included in the final output\n if (layout === `constrained` && !sizes.includes(width)) {\n sizes.push(width)\n }\n sizes = sizes.sort(sortNumeric)\n return {\n sizes,\n aspectRatio,\n presentationWidth: originalWidth,\n presentationHeight: Math.round(originalWidth / aspectRatio),\n unscaledWidth: width,\n }\n}\n\nexport function getDimensionsAndAspectRatio(\n dimensions,\n options\n): { width: number; height: number; aspectRatio: number } {\n // Calculate the eventual width/height of the image.\n const imageAspectRatio = dimensions.width / dimensions.height\n\n let width = options.width\n let height = options.height\n\n switch (options.fit) {\n case `fill`: {\n width = options.width ? options.width : dimensions.width\n height = options.height ? options.height : dimensions.height\n break\n }\n case `inside`: {\n const widthOption = options.width\n ? options.width\n : Number.MAX_SAFE_INTEGER\n const heightOption = options.height\n ? options.height\n : Number.MAX_SAFE_INTEGER\n\n width = Math.min(widthOption, Math.round(heightOption * imageAspectRatio))\n height = Math.min(\n heightOption,\n Math.round(widthOption / imageAspectRatio)\n )\n break\n }\n case `outside`: {\n const widthOption = options.width ? options.width : 0\n const heightOption = options.height ? options.height : 0\n\n width = Math.max(widthOption, Math.round(heightOption * imageAspectRatio))\n height = Math.max(\n heightOption,\n Math.round(widthOption / imageAspectRatio)\n )\n break\n }\n\n default: {\n if (options.width && !options.height) {\n width = options.width\n height = Math.round(options.width / imageAspectRatio)\n }\n\n if (options.height && !options.width) {\n width = Math.round(options.height * imageAspectRatio)\n height = options.height\n }\n }\n }\n\n return {\n width,\n height,\n aspectRatio: width / height,\n }\n}\n","/* global GATSBY___IMAGE */\nimport { generateImageData, EVERY_BREAKPOINT } from \"../image-utils\"\nimport type { CSSProperties, HTMLAttributes, ImgHTMLAttributes } from \"react\"\nimport type { Node } from \"gatsby\"\nimport type { PlaceholderProps } from \"./placeholder\"\nimport type { MainImageProps } from \"./main-image\"\nimport type { IGatsbyImageData } from \"./gatsby-image.browser\"\nimport type {\n IGatsbyImageHelperArgs,\n Layout,\n IImage,\n ImageFormat,\n} from \"../image-utils\"\n\n// Native lazy-loading support: https://addyosmani.com/blog/lazy-loading/\nexport const hasNativeLazyLoadSupport = (): boolean =>\n typeof HTMLImageElement !== `undefined` &&\n `loading` in HTMLImageElement.prototype\n\nexport function gatsbyImageIsInstalled(): boolean {\n return typeof GATSBY___IMAGE !== `undefined` && GATSBY___IMAGE\n}\n\nexport type IGatsbyImageDataParent<T = never> = T & {\n gatsbyImageData: IGatsbyImageData\n}\nexport type IGatsbyImageParent<T = never> = T & {\n gatsbyImage: IGatsbyImageData\n}\nexport type FileNode = Partial<Node> & {\n childImageSharp?: IGatsbyImageDataParent<Partial<Node>>\n}\n\nconst isGatsbyImageData = (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n node: IGatsbyImageData | any\n): node is IGatsbyImageData =>\n // 🦆 check for a deep prop to be sure this is a valid gatsbyImageData object\n Boolean(node?.images?.fallback?.src)\n\nconst isGatsbyImageDataParent = <T>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n node: IGatsbyImageDataParent<T> | any\n): node is IGatsbyImageDataParent<T> => Boolean(node?.gatsbyImageData)\n\nconst isGatsbyImageParent = <T>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n node: IGatsbyImageParent<T> | any\n): node is IGatsbyImageParent<T> => Boolean(node?.gatsbyImage)\n\nexport type ImageDataLike =\n | FileNode\n | IGatsbyImageDataParent\n | IGatsbyImageParent\n | IGatsbyImageData\n\nexport const getImage = (\n node: ImageDataLike | null\n): IGatsbyImageData | undefined => {\n // This checks both for gatsbyImageData and gatsbyImage\n if (isGatsbyImageData(node)) {\n return node\n }\n // gatsbyImageData GraphQL field\n if (isGatsbyImageDataParent(node)) {\n return node.gatsbyImageData\n }\n // gatsbyImage GraphQL field for Gatsby's Image CDN service\n if (isGatsbyImageParent(node)) {\n return node.gatsbyImage\n }\n return node?.childImageSharp?.gatsbyImageData\n}\n\nexport const getSrc = (node: ImageDataLike): string | undefined =>\n getImage(node)?.images?.fallback?.src\n\nexport const getSrcSet = (node: ImageDataLike): string | undefined =>\n getImage(node)?.images?.fallback?.srcSet\n\nexport function getWrapperProps(\n width: number,\n height: number,\n layout: Layout\n): Pick<HTMLAttributes<HTMLElement>, \"className\" | \"style\"> & {\n \"data-gatsby-image-wrapper\": string\n} {\n const wrapperStyle: CSSProperties = {}\n\n let className = `gatsby-image-wrapper`\n\n // If the plugin isn't installed we need to apply the styles inline\n if (!gatsbyImageIsInstalled()) {\n wrapperStyle.position = `relative`\n wrapperStyle.overflow = `hidden`\n }\n\n if (layout === `fixed`) {\n wrapperStyle.width = width\n wrapperStyle.height = height\n } else if (layout === `constrained`) {\n if (!gatsbyImageIsInstalled()) {\n wrapperStyle.display = `inline-block`\n wrapperStyle.verticalAlign = `top`\n }\n className = `gatsby-image-wrapper gatsby-image-wrapper-constrained`\n }\n\n return {\n className,\n \"data-gatsby-image-wrapper\": ``,\n style: wrapperStyle,\n }\n}\n\nexport interface IUrlBuilderArgs<OptionsType> {\n width: number\n height: number\n baseUrl: string\n format: ImageFormat\n options: OptionsType\n}\nexport interface IGetImageDataArgs<OptionsType = Record<string, unknown>> {\n baseUrl: string\n /**\n * For constrained and fixed images, the size of the image element\n */\n width?: number\n height?: number\n /**\n * If available, pass the source image width and height\n */\n sourceWidth?: number\n sourceHeight?: number\n /**\n * If only one dimension is passed, then this will be used to calculate the other.\n */\n aspectRatio?: number\n layout?: Layout\n /**\n * Returns a URL based on the passed arguments. Should be a pure function\n */\n urlBuilder: (args: IUrlBuilderArgs<OptionsType>) => string\n\n /**\n * Should be a data URI\n */\n placeholderURL?: string\n backgroundColor?: string\n /**\n * Used in error messages etc\n */\n pluginName?: string\n\n /**\n * If you do not support auto-format, pass an array of image types here\n */\n formats?: Array<ImageFormat>\n\n breakpoints?: Array<number>\n\n /**\n * Passed to the urlBuilder function\n */\n options?: OptionsType\n}\n\n/**\n * Use this hook to generate gatsby-plugin-image data in the browser.\n */\nexport function getImageData<OptionsType>({\n baseUrl,\n urlBuilder,\n sourceWidth,\n sourceHeight,\n pluginName = `getImageData`,\n formats = [`auto`],\n breakpoints,\n options,\n ...props\n}: IGetImageDataArgs<OptionsType>): IGatsbyImageData {\n if (\n !breakpoints?.length &&\n (props.layout === `fullWidth` || (props.layout as string) === `FULL_WIDTH`)\n ) {\n breakpoints = EVERY_BREAKPOINT\n }\n const generateImageSource = (\n baseUrl: string,\n width: number,\n height?: number,\n format?: ImageFormat\n ): IImage => {\n return {\n width,\n height,\n format,\n src: urlBuilder({ baseUrl, width, height, options, format }),\n }\n }\n\n const sourceMetadata: IGatsbyImageHelperArgs[\"sourceMetadata\"] = {\n width: sourceWidth,\n height: sourceHeight,\n format: `auto`,\n }\n\n const args: IGatsbyImageHelperArgs = {\n ...props,\n pluginName,\n generateImageSource,\n filename: baseUrl,\n formats,\n breakpoints,\n sourceMetadata,\n }\n return generateImageData(args)\n}\n\nexport function getMainProps(\n isLoading: boolean,\n isLoaded: boolean,\n images: IGatsbyImageData[\"images\"],\n loading?: \"eager\" | \"lazy\",\n style: CSSProperties = {}\n): Partial<MainImageProps> {\n // fallback when it's not configured in gatsby-config.\n if (!gatsbyImageIsInstalled()) {\n style = {\n height: `100%`,\n left: 0,\n position: `absolute`,\n top: 0,\n transform: `translateZ(0)`,\n transition: `opacity 250ms linear`,\n width: `100%`,\n willChange: `opacity`,\n ...style,\n }\n }\n\n const result = {\n ...images,\n loading,\n shouldLoad: isLoading,\n \"data-main-image\": ``,\n style: {\n ...style,\n opacity: isLoaded ? 1 : 0,\n },\n }\n\n return result\n}\n\nexport type PlaceholderImageAttrs = ImgHTMLAttributes<HTMLImageElement> &\n Pick<PlaceholderProps, \"sources\" | \"fallback\"> & {\n \"data-placeholder-image\"?: string\n }\n\nexport function getPlaceholderProps(\n placeholder: PlaceholderImageAttrs | undefined,\n isLoaded: boolean,\n layout: Layout,\n width?: number,\n height?: number,\n backgroundColor?: string,\n objectFit?: CSSProperties[\"objectFit\"],\n objectPosition?: CSSProperties[\"objectPosition\"]\n): PlaceholderImageAttrs {\n const wrapperStyle: CSSProperties = {}\n\n if (backgroundColor) {\n wrapperStyle.backgroundColor = backgroundColor\n\n if (layout === `fixed`) {\n wrapperStyle.width = width\n wrapperStyle.height = height\n wrapperStyle.backgroundColor = backgroundColor\n wrapperStyle.position = `relative`\n } else if (layout === `constrained`) {\n wrapperStyle.position = `absolute`\n wrapperStyle.top = 0\n wrapperStyle.left = 0\n wrapperStyle.bottom = 0\n wrapperStyle.right = 0\n } else if (layout === `fullWidth`) {\n wrapperStyle.position = `absolute`\n wrapperStyle.top = 0\n wrapperStyle.left = 0\n wrapperStyle.bottom = 0\n wrapperStyle.right = 0\n }\n }\n\n if (objectFit) {\n wrapperStyle.objectFit = objectFit\n }\n\n if (objectPosition) {\n wrapperStyle.objectPosition = objectPosition\n }\n const result: PlaceholderImageAttrs = {\n ...placeholder,\n \"aria-hidden\": true,\n \"data-placeholder-image\": ``,\n style: {\n opacity: isLoaded ? 0 : 1,\n transition: `opacity 500ms linear`,\n ...wrapperStyle,\n },\n }\n\n // fallback when it's not configured in gatsby-config.\n if (!gatsbyImageIsInstalled()) {\n result.style = {\n height: `100%`,\n left: 0,\n position: `absolute`,\n top: 0,\n width: `100%`,\n }\n }\n\n return result\n}\n\nexport interface IArtDirectedImage {\n media: string\n image: IGatsbyImageData\n}\n\n/**\n * Generate a Gatsby image data object with multiple, art-directed images that display at different\n * resolutions.\n *\n * @param defaultImage The image displayed when no media query matches.\n * It is also used for all other settings applied to the image, such as width, height and layout.\n * You should pass a className to the component with media queries to adjust the size of the container,\n * as this cannot be adjusted automatically.\n * @param artDirected Array of objects which each contains a `media` string which is a media query\n * such as `(min-width: 320px)`, and the image object to use when that query matches.\n */\nexport function withArtDirection(\n defaultImage: IGatsbyImageData,\n artDirected: Array<IArtDirectedImage>\n): IGatsbyImageData {\n const { images, placeholder, ...props } = defaultImage\n const output: IGatsbyImageData = {\n ...props,\n images: {\n ...images,\n sources: [],\n },\n placeholder: placeholder && {\n ...placeholder,\n sources: [],\n },\n }\n\n artDirected.forEach(({ media, image }) => {\n if (!media) {\n if (process.env.NODE_ENV === `development`) {\n console.warn(\n \"[gatsby-plugin-image] All art-directed images passed to must have a value set for `media`. Skipping.\"\n )\n }\n return\n }\n\n if (\n image.layout !== defaultImage.layout &&\n process.env.NODE_ENV === `development`\n ) {\n console.warn(\n `[gatsby-plugin-image] Mismatched image layout: expected \"${defaultImage.layout}\" but received \"${image.layout}\". All art-directed images use the same layout as the default image`\n )\n }\n\n output.images.sources.push(\n ...image.images.sources.map(source => {\n return { ...source, media }\n }),\n {\n media,\n srcSet: image.images.fallback.srcSet,\n }\n )\n\n if (!output.placeholder) {\n return\n }\n\n output.placeholder.sources.push({\n media,\n srcSet: image.placeholder.fallback,\n })\n })\n output.images.sources.push(...images.sources)\n if (placeholder?.sources) {\n output.placeholder?.sources.push(...placeholder.sources)\n }\n return output\n}\n","import React, { Fragment, FunctionComponent, PropsWithChildren } from \"react\"\nimport terserMacro from \"../../macros/terser.macro\"\nimport { Layout } from \"../image-utils\"\n\nexport interface ILayoutWrapperProps {\n layout: Layout\n width: number\n height: number\n}\n\nconst NativeScriptLoading: FunctionComponent = () => (\n <script\n type=\"module\"\n dangerouslySetInnerHTML={{\n __html: terserMacro`\nconst hasNativeLazyLoadSupport = typeof HTMLImageElement !== \"undefined\" && \"loading\" in HTMLImageElement.prototype;\nif (hasNativeLazyLoadSupport) {\n const gatsbyImages = document.querySelectorAll('img[data-main-image]');\n for (let mainImage of gatsbyImages) {\n if (mainImage.dataset.src) {\n mainImage.setAttribute('src', mainImage.dataset.src)\n mainImage.removeAttribute('data-src')\n }\n if (mainImage.dataset.srcset) {\n mainImage.setAttribute('srcset', mainImage.dataset.srcset)\n mainImage.removeAttribute('data-srcset')\n }\n\n const sources = mainImage.parentNode.querySelectorAll('source[data-srcset]');\n for (let source of sources) {\n source.setAttribute('srcset', source.dataset.srcset)\n source.removeAttribute('data-srcset')\n }\n\n if (mainImage.complete) {\n mainImage.style.opacity = 1;\n\n // also hide the placeholder\n mainImage.parentNode.parentNode.querySelector('[data-placeholder-image]').style.opacity = 0;\n }\n }\n}\n`,\n }}\n />\n)\n\nexport function getSizer(\n layout: Layout,\n width: number,\n height: number\n): string {\n let sizer = ``\n if (layout === `fullWidth`) {\n sizer = `<div aria-hidden=\"true\" style=\"padding-top: ${\n (height / width) * 100\n }%;\"></div>`\n }\n\n if (layout === `constrained`) {\n sizer = `<div style=\"max-width: ${width}px; display: block;\"><img alt=\"\" role=\"presentation\" aria-hidden=\"true\" src=\"data:image/svg+xml;charset=utf-8,%3Csvg%20height='${height}'%20width='${width}'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E\" style=\"max-width: 100%; display: block; position: static;\"></div>`\n }\n\n return sizer\n}\n\nconst Sizer: FunctionComponent<ILayoutWrapperProps> = function Sizer({\n layout,\n width,\n height,\n}) {\n if (layout === `fullWidth`) {\n return (\n <div aria-hidden style={{ paddingTop: `${(height / width) * 100}%` }} />\n )\n }\n\n if (layout === `constrained`) {\n return (\n <div style={{ maxWidth: width, display: `block` }}>\n <img\n alt=\"\"\n role=\"presentation\"\n aria-hidden=\"true\"\n src={`data:image/svg+xml;charset=utf-8,%3Csvg%20height='${height}'%20width='${width}'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E`}\n style={{\n maxWidth: `100%`,\n display: `block`,\n position: `static`,\n }}\n />\n </div>\n )\n }\n\n return null\n}\n\nexport const LayoutWrapper: FunctionComponent<\n PropsWithChildren<ILayoutWrapperProps>\n> = function LayoutWrapper({ children, ...props }) {\n return (\n <Fragment>\n <Sizer {...props} />\n {children}\n\n {SERVER ? <NativeScriptLoading /> : null}\n </Fragment>\n )\n}\n","import React, { FunctionComponent, ImgHTMLAttributes } from \"react\"\nimport * as PropTypes from \"prop-types\"\n\nexport interface IResponsiveImageProps {\n sizes?: string\n srcSet: string\n}\n\nexport type SourceProps = IResponsiveImageProps &\n (\n | {\n media: string\n type?: string\n }\n | {\n media?: string\n type: string\n }\n )\n\ntype FallbackProps = { src: string } & Partial<IResponsiveImageProps>\n\ntype ImageProps = ImgHTMLAttributes<HTMLImageElement> & {\n src: string\n alt: string\n shouldLoad: boolean\n}\n\nexport type PictureProps = ImgHTMLAttributes<HTMLImageElement> & {\n fallback?: FallbackProps\n sources?: Array<SourceProps>\n alt: string\n shouldLoad?: boolean\n}\n\nconst Image: FunctionComponent<ImageProps> = function Image({\n src,\n srcSet,\n loading,\n alt = ``,\n shouldLoad,\n ...props\n}) {\n return (\n <img\n {...props}\n decoding=\"async\"\n loading={loading}\n src={shouldLoad ? src : undefined}\n data-src={!shouldLoad ? src : undefined}\n srcSet={shouldLoad ? srcSet : undefined}\n data-srcset={!shouldLoad ? srcSet : undefined}\n alt={alt}\n />\n )\n}\n\nexport const Picture: React.FC<PictureProps> = function Picture({\n fallback,\n sources = [],\n shouldLoad = true,\n ...props\n}) {\n const sizes = props.sizes || fallback?.sizes\n const fallbackImage = (\n <Image {...props} {...fallback} sizes={sizes} shouldLoad={shouldLoad} />\n )\n\n if (!sources.length) {\n return fallbackImage\n }\n\n return (\n <picture>\n {sources.map(({ media, srcSet, type }) => (\n <source\n key={`${media}-${type}-${srcSet}`}\n type={type}\n media={media}\n srcSet={shouldLoad ? srcSet : undefined}\n data-srcset={!shouldLoad ? srcSet : undefined}\n sizes={sizes}\n />\n ))}\n {fallbackImage}\n </picture>\n )\n}\n\nImage.propTypes = {\n src: PropTypes.string.isRequired,\n alt: PropTypes.string.isRequired,\n sizes: PropTypes.string,\n srcSet: PropTypes.string,\n shouldLoad: PropTypes.bool,\n}\n\nPicture.displayName = `Picture`\nPicture.propTypes = {\n alt: PropTypes.string.isRequired,\n shouldLoad: PropTypes.bool,\n fallback: PropTypes.exact({\n src: PropTypes.string.isRequired,\n srcSet: PropTypes.string,\n sizes: PropTypes.string,\n }),\n sources: PropTypes.arrayOf(\n PropTypes.oneOfType([\n PropTypes.exact({\n media: PropTypes.string.isRequired,\n type: PropTypes.string,\n sizes: PropTypes.string,\n srcSet: PropTypes.string.isRequired,\n }),\n PropTypes.exact({\n media: PropTypes.string,\n type: PropTypes.string.isRequired,\n sizes: PropTypes.string,\n srcSet: PropTypes.string.isRequired,\n }),\n ])\n ),\n}\n","import React, { FunctionComponent, ImgHTMLAttributes } from \"react\"\nimport * as PropTypes from \"prop-types\"\nimport { Picture, SourceProps } from \"./picture\"\n\nexport type PlaceholderProps = ImgHTMLAttributes<HTMLImageElement> & {\n fallback?: string\n sources?: Array<SourceProps>\n}\n\nexport const Placeholder: FunctionComponent<PlaceholderProps> =\n function Placeholder({ fallback, ...props }) {\n if (fallback) {\n return (\n <Picture\n {...props}\n fallback={{\n src: fallback,\n }}\n aria-hidden\n alt=\"\"\n />\n )\n } else {\n return <div {...props}></div>\n }\n }\n\nPlaceholder.displayName = `Placeholder`\nPlaceholder.propTypes = {\n fallback: PropTypes.string,\n sources: Picture.propTypes?.sources,\n alt: function (props, propName, componentName): Error | null {\n if (!props[propName]) {\n return null\n }\n\n return new Error(\n `Invalid prop \\`${propName}\\` supplied to \\`${componentName}\\`. Validation failed.`\n )\n },\n}\n","import React from \"react\"\nimport { Picture, PictureProps } from \"./picture\"\n\nexport type MainImageProps = PictureProps\n\nexport const MainImage: React.FC<PictureProps> = function MainImage(props) {\n return (\n <>\n <Picture {...props} />\n <noscript>\n <Picture {...props} shouldLoad={true} />\n </noscript>\n </>\n )\n}\n\nMainImage.displayName = `MainImage`\nMainImage.propTypes = Picture.propTypes\n","import React from \"react\"\nimport { getWrapperProps, getMainProps, getPlaceholderProps } from \"./hooks\"\nimport { Placeholder } from \"./placeholder\"\nimport { MainImage, MainImageProps } from \"./main-image\"\nimport { LayoutWrapper } from \"./layout-wrapper\"\nimport PropTypes from \"prop-types\"\nimport type { FunctionComponent, WeakValidationMap } from \"react\"\nimport type { GatsbyImageProps, IGatsbyImageData } from \"./gatsby-image.browser\"\n\nconst removeNewLines = (str: string): string => str.replace(/\\n/g, ``)\n\nexport const GatsbyImage: FunctionComponent<GatsbyImageProps> =\n function GatsbyImage({\n as = `div`,\n className,\n class: preactClass,\n style,\n image,\n loading = `lazy`,\n imgClassName,\n imgStyle,\n backgroundColor,\n objectFit,\n objectPosition,\n ...props\n }) {\n if (!image) {\n console.warn(`[gatsby-plugin-image] Missing image prop`)\n return null\n }\n\n if (preactClass) {\n className = preactClass\n }\n\n imgStyle = {\n objectFit,\n objectPosition,\n backgroundColor,\n ...imgStyle,\n }\n\n const {\n width,\n height,\n layout,\n images,\n placeholder,\n backgroundColor: placeholderBackgroundColor,\n } = image\n\n const {\n style: wStyle,\n className: wClass,\n ...wrapperProps\n } = getWrapperProps(width, height, layout)\n\n const cleanedImages: IGatsbyImageData[\"images\"] = {\n fallback: undefined,\n sources: [],\n }\n if (images.fallback) {\n cleanedImages.fallback = {\n ...images.fallback,\n srcSet: images.fallback.srcSet\n ? removeNewLines(images.fallback.srcSet)\n : undefined,\n }\n }\n\n if (images.sources) {\n cleanedImages.sources = images.sources.map(source => {\n return {\n ...source,\n srcSet: removeNewLines(source.srcSet),\n }\n })\n }\n\n return React.createElement(\n as,\n {\n ...wrapperProps,\n style: {\n ...wStyle,\n ...style,\n backgroundColor,\n },\n className: `${wClass}${className ? ` ${className}` : ``}`,\n },\n <LayoutWrapper layout={layout} width={width} height={height}>\n <Placeholder\n {...getPlaceholderProps(\n placeholder,\n false,\n layout,\n width,\n height,\n placeholderBackgroundColor,\n objectFit,\n objectPosition\n )}\n />\n\n <MainImage\n data-gatsby-image-ssr=\"\"\n className={imgClassName}\n {...(props as Omit<\n MainImageProps,\n \"images\" | \"fallback\" | \"onError\" | \"onLoad\"\n >)}\n // When eager is set we want to start the isLoading state on true (we want to load the img without react)\n {...getMainProps(\n loading === `eager`,\n false,\n cleanedImages,\n loading,\n imgStyle\n )}\n />\n </LayoutWrapper>\n )\n }\n\nexport const altValidator: PropTypes.Validator<string> = (\n props: GatsbyImageProps,\n propName,\n componentName,\n ...rest\n): Error | undefined => {\n if (!props.alt && props.alt !== ``) {\n return new Error(\n `The \"alt\" prop is required in ${componentName}. If the image is purely presentational then pass an empty string: e.g. alt=\"\". Learn more: https://a11y-style-guide.com/style-guide/section-media.html`\n )\n }\n\n return PropTypes.string(props, propName, componentName, ...rest)\n}\n\nexport const propTypes = {\n image: PropTypes.object.isRequired,\n alt: altValidator,\n} as WeakValidationMap<GatsbyImageProps>\n","import {\n createElement,\n memo,\n useMemo,\n useEffect,\n useLayoutEffect,\n useRef,\n} from \"react\"\nimport {\n getWrapperProps,\n gatsbyImageIsInstalled,\n hasNativeLazyLoadSupport,\n} from \"./hooks\"\nimport { getSizer } from \"./layout-wrapper\"\nimport { propTypes } from \"./gatsby-image.server\"\nimport type {\n FC,\n ElementType,\n FunctionComponent,\n ImgHTMLAttributes,\n CSSProperties,\n ReactEventHandler,\n} from \"react\"\nimport type { renderImageToString } from \"./lazy-hydrate\"\nimport type { PlaceholderProps } from \"./placeholder\"\nimport type { MainImageProps } from \"./main-image\"\nimport type { Layout } from \"../image-utils\"\n\nconst imageCache = new Set<string>()\nlet renderImageToStringPromise\nlet renderImage: typeof renderImageToString | undefined\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport interface GatsbyImageProps\n extends Omit<\n ImgHTMLAttributes<HTMLImageElement>,\n \"placeholder\" | \"onLoad\" | \"src\" | \"srcSet\" | \"width\" | \"height\"\n > {\n alt: string\n as?: ElementType\n className?: string\n class?: string\n imgClassName?: string\n image: IGatsbyImageData\n imgStyle?: CSSProperties\n backgroundColor?: string\n objectFit?: CSSProperties[\"objectFit\"]\n objectPosition?: CSSProperties[\"objectPosition\"]\n onLoad?: (props: { wasCached: boolean }) => void\n onError?: ReactEventHandler<HTMLImageElement>\n onStartLoad?: (props: { wasCached: boolean }) => void\n}\n\nexport interface IGatsbyImageData {\n layout: Layout\n width: number\n height: number\n backgroundColor?: string\n images: Pick<MainImageProps, \"sources\" | \"fallback\">\n placeholder?: Pick<PlaceholderProps, \"sources\" | \"fallback\">\n}\n\nconst GatsbyImageHydrator: FC<GatsbyImageProps> = function GatsbyImageHydrator({\n as = `div`,\n image,\n style,\n backgroundColor,\n className,\n class: preactClass,\n onStartLoad,\n onLoad,\n onError,\n ...props\n}) {\n const { width, height, layout } = image\n const {\n style: wStyle,\n className: wClass,\n ...wrapperProps\n } = getWrapperProps(width, height, layout)\n const root = useRef<HTMLElement>()\n const cacheKey = useMemo(() => JSON.stringify(image.images), [image.images])\n\n // Preact uses class instead of className so we need to check for both\n if (preactClass) {\n className = preactClass\n }\n\n const sizer = getSizer(layout, width, height)\n\n useEffect(() => {\n if (!renderImageToStringPromise) {\n renderImageToStringPromise = import(`./lazy-hydrate`).then(\n ({ renderImageToString, swapPlaceholderImage }) => {\n renderImage = renderImageToString\n\n return {\n renderImageToString,\n swapPlaceholderImage,\n }\n }\n )\n }\n\n // The plugin image component is a bit special where if it's server-side rendered, we add extra script tags to support lazy-loading without\n // In this case we stop hydration but fire the correct events.\n const ssrImage = root.current.querySelector(\n `[data-gatsby-image-ssr]`\n ) as HTMLImageElement\n if (ssrImage && hasNativeLazyLoadSupport()) {\n if (ssrImage.complete) {\n // Trigger onStartload and onLoad events\n onStartLoad?.({\n wasCached: true,\n })\n onLoad?.({\n wasCached: true,\n })\n\n // remove ssr key for state updates but add delay to not fight with native code snippt of gatsby-ssr\n setTimeout(() => {\n ssrImage.removeAttribute(`data-gatsby-image-ssr`)\n }, 0)\n } else {\n onStartLoad?.({\n wasCached: true,\n })\n\n ssrImage.addEventListener(`load`, function onLoadListener() {\n ssrImage.removeEventListener(`load`, onLoadListener)\n\n onLoad?.({\n wasCached: true,\n })\n // remove ssr key for state updates but add delay to not fight with native code snippt of gatsby-ssr\n setTimeout(() => {\n ssrImage.removeAttribute(`data-gatsby-image-ssr`)\n }, 0)\n })\n }\n\n imageCache.add(cacheKey)\n\n return\n }\n\n if (renderImage && imageCache.has(cacheKey)) {\n return\n }\n\n let animationFrame\n let cleanupCallback\n renderImageToStringPromise.then(\n ({ renderImageToString, swapPlaceholderImage }) => {\n if (!root.current) {\n return\n }\n\n root.current.innerHTML = renderImageToString({\n isLoading: true,\n isLoaded: imageCache.has(cacheKey),\n image,\n ...props,\n })\n\n if (!imageCache.has(cacheKey)) {\n animationFrame = requestAnimationFrame(() => {\n if (root.current) {\n cleanupCallback = swapPlaceholderImage(\n root.current,\n cacheKey,\n imageCache,\n style,\n onStartLoad,\n onLoad,\n onError\n )\n }\n })\n }\n }\n )\n\n // eslint-disable-next-line consistent-return\n return (): void => {\n if (animationFrame) {\n cancelAnimationFrame(animationFrame)\n }\n if (cleanupCallback) {\n cleanupCallback()\n }\n }\n }, [image])\n\n // useLayoutEffect is ran before React commits to the DOM. This allows us to make sure our HTML is using our cached image version\n useLayoutEffect(() => {\n if (imageCache.has(cacheKey) && renderImage) {\n root.current.innerHTML = renderImage({\n isLoading: imageCache.has(cacheKey),\n isLoaded: imageCache.has(cacheKey),\n image,\n ...props,\n })\n\n // Trigger onStartload and onLoad events\n onStartLoad?.({\n wasCached: true,\n })\n onLoad?.({\n wasCached: true,\n })\n }\n }, [image])\n\n // By keeping all props equal React will keep the component in the DOM\n return createElement(as, {\n ...wrapperProps,\n style: {\n ...wStyle,\n ...style,\n backgroundColor,\n },\n className: `${wClass}${className ? ` ${className}` : ``}`,\n ref: root,\n dangerouslySetInnerHTML: {\n __html: sizer,\n },\n suppressHydrationWarning: true,\n })\n}\n\nexport const GatsbyImage: FunctionComponent<GatsbyImageProps> = memo(\n function GatsbyImage(props) {\n if (!props.image) {\n if (process.env.NODE_ENV === `development`) {\n console.warn(`[gatsby-plugin-image] Missing image prop`)\n }\n\n return null\n }\n\n if (!gatsbyImageIsInstalled() && process.env.NODE_ENV === `development`) {\n console.warn(\n `[gatsby-plugin-image] You're missing out on some cool performance features. Please add \"gatsby-plugin-image\" to your gatsby-config.js`\n )\n }\n\n return createElement(GatsbyImageHydrator, props)\n }\n)\n\nGatsbyImage.propTypes = propTypes\nGatsbyImage.displayName = `GatsbyImage`\n","import React, { FunctionComponent, ReactElement } from \"react\"\nimport {\n altValidator,\n GatsbyImage as GatsbyImageServer,\n} from \"./gatsby-image.server\"\nimport { GatsbyImageProps, IGatsbyImageData } from \"./gatsby-image.browser\"\nimport PropTypes from \"prop-types\"\nimport { ISharpGatsbyImageArgs } from \"../image-utils\"\n\nexport interface IStaticImageProps\n extends Omit<GatsbyImageProps, \"image\">,\n Omit<ISharpGatsbyImageArgs, \"backgroundColor\"> {\n src: string\n filename?: string\n}\n\n// These values are added by Babel. Do not add them manually\ninterface IPrivateProps {\n __imageData?: IGatsbyImageData\n __error?: string\n}\n\nexport function _getStaticImage(\n GatsbyImage: FunctionComponent<GatsbyImageProps>\n): React.FC<IStaticImageProps & IPrivateProps> {\n return function StaticImage({\n src,\n __imageData: imageData,\n __error,\n // We extract these because they're not meant to be passed-down to GatsbyImage\n /* eslint-disable @typescript-eslint/no-unused-vars */\n width,\n height,\n aspectRatio,\n tracedSVGOptions,\n placeholder,\n formats,\n quality,\n transformOptions,\n jpgOptions,\n pngOptions,\n webpOptions,\n avifOptions,\n blurredOptions,\n breakpoints,\n outputPixelDensities,\n /* eslint-enable @typescript-eslint/no-unused-vars */\n ...props\n }): ReactElement {\n if (__error) {\n console.warn(__error)\n }\n\n if (imageData) {\n return <GatsbyImage image={imageData} {...props} />\n }\n console.warn(`Image not loaded`, src)\n if (!__error && process.env.NODE_ENV === `development`) {\n console.warn(\n `Please ensure that \"gatsby-plugin-image\" is included in the plugins array in gatsby-config.js, and that your version of gatsby is at least 2.24.78`\n )\n }\n return null\n }\n}\n\nconst StaticImage: React.FC<IStaticImageProps & IPrivateProps> =\n _getStaticImage(GatsbyImageServer)\n\nconst checkDimensionProps: PropTypes.Validator<number> = (\n props: IStaticImageProps & IPrivateProps,\n propName: keyof IStaticImageProps & IPrivateProps,\n ...rest\n) => {\n if (\n props.layout === `fullWidth` &&\n (propName === `width` || propName === `height`) &&\n props[propName]\n ) {\n return new Error(\n `\"${propName}\" ${props[propName]} may not be passed when layout is fullWidth.`\n )\n }\n return PropTypes.number(props, propName, ...rest)\n}\n\nconst validLayouts = new Set([`fixed`, `fullWidth`, `constrained`])\n\nexport const propTypes = {\n src: PropTypes.string.isRequired,\n alt: altValidator,\n width: checkDimensionProps,\n height: checkDimensionProps,\n sizes: PropTypes.string,\n layout: (props: IStaticImageProps & IPrivateProps): Error | undefined => {\n if (props.layout === undefined) {\n return undefined\n }\n if (validLayouts.has(props.layout)) {\n return undefined\n }\n\n return new Error(\n `Invalid value ${props.layout}\" provided for prop \"layout\". Defaulting to \"constrained\". Valid values are \"fixed\", \"fullWidth\" or \"constrained\".`\n )\n },\n}\n\nStaticImage.displayName = `StaticImage`\nStaticImage.propTypes = propTypes\n\nexport { StaticImage }\n","import {\n GatsbyImage as GatsbyImageBrowser,\n IGatsbyImageData,\n} from \"./gatsby-image.browser\"\nimport React from \"react\"\nimport {\n _getStaticImage,\n propTypes,\n IStaticImageProps,\n} from \"./static-image.server\"\n// These values are added by Babel. Do not add them manually\ninterface IPrivateProps {\n __imageData?: IGatsbyImageData\n __error?: string\n}\n\nconst StaticImage: React.FC<IStaticImageProps & IPrivateProps> =\n _getStaticImage(GatsbyImageBrowser)\n\nStaticImage.displayName = `StaticImage`\nStaticImage.propTypes = propTypes\n\nexport { StaticImage }\n","import styled from \"styled-components\"\nimport { Link } from \"gatsby\"\nimport { GatsbyImage } from \"gatsby-plugin-image\";\n\n\nexport const BackToPhotosButton = styled(Link)`\n\n text-transform: uppercase;\n font-size: 17px;\n text-decoration: none;\n display: inline-block;\n padding: 0.2rem 0.6rem;\n border: 2px solid #fc7e0f;\n border-radius: 5px;\n color: #fc7e0f;\n\n // See https://styled-components.com/docs/advanced#referring-to-other-components\n // & references the parent to cleanly inherit styles\n &:hover,\n &:active,\n &:focus {\n background-color: #fc7e0f;\n border: 2px solid #fc7e0f;\n color: white\n }\n\n`\n\nexport const PhotosListTile = styled.div`\n\n padding-bottom: 30px;\n //padding-left: 10px;\n //padding-right: 10px;\n\n`\nexport const PhotosListSpacer10px = styled.div`\n\n padding-bottom: 10px;\n\n`\n\nexport const PhotosListCategoryLabel = styled.span`\n\n color: #888;\n border-bottom: none;\n padding-left: 0.5em;\n text-decoration: none;\n font-size: 85%;\n text-align: right;\n &:hover,\n &:active,\n &:focus {\n font-weight: 500;\n }\n\n`\n\nexport const PhotosListStyledLink = styled(Link)`\n \n &,\n &:hover,\n &:active,\n &:focus {\n border-bottom: none;\n }\n &:hover {\n font-weight: 500;\n }\n\n`\nexport const PhotoCollectionHeroImage = styled(GatsbyImage)`\n \n width: 90vw;\n max-width: 100vw;\n left: calc(-45vw + 50%);\n\n`\n\nexport const TitleHeader = styled.h1`\n\n text-transform: uppercase;\n font-weight: 300;\n letter-spacing: 3px;\n margin-top: 20px;\n margin-bottom: 10px;\n\n`\n\nexport const BlogPostMetadata = styled.div`\n\n font-size: 85%;\n color: #888;\n margin-bottom: 1.5em;\n line-height: 1.25em;\n \n a {\n color: #888;\n border-bottom: none;\n text-decoration: none;\n font-weight: normal;\n }\n \n a:hover {\n border-bottom: 2px solid #fc7e0f;\n font-weight: normal;\n }\n`\nexport const CustomNav = styled.nav`\n \n margin-bottom: 50px;\n margin-top: 10px;\n padding-bottom: 20px;\n \n`\n\nexport const CustomNavUl = styled.ul`\n\n float: right;\n margin: 0;\n padding: 0;\n display: inline;\n \n`\n\nexport const CustomNavUlLi = styled.ul`\n\n margin-left: 0;\n padding: 5px;\n list-style: none;\n display: inline;\n text-transform: uppercase;\n \n a {\n text-decoration: none;\n color: #888;\n font-size: 13px;\n line-height: 13px;\n }\n \n &:hover {\n color: #333;\n }\n \n`\n\nexport const CustomNavHomeButton = styled.span`\n\n text-transform: none;\n float: left;\n \n a {\n text-decoration: none;\n color: #888;\n font-size: 13px;\n line-height: 13px;\n }\n \n &:hover {\n color: #333;\n }\n \n`\n\nexport const SiteFooterNotices = styled.footer`\n\n font-size: 70%;\n line-height: 1em;\n padding-top: 5em;\n padding-bottom: 1em;\n color: #888888;\n text-align: center;\n \n a,\n a:visited {\n color: #888888;\n border-bottom: 1px solid #CCC;\n text-decoration: none;\n }\n\n a:hover,\n a:active,\n a:focus {\n color: #fc7e0f;\n border-bottom: 2px solid #fc7e0f;\n text-decoration: none;\n`\n","import classNames from 'classnames';\nimport * as React from 'react';\nimport { useBootstrapPrefix } from './ThemeProvider';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst Container = /*#__PURE__*/React.forwardRef(({\n bsPrefix,\n fluid = false,\n // Need to define the default \"as\" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595\n as: Component = 'div',\n className,\n ...props\n}, ref) => {\n const prefix = useBootstrapPrefix(bsPrefix, 'container');\n const suffix = typeof fluid === 'string' ? `-${fluid}` : '-fluid';\n return /*#__PURE__*/_jsx(Component, {\n ref: ref,\n ...props,\n className: classNames(className, fluid ? `${prefix}${suffix}` : prefix)\n });\n});\nContainer.displayName = 'Container';\nexport default Container;","import React from \"react\"\nimport { Link } from \"gatsby\"\nimport { CustomNav, CustomNavHomeButton, CustomNavUl, CustomNavUlLi } from \"./custom-styled-components\"\nimport { FaRss } from \"@react-icons/all-files/fa/FaRss\"\n\n\nconst Navbar = () => {\n return (\n <CustomNav>\n <CustomNavHomeButton>\n <Link to=\"/\">Rob Li.co</Link>\n </CustomNavHomeButton>\n <CustomNavUl>\n <CustomNavUlLi>\n <Link to=\"/blog/\">Blog</Link>\n </CustomNavUlLi>\n <CustomNavUlLi>\n <Link to=\"/photos\">Photos</Link>\n </CustomNavUlLi>\n <CustomNavUlLi>\n <a href=\"https://github.com/itsrobli\">Code</a>\n </CustomNavUlLi>\n <CustomNavUlLi>\n <Link to=\"/about\">About</Link>\n </CustomNavUlLi>\n <CustomNavUlLi>\n <Link to=\"/rss.xml\"><FaRss /></Link>\n </CustomNavUlLi>\n </CustomNavUl>\n </CustomNav>\n )\n}\n\nexport default Navbar\n","import React from \"react\"\nimport { Link } from \"gatsby\"\nimport { SiteFooterNotices } from \"./custom-styled-components\"\nimport { Container } from \"react-bootstrap\"\nimport Navbar from \"./navbar\"\n\nconst Layout = ({ location, title, children }) => {\n const rootPath = `${__PATH_PREFIX__}/`\n const isRootPath = location.pathname === rootPath\n\n return (\n <Container>\n <div className=\"global-wrapper\" data-is-root-path={isRootPath}>\n <Navbar />\n <main>{children}</main>\n <SiteFooterNotices>\n © 2010 - {new Date().getFullYear()} Robert Li.\n {` `}\n <Link to=\"/privacy\">Privacy policy</Link>\n </SiteFooterNotices>\n </div>\n </Container>\n )\n}\n\nexport default Layout\n","import PropTypes from 'prop-types';\nimport withSideEffect from 'react-side-effect';\nimport isEqual from 'react-fast-compare';\nimport React from 'react';\nimport objectAssign from 'object-assign';\n\nvar ATTRIBUTE_NAMES = {\n BODY: \"bodyAttributes\",\n HTML: \"htmlAttributes\",\n TITLE: \"titleAttributes\"\n};\n\nvar TAG_NAMES = {\n BASE: \"base\",\n BODY: \"body\",\n HEAD: \"head\",\n HTML: \"html\",\n LINK: \"link\",\n META: \"meta\",\n NOSCRIPT: \"noscript\",\n SCRIPT: \"script\",\n STYLE: \"style\",\n TITLE: \"title\"\n};\n\nvar VALID_TAG_NAMES = Object.keys(TAG_NAMES).map(function (name) {\n return TAG_NAMES[name];\n});\n\nvar TAG_PROPERTIES = {\n CHARSET: \"charset\",\n CSS_TEXT: \"cssText\",\n HREF: \"href\",\n HTTPEQUIV: \"http-equiv\",\n INNER_HTML: \"innerHTML\",\n ITEM_PROP: \"itemprop\",\n NAME: \"name\",\n PROPERTY: \"property\",\n REL: \"rel\",\n SRC: \"src\",\n TARGET: \"target\"\n};\n\nvar REACT_TAG_MAP = {\n accesskey: \"accessKey\",\n charset: \"charSet\",\n class: \"className\",\n contenteditable: \"contentEditable\",\n contextmenu: \"contextMenu\",\n \"http-equiv\": \"httpEquiv\",\n itemprop: \"itemProp\",\n tabindex: \"tabIndex\"\n};\n\nvar HELMET_PROPS = {\n DEFAULT_TITLE: \"defaultTitle\",\n DEFER: \"defer\",\n ENCODE_SPECIAL_CHARACTERS: \"encodeSpecialCharacters\",\n ON_CHANGE_CLIENT_STATE: \"onChangeClientState\",\n TITLE_TEMPLATE: \"titleTemplate\"\n};\n\nvar HTML_TAG_MAP = Object.keys(REACT_TAG_MAP).reduce(function (obj, key) {\n obj[REACT_TAG_MAP[key]] = key;\n return obj;\n}, {});\n\nvar SELF_CLOSING_TAGS = [TAG_NAMES.NOSCRIPT, TAG_NAMES.SCRIPT, TAG_NAMES.STYLE];\n\nvar HELMET_ATTRIBUTE = \"data-react-helmet\";\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar inherits = function (subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\nvar objectWithoutProperties = function (obj, keys) {\n var target = {};\n\n for (var i in obj) {\n if (keys.indexOf(i) >= 0) continue;\n if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n target[i] = obj[i];\n }\n\n return target;\n};\n\nvar possibleConstructorReturn = function (self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\nvar encodeSpecialCharacters = function encodeSpecialCharacters(str) {\n var encode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n if (encode === false) {\n return String(str);\n }\n\n return String(str).replace(/&/g, \"&\").replace(/</g, \"<\").replace(/>/g, \">\").replace(/\"/g, \""\").replace(/'/g, \"'\");\n};\n\nvar getTitleFromPropsList = function getTitleFromPropsList(propsList) {\n var innermostTitle = getInnermostProperty(propsList, TAG_NAMES.TITLE);\n var innermostTemplate = getInnermostProperty(propsList, HELMET_PROPS.TITLE_TEMPLATE);\n\n if (innermostTemplate && innermostTitle) {\n // use function arg to avoid need to escape $ characters\n return innermostTemplate.replace(/%s/g, function () {\n return Array.isArray(innermostTitle) ? innermostTitle.join(\"\") : innermostTitle;\n });\n }\n\n var innermostDefaultTitle = getInnermostProperty(propsList, HELMET_PROPS.DEFAULT_TITLE);\n\n return innermostTitle || innermostDefaultTitle || undefined;\n};\n\nvar getOnChangeClientState = function getOnChangeClientState(propsList) {\n return getInnermostProperty(propsList, HELMET_PROPS.ON_CHANGE_CLIENT_STATE) || function () {};\n};\n\nvar getAttributesFromPropsList = function getAttributesFromPropsList(tagType, propsList) {\n return propsList.filter(function (props) {\n return typeof props[tagType] !== \"undefined\";\n }).map(function (props) {\n return props[tagType];\n }).reduce(function (tagAttrs, current) {\n return _extends({}, tagAttrs, current);\n }, {});\n};\n\nvar getBaseTagFromPropsList = function getBaseTagFromPropsList(primaryAttributes, propsList) {\n return propsList.filter(function (props) {\n return typeof props[TAG_NAMES.BASE] !== \"undefined\";\n }).map(function (props) {\n return props[TAG_NAMES.BASE];\n }).reverse().reduce(function (innermostBaseTag, tag) {\n if (!innermostBaseTag.length) {\n var keys = Object.keys(tag);\n\n for (var i = 0; i < keys.length; i++) {\n var attributeKey = keys[i];\n var lowerCaseAttributeKey = attributeKey.toLowerCase();\n\n if (primaryAttributes.indexOf(lowerCaseAttributeKey) !== -1 && tag[lowerCaseAttributeKey]) {\n return innermostBaseTag.concat(tag);\n }\n }\n }\n\n return innermostBaseTag;\n }, []);\n};\n\nvar getTagsFromPropsList = function getTagsFromPropsList(tagName, primaryAttributes, propsList) {\n // Calculate list of tags, giving priority innermost component (end of the propslist)\n var approvedSeenTags = {};\n\n return propsList.filter(function (props) {\n if (Array.isArray(props[tagName])) {\n return true;\n }\n if (typeof props[tagName] !== \"undefined\") {\n warn(\"Helmet: \" + tagName + \" should be of type \\\"Array\\\". Instead found type \\\"\" + _typeof(props[tagName]) + \"\\\"\");\n }\n return false;\n }).map(function (props) {\n return props[tagName];\n }).reverse().reduce(function (approvedTags, instanceTags) {\n var instanceSeenTags = {};\n\n instanceTags.filter(function (tag) {\n var primaryAttributeKey = void 0;\n var keys = Object.keys(tag);\n for (var i = 0; i < keys.length; i++) {\n var attributeKey = keys[i];\n var lowerCaseAttributeKey = attributeKey.toLowerCase();\n\n // Special rule with link tags, since rel and href are both primary tags, rel takes priority\n if (primaryAttributes.indexOf(lowerCaseAttributeKey) !== -1 && !(primaryAttributeKey === TAG_PROPERTIES.REL && tag[primaryAttributeKey].toLowerCase() === \"canonical\") && !(lowerCaseAttributeKey === TAG_PROPERTIES.REL && tag[lowerCaseAttributeKey].toLowerCase() === \"stylesheet\")) {\n primaryAttributeKey = lowerCaseAttributeKey;\n }\n // Special case for innerHTML which doesn't work lowercased\n if (primaryAttributes.indexOf(attributeKey) !== -1 && (attributeKey === TAG_PROPERTIES.INNER_HTML || attributeKey === TAG_PROPERTIES.CSS_TEXT || attributeKey === TAG_PROPERTIES.ITEM_PROP)) {\n primaryAttributeKey = attributeKey;\n }\n }\n\n if (!primaryAttributeKey || !tag[primaryAttributeKey]) {\n return false;\n }\n\n var value = tag[primaryAttributeKey].toLowerCase();\n\n if (!approvedSeenTags[primaryAttributeKey]) {\n approvedSeenTags[primaryAttributeKey] = {};\n }\n\n if (!instanceSeenTags[primaryAttributeKey]) {\n instanceSeenTags[primaryAttributeKey] = {};\n }\n\n if (!approvedSeenTags[primaryAttributeKey][value]) {\n instanceSeenTags[primaryAttributeKey][value] = true;\n return true;\n }\n\n return false;\n }).reverse().forEach(function (tag) {\n return approvedTags.push(tag);\n });\n\n // Update seen tags with tags from this instance\n var keys = Object.keys(instanceSeenTags);\n for (var i = 0; i < keys.length; i++) {\n var attributeKey = keys[i];\n var tagUnion = objectAssign({}, approvedSeenTags[attributeKey], instanceSeenTags[attributeKey]);\n\n approvedSeenTags[attributeKey] = tagUnion;\n }\n\n return approvedTags;\n }, []).reverse();\n};\n\nvar getInnermostProperty = function getInnermostProperty(propsList, property) {\n for (var i = propsList.length - 1; i >= 0; i--) {\n var props = propsList[i];\n\n if (props.hasOwnProperty(property)) {\n return props[property];\n }\n }\n\n return null;\n};\n\nvar reducePropsToState = function reducePropsToState(propsList) {\n return {\n baseTag: getBaseTagFromPropsList([TAG_PROPERTIES.HREF, TAG_PROPERTIES.TARGET], propsList),\n bodyAttributes: getAttributesFromPropsList(ATTRIBUTE_NAMES.BODY, propsList),\n defer: getInnermostProperty(propsList, HELMET_PROPS.DEFER),\n encode: getInnermostProperty(propsList, HELMET_PROPS.ENCODE_SPECIAL_CHARACTERS),\n htmlAttributes: getAttributesFromPropsList(ATTRIBUTE_NAMES.HTML, propsList),\n linkTags: getTagsFromPropsList(TAG_NAMES.LINK, [TAG_PROPERTIES.REL, TAG_PROPERTIES.HREF], propsList),\n metaTags: getTagsFromPropsList(TAG_NAMES.META, [TAG_PROPERTIES.NAME, TAG_PROPERTIES.CHARSET, TAG_PROPERTIES.HTTPEQUIV, TAG_PROPERTIES.PROPERTY, TAG_PROPERTIES.ITEM_PROP], propsList),\n noscriptTags: getTagsFromPropsList(TAG_NAMES.NOSCRIPT, [TAG_PROPERTIES.INNER_HTML], propsList),\n onChangeClientState: getOnChangeClientState(propsList),\n scriptTags: getTagsFromPropsList(TAG_NAMES.SCRIPT, [TAG_PROPERTIES.SRC, TAG_PROPERTIES.INNER_HTML], propsList),\n styleTags: getTagsFromPropsList(TAG_NAMES.STYLE, [TAG_PROPERTIES.CSS_TEXT], propsList),\n title: getTitleFromPropsList(propsList),\n titleAttributes: getAttributesFromPropsList(ATTRIBUTE_NAMES.TITLE, propsList)\n };\n};\n\nvar rafPolyfill = function () {\n var clock = Date.now();\n\n return function (callback) {\n var currentTime = Date.now();\n\n if (currentTime - clock > 16) {\n clock = currentTime;\n callback(currentTime);\n } else {\n setTimeout(function () {\n rafPolyfill(callback);\n }, 0);\n }\n };\n}();\n\nvar cafPolyfill = function cafPolyfill(id) {\n return clearTimeout(id);\n};\n\nvar requestAnimationFrame = typeof window !== \"undefined\" ? window.requestAnimationFrame && window.requestAnimationFrame.bind(window) || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || rafPolyfill : global.requestAnimationFrame || rafPolyfill;\n\nvar cancelAnimationFrame = typeof window !== \"undefined\" ? window.cancelAnimationFrame || window.webkitCancelAnimationFrame || window.mozCancelAnimationFrame || cafPolyfill : global.cancelAnimationFrame || cafPolyfill;\n\nvar warn = function warn(msg) {\n return console && typeof console.warn === \"function\" && console.warn(msg);\n};\n\nvar _helmetCallback = null;\n\nvar handleClientStateChange = function handleClientStateChange(newState) {\n if (_helmetCallback) {\n cancelAnimationFrame(_helmetCallback);\n }\n\n if (newState.defer) {\n _helmetCallback = requestAnimationFrame(function () {\n commitTagChanges(newState, function () {\n _helmetCallback = null;\n });\n });\n } else {\n commitTagChanges(newState);\n _helmetCallback = null;\n }\n};\n\nvar commitTagChanges = function commitTagChanges(newState, cb) {\n var baseTag = newState.baseTag,\n bodyAttributes = newState.bodyAttributes,\n htmlAttributes = newState.htmlAttributes,\n linkTags = newState.linkTags,\n metaTags = newState.metaTags,\n noscriptTags = newState.noscriptTags,\n onChangeClientState = newState.onChangeClientState,\n scriptTags = newState.scriptTags,\n styleTags = newState.styleTags,\n title = newState.title,\n titleAttributes = newState.titleAttributes;\n\n updateAttributes(TAG_NAMES.BODY, bodyAttributes);\n updateAttributes(TAG_NAMES.HTML, htmlAttributes);\n\n updateTitle(title, titleAttributes);\n\n var tagUpdates = {\n baseTag: updateTags(TAG_NAMES.BASE, baseTag),\n linkTags: updateTags(TAG_NAMES.LINK, linkTags),\n metaTags: updateTags(TAG_NAMES.META, metaTags),\n noscriptTags: updateTags(TAG_NAMES.NOSCRIPT, noscriptTags),\n scriptTags: updateTags(TAG_NAMES.SCRIPT, scriptTags),\n styleTags: updateTags(TAG_NAMES.STYLE, styleTags)\n };\n\n var addedTags = {};\n var removedTags = {};\n\n Object.keys(tagUpdates).forEach(function (tagType) {\n var _tagUpdates$tagType = tagUpdates[tagType],\n newTags = _tagUpdates$tagType.newTags,\n oldTags = _tagUpdates$tagType.oldTags;\n\n\n if (newTags.length) {\n addedTags[tagType] = newTags;\n }\n if (oldTags.length) {\n removedTags[tagType] = tagUpdates[tagType].oldTags;\n }\n });\n\n cb && cb();\n\n onChangeClientState(newState, addedTags, removedTags);\n};\n\nvar flattenArray = function flattenArray(possibleArray) {\n return Array.isArray(possibleArray) ? possibleArray.join(\"\") : possibleArray;\n};\n\nvar updateTitle = function updateTitle(title, attributes) {\n if (typeof title !== \"undefined\" && document.title !== title) {\n document.title = flattenArray(title);\n }\n\n updateAttributes(TAG_NAMES.TITLE, attributes);\n};\n\nvar updateAttributes = function updateAttributes(tagName, attributes) {\n var elementTag = document.getElementsByTagName(tagName)[0];\n\n if (!elementTag) {\n return;\n }\n\n var helmetAttributeString = elementTag.getAttribute(HELMET_ATTRIBUTE);\n var helmetAttributes = helmetAttributeString ? helmetAttributeString.split(\",\") : [];\n var attributesToRemove = [].concat(helmetAttributes);\n var attributeKeys = Object.keys(attributes);\n\n for (var i = 0; i < attributeKeys.length; i++) {\n var attribute = attributeKeys[i];\n var value = attributes[attribute] || \"\";\n\n if (elementTag.getAttribute(attribute) !== value) {\n elementTag.setAttribute(attribute, value);\n }\n\n if (helmetAttributes.indexOf(attribute) === -1) {\n helmetAttributes.push(attribute);\n }\n\n var indexToSave = attributesToRemove.indexOf(attribute);\n if (indexToSave !== -1) {\n attributesToRemove.splice(indexToSave, 1);\n }\n }\n\n for (var _i = attributesToRemove.length - 1; _i >= 0; _i--) {\n elementTag.removeAttribute(attributesToRemove[_i]);\n }\n\n if (helmetAttributes.length === attributesToRemove.length) {\n elementTag.removeAttribute(HELMET_ATTRIBUTE);\n } else if (elementTag.getAttribute(HELMET_ATTRIBUTE) !== attributeKeys.join(\",\")) {\n elementTag.setAttribute(HELMET_ATTRIBUTE, attributeKeys.join(\",\"));\n }\n};\n\nvar updateTags = function updateTags(type, tags) {\n var headElement = document.head || document.querySelector(TAG_NAMES.HEAD);\n var tagNodes = headElement.querySelectorAll(type + \"[\" + HELMET_ATTRIBUTE + \"]\");\n var oldTags = Array.prototype.slice.call(tagNodes);\n var newTags = [];\n var indexToDelete = void 0;\n\n if (tags && tags.length) {\n tags.forEach(function (tag) {\n var newElement = document.createElement(type);\n\n for (var attribute in tag) {\n if (tag.hasOwnProperty(attribute)) {\n if (attribute === TAG_PROPERTIES.INNER_HTML) {\n newElement.innerHTML = tag.innerHTML;\n } else if (attribute === TAG_PROPERTIES.CSS_TEXT) {\n if (newElement.styleSheet) {\n newElement.styleSheet.cssText = tag.cssText;\n } else {\n newElement.appendChild(document.createTextNode(tag.cssText));\n }\n } else {\n var value = typeof tag[attribute] === \"undefined\" ? \"\" : tag[attribute];\n newElement.setAttribute(attribute, value);\n }\n }\n }\n\n newElement.setAttribute(HELMET_ATTRIBUTE, \"true\");\n\n // Remove a duplicate tag from domTagstoRemove, so it isn't cleared.\n if (oldTags.some(function (existingTag, index) {\n indexToDelete = index;\n return newElement.isEqualNode(existingTag);\n })) {\n oldTags.splice(indexToDelete, 1);\n } else {\n newTags.push(newElement);\n }\n });\n }\n\n oldTags.forEach(function (tag) {\n return tag.parentNode.removeChild(tag);\n });\n newTags.forEach(function (tag) {\n return headElement.appendChild(tag);\n });\n\n return {\n oldTags: oldTags,\n newTags: newTags\n };\n};\n\nvar generateElementAttributesAsString = function generateElementAttributesAsString(attributes) {\n return Object.keys(attributes).reduce(function (str, key) {\n var attr = typeof attributes[key] !== \"undefined\" ? key + \"=\\\"\" + attributes[key] + \"\\\"\" : \"\" + key;\n return str ? str + \" \" + attr : attr;\n }, \"\");\n};\n\nvar generateTitleAsString = function generateTitleAsString(type, title, attributes, encode) {\n var attributeString = generateElementAttributesAsString(attributes);\n var flattenedTitle = flattenArray(title);\n return attributeString ? \"<\" + type + \" \" + HELMET_ATTRIBUTE + \"=\\\"true\\\" \" + attributeString + \">\" + encodeSpecialCharacters(flattenedTitle, encode) + \"</\" + type + \">\" : \"<\" + type + \" \" + HELMET_ATTRIBUTE + \"=\\\"true\\\">\" + encodeSpecialCharacters(flattenedTitle, encode) + \"</\" + type + \">\";\n};\n\nvar generateTagsAsString = function generateTagsAsString(type, tags, encode) {\n return tags.reduce(function (str, tag) {\n var attributeHtml = Object.keys(tag).filter(function (attribute) {\n return !(attribute === TAG_PROPERTIES.INNER_HTML || attribute === TAG_PROPERTIES.CSS_TEXT);\n }).reduce(function (string, attribute) {\n var attr = typeof tag[attribute] === \"undefined\" ? attribute : attribute + \"=\\\"\" + encodeSpecialCharacters(tag[attribute], encode) + \"\\\"\";\n return string ? string + \" \" + attr : attr;\n }, \"\");\n\n var tagContent = tag.innerHTML || tag.cssText || \"\";\n\n var isSelfClosing = SELF_CLOSING_TAGS.indexOf(type) === -1;\n\n return str + \"<\" + type + \" \" + HELMET_ATTRIBUTE + \"=\\\"true\\\" \" + attributeHtml + (isSelfClosing ? \"/>\" : \">\" + tagContent + \"</\" + type + \">\");\n }, \"\");\n};\n\nvar convertElementAttributestoReactProps = function convertElementAttributestoReactProps(attributes) {\n var initProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n return Object.keys(attributes).reduce(function (obj, key) {\n obj[REACT_TAG_MAP[key] || key] = attributes[key];\n return obj;\n }, initProps);\n};\n\nvar convertReactPropstoHtmlAttributes = function convertReactPropstoHtmlAttributes(props) {\n var initAttributes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n return Object.keys(props).reduce(function (obj, key) {\n obj[HTML_TAG_MAP[key] || key] = props[key];\n return obj;\n }, initAttributes);\n};\n\nvar generateTitleAsReactComponent = function generateTitleAsReactComponent(type, title, attributes) {\n var _initProps;\n\n // assigning into an array to define toString function on it\n var initProps = (_initProps = {\n key: title\n }, _initProps[HELMET_ATTRIBUTE] = true, _initProps);\n var props = convertElementAttributestoReactProps(attributes, initProps);\n\n return [React.createElement(TAG_NAMES.TITLE, props, title)];\n};\n\nvar generateTagsAsReactComponent = function generateTagsAsReactComponent(type, tags) {\n return tags.map(function (tag, i) {\n var _mappedTag;\n\n var mappedTag = (_mappedTag = {\n key: i\n }, _mappedTag[HELMET_ATTRIBUTE] = true, _mappedTag);\n\n Object.keys(tag).forEach(function (attribute) {\n var mappedAttribute = REACT_TAG_MAP[attribute] || attribute;\n\n if (mappedAttribute === TAG_PROPERTIES.INNER_HTML || mappedAttribute === TAG_PROPERTIES.CSS_TEXT) {\n var content = tag.innerHTML || tag.cssText;\n mappedTag.dangerouslySetInnerHTML = { __html: content };\n } else {\n mappedTag[mappedAttribute] = tag[attribute];\n }\n });\n\n return React.createElement(type, mappedTag);\n });\n};\n\nvar getMethodsForTag = function getMethodsForTag(type, tags, encode) {\n switch (type) {\n case TAG_NAMES.TITLE:\n return {\n toComponent: function toComponent() {\n return generateTitleAsReactComponent(type, tags.title, tags.titleAttributes, encode);\n },\n toString: function toString() {\n return generateTitleAsString(type, tags.title, tags.titleAttributes, encode);\n }\n };\n case ATTRIBUTE_NAMES.BODY:\n case ATTRIBUTE_NAMES.HTML:\n return {\n toComponent: function toComponent() {\n return convertElementAttributestoReactProps(tags);\n },\n toString: function toString() {\n return generateElementAttributesAsString(tags);\n }\n };\n default:\n return {\n toComponent: function toComponent() {\n return generateTagsAsReactComponent(type, tags);\n },\n toString: function toString() {\n return generateTagsAsString(type, tags, encode);\n }\n };\n }\n};\n\nvar mapStateOnServer = function mapStateOnServer(_ref) {\n var baseTag = _ref.baseTag,\n bodyAttributes = _ref.bodyAttributes,\n encode = _ref.encode,\n htmlAttributes = _ref.htmlAttributes,\n linkTags = _ref.linkTags,\n metaTags = _ref.metaTags,\n noscriptTags = _ref.noscriptTags,\n scriptTags = _ref.scriptTags,\n styleTags = _ref.styleTags,\n _ref$title = _ref.title,\n title = _ref$title === undefined ? \"\" : _ref$title,\n titleAttributes = _ref.titleAttributes;\n return {\n base: getMethodsForTag(TAG_NAMES.BASE, baseTag, encode),\n bodyAttributes: getMethodsForTag(ATTRIBUTE_NAMES.BODY, bodyAttributes, encode),\n htmlAttributes: getMethodsForTag(ATTRIBUTE_NAMES.HTML, htmlAttributes, encode),\n link: getMethodsForTag(TAG_NAMES.LINK, linkTags, encode),\n meta: getMethodsForTag(TAG_NAMES.META, metaTags, encode),\n noscript: getMethodsForTag(TAG_NAMES.NOSCRIPT, noscriptTags, encode),\n script: getMethodsForTag(TAG_NAMES.SCRIPT, scriptTags, encode),\n style: getMethodsForTag(TAG_NAMES.STYLE, styleTags, encode),\n title: getMethodsForTag(TAG_NAMES.TITLE, { title: title, titleAttributes: titleAttributes }, encode)\n };\n};\n\nvar Helmet = function Helmet(Component) {\n var _class, _temp;\n\n return _temp = _class = function (_React$Component) {\n inherits(HelmetWrapper, _React$Component);\n\n function HelmetWrapper() {\n classCallCheck(this, HelmetWrapper);\n return possibleConstructorReturn(this, _React$Component.apply(this, arguments));\n }\n\n HelmetWrapper.prototype.shouldComponentUpdate = function shouldComponentUpdate(nextProps) {\n return !isEqual(this.props, nextProps);\n };\n\n HelmetWrapper.prototype.mapNestedChildrenToProps = function mapNestedChildrenToProps(child, nestedChildren) {\n if (!nestedChildren) {\n return null;\n }\n\n switch (child.type) {\n case TAG_NAMES.SCRIPT:\n case TAG_NAMES.NOSCRIPT:\n return {\n innerHTML: nestedChildren\n };\n\n case TAG_NAMES.STYLE:\n return {\n cssText: nestedChildren\n };\n }\n\n throw new Error(\"<\" + child.type + \" /> elements are self-closing and can not contain children. Refer to our API for more information.\");\n };\n\n HelmetWrapper.prototype.flattenArrayTypeChildren = function flattenArrayTypeChildren(_ref) {\n var _babelHelpers$extends;\n\n var child = _ref.child,\n arrayTypeChildren = _ref.arrayTypeChildren,\n newChildProps = _ref.newChildProps,\n nestedChildren = _ref.nestedChildren;\n\n return _extends({}, arrayTypeChildren, (_babelHelpers$extends = {}, _babelHelpers$extends[child.type] = [].concat(arrayTypeChildren[child.type] || [], [_extends({}, newChildProps, this.mapNestedChildrenToProps(child, nestedChildren))]), _babelHelpers$extends));\n };\n\n HelmetWrapper.prototype.mapObjectTypeChildren = function mapObjectTypeChildren(_ref2) {\n var _babelHelpers$extends2, _babelHelpers$extends3;\n\n var child = _ref2.child,\n newProps = _ref2.newProps,\n newChildProps = _ref2.newChildProps,\n nestedChildren = _ref2.nestedChildren;\n\n switch (child.type) {\n case TAG_NAMES.TITLE:\n return _extends({}, newProps, (_babelHelpers$extends2 = {}, _babelHelpers$extends2[child.type] = nestedChildren, _babelHelpers$extends2.titleAttributes = _extends({}, newChildProps), _babelHelpers$extends2));\n\n case TAG_NAMES.BODY:\n return _extends({}, newProps, {\n bodyAttributes: _extends({}, newChildProps)\n });\n\n case TAG_NAMES.HTML:\n return _extends({}, newProps, {\n htmlAttributes: _extends({}, newChildProps)\n });\n }\n\n return _extends({}, newProps, (_babelHelpers$extends3 = {}, _babelHelpers$extends3[child.type] = _extends({}, newChildProps), _babelHelpers$extends3));\n };\n\n HelmetWrapper.prototype.mapArrayTypeChildrenToProps = function mapArrayTypeChildrenToProps(arrayTypeChildren, newProps) {\n var newFlattenedProps = _extends({}, newProps);\n\n Object.keys(arrayTypeChildren).forEach(function (arrayChildName) {\n var _babelHelpers$extends4;\n\n newFlattenedProps = _extends({}, newFlattenedProps, (_babelHelpers$extends4 = {}, _babelHelpers$extends4[arrayChildName] = arrayTypeChildren[arrayChildName], _babelHelpers$extends4));\n });\n\n return newFlattenedProps;\n };\n\n HelmetWrapper.prototype.warnOnInvalidChildren = function warnOnInvalidChildren(child, nestedChildren) {\n if (process.env.NODE_ENV !== \"production\") {\n if (!VALID_TAG_NAMES.some(function (name) {\n return child.type === name;\n })) {\n if (typeof child.type === \"function\") {\n return warn(\"You may be attempting to nest <Helmet> components within each other, which is not allowed. Refer to our API for more information.\");\n }\n\n return warn(\"Only elements types \" + VALID_TAG_NAMES.join(\", \") + \" are allowed. Helmet does not support rendering <\" + child.type + \"> elements. Refer to our API for more information.\");\n }\n\n if (nestedChildren && typeof nestedChildren !== \"string\" && (!Array.isArray(nestedChildren) || nestedChildren.some(function (nestedChild) {\n return typeof nestedChild !== \"string\";\n }))) {\n throw new Error(\"Helmet expects a string as a child of <\" + child.type + \">. Did you forget to wrap your children in braces? ( <\" + child.type + \">{``}</\" + child.type + \"> ) Refer to our API for more information.\");\n }\n }\n\n return true;\n };\n\n HelmetWrapper.prototype.mapChildrenToProps = function mapChildrenToProps(children, newProps) {\n var _this2 = this;\n\n var arrayTypeChildren = {};\n\n React.Children.forEach(children, function (child) {\n if (!child || !child.props) {\n return;\n }\n\n var _child$props = child.props,\n nestedChildren = _child$props.children,\n childProps = objectWithoutProperties(_child$props, [\"children\"]);\n\n var newChildProps = convertReactPropstoHtmlAttributes(childProps);\n\n _this2.warnOnInvalidChildren(child, nestedChildren);\n\n switch (child.type) {\n case TAG_NAMES.LINK:\n case TAG_NAMES.META:\n case TAG_NAMES.NOSCRIPT:\n case TAG_NAMES.SCRIPT:\n case TAG_NAMES.STYLE:\n arrayTypeChildren = _this2.flattenArrayTypeChildren({\n child: child,\n arrayTypeChildren: arrayTypeChildren,\n newChildProps: newChildProps,\n nestedChildren: nestedChildren\n });\n break;\n\n default:\n newProps = _this2.mapObjectTypeChildren({\n child: child,\n newProps: newProps,\n newChildProps: newChildProps,\n nestedChildren: nestedChildren\n });\n break;\n }\n });\n\n newProps = this.mapArrayTypeChildrenToProps(arrayTypeChildren, newProps);\n return newProps;\n };\n\n HelmetWrapper.prototype.render = function render() {\n var _props = this.props,\n children = _props.children,\n props = objectWithoutProperties(_props, [\"children\"]);\n\n var newProps = _extends({}, props);\n\n if (children) {\n newProps = this.mapChildrenToProps(children, newProps);\n }\n\n return React.createElement(Component, newProps);\n };\n\n createClass(HelmetWrapper, null, [{\n key: \"canUseDOM\",\n\n\n // Component.peek comes from react-side-effect:\n // For testing, you may use a static peek() method available on the returned component.\n // It lets you get the current state without resetting the mounted instance stack.\n // Don’t use it for anything other than testing.\n\n /**\n * @param {Object} base: {\"target\": \"_blank\", \"href\": \"http://mysite.com/\"}\n * @param {Object} bodyAttributes: {\"className\": \"root\"}\n * @param {String} defaultTitle: \"Default Title\"\n * @param {Boolean} defer: true\n * @param {Boolean} encodeSpecialCharacters: true\n * @param {Object} htmlAttributes: {\"lang\": \"en\", \"amp\": undefined}\n * @param {Array} link: [{\"rel\": \"canonical\", \"href\": \"http://mysite.com/example\"}]\n * @param {Array} meta: [{\"name\": \"description\", \"content\": \"Test description\"}]\n * @param {Array} noscript: [{\"innerHTML\": \"<img src='http://mysite.com/js/test.js'\"}]\n * @param {Function} onChangeClientState: \"(newState) => console.log(newState)\"\n * @param {Array} script: [{\"type\": \"text/javascript\", \"src\": \"http://mysite.com/js/test.js\"}]\n * @param {Array} style: [{\"type\": \"text/css\", \"cssText\": \"div { display: block; color: blue; }\"}]\n * @param {String} title: \"Title\"\n * @param {Object} titleAttributes: {\"itemprop\": \"name\"}\n * @param {String} titleTemplate: \"MySite.com - %s\"\n */\n set: function set$$1(canUseDOM) {\n Component.canUseDOM = canUseDOM;\n }\n }]);\n return HelmetWrapper;\n }(React.Component), _class.propTypes = {\n base: PropTypes.object,\n bodyAttributes: PropTypes.object,\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]),\n defaultTitle: PropTypes.string,\n defer: PropTypes.bool,\n encodeSpecialCharacters: PropTypes.bool,\n htmlAttributes: PropTypes.object,\n link: PropTypes.arrayOf(PropTypes.object),\n meta: PropTypes.arrayOf(PropTypes.object),\n noscript: PropTypes.arrayOf(PropTypes.object),\n onChangeClientState: PropTypes.func,\n script: PropTypes.arrayOf(PropTypes.object),\n style: PropTypes.arrayOf(PropTypes.object),\n title: PropTypes.string,\n titleAttributes: PropTypes.object,\n titleTemplate: PropTypes.string\n }, _class.defaultProps = {\n defer: true,\n encodeSpecialCharacters: true\n }, _class.peek = Component.peek, _class.rewind = function () {\n var mappedState = Component.rewind();\n if (!mappedState) {\n // provide fallback if mappedState is undefined\n mappedState = mapStateOnServer({\n baseTag: [],\n bodyAttributes: {},\n encodeSpecialCharacters: true,\n htmlAttributes: {},\n linkTags: [],\n metaTags: [],\n noscriptTags: [],\n scriptTags: [],\n styleTags: [],\n title: \"\",\n titleAttributes: {}\n });\n }\n\n return mappedState;\n }, _temp;\n};\n\nvar NullComponent = function NullComponent() {\n return null;\n};\n\nvar HelmetSideEffects = withSideEffect(reducePropsToState, handleClientStateChange, mapStateOnServer)(NullComponent);\n\nvar HelmetExport = Helmet(HelmetSideEffects);\nHelmetExport.renderStatic = HelmetExport.rewind;\n\nexport default HelmetExport;\nexport { HelmetExport as Helmet };\n","/**\n * SEO component that queries for data with\n * Gatsby's useStaticQuery React hook\n *\n * See: https://www.gatsbyjs.com/docs/use-static-query/\n */\n\nimport React from \"react\"\nimport PropTypes from \"prop-types\"\nimport { Helmet } from \"react-helmet\"\nimport { useStaticQuery, graphql } from \"gatsby\"\n\nconst Seo = ({ description, lang, meta, title }) => {\n const { site } = useStaticQuery(\n graphql`\n query {\n site {\n siteMetadata {\n title\n description\n social {\n twitter\n }\n }\n }\n }\n `\n )\n\n const metaDescription = description || site.siteMetadata.description\n const defaultTitle = site.siteMetadata?.title\n\n return (\n <Helmet\n htmlAttributes={{\n lang,\n }}\n title={title}\n titleTemplate={defaultTitle ? `%s | ${defaultTitle}` : null}\n meta={[\n {\n name: `description`,\n content: metaDescription,\n },\n {\n property: `og:title`,\n content: title,\n },\n {\n property: `og:description`,\n content: metaDescription,\n },\n {\n property: `og:type`,\n content: `website`,\n },\n {\n name: `twitter:card`,\n content: `summary`,\n },\n {\n name: `twitter:creator`,\n content: site.siteMetadata?.social?.twitter || ``,\n },\n {\n name: `twitter:title`,\n content: title,\n },\n {\n name: `twitter:description`,\n content: metaDescription,\n },\n ].concat(meta)}\n />\n )\n}\n\nSeo.defaultProps = {\n lang: `en`,\n meta: [],\n description: ``,\n}\n\nSeo.propTypes = {\n description: PropTypes.string,\n lang: PropTypes.string,\n meta: PropTypes.arrayOf(PropTypes.object),\n title: PropTypes.string.isRequired,\n}\n\nexport default Seo\n","import * as React from 'react';\nimport { useContext, useMemo } from 'react';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport const DEFAULT_BREAKPOINTS = ['xxl', 'xl', 'lg', 'md', 'sm', 'xs'];\nexport const DEFAULT_MIN_BREAKPOINT = 'xs';\nconst ThemeContext = /*#__PURE__*/React.createContext({\n prefixes: {},\n breakpoints: DEFAULT_BREAKPOINTS,\n minBreakpoint: DEFAULT_MIN_BREAKPOINT\n});\nconst {\n Consumer,\n Provider\n} = ThemeContext;\nfunction ThemeProvider({\n prefixes = {},\n breakpoints = DEFAULT_BREAKPOINTS,\n minBreakpoint = DEFAULT_MIN_BREAKPOINT,\n dir,\n children\n}) {\n const contextValue = useMemo(() => ({\n prefixes: {\n ...prefixes\n },\n breakpoints,\n minBreakpoint,\n dir\n }), [prefixes, breakpoints, minBreakpoint, dir]);\n return /*#__PURE__*/_jsx(Provider, {\n value: contextValue,\n children: children\n });\n}\nexport function useBootstrapPrefix(prefix, defaultPrefix) {\n const {\n prefixes\n } = useContext(ThemeContext);\n return prefix || prefixes[defaultPrefix] || defaultPrefix;\n}\nexport function useBootstrapBreakpoints() {\n const {\n breakpoints\n } = useContext(ThemeContext);\n return breakpoints;\n}\nexport function useBootstrapMinBreakpoint() {\n const {\n minBreakpoint\n } = useContext(ThemeContext);\n return minBreakpoint;\n}\nexport function useIsRTL() {\n const {\n dir\n } = useContext(ThemeContext);\n return dir === 'rtl';\n}\nfunction createBootstrapComponent(Component, opts) {\n if (typeof opts === 'string') opts = {\n prefix: opts\n };\n const isClassy = Component.prototype && Component.prototype.isReactComponent;\n // If it's a functional component make sure we don't break it with a ref\n const {\n prefix,\n forwardRefAs = isClassy ? 'ref' : 'innerRef'\n } = opts;\n const Wrapped = /*#__PURE__*/React.forwardRef(({\n ...props\n }, ref) => {\n props[forwardRefAs] = ref;\n const bsPrefix = useBootstrapPrefix(props.bsPrefix, prefix);\n return /*#__PURE__*/_jsx(Component, {\n ...props,\n bsPrefix: bsPrefix\n });\n });\n Wrapped.displayName = `Bootstrap(${Component.displayName || Component.name})`;\n return Wrapped;\n}\nexport { createBootstrapComponent, Consumer as ThemeConsumer };\nexport default ThemeProvider;","/* global Map:readonly, Set:readonly, ArrayBuffer:readonly */\n\nvar hasElementType = typeof Element !== 'undefined';\nvar hasMap = typeof Map === 'function';\nvar hasSet = typeof Set === 'function';\nvar hasArrayBuffer = typeof ArrayBuffer === 'function' && !!ArrayBuffer.isView;\n\n// Note: We **don't** need `envHasBigInt64Array` in fde es6/index.js\n\nfunction equal(a, b) {\n // START: fast-deep-equal es6/index.js 3.1.1\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n // START: Modifications:\n // 1. Extra `has<Type> &&` helpers in initial condition allow es6 code\n // to co-exist with es5.\n // 2. Replace `for of` with es5 compliant iteration using `for`.\n // Basically, take:\n //\n // ```js\n // for (i of a.entries())\n // if (!b.has(i[0])) return false;\n // ```\n //\n // ... and convert to:\n //\n // ```js\n // it = a.entries();\n // while (!(i = it.next()).done)\n // if (!b.has(i.value[0])) return false;\n // ```\n //\n // **Note**: `i` access switches to `i.value`.\n var it;\n if (hasMap && (a instanceof Map) && (b instanceof Map)) {\n if (a.size !== b.size) return false;\n it = a.entries();\n while (!(i = it.next()).done)\n if (!b.has(i.value[0])) return false;\n it = a.entries();\n while (!(i = it.next()).done)\n if (!equal(i.value[1], b.get(i.value[0]))) return false;\n return true;\n }\n\n if (hasSet && (a instanceof Set) && (b instanceof Set)) {\n if (a.size !== b.size) return false;\n it = a.entries();\n while (!(i = it.next()).done)\n if (!b.has(i.value[0])) return false;\n return true;\n }\n // END: Modifications\n\n if (hasArrayBuffer && ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (a[i] !== b[i]) return false;\n return true;\n }\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n // END: fast-deep-equal\n\n // START: react-fast-compare\n // custom handling for DOM elements\n if (hasElementType && a instanceof Element) return false;\n\n // custom handling for React/Preact\n for (i = length; i-- !== 0;) {\n if ((keys[i] === '_owner' || keys[i] === '__v' || keys[i] === '__o') && a.$$typeof) {\n // React-specific: avoid traversing React elements' _owner\n // Preact-specific: avoid traversing Preact elements' __v and __o\n // __v = $_original / $_vnode\n // __o = $_owner\n // These properties contain circular references and are not needed when\n // comparing the actual elements (and not their owners)\n // .$$typeof and ._store on just reasonable markers of elements\n\n continue;\n }\n\n // all other properties should be traversed as usual\n if (!equal(a[keys[i]], b[keys[i]])) return false;\n }\n // END: react-fast-compare\n\n // START: fast-deep-equal\n return true;\n }\n\n return a !== a && b !== b;\n}\n// end fast-deep-equal\n\nmodule.exports = function isEqual(a, b) {\n try {\n return equal(a, b);\n } catch (error) {\n if (((error.message || '').match(/stack|recursion/i))) {\n // warn on circular references, don't crash\n // browsers give this different errors name and messages:\n // chrome/safari: \"RangeError\", \"Maximum call stack size exceeded\"\n // firefox: \"InternalError\", too much recursion\"\n // edge: \"Error\", \"Out of stack space\"\n console.warn('react-fast-compare cannot handle circular refs');\n return false;\n }\n // some other error. we should definitely know about these\n throw error;\n }\n};\n","'use strict';\n\nfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\nvar React = require('react');\nvar React__default = _interopDefault(React);\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\nfunction withSideEffect(reducePropsToState, handleStateChangeOnClient, mapStateOnServer) {\n if (typeof reducePropsToState !== 'function') {\n throw new Error('Expected reducePropsToState to be a function.');\n }\n\n if (typeof handleStateChangeOnClient !== 'function') {\n throw new Error('Expected handleStateChangeOnClient to be a function.');\n }\n\n if (typeof mapStateOnServer !== 'undefined' && typeof mapStateOnServer !== 'function') {\n throw new Error('Expected mapStateOnServer to either be undefined or a function.');\n }\n\n function getDisplayName(WrappedComponent) {\n return WrappedComponent.displayName || WrappedComponent.name || 'Component';\n }\n\n return function wrap(WrappedComponent) {\n if (typeof WrappedComponent !== 'function') {\n throw new Error('Expected WrappedComponent to be a React component.');\n }\n\n var mountedInstances = [];\n var state;\n\n function emitChange() {\n state = reducePropsToState(mountedInstances.map(function (instance) {\n return instance.props;\n }));\n\n if (SideEffect.canUseDOM) {\n handleStateChangeOnClient(state);\n } else if (mapStateOnServer) {\n state = mapStateOnServer(state);\n }\n }\n\n var SideEffect =\n /*#__PURE__*/\n function (_PureComponent) {\n _inheritsLoose(SideEffect, _PureComponent);\n\n function SideEffect() {\n return _PureComponent.apply(this, arguments) || this;\n }\n\n // Try to use displayName of wrapped component\n // Expose canUseDOM so tests can monkeypatch it\n SideEffect.peek = function peek() {\n return state;\n };\n\n SideEffect.rewind = function rewind() {\n if (SideEffect.canUseDOM) {\n throw new Error('You may only call rewind() on the server. Call peek() to read the current state.');\n }\n\n var recordedState = state;\n state = undefined;\n mountedInstances = [];\n return recordedState;\n };\n\n var _proto = SideEffect.prototype;\n\n _proto.UNSAFE_componentWillMount = function UNSAFE_componentWillMount() {\n mountedInstances.push(this);\n emitChange();\n };\n\n _proto.componentDidUpdate = function componentDidUpdate() {\n emitChange();\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n var index = mountedInstances.indexOf(this);\n mountedInstances.splice(index, 1);\n emitChange();\n };\n\n _proto.render = function render() {\n return React__default.createElement(WrappedComponent, this.props);\n };\n\n return SideEffect;\n }(React.PureComponent);\n\n _defineProperty(SideEffect, \"displayName\", \"SideEffect(\" + getDisplayName(WrappedComponent) + \")\");\n\n _defineProperty(SideEffect, \"canUseDOM\", canUseDOM);\n\n return SideEffect;\n };\n}\n\nmodule.exports = withSideEffect;\n"],"names":["GenIcon","module","exports","F","props","DefaultContext","color","undefined","size","className","style","attr","IconContext","__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","apply","this","__rest","e","indexOf","getOwnPropertySymbols","propertyIsEnumerable","Tree2Element","tree","map","node","tag","key","child","data","IconBase","elem","conf","title","svgProps","computedSize","stroke","fill","strokeWidth","height","width","xmlns","children","Consumer","UPPERCASE","LOWERCASE","LEADING_CAPITAL","IDENTIFIER","SEPARATORS","LEADING_SEPARATORS","RegExp","source","SEPARATORS_AND_IDENTIFIER","NUMBERS_AND_IDENTIFIER","camelCase","input","options","Array","isArray","TypeError","pascalCase","preserveConsecutiveUppercase","x","trim","filter","join","toLowerCase","locale","string","toLocaleLowerCase","toUpperCase","toLocaleUpperCase","isLastCharLower","isLastCharUpper","isLastLastCharUpper","character","test","slice","preserveCamelCase","replace","lastIndex","m1","charAt","_","identifier","m","postProcess","hasOwn","classNames","classes","arg","argType","push","inner","toString","includes","default","W","hasNativeLazyLoadSupport","HTMLImageElement","R","GATSBY___IMAGE","z","a","position","overflow","display","verticalAlign","P","h","left","top","transform","transition","willChange","loading","shouldLoad","opacity","A","r","o","l","backgroundColor","bottom","right","objectFit","objectPosition","d","H","_ref5","layout","paddingTop","maxWidth","alt","role","src","G","u","V","B","U","srcSet","decoding","Y","fallback","sources","sizes","_ref6","media","type","X","propTypes","isRequired","displayName","J","Z","Error","K","Q","ee","te","ae","_len","_key","c","concat","ie","image","se","re","ne","Set","oe","le","de","as","class","g","onStartLoad","onLoad","onError","f","w","y","b","v","E","k","S","M","N","$","JSON","stringify","images","I","then","_ref7","renderImageToString","swapPlaceholderImage","current","querySelector","complete","wasCached","setTimeout","removeAttribute","addEventListener","removeEventListener","add","has","_ref8","innerHTML","isLoading","isLoaded","requestAnimationFrame","cancelAnimationFrame","ref","dangerouslySetInnerHTML","__html","suppressHydrationWarning","ce","he","ue","__imageData","__error","console","warn","ge","imgClassName","imgStyle","placeholder","pe","_len2","_key2","me","fe","we","BackToPhotosButton","styled","Link","withConfig","componentId","PhotosListTile","div","PhotosListSpacer10px","PhotosListCategoryLabel","span","PhotosListStyledLink","PhotoCollectionHeroImage","GatsbyImage","TitleHeader","h1","BlogPostMetadata","CustomNav","nav","CustomNavUl","ul","CustomNavUlLi","CustomNavHomeButton","SiteFooterNotices","footer","Container","bsPrefix","fluid","Component","prefix","suffix","Navbar","React","to","href","FaRss","_ref","location","isRootPath","__PATH_PREFIX__","pathname","Date","getFullYear","clock","_class","_temp","ATTRIBUTE_NAMES","TAG_NAMES","BASE","BODY","HEAD","HTML","LINK","META","NOSCRIPT","SCRIPT","STYLE","TITLE","TAG_PROPERTIES","keys","name","REACT_TAG_MAP","accesskey","charset","contenteditable","contextmenu","itemprop","tabindex","HELMET_PROPS","HTML_TAG_MAP","reduce","obj","SELF_CLOSING_TAGS","HELMET_ATTRIBUTE","_typeof","Symbol","iterator","constructor","createClass","defineProperties","target","descriptor","enumerable","configurable","writable","defineProperty","Constructor","protoProps","staticProps","_extends","objectWithoutProperties","encodeSpecialCharacters","str","String","getTitleFromPropsList","propsList","innermostTitle","getInnermostProperty","innermostTemplate","innermostDefaultTitle","getOnChangeClientState","getAttributesFromPropsList","tagType","tagAttrs","getBaseTagFromPropsList","primaryAttributes","reverse","innermostBaseTag","lowerCaseAttributeKey","getTagsFromPropsList","tagName","approvedSeenTags","approvedTags","instanceTags","instanceSeenTags","primaryAttributeKey","attributeKey","value","forEach","tagUnion","property","rafPolyfill","now","callback","currentTime","cafPolyfill","id","clearTimeout","window","bind","webkitRequestAnimationFrame","mozRequestAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","msg","_helmetCallback","commitTagChanges","newState","cb","baseTag","bodyAttributes","htmlAttributes","linkTags","metaTags","noscriptTags","onChangeClientState","scriptTags","styleTags","titleAttributes","updateAttributes","updateTitle","tagUpdates","updateTags","addedTags","removedTags","_tagUpdates$tagType","newTags","oldTags","flattenArray","possibleArray","attributes","document","elementTag","getElementsByTagName","helmetAttributeString","getAttribute","helmetAttributes","split","attributesToRemove","attributeKeys","attribute","setAttribute","indexToSave","splice","_i","tags","headElement","head","tagNodes","querySelectorAll","indexToDelete","newElement","createElement","styleSheet","cssText","appendChild","createTextNode","some","existingTag","index","isEqualNode","parentNode","removeChild","generateElementAttributesAsString","convertElementAttributestoReactProps","initProps","getMethodsForTag","encode","toComponent","_initProps","attributeString","flattenedTitle","generateTitleAsString","_mappedTag","mappedTag","mappedAttribute","content","generateTagsAsReactComponent","attributeHtml","tagContent","isSelfClosing","generateTagsAsString","mapStateOnServer","_ref$title","base","link","meta","noscript","script","HelmetSideEffects","defer","HelmetExport","_React$Component","HelmetWrapper","instance","classCallCheck","self","ReferenceError","possibleConstructorReturn","subClass","superClass","create","setPrototypeOf","__proto__","inherits","shouldComponentUpdate","nextProps","mapNestedChildrenToProps","nestedChildren","flattenArrayTypeChildren","_babelHelpers$extends","arrayTypeChildren","newChildProps","mapObjectTypeChildren","_ref2","_babelHelpers$extends2","_babelHelpers$extends3","newProps","mapArrayTypeChildrenToProps","newFlattenedProps","arrayChildName","_babelHelpers$extends4","warnOnInvalidChildren","mapChildrenToProps","_this2","_child$props","initAttributes","convertReactPropstoHtmlAttributes","render","_props","set","canUseDOM","defaultTitle","titleTemplate","defaultProps","peek","rewind","mappedState","renderStatic","Seo","_site$siteMetadata","_site$siteMetadata2","_site$siteMetadata2$s","description","lang","site","useStaticQuery","metaDescription","siteMetadata","Helmet","social","twitter","DEFAULT_BREAKPOINTS","ThemeContext","prefixes","breakpoints","minBreakpoint","Provider","useBootstrapPrefix","defaultPrefix","useContext","useBootstrapBreakpoints","useBootstrapMinBreakpoint","hasElementType","Element","hasMap","Map","hasSet","hasArrayBuffer","ArrayBuffer","isView","equal","it","entries","next","done","get","flags","valueOf","$$typeof","error","message","match","ex","React__default","_defineProperty","reducePropsToState","handleStateChangeOnClient","WrappedComponent","state","mountedInstances","emitChange","SideEffect","_PureComponent","recordedState","_proto","UNSAFE_componentWillMount","componentDidUpdate","componentWillUnmount","PureComponent","getDisplayName"],"sourceRoot":""}