gatsby-plugin-image 3.0.0-next.1 → 3.0.0-next.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/gatsby-image.js.map +1 -1
- package/dist/gatsby-image.module.js.map +1 -1
- package/dist/index.browser-70e80df3.js.map +1 -1
- package/dist/index.browser-dc34ce8e.js.map +1 -1
- package/dist/src/components/layout-wrapper.d.ts +2 -2
- package/dist/src/components/layout-wrapper.d.ts.map +1 -1
- package/package.json +5 -5
package/dist/gatsby-image.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gatsby-image.js","sources":["../src/image-utils.ts","../src/components/hooks.ts","../src/components/picture.tsx","../src/components/placeholder.tsx","../src/components/main-image.tsx","../src/components/layout-wrapper.tsx","../src/components/gatsby-image.server.tsx","../src/components/static-image.server.tsx"],"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<ImageFormat>\n placeholder?: \"tracedSVG\" | \"dominantColor\" | \"blurred\" | \"none\"\n tracedSVGOptions?: Record<string, unknown>\n width?: number\n height?: number\n aspectRatio?: number\n sizes?: string\n quality?: number\n transformOptions?: {\n fit?: Fit\n cropFocus?: number | string\n duotone?: {\n highlight: string\n shadow: string\n opacity?: number\n }\n grayscale?: boolean\n rotate?: number\n trim?: number\n }\n jpgOptions?: Record<string, unknown>\n pngOptions?: Record<string, unknown>\n webpOptions?: Record<string, unknown>\n avifOptions?: Record<string, unknown>\n blurredOptions?: { width?: number; toFormat?: ImageFormat }\n breakpoints?: Array<number>\n outputPixelDensities?: Array<number>\n backgroundColor?: string\n}\n\nexport interface IImageSizeArgs {\n width?: number\n height?: number\n layout?: Layout\n filename: string\n outputPixelDensities?: Array<number>\n breakpoints?: Array<number>\n fit?: Fit\n reporter?: IReporter\n sourceMetadata: { width: number; height: number }\n}\n\nexport interface IImageSizes {\n sizes: Array<number>\n presentationWidth: number\n presentationHeight: number\n aspectRatio: number\n unscaledWidth: number\n}\n\nexport interface IImage {\n src: string\n width: number\n height: number\n format: ImageFormat\n}\n\nexport interface IGatsbyImageHelperArgs {\n pluginName: string\n generateImageSource: (\n filename: string,\n width: number,\n height: number,\n format: ImageFormat,\n fit?: Fit,\n options?: Record<string, unknown>\n ) => IImage\n layout?: Layout\n formats?: Array<ImageFormat>\n filename: string\n placeholderURL?: string\n width?: number\n height?: number\n sizes?: string\n reporter?: IReporter\n sourceMetadata?: { width: number; height: number; format: ImageFormat }\n fit?: Fit\n options?: Record<string, unknown>\n breakpoints?: Array<number>\n backgroundColor?: string\n aspectRatio?: number\n}\n\nconst warn = (message: string): void => console.warn(message)\n\nconst sortNumeric = (a: number, b: number): number => a - b\n\nexport const getSizes = (width: number, layout: Layout): string | undefined => {\n switch (layout) {\n // If screen is wider than the max size, image width is the max size,\n // otherwise it's the width of the screen\n case `constrained`:\n return `(min-width: ${width}px) ${width}px, 100vw`\n\n // Image is always the same width, whatever the size of the screen\n case `fixed`:\n return `${width}px`\n\n // Image is always the width of the screen\n case `fullWidth`:\n return `100vw`\n\n default:\n return undefined\n }\n}\n\nexport const getSrcSet = (images: Array<IImage>): string =>\n images.map(image => `${image.src} ${image.width}w`).join(`,\\n`)\n\nexport function formatFromFilename(filename: string): ImageFormat | undefined {\n const dot = filename.lastIndexOf(`.`)\n if (dot !== -1) {\n const ext = filename.slice(dot + 1)\n if (ext === `jpeg`) {\n return `jpg`\n }\n if (ext.length === 3 || ext.length === 4) {\n return ext as ImageFormat\n }\n }\n return undefined\n}\n\nexport function setDefaultDimensions(\n args: IGatsbyImageHelperArgs\n): IGatsbyImageHelperArgs {\n let {\n layout = `constrained`,\n width,\n height,\n sourceMetadata,\n breakpoints,\n aspectRatio,\n formats = [`auto`, `webp`],\n } = args\n formats = formats.map(format => format.toLowerCase() as ImageFormat)\n layout = camelCase(layout) as Layout\n\n if (width && height) {\n return { ...args, formats, layout, aspectRatio: width / height }\n }\n if (sourceMetadata.width && sourceMetadata.height && !aspectRatio) {\n aspectRatio = sourceMetadata.width / sourceMetadata.height\n }\n\n if (layout === `fullWidth`) {\n width = width || sourceMetadata.width || breakpoints[breakpoints.length - 1]\n height = height || Math.round(width / (aspectRatio || DEFAULT_ASPECT_RATIO))\n } else {\n if (!width) {\n if (height && aspectRatio) {\n width = height * aspectRatio\n } else if (sourceMetadata.width) {\n width = sourceMetadata.width\n } else if (height) {\n width = Math.round(height / DEFAULT_ASPECT_RATIO)\n } else {\n width = DEFAULT_FIXED_WIDTH\n }\n }\n\n if (aspectRatio && !height) {\n height = Math.round(width / aspectRatio)\n } else if (!aspectRatio) {\n aspectRatio = width / height\n }\n }\n return { ...args, width, height, aspectRatio, layout, formats }\n}\n\n/**\n * Use this for getting an image for the blurred placeholder. This ensures the\n * aspect ratio and crop match the main image\n */\nexport function getLowResolutionImageURL(\n args: IGatsbyImageHelperArgs,\n width = 20\n): string {\n args = setDefaultDimensions(args)\n const { generateImageSource, filename, aspectRatio } = args\n return generateImageSource(\n filename,\n width,\n Math.round(width / aspectRatio),\n args.sourceMetadata.format || `jpg`,\n args.fit,\n args.options\n )?.src\n}\n\nexport function generateImageData(\n args: IGatsbyImageHelperArgs\n): IGatsbyImageData {\n args = setDefaultDimensions(args)\n\n let {\n pluginName,\n sourceMetadata,\n generateImageSource,\n layout,\n fit,\n options,\n width,\n height,\n filename,\n reporter = { warn },\n backgroundColor,\n placeholderURL,\n } = args\n\n if (!pluginName) {\n reporter.warn(\n `[gatsby-plugin-image] \"generateImageData\" was not passed a plugin name`\n )\n }\n\n if (typeof generateImageSource !== `function`) {\n throw new Error(`generateImageSource must be a function`)\n }\n\n if (!sourceMetadata || (!sourceMetadata.width && !sourceMetadata.height)) {\n // No metadata means we let the CDN handle max size etc, aspect ratio etc\n sourceMetadata = {\n width,\n height,\n format: sourceMetadata?.format || formatFromFilename(filename) || `auto`,\n }\n } else if (!sourceMetadata.format) {\n sourceMetadata.format = formatFromFilename(filename)\n }\n\n const formats = new Set<ImageFormat>(args.formats)\n\n if (formats.size === 0 || formats.has(`auto`) || formats.has(``)) {\n formats.delete(`auto`)\n formats.delete(``)\n formats.add(sourceMetadata.format)\n }\n\n if (formats.has(`jpg`) && formats.has(`png`)) {\n reporter.warn(\n `[${pluginName}] Specifying both 'jpg' and 'png' formats is not supported. Using 'auto' instead`\n )\n if (sourceMetadata.format === `jpg`) {\n formats.delete(`png`)\n } else {\n formats.delete(`jpg`)\n }\n }\n\n const imageSizes = calculateImageSizes({ ...args, sourceMetadata })\n\n const result: IGatsbyImageData[\"images\"] = {\n sources: [],\n }\n\n let sizes = args.sizes\n if (!sizes) {\n sizes = getSizes(imageSizes.presentationWidth, layout)\n }\n\n formats.forEach(format => {\n const images = imageSizes.sizes\n .map(size => {\n const imageSrc = generateImageSource(\n filename,\n size,\n Math.round(size / imageSizes.aspectRatio),\n format,\n fit,\n options\n )\n if (\n !imageSrc?.width ||\n !imageSrc.height ||\n !imageSrc.src ||\n !imageSrc.format\n ) {\n reporter.warn(\n `[${pluginName}] The resolver for image ${filename} returned an invalid value.`\n )\n return undefined\n }\n return imageSrc\n })\n .filter(Boolean)\n\n if (format === `jpg` || format === `png` || format === `auto`) {\n const unscaled =\n images.find(img => img.width === imageSizes.unscaledWidth) || images[0]\n\n if (unscaled) {\n result.fallback = {\n src: unscaled.src,\n srcSet: getSrcSet(images),\n sizes,\n }\n }\n } else {\n result.sources?.push({\n srcSet: getSrcSet(images),\n sizes,\n type: `image/${format}`,\n })\n }\n })\n\n const imageProps: Partial<IGatsbyImageData> = {\n images: result,\n layout,\n backgroundColor,\n }\n\n if (placeholderURL) {\n imageProps.placeholder = { fallback: placeholderURL }\n }\n\n switch (layout) {\n case `fixed`:\n imageProps.width = imageSizes.presentationWidth\n imageProps.height = imageSizes.presentationHeight\n break\n\n case `fullWidth`:\n imageProps.width = 1\n imageProps.height = 1 / imageSizes.aspectRatio\n break\n\n case `constrained`:\n imageProps.width = args.width || imageSizes.presentationWidth || 1\n imageProps.height = (imageProps.width || 1) / imageSizes.aspectRatio\n }\n\n return imageProps as IGatsbyImageData\n}\n\nconst dedupeAndSortDensities = (values: Array<number>): Array<number> =>\n Array.from(new Set([1, ...values])).sort(sortNumeric)\n\nexport function calculateImageSizes(args: IImageSizeArgs): IImageSizes {\n const {\n width,\n height,\n filename,\n layout = `constrained`,\n sourceMetadata: imgDimensions,\n reporter = { warn },\n breakpoints = DEFAULT_BREAKPOINTS,\n } = args\n\n // check that all dimensions provided are positive\n const userDimensions = { width, height }\n const erroneousUserDimensions = Object.entries(userDimensions).filter(\n ([_, size]) => typeof size === `number` && size < 1\n )\n if (erroneousUserDimensions.length) {\n throw new Error(\n `Specified dimensions for images must be positive numbers (> 0). Problem dimensions you have are ${erroneousUserDimensions\n .map(dim => dim.join(`: `))\n .join(`, `)}`\n )\n }\n\n if (layout === `fixed`) {\n return fixedImageSizes(args)\n } else if (layout === `constrained`) {\n return responsiveImageSizes(args)\n } else if (layout === `fullWidth`) {\n return responsiveImageSizes({ breakpoints, ...args })\n } else {\n reporter.warn(\n `No valid layout was provided for the image at ${filename}. Valid image layouts are fixed, fullWidth, and constrained. Found ${layout}`\n )\n return {\n sizes: [imgDimensions.width],\n presentationWidth: imgDimensions.width,\n presentationHeight: imgDimensions.height,\n aspectRatio: imgDimensions.width / imgDimensions.height,\n unscaledWidth: imgDimensions.width,\n }\n }\n}\nexport function fixedImageSizes({\n filename,\n sourceMetadata: imgDimensions,\n width,\n height,\n fit = `cover`,\n outputPixelDensities = DEFAULT_PIXEL_DENSITIES,\n reporter = { warn },\n}: IImageSizeArgs): IImageSizes {\n let aspectRatio = imgDimensions.width / imgDimensions.height\n // Sort, dedupe and ensure there's a 1\n const densities = dedupeAndSortDensities(outputPixelDensities)\n\n // If both are provided then we need to check the fit\n if (width && height) {\n const calculated = getDimensionsAndAspectRatio(imgDimensions, {\n width,\n height,\n fit,\n })\n width = calculated.width\n height = calculated.height\n aspectRatio = calculated.aspectRatio\n }\n\n if (!width) {\n if (!height) {\n width = DEFAULT_FIXED_WIDTH\n } else {\n width = Math.round(height * aspectRatio)\n }\n } else if (!height) {\n height = Math.round(width / aspectRatio)\n }\n\n const originalWidth = width // will use this for presentationWidth, don't want to lose it\n const isTopSizeOverriden =\n imgDimensions.width < width || imgDimensions.height < (height as number)\n\n // If the image is smaller than requested, warn the user that it's being processed as such\n // print out this message with the necessary information before we overwrite it for sizing\n if (isTopSizeOverriden) {\n const fixedDimension = imgDimensions.width < width ? `width` : `height`\n reporter.warn(`\nThe requested ${fixedDimension} \"${\n fixedDimension === `width` ? width : height\n }px\" for the image ${filename} was larger than the actual image ${fixedDimension} of ${\n imgDimensions[fixedDimension]\n }px. If possible, replace the current image with a larger one.`)\n\n if (fixedDimension === `width`) {\n width = imgDimensions.width\n height = Math.round(width / aspectRatio)\n } else {\n height = imgDimensions.height\n width = height * aspectRatio\n }\n }\n\n const sizes = densities\n .filter(size => size >= 1) // remove smaller densities because fixed images don't need them\n .map(density => Math.round(density * (width as number)))\n .filter(size => size <= imgDimensions.width)\n\n return {\n sizes,\n aspectRatio,\n presentationWidth: originalWidth,\n presentationHeight: Math.round(originalWidth / aspectRatio),\n unscaledWidth: width,\n }\n}\n\nexport function responsiveImageSizes({\n sourceMetadata: imgDimensions,\n width,\n height,\n fit = `cover`,\n outputPixelDensities = DEFAULT_PIXEL_DENSITIES,\n breakpoints,\n layout,\n}: IImageSizeArgs): IImageSizes {\n let sizes\n let aspectRatio = imgDimensions.width / imgDimensions.height\n // Sort, dedupe and ensure there's a 1\n const densities = dedupeAndSortDensities(outputPixelDensities)\n\n // If both are provided then we need to check the fit\n if (width && height) {\n const calculated = getDimensionsAndAspectRatio(imgDimensions, {\n width,\n height,\n fit,\n })\n width = calculated.width\n height = calculated.height\n aspectRatio = calculated.aspectRatio\n }\n\n // Case 1: width of height were passed in, make sure it isn't larger than the actual image\n width = width && Math.min(width, imgDimensions.width)\n height = height && Math.min(height, imgDimensions.height)\n\n // Case 2: neither width or height were passed in, use default size\n if (!width && !height) {\n width = Math.min(DEFAULT_FLUID_WIDTH, imgDimensions.width)\n height = width / aspectRatio\n }\n\n // if it still hasn't been found, calculate width from the derived height.\n // TS isn't smart enough to realise the type for height has been narrowed here\n if (!width) {\n width = (height as number) * aspectRatio\n }\n\n const originalWidth = width\n const isTopSizeOverriden =\n imgDimensions.width < width || imgDimensions.height < (height as number)\n if (isTopSizeOverriden) {\n width = imgDimensions.width\n height = imgDimensions.height\n }\n\n width = Math.round(width)\n\n if (breakpoints?.length > 0) {\n sizes = breakpoints.filter(size => size <= imgDimensions.width)\n\n // If a larger breakpoint has been filtered-out, add the actual image width instead\n if (\n sizes.length < breakpoints.length &&\n !sizes.includes(imgDimensions.width)\n ) {\n sizes.push(imgDimensions.width)\n }\n } else {\n sizes = densities.map(density => Math.round(density * (width as number)))\n sizes = sizes.filter(size => size <= imgDimensions.width)\n }\n\n // ensure that the size passed in is included in the final output\n if (layout === `constrained` && !sizes.includes(width)) {\n sizes.push(width)\n }\n sizes = sizes.sort(sortNumeric)\n return {\n sizes,\n aspectRatio,\n presentationWidth: originalWidth,\n presentationHeight: Math.round(originalWidth / aspectRatio),\n unscaledWidth: width,\n }\n}\n\nexport function getDimensionsAndAspectRatio(\n dimensions,\n options\n): { width: number; height: number; aspectRatio: number } {\n // Calculate the eventual width/height of the image.\n const imageAspectRatio = dimensions.width / dimensions.height\n\n let width = options.width\n let height = options.height\n\n switch (options.fit) {\n case `fill`: {\n width = options.width ? options.width : dimensions.width\n height = options.height ? options.height : dimensions.height\n break\n }\n case `inside`: {\n const widthOption = options.width\n ? options.width\n : Number.MAX_SAFE_INTEGER\n const heightOption = options.height\n ? options.height\n : Number.MAX_SAFE_INTEGER\n\n width = Math.min(widthOption, Math.round(heightOption * imageAspectRatio))\n height = Math.min(\n heightOption,\n Math.round(widthOption / imageAspectRatio)\n )\n break\n }\n case `outside`: {\n const widthOption = options.width ? options.width : 0\n const heightOption = options.height ? options.height : 0\n\n width = Math.max(widthOption, Math.round(heightOption * imageAspectRatio))\n height = Math.max(\n heightOption,\n Math.round(widthOption / imageAspectRatio)\n )\n break\n }\n\n default: {\n if (options.width && !options.height) {\n width = options.width\n height = Math.round(options.width / imageAspectRatio)\n }\n\n if (options.height && !options.width) {\n width = Math.round(options.height * imageAspectRatio)\n height = options.height\n }\n }\n }\n\n return {\n width,\n height,\n aspectRatio: width / height,\n }\n}\n","/* global GATSBY___IMAGE */\nimport { generateImageData, EVERY_BREAKPOINT } from \"../image-utils\"\nimport type { CSSProperties, HTMLAttributes, ImgHTMLAttributes } from \"react\"\nimport type { Node } from \"gatsby\"\nimport type { PlaceholderProps } from \"./placeholder\"\nimport type { MainImageProps } from \"./main-image\"\nimport type { IGatsbyImageData } from \"./gatsby-image.browser\"\nimport type {\n IGatsbyImageHelperArgs,\n Layout,\n IImage,\n ImageFormat,\n} from \"../image-utils\"\n\n// Native lazy-loading support: https://addyosmani.com/blog/lazy-loading/\nexport const hasNativeLazyLoadSupport = (): boolean =>\n typeof HTMLImageElement !== `undefined` &&\n `loading` in HTMLImageElement.prototype\n\nexport function gatsbyImageIsInstalled(): boolean {\n return typeof GATSBY___IMAGE !== `undefined` && GATSBY___IMAGE\n}\n\nexport type IGatsbyImageDataParent<T = never> = T & {\n gatsbyImageData: IGatsbyImageData\n}\nexport type IGatsbyImageParent<T = never> = T & {\n gatsbyImage: IGatsbyImageData\n}\nexport type FileNode = Partial<Node> & {\n childImageSharp?: IGatsbyImageDataParent<Partial<Node>>\n}\n\nconst isGatsbyImageData = (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n node: IGatsbyImageData | any\n): node is IGatsbyImageData =>\n // 🦆 check for a deep prop to be sure this is a valid gatsbyImageData object\n Boolean(node?.images?.fallback?.src)\n\nconst isGatsbyImageDataParent = <T>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n node: IGatsbyImageDataParent<T> | any\n): node is IGatsbyImageDataParent<T> => Boolean(node?.gatsbyImageData)\n\nconst isGatsbyImageParent = <T>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n node: IGatsbyImageParent<T> | any\n): node is IGatsbyImageParent<T> => Boolean(node?.gatsbyImage)\n\nexport type ImageDataLike =\n | FileNode\n | IGatsbyImageDataParent\n | IGatsbyImageParent\n | IGatsbyImageData\n\nexport const getImage = (\n node: ImageDataLike | null\n): IGatsbyImageData | undefined => {\n // This checks both for gatsbyImageData and gatsbyImage\n if (isGatsbyImageData(node)) {\n return node\n }\n // gatsbyImageData GraphQL field\n if (isGatsbyImageDataParent(node)) {\n return node.gatsbyImageData\n }\n // gatsbyImage GraphQL field for Gatsby's Image CDN service\n if (isGatsbyImageParent(node)) {\n return node.gatsbyImage\n }\n return node?.childImageSharp?.gatsbyImageData\n}\n\nexport const getSrc = (node: ImageDataLike): string | undefined =>\n getImage(node)?.images?.fallback?.src\n\nexport const getSrcSet = (node: ImageDataLike): string | undefined =>\n getImage(node)?.images?.fallback?.srcSet\n\nexport function getWrapperProps(\n width: number,\n height: number,\n layout: Layout\n): Pick<HTMLAttributes<HTMLElement>, \"className\" | \"style\"> & {\n \"data-gatsby-image-wrapper\": string\n} {\n const wrapperStyle: CSSProperties = {}\n\n let className = `gatsby-image-wrapper`\n\n // If the plugin isn't installed we need to apply the styles inline\n if (!gatsbyImageIsInstalled()) {\n wrapperStyle.position = `relative`\n wrapperStyle.overflow = `hidden`\n }\n\n if (layout === `fixed`) {\n wrapperStyle.width = width\n wrapperStyle.height = height\n } else if (layout === `constrained`) {\n if (!gatsbyImageIsInstalled()) {\n wrapperStyle.display = `inline-block`\n wrapperStyle.verticalAlign = `top`\n }\n className = `gatsby-image-wrapper gatsby-image-wrapper-constrained`\n }\n\n return {\n className,\n \"data-gatsby-image-wrapper\": ``,\n style: wrapperStyle,\n }\n}\n\nexport interface IUrlBuilderArgs<OptionsType> {\n width: number\n height: number\n baseUrl: string\n format: ImageFormat\n options: OptionsType\n}\nexport interface IGetImageDataArgs<OptionsType = Record<string, unknown>> {\n baseUrl: string\n /**\n * For constrained and fixed images, the size of the image element\n */\n width?: number\n height?: number\n /**\n * If available, pass the source image width and height\n */\n sourceWidth?: number\n sourceHeight?: number\n /**\n * If only one dimension is passed, then this will be used to calculate the other.\n */\n aspectRatio?: number\n layout?: Layout\n /**\n * Returns a URL based on the passed arguments. Should be a pure function\n */\n urlBuilder: (args: IUrlBuilderArgs<OptionsType>) => string\n\n /**\n * Should be a data URI\n */\n placeholderURL?: string\n backgroundColor?: string\n /**\n * Used in error messages etc\n */\n pluginName?: string\n\n /**\n * If you do not support auto-format, pass an array of image types here\n */\n formats?: Array<ImageFormat>\n\n breakpoints?: Array<number>\n\n /**\n * Passed to the urlBuilder function\n */\n options?: OptionsType\n}\n\n/**\n * Use this hook to generate gatsby-plugin-image data in the browser.\n */\nexport function getImageData<OptionsType>({\n baseUrl,\n urlBuilder,\n sourceWidth,\n sourceHeight,\n pluginName = `getImageData`,\n formats = [`auto`],\n breakpoints,\n options,\n ...props\n}: IGetImageDataArgs<OptionsType>): IGatsbyImageData {\n if (\n !breakpoints?.length &&\n (props.layout === `fullWidth` || (props.layout as string) === `FULL_WIDTH`)\n ) {\n breakpoints = EVERY_BREAKPOINT\n }\n const generateImageSource = (\n baseUrl: string,\n width: number,\n height?: number,\n format?: ImageFormat\n ): IImage => {\n return {\n width,\n height,\n format,\n src: urlBuilder({ baseUrl, width, height, options, format }),\n }\n }\n\n const sourceMetadata: IGatsbyImageHelperArgs[\"sourceMetadata\"] = {\n width: sourceWidth,\n height: sourceHeight,\n format: `auto`,\n }\n\n const args: IGatsbyImageHelperArgs = {\n ...props,\n pluginName,\n generateImageSource,\n filename: baseUrl,\n formats,\n breakpoints,\n sourceMetadata,\n }\n return generateImageData(args)\n}\n\nexport function getMainProps(\n isLoading: boolean,\n isLoaded: boolean,\n images: IGatsbyImageData[\"images\"],\n loading?: \"eager\" | \"lazy\",\n style: CSSProperties = {}\n): Partial<MainImageProps> {\n // fallback when it's not configured in gatsby-config.\n if (!gatsbyImageIsInstalled()) {\n style = {\n height: `100%`,\n left: 0,\n position: `absolute`,\n top: 0,\n transform: `translateZ(0)`,\n transition: `opacity 250ms linear`,\n width: `100%`,\n willChange: `opacity`,\n ...style,\n }\n }\n\n const result = {\n ...images,\n loading,\n shouldLoad: isLoading,\n \"data-main-image\": ``,\n style: {\n ...style,\n opacity: isLoaded ? 1 : 0,\n },\n }\n\n return result\n}\n\nexport type PlaceholderImageAttrs = ImgHTMLAttributes<HTMLImageElement> &\n Pick<PlaceholderProps, \"sources\" | \"fallback\"> & {\n \"data-placeholder-image\"?: string\n }\n\nexport function getPlaceholderProps(\n placeholder: PlaceholderImageAttrs | undefined,\n isLoaded: boolean,\n layout: Layout,\n width?: number,\n height?: number,\n backgroundColor?: string,\n objectFit?: CSSProperties[\"objectFit\"],\n objectPosition?: CSSProperties[\"objectPosition\"]\n): PlaceholderImageAttrs {\n const wrapperStyle: CSSProperties = {}\n\n if (backgroundColor) {\n wrapperStyle.backgroundColor = backgroundColor\n\n if (layout === `fixed`) {\n wrapperStyle.width = width\n wrapperStyle.height = height\n wrapperStyle.backgroundColor = backgroundColor\n wrapperStyle.position = `relative`\n } else if (layout === `constrained`) {\n wrapperStyle.position = `absolute`\n wrapperStyle.top = 0\n wrapperStyle.left = 0\n wrapperStyle.bottom = 0\n wrapperStyle.right = 0\n } else if (layout === `fullWidth`) {\n wrapperStyle.position = `absolute`\n wrapperStyle.top = 0\n wrapperStyle.left = 0\n wrapperStyle.bottom = 0\n wrapperStyle.right = 0\n }\n }\n\n if (objectFit) {\n wrapperStyle.objectFit = objectFit\n }\n\n if (objectPosition) {\n wrapperStyle.objectPosition = objectPosition\n }\n const result: PlaceholderImageAttrs = {\n ...placeholder,\n \"aria-hidden\": true,\n \"data-placeholder-image\": ``,\n style: {\n opacity: isLoaded ? 0 : 1,\n transition: `opacity 500ms linear`,\n ...wrapperStyle,\n },\n }\n\n // fallback when it's not configured in gatsby-config.\n if (!gatsbyImageIsInstalled()) {\n result.style = {\n height: `100%`,\n left: 0,\n position: `absolute`,\n top: 0,\n width: `100%`,\n }\n }\n\n return result\n}\n\nexport interface IArtDirectedImage {\n media: string\n image: IGatsbyImageData\n}\n\n/**\n * Generate a Gatsby image data object with multiple, art-directed images that display at different\n * resolutions.\n *\n * @param defaultImage The image displayed when no media query matches.\n * It is also used for all other settings applied to the image, such as width, height and layout.\n * You should pass a className to the component with media queries to adjust the size of the container,\n * as this cannot be adjusted automatically.\n * @param artDirected Array of objects which each contains a `media` string which is a media query\n * such as `(min-width: 320px)`, and the image object to use when that query matches.\n */\nexport function withArtDirection(\n defaultImage: IGatsbyImageData,\n artDirected: Array<IArtDirectedImage>\n): IGatsbyImageData {\n const { images, placeholder, ...props } = defaultImage\n const output: IGatsbyImageData = {\n ...props,\n images: {\n ...images,\n sources: [],\n },\n placeholder: placeholder && {\n ...placeholder,\n sources: [],\n },\n }\n\n artDirected.forEach(({ media, image }) => {\n if (!media) {\n if (process.env.NODE_ENV === `development`) {\n console.warn(\n \"[gatsby-plugin-image] All art-directed images passed to must have a value set for `media`. Skipping.\"\n )\n }\n return\n }\n\n if (\n image.layout !== defaultImage.layout &&\n process.env.NODE_ENV === `development`\n ) {\n console.warn(\n `[gatsby-plugin-image] Mismatched image layout: expected \"${defaultImage.layout}\" but received \"${image.layout}\". All art-directed images use the same layout as the default image`\n )\n }\n\n output.images.sources.push(\n ...image.images.sources.map(source => {\n return { ...source, media }\n }),\n {\n media,\n srcSet: image.images.fallback.srcSet,\n }\n )\n\n if (!output.placeholder) {\n return\n }\n\n output.placeholder.sources.push({\n media,\n srcSet: image.placeholder.fallback,\n })\n })\n output.images.sources.push(...images.sources)\n if (placeholder?.sources) {\n output.placeholder?.sources.push(...placeholder.sources)\n }\n return output\n}\n","import React, { FunctionComponent, ImgHTMLAttributes } from \"react\"\nimport * as PropTypes from \"prop-types\"\n\nexport interface IResponsiveImageProps {\n sizes?: string\n srcSet: string\n}\n\nexport type SourceProps = IResponsiveImageProps &\n (\n | {\n media: string\n type?: string\n }\n | {\n media?: string\n type: string\n }\n )\n\ntype FallbackProps = { src: string } & Partial<IResponsiveImageProps>\n\ntype ImageProps = ImgHTMLAttributes<HTMLImageElement> & {\n src: string\n alt: string\n shouldLoad: boolean\n}\n\nexport type PictureProps = ImgHTMLAttributes<HTMLImageElement> & {\n fallback?: FallbackProps\n sources?: Array<SourceProps>\n alt: string\n shouldLoad?: boolean\n}\n\nconst Image: FunctionComponent<ImageProps> = function Image({\n src,\n srcSet,\n loading,\n alt = ``,\n shouldLoad,\n ...props\n}) {\n return (\n <img\n {...props}\n decoding=\"async\"\n loading={loading}\n src={shouldLoad ? src : undefined}\n data-src={!shouldLoad ? src : undefined}\n srcSet={shouldLoad ? srcSet : undefined}\n data-srcset={!shouldLoad ? srcSet : undefined}\n alt={alt}\n />\n )\n}\n\nexport const Picture: React.FC<PictureProps> = function Picture({\n fallback,\n sources = [],\n shouldLoad = true,\n ...props\n}) {\n const sizes = props.sizes || fallback?.sizes\n const fallbackImage = (\n <Image {...props} {...fallback} sizes={sizes} shouldLoad={shouldLoad} />\n )\n\n if (!sources.length) {\n return fallbackImage\n }\n\n return (\n <picture>\n {sources.map(({ media, srcSet, type }) => (\n <source\n key={`${media}-${type}-${srcSet}`}\n type={type}\n media={media}\n srcSet={shouldLoad ? srcSet : undefined}\n data-srcset={!shouldLoad ? srcSet : undefined}\n sizes={sizes}\n />\n ))}\n {fallbackImage}\n </picture>\n )\n}\n\nImage.propTypes = {\n src: PropTypes.string.isRequired,\n alt: PropTypes.string.isRequired,\n sizes: PropTypes.string,\n srcSet: PropTypes.string,\n shouldLoad: PropTypes.bool,\n}\n\nPicture.displayName = `Picture`\nPicture.propTypes = {\n alt: PropTypes.string.isRequired,\n shouldLoad: PropTypes.bool,\n fallback: PropTypes.exact({\n src: PropTypes.string.isRequired,\n srcSet: PropTypes.string,\n sizes: PropTypes.string,\n }),\n sources: PropTypes.arrayOf(\n PropTypes.oneOfType([\n PropTypes.exact({\n media: PropTypes.string.isRequired,\n type: PropTypes.string,\n sizes: PropTypes.string,\n srcSet: PropTypes.string.isRequired,\n }),\n PropTypes.exact({\n media: PropTypes.string,\n type: PropTypes.string.isRequired,\n sizes: PropTypes.string,\n srcSet: PropTypes.string.isRequired,\n }),\n ])\n ),\n}\n","import React, { FunctionComponent, ImgHTMLAttributes } from \"react\"\nimport * as PropTypes from \"prop-types\"\nimport { Picture, SourceProps } from \"./picture\"\n\nexport type PlaceholderProps = ImgHTMLAttributes<HTMLImageElement> & {\n fallback?: string\n sources?: Array<SourceProps>\n}\n\nexport const Placeholder: FunctionComponent<PlaceholderProps> =\n function Placeholder({ fallback, ...props }) {\n if (fallback) {\n return (\n <Picture\n {...props}\n fallback={{\n src: fallback,\n }}\n aria-hidden\n alt=\"\"\n />\n )\n } else {\n return <div {...props}></div>\n }\n }\n\nPlaceholder.displayName = `Placeholder`\nPlaceholder.propTypes = {\n fallback: PropTypes.string,\n sources: Picture.propTypes?.sources,\n alt: function (props, propName, componentName): Error | null {\n if (!props[propName]) {\n return null\n }\n\n return new Error(\n `Invalid prop \\`${propName}\\` supplied to \\`${componentName}\\`. Validation failed.`\n )\n },\n}\n","import React from \"react\"\nimport { Picture, PictureProps } from \"./picture\"\n\nexport type MainImageProps = PictureProps\n\nexport const MainImage: React.FC<PictureProps> = function MainImage(props) {\n return (\n <>\n <Picture {...props} />\n <noscript>\n <Picture {...props} shouldLoad={true} />\n </noscript>\n </>\n )\n}\n\nMainImage.displayName = `MainImage`\nMainImage.propTypes = Picture.propTypes\n","import React, { Fragment, FunctionComponent } from \"react\"\nimport terserMacro from \"../../macros/terser.macro\"\nimport { Layout } from \"../image-utils\"\n\nexport interface ILayoutWrapperProps {\n layout: Layout\n width: number\n height: number\n}\n\nconst NativeScriptLoading: FunctionComponent = () => (\n <script\n type=\"module\"\n dangerouslySetInnerHTML={{\n __html: terserMacro`\nconst hasNativeLazyLoadSupport = typeof HTMLImageElement !== \"undefined\" && \"loading\" in HTMLImageElement.prototype;\nif (hasNativeLazyLoadSupport) {\n const gatsbyImages = document.querySelectorAll('img[data-main-image]');\n for (let mainImage of gatsbyImages) {\n if (mainImage.dataset.src) {\n mainImage.setAttribute('src', mainImage.dataset.src)\n mainImage.removeAttribute('data-src')\n }\n if (mainImage.dataset.srcset) {\n mainImage.setAttribute('srcset', mainImage.dataset.srcset)\n mainImage.removeAttribute('data-srcset')\n }\n\n const sources = mainImage.parentNode.querySelectorAll('source[data-srcset]');\n for (let source of sources) {\n source.setAttribute('srcset', source.dataset.srcset)\n source.removeAttribute('data-srcset')\n }\n\n if (mainImage.complete) {\n mainImage.style.opacity = 1;\n\n // also hide the placeholder\n mainImage.parentNode.parentNode.querySelector('[data-placeholder-image]').style.opacity = 0;\n }\n }\n}\n`,\n }}\n />\n)\n\nexport function getSizer(\n layout: Layout,\n width: number,\n height: number\n): string {\n let sizer = ``\n if (layout === `fullWidth`) {\n sizer = `<div aria-hidden=\"true\" style=\"padding-top: ${\n (height / width) * 100\n }%;\"></div>`\n }\n\n if (layout === `constrained`) {\n sizer = `<div style=\"max-width: ${width}px; display: block;\"><img alt=\"\" role=\"presentation\" aria-hidden=\"true\" src=\"data:image/svg+xml;charset=utf-8,%3Csvg height='${height}' width='${width}' xmlns='http://www.w3.org/2000/svg' version='1.1'%3E%3C/svg%3E\" style=\"max-width: 100%; display: block; position: static;\"></div>`\n }\n\n return sizer\n}\n\nconst Sizer: FunctionComponent<ILayoutWrapperProps> = function Sizer({\n layout,\n width,\n height,\n}) {\n if (layout === `fullWidth`) {\n return (\n <div aria-hidden style={{ paddingTop: `${(height / width) * 100}%` }} />\n )\n }\n\n if (layout === `constrained`) {\n return (\n <div style={{ maxWidth: width, display: `block` }}>\n <img\n alt=\"\"\n role=\"presentation\"\n aria-hidden=\"true\"\n src={`data:image/svg+xml;charset=utf-8,%3Csvg height='${height}' width='${width}' xmlns='http://www.w3.org/2000/svg' version='1.1'%3E%3C/svg%3E`}\n style={{\n maxWidth: `100%`,\n display: `block`,\n position: `static`,\n }}\n />\n </div>\n )\n }\n\n return null\n}\n\nexport const LayoutWrapper: FunctionComponent<ILayoutWrapperProps> =\n function LayoutWrapper({ children, ...props }) {\n return (\n <Fragment>\n <Sizer {...props} />\n {children}\n\n {SERVER ? <NativeScriptLoading /> : null}\n </Fragment>\n )\n }\n","import React from \"react\"\nimport { getWrapperProps, getMainProps, getPlaceholderProps } from \"./hooks\"\nimport { Placeholder } from \"./placeholder\"\nimport { MainImage, MainImageProps } from \"./main-image\"\nimport { LayoutWrapper } from \"./layout-wrapper\"\nimport PropTypes from \"prop-types\"\nimport type { FunctionComponent, WeakValidationMap } from \"react\"\nimport type { GatsbyImageProps, IGatsbyImageData } from \"./gatsby-image.browser\"\n\nconst removeNewLines = (str: string): string => str.replace(/\\n/g, ``)\n\nexport const GatsbyImage: FunctionComponent<GatsbyImageProps> =\n function GatsbyImage({\n as = `div`,\n className,\n class: preactClass,\n style,\n image,\n loading = `lazy`,\n imgClassName,\n imgStyle,\n backgroundColor,\n objectFit,\n objectPosition,\n ...props\n }) {\n if (!image) {\n console.warn(`[gatsby-plugin-image] Missing image prop`)\n return null\n }\n\n if (preactClass) {\n className = preactClass\n }\n\n imgStyle = {\n objectFit,\n objectPosition,\n backgroundColor,\n ...imgStyle,\n }\n\n const {\n width,\n height,\n layout,\n images,\n placeholder,\n backgroundColor: placeholderBackgroundColor,\n } = image\n\n const {\n style: wStyle,\n className: wClass,\n ...wrapperProps\n } = getWrapperProps(width, height, layout)\n\n const cleanedImages: IGatsbyImageData[\"images\"] = {\n fallback: undefined,\n sources: [],\n }\n if (images.fallback) {\n cleanedImages.fallback = {\n ...images.fallback,\n srcSet: images.fallback.srcSet\n ? removeNewLines(images.fallback.srcSet)\n : undefined,\n }\n }\n\n if (images.sources) {\n cleanedImages.sources = images.sources.map(source => {\n return {\n ...source,\n srcSet: removeNewLines(source.srcSet),\n }\n })\n }\n\n return React.createElement(\n as,\n {\n ...wrapperProps,\n style: {\n ...wStyle,\n ...style,\n backgroundColor,\n },\n className: `${wClass}${className ? ` ${className}` : ``}`,\n },\n <LayoutWrapper layout={layout} width={width} height={height}>\n <Placeholder\n {...getPlaceholderProps(\n placeholder,\n false,\n layout,\n width,\n height,\n placeholderBackgroundColor,\n objectFit,\n objectPosition\n )}\n />\n\n <MainImage\n data-gatsby-image-ssr=\"\"\n className={imgClassName}\n {...(props as Omit<\n MainImageProps,\n \"images\" | \"fallback\" | \"onError\" | \"onLoad\"\n >)}\n // When eager is set we want to start the isLoading state on true (we want to load the img without react)\n {...getMainProps(\n loading === `eager`,\n false,\n cleanedImages,\n loading,\n imgStyle\n )}\n />\n </LayoutWrapper>\n )\n }\n\nexport const altValidator: PropTypes.Validator<string> = (\n props: GatsbyImageProps,\n propName,\n componentName,\n ...rest\n): Error | undefined => {\n if (!props.alt && props.alt !== ``) {\n return new Error(\n `The \"alt\" prop is required in ${componentName}. If the image is purely presentational then pass an empty string: e.g. alt=\"\". Learn more: https://a11y-style-guide.com/style-guide/section-media.html`\n )\n }\n\n return PropTypes.string(props, propName, componentName, ...rest)\n}\n\nexport const propTypes = {\n image: PropTypes.object.isRequired,\n alt: altValidator,\n} as WeakValidationMap<GatsbyImageProps>\n","import React, { FunctionComponent, ReactElement } from \"react\"\nimport {\n altValidator,\n GatsbyImage as GatsbyImageServer,\n} from \"./gatsby-image.server\"\nimport { GatsbyImageProps, IGatsbyImageData } from \"./gatsby-image.browser\"\nimport PropTypes from \"prop-types\"\nimport { ISharpGatsbyImageArgs } from \"../image-utils\"\n\nexport interface IStaticImageProps\n extends Omit<GatsbyImageProps, \"image\">,\n Omit<ISharpGatsbyImageArgs, \"backgroundColor\"> {\n src: string\n}\n\n// These values are added by Babel. Do not add them manually\ninterface IPrivateProps {\n __imageData?: IGatsbyImageData\n __error?: string\n}\n\nexport function _getStaticImage(\n GatsbyImage: FunctionComponent<GatsbyImageProps>\n): React.FC<IStaticImageProps & IPrivateProps> {\n return function StaticImage({\n src,\n __imageData: imageData,\n __error,\n // We extract these because they're not meant to be passed-down to GatsbyImage\n /* eslint-disable @typescript-eslint/no-unused-vars */\n width,\n height,\n aspectRatio,\n tracedSVGOptions,\n placeholder,\n formats,\n quality,\n transformOptions,\n jpgOptions,\n pngOptions,\n webpOptions,\n avifOptions,\n blurredOptions,\n breakpoints,\n outputPixelDensities,\n /* eslint-enable @typescript-eslint/no-unused-vars */\n ...props\n }): ReactElement {\n if (__error) {\n console.warn(__error)\n }\n\n if (imageData) {\n return <GatsbyImage image={imageData} {...props} />\n }\n console.warn(`Image not loaded`, src)\n if (!__error && process.env.NODE_ENV === `development`) {\n console.warn(\n `Please ensure that \"gatsby-plugin-image\" is included in the plugins array in gatsby-config.js, and that your version of gatsby is at least 2.24.78`\n )\n }\n return null\n }\n}\n\nconst StaticImage: React.FC<IStaticImageProps & IPrivateProps> =\n _getStaticImage(GatsbyImageServer)\n\nconst checkDimensionProps: PropTypes.Validator<number> = (\n props: IStaticImageProps & IPrivateProps,\n propName: keyof IStaticImageProps & IPrivateProps,\n ...rest\n) => {\n if (\n props.layout === `fullWidth` &&\n (propName === `width` || propName === `height`) &&\n props[propName]\n ) {\n return new Error(\n `\"${propName}\" ${props[propName]} may not be passed when layout is fullWidth.`\n )\n }\n return PropTypes.number(props, propName, ...rest)\n}\n\nconst validLayouts = new Set([`fixed`, `fullWidth`, `constrained`])\n\nexport const propTypes = {\n src: PropTypes.string.isRequired,\n alt: altValidator,\n width: checkDimensionProps,\n height: checkDimensionProps,\n sizes: PropTypes.string,\n layout: (props: IStaticImageProps & IPrivateProps): Error | undefined => {\n if (props.layout === undefined) {\n return undefined\n }\n if (validLayouts.has(props.layout)) {\n return undefined\n }\n\n return new Error(\n `Invalid value ${props.layout}\" provided for prop \"layout\". Defaulting to \"constrained\". Valid values are \"fixed\", \"fullWidth\" or \"constrained\".`\n )\n },\n}\n\nStaticImage.displayName = `StaticImage`\nStaticImage.propTypes = propTypes\n\nexport { StaticImage }\n"],"names":["message","warn","a","b","images","map","image","src","width","join","filename","lastIndexOf","dot","slice","ext","length","args","layout","height","sourceMetadata","breakpoints","aspectRatio","formats","format","toLowerCase","camelCase","Math","round","pluginName","setDefaultDimensions","generateImageSource","fit","options","reporter","backgroundColor","placeholderURL","formatFromFilename","size","has","add","imgDimensions","DEFAULT_BREAKPOINTS","Object","entries","filter","_","erroneousUserDimensions","dim","outputPixelDensities","dedupeAndSortDensities","DEFAULT_PIXEL_DENSITIES","getDimensionsAndAspectRatio","calculated","fixedDimension","sizes","densities","density","presentationWidth","originalWidth","presentationHeight","unscaledWidth","calculateImageSizes","sources","getSizes","imageSizes","forEach","imageSrc","Boolean","find","img","unscaled","result","fallback","srcSet","getSrcSet","push","type","imageProps","placeholder","values","from","sort","sortNumeric","min","includes","dimensions","Number","MAX_SAFE_INTEGER","widthOption","heightOption","imageAspectRatio","max","GATSBY___IMAGE","node","_node$images","_node$images$fallback","isGatsbyImageData","gatsbyImageData","isGatsbyImageDataParent","gatsbyImage","isGatsbyImageParent","childImageSharp","_node$childImageSharp","loading","alt","shouldLoad","props","decoding","undefined","React","Image","media","key","fallbackImage","propTypes","PropTypes","string","isRequired","bool","Picture","displayName","exact","arrayOf","oneOfType","Placeholder","_Picture$propTypes","propName","componentName","MainImage","dangerouslySetInnerHTML","__html","style","paddingTop","maxWidth","display","role","position","children","Fragment","Sizer","NativeScriptLoading","str","replace","as","className","preactClass","imgClassName","imgStyle","objectFit","objectPosition","console","placeholderBackgroundColor","gatsbyImageIsInstalled","wrapperStyle","overflow","verticalAlign","getWrapperProps","wStyle","wClass","wrapperProps","cleanedImages","removeNewLines","source","createElement","LayoutWrapper","isLoaded","top","left","bottom","right","opacity","transition","getPlaceholderProps","isLoading","transform","willChange","getMainProps","GatsbyImage","imageData","__imageData","__error","process","env","NODE_ENV","_getStaticImage","GatsbyImageServer","number","checkDimensionProps","validLayouts","StaticImage","baseUrl","urlBuilder","sourceWidth","sourceHeight","_breakpoints","EVERY_BREAKPOINT","_generateImageSource","getImage","_getImage","_getImage$images","_getImage$images$fall","_getImage2","_getImage2$images","_getImage2$images$fal","defaultImage","artDirected","output"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"gatsby-image.js","sources":["../src/image-utils.ts","../src/components/hooks.ts","../src/components/picture.tsx","../src/components/placeholder.tsx","../src/components/main-image.tsx","../src/components/layout-wrapper.tsx","../src/components/gatsby-image.server.tsx","../src/components/static-image.server.tsx"],"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<ImageFormat>\n placeholder?: \"tracedSVG\" | \"dominantColor\" | \"blurred\" | \"none\"\n tracedSVGOptions?: Record<string, unknown>\n width?: number\n height?: number\n aspectRatio?: number\n sizes?: string\n quality?: number\n transformOptions?: {\n fit?: Fit\n cropFocus?: number | string\n duotone?: {\n highlight: string\n shadow: string\n opacity?: number\n }\n grayscale?: boolean\n rotate?: number\n trim?: number\n }\n jpgOptions?: Record<string, unknown>\n pngOptions?: Record<string, unknown>\n webpOptions?: Record<string, unknown>\n avifOptions?: Record<string, unknown>\n blurredOptions?: { width?: number; toFormat?: ImageFormat }\n breakpoints?: Array<number>\n outputPixelDensities?: Array<number>\n backgroundColor?: string\n}\n\nexport interface IImageSizeArgs {\n width?: number\n height?: number\n layout?: Layout\n filename: string\n outputPixelDensities?: Array<number>\n breakpoints?: Array<number>\n fit?: Fit\n reporter?: IReporter\n sourceMetadata: { width: number; height: number }\n}\n\nexport interface IImageSizes {\n sizes: Array<number>\n presentationWidth: number\n presentationHeight: number\n aspectRatio: number\n unscaledWidth: number\n}\n\nexport interface IImage {\n src: string\n width: number\n height: number\n format: ImageFormat\n}\n\nexport interface IGatsbyImageHelperArgs {\n pluginName: string\n generateImageSource: (\n filename: string,\n width: number,\n height: number,\n format: ImageFormat,\n fit?: Fit,\n options?: Record<string, unknown>\n ) => IImage\n layout?: Layout\n formats?: Array<ImageFormat>\n filename: string\n placeholderURL?: string\n width?: number\n height?: number\n sizes?: string\n reporter?: IReporter\n sourceMetadata?: { width: number; height: number; format: ImageFormat }\n fit?: Fit\n options?: Record<string, unknown>\n breakpoints?: Array<number>\n backgroundColor?: string\n aspectRatio?: number\n}\n\nconst warn = (message: string): void => console.warn(message)\n\nconst sortNumeric = (a: number, b: number): number => a - b\n\nexport const getSizes = (width: number, layout: Layout): string | undefined => {\n switch (layout) {\n // If screen is wider than the max size, image width is the max size,\n // otherwise it's the width of the screen\n case `constrained`:\n return `(min-width: ${width}px) ${width}px, 100vw`\n\n // Image is always the same width, whatever the size of the screen\n case `fixed`:\n return `${width}px`\n\n // Image is always the width of the screen\n case `fullWidth`:\n return `100vw`\n\n default:\n return undefined\n }\n}\n\nexport const getSrcSet = (images: Array<IImage>): string =>\n images.map(image => `${image.src} ${image.width}w`).join(`,\\n`)\n\nexport function formatFromFilename(filename: string): ImageFormat | undefined {\n const dot = filename.lastIndexOf(`.`)\n if (dot !== -1) {\n const ext = filename.slice(dot + 1)\n if (ext === `jpeg`) {\n return `jpg`\n }\n if (ext.length === 3 || ext.length === 4) {\n return ext as ImageFormat\n }\n }\n return undefined\n}\n\nexport function setDefaultDimensions(\n args: IGatsbyImageHelperArgs\n): IGatsbyImageHelperArgs {\n let {\n layout = `constrained`,\n width,\n height,\n sourceMetadata,\n breakpoints,\n aspectRatio,\n formats = [`auto`, `webp`],\n } = args\n formats = formats.map(format => format.toLowerCase() as ImageFormat)\n layout = camelCase(layout) as Layout\n\n if (width && height) {\n return { ...args, formats, layout, aspectRatio: width / height }\n }\n if (sourceMetadata.width && sourceMetadata.height && !aspectRatio) {\n aspectRatio = sourceMetadata.width / sourceMetadata.height\n }\n\n if (layout === `fullWidth`) {\n width = width || sourceMetadata.width || breakpoints[breakpoints.length - 1]\n height = height || Math.round(width / (aspectRatio || DEFAULT_ASPECT_RATIO))\n } else {\n if (!width) {\n if (height && aspectRatio) {\n width = height * aspectRatio\n } else if (sourceMetadata.width) {\n width = sourceMetadata.width\n } else if (height) {\n width = Math.round(height / DEFAULT_ASPECT_RATIO)\n } else {\n width = DEFAULT_FIXED_WIDTH\n }\n }\n\n if (aspectRatio && !height) {\n height = Math.round(width / aspectRatio)\n } else if (!aspectRatio) {\n aspectRatio = width / height\n }\n }\n return { ...args, width, height, aspectRatio, layout, formats }\n}\n\n/**\n * Use this for getting an image for the blurred placeholder. This ensures the\n * aspect ratio and crop match the main image\n */\nexport function getLowResolutionImageURL(\n args: IGatsbyImageHelperArgs,\n width = 20\n): string {\n args = setDefaultDimensions(args)\n const { generateImageSource, filename, aspectRatio } = args\n return generateImageSource(\n filename,\n width,\n Math.round(width / aspectRatio),\n args.sourceMetadata.format || `jpg`,\n args.fit,\n args.options\n )?.src\n}\n\nexport function generateImageData(\n args: IGatsbyImageHelperArgs\n): IGatsbyImageData {\n args = setDefaultDimensions(args)\n\n let {\n pluginName,\n sourceMetadata,\n generateImageSource,\n layout,\n fit,\n options,\n width,\n height,\n filename,\n reporter = { warn },\n backgroundColor,\n placeholderURL,\n } = args\n\n if (!pluginName) {\n reporter.warn(\n `[gatsby-plugin-image] \"generateImageData\" was not passed a plugin name`\n )\n }\n\n if (typeof generateImageSource !== `function`) {\n throw new Error(`generateImageSource must be a function`)\n }\n\n if (!sourceMetadata || (!sourceMetadata.width && !sourceMetadata.height)) {\n // No metadata means we let the CDN handle max size etc, aspect ratio etc\n sourceMetadata = {\n width,\n height,\n format: sourceMetadata?.format || formatFromFilename(filename) || `auto`,\n }\n } else if (!sourceMetadata.format) {\n sourceMetadata.format = formatFromFilename(filename)\n }\n\n const formats = new Set<ImageFormat>(args.formats)\n\n if (formats.size === 0 || formats.has(`auto`) || formats.has(``)) {\n formats.delete(`auto`)\n formats.delete(``)\n formats.add(sourceMetadata.format)\n }\n\n if (formats.has(`jpg`) && formats.has(`png`)) {\n reporter.warn(\n `[${pluginName}] Specifying both 'jpg' and 'png' formats is not supported. Using 'auto' instead`\n )\n if (sourceMetadata.format === `jpg`) {\n formats.delete(`png`)\n } else {\n formats.delete(`jpg`)\n }\n }\n\n const imageSizes = calculateImageSizes({ ...args, sourceMetadata })\n\n const result: IGatsbyImageData[\"images\"] = {\n sources: [],\n }\n\n let sizes = args.sizes\n if (!sizes) {\n sizes = getSizes(imageSizes.presentationWidth, layout)\n }\n\n formats.forEach(format => {\n const images = imageSizes.sizes\n .map(size => {\n const imageSrc = generateImageSource(\n filename,\n size,\n Math.round(size / imageSizes.aspectRatio),\n format,\n fit,\n options\n )\n if (\n !imageSrc?.width ||\n !imageSrc.height ||\n !imageSrc.src ||\n !imageSrc.format\n ) {\n reporter.warn(\n `[${pluginName}] The resolver for image ${filename} returned an invalid value.`\n )\n return undefined\n }\n return imageSrc\n })\n .filter(Boolean)\n\n if (format === `jpg` || format === `png` || format === `auto`) {\n const unscaled =\n images.find(img => img.width === imageSizes.unscaledWidth) || images[0]\n\n if (unscaled) {\n result.fallback = {\n src: unscaled.src,\n srcSet: getSrcSet(images),\n sizes,\n }\n }\n } else {\n result.sources?.push({\n srcSet: getSrcSet(images),\n sizes,\n type: `image/${format}`,\n })\n }\n })\n\n const imageProps: Partial<IGatsbyImageData> = {\n images: result,\n layout,\n backgroundColor,\n }\n\n if (placeholderURL) {\n imageProps.placeholder = { fallback: placeholderURL }\n }\n\n switch (layout) {\n case `fixed`:\n imageProps.width = imageSizes.presentationWidth\n imageProps.height = imageSizes.presentationHeight\n break\n\n case `fullWidth`:\n imageProps.width = 1\n imageProps.height = 1 / imageSizes.aspectRatio\n break\n\n case `constrained`:\n imageProps.width = args.width || imageSizes.presentationWidth || 1\n imageProps.height = (imageProps.width || 1) / imageSizes.aspectRatio\n }\n\n return imageProps as IGatsbyImageData\n}\n\nconst dedupeAndSortDensities = (values: Array<number>): Array<number> =>\n Array.from(new Set([1, ...values])).sort(sortNumeric)\n\nexport function calculateImageSizes(args: IImageSizeArgs): IImageSizes {\n const {\n width,\n height,\n filename,\n layout = `constrained`,\n sourceMetadata: imgDimensions,\n reporter = { warn },\n breakpoints = DEFAULT_BREAKPOINTS,\n } = args\n\n // check that all dimensions provided are positive\n const userDimensions = { width, height }\n const erroneousUserDimensions = Object.entries(userDimensions).filter(\n ([_, size]) => typeof size === `number` && size < 1\n )\n if (erroneousUserDimensions.length) {\n throw new Error(\n `Specified dimensions for images must be positive numbers (> 0). Problem dimensions you have are ${erroneousUserDimensions\n .map(dim => dim.join(`: `))\n .join(`, `)}`\n )\n }\n\n if (layout === `fixed`) {\n return fixedImageSizes(args)\n } else if (layout === `constrained`) {\n return responsiveImageSizes(args)\n } else if (layout === `fullWidth`) {\n return responsiveImageSizes({ breakpoints, ...args })\n } else {\n reporter.warn(\n `No valid layout was provided for the image at ${filename}. Valid image layouts are fixed, fullWidth, and constrained. Found ${layout}`\n )\n return {\n sizes: [imgDimensions.width],\n presentationWidth: imgDimensions.width,\n presentationHeight: imgDimensions.height,\n aspectRatio: imgDimensions.width / imgDimensions.height,\n unscaledWidth: imgDimensions.width,\n }\n }\n}\nexport function fixedImageSizes({\n filename,\n sourceMetadata: imgDimensions,\n width,\n height,\n fit = `cover`,\n outputPixelDensities = DEFAULT_PIXEL_DENSITIES,\n reporter = { warn },\n}: IImageSizeArgs): IImageSizes {\n let aspectRatio = imgDimensions.width / imgDimensions.height\n // Sort, dedupe and ensure there's a 1\n const densities = dedupeAndSortDensities(outputPixelDensities)\n\n // If both are provided then we need to check the fit\n if (width && height) {\n const calculated = getDimensionsAndAspectRatio(imgDimensions, {\n width,\n height,\n fit,\n })\n width = calculated.width\n height = calculated.height\n aspectRatio = calculated.aspectRatio\n }\n\n if (!width) {\n if (!height) {\n width = DEFAULT_FIXED_WIDTH\n } else {\n width = Math.round(height * aspectRatio)\n }\n } else if (!height) {\n height = Math.round(width / aspectRatio)\n }\n\n const originalWidth = width // will use this for presentationWidth, don't want to lose it\n const isTopSizeOverriden =\n imgDimensions.width < width || imgDimensions.height < (height as number)\n\n // If the image is smaller than requested, warn the user that it's being processed as such\n // print out this message with the necessary information before we overwrite it for sizing\n if (isTopSizeOverriden) {\n const fixedDimension = imgDimensions.width < width ? `width` : `height`\n reporter.warn(`\nThe requested ${fixedDimension} \"${\n fixedDimension === `width` ? width : height\n }px\" for the image ${filename} was larger than the actual image ${fixedDimension} of ${\n imgDimensions[fixedDimension]\n }px. If possible, replace the current image with a larger one.`)\n\n if (fixedDimension === `width`) {\n width = imgDimensions.width\n height = Math.round(width / aspectRatio)\n } else {\n height = imgDimensions.height\n width = height * aspectRatio\n }\n }\n\n const sizes = densities\n .filter(size => size >= 1) // remove smaller densities because fixed images don't need them\n .map(density => Math.round(density * (width as number)))\n .filter(size => size <= imgDimensions.width)\n\n return {\n sizes,\n aspectRatio,\n presentationWidth: originalWidth,\n presentationHeight: Math.round(originalWidth / aspectRatio),\n unscaledWidth: width,\n }\n}\n\nexport function responsiveImageSizes({\n sourceMetadata: imgDimensions,\n width,\n height,\n fit = `cover`,\n outputPixelDensities = DEFAULT_PIXEL_DENSITIES,\n breakpoints,\n layout,\n}: IImageSizeArgs): IImageSizes {\n let sizes\n let aspectRatio = imgDimensions.width / imgDimensions.height\n // Sort, dedupe and ensure there's a 1\n const densities = dedupeAndSortDensities(outputPixelDensities)\n\n // If both are provided then we need to check the fit\n if (width && height) {\n const calculated = getDimensionsAndAspectRatio(imgDimensions, {\n width,\n height,\n fit,\n })\n width = calculated.width\n height = calculated.height\n aspectRatio = calculated.aspectRatio\n }\n\n // Case 1: width of height were passed in, make sure it isn't larger than the actual image\n width = width && Math.min(width, imgDimensions.width)\n height = height && Math.min(height, imgDimensions.height)\n\n // Case 2: neither width or height were passed in, use default size\n if (!width && !height) {\n width = Math.min(DEFAULT_FLUID_WIDTH, imgDimensions.width)\n height = width / aspectRatio\n }\n\n // if it still hasn't been found, calculate width from the derived height.\n // TS isn't smart enough to realise the type for height has been narrowed here\n if (!width) {\n width = (height as number) * aspectRatio\n }\n\n const originalWidth = width\n const isTopSizeOverriden =\n imgDimensions.width < width || imgDimensions.height < (height as number)\n if (isTopSizeOverriden) {\n width = imgDimensions.width\n height = imgDimensions.height\n }\n\n width = Math.round(width)\n\n if (breakpoints?.length > 0) {\n sizes = breakpoints.filter(size => size <= imgDimensions.width)\n\n // If a larger breakpoint has been filtered-out, add the actual image width instead\n if (\n sizes.length < breakpoints.length &&\n !sizes.includes(imgDimensions.width)\n ) {\n sizes.push(imgDimensions.width)\n }\n } else {\n sizes = densities.map(density => Math.round(density * (width as number)))\n sizes = sizes.filter(size => size <= imgDimensions.width)\n }\n\n // ensure that the size passed in is included in the final output\n if (layout === `constrained` && !sizes.includes(width)) {\n sizes.push(width)\n }\n sizes = sizes.sort(sortNumeric)\n return {\n sizes,\n aspectRatio,\n presentationWidth: originalWidth,\n presentationHeight: Math.round(originalWidth / aspectRatio),\n unscaledWidth: width,\n }\n}\n\nexport function getDimensionsAndAspectRatio(\n dimensions,\n options\n): { width: number; height: number; aspectRatio: number } {\n // Calculate the eventual width/height of the image.\n const imageAspectRatio = dimensions.width / dimensions.height\n\n let width = options.width\n let height = options.height\n\n switch (options.fit) {\n case `fill`: {\n width = options.width ? options.width : dimensions.width\n height = options.height ? options.height : dimensions.height\n break\n }\n case `inside`: {\n const widthOption = options.width\n ? options.width\n : Number.MAX_SAFE_INTEGER\n const heightOption = options.height\n ? options.height\n : Number.MAX_SAFE_INTEGER\n\n width = Math.min(widthOption, Math.round(heightOption * imageAspectRatio))\n height = Math.min(\n heightOption,\n Math.round(widthOption / imageAspectRatio)\n )\n break\n }\n case `outside`: {\n const widthOption = options.width ? options.width : 0\n const heightOption = options.height ? options.height : 0\n\n width = Math.max(widthOption, Math.round(heightOption * imageAspectRatio))\n height = Math.max(\n heightOption,\n Math.round(widthOption / imageAspectRatio)\n )\n break\n }\n\n default: {\n if (options.width && !options.height) {\n width = options.width\n height = Math.round(options.width / imageAspectRatio)\n }\n\n if (options.height && !options.width) {\n width = Math.round(options.height * imageAspectRatio)\n height = options.height\n }\n }\n }\n\n return {\n width,\n height,\n aspectRatio: width / height,\n }\n}\n","/* global GATSBY___IMAGE */\nimport { generateImageData, EVERY_BREAKPOINT } from \"../image-utils\"\nimport type { CSSProperties, HTMLAttributes, ImgHTMLAttributes } from \"react\"\nimport type { Node } from \"gatsby\"\nimport type { PlaceholderProps } from \"./placeholder\"\nimport type { MainImageProps } from \"./main-image\"\nimport type { IGatsbyImageData } from \"./gatsby-image.browser\"\nimport type {\n IGatsbyImageHelperArgs,\n Layout,\n IImage,\n ImageFormat,\n} from \"../image-utils\"\n\n// Native lazy-loading support: https://addyosmani.com/blog/lazy-loading/\nexport const hasNativeLazyLoadSupport = (): boolean =>\n typeof HTMLImageElement !== `undefined` &&\n `loading` in HTMLImageElement.prototype\n\nexport function gatsbyImageIsInstalled(): boolean {\n return typeof GATSBY___IMAGE !== `undefined` && GATSBY___IMAGE\n}\n\nexport type IGatsbyImageDataParent<T = never> = T & {\n gatsbyImageData: IGatsbyImageData\n}\nexport type IGatsbyImageParent<T = never> = T & {\n gatsbyImage: IGatsbyImageData\n}\nexport type FileNode = Partial<Node> & {\n childImageSharp?: IGatsbyImageDataParent<Partial<Node>>\n}\n\nconst isGatsbyImageData = (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n node: IGatsbyImageData | any\n): node is IGatsbyImageData =>\n // 🦆 check for a deep prop to be sure this is a valid gatsbyImageData object\n Boolean(node?.images?.fallback?.src)\n\nconst isGatsbyImageDataParent = <T>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n node: IGatsbyImageDataParent<T> | any\n): node is IGatsbyImageDataParent<T> => Boolean(node?.gatsbyImageData)\n\nconst isGatsbyImageParent = <T>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n node: IGatsbyImageParent<T> | any\n): node is IGatsbyImageParent<T> => Boolean(node?.gatsbyImage)\n\nexport type ImageDataLike =\n | FileNode\n | IGatsbyImageDataParent\n | IGatsbyImageParent\n | IGatsbyImageData\n\nexport const getImage = (\n node: ImageDataLike | null\n): IGatsbyImageData | undefined => {\n // This checks both for gatsbyImageData and gatsbyImage\n if (isGatsbyImageData(node)) {\n return node\n }\n // gatsbyImageData GraphQL field\n if (isGatsbyImageDataParent(node)) {\n return node.gatsbyImageData\n }\n // gatsbyImage GraphQL field for Gatsby's Image CDN service\n if (isGatsbyImageParent(node)) {\n return node.gatsbyImage\n }\n return node?.childImageSharp?.gatsbyImageData\n}\n\nexport const getSrc = (node: ImageDataLike): string | undefined =>\n getImage(node)?.images?.fallback?.src\n\nexport const getSrcSet = (node: ImageDataLike): string | undefined =>\n getImage(node)?.images?.fallback?.srcSet\n\nexport function getWrapperProps(\n width: number,\n height: number,\n layout: Layout\n): Pick<HTMLAttributes<HTMLElement>, \"className\" | \"style\"> & {\n \"data-gatsby-image-wrapper\": string\n} {\n const wrapperStyle: CSSProperties = {}\n\n let className = `gatsby-image-wrapper`\n\n // If the plugin isn't installed we need to apply the styles inline\n if (!gatsbyImageIsInstalled()) {\n wrapperStyle.position = `relative`\n wrapperStyle.overflow = `hidden`\n }\n\n if (layout === `fixed`) {\n wrapperStyle.width = width\n wrapperStyle.height = height\n } else if (layout === `constrained`) {\n if (!gatsbyImageIsInstalled()) {\n wrapperStyle.display = `inline-block`\n wrapperStyle.verticalAlign = `top`\n }\n className = `gatsby-image-wrapper gatsby-image-wrapper-constrained`\n }\n\n return {\n className,\n \"data-gatsby-image-wrapper\": ``,\n style: wrapperStyle,\n }\n}\n\nexport interface IUrlBuilderArgs<OptionsType> {\n width: number\n height: number\n baseUrl: string\n format: ImageFormat\n options: OptionsType\n}\nexport interface IGetImageDataArgs<OptionsType = Record<string, unknown>> {\n baseUrl: string\n /**\n * For constrained and fixed images, the size of the image element\n */\n width?: number\n height?: number\n /**\n * If available, pass the source image width and height\n */\n sourceWidth?: number\n sourceHeight?: number\n /**\n * If only one dimension is passed, then this will be used to calculate the other.\n */\n aspectRatio?: number\n layout?: Layout\n /**\n * Returns a URL based on the passed arguments. Should be a pure function\n */\n urlBuilder: (args: IUrlBuilderArgs<OptionsType>) => string\n\n /**\n * Should be a data URI\n */\n placeholderURL?: string\n backgroundColor?: string\n /**\n * Used in error messages etc\n */\n pluginName?: string\n\n /**\n * If you do not support auto-format, pass an array of image types here\n */\n formats?: Array<ImageFormat>\n\n breakpoints?: Array<number>\n\n /**\n * Passed to the urlBuilder function\n */\n options?: OptionsType\n}\n\n/**\n * Use this hook to generate gatsby-plugin-image data in the browser.\n */\nexport function getImageData<OptionsType>({\n baseUrl,\n urlBuilder,\n sourceWidth,\n sourceHeight,\n pluginName = `getImageData`,\n formats = [`auto`],\n breakpoints,\n options,\n ...props\n}: IGetImageDataArgs<OptionsType>): IGatsbyImageData {\n if (\n !breakpoints?.length &&\n (props.layout === `fullWidth` || (props.layout as string) === `FULL_WIDTH`)\n ) {\n breakpoints = EVERY_BREAKPOINT\n }\n const generateImageSource = (\n baseUrl: string,\n width: number,\n height?: number,\n format?: ImageFormat\n ): IImage => {\n return {\n width,\n height,\n format,\n src: urlBuilder({ baseUrl, width, height, options, format }),\n }\n }\n\n const sourceMetadata: IGatsbyImageHelperArgs[\"sourceMetadata\"] = {\n width: sourceWidth,\n height: sourceHeight,\n format: `auto`,\n }\n\n const args: IGatsbyImageHelperArgs = {\n ...props,\n pluginName,\n generateImageSource,\n filename: baseUrl,\n formats,\n breakpoints,\n sourceMetadata,\n }\n return generateImageData(args)\n}\n\nexport function getMainProps(\n isLoading: boolean,\n isLoaded: boolean,\n images: IGatsbyImageData[\"images\"],\n loading?: \"eager\" | \"lazy\",\n style: CSSProperties = {}\n): Partial<MainImageProps> {\n // fallback when it's not configured in gatsby-config.\n if (!gatsbyImageIsInstalled()) {\n style = {\n height: `100%`,\n left: 0,\n position: `absolute`,\n top: 0,\n transform: `translateZ(0)`,\n transition: `opacity 250ms linear`,\n width: `100%`,\n willChange: `opacity`,\n ...style,\n }\n }\n\n const result = {\n ...images,\n loading,\n shouldLoad: isLoading,\n \"data-main-image\": ``,\n style: {\n ...style,\n opacity: isLoaded ? 1 : 0,\n },\n }\n\n return result\n}\n\nexport type PlaceholderImageAttrs = ImgHTMLAttributes<HTMLImageElement> &\n Pick<PlaceholderProps, \"sources\" | \"fallback\"> & {\n \"data-placeholder-image\"?: string\n }\n\nexport function getPlaceholderProps(\n placeholder: PlaceholderImageAttrs | undefined,\n isLoaded: boolean,\n layout: Layout,\n width?: number,\n height?: number,\n backgroundColor?: string,\n objectFit?: CSSProperties[\"objectFit\"],\n objectPosition?: CSSProperties[\"objectPosition\"]\n): PlaceholderImageAttrs {\n const wrapperStyle: CSSProperties = {}\n\n if (backgroundColor) {\n wrapperStyle.backgroundColor = backgroundColor\n\n if (layout === `fixed`) {\n wrapperStyle.width = width\n wrapperStyle.height = height\n wrapperStyle.backgroundColor = backgroundColor\n wrapperStyle.position = `relative`\n } else if (layout === `constrained`) {\n wrapperStyle.position = `absolute`\n wrapperStyle.top = 0\n wrapperStyle.left = 0\n wrapperStyle.bottom = 0\n wrapperStyle.right = 0\n } else if (layout === `fullWidth`) {\n wrapperStyle.position = `absolute`\n wrapperStyle.top = 0\n wrapperStyle.left = 0\n wrapperStyle.bottom = 0\n wrapperStyle.right = 0\n }\n }\n\n if (objectFit) {\n wrapperStyle.objectFit = objectFit\n }\n\n if (objectPosition) {\n wrapperStyle.objectPosition = objectPosition\n }\n const result: PlaceholderImageAttrs = {\n ...placeholder,\n \"aria-hidden\": true,\n \"data-placeholder-image\": ``,\n style: {\n opacity: isLoaded ? 0 : 1,\n transition: `opacity 500ms linear`,\n ...wrapperStyle,\n },\n }\n\n // fallback when it's not configured in gatsby-config.\n if (!gatsbyImageIsInstalled()) {\n result.style = {\n height: `100%`,\n left: 0,\n position: `absolute`,\n top: 0,\n width: `100%`,\n }\n }\n\n return result\n}\n\nexport interface IArtDirectedImage {\n media: string\n image: IGatsbyImageData\n}\n\n/**\n * Generate a Gatsby image data object with multiple, art-directed images that display at different\n * resolutions.\n *\n * @param defaultImage The image displayed when no media query matches.\n * It is also used for all other settings applied to the image, such as width, height and layout.\n * You should pass a className to the component with media queries to adjust the size of the container,\n * as this cannot be adjusted automatically.\n * @param artDirected Array of objects which each contains a `media` string which is a media query\n * such as `(min-width: 320px)`, and the image object to use when that query matches.\n */\nexport function withArtDirection(\n defaultImage: IGatsbyImageData,\n artDirected: Array<IArtDirectedImage>\n): IGatsbyImageData {\n const { images, placeholder, ...props } = defaultImage\n const output: IGatsbyImageData = {\n ...props,\n images: {\n ...images,\n sources: [],\n },\n placeholder: placeholder && {\n ...placeholder,\n sources: [],\n },\n }\n\n artDirected.forEach(({ media, image }) => {\n if (!media) {\n if (process.env.NODE_ENV === `development`) {\n console.warn(\n \"[gatsby-plugin-image] All art-directed images passed to must have a value set for `media`. Skipping.\"\n )\n }\n return\n }\n\n if (\n image.layout !== defaultImage.layout &&\n process.env.NODE_ENV === `development`\n ) {\n console.warn(\n `[gatsby-plugin-image] Mismatched image layout: expected \"${defaultImage.layout}\" but received \"${image.layout}\". All art-directed images use the same layout as the default image`\n )\n }\n\n output.images.sources.push(\n ...image.images.sources.map(source => {\n return { ...source, media }\n }),\n {\n media,\n srcSet: image.images.fallback.srcSet,\n }\n )\n\n if (!output.placeholder) {\n return\n }\n\n output.placeholder.sources.push({\n media,\n srcSet: image.placeholder.fallback,\n })\n })\n output.images.sources.push(...images.sources)\n if (placeholder?.sources) {\n output.placeholder?.sources.push(...placeholder.sources)\n }\n return output\n}\n","import React, { FunctionComponent, ImgHTMLAttributes } from \"react\"\nimport * as PropTypes from \"prop-types\"\n\nexport interface IResponsiveImageProps {\n sizes?: string\n srcSet: string\n}\n\nexport type SourceProps = IResponsiveImageProps &\n (\n | {\n media: string\n type?: string\n }\n | {\n media?: string\n type: string\n }\n )\n\ntype FallbackProps = { src: string } & Partial<IResponsiveImageProps>\n\ntype ImageProps = ImgHTMLAttributes<HTMLImageElement> & {\n src: string\n alt: string\n shouldLoad: boolean\n}\n\nexport type PictureProps = ImgHTMLAttributes<HTMLImageElement> & {\n fallback?: FallbackProps\n sources?: Array<SourceProps>\n alt: string\n shouldLoad?: boolean\n}\n\nconst Image: FunctionComponent<ImageProps> = function Image({\n src,\n srcSet,\n loading,\n alt = ``,\n shouldLoad,\n ...props\n}) {\n return (\n <img\n {...props}\n decoding=\"async\"\n loading={loading}\n src={shouldLoad ? src : undefined}\n data-src={!shouldLoad ? src : undefined}\n srcSet={shouldLoad ? srcSet : undefined}\n data-srcset={!shouldLoad ? srcSet : undefined}\n alt={alt}\n />\n )\n}\n\nexport const Picture: React.FC<PictureProps> = function Picture({\n fallback,\n sources = [],\n shouldLoad = true,\n ...props\n}) {\n const sizes = props.sizes || fallback?.sizes\n const fallbackImage = (\n <Image {...props} {...fallback} sizes={sizes} shouldLoad={shouldLoad} />\n )\n\n if (!sources.length) {\n return fallbackImage\n }\n\n return (\n <picture>\n {sources.map(({ media, srcSet, type }) => (\n <source\n key={`${media}-${type}-${srcSet}`}\n type={type}\n media={media}\n srcSet={shouldLoad ? srcSet : undefined}\n data-srcset={!shouldLoad ? srcSet : undefined}\n sizes={sizes}\n />\n ))}\n {fallbackImage}\n </picture>\n )\n}\n\nImage.propTypes = {\n src: PropTypes.string.isRequired,\n alt: PropTypes.string.isRequired,\n sizes: PropTypes.string,\n srcSet: PropTypes.string,\n shouldLoad: PropTypes.bool,\n}\n\nPicture.displayName = `Picture`\nPicture.propTypes = {\n alt: PropTypes.string.isRequired,\n shouldLoad: PropTypes.bool,\n fallback: PropTypes.exact({\n src: PropTypes.string.isRequired,\n srcSet: PropTypes.string,\n sizes: PropTypes.string,\n }),\n sources: PropTypes.arrayOf(\n PropTypes.oneOfType([\n PropTypes.exact({\n media: PropTypes.string.isRequired,\n type: PropTypes.string,\n sizes: PropTypes.string,\n srcSet: PropTypes.string.isRequired,\n }),\n PropTypes.exact({\n media: PropTypes.string,\n type: PropTypes.string.isRequired,\n sizes: PropTypes.string,\n srcSet: PropTypes.string.isRequired,\n }),\n ])\n ),\n}\n","import React, { FunctionComponent, ImgHTMLAttributes } from \"react\"\nimport * as PropTypes from \"prop-types\"\nimport { Picture, SourceProps } from \"./picture\"\n\nexport type PlaceholderProps = ImgHTMLAttributes<HTMLImageElement> & {\n fallback?: string\n sources?: Array<SourceProps>\n}\n\nexport const Placeholder: FunctionComponent<PlaceholderProps> =\n function Placeholder({ fallback, ...props }) {\n if (fallback) {\n return (\n <Picture\n {...props}\n fallback={{\n src: fallback,\n }}\n aria-hidden\n alt=\"\"\n />\n )\n } else {\n return <div {...props}></div>\n }\n }\n\nPlaceholder.displayName = `Placeholder`\nPlaceholder.propTypes = {\n fallback: PropTypes.string,\n sources: Picture.propTypes?.sources,\n alt: function (props, propName, componentName): Error | null {\n if (!props[propName]) {\n return null\n }\n\n return new Error(\n `Invalid prop \\`${propName}\\` supplied to \\`${componentName}\\`. Validation failed.`\n )\n },\n}\n","import React from \"react\"\nimport { Picture, PictureProps } from \"./picture\"\n\nexport type MainImageProps = PictureProps\n\nexport const MainImage: React.FC<PictureProps> = function MainImage(props) {\n return (\n <>\n <Picture {...props} />\n <noscript>\n <Picture {...props} shouldLoad={true} />\n </noscript>\n </>\n )\n}\n\nMainImage.displayName = `MainImage`\nMainImage.propTypes = Picture.propTypes\n","import React, { Fragment, FunctionComponent, PropsWithChildren } from \"react\"\nimport terserMacro from \"../../macros/terser.macro\"\nimport { Layout } from \"../image-utils\"\n\nexport interface ILayoutWrapperProps {\n layout: Layout\n width: number\n height: number\n}\n\nconst NativeScriptLoading: FunctionComponent = () => (\n <script\n type=\"module\"\n dangerouslySetInnerHTML={{\n __html: terserMacro`\nconst hasNativeLazyLoadSupport = typeof HTMLImageElement !== \"undefined\" && \"loading\" in HTMLImageElement.prototype;\nif (hasNativeLazyLoadSupport) {\n const gatsbyImages = document.querySelectorAll('img[data-main-image]');\n for (let mainImage of gatsbyImages) {\n if (mainImage.dataset.src) {\n mainImage.setAttribute('src', mainImage.dataset.src)\n mainImage.removeAttribute('data-src')\n }\n if (mainImage.dataset.srcset) {\n mainImage.setAttribute('srcset', mainImage.dataset.srcset)\n mainImage.removeAttribute('data-srcset')\n }\n\n const sources = mainImage.parentNode.querySelectorAll('source[data-srcset]');\n for (let source of sources) {\n source.setAttribute('srcset', source.dataset.srcset)\n source.removeAttribute('data-srcset')\n }\n\n if (mainImage.complete) {\n mainImage.style.opacity = 1;\n\n // also hide the placeholder\n mainImage.parentNode.parentNode.querySelector('[data-placeholder-image]').style.opacity = 0;\n }\n }\n}\n`,\n }}\n />\n)\n\nexport function getSizer(\n layout: Layout,\n width: number,\n height: number\n): string {\n let sizer = ``\n if (layout === `fullWidth`) {\n sizer = `<div aria-hidden=\"true\" style=\"padding-top: ${\n (height / width) * 100\n }%;\"></div>`\n }\n\n if (layout === `constrained`) {\n sizer = `<div style=\"max-width: ${width}px; display: block;\"><img alt=\"\" role=\"presentation\" aria-hidden=\"true\" src=\"data:image/svg+xml;charset=utf-8,%3Csvg height='${height}' width='${width}' xmlns='http://www.w3.org/2000/svg' version='1.1'%3E%3C/svg%3E\" style=\"max-width: 100%; display: block; position: static;\"></div>`\n }\n\n return sizer\n}\n\nconst Sizer: FunctionComponent<ILayoutWrapperProps> = function Sizer({\n layout,\n width,\n height,\n}) {\n if (layout === `fullWidth`) {\n return (\n <div aria-hidden style={{ paddingTop: `${(height / width) * 100}%` }} />\n )\n }\n\n if (layout === `constrained`) {\n return (\n <div style={{ maxWidth: width, display: `block` }}>\n <img\n alt=\"\"\n role=\"presentation\"\n aria-hidden=\"true\"\n src={`data:image/svg+xml;charset=utf-8,%3Csvg height='${height}' width='${width}' xmlns='http://www.w3.org/2000/svg' version='1.1'%3E%3C/svg%3E`}\n style={{\n maxWidth: `100%`,\n display: `block`,\n position: `static`,\n }}\n />\n </div>\n )\n }\n\n return null\n}\n\nexport const LayoutWrapper: FunctionComponent<\n PropsWithChildren<ILayoutWrapperProps>\n> = function LayoutWrapper({ children, ...props }) {\n return (\n <Fragment>\n <Sizer {...props} />\n {children}\n\n {SERVER ? <NativeScriptLoading /> : null}\n </Fragment>\n )\n}\n","import React from \"react\"\nimport { getWrapperProps, getMainProps, getPlaceholderProps } from \"./hooks\"\nimport { Placeholder } from \"./placeholder\"\nimport { MainImage, MainImageProps } from \"./main-image\"\nimport { LayoutWrapper } from \"./layout-wrapper\"\nimport PropTypes from \"prop-types\"\nimport type { FunctionComponent, WeakValidationMap } from \"react\"\nimport type { GatsbyImageProps, IGatsbyImageData } from \"./gatsby-image.browser\"\n\nconst removeNewLines = (str: string): string => str.replace(/\\n/g, ``)\n\nexport const GatsbyImage: FunctionComponent<GatsbyImageProps> =\n function GatsbyImage({\n as = `div`,\n className,\n class: preactClass,\n style,\n image,\n loading = `lazy`,\n imgClassName,\n imgStyle,\n backgroundColor,\n objectFit,\n objectPosition,\n ...props\n }) {\n if (!image) {\n console.warn(`[gatsby-plugin-image] Missing image prop`)\n return null\n }\n\n if (preactClass) {\n className = preactClass\n }\n\n imgStyle = {\n objectFit,\n objectPosition,\n backgroundColor,\n ...imgStyle,\n }\n\n const {\n width,\n height,\n layout,\n images,\n placeholder,\n backgroundColor: placeholderBackgroundColor,\n } = image\n\n const {\n style: wStyle,\n className: wClass,\n ...wrapperProps\n } = getWrapperProps(width, height, layout)\n\n const cleanedImages: IGatsbyImageData[\"images\"] = {\n fallback: undefined,\n sources: [],\n }\n if (images.fallback) {\n cleanedImages.fallback = {\n ...images.fallback,\n srcSet: images.fallback.srcSet\n ? removeNewLines(images.fallback.srcSet)\n : undefined,\n }\n }\n\n if (images.sources) {\n cleanedImages.sources = images.sources.map(source => {\n return {\n ...source,\n srcSet: removeNewLines(source.srcSet),\n }\n })\n }\n\n return React.createElement(\n as,\n {\n ...wrapperProps,\n style: {\n ...wStyle,\n ...style,\n backgroundColor,\n },\n className: `${wClass}${className ? ` ${className}` : ``}`,\n },\n <LayoutWrapper layout={layout} width={width} height={height}>\n <Placeholder\n {...getPlaceholderProps(\n placeholder,\n false,\n layout,\n width,\n height,\n placeholderBackgroundColor,\n objectFit,\n objectPosition\n )}\n />\n\n <MainImage\n data-gatsby-image-ssr=\"\"\n className={imgClassName}\n {...(props as Omit<\n MainImageProps,\n \"images\" | \"fallback\" | \"onError\" | \"onLoad\"\n >)}\n // When eager is set we want to start the isLoading state on true (we want to load the img without react)\n {...getMainProps(\n loading === `eager`,\n false,\n cleanedImages,\n loading,\n imgStyle\n )}\n />\n </LayoutWrapper>\n )\n }\n\nexport const altValidator: PropTypes.Validator<string> = (\n props: GatsbyImageProps,\n propName,\n componentName,\n ...rest\n): Error | undefined => {\n if (!props.alt && props.alt !== ``) {\n return new Error(\n `The \"alt\" prop is required in ${componentName}. If the image is purely presentational then pass an empty string: e.g. alt=\"\". Learn more: https://a11y-style-guide.com/style-guide/section-media.html`\n )\n }\n\n return PropTypes.string(props, propName, componentName, ...rest)\n}\n\nexport const propTypes = {\n image: PropTypes.object.isRequired,\n alt: altValidator,\n} as WeakValidationMap<GatsbyImageProps>\n","import React, { FunctionComponent, ReactElement } from \"react\"\nimport {\n altValidator,\n GatsbyImage as GatsbyImageServer,\n} from \"./gatsby-image.server\"\nimport { GatsbyImageProps, IGatsbyImageData } from \"./gatsby-image.browser\"\nimport PropTypes from \"prop-types\"\nimport { ISharpGatsbyImageArgs } from \"../image-utils\"\n\nexport interface IStaticImageProps\n extends Omit<GatsbyImageProps, \"image\">,\n Omit<ISharpGatsbyImageArgs, \"backgroundColor\"> {\n src: string\n}\n\n// These values are added by Babel. Do not add them manually\ninterface IPrivateProps {\n __imageData?: IGatsbyImageData\n __error?: string\n}\n\nexport function _getStaticImage(\n GatsbyImage: FunctionComponent<GatsbyImageProps>\n): React.FC<IStaticImageProps & IPrivateProps> {\n return function StaticImage({\n src,\n __imageData: imageData,\n __error,\n // We extract these because they're not meant to be passed-down to GatsbyImage\n /* eslint-disable @typescript-eslint/no-unused-vars */\n width,\n height,\n aspectRatio,\n tracedSVGOptions,\n placeholder,\n formats,\n quality,\n transformOptions,\n jpgOptions,\n pngOptions,\n webpOptions,\n avifOptions,\n blurredOptions,\n breakpoints,\n outputPixelDensities,\n /* eslint-enable @typescript-eslint/no-unused-vars */\n ...props\n }): ReactElement {\n if (__error) {\n console.warn(__error)\n }\n\n if (imageData) {\n return <GatsbyImage image={imageData} {...props} />\n }\n console.warn(`Image not loaded`, src)\n if (!__error && process.env.NODE_ENV === `development`) {\n console.warn(\n `Please ensure that \"gatsby-plugin-image\" is included in the plugins array in gatsby-config.js, and that your version of gatsby is at least 2.24.78`\n )\n }\n return null\n }\n}\n\nconst StaticImage: React.FC<IStaticImageProps & IPrivateProps> =\n _getStaticImage(GatsbyImageServer)\n\nconst checkDimensionProps: PropTypes.Validator<number> = (\n props: IStaticImageProps & IPrivateProps,\n propName: keyof IStaticImageProps & IPrivateProps,\n ...rest\n) => {\n if (\n props.layout === `fullWidth` &&\n (propName === `width` || propName === `height`) &&\n props[propName]\n ) {\n return new Error(\n `\"${propName}\" ${props[propName]} may not be passed when layout is fullWidth.`\n )\n }\n return PropTypes.number(props, propName, ...rest)\n}\n\nconst validLayouts = new Set([`fixed`, `fullWidth`, `constrained`])\n\nexport const propTypes = {\n src: PropTypes.string.isRequired,\n alt: altValidator,\n width: checkDimensionProps,\n height: checkDimensionProps,\n sizes: PropTypes.string,\n layout: (props: IStaticImageProps & IPrivateProps): Error | undefined => {\n if (props.layout === undefined) {\n return undefined\n }\n if (validLayouts.has(props.layout)) {\n return undefined\n }\n\n return new Error(\n `Invalid value ${props.layout}\" provided for prop \"layout\". Defaulting to \"constrained\". Valid values are \"fixed\", \"fullWidth\" or \"constrained\".`\n )\n },\n}\n\nStaticImage.displayName = `StaticImage`\nStaticImage.propTypes = propTypes\n\nexport { StaticImage }\n"],"names":["message","warn","a","b","images","map","image","src","width","join","filename","lastIndexOf","dot","slice","ext","length","args","layout","height","sourceMetadata","breakpoints","aspectRatio","formats","format","toLowerCase","camelCase","Math","round","pluginName","setDefaultDimensions","generateImageSource","fit","options","reporter","backgroundColor","placeholderURL","formatFromFilename","size","has","add","imgDimensions","DEFAULT_BREAKPOINTS","Object","entries","filter","_","erroneousUserDimensions","dim","outputPixelDensities","dedupeAndSortDensities","DEFAULT_PIXEL_DENSITIES","getDimensionsAndAspectRatio","calculated","fixedDimension","sizes","densities","density","presentationWidth","originalWidth","presentationHeight","unscaledWidth","calculateImageSizes","sources","getSizes","imageSizes","forEach","imageSrc","Boolean","find","img","unscaled","result","fallback","srcSet","getSrcSet","push","type","imageProps","placeholder","values","from","sort","sortNumeric","min","includes","dimensions","Number","MAX_SAFE_INTEGER","widthOption","heightOption","imageAspectRatio","max","GATSBY___IMAGE","node","_node$images","_node$images$fallback","isGatsbyImageData","gatsbyImageData","isGatsbyImageDataParent","gatsbyImage","isGatsbyImageParent","childImageSharp","_node$childImageSharp","loading","alt","shouldLoad","props","decoding","undefined","React","Image","media","key","fallbackImage","propTypes","PropTypes","string","isRequired","bool","Picture","displayName","exact","arrayOf","oneOfType","Placeholder","_Picture$propTypes","propName","componentName","MainImage","dangerouslySetInnerHTML","__html","style","paddingTop","maxWidth","display","role","position","children","Fragment","Sizer","NativeScriptLoading","str","replace","as","className","preactClass","imgClassName","imgStyle","objectFit","objectPosition","console","placeholderBackgroundColor","gatsbyImageIsInstalled","wrapperStyle","overflow","verticalAlign","getWrapperProps","wStyle","wClass","wrapperProps","cleanedImages","removeNewLines","source","createElement","LayoutWrapper","isLoaded","top","left","bottom","right","opacity","transition","getPlaceholderProps","isLoading","transform","willChange","getMainProps","GatsbyImage","imageData","__imageData","__error","process","env","NODE_ENV","_getStaticImage","GatsbyImageServer","number","checkDimensionProps","validLayouts","StaticImage","baseUrl","urlBuilder","sourceWidth","sourceHeight","_breakpoints","EVERY_BREAKPOINT","_generateImageSource","getImage","_getImage","_getImage$images","_getImage$images$fall","_getImage2","_getImage2$images","_getImage2$images$fal","defaultImage","artDirected","output"],"mappings":"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"}
|