{"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<IMsdyn365PvaChatConnectorData> {\n    config: IMsdyn365PvaChatConnectorConfig;\n}\n\n/**\n * PvaChatConnector component\n * @extends {React.PureComponent<IPvaChatConnectorProps<IPvaChatConnectorData>>}\n */\nclass PvaChatConnector extends React.PureComponent<IMsdyn365PvaChatConnectorProps<IMsdyn365PvaChatConnectorData>> {\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<boolean>;\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<boolean> {\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<ICartState> {\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<boolean> {\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<ICartState> {\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<boolean> {\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<ICartState> {\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<boolean> {\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<boolean> {\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<boolean> {\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<number>(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<number>(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<number>(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 = (<IExtendedRequest>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<boolean> {\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<boolean> {\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<boolean> {\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<TContextProvider> {\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 <IChatContext>{\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<void> {\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<boolean> {\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 <React.CSSProperties>{\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 <React.CSSProperties>{\n            height: '90%',\n            width: '100%',\n            bottom: '0.5em',\n            right: '0',\n            padding: '5px'\n        };\n    }\n    return <React.CSSProperties>{\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 <React.CSSProperties>{\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 <React.CSSProperties>{\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 <React.CSSProperties>{\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 <React.CSSProperties>{\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 <React.CSSProperties>{\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 <React.CSSProperties>{\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 <React.CSSProperties>{\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 <React.CSSProperties>{\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 <React.CSSProperties>{\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 <React.CSSProperties>{\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 <React.CSSProperties>{\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 <React.CSSProperties>{\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 <React.CSSProperties>{\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 <IChatCustomStyle>{\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<React.SetStateAction<boolean>>;\n    private provider?: TContextProvider;\n\n    /**\n     * Gets conversation token\n     * @param props IPvaChatConnectorViewProps\n     */\n    public static async getDirectLineToken(props: IPvaChatConnectorViewProps): Promise<string> {\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<React.SetStateAction<boolean>>\n     */\n    constructor(\n        props: IPvaChatConnectorViewProps,\n        provider: TContextProvider | undefined,\n        setNewMessage: React.Dispatch<React.SetStateAction<boolean>>\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<IDispatch> {\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<IChatCoreProps> = (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        <ReactWebChat directLine={directLine} userID={userId} styleOptions={styleOptions} store={store} />\n    ) : (\n        <p>Please wait while we are connecting.</p>\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<IPvaChatConnectorViewProps> = (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<TContextProvider | undefined>();\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        <div\n            style={{\n                ...chatStyle.ChatWrapperStyle,\n                ...(!minimized && loaded && isValidToken() ? chatStyle.MaximizedChatWrapperStyle : {})\n            }}\n        >\n            {minimized && (!isProactive || (isProactive && loaded)) && (\n                <button onClick={handleMaximizeButtonClick} style={chatStyle.ChatButtonStyle}>\n                    {props.config.storeLogoURL && <img src={props.config.storeLogoURL} alt='logo' style={chatStyle.ButtonStoreLogoStyle} />}\n                    <div style={{}}>\n                        <div style={{ fontWeight: 'bold', fontSize: '120%' }}>{props.config.chatButtonHeader}</div>\n                        <div>{props.config.chatButtonText}</div>\n                    </div>{' '}\n                    {newMessage && (\n                        <span className='red-dot' style={chatStyle.RedDotStyle}>\n                            .\n                        </span>\n                    )}\n                </button>\n            )}\n            {minimized && isProactive && !loaded && (\n                <div style={chatStyle.ProactiveWrapperStyle}>\n                    <div style={chatStyle.ProactiveMessageHeader}>\n                        {props.config.storeLogoURL && (\n                            <img src={props.config.storeLogoURL} alt='logo' style={chatStyle.ChatStoreLogoStyle} />\n                        )}\n                        <div style={{ flexGrow: 1 }} />\n                    </div>\n                    <div style={chatStyle.ProactiveMessageContent}>\n                        <p>{proactiveMessage}</p>\n                        <button onClick={handleMaximizeButtonClick} style={chatStyle.ProactiveButtonStyle}>\n                            Let&apos;s chat\n                        </button>\n                    </div>\n                </div>\n            )}\n            {loaded && isValidToken() && (\n                <div style={chatStyle.ChatMessagesStyle}>\n                    <div style={chatStyle.ChatMessageHeader}>\n                        {props.config.storeLogoURL && (\n                            <img src={props.config.storeLogoURL} alt='logo' style={chatStyle.ChatStoreLogoStyle} />\n                        )}\n                        <div style={{ flexGrow: 1 }} />\n                        <button onClick={handleMinimizeButtonClick} style={chatStyle.MinimizeButtonStyle} />\n                        <button onClick={handleCloseButtonClick} style={chatStyle.CloseButtonStyle}>\n                            <svg height='16px' id='Layer_1' version='1.1' viewBox='0 0 512 512' width='16px' xmlSpace='preserve'>\n                                <path d={CLOSE_IMG_DATA} fill={props.config.headerTextColor} />\n                            </svg>\n                        </button>\n                    </div>\n                    <div style={chatStyle.ChatMessageContent}>\n                        <ChatCore directLineToken={token} config={props} provider={provider} setNewMessage={setNewMessage} />\n                    </div>\n                </div>\n            )}\n            {!isValidToken() && <div style={{ display: 'flex', alignItems: 'flex-end' }}>{props.config.unableToLoadChatMessage}</div>}\n        </div>\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 <div className='row'>{loaded && <Chat {...p} />}</div>;\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":""}