{"version":3,"file":"static/js/52.3bf5d148377eb72be665.chunk.js","mappings":"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","sources":["webpack://Citta2.0/./src/modules/msdyn365-pva-chat-connector/msdyn365-pva-chat-connector.tsx?797a","webpack://Citta2.0/./src/modules/msdyn365-pva-chat-connector/proactive/triggers/proactive-chat-trigger.ts?ab51","webpack://Citta2.0/./src/modules/msdyn365-pva-chat-connector/proactive/triggers/cart-amount-trigger.ts?b0a3","webpack://Citta2.0/./src/modules/msdyn365-pva-chat-connector/proactive/triggers/cart-number-of-items-trigger.ts?5c1e","webpack://Citta2.0/./src/modules/msdyn365-pva-chat-connector/proactive/triggers/cart-specific-product-trigger.ts?5985","webpack://Citta2.0/./src/modules/msdyn365-pva-chat-connector/helpers/consts.ts?4dc3","webpack://Citta2.0/./src/modules/msdyn365-pva-chat-connector/proactive/triggers/date-range-trigger.ts?d574","webpack://Citta2.0/./src/modules/msdyn365-pva-chat-connector/proactive/triggers/from-specific-page-trigger.ts?37c0","webpack://Citta2.0/./src/modules/msdyn365-pva-chat-connector/proactive/triggers/page-visits-trigger.ts?66a6","webpack://Citta2.0/./src/modules/msdyn365-pva-chat-connector/proactive/triggers/specific-CountryRegion-trigger.ts?5c72","webpack://Citta2.0/./src/modules/msdyn365-pva-chat-connector/proactive/triggers/specific-page-trigger.ts?9295","webpack://Citta2.0/./src/modules/msdyn365-pva-chat-connector/proactive/triggers/wait-on-time-trigger.ts?63fd","webpack://Citta2.0/./src/modules/msdyn365-pva-chat-connector/proactive/index.ts?ef6c","webpack://Citta2.0/./src/modules/msdyn365-pva-chat-connector/helpers/ContextProvider.ts?20ff","webpack://Citta2.0/./src/modules/msdyn365-pva-chat-connector/helpers/StyleComposers.ts?0cc6","webpack://Citta2.0/./src/modules/msdyn365-pva-chat-connector/helpers/CommerceChatStore.ts?9abc","webpack://Citta2.0/./src/modules/msdyn365-pva-chat-connector/components/ChatCore.tsx?1b5f","webpack://Citta2.0/./src/modules/msdyn365-pva-chat-connector/components/Chat.tsx?5004","webpack://Citta2.0/./src/modules/msdyn365-pva-chat-connector/msdyn365-pva-chat-connector.view.tsx?cb2f"],"sourcesContent":["/*!\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';\nimport { isOboRequest } from '@msdyn365-commerce/core-internal';\nimport { IMsdyn365PvaChatConnectorData } from './msdyn365-pva-chat-connector.data';\nimport { IMsdyn365PvaChatConnectorConfig, IMsdyn365PvaChatConnectorProps } from './msdyn365-pva-chat-connector.props.autogenerated';\n\nexport interface IPvaChatConnectorViewProps extends IMsdyn365PvaChatConnectorProps {\n config: IMsdyn365PvaChatConnectorConfig;\n}\n\n/**\n * PvaChatConnector component\n * @extends {React.PureComponent>}\n */\nclass PvaChatConnector extends React.PureComponent> {\n // Loads CDN version of Botframework-Webchat library\n public componentDidMount(): void {\n if (isOboRequest(this.props.context.request)) {\n return;\n }\n\n const url = this.props.config.botFrameworkCDNURL || this.props.context.app.config.pvaChatConnectorBotFrameworkCDNURL;\n const script = document.createElement('script');\n script.src = url;\n script.async = true;\n script.crossOrigin = 'anonymous';\n document.body.appendChild(script);\n }\n\n public render(): JSX.Element | null {\n if (isOboRequest(this.props.context.request)) {\n return null;\n }\n\n return this.props.renderView(this.props);\n }\n}\n\nexport default PvaChatConnector;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IProactiveChatTrigger } from '../../interfaces';\nimport { IChatContext, TContextProvider } from '../../../interfaces';\nimport { IPvaChatConnectorViewProps } from '../../msdyn365-pva-chat-connector';\n\n/**\n * ProactiveChatTrigger class - checks if Proactive Chat should be triggered, starts the chat and sets context\n */\nabstract class ProactiveChatTrigger implements IProactiveChatTrigger {\n public props: IPvaChatConnectorViewProps;\n public context: IChatContext;\n constructor(props: IPvaChatConnectorViewProps, context: IChatContext) {\n this.props = props;\n this.context = context;\n }\n\n /**\n * Generates Chat Context with included properties related to Proactive Chat\n * @returns TContextProvider - Chat Context\n */\n public abstract getContextProvider(): TContextProvider;\n\n /**\n * Generates chat welcome message to be used if Proactive Chat is triggered\n * @returns string - chat welcome message\n */\n public abstract getMessage(): string;\n\n /**\n * Validate specific trigger conditions if Proactive Chat should be initiated\n * @returns boolean (TRUE if Proactive Chat should be triggered)\n */\n public abstract validate(): Promise;\n}\n\nexport default ProactiveChatTrigger;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n// @ts-ignore\nimport { getCartState, ICartState } from '@msdyn365-commerce/global-state';\nimport { IChatContext, TContextProvider } from '../../../interfaces';\nimport { IPvaChatConnectorViewProps } from '../../msdyn365-pva-chat-connector';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * CartAmountTrigger class - proactive chat is triggered if cArt amount is in preset boundaries (config.proactiveOnCartAmountMin, config.proactiveOnCartAmountMax)\n */\nclass CartAmountTrigger extends ProactiveChatTrigger {\n private min?: number;\n private max?: number;\n private totalInCart: number = 0;\n\n constructor(props: IPvaChatConnectorViewProps, context: IChatContext) {\n super(props, context);\n this.min = this.props.config.proactiveOnCartAmountMin;\n this.max = this.props.config.proactiveOnCartAmountMax;\n this.props.context.telemetry.debug(\n `[Chat][${CartAmountTrigger.name}] Cart amount proactive chat initialized with min: '${this.min}'; max: '${this.max}'.`\n );\n }\n\n public async validate(): Promise {\n const cart = await this._getCart();\n if (cart.isEmpty) {\n this.props.context.telemetry.debug(`[Chat][${CartAmountTrigger.name}] Cart was empty. Validation returning 'false'.`);\n return false;\n }\n\n this.totalInCart = cart.cart.TotalAmount || 0;\n let retVal = false;\n if (this.min) {\n if (this.max) {\n retVal = this.min <= this.totalInCart && this.totalInCart <= this.max;\n } else {\n retVal = this.min <= this.totalInCart;\n }\n } else {\n if (this.max) {\n retVal = this.totalInCart <= this.max;\n } else {\n retVal = false;\n }\n }\n this.props.context.telemetry.debug(\n `[Chat][${CartAmountTrigger.name}] Validation result: '${retVal}'; Cart total: '${this.totalInCart}'.`\n );\n return retVal;\n }\n\n public getContextProvider(): TContextProvider {\n return () => {\n return {\n ...this.context,\n eCommerceCustIsProactiveChat: 'True',\n eCommerceCustProactiveType: 'Cart Amount',\n eCommerceCustProactiveShoppingCartAmount: `${this.totalInCart}`\n };\n };\n }\n\n public getMessage(): string {\n // @TODO: Add message processing if needed\n return this.props.config.proactiveOnCartAmountMessage || this.props.config.proactiveDefaultMessage;\n }\n\n private async _getCart(): Promise {\n return getCartState(this.props.context.actionContext);\n }\n}\n\nexport default CartAmountTrigger;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n// @ts-ignore\nimport { getCartState, ICartState } from '@msdyn365-commerce/global-state';\nimport { IChatContext, TContextProvider } from '../../../interfaces';\nimport { IPvaChatConnectorViewProps } from '../../msdyn365-pva-chat-connector';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * CartNumberOfItemsTrigger class - proactive chat is triggered if Cart Number of Items is in preset boundaries (config.proactiveOnCartNoOfItemsMin, config.proactiveOnCartNoOfItemsMax)\n */\nclass CartNumberOfItemsTrigger extends ProactiveChatTrigger {\n private min?: number;\n private max?: number;\n private numberOfItems: number = 0;\n\n constructor(props: IPvaChatConnectorViewProps, context: IChatContext) {\n super(props, context);\n this.min = this.props.config.proactiveOnCartNoOfItemsMin;\n this.max = this.props.config.proactiveOnCartNoOfItemsMax;\n\n this.props.context.telemetry.debug(\n `[${CartNumberOfItemsTrigger.name}] Cart number of items proactive chat initialized with min: '${this.min}'; max: '${this.max}'.`\n );\n }\n\n public async validate(): Promise {\n const cart = await this._getCart();\n if (cart.isEmpty) {\n this.props.context.telemetry.debug(`[Chat][${CartNumberOfItemsTrigger.name}] Cart was empty. Validation returning 'false'.`);\n return false;\n }\n\n this.numberOfItems = cart.cart.TotalItems || 0;\n\n let retVal = false;\n if (this.min) {\n if (this.max) {\n retVal = this.min <= this.numberOfItems && this.numberOfItems <= this.max;\n } else {\n retVal = this.min <= this.numberOfItems;\n }\n } else {\n if (this.max) {\n retVal = this.numberOfItems <= this.max;\n } else {\n retVal = false;\n }\n }\n this.props.context.telemetry.debug(\n `[${CartNumberOfItemsTrigger.name}] Validation result: '${retVal}'; Number of items in cart: '${this.numberOfItems}'.`\n );\n return retVal;\n }\n\n public getContextProvider(): TContextProvider {\n return () => {\n return {\n ...this.context,\n eCommerceCustIsProactiveChat: 'True',\n eCommerceCustProactiveType: 'Cart Number of Items',\n eCommerceCustProactiveShoppingCartNumberOfItems: `${this.numberOfItems}`\n };\n };\n }\n\n public getMessage(): string {\n // @TODO: Add message processing if needed\n return this.props.config.proactiveOnCartNoOfItemsMessage || this.props.config.proactiveDefaultMessage;\n }\n\n private async _getCart(): Promise {\n return getCartState(this.props.context.actionContext);\n }\n}\n\nexport default CartNumberOfItemsTrigger;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n// @ts-ignore\nimport { getCartState, ICartState } from '@msdyn365-commerce/global-state';\nimport { TContextProvider } from '../../../interfaces';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * CartSpecificProductTrigger class - proactive chat is triggered if a Product in the Cart is in preset list of products (config.proactiveOnCartSpecificProductList)\n */\nclass CartSpecificProductTrigger extends ProactiveChatTrigger {\n private product: string = '';\n\n public async validate(): Promise {\n let isValid = false;\n const cart = await this._getCart();\n if (!cart.isEmpty) {\n if (cart.cart.CartLines) {\n this.props.context.telemetry.debug(\n `[${CartSpecificProductTrigger.name}] Number of cart line items was '${cart.cart.CartLines?.length}'`\n );\n for (let i = 0; i < cart.cart.CartLines?.length; i++) {\n if (cart.cart.CartLines[i]) {\n if (this.props.config.proactiveOnCartSpecificProductList) {\n this.props.context.telemetry.debug(\n `[${CartSpecificProductTrigger.name}] Number of cart specific products was configured for proactive chat was '${this.props.config.proactiveOnCartSpecificProductList?.length}'`\n );\n // Find first item, from user-defined list of products, that matches the cart lines' itemId in the cart.\n for (let j = 0; j < (this.props.config.proactiveOnCartSpecificProductList?.length || 0); j++) {\n if (\n this.props.config.proactiveOnCartSpecificProductList &&\n cart.cart.CartLines[i].ItemId &&\n this.props.config.proactiveOnCartSpecificProductList[j] === cart.cart.CartLines[i].ItemId\n ) {\n this.props.context.telemetry.debug(\n `[${CartSpecificProductTrigger.name}] Matched cart line item ID '${cart.cart.CartLines[i].ItemId}' against user-defined list of specific products for proactive chat.`\n );\n isValid = true;\n break;\n }\n }\n }\n } else {\n // Rest of the CartLines are undefined\n break;\n }\n }\n } else {\n this.props.context.telemetry.debug(`[Chat][${CartSpecificProductTrigger.name}] Cart did not contain any cart lines.`);\n }\n } else {\n this.props.context.telemetry.debug(`[Chat][${CartSpecificProductTrigger.name}] Cart was empty.`);\n }\n this.props.context.telemetry.debug(`[Chat][${CartSpecificProductTrigger.name}] Validation returning '${isValid}'.`);\n return isValid;\n }\n\n public getContextProvider(): TContextProvider {\n return () => {\n return {\n ...this.context,\n eCommerceCustIsProactiveChat: 'True',\n eCommerceCustProactiveType: 'Cart Specific Product',\n eCommerceCustProactiveShoppingCartSpecificProduct: `${this.product}`\n };\n };\n }\n\n public getMessage(): string {\n // @TODO: Add message processing if needed\n return this.props.config.proactiveOnCartSpecificProductMessage || this.props.config.proactiveDefaultMessage;\n }\n\n private async _getCart(): Promise {\n return getCartState(this.props.context.actionContext);\n }\n}\n\nexport default CartSpecificProductTrigger;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nexport enum ProactiveChatNames {\n DateRange = 'Date Range',\n FromSpecificPage = 'From Specific Page',\n PageVisits = 'Page Visits',\n SpecificLocation = 'Specific Location',\n SpecificPage = 'Specific Page',\n WaitOnTime = 'Wait On Time'\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ProactiveChatNames } from '../../helpers/consts';\nimport { IChatContext, TContextProvider } from '../../../interfaces';\nimport { IPvaChatConnectorViewProps } from '../../msdyn365-pva-chat-connector';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * DateRangeTrigger class - proactive chat is triggered if current date is in preset date boundaries (config.proactiveOnDateRangeStart, config.proactiveOnDateRangeEnd)\n */\nclass DateRangeTrigger extends ProactiveChatTrigger {\n private start?: Date;\n private end?: Date;\n\n constructor(props: IPvaChatConnectorViewProps, context: IChatContext) {\n super(props, context);\n this.start = this._toDate(this.props.config.proactiveOnDateRangeStart);\n this.end = this._toDate(this.props.config.proactiveOnDateRangeEnd);\n\n this.props.context.telemetry.debug(\n `[${DateRangeTrigger.name}] Proactive chat initialized with startDate: '${this.start}'; max: '${this.end}'.`\n );\n }\n\n public async validate(): Promise {\n const now = new Date();\n now.setHours(0, 0, 0, 0);\n\n let retVal = false;\n if (this.start) {\n if (this.end) {\n retVal = this.start.getTime() <= now.getTime() && now.getTime() <= this.end.getTime();\n } else {\n retVal = this.start.getTime() <= now.getTime();\n }\n } else if (this.end) {\n retVal = now.getTime() <= this.end.getTime();\n }\n\n this.props.context.telemetry.debug(\n `[${DateRangeTrigger.name}] Validation result: '${retVal}'; Current date used to compare: '${now}'.`\n );\n return retVal;\n }\n\n public getContextProvider(): TContextProvider {\n return () => {\n return {\n ...this.context,\n eCommerceCustIsProactiveChat: 'True',\n eCommerceCustProactiveType: ProactiveChatNames.DateRange,\n eCommerceCustProactiveFromDate: this.start ? this.start.toUTCString() : '',\n eCommerceCustProactiveToDate: this.end ? this.end.toUTCString() : ''\n };\n };\n }\n\n public getMessage(): string {\n // @TODO: Add message processing if needed\n return this.props.config.proactiveOnDateRangeMessage || this.props.config.proactiveDefaultMessage;\n }\n\n /**\n * Converts string(us-en) to date\n * @param date string (mm/dd/yyyy)\n * @returns Date or undefined\n */\n private _toDate(date?: string): Date | undefined {\n if (date) {\n const dateParts = date.split('/');\n return new Date(+dateParts[2], +dateParts[1] - 1, +dateParts[0]);\n } else {\n return undefined;\n }\n }\n}\n\nexport default DateRangeTrigger;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ProactiveChatNames } from '../../helpers/consts';\nimport { TContextProvider } from '../../../interfaces';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * FromSpecificPageTrigger class - proactive chat is triggered if user has come from specific page (the one listed in config.proactiveOnFromSpecificPageList)\n */\nclass FromSpecificPageTrigger extends ProactiveChatTrigger {\n public async validate(): Promise {\n let isValid = false;\n if (this.props.config.proactiveOnFromSpecificPageList) {\n this.props.context.telemetry.debug(\n `[${FromSpecificPageTrigger.name}] Number of items in user-defined list of 'From Specific Page' was '${this.props.config.proactiveOnFromSpecificPageList?.length}'.`\n );\n for (let i = 0; i < (this.props.config.proactiveOnFromSpecificPageList?.length || 0); i++) {\n const fromSpecificPageTrimmed: string = this.props.config.proactiveOnFromSpecificPageList[i].trim();\n this.props.context.telemetry.debug(\n `[Chat][${FromSpecificPageTrigger.name}] Current page URL: '${window.document.referrer}'.`\n );\n this.props.context.telemetry.debug(\n `[${FromSpecificPageTrigger.name}] Current item from user-defined list of 'From Specific Page': '${fromSpecificPageTrimmed}'.`\n );\n\n if (window.document.referrer.indexOf(fromSpecificPageTrimmed) > -1) {\n isValid = true;\n break;\n }\n }\n } else {\n this.props.context.telemetry.debug(\n `[Chat][${FromSpecificPageTrigger.name}] User-defined 'From Specific Page' list was undefined.`\n );\n }\n this.props.context.telemetry.debug(`[Chat][${FromSpecificPageTrigger.name}] Validation returning '${isValid}'.`);\n return isValid;\n }\n public getContextProvider(): TContextProvider {\n return () => {\n return {\n ...this.context,\n eCommerceCustIsProactiveChat: 'True',\n eCommerceCustProactiveType: ProactiveChatNames.FromSpecificPage,\n eCommerceCustProactiveCameFromPage: window.document.referrer\n };\n };\n }\n public getMessage(): string {\n // @TODO: Add message processing if needed\n return this.props.config.proactiveOnFromSpecificPageMessage || this.props.config.proactiveDefaultMessage;\n }\n}\n\nexport default FromSpecificPageTrigger;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ICookieContext } from '@msdyn365-commerce/core-internal/dist/types/interfaces/context/ICookieContext';\nimport { ProactiveChatNames } from '../../helpers/consts';\nimport { IChatContext, TContextProvider } from '../../../interfaces';\nimport { IPvaChatConnectorViewProps } from '../../msdyn365-pva-chat-connector';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * PageVisitTrigger class - proactive chat is triggered if user has visited current page for (config.proactiveOnPageVisitNumber) or more times\n */\nclass PageVisitTrigger extends ProactiveChatTrigger {\n public visits: number = 0;\n private cookieName: string = 'TimesPageVisited';\n private expdate: Date;\n private cookies: ICookieContext;\n\n constructor(props: IPvaChatConnectorViewProps, context: IChatContext) {\n super(props, context);\n this.cookies = this.props.context.request.cookies;\n this.expdate = new Date();\n // Set expiry date to 365 days.\n this.expdate.setTime(this.expdate.getTime() + 24 * 60 * 60 * 1000 * 365);\n this.props.context.telemetry.debug(`[Chat][${PageVisitTrigger.name}] Cookie expiry date set to: '${this.expdate}'.`);\n\n this.props.context.telemetry.debug(`[Chat][${PageVisitTrigger.name}] Cookie context is given: '${this.cookies.isConsentGiven()}'.`);\n if (this.cookies.isConsentGiven()) {\n this.cookies.setConsentCookie();\n }\n\n this._updateVisitCounter();\n }\n\n public async validate(): Promise {\n let retVal: boolean = false;\n\n if (this.props.config.proactiveOnPageVisitNumber) {\n retVal = this.visits >= this.props.config.proactiveOnPageVisitNumber;\n }\n\n this.props.context.telemetry.debug(`[Chat][${PageVisitTrigger.name}] Validation result: '${retVal}'.`);\n return retVal;\n }\n\n public clear(): void {\n this.props.context.telemetry.debug(`[Chat][${PageVisitTrigger.name}] Clearing cookie for page visit counter.`);\n this.cookies.set(this.cookieName, 0, {\n domain: window.location.hostname,\n path: window.location.pathname,\n expires: this.expdate\n });\n }\n\n public getContextProvider(): TContextProvider {\n return () => {\n return {\n ...this.context,\n eCommerceCustIsProactiveChat: 'True',\n eCommerceCustProactiveType: ProactiveChatNames.PageVisits,\n eCommerceCustProactiveNumberOfVisits: `${this.visits}`\n };\n };\n }\n\n public getMessage(): string {\n // @TODO: Add message processing if needed\n return this.props.config.proactiveOnPageVisitMessage || this.props.config.proactiveDefaultMessage;\n }\n\n private _updateVisitCounter(): void {\n this.visits = this.cookies.get(this.cookieName).value || 0;\n this.props.context.telemetry.debug(`[Chat][${PageVisitTrigger.name}] Page visit counter BEFORE update: '${this.visits}.`);\n ++this.visits;\n this.props.context.telemetry.debug(`[Chat][${PageVisitTrigger.name}] Page visit counter AFTER update: '${this.visits}.`);\n\n this.cookies.set(this.cookieName, this.visits, {\n domain: window.location.hostname,\n path: window.location.pathname,\n expires: this.expdate\n });\n }\n}\n\nexport default PageVisitTrigger;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ProactiveChatNames } from '../../helpers/consts';\nimport { IExtendedRequest } from '../../interfaces';\nimport { IChatContext, TContextProvider } from '../../../interfaces';\nimport { IPvaChatConnectorViewProps } from '../../msdyn365-pva-chat-connector';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * SpecificPageTrigger class - proactive chat is triggered if user geographically uses the website from specific country/regions(config.proactiveOnSpecificCountryRegionCountry)\n */\nclass SpecificCountryRegionTrigger extends ProactiveChatTrigger {\n private customerCountryCode: string;\n constructor(props: IPvaChatConnectorViewProps, context: IChatContext) {\n super(props, context);\n this.customerCountryCode = (this.props.context.request).suggestedMarket || 'n/a';\n this.props.context.telemetry.debug(\n `[${SpecificCountryRegionTrigger.name}] Customer country code set to: '${this.customerCountryCode}.'`\n );\n }\n\n public async validate(): Promise {\n const retVal: boolean = this.props.config.proactiveOnSpecificLocation\n ? this.props.config.proactiveOnSpecificLocation.toLowerCase().indexOf(this.customerCountryCode.toLowerCase()) > -1\n : false;\n this.props.context.telemetry.debug(`[Chat][${SpecificCountryRegionTrigger.name}] Validation returning '${retVal}'.`);\n return retVal;\n }\n public getContextProvider(): TContextProvider {\n return () => {\n return {\n ...this.context,\n eCommerceCustIsProactiveChat: 'True',\n eCommerceCustProactiveCountryCode: this.props.config.proactiveOnSpecificLocation || '',\n eCommerceCustProactiveType: ProactiveChatNames.SpecificLocation\n };\n };\n }\n public getMessage(): string {\n // @TODO: Add message processing if needed\n return this.props.config.proactiveOnSpecificCountryRegionMessage || this.props.config.proactiveDefaultMessage;\n }\n}\n\nexport default SpecificCountryRegionTrigger;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ProactiveChatNames } from '../../helpers/consts';\nimport { TContextProvider } from '../../../interfaces';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * SpecificPageTrigger class - proactive chat is triggered if current page is listed in config.proactiveOnSpecificPageList\n */\nclass SpecificPageTrigger extends ProactiveChatTrigger {\n public async validate(): Promise {\n let isValid = false;\n if (this.props.config.proactiveOnSpecificPageList) {\n this.props.context.telemetry.debug(\n `[${SpecificPageTrigger.name}] Number of items in user-defined list of 'Specific Pages' was '${this.props.config.proactiveOnSpecificPageList?.length}'.`\n );\n for (let i = 0; i < (this.props.config.proactiveOnSpecificPageList?.length || 0); i++) {\n const specificPageTrimmed: string = this.props.config.proactiveOnSpecificPageList[i].trim();\n this.props.context.telemetry.debug(`[] Current location URL: ${window.location.href}.`);\n this.props.context.telemetry.debug(`[] Current item from user-defined list of 'Specific Page': ${specificPageTrimmed}.`);\n if (window.location.href.indexOf(specificPageTrimmed) > -1) {\n isValid = true;\n break;\n }\n }\n } else {\n this.props.context.telemetry.debug(`[Chat][${SpecificPageTrigger.name}] User-defined 'Specific Page' list was undefined.`);\n }\n this.props.context.telemetry.debug(`[Chat][${SpecificPageTrigger.name}] Validation returning '${isValid}'.`);\n return isValid;\n }\n\n public getContextProvider(): TContextProvider {\n return () => {\n return {\n ...this.context,\n eCommerceCustIsProactiveChat: 'True',\n eCommerceCustProactiveType: ProactiveChatNames.SpecificPage\n };\n };\n }\n\n public getMessage(): string {\n // @TODO: Add message processing if needed\n return this.props.config.proactiveOnSpecificPageMessage || this.props.config.proactiveDefaultMessage;\n }\n}\n\nexport default SpecificPageTrigger;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ProactiveChatNames } from '../../helpers/consts';\nimport { IChatContext, TContextProvider } from '../../../interfaces';\nimport { IPvaChatConnectorViewProps } from '../../msdyn365-pva-chat-connector';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * WaitOnTimeTrigger - proactive chat is triggered if user stays on current page for more than (config.proactiveOnWaitTimeSeconds) seconds\n */\nclass WaitOnTimeTrigger extends ProactiveChatTrigger {\n private waitTimeInMilliseconds: number | undefined;\n\n constructor(props: IPvaChatConnectorViewProps, context: IChatContext) {\n super(props, context);\n if (this.props.config.proactiveOnWaitTimeSeconds && !isNaN(this.props.config.proactiveOnWaitTimeSeconds)) {\n this.waitTimeInMilliseconds = Number(this.props.config.proactiveOnWaitTimeSeconds) * 1000;\n this.props.context.telemetry.debug(\n `[Chat][${WaitOnTimeTrigger.name}] Wait time (ms) set to: '${this.waitTimeInMilliseconds}'.`\n );\n }\n }\n\n public async validate(): Promise {\n const retVal: boolean = this.waitTimeInMilliseconds !== undefined;\n this.props.context.telemetry.debug(`[Chat][${WaitOnTimeTrigger.name}] Validation returning '${retVal}'.`);\n return retVal;\n }\n\n public getContextProvider(): TContextProvider {\n const triggerTime = Date.now() + (this.waitTimeInMilliseconds || 0);\n return () => {\n return triggerTime > Date.now()\n ? this.context\n : {\n ...this.context,\n eCommerceCustIsProactiveChat: 'True',\n eCommerceCustProactiveType: ProactiveChatNames.WaitOnTime,\n eCommerceCustProactiveTimeOnPage: `${this.waitTimeInMilliseconds ? this.waitTimeInMilliseconds : 0}`\n };\n };\n }\n\n public getMessage(): string {\n // @TODO: Add message processing if needed\n return this.props.config.proactiveOnWaitTimeMessage || this.props.config.proactiveDefaultMessage;\n }\n}\n\nexport default WaitOnTimeTrigger;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport CartAmountTrigger from './triggers/cart-amount-trigger';\nimport CartNumberOfItemsTrigger from './triggers/cart-number-of-items-trigger';\nimport CartSpecificProductTrigger from './triggers/cart-specific-product-trigger';\nimport DateRangeTrigger from './triggers/date-range-trigger';\nimport FromSpecificPageTrigger from './triggers/from-specific-page-trigger';\nimport PageVisitTrigger from './triggers/page-visits-trigger';\nimport SpecificCountryRegionTrigger from './triggers/specific-CountryRegion-trigger';\nimport SpecificPageTrigger from './triggers/specific-page-trigger';\nimport WaitOnTimeTrigger from './triggers/wait-on-time-trigger';\n\ntype ProactiveChat =\n | typeof DateRangeTrigger\n | typeof SpecificPageTrigger\n | typeof FromSpecificPageTrigger\n | typeof PageVisitTrigger\n | typeof SpecificCountryRegionTrigger\n | typeof CartAmountTrigger\n | typeof CartNumberOfItemsTrigger\n | typeof CartSpecificProductTrigger\n | typeof WaitOnTimeTrigger;\n\n/**\n * List of Proactive Chat Validators in order of validation (first proactive chat that pass validation is triggered, the rest are ommited)\n */\nexport const ProactiveTriggers: ProactiveChat[] = [\n DateRangeTrigger,\n SpecificPageTrigger,\n FromSpecificPageTrigger,\n PageVisitTrigger,\n SpecificCountryRegionTrigger,\n CartAmountTrigger,\n CartNumberOfItemsTrigger,\n CartSpecificProductTrigger,\n WaitOnTimeTrigger\n];\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IRequestContextUser } from '@msdyn365-commerce/core-internal/dist/types/interfaces/context/IRequestContext';\nimport { v4 as uuidv4 } from 'uuid';\nimport { ProactiveTriggers } from '../proactive';\nimport ProactiveChatTrigger from '../proactive/triggers/proactive-chat-trigger';\nimport { IPvaChatConnectorViewProps } from '../msdyn365-pva-chat-connector';\nimport { IProactiveData } from './../interfaces';\nimport { IChatContext, TContextProvider } from '../../interfaces';\n\n/**\n *\n * ContextProvider class - generates chat context, and checks for proactive triggers\n */\nclass ContextProvider {\n public data: IProactiveData;\n public props: IPvaChatConnectorViewProps;\n private user: IRequestContextUser;\n private userId: string;\n private context: IChatContext;\n private provider: TContextProvider | undefined;\n\n constructor(props: IPvaChatConnectorViewProps) {\n this.props = props;\n this.user = this.props.context.request.user;\n this.userId = `dl_${uuidv4()}`;\n this.context = this._getContext();\n // Proactive Chat related data\n this.data = {\n enabled: false,\n timeout: this.props.config.proactiveOnWaitTimeSeconds || 0,\n message: this.props.config.proactiveDefaultMessage\n };\n }\n\n /**\n * Executes Proactive Chat validation\n * @returns TContextProvider - a function returning IChatContext object\n */\n public async init(): Promise {\n try {\n await this._proactiveCheck();\n } catch (e) {\n // Use ?debug=true to see telemetry\n // If previous block fails, chat will still be available (no need to display any errors to user)\n this.props.telemetry.exception(e);\n }\n return this.provider || this._getProvider();\n }\n\n /**\n * Returns TContextProvider - a function returning IChatContext object\n */\n private _getProvider(): TContextProvider {\n return () => {\n return {\n eCommerceOperatingUnitNumber: this.props.context.request.apiSettings.oun,\n eCommerceBaseUrl: this.props.context.request.apiSettings.baseUrl,\n eCommerceDataAreaId: this.props.context.request.channel?.InventLocationDataAreaId,\n UserId: this.userId,\n // eCommerceCust...\n AccountNumber: this.user.customerAccountNumber ? this.user.customerAccountNumber : 'N/A',\n Email: this.user.emailAddress ? this.user.emailAddress : 'N/A',\n FirstName: this.user.firstName ? this.user.firstName : this.props.config.anonymousUserName,\n LastName: this.user.lastName ? this.user.lastName : 'N/A',\n Name: this.user.name ? this.user.name : this.props.config.anonymousUserName,\n eCommerceCustPageURL: window.location.href,\n eCommerceCustChatType: 'pva',\n // Proactive chat\n eCommerceCustIsProactiveChat: 'False',\n eCommerceCustProactiveType: 'N/A',\n // Date Range\n eCommerceCustProactiveFromDate: 'N/A',\n eCommerceCustProactiveToDate: 'N/A',\n // From Specific Page\n eCommerceCustProactiveCameFromPage: 'N/A',\n // No. Page Visits\n eCommerceCustProactiveNumberOfVisits: 'N/A',\n // Specific CountryRegion\n eCommerceCustProactiveCountryCode: 'N/A',\n // Specific Page => eCommerceCustPageURL\n // eCommerceCustProactiveSpecificPage: 'N/A',\n // Wait On Time\n eCommerceCustProactiveTimeOnPage: 'N/A',\n // Shopping cart amount\n eCommerceCustProactiveShoppingCartAmount: 'N/A',\n // Shopping cart number of items\n eCommerceCustProactiveShoppingCartNumberOfItems: 'N/A',\n // Shopping cart specific product\n eCommerceCustProactiveShoppingCartSpecificProduct: 'N/A'\n };\n };\n }\n\n /**\n * Returns default IChatContext object\n */\n private _getContext(): IChatContext {\n return this._getProvider()();\n }\n\n /**\n * Validates proactive triggers to check if proactive chat should be initialized\n */\n private async _proactiveCheck(): Promise {\n if (this.props.config.proactiveChatEnabled) {\n for (let i = 0; i < ProactiveTriggers.length; i++) {\n const proactive = new ProactiveTriggers[i](this.props, this.context);\n // Only first detected proactive trigger gets executed\n if (await this._isProactive(proactive)) {\n this.props.context.telemetry.debug(`First detected proactive trigger to be executed: ${proactive}`);\n break;\n }\n }\n }\n }\n\n /**\n * Validates if proactive chat should be triggered for given ProactiveTrigger\n * @param proactive ProactiveChatTrigger\n * @returns boolean\n */\n private async _isProactive(proactive: ProactiveChatTrigger): Promise {\n this.data.enabled = await proactive.validate();\n if (this.data.enabled) {\n this.provider = proactive.getContextProvider();\n this.data.message = proactive.getMessage();\n }\n return this.data.enabled;\n }\n}\n\nexport default ContextProvider;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/**\n * Style generating functions\n */\nimport { IAvatarStyling, IBubbleStyling, IChatCustomStyle, IChatStyling, IOtherStyling, ISuggestedActionStyling } from '../interfaces';\nimport { IMsdyn365PvaChatConnectorConfig } from '../msdyn365-pva-chat-connector.props.autogenerated';\n\nconst getChatWrapperStyle = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n return {\n position: config.position || 'inherit',\n top: config.top ? config.top : 'inherit',\n right: config.right ? config.right : 'inherit',\n bottom: config.bottom ? config.bottom : 'inherit',\n left: config.left ? config.left : 'inherit',\n zIndex: 1000,\n display: 'flex',\n justifyContent: 'flex-end'\n };\n};\n\nconst getMaximizedChatWrapperStyle = (config: IMsdyn365PvaChatConnectorConfig, isMobileDevice: boolean): React.CSSProperties => {\n if (isMobileDevice) {\n return {\n height: '90%',\n width: '100%',\n bottom: '0.5em',\n right: '0',\n padding: '5px'\n };\n }\n return {\n height: config.chatHeight ? config.chatHeight : '80%',\n width: config.chatWidth ? config.chatWidth : 'inherit'\n };\n};\n\nconst getChatButtonStyle = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n return {\n display: 'flex',\n alignItems: 'center',\n backgroundColor: config.startChatButtonBackgroundColor || 'white',\n color: config.startChatButtonTextColor || 'inherit',\n borderColor: config.startChatButtonBorderColor || 'inherit',\n borderRadius: config.startChatButtonBorderRadius || '0px',\n borderStyle: config.startChatButtonBorderStyle || 'solid',\n borderWidth: config.startChatButtonBorderWidth ? config.startChatButtonBorderWidth : '0px',\n padding: config.storeLogoURL ? '2px 20px 2px 2px' : '10px 20px 10px 20px',\n cursor: 'pointer',\n outlineStyle: 'none',\n alignSelf: 'flex-end',\n boxShadow: '0 0 4px rgba(102,102,102,.5)',\n WebkitBoxShadow: '0 0 4px rgba(102,102,102,.5)',\n MozBoxShadow: '0 0 4px rgba(102,102,102,.5)'\n };\n};\n\nconst getButtonStoreLogoStyle = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n return {\n backgroundColor: config.headerBackgroundColor || 'inherit',\n color: config.headerTextColor || 'inherit',\n borderRadius: '50%',\n padding: '11px',\n width: '30px',\n height: '30px',\n marginRight: '12px',\n borderStyle: 'solid',\n borderWidth: '1px',\n boxSizing: 'content-box'\n };\n};\n\nconst getChatStoreLogoStyle = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n return {\n backgroundColor: config.headerBackgroundColor || 'inherit',\n color: config.headerTextColor || 'inherit',\n borderRadius: '50%',\n padding: '11px',\n width: '30px',\n height: '30px',\n margin: '5px 12px 5px 5px',\n alignSelf: 'center',\n borderStyle: 'solid',\n borderWidth: '1px',\n boxSizing: 'content-box'\n };\n};\n\nconst getChatMessagesStyle = (config: IMsdyn365PvaChatConnectorConfig, minimized: boolean): React.CSSProperties => {\n return {\n display: minimized ? 'none' : 'block',\n backgroundColor: config.backgroundColor || 'White',\n height: '100%',\n width: '100%',\n boxSizing: 'border-box',\n position: 'relative'\n };\n};\n\nconst getChatMessageHeader = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n config.chatHeaderHeight = config.chatHeaderHeight || '70px';\n return {\n backgroundColor: config.headerBackgroundColor || 'inherit',\n backgroundImage: `url(\"${config.headerBackgroundImageURL}\")` || 'none',\n color: config.headerTextColor || 'inherit',\n backgroundRepeat: 'no-repeat',\n display: 'flex',\n alignItems: 'flex-start',\n flexDirection: 'row',\n width: '100%',\n position: 'absolute',\n top: config.chatHeaderHeight ? `-${config.chatHeaderHeight}` : '',\n height: config.chatHeaderHeight,\n borderColor: config.headerBackgroundColor ? config.headerBackgroundColor : 'inherit',\n borderStyle: config.chatBorderStyle ? config.chatBorderStyle : 'none',\n borderWidth: config.chatBorderWidth ? config.chatBorderWidth : '0px'\n };\n};\n\nconst getMinimizeButtonStyle = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n config.chatHeaderHeight = config.chatHeaderHeight || '70px';\n return {\n borderTop: 'none',\n borderLeft: 'none',\n borderRight: 'none',\n borderBottom: `solid 2px ${config.headerTextColor || 'White'}`,\n backgroundColor: 'transparent',\n padding: '5px 10px 3px 10px',\n cursor: 'pointer',\n outlineStyle: 'none',\n marginTop: '7px',\n marginRight: '7px'\n };\n};\n\nconst getCloseButtonStyle = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n config.chatHeaderHeight = config.chatHeaderHeight || '70px';\n return {\n border: 'none',\n color: config.headerTextColor || 'White',\n backgroundColor: 'transparent',\n padding: '0px 0px 0px 7px',\n cursor: 'pointer',\n outlineStyle: 'none',\n marginTop: '7px',\n marginRight: '7px'\n };\n};\n\nconst getChatMessageContent = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n config.chatHeaderHeight = config.chatHeaderHeight || '70px';\n return {\n height: '100%',\n width: '100%',\n borderColor: config.chatBorderColor ? config.chatBorderColor : 'inherit',\n borderStyle: config.chatBorderStyle ? config.chatBorderStyle : 'none',\n borderWidth: config.chatBorderWidth ? config.chatBorderWidth : '0px'\n };\n};\n\nconst getProactiveWrapperStyle = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n return {\n flexDirection: 'column',\n display: 'flex',\n justifyContent: 'flex-end',\n backgroundColor: config.backgroundColor || 'White'\n };\n};\n\nconst getProactiveMessageHeader = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n config.chatHeaderHeight = config.chatHeaderHeight || '70px';\n return {\n backgroundColor: config.headerBackgroundColor || 'inherit',\n backgroundImage: `url(\"${config.headerBackgroundImageURL}\")` || 'none',\n color: config.headerTextColor || 'inherit',\n backgroundRepeat: 'no-repeat',\n display: 'flex',\n alignItems: 'flex-start',\n flexDirection: 'row',\n boxSizing: 'border-box',\n width: '100%',\n height: config.chatHeaderHeight,\n borderColor: config.headerBackgroundColor ? config.headerBackgroundColor : 'inherit',\n borderStyle: config.chatBorderStyle ? config.chatBorderStyle : 'none',\n borderWidth: config.chatBorderWidth ? config.chatBorderWidth : '0px'\n };\n};\n\nconst getProactiveMessageContent = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n config.chatHeaderHeight = config.chatHeaderHeight || '70px';\n return {\n width: '100%',\n padding: '10px 20px',\n boxSizing: 'border-box',\n borderColor: config.chatBorderColor ? config.chatBorderColor : 'inherit',\n borderStyle: config.chatBorderStyle ? config.chatBorderStyle : 'none',\n borderWidth: config.chatBorderWidth ? config.chatBorderWidth : '0px'\n };\n};\n\nconst getProactiveButtonStyle = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n config.chatHeaderHeight = config.chatHeaderHeight || '70px';\n return {\n color: config.headerTextColor || 'inherit',\n cursor: 'pointer',\n padding: '5px 10px',\n outline: 'none',\n border: 'none',\n backgroundColor: config.headerBackgroundColor || 'inherit',\n borderRadius: '25px'\n };\n};\n\nconst getRedDotStyle = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n return {\n background: 'Red',\n borderRadius: '50%',\n height: '5px',\n width: '5px',\n position: 'absolute',\n right: '10px',\n bottom: '33px'\n };\n};\n\n/**\n * Generates styles for the chat wrapper, and proactive chat parts\n * @param config IMsdyn365PvaChatConnectorConfig\n * @param minimized boolean\n * @returns IChatCustomStyle\n */\nexport const getChatStyling = (config: IMsdyn365PvaChatConnectorConfig, minimized: boolean, isMobileDevice: boolean): IChatCustomStyle => {\n return {\n ChatWrapperStyle: getChatWrapperStyle(config),\n MaximizedChatWrapperStyle: getMaximizedChatWrapperStyle(config, isMobileDevice),\n ChatButtonStyle: getChatButtonStyle(config),\n ButtonStoreLogoStyle: getButtonStoreLogoStyle(config),\n ChatStoreLogoStyle: getChatStoreLogoStyle(config),\n ChatMessagesStyle: getChatMessagesStyle(config, minimized),\n ChatMessageHeader: getChatMessageHeader(config),\n MinimizeButtonStyle: getMinimizeButtonStyle(config),\n CloseButtonStyle: getCloseButtonStyle(config),\n ChatMessageContent: getChatMessageContent(config),\n ProactiveWrapperStyle: getProactiveWrapperStyle(config),\n ProactiveMessageHeader: getProactiveMessageHeader(config),\n ProactiveMessageContent: getProactiveMessageContent(config),\n ProactiveButtonStyle: getProactiveButtonStyle(config),\n RedDotStyle: getRedDotStyle(config)\n };\n};\n\nconst fontFormat = (font?: string): string | undefined => {\n if (font && font.length > 0) {\n const arr = font.split(',');\n for (let i = 0; i < arr.length; i++) {\n arr[i] = `'${arr[i].trim()}'`;\n }\n font = arr.join(', ');\n } else {\n font = \"'Calibri', 'Helvetica Neue', 'Arial', 'sans-serif'\";\n }\n\n return font;\n};\n\nconst getBubbleStyling = (config: IMsdyn365PvaChatConnectorConfig): IBubbleStyling => {\n return {\n bubbleBackground: config.bubbleBackground || 'White',\n bubbleTextColor: config.bubbleTextColor || 'Black',\n bubbleBorderColor: config.bubbleBorderColor || '#e6e6e6',\n bubbleBorderRadius: config.bubbleBorderRadius || '2',\n bubbleBorderStyle: config.bubbleBorderStyle || 'solid',\n bubbleBorderWidth: config.bubbleBorderWidth || '1',\n bubbleFromUserBackground: config.bubbleFromUserBackground || 'White',\n bubbleFromUserTextColor: config.bubbleFromUserTextColor || 'Black',\n bubbleFromUserBorderColor: config.bubbleFromUserBorderColor || '#e6e6e6',\n bubbleFromUserBorderRadius: config.bubbleFromUserBorderRadius || '2',\n bubbleFromUserBorderStyle: config.bubbleFromUserBorderStyle || 'solid',\n bubbleFromUserBorderWidth: config.bubbleFromUserBorderWidth || '1'\n };\n};\n\n// eslint-disable-next-line complexity\nconst getOtherStyling = (config: IMsdyn365PvaChatConnectorConfig): IOtherStyling => {\n return {\n groupTimestamp: config.groupTimestamp || true,\n sendTimeout: config.sendTimeout || '20000',\n sendTimeoutForAttachments: config.sendTimeoutForAttachments || '120000',\n timestampColor: config.timestampColor || 'undefined',\n timestampFormat: config.timestampFormat || 'undefined',\n notificationDebounceTimeout: config.notificationDebounceTimeout || '400',\n hideToaster: config.hideToaster || true,\n toasterHeight: config.toasterHeight || '32',\n toasterMaxHeight: config.toasterMaxHeight || '32 * 5',\n toasterSingularMaxHeight: config.toasterSingularMaxHeight || '50',\n toastFontSize: config.toastFontSize || '87.5%',\n toastIconWidth: config.toastIconWidth || '36',\n toastSeparatorColor: config.toastSeparatorColor || '#E8EAEC',\n toastTextPadding: config.toastTextPadding || '6',\n toastErrorBackgroundColor: config.toastErrorBackgroundColor || '#FDE7E9',\n toastErrorColor: config.toastErrorColor || '#A80000',\n toastInfoBackgroundColor: config.toastInfoBackgroundColor || '#CEF1FF',\n toastInfoColor: config.toastInfoColor || '#105E7D',\n toastSuccessBackgroundColor: config.toastSuccessBackgroundColor || '#DFF6DD',\n toastSuccessColor: config.toastSuccessColor || '#107C10',\n toastWarnBackgroundColor: config.toastWarnBackgroundColor || '#FFF4CE',\n toastWarnColor: config.toastWarnColor || '#3B3A39',\n typingAnimationBackgroundImage: config.typingAnimationBackgroundImage || 'undefined',\n typingAnimationDuration: config.typingAnimationDuration || '5000',\n typingAnimationHeight: config.typingAnimationHeight || '20',\n typingAnimationWidth: config.typingAnimationWidth || '64',\n videoHeight: config.videoHeight || '270',\n markdownExternalLinkIconImage:\n config.markdownExternalLinkIconImage ||\n 'url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIzIDMgMTggMTgiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTcuMjUwMSA0LjUwMDE3SDEwLjc0OTVDMTEuMTYzNyA0LjUwMDE3IDExLjQ5OTUgNC44MzU5NiAxMS40OTk1IDUuMjUwMTdDMTEuNDk5NSA1LjYyOTg2IDExLjIxNzMgNS45NDM2NiAxMC44NTEzIDUuOTkzMzJMMTAuNzQ5NSA2LjAwMDE3SDcuMjQ5NzRDNi4wNzA3OSA1Ljk5OTYxIDUuMTAzNDkgNi45MDY1NiA1LjAwNzg2IDguMDYxMTJMNS4wMDAyOCA4LjIyMDAzTDUuMDAzMTIgMTYuNzUwN0M1LjAwMzQzIDE3Ljk0MTUgNS45Mjg4NSAxOC45MTYxIDcuMDk5NjYgMTguOTk0OUw3LjI1MzcxIDE5LjAwMDFMMTUuNzUxOCAxOC45ODg0QzE2Ljk0MTUgMTguOTg2OCAxNy45MTQ1IDE4LjA2MiAxNy45OTM1IDE2Ljg5MjNMMTcuOTk4NyAxNi43Mzg0VjEzLjIzMjFDMTcuOTk4NyAxMi44MTc5IDE4LjMzNDUgMTIuNDgyMSAxOC43NDg3IDEyLjQ4MjFDMTkuMTI4NCAxMi40ODIxIDE5LjQ0MjIgMTIuNzY0MyAxOS40OTE4IDEzLjEzMDNMMTkuNDk4NyAxMy4yMzIxVjE2LjczODRDMTkuNDk4NyAxOC43NDA3IDE3LjkyOTMgMjAuMzc2OSAxNS45NTI4IDIwLjQ4MjlMMTUuNzUzOCAyMC40ODg0TDcuMjU4MjcgMjAuNTAwMUw3LjA1NDk1IDIwLjQ5NDlDNS4xNDIzOSAyMC4zOTU0IDMuNjA4OTUgMTguODYyNyAzLjUwODM3IDE2Ljk1MDJMMy41MDMxMiAxNi43NTExTDMuNTAwODkgOC4yNTI3TDMuNTA1MjkgOC4wNTAyQzMuNjA1MzkgNi4xMzc0OSA1LjEzODY3IDQuNjA0NDkgNy4wNTA5NiA0LjUwNTI3TDcuMjUwMSA0LjUwMDE3SDEwLjc0OTVINy4yNTAxWk0xMy43NDgxIDMuMDAxNDZMMjAuMzAxOCAzLjAwMTk3TDIwLjQwMTQgMy4wMTU3NUwyMC41MDIyIDMuMDQzOTNMMjAuNTU5IDMuMDY4MDNDMjAuNjEyMiAzLjA5MTIyIDIwLjY2MzQgMy4xMjE2MyAyMC43MTExIDMuMTU4ODVMMjAuNzgwNCAzLjIyMTU2TDIwLjg2NDEgMy4zMjAxNEwyMC45MTgzIDMuNDEwMjVMMjAuOTU3IDMuNTAwNTdMMjAuOTc2MiAzLjU2NDc2TDIwLjk4OTggMy42Mjg2MkwyMC45OTkyIDMuNzIyODJMMjAuOTk5NyAxMC4yNTU0QzIwLjk5OTcgMTAuNjY5NiAyMC42NjM5IDExLjAwNTQgMjAuMjQ5NyAxMS4wMDU0QzE5Ljg3IDExLjAwNTQgMTkuNTU2MiAxMC43MjMyIDE5LjUwNjUgMTAuMzU3MUwxOS40OTk3IDEwLjI1NTRMMTkuNDk4OSA1LjU2MTQ3TDEyLjI3OTcgMTIuNzg0N0MxMi4wMTM0IDEzLjA1MSAxMS41OTY4IDEzLjA3NTMgMTEuMzAzMSAxMi44NTc1TDExLjIxOSAxMi43ODQ5QzEwLjk1MjcgMTIuNTE4NyAxMC45Mjg0IDEyLjEwMjEgMTEuMTQ2MiAxMS44MDg0TDExLjIxODggMTEuNzI0M0wxOC40MzY5IDQuNTAxNDZIMTMuNzQ4MUMxMy4zNjg0IDQuNTAxNDYgMTMuMDU0NiA0LjIxOTMxIDEzLjAwNSAzLjg1MzI0TDEyLjk5ODEgMy43NTE0NkMxMi45OTgxIDMuMzcxNzcgMTMuMjgwMyAzLjA1Nzk3IDEzLjY0NjQgMy4wMDgzMUwxMy43NDgxIDMuMDAxNDZaIiBmaWxsPSIjMjEyMTIxIiAvPjwvc3ZnPg==)',\n markdownRespectCRLF: config.markdownRespectCRLF || 'true',\n internalLiveRegionFadeAfter: config.internalLiveRegionFadeAfter || '1000',\n accent: config.accent || '#0063B1',\n subtle: config.subtle || '#767676'\n };\n};\n\nconst getAvatarStyling = (config: IMsdyn365PvaChatConnectorConfig): IAvatarStyling => {\n return {\n avatarBorderRadius: config.avatarBorderRadius || '50%',\n avatarSize: config.avatarSize || '40',\n botAvatarBackgroundColor: config.botAvatarBackgroundColor || 'undefined',\n botAvatarImage: config.botAvatarImage || '',\n botAvatarInitials: config.botAvatarInitials || '',\n userAvatarBackgroundColor: config.userAvatarBackgroundColor || 'undefined',\n userAvatarImage: config.userAvatarImage || '',\n userAvatarInitials: config.userAvatarInitials || '',\n showAvatarInGroup: config.showAvatarInGroup || 'status'\n };\n};\n\nconst getSuggestedActionStyling = (config: IMsdyn365PvaChatConnectorConfig): ISuggestedActionStyling => {\n return {\n suggestedActionLayout: config.suggestedActionLayout || 'carousel',\n suggestedActionBackground: config.suggestedActionBackground || 'White',\n suggestedActionTextColor: config.suggestedActionTextColor || '',\n suggestedActionBorderColor: config.suggestedActionBorderColor || '',\n suggestedActionBorderRadius: config.suggestedActionBorderRadius || '0',\n suggestedActionBorderStyle: config.suggestedActionBorderStyle || 'solid',\n suggestedActionBorderWidth: config.suggestedActionBorderWidth || '2',\n suggestedActionDisabledBorderStyle: config.suggestedActionDisabledBorderStyle || 'solid',\n suggestedActionDisabledBorderWidth: config.suggestedActionDisabledBorderWidth || '2',\n suggestedActionDisabledTextColor: config.suggestedActionDisabledTextColor || '',\n suggestedActionHeight: config.suggestedActionHeight || '40',\n suggestedActionImageHeight: config.suggestedActionImageHeight || '20',\n suggestedActionsCarouselFlipperCursor: config.suggestedActionsCarouselFlipperCursor || '',\n suggestedActionsCarouselFlipperBoxWidth: config.suggestedActionsCarouselFlipperBoxWidth || '40',\n suggestedActionsCarouselFlipperSize: config.suggestedActionsCarouselFlipperSize || '20',\n suggestedActionsFlowMaxHeight: config.suggestedActionsFlowMaxHeight || '',\n suggestedActionsStackedHeight: config.suggestedActionsStackedHeight || '',\n suggestedActionsStackedOverflow: config.suggestedActionsStackedOverflow || '2',\n suggestedActionsStackedLayoutButtonMaxHeight: config.suggestedActionsStackedLayoutButtonMaxHeight || '',\n suggestedActionsStackedLayoutButtonTextWrap: config.suggestedActionsStackedLayoutButtonTextWrap || false\n };\n};\n\n/**\n * Generates style options for the Botframework-WebChat widget\n * @param config IMsdyn365PvaChatConnectorConfig\n * @returns IChatStyling\n */\nexport const getChatStyleOptions = (config: IMsdyn365PvaChatConnectorConfig): IChatStyling => {\n const bubbleStyling = getBubbleStyling(config);\n const avatarStyling = getAvatarStyling(config);\n const suggestedActionStyling = getSuggestedActionStyling(config);\n const otherStyling = getOtherStyling(config);\n return {\n hideUploadButton: true,\n primaryFont: fontFormat(config.primaryFont),\n backgroundColor: config.backgroundColor || 'White',\n ...bubbleStyling,\n ...avatarStyling,\n ...suggestedActionStyling,\n ...otherStyling\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport React from 'react';\nimport { IAction, IDispatch, INext } from '../interfaces';\nimport { TContextProvider } from '../../interfaces';\nimport { IPvaChatConnectorViewProps } from '../msdyn365-pva-chat-connector';\n\nexport class CommerceChatStore {\n private props: IPvaChatConnectorViewProps;\n private setNewMessageAction: React.Dispatch>;\n private provider?: TContextProvider;\n\n /**\n * Gets conversation token\n * @param props IPvaChatConnectorViewProps\n */\n public static async getDirectLineToken(props: IPvaChatConnectorViewProps): Promise {\n if (props.config.powervaDirectlineTokenURL && props.config.botID && props.config.tenantID) {\n // use direct line token url, bot id and tenant id from module config to get conversation token\n const url = `${props.config.powervaDirectlineTokenURL}?botId=${props.config.botID}&tenantId=${props.config.tenantID}`;\n const options = { method: 'GET' };\n return fetch(url, options)\n .then(r => r.json())\n .then(r => {\n if (r.token) {\n return r.token;\n } else {\n throw r;\n }\n });\n }\n\n // use direct line token url, bot id and tenant id from app config to get conversation token\n const url = `${props.context.app.config.pvaChatConnectorPowervaDirectlineTokenURL}?botId=${props.context.app.config.pvaChatConnectorBotID}&tenantId=${props.context.app.config.pvaChatConnectorTenantID}`;\n const options = {\n method: 'GET'\n };\n return fetch(url, options)\n .then(r => r.json())\n .then(r => {\n if (r.token) {\n return r.token;\n } else {\n throw r;\n }\n });\n }\n\n /**\n * Creates a new instance of commerce store for WebChat\n * @param props IPvaChatConnectorViewProps\n * @param provider TContextProvider\n * @param setNewMessage React.Dispatch>\n */\n constructor(\n props: IPvaChatConnectorViewProps,\n provider: TContextProvider | undefined,\n setNewMessage: React.Dispatch>\n ) {\n this.props = props;\n this.provider = provider;\n this.setNewMessageAction = setNewMessage;\n }\n\n /**\n * Handles custom chat actions\n * @param param0 {\n * dispatch: IDispatch;\n * next: INext;\n * action: IAction;\n * }\n */\n public async actionHandler({ dispatch, next, action }: { dispatch: IDispatch; next: INext; action: IAction }): Promise {\n const atype = action.type;\n\n switch (atype) {\n case 'DIRECT_LINE/CONNECT_FULFILLED': {\n // sets language\n dispatch({\n type: 'WEB_CHAT/SEND_EVENT',\n payload: {\n name: 'webchat/join',\n value: { language: window.navigator.language }\n }\n });\n break;\n }\n case 'DIRECT_LINE/INCOMING_ACTIVITY': {\n const activity = action.payload.activity;\n if (activity?.from?.role === 'bot') {\n // Sets flag for new message (will be use to indicate new messages from bot when chat is minimized)\n this.setNewMessageAction(true);\n }\n break;\n }\n case 'DIRECT_LINE/POST_ACTIVITY_FULFILLED': {\n switch (action.payload.activity.name) {\n case 'webchat/join':\n {\n if (this.provider !== undefined) {\n // Sets Chat Context\n dispatch({\n type: 'WEB_CHAT/SEND_EVENT',\n payload: {\n name: 'pvaSetContext',\n value: this.provider()\n }\n });\n }\n }\n break;\n case 'pvaSetContext':\n {\n if (this.props.config.triggerQuery) {\n // Initialize chat after Chat Context is set\n dispatch({\n type: 'WEB_CHAT/SEND_MESSAGE_BACK',\n payload: {\n text: this.props.config.triggerQuery\n }\n });\n }\n }\n break;\n default: {\n // default nothing\n }\n }\n break;\n }\n default: {\n // default nothing\n }\n }\n\n return next(action);\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport React, { FunctionComponent, useMemo, useState } from 'react';\nimport { getChatStyleOptions } from '../helpers/StyleComposers';\nimport { IChatCoreProps, IAction, IDispatch } from '../interfaces';\nimport { CommerceChatStore } from '../helpers/CommerceChatStore';\n\n/**\n * Just a core Chat component\n * @param props\n */\n\nconst ChatCore: FunctionComponent = (props: IChatCoreProps) => {\n const { ReactWebChat } = window.WebChat;\n\n const [userId, setUserId] = useState('');\n useMemo(() => {\n if (props.provider) {\n const ctx = props.provider();\n if (ctx.UserId) {\n setUserId(typeof ctx.UserId === 'string' ? ctx.UserId : ctx.UserId.value.toString());\n }\n }\n }, [props.provider]);\n\n const directLine = useMemo(() => {\n return window.WebChat.createDirectLine({ token: props.directLineToken });\n }, [props.directLineToken]);\n\n const commerceChatStore = useMemo(() => {\n if (directLine && props.provider) {\n return new CommerceChatStore(props.config, props.provider, props.setNewMessage);\n }\n return undefined;\n }, [props.provider, directLine]);\n\n const store = useMemo(() => {\n return window.WebChat.createStore(\n {},\n ({ dispatch }: { dispatch: IDispatch }) => (next: (action: IAction) => IDispatch) => (action: IAction) => {\n commerceChatStore?.actionHandler({ dispatch, next, action });\n }\n );\n }, [commerceChatStore]);\n const styleOptions = getChatStyleOptions(props.config.config);\n\n return props.directLineToken !== '' ? (\n \n ) : (\n

Please wait while we are connecting.

\n );\n};\n\nexport default ChatCore;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport React, { FunctionComponent, useEffect, useState } from 'react';\nimport { isMobile, VariantType } from '@msdyn365-commerce-modules/utilities';\nimport ContextProvider from '../helpers/ContextProvider';\nimport { getChatStyling } from '../helpers/StyleComposers';\nimport { TContextProvider } from '../../interfaces';\nimport { IPvaChatConnectorViewProps } from '../msdyn365-pva-chat-connector';\nimport { CommerceChatStore } from '../helpers';\nimport ChatCore from './ChatCore';\n\nconst INVALID_TOKEN = 'INVALID_TOKEN';\nconst CLOSE_IMG_DATA =\n 'M443.6,387.1L312.4,255.4l131.5-130c5.4-5.4,5.4-14.2,0-19.6l-37.4-37.6c-2.6-2.6-6.1-4-9.8-4c-3.7,0-7.2,1.5-9.8,4 L256,197.8L124.9,68.3c-2.6-2.6-6.1-4-9.8-4c-3.7,0-7.2,1.5-9.8,4L68,105.9c-5.4,5.4-5.4,14.2,0,19.6l131.5,130L68.4,387.1 c-2.6,2.6-4.1,6.1-4.1,9.8c0,3.7,1.4,7.2,4.1,9.8l37.4,37.6c2.7,2.7,6.2,4.1,9.8,4.1c3.5,0,7.1-1.3,9.8-4.1L256,313.1l130.7,131.1 c2.7,2.7,6.2,4.1,9.8,4.1c3.5,0,7.1-1.3,9.8-4.1l37.4-37.6c2.6-2.6,4.1-6.1,4.1-9.8C447.7,393.2,446.2,389.7,443.6,387.1z';\n\n/**\n * Outer chat component, displays chat button, and proactive chat, and handles custom actions\n * @param props IPvaChatConnectorViewProps\n */\nconst Chat: FunctionComponent = (props: IPvaChatConnectorViewProps) => {\n const [loaded, setLoaded] = useState(false); // loaded & minimized are needed as ChatWidget should not be removed from DOM (it resets chat)\n const [minimized, setMinimized] = useState(true);\n const [newMessage, setNewMessage] = useState(false); // TODO: use this to indicate new message in minimized chat\n const [token, setToken] = useState(''); // holds conversation token for WebChat\n const [isProactive, setIsProactive] = useState(false); // if proactive chat is triggered\n const [proactiveMessage, setProactiveMessage] = useState(props.config.proactiveDefaultMessage);\n const [closed, setClosed] = useState(false);\n const [provider, setProvider] = useState();\n const isMobileDevice =\n isMobile({ variant: VariantType.Browser, context: props.context.request }) === 'xs' ||\n isMobile({ variant: VariantType.Viewport, context: props.context.request }) === 'xs';\n const chatStyle = getChatStyling(props.config, minimized, isMobileDevice); // generates chat style objects based on configuration\n const handleMaximizeButtonClick = () => {\n setLoaded(true);\n setMinimized(false);\n setNewMessage(false);\n };\n const handleMinimizeButtonClick = () => {\n setMinimized(true);\n setNewMessage(false);\n };\n const handleCloseButtonClick = () => {\n setClosed(true);\n setLoaded(false);\n setMinimized(true);\n setNewMessage(false);\n setIsProactive(false);\n };\n useEffect(() => {\n if (loaded) {\n CommerceChatStore.getDirectLineToken(props)\n .then(directLineToken => {\n setToken(directLineToken);\n })\n .catch(e => {\n setToken(INVALID_TOKEN);\n props.telemetry.exception(e);\n });\n }\n }, [loaded]);\n useEffect(() => {\n (async () => {\n const contextProvider = new ContextProvider(props); // Generates context (provider) and checks for proactive chat triggers\n const prov = await contextProvider.init();\n if (contextProvider.data.enabled) {\n props.context.telemetry.debug(`[Chat] Proactive chat was enabled: '${contextProvider.data.enabled}'.`);\n // if proactive chat is triggered\n const timeout = contextProvider.data.timeout * 1000; // timeout is there only for WaitOnTime trigger\n setTimeout(() => {\n if (!loaded) {\n props.context.telemetry.debug(`[Chat] Proactive chat was loaded: ${loaded}.`);\n setProactiveMessage(contextProvider.data.message);\n setIsProactive(true);\n }\n }, timeout);\n }\n setProvider(() => prov);\n })().catch(e => props.telemetry.exception(e));\n }, []);\n useEffect(() => {\n if (closed) {\n setClosed(false);\n }\n }, [token, provider]);\n const isValidToken = (): boolean => {\n return `${token}` !== INVALID_TOKEN;\n };\n return (\n \n {minimized && (!isProactive || (isProactive && loaded)) && (\n \n )}\n {minimized && isProactive && !loaded && (\n
\n
\n {props.config.storeLogoURL && (\n logo\n )}\n
\n
\n
\n

{proactiveMessage}

\n \n
\n
\n )}\n {loaded && isValidToken() && (\n
\n
\n {props.config.storeLogoURL && (\n logo\n )}\n
\n \n
\n
\n \n
\n
\n )}\n {!isValidToken() &&
{props.config.unableToLoadChatMessage}
}\n
\n );\n};\n\nexport default Chat;\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';\nimport { Chat, IPvaChatConnectorViewProps } from './index';\n\nexport default (props: IPvaChatConnectorViewProps) => {\n // Only for CDN loading check, won't be needed with npm package of Botframework-WebChat\n const [loaded, setLoaded] = React.useState(false);\n const p = {\n ...props\n };\n\n // Just to verify that CDN Chat Widget js lib is loaded\n // Remove this block if moving to npm package of Botframework-WebChat\n const interval = setInterval(() => {\n const t = typeof window;\n if (t !== 'undefined' && window.WebChat) {\n setLoaded(true);\n clearInterval(interval);\n }\n }, 100);\n\n return
{loaded && }
;\n};\n"],"names":["PvaChatConnector","React","componentDidMount","isOboRequest","this","props","context","request","url","config","botFrameworkCDNURL","app","pvaChatConnectorBotFrameworkCDNURL","script","document","createElement","src","async","crossOrigin","body","appendChild","render","renderView","constructor","CartAmountTrigger","ProactiveChatTrigger","super","totalInCart","min","proactiveOnCartAmountMin","max","proactiveOnCartAmountMax","telemetry","debug","name","cart","_getCart","isEmpty","TotalAmount","retVal","getContextProvider","_objectSpread","eCommerceCustIsProactiveChat","eCommerceCustProactiveType","eCommerceCustProactiveShoppingCartAmount","getMessage","proactiveOnCartAmountMessage","proactiveDefaultMessage","getCartState","actionContext","CartNumberOfItemsTrigger","numberOfItems","proactiveOnCartNoOfItemsMin","proactiveOnCartNoOfItemsMax","TotalItems","eCommerceCustProactiveShoppingCartNumberOfItems","proactiveOnCartNoOfItemsMessage","CartSpecificProductTrigger","product","isValid","CartLines","_cart$cart$CartLines","length","i","_cart$cart$CartLines2","proactiveOnCartSpecificProductList","_this$props$config$pr","j","_this$props$config$pr2","ItemId","eCommerceCustProactiveShoppingCartSpecificProduct","proactiveOnCartSpecificProductMessage","ProactiveChatNames","DateRangeTrigger","start","_toDate","proactiveOnDateRangeStart","end","proactiveOnDateRangeEnd","now","Date","setHours","getTime","DateRange","eCommerceCustProactiveFromDate","toUTCString","eCommerceCustProactiveToDate","proactiveOnDateRangeMessage","date","dateParts","split","FromSpecificPageTrigger","proactiveOnFromSpecificPageList","fromSpecificPageTrimmed","trim","window","referrer","indexOf","FromSpecificPage","eCommerceCustProactiveCameFromPage","proactiveOnFromSpecificPageMessage","PageVisitTrigger","visits","cookieName","cookies","expdate","setTime","isConsentGiven","setConsentCookie","_updateVisitCounter","proactiveOnPageVisitNumber","clear","set","domain","location","hostname","path","pathname","expires","PageVisits","eCommerceCustProactiveNumberOfVisits","proactiveOnPageVisitMessage","get","value","SpecificCountryRegionTrigger","customerCountryCode","suggestedMarket","proactiveOnSpecificLocation","toLowerCase","eCommerceCustProactiveCountryCode","SpecificLocation","proactiveOnSpecificCountryRegionMessage","SpecificPageTrigger","proactiveOnSpecificPageList","specificPageTrimmed","href","SpecificPage","proactiveOnSpecificPageMessage","WaitOnTimeTrigger","proactiveOnWaitTimeSeconds","isNaN","waitTimeInMilliseconds","Number","undefined","triggerTime","WaitOnTime","eCommerceCustProactiveTimeOnPage","proactiveOnWaitTimeMessage","ProactiveTriggers","user","userId","uuidv4","_getContext","data","enabled","timeout","message","_proactiveCheck","e","exception","provider","_getProvider","_this$props$context$r","eCommerceOperatingUnitNumber","apiSettings","oun","eCommerceBaseUrl","baseUrl","eCommerceDataAreaId","channel","InventLocationDataAreaId","UserId","AccountNumber","customerAccountNumber","Email","emailAddress","FirstName","firstName","anonymousUserName","LastName","lastName","Name","eCommerceCustPageURL","eCommerceCustChatType","proactiveChatEnabled","proactive","_isProactive","validate","getChatWrapperStyle","position","top","right","bottom","left","zIndex","display","justifyContent","getMaximizedChatWrapperStyle","isMobileDevice","height","width","padding","chatHeight","chatWidth","getChatButtonStyle","alignItems","backgroundColor","startChatButtonBackgroundColor","color","startChatButtonTextColor","borderColor","startChatButtonBorderColor","borderRadius","startChatButtonBorderRadius","borderStyle","startChatButtonBorderStyle","borderWidth","startChatButtonBorderWidth","storeLogoURL","cursor","outlineStyle","alignSelf","boxShadow","WebkitBoxShadow","MozBoxShadow","getButtonStoreLogoStyle","headerBackgroundColor","headerTextColor","marginRight","boxSizing","getChatStoreLogoStyle","margin","getChatMessagesStyle","minimized","getChatMessageHeader","chatHeaderHeight","backgroundImage","headerBackgroundImageURL","backgroundRepeat","flexDirection","chatBorderStyle","chatBorderWidth","getMinimizeButtonStyle","borderTop","borderLeft","borderRight","borderBottom","marginTop","getCloseButtonStyle","border","getChatMessageContent","chatBorderColor","getProactiveWrapperStyle","getProactiveMessageHeader","getProactiveMessageContent","getProactiveButtonStyle","outline","fontFormat","font","arr","join","CommerceChatStore","setNewMessage","setNewMessageAction","static","powervaDirectlineTokenURL","botID","tenantID","fetch","method","then","r","json","token","pvaChatConnectorPowervaDirectlineTokenURL","pvaChatConnectorBotID","pvaChatConnectorTenantID","_ref","dispatch","next","action","type","payload","language","navigator","_activity$from","activity","from","role","triggerQuery","text","ReactWebChat","WebChat","setUserId","useState","useMemo","ctx","toString","directLine","createDirectLine","directLineToken","commerceChatStore","store","createStore","actionHandler","styleOptions","bubbleStyling","bubbleBackground","bubbleTextColor","bubbleBorderColor","bubbleBorderRadius","bubbleBorderStyle","bubbleBorderWidth","bubbleFromUserBackground","bubbleFromUserTextColor","bubbleFromUserBorderColor","bubbleFromUserBorderRadius","bubbleFromUserBorderStyle","bubbleFromUserBorderWidth","getBubbleStyling","avatarStyling","avatarBorderRadius","avatarSize","botAvatarBackgroundColor","botAvatarImage","botAvatarInitials","userAvatarBackgroundColor","userAvatarImage","userAvatarInitials","showAvatarInGroup","getAvatarStyling","suggestedActionStyling","suggestedActionLayout","suggestedActionBackground","suggestedActionTextColor","suggestedActionBorderColor","suggestedActionBorderRadius","suggestedActionBorderStyle","suggestedActionBorderWidth","suggestedActionDisabledBorderStyle","suggestedActionDisabledBorderWidth","suggestedActionDisabledTextColor","suggestedActionHeight","suggestedActionImageHeight","suggestedActionsCarouselFlipperCursor","suggestedActionsCarouselFlipperBoxWidth","suggestedActionsCarouselFlipperSize","suggestedActionsFlowMaxHeight","suggestedActionsStackedHeight","suggestedActionsStackedOverflow","suggestedActionsStackedLayoutButtonMaxHeight","suggestedActionsStackedLayoutButtonTextWrap","getSuggestedActionStyling","otherStyling","groupTimestamp","sendTimeout","sendTimeoutForAttachments","timestampColor","timestampFormat","notificationDebounceTimeout","hideToaster","toasterHeight","toasterMaxHeight","toasterSingularMaxHeight","toastFontSize","toastIconWidth","toastSeparatorColor","toastTextPadding","toastErrorBackgroundColor","toastErrorColor","toastInfoBackgroundColor","toastInfoColor","toastSuccessBackgroundColor","toastSuccessColor","toastWarnBackgroundColor","toastWarnColor","typingAnimationBackgroundImage","typingAnimationDuration","typingAnimationHeight","typingAnimationWidth","videoHeight","markdownExternalLinkIconImage","markdownRespectCRLF","internalLiveRegionFadeAfter","accent","subtle","getOtherStyling","hideUploadButton","primaryFont","getChatStyleOptions","userID","INVALID_TOKEN","loaded","setLoaded","setMinimized","newMessage","setToken","isProactive","setIsProactive","proactiveMessage","setProactiveMessage","closed","setClosed","setProvider","isMobile","variant","VariantType","Browser","Viewport","chatStyle","getChatStyling","ChatWrapperStyle","MaximizedChatWrapperStyle","ChatButtonStyle","ButtonStoreLogoStyle","ChatStoreLogoStyle","ChatMessagesStyle","ChatMessageHeader","MinimizeButtonStyle","CloseButtonStyle","ChatMessageContent","ProactiveWrapperStyle","ProactiveMessageHeader","ProactiveMessageContent","ProactiveButtonStyle","RedDotStyle","background","handleMaximizeButtonClick","useEffect","getDirectLineToken","catch","contextProvider","ContextProvider","prov","init","setTimeout","isValidToken","style","onClick","alt","fontWeight","fontSize","chatButtonHeader","chatButtonText","className","flexGrow","handleMinimizeButtonClick","handleCloseButtonClick","id","version","viewBox","xmlSpace","d","fill","ChatCore","unableToLoadChatMessage","p","interval","setInterval","clearInterval","Chat","Object","assign"],"sourceRoot":""}