{"version":3,"file":"static/js/8bb0ce103ad0388156b2.bundle.js","mappings":"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","sources":["webpack://mattressfirm/./lib/media-gallery/module-registration.js?47e5","webpack://mattressfirm/./src/modules/media-gallery/utils/helper.ts?b895","webpack://mattressfirm/./src/modules/media-gallery/utils/get-valid-product-images.ts?a364","webpack://mattressfirm/./src/modules/media-gallery/media-gallery.tsx?24d7","webpack://mattressfirm/./src/modules/media-gallery/media-gallery.view.tsx?5061","webpack://mattressfirm/external var \"React\"?0d3b","webpack://mattressfirm/external var \"ReactDOM\"?853b"],"sourcesContent":["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['@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 };\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 { 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 { 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 );\n }\n\n private _renderImageFullScreenOnZoom(image: IImageData, imageSettings: IImageSettings, index: number): React.ReactNode {\n return (\n
\n \n
\n {}\n \n
\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 \n
\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","module.exports = React;","module.exports = ReactDOM;"],"names":["binding","modules","dataActions","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","Error","prototype","RegistrationId","id","c","require","$type","da","name","path","runOn","iNM","ns","n","p","pdp","md","window","__bindings__","_objectSpread","viewDictionary","cn","MediaType","getAltText","context","shouldUseCmsAltText","productName","imageAltText","_context$app","app","config","OmniChannelMedia","async","validateMediaLocationAsync","mediaLocation","imageData","src","Uri","altText","AltText","IsApplicableForChildEntities","additionalProperties","isApplicableForChildEntities","Promise","resolve","http","XMLHttpRequest","open","addEventListener","status","send","_unused","getValidProductImages","productId","channelId","actionContext","imageSettings","selectedProduct","catalogId","getCatalogId","requestContext","actionInput","MediaLocationsForSelectedVariantInput","getMediaLocationsForSelectedVariant","then","mediaLocations","all","map","pairs","filter","pair","catch","error","telemetry","exception","debug","validateProductImages","MediaGallery","React","constructor","props","_this","_ref","_props$config$zoomedI","super","this","_inlineZoomDivRef","Map","fullScreenOverlayButtonRef","player","defaultGalleryImageSettings","viewports","xs","q","w","h","sm","lg","lazyload","cropFocalRegion","defaultThumbnailImageSettings","onExiting","setState","animating","onExited","next","removeInlineZoomStyle","undefined","isLastItem","nextIndex","state","activeIndex","goToIndex","updateZoomedInImage","previous","images","mediaGalleryItems","isFirstItem","length","index","autoplay","currentIndex","mediaItems","_mediaItems","_this$player$current","mediaTypeValue","Video","current","play","_this$player$current2","pause","getImagesData","_this$props$context$r","skipImageValidation","request","_this$props$config$im","_this$props$config$im2","source","imageSource","data","mediaLocationsForSelectedVariant","result","_mediaLocation$Uri","_this$props$data$prod","product","Name","curatedImages","_filterMasterImageFromVariant","_renderCarouselItemVideo","mediaData","videoData","_videoData$_links","options","playerResources","resources","videoMetaData","videoId","title","duration","playTime","thumbnail","posterframeUrl","_links","binaryReferences","videoBinaryReferences","videoPlayerData","metaData","attributes","className","editProps","key","Player","Object","assign","ref","playerData","isEditor","params","_renderEmptyImage","_getCarouselItem","image","_this$props$context$r2","isInPopup","arguments","Image","fallBackSrc","fallbackImage","gridSettings","loadFailureBehavior","shouldSkipToMainImage","bypassHideOnFailure","_getThumbnailItem","modifiedActiveIndex","ThumbnailItemContainerProps","tag","classnames","role","tabIndex","onClick","_generateOnThumbnailClick","onKeyDown","_generateOnThumbnailKeyDown","Picture","imageFallbackOptimize","shouldUseOptimizedImage","getVideoThumbNailItem","classes","_refHandler","divRef","set","event","which","KeyCodes","Enter","Space","preventDefault","_renderVideoThumbnail","fullScreenTitleText","openModalDialog","_toggleModal","imageModalSlider","ZoomView","_mapProductToImageData","carouselprops","Carousel","items","item","_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","Viewport","_this$props$config$im3","_this$props$context$r3","shouldUpdateOnPartialDimensionSelection","_setRenderType","_this$props$config$th","thumbnailImageSettings","_setImages","_this$props$config$th2","RecordId","apiSettings","productVariant","reaction","_product$productVaria","_this$props$context$a","_this$props$config$th3","_actionContext$reques","isPreview","response","commerceApiRequest","previewImageData","displayOrder","DisplayOrder","MediaTypeValue","_mediaLocation$Uri2","getProductImages","fireImmediately","_this$props$config$th4","shouldComponentUpdate","nextProps","nextState","render","_this$props$context$a2","isVertical","thumbnailsOrientation","isFullscreenAllowed","allowFullScreen","zoomViewMode","imageZoom","emptyPlaceHolderImage","placeholderImageName","_this$props$context$r4","getFallbackImageUrl","ItemId","mediaGalleryCarouselItems","_getMediaGalleryItems","mediaGalleryThumbnailCarouselItems","_getMediaGalleryThumbnailItems","viewProps","moduleProps","Modal","callbackToggle","callbackThumbnailClick","callbackThumbnailKeyDown","CarouselProps","indicatorAriaText","ariaLabelForSlide","keys","Thumbnails","ThumbnailsContainerProps","SingleSlideCarouselComponentProps","SingleSlideCarousel","vertical","flipperPrevLabel","flipperNextLabel","parentId","useTabList","JSON","stringify","renderView","ArrayExtensions","hasElements","lastUpdate","defaultKey","_getEmptyThumbnailItem","zoomView","curatedImage","mediaToSet","URL","searchParams","get","commerceVideoMetadataRequest","getVideoMetadataFromApi","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","isNullOrUndefined","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","thumbnails","Node","_renderThumbnailItem","Module","module","exports","ReactDOM"],"sourceRoot":""}