{"version":3,"file":"b8d7ec981a91c188bc088a40821c4c6d7dda9174-db6f966eba61a5e49536.js","mappings":"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","sources":["webpack://sar-website/../src/image-utils.ts","webpack://sar-website/../src/components/hooks.ts","webpack://sar-website/../src/components/layout-wrapper.tsx","webpack://sar-website/../src/components/picture.tsx","webpack://sar-website/../src/components/placeholder.tsx","webpack://sar-website/../src/components/main-image.tsx","webpack://sar-website/../src/components/gatsby-image.server.tsx","webpack://sar-website/../src/components/gatsby-image.browser.tsx","webpack://sar-website/../src/components/static-image.server.tsx","webpack://sar-website/../src/components/static-image.tsx","webpack://sar-website/./node_modules/gatsby-plugin-image/node_modules/camelcase/index.js","webpack://sar-website/./node_modules/gatsby-plugin-react-i18next/dist/Link.js","webpack://sar-website/./node_modules/gatsby-plugin-react-i18next/dist/index.js","webpack://sar-website/./node_modules/gatsby-plugin-react-i18next/dist/useI18next.js","webpack://sar-website/./node_modules/gatsby-plugin-react-i18next/index.js","webpack://sar-website/./src/components/appstore-icons.jsx","webpack://sar-website/./src/components/footer.js"],"sourcesContent":["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 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\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","'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","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nexports.__esModule = true;\nexports.Link = void 0;\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\nvar _objectWithoutPropertiesLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutPropertiesLoose\"));\nvar _react = _interopRequireWildcard(require(\"react\"));\nvar _i18nextContext = require(\"./i18nextContext\");\nvar _gatsby = require(\"gatsby\");\nvar _types = require(\"./types\");\nvar _excluded = [\"language\", \"to\", \"onClick\"];\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\nvar Link = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {\n var language = _ref.language,\n to = _ref.to,\n _onClick = _ref.onClick,\n rest = (0, _objectWithoutPropertiesLoose2.default)(_ref, _excluded);\n var context = (0, _react.useContext)(_i18nextContext.I18nextContext);\n var urlLanguage = language || context.language;\n var getLanguagePath = function getLanguagePath(language) {\n return context.generateDefaultLanguagePage || language !== context.defaultLanguage ? \"/\" + language : '';\n };\n var link = \"\" + getLanguagePath(urlLanguage) + to;\n return (\n /*#__PURE__*/\n // @ts-ignore\n _react.default.createElement(_gatsby.Link, (0, _extends2.default)({}, rest, {\n to: link,\n innerRef: ref,\n hrefLang: urlLanguage,\n onClick: function onClick(e) {\n if (language) {\n localStorage.setItem(_types.LANGUAGE_KEY, language);\n }\n if (_onClick) {\n _onClick(e);\n }\n }\n }))\n );\n});\nexports.Link = Link;","\"use strict\";\n\nexports.__esModule = true;\nvar _reactI18next = require(\"react-i18next\");\nObject.keys(_reactI18next).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _reactI18next[key]) return;\n exports[key] = _reactI18next[key];\n});\nvar _i18nextContext = require(\"./i18nextContext\");\nObject.keys(_i18nextContext).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _i18nextContext[key]) return;\n exports[key] = _i18nextContext[key];\n});\nvar _useI18next = require(\"./useI18next\");\nObject.keys(_useI18next).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _useI18next[key]) return;\n exports[key] = _useI18next[key];\n});\nvar _Link = require(\"./Link\");\nObject.keys(_Link).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _Link[key]) return;\n exports[key] = _Link[key];\n});","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nexports.__esModule = true;\nexports.useI18next = void 0;\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\nvar _reactI18next = require(\"react-i18next\");\nvar _react = require(\"react\");\nvar _gatsby = require(\"gatsby\");\nvar _i18nextContext = require(\"./i18nextContext\");\nvar _types = require(\"./types\");\nvar useI18next = function useI18next(ns, options) {\n var _useTranslation = (0, _reactI18next.useTranslation)(ns, options),\n i18n = _useTranslation.i18n,\n t = _useTranslation.t,\n ready = _useTranslation.ready;\n var context = (0, _react.useContext)(_i18nextContext.I18nextContext);\n var routed = context.routed,\n defaultLanguage = context.defaultLanguage,\n generateDefaultLanguagePage = context.generateDefaultLanguagePage;\n var getLanguagePath = function getLanguagePath(language) {\n return generateDefaultLanguagePage || language !== defaultLanguage ? \"/\" + language : '';\n };\n var removePrefix = function removePrefix(pathname) {\n var base = typeof __BASE_PATH__ !== \"undefined\" ? __BASE_PATH__ : __PATH_PREFIX__;\n if (base && pathname.indexOf(base) === 0) {\n pathname = pathname.slice(base.length);\n }\n return pathname;\n };\n var removeLocalePart = function removeLocalePart(pathname) {\n if (!routed) return pathname;\n var i = pathname.indexOf(\"/\", 1);\n return pathname.substring(i);\n };\n var navigate = function navigate(to, options) {\n var languagePath = getLanguagePath(context.language);\n var link = routed ? \"\" + languagePath + to : \"\" + to;\n return (0, _gatsby.navigate)(link, options);\n };\n var changeLanguage = function changeLanguage(language, to, options) {\n var languagePath = getLanguagePath(language);\n var pathname = to || removeLocalePart(removePrefix(window.location.pathname));\n var link = \"\" + languagePath + pathname + window.location.search;\n localStorage.setItem(_types.LANGUAGE_KEY, language);\n return (0, _gatsby.navigate)(link, options);\n };\n return (0, _extends2.default)({}, context, {\n i18n: i18n,\n t: t,\n ready: ready,\n navigate: navigate,\n changeLanguage: changeLanguage\n });\n};\nexports.useI18next = useI18next;","module.exports = require('./dist');\n","import React from \"react\";\r\n\r\nexport function AppStoreArIcon() {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\n\r\nexport function AppStoreEnIcon({ className = \"\" }) {\r\n\r\n let width = \"\";\r\n let height = \"\";\r\n\r\n if (className == \"\") {\r\n width = \"140\";\r\n height = \"43\";\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\n\r\n\r\n","import React from \"react\";\r\nimport { ChevronDownIcon } from \"@heroicons/react/solid\";\r\nimport { StaticImage } from \"gatsby-plugin-image\";\r\nimport {\r\n Trans,\r\n useTranslation,\r\n Link,\r\n useI18next,\r\n} from \"gatsby-plugin-react-i18next\";\r\nimport { AppStoreEnIcon } from \"./appstore-icons\";\r\nimport { Script } from \"gatsby\";\r\n\r\nconst navigation = {\r\n aboutSAR: [\r\n { name: \"Our Story\", href: \"/about-sar/\" },\r\n { name: \"Freight\", href: \"/freight\" },\r\n { name: \"Our Stations\", href: \"/travel-information/stations\" },\r\n { name: \"Privacy Policy\", href: \"/about-sar/privacypolicy\" },\r\n { name: \"Disclaimer\", href: \"/about-sar/disclaimer\" },\r\n { name: \"OPPH\", href: \"https://sar.com.sa/documents/SAR%20Outside%20Party%20Permit%20Handbook.pdf\" },\r\n // { name: 'Towards A Bright Future', href: '/featured/Towards.jpg' }\r\n ],\r\n travelInfo: [\r\n { name: \"Train Schedule\", href: \"/travel-information/trainschedule\", },\r\n { name: \"Our Stations\", href: \"/travel-information/stations\" },\r\n { name: \"Baggage Guide\", href: \"/before-you-travel/baggageguide\" },\r\n { name: \"Station Lounges\", href: \"/travel-information/station-lounges\", },\r\n { name: \"Onboard Food & Drink\", href: \"/travel-information/onboard-food-drink\", },\r\n { name: \"Seat Selection\", href: \"/travel-information/seat-selection\", },\r\n { name: \"Car Parking\", href: \"/travel-information/carparking\", },\r\n // { name: 'Security', href: '/before-you-travel/safetysecurity' }\r\n ],\r\n tickets: [\r\n { name: \"Ticket Rates\", href: \"/travel-information/ticketrates\" },\r\n { name: \"Travel Classes\", href: \"/travel-information/travelclasses\", },\r\n { name: \"Purchase Methods\", href: \"/travel-information/purchasemethods\", },\r\n { name: \"Ticket Conditions\", href: \"/before-you-travel/ticketconditions\", },\r\n { name: \"Refund Modification\", href: \"/travel-information/refundmodification\", },\r\n { name: \"WalaOne Loyalty Program\", href: \"/featured/walaone\" },\r\n ],\r\n external: [\r\n { name: \"MOT\", href: \"https://mot.gov.sa/en/Pages/default.aspx\" },\r\n { name: \"TGA\", href: \"https://tga.gov.sa/ar/home\" },\r\n { name: \"PIF\", href: \"https://www.pif.gov.sa/en/Pages/Homepage.aspx?\" },\r\n { name: \"EHSAN\", href: \"https://ehsan.sa/\" },\r\n { name: \"HHR\", href: \"https://sar.hhr.sa/\" },\r\n ],\r\n social: [\r\n {\r\n name: \"Facebook\",\r\n href: \"https://www.facebook.com/SARNorthEast/\",\r\n icon: (props) => (\r\n \r\n \r\n \r\n ),\r\n },\r\n {\r\n name: \"Instagram\",\r\n href: \"https://www.instagram.com/SARNorthEast/\",\r\n icon: (props) => (\r\n \r\n \r\n \r\n ),\r\n },\r\n {\r\n name: \"Twitter\",\r\n href: \"https://twitter.com/SARSaudiRailway\",\r\n icon: (props) => (\r\n \r\n \r\n \r\n ),\r\n },\r\n {\r\n name: \"LinkedIn\",\r\n href: \"https://www.linkedin.com/company/sarsaudirailway?trk=similar-companies_org_title\",\r\n icon: (props) => (\r\n \r\n \r\n \r\n ),\r\n },\r\n {\r\n name: \"Youtube\",\r\n href: \"https://www.youtube.com/channel/UC9TrC-REsqt_lV-l5rIoiqw\",\r\n icon: (props) => (\r\n \r\n \r\n \r\n ),\r\n },\r\n ],\r\n};\r\n\r\nexport default function Footer() {\r\n const { t } = useI18next();\r\n\r\n return (\r\n <>\r\n \r\n

\r\n Footer\r\n

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n\r\n
\r\n {navigation.social.map((item) => (\r\n \r\n {item.name}\r\n \r\n \r\n ))}\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n

\r\n About SAR\r\n

\r\n
    \r\n {navigation.aboutSAR.map((item) => (\r\n
  • \r\n {(item.name != \"OPPH\") ?\r\n \r\n {item.name}\r\n \r\n : \r\n {item.name}\r\n }\r\n\r\n
  • \r\n ))}\r\n
\r\n
\r\n
\r\n

\r\n Tickets\r\n

\r\n
    \r\n {navigation.tickets.map((item) => (\r\n
  • \r\n \r\n {item.name}\r\n \r\n
  • \r\n ))}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

\r\n Travel Information\r\n

\r\n
    \r\n {navigation.travelInfo.map((item) => (\r\n
  • \r\n \r\n {item.name}\r\n \r\n
  • \r\n ))}\r\n
\r\n
\r\n
\r\n

\r\n External Links\r\n

\r\n
    \r\n {navigation.external.map((item) => (\r\n
  • \r\n \r\n {item.name}\r\n \r\n
  • \r\n ))}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {/*
\r\n
\r\n

\r\n\r\n Subscribe to our newsletter\r\n

\r\n

\r\n The latest news, articles, and resources, sent to your inbox\r\n\r\n

\r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n\r\n Subscribe\r\n \r\n
\r\n \r\n
*/}\r\n
\r\n {/*
\r\n {navigation.social.map((item) => (\r\n \r\n {item.name}\r\n \r\n \r\n ))}\r\n
*/}\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n

\r\n ©{\" \"}\r\n 2022 Saudi Arabia Railways, All rights reserved.\r\n

\r\n\r\n {/* */}\r\n
\r\n
\r\n \r\n
\r\n \r\n\r\n\r\n {/* pre-prod */}\r\n {/*
\r\n */}\r\n \r\n );\r\n}\r\n"],"names":["W","hasNativeLazyLoadSupport","HTMLImageElement","prototype","_","e","t","a","Boolean","images","fallback","src","gatsbyImageData","gatsbyImage","childImageSharp","z","i","s","width","height","className","style","P","h","loading","shouldLoad","opacity","A","r","n","o","l","backgroundColor","position","top","left","bottom","right","objectFit","objectPosition","d","transition","H","F","_ref5","layout","paddingTop","maxWidth","display","alt","role","G","children","u","V","B","U","srcSet","decoding","Y","sources","sizes","length","map","_ref6","media","type","key","X","propTypes","isRequired","displayName","J","Z","Error","K","Q","ee","te","replace","ae","_len","arguments","Array","_key","c","apply","concat","ie","image","se","re","ne","Set","oe","le","de","as","class","g","onStartLoad","p","onLoad","m","onError","f","w","y","b","v","E","k","S","M","N","$","JSON","stringify","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","UPPERCASE","LOWERCASE","LEADING_CAPITAL","IDENTIFIER","SEPARATORS","LEADING_SEPARATORS","RegExp","source","SEPARATORS_AND_IDENTIFIER","NUMBERS_AND_IDENTIFIER","camelCase","input","options","isArray","TypeError","pascalCase","preserveConsecutiveUppercase","x","trim","filter","join","toLowerCase","locale","string","toLocaleLowerCase","toUpperCase","toLocaleUpperCase","preserveCamelCase","isLastCharLower","isLastCharUpper","isLastLastCharUpper","character","test","slice","lastIndex","m1","charAt","postProcess","identifier","module","exports","_interopRequireDefault","require","__esModule","Link","_extends2","_objectWithoutPropertiesLoose2","_react","obj","nodeInterop","default","cache","_getRequireWildcardCache","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","hasOwnProperty","call","desc","set","_interopRequireWildcard","_i18nextContext","_gatsby","_types","_excluded","WeakMap","cacheBabelInterop","cacheNodeInterop","forwardRef","_ref","language","to","_onClick","onClick","rest","context","useContext","I18nextContext","urlLanguage","link","generateDefaultLanguagePage","defaultLanguage","getLanguagePath","createElement","innerRef","hrefLang","localStorage","setItem","LANGUAGE_KEY","_reactI18next","keys","forEach","_useI18next","_Link","useI18next","ns","_useTranslation","useTranslation","i18n","ready","routed","navigate","languagePath","changeLanguage","pathname","indexOf","substring","removeLocalePart","window","location","search","AppStoreEnIcon","React","xmlns","viewBox","fill","navigation","aboutSAR","name","href","travelInfo","tickets","external","social","icon","props","assign","fillRule","clipRule","Footer","id","StaticImage","item","target","Trans","Script","cdn","storyId","baseURL"],"sourceRoot":""}