{"version":3,"file":"static/js/20.f64c70e70ab644726911.chunk.js","mappings":"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","sources":["webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/catalog-picker/catalog-picker.tsx?02aa","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/catalog-picker/catalog-picker.view.tsx?1e13","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/content-block/components/additional-content.tsx?d5f9","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/content-block/components/links.tsx?abbf","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/content-block/content-block.tsx?3084","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/content-block/content-block.view.tsx?1773","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/footer-item/footer-item.tsx?074a","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/footer-item/footer-item.view.tsx?c5af","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/navigation-menu/navigation-menu.data.ts?9815","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/navigation-menu/navigation-menu.tsx?2bef","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/navigation-menu/navigation-menu.view.tsx?c594","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/site-picker/site-picker.tsx?b9ec","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/site-picker/site-picker.view.tsx?5319","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/social-share/social-share.tsx?899b","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/social-share/social-share.view.tsx?dcdf"],"sourcesContent":["/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport Msdyn365, { ContentEditableEvent, getUrlSync, Image, RichTextComponent, Text } from '@msdyn365-commerce/core';\nimport { ProductCatalog } from '@msdyn365-commerce/retail-proxy';\nimport { Button, IModuleProps } from '@msdyn365-commerce-modules/utilities';\nimport React, { ReactNode } from 'react';\n\nimport { ICatalogPickerData } from './catalog-picker.data';\nimport { ICatalogPickerProps } from './catalog-picker.props.autogenerated';\n\n/**\n * ICatalogPickerViewProps.\n */\nexport interface ICatalogPickerViewProps extends ICatalogPickerProps {\n catalogPicker: IModuleProps;\n heading: React.ReactNode;\n paragraph: React.ReactNode;\n catalogs: ReactNode;\n}\n\n/**\n * CatalogPicker component.\n * @extends {React.PureComponent>}\n */\nexport class CatalogPicker extends React.PureComponent> {\n private static readonly _moduleClassName = 'ms-catalog-picker';\n\n public constructor(props: ICatalogPickerViewProps) {\n super(props);\n }\n\n public render(): JSX.Element | null {\n const {\n heading,\n paragraph\n } = this.props.config;\n\n const catalogPickerHeading = heading && (\n \n );\n\n const catalogPickerParagraph = paragraph && (\n \n );\n const viewProps = {\n ...this.props,\n handleText: this.handleTextChange,\n catalogPicker: {\n moduleProps: this.props,\n className: CatalogPicker._moduleClassName\n },\n heading: catalogPickerHeading,\n paragraph: catalogPickerParagraph,\n catalogs: this._renderCatalogPicker()\n };\n\n return this.props.renderView(viewProps);\n }\n\n /**\n * Handle text change.\n * @param event - The dialog that is allowed to remain open.\n */\n public handleTextChange = (event: ContentEditableEvent): void => {\n this.props.config.heading!.text = event.target.value;\n };\n\n /**\n * Handle paragraph change.\n * @param event - The dialog that is allowed to remain open.\n */\n public handleParagraphChange = (event: ContentEditableEvent): void => {\n this.props.config.paragraph = event.target.value;\n };\n\n private _renderCatalogPickerButton(item: ProductCatalog): React.ReactNode {\n const catalogId = `${item.RecordId}`;\n if (this.props.context.request.user.catalogId === catalogId) {\n return (\n
\n {this.props.resources.currentCatalogText}\n
\n );\n }\n let linkToCatalog = '';\n if (Msdyn365.isBrowser) {\n const catalogUrl = getUrlSync('home', this.props.context.actionContext) ?? '';\n const fullUrl = new URL(catalogUrl, window.location.href);\n fullUrl.searchParams.set('catalogId', catalogId);\n linkToCatalog = fullUrl.href;\n }\n return (\n \n {this.props.resources.changeCatalogButtonText}\n \n );\n }\n\n private _renderCatalogPicker(): React.ReactNode {\n const catalogs = this.props.data.catalogs.result as ProductCatalog[];\n\n const isBrowser = Msdyn365.isBrowser;\n\n return (\n
\n {\n catalogs.map(item => {\n const reactKey = `${JSON.stringify(item)}-${String(isBrowser)}`;\n return (\n \n

\n {\n item.Name\n }\n

\n
\n \n
\n {this._renderCatalogPickerButton(item)}\n
\n
\n
\n );\n })\n }\n \n );\n }\n}\n\nexport default CatalogPicker;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { Module } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ICatalogPickerViewProps } from './catalog-picker';\n\n/**\n * ICatalogPickerViewProps.\n * @param props - ICatalogPickerViewProps.\n * @returns - Render Catalog Picker.\n */\nexport const CatalogPickerViewFunctionComponent: React.FC = props => {\n const { catalogPicker } = props;\n return (\n \n {props.heading}\n {props.paragraph}\n {props.catalogs}\n \n );\n};\n\nexport default CatalogPickerViewFunctionComponent;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IAdditionalContentData, ILinksData } from '../content-block.props.autogenerated';\n\n/**\n * IContentBlockAdditionalContentProps: Interface for\n * Content Block Additional Content Component props.\n */\nexport interface IContentBlockAdditionalContentProps {\n requestContext: Msdyn365.IRequestContext;\n additionalContent: IAdditionalContentData[] | undefined;\n handleAdditionalTextChange(index: number, event: Msdyn365.ContentEditableEvent): void;\n handleAdditionalParagraphChange(index: number, event: Msdyn365.ContentEditableEvent): void;\n handleAdditionalLinkTextChange(linkIndex: number, index: number, event: Msdyn365.ContentEditableEvent): void;\n}\n\n/**\n * IContentBlockAdditionalContentProps: Interface for\n * Content Block Additional Content view props.\n */\nexport interface IContentBlockAdditionalContentViewProps {\n additionalContentNode: INodeProps;\n additionalContentItems?: IContentBlockAdditionalContentItemViewProps[];\n}\n\n/**\n * IContentBlockAdditionalContentProps: Interface for\n * Content Block Additional Content Item view props.\n */\nexport interface IContentBlockAdditionalContentItemViewProps {\n heading: React.ReactNode;\n text: React.ReactNode;\n links: React.ReactNode;\n additionalContentItemContainer: INodeProps;\n additionalContentItemLinks: INodeProps;\n}\n\n/**\n * Renders additional content heading.\n * @param additionalContentHeading - Additional content heading.\n * @param props - Content Block Additional content component props.\n * @param itemIndex - Item index.\n * @returns Heading Node.\n */\nconst renderHeading = (additionalContentHeading: string, props: IContentBlockAdditionalContentProps, itemIndex: number) => {\n const requestContext = props.requestContext;\n return (\n {\n props.handleAdditionalTextChange(itemIndex, event);\n }, requestContext\n }}\n />);\n};\n\n/**\n * Renders additional content heading.\n * @param additionalContentParagraphText - Additional content paragraph text.\n * @param props - Content Block Additional content component props.\n * @param itemIndex - Item index.\n * @returns Paragraph Node.\n */\nconst renderParagraph = (additionalContentParagraphText: string, props: IContentBlockAdditionalContentProps, itemIndex: number) => {\n const requestContext = props.requestContext;\n return (\n {\n props.handleAdditionalTextChange(itemIndex, event);\n }, requestContext\n }}\n />);\n};\n\n/**\n * Renders additional content heading.\n * @param ctaLink - Additional content link.\n * @param props - Content Block Additional content component props.\n * @param itemIndex - Item index.\n * @param linkIndex - Additional content link index.\n * @returns Link Node.\n */\nconst renderLinks = (ctaLink: ILinksData, props: IContentBlockAdditionalContentProps, itemIndex: number, linkIndex: number) => {\n const editableLink: Msdyn365.ILinksData = {\n ariaLabel: ctaLink.ariaLabel,\n className: 'ms-content-block__details__additional-content-cta-links',\n linkText: ctaLink.linkText,\n linkUrl: ctaLink.linkUrl.destinationUrl,\n openInNewTab: ctaLink.openInNewTab,\n role: 'link'\n };\n const requestContext = props.requestContext;\n return (\n {\n props.handleAdditionalLinkTextChange(linkIndex, itemIndex, event);\n },\n requestContext\n }}\n />\n );\n};\n\n/**\n * Create node for each additonal content item.\n * @param item - Content block additonal content item props.\n * @param props - Content Block Additional content component props.\n * @param itemIndex - Item index.\n * @returns IContentBlockAdditionalContentItemViewProps.\n */\nconst assembleNode = (\n item: IAdditionalContentData,\n props: IContentBlockAdditionalContentProps,\n itemIndex: number\n): IContentBlockAdditionalContentItemViewProps => {\n const headingNode = item.heading && renderHeading(item.heading, props, itemIndex);\n const paragraphNode = item.subtext && renderParagraph(item.subtext, props, itemIndex);\n const linksNode = item.links?.map((ctaLink: ILinksData, index: number) => {\n return renderLinks(ctaLink, props, itemIndex, index);\n });\n\n return {\n heading: headingNode,\n text: paragraphNode,\n links: linksNode,\n additionalContentItemContainer: { className: 'ms-content-block__details__additional-content__container' },\n additionalContentItemLinks: { className: 'ms-content-block__details__additional-content-cta' }\n };\n};\n\n/**\n * ContentBlockAdditionalContent component.\n * @param props - Content Block Additional content component props.\n * @returns Content Block Additional content view props.\n */\nexport const contentBlockAdditionalContent = (props: IContentBlockAdditionalContentProps): IContentBlockAdditionalContentViewProps | undefined => {\n const { additionalContent } = props;\n if (!additionalContent) {\n return undefined;\n }\n\n const reactNodes: IContentBlockAdditionalContentItemViewProps[] = [];\n additionalContent.map((item, index: number) => {\n return reactNodes.push(assembleNode(item, props, index));\n });\n\n return {\n additionalContentNode: { className: 'ms-content-block__details__additional-content' },\n additionalContentItems: reactNodes\n };\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 Msdyn365 from '@msdyn365-commerce/core';\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ILinksData } from '../content-block.props.autogenerated';\n\nexport interface IContentCardLinks {\n links: ILinksData[];\n requestContext: Msdyn365.IRequestContext;\n telemetryContent: ITelemetryContent;\n role?: string;\n onTextChange?(index: number): (event: Msdyn365.ContentEditableEvent) => void;\n}\n\n/**\n *\n * ContentCardLinks component.\n * @extends {React.PureComponent}\n */\nexport class ContentCardLinks extends React.PureComponent {\n public render(): JSX.Element {\n const editableLinks = this._mapEditableLinks(this.props.links);\n return (\n
\n { editableLinks && editableLinks.length > 0 ? : null}\n
\n );\n }\n\n private readonly _mapEditableLinks = (linkdata: ILinksData[]): Msdyn365.ILinksData[] | null => {\n if (!linkdata || linkdata.length === 0) {\n return null;\n }\n const editableLinks: Msdyn365.ILinksData[] = [];\n linkdata.forEach((link, index) => {\n // Construct telemetry attribute to render\n const payLoad = getPayloadObject('click', this.props.telemetryContent, '', '');\n const linkText = link.linkText ? link.linkText : '';\n payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.props.telemetryContent, payLoad);\n const btnClass = index === 0 ? 'msc-cta__primary' : 'msc-cta__secondary';\n const editableLink: Msdyn365.ILinksData = {\n ariaLabel: link.ariaLabel,\n className: btnClass,\n linkText: link.linkText,\n linkUrl: link.linkUrl.destinationUrl,\n openInNewTab: link.openInNewTab,\n role: this.props.role,\n additionalProperties: attributes,\n onClick: onTelemetryClick(this.props.telemetryContent, payLoad, linkText)\n };\n editableLinks.push(editableLink);\n });\n\n return editableLinks;\n };\n}\nexport default ContentCardLinks;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { contentBlockAdditionalContent, IContentBlockAdditionalContentViewProps } from './components/additional-content';\nimport LinksComponent from './components/links';\nimport { actionableRegion as region, IContentBlockConfig, IContentBlockProps } from './content-block.props.autogenerated';\n\nexport interface IContentBlockViewProps extends IContentBlockProps<{}> {\n title?: React.ReactNode;\n text?: React.ReactNode;\n image?: React.ReactNode;\n links?: React.ReactNode;\n className?: string;\n contentBlockContainer: IModuleProps;\n imageContainer: INodeProps;\n detailsContainer: INodeProps;\n contentBlockAnchorTag?: INodeProps;\n imageLink?: string;\n imageAriaLabel?: string;\n additionalContent?: IContentBlockAdditionalContentViewProps;\n handleAdditionalText?(): void;\n handleAdditionalParagraph?(): void;\n handleAdditionalLinkTextChange?(): void;\n}\n\n/**\n * Site-builder configuration for the module.\n */\nexport interface IContentBlockFullConfig extends IContentBlockConfig {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- This field comes from SDK.\n msdyn365__moduleLayout?: string;\n}\n\n/**\n * ContentCard component.\n * @extends {React.PureComponent}\n */\nexport class ContentBlock extends React.PureComponent> {\n private readonly telemetryContent: ITelemetryContent = getTelemetryObject(this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry);\n\n public render(): JSX.Element | null {\n const {\n heading,\n paragraph,\n image,\n links,\n className,\n imageAriaLabel\n } = this.props.config;\n const contentBlockTitle = heading && (\n \n );\n const imageProps = {\n gridSettings: this.props.context.request.gridSettings ?? {},\n imageSettings: image?.imageSettings\n };\n const contentBlockLinks = links && ArrayExtensions.hasElements(links) && (\n \n );\n const contentBlockText = paragraph && (\n \n );\n const contentBlockImage = (\n \n );\n\n if (\n !contentBlockTitle &&\n !contentBlockText &&\n !contentBlockLinks\n ) {\n this.props.context.telemetry.error(\n 'Content block content is empty, module wont render.'\n );\n return null;\n }\n const contentBlockviewProps = {\n ...this.props,\n title: contentBlockTitle,\n text: contentBlockText,\n image: contentBlockImage,\n links: contentBlockLinks,\n moduleClass: this.props.config.className,\n contentBlockContainer: {\n moduleProps: this.props,\n className: classnames('ms-content-block', className)\n },\n imageContainer: { className: 'ms-content-block__image' },\n detailsContainer: { className: 'ms-content-block__details' },\n contentBlockAnchorTag: {\n tag: 'a',\n className: 'ms-content-block__link',\n role: 'link'\n },\n imageLink: this._getImageLink(),\n imageAriaLabel,\n additionalContent: contentBlockAdditionalContent({\n requestContext: this.props.context.request,\n additionalContent: this.props.config.additionalContent,\n handleAdditionalTextChange: this.handleAdditionalTextChange,\n handleAdditionalParagraphChange: this.handleAdditionalParagraphChange,\n handleAdditionalLinkTextChange: this.handleAdditionalLinkTextChange\n\n }),\n handleAdditionalText: this.handleAdditionalTextChange,\n handleAdditionalParagraph: this.handleAdditionalParagraphChange,\n handleAdditionalLinkTextChange: this.handleAdditionalLinkTextChange\n };\n\n return this.props.renderView(contentBlockviewProps) as React.ReactElement;\n }\n\n /**\n * To handle text change.\n * @param event - To handle text change event.\n * @name - HandleTextChange\n * @public\n * @returns - The Text value.\n */\n public handleTextChange = (event: Msdyn365.ContentEditableEvent) => this.props.config.heading!.text = event.target.value;\n\n /**\n * To handle paragraph change.\n * @param event - To handle text change event.\n * @name - HandleParagraphChange\n * @public\n * @returns - The Paragraph value.\n */\n public handleParagraphChange = (event: Msdyn365.ContentEditableEvent) => this.props.config.paragraph = event.target.value;\n\n /**\n * Handle link text change.\n * @param linkIndex - The link index.\n * @returns - Void.\n */\n public handleLinkTextChange = (linkIndex: number) => (event: Msdyn365.ContentEditableEvent) => {\n if (this.props.config.links && this.props.config.links[Number(linkIndex)]) {\n this.props.config.links[Number(linkIndex)].linkText = event.target.value;\n }\n };\n\n public handleAdditionalTextChange(index: number, event: Msdyn365.ContentEditableEvent): void {\n if (this.props.config.additionalContent) {\n this.props.config.additionalContent[Number(index)].heading = event.target.value;\n }\n }\n\n public handleAdditionalLinkTextChange(linkIndex: number, index: number, event: Msdyn365.ContentEditableEvent): void {\n const additionalContentObject = (this.props.config.additionalContent &&\n ArrayExtensions.hasElements(this.props.config.additionalContent) && this.props.config.additionalContent[Number(index)]) || {};\n if (additionalContentObject.links) {\n additionalContentObject.links[Number(linkIndex)].linkText = event.target.value;\n }\n }\n\n public handleAdditionalParagraphChange(index: number, event: Msdyn365.ContentEditableEvent): void {\n if (this.props.config.additionalContent) {\n this.props.config.additionalContent[Number(index)].subtext = event.target.value;\n }\n }\n\n private _getImageLink(): string | null {\n const { imageLink, links, actionableRegion } = this.props.config;\n if (actionableRegion === region.imageAndLinks) {\n if (imageLink?.destinationUrl) {\n return imageLink.destinationUrl;\n } else if (links && ArrayExtensions.hasElements(links) && links[0].linkUrl) {\n return links[0].linkUrl.destinationUrl;\n }\n return null;\n\n }\n return null;\n\n }\n}\n\nexport default ContentBlock;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IContentBlockAdditionalContentItemViewProps, IContentBlockAdditionalContentViewProps } from './components/additional-content';\nimport { IContentBlockViewProps } from './content-block';\n\n/**\n * Render Additional Content.\n * @param additionalContent - Additional content view props.\n * @returns JSX Element.\n */\nconst renderAdditionalContent = (additionalContent: IContentBlockAdditionalContentViewProps) => {\n return (\n \n {additionalContent.additionalContentItems?.map((item: IContentBlockAdditionalContentItemViewProps) => {\n return (\n <>\n {item.heading}\n \n {item.text}\n \n {item.links}\n \n \n \n );\n })}\n \n );\n};\n\nconst ContentBlockView: React.FC = (props) => {\n const {\n contentBlockContainer,\n imageContainer,\n detailsContainer,\n title,\n text,\n links,\n image,\n contentBlockAnchorTag,\n imageLink,\n imageAriaLabel,\n additionalContent\n } = props;\n\n if (imageLink) {\n return (\n \n \n \n {image}\n \n \n \n {title}\n {text}\n {links}\n {additionalContent && renderAdditionalContent(additionalContent)}\n \n \n );\n }\n return (\n \n \n {image}\n \n \n {title}\n {text}\n {links}\n {additionalContent && renderAdditionalContent(additionalContent)}\n \n \n );\n\n};\n\nexport default ContentBlockView;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { getPayloadObject, getTelemetryAttributes, getTelemetryObject, IModuleProps, INodeProps, IPayLoad, ITelemetryContent, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IFooterItemConfig, IFooterItemProps, IHeadingData, ILinkData } from './footer-item.props.autogenerated';\n\nexport interface IFooterViewProps extends IFooterItemProps {\n heading: React.ReactNode;\n image: React.ReactNode;\n text: React.ReactNode;\n linkText: React.ReactNode;\n className?: string;\n FooterItem: IModuleProps;\n HeadingContainer: INodeProps;\n ItemContainer: INodeProps;\n Link: INodeProps;\n EditableLink: React.ReactNode;\n}\n\n/**\n *\n * FooterItem component.\n * @extends {React.PureComponent>}\n */\nexport class FooterItem extends React.PureComponent> {\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly payLoad: IPayLoad;\n\n private attributes: Msdyn365.IDictionary | undefined;\n\n constructor(props: IFooterItemProps) {\n super(props);\n this.telemetryContent = getTelemetryObject(this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry);\n\n // Construct telemetry attribute to render\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\n }\n\n public render(): JSX.Element {\n const { heading, image, link, text } = this.props.config;\n const footerItemClassName = classnames('ms-footer__item', this.props.config.className);\n const linkText = link && link.linkText ? link.linkText : '';\n this.payLoad.contentAction.etext = linkText;\n this.attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n const viewProps: IFooterViewProps = {\n ...this.props,\n heading: this._createHeading(heading!),\n image: this._createImageMarkup(image!),\n text: this._createText(text!),\n linkText: this._createLinkText(link!),\n EditableLink: this._createLink(link!),\n\n FooterItem: {\n moduleProps: this.props,\n className: footerItemClassName\n },\n\n HeadingContainer: {\n className: 'ms-footer__heading'\n },\n\n ItemContainer: {\n className: 'ms-footer__link__container'\n },\n\n // @ts-expect-error\n Link: link && link.linkUrl && link.linkUrl.destinationUrl && {\n tag: 'a',\n role: 'link',\n className: 'ms-footer__link',\n href: link.linkUrl.destinationUrl,\n title: linkText,\n 'aria-label': link.ariaLabel,\n target: link.openInNewTab ? '_blank' : undefined,\n onClick: onTelemetryClick(this.telemetryContent, this.payLoad, linkText),\n ...this.attributes\n },\n className: footerItemClassName\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent) => this.props.config.heading!.text = event.target.value;\n\n public handleTextChange = (event: Msdyn365.ContentEditableEvent) => this.props.config.text = event.target.value;\n\n public handleLinkTextChange = (event: Msdyn365.ContentEditableEvent) => this.props.config.link!.linkText = event.target.value;\n\n private _createLink(link: ILinkData): React.ReactNode | null {\n if (link) {\n const linkText = link.linkText ? link.linkText : '';\n\n // TODO: Update the inner tag in the anchor link to span\n const editableLink: Msdyn365.ILinksData = {\n ariaLabel: link.ariaLabel,\n className: 'ms-footer__link',\n linkText,\n linkUrl: link.linkUrl.destinationUrl,\n openInNewTab: link.openInNewTab,\n role: 'link',\n additionalProperties: this.attributes!,\n onClick: onTelemetryClick(this.telemetryContent, this.payLoad, linkText)\n };\n return (\n \n );\n\n }\n return null;\n }\n\n private _createLinkText(link: ILinkData): React.ReactNode | null {\n if (!link || !link.linkText) {\n return null;\n }\n\n return (\n {link.linkText}\n );\n }\n\n private _createHeading(heading: IHeadingData): React.ReactNode | null {\n if (!heading || !heading.text || heading.text.length === 0) {\n return null;\n }\n\n return (\n \n );\n }\n\n private _createText(text: string): React.ReactNode | null {\n if (!text) {\n return null;\n }\n return (\n \n );\n }\n\n private _createImageMarkup(item: Msdyn365.IImageData, ariaHiddenAttr?: boolean): React.ReactNode | null {\n if (!item || !item.src || item.src.length === 0) {\n return null;\n }\n\n const defaultImageSettings: Msdyn365.IImageSettings = {\n viewports: {\n xs: { q: 'w=24&h=24&m=6', w: 0, h: 0 },\n lg: { q: 'w=24&h=24&m=6', w: 0, h: 0 }\n },\n lazyload: true\n };\n return (\n \n );\n }\n}\n\nexport default FooterItem;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IFooterViewProps } from './footer-item';\n\n/**\n *\n * FooterItemView component.\n * @extends {React.PureComponent}\n */\nexport class FooterItemView extends React.PureComponent {\n public render(): JSX.Element | null {\n const { FooterItem } = this.props;\n return (\n \n {this._renderElement(this.props)}\n \n );\n }\n\n private _renderElement(props: IFooterViewProps): React.ReactNode | null {\n const { heading, HeadingContainer, Link, linkText, image, text, EditableLink } = props;\n if (heading) {\n return (\n {' '}\n {heading}\n {' '}\n );\n } else if (Link && image) {\n return (\n \n {linkText}\n {image}\n \n );\n } else if (Link) {\n return (EditableLink);\n }\n return (\n <>\n {text}\n {image}\n \n );\n }\n}\n\nexport default FooterItemView;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CategoryHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { AsyncResult } from '@msdyn365-commerce/retail-proxy';\n\nimport { ICategoryPromotionalContentData } from './navigation-menu.props.autogenerated';\n\nexport interface INavigationMenuData {\n categories: AsyncResult;\n}\n\nexport interface IMenuItemData {\n id?: number;\n linkText?: string;\n linkURL?: string;\n imageSource?: string;\n imageDestinationURL?: string;\n subMenu?: IMenuItemData[];\n promotionalContent?: ICategoryPromotionalContentData[];\n menuSource?: string;\n shouldOpenNewTab?: boolean;\n}\n\n/**\n *\n * Menu type index id.\n */\nexport enum MenuTypeIndexId {\n Cms = 1000,\n Retail = 5000\n}\n\n/**\n *\n * Menu type source.\n */\nexport enum MenuSource {\n Cms = 'Cms',\n Retail = 'Retail'\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CategoryHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport MsDyn365, { IActionContext, IGridSettings, IImageSettings, isEmptyOrNullObject } from '@msdyn365-commerce/core';\nimport { TextValueTranslation } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, getCategoryUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport { addThrottledEvent, IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed, observable } from 'mobx';\nimport * as React from 'react';\n\nimport { IMenuItemData, INavigationMenuData, MenuSource, MenuTypeIndexId } from './navigation-menu.data';\nimport { ICmsNavItemsData, INavigationMenuProps, ISubMenusData, navigationMenuSource } from './navigation-menu.props.autogenerated';\n\nexport interface INavigationMenuViewProps extends INavigationMenuProps {\n className: string;\n menuItemData: IMenuItemData[];\n Navigation: IModuleProps;\n MenuList: INodeProps;\n ListItem: INodeProps;\n Link: INodeProps;\n Button: INodeProps;\n Span: INodeProps;\n ImageContainer: INodeProps;\n MobileDescriptionContainer: INodeProps;\n MobileBackButton: INodeProps;\n MobileDescriptionLabel: INodeProps;\n imageSettings: IImageSettings;\n gridSettings: IGridSettings;\n isMobileView: boolean;\n DivContainer?: INodeProps;\n ImageDivContainer?: INodeProps;\n showCategoryImage?: boolean;\n showPromotionalContent?: boolean;\n}\n\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\nexport interface INavigationMenuState {\n isMobile: boolean;\n}\n\n/**\n *\n * NavigationMenu component.\n * @extends {React.PureComponent>}\n */\nclass NavigationMenu extends React.PureComponent, INavigationMenuState> {\n private static CMSItemIdInit: number = MenuTypeIndexId.Cms;\n\n private static RSItemIdInit: number = MenuTypeIndexId.Retail;\n\n private resizeThrottledEventHandler?: (event: Event) => void;\n\n private menuItemList: IMenuItemData[];\n\n private isRetail: boolean = true;\n\n private isCMS: boolean = true;\n\n @observable\n private viewport: GridSize;\n\n public static getFriendlyName(locale: string, nameTranslations?: TextValueTranslation[]): string | undefined {\n let nameTranslation: TextValueTranslation | undefined;\n if (locale && nameTranslations && nameTranslations.length > 0) {\n nameTranslation = nameTranslations.find(item => item.Language!.toLowerCase() === locale.toLowerCase());\n }\n\n return nameTranslation && nameTranslation.Text;\n }\n\n constructor(props: INavigationMenuProps) {\n super(props);\n this._updateViewport = this._updateViewport.bind(this);\n this.viewport = props.context.request && props.context.request.device && props.context.request.device.Type === 'Mobile' ? 'xs' : 'lg';\n this._setNavigationSource(this.props.config && this.props.config.navigationMenuSource);\n this.state = { isMobile: this.isMobile };\n this.menuItemList = [];\n }\n\n @computed get isMobile(): boolean {\n return (this.viewport === 'xs' || this.viewport === 'sm');\n }\n\n public componentDidMount(): void {\n if (MsDyn365.isBrowser) {\n this.resizeThrottledEventHandler = addThrottledEvent(window, 'resize', this._updateViewport as EventListener);\n }\n this._updateViewport();\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser) {\n window.removeEventListener('resize', this.resizeThrottledEventHandler!, false);\n }\n }\n\n public render(): JSX.Element | null {\n this.menuItemList = this._mapData();\n if (isEmptyOrNullObject(this.props.data)) {\n this.props.telemetry.error('Navigatiomenu returned null');\n return null;\n }\n\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=224&h=300&m=6', w: 0, h: 0 },\n xl: { q: 'w=224&h=300&m=6', w: 0, h: 0 }\n },\n lazyload: true\n };\n\n const viewProps = {\n ...this.props,\n ...this.state,\n imageSettings: defaultImageSettings,\n gridSettings: this.props.context.request.gridSettings,\n Navigation: {\n moduleProps: this.props,\n className: classnames('ms-nav', this.props.config.className, this.state.isMobile ? 'mobile-vp' : 'desktop-vp'),\n tag: 'nav',\n role: this.isMobile ? 'listbox' : 'navigation',\n 'aria-label': this.props.resources.menuAriaLabel\n },\n MenuList: {\n className: 'ms-nav__list',\n tag: 'ul',\n role: 'menu'\n },\n ListItem: {\n className: 'ms-nav__list__item',\n role: 'presentation',\n tag: 'li'\n },\n showCategoryImage: this.props.config.displayCategoryImage || false,\n showPromotionalContent: this.props.config.displayPromotionalImage || false,\n Link: {\n tag: 'a',\n className: 'ms-nav__list__item__link',\n role: this.isMobile ? 'option' : 'menuitem'\n },\n DivContainer:\n {\n tag: 'div',\n className: 'ms-nav__feature'\n },\n ImageDivContainer:\n {\n tag: 'div',\n className: 'category-image',\n role: 'tabpanel'\n },\n Button: {\n className: 'ms-nav__list__item__button',\n tag: 'button',\n role: this.isMobile ? 'option' : 'menuitem',\n onClick: this.props\n },\n ImageContainer: {\n className: 'ms-nav__list__item__image'\n },\n Span: {\n className: 'ms-nav__list__item__span',\n tag: 'span'\n },\n MobileDescriptionContainer: {\n className: 'ms-nav__list__mobile__container'\n },\n MobileBackButton: {\n className: 'ms-nav__list__mobile__container__button',\n tag: 'button',\n 'aria-label': this.props.resources.backButtonAriaLabel,\n onClick: this.props\n },\n MobileDescriptionLabel: {\n className: 'ms-nav__list__mobile__container__span',\n tag: 'span'\n },\n isMobileView: this.state.isMobile,\n menuItemData: this.menuItemList,\n className: classnames('ms-nav', this.props.config.className)\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _mapData(): IMenuItemData[] {\n const { data, config } = this.props;\n const mergedData: IMenuItemData[] = [];\n if (this.isRetail && data && data.categories && data.categories.result && data.categories.result.length > 0) {\n data.categories.result.map((item: CategoryHierarchy, index) => (\n mergedData.push(this._constructMenuItemData(item, undefined, true, index, true))\n ));\n }\n\n if (this.isCMS && config.cmsNavItems && config.cmsNavItems.length > 0) {\n config.cmsNavItems.map((item: ICmsNavItemsData, idx: number) => (\n mergedData.push(this._constructMenuItemData(undefined, item, false, idx + 1))\n ));\n }\n return this._constructTopMenuItemData(mergedData);\n }\n\n private _constructTopMenuItemData(mergedData: IMenuItemData[]): IMenuItemData[] {\n const enableTopLevelMenu = this.props.config.enabletopMenu || false;\n if (!enableTopLevelMenu) {\n return mergedData;\n }\n const mergedRootMenuData: IMenuItemData[] = [];\n const topMenu = {\n id: 1,\n linkText: this.props.config.rootMenuNavigation || '...',\n linkURL: '#',\n imageSource: undefined,\n subMenu: mergedData\n } as IMenuItemData;\n mergedRootMenuData.push(topMenu);\n\n return mergedRootMenuData;\n }\n\n private _constructMenuItemData(retailItem?: CategoryHierarchy, cmsItem?: ICmsNavItemsData, isRetail?: boolean, idx?: number, addedAllMenu?: boolean): IMenuItemData {\n const locale = this.props.context && this.props.context.request && this.props.context.request.locale ? this.props.context.request.locale : 'en-us';\n const { categoryPromotionalContent } = this.props.config;\n\n // Filter category promotional data based on category name\n const promotionalData = retailItem && categoryPromotionalContent?.filter(\n promoItem => promoItem.categoryName?.toLowerCase() === retailItem?.Name?.toLowerCase());\n\n // First check if image is available from promotional data else read from retail server\n let imageSource: string = 'empty';\n if (ArrayExtensions.hasElements(retailItem?.Images) && retailItem!.Images[0].Uri) {\n imageSource = retailItem!.Images[0].Uri;\n }\n if (isRetail) {\n return {\n id: NavigationMenu.RSItemIdInit++,\n linkText: NavigationMenu.getFriendlyName(locale, retailItem?.NameTranslations) || '',\n linkURL: retailItem?.Url,\n imageSource,\n subMenu: this._getNestedChildren(retailItem, imageSource, addedAllMenu),\n promotionalContent: this.props.config.displayPromotionalImage && promotionalData,\n menuSource: MenuSource.Retail\n } as IMenuItemData;\n }\n return {\n id: NavigationMenu.CMSItemIdInit++,\n linkText: cmsItem && cmsItem.linkText || '',\n linkURL: cmsItem && cmsItem.linkUrl && cmsItem.linkUrl.destinationUrl || '',\n imageDestinationURL: cmsItem && cmsItem.imageLink && cmsItem.imageLink.destinationUrl || '',\n imageSource: cmsItem && cmsItem.image && cmsItem.image.src || '',\n subMenu: this._getCMSNestedChildren(cmsItem),\n menuSource: MenuSource.Cms,\n shouldOpenNewTab: cmsItem?.openInNewTab\n } as IMenuItemData;\n\n }\n\n private _getNestedChildren(category?: CategoryHierarchy, imageSourceUrl?: string, addedAllMenu: boolean = false): IMenuItemData[] {\n const nestedChildren: IMenuItemData[] = [];\n if (!category || !category.Children || category.Children.length === 0) {\n return [];\n }\n if (!this.props.config.enabletopMenu && addedAllMenu) {\n nestedChildren.push({ linkText: this.props.resources.allCategoryMenuText, imageSource: imageSourceUrl, linkURL: getCategoryUrl(category, this.props.context as unknown as IActionContext, {}) });\n }\n category.Children.map((item: CategoryHierarchy, index) => {\n nestedChildren.push(this._constructMenuItemData(item, undefined, true, index, false));\n });\n return nestedChildren;\n }\n\n private _getCMSNestedChildren(category?: ICmsNavItemsData): IMenuItemData[] {\n const nestedChildren: IMenuItemData[] = [];\n\n if (!category || !category.subMenus || category.subMenus.length === 0) {\n return [];\n }\n\n category.subMenus.map((item: ISubMenusData, idx: number) => {\n nestedChildren.push(this._constructMenuItemData(undefined, item, false, idx));\n });\n return nestedChildren;\n }\n\n private readonly _setNavigationSource = (sourceType?: navigationMenuSource): void => {\n switch (sourceType) {\n case navigationMenuSource.retailServerOnly:\n this.isRetail = true;\n this.isCMS = false;\n break;\n case navigationMenuSource.cmsOnly:\n this.isRetail = false;\n this.isCMS = true;\n break;\n case navigationMenuSource.all:\n this.isRetail = true;\n this.isCMS = true;\n break;\n default:\n }\n };\n\n private _updateViewport(): void {\n this.viewport = this._getViewport();\n this.setState({ isMobile: this.isMobile });\n }\n\n private _getViewport(): GridSize {\n const { context } = this.props;\n\n // Always render in mobile viewport on a mobile device\n if (context.request && context.request.device && context.request.device.Type === 'Mobile') {\n return 'xs';\n }\n\n if (MsDyn365.isBrowser && window.innerWidth) {\n const gridSettings = context.request.gridSettings;\n if (gridSettings) {\n if (gridSettings.xs && window.innerWidth <= gridSettings.xs.w) {\n return 'xs';\n } else if (gridSettings.sm && window.innerWidth <= gridSettings.sm.w) {\n return 'sm';\n } else if (gridSettings.md && window.innerWidth <= gridSettings.md.w) {\n return 'md';\n } else if (gridSettings.lg && window.innerWidth <= gridSettings.lg.w) {\n return 'lg';\n }\n return 'xl';\n\n }\n }\n\n return 'xs';\n }\n}\n\nexport default NavigationMenu;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport MsDyn365, { IImageData, IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { ArrayExtensions, generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport { getPayloadObject, getTelemetryAttributes, getTelemetryObject, IPayLoad, ITelemetryContent, Module, Node, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { INavigationMenuViewProps } from './navigation-menu';\nimport { IMenuItemData } from './navigation-menu.data';\n\ninterface INavigationState {\n parentMenu?: number;\n activeMenu?: number;\n categoryImage?: IImageData[] | null;\n mobileViewLabelText?: string;\n categoryImageAltText: string;\n}\n\n/**\n *\n * NavigationMenuView component.\n * @extends {React.PureComponent}\n */\nexport class NavigationMenuView extends React.PureComponent {\n private static isBackTrack: boolean = false;\n\n private currentLevel: number = 0;\n\n private readonly menuNode: React.RefObject;\n\n private readonly menuItemRef: React.RefObject;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly payLoad: IPayLoad;\n\n constructor(props: INavigationMenuViewProps) {\n super(props);\n this.menuNode = React.createRef();\n this.menuItemRef = React.createRef();\n this.state = { activeMenu: undefined, mobileViewLabelText: '', parentMenu: undefined, categoryImageAltText: '' };\n this._closeSubmenu = this._closeSubmenu.bind(this);\n this.telemetryContent = getTelemetryObject(this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry);\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\n }\n\n public componentDidMount(): void {\n if (MsDyn365.isBrowser) {\n document.body.addEventListener('mousedown', this._handleClickOutside);\n document.body.addEventListener('focusout', this._handleFocusOutside);\n }\n }\n\n public componentDidUpdate(): void {\n if (this.menuItemRef.current?.children[0] && this.props.isMobileView) {\n (this.menuItemRef.current.children[0] as HTMLElement).focus();\n }\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser) {\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\n document.body.removeEventListener('focusout', this._handleFocusOutside, false);\n }\n\n }\n\n public render(): JSX.Element | null {\n const { isMobileView, MenuList, MobileBackButton, MobileDescriptionContainer, MobileDescriptionLabel, Navigation } = this.props;\n\n this.currentLevel = 1;\n return (\n \n \n {isMobileView && this.state.activeMenu !== undefined &&\n \n \n \n {this.state.mobileViewLabelText}\n \n }\n {this._renderDisplay()}\n \n \n );\n }\n\n private _renderDisplay(): JSX.Element[] {\n const { ListItem, menuItemData, isMobileView } = this.props;\n const { activeMenu } = this.state;\n const menuItemList: JSX.Element[] = [];\n\n if (isMobileView && activeMenu !== undefined && menuItemData.length > 0) {\n let menuItem: IMenuItemData = {};\n for (const menuItemDatum of menuItemData) {\n if (menuItemDatum && menuItemDatum.id === activeMenu) {\n menuItem = menuItemDatum;\n !NavigationMenuView.isBackTrack ? this.setState({ parentMenu: undefined }) : this.setState({ parentMenu: undefined, mobileViewLabelText: menuItemDatum.linkText });\n break;\n }\n menuItem = this._getFromSubMenu(menuItemDatum) as IMenuItemData;\n if (menuItem && menuItem.id === activeMenu) {\n break;\n }\n }\n\n menuItem && menuItemList.push(\n \n {' '}\n {this._createMenuItemList(menuItem)}\n {' '}\n \n );\n } else {\n menuItemData.forEach((item: IMenuItemData, index: number) => {\n menuItemList.push(\n \n {this._createMenuItemList(item)}\n \n );\n });\n }\n\n return menuItemList;\n }\n\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\n const subMenus = item && item.subMenu;\n if (subMenus && subMenus.length > 0) {\n for (let i = 0; i <= subMenus.length - 1; i++) {\n if (subMenus[i].id === this.state.activeMenu) {\n !NavigationMenuView.isBackTrack ? this.setState(\n { parentMenu: item?.id }\n ) : this.setState(\n { parentMenu: item && item.id, mobileViewLabelText: subMenus[i].linkText }\n );\n return subMenus[i];\n }\n const found = this._getFromSubMenu(subMenus[i]);\n if (found) {\n return found;\n }\n }\n }\n this.props.context.telemetry.error('Submenu content is empty, module wont render.');\n return null;\n }\n\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\n if (menuItemData && menuItemData.subMenu && menuItemData.subMenu.length > 0) {\n if (this.props.isMobileView && this.state.activeMenu !== undefined) {\n return (this._renderSubMenu(menuItemData.subMenu, menuItemData.id, false));\n }\n return (\n <>\n {this._renderButtonMenuItem(menuItemData)}\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id, false)}\n \n );\n\n } else if (menuItemData && menuItemData.linkText && menuItemData.linkURL && menuItemData.linkURL.length > 0) {\n return (this._renderLinkMenuItem(menuItemData, menuItemData.id, false, true));\n } else if (menuItemData && menuItemData.linkText && !menuItemData.linkURL) {\n return (this._renderSpanMenuItem(menuItemData, menuItemData.id, true));\n }\n this.props.context.telemetry.error('Navigation menu content is empty, module wont render.');\n return null;\n }\n\n private _renderSubMenu(subMenus?: IMenuItemData[], activeMenu?: number, IsSubMenu?: boolean): JSX.Element | null {\n const { isMobileView, ListItem } = this.props;\n const enableMultiSupportMenu = this.props.config.enableMultilevelMenu || false;\n const multiLevelSupportedMenu = this.props.config.menuLevelSupport || 3;\n\n // Const isParentMenu:boolean= false;\n if (activeMenu && this.state.activeMenu !== activeMenu) {\n this.props.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\n return null;\n }\n\n if (!subMenus || subMenus.length === 0) {\n this.props.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\n return null;\n }\n\n let levelClassName: string = '';\n const menuOptions = subMenus && subMenus.map((option: IMenuItemData, idx: number) => {\n const hasOptions = (option.subMenu && option.subMenu.length > 0);\n let menuItem: JSX.Element | null;\n if (hasOptions && isMobileView) {\n menuItem = this._renderButtonMenuItem(option, activeMenu, idx);\n } else {\n menuItem = option.linkURL ? this._renderLinkMenuItem(option, idx) : this._renderSpanMenuItem(option);\n }\n\n let subMenu;\n const haveSubmenu = hasOptions && enableMultiSupportMenu && (this.currentLevel <= Math.round(multiLevelSupportedMenu) - 1);\n if (haveSubmenu) {\n this.currentLevel++;\n levelClassName = enableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\n subMenu = this._renderSubMenu(option.subMenu, isMobileView ? option.id : undefined, true);\n }\n return (\n \n { menuItem }\n { subMenu }\n \n );\n });\n return (this._renderMenu(levelClassName, menuOptions, activeMenu, IsSubMenu));\n }\n\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\n const { Button } = this.props;\n return (\n \n { option.linkText }\n \n );\n }\n\n private _renderLinkMenuItem(option: IMenuItemData, index?: number, hoverEffect: boolean = true, isParent: boolean = false): JSX.Element | null {\n const { Link } = this.props;\n const linkText = option.linkText ? option.linkText : '';\n const imagesource = option.imageSource ? option.imageSource : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n { option.linkText }\n \n );\n }\n\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\n const { Link } = this.props;\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n if (linkText && linkUrl) {\n return (\n \n { linkText }\n \n );\n }\n return null;\n\n }\n\n private _renderSpanMenuItem(option: IMenuItemData, index?: number, isParent: boolean = false): JSX.Element | null {\n const { Span } = this.props;\n return (\n \n { option.linkText }\n \n );\n }\n\n private _renderMenu(level: string, menuOptions: JSX.Element[], currentItem?: number, submenu?: boolean): JSX.Element | null {\n\n const { DivContainer, MenuList, ImageDivContainer, showCategoryImage, showPromotionalContent, isMobileView } = this.props;\n const categoryImageDisplay = !isMobileView && (showCategoryImage || showPromotionalContent) && !ArrayExtensions.hasElements(this.state.categoryImage) && !submenu;\n const promotionalContentDisplay = !isMobileView && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !submenu;\n const DivContainerClass = this.currentLevel > 2 || categoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\n this.currentLevel = 1;\n return (\n \n 2 && 'navmenu-multi-level')}>\n { menuOptions }\n \n {\n categoryImageDisplay && this.state.categoryImage && this.state.categoryImage.map(item => (\n \n { this.state.categoryImage && this._getCategoryImage(item) }\n { promotionalContentDisplay && this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\n ))\n }\n \n );\n }\n\n private readonly _updateCategoryImage = (categoryImageSrc: string, option: IMenuItemData) => () => {\n const linkText = option && option.linkText ? option.linkText : '';\n const promotionalImage: IImageData[] = [{ src: categoryImageSrc, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\n option.promotionalContent.map(item => {\n if (item && item.image) {\n const imageSrc = item.image.src;\n const promotionalItemImageSettings = item.image.imageSettings;\n promotionalImage.push({ src: imageSrc, altText: item.text, imageSettings: promotionalItemImageSettings,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl } });\n }\n });\n }\n this.setState({\n categoryImage: promotionalImage.length > 0 ? promotionalImage : [{ src: 'empty' }],\n categoryImageAltText: linkText\n });\n };\n\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\n if (!this.props.isMobileView) {\n this.setState({\n activeMenu: (this.state.activeMenu && this.state.activeMenu === data.id!) ? undefined : data.id!,\n parentMenu: parentId\n });\n if (this.props.showCategoryImage) {\n this._updateCategoryImage(data.imageSource!, data)();\n }\n } else {\n NavigationMenuView.isBackTrack = false;\n this.setState({\n activeMenu: data.id,\n mobileViewLabelText: data.linkText!,\n parentMenu: parentId\n });\n }\n };\n\n private readonly _handleGoBack = () => () => {\n NavigationMenuView.isBackTrack = true;\n this.setState({ activeMenu: this.state.parentMenu });\n };\n\n /**\n * Method to handle click outside of menu.\n * @param event -HTML event.\n */\n private readonly _handleClickOutside = (event: MouseEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.target as Node)) {\n this.setState(\n {\n activeMenu: undefined,\n mobileViewLabelText: '',\n categoryImage: null\n }\n );\n }\n };\n\n /**\n * Method to handle click outside of menu.\n * @param event -HTML event.\n */\n private readonly _handleFocusOutside = (event: FocusEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.relatedTarget as Node)) {\n this._closeSubmenu();\n }\n };\n\n /**\n * Checks to assign a ref for focus.\n * @param index -Sub menu list index.\n * @param mobileViewLabelText -Parent user clicked Sub menu list.\n * @param optionLinkText -Sub menu list.\n * @returns Ref.\n */\n private readonly _shouldAddFocusMenuRef = (index: number, mobileViewLabelText?: string, optionLinkText?: string) => {\n if (!NavigationMenuView.isBackTrack && index === 0) {\n return true;\n }\n if (!optionLinkText || !mobileViewLabelText) {\n return false;\n }\n return mobileViewLabelText === optionLinkText;\n };\n\n private _closeSubmenu(): void {\n if (!this.props.isMobileView) {\n this.setState({ activeMenu: undefined, categoryImage: null, mobileViewLabelText: '' });\n }\n }\n\n private readonly _getCategoryImage = (categoryImage?: IImageData): React.ReactNode | null => {\n\n if (!categoryImage || !categoryImage.src) {\n return null;\n }\n\n const categoryImageUrl = generateImageUrl(`${categoryImage.src}`, this.props.context.actionContext.requestContext.apiSettings);\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n sm: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n md: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n lg: { q: 'w=300&h=250&m=8', w: 0, h: 0 }\n },\n lazyload: true\n };\n if (categoryImageUrl !== undefined) {\n return (\n \n );\n }\n return null;\n };\n}\n\nexport default NavigationMenuView;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport MsDyn365, { IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { addThrottledEvent, Drawer, IModuleProps, INodeProps, KeyCodes, NodeTag } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed, observable } from 'mobx';\nimport React from 'react';\n\nimport { ISitePickerConfig, ISitePickerProps } from './site-picker.props.autogenerated';\n\nexport interface ISitePickerViewProps extends ISitePickerProps {\n SitePicker: IModuleProps;\n SitePickerMenu: INodeProps;\n SitePickerMenuSpan: INodeProps;\n SitePickerMenuList: INodeProps;\n SitePickerMenuListItem: INodeProps;\n SitePickerMenuListItemArray: React.ReactNode[] | undefined;\n siteOptionsState: boolean;\n SitePickerMobileContainer: INodeProps;\n isMobileView: boolean;\n renderSiteOptions(): void;\n resetSiteOptionsState(): void;\n}\n\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\ninterface ISitePickerState {\n expandSiteOptions: boolean;\n isMobile: boolean;\n}\n\n/**\n *\n * SitePicker component.\n * @extends {React.PureComponent>}\n */\nclass SitePicker extends React.PureComponent, ISitePickerState> {\n private readonly _cookieName: string = '_msdyn365___site_';\n\n private readonly _cookieExpirationInSeconds: number = 5_184_000;\n\n private readonly _sitePickerMenuNode: React.RefObject;\n\n private readonly _sitePickerMenuButton: React.RefObject;\n\n private resizeThrottledEventHandler?: (event: Event) => void;\n\n @observable\n private viewport: GridSize;\n\n public constructor(props: ISitePickerViewProps) {\n super(props);\n this._handleChange = this._handleChange.bind(this);\n this._sitePickerMenuNode = React.createRef();\n this._sitePickerMenuButton = React.createRef();\n this._renderSiteOptions = this._renderSiteOptions.bind(this);\n this._resetSiteOptionsState = this._resetSiteOptionsState.bind(this);\n this._escFunction = this._escFunction.bind(this);\n this._handleOutsideClick = this._handleOutsideClick.bind(this);\n this._updateViewport = this._updateViewport.bind(this);\n this.viewport = props.context.request && props.context.request.device && props.context.request.device.Type === 'Mobile' ? 'xs' : 'lg';\n this.state = {\n expandSiteOptions: false,\n isMobile: this.isMobile\n };\n }\n\n @computed get isMobile(): boolean {\n return (this.viewport === 'xs' || this.viewport === 'sm');\n }\n\n public componentDidMount(): void {\n if (MsDyn365.isBrowser) {\n document?.addEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\n document?.body?.addEventListener('mousedown', this._handleOutsideClick);\n this.resizeThrottledEventHandler = window && addThrottledEvent(window, 'resize', this._updateViewport as EventListener);\n this._updateViewport();\n }\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser) {\n document?.removeEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\n document?.body?.removeEventListener('mousedown', this._handleOutsideClick, false);\n window && window.removeEventListener('resize', this.resizeThrottledEventHandler!, false);\n }\n }\n\n public render(): JSX.Element | null {\n const viewProps: ISitePickerViewProps = {\n ...this.props as ISitePickerProps,\n SitePicker: {\n moduleProps: this.props,\n className: classnames('ms-site-picker', this.props.config.className, this.state.isMobile ? 'mobile-view' : 'desktop-view'),\n tag: 'div'\n },\n SitePickerMenu: {\n tag: 'button' as NodeTag,\n className: 'ms-site-picker__button',\n 'aria-label': this.props.config.heading?.text,\n 'aria-expanded': this.state.expandSiteOptions,\n onClick: this.props,\n ref: this._sitePickerMenuButton\n },\n SitePickerMenuSpan: {\n className: 'ms-site-picker__span',\n tag: 'span'\n },\n SitePickerMenuList: {\n className: 'ms-site-picker__list',\n role: 'menu',\n tag: 'ul',\n ref: this._sitePickerMenuNode\n },\n SitePickerMenuListItem: {\n className: 'ms-site-picker__list__item',\n role: 'presentation',\n tag: 'li'\n },\n SitePickerMobileContainer: {\n tag: Drawer,\n className: 'ms-site-picker__drawer',\n toggleButtonText: this.props.config.heading?.text,\n openGlyph: 'ms-site-picker__drawer-open',\n closeGlyph: 'ms-site-picker__drawer-close',\n glyphPlacement: 'end'\n },\n isMobileView: this.state.isMobile,\n SitePickerMenuListItemArray: this._renderSitePickerImage(),\n renderSiteOptions: this._renderSiteOptions,\n resetSiteOptionsState: this._resetSiteOptionsState,\n siteOptionsState: this.state.expandSiteOptions\n };\n return this.props.renderView(viewProps);\n }\n\n private _renderSiteOptions(): void {\n const expandSiteOptionsState = this.state.expandSiteOptions;\n this.setState({\n expandSiteOptions: !expandSiteOptionsState\n });\n }\n\n private _resetSiteOptionsState(): void {\n this.setState({\n expandSiteOptions: false\n });\n }\n\n private readonly _escFunction = (event: any) => {\n const key = event.keyCode;\n if (this.state.expandSiteOptions) {\n switch (key) {\n case KeyCodes.Escape: {\n setTimeout(() => {\n const nextFocus = document && document.activeElement;\n if ((this._sitePickerMenuButton?.current?.contains(nextFocus) || this._sitePickerMenuNode?.current?.contains(nextFocus))) {\n this._resetSiteOptionsState();\n this._sitePickerMenuButton?.current?.focus();\n }\n }, 50);\n break;\n }\n case KeyCodes.Tab: {\n setTimeout(() => {\n const nextFocus = document && document.activeElement;\n if ((!this._sitePickerMenuButton?.current?.contains(nextFocus) && !this._sitePickerMenuNode?.current?.contains(nextFocus))) {\n this._resetSiteOptionsState();\n }\n }, 50);\n break;\n }\n default:\n return;\n }\n }\n };\n\n private readonly _handleOutsideClick = (event: any) => {\n if ((this._sitePickerMenuButton.current?.contains(event.target) && this.state.expandSiteOptions) ||\n (this._sitePickerMenuNode.current?.contains(event.target) && this.state.expandSiteOptions)) {\n return;\n }\n this._resetSiteOptionsState();\n\n };\n\n private _handleChange(e: React.MouseEvent): void {\n e.preventDefault();\n if (e.currentTarget.href && e.currentTarget.href.length > 0 && window) {\n if (this.props.context.request.cookies.isConsentGiven()) {\n const cookieConfig = { maxAge: this._cookieExpirationInSeconds };\n this.props.context.request.cookies.set(this._cookieName, e.currentTarget.href, cookieConfig);\n }\n window.location.assign(e.currentTarget.href);\n }\n }\n\n private _renderSitePickerImage(): React.ReactNode[] | undefined {\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=50&h=25&m=6', w: 0, h: 0 },\n sm: { q: 'w=50&h=25&m=6', w: 0, h: 0 },\n md: { q: 'w=40&h=20&m=6', w: 0, h: 0 },\n lg: { q: 'w=40&h=20&m=6', w: 0, h: 0 },\n xl: { q: 'w=40&h=20&m=6', w: 0, h: 0 }\n },\n lazyload: true\n };\n const siteOptions = this.props.config.siteOptions && this.props.config.siteOptions;\n return siteOptions && siteOptions.map((item, index) => {\n const image = item?.siteImage;\n const imageProps = {\n gridSettings: this.props.context.request.gridSettings!,\n imageSettings: (image?.imageSettings?.viewports) ? image.imageSettings : defaultImageSettings\n };\n return (\n \n \n {item?.siteName}\n \n \n \n );\n }\n );\n }\n\n private _updateViewport(): void {\n this.viewport = this._getViewport();\n this.setState({ isMobile: this.isMobile });\n }\n\n private _getViewport(): GridSize {\n const { context } = this.props;\n if (context.request && context.request.device && context.request.device.Type === 'Mobile') {\n return 'xs';\n }\n\n if (typeof window !== undefined && window.innerWidth) {\n const gridSettings = context.request.gridSettings;\n if (gridSettings) {\n if (gridSettings.xs && window.innerWidth <= gridSettings.xs.w) {\n return 'xs';\n } else if (gridSettings.sm && window.innerWidth <= gridSettings.sm.w) {\n return 'sm';\n } else if (gridSettings.md && window.innerWidth <= gridSettings.md.w) {\n return 'md';\n } else if (gridSettings.lg && window.innerWidth <= gridSettings.lg.w) {\n return 'lg';\n }\n return 'xl';\n\n }\n }\n return 'xs';\n }\n}\n\nexport default SitePicker;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISitePickerViewProps } from './site-picker';\n\nexport default (props: ISitePickerViewProps) => {\n return (\n <>\n {_renderSitePicker(props)}\n \n );\n};\n\nconst _renderDesktopView = (props: ISitePickerViewProps) => {\n const { SitePickerMenu, SitePickerMenuSpan } = props;\n return (\n <>\n \n {props.config.heading?.text}\n \n \n {props.siteOptionsState ? _renderSiteOptionsList(props) : null}\n \n );\n};\n\nconst _renderSiteOptionsList = (props: ISitePickerViewProps): React.ReactNode => {\n const { SitePickerMenuList,\n SitePickerMenuListItem,\n SitePickerMenuListItemArray\n } = props;\n const options = SitePickerMenuListItemArray!.map((item, index) => {\n return (\n \n {item}\n \n );\n }\n );\n return (\n \n {options}\n \n );\n};\n\nconst _renderMobileView = (props: ISitePickerViewProps): React.ReactNode => {\n const { SitePickerMobileContainer } = props;\n return (\n \n
\n {props.SitePickerMenuListItemArray?.map((item, index) => {\n return (\n
\n {item}\n
\n );\n })}\n
\n
\n );\n};\n\nconst _renderSitePicker = (props: ISitePickerViewProps): React.ReactNode => {\n const { isMobileView, SitePicker } = props;\n return (\n \n {isMobileView ? _renderMobileView(props) : _renderDesktopView(props)}\n \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 { IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { ISocialShareConfig, ISocialShareProps, orientation } from './social-share.props.autogenerated';\n\nexport interface ISocialShareViewProps extends ISocialShareProps {\n isConsentGiven: boolean;\n SocialShareItemElements: React.ReactNode[];\n SocialShare: IModuleProps;\n SocialShareList: INodeProps;\n SocialShareItem: INodeProps;\n SocialShareItemCustomization: INodeProps;\n}\n\n/**\n *\n * SocialShare component.\n * @extends {React.PureComponent>}\n */\nclass SocialShare extends React.PureComponent> {\n constructor(props: ISocialShareProps) {\n super(props);\n }\n\n public render(): JSX.Element | null {\n const { slots } = this.props;\n\n if (slots && slots.socialShareItems.length === 0) {\n this.props.context.telemetry.error('No social media is enable for sharing, module wont render');\n return null;\n }\n\n const isConsentGiven =\n this.props.context.request &&\n this.props.context.request.cookies &&\n this.props.context.request.cookies.isConsentGiven &&\n this.props.context.request.cookies.isConsentGiven();\n\n if (!isConsentGiven) {\n return null;\n }\n\n const viewprops = {\n ...this.props,\n SocialShare: {\n moduleProps: this.props,\n className: classnames('ms-social-share', this.props.config.className)\n },\n SocialShareList: {\n 'data-title': this.props.config.caption,\n className: `ms-social-share-ul ${this.props.config.caption && 'caption'} ${this.props.config.orientation === orientation.vertical ? 'vertical' : ''}`,\n tag: 'ul',\n role: 'group'\n },\n SocialShareItem: {\n className: 'ms-social-share-li',\n tag: 'li',\n tabIndex: '0',\n role: 'link'\n },\n SocialShareItemElements: slots && slots.socialShareItems.length > 0 && slots.socialShareItems\n };\n\n return this.props.renderView(viewprops) as React.ReactElement;\n }\n}\n\nexport default SocialShare;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport React, { ReactNode } from 'react';\n\nimport { ISocialShareViewProps } from './social-share';\n\nexport const SocialShareView: React.FC = props => {\n const { SocialShareList, SocialShareItemElements, SocialShareItem, SocialShare } = props;\n if (SocialShareItemElements.length === 0) {\n props.context.telemetry.error('Social media list is empty, module wont render');\n return null;\n }\n return (\n \n \n {SocialShareItemElements.map((SocialShareElement: ReactNode, index: number) => {\n return (\n \n {SocialShareElement}\n \n );\n })}\n \n \n );\n};\n\nexport default SocialShareView;\n"],"names":["CatalogPicker","props","super","handleTextChange","event","this","config","heading","text","target","value","handleParagraphChange","paragraph","catalogPickerHeading","className","_moduleClassName","tag","editProps","onEdit","requestContext","context","request","catalogPickerParagraph","viewProps","handleText","catalogPicker","moduleProps","catalogs","_renderCatalogPicker","renderView","item","catalogId","RecordId","user","resources","currentCatalogText","linkToCatalog","catalogUrl","actionContext","fullUrl","URL","window","location","href","searchParams","set","changeCatalogButtonText","data","result","isBrowser","map","reactKey","JSON","stringify","String","key","tabIndex","Name","role","src","DefaultImage","gridSettings","imageSettings","galleryImageSettings","altText","loadFailureBehavior","_renderCatalogPickerButton","CatalogPickerViewFunctionComponent","Module","assembleNode","itemIndex","additionalContentHeading","handleAdditionalTextChange","renderHeading","subtext","additionalContentParagraphText","renderParagraph","links","ctaLink","index","linkIndex","editableLink","ariaLabel","linkText","linkUrl","destinationUrl","openInNewTab","link","onTextChange","handleAdditionalLinkTextChange","renderLinks","additionalContentItemContainer","additionalContentItemLinks","contentBlockAdditionalContent","additionalContent","reactNodes","push","additionalContentNode","additionalContentItems","ContentCardLinks","_mapEditableLinks","linkdata","length","editableLinks","forEach","payLoad","telemetryContent","contentAction","etext","attributes","btnClass","additionalProperties","onClick","ContentBlock","telemetryPageName","friendlyName","telemetry","handleLinkTextChange","Number","image","imageAriaLabel","contentBlockTitle","imageProps","contentBlockLinks","ArrayExtensions","msdyn365__moduleLayout","contentBlockText","contentBlockImage","moduleType","typeName","imagePropertyName","moduleId","id","layout","shouldSkipToMainImage","error","contentBlockviewProps","title","moduleClass","contentBlockContainer","imageContainer","detailsContainer","contentBlockAnchorTag","imageLink","_getImageLink","handleAdditionalParagraphChange","handleAdditionalText","handleAdditionalParagraph","additionalContentObject","actionableRegion","renderAdditionalContent","Node","FooterItem","handleHeadingChange","footerItemClassName","_createHeading","_createImageMarkup","_createText","_createLinkText","EditableLink","_createLink","HeadingContainer","ItemContainer","Link","undefined","ariaHiddenAttr","viewports","xs","q","w","h","lg","lazyload","FooterItemView","_renderElement","MenuTypeIndexId","MenuSource","NavigationMenu","isRetail","isCMS","_setNavigationSource","sourceType","_updateViewport","bind","viewport","device","Type","navigationMenuSource","state","isMobile","menuItemList","locale","nameTranslations","nameTranslation","find","Language","toLowerCase","Text","resizeThrottledEventHandler","removeEventListener","_mapData","xl","Navigation","menuAriaLabel","MenuList","ListItem","showCategoryImage","displayCategoryImage","showPromotionalContent","displayPromotionalImage","DivContainer","ImageDivContainer","Button","ImageContainer","Span","MobileDescriptionContainer","MobileBackButton","backButtonAriaLabel","MobileDescriptionLabel","isMobileView","menuItemData","mergedData","categories","_constructMenuItemData","cmsNavItems","idx","_constructTopMenuItemData","enabletopMenu","mergedRootMenuData","topMenu","rootMenuNavigation","linkURL","imageSource","subMenu","retailItem","cmsItem","addedAllMenu","categoryPromotionalContent","promotionalData","filter","promoItem","categoryName","Images","Uri","RSItemIdInit","getFriendlyName","NameTranslations","Url","_getNestedChildren","promotionalContent","menuSource","Retail","CMSItemIdInit","imageDestinationURL","_getCMSNestedChildren","Cms","shouldOpenNewTab","category","imageSourceUrl","nestedChildren","Children","allCategoryMenuText","getCategoryUrl","subMenus","_getViewport","setState","innerWidth","sm","md","NavigationMenuView","currentLevel","_updateCategoryImage","categoryImageSrc","option","promotionalImage","imageSrc","promotionalItemImageSettings","categoryImage","categoryImageAltText","_handleDropdownToggle","parentId","isBackTrack","activeMenu","mobileViewLabelText","parentMenu","_handleGoBack","_handleClickOutside","menuNode","current","contains","_handleFocusOutside","relatedTarget","_closeSubmenu","_shouldAddFocusMenuRef","optionLinkText","_getCategoryImage","defaultImageSettings","generateImageUrl","apiSettings","categoryImageSettings","menuItemRef","document","body","addEventListener","children","focus","ref","_renderDisplay","menuItem","menuItemDatum","_getFromSubMenu","_createMenuItemList","i","found","_renderSubMenu","_renderButtonMenuItem","_renderLinkMenuItem","_renderSpanMenuItem","IsSubMenu","enableMultiSupportMenu","enableMultilevelMenu","multiLevelSupportedMenu","menuLevelSupport","levelClassName","menuOptions","hasOptions","haveSubmenu","Math","round","toString","_renderMenu","onFocus","hoverEffect","isParent","imagesource","onMouseOver","level","currentItem","submenu","categoryImageDisplay","promotionalContentDisplay","DivContainerClass","_renderPromotionalLink","SitePicker","_cookieName","_cookieExpirationInSeconds","_escFunction","keyCode","expandSiteOptions","setTimeout","nextFocus","activeElement","_sitePickerMenuButton","_sitePickerMenuNode","_resetSiteOptionsState","_handleOutsideClick","_handleChange","_renderSiteOptions","SitePickerMenu","SitePickerMenuSpan","SitePickerMenuList","SitePickerMenuListItem","SitePickerMobileContainer","toggleButtonText","openGlyph","closeGlyph","glyphPlacement","SitePickerMenuListItemArray","_renderSitePickerImage","renderSiteOptions","resetSiteOptionsState","siteOptionsState","expandSiteOptionsState","e","preventDefault","currentTarget","cookies","isConsentGiven","cookieConfig","maxAge","assign","siteOptions","siteImage","siteRedirectUrl","siteName","_renderSitePicker","_renderSiteOptionsList","options","onMouseLeave","_renderMobileView","_renderDesktopView","SocialShare","slots","socialShareItems","viewprops","SocialShareList","caption","orientation","SocialShareItem","SocialShareItemElements","SocialShareView","SocialShareElement"],"sourceRoot":""}