{"version":3,"sources":["webpack:///src/utils/classnames.ts?8f2b","webpack:///src/modules/default-container-2-slots/default-container-2-slots.tsx?b218","webpack:///./src/modules/last-viewed/last-viewed.tsx?1c7c","webpack:///src/utils/script-utils.ts?9534","webpack:///src/modules/spacer/spacer.tsx?3b03","webpack:///src/modules/default-inline-script/default-inline-script.tsx?3ed3","webpack:///src/modules/default-metatags/default-metatags.tsx?1bb4","webpack:///src/modules/default-external-script/default-external-script.tsx?203d","webpack:///src/modules/default-page-summary/default-page-summary.tsx?b254","webpack:///src/components/container-background-image/container-background-image-helper.ts?d691","webpack:///src/components/container-background-image/container-backgroud-image.tsx?89dd","webpack:///src/components/base-components.tsx?5f88","webpack:///src/modules/spacer/spacer.view.tsx?bd25","webpack:///./src/modules/last-viewed/last-viewed.view.tsx?90cb","webpack:///src/modules/default-inline-style/default-inline-style.tsx?bd16","webpack:///src/modules/product-page-summary/product-page-summary.tsx?a2ef","webpack:///src/modules/default-container-3-slots/default-container-3-slots.tsx?06cd","webpack:///./src/modules/product-feature/product-feature.tsx?7501","webpack:///./src/modules/product-feature/product-feature.view.tsx?ba95","webpack:///src/modules/default-container/default-container.tsx?4334"],"names":["sizePattern","getColumnSizes","config","size","exec","cols","split","slice","translatedSize","prefix","toLowerCase","translatePrefix","sizePrefix","map","colWidth","showErrors","context","isDebug","isEditor","request","params","getColClassArray","options","xsmall","small","medium","large","filter","Boolean","colWidths","Map","Default2SlotContainer","React","PureComponent","constructor","props","super","handleTextChange","event","this","heading","headingText","target","value","_getColClassName","classNames","length","reduce","memo","_ref","left","right","push","render","slots","telemetry","data","log","LogLevel","Debug","values","id","typeName","content","slotsClassNames","Warning","headingProps","_objectSpread","requestContext","createElement","Container","containerType","className","backgroundImage","backgroundImageRepeat","backgroundImageSize","moduleLayout","msdyn365__moduleLayout","HeadingComponent","Object","assign","join","Fragment","slot","index","key","LastViewed","renderView","logDebug","debugMessage","logError","errorMessage","Error","isAbsoluteUrl","source","test","isRelativeUrl","Spacer","spacerClass","spacerHeight","viewProps","classnames","DefaultInlineScript","inlineScript","includes","nonceToken","isNonceEnabled","scriptHtml","SDK_FRAGMENT_NAME","dangerouslySetInnerHTML","__html","DefaultMetaTags","metaTags","metaTagsHtml","_addNonceToInlineScript","metaTagsText","simpleText","text","inlineScripRegex","metaTag","replace","DefaultExternalScript","scriptSource","relativeBaseUrl","url","staticCdnUrl","msdyn365Commerce","getEnvironmentVariable","path","async","defer","DefaultPageSummary","undefined","pageSummary","result","title","description","keywords","sharingImageUrl","faviconUrl","canonicalUrl","sharingImage","src","pageTitle","_constructPageTitle","app","HtmlHeadInclude","name","rel","href","disableOgTags","_renderOgTags","disableTwitterTags","_renderTwitterTags","property","moduleConfig","ignoreTitleSuffixPrefix","appConfig","platform","pageTitlePrefix","pageTitleSuffix","getBackgroundRepeatProperty","repeat","getBackgroundSizeProperty","buildBackgroundImageStylesByViewport","_request$gridSettings","image","configs","gridSettings","imageSettings","styles","largestGridSettingViewportName","getLargestGridSettingViewportName","authoringViewPorts","getAuthoringViewport","moduleName","layout","isBrowser","authoringHelper","window","_msdyn365","constructViewportInformationForImage","themeSettings","imgSettings","viewports","_cloneDeep2","xs","w","h","sm","md","lg","xl","skipWidthAndHeightSettings","keys","vp","_imgSettings$viewport","viewport","minMaxWidth","getMinMaxWidth","urlSrc","getImageResizeUrl","externalProvider","apiSettings","maxWidth","max","minWidth","min","minHeight","backgroundRepeat","backgroundSize","backgroundPosition","setStyleAttribute","currentStyle","style","getDataBgSetAttribute","dataBgSetAttributes","BackgroundImage","state","stylesByViewport","_onChangeHandler","bind","_getCurrentStyle","mounted","_componentResize","updateAttributes","componentDidMount","addEventListener","componentWillUnmount","removeEventListener","shouldComponentUpdate","nextProps","nextState","_this$props$request","_nextProps$request","_this$props$image","_nextProps$image","_this$props$image2","_nextProps$image2","children","backgroundImageClassName","isAuthoringEditEnabled","processedAtributes","_processAttributes","_isLazyload","attributes","_getAttributes","eventHandlers","onDoubleClick","_getDefaultAttributes","_unused","lazyLoad","getBackgroundImageLazyloadAttributes","role","getBackgroundImageAttributes","currentTarget","binding","eventTarget","$type","selectedStyle","_isEqual2","setState","winInnerWidth","innerWidth","_this$stylesByViewpor","_this$stylesByViewpor2","_this$stylesByViewpor3","_this$stylesByViewpor4","Number","MAX_SAFE_INTEGER","_getDefaultStyle","_this$props$image3","disableLazyLoad","getContainerType","customClassName","containerContent","tag","textSize","Tag","classNameWithHeading","Text","editProps","onEdit","SpacerView","renderModuleAttributes","lastRecord","lastRecordDetails","setLastRecordDetails","useState","useEffect","product","localStorage","getItem","finalLastRecord","JSON","parse","i","prodDetails","productName","prodImage","prodURL","item","DefaultInlineStyle","inlineStyle","styleHtml","ProductPageSummary","_context$request$chan","productPageSummary","productId","productBrand","price","productDescription","productImageUrl","_renderProductMetadata","channel","Currency","currencyCode","productMetaData","stringify","sku","brand","offers","priceCurrency","type","Default3SlotContainer","center","ProductFeature","ProductName","productTitle","ProductInfo","productDetails","toString","ProductImageUrl","productImage","ButtonInfo","buttonText","ProductFeatureViewProps","productInfo","productPrice","buttonInfo","alignment","imageAlignment","resources","resourceKey","DefaultContainer","_getChildColClassName","childrenWidth","_getWidthClass","s","get"],"mappings":"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","file":"static/js/13.edf40127d25d928d94c0.chunk.js","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ICoreContext } from '@msdyn365-commerce/core';\nimport * as twoSlots from '../modules/default-container-2-slots/default-container-2-slots.props.autogenerated';\nimport * as threeSlots from '../modules/default-container-3-slots/default-container-3-slots.props.autogenerated';\n\n// eslint-disable-next-line security/detect-unsafe-regex\nconst sizePattern = /col(_(\\d|auto){1,2}){2,}/;\n\nexport interface IShowErrorOptions {\n isDebug?: boolean;\n isEditor?: boolean;\n}\n\nexport interface IViewPortOptions {\n xsmall?: threeSlots.xsmall | twoSlots.xsmall;\n small?: threeSlots.small | twoSlots.small;\n medium?: threeSlots.medium | twoSlots.medium;\n large?: threeSlots.large | twoSlots.large;\n}\n\nconst translatePrefix = (prefix: `large` | `medium` | `small` | `xsmall` | undefined) => {\n switch (prefix && prefix.toLowerCase()) {\n case 'large':\n return 'lg';\n case 'medium':\n return 'md';\n case 'small':\n return 'sm';\n case 'xsmall':\n default:\n return '';\n }\n};\n\n/**\n * converts config option and size to bootstrap col class name\n * If size is auto or config option is invalid col-auto will be returned\n * If size is xsmall or size is invalid col-{config} will be returned\n * @param config configuration option e.g. col_12_12\n * @param size bootstrap gridsize\n */\nexport const getColumnSizes = (config: string, size?: `large` | `medium` | `small` | `xsmall`): string[] | boolean => {\n if (!sizePattern.exec(config)) {\n return false;\n }\n const cols = config.split('_').slice(1);\n const translatedSize = translatePrefix(size);\n const sizePrefix = (translatedSize && `-${translatedSize}`) || '';\n return cols.map((colWidth: string) => `col${sizePrefix}-${colWidth}`);\n};\n\nexport const showErrors = (context?: ICoreContext): Boolean => {\n const { isDebug, isEditor }: IShowErrorOptions = (context && context.request && context.request.params) || {};\n return !!isDebug || !!isEditor;\n};\n\n/**\n * Converts viewport configuration into a two dimensional array of class names\n */\nexport const getColClassArray = (options: IViewPortOptions): string[][] =>\n (\n [\n options.xsmall && getColumnSizes(options.xsmall),\n options.small && getColumnSizes(options.small, 'small'),\n options.medium && getColumnSizes(options.medium, 'medium'),\n options.large && getColumnSizes(options.large, 'large')\n ].filter(Boolean)\n );\n\nexport const colWidths = new Map([\n ['one', 'col-md-1'],\n ['two', 'col-md-2'],\n ['three', 'col-md-3'],\n ['four', 'col-md-4'],\n ['six', 'col-md-6'],\n ['twelve', 'col-md-12']\n]);\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ContentEditableEvent } from '@msdyn365-commerce/core';\nimport { LogLevel } from '@msdyn365-commerce/telemetry-internal';\nimport React, { ReactNode } from 'react';\nimport { Container, HeadingComponent, IHeadingComponentProps } from '../../components/base-components';\nimport { getColClassArray, showErrors } from '../../utils/classnames';\nimport { IDefaultContainer2SlotsData } from './default-container-2-slots.data';\nimport { IDefaultContainer2SlotsProps } from './default-container-2-slots.props.autogenerated';\n\ninterface IColSizes {\n left: string[];\n right: string[];\n}\n\n/**\n * Default container that displays 2 modules\n * CoreComponent component\n * @extends {React.PureComponent>}\n */\nclass Default2SlotContainer extends React.PureComponent> {\n constructor(props: IDefaultContainer2SlotsProps) {\n super(props);\n }\n\n public render(): JSX.Element {\n const { slots, telemetry, context, config, data } = this.props;\n telemetry.log(LogLevel.Debug, \"Default 2 Slot Container rendering for '{id}/{typeName}'\", {\n values: [this.props.id, this.props.typeName]\n });\n\n const content = slots && slots.content;\n const slotsClassNames = this._getColClassName();\n if (content && content.length > 2) {\n telemetry.log(LogLevel.Warning, 'Default 2 Slot Container passed more than 2 slots');\n }\n const heading = config.heading || data.heading;\n const headingProps: IHeadingComponentProps = {\n ...heading,\n handleTextChange: this.handleTextChange,\n requestContext: this.props.context.request\n };\n return (\n \n {heading && }\n {content && content[0] &&
{content[0]}
}\n {content && content[1] &&
{content[1]}
}\n <>\n {showErrors(context) &&\n content &&\n content.slice(2, content.length - 1).map((slot: ReactNode, index: number) => {\n return (\n
\n
\n
\n Slot exceeded maximum number of slots supported by container. (2)\n
\n
\n
\n );\n })}\n \n \n );\n }\n\n public handleTextChange = (event: ContentEditableEvent) => (this.props.config.heading!.headingText = event.target.value);\n /**\n * Captures left and right column classnames from this.props.config. Returns col if no options specified.\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n public _getColClassName = (): IColSizes => {\n const { config } = this.props;\n\n const classNames = getColClassArray(config);\n\n if (!classNames.length) {\n return {\n left: ['col'],\n right: ['col']\n };\n }\n\n return classNames.reduce(\n (memo: IColSizes, [left, right]: string[]) => {\n memo.left.push(left);\n memo.right.push(right);\n return memo;\n },\n { left: [], right: [] }\n );\n };\n}\n\nexport default Default2SlotContainer;\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 * as React from 'react';\r\n\r\nimport { ILastViewedData } from './last-viewed.data';\r\nimport { ILastViewedProps } from './last-viewed.props.autogenerated';\r\n\r\nexport interface ILastViewedViewProps extends ILastViewedProps {}\r\n\r\n/**\r\n *\r\n * LastViewed component\r\n * @extends {React.PureComponent>}\r\n */\r\nclass LastViewed extends React.PureComponent> {\r\n public render(): JSX.Element | null {\r\n return this.props.renderView(this.props);\r\n }\r\n}\r\n\r\nexport default LastViewed;\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IInternalTelemetry, LogLevel } from '@msdyn365-commerce/telemetry-internal';\n\nexport const logDebug = (debugMessage: string, telemetry: IInternalTelemetry | undefined): void => {\n telemetry && telemetry.log(LogLevel.Debug, debugMessage);\n};\n\nexport const logError = (errorMessage: string, telemetry: IInternalTelemetry | undefined): void => {\n telemetry && telemetry.log(LogLevel.Error, errorMessage);\n};\n\n/**\n * Returns true if the given string matches an URL pattern\n *\n * @param source The string to check against\n */\nexport const isAbsoluteUrl = (source: string): boolean => {\n // eslint-disable-next-line security/detect-unsafe-regex\n return /^(http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-\\/]))?$/.test(source);\n};\n\nexport const isRelativeUrl = (source: string): boolean => {\n return /^(?!www\\.|(?:http|ftp)s?:\\/\\/|[A-Za-z]:\\\\|\\/\\/).*(\\.js){1}$/.test(source);\n};\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { ISpacerProps } from './spacer.props.autogenerated';\n\nexport interface ISpacerViewProps extends ISpacerProps<{}> {\n className?: string;\n}\n\n/**\n *\n * SpacerModule component.\n * @extends {React.PureComponent}\n */\nclass Spacer extends React.PureComponent> {\n public render(): JSX.Element | null {\n const { className } = this.props.config;\n const spacerClass = this.props.config.spacerHeight ? `ms-${this.props.config.spacerHeight}` : 'ms-spacer';\n const viewProps = {\n // Context for telemetry and raw data for C1 to do customization\n // Including computed data, state data and methods\n ...this.props,\n className: className && classnames(spacerClass, className) || spacerClass\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n}\n\nexport default Spacer;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { isNonceEnabled, SDK_FRAGMENT_NAME } from '@msdyn365-commerce/core-internal';\nimport * as React from 'react';\nimport { isAbsoluteUrl, isRelativeUrl, logDebug, logError } from '../../utils/script-utils';\nimport { IDefaultInlineScriptProps } from './default-inline-script.props.autogenerated';\n\n/**\n *\n * DefaultScript\n * @extends {React.PureComponent>}\n */\nclass DefaultInlineScript extends React.PureComponent> {\n constructor(props: IDefaultInlineScriptProps<{}>) {\n super(props);\n }\n\n public render(): JSX.Element | null {\n const { config } = this.props;\n logDebug(`Adding script tags for '${this.props.id}/${this.props.typeName}'`, this.props.telemetry);\n const source = config.inlineScript;\n\n if (!source || source === '' || isAbsoluteUrl(source) || isRelativeUrl(source)) {\n logError(\n 'Invalid inline script - Empty inline source defined or a url is being used as a source. Use default-external-script to load scripts from an external or relative url.',\n this.props.telemetry\n );\n return null;\n }\n\n if (source.includes('')) {\n logError('Invalid inline script - inline script should not contain html tags', this.props.telemetry);\n return null;\n }\n\n const nonceToken = this.props.context && isNonceEnabled(this.props.context.request);\n const scriptHtml = ``;\n return React.createElement(SDK_FRAGMENT_NAME, { key: this.props.id, dangerouslySetInnerHTML: { __html: scriptHtml } });\n }\n}\n\nexport default DefaultInlineScript;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nimport { isNonceEnabled, SDK_FRAGMENT_NAME } from '@msdyn365-commerce/core-internal';\nimport { IDefaultMetatagsData } from './default-metatags.data';\nimport { IDefaultMetatagsProps } from './default-metatags.props.autogenerated';\n\n/**\n *\n * DefaultPageSummaryMetadata component\n * @extends {React.PureComponent>}\n */\nclass DefaultMetaTags extends React.PureComponent> {\n public render(): JSX.Element {\n const { data, config } = this.props;\n const nonceToken = this.props.context && isNonceEnabled(this.props.context.request);\n let metaTagsHtml: string = '';\n let metaTags;\n if (config.metaTags) {\n metaTags = nonceToken ? this._addNonceToInlineScript(config.metaTags, nonceToken) : config.metaTags;\n metaTagsHtml = metaTags && metaTags.join('\\n');\n } else if (data.metaTags) {\n metaTags = data.metaTags;\n let metaTagsText = metaTags.map(simpleText => simpleText.text);\n metaTagsText = nonceToken ? this._addNonceToInlineScript(metaTagsText, nonceToken) : metaTagsText;\n metaTagsHtml = metaTagsText && metaTagsText.join('\\n');\n }\n return React.createElement(SDK_FRAGMENT_NAME, { key: this.props.id, dangerouslySetInnerHTML: { __html: metaTagsHtml } });\n }\n\n private _addNonceToInlineScript(metaTags: string[], nonceToken: string): string[] {\n const inlineScripRegex = /(.*?)<\\/script>/g;\n return metaTags\n .map(metaTag => {\n if (inlineScripRegex.test(metaTag)) {\n return metaTag.replace(/`;\n\n return React.createElement(SDK_FRAGMENT_NAME, { key: this.props.id, dangerouslySetInnerHTML: { __html: scriptHtml } });\n }\n}\n\nexport default DefaultExternalScript;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { HtmlHeadInclude, IAny, IGeneric } from '@msdyn365-commerce/core';\nimport * as React from 'react';\n\nimport { IDefaultPageSummaryData } from './default-page-summary.data';\nimport { IDefaultPageSummaryProps } from './default-page-summary.props.autogenerated';\n\n/**\n *\n * DefaultPageSummaryMetadata component.\n * @extends {React.PureComponent}\n */\nclass DefaultPageSummary extends React.PureComponent> {\n public render(): JSX.Element {\n if (this.props.data.pageSummary.result === undefined) {\n throw new Error('PageSummaryData input to page-summary is undefined. Unable to generate page-summary');\n }\n let {\n data: {\n pageSummary: {\n result: { title, description, keywords, sharingImageUrl, faviconUrl }\n }\n }\n } = this.props;\n\n const {\n config,\n context,\n data: {\n pageSummary: {\n result: { canonicalUrl }\n }\n }\n } = this.props;\n\n // Override values coming from data action if config values are provided\n title = config.title || title;\n description = config.description || description;\n keywords = config.keywords || keywords;\n sharingImageUrl = (config.sharingImage && config.sharingImage.src) || sharingImageUrl;\n faviconUrl = config.faviconUrl || faviconUrl;\n\n const pageTitle = this._constructPageTitle(title, context && context.request && context.request.app);\n return (\n <>\n \n {pageTitle && \n {pageTitle}\n }\n {description && }\n {keywords && }\n {canonicalUrl && }\n {faviconUrl && }\n \n {!config.disableOgTags && this._renderOgTags(pageTitle, description, sharingImageUrl)}\n {!config.disableTwitterTags && this._renderTwitterTags(pageTitle, description, sharingImageUrl)}\n \n );\n }\n\n private _renderOgTags(title: string | undefined, description: string | undefined, sharingImageUrl: string | undefined): JSX.Element {\n return (\n \n {title && }\n {description && }\n {sharingImageUrl && }\n \n \n );\n }\n\n private _renderTwitterTags(\n title: string | undefined,\n description: string | undefined,\n sharingImageUrl: string | undefined\n ): JSX.Element {\n return (\n \n {title && }\n {description && }\n {sharingImageUrl && }\n \n \n );\n }\n\n private _constructPageTitle(title: string | undefined, app: IGeneric): string | undefined {\n if (!title) {\n title = '';\n }\n\n const moduleConfig = this.props.config;\n if (moduleConfig && moduleConfig.ignoreTitleSuffixPrefix) {\n return title;\n }\n\n const appConfig = app && app.platform;\n if (appConfig) {\n if (appConfig.pageTitlePrefix) {\n title = (appConfig.pageTitlePrefix as string) + title;\n }\n if (appConfig.pageTitleSuffix) {\n title += (appConfig.pageTitleSuffix as string);\n }\n }\n\n return title;\n }\n}\n\nexport default DefaultPageSummary;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport msdyn365Commerce, {\n constructViewportInformationForImage,\n getImageResizeUrl,\n getLargestGridSettingViewportName,\n getMinMaxWidth,\n IAny,\n IGeneric,\n IViewPort,\n Viewport\n} from '@msdyn365-commerce/core-internal';\nimport { cloneDeep as _cloneDeep } from 'lodash';\nimport {\n BackgroundImageRepeat,\n BackgroundImageSize,\n IBackgroundImageAttributes,\n IBackgroundImageLazyloadAttributes,\n IBackgroundImageProps,\n IBackgroundImageStyle\n} from './container-background-image-interfaces';\n\nconst getBackgroundRepeatProperty = (size: string | undefined, repeat: string | undefined): BackgroundImageRepeat => {\n if (!size || size === 'cover') {\n return 'no-repeat';\n }\n switch (repeat) {\n case 'noRepeat':\n return 'no-repeat';\n case 'repeat':\n return 'repeat';\n default:\n return 'no-repeat';\n }\n};\n\nconst getBackgroundSizeProperty = (size: string | undefined): BackgroundImageSize => {\n switch (size) {\n case 'cover':\n return 'cover';\n case 'contain':\n return 'contain';\n case 'default':\n default:\n return undefined;\n }\n};\n\nconst getDefaultViewports = (): IViewPort => {\n return {\n xs: {\n w: 800,\n h: 600\n },\n sm: {\n w: 1200,\n h: 900\n },\n md: {\n w: 1600,\n h: 900\n },\n lg: {\n w: 1600,\n h: 700\n },\n xl: {\n w: 1600,\n h: 700\n }\n };\n};\n\nconst getAuthoringViewport = (moduleName: string | undefined, layout: string | undefined): IViewPort | undefined => {\n if (!msdyn365Commerce.isBrowser) {\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const authoringHelper = (window as any)._msdyn365.authoringHelper;\n if (!authoringHelper) {\n return;\n }\n\n // if authoring helper is setup, component is rendering from site builder. Build viewport based on layout selected.\n return constructViewportInformationForImage(moduleName, layout, 'backgroundImage', authoringHelper?.themeSettings) as IViewPort;\n};\n\nexport const buildBackgroundImageStylesByViewport = (props: IBackgroundImageProps): IGeneric => {\n const { containerType, image, request, configs } = props;\n\n const gridSettings = request.gridSettings ?? {};\n const imageSettings = image.imageSettings;\n\n const styles: IGeneric = {};\n\n const largestGridSettingViewportName = getLargestGridSettingViewportName(gridSettings);\n if (largestGridSettingViewportName && imageSettings) {\n // in site builder the layout may change, so use authoring viewports.\n const authoringViewPorts = getAuthoringViewport(containerType, configs?.layout);\n const imgSettings = {\n ...imageSettings,\n viewports: { ..._cloneDeep(authoringViewPorts || imageSettings.viewports || getDefaultViewports()) }\n };\n\n // Skip resizing width and height for background images.\n const skipWidthAndHeightSettings = true;\n Object.keys(imgSettings.viewports).map(vp => {\n const viewport = vp as Viewport;\n const minMaxWidth = getMinMaxWidth(gridSettings, imgSettings, viewport, largestGridSettingViewportName);\n const urlSrc = getImageResizeUrl(\n image.src,\n // eslint-disable-next-line security/detect-object-injection -- bracket object notation with user input present leads to eslint security issue.\n imgSettings.viewports[viewport],\n imgSettings,\n skipWidthAndHeightSettings,\n image?.externalProvider,\n request?.apiSettings\n );\n // eslint-disable-next-line security/detect-object-injection -- bracket object notation with user input present leads to eslint security issue.\n styles[viewport] = {\n maxWidth: minMaxWidth.max,\n minWidth: minMaxWidth.min,\n // eslint-disable-next-line security/detect-object-injection -- bracket object notation with user input present leads to eslint security issue.\n minHeight: imgSettings.viewports[viewport]?.h,\n backgroundImage: urlSrc,\n backgroundRepeat: getBackgroundRepeatProperty(configs?.size, configs?.repeat),\n backgroundSize: getBackgroundSizeProperty(configs?.size),\n backgroundPosition: 'center center'\n };\n });\n }\n\n return styles;\n};\n\nexport const setStyleAttribute = (currentStyle: IBackgroundImageStyle): IGeneric => {\n let style: IGeneric = {};\n if (currentStyle) {\n style = { ...currentStyle };\n style['minWidth'] = undefined;\n style['width'] = '100%';\n if (currentStyle.backgroundImage) {\n style['backgroundImage'] = `url('${currentStyle.backgroundImage}')`;\n }\n }\n return style;\n};\n\nexport const getBackgroundImageLazyloadAttributes = (\n className: string,\n currentStyle: IBackgroundImageStyle | undefined,\n styles: IGeneric\n): IBackgroundImageLazyloadAttributes => {\n const attributes = {\n role: 'img',\n className: `${className} lazyload`,\n 'data-bgset': getDataBgSetAttribute(styles)\n };\n\n if (currentStyle) {\n attributes['style'] = setStyleAttribute(currentStyle);\n // On lazyload, lazysizes plugin should pick which background image to use based on data-bgset attribute.\n attributes['style']['backgroundImage'] = undefined;\n }\n return attributes;\n};\n\nexport const getBackgroundImageAttributes = (\n className: string,\n currentStyle: IBackgroundImageStyle | undefined\n): IBackgroundImageAttributes => {\n const attributes = {\n role: 'img',\n className\n };\n\n if (currentStyle) {\n attributes['style'] = setStyleAttribute(currentStyle);\n }\n return attributes;\n};\n\nexport const getBgSetMinMaxWidthAttribute = (style: IBackgroundImageStyle): string => {\n if (style.maxWidth) {\n return `[(max-width: ${style.maxWidth}px)]`;\n }\n return '';\n};\n\nexport const getDataBgSetAttribute = (styles: IGeneric): string => {\n const dataBgSetAttributes: string[] = [];\n Object.keys(styles).map(vp => {\n // eslint-disable-next-line security/detect-object-injection -- bracket object notation with user input present leads to eslint security issue.\n if (styles[vp].backgroundImage) {\n // eslint-disable-next-line security/detect-object-injection -- bracket object notation with user input present leads to eslint security issue.\n dataBgSetAttributes.push(`${styles[vp].backgroundImage} ${getBgSetMinMaxWidthAttribute(styles[vp])}`);\n }\n });\n\n return dataBgSetAttributes.join(' | ');\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport msdyn365Commerce, { getLargestGridSettingViewportName, IGeneric, isAuthoringEditEnabled } from '@msdyn365-commerce/core-internal';\nimport * as React from 'react';\nimport { isEqual as _isEqual } from 'lodash';\nimport {\n buildBackgroundImageStylesByViewport,\n getBackgroundImageAttributes,\n getBackgroundImageLazyloadAttributes\n} from './container-background-image-helper';\nimport {\n IBackgroundImageAttributes,\n IBackgroundImageProps,\n IBackgroundImageState,\n IBackgroundImageStyle\n} from './container-background-image-interfaces';\n\nconst BACKGROUND_IMAGE_CLASS_NAME = 'ms-container-background-image';\n\n/**\n * BackgroundImage component\n * @extends {React.PureComponent}\n */\nexport class BackgroundImage extends React.PureComponent {\n private stylesByViewport: IGeneric;\n private currentStyle: IBackgroundImageStyle | undefined;\n private mounted: boolean;\n\n constructor(props: IBackgroundImageProps, state: IBackgroundImageState) {\n super(props);\n this.stylesByViewport = buildBackgroundImageStylesByViewport(this.props);\n this._onChangeHandler = this._onChangeHandler.bind(this);\n this.currentStyle = this._getCurrentStyle();\n this.mounted = false;\n this._componentResize = this._componentResize.bind(this);\n this._getCurrentStyle = this._getCurrentStyle.bind(this);\n this.state = { updateAttributes: false };\n }\n\n public componentDidMount(): void {\n if (msdyn365Commerce.isBrowser) {\n window.addEventListener('resize', this._componentResize);\n this.mounted = true;\n this._componentResize();\n }\n }\n\n public componentWillUnmount(): void {\n if (msdyn365Commerce.isBrowser) {\n window.removeEventListener('resize', this._componentResize);\n this.mounted = false;\n }\n }\n\n public shouldComponentUpdate(nextProps: IBackgroundImageProps, nextState: { updateAttributes: boolean }): boolean {\n if (\n this.state !== nextState ||\n this.props.request?.gridSettings !== nextProps.request?.gridSettings ||\n this.props.configs.repeat !== nextProps.configs.repeat ||\n this.props.configs.size !== nextProps.configs.size ||\n this.props.configs.layout !== nextProps.configs.layout ||\n this.props.image?.imageSettings !== nextProps.image?.imageSettings ||\n this.props.image?.src !== nextProps.image?.src\n ) {\n return true;\n }\n return false;\n }\n\n public render(): JSX.Element | null {\n const { children } = this.props;\n\n try {\n this.stylesByViewport = buildBackgroundImageStylesByViewport(this.props);\n this.currentStyle = this._getCurrentStyle();\n\n if (this.currentStyle) {\n const backgroundImageClassName = isAuthoringEditEnabled(this.props.request)\n ? `${BACKGROUND_IMAGE_CLASS_NAME} ms-editable-field enabled`\n : BACKGROUND_IMAGE_CLASS_NAME;\n const processedAtributes = this._processAttributes(\n backgroundImageClassName,\n this.currentStyle,\n this.stylesByViewport,\n this._isLazyload()\n );\n const attributes = this._getAttributes(processedAtributes);\n const eventHandlers = isAuthoringEditEnabled(this.props.request) ? { onDoubleClick: this._onChangeHandler } : {};\n\n if (this.state.updateAttributes) {\n // Update component with the latest attributes.\n return (\n
\n {children}\n
\n );\n } else if (this._isLazyload()) {\n // On lazyload, only include the class name on the first render.\n return (\n
\n {children}\n
\n );\n } else {\n // On lazyload disabled, render the default attributes from server side.\n return (\n
\n {children}\n
\n );\n }\n } else {\n // in no style is found, return the container content.\n return <>{children};\n }\n } catch {\n // in case of any failure, return the container content.\n return <>{children};\n }\n }\n\n private _processAttributes(\n className: string,\n currentStyle: IBackgroundImageStyle,\n stylesByViewport: IGeneric,\n lazyLoad: boolean\n ) {\n if (lazyLoad) {\n return getBackgroundImageLazyloadAttributes(className, currentStyle, stylesByViewport);\n } else {\n return getBackgroundImageAttributes(className, currentStyle);\n }\n }\n\n private _getAttributes(processedAtributes: IBackgroundImageAttributes) {\n return { ...processedAtributes, style: { ...processedAtributes?.style } };\n }\n\n private _onChangeHandler(event: React.SyntheticEvent | { target: { value: string } }): void {\n if (event.target === (event as React.SyntheticEvent).currentTarget) {\n const binding: any = this.props.image;\n const eventTarget: any = event.target;\n binding.$type = eventTarget.value;\n }\n }\n\n private _componentResize(): void {\n if (msdyn365Commerce.isBrowser) {\n const selectedStyle = this._getCurrentStyle();\n\n if (this.mounted || (selectedStyle && !_isEqual(this.currentStyle, selectedStyle))) {\n this.setState({ updateAttributes: true });\n }\n }\n }\n\n private _getCurrentStyle(): IBackgroundImageStyle | undefined {\n if (msdyn365Commerce.isBrowser) {\n const winInnerWidth: number = window.innerWidth;\n let selectedStyle: IBackgroundImageStyle | undefined;\n Object.keys(this.stylesByViewport).map(vp => {\n if (\n // eslint-disable-next-line security/detect-object-injection -- bracket object notation with user input present leads to eslint security issue.\n (this.stylesByViewport[vp]?.minWidth || this.stylesByViewport[vp]?.maxWidth) &&\n // eslint-disable-next-line security/detect-object-injection -- bracket object notation with user input present leads to eslint security issue.\n (this.stylesByViewport[vp]?.minWidth || 0) <= winInnerWidth &&\n // eslint-disable-next-line security/detect-object-injection -- bracket object notation with user input present leads to eslint security issue.\n winInnerWidth <= (this.stylesByViewport[vp]?.maxWidth || Number.MAX_SAFE_INTEGER)\n ) {\n // eslint-disable-next-line security/detect-object-injection -- bracket object notation with user input present leads to eslint security issue.\n selectedStyle = this.stylesByViewport[vp];\n }\n });\n return selectedStyle;\n } else {\n return this._getDefaultStyle();\n }\n }\n\n private _isLazyload(): boolean {\n // Lazyload by default if nothing is specified\n return !this.props.image?.imageSettings?.disableLazyLoad;\n }\n\n private _getDefaultStyle(): IBackgroundImageStyle | undefined {\n const { request } = this.props;\n const largestGridSettingViewportName = getLargestGridSettingViewportName(request.gridSettings ?? {});\n // eslint-disable-next-line security/detect-object-injection -- bracket object notation with user input present leads to eslint security issue.\n return this.stylesByViewport[largestGridSettingViewportName];\n }\n\n private _getDefaultAttributes(): IBackgroundImageAttributes {\n const style = this._getDefaultStyle();\n const processedAtributes = style\n ? this._processAttributes(BACKGROUND_IMAGE_CLASS_NAME, style, this.stylesByViewport, this._isLazyload())\n : {};\n return this._getAttributes(processedAtributes);\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ContentEditableEvent, IImageData, IRequestContext, Text } from '@msdyn365-commerce/core';\nimport * as React from 'react';\nimport { BackgroundImage } from './container-background-image/container-backgroud-image';\n\n/**\n * Heading options\n */\nexport interface IHeadingComponentProps {\n /**\n * Heading text\n */\n headingText?: string;\n /**\n * Heading tag (h1, h2, h3, h4, h5, h6)\n */\n tag?: HeadingTag;\n /**\n * Heading text size (sm, md, lg, xl)\n */\n textSize?: TextSize;\n\n requestContext: IRequestContext;\n\n handleTextChange(event: ContentEditableEvent): string;\n}\n\nexport type HeadingTag = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\nexport type TextSize = 'sm' | 'md' | 'lg' | 'xl';\n\n/**\n * Container class options\n */\nexport interface IContainerProps {\n /**\n * CSS class name\n */\n className?: string;\n /**\n * Bootstrap supported container types\n */\n containerType?: string;\n /**\n * type name\n */\n typeName?: string;\n /**\n * id of container\n */\n id?: string;\n /**\n * React children\n */\n children: React.ReactNode;\n /**\n * Request context\n */\n request?: IRequestContext;\n /**\n * background image\n */\n backgroundImage?: IImageData;\n /**\n * background image repeat property\n */\n backgroundImageRepeat?: string;\n /**\n * background image size property\n */\n backgroundImageSize?: string;\n /**\n * module layout property\n */\n moduleLayout?: string;\n}\n\nconst getContainerType = (containerType: string | undefined) => {\n switch (containerType) {\n case 'container':\n return 'container';\n case 'fluid':\n default:\n return 'fluid';\n }\n};\n\n/**\n * HOC to create bootstrap container div. If no container type is specified children are rendered.\n * @param options IContainerClasses\n */\nexport const Container: React.SFC = (props: IContainerProps): JSX.Element => {\n const {\n containerType,\n className,\n typeName,\n id,\n children,\n backgroundImage,\n request,\n backgroundImageRepeat,\n backgroundImageSize,\n moduleLayout\n } = props;\n const customClassName = className ? ` ${className}` : '';\n\n let containerContent = children;\n if (containerType) {\n containerContent =
{containerContent}
;\n }\n\n if (backgroundImage && backgroundImage.src && backgroundImage.imageSettings && request) {\n containerContent = (\n \n {containerContent}\n \n );\n }\n\n return containerType ? (\n
{containerContent}
\n ) : (\n
{containerContent}
\n );\n};\n\nexport const HeadingComponent = (props: IHeadingComponentProps & { className: string }): JSX.Element | null => {\n const { tag, headingText, textSize, className } = props;\n const Tag = tag || 'h2';\n const classNameWithHeading = textSize ? `heading ${textSize} ${className}` : `heading ${className}`;\n return (\n (headingText && (\n \n )) ||\n null\n );\n};\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport * as React from 'react';\n\nimport { ISpacerViewProps } from './spacer';\n\nconst SpacerView: React.FC = props => (\n
\n);\n\nexport default SpacerView;\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 * as React from 'react';\r\nimport { useEffect, useState } from 'react';\r\nimport { ILastViewedViewProps } from './last-viewed';\r\n\r\nexport interface ILastViewed {\r\n productName: string;\r\n prodImage: string;\r\n prodURL: string;\r\n}\r\n\r\nexport default (props: ILastViewedViewProps) => {\r\n const lastRecord: ILastViewed[] = [];\r\n\r\n const [lastRecordDetails, setLastRecordDetails] = useState(lastRecord);\r\n\r\n useEffect(() => {\r\n const product: any = localStorage.getItem('productInfo');\r\n const finalLastRecord = JSON.parse(product);\r\n\r\n if (finalLastRecord && finalLastRecord.length) {\r\n for (let i = 0; i < finalLastRecord.length; i++) {\r\n const prodDetails: ILastViewed = {\r\n productName: '',\r\n prodImage: '',\r\n prodURL: ''\r\n };\r\n prodDetails.productName = finalLastRecord[i]['productName'];\r\n prodDetails.prodImage = finalLastRecord[i]['prodImage'];\r\n prodDetails.prodURL = finalLastRecord[i]['prodURL'];\r\n lastRecord.push(prodDetails);\r\n }\r\n setLastRecordDetails([...lastRecord]);\r\n }\r\n }, []);\r\n\r\n return (\r\n <>\r\n {lastRecordDetails.length > 0 && (\r\n
\r\n
\r\n

RECENTLY VIEWED PRODUCTS

\r\n
\r\n \r\n
\r\n
\r\n
\r\n )}\r\n \r\n );\r\n};\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { SDK_FRAGMENT_NAME } from '@msdyn365-commerce/core-internal';\nimport * as React from 'react';\nimport { isAbsoluteUrl, isRelativeUrl, logDebug, logError } from '../../utils/script-utils';\nimport { IDefaultInlineStyleProps } from './default-inline-style.props.autogenerated';\n\n/**\n *\n * DefaultStyle\n * @extends {React.PureComponent>}\n */\n\nconst DefaultInlineStyle = (props: IDefaultInlineStyleProps<{}>) => {\n const { config, id, typeName, telemetry } = props;\n logDebug(`Adding style tags for '${id}/${typeName}'`, telemetry);\n const source = config.inlineStyle;\n\n if (!source || source === '' || isAbsoluteUrl(source) || isRelativeUrl(source)) {\n logError('Invalid inline style - Empty inline source defined or a url is being used as a source.', telemetry);\n return null;\n }\n\n if (source.includes('')) {\n logError('Invalid inline style - inline style should not contain html tags', telemetry);\n return null;\n }\n\n const styleHtml = ``;\n return React.createElement(SDK_FRAGMENT_NAME, { key: id, dangerouslySetInnerHTML: { __html: styleHtml } });\n};\n\nexport default DefaultInlineStyle;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { HtmlHeadInclude, IAny, IGeneric } from '@msdyn365-commerce/core';\nimport * as React from 'react';\n\nimport { IProductPageSummaryData } from './product-page-summary.data';\nimport { IProductPageSummaryProps } from './product-page-summary.props.autogenerated';\n\n/**\n *\n * ProductPageSummary component.\n * @extends {React.PureComponent}\n */\nclass ProductPageSummary extends React.PureComponent> {\n public render(): JSX.Element {\n if (this.props.data.productPageSummary.result === undefined) {\n throw new Error('PageSummaryData input to page-summary is undefined. Unable to generate page-summary');\n }\n let {\n data: {\n productPageSummary: {\n result: { title, description, keywords, sharingImageUrl, faviconUrl }\n }\n }\n } = this.props;\n\n const {\n config,\n context,\n data: {\n productPageSummary: {\n result: { canonicalUrl, productId, productBrand, price }\n }\n }\n } = this.props;\n\n // Product SEO metadata specific information - non-overridable\n const productName = title;\n const productDescription = description;\n const productImageUrl = sharingImageUrl;\n\n // Override values coming from data action if config values are provided\n title = config.title || title;\n description = config.description || description;\n keywords = config.keywords || keywords;\n sharingImageUrl = (config.sharingImage && config.sharingImage.src) || sharingImageUrl;\n faviconUrl = config.faviconUrl || faviconUrl;\n\n // Construct page title with suffix and prefix if provided from app settings\n const pageTitle = this._constructPageTitle(title, context && context.request && context.request.app);\n return (\n <>\n \n {pageTitle && \n {pageTitle}\n }\n {description && }\n {keywords && }\n {canonicalUrl && }\n {faviconUrl && }\n \n {this._renderProductMetadata(productName, productDescription, productImageUrl, canonicalUrl, productId, price, context.request.channel?.Currency, productBrand)}\n {!config.disableOgTags && this._renderOgTags(pageTitle, description, sharingImageUrl)}\n {!config.disableTwitterTags && this._renderTwitterTags(pageTitle, description, sharingImageUrl)}\n \n );\n }\n\n /**\n * Renders the facebook and other social media specific metadata tags.\n *\n * @param title Page title.\n * @param description Product description.\n * @param sharingImageUrl Primary product image url.\n */\n private _renderOgTags(title: string | undefined, description: string | undefined, sharingImageUrl: string | undefined): JSX.Element {\n return (\n \n {title && }\n {description && }\n {sharingImageUrl && }\n \n \n );\n }\n\n /**\n * Constructs and renders the JSON-LD tag used to output product specific metadata used by search engine crawlers.\n *\n * @param productName Product name.\n * @param description Product description.\n * @param sharingImageUrl Primary product image url.\n * @param canonicalUrl Product canonical url.\n * @param productId Master product id.\n * @param price Proudct price.\n * @param currencyCode Current channel currency code.\n * @param productBrand Product brand.\n */\n private _renderProductMetadata(productName: string | undefined,\n description: string | undefined,\n sharingImageUrl: string | undefined,\n canonicalUrl: string | undefined,\n productId: number | undefined,\n price: number | undefined,\n currencyCode: string | undefined,\n productBrand: string | undefined): JSX.Element {\n // Construct the JSON-LD data that contains the product metadata information used by search enginge crawlers\n const productMetaData = JSON.stringify({\n '@context': 'http://schema.org',\n '@type': 'Product',\n name: productName,\n description,\n image: sharingImageUrl,\n sku: productId,\n brand: {\n '@type': 'Brand',\n name: productBrand\n },\n offers: {\n '@type': 'Offer',\n url: canonicalUrl,\n priceCurrency: currencyCode,\n price\n }\n });\n return (\n \n\n