{"version":3,"file":"241a8aafa5cbbccdb5dc0b075aad1e0e9ca4cdb2-1985c80b0301cc2927b3.js","mappings":"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","sources":["webpack://wagetap-website/./node_modules/camelcase/index.js","webpack://wagetap-website/../src/image-utils.ts","webpack://wagetap-website/../src/components/hooks.ts","webpack://wagetap-website/../src/components/layout-wrapper.tsx","webpack://wagetap-website/../src/components/picture.tsx","webpack://wagetap-website/../src/components/placeholder.tsx","webpack://wagetap-website/../src/components/main-image.tsx","webpack://wagetap-website/../src/components/gatsby-image.server.tsx","webpack://wagetap-website/../src/components/gatsby-image.browser.tsx","webpack://wagetap-website/../src/components/static-image.server.tsx","webpack://wagetap-website/../src/components/static-image.tsx","webpack://wagetap-website/./src/components/app_links/app_links.js","webpack://wagetap-website/./src/components/ui/button.js","webpack://wagetap-website/./static/assets/img/arrow-right.svg","webpack://wagetap-website/./src/components/ui/container.js","webpack://wagetap-website/./src/components/ui/navigation/navigation.module.css","webpack://wagetap-website/./src/components/ui/navigation/navigation.js","webpack://wagetap-website/./src/components/ui/navigation/logo-white.svg"],"sourcesContent":["'use strict';\n\nconst preserveCamelCase = string => {\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 && /[a-zA-Z]/.test(character) && character.toUpperCase() === 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 && /[a-zA-Z]/.test(character) && character.toLowerCase() === 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 = character.toLowerCase() === character && character.toUpperCase() !== character;\n\t\t\tisLastLastCharUpper = isLastCharUpper;\n\t\t\tisLastCharUpper = character.toUpperCase() === character && character.toLowerCase() !== character;\n\t\t}\n\t}\n\n\treturn string;\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 = Object.assign({\n\t\tpascalCase: false\n\t}, options);\n\n\tconst postProcess = x => options.pascalCase ? x.charAt(0).toUpperCase() + x.slice(1) : x;\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\tif (input.length === 1) {\n\t\treturn options.pascalCase ? input.toUpperCase() : input.toLowerCase();\n\t}\n\n\tconst hasUpperCase = input !== input.toLowerCase();\n\n\tif (hasUpperCase) {\n\t\tinput = preserveCamelCase(input);\n\t}\n\n\tinput = input\n\t\t.replace(/^[_.\\- ]+/, '')\n\t\t.toLowerCase()\n\t\t.replace(/[_.\\- ]+(\\w|$)/g, (_, p1) => p1.toUpperCase())\n\t\t.replace(/\\d+(\\w|$)/g, m => m.toUpperCase());\n\n\treturn postProcess(input);\n};\n\nmodule.exports = camelCase;\n// TODO: Remove this for the next major release\nmodule.exports.default = camelCase;\n","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\n placeholder?: \"tracedSVG\" | \"dominantColor\" | \"blurred\" | \"none\"\n tracedSVGOptions?: Record\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\n pngOptions?: Record\n webpOptions?: Record\n avifOptions?: Record\n blurredOptions?: { width?: number; toFormat?: ImageFormat }\n breakpoints?: Array\n outputPixelDensities?: Array\n backgroundColor?: string\n}\n\nexport interface IImageSizeArgs {\n width?: number\n height?: number\n layout?: Layout\n filename: string\n outputPixelDensities?: Array\n breakpoints?: Array\n fit?: Fit\n reporter?: IReporter\n sourceMetadata: { width: number; height: number }\n}\n\nexport interface IImageSizes {\n sizes: Array\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\n ) => IImage\n layout?: Layout\n formats?: Array\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\n breakpoints?: Array\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): 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(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 = {\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): Array =>\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 & {\n gatsbyImageData: IGatsbyImageData\n}\nexport type IGatsbyImageParent = T & {\n gatsbyImage: IGatsbyImageData\n}\nexport type FileNode = Partial & {\n childImageSharp?: IGatsbyImageDataParent>\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 = (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n node: IGatsbyImageDataParent | any\n): node is IGatsbyImageDataParent => Boolean(node?.gatsbyImageData)\n\nconst isGatsbyImageParent = (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n node: IGatsbyImageParent | any\n): node is IGatsbyImageParent => 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, \"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 {\n width: number\n height: number\n baseUrl: string\n format: ImageFormat\n options: OptionsType\n}\nexport interface IGetImageDataArgs> {\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) => 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\n\n breakpoints?: Array\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({\n baseUrl,\n urlBuilder,\n sourceWidth,\n sourceHeight,\n pluginName = `getImageData`,\n formats = [`auto`],\n breakpoints,\n options,\n ...props\n}: IGetImageDataArgs): 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 {\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 &\n Pick & {\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\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 \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 = `
`\n }\n\n if (layout === `constrained`) {\n sizer = `
\"\"
`\n }\n\n return sizer\n}\n\nconst Sizer: FunctionComponent = function Sizer({\n layout,\n width,\n height,\n}) {\n if (layout === `fullWidth`) {\n return (\n
\n )\n }\n\n if (layout === `constrained`) {\n return (\n
\n \n
\n )\n }\n\n return null\n}\n\nexport const LayoutWrapper: FunctionComponent<\n PropsWithChildren\n> = function LayoutWrapper({ children, ...props }) {\n return (\n \n \n {children}\n\n {SERVER ? : null}\n \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\n\ntype ImageProps = ImgHTMLAttributes & {\n src: string\n alt: string\n shouldLoad: boolean\n}\n\nexport type PictureProps = ImgHTMLAttributes & {\n fallback?: FallbackProps\n sources?: Array\n alt: string\n shouldLoad?: boolean\n}\n\nconst Image: FunctionComponent = function Image({\n src,\n srcSet,\n loading,\n alt = ``,\n shouldLoad,\n ...props\n}) {\n return (\n \n )\n}\n\nexport const Picture: React.FC = function Picture({\n fallback,\n sources = [],\n shouldLoad = true,\n ...props\n}) {\n const sizes = props.sizes || fallback?.sizes\n const fallbackImage = (\n \n )\n\n if (!sources.length) {\n return fallbackImage\n }\n\n return (\n \n {sources.map(({ media, srcSet, type }) => (\n \n ))}\n {fallbackImage}\n \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 & {\n fallback?: string\n sources?: Array\n}\n\nexport const Placeholder: FunctionComponent =\n function Placeholder({ fallback, ...props }) {\n if (fallback) {\n return (\n \n )\n } else {\n return
\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 = function MainImage(props) {\n return (\n <>\n \n \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 =\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 \n \n\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 \n )\n }\n\nexport const altValidator: PropTypes.Validator = (\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\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()\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,\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\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\n placeholder?: Pick\n}\n\nconst GatsbyImageHydrator: FC = 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()\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 = 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,\n Omit {\n src: 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\n): React.FC {\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 \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 =\n _getStaticImage(GatsbyImageServer)\n\nconst checkDimensionProps: PropTypes.Validator = (\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 =\n _getStaticImage(GatsbyImageBrowser)\n\nStaticImage.displayName = `StaticImage`\nStaticImage.propTypes = propTypes\n\nexport { StaticImage }\n","import React from 'react'\nimport { GatsbyImage } from 'gatsby-plugin-image'\n\nimport { GreenButton } from '../ui/button'\n\nconst isBrowser = typeof window !== 'undefined'\n\nconst APPSTORE_LINK =\n 'https://apps.apple.com/au/app/wagetap-instant-cash-advance/id1513517219'\nconst PLAYSTORE_LINK =\n 'https://play.google.com/store/apps/details?id=com.wagetap&gl=au'\nconst BROWSER_LINK =\n 'https://au.signup.wagetap.com/sign-up?utm_source=wagetap_website&utm_campaign=wagetap_website_app_links'\nconst BROWSER_DESKTOP_NAV_LINK =\n 'https://au.signup.wagetap.com/sign-up?utm_source=wagetap_website&utm_campaign=wagetap_website_desktop_nav'\n\nconst DeviceType = {\n IOS: 'IOS',\n ANDROID: 'ANDROID',\n}\n\nasync function trackStoreClick(device) {\n if (isBrowser) {\n const eventName =\n device === DeviceType.IOS\n ? 'ios_button_clicked'\n : 'android_button_clicked'\n await window.analytics.track(eventName, {})\n return true\n }\n return false\n}\n\nasync function trackBrowserSignupClick() {\n await window.analytics.track('browser_button_clicked', {})\n}\n\nexport const SignUpNavButton = ({ className }) => (\n await trackBrowserSignupClick()}\n target=\"_blank\"\n >\n \n Sign Up\n \n \n)\n\nexport default (props) => {\n return (\n
    \n {/* Apple App Store */}\n
  • \n await trackStoreClick(DeviceType.IOS)}\n target=\"_blank\"\n >\n \n \n
  • \n {/* Google Play Store */}\n \n await trackStoreClick(DeviceType.ANDROID)}\n target=\"_blank\"\n >\n \n \n \n {/* Browser */}\n {props.browserLink && (\n
  • \n await trackBrowserSignupClick()}\n target=\"_blank\"\n >\n \n \n
  • \n )}\n
\n )\n}\n","import React from 'react'\nimport * as styles from './button.module.css'\nimport arrow from '../../../static/assets/img/arrow-right.svg'\nimport arrowWhite from '../../../static/assets/img/arrow-right-white.svg'\nimport arrowBlue from '../../../static/assets/img/arrow-top-right-blue.svg'\n\nexport const GreenButton = ({ leftArrow, className, children, ...props }) => (\n \n)\n\nexport const BlueButton = ({ className, children, ...props }) => (\n \n
\n

{children}

\n \"arrowWhite\"\n
\n \n)\n\nexport const LinkButton = ({ className, children, ...props }) => (\n \n
\n

{children}

\n \"arrowBlue\"\n
\n \n)\n","export default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE0IDVMMjEgMTJNMjEgMTJMMTQgMTlNMjEgMTJMMyAxMiIgc3Ryb2tlPSIjMUIxRTI3IiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8L3N2Zz4K\"","import React from 'react'\n\nexport default ({ children, className }) => (\n \n {children}\n
\n)\n","// extracted by mini-css-extract-plugin\nexport var appLinks = \"navigation-module--appLinks--09372\";\nexport var blur = \"navigation-module--blur--43824\";\nexport var checkbox = \"navigation-module--checkbox--ed96d\";\nexport var ctaContainer = \"navigation-module--ctaContainer--fbfa8\";\nexport var menuLine1 = \"navigation-module--menuLine1--49619\";\nexport var menuLine2 = \"navigation-module--menuLine2--4ea56\";\nexport var mobileMenuCheck = \"navigation-module--mobileMenuCheck--edcec\";\nexport var mobileMenuItems = \"navigation-module--mobileMenuItems--758c3\";\nexport var mobileNav = \"navigation-module--mobileNav--7a2cc\";\nexport var mobileNavItem = \"navigation-module--mobileNavItem--08f99\";\nexport var mobileNavLink = \"navigation-module--mobileNavLink--3ba12\";\nexport var mobileNavList = \"navigation-module--mobileNavList--be038\";\nexport var nav = \"navigation-module--nav--2f592\";\nexport var navContainer = \"navigation-module--navContainer--b4b54\";\nexport var navItem = \"navigation-module--navItem--b0106\";\nexport var navItemActive = \"navigation-module--navItemActive--f8233\";\nexport var navItemUnactive = \"navigation-module--navItemUnactive--3db96\";\nexport var navLinkDropdown = \"navigation-module--navLinkDropdown--52d84\";\nexport var navLogo = \"navigation-module--navLogo--02f60\";\nexport var navMenu = \"navigation-module--navMenu--7c583\";\nexport var signUpButton = \"navigation-module--signUpButton--d50ca\";","import React, { useEffect, useRef, useState } from 'react'\nimport logo from './logo-white.svg'\nimport Container from '../container'\nimport * as styles from './navigation.module.css'\nimport AppLinks, { SignUpNavButton } from '../../app_links/app_links'\n\nconst isBrowser = typeof window !== 'undefined'\n\nconst NavLogo = () => (\n \n \"Wagetap\n \n)\n\nexport default (props) => {\n const currActivePath = useRef()\n const [activePath, setActivePath] = useState(currActivePath.current)\n const [activeDropdown, setActiveDropdown] = useState(null)\n\n useEffect(() => {\n if (isBrowser) {\n currActivePath.current = window.location.pathname.replaceAll('/', '')\n setActivePath(currActivePath.current)\n }\n }, [])\n\n return (\n
\n \n
\n \n
\n
\n {props.data.navPaths && (\n \n )}\n
\n {/* Mobile navigation */}\n \n
\n
\n )\n}\n\nexport const NavWithLogoOnly = () => (\n \n \n \n)\n\nasync function onNavigate(linkLabel) {\n if (isBrowser) {\n // Convert spaces to underscore, change to lowercase\n const eventLabel = linkLabel.replaceAll(' ', '_').toLowerCase()\n // e.g. website_nav_clicked > about_us\n await window.analytics.track('website_nav_clicked', {\n link: eventLabel,\n })\n }\n // Return true to navigate to href of anchor\n return true\n}\n\nconst Nav = (props) => {\n return (\n
\n {props ? (\n <>\n \n \n ) : (\n
\n )}\n
\n )\n}\n\nconst MobileNavScreen = (props) => {\n return (\n \n )\n}\n","export default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQwIiBoZWlnaHQ9IjI5IiB2aWV3Qm94PSIwIDAgMTQwIDI5IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cGF0aCBkPSJNMTkuOTg2OSAyMC4wMjkyQzE5Ljk4MjcgMTcuNTA0MyAxOS45OTExIDEzLjY3MjMgMTkuOTk5NiAxMS4zNDMzQzIwLjAwMzggMTAuMDg3MiAxOS4zNTU3IDguOTI0ODYgMTguMjkyNCA4LjI2OTE2TDEzLjMyMzIgNS4yMDc4MUMxMS4yNjQzIDMuOTM4OTkgOC41Nzg0NyA1LjExODQgOC4xMDgyNCA3LjQ5ODVMNC41ODc4NSAyNS4yMDI0QzQuMTE3NjEgMjcuNTYxMiA2LjU3MDQ1IDI5LjQyMTkgOC42OTcwOSAyOC4zMjM0TDE3LjgxNzkgMjMuNjE0MkMxOS4xNDgxIDIyLjkyNDUgMTkuOTg2OSAyMS41NDA3IDE5Ljk4NjkgMjAuMDI5MloiIGZpbGw9IiMyNjczRjciLz4KPHBhdGggZD0iTTAuMDEyNzI5NiA4LjYyMjE5QzAuMDE2OTY2IDExLjE0NzEgMC4wMDg0OTMzIDE0Ljk3NDggMi4wNjM5NmUtMDUgMTcuMzAzOEMtMC4wMDQyMTU2OSAxOC41NTk5IDAuNjQzOTQzIDE5LjcyMjMgMS43MDcyNiAyMC4zNzhMNi42NzY0OCAyMy40MzkzQzguNzM1MzMgMjQuNzA4MSAxMS40MjEyIDIzLjUyODcgMTEuODkxNCAyMS4xNDg2TDE1LjQxMTggMy40NDQ3MUMxNS44ODIgMS4wODU4OSAxMy40MjkyIC0wLjc3NDc2MiAxMS4zMDI2IDAuMzIzNzQ4TDIuMTg1OTcgNS4wMzcxM0MwLjg0NzI4NiA1LjcyNjg5IDAuMDA4NDkzMyA3LjExMDY3IDAuMDEyNzI5NiA4LjYyMjE5WiIgZmlsbD0iIzAwRERBNCIvPgo8cGF0aCBkPSJNMzAuNDM3MSAyMi4zNTQySDMzLjc5NzJMMzYuMzc5OCAxMy4zMDIxTDM4LjkzNDcgMjIuMzU0Mkg0Mi4zMjI2TDQ2Ljg0OTEgNy44MjQ3MUg0Mi45ODkxTDQwLjYyODYgMTYuNzkwM0wzOC4xMjkzIDcuODI0NzFIMzQuNjAyNkwzMi4xMzEgMTYuNzkwM0wyOS43NzA2IDcuODI0NzFIMjUuODgyOEwzMC40MzcxIDIyLjM1NDJaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNNTQuNzEyIDcuNTk0MDlDNTAuODc5NyA3LjU5NDA5IDQ4LjYwMjYgOS45MjkxOCA0OC40MzYgMTIuODQwOEg1MS44Nzk1QzUxLjkzNSAxMS42MyA1Mi43OTU5IDEwLjUzNDYgNTQuNDg5OCAxMC41MzQ2QzU2LjA3MjcgMTAuNTM0NiA1Ni45ODkxIDExLjM3MDYgNTYuOTg5MSAxMi41ODE0QzU2Ljk4OTEgMTMuMTg2OCA1Ni42MjgxIDEzLjY0OCA1NS45MzM5IDEzLjY0OEg1My41NzM0QzUwLjUxODcgMTMuNjQ4IDQ4LjQ2MzggMTUuMzc3NyA0OC40NjM4IDE4LjIzMTdDNDguNDYzOCAyMC43MTEgNTAuMzI0NCAyMi41ODQ4IDUzLjA0NTggMjIuNTg0OEM1NC45NjE5IDIyLjU4NDggNTYuNTE3IDIxLjY5MTEgNTYuOTg5MSAyMC4zMzYyVjIyLjM1NDJINjAuODIxNFYxMy4wMTM4QzYwLjgyMTQgOS43MjczOCA1OC4yMzg4IDcuNTk0MDkgNTQuNzEyIDcuNTk0MDlaTTU0LjAxNzcgMTkuNjczMUM1Mi45MzQ3IDE5LjY3MzEgNTIuMTU3MiAxOS4wMTAxIDUyLjE1NzIgMTguMDU4OEM1Mi4xNTcyIDE2LjkzNDUgNTIuOTkwMyAxNi4xODQ5IDU0LjE1NjYgMTYuMTg0OUg1Ni45ODkxVjE2LjM4NjdDNTYuOTg5MSAxOC4yMzE3IDU1LjkwNjEgMTkuNjczMSA1NC4wMTc3IDE5LjY3MzFaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNNzQuMjU1IDcuODI0NzFWOS4yNjYxM0M3My40Nzc0IDguMjU3MTQgNzIuMDg4OSA3LjU5NDA5IDcwLjM5NSA3LjU5NDA5QzY2LjMxMjggNy41OTQwOSA2My44NDEzIDEwLjU2MzQgNjMuODQxMyAxNS4wODk0QzYzLjg0MTMgMTkuNjE1NSA2Ni4zMTI4IDIyLjU4NDggNzAuNDUwNSAyMi41ODQ4QzcyLjA4ODkgMjIuNTg0OCA3My41NjA3IDIxLjk1MDYgNzQuMjgyNyAyMC44ODM5VjIyLjc4NjZDNzQuMjgyNyAyNC4xNDE1IDczLjQyMTkgMjUuMDkyOSA3Mi4yNTU1IDI1LjA5MjlINjUuODEyOVYyOC4yMzUxSDcyLjg2NjVDNzYuMDMyMiAyOC4yMzUxIDc4LjE0MjcgMjYuMjQ2IDc4LjE0MjcgMjMuMjE5VjcuODI0NzFINzQuMjU1Wk03MS4wNjE0IDE5LjEyNTRDNjkuMDA2NSAxOS4xMjU0IDY3LjY0NTcgMTcuNTM5OCA2Ny42NDU3IDE1LjA4OTRDNjcuNjQ1NyAxMi42MzkgNjkuMDA2NSAxMS4wMjQ3IDcxLjA2MTQgMTEuMDI0N0M3My4xNDQyIDExLjAyNDcgNzQuNTA0OSAxMi42MzkgNzQuNTA0OSAxNS4wODk0Qzc0LjUwNDkgMTcuNTM5OCA3My4xNDQyIDE5LjEyNTQgNzEuMDYxNCAxOS4xMjU0WiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTkxLjQzNzcgMTcuNDI0NUM5MS4xMzIyIDE4LjY2NDIgOTAuMTA0OCAxOS4yOTg0IDg4LjU0OTcgMTkuMjk4NEM4Ni42MDU4IDE5LjI5ODQgODUuMzU2MSAxOC4wMjk5IDg1LjA3ODQgMTUuOTgzMUg5NS4xMzExQzk1LjE1ODkgMTUuNjY2IDk1LjE4NjYgMTUuMjMzNiA5NS4xODY2IDE0LjY4NThDOTUuMTg2NiAxMS4zNzA2IDkzLjIxNSA3LjU5NDA5IDg4LjI3MTkgNy41OTQwOUM4My41MjMzIDcuNTk0MDkgODEuMzU3MyAxMS4zNzA2IDgxLjM1NzMgMTUuMDYwNkM4MS4zNTczIDE4LjcyMTggODMuODAxIDIyLjU4NDggODguNTQ5NyAyMi41ODQ4QzkxLjk5MzEgMjIuNTg0OCA5NC42NTkgMjAuNTY2OCA5NS4yMTQ0IDE3LjQyNDVIOTEuNDM3N1pNODguMjcxOSAxMC41MzQ2QzkwLjEzMjUgMTAuNTM0NiA5MS4yMTU2IDExLjgzMTggOTEuMzI2NiAxMy40NDYySDg1LjEzNEM4NS40NjcyIDExLjQyODIgODYuNTIyNCAxMC41MzQ2IDg4LjI3MTkgMTAuNTM0NloiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik05OS43MjQxIDMuNTI5M1Y3LjgyNDcxSDk3LjAzMDVWMTEuMTY4OEg5OS43MjQxVjE3LjA3ODZDOTkuNzI0MSAyMC40NTE1IDEwMS44MDcgMjIuMzU0MiAxMDUuMDI4IDIyLjM1NDJIMTA3LjMzM1YxOC45ODEzSDEwNS41NTZDMTA0LjMwNiAxOC45ODEzIDEwMy41ODQgMTguMzE4MiAxMDMuNTg0IDE2LjkwNTZWMTEuMTY4OEgxMDcuMzMzVjcuODI0NzFIMTAzLjU4NFYzLjUyOTNIOTkuNzI0MVoiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik0xMTUuODQ4IDcuNTk0MDlDMTEyLjAxNSA3LjU5NDA5IDEwOS43MzggOS45MjkxOCAxMDkuNTcyIDEyLjg0MDhIMTEzLjAxNUMxMTMuMDcxIDExLjYzIDExMy45MzEgMTAuNTM0NiAxMTUuNjI1IDEwLjUzNDZDMTE3LjIwOCAxMC41MzQ2IDExOC4xMjUgMTEuMzcwNiAxMTguMTI1IDEyLjU4MTRDMTE4LjEyNSAxMy4xODY4IDExNy43NjQgMTMuNjQ4IDExNy4wNjkgMTMuNjQ4SDExNC43MDlDMTExLjY1NCAxMy42NDggMTA5LjU5OSAxNS4zNzc3IDEwOS41OTkgMTguMjMxN0MxMDkuNTk5IDIwLjcxMSAxMTEuNDYgMjIuNTg0OCAxMTQuMTgxIDIyLjU4NDhDMTE2LjA5NyAyMi41ODQ4IDExNy42NTMgMjEuNjkxMSAxMTguMTI1IDIwLjMzNjJWMjIuMzU0MkgxMjEuOTU3VjEzLjAxMzhDMTIxLjk1NyA5LjcyNzM4IDExOS4zNzQgNy41OTQwOSAxMTUuODQ4IDcuNTk0MDlaTTExNS4xNTMgMTkuNjczMUMxMTQuMDcgMTkuNjczMSAxMTMuMjkzIDE5LjAxMDEgMTEzLjI5MyAxOC4wNTg4QzExMy4yOTMgMTYuOTM0NSAxMTQuMTI2IDE2LjE4NDkgMTE1LjI5MiAxNi4xODQ5SDExOC4xMjVWMTYuMzg2N0MxMTguMTI1IDE4LjIzMTcgMTE3LjA0MiAxOS42NzMxIDExNS4xNTMgMTkuNjczMVoiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik0xMjUuNjk5IDI4LjIzNTFIMTI5LjU1OVYyMS4wNTY5QzEzMC4zMDkgMjIuMDM3MSAxMzEuNjY5IDIyLjU4NDggMTMzLjI1MiAyMi41ODQ4QzEzNy4yNzkgMjIuNTg0OCAxNDAgMTkuNjE1NSAxNDAgMTUuMDg5NEMxNDAgMTAuNTYzNCAxMzcuNTAxIDcuNTk0MDkgMTMzLjU4NSA3LjU5NDA5QzEzMS43OCA3LjU5NDA5IDEzMC4zOTIgOC4yODU5NiAxMjkuNTU5IDkuNDEwMjdWNy44MjQ3MUgxMjUuNjk5VjI4LjIzNTFaTTEzMi43OCAxOS4xMjU0QzEzMC42OTcgMTkuMTI1NCAxMjkuMzM3IDE3LjUxMSAxMjkuMzM3IDE1LjA4OTRDMTI5LjMzNyAxMi42MzkgMTMwLjY5NyAxMS4wMjQ3IDEzMi43OCAxMS4wMjQ3QzEzNC44MDcgMTEuMDI0NyAxMzYuMTk2IDEyLjYzOSAxMzYuMTk2IDE1LjA4OTRDMTM2LjE5NiAxNy41MTEgMTM0LjgwNyAxOS4xMjU0IDEzMi43OCAxOS4xMjU0WiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+Cg==\""],"names":["camelCase","input","options","Array","isArray","TypeError","Object","assign","pascalCase","map","x","trim","filter","length","join","toUpperCase","toLowerCase","string","isLastCharLower","isLastCharUpper","isLastLastCharUpper","i","character","test","slice","preserveCamelCase","replace","_","p1","m","charAt","module","exports","height","prototype","format","isLoading","isLoaded","images","loading","style","shouldLoad","opacity","placeholder","layout","width","backgroundColor","objectFit","objectPosition","wrapperStyle","position","top","left","bottom","right","transition","sources","paddingTop","maxWidth","display","React","alt","role","src","children","props","Fragment","Sizer","srcSet","decoding","undefined","fallback","t","s","sizes","Image","media","type","key","fallbackImage","propTypes","PropTypes","Picture","displayName","isRequired","Placeholder","_Picture$propTypes","propName","componentName","MainImage","rest","image","altValidator","Set","as","className","class","preactClass","onStartLoad","onLoad","onError","overflow","wStyle","wClass","wrapperProps","useRef","useMemo","JSON","stringify","sizer","useEffect","renderImageToStringPromise","import","then","renderImageToString","swapPlaceholderImage","renderImage","root","current","querySelector","ssrImage","hasNativeLazyLoadSupport","complete","wasCached","setTimeout","removeAttribute","addEventListener","removeEventListener","onLoadListener","imageCache","add","cacheKey","has","innerHTML","animationFrame","requestAnimationFrame","cleanupCallback","cancelAnimationFrame","useLayoutEffect","ref","dangerouslySetInnerHTML","__html","suppressHydrationWarning","memo","warn","GatsbyImageHydrator","GatsbyImage","checkDimensionProps","validLayouts","Error","GatsbyImageBrowser","__imageData","imageData","__error","console","StaticImage","isBrowser","window","DeviceType","async","trackStoreClick","device","eventName","analytics","track","trackBrowserSignupClick","SignUpNavButton","rel","href","onClick","target","leftArrow","G","imgStyle","isBlack","assets","appStoreBadgeBlack","isWhite","appStoreBadgeWhite","appStoreBadge","googlePlayBadgeBlack","googlePlayBadgeWhite","googlePlayBadge","browserLink","browserBadge","GreenButton","disabled","mobileNavItem","navItem","NavLogo","currActivePath","activePath","setActivePath","useState","activeDropdown","setActiveDropdown","location","pathname","replaceAll","data","navPaths","Nav","links","htmlFor","id","MobileNavScreen","NavWithLogoOnly","onNavigate","linkLabel","eventLabel","link","label","name","l","idx","linkKey","internal","styles","linkEntries","some","url","toString","xmlns","viewBox","d","transform","fill"],"sourceRoot":""}