{"version":3,"file":"static/js/69925bb2d884024a901f.bundle.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/./src/shared-utils/image-utilities.ts?f424","webpack://Msdyn365.Commerce.Online/./src/themes/dlvry-adventureworks/views/media-gallery.view.tsx?72c1","webpack://Msdyn365.Commerce.Online/./lib/media-gallery/module-registration.js?47e5","webpack://Msdyn365.Commerce.Online/./src/modules/media-gallery/media-gallery.tsx?24d7","webpack://Msdyn365.Commerce.Online/./src/modules/media-gallery/media-gallery.view.tsx?5061","webpack://Msdyn365.Commerce.Online/./src/modules/media-gallery/utils/helper.ts?b895","webpack://Msdyn365.Commerce.Online/./src/modules/media-gallery/utils/get-valid-product-images.ts?a364","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/media-gallery.view.tsx?7624","webpack://Msdyn365.Commerce.Online/external var \"React\"?0d3b","webpack://Msdyn365.Commerce.Online/external var \"ReactDOM\"?853b"],"sourcesContent":["import { IImageSettings } from '@msdyn365-commerce/core';\r\n\r\nexport function findImagesSettingsInProps(props: any, onFound: (result: IImageSettings) => void) {\r\n if (!props) {\r\n return;\r\n }\r\n Object.keys(props).forEach(key => {\r\n if (key === '_owner' || key === 'type' || key === 'tag' || key === 'requestContext') {\r\n return;\r\n }\r\n\r\n if (key === 'imageSettings') {\r\n onFound(props[key]);\r\n } else if (key === 'props' || key === 'children' || key === 'items' || key === 'Picture' || key.match(/^\\d+$/m) && typeof props[key] === 'object') {\r\n findImagesSettingsInProps(props[key], onFound);\r\n }\r\n });\r\n}\r\n\r\nexport function fixImageSettings(imageSettings: IImageSettings) {\r\n if (imageSettings.mode) {\r\n // How to set this otherwise it will overwrite modes defined below\r\n imageSettings.mode = 0;\r\n }\r\n\r\n Object.keys(imageSettings.viewports || {}).forEach(key => {\r\n if (imageSettings.viewports[key].q) {\r\n imageSettings.viewports[key].q = imageSettings.viewports[key].q.replace(/f=(jpg|jpeg|png)/g, 'f=webp').replace(/m=\\d/g, 'm=0');\r\n }\r\n });\r\n}\r\n\r\nexport function findAndFixImageSettingsInProps(props: any) {\r\n findImagesSettingsInProps(props, (imageSettings: IImageSettings) => {\r\n fixImageSettings(imageSettings);\r\n });\r\n}","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport { IImageData, IImageSettings, Image, Video } from '@msdyn365-commerce/core';\r\nimport {\r\n IMediaData,\r\n IMediaGalleryThumbnailItemViewProps,\r\n IMediaGalleryThumbnailsViewProps,\r\n IMediaGalleryViewProps,\r\n MediaType\r\n} from '@msdyn365-commerce-modules/media-gallery';\r\nimport { ArrayExtensions, getFallbackImageUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Button, KeyCodes, Module, Node, NodeTag } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport React from 'react';\r\nimport { IPlayerData, IPlayerOptions, IVideoMetadata, Player } from '@msdyn365-commerce-modules/video-player-utilities';\r\nimport { findAndFixImageSettingsInProps } from '../../../shared-utils/image-utilities';\r\n\r\ninterface IMediaGalleryItemsProps extends IMediaGalleryThumbnailItemViewProps {\r\n Video?: React.ReactElement;\r\n}\r\n\r\n/**\r\n * Render the thumbnail item images.\r\n * @param thumbnail - The carousel thumbnail line props.\r\n * @returns Return HTML having thumbnail container props with image.\r\n */\r\nconst renderThumbnailItem = (thumbnail: IMediaGalleryItemsProps): JSX.Element => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from media-gallery.tsx file\r\n const { ThumbnailItemContainerProps, Picture, Video } = thumbnail;\r\n\r\n return {Video ? Video : Picture};\r\n};\r\n\r\n/**\r\n * Gets the thumbnail item to display media gallery images.\r\n * @param image - The media gallery images.\r\n * @param imageSettings - Image settings for the image gallery items.\r\n * @param imageId - Image id.\r\n * @param modifiedActiveIndex - Modified Index of the images when selection changes.\r\n * @param props - The Media gallery view props from business layer.\r\n * @returns Return thumbnail view props which will be used to render images.\r\n */\r\nconst GetThumbnailItemComponent = (\r\n image: IImageData,\r\n imageSettings: IImageSettings,\r\n imageId: number,\r\n modifiedActiveIndex: number,\r\n props: IMediaGalleryViewProps,\r\n mediaTypeValue?: MediaType\r\n): IMediaGalleryThumbnailItemViewProps => {\r\n let fallbackImage: string | undefined = '';\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Site level config can be of any type.\r\n const emptyPlaceHolderImage = props.context.app.config?.placeholderImageName as string;\r\n if (props.data.product.result) {\r\n fallbackImage = getFallbackImageUrl(\r\n props.data.product.result.ItemId,\r\n props.context.request.apiSettings,\r\n props.context.request.app?.config?.OmniChannelMedia\r\n );\r\n }\r\n if (emptyPlaceHolderImage && fallbackImage) {\r\n fallbackImage = `${fallbackImage},${emptyPlaceHolderImage}`;\r\n }\r\n\r\n /**\r\n * OnClick method of media gallery item.\r\n */\r\n const onClick = () => {\r\n props.callbackToggle?.();\r\n props.callbackThumbnailClick?.(imageId);\r\n props.state.activeIndex = imageId;\r\n };\r\n\r\n const classes = classnames(\r\n 'ms-media-gallery__thumbnail-item',\r\n modifiedActiveIndex === imageId ? 'ms-media-gallery__thumbnail-item-active' : ''\r\n );\r\n\r\n /**\r\n * Keydown event of media gallery item.\r\n * @param event - React.KeyboardEvent.\r\n */\r\n const handleKeyDown = (event: React.KeyboardEvent) => {\r\n if (event.keyCode === KeyCodes.Enter) {\r\n event.preventDefault();\r\n onClick();\r\n }\r\n };\r\n const defaultIndex = 0;\r\n return {\r\n ThumbnailItemContainerProps: {\r\n tag: 'li' as NodeTag,\r\n className: classes,\r\n role: 'listitem',\r\n key: imageId\r\n },\r\n Picture: (\r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n };\r\n};\r\n\r\n/**\r\n * Render the video player.\r\n * @param mediaData - Media Data\r\n * @param index - Index of the video\r\n * @param activeIndex - Active Index\r\n * @param imageSettings - Image settings\r\n * @param props - Media gallery view props\r\n * @returns - JSX.Element.\r\n */\r\nconst RenderVideo = (\r\n mediaData: IMediaData,\r\n index: number,\r\n activeIndex: number,\r\n imageSettings: IImageSettings,\r\n props: IMediaGalleryViewProps\r\n): IMediaGalleryItemsProps => {\r\n const videoData = mediaData.videoData;\r\n if (videoData) {\r\n const options: IPlayerOptions = props.config as IPlayerOptions;\r\n const playerResources = props.resources;\r\n const videoMetaData: IVideoMetadata = {};\r\n videoMetaData.videoId = videoData.id;\r\n videoMetaData.title = videoData.title;\r\n videoMetaData.duration = videoData.playTime;\r\n if (videoData.thumbnail) {\r\n videoMetaData.posterframeUrl = videoData.thumbnail.src;\r\n }\r\n if (videoData._links?.binaryReferences) {\r\n videoMetaData.videoBinaryReferences = videoData._links.binaryReferences;\r\n }\r\n const videoPlayerData: IPlayerData = { options, metaData: videoMetaData };\r\n\r\n const classes = classnames(\r\n 'ms-media-gallery__thumbnail-item',\r\n index === activeIndex ? 'ms-media-gallery__thumbnail-item-active' : ''\r\n );\r\n\r\n return {\r\n ThumbnailItemContainerProps: {\r\n tag: 'li' as NodeTag,\r\n className: classes,\r\n role: 'listitem',\r\n key: index\r\n },\r\n Picture: <>>,\r\n Video: (\r\n \r\n )\r\n };\r\n }\r\n return GetEmptyThumbnailItemComponent(imageSettings, props);\r\n};\r\n\r\n/**\r\n * Gets the empty thumbnail item to display media gallery images.\r\n * @param imageSettings - Image settings for the image gallery items.\r\n * @param props - The Media gallery view props from business layer.\r\n * @returns Return thumbnail view props which will be used to render empty images.\r\n */\r\nconst GetEmptyThumbnailItemComponent = (\r\n imageSettings: IImageSettings,\r\n props: IMediaGalleryViewProps\r\n): IMediaGalleryThumbnailItemViewProps => {\r\n let fallbackImage: string | undefined = '';\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Site level config can be of any type.\r\n const emptyPlaceHolderImage = props.context.app.config?.placeholderImageName as string;\r\n\r\n if (props.data.product.result) {\r\n fallbackImage = getFallbackImageUrl(\r\n props.data.product.result.ItemId,\r\n props.context.request.apiSettings,\r\n props.context.request.app?.config?.OmniChannelMedia\r\n );\r\n }\r\n if (emptyPlaceHolderImage && fallbackImage) {\r\n fallbackImage = `${fallbackImage},${emptyPlaceHolderImage}`;\r\n }\r\n\r\n return {\r\n ThumbnailItemContainerProps: {\r\n tag: 'li' as NodeTag,\r\n className: 'ms-media-gallery__thumbnail-item',\r\n role: 'listitem',\r\n tabIndex: 0,\r\n key: 0,\r\n 'aria-label': ''\r\n },\r\n Picture: (\r\n \r\n )\r\n };\r\n};\r\n\r\n/**\r\n * Update media gallery items method.\r\n * @param items - The media gallery thumbnail item view props.\r\n * @returns The IImageData array.\r\n */\r\nconst getMediaGalleryItems = (items?: IMediaData[]): IMediaData[] | undefined => {\r\n return items?.map(item => {\r\n return {\r\n displayOrder: item.displayOrder,\r\n mediaTypeValue: item.mediaTypeValue,\r\n altText: item.altText,\r\n src: item.src,\r\n videoData: item.videoData\r\n };\r\n });\r\n};\r\n\r\nconst defaultThumbnailImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: 'w=860&h=860&q=80&m=6&f=jpg', w: 860, h: 860 },\r\n xl: { q: 'w=860&h=860&q=80&m=6&f=jpg', w: 860, h: 860 }\r\n },\r\n lazyload: true,\r\n cropFocalRegion: true\r\n};\r\n\r\n/**\r\n * Render the Media gallery thumbnails to represent images in grid view.\r\n * @param thumbnails - The thumbnail view props.\r\n * @param props - The media gallery view props.\r\n * @returns - The single slide carousel component to render as media gallery image.\r\n */\r\nconst renderThumbnails = (thumbnails: IMediaGalleryThumbnailsViewProps, props: IMediaGalleryViewProps): JSX.Element => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from media-gallery.tsx file\r\n const { ThumbnailsContainerProps, SingleSlideCarouselComponentProps } = thumbnails;\r\n const { state } = props;\r\n const mediaGalleryItems = getMediaGalleryItems(state.mediaGalleryItems);\r\n\r\n const items: IMediaGalleryItemsProps[] | undefined =\r\n // eslint-disable-next-line multiline-ternary -- need multiline for easy code reading\r\n state.lastUpdate && ArrayExtensions.hasElements(mediaGalleryItems) && mediaGalleryItems[0].src === 'empty'\r\n ? [GetEmptyThumbnailItemComponent(defaultThumbnailImageSettings, props)]\r\n : // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from media-gallery\r\n mediaGalleryItems?.map((item: IMediaData, id: number) => {\r\n if (item.mediaTypeValue === MediaType.Video) {\r\n if (props.config.allowFullScreen) {\r\n const videoThumbnail = item.videoData?.thumbnail;\r\n if (videoThumbnail) {\r\n return GetThumbnailItemComponent(\r\n videoThumbnail,\r\n defaultThumbnailImageSettings,\r\n id,\r\n state.activeIndex,\r\n props,\r\n item.mediaTypeValue\r\n );\r\n } else {\r\n return GetEmptyThumbnailItemComponent(defaultThumbnailImageSettings, props);\r\n }\r\n } else {\r\n return RenderVideo(item, id, state.activeIndex, defaultThumbnailImageSettings, props);\r\n }\r\n } else {\r\n return GetThumbnailItemComponent(item, defaultThumbnailImageSettings, id, state.activeIndex, props);\r\n }\r\n });\r\n\r\n return (\r\n \r\n {items?.map(renderThumbnailItem)}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render the Media gallery items using viewprops.\r\n * @param props - The media gallery view props.\r\n * @returns The media gallery module wrapping up images node.\r\n */\r\nconst mediaGalleryView: React.FC = props => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from media-gallery.tsx file\r\n const { CarouselProps, Thumbnails, MediaGallery, Modal } = props;\r\n\r\n findAndFixImageSettingsInProps(CarouselProps);\r\n findAndFixImageSettingsInProps(Thumbnails);\r\n findAndFixImageSettingsInProps(Modal);\r\n\r\n // The thumbnails in AW theme aren't used as tabs\r\n const NewSingleSlideCarouselComponentProps = { ...Thumbnails.SingleSlideCarouselComponentProps, useTabList: false };\r\n const NewThumbnails = { ...Thumbnails, SingleSlideCarouselComponentProps: NewSingleSlideCarouselComponentProps };\r\n\r\n return (\r\n \r\n \r\n {Modal}\r\n {renderThumbnails(NewThumbnails, props)}\r\n \r\n );\r\n};\r\n\r\nexport default mediaGalleryView;\r\n","const binding = { modules: {}, dataActions: {} };\n\n const registerActionId = (actionPath) => {\n if (binding.dataActions[actionPath] &&\n binding.dataActions[actionPath].default &&\n binding.dataActions[actionPath].default.prototype &&\n binding.dataActions[actionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[actionPath].default.prototype.id] = binding.dataActions[actionPath];\n } else {\n Object.keys(binding.dataActions[actionPath] || {}).forEach(exportName => {\n if (binding.dataActions[actionPath][exportName] &&\n binding.dataActions[actionPath][exportName].prototype &&\n binding.dataActions[actionPath][exportName].prototype.Action) {\n binding.dataActions[binding.dataActions[actionPath][exportName].prototype.id] = binding.dataActions[actionPath][exportName];\n }\n })\n }\n };\n\n const registerSanitizedActionPath = (sanitizedActionPath, dataAction) => {\n if (process.env.NODE_ENV === 'development') {\n if (!dataAction.default) {\n throw new Error('Data action path does not have a default export');\n }\n if (!(dataAction.default.prototype.id && binding.dataActions[dataAction.default.prototype.id]) || !binding.dataActions[sanitizedActionPath]) {\n binding.dataActions[sanitizedActionPath] = dataAction;\n }\n } else {\n binding.dataActions[sanitizedActionPath] = dataAction;\n if (!binding.dataActions[sanitizedActionPath].default) {\n throw new Error('Data action path ' + sanitizedActionPath + ' does not have a default export');\n }\n binding.dataActions[sanitizedActionPath].default.prototype.RegistrationId = sanitizedActionPath;\n if (binding.dataActions[sanitizedActionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[sanitizedActionPath].default.prototype.id] = sanitizedActionPath;\n }\n }\n };\n \n\n (binding.modules['media-gallery'] = {\n c: () => require('@msdyn365-commerce-modules/media-gallery/dist/lib/modules/media-gallery/media-gallery'),\n $type: 'contentModule',\n da: [{name:'mediaLocations', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-media-locations-by-id', runOn: 0},{name:'mediaLocationsForSelectedVariant', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-media-locations-for-selected-variant', runOn: 0},{name:'product', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'media-gallery',\n p: 'media-gallery',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/media-gallery/dist/lib/modules/media-gallery'\n });\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-media-locations-by-id';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-media-locations-by-id');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-media-locations-for-selected-variant';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-media-locations-for-selected-variant');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n \n window.__bindings__ = window.__bindings__ || {};\n window.__bindings__.modules = {\n ...window.__bindings__.modules || {},\n ...binding.modules\n };\n \n window.__bindings__.dataActions = {\n ...window.__bindings__.dataActions || {},\n ...binding.dataActions\n };\n export const viewDictionary = {};\n viewDictionary['__local__|__local__|themes|dlvry-adventureworks|views|media-gallery'] = {\n c: () => require('partner/themes/dlvry-adventureworks/views/media-gallery.view.tsx'),\n cn: '__local__-__local__-media-gallery'\n };\nviewDictionary['@msdyn365-commerce-modules|media-gallery|modules|media-gallery|media-gallery'] = {\n c: () => require('@msdyn365-commerce-modules/media-gallery/dist/lib/modules/media-gallery/media-gallery.view.js'),\n cn: '@msdyn365-commerce-modules-media-gallery-media-gallery'\n };\nviewDictionary['@msdyn365-commerce-theme|adventureworks-theme-kit|modules|adventureworks|views|media-gallery'] = {\n c: () => require('@msdyn365-commerce-theme/adventureworks-theme-kit/dist/lib/modules/adventureworks/views/media-gallery.view.js'),\n cn: '@msdyn365-commerce-theme-adventureworks-theme-kit-media-gallery'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\n };","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Carousel, ICarouselProps, Player, IPlayerData, IPlayerOptions, IVideoMetadata } from '@msdyn365-commerce/components';\nimport { IImageData, IImageSettings, Image, Video } from '@msdyn365-commerce/core';\nimport { MediaLocation, MediaType, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, getFallbackImageUrl, ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n defaultDataScale,\n IComponentNodeProps,\n ImagefullView,\n IModalViewProps,\n IModuleProps,\n inlineZoomImageOnHover,\n inlineZoomImageOnMouseMove,\n inlineZoomImageOnMouseOut,\n inlineZoomInitClick,\n INodeProps,\n ISingleSlideCarouselProps,\n isMobile,\n KeyCodes,\n NodeTag,\n onContainerZoomInit,\n onMouseMoveLensContainer,\n onMouseOutLensContainer,\n onMouseOverImageContainer,\n removeContainerZoomStyle,\n removeInlineZoomStyle,\n SingleSlideCarousel,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { reaction } from 'mobx';\nimport * as React from 'react';\n\nimport { IMediaGalleryData } from './media-gallery.data';\nimport { imageSource, imageZoom, IMediaGalleryProps, thumbnailsOrientation } from './media-gallery.props.autogenerated';\nimport { getProductImages, getValidProductImages, getVideoMetadataFromApi, validateProductImages } from './utils';\nimport { getAltText, IMediaData } from './utils/helper';\n\n/**\n * IMediaGalleryState Interface.\n */\nexport interface IMediaGalleryState {\n animating: boolean;\n activeIndex: number;\n isImageZoomed: boolean;\n modalIsOpen: boolean;\n lastUpdate?: number;\n isMobileImageZoomed?: boolean;\n mediaGalleryItems?: IMediaData[];\n isInitialLoad?: boolean;\n shouldUseOptimizedImage?: boolean;\n}\n\n/**\n * IMediaGalleryThumbnailsViewProps Interface.\n */\nexport interface IMediaGalleryThumbnailsViewProps {\n ThumbnailsContainerProps: INodeProps;\n SingleSlideCarouselComponentProps: INodeProps;\n items?: IMediaGalleryThumbnailItemViewProps[];\n}\n\n/**\n * IMediaGalleryThumbnailItemViewProps Interface.\n */\nexport interface IMediaGalleryThumbnailItemViewProps {\n ThumbnailItemContainerProps: INodeProps;\n Picture: React.ReactElement;\n}\n\n/**\n * IMediaGalleryViewProps Interface.\n */\nexport interface IMediaGalleryViewProps extends IMediaGalleryProps {\n state: IMediaGalleryState;\n MediaGallery: IModuleProps;\n CarouselProps: INodeProps;\n Thumbnails: IMediaGalleryThumbnailsViewProps;\n Modal?: React.ReactElement | null;\n callbackToggle?(): void;\n callbackThumbnailClick?(index: number): void;\n callbackThumbnailKeyDown?(index: number): void;\n}\n\n/**\n * Props for carousel.\n */\ninterface IMediaGalleryCarouselItems {\n items: ItemType[];\n keys: (string | undefined)[];\n}\n\n/**\n * Media gallery component.\n */\nclass MediaGallery extends React.Component, IMediaGalleryState> {\n private readonly _inlineZoomDivRef: Map = new Map();\n\n private readonly fullScreenOverlayButtonRef: React.RefObject = React.createRef();\n private readonly player: React.RefObject = React.createRef();\n private fallbackImage?: string;\n\n private readonly defaultGalleryImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=767&h=767&m=8', w: 0, h: 0 },\n sm: { q: 'w=600&h=600&m=8', w: 0, h: 0 },\n md: { q: 'w=600&h=772&m=8', w: 0, h: 0 },\n lg: { q: 'h=772&m=8', w: 0, h: 0 }\n },\n lazyload: true,\n cropFocalRegion: true\n };\n\n private readonly defaultThumbnailImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=100&m=8', w: 100, h: 0 },\n lg: { q: 'w=100&m=8', w: 100, h: 0 }\n },\n lazyload: true,\n cropFocalRegion: true\n };\n\n private readonly _zoomedImageSettings: IImageSettings;\n\n public constructor(props: IMediaGalleryProps) {\n super(props);\n this._toggleModal = this._toggleModal.bind(this);\n const mediaGalleryImages = this.getImagesData();\n this.state = {\n activeIndex: 0,\n animating: false,\n isImageZoomed: false,\n modalIsOpen: false,\n isInitialLoad: true,\n shouldUseOptimizedImage: !!this.props.config.skipImageValidation,\n mediaGalleryItems: mediaGalleryImages\n };\n\n this._zoomedImageSettings =\n props.config.zoomedImageSettings ?? props.config.galleryImageSettings ?? this.defaultGalleryImageSettings;\n\n this._onImageMouseOut = this._onImageMouseOut.bind(this);\n this._inlineZoomImageOnHover = this._inlineZoomImageOnHover.bind(this);\n this._onInlineImageClick = this._onInlineImageClick.bind(this);\n this._onContainerZoomImageClick = this._onContainerZoomImageClick.bind(this);\n this._onMouseOutLensContainer = this._onMouseOutLensContainer.bind(this);\n }\n\n public isMobile(): boolean {\n const size = isMobile({ variant: VariantType.Viewport, context: this.props.context.request });\n return size === 'xs';\n }\n\n public async componentDidMount(): Promise {\n const source = this.props.config.imageSource ?? imageSource.pageContext;\n const shouldUpdateOnPartialDimensionSelection = this.props.config.shouldUpdateOnPartialDimensionSelection;\n this._setRenderType();\n if (!this.props.context.request.app?.config?.OmniChannelMedia) {\n if (source === imageSource.pageContext) {\n if (this.state.mediaGalleryItems === undefined && this.props.data.mediaLocationsForSelectedVariant.result) {\n const images = await validateProductImages(\n this.props.data.mediaLocationsForSelectedVariant.result,\n this.props.context.actionContext,\n this.props.config.thumbnailImageSettings ?? this.defaultThumbnailImageSettings\n );\n await this._setImages(images);\n } else if (this.state.mediaGalleryItems === undefined && this.props.data.product.result) {\n const product = this.props.data.product.result;\n const images = await getValidProductImages(\n product.RecordId,\n +this.props.context.request.apiSettings.channelId,\n this.props.context.actionContext,\n this.props.config.thumbnailImageSettings ?? this.defaultThumbnailImageSettings,\n product.productVariant\n );\n\n await this._setImages(images);\n } else {\n await this._setImages([]);\n }\n }\n }\n\n reaction(\n () => {\n const product = this.props.data.product.result;\n if (!product) {\n return null;\n }\n\n if (!shouldUpdateOnPartialDimensionSelection || !product.productVariant?.RecordId) {\n return `${product.RecordId}`;\n }\n\n return `${product.RecordId}-${product.productVariant.RecordId}`;\n },\n async () => {\n const product = this.props.data.product.result;\n let images: IImageData[] = [];\n if (product) {\n if (this.props.context.app?.config?.OmniChannelMedia) {\n images = await getProductImages(\n product.RecordId,\n this.shouldUseCmsAltText(),\n +this.props.context.request.apiSettings.channelId,\n this.props.context.actionContext,\n product.Name,\n shouldUpdateOnPartialDimensionSelection ? product.productVariant : undefined\n );\n } else {\n images = await getValidProductImages(\n product.RecordId,\n +this.props.context.request.apiSettings.channelId,\n this.props.context.actionContext,\n this.props.config.thumbnailImageSettings ?? this.defaultThumbnailImageSettings,\n shouldUpdateOnPartialDimensionSelection ? product.productVariant : undefined\n );\n }\n await this._setImages(images);\n } else {\n await this._setImages([]);\n }\n },\n { fireImmediately: true }\n );\n\n if (source === imageSource.productId && this.props.data.mediaLocations.result) {\n const images = await validateProductImages(\n this.props.data.mediaLocations.result,\n this.props.context.actionContext,\n this.props.config.thumbnailImageSettings ?? this.defaultThumbnailImageSettings\n );\n await this._setImages(images);\n }\n }\n\n public shouldComponentUpdate(nextProps: IMediaGalleryProps, nextState: IMediaGalleryState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element {\n const { id, config, resources } = this.props;\n\n const { className, showPaginationTooltip } = config;\n\n const isVertical: boolean = config.thumbnailsOrientation === thumbnailsOrientation.vertical;\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- || is required.\n const isFullscreenAllowed: boolean = this.isMobile() || config.allowFullScreen || false;\n const zoomViewMode: string =\n config.imageZoom === imageZoom.inline ? imageZoom.inline : config.imageZoom === imageZoom.container ? imageZoom.container : '';\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Site level config can be of any type.\n const emptyPlaceHolderImage = this.props.context.app.config?.placeholderImageName as string;\n if (this.props.data.product.result) {\n this.fallbackImage = getFallbackImageUrl(\n this.props.data.product.result.ItemId,\n this.props.context.request.apiSettings,\n this.props.context.request.app?.config?.OmniChannelMedia\n );\n }\n if (emptyPlaceHolderImage && this.fallbackImage) {\n this.fallbackImage = `${this.fallbackImage},${emptyPlaceHolderImage}`;\n }\n\n const mediaGalleryCarouselItems = this._getMediaGalleryItems(isFullscreenAllowed, zoomViewMode);\n const mediaGalleryThumbnailCarouselItems = this._getMediaGalleryThumbnailItems();\n const viewProps: IMediaGalleryViewProps = {\n ...(this.props as IMediaGalleryProps),\n state: this.state,\n MediaGallery: {\n moduleProps: this.props,\n className: classnames(`ms-media-gallery ${isVertical ? 'vertical' : ''}`, className)\n },\n Modal: isFullscreenAllowed ? this.imageModalSlider(zoomViewMode) : null,\n callbackToggle: this.openModalDialog,\n callbackThumbnailClick: this._generateOnThumbnailClick,\n callbackThumbnailKeyDown: this._generateOnThumbnailKeyDown,\n CarouselProps: {\n tag: Carousel,\n className: 'ms-media-gallery__carousel',\n items: mediaGalleryCarouselItems.items,\n activeIndex: this.state.activeIndex,\n next: this.next,\n previous: this.previous,\n interval: false,\n directionTextPrev: resources.previousScreenshotFlipperText,\n directionTextNext: resources.nextScreenshotFlipperText,\n onIndicatorsClickHandler: this.goToIndex,\n showPaginationTooltip: showPaginationTooltip === true,\n indicatorAriaText: resources.ariaLabelForSlide,\n handleOnExited: this.onExited,\n handleOnExiting: this.onExiting,\n key: mediaGalleryCarouselItems.keys\n } as IComponentNodeProps,\n Thumbnails: {\n ThumbnailsContainerProps: { className: 'ms-media-gallery__thumbnails-container' },\n SingleSlideCarouselComponentProps: {\n tag: SingleSlideCarousel,\n className: 'ms-media-gallery__thumbnails',\n vertical: isVertical,\n flipperPrevLabel: resources.previousScreenshotFlipperText,\n flipperNextLabel: resources.nextScreenshotFlipperText,\n parentId: id,\n useTabList: true,\n key: JSON.stringify(mediaGalleryThumbnailCarouselItems.keys)\n } as IComponentNodeProps,\n items: mediaGalleryThumbnailCarouselItems.items\n }\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n /**\n * Zoomed out image on previous/next click.\n */\n public updateZoomedInImage(): void {\n this.setState({ isImageZoomed: false });\n }\n\n private readonly onExiting = () => {\n this.setState({ animating: true });\n };\n\n private readonly onExited = () => {\n this.setState({ animating: false });\n };\n\n /**\n * On click next in carousel.\n */\n private readonly next = (): void => {\n removeInlineZoomStyle();\n if (this.isLastItem() === undefined) {\n return;\n }\n\n const nextIndex = this.isLastItem() ? 0 : this.state.activeIndex + 1;\n this.goToIndex(nextIndex);\n\n this.updateZoomedInImage();\n };\n\n /**\n * On click previous in carousel.\n */\n private readonly previous = (): void => {\n removeInlineZoomStyle();\n const images = this.state.mediaGalleryItems;\n const nextIndex = this.isFirstItem() ? (images ? images.length - 1 : 0) : this.state.activeIndex - 1;\n this.goToIndex(nextIndex);\n this.updateZoomedInImage();\n };\n\n private readonly goToIndex = (index: number): void => {\n const { autoplay } = this.props.config;\n const currentIndex = this.state.activeIndex;\n const mediaItems = this.state.mediaGalleryItems;\n if (autoplay && mediaItems) {\n if (mediaItems[`${index}`]?.mediaTypeValue === MediaType.Video) {\n this.player.current?.play();\n } else if (mediaItems[`${currentIndex}`].mediaTypeValue === MediaType.Video) {\n this.player.current?.pause();\n }\n }\n this.setState({ activeIndex: index });\n };\n\n private _getMediaGalleryThumbnailItems(): IMediaGalleryCarouselItems {\n const mediaGalleryItems = this.state.mediaGalleryItems;\n const thumbnailImageSettings = this.props.config.thumbnailImageSettings;\n if (thumbnailImageSettings) {\n thumbnailImageSettings.cropFocalRegion = true;\n }\n\n const hasMediaGalleryItems = ArrayExtensions.hasElements(mediaGalleryItems);\n\n if (!hasMediaGalleryItems) {\n if (this.state.lastUpdate) {\n const defaultKey = 0;\n return {\n items: [this._getEmptyThumbnailItem(thumbnailImageSettings, defaultKey, this.state.activeIndex)],\n keys: ['empty']\n };\n }\n return { items: [], keys: [] };\n }\n\n return {\n items: [\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n ...mediaGalleryItems!.map((item: IMediaData, index: number) => {\n if (item.mediaTypeValue === MediaType.Video) {\n return this.getVideoThumbNailItem(\n item,\n thumbnailImageSettings ?? this.defaultThumbnailImageSettings,\n index,\n this.state.activeIndex\n );\n } else {\n return this._getThumbnailItem(\n item,\n thumbnailImageSettings ?? this.defaultThumbnailImageSettings,\n index,\n this.state.activeIndex\n );\n }\n })\n ],\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n keys: [...mediaGalleryItems!.map(item => item.src)]\n };\n }\n\n private getImagesData = (): IImageData[] => {\n if (this.props.config.skipImageValidation || this.props.context.request.app?.config?.OmniChannelMedia) {\n const source = this.props.config.imageSource ?? imageSource.pageContext;\n let images: IImageData[] = [];\n let mediaLocations: MediaLocation[] = [];\n if (source === imageSource.pageContext && this.props.data.mediaLocationsForSelectedVariant.result) {\n mediaLocations = this.props.data.mediaLocationsForSelectedVariant.result;\n } else if (source === imageSource.productId && this.props.data.mediaLocations.result) {\n mediaLocations = this.props.data.mediaLocations.result;\n }\n images = mediaLocations.map(mediaLocation => {\n return {\n src: mediaLocation.Uri ?? '',\n altText: getAltText(\n this.props.context.actionContext.requestContext,\n this.shouldUseCmsAltText(),\n this.props.data.product.result?.Name,\n mediaLocation.AltText\n ),\n additionalProperties: mediaLocation.IsApplicableForChildEntities\n ? {\n isApplicableForChildEntities: 'true'\n }\n : undefined\n };\n });\n const curatedImages = this.props.config.images ?? [];\n\n return [...this._filterMasterImageFromVariant(images), ...curatedImages];\n }\n return [];\n };\n\n private _getMediaGalleryItems(isFullscreenAllowed: boolean, zoomViewMode: string): IMediaGalleryCarouselItems {\n const mediaGalleryItems = this.state.mediaGalleryItems;\n const galleryImageSettings = this.props.config.galleryImageSettings;\n if (galleryImageSettings) {\n galleryImageSettings.cropFocalRegion = true;\n }\n\n const zoomView = isFullscreenAllowed ? 'fullscreen' : zoomViewMode;\n\n const hasMediaGalleryItems = ArrayExtensions.hasElements(mediaGalleryItems);\n\n if (!hasMediaGalleryItems) {\n if (this.state.lastUpdate) {\n return { items: [this._renderEmptyImage(galleryImageSettings)], keys: ['empty'] };\n }\n return { items: [], keys: [] };\n }\n\n return {\n items: [\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n ...mediaGalleryItems!.map((item: IMediaData, index: number) => {\n return this._renderCarouselItemImageView(\n zoomView,\n item,\n galleryImageSettings ?? this.defaultGalleryImageSettings,\n index\n );\n })\n ],\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n keys: [...mediaGalleryItems!.map(item => item.src)]\n };\n }\n\n private async _setImages(images?: IMediaData[]): Promise {\n const curatedImage = this.props.config.images || [];\n const mediaToSet: IMediaData[] = this._filterMasterImageFromVariant(images);\n\n void Promise.all(\n mediaToSet.map(async mediaData => {\n if (mediaData.mediaTypeValue === MediaType.Video && mediaData.src) {\n try {\n const url = new URL(mediaData.src);\n const videoId = url.searchParams.get('CVID');\n if (videoId) {\n mediaData.videoData = await getVideoMetadataFromApi(videoId, this.props.context.actionContext);\n }\n } catch (error) {\n if (this.props.telemetry) {\n this.props.telemetry.debug('Error while fetching videoId');\n }\n }\n }\n return mediaData;\n })\n ).then(mediaData => {\n const mediaItems = mediaData.filter(element => {\n return (\n element.mediaTypeValue !== MediaType.Video ||\n (element.mediaTypeValue === MediaType.Video && element.videoData !== undefined)\n );\n });\n\n this.setState({\n mediaGalleryItems: [...mediaItems, ...curatedImage],\n activeIndex: 0,\n lastUpdate: Date.now(),\n shouldUseOptimizedImage: false\n });\n });\n\n this.setState({\n mediaGalleryItems: [...mediaToSet, ...curatedImage],\n activeIndex: 0,\n lastUpdate: Date.now(),\n shouldUseOptimizedImage: false\n });\n }\n\n private _setRenderType(): void {\n this.setState({\n isInitialLoad: false\n });\n }\n\n private _renderCarouselItemImageView(\n zoomView: string,\n media: IMediaData,\n imageSettings: IImageSettings,\n index: number,\n isInPopup: boolean = false\n ): React.ReactNode {\n if (media.mediaTypeValue === MediaType.Video) {\n if (isInPopup || zoomView !== 'fullscreen') {\n return <>{this._renderCarouselItemVideo(media, index, imageSettings)}>;\n }\n return <>{this._renderVideoThumbnail(media, index, imageSettings)}>;\n } else {\n if (this.isMobile()) {\n if (isInPopup) {\n return this._renderImageInContainerOnZoom(media, this._zoomedImageSettings, index);\n }\n return this._renderImageFullScreenOnZoom(media, imageSettings, index);\n }\n\n switch (zoomView) {\n case 'container': {\n return this._renderImageInContainerOnZoom(media, this._zoomedImageSettings, index);\n }\n case 'inline': {\n return this._renderImageInlineOnZoom(media, this._zoomedImageSettings, index);\n }\n case 'fullscreen': {\n return this._renderImageFullScreenOnZoom(media, imageSettings, index);\n }\n\n // No default\n }\n return <>{this._getCarouselItem(media, imageSettings, index, isInPopup)}>;\n }\n }\n\n private _filterMasterImageFromVariant(images?: IImageData[]): IImageData[] {\n const shouldHidePrimaryImages = this.props.config.shouldHideMasterProductImagesForVariant ?? true;\n let variantImages = images ?? [];\n const isVariantProduct =\n !ObjectExtensions.isNullOrUndefined(this.props.data.product.result?.MasterProductId) ||\n !ObjectExtensions.isNullOrUndefined(this.props.data.product.result?.productVariant);\n const itemId = this.props.data.product.result?.ItemId;\n if (shouldHidePrimaryImages && isVariantProduct && itemId) {\n variantImages = variantImages.filter(item => {\n const isApplicableForChildEntities = item.additionalProperties?.isApplicableForChildEntities;\n return !isApplicableForChildEntities;\n });\n if (!ArrayExtensions.hasElements(variantImages)) {\n variantImages = images ?? [];\n }\n }\n return variantImages;\n }\n\n private readonly _renderCarouselItemVideo = (mediaData: IMediaData, index: number, imageSettings: IImageSettings): React.ReactNode => {\n const videoData = mediaData.videoData;\n if (videoData) {\n const options: IPlayerOptions = this.props.config as IPlayerOptions;\n const playerResources = this.props.resources;\n const videoMetaData: IVideoMetadata = {};\n videoMetaData.videoId = videoData.id;\n videoMetaData.title = videoData.title;\n videoMetaData.duration = videoData.playTime;\n if (videoData.thumbnail) {\n videoMetaData.posterframeUrl = videoData.thumbnail.src;\n }\n if (videoData._links?.binaryReferences) {\n videoMetaData.videoBinaryReferences = videoData._links.binaryReferences;\n }\n const videoPlayerData: IPlayerData = { options, metaData: videoMetaData };\n const attributes = {\n id: `${this.props.id}__carousel-item__${index}`\n };\n return (\n \n );\n }\n return this._renderEmptyImage(imageSettings);\n };\n\n private readonly _getCarouselItem = (\n image: IImageData,\n imageSettings: IImageSettings,\n index: number,\n isInPopup: boolean = false\n ): React.ReactNode => (\n \n );\n\n private readonly _getThumbnailItem = (\n image: IImageData,\n imageSettings: IImageSettings,\n index: number,\n modifiedActiveIndex: number\n ): IMediaGalleryThumbnailItemViewProps => {\n const classes = classnames(\n 'ms-media-gallery__thumbnail-item',\n modifiedActiveIndex === index ? 'ms-media-gallery__thumbnail-item-active' : ''\n );\n\n return {\n ThumbnailItemContainerProps: {\n tag: 'li' as NodeTag,\n className: classes,\n role: 'tab',\n tabIndex: 0,\n key: index,\n 'aria-label': image.altText,\n 'aria-selected': modifiedActiveIndex === index,\n onClick: this._generateOnThumbnailClick(index),\n onKeyDown: this._generateOnThumbnailKeyDown(index)\n },\n Picture: (\n \n )\n };\n };\n\n /**\n * Gets the video thumbnail item to display media gallery.\n * @param props - The Media gallery view props from business layer.\n * @returns Return thumbnail view props which will be used to render video.\n */\n private readonly getVideoThumbNailItem = (\n mediaData: IMediaData,\n imageSettings: IImageSettings,\n index: number,\n modifiedActiveIndex: number\n ): IMediaGalleryThumbnailItemViewProps => {\n const classes = classnames(\n 'ms-media-gallery__thumbnail-item',\n modifiedActiveIndex === index ? 'ms-media-gallery__thumbnail-item-active' : ''\n );\n\n const videoData = mediaData.videoData;\n let image: IImageData;\n if (videoData?.thumbnail) {\n image = videoData.thumbnail;\n } else {\n image = {\n src: 'empty'\n };\n }\n\n return {\n ThumbnailItemContainerProps: {\n tag: 'li' as NodeTag,\n className: classes,\n role: 'tab',\n tabIndex: 0,\n key: index,\n 'aria-label': image.altText,\n 'aria-selected': modifiedActiveIndex === index,\n onClick: this._generateOnThumbnailClick(index),\n onKeyDown: this._generateOnThumbnailKeyDown(index)\n },\n Picture: (\n \n )\n };\n };\n\n /**\n * Ref Handler.\n * @param index -Remove item click function.\n * @returns Set inline zoom.\n */\n private readonly _refHandler = (index: number) => (divRef: HTMLDivElement) => {\n this._inlineZoomDivRef.set(index, divRef);\n };\n\n private readonly _generateOnThumbnailKeyDown = (index: number) => {\n return (event: React.KeyboardEvent) => {\n if (event.which === KeyCodes.Enter || event.which === KeyCodes.Space) {\n event.preventDefault();\n\n this.goToIndex(index);\n }\n };\n };\n\n private readonly _generateOnThumbnailClick = (index: number) => {\n return (event: React.MouseEvent) => {\n event.preventDefault();\n\n this.goToIndex(index);\n };\n };\n\n private _renderImageInlineOnZoom(image: IImageData, imageSettings: IImageSettings, index: number): React.ReactNode {\n return (\n \n \n \n
\n );\n }\n\n private _inlineZoomImageOnHover(event: React.MouseEvent): void {\n inlineZoomImageOnHover(event, this.props.config.dataScale ?? String(defaultDataScale));\n }\n\n private _handleMobileViewZoomedImageClick(event: React.MouseEvent) {\n const target = this.state.shouldUseOptimizedImage ? (event.target as HTMLImageElement) : event.currentTarget;\n const mobileZoomedInImageClassName = 'msc-mobile-zoomed-in';\n if (!this.state.isMobileImageZoomed) {\n const bounds = target.getBoundingClientRect();\n const dataScale = Number(this.props.config.dataScale ?? defaultDataScale);\n\n const positionX = event.clientX - bounds.left;\n const positionY = event.clientY - bounds.top;\n const scaledPositionX = positionX * dataScale;\n const scaledPositionY = positionY * dataScale;\n\n target.style.transform = `scale(${dataScale})`;\n target.classList.add(mobileZoomedInImageClassName);\n target.parentElement!.style.overflow = 'auto';\n target.parentElement!.scrollTo(scaledPositionX - positionX, scaledPositionY - positionY);\n this.setState({\n isMobileImageZoomed: true\n });\n } else {\n target.style.transform = '';\n target.classList.remove(mobileZoomedInImageClassName);\n target.parentElement!.style.overflow = '';\n this.setState({\n isMobileImageZoomed: false\n });\n }\n }\n\n private _onInlineImageClick(event: React.MouseEvent): void {\n if (window.innerWidth <= 768) {\n // $msv-breakpoint-m\n this._handleMobileViewZoomedImageClick(event);\n return;\n }\n inlineZoomInitClick(event, this.props.config.dataScale ?? String(defaultDataScale));\n this.setState({\n isImageZoomed: true\n });\n }\n\n private _onImageMouseOut(event: React.MouseEvent): void {\n inlineZoomImageOnMouseOut(event);\n this.setState({\n isImageZoomed: false\n });\n }\n\n private _onContainerZoomImageClick(event: React.MouseEvent): void {\n if (window.innerWidth <= 768) {\n // $msv-breakpoint-m\n this._handleMobileViewZoomedImageClick(event);\n return;\n }\n\n onContainerZoomInit(event);\n\n this.setState({\n isImageZoomed: true\n });\n }\n\n private _onMouseOutLensContainer(event: React.MouseEvent): void {\n onMouseOutLensContainer(event);\n\n this.setState({\n isImageZoomed: false\n });\n }\n\n private _renderImageInContainerOnZoom(image: IImageData, imageSettings: IImageSettings, index: number): React.ReactNode {\n return (\n \n );\n }\n\n private _renderImageFullScreenOnZoom(image: IImageData, imageSettings: IImageSettings, index: number): React.ReactNode {\n return (\n \n );\n }\n\n /**\n * Render the video thumbnail in full screen.\n * @param mediaData - Media Data.\n * @param index - Index\n * @param imageSettings - Image settings.\n * @returns - JSX.Element\n */\n private readonly _renderVideoThumbnail = (mediaData: IMediaData, index: number, imageSettings: IImageSettings): React.ReactNode => {\n const videoData = mediaData.videoData;\n let image: IImageData;\n if (videoData?.thumbnail) {\n image = videoData.thumbnail;\n } else {\n image = {\n src: 'empty'\n };\n }\n\n return (\n \n );\n };\n\n private _mapProductToImageData(product: SimpleProduct): IImageData {\n return {\n src: product.PrimaryImageUrl ?? ''\n };\n }\n\n private _renderEmptyImage(imageSettings: IImageSettings | undefined): React.ReactNode {\n return (\n \n \n
\n );\n }\n\n private _getEmptyThumbnailItem(\n imageSettings: IImageSettings | undefined,\n index: number,\n modifiedActiveIndex: number\n ): IMediaGalleryThumbnailItemViewProps {\n const classes = classnames(\n 'ms-media-gallery__thumbnail-item',\n modifiedActiveIndex === index ? 'ms-media-gallery__thumbnail-item-active' : ''\n );\n return {\n ThumbnailItemContainerProps: {\n tag: 'li' as NodeTag,\n className: classes,\n role: 'tab',\n tabIndex: 0,\n key: 'empty',\n 'aria-label': '',\n 'aria-selected': modifiedActiveIndex === index,\n onClick: this._generateOnThumbnailClick(index),\n onKeyDown: this._generateOnThumbnailKeyDown(index)\n },\n Picture: (\n \n )\n };\n }\n\n private readonly isFirstItem = () => this.state.activeIndex === 0;\n\n private readonly isLastItem = () => {\n const images = this.state.mediaGalleryItems;\n return images && this.state.activeIndex === images.length - 1;\n };\n\n private readonly openModalDialog = (): void => {\n this._toggleModal();\n };\n\n private _toggleModal(): void {\n if (this.state.modalIsOpen) {\n this.fullScreenOverlayButtonRef.current?.focus();\n const parentDiv = this._inlineZoomDivRef.get(this.state.activeIndex);\n if (parentDiv && parentDiv.children && parentDiv.children.length >= 2) {\n const image = parentDiv.children[1].querySelector('img');\n if (image) {\n image.removeAttribute('style');\n }\n }\n this.setState({\n isImageZoomed: false\n });\n }\n this.setState({\n isImageZoomed: false,\n modalIsOpen: !this.state.modalIsOpen\n });\n removeInlineZoomStyle();\n removeContainerZoomStyle();\n }\n\n private readonly imageModalSlider = (ZoomView: string): React.ReactElement => {\n const {\n data: {\n product: { result: product }\n },\n resources\n } = this.props;\n let mediaGalleryItems = this.state.mediaGalleryItems;\n\n if (!mediaGalleryItems && product) {\n mediaGalleryItems = [this._mapProductToImageData(product)];\n }\n const carouselprops = {\n tag: Carousel,\n className: 'ms-media-gallery__carousel',\n items:\n mediaGalleryItems &&\n mediaGalleryItems.map((item: IImageData, index: number) =>\n this._renderCarouselItemImageView(ZoomView, item, this._zoomedImageSettings, index, true)\n ),\n activeIndex: this.state.activeIndex,\n next: this.next,\n previous: this.previous,\n interval: false,\n directionTextPrev: resources.previousScreenshotFlipperText,\n directionTextNext: resources.nextScreenshotFlipperText,\n onIndicatorsClickHandler: this.goToIndex,\n showPaginationTooltip: true,\n hideIndicator: false,\n keyboard: false,\n handleOnExited: this.onExited,\n handleOnExiting: this.onExiting,\n isDisabledFunctionality: this.state.isMobileImageZoomed\n } as IComponentNodeProps;\n const carousel = ;\n\n const imageModalSliderProps: IModalViewProps = {\n modalIsOpen: this.state.modalIsOpen,\n ontoggle: this._toggleModal,\n galleryCarousel: carousel,\n classNames: classnames('ms-media-gallery__modal', 'msc-modal-input-required')\n };\n return ImagefullView(imageModalSliderProps) as React.ReactElement;\n };\n\n private shouldUseCmsAltText = (): boolean => {\n if (this.props.config.altTextSource === 'product') {\n return false;\n } else {\n return true;\n }\n };\n}\n\nexport default MediaGallery;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IMediaGalleryThumbnailItemViewProps, IMediaGalleryThumbnailsViewProps, IMediaGalleryViewProps } from '../..';\n\nconst MediaGalleryView: React.FC = props => {\n const { CarouselProps, Thumbnails, MediaGallery, Modal } = props;\n\n return (\n \n \n {Modal}\n {_renderThumbnails(Thumbnails)}\n \n );\n};\n\nconst _renderThumbnails = (thumbnails: IMediaGalleryThumbnailsViewProps): JSX.Element => {\n const { ThumbnailsContainerProps, SingleSlideCarouselComponentProps, items } = thumbnails;\n\n return (\n \n {items && items.map(_renderThumbnailItem)}\n \n );\n};\n\nconst _renderThumbnailItem = (thumbnail: IMediaGalleryThumbnailItemViewProps): JSX.Element => {\n const { ThumbnailItemContainerProps, Picture } = thumbnail;\n\n return {Picture};\n};\n\nexport default MediaGalleryView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IImageData, IRequestContext, IVideoData } from '@msdyn365-commerce/core';\n\nexport enum MediaType {\n /**\n * The None.\n */\n None = 0,\n /**\n * The Image type.\n */\n Image = 1,\n /**\n * The video type.\n */\n Video = 2,\n /**\n * The file type.\n */\n File = 3\n}\n\nexport interface IMediaData extends IImageData {\n mediaTypeValue?: MediaType;\n displayOrder?: number;\n videoData?: IVideoData;\n}\n\n/**\n * Gets correct alt text for image based on configuration of site.\n * @param productName Product name.\n * @param context Current request context.\n * @param imageAltText Alt-text from CMS image.\n */\nexport function getAltText(\n context: IRequestContext,\n shouldUseCmsAltText: boolean,\n productName?: string,\n imageAltText?: string\n): string | undefined {\n if (!context?.app?.config?.OmniChannelMedia) {\n return productName;\n }\n if (shouldUseCmsAltText) {\n return imageAltText;\n }\n return productName;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n commerceApiRequest,\n commerceVideoMetadataRequest,\n getCatalogId,\n IActionContext,\n IImageData,\n IImageSettings,\n IVideoData\n} from '@msdyn365-commerce/core';\nimport { MediaLocation, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport {\n ArrayExtensions,\n getMediaLocationsForSelectedVariant,\n MediaLocationsForSelectedVariantInput\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { getAltText } from './helper';\n\nasync function validateMediaLocationAsync(mediaLocation: MediaLocation): Promise<[IImageData, boolean]> {\n const imageData: IImageData = {\n src: mediaLocation.Uri || '',\n altText: mediaLocation.AltText || ''\n };\n if (mediaLocation.IsApplicableForChildEntities) {\n imageData.additionalProperties = { isApplicableForChildEntities: 'true' };\n }\n\n if (imageData.src === '') {\n return [imageData, false];\n }\n\n return new Promise<[IImageData, boolean]>(resolve => {\n try {\n const http = new XMLHttpRequest();\n http.open('HEAD', imageData.src!, true);\n\n http.addEventListener('load', () => {\n resolve([imageData, http.status === 200 || http.status === 201]);\n });\n\n http.addEventListener('error', () => {\n resolve([imageData, false]);\n });\n\n http.send();\n } catch {\n resolve([imageData, false]);\n }\n });\n}\n\nexport async function getValidProductImages(\n productId: number,\n channelId: number,\n actionContext: IActionContext,\n imageSettings: IImageSettings,\n selectedProduct?: SimpleProduct\n): Promise {\n const catalogId = getCatalogId(actionContext.requestContext);\n const actionInput = new MediaLocationsForSelectedVariantInput(productId, channelId, selectedProduct, catalogId);\n\n return getMediaLocationsForSelectedVariant(actionInput, actionContext)\n .then(mediaLocations => {\n if (mediaLocations) {\n return Promise.all(mediaLocations.map(mediaLocation => validateMediaLocationAsync(mediaLocation))).then(pairs => {\n return pairs.filter(pair => pair[1]).map(pair => pair[0]);\n });\n }\n\n return [];\n })\n .catch(error => {\n actionContext.telemetry.exception(error);\n actionContext.telemetry.debug('Unable to get Media Locations for Selected Variant');\n return [];\n });\n}\n\n/**\n * Gets product variant images on dimension change of buy-box module for Omni scenario.\n * @param productId Product record id.\n * @param shouldUseCmsAltText Alt-text source to use.\n * @param channelId Current channel id.\n * @param actionContext Current action context.\n * @param productName Product name.\n * @param selectedProduct Currently selected variant product.\n * @returns List of images.\n */\n\nexport async function getProductImages(\n productId: number,\n shouldUseCmsAltText: boolean,\n channelId: number,\n actionContext: IActionContext,\n productName?: string,\n selectedProduct?: SimpleProduct\n): Promise {\n const catalogId = getCatalogId(actionContext.requestContext);\n if (actionContext.requestContext?.params?.isPreview) {\n const response = await commerceApiRequest(actionContext.requestContext, 'msdyn365-ochannel-product-info', 'post', {\n productId: productId,\n channelId: channelId,\n catalogId: catalogId\n });\n if (response.status !== 200) {\n actionContext.telemetry.debug('Unable to get Media Locations for Selected Variant for preview scenario');\n return [];\n }\n const previewImageData = response?.data as MediaLocation[];\n if (previewImageData) {\n return previewImageData.map(mediaLocation => {\n return {\n src: mediaLocation.Uri ?? '',\n altText: getAltText(actionContext.requestContext, shouldUseCmsAltText, productName, mediaLocation.AltText),\n displayOrder: mediaLocation.DisplayOrder,\n mediaTypeValue: mediaLocation.MediaTypeValue,\n additionalProperties: mediaLocation.IsApplicableForChildEntities\n ? {\n isApplicableForChildEntities: 'true'\n }\n : undefined\n };\n });\n }\n return [];\n }\n const actionInput = new MediaLocationsForSelectedVariantInput(productId, channelId, selectedProduct, catalogId);\n return getMediaLocationsForSelectedVariant(actionInput, actionContext)\n .then(mediaLocations => {\n if (mediaLocations) {\n return mediaLocations.map(mediaLocation => {\n return {\n src: mediaLocation.Uri ?? '',\n altText: getAltText(actionContext.requestContext, shouldUseCmsAltText, productName, mediaLocation.AltText),\n displayOrder: mediaLocation.DisplayOrder,\n mediaTypeValue: mediaLocation.MediaTypeValue,\n additionalProperties: mediaLocation.IsApplicableForChildEntities\n ? {\n isApplicableForChildEntities: 'true'\n }\n : undefined\n };\n });\n }\n return [];\n })\n .catch(error => {\n actionContext.telemetry.exception(error);\n actionContext.telemetry.debug('Unable to get Media Locations for Selected Variant');\n return [];\n });\n}\n\nexport async function validateProductImages(\n mediaLocations: MediaLocation[],\n actionContext: IActionContext,\n imageSettings: IImageSettings\n): Promise {\n return Promise.all(mediaLocations.map(mediaLocation => validateMediaLocationAsync(mediaLocation)))\n .then(pairs => {\n return pairs.filter(pair => pair[1]).map(pair => pair[0]);\n })\n .catch(error => {\n actionContext.telemetry.exception(error);\n actionContext.telemetry.debug('Unable to validate product images');\n return [];\n });\n}\n\n/**\n * GetVideoMetadataFromAPI - Makes API call to get video metadata.\n * @param videoId: Video Id\n * @param actionContext: Action context\n * @returns: Returns the meta data of the video.\n */\nexport async function getVideoMetadataFromApi(videoId: string, actionContext: IActionContext): Promise {\n let videoPlayerData: IVideoData | undefined;\n if (videoId) {\n const response = await commerceVideoMetadataRequest(actionContext.requestContext, [videoId]);\n\n if (response.status !== 200) {\n actionContext.telemetry.debug(`Unable to get video metadata for videoId: ${videoId}`);\n return;\n }\n\n const videoData = response.data as [];\n if (videoData && ArrayExtensions.hasElements(videoData)) {\n videoPlayerData = videoData[0];\n }\n }\n return videoPlayerData;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IImageData, IImageSettings, Image, Video } from '@msdyn365-commerce/core';\nimport {\n IMediaData,\n IMediaGalleryThumbnailItemViewProps,\n IMediaGalleryThumbnailsViewProps,\n IMediaGalleryViewProps,\n MediaType\n} from '@msdyn365-commerce-modules/media-gallery';\nimport { ArrayExtensions, getFallbackImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, KeyCodes, Module, Node, NodeTag } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport React from 'react';\nimport { IPlayerData, IPlayerOptions, IVideoMetadata, Player } from '@msdyn365-commerce-modules/video-player-utilities';\n\ninterface IMediaGalleryItemsProps extends IMediaGalleryThumbnailItemViewProps {\n Video?: React.ReactElement;\n}\n\n/**\n * Render the thumbnail item images.\n * @param thumbnail - The carousel thumbnail line props.\n * @returns Return HTML having thumbnail container props with image.\n */\nconst renderThumbnailItem = (thumbnail: IMediaGalleryItemsProps): JSX.Element => {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from media-gallery.tsx file\n const { ThumbnailItemContainerProps, Picture, Video } = thumbnail;\n\n return {Video ? Video : Picture};\n};\n\n/**\n * Gets the thumbnail item to display media gallery images.\n * @param image - The media gallery images.\n * @param imageSettings - Image settings for the image gallery items.\n * @param imageId - Image id.\n * @param modifiedActiveIndex - Modified Index of the images when selection changes.\n * @param props - The Media gallery view props from business layer.\n * @returns Return thumbnail view props which will be used to render images.\n */\nconst GetThumbnailItemComponent = (\n image: IImageData,\n imageSettings: IImageSettings,\n imageId: number,\n modifiedActiveIndex: number,\n props: IMediaGalleryViewProps,\n mediaTypeValue?: MediaType\n): IMediaGalleryThumbnailItemViewProps => {\n let fallbackImage: string | undefined = '';\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Site level config can be of any type.\n const emptyPlaceHolderImage = props.context.app.config?.placeholderImageName as string;\n if (props.data.product.result) {\n fallbackImage = getFallbackImageUrl(\n props.data.product.result.ItemId,\n props.context.request.apiSettings,\n props.context.request.app?.config?.OmniChannelMedia\n );\n }\n if (emptyPlaceHolderImage && fallbackImage) {\n fallbackImage = `${fallbackImage},${emptyPlaceHolderImage}`;\n }\n\n /**\n * OnClick method of media gallery item.\n */\n const onClick = () => {\n props.callbackToggle?.();\n props.callbackThumbnailClick?.(imageId);\n props.state.activeIndex = imageId;\n };\n\n const classes = classnames(\n 'ms-media-gallery__thumbnail-item',\n modifiedActiveIndex === imageId ? 'ms-media-gallery__thumbnail-item-active' : ''\n );\n\n /**\n * Keydown event of media gallery item.\n * @param event - React.KeyboardEvent.\n */\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (event.keyCode === KeyCodes.Enter) {\n event.preventDefault();\n onClick();\n }\n };\n const defaultIndex = 0;\n return {\n ThumbnailItemContainerProps: {\n tag: 'li' as NodeTag,\n className: classes,\n role: 'listitem',\n key: imageId\n },\n Picture: (\n \n \n \n \n \n \n )\n };\n};\n\n/**\n * Render the video player.\n * @param mediaData - Media Data\n * @param index - Index of the video\n * @param activeIndex - Active Index\n * @param imageSettings - Image settings\n * @param props - Media gallery view props\n * @returns - JSX.Element.\n */\nconst RenderVideo = (\n mediaData: IMediaData,\n index: number,\n activeIndex: number,\n imageSettings: IImageSettings,\n props: IMediaGalleryViewProps\n): IMediaGalleryItemsProps => {\n const videoData = mediaData.videoData;\n if (videoData) {\n const options: IPlayerOptions = props.config as IPlayerOptions;\n const playerResources = props.resources;\n const videoMetaData: IVideoMetadata = {};\n videoMetaData.videoId = videoData.id;\n videoMetaData.title = videoData.title;\n videoMetaData.duration = videoData.playTime;\n if (videoData.thumbnail) {\n videoMetaData.posterframeUrl = videoData.thumbnail.src;\n }\n if (videoData._links?.binaryReferences) {\n videoMetaData.videoBinaryReferences = videoData._links.binaryReferences;\n }\n const videoPlayerData: IPlayerData = { options, metaData: videoMetaData };\n\n const classes = classnames(\n 'ms-media-gallery__thumbnail-item',\n index === activeIndex ? 'ms-media-gallery__thumbnail-item-active' : ''\n );\n\n return {\n ThumbnailItemContainerProps: {\n tag: 'li' as NodeTag,\n className: classes,\n role: 'listitem',\n key: index\n },\n Picture: <>>,\n Video: (\n \n )\n };\n }\n return GetEmptyThumbnailItemComponent(imageSettings, props);\n};\n\n/**\n * Gets the empty thumbnail item to display media gallery images.\n * @param imageSettings - Image settings for the image gallery items.\n * @param props - The Media gallery view props from business layer.\n * @returns Return thumbnail view props which will be used to render empty images.\n */\nconst GetEmptyThumbnailItemComponent = (\n imageSettings: IImageSettings,\n props: IMediaGalleryViewProps\n): IMediaGalleryThumbnailItemViewProps => {\n let fallbackImage: string | undefined = '';\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Site level config can be of any type.\n const emptyPlaceHolderImage = props.context.app.config?.placeholderImageName as string;\n\n if (props.data.product.result) {\n fallbackImage = getFallbackImageUrl(\n props.data.product.result.ItemId,\n props.context.request.apiSettings,\n props.context.request.app?.config?.OmniChannelMedia\n );\n }\n if (emptyPlaceHolderImage && fallbackImage) {\n fallbackImage = `${fallbackImage},${emptyPlaceHolderImage}`;\n }\n\n return {\n ThumbnailItemContainerProps: {\n tag: 'li' as NodeTag,\n className: 'ms-media-gallery__thumbnail-item',\n role: 'listitem',\n tabIndex: 0,\n key: 0,\n 'aria-label': ''\n },\n Picture: (\n \n )\n };\n};\n\n/**\n * Update media gallery items method.\n * @param items - The media gallery thumbnail item view props.\n * @returns The IImageData array.\n */\nconst getMediaGalleryItems = (items?: IMediaData[]): IMediaData[] | undefined => {\n return items?.map(item => {\n return {\n displayOrder: item.displayOrder,\n mediaTypeValue: item.mediaTypeValue,\n altText: item.altText,\n src: item.src,\n videoData: item.videoData\n };\n });\n};\n\nconst defaultThumbnailImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=295&h=295&q=80&m=6&f=jpg', w: 295, h: 295 },\n xl: { q: 'w=295&h=295&q=80&m=6&f=jpg', w: 295, h: 295 }\n },\n lazyload: true,\n cropFocalRegion: true\n};\n\n/**\n * Render the Media gallery thumbnails to represent images in grid view.\n * @param thumbnails - The thumbnail view props.\n * @param props - The media gallery view props.\n * @returns - The single slide carousel component to render as media gallery image.\n */\nconst renderThumbnails = (thumbnails: IMediaGalleryThumbnailsViewProps, props: IMediaGalleryViewProps): JSX.Element => {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from media-gallery.tsx file\n const { ThumbnailsContainerProps, SingleSlideCarouselComponentProps } = thumbnails;\n const { state } = props;\n const mediaGalleryItems = getMediaGalleryItems(state.mediaGalleryItems);\n\n const items: IMediaGalleryItemsProps[] | undefined =\n // eslint-disable-next-line multiline-ternary -- need multiline for easy code reading\n state.lastUpdate && ArrayExtensions.hasElements(mediaGalleryItems) && mediaGalleryItems[0].src === 'empty'\n ? [GetEmptyThumbnailItemComponent(defaultThumbnailImageSettings, props)]\n : // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from media-gallery\n mediaGalleryItems?.map((item: IMediaData, id: number) => {\n if (item.mediaTypeValue === MediaType.Video) {\n if (props.config.allowFullScreen) {\n const videoThumbnail = item.videoData?.thumbnail;\n if (videoThumbnail) {\n return GetThumbnailItemComponent(\n videoThumbnail,\n defaultThumbnailImageSettings,\n id,\n state.activeIndex,\n props,\n item.mediaTypeValue\n );\n } else {\n return GetEmptyThumbnailItemComponent(defaultThumbnailImageSettings, props);\n }\n } else {\n return RenderVideo(item, id, state.activeIndex, defaultThumbnailImageSettings, props);\n }\n } else {\n return GetThumbnailItemComponent(item, defaultThumbnailImageSettings, id, state.activeIndex, props);\n }\n });\n\n return (\n \n {items?.map(renderThumbnailItem)}\n \n );\n};\n\n/**\n * Render the Media gallery items using viewprops.\n * @param props - The media gallery view props.\n * @returns The media gallery module wrapping up images node.\n */\nconst mediaGalleryView: React.FC = props => {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from media-gallery.tsx file\n const { CarouselProps, Thumbnails, MediaGallery, Modal } = props;\n\n // The thumbnails in AW theme aren't used as tabs\n const NewSingleSlideCarouselComponentProps = { ...Thumbnails.SingleSlideCarouselComponentProps, useTabList: false };\n const NewThumbnails = { ...Thumbnails, SingleSlideCarouselComponentProps: NewSingleSlideCarouselComponentProps };\n\n return (\n \n \n {Modal}\n {renderThumbnails(NewThumbnails, props)}\n \n );\n};\n\nexport default mediaGalleryView;\n","module.exports = React;","module.exports = ReactDOM;"],"names":["findImagesSettingsInProps","props","onFound","Object","keys","forEach","key","match","findAndFixImageSettingsInProps","imageSettings","mode","viewports","q","replace","fixImageSettings","renderThumbnailItem","thumbnail","ThumbnailItemContainerProps","Picture","Video","React","Node","assign","GetThumbnailItemComponent","image","imageId","modifiedActiveIndex","mediaTypeValue","_props$context$app$co","_props$config$thumbna","_props$context$reques3","_props$context$reques4","fallbackImage","emptyPlaceHolderImage","context","app","config","placeholderImageName","_props$context$reques","_props$context$reques2","data","product","result","getFallbackImageUrl","ItemId","request","apiSettings","OmniChannelMedia","onClick","_props$callbackToggle","_props$callbackThumbn","callbackToggle","call","callbackThumbnailClick","state","activeIndex","handleKeyDown","event","keyCode","KeyCodes","preventDefault","tag","className","classnames","role","Button","altText","onKeyDown","Image","requestContext","actionContext","gridSettings","thumbnailImageSettings","loadFailureBehavior","imageFallbackOptimize","shouldUseOptimizedImage","fallBackSrc","src","bypassHideOnFailure","MediaType","title","resources","playVideoTitleText","fullScreenTitleText","GetEmptyThumbnailItemComponent","_props$context$app$co2","_props$config$thumbna2","_props$context$reques5","_props$context$reques6","tabIndex","skipImageValidation","defaultThumbnailImageSettings","xs","w","h","xl","lazyload","cropFocalRegion","renderThumbnails","thumbnails","ThumbnailsContainerProps","SingleSlideCarouselComponentProps","mediaGalleryItems","items","map","item","displayOrder","videoData","getMediaGalleryItems","lastUpdate","ArrayExtensions","id","allowFullScreen","_item$videoData","videoThumbnail","RenderVideo","mediaData","index","_videoData$_links","options","playerResources","videoMetaData","videoId","duration","playTime","posterframeUrl","_links","binaryReferences","videoBinaryReferences","videoPlayerData","metaData","editProps","Player","playerData","isEditor","params","CarouselProps","Thumbnails","MediaGallery","Modal","NewSingleSlideCarouselComponentProps","_objectSpread","useTabList","NewThumbnails","Module","binding","modules","dataActions","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","Error","prototype","RegistrationId","c","require","$type","da","name","path","runOn","iNM","ns","n","p","pdp","md","window","__bindings__","viewDictionary","cn","constructor","_this","_ref","_props$config$zoomedI","super","this","_inlineZoomDivRef","Map","fullScreenOverlayButtonRef","player","defaultGalleryImageSettings","sm","lg","onExiting","setState","animating","onExited","next","removeInlineZoomStyle","undefined","isLastItem","nextIndex","goToIndex","updateZoomedInImage","previous","images","isFirstItem","length","autoplay","currentIndex","mediaItems","_mediaItems","_this$player$current","current","play","_this$player$current2","pause","getImagesData","_this$props$context$r","_this$props$context$r2","_this$props$config$im","_this$props$config$im2","source","imageSource","mediaLocations","mediaLocationsForSelectedVariant","mediaLocation","_mediaLocation$Uri","_this$props$data$prod","Uri","getAltText","shouldUseCmsAltText","Name","AltText","additionalProperties","IsApplicableForChildEntities","isApplicableForChildEntities","curatedImages","_filterMasterImageFromVariant","_renderCarouselItemVideo","attributes","ref","_renderEmptyImage","_getCarouselItem","_this$props$context$r3","_this$props$context$r4","isInPopup","arguments","shouldSkipToMainImage","_getThumbnailItem","_generateOnThumbnailClick","_generateOnThumbnailKeyDown","getVideoThumbNailItem","classes","_refHandler","divRef","set","which","_renderVideoThumbnail","openModalDialog","_toggleModal","imageModalSlider","ZoomView","_mapProductToImageData","carouselprops","Carousel","_renderCarouselItemImageView","_zoomedImageSettings","interval","directionTextPrev","previousScreenshotFlipperText","directionTextNext","nextScreenshotFlipperText","onIndicatorsClickHandler","showPaginationTooltip","hideIndicator","keyboard","handleOnExited","handleOnExiting","isDisabledFunctionality","isMobileImageZoomed","carousel","imageModalSliderProps","modalIsOpen","ontoggle","galleryCarousel","classNames","ImagefullView","altTextSource","bind","mediaGalleryImages","isImageZoomed","isInitialLoad","zoomedImageSettings","galleryImageSettings","_onImageMouseOut","_inlineZoomImageOnHover","_onInlineImageClick","_onContainerZoomImageClick","_onMouseOutLensContainer","isMobile","variant","VariantType","_this$props$config$im3","_this$props$context$r5","_this$props$context$r6","shouldUpdateOnPartialDimensionSelection","_setRenderType","_this$props$config$th","validateProductImages","_setImages","_this$props$config$th2","getValidProductImages","RecordId","channelId","productVariant","reaction","_product$productVaria","async","_this$props$context$a","_this$props$context$a2","_this$props$config$th3","getProductImages","fireImmediately","_this$props$config$th4","shouldComponentUpdate","nextProps","nextState","render","_this$props$context$a3","isVertical","thumbnailsOrientation","isFullscreenAllowed","zoomViewMode","imageZoom","_this$props$context$r7","_this$props$context$r8","mediaGalleryCarouselItems","_getMediaGalleryItems","mediaGalleryThumbnailCarouselItems","_getMediaGalleryThumbnailItems","viewProps","moduleProps","callbackThumbnailKeyDown","indicatorAriaText","ariaLabelForSlide","SingleSlideCarousel","vertical","flipperPrevLabel","flipperNextLabel","parentId","JSON","stringify","renderView","defaultKey","_getEmptyThumbnailItem","zoomView","curatedImage","mediaToSet","Promise","all","URL","searchParams","get","getVideoMetadataFromApi","error","telemetry","debug","then","filter","element","Date","now","media","_renderImageInContainerOnZoom","_renderImageFullScreenOnZoom","_renderImageInlineOnZoom","_this$props$config$sh","_this$props$data$prod2","_this$props$data$prod3","_this$props$data$prod4","shouldHidePrimaryImages","shouldHideMasterProductImagesForVariant","variantImages","isVariantProduct","ObjectExtensions","MasterProductId","itemId","_item$additionalPrope","_this$props$config$da","dataScale","defaultDataScale","onMouseOver","onMouseMove","inlineZoomImageOnMouseMove","_this$props$config$da2","inlineZoomImageOnHover","String","_handleMobileViewZoomedImageClick","target","currentTarget","mobileZoomedInImageClassName","style","transform","classList","remove","parentElement","overflow","_this$props$config$da3","bounds","getBoundingClientRect","Number","positionX","clientX","left","positionY","clientY","top","scaledPositionX","scaledPositionY","add","scrollTo","_this$props$config$da4","innerWidth","inlineZoomInitClick","inlineZoomImageOnMouseOut","onContainerZoomInit","onMouseOutLensContainer","_this$props$config$da5","onMouseOut","onMouseMoveLensContainer","onMouseOverImageContainer","href","_product$PrimaryImage","PrimaryImageUrl","_this$fullScreenOverl","focus","parentDiv","children","querySelector","removeAttribute","removeContainerZoomStyle","_renderThumbnails","_renderThumbnailItem","productName","imageAltText","_context$app","_context$app$config","validateMediaLocationAsync","imageData","resolve","http","XMLHttpRequest","open","addEventListener","status","send","_unused","productId","selectedProduct","catalogId","getCatalogId","actionInput","MediaLocationsForSelectedVariantInput","getMediaLocationsForSelectedVariant","pairs","pair","catch","exception","_actionContext$reques","_actionContext$reques2","isPreview","response","commerceApiRequest","previewImageData","DisplayOrder","MediaTypeValue","_mediaLocation$Uri2","commerceVideoMetadataRequest","module","exports","ReactDOM"],"sourceRoot":""}