{"version":3,"file":"static/js/main.dc48741a.js","mappings":"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","sources":["EnvUtils.ts","IVAChatStatusProvider.tsx","Logger.ts","components/AlmeApp/AlmeAppState.ts","components/AlmeDialog/ModalDialog.tsx","components/AlmeTenantSelector/AlmeTenants.ts","components/AlmeTenantSelector/ThemeWrapper.tsx","components/AlmeTestPage/AlmeTestPageState.ts","components/AlmeUtilities/Icons/IconTypes.ts","components/AlmeUtilities/Icons/PlainIcon.tsx","components/AlmeUtilities/Icons/StyledIcon.tsx","components/AlmeUtilities/dateutils.ts","components/AlmeUtilities/device-utils.ts","components/AlmeUtilities/dom-utils.ts","components/AlmeUtilities/icon-utils.ts","components/Common/constants.ts","fontAwesome.ts","serviceWorker.ts","index-app.tsx","components/LiveChat/AlmeLiveChatBanner/AlmeLiveChatBannerConfig.ts","alme-config/appConfigMain.tsx","components/AlmeUtilities/Icons/IconButton.tsx","components/AlmeHeader/AlmeMinimize/AlmeMinimize.tsx","components/AlmeUtilities/Animations/CssLoadingEllipses.tsx","components/AlmeResponse/AlmeResponse.styles.ts","components/LiveChat/AlmeLiveChatBanner/AlmeLiveChatBannerTemplate.tsx","components/LiveChat/AlmeLiveChatResponse/AlmeLiveChatStartResponse/AlmeLiveChatStart.tsx","components/LiveChat/AlmeLiveChatResponse/UpdateChatResponses.tsx","AlmeApiUtils.ts","AlmeApi.ts","utils/ObjectUtils.ts","components/AlmeDialog/ConfirmDialog.tsx","components/AlmeHeader/AlmeClose/AlmeClose.styles.ts","components/LiveChat/AlmeLiveChatReportingEvents.ts","components/AlmeHeader/AlmeClose/AlmeClose.tsx","assets/images/switch-position-icon.svg","components/AlmeHeader/SwitchChatPosition/SwitchChatPositionButton.tsx","components/AlmeHeader/AlmeHeader.tsx","components/AlmeUtilities/Icons/Avatar.tsx","components/AlmeUtilities/Icons/UserAvatar.tsx","components/AlmeResponse/ChatBubble.tsx","components/AlmeSurvey/AlmeSurveyDialog.tsx","components/AlmeSurvey/AlmeSurveyModel.ts","components/AlmeSurvey/AlmeSurvey.tsx","components/AlmeInlineForm/AlmeDropdown/AlmeDropdown.tsx","components/AlmeInlineForm/AlmeInlineConstants.ts","components/Custom/Datepicker/LazyDatepickerControl.tsx","components/AlmeLoader/AlmeLoader.tsx","components/AlmeInlineForm/Datepicker/InlineDatepicker.tsx","components/AlmeInlineForm/AlmeInlineForm.tsx","components/AlmeInlineForm/InlineFormResponseAction.ts","components/ErrorBoundary/ErrorBoundary.tsx","components/AlmeOverlayForm/controls/control.styles.tsx","components/AlmeOverlayForm/controls/DatePickerControl.tsx","components/AlmeOverlayForm/controls/DropdownControl.tsx","components/AlmeOverlayForm/controls/TextboxControl.tsx","components/AlmeOverlayForm/DataCollectionPane.tsx","components/AlmeOverlayForm/FeedbackAppEventParam.ts","components/AlmeOverlayForm/FeedbackFormOverlay.tsx","utils/resourceUtils.ts","utils/scriptLoader.ts","components/AlmeOverlayForm/transmit/loadTransmitSDK.ts","components/AlmeApp/AlmeAppSessionState.ts","components/AlmeOverlayForm/transmit/TransmitFormOverlay.tsx","components/AlmeOverlayForm/DisplayFormResponseAction.ts","components/AlmeOverlayForm/OverlayForm.tsx","components/AlmeResponse/AlternateLoginAutoNav.ts","components/Custom/OneClickLink.tsx","components/AlmeResponse/ResponseFocusHandler.tsx","components/AlmeUtilities/Icons/OperatorIcon.tsx","components/LiveChat/AlmeLiveChatResponse/AlmeLiveChatOperatorResponse/AlmeLiveChatOperatorResponse.tsx","components/AlmeResponse/AlmeResponse.tsx","hooks/useAltLoginNavigationHook.ts","components/LiveChat/AlmeLiveChatResponse/AlmeLiveChatUserResponse/AlmeLiveChatUserResponse.tsx","components/AlmeUtilities/Icons/LivechatIcon.tsx","components/LiveChat/AlmeLiveChatResponse/AlmeLiveChatSystemResponse/AlmeLiveChatSystemResponse.tsx","components/LiveChat/AlmeLiveChatResponse/AlmeLiveChatOperatorResponse/UserCheckStatus/AlmeLiveChatSessionTimeoutPopup.tsx","components/LiveChat/AlmeLiveChatResponse/AlmeLiveChatOperatorResponse/UserCheckStatus/AlmeLiveChatCheckUserStatusResponse.tsx","components/LiveChat/AlmeLiveChatResponse/AlmeLiveChatEndResponse/AlmeLiveChatEnd.tsx","components/AlmeOverlayForm/OverlaySurvey/AlmeOverlaySurveyDialog.tsx","components/LiveChat/AlmeLiveChatSurvey/AlmeLiveChatSurveyResponse.tsx","components/LiveChat/AlmeLiveChatResponse/AlmeLiveChatResponse.tsx","components/AlmeHistory/AlmeHistory.tsx","components/AlmeInput/MessageInputBox.tsx","components/AlmeInput/AlmeInput.tsx","components/AlmeFooter/AlmeFooter.tsx","components/AlmeLaunchPoint/LaunchIconButtonStyles.ts","components/AlmeLaunchPoint/LaunchIconButton.tsx","components/AlmeLaunchPoint/AlmeLaunchPoint.tsx","components/AlmeApp/AppContainer.ts","components/AlmeUtilities/Transitions/Grow.tsx","components/AlmeSession/IvaSessionTimeout.tsx","components/AlmeSession/AlmeSessionTimeoutUtils.ts","components/AlmeApp/initialize/loginState.ts","components/LiveChat/AlmeLiveChatControls/AlmeEndLiveChatDialog.tsx","components/AlmeUtilities/Animations/CssLoadingDots.tsx","components/LiveChat/AlmeLiveChatControls/AlmeLiveChatOperatorTypingResponse.tsx","components/LiveChat/AlmeLiveChatControls/AlmeLiveChatControls.tsx","hooks/useRecursiveTimeout.ts","components/AlmeApp/initialize/sendInitialAppEvents.ts","components/AlmeApp/initializeAppEvents.ts","components/AlmeApp/initialize/sendAutoLaunchMessage.ts","components/AlmeApp/initialize/getConfiguration.ts","components/AlmeApp/initialize/ivaAvailability.ts","components/AlmeApp/initialize/loadAlmeHistory.ts","components/AlmeApp/initializeAlmeApp.ts","components/AlmeApp/SessionMessages.ts","post-message/MessageHandlers/MessageHandlerBase.ts","post-message/MessageHandlers/SwitchAccountHandler.ts","post-message/MessageHandlers/LaunchIvaHandler.ts","post-message/MessageHandlers/ContinueSessionHandler.ts","post-message/MessageHandlers/ManageAccountsHandler.ts","post-message/MessageHandlers/DeepLinkRespHandler.ts","post-message/AlmeMessageHandlerUtils.ts","post-message/useDelayPostMessageHandler.ts","components/AlmeApp/AlmeApp.tsx","components/ResponseActions/AlmeLiveChatStart/AlmeLiveChatStartUtils.ts","components/ResponseActions/AlmeLiveChatEnd/AlmeLiveChatEndUtils.ts","alme-config/AlmeAppConfig.tsx","components/LiveChat/AlmeLiveChatSurvey/AlmeLiveChatSurveyUtils.ts","hooks/useLiveChatConnected.ts","hooks/usePostMessageListener.ts","components/AlmeApp/initialize/sendPointOfNeedAppEvent.ts","hooks/usePollForChat.ts","hooks/usePollForHistory.ts","components/AlmeResponse/AlmeResponseExt.ts","hooks/useSetChatStatus.ts","webpack://cb-iva-react-web-ui/./src/assets/styles/styles.css?11b4","App.tsx","initializeApp.tsx","utils/HtmlUtils.ts","platform/identifiers.ts","post-message/MessageType.ts","post-message/PostMessageListener.ts","post-message/PostMessageUtils.ts","themes/bpTheme.ts","themes/defaultTheme.ts","themes/psccTheme.ts","utils/DebugUtils.ts","utils/FunctionUtils.ts","utils/PromiseUtils.ts","utils/UrlUtils.ts","assets/styles/styles.css"],"sourcesContent":["const siteUrl = process.env.PUBLIC_URL;\n\nconst almeApiHostName = process.env.REACT_APP_ALME_API_HOST;\n\nconst consumerCenterPreLoginURLs = process.env.REACT_APP_ConsumerCenter_PreLoginURLs?.split(',');\n\nconst version = process.env.VERSION;\n\nconst isProduction = process.env.IsProduction === \"true\";\n\nexport {\n almeApiHostName,\n siteUrl,\n consumerCenterPreLoginURLs,\n version,\n isProduction,\n};","import React, { useContext, ReactElement, useState, ReactNode, useRef } from 'react';\nimport { callIfFunction } from './utils/FunctionUtils';\n\nexport interface IVAChatStatus {\n /** Flag reprensents whether IVA is enabled for the platform loading the IVA */\n isAvailable: boolean;\n\n /** IVA chat window is open or not */\n isOpen: boolean;\n\n /** Active conversation happening with the user */\n isActive: boolean;\n\n /** Chat window position */\n chatPosition: ScreenPosition;\n\n /** IVA chat icon position */\n chatIconPosition: ScreenPosition;\n}\n\nexport type ScreenPosition = \"BottomRight\" | \"BottomLeft\" | \"TopRight\" | \"TopLeft\";\n\nconst DefaultChatPosition: ScreenPosition = \"BottomRight\";\nconst DefaultChatIconPosition: ScreenPosition = \"TopRight\";\n\nexport interface Position {\n topRight: () => void;\n topLeft: () => void;\n bottomRight: () => void;\n bottomLeft: () => void;\n}\n\nexport interface IVASetChatStatus {\n initChatStatus: (ivaChatStatus: IVAChatStatus) => void;\n openChat: () => void;\n closeChat: () => void;\n minimizeChat: () => void;\n positionChat: Position;\n positionChatIcon: Position;\n setInternalMinimizeChatHook: (hook: () => void) => void;\n}\n\nconst IVAChatStatusContext = React.createContext({\n isAvailable: false,\n isOpen: false,\n isActive: false,\n chatPosition: DefaultChatPosition,\n chatIconPosition: DefaultChatIconPosition });\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nconst noop = () => {\n //intentionally using empty function\n};\n\nconst IVASetChatStatusContext = React.createContext({\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n initChatStatus(ivaChatStatus: IVAChatStatus) {\n //intentionally using empty function\n },\n openChat: noop,\n closeChat: noop,\n minimizeChat: noop,\n positionChat: {\n topRight: noop,\n topLeft: noop,\n bottomRight: noop,\n bottomLeft: noop,\n },\n positionChatIcon: {\n topRight: noop,\n topLeft: noop,\n bottomRight: noop,\n bottomLeft: noop,\n },\n setInternalMinimizeChatHook(hook) {\n //intentionally using empty function\n },\n});\n\nexport const useIVAChatStatus = () => {\n return useContext(IVAChatStatusContext);\n};\n\nexport const useIVASetChatStatus = () => {\n return useContext(IVASetChatStatusContext);\n};\n\ninterface IVAChatStatusProviderProps {\n children?: ReactNode;\n chatPosition?: ScreenPosition;\n chatIconPosition?: ScreenPosition;\n}\n\nexport const IVAChatStatusProvider = ({ children, chatPosition, chatIconPosition }: IVAChatStatusProviderProps): ReactElement => {\n\n const [chatStatus, setChatStatus] = useState({\n isAvailable: false,\n isOpen: false,\n isActive: false,\n chatPosition: chatPosition || DefaultChatPosition,\n chatIconPosition: chatIconPosition || DefaultChatIconPosition });\n\n const onMinimizeChatHook = useRef<() => void>();\n\n const ivaSetChatStatus: IVASetChatStatus = {\n initChatStatus: setChatStatus,\n openChat() { setChatStatus({...chatStatus, isOpen: true, isActive: true}); },\n closeChat() { setChatStatus({...chatStatus, isOpen: false, isActive: false}); },\n setInternalMinimizeChatHook(hook: () => void) {\n onMinimizeChatHook.current = hook;\n },\n minimizeChat() {\n callIfFunction(onMinimizeChatHook.current);\n setChatStatus({...chatStatus, isOpen: false});\n },\n positionChat: {\n topRight() { setChatStatus({...chatStatus, chatPosition: \"TopRight\"}); },\n topLeft() { setChatStatus({...chatStatus, chatPosition: \"TopLeft\"}); },\n bottomRight() { setChatStatus({...chatStatus, chatPosition: \"BottomRight\"}); },\n bottomLeft() { setChatStatus({...chatStatus, chatPosition: \"BottomLeft\"}); },\n },\n positionChatIcon: {\n topRight() { setChatStatus({...chatStatus, chatIconPosition: \"TopRight\"}); },\n topLeft() { setChatStatus({...chatStatus, chatIconPosition: \"TopLeft\"}); },\n bottomRight() { setChatStatus({...chatStatus, chatIconPosition: \"BottomRight\"}); },\n bottomLeft() { setChatStatus({...chatStatus, chatIconPosition: \"BottomLeft\"}); },\n },\n };\n\n return (\n \n <>\n {children}\n \n \n );\n};","import { Logger as ApiLogger } from '@alme/types/logging/Logger';\n\nexport type Logger = ApiLogger;\n\nexport enum UiLogLevel {\n FATAL = 1,\n ERROR = 2,\n WARN = 3,\n INFO = 4,\n DEBUG = 5,\n ALL = 6,\n}\n\nexport class ConsoleLogger implements Logger {\n private static instance: ConsoleLogger;\n public loggingLevel: UiLogLevel;\n\n private constructor(loggingLevel: UiLogLevel) {\n this.loggingLevel = loggingLevel;\n }\n\n static getInstance = (loggingLevel: UiLogLevel): ConsoleLogger => {\n if (!ConsoleLogger.instance || loggingLevel !== ConsoleLogger.instance.loggingLevel) {\n ConsoleLogger.instance = new ConsoleLogger(loggingLevel);\n }\n\n ConsoleLogger.instance.loggingLevel = loggingLevel;\n return ConsoleLogger.instance;\n };\n\n error(message?: unknown, ...optionalParams: unknown[]): void {\n if (this.loggingLevel >= 1) {\n console.error(message, ...optionalParams);\n }\n }\n\n warn(message?: unknown, ...optionalParams: unknown[]): void {\n if (this.loggingLevel >= 3) {\n console.warn(message, ...optionalParams);\n }\n }\n\n info(message?: unknown, ...optionalParams: unknown[]): void {\n if (this.loggingLevel >= 4) {\n console.info(message, ...optionalParams);\n }\n }\n\n infoTrace(title: string, ...optionalParams: unknown[]): void {\n if(this.loggingLevel >= 4) {\n console.groupCollapsed(title);\n console.log(...optionalParams);\n console.trace();\n console.groupEnd();\n }\n }\n\n debug(message?: unknown, ...optionalParams: unknown[]): void {\n if (this.loggingLevel >= 5) {\n console.debug(message, ...optionalParams);\n }\n }\n\n log(message?: unknown, ...optionalParams: unknown[]): void {\n if (this.loggingLevel >= 6) {\n console.log(message, ...optionalParams);\n }\n }\n}\n\nconst defaultLevel: UiLogLevel = 3;\n\nexport const defaultLogLevel = defaultLevel;","import { Logger } from './../../Logger';\nimport { AlmeAppConfig } from '../../alme-config/AlmeAppConfig';\nimport { CookieLoader } from '@alme/storage-ts/CookieLoader';\nimport { AlmeResponseExt } from '../AlmeResponse/AlmeResponseExt';\nimport { getLogger } from '../../utils/DebugUtils';\nimport { gettopdomain } from '../../utils/UrlUtils';\n\nexport type PlatformMessageKey = \"SwitchAccount\";\n\nexport interface SwitchAccountMessage {\n accountId: string;\n}\n\nexport type PlatformMessage = SwitchAccountMessage;\n\nexport interface CustomerCheckStatusMessage{\n responseRevision: number;\n timeStamp: number;\n sessionId: string;\n}\n\nexport interface SessionMessages {\n sessionId?: string;\n messages?: Record;\n insertEchatSessionInfoCalled?: boolean;\n}\n\nexport interface AlmeSavedAppState {\n isOpen?: boolean;\n lastEntryId?: string;\n clientSessionId?: string;\n isLoggedIn: boolean;\n accessKey?: string;\n sessionMessages?: SessionMessages;\n customerCheckStatusMessage? : CustomerCheckStatusMessage;\n lastActivityTime?: number;\n sessionExpired?: boolean;\n chatId?: string;\n sessionId?:string;\n cifId?: string;\n}\n\nexport interface AlmeAppState extends AlmeSavedAppState {\n history: AlmeResponseExt[];\n hasPreviousConversation: boolean;\n historyLoaded: boolean;\n launchQuestion?: string;\n launchPointName?: string;\n launchParameter?: string;\n isLiveChatConnected: boolean;\n isLiveChatSessionTimeout: boolean;\n isInitialAppEventsSent: boolean;\n}\n\nexport class AlmeAppUtilsBase {\n protected almeState: AlmeAppState;\n protected setAlmeState: (state: AlmeAppState) => void;\n protected appConfig: AlmeAppConfig;\n protected logger: Logger;\n\n constructor(almeState: AlmeAppState, setAlmeState: (state: AlmeAppState) => void, appConfig: AlmeAppConfig) {\n this.almeState = almeState;\n this.setAlmeState = setAlmeState;\n this.appConfig = appConfig;\n this.logger = getLogger(appConfig.UiLogLevel);\n }\n}\n\nconst savedAppState = new CookieLoader('almeUiState');\n\nif(window.location.host.indexOf('localhost')===-1){\n savedAppState.cookieOptions = {domain: gettopdomain()};\n}\n\nexport function updateAppState(state: AlmeSavedAppState): void {\n const savedState = {\n isOpen: state.isOpen,\n lastEntryId: state.lastEntryId,\n isLoggedIn: state.isLoggedIn,\n clientSessionId: state.clientSessionId,\n sessionMessages: state.sessionMessages,\n customerCheckStatusMessage: state.customerCheckStatusMessage,\n sessionExpired: state.sessionExpired,\n lastActivityTime: state.lastActivityTime,\n sessionId: state.sessionId,\n cifId: state.cifId,\n };\n savedAppState.UpdateStorage(savedState);\n}\n\nexport function clearStorage(): void {\n try {\n savedAppState.ClearStorage();\n } catch (ex) {\n console.error(ex);\n }\n}\n\nexport function getCurrentAppState(): AlmeSavedAppState {\n let appState: AlmeSavedAppState = {\n isLoggedIn: false,\n };\n try {\n appState = savedAppState.GetStorage() || appState;\n } catch (ex) {\n console.error(ex);\n }\n return appState;\n}","import React, { ReactElement, CSSProperties } from 'react';\nimport styled, { DefaultTheme } from 'styled-components';\nimport { fontWeights } from 'syf-component-library/defaultTheme';\nimport { FocusComponentProps } from '../models/ComponentProps';\nimport Button from 'syf-component-library/ui/atoms/Button';\nimport TabTrap from 'syf-component-library/helpers/TabTrap';\n\ninterface WrapperProps {\n height?: number;\n\n /** Removes default border and background color */\n noBackground?: boolean;\n\n theme: DefaultTheme;\n}\n\nconst DialogTitleContainer = styled.div`\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n align-items: center;\n margin: 0;\n padding: 10px;\n background-color: inherit;\n color: black;\n font-weight: ${fontWeights.semiBold};\n`;\n\nexport interface DialogContentProps {\n maxWidth?: number;\n}\n\nexport const DialogContent = styled.div`\n padding: 10px;\n color: black;\n outline: none;\n display: flex;\n flex-direction: column;\n background-color: inherit;\n flex-grow: 1;\n`;\n\nexport const DialogFooter = styled.div`\n padding-top: 10px 30px;\n display: flex;\n flex-direction: column;\n align-items: stretch;\n justify-content: flex-end;\n`;\n\nexport const DialogButton = styled(Button)`\n height: 32px;\n text-align: center;\n margin: 10px;\n`;\n\nexport interface DialogTitleProps {\n id: string;\n children: React.ReactNode;\n focusProps?: FocusComponentProps;\n}\n\nexport const DialogTitle = ((props: DialogTitleProps): ReactElement => {\n return (\n \n {props.children}\n \n );\n});\n\nexport interface ModalProps {\n /** Unique ID required in case there are multiple modals rendering simultaneously */\n id: string;\n\n /** Content of Modal */\n children?: Array | ReactElement;\n\n /** Element to be rendered as Header */\n header?: ReactElement;\n\n /** Element to be rendered as Footer */\n footer?: ReactElement;\n\n /** Used to override styles */\n className?: string;\n\n style?: CSSProperties;\n\n /** Removes default border and background color */\n noBackground?: boolean;\n\n /** Dialog description, not required if you pass ariaLabelledBy or ariaDescribedBy */\n ariaLabel?: string;\n\n /** ID of Dialog title element */\n ariaLabelledBy?: string;\n\n /** ID of Dialog description element */\n ariaDescribedBy?: string;\n}\n\n// darkened overlay styles - need to use pseudo element\nexport const Overlay = styled.div` \n position: fixed;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n z-index: 1;\n padding: 0;\n margin: 0;\n background-color: rgba(255,255,255,0.8);\n`;\n\nexport const Container = styled.div`\n position: relative;\n display: flex;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n padding: 0;\n margin: 0;\n overflow: auto;\n`;\n\nconst modalWrapperHeight = (props: WrapperProps) => props.height ? `@media all and (-ms-high-contrast:none) { height: ${props.height}px; }`: 'height: auto;';\n\nconst modalDefaultBackground = (wrapperProps: WrapperProps) => {\n if(!wrapperProps.noBackground) {\n return `\n background-color: ${wrapperProps.theme.AgentConversationBackground};\n opacity: 1;\n box-shadow: -1px 2px 15px 1px rgba(0,0,0,0.4);\n border-radius: 10px;\n `;\n }\n};\n\nexport const ModalWrapper = styled.div`\n overflow: none;\n ${modalDefaultBackground}\n margin: auto;\n width: auto;\n display: flex; \n flex-direction: column;\n align-content: stretch;\n padding: 0;\n box-sizing: border-box;\n ${modalWrapperHeight}\n & > div { \n display: flex;\n flex-direction: column;\n align-content: stretch;\n flex-grow: 1;\n }\n`;\n\nconst ModalDialog = ({\n id,\n children,\n header,\n className,\n footer,\n ...props\n}: ModalProps): ReactElement => {\n\n const dialogProps = {\n 'aria-label': props.ariaLabel,\n 'aria-labelledby': props.ariaLabelledBy,\n 'aria-describedby': props.ariaDescribedBy,\n };\n\n return (\n \n \n \n \n <>\n {header}\n {children}\n {footer}\n \n \n \n \n );\n};\nexport default ModalDialog;","import bpTheme from '../../themes/bpTheme';\nimport psccTheme from '../../themes/psccTheme';\nimport defaultTheme from '../../themes/defaultTheme';\nimport { DefaultTheme } from 'styled-components';\nimport { Platform } from '../../types/Platform';\nimport { TenantThemes } from './TenantThemes';\n\nexport interface TenantSelectorThemeData {\n theme: DefaultTheme;\n name: string;\n label: string;\n value: string;\n platform: Platform;\n}\n\nexport const defaultTenant: TenantSelectorThemeData = {\n value: '00000000-0000-0000-0000-000000000000',\n label: 'Default',\n name: 'default',\n theme: defaultTheme,\n platform: 'RC',\n};\n\nexport const tenants: TenantSelectorThemeData[] = [\n {\n value: '43d2c366-699a-4311-95e8-f2f99bda7b77',\n label: 'BP',\n name: 'bp',\n theme: bpTheme,\n platform: 'RC',\n },\n {\n value: '0000-0000-0000-0000-0000-000000000000',\n label: 'Default',\n name: 'default',\n theme: defaultTheme,\n platform: 'RC',\n },\n {\n value: 'adfc20cc-10de-4e04-aa31-d878fc1e4fa5',\n label: 'PSCC',\n name: 'pscc',\n theme: psccTheme,\n platform: 'PSCC',\n },\n];\n\nexport function getTenantByAccessKey(accessKey: string): TenantSelectorThemeData | undefined {\n return tenants.find((val: TenantSelectorThemeData) => accessKey && val.value === accessKey.trim());\n}\n\nexport function getTenantByName(name: string): TenantSelectorThemeData {\n return tenants.find((val: TenantSelectorThemeData) => val.name === name.toLowerCase()) as TenantSelectorThemeData;\n}\n\nexport function isPSCCTenant(tenant: TenantSelectorThemeData): boolean {\n return tenant.name === 'pscc';\n}\n\nexport function isBNPLTenant(tenant: TenantSelectorThemeData): boolean {\n return tenant.name === 'bnpl';\n}\n\nlet tenantThemes: Promise = Promise.resolve(undefined);\n\nif(!process.env.REACT_APP_VISTA_PLATFORM) {\n tenantThemes = import('./TenantThemes').then((themeModule) => themeModule.default);\n}\n\nexport const getTheme = (name: keyof TenantThemes): Promise => {\n return tenantThemes.then(t => (t && t[name]) || defaultTheme);\n};","import React, { ReactElement, useRef } from \"react\";\nimport { ThemeProvider } from \"styled-components\";\nimport { UiLogLevel } from \"../../Logger\";\nimport defaultTheme from \"../../themes/defaultTheme\";\nimport { TenantSelectorThemeData } from \"./AlmeTenants\";\n\nexport interface ThemeWrapperProps {\n tenant: TenantSelectorThemeData;\n children: ReactElement | null;\n uiLogLevel?: UiLogLevel;\n}\n\nexport const ThemeWrapper: React.FC = (props: ThemeWrapperProps) => {\n const themeLoadInitiated = useRef(false);\n\n if(!themeLoadInitiated.current) {\n themeLoadInitiated.current = true;\n }\n\n return (\n { props.children }\n );\n};","import { LocalStorageLoader } from \"@alme/storage-ts/LocalStorageLoader\";\nimport SFDDLObject from \"../data/_SFDDL/eservice.json\";\nimport PSCCNavResponseObject from \"../data/PSCCNavResponse.json\";\nexport interface UserObj {\n // RC parameters\n accountNumber?: string;\n primaryName?: string;\n accountType?: string;\n zipCode?: string;\n\n // // PSCC parameters\n // accountId?: string;\n\n // // RC & PSCC parameters\n // emailId: string;\n\n cifId? : string;\n\n}\n\nexport interface LoginParams {\n clientSessionId: string;\n userMetadata: UserObj;\n}\n\nexport interface LaunchSettings {\n launchPointName: string;\n launchParameter: string;\n}\n\nexport interface TestPageUIState {\n loginParams: LoginParams;\n launchSettings: LaunchSettings;\n SFDDL: string;\n PSCCNavResponse: string;\n}\n\nexport interface TestPageState {\n uiState: TestPageUIState;\n}\n\nconst savedTestPageState = new LocalStorageLoader('almeUiTestPageState');\n\nexport function updateTestPageState(state: TestPageUIState): void {\n try {\n savedTestPageState.UpdateStorage(state);\n } catch (ex) {\n console.error(ex);\n }\n}\n\nexport function getTestPageState(): TestPageUIState | null {\n let testPageState: TestPageUIState | null = null;\n try {\n testPageState = savedTestPageState.GetStorage();\n\n } catch (ex) {\n console.error(ex);\n }\n return testPageState;\n}\n\nexport const defaultTestPageState: TestPageUIState = {\n loginParams: {\n clientSessionId: '1234',\n userMetadata: {\n accountNumber: '1234',\n cifId:'0000',\n primaryName: 'Sydney AwesomeIva',\n zipCode: '99216',\n accountType: 'Generic',\n },\n },\n launchSettings: {\n launchPointName: 'Global',\n launchParameter: 'Main',\n },\n SFDDL: JSON.stringify(SFDDLObject),\n PSCCNavResponse: JSON.stringify(PSCCNavResponseObject),\n};","import { IconProp } from '@fortawesome/fontawesome-svg-core';\n\n/**\n * Icon prefix \"fas\" | \"fab\" | \"far\" | \"fal\" | \"fad\" \n * is considered as suffix\n */\nexport type IconSuffixType = \"Solid\" | \"Light\";\n\nconst IconSuffixRegex = /(Solid|Light)$/;\n\nexport type IconType = \"MinimizeButton\"\n | \"CloseButton\"\n | \"SendIcon\"\n | \"ExternalLinkIcon\"\n | \"ThumbUpIconSolid\"\n | \"ThumbUpIconLight\"\n | \"ThumbDownIconSolid\"\n | \"ThumbDownIconLight\"\n | \"CommentIcon\"\n | \"OldScrollIcon\"\n | \"ChevronRight\"\n | \"ChevronLeft\"\n | \"ChevronUp\"\n | \"ChevronDown\"\n | \"ArrowLeft\"\n | \"ArrowRight\";\n\nexport function IconNameWithoutSuffix(iconTpe: IconType): string {\n return iconTpe.replace(IconSuffixRegex, () => \"\");\n}\n\nconst iconTypes: Record = {\n MinimizeButton: ['fal', 'minus'],\n CloseButton: ['fal', 'times'],\n SendIcon: ['fas', 'paper-plane'],\n ExternalLinkIcon: ['fal', 'external-link'],\n ThumbUpIconSolid: ['fas', 'thumbs-up'],\n ThumbUpIconLight: ['fal', 'thumbs-up'],\n ThumbDownIconSolid: ['fas', 'thumbs-down'],\n ThumbDownIconLight: ['fal', 'thumbs-down'],\n CommentIcon: ['fas', 'comment-alt-lines'],\n OldScrollIcon: ['fas', 'scroll-old'],\n ChevronRight: ['far', 'chevron-right'],\n ChevronLeft: ['far', 'chevron-left'],\n ChevronUp: ['far', 'chevron-up'],\n ChevronDown: ['far', 'chevron-down'],\n ArrowLeft: ['fal', 'arrow-left'],\n ArrowRight: ['fal', 'arrow-right'],\n};\n\nexport default iconTypes;","import { IconProp } from \"@fortawesome/fontawesome-svg-core\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport React, { FC } from \"react\";\nimport styled from \"styled-components\";\n\nexport interface PlainIconProps {\n size: number;\n color?: string;\n icon: IconProp;\n}\n\nconst IconWrapper = styled.div<{size: number; color?: string}>`\n padding: 0;\n margin: 0;\n height: ${props => props.size}px !important;\n width: ${props => props.size}px !important;\n display:flex;\n align-items: center;\n justify-content: center;\n color: ${props => props.color || \"inherit\"};\n`;\n\nconst Icon = styled.div<{size: number}>`\n display: inline-block;\n font-size: ${props => props.size - 5}px;\n`;\n\nexport const PlainIcon: FC = (props: PlainIconProps) => {\n return (\n \n \n \n \n \n );\n};","import React, { FC } from 'react';\nimport styled from 'styled-components';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport iconTypes, { IconType, IconNameWithoutSuffix } from './IconTypes';\n\nexport interface StyledIconProps {\n size: number;\n iconType: IconType;\n}\n\nexport interface StateIconProps extends StyledIconProps {\n selected: boolean;\n}\n\nconst IconWrapper = styled.span`\n padding: 0;\n margin: 0;\n font-size: ${(props: StyledIconProps) => props.size}px;\n`;\n\nexport const Icon: FC = (props:StyledIconProps) => {\n const icon = iconTypes[props.iconType];\n return (\n \n \n \n );\n};\n\nexport const StateIcon: FC = (props: StateIconProps) => {\n const iconNameWithoutSuffix = IconNameWithoutSuffix(props.iconType);\n return (\n \n \n \n );\n};","import addDays from \"date-fns/addDays\";\nimport format from \"date-fns/format\";\n\nconst dateRegex = /^[01][0-9]\\/[0-3][0-9]\\/\\d{4}$/;\n\nexport function parseDate(value: string): Date | null {\n if (value && value.length === 8) {\n return new Date(+value.substring(0, 4), (+value.substring(4, 2) - 1), +value.substring(6, 2));\n }\n\n return null;\n}\n\nexport function getCurrentDate(): Date {\n const date = new Date();\n return new Date(date.getFullYear(), date.getMonth(), date.getDate());\n}\n\nexport function TwoDigitFormat(num?: number): string {\n const digits = \"00\";\n const numStr = `${digits}${num || \"\"}`;\n return numStr.substring(numStr.length - 2);\n}\n\nexport function formatdate(value: Date): string {\n return `${value.getFullYear()}${TwoDigitFormat(value.getMonth() + 1)}${TwoDigitFormat(value.getDate())}`;\n}\n\nexport function dateAddDays(date: Date, amount: number): Date {\n return addDays(date, amount);\n}\n\nexport function getStartDate(minDays: number, hasParent?: boolean, dependentDateValue?: Date): Date {\n if(hasParent && dependentDateValue) {\n return dependentDateValue;\n }\n\n const date = new Date(getCurrentDate());\n\n if(typeof minDays === 'number' && !isNaN(minDays)) {\n date.setDate(date.getDate() + minDays);\n } else {\n date.setFullYear(date.getFullYear() - 100);\n }\n\n return date;\n}\n\nexport function getEndDate(maxDays: number, parentDate?: Date, parentDependentDays?: number, hasChild?: boolean, childDate?: Date): Date {\n if(parentDate && parentDependentDays) {\n return addDays(parentDate, parentDependentDays);\n }\n const maxDate = new Date(getCurrentDate());\n\n if(typeof maxDays === 'number' && !isNaN(maxDays)) {\n maxDate.setDate(maxDate.getDate() + maxDays);\n } else {\n maxDate.setFullYear(maxDate.getFullYear() + 100);\n }\n\n if(hasChild && childDate) {\n return (maxDate < childDate ? maxDate : childDate);\n }\n\n return maxDate;\n}\n\n/**\n * @param value - Date string with format MM/dd/yyyy\n * @returns date\n */\nexport function parseInputDate(value: string): Date | null {\n if(!dateRegex.test(value)) {\n return null;\n }\n\n const dateParts = value.split(\"/\");\n\n /** Javascript date 0 - Jan, 11 - Dec */\n const month = +dateParts[0] - 1;\n\n if(month < 0 || month > 11) {\n return null;\n }\n\n const day = +dateParts[1];\n const year = +dateParts[2];\n\n const date = new Date(year, month, day);\n\n /**\n * Javascript Date constructor accepts month and date beyond Range\n */\n if(date.getDate() !== day && month !== date.getMonth()) {\n return null;\n }\n\n return date;\n}\n\nexport function commonDateValidations(date: Date | null, isRequired?: boolean, minDate?: Date, maxDate?: Date): string {\n let error = \"\";\n if(!date && isRequired) {\n error = 'Required field';\n }\n\n if(date && minDate && date < minDate) {\n error = `Selected date should be greater than ${format(minDate, 'MM/dd/yyyy')}`;\n }\n\n if(date && maxDate && date > maxDate) {\n error = `Selected date should be lesser than ${format(maxDate, 'MM/dd/yyyy')}`;\n }\n\n return error;\n}\n\nexport function commonDateFieldValidation(dateString: string, isRequired?: boolean): string {\n let error = \"\";\n if(dateString.length === 0 && isRequired) {\n error = \"Required field\";\n }\n\n if(dateString.length > 0 && dateString.length < 10) {\n error = \"Invalid date\";\n }\n\n return error;\n}","import { isMobile } from 'react-device-detect';\n\nexport function isMobileDevice() {\n return isMobile;\n}","import { CommonElementId } from \"../Common/constants\";\n\nconst EscapeKey = \"Escape\";\nconst EnterKey = \"Enter\";\nconst Keydown = \"keydown\";\n\nexport function focusMessageBox() {\n const messageBox = document.getElementById(CommonElementId.MessageInputBox);\n if(messageBox) {\n messageBox.focus();\n }\n}\n\nexport function onEnterKeyPress(evt: KeyboardEvent, onKeyPress: () => void): void {\n if(evt.key === EnterKey) {\n onKeyPress();\n }\n}\n\nexport function onKeyEscape(element: HTMLElement, onEscapeFn: () => void): void {\n element.addEventListener(Keydown, (e: Event) => {\n const eventKey = (e as KeyboardEvent).key;\n if (eventKey === EscapeKey) {\n e.preventDefault();\n onEscapeFn();\n }\n });\n}\n\nexport const doScroll = (ref: React.MutableRefObject): void => {\n if (ref && ref.current && ref.current.scrollIntoView) {\n ref.current.scrollIntoView({\n behavior: 'smooth',\n block: 'start',\n });\n }\n};\n\nexport function observeMutations(\n elementSelector: string | HTMLElement,\n callback: MutationCallback,\n options?: MutationObserverInit | undefined): MutationObserver | null {\n const element = typeof elementSelector === 'string' ? document.querySelector(elementSelector) : elementSelector;\n\n if(!element) {\n return null;\n }\n\n const observer = new MutationObserver(callback);\n observer.observe(element, options);\n\n return observer;\n}\n\nexport function focusChatIcon() {\n const launchButton = document.getElementById(CommonElementId.AlmeLaunchButton);\n if(launchButton) {\n launchButton.focus();\n }\n}","export function createSvgImageUrl(icon: string): string {\n return `data:image/svg+xml;base64,${btoa(icon)}`;\n}","\nexport const CommonElementId = {\n MessageInputBox: \"alme-message-input-box\",\n AlmeLaunchButton: \"launchIvaBtn\",\n};","import {library, config } from '@fortawesome/fontawesome-svg-core';\nimport { faTimes,\n faMinus,\n faExternalLink,\n faThumbsUp,\n faThumbsDown,\n faUserClock,\n faUserCheck,\n faUserTimes,\n faCalendarAlt,\n faCalendarExclamation,\n faArrowLeft,\n faArrowRight,\n faCheck } from '@fortawesome/pro-light-svg-icons';\nimport { faChevronUp, faChevronDown, faChevronRight, faChevronLeft } from '@fortawesome/pro-regular-svg-icons';\nimport { faPaperPlane, faThumbsUp as faThumbsUpSolid, faThumbsDown as faThumbsDownSolid } from '@fortawesome/free-solid-svg-icons';\nimport { faUser, faCommentAltLines, faScrollOld } from '@fortawesome/pro-solid-svg-icons';\nimport '@fortawesome/fontawesome-svg-core/styles.css';\nconfig.autoAddCss = false;\n\nlibrary.add(\n faPaperPlane,\n faTimes,\n faMinus,\n faUser,\n faExternalLink,\n faChevronUp,\n faChevronDown,\n faCalendarAlt,\n faCalendarExclamation,\n faThumbsUp,\n faThumbsDown,\n faThumbsUpSolid,\n faThumbsDownSolid,\n faCommentAltLines,\n faUserClock,\n faUserCheck,\n faUserTimes,\n faScrollOld,\n faChevronRight,\n faChevronLeft,\n faArrowLeft,\n faArrowRight,\n faCheck);","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\nconst readyError = 'serviceWorker.ready failed';\nconst hostRegex = /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/;\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n hostRegex.exec(window.location.hostname),\n);\n\ntype Config = {\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\n};\n\nconst onInstallingWorkerStateChange = (installingWorker: ServiceWorker, registration: ServiceWorkerRegistration, config?: Config) => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.',\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n};\n\nfunction registerValidSW(swUrl: string, config?: Config): void {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = (): void => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = (): void => {\n onInstallingWorkerStateChange(installingWorker, registration, config);\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl: string, config?: Config): void {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.includes('javascript'))\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then((registration: ServiceWorkerRegistration) => {\n registration.unregister().then(() => {\n window.location.reload();\n }).catch((reason) => {\n console.error('serviceWorker.unregister failed', reason);\n });\n }).catch((reason) => {\n console.error(readyError, reason);\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.',\n );\n });\n}\n\nexport function register(config?: Config): void {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(\n (process as { env: Record }).env.PUBLIC_URL,\n window.location.href,\n );\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA',\n );\n }).catch((reason) => {\n console.error(readyError, reason);\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nexport function unregister(): void {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().catch((reason) => {\n console.error('serviceWorker.unregister failed', reason);\n });\n }).catch((reason) => {\n console.error(readyError, reason);\n });\n }\n}\n","import React, { Suspense } from \"react\";\nimport ReactDOM from \"react-dom\";\n\nimport * as serviceWorker from \"./serviceWorker\";\n\nimport { axeConfig } from \"./setupAxeConfig\";\nimport { initializeApp } from \"./initializeApp\";\nimport { initializedPromise } from \"./utils/PromiseUtils\";\nimport { getSiteIdentifier } from \"./platform/identifiers\";\nimport { IVAChatStatusProvider } from \"./IVAChatStatusProvider\";\n\nconst initializationCheckTimes = 40;\nconst intervalInMs = 500;\n\nasync function renderAlmeUi(): Promise {\n if (process.env.NODE_ENV === \"development\") {\n const axe = (await import(\"react-axe\")).default;\n await axe(React, ReactDOM, 1000, axeConfig, document);\n }\n\n const testPageRoot = document.getElementById(\"alme-ui-test-page-root\");\n\n if (testPageRoot) {\n const AlmeTestPage = React.lazy(\n () => import(\"./components/AlmeTestPage/AlmeTestPage\"));\n ReactDOM.render(\n Loading...}>\n \n \n \n ,\n testPageRoot);\n } else {\n initializedPromise(\n () => {\n const siteIdentifier = getSiteIdentifier();\n return (typeof siteIdentifier === \"string\" && siteIdentifier.length >= 1);\n },\n \"parameters not found\",\n intervalInMs,\n initializationCheckTimes)\n .then(() => {\n try {\n const mainElements = document.getElementsByTagName(\"main\");\n let bodyElement: HTMLElement;\n if (mainElements.length) {\n bodyElement = mainElements[mainElements.length - 1];\n } else {\n bodyElement = document.body;\n }\n const almeDiv = document.createElement(\"div\");\n almeDiv.setAttribute(\"id\", \"alme-ui-root\");\n bodyElement.appendChild(almeDiv);\n const mainApp = initializeApp();\n ReactDOM.render(\n \n <>\n { mainApp }\n \n , almeDiv);\n } catch (ex) {\n console.error(\"Failed to add alme root element\", ex);\n }\n })\n .catch((error) => {\n console.error(\"IVA initialization failed,\", error);\n });\n }\n}\n\ntry {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n renderAlmeUi();\n\n // If you want your app to work offline and load faster, you can change\n // unregister() to register() below. Note this comes with some pitfalls.\n // Learn more about service workers: https://bit.ly/CRA-PWA\n serviceWorker.unregister();\n} catch (ex) {\n console.error(\"Failed to add alme root element\", ex);\n}\n","export interface AlmeLiveChatBannerConfig {\n start: {\n main: {\n text: string;\n };\n };\n joined: {\n main: {\n text: string;\n };\n sub: {\n text: string;\n };\n };\n ended: {\n user: {\n main: {\n text: string;\n };\n sub: {\n text: string;\n };\n };\n agent: {\n main: {\n text: string;\n };\n sub: {\n operatorLefttext: string;\n text: string;\n };\n };\n timeout: {\n main: {\n text: string;\n };\n sub: {\n text: string;\n };\n };\n error: {\n main: {\n text: string;\n };\n sub: {\n text: string;\n };\n };\n };\n defaultRepName: string;\n}\n\nconst returningToMsg = 'Returning to Sydney - Your Virtual Assistant';\n\n/**\n * This is the baseline live chat banner config.\n * @summary\n * ! Important do not edit this config with client customizations!\n * Custom client config changes should be made in src/personas/config/appConfigMain\n * @see appConfigMain\n*/\nconst defaultConfig: AlmeLiveChatBannerConfig = {\n start: {\n main: {\n text: 'Waiting for Representative',\n },\n },\n joined: {\n main: {\n text: 'Connected to Live Chat',\n },\n sub: {\n text: 'Customer Service Representative: ',\n },\n },\n ended: {\n user: {\n main: {\n text: 'Customer ended Live Chat',\n },\n sub: {\n text: returningToMsg,\n },\n },\n agent: {\n main: {\n text: 'Operator ended Live Chat',\n },\n sub: {\n operatorLefttext: ' has left the conversation',\n text: returningToMsg,\n },\n },\n timeout: {\n main: {\n text: 'Live Chat ended due to inactivity',\n },\n sub: {\n text: 'Returning to Sydney. Your Live Chat was disconnected due to inactivity',\n },\n },\n error: {\n main: {\n text: 'Error ended Live Chat',\n },\n sub: {\n text: returningToMsg,\n },\n },\n },\n defaultRepName: 'Operator',\n};\n\nexport default defaultConfig;","import { AlmeAppConfig } from \"./AlmeAppConfig\";\nimport liveChatBannerConfig from \"../components/LiveChat/AlmeLiveChatBanner/AlmeLiveChatBannerConfig\";\nimport { defaultTenant } from \"../components/AlmeTenantSelector/AlmeTenants\";\nimport { defaultLogLevel } from \"../Logger\";\n\nexport const expiredResponseEntryId = '00000000-0000-0000-0000-10000000000';\n\nconst defaultConfig: AlmeAppConfig = {\n main: {\n apiHostName: \"ivacbd.synchronycredit.com\",\n isLoggedIn: false,\n appAccessKey: defaultTenant.value,\n showIvaChatIcon: false,\n platform: \"UNKNOWN\",\n },\n webUrl: \"\",\n allowedOrigins: [window.location.origin],\n lastEntryIdInterval: 10000,\n header: {\n headerText: 'Sydney - Your Virtual Assistant',\n isMinimizeEnabled: true,\n isCloseEnabled: true,\n isEmailTranscriptEnabled: false,\n liveChatHeaderText: 'Live Chat',\n },\n history: {\n errorResponse: {\n entryId: '00000000-0000-0000-0000-000000000000',\n },\n expiredResponse: {\n entryId: expiredResponseEntryId,\n },\n },\n footer: {\n submitButtonText: 'Send',\n maxInputLength: 200,\n userTypingEventDelay: 10000,\n },\n SystemErrorResponse: 'Please try again later, this service is currently down.',\n expiredErrorResponse: 'Due to inactivity, your session has expired.',\n zIndex: 3000201,\n isMobile: false,\n mobileBreakpoint : 600,\n uiVersion: '0.0.0',\n channel: \"Web\",\n liveChatControls: {\n buttonText: 'End Live Chat',\n defaultOperatorName: 'Operator',\n typingMessageText: 'is typing',\n typingMessageDelay: 3000,\n dialog: {\n headerText: 'End Live Chat?',\n bodyText: 'Are you sure you want to end the live chat session?',\n buttons: {\n declineButtonText: 'No',\n acceptButtonText: 'Yes',\n },\n },\n },\n liveChatOperatorResponse: {\n useUniqueChatIcons: true,\n openNewIconTitle: \"Step Out\",\n userCheckStatus: {\n timeoutInSec: 30,\n dialog: {\n headerText: 'Chat will timeout in...',\n bodyText: 'Would you like to continue chatting?',\n buttons: {\n declineButtonText: 'End Chat',\n acceptButtonText: 'Continue Chat',\n },\n },\n },\n },\n liveChatUserResponse: {\n\n },\n liveChatBanner: liveChatBannerConfig,\n notificationApi: {\n pollForNotifications: false,\n pollForLiveChat: false,\n notificationInterval: 10000,\n liveChatInterval: {\n connected: 2000,\n disconnected: 30000,\n },\n },\n sessionTimeoutInMs: 15 * 60000, // default value overriden on GetConfiguration\n sessionTimeoutWarningPeriodInMs: 2 * 60000,\n UiLogLevel: defaultLogLevel,\n};\n\nexport default defaultConfig;","import React, {FC, ReactNode} from 'react';\nimport styled from 'styled-components';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport iconTypes, { IconType } from './IconTypes';\n\nexport interface IconButtonProps {\n iconType?: IconType;\n icon?: ReactNode| null;\n onClick: () => void;\n size: number;\n [key: string]: unknown;\n}\n\nconst IconWrapper = styled.button`\n display: inline-block;\n padding: 0;\n margin: 0;\n cursor: pointer; \n height: ${(props: IconButtonProps) => props.size + 5}px;\n width: ${(props: IconButtonProps) => props.size + 5}px;\n border-radius: 50%;\n border: 0;\n background-color: inherit;\n display:flex;\n align-items: center;\n justify-content: center;\n &:hover, &:focus {\n background-color: #e6e6e6;\n }\n`;\n\nconst Icon = styled.div<{ size: number }>`\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: ${props => props.size - 5}px;\n height: ${props => props.size}px;\n width: ${props => props.size}px;\n`;\n\nconst IconButton : FC = ({\n iconType,\n icon,\n onClick,\n ...props\n }: IconButtonProps) => {\n return (\n \n \n {\n icon ?(icon): iconType && \n }\n \n \n );\n};\n\n\n\nexport default IconButton;","import React from 'react';\n\nimport styled from 'styled-components';\nimport { AlmeAppUtilsBase } from \"../../AlmeApp/AlmeAppState\";\nimport { AlmeAppConfig } from '../../../alme-config/AlmeAppConfig';\nimport IconButton from '../../AlmeUtilities/Icons/IconButton';\nimport { FocusComponentProps } from '../../models/ComponentProps';\nimport postMessage from '../../../post-message/PostMessageUtils';\nimport { isRCPostLoginMobile } from '../../../platform/identifiers';\n\nconst MinimizeContainer = styled.div`\n display: inline-block;\n margin-right: 15px;\n`;\n\ninterface AlmeMinimizeProps {\n almeAppConfig: AlmeAppConfig;\n onMinimizeClick: () => void;\n focusProps?: FocusComponentProps;\n}\n\nconst AlmeMinimize: React.FC = (props: AlmeMinimizeProps) => {\n if (!props.almeAppConfig.header.isMinimizeEnabled) {\n return null;\n }\n return (\n \n \n \n );\n};\n\nexport default AlmeMinimize;\n\nexport class AlmeMinimizeUtils extends AlmeAppUtilsBase {\n\n public onMinimizeClick(): void {\n this.setAlmeState({\n ...this.almeState,\n isOpen: false,\n });\n\n if(this.appConfig.main.platform === \"PSCC\" || isRCPostLoginMobile()) {\n postMessage({\n type: 'IsMinimized',\n source: 'nit',\n });\n }\n }\n}\n","import React, { ReactElement } from 'react';\nimport styled from 'styled-components';\n\n\nconst LoadingEllipseContainer = styled.div`\n display: inline-block;\n position: relative;\n width: 10px;\n height: 10px;\n\n &>div {\n position: absolute;\n top: 2px;\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background: ${(props) => props.theme.button.background};\n animation-timing-function: cubic-bezier(0, 1, 1, 0);\n }\n\n &>div:nth-child(1) {\n left: 4px;\n animation: lds-ellipsis1 0.6s infinite;\n }\n &>div:nth-child(2) {\n left: 4px;\n animation: lds-ellipsis2 0.6s infinite;\n }\n &>div:nth-child(3) {\n left: 16px;\n animation: lds-ellipsis2 0.6s infinite;\n }\n &>div:nth-child(4) {\n left: 28px;\n animation: lds-ellipsis3 0.6s infinite;\n }\n\n @keyframes lds-ellipsis1 {\n 0% {\n transform: scale(0);\n }\n 100% {\n transform: scale(1);\n }\n }\n @keyframes lds-ellipsis3 {\n 0% {\n transform: scale(1);\n }\n 100% {\n transform: scale(0);\n }\n }\n @keyframes lds-ellipsis2 {\n 0% {\n transform: translate(0, 0);\n }\n 100% {\n transform: translate(12px, 0);\n }\n }\n`;\n\nexport default function CssLoadingEllipses(ariaLabel?: string): ReactElement {\n return (
);\n}","import { fontWeights } from 'syf-component-library/defaultTheme';\nimport styled from 'styled-components';\n\nexport const Container = styled.div`\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n margin: 10px 10px 20px 10px;\n`;\n\nexport const UserCardContainer = styled(Container)`\n justify-content: flex-end; \n`;\n\nexport const AgentCardContainer = styled(UserCardContainer)`\n justify-content: flex-start;\n`;\n\nexport const AgentCardMessageContainer = styled.div`\n display: flex;\n flex-direction: column;\n width: fit-content;\n`;\n\nexport const AgentCardBubbleContent = styled.div`\n margin: 1em;\n align-self: flex-start; \n display:flex;\n flex-direction: column;\n align-items: flex-start;\n &>button, &>a {\n margin-top: 10px;\n font-size: ${props => props.theme.fontSizes.default};\n height: auto !important;\n }\n`;\n\nconst TextContainer = styled.div`\n /* These are technically the same, but use both */\n overflow-wrap: break-word;\n word-wrap: break-word;\n \n /* Instead use this non-standard one: */\n word-break: break-word;\n\n /* Adds a hyphen where the word breaks, if supported (No Blink) */\n -ms-hyphens: auto;\n -moz-hyphens: auto;\n -webkit-hyphens: auto;\n hyphens: auto;\n\n font-size: ${props => props.theme.fontSizes.default};\n line-height: 1.38;\n display: inline-block;\n`;\n\nexport const AgentText = styled(TextContainer)`\n &>p {\n margin: 0;\n }\n`;\n\nexport const SectionHeader = styled.h6`\n font-weight: ${fontWeights.semiBold};\n`;\n\nexport const UserText = styled(TextContainer)`\n align-self: flex-end;\n margin: 1em;\n`;\n","import { IconProp } from \"@fortawesome/fontawesome-svg-core\";\nimport React, { ReactNode } from \"react\";\nimport styled from \"styled-components\";\nimport { Container } from \"../../AlmeResponse/AlmeResponse.styles\";\nimport { PlainIcon } from \"../../AlmeUtilities/Icons/PlainIcon\";\n\nconst BannerContainer = styled(Container)`\n justify-content: start;\n`;\n\nconst ContentContainer = styled.div`\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n margin-left: 5px;\n`;\n\nconst ContentHeader = styled.div<{color?: string}>`\n font-size: 20px;\n font-weight: 300;\n line-height: 1.2;\n color: ${props => props.color || props.theme.button.background};\n`;\n\nconst ContentBody = styled.div`\n margin-top: 5px;\n`;\n\ninterface BannerTemplateProps {\n icon: IconProp;\n iconColor: string;\n mainText: ReactNode;\n mainTextColor?: string;\n subText: ReactNode;\n responseRevision: string;\n}\n\nconst AlmeLiveChatBannerTemplate: React.FC = (props: BannerTemplateProps) => {\n return (\n \n \n \n {props.mainText}\n {props.subText}\n \n );\n};\n\nexport default AlmeLiveChatBannerTemplate;","import { IconProp } from \"@fortawesome/fontawesome-svg-core\";\nimport React, { ReactNode } from \"react\";\nimport { DefaultTheme, withTheme } from \"styled-components\";\nimport { AlmeAppConfig } from \"../../../../alme-config/AlmeAppConfig\";\nimport { AlmeResponseExt } from \"../../../AlmeResponse/AlmeResponseExt\";\nimport CssLoadingEllipses from \"../../../AlmeUtilities/Animations/CssLoadingEllipses\";\nimport AlmeLiveChatBannerTemplate from \"../../AlmeLiveChatBanner/AlmeLiveChatBannerTemplate\";\n\nexport interface AlmeLiveChatStartProps {\n response: AlmeResponseExt;\n appConfig: AlmeAppConfig;\n theme?: DefaultTheme;\n}\n\nexport function isBeginLiveChatResponse(response: AlmeResponseExt): boolean {\n return !!(response.responseActions && response.responseActions.some(x => x.Name === \"LiveChatStart\"));\n}\n\nconst AlmeLiveChatStartResponse: React.FC = (props: AlmeLiveChatStartProps) => {\n if(!isBeginLiveChatResponse(props.response)) {\n return null;\n }\n const responseRevision = (props.response.responseRevision).toString();\n let iconColor=\"\",\n mainText: ReactNode,\n subText: ReactNode,\n icon: IconProp;\n\n if(props.response.extensionData.operatorJoined) {\n const repName = props.response.extensionData.operatorName || props.appConfig.liveChatBanner.defaultRepName;\n iconColor = props.theme?.info as string;\n mainText = props.appConfig.liveChatBanner.joined.main.text;\n subText = <>{props.appConfig.liveChatBanner.joined.sub.text}{repName};\n icon=[\"fal\", \"user-check\"];\n } else {\n iconColor = props.theme?.button.background as string;\n mainText = <>\n {props.appConfig.liveChatBanner.start.main.text}\n {props.response.fromHistory\n ? null\n : CssLoadingEllipses()\n }\n ;\n subText = props.response.text;\n icon=[\"fal\", \"user-clock\"];\n }\n\n return (\n {subText}}\n responseRevision={responseRevision}\n />\n );\n};\n\nexport default withTheme(AlmeLiveChatStartResponse);","import { AlmeAppState } from \"../../AlmeApp/AlmeAppState\";\nimport { AlmeResponseExt } from \"../../AlmeResponse/AlmeResponseExt\";\nimport { isBeginLiveChatResponse } from \"./AlmeLiveChatStartResponse/AlmeLiveChatStart\";\n\nconst OperatorJoined = \"Operator-Joined\";\nconst OperatorLeft = \"Operator-Left\";\nconst SessionEnd = \"Session-End\";\nconst Agent = \"Agent\";\nconst User = \"User\";\n\nconst isOperatorJoinedResponse = (response: AlmeResponseExt) => response.extensionData.MessageOrigin === OperatorJoined;\nconst isOperatorLeftResponse = (response: AlmeResponseExt) => response.extensionData.MessageOrigin === OperatorLeft;\nconst isOperatorLeftOrJoinedResponse = (response: AlmeResponseExt) => (isOperatorJoinedResponse(response) || isOperatorLeftResponse(response));\nconst isAgentSessionEndResponse = (response: AlmeResponseExt) => response.extensionData.MessageOrigin === SessionEnd && response.extensionData.SessionEndReason === Agent;\n\nexport const updateOperatorNameInBeginLiveChatResponse = (responses: AlmeResponseExt[], history: AlmeResponseExt[]): void => {\n const operatorJoinedResponse = responses.find(isOperatorJoinedResponse);\n\n if(operatorJoinedResponse) {\n for(let i = history.length - 1; i >= 0; i--) {\n if(isBeginLiveChatResponse(history[i])){\n history[i].extensionData.operatorJoined = true;\n history[i].extensionData.operatorName = operatorJoinedResponse.extensionData.OperatorData?.Name;\n break;\n }\n }\n }\n};\n\nexport const updateOperatorNameInSessionEndResponse = (resp: AlmeResponseExt[], history: AlmeResponseExt[]): void => {\n const sessionEndResponse = resp.find(isAgentSessionEndResponse);\n const newResponseLength = resp.length;\n const historyLength = history.length;\n\n if(sessionEndResponse) {\n let found = false;\n for(let i = 0; i < newResponseLength; i++) {\n if(isOperatorLeftResponse(resp[i])) {\n sessionEndResponse.extensionData.operatorName = resp[i].extensionData.OperatorData?.Name;\n found = true;\n break;\n }\n }\n\n if(!found) {\n for(let i = historyLength - 1; i>=0; i--) {\n const response = history[i];\n if(isOperatorLeftOrJoinedResponse(response)) {\n sessionEndResponse.extensionData.operatorName = response.extensionData.OperatorData?.Name;\n break;\n }\n }\n }\n }\n};\n\nexport const updateSessionEndResponseWhenTimeout = (resp: AlmeResponseExt[], almeState: AlmeAppState): void => {\n const sessionEndResponse = resp.find(x => x.extensionData.MessageOrigin === SessionEnd && x.extensionData.SessionEndReason === User);\n\n if(almeState.isLiveChatSessionTimeout && sessionEndResponse) {\n sessionEndResponse.extensionData.isSessionTimeout = true;\n almeState.isLiveChatSessionTimeout = false;\n }\n};","import { AlmeAppState, AlmeAppUtilsBase, getCurrentAppState } from './components/AlmeApp/AlmeAppState';\n\nimport { AlmeResponseNext } from '@alme/types/response/AlmeResponse';\nimport { ConfigurationResponse } from '@alme/types/response/ConfigurationResponse';\nimport { DisplayLink } from '@alme/types/response/DisplayLink';\nimport { UnitDisplayLink } from '@alme/types/response/UnitDisplayLink';\nimport { UrlDisplayLink } from '@alme/types/response/UrlDisplayLink';\nimport { InputDisplayLink } from '@alme/types/response/InputDisplayLink';\n\nimport { AlmeApiNext } from '@alme/api-ts/Alme/AlmeApi';\nimport { ConverseRequestDetailsNext } from '@alme/api-ts/Alme/ConverseRequestDetails';\nimport { RequestUnitRequestDetailsNext } from '@alme/api-ts/Alme/RequestUnitRequestDetails';\nimport { HistoryRequestDetailsNext } from '@alme/api-ts/Alme/HistoryRequestDetails';\nimport { AppEventRequestDetailsNext } from '@alme/api-ts/Alme/AppEventRequestDetails';\nimport { ConfigurationRequestDetailsNext } from '@alme/api-ts/Alme/ConfigurationRequestDetails';\nimport { EntryOriginTypesNext } from '@alme/api-ts/Alme/EntryOriginTypes';\n\nimport { AlmeSessionData } from '@alme/session-ts/AlmeSessionData';\nimport { AlmeSessionDataUtils } from '@alme/session-ts/AlmeSessionDataUtils';\nimport { AlmeSessionDataLoader } from '@alme/session-ts/AlmeSessionDataLoader';\n\nimport deepmerge from 'deepmerge';\nimport { AlmeAppConfig } from './alme-config/AlmeAppConfig';\nimport { LiveChatNotificationApiNext } from '@alme/api-ts/LiveChat/LiveChatNotificationApi';\nimport { LiveChatNotificationRequestDetailsNext } from '@alme/api-ts/LiveChat/LiveChatNotificationRequestDetails';\nimport { ReportingEventResponseNext } from '@alme/types/response/ReportingEventResponse';\n\nimport { ReportingEventRequestDetailsNext } from '@alme/api-ts/Alme/ReportingEventRequestDetails';\nimport MessageType from './post-message/MessageType';\nimport postMessage from './post-message/PostMessageUtils';\nimport { AlmeResponseExt } from './components/AlmeResponse/AlmeResponseExt';\nimport { AlmeMinimizeUtils } from './components/AlmeHeader/AlmeMinimize/AlmeMinimize';\nimport { updateOperatorNameInBeginLiveChatResponse, updateOperatorNameInSessionEndResponse, updateSessionEndResponseWhenTimeout } from './components/LiveChat/AlmeLiveChatResponse/UpdateChatResponses';\nimport { EndConversationRequestDetailsNext } from '@alme/api-ts/Alme/EndConversationRequestDetails';\n\nimport * as Loaders from '@alme/storage-ts/CookieLoader';\nimport { CookieAlmeSessionDataLoader } from '@alme/session-ts/CookieAlmeSessionDataLoader';\nimport { gettopdomain } from './utils/UrlUtils';\n\nconst storageLoader = new Loaders.CookieLoader('almeSession');\nstorageLoader.cookieOptions = { domain: gettopdomain() };\nconst cookieSessionLoader = new CookieAlmeSessionDataLoader(storageLoader);\nconst sessionDataLoader: AlmeSessionDataLoader = cookieSessionLoader;\n\ninterface FpmlUrlProperties {\n AbsolutePath: string;\n Protocol: string;\n Host: string;\n HostName: string;\n Port: string;\n Uri: string;\n Query: string;\n Fragment: string;\n Origin: string;\n // Not implementing PageName until needed \n // (it complicates things a bit)\n}\n\nconst ConsumerCenterNavigationLinkRegex = /^\\{(.*)\\}$/;\n\nexport class AlmeApiUtils extends AlmeAppUtilsBase {\n private almeSession: AlmeSessionData;\n private almeApi: AlmeApiNext;\n private liveChatNotificationApi: LiveChatNotificationApiNext;\n private almeMinimizeUtils : AlmeMinimizeUtils;\n\n\n constructor(\n almeState: AlmeAppState,\n setAlmeState: (state: AlmeAppState) => void,\n appConfig: AlmeAppConfig,\n almeApi: AlmeApiNext,\n liveChatNotificationApi: LiveChatNotificationApiNext) {\n super(almeState, setAlmeState, appConfig);\n let almeSessionData;\n try {\n almeSessionData = sessionDataLoader.GetAlmeSessionData();\n } catch (ex) {\n this.logger.error(ex);\n }\n if (!almeSessionData) {\n almeSessionData = AlmeSessionDataUtils.CreateAlmeSessionData();\n }\n this.almeSession = almeSessionData;\n this.almeApi = almeApi;\n this.liveChatNotificationApi = liveChatNotificationApi;\n this.almeMinimizeUtils = new AlmeMinimizeUtils(this.almeState, this.setAlmeState, this.appConfig);\n }\n\n private getErrorResponse(): AlmeResponseExt {\n const responseRevision = this.almeState.history.length + 1;\n\n return {\n id: this.appConfig.history.errorResponse.entryId,\n userId: this.almeSession.userId,\n text: this.appConfig.SystemErrorResponse,\n responseRevision: responseRevision,\n displayLinkCollection: {\n Sections: [],\n Metadata: null,\n },\n navUrl: null,\n responseActions: [],\n deferredAppCall: null,\n maskedInput: null,\n isReverted: false,\n extensionData: {\n entryId: this.appConfig.history.errorResponse.entryId,\n chatId: \"\",\n MessageIndex: -1,\n },\n };\n }\n\n /**\n * Create Page Awareness parameter object and\n * deep merge with existing parameters.\n * @param parameters Current input parameters\n * @returns Input parameters merged with page awareness parameters\n */\n private addPageAwareness(parameters: { [key: string]: unknown }): { [key: string]: unknown } {\n const appState = getCurrentAppState();\n const loggedInState = { IsLoggedIn: appState?.isLoggedIn, ClientSessionId: appState?.clientSessionId };\n const context = this.createPageAwarenessObject(window.location);\n const apiParams = deepmerge.all([context, loggedInState, parameters]);\n return apiParams as { [key: string]: unknown };\n }\n\n private addRequestParams(parameters: { [key: string]: unknown }): Record {\n const apiParameters = this.addPageAwareness(parameters);\n const UiVersion = this.appConfig.uiVersion;\n const jsSessionId = this.almeSession.sessionId;\n return {\n ...apiParameters,\n UiVersion,\n jsSessionId,\n };\n }\n\n /**\n * Create Page Awareness parameter object.\n * @param location DOM window location object\n */\n private createPageAwarenessObject(location: Location): { Context: { CurrentUrl: FpmlUrlProperties } } {\n const CurrentUrl: FpmlUrlProperties = {\n AbsolutePath: location.href,\n Protocol: location.protocol,\n Host: location.host,\n HostName: location.hostname,\n Port: location.port,\n Uri: location.pathname,\n Query: location.search,\n Fragment: location.hash,\n Origin: location.origin,\n };\n return { Context: { CurrentUrl } };\n }\n\n private sendErrorResponse(): void {\n const errorResponse = this.getErrorResponse();\n this.appendToHistory(errorResponse);\n this.validateAlmeSessionData(errorResponse);\n }\n\n /**\n * Submits the users input to alme using the Typescript Alme API.\n * @see AlmeApi.SendInputAsync\n * @see ConverseRequestDetails\n * @see [Alme Api Converse Request](https://confluence.nextit.com/pages/viewpage.action?pageId=35688489)\n * @see [Understanding Entry Types and Origins](https://confluence.nextit.com/display/AlmeTech/Understanding+Entry+Types+and+Origins)\n */\n public async sendAlmeInput(\n input: string,\n origin: EntryOriginTypesNext = 'Typed',\n displayText: string = input,\n parameters: { [key: string]: unknown } = {}): Promise {\n Object.assign(parameters, {AlmeUserId_FromUI: this.almeSession.userId});\n const requestParams = this.addRequestParams(parameters);\n const accessKey = this.appConfig.accessKey as string | undefined;\n const request = new ConverseRequestDetailsNext(\n this.almeSession.userId,\n this.almeSession.sessionId,\n input,\n origin,\n displayText,\n requestParams,\n this.appConfig.channel,\n undefined,\n undefined,\n accessKey);\n const response = await this.almeApi.SendInputAsync(request) as AlmeResponseExt;\n this.validateAlmeSessionData(response);\n return response;\n }\n\n /**\n * Submits the users input to alme using the Typescript Alme API and appends to history.\n * @see AlmeApi.SendInputAsync\n * @see ConverseRequestDetails\n * @see [Alme Api Converse Request](https://confluence.nextit.com/pages/viewpage.action?pageId=35688489)\n * @see [Understanding Entry Types and Origins](https://confluence.nextit.com/display/AlmeTech/Understanding+Entry+Types+and+Origins)\n */\n public async submitAlmeInput(input: string, origin: EntryOriginTypesNext = 'Typed', displayText: string = input, parameters: { [key: string]: unknown } = {}): Promise {\n try {\n const response = await this.sendAlmeInput(input, origin, displayText, parameters);\n this.appendToHistory(response);\n this.validateAlmeSessionData(response);\n } catch (error) {\n this.logger.error(error);\n this.sendErrorResponse();\n }\n }\n\n /**\n * Submits a Request Unit request\n * @see IUnitDisplayLink\n */\n public async submitUnitRequest(unitLink: UnitDisplayLink, parameters = {}): Promise {\n const apiParams = this.addRequestParams(parameters);\n const accessKey = this.appConfig.accessKey as string | undefined;\n const unitRequest = new RequestUnitRequestDetailsNext(\n this.almeSession.userId,\n this.almeSession.sessionId,\n unitLink.Metadata.UnitUID,\n unitLink.DisplayText,\n 'Click',\n apiParams,\n undefined,\n this.appConfig.channel,\n undefined,\n accessKey);\n try {\n const response = await this.almeApi.SendRequestUnitAsync(unitRequest) as AlmeResponseExt;\n this.appendToHistory(response);\n this.validateAlmeSessionData(response);\n } catch (error) {\n this.logger.error(error);\n this.sendErrorResponse();\n }\n }\n\n /**\n * Sends an Alme GetHistory request and returns the history response or empty IAlmeResponseNext[] if no history exists.\n * @see AlmeApi.GetHistoryAsync\n * @see https://confluence.nextit.com/pages/viewpage.action?pageId=35688491\n */\n public async loadAlmeHistory(): Promise {\n const historyRequest = new HistoryRequestDetailsNext(this.almeSession.sessionId);\n try {\n const responses = await this.almeApi.GetHistoryAsync(historyRequest);\n this.validateAlmeSessionData(responses);\n return responses;\n } catch (error) {\n this.logger.error(error);\n return [];\n }\n }\n\n /**\n * Sends an Alme Application Event request.\n * @see https://confluence.nextit.com/pages/viewpage.action?pageId=35688488\n * @see https://confluence.nextit.com/display/AlmeTech/Understanding+Entry+Types+and+Origins\n */\n public async sendAppEvent(eventName: string, origin: EntryOriginTypesNext = 'Internal', parameters = {}): Promise {\n const apiParams = this.addRequestParams(parameters);\n const accessKey = this.appConfig.accessKey as string | undefined;\n const appEventRequest = new AppEventRequestDetailsNext(\n this.almeSession.userId,\n this.almeSession.sessionId,\n eventName,\n origin,\n apiParams,\n this.appConfig.channel,\n undefined,\n undefined,\n accessKey);\n try {\n const response = await this.almeApi.SendAppEventAsync(appEventRequest);\n\n this.validateAlmeSessionData(response);\n return response as AlmeResponseExt;\n } catch (error) {\n this.logger.error(error);\n return this.getErrorResponse();\n }\n }\n\n\n /**\n * submit an Alme Application Event request.\n * @see https://confluence.nextit.com/pages/viewpage.action?pageId=35688488\n * @see https://confluence.nextit.com/display/AlmeTech/Understanding+Entry+Types+and+Origins\n */\n public async submitFormAppEvent(\n eventName: string,\n parameters: Record = {},\n origin: EntryOriginTypesNext = 'Internal'): Promise {\n const response = await this.sendAppEvent(eventName, origin, parameters);\n this.appendToHistory(response);\n }\n\n /**\n * Submits an Alme ReportingEvent and returns the success/failure as a boolean\n * @see ReportingEventRequestDetailsNext\n * @param variableName reporting event variable name\n * @param variableValue reporting event variable value\n */\n public async submitReportingEvent(variableName: string, variableValue?: string | Record): Promise {\n const request = new ReportingEventRequestDetailsNext(this.almeSession.userId, this.almeSession.sessionId, variableName, variableValue || '',\n this.appConfig.channel, undefined, this.appConfig.accessKey as string | undefined);\n try{\n return await this.almeApi.SendReportingEventAsync(request);\n } catch (error) {\n this.logger.error(error);\n return null;\n }\n }\n\n /**\n * Sends an Alme GetConfiguration request.\n * @see https://confluence.nextit.com/pages/viewpage.action?pageId=35688487\n */\n public async getAlmeConfiguration(): Promise {\n const configRequest = new ConfigurationRequestDetailsNext(this.appConfig.channel);\n try {\n return await this.almeApi.GetConfigurationAsync(configRequest);\n } catch (error) {\n this.logger.error(error);\n return null;\n }\n }\n\n /**\n * Send reporting event like UserRefreshedSessionTimeout\n * @param variableName\n * @param variableValue\n * @param userData\n */\n public async sendReportingEvent(\n variableName: string,\n variableValue: string,\n userData?: Record,\n ): Promise {\n const reportingEventParams: ReportingEventRequestDetailsNext = {\n VariableName: variableName,\n VariableValue: variableValue,\n channel: this.appConfig.channel,\n sessionId: this.almeSession.sessionId,\n userId: this.almeSession.userId,\n accessKey: this.appConfig.accessKey as string | undefined,\n userData,\n };\n\n try {\n await this.almeApi.SendReportingEventAsync(reportingEventParams);\n this.setAlmeState({\n ...this.almeState,\n lastActivityTime: Date.now(),\n });\n } catch (error) {\n this.logger.error(error);\n }\n }\n\n private onDisplayUrlLinkClick(link: UrlDisplayLink, appConfig: AlmeAppConfig): void {\n switch (link.Metadata.NavigationType) {\n case 'MainPage':\n this.urlNavigation(link.Metadata.UrlAddress, '_self', appConfig);\n break;\n case 'None':\n break;\n case 'Popup':\n default:\n this.urlNavigation(link.Metadata.UrlAddress, '_blank', appConfig);\n break;\n }\n }\n\n /**\n * Handles Alme DisplayLink click.\n * Link Types:\n * - Url link will navigate\n * - Input link will submitAlmeInput with the 'Click' origin\n * - Unit link will submit a unit request\n * @see https://confluence.nextit.com/pages/viewpage.action?pageId=35688489 displayLinkCollection output property.\n */\n public onDisplayLinkClick(link: DisplayLink, appConfig: AlmeAppConfig): void {\n switch (link.TargetType) {\n case 'Unit':\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.submitUnitRequest(link as UnitDisplayLink);\n break;\n case 'Url':\n this.onDisplayUrlLinkClick(link as UrlDisplayLink, appConfig);\n break;\n case 'Input':\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.submitAlmeInput((link as InputDisplayLink).Metadata.InputText, 'Click', (link as InputDisplayLink).DisplayText);\n break;\n default:\n this.logger.warn('Unknown Link Type', link.TargetType);\n break;\n }\n }\n\n public clearSessionData(): void {\n try {\n sessionDataLoader.ClearAlmeSessionData();\n } catch (ex) {\n this.logger.error(ex);\n }\n }\n\n public createNewSessionData(): void {\n try {\n sessionDataLoader.ClearAlmeSessionData();\n this.almeSession = sessionDataLoader.GetAlmeSessionData() as AlmeSessionData;\n } catch (ex) {\n this.logger.error(ex);\n }\n }\n\n private validateAlmeSessionData(response: AlmeResponseNext | AlmeResponseNext[]): void {\n let almeResponse: AlmeResponseNext;\n if (Array.isArray(response) && !!response.length) {\n almeResponse = response[response.length - 1];\n } else {\n almeResponse = response as AlmeResponseNext;\n }\n\n if (almeResponse && almeResponse.userId && this.almeSession.userId !== almeResponse.userId) {\n const almeSessionData: AlmeSessionData = {\n sessionId: this.almeSession.sessionId,\n userId: almeResponse.userId,\n lastActivityTime: null,\n };\n try {\n sessionDataLoader.UpdateAlmeSessionData(almeSessionData);\n } catch (ex) {\n this.logger.error(ex);\n }\n this.almeSession = almeSessionData;\n }\n }\n\n public appendToHistory(response: AlmeResponseExt | null): void {\n if (!response || !response.userId) {\n return;\n }\n\n const isLiveChatConnected = response?.extensionData?.MessageSource === 'LiveChat';\n const entryExtensionData = response.extensionData;\n this.almeState.history.push(response);\n\n this.setAlmeState({\n ...this.almeState,\n lastEntryId: response.extensionData.entryId || undefined,\n chatId: entryExtensionData.chatId,\n lastActivityTime: Date.now(),\n isLiveChatConnected,\n });\n }\n\n public async getLiveChatNotifications(): Promise {\n try {\n const request = new LiveChatNotificationRequestDetailsNext(this.almeSession.sessionId);\n const response = await this.almeApi.GetPendingMessagesAsync(request) as AlmeResponseExt[];\n if (response) {\n this.appendLiveChatToHistory(response);\n }\n } catch (error) {\n this.logger.error(error);\n }\n }\n\n private appendLiveChatToHistory(response: AlmeResponseExt[]) {\n if (!response || !response.length) {\n return;\n }\n\n updateOperatorNameInBeginLiveChatResponse(response, this.almeState.history);\n updateOperatorNameInSessionEndResponse(response, this.almeState.history);\n updateSessionEndResponseWhenTimeout(response, this.almeState);\n\n this.almeState.history.push(...response);\n\n const lastResponse = response[response.length - 1];\n\n this.setAlmeState({\n ...this.almeState,\n isLiveChatConnected: true,\n lastActivityTime: Date.now(),\n lastEntryId: lastResponse.extensionData.entryId,\n });\n }\n\n private isConsumerCenterLink(url:string):boolean {\n return this.appConfig.main.platform === \"PSCC\" && ConsumerCenterNavigationLinkRegex.test(url);\n }\n\n public urlNavigation(url:string, navigationType:string, appConfig: AlmeAppConfig):void {\n if(url && this.isConsumerCenterLink(url)){\n this.requestConsumerCenterNavigation(url, appConfig);\n }\n else{\n this.minimizeInMobileView();\n window.open(url, navigationType);\n }\n }\n\n public requestConsumerCenterNavigation(url:string, appConfig: AlmeAppConfig):void {\n const re = /^\\{(.*)\\}$/;\n const regexarray = re.exec(url);\n const navKey = regexarray ? regexarray[1] : null;\n if(navKey) {\n postMessage({\n type: MessageType.DeepLinkReqCCTR,\n accessKey:this.appConfig.accessKey as string | undefined,\n source: 'nit',\n sessionInfo:{ sessionId: appConfig.main.clientSessionId },\n targetPageKey:navKey,\n });\n }\n }\n\n public minimizeInMobileView() : void {\n const windowWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;\n if(this.appConfig.mobileBreakpoint && (windowWidth <= this.appConfig.mobileBreakpoint)){\n setImmediate(() => this.almeMinimizeUtils.onMinimizeClick());\n }\n }\n\n public async endConversation(): Promise {\n try {\n const sessionId = this.almeSession.sessionId;\n const request = new EndConversationRequestDetailsNext(sessionId);\n await this.submitReportingEvent('EndConversation', `User conversation ending, session Id: ${sessionId}.`);\n const conversationEnded = await this.almeApi.EndConversationAsync(request);\n if (!conversationEnded) {\n this.logger.error(`Conversation not ended for session Id: ${sessionId}`);\n }\n } catch (error) {\n this.logger.error(error);\n }\n }\n}","import { Logger } from './Logger';\nimport { AlmeApiBase } from '@alme/api-ts/Alme/AlmeApiBase';\nimport { HttpHandlerBase } from '@alme/api-ts/HttpHandlerBase';\nimport { RequestInitTyped } from '@alme/api-ts/RequestInitTyped';\nimport {LiveChatNotificationApiNext } from '@alme/api-ts/LiveChat/LiveChatNotificationApi';\nimport {LiveChatNotificationApiBase } from '@alme/api-ts/LiveChat/LiveChatNotificationApiBase';\nimport {LiveChatNotificationApiSettings } from '@alme/api-ts/LiveChat/LiveChatNotificationApiSettings';\nimport {LiveChatNotificationApiSettingsBase } from '@alme/api-ts/LiveChat/LiveChatNotificationApiSettingsBase';\n\ntype ApiProtocol = 'http://' | 'https://';\n\nexport function createApiSetting(\n apiHostName: string,\n protocol: ApiProtocol = \"https://\",\n timeout = 30000): LiveChatNotificationApiSettingsBase {\n const defaultApiSettings = new LiveChatNotificationApiSettingsBase();\n\n defaultApiSettings.AlmeApiHostname = apiHostName;\n defaultApiSettings.AlmeApiProtocol = protocol;\n defaultApiSettings.AlmeApiRequestTimeout = timeout;\n\n return defaultApiSettings;\n}\n\nconst httpHandler = new HttpHandlerBase();\n\nclass AlmeApi extends AlmeApiBase {\n AddAuthHeader(requestInit: RequestInitTyped): void {\n super.AddAuthHeader(requestInit);\n const newHeaders = new Headers(requestInit.headers);\n newHeaders.append(\n 'BM-Telemetry',\n window.bmak && typeof window.bmak.get_telemetry === 'function' ? window.bmak.get_telemetry() : '');\n requestInit.headers = newHeaders;\n }\n}\n\nexport function createAlmeApi(almeApiSettings: LiveChatNotificationApiSettings, logger: Logger): AlmeApi {\n return new AlmeApi(logger, httpHandler, almeApiSettings);\n}\n\nexport function createLiveChatNotificationApi(almeApiSettings: LiveChatNotificationApiSettings, logger: Logger): LiveChatNotificationApiNext {\n return new LiveChatNotificationApiBase(logger, httpHandler, almeApiSettings);\n}","/* eslint-disable sonarjs/no-duplicated-branches */\nexport const PropertyChanged = (src: Record, dest: Record): boolean => {\n let changed = false;\n const srcKeys = Object.keys(src);\n\n for(const key of srcKeys) {\n if(Array.isArray(src[key]) && src[key] !== dest[key]) {\n dest[key] = src[key];\n changed = true;\n } else if(typeof src[key] === \"object\" && src[key] !== null) {\n if(typeof dest[key] === 'undefined') {\n dest[key] = {};\n }\n changed = PropertyChanged(src[key] as Record, dest[key] as Record) || changed;\n } else if(src[key] !== dest[key]) {\n dest[key] = src[key];\n changed = true;\n }\n }\n\n const destKeys = Object.keys(dest);\n for(const key of destKeys) {\n if(typeof src[key] === \"undefined\") {\n dest[key] = undefined;\n }\n }\n\n return changed;\n};\n\nexport function ObjectDiff(prevState: Record, curState: Record): Record {\n const changes:Record ={};\n for(const prop in curState) {\n const isMapType = curState[prop] instanceof Map;\n\n if((isMapType && (curState[prop] as Map).size !== (prevState[prop] as Map).size)\n || (prevState[prop] !== curState[prop])) {\n changes[prop] = `Old value: ${String(prevState[prop])}, New value: ${String(curState[prop])}`;\n }\n }\n\n return changes;\n}\n\nexport function getObjectStringPropValue(obj: T, prop: K): string | undefined | null {\n return (obj[prop] as unknown as (string | null | undefined));\n}","import React, { FC, ReactNode, useEffect } from 'react';\nimport ModalDialog, { DialogTitle, DialogContent, DialogFooter, DialogButton, ModalProps } from './ModalDialog';\nimport IconButton from '../AlmeUtilities/Icons/IconButton';\nimport styled from 'styled-components';\nimport { focusMessageBox } from '../AlmeUtilities/dom-utils';\n\nconst CloseIcon = styled(IconButton)`\n float:right;\n color: ${(props) => props.theme.button.background};\n`;\n\nconst DialogBody = styled(DialogContent)`\n padding:10px 10px 30px 10px; \n`;\n\nconst ConfirmModalDialog = styled(ModalDialog)`\n padding:20px;\n`;\n\nexport interface ConfirmDialogProps extends ModalProps {\n id: string;\n yesLabel: string;\n noLabel: string;\n onYes: () => void;\n onNo: () => void;\n onClose?: () => void;\n isOpen: boolean;\n title: string;\n description: string;\n height?: number;\n footerElement?: ReactNode;\n returnFocusToElement?: HTMLElement | null;\n}\n\nconst CloseDialogHeader = styled.header`\n height: auto;\n width: auto;\n position: inherit; \n border: none;\n background: inherit; \n margin-top: -15px;\n margin-right: -15px;\n padding-bottom: 20px; \n`;\n\nconst ConfirmDialog: FC = ({\n id,\n yesLabel,\n noLabel,\n onYes,\n onNo,\n onClose,\n isOpen,\n title,\n description,\n footerElement,\n returnFocusToElement,\n ...props }: ConfirmDialogProps) => {\n\n useEffect(() => {\n if (!isOpen) {\n returnFocusToElement ? returnFocusToElement.focus() : focusMessageBox();\n }\n }, [isOpen, returnFocusToElement]);\n\n if (!isOpen) return null;\n return (\n \n }\n footer={\n {yesLabel}\n {noLabel}\n {footerElement}\n }\n {...props}\n >\n {title}\n {description}\n );\n};\n\nexport default ConfirmDialog;","import styled from 'styled-components';\n\nexport const CloseContainer = styled.div`\n display: inline-block;\n`;","import { AlmeApiUtils } from \"../../AlmeApiUtils\";\nimport { AlmeAppState } from \"../AlmeApp/AlmeAppState\";\n\nexport type Initiator = 'Agent' | 'User' | 'System';\n\nexport function OnContinueChat(apiUtils: AlmeApiUtils): () => void {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n return () => { apiUtils.submitReportingEvent('Continue', 'User'); };\n}\n\nexport function OnEndChat(\n apiUtils: AlmeApiUtils,\n almeState: AlmeAppState,\n setAlmeAppState: (almeState: AlmeAppState) => void): (initiator: Initiator) => void {\n return (initiator: Initiator) => {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n apiUtils.submitReportingEvent('TerminateSession', initiator);\n if(initiator === \"System\") {\n setAlmeAppState(\n {\n ...almeState,\n isLiveChatSessionTimeout: true,\n });\n }\n };\n}\n\nexport async function TerminateLiveChat(\n apiUtils: AlmeApiUtils,\n almeState: AlmeAppState): Promise {\n if(almeState.isLiveChatConnected) {\n await apiUtils.submitReportingEvent('TerminateSession', 'System');\n }\n}","import React, {useState, useRef} from 'react';\nimport { AlmeAppUtilsBase, AlmeAppState} from \"../../AlmeApp/AlmeAppState\";\nimport { AlmeAppConfig } from '../../../alme-config/AlmeAppConfig';\nimport { FocusComponentProps } from '../../models/ComponentProps';\nimport ConfirmDialog from '../../AlmeDialog/ConfirmDialog';\nimport IconButton from '../../AlmeUtilities/Icons/IconButton';\nimport postMessage from '../../../post-message/PostMessageUtils';\nimport { CloseContainer } from './AlmeClose.styles';\nimport { TerminateLiveChat } from \"../../LiveChat/AlmeLiveChatReportingEvents\";\nimport { AlmeApiUtils } from \"../../../AlmeApiUtils\";\nimport { isRCPostLoginMobile } from '../../../platform/identifiers';\n\n\ninterface AlmeCloseProps {\n onCloseClick: () => void;\n almeAppConfig: AlmeAppConfig;\n setIsDialogOpen: (isOpen: boolean) => void;\n focusProps?: FocusComponentProps;\n isLoggedIn: boolean;\n chatId: string | undefined;\n isLivechatSurveyLoaded? : boolean;\n isSessionExpired?: boolean;\n}\n\nconst AlmeClose: React.FC = (props: AlmeCloseProps) => {\n const [openConfirmDialog, setOpenConfirmDialog] = useState(false);\n const returnFocusToElement = useRef(null);\n\n\n\n const handleCancelClose = (): void => {\n setTimeout(()=>{\n returnFocusToElement.current?.focus();\n },10);\n setOpenConfirmDialog(false);\n props.setIsDialogOpen(false);\n };\n\n const handleClose = (): void => {\n setOpenConfirmDialog(false);\n props.onCloseClick();\n props.setIsDialogOpen(false);\n };\n\n const handleClickOpen = (): void => {\n if(props.isSessionExpired) {\n props.onCloseClick();\n }\n else{\n returnFocusToElement.current = document.activeElement as HTMLElement;\n setOpenConfirmDialog(true);\n props.setIsDialogOpen(true);\n }\n };\n\n if (!props.almeAppConfig.header.isCloseEnabled) {\n return null;\n }\n\n return (\n <>\n \n \n \n {\n openConfirmDialog\n ? \n : null\n }\n {/* {\n openSurvey\n ? \n : null\n } */}\n \n );\n};\n\nexport default AlmeClose;\n\nexport class AlmeCloseUtils extends AlmeAppUtilsBase {\n private clearSessionData: () => void;\n public endConversation(): void {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.apiUtils.endConversation();\n }\n\n constructor(almeState: AlmeAppState, setAlmeState: (state: AlmeAppState) => void, appConfig: AlmeAppConfig, private apiUtils: AlmeApiUtils, clearSessionData: () => void) {\n super(almeState, setAlmeState, appConfig);\n this.clearSessionData = clearSessionData;\n }\n\n async onCloseClick(): Promise {\n if(this.almeState.isLiveChatConnected) {\n await TerminateLiveChat(this.apiUtils, this.almeState);\n }\n this.clearSessionData();\n this.setAlmeState({\n ...this.almeState,\n isOpen: false,\n history: [],\n isLoggedIn: false,\n clientSessionId: undefined,\n hasPreviousConversation: false,\n sessionExpired: false,\n lastActivityTime: undefined,\n isLiveChatConnected: false,\n isInitialAppEventsSent: false,\n });\n\n if(this.appConfig.main.platform === \"PSCC\" || isRCPostLoginMobile()) {\n postMessage({\n type: 'IsClosed',\n source: 'nit',\n });\n }\n\n this.endConversation();\n }\n}","export default __webpack_public_path__ + \"static/media/switch-position-icon.ddcfddcf.svg\";","import React from 'react';\nimport styled from 'styled-components';\nimport { Position, useIVAChatStatus, useIVASetChatStatus } from '../../../IVAChatStatusProvider';\nimport { FocusComponentProps } from '../../models/ComponentProps';\nimport IconButton from '../../AlmeUtilities/Icons/IconButton';\nimport SwithPositionIcon from '../../../assets/images/switch-position-icon.svg';\n\nconst ArrowRightLeftContainer = styled.div`\n display: inline-block;\n margin-right: 15px;\n`;\n\ninterface SwitchChatPositionButtonProps {\n focusProps?: FocusComponentProps;\n}\n\nexport const SwitchChatPositionButton = (props: SwitchChatPositionButtonProps) => {\n const { chatPosition } = useIVAChatStatus();\n const { positionChat } = useIVASetChatStatus();\n const chatPositionPrefix = chatPosition.indexOf(\"Top\") === 0 ? \"Top\" : \"Bottom\";\n const chatPositionSuffix = chatPosition.replace(chatPositionPrefix, \"\");\n\n let chatPostionFunc = chatPositionPrefix.toLowerCase() + \"Right\" as keyof Position;\n let label = \"Move window right\";\n\n if(chatPositionSuffix === \"Right\"){\n label = \"Move window left\";\n chatPostionFunc = chatPositionPrefix.toLowerCase() + \"Left\" as keyof Position;\n }\n\n return (\n }\n type=\"button\"\n size={20}\n onClick={positionChat[chatPostionFunc]}\n {...props.focusProps} />\n );\n};","import React, { useEffect, useState } from 'react';\nimport styled from 'styled-components';\nimport AlmeMinimize from './AlmeMinimize/AlmeMinimize';\nimport AlmeClose from './AlmeClose/AlmeClose';\nimport { AlmeAppConfig } from '../../alme-config/AlmeAppConfig';\nimport { FocusComponentProps } from '../models/ComponentProps';\nimport { AlmeApiUtils } from \"../../AlmeApiUtils\";\nimport { SwitchChatPositionButton } from './SwitchChatPosition/SwitchChatPositionButton';\n\nconst HeaderContainer = styled.div`\n display: flex;\n flex-direction: row;\n flex-wrap: wrap !important;\n justify-content: space-between;\n align-items: baseline;\n padding: .75rem 1rem;\n margin: 0;\n border-bottom: 1px solid #cccccc;\n`;\n\nconst Heading = styled.h1`\n font-size: ${props => props.theme.fontSizes.headerText};\n font-weight: 800;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.33;\n letter-spacing: normal;\n color: black;\n background-color: white;\n margin: 0;\n padding: 0;\n`;\n\nconst HeaderIconContainer = styled.div`\n display: inline-flex;\n`;\n\ninterface AlmeHeaderProps {\n almeAppConfig: AlmeAppConfig;\n onMinimizeClick: () => void;\n onCloseClick: () => void;\n setIsDialogOpen: (isOpen: boolean) => void;\n focusProps?: FocusComponentProps;\n isLiveChatConnected?: boolean;\n isLoggedIn: boolean;\n chatId: string | undefined;\n isLivechatSurveyLoaded?: boolean;\n almeApiUtils: AlmeApiUtils;\n isSessionExpired?: boolean;\n}\n\nconst canShowSwitchPositionButton = (mobileBreakPoint: number) => window.innerWidth > mobileBreakPoint;\n\nconst AlmeHeader: React.FC = (props: AlmeHeaderProps) => {\n const [ showSwitchPositionButton, setShowSwitchPositionButton ] = useState(canShowSwitchPositionButton(props.almeAppConfig.mobileBreakpoint));\n const headerText = props.isLiveChatConnected ? props.almeAppConfig.header.liveChatHeaderText : props.almeAppConfig.header.headerText;\n\n useEffect(() => {\n const onResize = () => {\n const showSwitchButton = canShowSwitchPositionButton(props.almeAppConfig.mobileBreakpoint);\n if(showSwitchButton !== showSwitchPositionButton) {\n setShowSwitchPositionButton(showSwitchButton);\n }\n };\n window.addEventListener(\"resize\", onResize);\n return () => {\n window.removeEventListener(\"resize\", onResize);\n };\n }, [showSwitchPositionButton, props.almeAppConfig.mobileBreakpoint]);\n\n return (\n \n {headerText}\n \n { showSwitchPositionButton && }\n {props.isSessionExpired\n ? null\n : }\n {\n props.isLiveChatConnected\n ? null\n : \n }\n \n \n );\n};\n\nexport default AlmeHeader;","import React, {FC} from 'react';\nimport styled from 'styled-components';\n\nexport interface IconProps{\n size: number;\n iconUrl: string;\n [key: string]: unknown;\n}\n\nconst IconWrapper = styled.div`\n display: block;\n height: ${(props: IconProps) => props.size + 5}px;\n width: ${(props: IconProps) => props.size + 5}px;\n`;\n\nconst Icon = styled.img`\n display: block;\n padding: 0;\n margin: 0;\n height: ${(props: IconProps) => props.size}px;\n width: ${(props: IconProps) => props.size}px;\n border-radius: 50%;\n background-color: #e6e6e6;\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center center;\n`;\n\nexport const SydneyAvatar: FC = (props: IconProps) => {\n return (\n \n );\n};\n\n","import React, {FC} from 'react';\nimport styled from 'styled-components';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\n\nexport interface UserIconProps{\n size: number;\n}\n\nconst IconWrapper = styled.div`\n padding: 0;\n margin: 0;\n height: ${(props: UserIconProps) => props.size}px !important;\n width: ${(props: UserIconProps) => props.size}px !important;\n min-width: ${(props: UserIconProps) => props.size}px !important;\n border-radius: 50%;\n display:flex;\n align-items: center;\n justify-content: center;\n color: #fff;\n background-color: ${(props) => props.theme.button.background}\n`;\n\nconst Icon = styled.div`\n display: inline-block;\n font-size: ${(props: UserIconProps) => props.size - 15}px;\n`;\n\nexport const UserAvatar: FC = (props: UserIconProps) => {\n return (\n \n \n \n \n \n );\n};","import React, { ReactElement, ReactNode } from 'react';\nimport styled from 'styled-components';\n\nexport interface ChatProps {\n /** Childrens can be anything which renders directly to Card component. */\n children?: ReactNode;\n [key:string]: unknown;\n}\n\nexport const AgentCardBase = styled.div` \n background-color: ${(props) => props.theme.AgentConversationBackground};\n border-radius: 4px; \n width: auto;\n height:auto;\n min-height:40px;\n position: relative;\n float: left;\n display: flex;\n margin-left: 20px;\n &:after {\n display: block !important;\n border-right-color: ${(props) => props.theme.AgentConversationBackground} !important;\n border-color: transparent ${(props) => props.theme.AgentConversationBackground} !important ;\n border-width: 10px 15px 8px 0px; \n border-style: solid;\n right: 100%;\n top: 25px;\n content: \" \";\n height: 0;\n width: 0;\n position: absolute;\n pointer-events: none;\n margin-top: -10px;\n }\n`;\n\nexport const UserCardBase = styled.div`\n background-color: #ffffff; \n border-radius: 4px; \n border: solid 1px ${(props) => props.theme.button.background};\n position: relative;\n display: flex;\n margin-right: 20px;\n &:before{\n content: ' ';\n position: absolute;\n width: 0;\n height: 0;\n left: 100%;\n top: 25px; \n border-color: transparent ${(props) => props.theme.button.background} !important ;\n pointer-events: none;\n margin-top: -15px;\n border-width: 9px 0px 10.3px 15.3px;\n border-style: solid;\n }\n &:after { \n border-left-color: #ffffff !important;\n border-color: transparent #ffffff !important ;\n border-width: 7px 0px 9px 14px;\n border-style: solid;\n left: 100%;\n top: 25px;\n content: \" \";\n height: 0;\n width: 0;\n position: absolute;\n pointer-events: none;\n margin-top: -13px;\n }\n`;\n\nexport const AgentCardBubble = ({\n children,\n ...props\n}: ChatProps): ReactElement => {\n return (\n \n {children}\n );\n};\n\nexport const UserCardBubble = ({\n children,\n ...props\n}: ChatProps): ReactElement => {\n return (\n \n {children}\n );\n};\n","import React, { useState, ReactElement, useEffect } from 'react';\n\nimport ModalDialog, { DialogTitle, DialogContent, DialogButton, DialogFooter } from '../AlmeDialog/ModalDialog';\nimport RadioGroup from 'syf-component-library/ui/patterns/RadioGroup';\nimport Radio from 'syf-component-library/ui/atoms/Radio';\nimport styled from 'styled-components';\nimport { NoSurveyModel } from './NoSurveyModel';\nimport { focusMessageBox } from '../AlmeUtilities/dom-utils';\n\nexport interface AlmeSurveyDialogProps {\n inputMetaData: NoSurveyModel;\n onSubmitSurvey: (isSurveyCancelled: boolean, input?: string) => void;\n isOpen: boolean;\n}\n\nconst StyledRadioGroup = styled(RadioGroup)`\n border-radius: 10px;\n border: solid 1px #c8c8c8;\n background-color: #ffffff;\n\n & > div {\n padding: 7px;\n margin: 0px;\n border-bottom: solid 1px #c8c8c8;\n }\n\n & > div:last-child {\n border: none;\n }\n & > div >input[type=radio]:checked, input[type=radio]:not(:checked) {\n display: flex;\n flex:none;\n }\n & > div > label {\n font-weight: normal !important;\n padding-left: 0rem !important;\n display: flex !important;\n &:before {\n top: 5px !important;\n left: 5px !important;\n }\n &:after {\n top: 0.55rem !important;\n left: 0.55rem !important;\n }\n }\n\n & > div > label > span > span > span {\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n`;\n\nconst AlmeSurveyDialog: React.FC = (props: AlmeSurveyDialogProps): ReactElement | null => {\n const [surveyInput, setSurveyInput] = useState('');\n const [options] = useState(props.inputMetaData.Body.RadioButtons.radioOptions);\n\n const managefocus = () => {\n const modalElement = document.getElementById('alme-survey-dialog');\n if (modalElement) {\n const focusableElement = modalElement.querySelectorAll('input');\n const noButtonElement = document.getElementById('alme-survey-dialog-no-button');\n const dailogContentElement = document.getElementById('alme-survey-dailog-content');\n\n let focusedOptionElement: HTMLElement | null = null;\n const handleTabKeyPress = (event: KeyboardEvent) => {\n if (event.key === \"Tab\" && !event.shiftKey && (document.activeElement === dailogContentElement)) {\n event.preventDefault();\n if (focusedOptionElement) {\n focusedOptionElement.focus();\n } else {\n focusableElement[0].focus();\n focusedOptionElement = focusableElement[0];\n }\n }\n if (event.key === \"Tab\" && event.shiftKey && (document.activeElement === focusedOptionElement)) {\n event.preventDefault();\n noButtonElement?.focus();\n }\n };\n const handleKeySelected = (element: HTMLElement) => {\n focusedOptionElement = element;\n };\n modalElement.addEventListener(\"keydown\", handleTabKeyPress);\n focusableElement.forEach((element) => {\n element.addEventListener(\"change\", function () {\n handleKeySelected(element);\n });\n });\n }\n };\n\n useEffect(() => {\n if (!props.isOpen) {\n focusMessageBox();\n } else {\n managefocus();\n }\n }, [props.isOpen,options,props.inputMetaData.Header.Title]);\n\n const handleSurveySubmit = () => {\n const inputText = surveyInput.trim();\n props.onSubmitSurvey(false, inputText);\n };\n\n const handleSurveyCancel = () => {\n props.onSubmitSurvey(true);\n };\n\n const onChange = (option: string): void => {\n const inputText = option;\n setSurveyInput(inputText);\n };\n\n return (<>\n {\n props.isOpen\n ?\n {props.inputMetaData.Header.Title}}\n footer={\n \n {props.inputMetaData.Footer.SubmitLink.DisplayText}\n \n \n {props.inputMetaData.Footer.CancelLink.DisplayText}\n \n }\n >\n \n \n {options.map((value, index ) => (\n \n {value}\n \n ))}\n \n \n \n : null\n }\n );\n};\n\nexport default AlmeSurveyDialog;","import { ResponseAction } from \"@alme/types/response/ResponseAction\";\n\nexport interface ActionParams {\n grade: number;\n gradingComments: string;\n gradingQueue: number;\n gradingReason: string;\n gradingType: string;\n}\n\nexport interface InlineSurveyResponseAction extends ResponseAction {\n name: string;\n show: string;\n SurveyUnitLabel: string;\n MetaData: {\n InlineSurveyLinks: {\n Title: string;\n No: {\n ActionType: string;\n DisplayText: string;\n surveyId: string;\n };\n Yes: {\n ActionType: string;\n AppEventName: string;\n DisplayText: string;\n TargetType: string;\n parameters: ActionParams;\n };\n };\n Survey: {\n NoSurvey: {\n Header: {\n Title: string;\n };\n Body: {\n RadioButtons: {\n radioOptions: [];\n };\n };\n Footer: {\n CancelLink: {\n AppeventName: string;\n DisplayText: string;\n SendComments: boolean;\n TargetType: string;\n tag: string;\n parameters: ActionParams;\n };\n SubmitLink: {\n AppeventName: string;\n DisplayText: string;\n SendComments: boolean;\n TargetType: string;\n id: string;\n tag: string;\n parameters: ActionParams;\n };\n };\n };\n };\n };\n}\n\nexport interface SurveyParameters extends ActionParams {\n SurveyUnitLabel: string;\n entryId: string;\n}\n\nexport function createSurveyAppEventParams(actionParams: ActionParams, surveyUnitLabel: string, entryId: string): SurveyParameters {\n return ({\n ...actionParams,\n SurveyUnitLabel: surveyUnitLabel,\n entryId});\n}","import React, { useState } from 'react';\n\nimport AlmeSurveyDialog from './AlmeSurveyDialog';\nimport { FocusComponentProps } from '../models/ComponentProps';\nimport Button from 'syf-component-library/ui/atoms/Button/Button';\nimport styled from 'styled-components';\nimport { StateIcon } from '../AlmeUtilities/Icons/StyledIcon';\nimport { createSurveyAppEventParams, InlineSurveyResponseAction } from './AlmeSurveyModel';\nimport { EntryOriginTypesNext } from '@alme/api-ts/Alme/EntryOriginTypes';\nimport { AlmeMarkdownResponseNext } from \"@alme/markdown-ts/AlmeMarkdownResponse\";\nimport { ButtonProps } from 'syf-component-library/ui/atoms/Button/typings';\n\nconst AlmeSurveyCard = styled.div`\n background-color: #e6e6e6; \n border-radius: 4px; \n width: auto;\n height:auto;\n min-height:40px;\n display: flex;\n margin: 15px 0 0 20px;\n padding: 4px 8px;\n align-items: center;\n`;\n\nconst StyledButtonDiv= styled.div`\ndisplay: flex;\n& > span {\n margin: 10px 0 0 10px;\n display:inline-block;\n}\n`;\n\nexport interface StyledButtonProps extends ButtonProps {\n selected: boolean;\n}\n\nconst StyledButton = styled(Button)` \n font-weight: ${(props: StyledButtonProps) => props.selected ? 'bold' : 'normal'};\n text-transform: uppercase;\n display: flex;\n align-items: center;\n &:disabled {\n text-decoration: none;\n }\n & > p {\n margin: 0 0 0 5px;\n display:inline-block;\n }\n`;\n\ninterface AlmeSurveyProps {\n responseAction: InlineSurveyResponseAction;\n entryId: string;\n isLastResponse: boolean;\n fromHistory?: boolean;\n onSendFormAppEvent: (eventName: string, parameters: Record, origin: EntryOriginTypesNext) => Promise;\n setIsDialogOpen: (isOpen: boolean) => void;\n focusProps?: FocusComponentProps;\n}\n\nexport function getSurveyResponseAction(response: AlmeMarkdownResponseNext) : InlineSurveyResponseAction | null {\n if (!response.responseActions)\n return null;\n else {\n for (const action of response.responseActions) {\n if (action.Name === \"InlineSurvey\")\n return action as InlineSurveyResponseAction;\n }\n return null;\n }\n}\n\ninterface AlmeSurveyState {\n disabled: boolean;\n yesSelected: boolean;\n noSelected: boolean;\n showSurveyDialog: boolean;\n}\n\nconst AlmeSurvey: React.FC = (props: AlmeSurveyProps) => {\n const [surveyState, setSurveyState] = useState(() => ({ disabled: !props.isLastResponse, showSurveyDialog: false, yesSelected: false, noSelected: false }));\n\n const focusProps = {\n disabled: surveyState.disabled || props.focusProps?.disabled,\n };\n\n const historyYesSelected = props.fromHistory && sessionStorage.getItem(`${props.entryId}`) === 'yesSelected' ? true : false;\n const historyNoSelected = props.fromHistory && sessionStorage.getItem(`${props.entryId}`) === 'noSelected' ? true : false;\n console.log(props.fromHistory);\n const handleYesClick = () => {\n setSurveyState({...surveyState, disabled: true, yesSelected: true});\n sessionStorage.setItem( `${props.entryId}`,\"yesSelected\");\n const surveyParams = createSurveyAppEventParams(\n props.responseAction.MetaData.InlineSurveyLinks.Yes.parameters,\n props.responseAction.SurveyUnitLabel,\n props.entryId);\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n props.onSendFormAppEvent('GradingComplete', surveyParams as unknown as Record, 'External');\n };\n\n const handleNoClick = (): void => {\n setSurveyState({...surveyState, showSurveyDialog: true});\n sessionStorage.setItem( `${props.entryId}`,\"noSelected\");\n props.setIsDialogOpen(true);\n };\n\n const submitSurvey = (isSurveyCancelled: boolean, input?: string) => {\n const surveyParams = createSurveyAppEventParams(\n isSurveyCancelled\n ? props.responseAction.MetaData.Survey.NoSurvey.Footer.CancelLink.parameters\n : props.responseAction.MetaData.Survey.NoSurvey.Footer.SubmitLink.parameters,\n props.responseAction.SurveyUnitLabel,\n props.entryId);\n surveyParams.gradingReason = input || \"\";\n setSurveyState({...surveyState, disabled: true, noSelected: true, showSurveyDialog: false});\n props.setIsDialogOpen(false);\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n props.onSendFormAppEvent('GradingComplete', surveyParams as unknown as Record, 'External');\n };\n const ariaPressedYes=props.fromHistory ? historyYesSelected : surveyState.yesSelected;\n const ariaPressedNo= props.fromHistory ? historyNoSelected : surveyState.noSelected;\n\n return (\n
\n \n \n {props.responseAction.MetaData.InlineSurveyLinks.Title}\n \n \n

{props.responseAction.MetaData.InlineSurveyLinks.Yes.DisplayText}

\n \n \n \n

{props.responseAction.MetaData.InlineSurveyLinks.No.DisplayText}

\n \n
\n
\n \n
\n );\n};\n\nexport default AlmeSurvey;","import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport React, { useState } from 'react';\nimport Select from 'syf-component-library/ui/atoms/Select';\nimport { OptionType } from 'syf-component-library/ui/atoms/Select/typings';\nimport { FocusComponentProps } from '../../models/ComponentProps';\nimport { DropdownResponseAction, InlineFormInput } from \"../InlineFormResponseAction\";\n\nexport interface DropdownProps extends FocusComponentProps {\n responseAction: DropdownResponseAction;\n responseRevision: number | string;\n onChange: (value: InlineFormInput) => void;\n value: string | number;\n}\n\nconst AlmeDropdown: React.FC = ({\n responseAction,\n responseRevision,\n onChange,\n value,\n disabled,\n ...props\n}: DropdownProps) => {\n\n const [options] = useState(() => responseAction.Values.map(val => ({ label: val.DisplayLabel, value: typeof val.SubmitValue === 'number' ? `${val.SubmitValue}` : val.SubmitValue})));\n const [defaultOption] = useState(() => options.find(o => o.value === (typeof value === 'number' ? `${value}` : value)) as OptionType);\n const id = `${responseRevision}-AlmeDropdown`;\n const htmlProps = {\n 'aria-label': responseAction.TitleText,\n ...props,\n };\n\n const handleChange = (option: OptionType) => {\n onChange({value: option.value, valid: true});\n };\n\n return (\n }\n rightIconClosed={}\n placement=\"TOP\"\n {...htmlProps}\n />);\n};\n\nexport default AlmeDropdown;","export const LAUNCHPICKERINPUT = \"LaunchPickerInput\";\nexport const LAUNCHDATEPICKERINPUT = \"LaunchDatePickerInput\";","import React from 'react';\n\nconst LazyDatepickerControl = React.lazy(() => import(\"./DatePickerControl\"));\n\nexport { LazyDatepickerControl };","import React from 'react';\nimport ModalDialog from '../AlmeDialog/ModalDialog';\nimport SyfLoader from 'syf-component-library/ui/atoms/Loader/SyfLoader';\n\ninterface AlmeLoaderProps {\n loaded: boolean;\n}\n\nconst AlmeLoader: React.FC = (props: AlmeLoaderProps) => {\n return (\n !props.loaded\n ?\n \n \n : null);\n};\n\nexport default AlmeLoader;","import React, {FC, Suspense, useState} from 'react';\nimport { commonDateFieldValidation, commonDateValidations, getEndDate, getStartDate } from '../../AlmeUtilities/dateutils';\nimport { FocusComponentProps } from '../../models/ComponentProps';\nimport { DatepickerReponseAction, InlineFormInput } from '../InlineFormResponseAction';\nimport { LazyDatepickerControl } from '../../Custom/Datepicker/LazyDatepickerControl';\nimport AlmeLoader from '../../AlmeLoader/AlmeLoader';\n\nexport interface DatepickerProps extends FocusComponentProps {\n responseAction: DatepickerReponseAction;\n responseRevision: number | string;\n onChange: (value: InlineFormInput) => void;\n value: Date | null;\n}\n\nconst InlineDatepicker: FC = ({\n responseAction,\n responseRevision,\n onChange,\n value,\n ...props\n}: DatepickerProps) => {\n\n const [error, setError] = useState(\"\");\n const [minDate] = useState(() => getStartDate((responseAction.MinDays === \"\" ? NaN: +responseAction.MinDays)));\n const [maxDate] = useState(() => getEndDate((responseAction.MaxDays === \"\" ? NaN: +responseAction.MaxDays)));\n\n const calendarProps = {\n showMonthDropdown: true,\n showYearDropdown: true,\n dropdownMode: \"select\",\n shouldCloseOnSelect: false,\n adjustDateOnChange: true,\n };\n\n const onDateChange = (date: Date | null) => {\n const errorObj = commonDateValidations(date, true, minDate, maxDate);\n onChange({value: date, valid: !errorObj});\n setError(errorObj);\n };\n\n const onBlur = (dateString: string) => {\n const errorObj = commonDateFieldValidation(dateString, true);\n if(errorObj) {\n onChange({value: null, valid: false});\n setError(errorObj);\n }\n };\n\n return (\n }>\n \n );\n};\n\nexport default InlineDatepicker;","import React, { useCallback, useEffect, useState } from 'react';\nimport styled from 'styled-components';\nimport AlmeDropdown from './AlmeDropdown/AlmeDropdown';\nimport { DatepickerReponseAction, DropdownOption, DropdownResponseAction, InlineFormInput, InlineFormResponseAction } from './InlineFormResponseAction';\nimport * as Constants from './AlmeInlineConstants';\nimport Button from 'syf-component-library/ui/atoms/Button';\nimport { FocusComponentProps } from '../models/ComponentProps';\nimport InlineDatepicker from './Datepicker/InlineDatepicker';\nimport { EndType } from '../AlmeOverlayForm/FeedbackAppEventParam';\nimport { formatdate, parseDate } from '../AlmeUtilities/dateutils';\nimport { EntryOriginTypesNext } from '@alme/api-ts/Alme/EntryOriginTypes';\n\ninterface AlmeInlineFormProps extends FocusComponentProps {\n responseAction: InlineFormResponseAction;\n responseRevision: number | string;\n onSubmitFormAppEvent: (eventName: string, parameters: Record, origin: EntryOriginTypesNext) => Promise;\n}\n\nconst FormWrapper = styled.div`\n width: 100%;\n margin-top: 10px;\n`;\n\nconst ButtonWrapper = styled.div`\n margin-top: 15px;\n padding-left: 3px;\n display: flex;\n > button:last-child {\n margin-left: 5px;\n }\n`;\n\nconst StyledButtonDatePicker = styled(Button)` \n min-width: 273px;\n max-height:30px; \n`;\n\nconst StyledButton = styled(Button)`\n min-width: 88px; \n max-height:32px;\n font-size: ${props => props.theme.fontSizes.promptText};\n`;\n\nfunction getDefaultValue(responseAction: InlineFormResponseAction): Date | string | number | null{\n if (responseAction.Name === Constants.LAUNCHPICKERINPUT) {\n const dropdownResponseAction = responseAction as DropdownResponseAction;\n const initialValue = dropdownResponseAction.InitialValue;\n let defaultValue: DropdownOption | undefined;\n if(typeof initialValue === 'number') {\n defaultValue = dropdownResponseAction.Values[initialValue];\n } else {\n defaultValue = dropdownResponseAction.Values.find(o => o.SubmitValue === initialValue);\n }\n\n return (defaultValue && defaultValue.SubmitValue) || dropdownResponseAction.Values[0].SubmitValue;\n } else {\n const date = (responseAction as DatepickerReponseAction).ReferenceDate;\n return (date && parseDate(date)) || null;\n }\n}\n\nexport interface InlineFormParams {\n WidgetSelection: string | number;\n endType: EndType;\n}\n\nfunction formSubmitParams(widgetSelection: string, endType: EndType): InlineFormParams {\n return ({\n WidgetSelection: widgetSelection,\n endType,\n });\n}\n\nconst AlmeInlineForm: React.FC = (props: AlmeInlineFormProps) => {\n const [formValue, setFormValue] = useState(() => {\n const defaultValue =getDefaultValue(props.responseAction);\n return ({value: defaultValue , valid: !!(defaultValue === 0 || defaultValue)});\n });\n const onChange = (val: InlineFormInput) => {\n setFormValue(val);\n };\n\n const onSubmit = () => {\n if (formValue.valid) {\n const eventName = props.responseAction?.ReturnAppEventName;\n const input = formValue.value instanceof Date ? formatdate(formValue.value) : String(formValue.value); //Convert all values to string\n const parameters = formSubmitParams(input, 'Completed');\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n props.onSubmitFormAppEvent(eventName, parameters as unknown as Record, 'Internal');\n }\n };\n\n const onCancel = () => {\n const eventName = props.responseAction?.ReturnAppEventName;\n const parameters = formSubmitParams('', 'Canceled');\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n props.onSubmitFormAppEvent(eventName, parameters as unknown as Record, 'Internal');\n };\n const managefocus = useCallback((event: KeyboardEvent) => {\n const formInputs:HTMLElement | null = document.getElementById(\"formInputs\");\n if (event.key === \"Escape\") {\n const comboboxElement = formInputs?.getElementsByTagName(\"div\")[2];\n if (comboboxElement && document.activeElement === document.body) {\n event.preventDefault();\n comboboxElement.focus();\n }\n }\n }, []);\n\n useEffect(() => {\n document.addEventListener(\"keydown\", managefocus, false);\n return () => {\n document.removeEventListener(\"keydown\", managefocus, false);\n };\n }, [managefocus]);\n\n return (\n {\n props.responseAction.Name === Constants.LAUNCHPICKERINPUT\n ? \n : \n }\n \n {\n props.responseAction.Name === Constants.LAUNCHDATEPICKERINPUT\n ? Submit\n \n :\n <> Submit\n Cancel\n }\n \n {\n props.responseAction.Name === Constants.LAUNCHDATEPICKERINPUT\n ? Cancel\n : null\n }\n );\n};\n\nexport default AlmeInlineForm;","import { AlmeResponseNext } from \"@alme/types/response/AlmeResponse\";\nimport { ResponseAction } from \"@alme/types/response/ResponseAction\";\nimport { AlmeResponseExt } from \"../AlmeResponse/AlmeResponseExt\";\nimport * as Constants from './AlmeInlineConstants';\n\nexport interface InlineFormResponseAction extends ResponseAction {\n ReturnAppEventName: string;\n ReturnAppEventParameter: string;\n TitleText: string;\n}\n\nexport interface DropdownOption {\n DisplayLabel: string;\n SubmitValue: string | number;\n}\n\nexport interface DropdownResponseAction extends InlineFormResponseAction {\n InitialValue: string | number;\n Values: DropdownOption[];\n}\n\nexport interface DatepickerReponseAction extends InlineFormResponseAction {\n MinDays: string;\n MaxDays: string;\n ReferenceDate: string;\n noCalendar?: boolean;\n}\n\nexport interface InlineFormInput {\n value: Date | string | number | null | undefined;\n valid: boolean;\n}\n\nexport const isInlineFormResponse = (response?: AlmeResponseExt): boolean => !!(response && getInlineFormResponseAction(response));\n\nexport function getInlineFormResponseAction(response: AlmeResponseNext): ResponseAction | undefined {\n return response.responseActions?.find((respAction: ResponseAction) =>\n respAction.Name === Constants.LAUNCHPICKERINPUT || respAction.Name === Constants.LAUNCHDATEPICKERINPUT);\n}","import React, { ErrorInfo, ReactElement } from 'react';\nimport { AlmeAppConfig } from '../../alme-config/AlmeAppConfig';\nimport { getLogger } from '../../utils/DebugUtils';\n\ninterface Props {\n children: ReactElement;\n appConfig: AlmeAppConfig;\n}\n\ninterface State {\n hasError: boolean;\n}\n\nexport default class ErrorBoundary extends React.Component {\n public state: State = {\n hasError: false,\n };\n\n static getDerivedStateFromError(error: Error): State {\n return { hasError: true };\n }\n\n public componentDidCatch(error: Error, errorInfo: ErrorInfo) {\n getLogger(this.props.appConfig.UiLogLevel).error(\"Uncaught error:\", error, errorInfo);\n }\n\n public render() {\n\n if(this.state.hasError) {\n return null;\n }\n\n return this.props.children;\n }\n}","import styled from 'styled-components';\n\nconst PromptText = styled.div`\n margin: 0 0 15px 0;\n font-size: ${props => props.theme.fontSizes.promptText};\n max-width: 310px;\n`;\n\nconst ControlWrapper = styled.div`\n width: 275px; \n margin: 10px 0 0 0;\n`;\n\nexport {ControlWrapper, PromptText};","import React, { FC, Suspense } from 'react';\nimport { DatePickerInput } from '../DisplayFormResponseAction';\nimport { ControlProps } from '../ControlProps';\nimport { ControlWrapper } from './control.styles';\nimport { commonDateFieldValidation, commonDateValidations } from '../../AlmeUtilities/dateutils';\nimport { LazyDatepickerControl } from '../../Custom/Datepicker/LazyDatepickerControl';\nimport AlmeLoader from '../../AlmeLoader/AlmeLoader';\n\nexport interface DatePickerControlProps extends ControlProps {\n inputMetadata: DatePickerInput;\n startDate: Date;\n endDate: Date;\n value: Date | null;\n showCalendar: boolean;\n}\n\nconst DatePickerControl: FC = (props: DatePickerControlProps) => {\n const isrequired = props.inputMetadata.required === 'true';\n const optionalText = isrequired ? \"\" : \" (optional)\";\n\n const onChange = (date: Date | null) => {\n const error = commonDateValidations(date, isrequired, props.startDate, props.endDate);\n props.onChange({\n id: props.inputMetadata.id,\n isvalid: !error,\n value: date,\n error,\n });\n };\n\n const onInputBlur = (dateString: string) => {\n const error = commonDateFieldValidation(dateString, isrequired);\n\n if(error) {\n props.onChange({\n id: props.inputMetadata.id,\n isvalid: false,\n value: null,\n error,\n });\n }\n };\n\n const calendarProps = {\n showMonthDropdown:true,\n showYearDropdown:true,\n dropdownMode:\"select\",\n shouldCloseOnSelect:false,\n adjustDateOnChange: true,\n };\n\n return (\n }>\n \n \n \n );\n};\n\nexport default DatePickerControl;","import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport React, { FC, useState } from 'react';\nimport Select from 'syf-component-library/ui/atoms/Select/Select';\nimport { DropdownInput } from \"../DisplayFormResponseAction\";\nimport { ControlProps } from \"../ControlProps\";\nimport { ControlWrapper } from './control.styles';\nimport { OptionType } from 'syf-component-library/ui/atoms/Select/typings';\n\nexport interface DropdownControlProps extends ControlProps {\n inputMetadata: DropdownInput;\n value: string;\n}\n\nfunction getOption(value: string, options: OptionType[]) {\n return options.find(x => x.value === value) as OptionType;\n}\n\nconst DropdownControl: FC = (props: DropdownControlProps) => {\n const [options] = useState(() => props.inputMetadata.value.map(val => ({ label: val.DisplayLabel, value: val.SubmitValue }) as OptionType));\n const [value, setValue] = useState(getOption(props.value, options));\n const [isrequired] = useState(props.inputMetadata.required === 'true');\n const [optionalText] = useState(isrequired ? \"\" : \" (optional)\");\n\n const onChange = (option: OptionType) => {\n setValue(option);\n props.onChange({\n id: props.inputMetadata.id,\n isvalid: !!(isrequired && option.value) || !isrequired,\n value: option.value,\n });\n };\n\n const htmlProps = {\n 'aria-label': props.inputMetadata.labeltext,\n };\n\n return (\n \n }\n rightIconClosed={}\n error={props.error}\n {...htmlProps}\n />\n );\n};\n\nexport default DropdownControl;","import React, { FC, SyntheticEvent, useState } from 'react';\nimport Textfield from 'syf-component-library/ui/atoms/Textfield';\nimport Textarea from 'syf-component-library/ui/atoms/Textarea';\nimport { TextInput } from \"../DisplayFormResponseAction\";\nimport { ControlProps } from \"../ControlProps\";\nimport { ControlWrapper } from './control.styles';\n\nconst InvalidData = \"Please enter information in correct format\";\nexport const MatchFail = \"MatchFail\";\n\nexport interface TextboxControlProps extends ControlProps {\n inputMetadata: TextInput;\n value: string;\n matchValue?: string;\n}\n\nconst TextboxControl: FC = (props: TextboxControlProps) => {\n const [value, setValue] = useState(props.value);\n const [isrequired] = useState(props.inputMetadata.required === 'true');\n const [optionalText] = useState(isrequired ? \"\" : \" (optional)\");\n\n const onChange = (e: SyntheticEvent) => {\n const val = (e.target as HTMLInputElement).value;\n setValue(val);\n props.onChange({\n id: props.inputMetadata.id,\n isvalid: (!!(isrequired && val) || !isrequired),\n value: val,\n });\n };\n\n const onBlur = () => {\n const regexStr = props.inputMetadata.validation;\n let errText: string | undefined;\n if (regexStr) {\n const regex = new RegExp(regexStr);\n if (!regex.test(value)) {\n errText = props.inputMetadata.validationtext || InvalidData;\n }\n }\n\n if (!errText && props.matchValue && value !== props.matchValue) {\n errText = MatchFail;\n }\n\n if (errText) {\n props.onChange({\n id: props.inputMetadata.id,\n isvalid: false,\n value,\n error: errText,\n });\n }\n };\n\n const htmlProps = {\n 'aria-label': props.inputMetadata.labeltext,\n tabIndex: props.tabIndex,\n };\n\n const textAreaProps = {\n required: isrequired,\n maxlength: props.inputMetadata.maxlength,\n onChange: onChange,\n error: props.error,\n onBlur: onBlur,\n };\n\n return (\n \n {props.inputMetadata.multiline === 'true' ?\n \n : \n }\n\n );\n};\n\nexport default TextboxControl;","import React, { FC, useState } from 'react';\nimport { DialogTitle, DialogFooter, DialogContent, DialogButton } from '../AlmeDialog/ModalDialog';\nimport { dateAddDays, formatdate, getCurrentDate, getEndDate, getStartDate, parseDate } from '../AlmeUtilities/dateutils';\nimport { PromptText } from './controls/control.styles';\nimport DatePickerControl from './controls/DatePickerControl';\nimport DropdownControl from './controls/DropdownControl';\nimport TextboxControl, { MatchFail } from './controls/TextboxControl';\nimport { DataInput, DatePickerInput, DropdownInput, FormMetadata, FormPane, TextInput } from './DisplayFormResponseAction';\nimport { InputChangeParam } from './ControlProps';\nimport styled from 'styled-components';\n\nconst DateInputType = \"Date\";\nconst DropdownInputType = \"Dropdown\";\nconst TextInputType = \"Text\";\nconst Required = \"true\";\nconst RequireField = \"Required field\";\n\n\nexport interface DataCollectionPaneProps {\n metadata: FormPane;\n onSubmit: (values: { [key: string]: unknown }, isCompleted: boolean) => Promise;\n}\n\nfunction getValue(dataInput: DataInput, dataInputs: DataInput[]): string | Date | null {\n if (dataInput.type === DateInputType) {\n const dateSpec = dataInput as DatePickerInput;\n let defaultDate = parseDate((dataInput as DatePickerInput).value);\n\n if(!defaultDate && dateSpec.parentId) {\n const parentDependentDays = (dataInputs.find(x => x.id === dateSpec.parentId) as DatePickerInput).dependentDateDays;\n if(parentDependentDays) {\n defaultDate = dateAddDays(getCurrentDate(), parentDependentDays);\n }\n }\n\n // When default date value is not given, assign current date as default value only when we show calendar\n // For certain DOB kind of dates do not show calendar and do not assign default value when not given\n if(!defaultDate && !dateSpec.noCalendar) {\n defaultDate = getCurrentDate();\n }\n\n return defaultDate;\n } else if (dataInput.type === DropdownInputType) {\n return (dataInput as DropdownInput).selected;\n } else {\n return (dataInput as TextInput).value;\n }\n}\n\nfunction initializeInputValues(metadata: FormMetadata): InputChangeParam[] {\n return metadata.dataInputs.map(input => {\n const isRequired = input.required === Required;\n const value = getValue(input, metadata.dataInputs);\n let matchId: string | undefined;\n let matchFailedText: string | undefined;\n\n if ((input as TextInput).match) {\n const textInput = input as TextInput;\n const matchInputSpec = metadata.dataInputs.find(i => i.id !== input.id && (i as TextInput).match === textInput.match) as TextInput;\n matchId = matchInputSpec.id;\n matchFailedText = textInput.matchfailedtext || matchInputSpec.matchfailedtext;\n }\n\n return {\n id: input.id,\n isvalid: !!(isRequired && value) || !isRequired,\n value: typeof value === \"number\" ? String(value): value,\n matchId,\n matchFailedText,\n };\n });\n}\n\nconst Container = styled.div`\n padding: 1rem;\n`;\n\nconst DataCollectionPane: FC = (props: DataCollectionPaneProps) => {\n const [inputValues, setInputValues] = useState(() => initializeInputValues(props.metadata.metadata));\n\n const onChange = (inputChangeParam: InputChangeParam) => {\n let values = [...inputValues];\n const index = values.findIndex(val => val.id === inputChangeParam.id);\n const inputValue = { ...values.splice(index, 1)[0], ...inputChangeParam } as InputChangeParam;\n const changedInputValues = [inputValue];\n\n if (inputValue.isvalid) {\n inputValue.error = undefined;\n } else {\n inputValue.error = inputValue.error || RequireField;\n }\n\n if (inputValue.matchId) {\n const matchInputIndex = values.findIndex(x => x.id === inputValue.matchId);\n const matchInput = { ...values.splice(matchInputIndex, 1)[0] };\n\n if (inputValue.error === MatchFail) {\n matchInput.error = matchInput.matchFailedText as string;\n matchInput.isvalid = false;\n inputValue.error = inputValue.matchFailedText as string;\n } else if (inputValue.value === matchInput.value && !inputValue.error) {\n matchInput.error = undefined;\n matchInput.isvalid = true;\n inputValue.error = undefined;\n }\n\n changedInputValues.push(matchInput);\n }\n\n values = [...values, ...changedInputValues];\n setInputValues(values);\n };\n\n const handleFormSubmit = () => {\n const values: Record = {};\n let isValid = true;\n let showError = false;\n const newInputValues = [...inputValues];\n const activeButton = document.activeElement as HTMLInputElement;\n activeButton.disabled = true;\n\n inputValues.forEach((inputVal, index) => {\n if (inputVal.isvalid) {\n values[inputVal.id] = inputVal.value instanceof Date ? formatdate(inputVal.value) : inputVal.value;\n } else {\n isValid = false;\n\n if (!inputVal.error) {\n showError = true;\n const newVal = {\n ...inputVal,\n error: RequireField,\n } as InputChangeParam;\n newInputValues[index] = newVal;\n }\n }\n });\n\n if (isValid) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n props.onSubmit(values, true);\n } else if (showError) {\n setInputValues(newInputValues);\n }\n\n if(!isValid){\n activeButton.disabled = false;\n }\n };\n\n const handleFormCancel = () => {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n props.onSubmit({}, false);\n };\n\n return (\n \n {props.metadata.header}\n \n {props.metadata.prompt}\n {props.metadata.metadata.dataInputs.map((controlSpec, index) => {\n const inputValue = inputValues.find(v => v.id === controlSpec.id);\n const errorMessage = inputValue?.error;\n if (controlSpec.type === DateInputType) {\n const dateSpec = controlSpec as DatePickerInput;\n const hasParent = !!(dateSpec.parentId && dateSpec.parentId.length >= 1);\n const hasChild = !!(dateSpec.dependentDateId && dateSpec.dependentDateId.length >= 1);\n const parentDate = dateSpec.parentId && inputValues.find(x => x.id === dateSpec.parentId)?.value;\n const childDate = dateSpec.dependentDateId && inputValues.find(x => x.id === dateSpec.dependentDateId)?.value;\n const parentDependentDays = dateSpec.parentId && (props.metadata.metadata.dataInputs.find(x => x.id === dateSpec.parentId) as DatePickerInput)?.dependentDateDays;\n return ();\n } else if (controlSpec.type === DropdownInputType) {\n const dropdownSpec = controlSpec as DropdownInput;\n return ();\n } else if (controlSpec.type === TextInputType) {\n const textboxSpec = controlSpec as TextInput;\n const matchValue = inputValue?.matchId && inputValues.find(x => x.id === inputValue.matchId)?.value as string;\n return ();\n } else {\n console.error('Unknown control error', controlSpec);\n return null;\n }\n })}\n \n \n {props.metadata.metadata.buttonText}\n {props.metadata.metadata.cancelText}\n \n );\n};\n\nexport default DataCollectionPane;","export type EndType = 'Aborted' | 'Completed' | 'Canceled';\nexport type FeedbackAction = 'Pane Completed' | 'Pane Aborted' | 'Feedback Completed' | 'Feedback Aborted';\n\nconst FormId = '1';\nconst Completed: EndType = 'Completed';\nconst Canceled: EndType = 'Canceled';\n\nconst PaneCompleted: FeedbackAction = 'Pane Completed';\nconst PaneAborted: FeedbackAction = 'Pane Aborted';\nconst FeedbackCompleted: FeedbackAction = 'Feedback Completed';\nconst FeedbackAborted: FeedbackAction = 'Feedback Aborted';\nconst FeedbackCategory = 'Feedback';\n\n\nexport interface FeedbackLabel {\n [key: string]: unknown;\n returnAppEventParam: string;\n}\n\nexport interface FeedbackParam {\n category: string;\n action: FeedbackAction;\n label?: FeedbackLabel;\n value?: string;\n}\n\nexport interface FeedbackPane {\n paneId: string;\n value: FeedbackParam;\n}\n\nexport interface FeedbackAppEventParam extends Record{\n formId: string;\n feedback: FeedbackPane[];\n endType: EndType;\n}\n\nexport function feedbackAppEventParam(paneId: string, isCompleted: boolean, label?: FeedbackLabel): FeedbackAppEventParam {\n return ({\n formId: FormId,\n endType: isCompleted ? Completed : Canceled,\n feedback: [{\n paneId,\n value: {\n action: isCompleted ? PaneCompleted : PaneAborted,\n category: FeedbackCategory,\n label: label,\n value: paneId,\n },\n }, {\n paneId,\n value: {\n action: isCompleted ? FeedbackCompleted : FeedbackAborted,\n category: FeedbackCategory,\n },\n }],\n });\n}","import React, { FC } from 'react';\nimport { OverlayFormResponseAction } from './DisplayFormResponseAction';\nimport ModalDialog from '../AlmeDialog/ModalDialog';\nimport DataCollectionPane from './DataCollectionPane';\nimport { FeedbackAppEventParam, feedbackAppEventParam } from './FeedbackAppEventParam';\nimport { EntryOriginTypesNext } from '@alme/api-ts/Alme/EntryOriginTypes';\n\nexport interface FeedbackFormOverlayProps {\n responseAction: OverlayFormResponseAction;\n onFeedbackFormSubmit: (eventName: string, parameters: FeedbackAppEventParam, origin: EntryOriginTypesNext) => Promise;\n}\n\nconst FeedbackFormOverlay: FC = (props: FeedbackFormOverlayProps) => {\n const onSubmit = async (values: Record, isCompleted: boolean): Promise => {\n const appEventParams = feedbackAppEventParam(\n props.responseAction.Metadata.chatFormPanes[0].paneId,\n isCompleted,\n { ...values, returnAppEventParam: props.responseAction.Metadata.chatFormPanes[0].metadata.returnAppEventParam });\n await props.onFeedbackFormSubmit('CloseForm', appEventParams, 'Internal');\n };\n\n return (\n \n );\n};\n\nexport default FeedbackFormOverlay;","/**\n* Function creates full HTTP path\n* @param ivaWebUrl - IVA public url\n* @param resourceName - Name of the resource with extension, if resource within subdirectory include partial path like static/js/test.png or test.png\n*/\nexport function createResourceUrl(ivaWebUrl: string, resourceName: string): string {\n return ivaWebUrl.length > 1 ? `${ivaWebUrl}/${resourceName}` : resourceName;\n}\n\nexport async function getResource(ivaWebUrl: string, textResourcePath: string): Promise {\n const url = createResourceUrl(ivaWebUrl, textResourcePath);\n const changeLogResonse = await fetch(url);\n return changeLogResonse.text();\n}\n\nexport function isTestPage(ivaWebUrl: string): boolean {\n return ivaWebUrl.length <= 1 || ivaWebUrl.indexOf(window.location.origin) === 0;\n}","\nfunction scriptLoader(scriptUrl: string, isModule?: boolean, defer?: boolean): Promise {\n const script = document.createElement('script');\n script.src = scriptUrl;\n\n if(isModule) {\n script.type = \"module\";\n }\n\n if(defer) {\n script.defer = true;\n } else {\n script.async = true;\n }\n\n document.body.appendChild(script);\n\n return new Promise((resolve, reject) => {\n script.onload = () => {\n resolve();\n };\n\n script.onerror = () => {\n reject();\n };\n });\n}\n\nexport default scriptLoader;","import { initializedPromise } from \"../../../utils/PromiseUtils\";\nimport { createResourceUrl } from \"../../../utils/resourceUtils\";\nimport scriptLoader from \"../../../utils/scriptLoader\";\n\nconst initializationCheckTimes = 20;\nconst intervalInMs = 1000;\n\nfunction loadTransmitSDK(ivaWebUrl: string, successCallback: () => void, failureCallback: (e: unknown) => void): void {\n const scriptLoads: Array> = [];\n\n if(!window.XmSdk || !window.xmui) {\n scriptLoads.push(scriptLoader(createResourceUrl(ivaWebUrl, 'transmit-sdk.js'), false, false));\n scriptLoads.push(\n initializedPromise(() => !!(window.XmSdk && window.xmui),\n \"Transmit SDK initialization error\",\n intervalInMs,\n initializationCheckTimes));\n }\n\n if(typeof window.$ !== \"function\") {\n scriptLoads.push(scriptLoader(createResourceUrl(ivaWebUrl, 'jquery-3.5.1.min.js')));\n }\n\n Promise.all(scriptLoads)\n .then(() => scriptLoader(createResourceUrl(ivaWebUrl, 'iva-transmit-sdk.js'), false, true))\n .then(() => initializedPromise(\n () => window.IGLOO && typeof window.IGLOO.getBlackbox === \"function\",\n \"Blackbox initialization error\",\n intervalInMs,\n initializationCheckTimes))\n .then(successCallback)\n .catch(failureCallback);\n}\n\nexport default loadTransmitSDK;","import { CookieAlmeSessionDataLoader } from '@alme/session-ts/CookieAlmeSessionDataLoader';\nimport * as Loaders from '@alme/storage-ts/CookieLoader';\nimport { AlmeSessionData } from '@alme/session-ts/AlmeSessionData';\nimport { AlmeSessionDataLoader } from '@alme/session-ts/AlmeSessionDataLoader';\nimport { gettopdomain } from '../../utils/UrlUtils';\n\nconst storageLoader = new Loaders.CookieLoader('almeSession');\nstorageLoader.cookieOptions = { domain: gettopdomain() };\nconst cookieSessionLoader = new CookieAlmeSessionDataLoader(storageLoader);\nconst sessionDataLoader: AlmeSessionDataLoader = cookieSessionLoader;\n\nexport function getAlmeSessionData(): AlmeSessionData | null | undefined {\n let almeSessionData: AlmeSessionData | undefined | null;\n try {\n almeSessionData = sessionDataLoader.GetAlmeSessionData();\n } catch (ex) {\n console.error(ex);\n }\n\n return almeSessionData;\n}","import React, {FC, useState, useEffect, useRef} from 'react';\nimport { TransmitStartResponseAction } from '../DisplayFormResponseAction';\nimport { EntryOriginTypesNext } from '@alme/api-ts/Alme/EntryOriginTypes';\nimport ModalDialog, { DialogContent } from '../../AlmeDialog/ModalDialog';\nimport loadTransmitSDK from './loadTransmitSDK';\nimport { getAlmeSessionData } from '../../AlmeApp/AlmeAppSessionState';\nimport styled from 'styled-components';\nimport SyfLoader from 'syf-component-library/ui/atoms/Loader/SyfLoader';\nimport ErrorBoundary from '../../ErrorBoundary/ErrorBoundary';\nimport { AlmeAppConfig } from '../../../alme-config/AlmeAppConfig';\nconst TransmitDialogContent = styled(DialogContent)`\n padding: 0;\n`;\n\nexport interface TransmitFormOverlayParams {\n ivaWebUrl: string;\n appConfig: AlmeAppConfig;\n responseAction: TransmitStartResponseAction;\n onTransmitAuthComplete: (eventName: string, parameters: Record, origin: EntryOriginTypesNext) => Promise;\n}\n\nconst TransmitFormOverlay: FC = (props: TransmitFormOverlayParams) => {\n const [isOpen, setIsOpen] = useState(true);\n const [loaded, setLoaded] = useState(!!window.iva_transmit_sdk);\n\n const initialized = useRef(false);\n\n useEffect(() => {\n async function startTrasmitWorkflow() {\n try{\n const almeSessionData = getAlmeSessionData();\n const authenticationParams: AuthenticationParams = {\n ...JSON.parse(props.responseAction.TransmitStartParams) as AuthenticationParams,\n user_id: almeSessionData?.userId,\n };\n\n const authenticationResult = await window\n .iva_transmit_sdk\n .authenticate(\n 'transmitContainer',\n authenticationParams);\n\n await props.onTransmitAuthComplete('TransmitResult', authenticationResult as unknown as Record, 'Internal');\n } catch (e) {\n console.error(\"Transmit error\", e);\n setIsOpen(false);\n }\n }\n\n if(!loaded) {\n loadTransmitSDK(\n props.ivaWebUrl,\n () => setLoaded(true),\n (e: unknown) => {\n console.error(\"Unable to download transmit SDK\", e);\n setIsOpen(false);\n });\n }\n\n if(loaded && !initialized.current) {\n initialized.current = true;\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n startTrasmitWorkflow();\n }\n }, [props, loaded]);\n\n return (\n isOpen\n ?\n \n \n \n
\n \n
\n
\n \n
\n : null);\n};\n\nexport default TransmitFormOverlay;","import { ResponseAction } from '@alme/types/response/ResponseAction';\nimport { AlmeMarkdownResponseExt } from '../AlmeResponse/AlmeResponseExt';\n\nexport type DataInput = DatePickerInput | DropdownInput | TextInput;\n\nexport interface InputBase {\n type: string;\n required: string;\n id: string;\n labeltext: string;\n}\n\nexport interface DatePickerInput extends InputBase {\n minDays: string;\n maxDays: string;\n value: string;\n dependentDateId?: string;\n parentId?: string;\n dependentDateDays?: number;\n noCalendar?: boolean;\n}\n\nexport interface DropdownValue {\n DisplayLabel: string;\n SubmitValue: string;\n}\n\nexport interface DropdownInput extends InputBase {\n selected: string;\n value: DropdownValue[];\n}\n\nexport interface TextInput extends InputBase {\n value: string;\n mask?: string;\n match?: string;\n matchfailedtext?: string;\n validation?: string;\n validationtext?: string;\n maxlength?:string;\n multiline?:string;\n}\n\nexport interface FormMetadata {\n buttonText: string;\n cancelText: string;\n dataInputs: Array;\n nextPane: string;\n returnAppEventParam: string;\n}\n\nexport interface FormPane {\n header: string;\n metadata: FormMetadata;\n paneId: string;\n paneType: string;\n prompt: string;\n}\n\nexport interface OverlayFormResponseActionMetadata {\n chatFormPanes: FormPane[];\n}\n\nexport interface OverlayFormResponseAction extends ResponseAction {\n Metadata: OverlayFormResponseActionMetadata;\n}\n\nexport interface TransmitStartResponseAction extends ResponseAction {\n TransmitStartParams: string;\n}\n\nconst OverlayFormName = \"DisplayForm\";\nconst DataCollectionForm = \"DataCollection\";\nconst TransmitStartResponseActionName = \"TransmitStart\";\n\nfunction isOverlayDataCollectionPane(responseAction: ResponseAction): boolean {\n if (responseAction.Name === OverlayFormName) {\n const metadata = (responseAction as OverlayFormResponseAction).Metadata;\n if (metadata && metadata.chatFormPanes && metadata.chatFormPanes.length && metadata.chatFormPanes.length >= 1) {\n return metadata.chatFormPanes[0].paneType === DataCollectionForm;\n }\n }\n\n return false;\n}\n\nexport function overlayDataCollectionResponse(responseActions: ResponseAction[] | null): ResponseAction | null | undefined {\n return responseActions && responseActions.find(isOverlayDataCollectionPane);\n}\n\nexport function getTranmitStartWorkflowResp(responseActions: ResponseAction[] | null): ResponseAction | undefined | null {\n return responseActions && responseActions.find(responseAction => responseAction.Name === TransmitStartResponseActionName);\n}\n\nexport function isOverlayResponse(response: AlmeMarkdownResponseExt): boolean {\n return !!(overlayDataCollectionResponse(response.responseActions) || getTranmitStartWorkflowResp(response.responseActions));\n}","import React, {FC} from 'react';\nimport { EntryOriginTypesNext } from '@alme/api-ts/Alme/EntryOriginTypes';\nimport ErrorBoundary from '../ErrorBoundary/ErrorBoundary';\nimport { AlmeAppConfig } from '../../alme-config/AlmeAppConfig';\nimport FeedbackFormOverlay from './FeedbackFormOverlay';\nimport TransmitFormOverlay from '../AlmeOverlayForm/transmit/TransmitFormOverlay';\nimport { getTranmitStartWorkflowResp, overlayDataCollectionResponse, OverlayFormResponseAction, TransmitStartResponseAction } from './DisplayFormResponseAction';\nimport { AlmeMarkdownResponseExt } from '../AlmeResponse/AlmeResponseExt';\n\n\nexport interface OverlayFormProps {\n appConfig: AlmeAppConfig;\n ivaWebUrl: string;\n response: AlmeMarkdownResponseExt;\n isLastResponse: boolean;\n onSubmitFormAppEvent: (eventName: string, parameters: Record, origin: EntryOriginTypesNext) => Promise;\n}\n\nconst OverlayForm: FC = (props: OverlayFormProps) => {\n const overlayDataCollectionResp = overlayDataCollectionResponse(props.response.responseActions);\n const transmitStartWorkflowResp = getTranmitStartWorkflowResp(props.response.responseActions);\n\n return (\n \n <>\n { overlayDataCollectionResp && props.isLastResponse\n ? ()\n : null\n }\n {\n transmitStartWorkflowResp && props.isLastResponse\n ? ()\n : null\n }\n \n \n );\n};\n\nexport default OverlayForm;","import { AlmeResponseNext } from '@alme/types/response/AlmeResponse';\nimport { ResponseAction } from '@alme/types/response/ResponseAction';\nimport { AlmeAppConfig } from '../../alme-config/AlmeAppConfig';\n\nconst AltLoginAutoNavResponseActionName = 'AltLoginAutoNav';\nconst AltLoginAutoNavVistResponseActionName = 'AltLoginAutoNavVista';\n\nexport interface AltLoginAutoNavResponse extends ResponseAction {\n AccountType: string;\n EncryptedUserState: string;\n}\n\nexport interface AltLoginAutoNavVistaResponse extends ResponseAction {\n idTokenHint: string;\n authorizeURI: string;\n}\n\nexport const getAltAutoNavResponse = (response: AlmeResponseNext): ResponseAction | undefined => {\n return response.responseActions?.find((respAction: ResponseAction) => (respAction.Name === AltLoginAutoNavResponseActionName\n || respAction.Name === AltLoginAutoNavVistResponseActionName));\n};\n\nfunction SetAttributes(element: Element, attrs: Record): Element {\n Object.keys(attrs).forEach(key => element.setAttribute(key, attrs[key]));\n return element;\n}\n\nconst stringOrEmpty = (val: string | undefined) => val || '';\n\nfunction submitFormData(url: string, formData: Record): void {\n let form = document.createElement('form');\n form = SetAttributes(form, { 'method': 'post', 'action': url }) as HTMLFormElement;\n\n const dataList = Object.entries(formData);\n dataList.forEach(item => {\n const hiddenField = document.createElement('input');\n form.appendChild(SetAttributes(hiddenField, { 'type': 'hidden', 'name': item[0], 'value': stringOrEmpty(item[1])}) as HTMLInputElement);\n });\n\n document.body.appendChild(form);\n form.submit();\n}\n\nconst altLoginAutoNavVista = (response: AltLoginAutoNavVistaResponse): void => {\n const altLoginPostUrl = response.authorizeURI;\n const formData = {\n id_token_hint: response.idTokenHint,\n lang: \"en\",\n };\n\n submitFormData(altLoginPostUrl, formData);\n};\n\nconst altLoginAutoNavEservice = (response: AltLoginAutoNavResponse, appconfig: AlmeAppConfig): void => {\n const altLoginPostUrl = appconfig[\"RC.AltLoginFormPostUrl\"] as string;\n const formData = {\n accountType: response.AccountType,\n data: response.EncryptedUserState,\n clientId: appconfig.clientName,\n transferLoginAccessed: 'false',\n langId: 'en',\n startTime: '',\n URL: altLoginPostUrl,\n tokenId: appconfig.main.clientSessionId,\n };\n\n const path = window.location.protocol + \"//\" + window.location.host + stringOrEmpty(formData.URL);\n submitFormData(path, formData);\n};\n\nexport const altLoginAutoNav = (response: ResponseAction, appConfig: AlmeAppConfig): void => {\n if(response.Name === AltLoginAutoNavResponseActionName) {\n altLoginAutoNavEservice(response as AltLoginAutoNavResponse, appConfig);\n } else if(response.Name === AltLoginAutoNavVistResponseActionName) {\n altLoginAutoNavVista(response as AltLoginAutoNavVistaResponse);\n }\n};","import React, { FC, KeyboardEventHandler, useEffect, useState } from \"react\";\nimport Link from \"syf-component-library/ui/atoms/Link\";\nimport { onEnterKeyPress } from \"../AlmeUtilities/dom-utils\";\nimport { FocusComponentProps } from \"../models/ComponentProps\";\n\ninterface OneClickLinkProps extends FocusComponentProps {\n linkText: string;\n onClick: () => void;\n isLinkEnabled?: boolean;\n}\n\nconst OneClickLink: FC = ({\n linkText,\n onClick,\n isLinkEnabled,\n ...props\n}: OneClickLinkProps) => {\n const [disabled, setDisabled] = useState(props.disabled || false);\n\n useEffect(() => {\n if (isLinkEnabled) {\n setDisabled(true);\n }\n },[isLinkEnabled]);\n\n return (\n disabled\n ? {linkText}\n : onEnterKeyPress(evt, () => { setDisabled(true); onClick(); })) as unknown as KeyboardEventHandler }\n onClick={(): void => { setDisabled(true); onClick(); }}>{linkText});\n};\n\nexport default OneClickLink;","import React, { FC, ReactNode, useRef, useEffect } from 'react';\nimport { doScroll, focusMessageBox } from '../AlmeUtilities/dom-utils';\n\ninterface LastResponseHandlerProps {\n responseId: number;\n children: ReactNode;\n isLastResponse: boolean;\n isInlineForm: boolean;\n isOverlayForm: boolean;\n fromHistory: boolean;\n}\n\nconst initialScrollTimeout = 1000;\nconst scrollTimeout = 100;\n\nconst focusableElements = [\n 'a[href]',\n 'button',\n 'input',\n 'textarea',\n /** 'select', - using component library select */\n 'details',\n '[tabindex]:not([tabindex=\"-1\"])',\n];\n\nfunction elementFilter(el: Element): boolean {\n return !el.hasAttribute('disabled') && !el.getAttribute('aria-hidden') && el.tagName.toLowerCase() !== \"select\";\n}\n\nfunction getKeyboardFocusableElements (element: HTMLElement): HTMLElement[] {\n return [...element.querySelectorAll(focusableElements.join(','))].filter(elementFilter) as HTMLElement[];\n}\n\nconst ResponseFocusHandler: FC = ({\n responseId,\n children,\n isLastResponse,\n isInlineForm,\n isOverlayForm,\n fromHistory,\n}: LastResponseHandlerProps) => {\n\n const responseRef = useRef(null);\n const isInlineFocusable = isLastResponse && (!fromHistory || isInlineForm);\n /** To fix initial scrolling issue when entire page is refreshed */\n const stimeout = fromHistory ? initialScrollTimeout : scrollTimeout;\n\n useEffect(() => {\n if(!isLastResponse) return;\n\n if(isInlineFocusable && responseRef.current) {\n const currentFocusableElements = getKeyboardFocusableElements(responseRef.current);\n (currentFocusableElements.length >= 1 && currentFocusableElements[0].id !== \"alme-survey-yes-button\") ? currentFocusableElements[0].focus() : focusMessageBox();\n } else if(!isOverlayForm) {\n focusMessageBox();\n }\n }, [isInlineFocusable, isLastResponse, isOverlayForm]);\n\n useEffect(() => {\n let timeout: number | undefined;\n if(isLastResponse) {\n timeout = window.setTimeout(() => doScroll(responseRef), stimeout);\n }\n return () => {\n clearTimeout(timeout);\n };\n }, [isLastResponse, stimeout]);\n\n return (\n
{children}
\n );\n};\n\nexport default ResponseFocusHandler;","import React, {FC} from 'react';\nimport styled, { DefaultTheme, withTheme } from \"styled-components\";\n\n\nexport interface OperatorIconProps{\n size: number;\n name?: string;\n theme?: DefaultTheme;\n}\n\nconst IconWrapper = styled.div`\n padding: 0;\n margin: 0;\n display: block;\n height: ${(props: OperatorIconProps) => props.size}px;\n width: ${(props: OperatorIconProps) => props.size}px;\n min-width: ${(props: OperatorIconProps) => props.size}px !important;\n border-radius: 50%;\n display:flex;\n align-items: center;\n justify-content: center;\n color: #fff;\n background-color: ${(props) => props.theme.button.background}\n`;\n\nconst Icon = styled.div`\ndisplay: inline-block;\nfont-size: ${(props: OperatorIconProps) => props.size - 15}px;\n`;\n\nconst OperatorIcon: FC = (props: OperatorIconProps) => {\n return (\n \n {props.name}\n \n );\n};\n\nexport default withTheme(OperatorIcon);","import React, { useEffect } from 'react';\n\nimport { getAgentResponse, getAgentResponseText, onTriggerAutoNavUrl, paintNavUrl } from '../../../AlmeResponse/AlmeResponse';\nimport { AlmeAppConfig } from '../../../../alme-config/AlmeAppConfig';\nimport { DisplayLink } from '@alme/types/response/DisplayLink';\nimport { AlmeMarkdownResponseExt, AlmeResponseExt } from '../../../AlmeResponse/AlmeResponseExt';\nimport { AgentCardContainer, AgentCardMessageContainer, AgentCardBubbleContent} from '../../../AlmeResponse/AlmeResponse.styles';\nimport { AgentCardBubble } from '../../../AlmeResponse/ChatBubble';\nimport OperatorIcon from '../../../AlmeUtilities/Icons/OperatorIcon';\nimport { FocusComponentProps } from '../../../models/ComponentProps';\n\nexport function isValidLiveChatOperatorResponse(response: AlmeResponseExt): boolean {\n const responseText = getAgentResponseText(response);\n const hasIvaResponse = !!(responseText || response.navUrl || response.displayLinkCollection?.Sections?.length);\n\n return hasIvaResponse && response?.extensionData?.MessageOrigin === 'Operator';\n}\n\nexport type AlmeLiveChatOperatorResponseClasses = Record<\"navUrl\", string>;\n\ninterface AlmeLiveChatOperatorResponseProps {\n response: AlmeResponseExt;\n isLastResponse: boolean;\n appConfig: AlmeAppConfig;\n focusProps?: FocusComponentProps;\n responseId?: string | number;\n onDisplayLinkClick: (link: DisplayLink, appConfig: AlmeAppConfig) => void;\n}\n\nconst AlmeLiveChatOperatorResponse: React.FC = (props: AlmeLiveChatOperatorResponseProps) => {\n\n const response = {\n ...props.response,\n html: '',\n } as AlmeMarkdownResponseExt;\n\n useEffect(() => {\n if (response.navUrl && props.appConfig.liveChatOperatorResponse.shouldAutoNav) {\n onTriggerAutoNavUrl(response.navUrl, props.appConfig, props.onDisplayLinkClick);\n }\n // Empty dependency-list so autoNav only happens once:\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n if (!isValidLiveChatOperatorResponse(props.response)) {\n return null;\n }\n\n const responseRevision = (props.responseId || response.responseRevision).toString();\n const entryId = response.extensionData.entryId || responseRevision;\n const operatorName = props.response.extensionData.OperatorData?.Name;\n const operatorFirstLetter = operatorName ? operatorName[0] : \"\";\n const avatar = ;\n const responseText = getAgentResponse(response);\n\n return (\n <>\n \n {avatar}\n \n \n \n {responseText}\n {paintNavUrl(entryId, response.navUrl, props.appConfig, props.onDisplayLinkClick, props.isLastResponse, props.focusProps)}\n \n \n \n \n \n );\n};\n\nexport default AlmeLiveChatOperatorResponse;\n","import React, { useRef, ReactElement, ReactNode, KeyboardEventHandler } from 'react';\nimport { isExternal } from '../../utils/UrlUtils';\nimport { DisplayLinkSection } from '@alme/types/response/DisplayLinkSection';\nimport { DisplayLink } from '@alme/types/response/DisplayLink';\nimport { NavUrl } from '@alme/types/response/NavUrl';\nimport { UrlNavUrl } from '@alme/types/response/UrlNavUrl';\nimport { AlmeMarkdownProcessor } from '@alme/markdown-ts/AlmeMarkdownProcessor';\nimport { UrlDisplayLink } from '@alme/types/response/UrlDisplayLink';\nimport { LinkNavigationTypes } from '@alme/types/response/LinkNavigationTypes';\nimport { Icon } from '../AlmeUtilities/Icons/StyledIcon';\nimport { SydneyAvatar } from '../AlmeUtilities/Icons/Avatar';\nimport { UserAvatar } from '../AlmeUtilities/Icons/UserAvatar';\nimport {\n AgentCardContainer,\n AgentCardMessageContainer,\n AgentCardBubbleContent,\n UserCardContainer,\n AgentText,\n UserText,\n SectionHeader,\n} from './AlmeResponse.styles';\nimport { AgentCardBubble, UserCardBubble } from './ChatBubble';\nimport AlmeSurvey, { getSurveyResponseAction } from '../AlmeSurvey/AlmeSurvey';\nimport { AlmeAppConfig } from '../../alme-config/AlmeAppConfig';\nimport { FocusComponentProps } from '../models/ComponentProps';\nimport AlmeInlineForm from '../AlmeInlineForm/AlmeInlineForm';\nimport Link from 'syf-component-library/ui/atoms/Link';\nimport { getInlineFormResponseAction, InlineFormResponseAction } from '../AlmeInlineForm/InlineFormResponseAction';\nimport { EntryOriginTypesNext } from '@alme/api-ts/Alme/EntryOriginTypes';\nimport OverlayForm from '../AlmeOverlayForm/OverlayForm';\nimport { getAltAutoNavResponse } from './AlternateLoginAutoNav';\nimport { AlmeMarkdownResponseExt, AlmeResponseExt, AlmeResponseMarkdownInput } from './AlmeResponseExt';\nimport { DisplayLinkCollection } from '@alme/types/response/DisplayLinkCollection';\nimport OneClickLink from '../Custom/OneClickLink';\nimport { createResourceUrl } from '../../utils/resourceUtils';\nimport ResponseFocusHandler from './ResponseFocusHandler';\nimport { onEnterKeyPress } from '../AlmeUtilities/dom-utils';\nimport { useAltLoginNavigationHook } from '../../hooks/useAltLoginNavigationHook';\nimport { isOverlayResponse } from '../AlmeOverlayForm/DisplayFormResponseAction';\nimport { isValidLiveChatOperatorResponse } from '../LiveChat/AlmeLiveChatResponse/AlmeLiveChatOperatorResponse/AlmeLiveChatOperatorResponse';\n\ninterface AlmeResponseProps {\n isLiveChatConnected?: boolean;\n response: AlmeResponseExt;\n responseId: number;\n isLastResponse: boolean;\n onDisplayLinkClick: (link: DisplayLink, appConfig: AlmeAppConfig) => void;\n onSubmitFormAppEvent: (eventName: string, parameters: Record, origin: EntryOriginTypesNext) => Promise;\n appConfig: AlmeAppConfig;\n setIsDialogOpen: (isOpen: boolean) => void;\n focusProps?: FocusComponentProps;\n}\n\ninterface AlmeButtonProps extends FocusComponentProps {\n className?: string;\n key: string;\n role: string;\n}\n\n/**\n * @description Checks for navigation type and renders link with corresponding properties.\n * 'MainPage' navType utilizes the isExternal function, which strips url addresses to reveal if the address\n * is outside of the current domain (see utils/UrlUtils.ts). If the urladdress is external, the link will contain \n * the OpenInNewIcon.\n * {@linkcode isExternal}\n */\n\nconst paintUrlLink = (\n appConfig: AlmeAppConfig,\n navType: LinkNavigationTypes,\n urlAddress: string,\n displayText: string,\n buttonProps: AlmeButtonProps,\n onLinkClick: ((link: DisplayLink, appConfig: AlmeAppConfig) => void)): ReactElement => {\n let icon: ReactNode = null;\n if (isExternal(urlAddress)) {\n icon = ;\n }\n const link = { TargetType: 'Url', Metadata: { UrlAddress: urlAddress, NavigationType: navType } } as unknown as UrlDisplayLink;\n switch (navType) {\n case 'MainPage':\n return ( onEnterKeyPress(evt, () => onLinkClick(link, appConfig))) as unknown as KeyboardEventHandler}\n onClick={(): void => { onLinkClick(link, appConfig); }}>{icon}{displayText});\n case 'None':\n return ({displayText});\n case 'Popup':\n default:\n return ( onEnterKeyPress(evt, () => onLinkClick(link, appConfig))) as unknown as KeyboardEventHandler}\n onClick={(): void => { onLinkClick(link, appConfig); }}>{displayText});\n }\n};\n\n/**\n * Handle alme navUrl clicked or auto nav to navigate the url in a new tab or the current window.\n * If clicked this should use the INavUrl.LinkNavigationType else use the INavUrl.AutoNavigationType.\n * @see https://confluence.nextit.com/pages/viewpage.action?pageId=35688489\n * @see https://confluence.nextit.com/display/AlmeTech/Processing+the+Agent+Response+to+a+Conversation+Request\n */\nexport function onTriggerAutoNavUrl(link: NavUrl, appConfig: AlmeAppConfig, onLinkClick: ((link: DisplayLink, appConfig: AlmeAppConfig) => void)): void {\n const urlNavUrl = link as UrlNavUrl;\n\n // Auto Nav is not best practice and may be removed in future versions of Alme.\n // See https://www.w3.org/TR/WCAG20/#context-changedef \n const navlink = { TargetType: 'Url', Metadata: { UrlAddress: urlNavUrl.UrlAddress, NavigationType: urlNavUrl.AutoNavigationType } } as unknown as UrlDisplayLink;\n onLinkClick(navlink, appConfig);\n}\n\n/**\n * @description Returns the Alme DisplayLink as a material-ui Button JSX element.\n * @see https://material-ui.com/components/buttons/\n * @returns Alme DisplayLink as a material-ui Button\n */\nfunction paintDisplayLink(entryId: string, isLastResponse: boolean, onLinkClick: (link: DisplayLink, appConfig: AlmeAppConfig) => void, sectionIndex: number, _appConfig: AlmeAppConfig, focusProps?: FocusComponentProps, isLiveChatConnected?: boolean): (link: DisplayLink, linkIndex: number) => ReactElement {\n function paintLink(link: DisplayLink, linkIndex: number): ReactElement {\n const urlLink = link as UrlDisplayLink;\n const buttonProps = {\n key: `${entryId}-link-${sectionIndex}-${linkIndex}`,\n role: `button`,\n ...focusProps,\n };\n\n switch (link.TargetType) {\n case 'Url':\n return paintUrlLink(_appConfig, urlLink.Metadata.NavigationType, urlLink.Metadata.UrlAddress, urlLink.DisplayText, buttonProps, onLinkClick);\n case 'None':\n return ({link.DisplayText});\n case 'Input':\n return {onLinkClick(link,_appConfig);} }\n linkText={link.DisplayText} />;\n case 'Unit':\n default:\n return { onLinkClick(link, _appConfig); }}\n linkText={link.DisplayText} />;\n }\n }\n\n return paintLink;\n}\nconst displayLinkCollection = (\n displayLinks: DisplayLinkCollection | null,\n entryId: string,\n onLinkClick: ((link: DisplayLink, appConfig: AlmeAppConfig) => void),\n appConfig: AlmeAppConfig,\n isLastResponse: boolean,\n focusProps?: FocusComponentProps, isLiveChatConnected?: boolean): ReactElement[] | null => {\n return displayLinks && !!displayLinks.Sections.length\n ? displayLinks.Sections.reduce((elements: ReactElement[], section): ReactElement[] => {\n return elements.concat(paintSection(entryId, section, onLinkClick, appConfig, isLastResponse, focusProps, isLiveChatConnected));\n }, [] as ReactElement[])\n : null;\n};\n\nconst paintSection = (\n entryId: string,\n section: DisplayLinkSection,\n onLinkClick: ((link: DisplayLink, appConfig: AlmeAppConfig) => void),\n appConfig: AlmeAppConfig,\n isLastResponse: boolean,\n focusProps?: FocusComponentProps,\n isLiveChatConnected?: boolean): ReactElement[] => {\n return section.Links.map(paintDisplayLink(entryId, isLastResponse, onLinkClick, section.SectionID, appConfig, focusProps, isLiveChatConnected));\n};\n\n/**\n * @description Returns the Alme NavUrl as a material-ui Button JSX Element.\n * This function also triggers onTriggerNavUrl with clicked=false to support auto navigation.\n * @see https://material-ui.com/components/buttons/\n * @see INavUrl\n * @returns Alme NavUrl as a material-ui Button\n */\nexport function paintNavUrl(\n entryId: string,\n navUrl: NavUrl | null,\n _appConfig: AlmeAppConfig,\n onLinkClick: ((link: DisplayLink, appConfig: AlmeAppConfig) => void),\n isLastResponse: boolean,\n focusProps?: FocusComponentProps): ReactElement | null {\n if (navUrl && navUrl.DisplayText && (navUrl.UrlAddress || navUrl.LinkNavigationType === 'None')) {\n if (navUrl.AutoNavigationType && navUrl.AutoNavigationType !== 'None' && isLastResponse) {\n onTriggerAutoNavUrl(navUrl, _appConfig, onLinkClick);\n }\n const buttonProps: AlmeButtonProps = {\n key: `${entryId}-url-${navUrl.UrlUID}-link-0`,\n role: `button`,\n ...focusProps,\n };\n return paintUrlLink(_appConfig, navUrl.LinkNavigationType, navUrl.UrlAddress, navUrl.DisplayText, buttonProps, onLinkClick);\n } else {\n return null;\n }\n}\n\n/**\n * @description Returns a h4 JSX Element that includes the text from first section HeaderText (i.e. section[0].HeaderText).\n * In this example we will only support the first section header text and not be creating multiple link sections.\n * @see IDisplayLinkSection\n * @returns Section header JSX Element\n */\nconst paintSectionHeader = (sections: DisplayLinkSection[]): ReactElement | null => {\n if (sections && sections.length && sections[0].HeaderText && sections[0].Links && sections[0].Links.length) {\n return ({sections[0].HeaderText});\n } else {\n return null;\n }\n};\n\n/**\n * Returns the users masked input from the Alme response or null if there is no masked input.\n * @see IAlmeResponse\n * @returns Users masked input or null\n */\nexport function getMaskedUserInput(response: AlmeResponseExt): string | null {\n return response.maskedInput && typeof response.maskedInput === 'string' ? response.maskedInput.trim() : null;\n}\n\nexport function getAgentResponse(response: AlmeMarkdownResponseExt): ReactElement | null {\n const sharedProps = {\n className: `alme--window--conversation--response--alme__message__text`,\n };\n\n if (response.html || isValidLiveChatOperatorResponse(response)) {\n const responseTag = `

${(response.text).toString().replace(\">\",\"\")}

`;\n return ;\n }\n\n const responseText = typeof response.text === 'string' ? response.text.trim() : response.text;\n return response.text ? {responseText} : null;\n}\n\nexport function getAgentResponseText(response: AlmeResponseExt): string | undefined {\n return typeof response.text === 'string' ? response.text.trim() : undefined;\n}\n\nfunction renderInlineForm(\n inlineFormResponseAction: InlineFormResponseAction,\n responseRevision: string,\n isLastResponse: boolean,\n onSubmitFormAppEvent: (eventName: string, parameters: Record, origin: EntryOriginTypesNext) => Promise,\n focusProps?: FocusComponentProps): ReactElement | null {\n return inlineFormResponseAction ?\n \n : null;\n}\n\nconst paintSectionHeaderResponse = (displayLinks: DisplayLinkCollection | null) => {\n return displayLinks && !!displayLinks.Sections.length ? paintSectionHeader(displayLinks.Sections) : null;\n};\n\nconst AlmeResponse: React.FC = (props: AlmeResponseProps) => {\n const response = AlmeMarkdownProcessor.ConvertAlmeResponse(props.response as unknown as AlmeResponseMarkdownInput) as unknown as AlmeMarkdownResponseExt;\n const responseRevision = String(props.responseId);\n const entryId = response.extensionData.entryId || responseRevision;\n const isLiveChatConnected = props.isLiveChatConnected;\n const userResponseRef = useRef(null);\n const agentResponseRef = useRef(null);\n const maskedUserInput = getMaskedUserInput(response);\n const inlineSurveyDialogResponseAction = getSurveyResponseAction(response);\n const agentResponse = getAgentResponse(response);\n const inlineFormResponseAction = getInlineFormResponseAction(response);\n const altLoginAutoNavResponse = getAltAutoNavResponse(response);\n const isOverlayForm = isOverlayResponse(response);\n useAltLoginNavigationHook(altLoginAutoNavResponse, props.response.fromHistory, props.isLastResponse, props.appConfig);\n return (\n <>\n \n {maskedUserInput &&\n \n \n {maskedUserInput}\n \n \n \n }\n {agentResponse\n ?\n \n \n \n \n \n {agentResponse}\n {paintNavUrl(entryId, response.navUrl, props.appConfig, props.onDisplayLinkClick, props.isLastResponse, props.focusProps)}\n {renderInlineForm(inlineFormResponseAction as InlineFormResponseAction, responseRevision, props.isLastResponse, props.onSubmitFormAppEvent,props.focusProps)}\n {paintSectionHeaderResponse(response.displayLinkCollection)}\n {displayLinkCollection(response.displayLinkCollection, entryId, props.onDisplayLinkClick, props.appConfig, props.isLastResponse, props.focusProps, isLiveChatConnected)}\n \n \n {\n inlineSurveyDialogResponseAction &&\n \n }\n \n \n : null\n }\n \n \n \n );\n};\n\nexport default AlmeResponse;","import { useEffect } from 'react';\nimport { ResponseAction } from '@alme/types/response/ResponseAction';\nimport { AlmeAppConfig } from '../alme-config/AlmeAppConfig';\nimport { altLoginAutoNav } from '../components/AlmeResponse/AlternateLoginAutoNav';\n\n\nexport function useAltLoginNavigationHook(altLoginAutoNavResponseAction: ResponseAction | undefined, fromHistory: boolean | undefined, isLastResponse: boolean, appConfig: AlmeAppConfig): void {\n useEffect(() => {\n if (altLoginAutoNavResponseAction && !fromHistory && isLastResponse) {\n altLoginAutoNav(altLoginAutoNavResponseAction, appConfig);\n }\n }, [altLoginAutoNavResponseAction, appConfig, fromHistory, isLastResponse]);\n}","import React from 'react';\n\nimport { FocusComponentProps } from '../../../models/ComponentProps';\n\nimport { getMaskedUserInput } from '../../../AlmeResponse/AlmeResponse';\nimport { AlmeAppConfig } from '../../../../alme-config/AlmeAppConfig';\nimport { AlmeResponseExt } from '../../../AlmeResponse/AlmeResponseExt';\nimport { UserCardContainer , UserText } from '../../../AlmeResponse/AlmeResponse.styles';\nimport { UserAvatar } from '../../../AlmeUtilities/Icons/UserAvatar';\nimport { UserCardBubble } from '../../../AlmeResponse/ChatBubble';\n\n\nexport function isValidLiveChatUserResponse(response: AlmeResponseExt): boolean {\n const maskedUserInput = getMaskedUserInput(response);\n const hasUserInput = !!maskedUserInput;\n return response?.extensionData?.MessageOrigin === 'User' && hasUserInput;\n}\n\ninterface AlmeLiveChatUserResponseProps {\n response: AlmeResponseExt;\n isLastResponse: boolean;\n appConfig: AlmeAppConfig;\n focusProps?: FocusComponentProps;\n responseId?: string | number;\n}\n\nconst AlmeLiveChatUserResponse: React.FC = (props: AlmeLiveChatUserResponseProps) => {\n\n if (!isValidLiveChatUserResponse(props.response)) {\n return null;\n }\n const maskedUserInput = getMaskedUserInput(props.response);\n const responseRevision = (props.responseId || props.response.responseRevision).toString();\n const entryId = props.response.extensionData.entryId || responseRevision;\n\n return (\n <>\n {maskedUserInput &&\n \n \n {maskedUserInput}\n \n \n \n }\n \n );\n};\n\nexport default AlmeLiveChatUserResponse;\n","import React, {FC} from 'react';\nimport styled, { DefaultTheme, withTheme } from \"styled-components\";\nimport { createSvgImageUrl } from '../icon-utils';\n\nexport interface IconProps{\n size: number;\n theme?: DefaultTheme;\n}\n\nconst IconWrapper = styled.div`\n display: block;\n height: ${(props: IconProps) => props.size + 5}px;\n width: ${(props: IconProps) => props.size + 5}px;\n`;\n\nconst Icon = styled.img`\n display: block;\n padding: 0;\n margin: 0;\n height: ${(props: IconProps) => props.size}px;\n width: ${(props: IconProps) => props.size}px;\n border-radius: 50%;\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center center; \n`;\n\nconst createLiveChatIconUrl = (color: string): string => {\n const icon = `\n Group 4 Copy\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n `;\n return createSvgImageUrl(icon);\n };\n\nconst LiveChatIcon: FC = (props: IconProps) => {\n const iconColor = props.theme?.button.background;\n return (\n \n );\n};\n\nexport default withTheme(LiveChatIcon);","import React from 'react';\n\nimport { FocusComponentProps } from '../../../models/ComponentProps';\n\nimport { getAgentResponse, getAgentResponseText } from '../../../AlmeResponse/AlmeResponse';\nimport { AlmeAppConfig } from '../../../../alme-config/AlmeAppConfig';\nimport { AlmeMarkdownResponseExt, AlmeResponseExt } from '../../../AlmeResponse/AlmeResponseExt';\nimport { AgentCardBubbleContent, AgentCardContainer, AgentCardMessageContainer } from '../../../AlmeResponse/AlmeResponse.styles';\nimport { AgentCardBubble } from '../../../AlmeResponse/ChatBubble';\nimport LiveChatIcon from '../../../AlmeUtilities/Icons/LivechatIcon';\n\nexport function isValidLiveChatSystemResponse(response: AlmeResponseExt, isLastResponse: boolean): boolean {\n const responseText = getAgentResponseText(response);\n const hasIvaResponse = !!(responseText);\n\n return hasIvaResponse && (response?.extensionData?.MessageOrigin === 'System') &&\n (response?.extensionData?.Transient === false || (response?.extensionData?.Transient === true && isLastResponse));\n}\n\ninterface AlmeLiveChatSystemResponseProps {\n response: AlmeResponseExt;\n isLastResponse: boolean;\n appConfig: AlmeAppConfig;\n focusProps?: FocusComponentProps;\n responseId?: string | number;\n}\n\nconst AlmeLiveChatSystemResponse: React.FC = (props: AlmeLiveChatSystemResponseProps) => {\n const response = {\n ...props.response,\n html: '',\n } as AlmeMarkdownResponseExt;\n\n if (!isValidLiveChatSystemResponse(props.response, props.isLastResponse)) {\n return null;\n }\n\n const responseText = getAgentResponse(response);\n const responseRevision = (props.responseId || response.responseRevision).toString();\n const entryId = response.extensionData.entryId || responseRevision;\n\n return (\n \n \n \n \n \n {responseText}\n \n \n \n \n );\n};\n\nexport default AlmeLiveChatSystemResponse;\n","import React, { FC, useEffect, useState } from 'react';\nimport ConfirmDialog from '../../../../AlmeDialog/ConfirmDialog';\n\ninterface AlmeLiveChatSessionTimeoutPopupProps {\n headerText: string;\n bodyText: string;\n yesButtonText: string;\n noButtonText: string;\n timeoutInSec: number;\n interval: number;\n onYesClick: () => void;\n onNoClick: () => void;\n onCloseClick?: () => void;\n onTimeout: () => void;\n}\n\nconst AlmeLiveChatSessionTimeoutPopup: FC = (props: AlmeLiveChatSessionTimeoutPopupProps) => {\n const [counter, setCounter] = useState(props.timeoutInSec);\n\n useEffect(() => {\n let timeoutId: number | undefined;\n if(counter <= 0) {\n props.onTimeout();\n } else {\n timeoutId = window.setTimeout(() => {\n setCounter(counter - 1);\n }, 1000);\n }\n\n return () => { if(timeoutId) clearTimeout(timeoutId); };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [counter]);\n\n return (\n \n );\n};\n\nexport default AlmeLiveChatSessionTimeoutPopup;","import React, { useEffect, useState } from 'react';\nimport { AlmeAppConfig } from '../../../../../alme-config/AlmeAppConfig';\nimport { AlmeAppState } from '../../../../AlmeApp/AlmeAppState';\nimport { AlmeResponseExt } from '../../../../AlmeResponse/AlmeResponseExt';\nimport { focusMessageBox } from '../../../../AlmeUtilities/dom-utils';\nimport { Initiator } from '../../../AlmeLiveChatReportingEvents';\nimport AlmeLiveChatSessionTimeoutPopup from './AlmeLiveChatSessionTimeoutPopup';\nimport { AlmeSessionDataLoader } from '@alme/session-ts/AlmeSessionDataLoader';\n\nimport * as Loaders from '@alme/storage-ts/CookieLoader';\nimport { CookieAlmeSessionDataLoader } from '@alme/session-ts/CookieAlmeSessionDataLoader';\nimport { AlmeSessionData } from '@alme/session-ts/AlmeSessionData';\nimport { gettopdomain } from '../../../../../utils/UrlUtils';\n\nconst storageLoader = new Loaders.CookieLoader('almeSession');\nstorageLoader.cookieOptions = { domain: gettopdomain() };\nconst cookieSessionLoader = new CookieAlmeSessionDataLoader(storageLoader);\nconst sessionDataLoader: AlmeSessionDataLoader = cookieSessionLoader;\n\ninterface AlmeLiveChatCheckUserStatusResponseProps {\n isLastResponse: boolean;\n response: AlmeResponseExt;\n appConfig: AlmeAppConfig;\n onEndChat: (initiator: Initiator) => void;\n onContinueChat: (initiator: Initiator) => void;\n almeState: AlmeAppState;\n setAlmeAppState: (almeState: AlmeAppState) => void;\n}\n\nexport function isValidLiveChatCheckUserStatusResponse(response: AlmeResponseExt): boolean {\n return response.extensionData.MessageOrigin as unknown as string === \"Operator-CheckUserStatus\";\n}\n\nexport function isLiveChatUserCheckStatusResponse(response: AlmeResponseExt): boolean {\n return !!(response.extensionData.MessageSource === \"LiveChat\"\n && response.responseActions\n && response.responseActions.some(x => x.Name === \"CheckUserStatus\"));\n}\nfunction addUserCheckStatusResponse(\n almeState: AlmeAppState,\n setAlmeAppState: (almeState: AlmeAppState) => void,\n response: AlmeResponseExt): void {\n let sessionId;\n try {\n sessionId = sessionDataLoader.GetAlmeSessionData()?.sessionId;\n } catch (ex) {\n console.log(ex);\n }\n const item = almeState.history.find(h => h.responseRevision === response.responseRevision);\n if(item) {\n item.fromHistory = true;\n setAlmeAppState({\n ...almeState,\n history: [...almeState.history],\n customerCheckStatusMessage: { responseRevision: response.responseRevision, timeStamp: Date.now(), sessionId: sessionId as string },\n });\n }\n }\n\nfunction removeUserCheckStatusResponse(\n almeState: AlmeAppState,\n setAlmeAppState: (almeState: AlmeAppState) => void): void {\n setAlmeAppState({\n ...almeState,\n customerCheckStatusMessage: undefined,\n });\n}\n\nfunction getUserCheckStatusTimestamp(\n almeState: AlmeAppState,\n responseRevision: number): number {\n return almeState.customerCheckStatusMessage && almeState.customerCheckStatusMessage.responseRevision === responseRevision ?\n almeState.customerCheckStatusMessage.timeStamp : 0;\n}\n\nconst AlmeLiveChatCheckUserStatusResponse: React.FC = (props: AlmeLiveChatCheckUserStatusResponseProps) => {\n const timeStamp = props.response.fromHistory ? getUserCheckStatusTimestamp(props.almeState, props.response.responseRevision) : 0;\n const timeDiff = timeStamp !== 0 ? Math.floor((Date.now() - timeStamp) / 1000) : timeStamp;\n\n const [showDialog, setShowDialog] = useState(() => ((!props.response.fromHistory) ||\n (props.response.fromHistory && timeStamp !== 0 && timeDiff < props.appConfig.liveChatOperatorResponse.userCheckStatus.timeoutInSec)));\n useEffect(() => {\n if (!props.response.fromHistory && showDialog) {\n addUserCheckStatusResponse(props.almeState, props.setAlmeAppState, props.response);\n }\n });\n\n\n if (!showDialog) {\n return null;\n }\n\n const closeDialog = () => {\n setShowDialog(false);\n removeUserCheckStatusResponse(props.almeState, props.setAlmeAppState);\n focusMessageBox();\n };\n\n const onEndChat = () => {\n props.onEndChat(\"User\");\n closeDialog();\n };\n\n const onTimeout = () => {\n props.onEndChat(\"System\");\n closeDialog();\n };\n\n const onContinueChat = () => {\n props.onContinueChat(\"User\");\n closeDialog();\n };\n\n return (\n \n );\n};\n\nexport default AlmeLiveChatCheckUserStatusResponse;","import React, { ReactNode } from 'react';\nimport { DefaultTheme, withTheme } from 'styled-components';\nimport { AlmeAppConfig } from \"../../../../alme-config/AlmeAppConfig\";\nimport { AlmeResponseExt } from \"../../../AlmeResponse/AlmeResponseExt\";\nimport AlmeLiveChatBannerTemplate from '../../AlmeLiveChatBanner/AlmeLiveChatBannerTemplate';\n\ninterface AlmeLiveChatEndProps {\n response: AlmeResponseExt;\n responseId?: string | number;\n appConfig: AlmeAppConfig;\n theme?: DefaultTheme;\n}\n\nexport function isValidLiveChatSessionEndResponse(response: AlmeResponseExt): boolean {\n return response.extensionData.MessageOrigin === \"Session-End\";\n}\n\nconst AlmeLiveChatEnd: React.FC = (props: AlmeLiveChatEndProps) => {\n if(!isValidLiveChatSessionEndResponse(props.response)) {\n return null;\n }\n const responseRevision = (props.responseId || props.response.responseRevision).toString();\n\n let mainText: ReactNode,\n subText: ReactNode;\n\n const sessionEndReason = props.response.extensionData.SessionEndReason,\n operatorName = props.response.extensionData.operatorName,\n sessionEndConfig = props.appConfig.liveChatBanner.ended,\n defaultOperatorName = props.appConfig.liveChatBanner.defaultRepName,\n isSessionTimeout = props.response.extensionData.isSessionTimeout;\n\n if(sessionEndReason === \"Agent\") {\n mainText = sessionEndConfig.agent.main.text;\n subText = <>\n
{(operatorName || defaultOperatorName) + sessionEndConfig.agent.sub.operatorLefttext}
\n
{sessionEndConfig.agent.sub.text}
\n ;\n } else if(sessionEndReason === \"User\") {\n if(isSessionTimeout) {\n mainText = sessionEndConfig.timeout.main.text;\n subText = sessionEndConfig.timeout.sub.text;\n } else {\n mainText = sessionEndConfig.user.main.text;\n subText = sessionEndConfig.user.sub.text;\n }\n } else if (sessionEndReason as unknown as string === \"NotEngaged\"){\n mainText = sessionEndConfig.user.main.text;\n subText = sessionEndConfig.user.sub.text;\n } else {\n mainText = sessionEndConfig.error.main.text;\n subText = sessionEndConfig.error.sub.text;\n }\n\n return ();\n};\n\nexport default withTheme(AlmeLiveChatEnd);","import React, { ReactElement } from \"react\";\nimport ModalDialog, { DialogContent } from '../../AlmeDialog/ModalDialog';\nimport styled from \"styled-components\";\nimport Button from \"syf-component-library/ui/atoms/Button\";\nimport { focusMessageBox } from \"../../AlmeUtilities/dom-utils\";\n\nconst CloseSurveyLink = styled(Button)`\n float:right;\n color: ${({ theme }) => theme.button.text};\n padding: 10px !important;\n text-transform: none !important; \n &:after { \n content: \"\\\\2716\";\n padding-left: 5px;\n }\n`;\n\nconst SurveyDialogContent = styled(DialogContent)`\n padding: 0;\n margin: 0;\n overflow-x: hidden;\n`;\n\nconst SurveyIframe = styled.iframe`\n height: 100%;\n width: 100%;\n margin: 0;\n padding: 0;\n flex-grow: 1;\n`;\n\nconst IframeContainer = styled.div`\ndisplay: flex;\nflex-direction: row;\nalign-items: stretch;\nflex-grow: 1;\noverflow: hidden;\n`;\n\ninterface AlmeOverlaySurveyDialogProps {\n surveyURL: string;\n isOpen: boolean;\n onCloseSurvey: (isSurveyClosedd: boolean) => void;\n}\n\nconst AlmeOverlaySurveyDialog: React.FC = (props: AlmeOverlaySurveyDialogProps): ReactElement | null => {\n\n const handleSurveyClose = (): void => {\n props.onCloseSurvey(true);\n focusMessageBox();\n };\n\n return (<>\n {\n props.isOpen\n ? \n \n
\n \n Close Survey\n \n
\n \n \n \n
\n \n \n : null}\n \n );\n};\n\nexport default AlmeOverlaySurveyDialog;","import React from \"react\";\nimport AlmeOverlaySurveyDialog from \"../../AlmeOverlayForm/OverlaySurvey/AlmeOverlaySurveyDialog\";\nimport { AlmeResponseExt } from \"../../AlmeResponse/AlmeResponseExt\";\n\ninterface AlmeLiveChatSurveyResponseProps\n{\n setIsDialogOpen: (isOpen: boolean) => void;\n response: AlmeResponseExt;\n markUsedResponse: (response: AlmeResponseExt) => void;\n}\n\nexport function isLiveChatSurveyResponse(response:AlmeResponseExt):boolean {\n const hasChatEnded = response.extensionData.MessageOrigin === \"Session-End\";\n const sessionTimedout = !!response.extensionData.isSessionTimeout;\n const hasSurveyUrl = !!response.extensionData.surveyUrl;\n return (hasChatEnded && hasSurveyUrl && !sessionTimedout);\n}\n\nconst AlmeLiveChartSurveyResponse: React.FC = (props:AlmeLiveChatSurveyResponseProps) => {\n\n if(!isLiveChatSurveyResponse(props.response) || props.response.fromHistory){\n return null;\n }\n\n const surveyURL = props.response.extensionData.surveyUrl;\n\n const handleLiveChatSurveyClose = (): void => {\n props.markUsedResponse(props.response);\n props.setIsDialogOpen(false);\n };\n\n return (\n );\n};\n\nexport default AlmeLiveChartSurveyResponse;","import React from 'react';\n\nimport { FocusComponentProps } from '../../models/ComponentProps';\n\nimport AlmeLiveChatOperatorResponse, { isValidLiveChatOperatorResponse } from './AlmeLiveChatOperatorResponse/AlmeLiveChatOperatorResponse';\nimport { isLiveChatResponse } from '@alme/api-ts/Utils';\nimport AlmeLiveChatUserResponse, { isValidLiveChatUserResponse } from './AlmeLiveChatUserResponse/AlmeLiveChatUserResponse';\nimport AlmeLiveChatSystemResponse, { isValidLiveChatSystemResponse } from './AlmeLiveChatSystemResponse/AlmeLiveChatSystemResponse';\nimport { AlmeAppConfig } from '../../../alme-config/AlmeAppConfig';\nimport { DisplayLink } from '@alme/types/response/DisplayLink';\nimport { AlmeResponseExt } from '../../AlmeResponse/AlmeResponseExt';\nimport AlmeLiveChatStartResponse, { isBeginLiveChatResponse } from './AlmeLiveChatStartResponse/AlmeLiveChatStart';\nimport AlmeLiveChatCheckUserStatusResponse, { isLiveChatUserCheckStatusResponse, isValidLiveChatCheckUserStatusResponse } from './AlmeLiveChatOperatorResponse/UserCheckStatus/AlmeLiveChatCheckUserStatusResponse';\nimport { Initiator } from '../AlmeLiveChatReportingEvents';\nimport AlmeLiveChatEnd, { isValidLiveChatSessionEndResponse } from './AlmeLiveChatEndResponse/AlmeLiveChatEnd';\nimport AlmeLiveChartSurveyResponse from '../AlmeLiveChatSurvey/AlmeLiveChatSurveyResponse';\nimport ResponseFocusHandler from '../../AlmeResponse/ResponseFocusHandler';\nimport { AlmeAppState } from '../../AlmeApp/AlmeAppState';\n\ninterface AlmeLiveChatResponseProps {\n response: AlmeResponseExt;\n isNewResponse?: boolean;\n isLastResponse: boolean;\n appConfig: AlmeAppConfig;\n focusProps?: FocusComponentProps;\n responseId: number;\n setIsDialogOpen: (isOpen: boolean) => void;\n onDisplayLinkClick: (link: DisplayLink, appConfig: AlmeAppConfig) => void;\n onEndChat: (initiator: Initiator) => void;\n onContinueChat: (initiator: Initiator) => void;\n markUsedResponse: (response: AlmeResponseExt) => void;\n almeState: AlmeAppState;\n setAlmeAppState: (almeState: AlmeAppState) => void;\n}\n\nexport function getMaskedUserInput(response: AlmeResponseExt): string | null {\n return response.maskedInput && response.maskedInput.trim();\n}\n\nconst AlmeLiveChatResponse: React.FC = (props: AlmeLiveChatResponseProps) => {\n\n const isChatResponse = isLiveChatResponse(props.response);\n const isOperatorResponse = isValidLiveChatOperatorResponse(props.response) || isValidLiveChatCheckUserStatusResponse(props.response);\n const isUserResponse = isValidLiveChatUserResponse(props.response);\n const isSystemResponse = isValidLiveChatSystemResponse(props.response, props.isLastResponse);\n const isSessionEndResponse = isValidLiveChatSessionEndResponse(props.response);\n const isBeginLiveChat = isBeginLiveChatResponse(props.response);\n const isErrorResponse = !!props.response?.extensionData?.IsError;\n const isUserCheckStatusResponse = isLiveChatUserCheckStatusResponse(props.response);\n\n if (!isBeginLiveChat && (isErrorResponse || !isChatResponse || (!isOperatorResponse && !isUserResponse && !isSystemResponse && !isSessionEndResponse))) {\n return null;\n }\n\n const isOverlayForm = !!(isUserCheckStatusResponse || props.response.extensionData.surveyUrl);\n\n /**\n * Note: Transient messages can be very verbose.\n * If scrolled to user can be pinned to the bottom of the history area.\n */\n return (\n \n \n \n \n \n {isUserCheckStatusResponse ?\n : null}\n \n );\n};\n\nexport default AlmeLiveChatResponse;\n","import React, { ReactElement, useRef } from 'react';\nimport { FocusComponentProps } from '../models/ComponentProps';\nimport styled from 'styled-components';\nimport { DisplayLink } from '@alme/types/response/DisplayLink';\nimport { AlmeAppConfig } from '../../alme-config/AlmeAppConfig';\nimport { EntryOriginTypes } from '@alme/api-ts/Alme/VNext/EntryOriginTypes';\nimport AlmeResponse from '../AlmeResponse/AlmeResponse';\nimport { isLiveChatResponse } from '@alme/api-ts/Utils';\nimport AlmeLiveChatResponse from '../LiveChat/AlmeLiveChatResponse/AlmeLiveChatResponse';\nimport { AlmeResponseExt } from '../AlmeResponse/AlmeResponseExt';\nimport { isBeginLiveChatResponse } from '../LiveChat/AlmeLiveChatResponse/AlmeLiveChatStartResponse/AlmeLiveChatStart';\nimport { Initiator } from '../LiveChat/AlmeLiveChatReportingEvents';\nimport { AlmeAppState } from '../AlmeApp/AlmeAppState';\n\ninterface AlmeHistoryProps {\n history: AlmeResponseExt[];\n onDisplayLinkClick: (link: DisplayLink, appConfig: AlmeAppConfig) => void;\n setIsDialogOpen: (isOpen: boolean) => void;\n appConfig: AlmeAppConfig;\n isDialogOpen?: boolean;\n focusProps?: FocusComponentProps;\n isLiveChatConnected?: boolean;\n onSubmitFormAppEvent: (eventName: string, parameters?: Record, origin?: EntryOriginTypes) => Promise;\n onEndChat: (initiator: Initiator) => void;\n onContinueChat: (initiator: Initiator) => void;\n markUsedResponse: (response: AlmeResponseExt) => void;\n almeState: AlmeAppState;\n setAlmeAppState: (almeState: AlmeAppState) => void;\n}\n\nconst HistoryContainer = styled.div`\n overflow: auto;\n padding: 8px;\n height: 100%;\n`;\n\nfunction AlmeHistory(props: AlmeHistoryProps): ReactElement {\n const historyRef = useRef(null);\n\n const accessibilityAttrs = {\n \"aria-live\": 'polite' as const,\n role: 'log',\n };\n\n return (\n \n {props.history?.length > 0 && props.history.map((response, i) => {\n if (isLiveChatResponse(response) || isBeginLiveChatResponse(response)) {\n const prevResponse = (i > 0) ? props.history[i - 1] : undefined;\n return (\n \n );\n }\n\n return (\n \n );\n })}\n \n );\n}\n\nexport default AlmeHistory;\n\nexport function isNewResponse(response: AlmeResponseExt, prevResponse?: AlmeResponseExt): boolean {\n const isTransient = response.extensionData?.Transient === true;\n const isPrevTransient = prevResponse?.extensionData?.Transient === true;\n return !isTransient || !isPrevTransient || response.text !== prevResponse?.text;\n}","import React, { FC, useState, useEffect, useCallback, useRef } from 'react';\nimport styled from 'styled-components';\nimport { colors } from 'syf-component-library/defaultTheme';\nimport Button from 'syf-component-library/ui/atoms/Button';\nimport { AlmeAppConfig } from '../../alme-config/AlmeAppConfig';\nimport { AlmeApiUtils } from '../../AlmeApiUtils';\nimport { Icon } from '../AlmeUtilities/Icons/StyledIcon';\nimport { FocusComponentProps } from '../models/ComponentProps';\n\nconst Input = styled.input`\n font-family: inherit;\n font-size: ${props => props.theme.fontSizes.default};\n width: 100%;\n border: none !important;\n box-shadow: none !important;\n background: none;\n color: ${colors.black};\n padding: 0;\n flex-grow: 1;\n &:focus {\n outline: none !important;\n border: none !important;\n color: ${colors.black};\n }\n &:hover {\n border: none !important;\n outline: none !important;\n }\n `;\n\nconst InputWrapper = styled.div`\n color: ${colors.heavyGrey};\n width: 100%;\n height: 48px;\n border-radius: 6px;\n padding: 0 5px 0 5px;\n box-shadow: 0 0 0 1px ${colors.heavyGrey};\n display: flex;\n align-items: center;\n flex-grow: 1;\n background-color: white;\n &:hover {\n box-shadow: 0 0 0 2px ${colors.heavyGrey};\n }\n\n cursor: 'text';\n &:focus-within {\n box-shadow: 0 0 0 1px ${(props) => props.theme.field.focus};\n }\n`;\n\nconst MessageBoxWrapper = styled.div`\n display: flex;\n flex-direction: column;\n align-items: stretch;\n justify-content:center;\n flex-grow: 1;\n background-color: #e6e6e6;\n` ;\n\nconst ControlWrapper = styled.div`\n display: flex;\n align-items: center;\n background-color: #e6e6e6;\n`;\n\nconst CharLimitDisplay = styled.div`\n text-align:left;\n color: #4A4A4A;\n font-size: ${props => props.theme.fontSizes.subText};\n flex-grow:1;\n background-color:inherit;\n margin-top:5px;\n padding-right: 2px;\n`;\n\nconst StyledButton = styled(Button)`\n margin: 0 0 0 8px;\n min-width: 100px; \n`;\n\nconst ButtonText = styled.span`\n display: inline-block;\n margin-left: 8px;\n`;\n\nexport interface MessageInputBoxProps extends FocusComponentProps {\n id: string;\n ariaLabel: string;\n maxTextLength: number;\n sendButtonLabel?: string;\n onSend: (input: string) => void;\n isLiveChatConnected?: boolean;\n onSendTypingEvent?: () => void;\n almeAppConfig: AlmeAppConfig;\n inputClassName?:string;\n}\n\nfunction getPlaceHolderText(disabled?: boolean): string {\n return disabled ? \"Please see response\" : \"\";\n}\n\nconst MessageInputBox: FC = ({\n id,\n onSend,\n onSendTypingEvent,\n maxTextLength,\n ...props }: MessageInputBoxProps) => {\n\n const [userInput, setInput] = useState('');\n const [isTyping, setIsTyping] = useState(false);\n const inputRef = useRef(null);\n\n const userTypingEventDelay = props.almeAppConfig.footer.userTypingEventDelay || 10000;\n useEffect(() => {\n let timer: number | undefined;\n if (isTyping) {\n timer = window.setTimeout(() => {\n setIsTyping(false);\n }, userTypingEventDelay);\n }\n\n return () => {\n timer && clearTimeout(timer);\n };\n }, [isTyping, userTypingEventDelay]);\n\n const textChanged = (event: React.ChangeEvent): void => {\n let inputText = event.target.value;\n\n if (maxTextLength && inputText.length > maxTextLength) {\n inputText = inputText.substring(0, maxTextLength);\n }\n\n if (props.isLiveChatConnected && typeof onSendTypingEvent === 'function' && !isTyping) {\n setIsTyping(true);\n onSendTypingEvent();\n }\n\n setInput(inputText);\n };\n\n const onSubmitInput = (): void => {\n const inputText = userInput.trim();\n\n if (inputText) {\n onSend(inputText);\n setInput('');\n }\n };\n\n const onKeyDown = (event: React.KeyboardEvent): void => {\n // 'keypress' event misbehaves on mobile so we track 'Enter' key via 'keydown' event\n if (event.key === 'Enter') {\n event.preventDefault();\n event.stopPropagation();\n onSubmitInput();\n }\n };\n\n const inputProps = {\n id,\n 'aria-label': props.ariaLabel,\n name: id,\n value: userInput,\n onChange: textChanged,\n onKeyDown,\n maxLength: maxTextLength,\n placeholder: getPlaceHolderText(props.disabled),\n inputClassName:props.inputClassName,\n readOnly:props.disabled,\n tabIndex:props.tabIndex,\n };\n\n const buttonProps = {\n sendButtonLabel: props.sendButtonLabel,\n disabled: props.disabled,\n tabIndex:props.tabIndex,\n };\n\n return (\n \n inputRef.current && inputRef.current.focus()}>\n \n \n \n \n <>\n \n {props.sendButtonLabel || 'Send'}\n \n \n \n \n {`${userInput.length} of ${maxTextLength} characters`}\n \n );\n};\n\nexport default MessageInputBox;\n\nexport function OnSendTypingEvent(apiUtils: AlmeApiUtils): () => Promise {\n return useCallback(async () => {\n await apiUtils.submitReportingEvent('Typing', 'User typing out of sequence.');\n }, [apiUtils]);\n}","import React from 'react';\nimport { AlmeAppConfig } from '../../alme-config/AlmeAppConfig';\nimport { FocusComponentProps } from '../models/ComponentProps';\nimport MessageInputBox from './MessageInputBox';\nimport { CommonElementId } from '../Common/constants';\n\n\ninterface AlmeInputProps {\n submitFunc: (input: string) => void;\n almeAppConfig: AlmeAppConfig;\n focusProps?: FocusComponentProps;\n isLiveChatConnected?: boolean;\n onSendTypingEvent?: () => void;\n}\n\nconst AlmeInput: React.FC = (props: AlmeInputProps) => {\n return (\n \n );\n};\n\nexport default AlmeInput;","import React from 'react';\n\nimport AlmeInput from '../AlmeInput/AlmeInput';\nimport { AlmeAppConfig } from '../../alme-config/AlmeAppConfig';\n\nimport { FocusComponentProps } from '../models/ComponentProps';\nimport styled from 'styled-components';\n\nconst Container = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 15px 15px 2px 15px;\n border-top: 1px solid #cccccc;\n background-color: #e6e6e6;\n`;\n\ninterface AlmeFooterProps {\n submitFunc: (input: string) => void;\n almeAppConfig: AlmeAppConfig;\n focusProps?: FocusComponentProps;\n isLiveChatConnected?: boolean;\n onSendTypingEvent?: () => void;\n}\n\nconst AlmeFooter: React.FC = (props: AlmeFooterProps) => {\n return (\n \n \n \n );\n};\n\nexport default AlmeFooter;","import styled from \"styled-components\";\nimport { ScreenPosition } from \"../../IVAChatStatusProvider\";\n\nconst topRight = `\n top: 110px;\n right: 16px;\n`;\n\nconst topLeft = `\n top: 110px;\n left: 16px;\n`;\n\nconst bottomRight = `\n bottom: 110px;\n right: 16px;\n`;\n\nconst bottomLeft = `\n bottom: 110px;\n left: 16px;\n`;\n\nconst getChatIconPlacementStyles = (position: ScreenPosition) => {\n switch(position) {\n case \"BottomLeft\":\n return bottomLeft;\n case \"BottomRight\":\n return bottomRight;\n case \"TopLeft\":\n return topLeft;\n case \"TopRight\":\n return topRight;\n }\n};\n\nexport const LaunchIconBtn = styled.button<{ chatIconPosition: ScreenPosition; zIndex: number}>`\n border: none;\n position: fixed;\n z-index: ${props => props.zIndex};\n ${(props) => getChatIconPlacementStyles(props.chatIconPosition)}\n width: 50px;\n height: 50px;\n border-radius: 50%;\n padding:0;\n box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2), 0px 5px 8px 0px rgba(0,0,0,0.14), 0px 1px 14px 0px rgba(0,0,0,0.12);\n &:focus {\n box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.3), 0px 5px 8px 0px rgba(0,0,0,0.3), 0px 1px 14px 0px rgba(0,0,0,0.2);\n }\n`;","import React, {FC} from 'react';\nimport { DefaultTheme, withTheme } from \"styled-components\";\nimport { useIVAChatStatus } from '../../IVAChatStatusProvider';\nimport { createSvgImageUrl } from '../AlmeUtilities/icon-utils';\nimport { LaunchIconBtn } from './LaunchIconButtonStyles';\n\nlet launchIconUrl: string | undefined,\n resumeIconUrl: string | undefined,\n themeColor: string | undefined;\n\nconst createLaunchIconUrl = (color: string): string => {\n if(!launchIconUrl || color !== themeColor) {\n const icon = `\n 37102316-6DEF-4498-83F7-2953D0CED1FA\n \n \n \n \n \n \n \n \n \n \n \n `;\n themeColor = color;\n launchIconUrl = createSvgImageUrl(icon);\n }\n\n return launchIconUrl;\n};\n\nconst createResumeIconUrl = (color: string): string => {\n if(!resumeIconUrl || color !== themeColor) {\n const icon = `\n DE0856B0-DFAA-40A2-BFE6-8C1D7ED2542C\n \n \n \n \n \n \n \n \n \n \n \n `;\n themeColor = color;\n resumeIconUrl = createSvgImageUrl(icon);\n }\n\n return resumeIconUrl;\n};\n\nexport interface LaunchIconButtonProps {\n id: string;\n onClick: () => void;\n isMinimized: boolean;\n theme?: DefaultTheme;\n zIndex: number;\n dataReason: string;\n dataType: string;\n className: string;\n dataObject: string;\n}\n\nconst LaunchIconButton: FC = (props: LaunchIconButtonProps) => {\n const iconColor = props.theme?.button.background;\n const { chatIconPosition } = useIVAChatStatus();\n\n return (\n \n);\n};\n\nexport default withTheme(LaunchIconButton);","import React, {useState, useEffect, ReactElement} from 'react';\nimport postMessage, {Message} from '../../post-message/PostMessageUtils';\nimport { defaultTenant } from '../AlmeTenantSelector/AlmeTenants';\nimport { defaultTestPageState, getTestPageState, LaunchSettings } from '../AlmeTestPage/AlmeTestPageState';\nimport MessageType from '../../post-message/MessageType';\nimport LaunchIconButton from './LaunchIconButton';\nimport { AlmeAppConfig } from '../../alme-config/AlmeAppConfig';\nimport { isTestPage } from '../../utils/resourceUtils';\n\nexport interface AlmeLaunchPointProps {\n isTestPage: boolean;\n isMinimized: boolean;\n zIndex: number;\n}\n\nexport function canShowLaunchPointIcon(appConfig: AlmeAppConfig, isChatOpen: boolean, historyLoaded: boolean): boolean {\n return appConfig.main.showIvaChatIcon && !isChatOpen && historyLoaded && !!(window.NITGlobal?.clientAvailable);\n}\n\nexport function renderLaunchPointIcon(appConfig: AlmeAppConfig, isHistoryLoaded: boolean, hasHistory: boolean, isChatOpen: boolean): ReactElement | null {\n return (canShowLaunchPointIcon(appConfig, isChatOpen, isHistoryLoaded)\n ? \n : null);\n}\n\nexport function getLaunchPointParams(isTestSite: boolean): LaunchSettings {\n if(isTestSite) {\n const testPageState = getTestPageState();\n if(testPageState) {\n return testPageState.launchSettings;\n }\n }\n\n return defaultTestPageState.launchSettings;\n}\n\nconst AlmeLaunchPoint: React.FC = (props: AlmeLaunchPointProps) => {\n const [message, setMessage] = useState(null);\n\n useEffect(() => {\n if(message) {\n postMessage(message);\n }\n }, [message]);\n\n const handleClick = (): void => {\n const launchPointParams = getLaunchPointParams(props.isTestPage);\n setMessage({\n type: MessageType.LaunchIva,\n launchPointName: launchPointParams.launchPointName,\n launchParameter: launchPointParams.launchParameter,\n source: 'client',\n accessKey: defaultTenant.value,\n });\n };\n\n return (\n \n );\n};\n\nexport default AlmeLaunchPoint;","import styled from 'styled-components';\nimport { ScreenPosition } from '../../IVAChatStatusProvider';\n\n\nconst maxHeight = 650;\nconst width = 450;\n\nconst topRight = `\n top: 16px !important;\n right: 16px !important;\n`;\n\nconst topLeft = `\n top: 16px !important;\n left: 16px !important;\n`;\n\nconst bottomRight = `\n bottom: 16px !important;\n right: 16px !important;\n`;\n\nconst bottomLeft = `\n bottom: 16px !important;\n left: 16px !important;\n`;\n\nconst getChatPlacementStyles = (position: ScreenPosition) => {\n switch(position) {\n case \"BottomLeft\":\n return bottomLeft;\n case \"BottomRight\":\n return bottomRight;\n case \"TopLeft\":\n return topLeft;\n case \"TopRight\":\n return topRight;\n }\n};\n\nconst AppContainer = styled.div<{position: ScreenPosition; mobileBreakpoint: number; zIndex: number}>`\n background-color: white;\n box-shadow: 0 1px 10px 0 rgba(0, 0, 0, 0.1), 0 4px 5px 0 rgba(0, 0, 0, 0.08), 0 2px 4px 0 rgba(0, 0, 0, 0.04);\n box-shadow: 5px;\n padding: 0;\n font-family: ${(props) => props.theme.fontFamily} !important;\n border-radius: 10px;\n overflow: hidden; \n @media screen and (min-height: 0) and (max-height: 675px) {\n height: calc(var(--vh) - 20px);\n }\n\n @media screen and (min-height: 676px) {\n height: ${maxHeight}px;\n }\n\n @media screen and (min-width: 0) and (max-width: ${ props => props.mobileBreakpoint }px) {\n width: 100%;\n bottom: 0;\n right: 0;\n height: calc(var(--vh) - 1px);\n border-radius: 0;\n }\n\n @media screen and (min-width: ${ props => props.mobileBreakpoint + 1 }px) {\n width: ${width}px;\n ${(props) => getChatPlacementStyles(props.position)}\n } \n\n z-index: ${props => props.zIndex};\n margin: 0;\n position: fixed;\n line-height: 1.15;\n top: auto;\n left: auto; \n`;\n\nconst ContentContainer = styled.div`\n position: relative;\n width: 100%;\n height :100%;\n display: flex;\n flex-direction:column;\n overflow: hidden; \n border-radius: 10px;\n @media screen and (min-width: 0) and (max-width: 600px) {\n border-radius: 0;\n }\n`;\n\nexport {AppContainer, ContentContainer};","import React, {CSSProperties, FC, ReactElement, cloneElement} from 'react';\nimport { Transition } from 'react-transition-group';\n\nexport interface GrowProps {\n show: boolean;\n duration: number;\n children: ReactElement;\n style?: CSSProperties;\n}\n\nconst getStyles = (duration: number) => ({\n transition: `transform ${duration}ms ease-in-out`,\n});\n\nconst GrowStyles: {[key: string]: CSSProperties} = {\n entering: {\n transform: 'scale(1, 1)',\n },\n entered: {\n transform: 'scale(1, 1)',\n },\n exiting: {\n transform: 'scale(0, 0)',\n },\n exited: {\n transform: 'scale(0, 0)',\n },\n};\n\n\nconst Grow: FC = (props: GrowProps) => {\n const defaultStyles = getStyles(props.duration);\n\n return (\n \n {\n (state: string) => cloneElement(props.children, { style: {...props.style, ...defaultStyles, ...GrowStyles[state]} })\n }\n \n );\n};\n\nexport default Grow;","import React, { FC, ReactElement, useCallback, useEffect, useRef, useState } from 'react';\nimport ConfirmDialog from '../AlmeDialog/ConfirmDialog';\nimport { AlmeAppConfig } from '../../alme-config/AlmeAppConfig';\nimport AlmeOverlaySurveyDialog from '../AlmeOverlayForm/OverlaySurvey/AlmeOverlaySurveyDialog';\nimport { getSurveyUrl } from '../../utils/UrlUtils';\nimport { getAlmeSessionData } from '../AlmeApp/AlmeAppSessionState';\nimport { AlmeAppState } from '../AlmeApp/AlmeAppState';\n\nexport interface IvaSessionTimeoutProps {\n lastActivityTime: number;\n sessionTimeoutInMs: number;\n sessionTimeoutWarningInMs: number;\n onUserSessionRefresh: () => void;\n onSessionTimeout: () => void;\n onUserSessionTimeout: () => void;\n chatId: string | undefined;\n isLoggedIn: boolean;\n almeAppConfig: AlmeAppConfig;\n isLivechatSurveyLoaded? : boolean;\n}\n\ninterface DialogState {\n show: boolean;\n counter: number;\n}\n\nexport function renderSessionTimeoutDialog(\n almeState: AlmeAppState,\n appConfig: AlmeAppConfig,\n isLiveChatSurveyLoaded: boolean,\n onUserSessionRefresh: () => void,\n onSessionTimeout: () => void,\n onCloseClick: () => void): ReactElement | null {\n return ((!almeState.sessionExpired && almeState.lastActivityTime && !almeState.isLiveChatConnected)\n ?\n \n : null);\n}\n\nconst useUpdateSessionTimeoutDialogState = (\n props: IvaSessionTimeoutProps,\n dialogState: DialogState,\n isSurveyOpen: boolean,\n setDialogState: (dialogState: DialogState) => void,\n onSystemSessionTimeout: () => void,\n setFocusElement: () => void) => {\n\n useEffect(() => {\n const currentTime = Date.now();\n //Stop timer on open survey\n const timelapse = isSurveyOpen ? 0 : (currentTime - props.lastActivityTime);\n const sessionTimeoutWarningInMs = props.sessionTimeoutWarningInMs;\n const sessionTimeoutPeriodInMs = props.sessionTimeoutInMs;\n const warningPeriod = sessionTimeoutPeriodInMs - sessionTimeoutWarningInMs;\n const timeoutRemainder = sessionTimeoutPeriodInMs - timelapse;\n const warningRemainder = sessionTimeoutWarningInMs - timelapse;\n\n let timerId: number | undefined;\n if(dialogState.show) {\n if(timeoutRemainder <= 0) {\n onSystemSessionTimeout();\n } else if(warningRemainder <= 0) {\n timerId = window.setTimeout(() => setDialogState({show: true, counter: Math.round(timeoutRemainder / 1000)}), 1000);\n } else {\n timerId = window.setTimeout(() => setDialogState({show: true, counter: Math.round(warningPeriod / 1000)}), warningRemainder);\n setDialogState({...dialogState, show: false});\n }\n } else {\n if(timeoutRemainder <= 0) {\n onSystemSessionTimeout();\n } else if(warningRemainder <= 0) {\n //Set return to focus element on opening dialog\n setFocusElement();\n setDialogState({show: true, counter: Math.round(timeoutRemainder / 1000)});\n } else {\n timerId = window.setTimeout(() => {\n setFocusElement();\n setDialogState({show: true, counter: Math.round(warningPeriod / 1000)});\n },\n warningRemainder);\n }\n }\n return () => {\n if(timerId) {\n clearTimeout(timerId);\n }\n };\n }, [dialogState, isSurveyOpen, onSystemSessionTimeout, props.lastActivityTime, props.sessionTimeoutInMs, props.sessionTimeoutWarningInMs, setDialogState, setFocusElement]);\n};\n\nconst IvaSessionTimeout: FC = (props: IvaSessionTimeoutProps) => {\n const [dialogState, setDialogState] = useState({ show: false, counter: 0 });\n const [openSurvey, setOpenSurvey] = useState(false);\n const surveyUrl = props.almeAppConfig[\"IvaOnly.SurveyUrl\"] as string;\n const returnFocusToElement = useRef(null);\n\n const setFocusElement = useCallback(() => {\n returnFocusToElement.current = document.activeElement as HTMLElement;\n }, []);\n\n const handleSurveyClose = (): void => {\n setOpenSurvey(false);\n props.onUserSessionTimeout();\n };\n\n const onYesClick = () => {\n props.onUserSessionRefresh();\n };\n\n const onSystemSessionTimeout = useCallback(() => {\n props.onSessionTimeout();\n }, [props]);\n\n const onNoClick = useCallback(() => {\n if(props.chatId && !props.isLivechatSurveyLoaded){\n setOpenSurvey(true);\n }\n else {\n props.onUserSessionTimeout();\n }\n }, [props]);\n\n useUpdateSessionTimeoutDialogState(props, dialogState, openSurvey, setDialogState, onSystemSessionTimeout, setFocusElement);\n\n return (\n <>\n {\n dialogState.show\n ? \n : null\n }\n {\n openSurvey\n ? \n : null\n }\n );\n};\n\nexport default IvaSessionTimeout;","import { AlmeSessionData } from \"@alme/session-ts/AlmeSessionData\";\nimport { AlmeSessionDataLoader } from \"@alme/session-ts/AlmeSessionDataLoader\";\nimport { AlmeAppConfig } from \"../../alme-config/AlmeAppConfig\";\nimport { AlmeApiUtils } from \"../../AlmeApiUtils\";\nimport { AlmeAppState, AlmeAppUtilsBase } from \"../AlmeApp/AlmeAppState\";\nimport { AlmeResponseExt } from \"../AlmeResponse/AlmeResponseExt\";\nimport { TerminateLiveChat } from \"../LiveChat/AlmeLiveChatReportingEvents\";\n\nimport * as Loaders from '@alme/storage-ts/CookieLoader';\nimport { CookieAlmeSessionDataLoader } from '@alme/session-ts/CookieAlmeSessionDataLoader';\nimport { gettopdomain } from '../../utils/UrlUtils';\n\nconst storageLoader = new Loaders.CookieLoader('almeSession');\nstorageLoader.cookieOptions = { domain: gettopdomain() };\nconst cookieSessionLoader = new CookieAlmeSessionDataLoader(storageLoader);\nconst sessionDataLoader: AlmeSessionDataLoader = cookieSessionLoader;\n\nexport class SessiontTimeoutUtils extends AlmeAppUtilsBase {\n private almeSession: AlmeSessionData | null;\n\n constructor(\n almeState: AlmeAppState,\n setAlmeState: (state: AlmeAppState) => void,\n appConfig: AlmeAppConfig,\n private apiUtils: AlmeApiUtils,\n ) {\n super(almeState, setAlmeState, appConfig);\n this.almeSession = sessionDataLoader.GetAlmeSessionData();\n }\n\n async onSessionTimeout(): Promise {\n await TerminateLiveChat(this.apiUtils, this.almeState);\n this.apiUtils.createNewSessionData();\n const expiredResponse = this.getExpiredResponse();\n this.setAlmeState({\n ...this.almeState,\n sessionExpired: true,\n isLoggedIn: false,\n lastActivityTime: undefined,\n lastEntryId: this.appConfig.history.expiredResponse.entryId,\n history: [expiredResponse],\n isLiveChatConnected: false,\n });\n }\n\n async onUserSessionRefresh(): Promise {\n if(this.almeState.isLiveChatConnected) {\n this.setAlmeState({\n ...this.almeState,\n lastActivityTime: Date.now(),\n });\n } else {\n const variableName = \"UserRefreshedSessionTimeout\";\n await this.apiUtils.sendReportingEvent(variableName, variableName);\n }\n }\n\n private getExpiredResponse(): AlmeResponseExt {\n const responseRevision = 1;\n\n return {\n id: this.appConfig.history.expiredResponse.entryId,\n userId: this.almeSession?.userId || \"\",\n text: this.appConfig.expiredErrorResponse,\n responseRevision: responseRevision,\n displayLinkCollection: {\n Sections: [],\n Metadata: null,\n },\n navUrl: null,\n responseActions: [],\n deferredAppCall: null,\n maskedInput: null,\n isReverted: false,\n extensionData: {\n entryId: this.appConfig.history.expiredResponse.entryId,\n chatId: \"\",\n MessageIndex: -1,\n },\n };\n }\n}","import { AlmeApiUtils } from \"../../../AlmeApiUtils\";\nimport { AlmeResponseExt } from \"../../AlmeResponse/AlmeResponseExt\";\nimport { AlmeAppState } from \"../AlmeAppState\";\nimport { getAlmeSessionData } from '../../AlmeApp/AlmeAppSessionState';\nimport { TerminateLiveChat } from \"../../LiveChat/AlmeLiveChatReportingEvents\";\nimport { AlmeAppConfig } from \"../../../alme-config/AlmeAppConfig\";\nimport { CBUserMetadata } from \"../../../types/UserMetadata\";\n\n\nfunction createLoginParams(sessionId: string, cifId?: string): Record {\n return {\n ClientSessionId: sessionId,\n UserObj: {\n cifId,\n },\n IsLoggedIn: true,\n };\n}\n\nfunction createLogoutParams(clientSessionId: string | undefined) {\n return {\n ClientSessionId: clientSessionId,\n IsLoggedIn: false,\n LaunchPointName: 'Logout',\n LaunchParameter: 'Logout',\n LaunchType: 'Manual',\n NewSessionReason: 'newSessionOnLogout',\n };\n}\n\nasync function logoutEvent(almeApiUtils: AlmeApiUtils, clientSessionId: string | undefined): Promise {\n await almeApiUtils.sendAppEvent(\n \"OnUserLogOut\",\n undefined,\n {\n ClientSessionId: clientSessionId,\n IsLoggedIn: false,\n });\n await almeApiUtils.endConversation();\n almeApiUtils.createNewSessionData();\n await almeApiUtils.sendAppEvent(\n 'HostPageData',\n undefined,\n {\n PageInfo: window._SFDDL,\n AlmeUserID_PreLogin: getAlmeSessionData()?.userId,\n });\n return await almeApiUtils.sendAppEvent(\n \"WelcomeUser\",\n undefined,\n createLogoutParams(clientSessionId)) as AlmeResponseExt;\n}\n\nexport function getAccountId(almeState: AlmeAppState, sessionId?: string, accountId?: string): string | undefined {\n if(almeState.sessionMessages\n && almeState.sessionMessages.sessionId\n && (almeState.sessionMessages.sessionId === sessionId)\n && almeState.sessionMessages.messages\n && almeState.sessionMessages.messages.SwitchAccount) {\n return almeState.sessionMessages.messages.SwitchAccount.accountId;\n }\n\n return accountId;\n}\n\nexport interface UserLoggedInState {\n isLoggedIn: boolean;\n loginStateResponse?: AlmeResponseExt | null;\n clientSessionId?: string;\n isLiveChatConnected: boolean;\n}\n\nconst updateUserLoggedInState = async (\n almeState: AlmeAppState,\n appConfig: AlmeAppConfig,\n almeApiUtils: AlmeApiUtils,\n userLogInState: UserLoggedInState) => {\n const hasPreviousConversation = almeState.hasPreviousConversation;\n if (appConfig.main.isLoggedIn || appConfig.main.userMetadata?.cifId) {\n if (!hasPreviousConversation || !almeState.isLoggedIn) {\n\n userLogInState.isLoggedIn = true;\n userLogInState.loginStateResponse = await almeApiUtils.sendAppEvent(\n \"OnUserLogIn\",\n undefined,\n createLoginParams(userLogInState.clientSessionId as string, appConfig.main.userMetadata?.cifId as (CBUserMetadata | undefined) as unknown as string)) as AlmeResponseExt;\n }\n } else {\n if (hasPreviousConversation && almeState.isLoggedIn) {\n await TerminateLiveChat(almeApiUtils, almeState);\n userLogInState.isLiveChatConnected = false;\n userLogInState.loginStateResponse = await logoutEvent(almeApiUtils, userLogInState.clientSessionId);\n }\n userLogInState.isLoggedIn = false;\n }\n};\n\n\n/**\n * @param almeApiUtils API utility\n * @param almeState App state\n * @returns User logged in state and response\n */\nexport async function sendLoginStateEvents(\n appConfig: AlmeAppConfig,\n almeApiUtils: AlmeApiUtils,\n almeState: AlmeAppState): Promise {\n const userLogInState: UserLoggedInState = { isLoggedIn: almeState.isLoggedIn, isLiveChatConnected: almeState.isLiveChatConnected };\n\n userLogInState.clientSessionId = appConfig.main.clientSessionId;\n await updateUserLoggedInState(almeState, appConfig, almeApiUtils, userLogInState);\n\n return userLogInState;\n}","import React, { useRef } from 'react';\nimport { AlmeAppConfig } from '../../../alme-config/AlmeAppConfig';\nimport ConfirmDialog from '../../AlmeDialog/ConfirmDialog';\n\n\ninterface AlmeEndLiveChatDialogProps {\n onEndClick: () => void;\n onCancelClick: () => void;\n appConfig: AlmeAppConfig;\n isOpen: boolean;\n}\n\nconst AlmeEndLiveChatDialog: React.FC = (props: AlmeEndLiveChatDialogProps) => {\n const returnFocusToElement = useRef(null);\n return (\n props.isOpen\n ? \n : null\n );\n};\nexport default AlmeEndLiveChatDialog;","import React, { ReactElement } from 'react';\nimport styled from 'styled-components';\n\nconst Container = styled.div`\n display: inline-block;\n position: relative;\n vertical-align: middle;\n width: 48px;\n height: 16px;\n`;\n\nconst getCommonLoadingStyles = (color: string, interval: string) => `\n position: absolute;\n width: 6px;\n height: 6px;\n background-color: ${color};\n -webkit-border-radius: 5px;\n border-radius: 5px;\n background-clip: padding-box;\n -webkit-animation: growDot 1s linear ${interval} infinite;\n -moz-animation: growDot 1s linear ${interval} infinite;\n -ms-animation: growDot 1s linear ${interval} infinite;\n -o-animation: growDot 1s linear ${interval} infinite;\n animation: growDot 1s linear ${interval} infinite; \n`;\n\nconst LoaderDots = styled.div<{color: string}>`\n top: 5px;\n left: 21px;\n ${props => getCommonLoadingStyles(props.color, '.15s')}\n\n &::before {\n content: \"\";\n top: 0;\n left: -15px;\n ${props => getCommonLoadingStyles(props.color, '0s')}\n }\n\n &::after {\n content: \"\";\n top: 0;\n left: 15px;\n ${props => getCommonLoadingStyles(props.color, '.3s')}\n }\n\n @-webkit-keyframes growDot {\n 0% {\n -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)\";\n filter: alpha(opacity=(70));\n opacity: 0.7;\n -webkit-box-shadow: 0px 0px 0px 0px ${props => props.color};\n box-shadow: 0px 0px 0px 0px ${props => props.color};\n }\n 25% {\n -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)\";\n filter: alpha(opacity=(100));\n opacity: 1;\n -webkit-box-shadow: 0px 0px 0px 4px ${props => props.color};\n box-shadow: 0px 0px 0px 4px ${props => props.color};\n }\n 50% {\n -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)\";\n filter: alpha(opacity=(70));\n opacity: 0.7;\n -webkit-box-shadow: 0px 0px 0px 0px ${props => props.color};\n box-shadow: 0px 0px 0px 0px ${props => props.color};\n }\n 100% {\n -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=60)\";\n filter: alpha(opacity=(60));\n opacity: 0.6;\n -webkit-box-shadow: 0px 0px 0px 0px ${props => props.color};\n box-shadow: 0px 0px 0px 0px ${props => props.color};\n }\n}\n@keyframes growDot {\n 0% {\n -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)\";\n filter: alpha(opacity=(70));\n opacity: 0.7;\n -webkit-box-shadow: 0px 0px 0px 0px ${props => props.color};\n box-shadow: 0px 0px 0px 0px ${props => props.color};\n }\n 25% {\n -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)\";\n filter: alpha(opacity=(100));\n opacity: 1;\n -webkit-box-shadow: 0px 0px 0px 4px ${props => props.color};\n box-shadow: 0px 0px 0px 4px ${props => props.color};\n }\n 50% {\n -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)\";\n filter: alpha(opacity=(70));\n opacity: 0.7;\n -webkit-box-shadow: 0px 0px 0px 0px ${props => props.color};\n box-shadow: 0px 0px 0px 0px ${props => props.color};\n }\n 100% {\n -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=60)\";\n filter: alpha(opacity=(60));\n opacity: 0.6;\n -webkit-box-shadow: 0px 0px 0px 0px ${props => props.color};\n box-shadow: 0px 0px 0px 0px ${props => props.color};\n }\n }\n\n`;\n\nexport default function CssLoadingDots(color?: string): ReactElement {\n return ();\n}","import React, { useEffect, useState } from 'react';\nimport styled, { DefaultTheme, withTheme } from 'styled-components';\nimport { AlmeAppConfig } from '../../../alme-config/AlmeAppConfig';\nimport { AlmeResponseExt } from '../../AlmeResponse/AlmeResponseExt';\nimport CssLoadingDots from '../../AlmeUtilities/Animations/CssLoadingDots';\n\nconst TypingMesssageContainer = styled.div` \n display: flex;\n flex-direction: row-reverse; \n align-content: flex-end;\n padding-top: 15px;\n flex-wrap: wrap-reverse;\n`;\n\nconst Message = styled.div`\n font-size: ${props => props.theme.fontSizes.subText};\n text-align: right;\n color: #878787;\n`;\n\nexport function isLiveChatOperatorTypingResponse(response: AlmeResponseExt): boolean {\n return response.extensionData.MessageOrigin === \"Operator-Typing\";\n}\n\ninterface AlmeLiveChatOperatorTypingResponseProps {\n response: AlmeResponseExt;\n appConfig: AlmeAppConfig;\n markUsedResponse: (response: AlmeResponseExt) => void;\n theme?: DefaultTheme;\n}\n\nconst AlmeLiveChatOperatorTypingResponse: React.FC = (props: AlmeLiveChatOperatorTypingResponseProps) => {\n\n const [isTyping, setIsTyping] = useState(true);\n const operatorName = props.response.extensionData.OperatorData?.Name || props.appConfig.liveChatControls.defaultOperatorName;\n const typingMessage = `${operatorName} ${props.appConfig.liveChatControls.typingMessageText}`;\n const handleTypingClose = (): void => {\n setIsTyping(false);\n props.markUsedResponse(props.response);\n };\n useEffect(() => {\n let timeoutId: number | undefined;\n if(isTyping) {\n timeoutId = window.setTimeout(() => handleTypingClose(), props.appConfig.liveChatControls.typingMessageDelay);\n }\n return () => { if(timeoutId) clearTimeout(timeoutId); };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isTyping]);\n\n if(!isTyping) {\n setIsTyping(true);\n return null;\n }\n\n return (\n \n {CssLoadingDots(props.theme?.button.background)}\n {typingMessage}\n );\n};\n\nexport default withTheme(AlmeLiveChatOperatorTypingResponse);","import React, { useRef, useState } from 'react';\n\nimport { FocusComponentProps } from '../../models/ComponentProps';\nimport AlmeEndLiveChatDialog from './AlmeEndLiveChatDialog';\nimport { AlmeAppConfig } from '../../../alme-config/AlmeAppConfig';\nimport styled from 'styled-components';\nimport Button from 'syf-component-library/ui/atoms/Button';\nimport { Initiator } from '../AlmeLiveChatReportingEvents';\nimport { AlmeResponseExt } from '../../AlmeResponse/AlmeResponseExt';\nimport AlmeLiveChatOperatorTypingResponse, { isLiveChatOperatorTypingResponse } from './AlmeLiveChatOperatorTypingResponse';\nimport { Container } from '../../AlmeResponse/AlmeResponse.styles';\n\nconst ControlContainer = styled(Container)`\n display: flex;\n flex-direction: row;\n align-items: baseline;\n justify-content: space-between;\n margin: 0px;\n`;\nconst StyledButton = styled(Button)`\n margin: 0px;\n align-self: start;\n padding: 0px;\n text-transform: none;\n`;\n\ninterface AlmeLiveChatControlsProps {\n appConfig: AlmeAppConfig;\n isLiveChatConnected: boolean;\n onEndChat: (initiator: Initiator) => void;\n setIsDialogOpen: (isOpen: boolean) => void;\n response: AlmeResponseExt;\n focusProps?: FocusComponentProps;\n isDialogOpen?: boolean;\n markUsedResponse: (response: AlmeResponseExt) => void;\n}\n\nconst AlmeLiveChatControls: React.FC = (props: AlmeLiveChatControlsProps) => {\n const [showDialog, setShowDialog] = useState(false);\n const returnFocusToElement = useRef(null);\n if (!props.isLiveChatConnected) {\n return null;\n }\n\n const handleEndChatClick = () => {\n if(props.isDialogOpen){\n props.onEndChat('User');\n }\n // eslint-disable-next-line\n else{ \n returnFocusToElement.current = document.activeElement as HTMLElement;\n setShowDialog(true);\n props.setIsDialogOpen(true);\n }\n };\n\n const cancelDialogClick = () => {\n setTimeout(()=>{\n returnFocusToElement.current?.focus();\n },10);\n setShowDialog(false);\n props.setIsDialogOpen(false);\n };\n\n const endChat = () => {\n props.onEndChat(\"User\");\n setShowDialog(false);\n props.setIsDialogOpen(false);\n };\n\n return (\n <>\n \n {props.appConfig.liveChatControls.buttonText}\n \n {!props.response.fromHistory && isLiveChatOperatorTypingResponse(props.response)\n ? \n : null }\n \n \n \n );\n};\n\nexport default AlmeLiveChatControls;\n","import { useEffect, useRef } from 'react';\n\nfunction useRecursiveTimeout(\n callback: () => Promise | (() => void),\n delay: number | null,\n): void {\n const savedCallback = useRef(callback);\n\n // Remember the latest callback.\n useEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n\n // Set up the timeout loop.\n useEffect(() => {\n let id: number | undefined;\n let cancel = false;\n function tick() {\n const ret = savedCallback.current();\n\n if (ret instanceof Promise) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n ret.then(() => {\n if (delay !== null && !cancel) {\n id = window.setTimeout(tick, delay);\n }\n });\n } else if (delay !== null && !cancel) {\n id = window.setTimeout(tick, delay);\n }\n }\n if (delay !== null) {\n id = window.setTimeout(tick, delay);\n return () => {\n if (id) { window.clearTimeout(id); }\n cancel = true;\n };\n }\n }, [delay]);\n}\n\nexport default useRecursiveTimeout;","import { AlmeApiUtils } from '../../../AlmeApiUtils';\nimport { LaunchParams } from '../../AlmeLaunchPoint/LaunchParams';\nimport { AlmeAppState } from '../AlmeAppState';\n\nimport { AlmeResponseExt } from '../../AlmeResponse/AlmeResponseExt';\n\nasync function sendInitialAppEvents(almeApiUtils: AlmeApiUtils, almeState: AlmeAppState): Promise {\n const responses:AlmeResponseExt[] = [];\n try {\n\n\n const launchParams: LaunchParams = {\n LaunchPointName: almeState.launchPointName || \"\",\n LaunchParameter: almeState.launchParameter || \"\",\n LaunchType: 'Reactive',\n };\n\n const welcomeResponse = await almeApiUtils.sendAppEvent('WelcomeUser', undefined, launchParams);\n if (welcomeResponse) {\n responses.push(welcomeResponse);\n }\n } catch (error) {\n console.error(error);\n }\n\n return responses;\n}\n\nexport default sendInitialAppEvents;","import { AlmeAppState } from './AlmeAppState';\nimport { AlmeApiUtils } from \"../../AlmeApiUtils\";\nimport { AlmeResponseExt, EntryExtensionData } from '../AlmeResponse/AlmeResponseExt';\nimport sendInitialAppEvents from './initialize/sendInitialAppEvents';\nimport { sendLoginStateEvents } from './initialize/loginState';\nimport sendPointOfNeedAppEvent from './initialize/sendPointOfNeedAppEvent';\nimport { AlmeAppConfig } from '../../alme-config/AlmeAppConfig';\nimport { MutableRefObject } from 'react';\n\nexport function getLastResponseExtensionData(responses: AlmeResponseExt[]): EntryExtensionData | undefined {\n if(responses.length) {\n return responses[responses.length - 1].extensionData;\n }\n\n return undefined;\n}\n\nfunction setHistory(\n appEventResponses: AlmeResponseExt[],\n curHistory: AlmeResponseExt[],\n isLoggedOut: boolean): AlmeResponseExt[] {\n const newResponseCount = appEventResponses.length;\n\n if(newResponseCount === 0) {\n return curHistory;\n }\n\n if(isLoggedOut) {\n return appEventResponses;\n } else {\n curHistory.push(...appEventResponses);\n return curHistory;\n }\n}\n\nexport default async function initializeAppEvents(\n almeState: AlmeAppState,\n setAlmeState: (almeState: AlmeAppState) => void,\n appConfig: AlmeAppConfig,\n isAppEventsSent: MutableRefObject,\n almeApiUtils: AlmeApiUtils): Promise {\n /**\n * Only send app events when IVA is open and history is loaded\n */\n if(!almeState.isOpen || !almeState.historyLoaded) {\n return;\n}\n\n isAppEventsSent.current = true;\n\n let appEventResponses: AlmeResponseExt[] = [];\n /**\n * Send HostPageData and WelcomeUser appevents only when there is no previous conversation\n */\n if(!almeState.hasPreviousConversation) {\n appEventResponses = await sendInitialAppEvents(almeApiUtils, almeState);\n }\n\n if (!almeState.isLoggedIn && almeState.isLiveChatConnected ) {\n setAlmeState({\n ...almeState,\n isInitialAppEventsSent: true,\n lastActivityTime: Date.now(),\n });\n return;\n }\n\n /**\n * Verify and send login appevents every time IVA is launched (Page refresh or manual launch by user)\n */\n const loggedInState = await sendLoginStateEvents(appConfig, almeApiUtils, almeState);\n if(loggedInState.loginStateResponse) {\n appEventResponses.push(loggedInState.loginStateResponse);\n }\n\n const extensionData = getLastResponseExtensionData(appEventResponses);\n\n const state: AlmeAppState = {\n ...almeState,\n isLoggedIn: loggedInState.isLoggedIn,\n clientSessionId: loggedInState.clientSessionId,\n // On logout don't add previous history\n history: setHistory(appEventResponses, almeState.history, !!(!loggedInState.isLoggedIn && loggedInState.loginStateResponse)),\n lastEntryId: (extensionData && extensionData.entryId) || almeState.lastEntryId,\n chatId: (extensionData && extensionData.chatId) || almeState.chatId,\n lastActivityTime: appEventResponses.length >= 1 ? Date.now() : almeState.lastActivityTime,\n isLiveChatConnected: loggedInState.isLiveChatConnected,\n isInitialAppEventsSent: true,\n };\n\n setAlmeState(state);\n\n /**\n * Send point of need appevent only when there is no previous conversation\n */\n const pointOfNeedResponse = await sendPointOfNeedAppEvent(almeApiUtils, state);\n if(pointOfNeedResponse) {\n state.history.push(pointOfNeedResponse);\n setAlmeState({\n ...state,\n lastEntryId: pointOfNeedResponse.extensionData.entryId,\n chatId: pointOfNeedResponse.extensionData.chatId,\n launchPointName: undefined,\n launchParameter: undefined,\n lastActivityTime: Date.now(),\n });\n }\n}","import { AlmeAppState } from '../AlmeAppState';\nimport { PathName } from '../../../utils/UrlUtils';\nimport postMessage from '../../../post-message/PostMessageUtils';\n\ninterface ProactiveLaunchUrl {\n value: string | undefined;\n launchParameter: string;\n}\n\nconst secureMessagingLaunchParameter = 'secureMessaging';\n\nconst proactiveLaunchUrls: ProactiveLaunchUrl[] = [\n { value: process.env.REACT_APP_essSecureMessagingProactiveLaunchUrl, launchParameter: secureMessagingLaunchParameter },\n { value: process.env.REACT_APP_mySyfSecureMessagingProactiveLaunchUrl, launchParameter: secureMessagingLaunchParameter },\n { value: process.env.REACT_APP_mySyfSecureMessagingContactUsProactiveLaunchUrl, launchParameter: secureMessagingLaunchParameter },\n];\n\nfunction sendAutoLaunchMessage(almeState: AlmeAppState): void {\n /**\n * Do not send autolaunch messsage when IVA is open or conversation has occurred\n */\n if(almeState.isOpen || almeState.history.length >= 1) {\n return;\n }\n\n const launchUrl = proactiveLaunchUrls.find((url) => url.value && PathName.endsWith(url.value));\n\n if(launchUrl) {\n setTimeout(() => postMessage({\n type: \"LaunchIva\",\n launchPointName: \"AutoLaunch\",\n launchParameter: launchUrl.launchParameter,\n source: 'nit',\n }), 1000);\n }\n}\n\nexport default sendAutoLaunchMessage;","import { AlmeApiUtils } from \"../../../AlmeApiUtils\";\n\nexport interface ConfigurationKeyValuePair {\n Key: string;\n Value: string;\n}\n\nasync function getConfiguration(almeApiUtils: AlmeApiUtils): Promise> {\n let configSettings: Record = {};\n try {\n const almeConfigs = await almeApiUtils.getAlmeConfiguration();\n if (almeConfigs) {\n configSettings = (almeConfigs.configurationSettings as ConfigurationKeyValuePair[]).reduce>((prev: Record, x: ConfigurationKeyValuePair) => {\n return { ...prev, [x.Key]: x.Value };\n }, {});\n }\n } catch (error) {\n console.error(error);\n }\n return configSettings;\n}\n\nexport default getConfiguration;","import { AlmeAppConfig } from './../../../alme-config/AlmeAppConfig';\n\nfunction ivaAvailability(appConfig: AlmeAppConfig) : void{\n if(!window.NITGlobal) {\n window.NITGlobal = { clientAvailable:false };\n }\n\n if (!appConfig.isMobile) {\n window.NITGlobal.clientAvailable = true;\n }\n else {\n const isRCAvailable = appConfig['IvaAvailability.RCMobileWeb'] === \"True\";\n const isPSCCAvailable = appConfig['IvaAvailability.PSCCMobileWeb'] === \"True\";\n if (appConfig.main.platform === \"PSCC\") {\n window.NITGlobal.clientAvailable = isPSCCAvailable;\n } else if (appConfig.main.platform === \"RC\") {\n const clientName = appConfig.clientName;\n const clientsJSON = appConfig['IvaAvailability.MobileWebClients'] as string;\n const clients = JSON.parse(clientsJSON) as Record;\n // In case client not available in list, change undefined to false\n window.NITGlobal.clientAvailable = isRCAvailable && !!(clientName && clients[clientName]);\n } else {\n window.NITGlobal.clientAvailable = true;\n }\n }\n}\n\nexport default ivaAvailability;","import { AlmeApiUtils } from \"../../../AlmeApiUtils\";\nimport { AlmeResponseExt } from \"../../AlmeResponse/AlmeResponseExt\";\n\nasync function loadAlmeHistory(almeApiUtils: AlmeApiUtils): Promise {\n let curHistory: AlmeResponseExt[] = [];\n\n try {\n curHistory = await almeApiUtils.loadAlmeHistory() as AlmeResponseExt[];\n // Disable all auto navigation on history load.\n for (const response of curHistory) {\n if(response){\n response.fromHistory = true;\n if (response.navUrl) {\n response.navUrl.AutoNavigationType = 'None';\n }\n }\n }\n } catch (error) {\n console.error(error);\n }\n\n return curHistory;\n}\n\nexport default loadAlmeHistory;","import { isLiveChatResponse } from '@alme/api-ts/Utils';\nimport merge from 'deepmerge';\nimport { AlmeAppConfig } from '../../alme-config/AlmeAppConfig';\nimport { AlmeApiUtils } from '../../AlmeApiUtils';\nimport { AlmeAppState } from './AlmeAppState';\nimport sendAutoLaunchMessage from './initialize/sendAutoLaunchMessage';\nimport getConfiguration from './initialize/getConfiguration';\nimport ivaAvailability from './initialize/ivaAvailability';\nimport loadAlmeHistory from './initialize/loadAlmeHistory';\nimport { getLastResponseExtensionData } from './initializeAppEvents';\nimport { setEchatSessionInfoCalled } from './SessionMessages';\n\nexport default async function initializeAlmeApp(\n almeState: AlmeAppState,\n setAlmeState: (almeState: AlmeAppState) => void,\n appConfig: AlmeAppConfig,\n setAppConfig: (appConfig: AlmeAppConfig) => void,\n almeApiUtils: AlmeApiUtils,\n propsIsOpen?: boolean): Promise {\n\n let sessionMessages = almeState.sessionMessages;\n if(appConfig.main.platform === \"RC\" && appConfig.main.isLoggedIn) {\n const sessionId = appConfig.main.clientSessionId;\n sessionMessages = setEchatSessionInfoCalled(almeState, sessionId as string);\n }\n\n const configSettings = await getConfiguration(almeApiUtils);\n const config = merge.all([appConfig, configSettings]) as AlmeAppConfig;\n config.allowedOrigins = configSettings[\"PostMessageAllowedOrgins\"] as unknown as string[];\n if(config.ClientSessionTimeout) {\n config.sessionTimeoutInMs = (+config.ClientSessionTimeout) * 60000;\n }\n setAppConfig(config);\n ivaAvailability(config);\n const curHistory = await loadAlmeHistory(almeApiUtils);\n\n let isLiveChatConnected = false,\n lastEntryId: string | undefined;\n if (curHistory.length) {\n const lastHistoryItem = curHistory[curHistory.length - 1];\n isLiveChatConnected = isLiveChatResponse(lastHistoryItem);\n lastEntryId = lastHistoryItem.extensionData.entryId;\n }\n\n const hasPrevConversation = curHistory.length >= 1;\n sendAutoLaunchMessage(almeState);\n\n const extensionData = getLastResponseExtensionData(curHistory);\n\n almeState.history.push(...curHistory);\n\n setAlmeState({\n ...almeState,\n historyLoaded: true,\n hasPreviousConversation: hasPrevConversation,\n lastEntryId: lastEntryId,\n chatId: extensionData?.chatId,\n launchQuestion: undefined,\n isLiveChatConnected,\n // No active session, do not open IVA\n isOpen: (almeState.isOpen && hasPrevConversation) || propsIsOpen,\n // No active session, set session expired false\n sessionExpired: almeState.sessionExpired && hasPrevConversation,\n // No active session, reset last activity time\n lastActivityTime: hasPrevConversation ? almeState.lastActivityTime : undefined,\n sessionMessages,\n } as AlmeAppState);\n}","import { AlmeAppState, PlatformMessageKey, SessionMessages, PlatformMessage } from './AlmeAppState';\n\n\nexport function addSessionMessage(\n almeState: AlmeAppState,\n platformSessionId: string,\n platformMessageKey: PlatformMessageKey,\n platformMessage: PlatformMessage): SessionMessages {\n let sessionMessages = almeState.sessionMessages && { ...almeState.sessionMessages };\n\n if (sessionMessages && sessionMessages.messages && (sessionMessages.sessionId === platformSessionId)) {\n sessionMessages.messages[platformMessageKey] = platformMessage;\n } else {\n const messages = { [platformMessageKey]: platformMessage };\n sessionMessages = {\n sessionId: platformSessionId,\n messages,\n };\n }\n\n return sessionMessages;\n}\n\nexport function setEchatSessionInfoCalled(\n almeState: AlmeAppState,\n sessionId: string): SessionMessages | undefined {\n let sessionMessages = almeState.sessionMessages && { ...almeState.sessionMessages };\n if ((!sessionMessages || sessionMessages.sessionId !== sessionId) && typeof window.insertEChatSesionInfo === 'function') {\n window.insertEChatSesionInfo();\n sessionMessages = {\n sessionId: sessionId,\n insertEchatSessionInfoCalled: true,\n };\n }\n\n return sessionMessages;\n}","import { AlmeResponseExt } from './../../components/AlmeResponse/AlmeResponseExt';\nimport { AlmeAppConfig } from '../../alme-config/AlmeAppConfig';\nimport { AlmeApiUtils } from '../../AlmeApiUtils';\nimport AlmePostedMessage from '../AlmePostedMessage';\nimport { AlmeAppState, AlmeAppUtilsBase } from './../../components/AlmeApp/AlmeAppState';\n\nexport abstract class MessageHandlerBase extends AlmeAppUtilsBase {\n constructor(\n almeState: AlmeAppState,\n setAlmeState: (state: AlmeAppState) => void,\n appConfig: AlmeAppConfig,\n protected apiUtils: AlmeApiUtils) {\n super(almeState, setAlmeState, appConfig);\n }\n\n abstract handle(message: AlmePostedMessage): void;\n\n protected sendAppEvent(message: AlmePostedMessage, appEvent: string): void {\n const apiParams = this.createApiParams(message);\n this.apiUtils.sendAppEvent(appEvent, \"External\", apiParams)\n .then(this.onAppEventSuccess.bind(this), this.onAppEventFailure.bind(this));\n }\n\n protected createApiParams(message: AlmePostedMessage): Record {\n const appParameters: Record = {};\n\n appParameters.ClientSessionId = this.almeState.clientSessionId;\n appParameters.IsLoggedIn = this.almeState.isLoggedIn;\n if (message.userData) {\n const userData = { ...message.userData };\n if (userData.pageName) {\n appParameters.pageName = userData.pageName;\n delete userData.pageName;\n }\n\n // Account Id in platform message comes as number\n if (userData.accountId) {\n userData.accountId = `${userData.accountId}`;\n }\n\n if (Object.keys(userData).length >= 1) {\n appParameters.UserObj = userData;\n }\n }\n\n return appParameters;\n }\n\n protected onAppEventSuccess(appEventResponse: AlmeResponseExt | null): void {\n if (appEventResponse) {\n const responseEntryId = appEventResponse.extensionData.entryId;\n this.almeState.history.push(appEventResponse);\n this.setAlmeState({\n ...this.almeState,\n lastEntryId: responseEntryId,\n chatId: appEventResponse.extensionData.chatId,\n lastActivityTime: Date.now(),\n });\n }\n }\n\n protected onAppEventFailure(error: unknown): void {\n console.error(error);\n }\n}","import { SessionMessages } from './../../components/AlmeApp/AlmeAppState';\nimport AlmePostedMessage from \"../AlmePostedMessage\";\nimport { MessageHandlerBase } from \"./MessageHandlerBase\";\nimport { AlmeResponseExt } from '../../components/AlmeResponse/AlmeResponseExt';\nimport { addSessionMessage } from '../../components/AlmeApp/SessionMessages';\n\nconst SwitchAccountAppEvent = \"ConsumerCenterSwitchAccount\";\n\nexport default class SwitchAccountHandler extends MessageHandlerBase {\n message: AlmePostedMessage | null = null;\n\n handle(message: AlmePostedMessage): void {\n this.message = message;\n if(this.almeState.history.length && !this.almeState.sessionExpired) {\n this.sendAppEvent(this.message, SwitchAccountAppEvent);\n } else {\n this.saveMessage();\n }\n }\n\n protected onAppEventSuccess(appEventResponse: AlmeResponseExt): void {\n const sessionMessages = this.createSessionMessage();\n const responseEntryId = appEventResponse.extensionData.entryId;\n if (responseEntryId !== this.appConfig.history.errorResponse.entryId) {\n this.almeState.history.push(appEventResponse);\n this.setAlmeState({\n ...this.almeState,\n lastEntryId: responseEntryId,\n chatId: appEventResponse.extensionData.chatId,\n lastActivityTime: Date.now(),\n sessionMessages,\n });\n }\n }\n\n protected createApiParams(message: AlmePostedMessage): Record {\n return super.createApiParams(message);\n }\n\n protected onAppEventFailure(error: unknown): void {\n console.error(error);\n this.saveMessage();\n }\n\n private saveMessage() {\n const sessionMessages = this.createSessionMessage();\n\n this.setAlmeState({\n ...this.almeState,\n sessionMessages,\n });\n }\n\n private createSessionMessage(): SessionMessages {\n const message = this.message as AlmePostedMessage;\n const switchAccountMesssage = {\n // Account Id in platform message comes as number\n accountId: `${message.userData?.accountId as string}`,\n };\n\n return addSessionMessage(this.almeState, this.appConfig.main.clientSessionId as string, \"SwitchAccount\", switchAccountMesssage);\n }\n}","import { AlmeAppConfig } from \"../../alme-config/AlmeAppConfig\";\nimport { AlmeApiUtils } from \"../../AlmeApiUtils\";\nimport { AlmeAppState } from \"../../components/AlmeApp/AlmeAppState\";\nimport { IVASetChatStatus } from \"../../IVAChatStatusProvider\";\nimport AlmePostedMessage from \"../AlmePostedMessage\";\nimport { MessageHandlerBase } from \"./MessageHandlerBase\";\n\nexport default class LaunchIvaHandler extends MessageHandlerBase {\n constructor(\n almeState: AlmeAppState,\n setAlmeState: (state: AlmeAppState) => void,\n appConfig: AlmeAppConfig,\n apiUtils: AlmeApiUtils,\n private ivaSetChatStatus: IVASetChatStatus) {\n super(almeState, setAlmeState, appConfig, apiUtils);\n }\n\n handle(message: AlmePostedMessage): void {\n this.setAlmeState({\n ...this.almeState,\n isOpen: true,\n launchPointName: message.launchPointName,\n launchParameter: message.launchParameter,\n });\n\n this.ivaSetChatStatus.openChat();\n }\n }\n","import AlmePostedMessage from \"../AlmePostedMessage\";\nimport { MessageHandlerBase } from \"./MessageHandlerBase\";\n\nconst ContinueSessionAppEvent = \"ConsumerCenterContinueSession\";\n\nexport default class ContinueSessionHandler extends MessageHandlerBase {\n handle(message: AlmePostedMessage): void {\n if(!this.almeState.sessionExpired && this.almeState.isOpen) {\n this.sendAppEvent(message, ContinueSessionAppEvent);\n }\n }\n}","import AlmePostedMessage from \"../AlmePostedMessage\";\nimport { MessageHandlerBase } from \"./MessageHandlerBase\";\n\nconst ManageAccountsAppEvent = \"ConsumerCenterManageAccounts\";\n\nexport default class ManageAccountsHandler extends MessageHandlerBase {\n handle(message: AlmePostedMessage): void {\n if(!this.almeState.sessionExpired && this.almeState.history.length) {\n this.sendAppEvent(message, ManageAccountsAppEvent);\n }\n }\n\n protected createApiParams(message: AlmePostedMessage): Record {\n //the implemenatation has to be changed little bit\n // const apiParams = super.createApiParams(message);\n // if(apiParams.UserObj === undefined || apiParams.UserObj === null){\n // /* eslint-disable sonarjs/no-duplicated-branches */\n // /* eslint-disable @typescript-eslint/no-non-null-assertion */\n // apiParams.UserObj = this.appConfig.main.userMetadata as (CBUserMetadata | undefined);\n // }\n return super.createApiParams(message);\n }\n}","import AlmePostedMessage from \"../AlmePostedMessage\";\nimport { MessageHandlerBase } from \"./MessageHandlerBase\";\n\nconst NavigationRestrictedAppEvent = \"ConsumerCenterNavigationRestricted\";\n\nexport default class DeepLinkRespHandler extends MessageHandlerBase {\n\n handle(message: AlmePostedMessage): void {\n\n if(message.userData && message.userData.link) {\n this.apiUtils.minimizeInMobileView();\n window.location.href = message.userData.link;\n } else if(message.userData && message.userData.restrictedMsg) {\n this.sendAppEvent(message, NavigationRestrictedAppEvent);\n }\n\n }\n\n protected createApiParams(message: AlmePostedMessage): Record {\n const apiParams = super.createApiParams(message);\n apiParams.RestrictionMessage = message.userData?.restrictedMsg;\n apiParams.RestrictionPhoneNumber = message.userData?.phoneNumber;\n delete apiParams.UserObj;\n return apiParams;\n }\n}","import { AlmeMessageEventData } from '@alme/post-message-api/AlmeMessageEventData';\nimport { AlmeAppState, AlmeAppUtilsBase } from './../components/AlmeApp/AlmeAppState';\nimport { AlmeAppConfig } from './../alme-config/AlmeAppConfig';\nimport AlmePostedMessage from './AlmePostedMessage';\nimport { AlmeApiUtils } from '../AlmeApiUtils';\nimport MessageType from './MessageType';\nimport { MessageHandlerBase } from './MessageHandlers/MessageHandlerBase';\nimport SwitchAccountHandler from './MessageHandlers/SwitchAccountHandler';\nimport LaunchIvaHandler from './MessageHandlers/LaunchIvaHandler';\nimport ContinueSessionHandler from './MessageHandlers/ContinueSessionHandler';\nimport ManageAccountsHandler from './MessageHandlers/ManageAccountsHandler';\nimport DeepLinkRespHandler from './MessageHandlers/DeepLinkRespHandler';\nimport { IVASetChatStatus } from '../IVAChatStatusProvider';\n\nexport class AlmeMessageHandlerUtils extends AlmeAppUtilsBase {\n constructor(\n almeState: AlmeAppState,\n setAlmeState: (state: AlmeAppState) => void,\n appConfig: AlmeAppConfig,\n private apiUtils: AlmeApiUtils,\n private setDelayPostMessageHandle: (message: AlmePostedMessage) => void,\n private ivaSetChatStatus: IVASetChatStatus) {\n super(almeState, setAlmeState, appConfig);\n }\n\n public Handle(eventData: AlmeMessageEventData): void {\n const message = eventData.message as AlmePostedMessage;\n this.HandleMessage(message);\n }\n\n public HandleMessage(message: AlmePostedMessage): void {\n let messageHandler: MessageHandlerBase | undefined;\n switch(message.type) {\n case MessageType.SwitchAcctIva:\n messageHandler = new SwitchAccountHandler(this.almeState, this.setAlmeState, this.appConfig, this.apiUtils);\n break;\n case MessageType.LaunchIva:\n messageHandler = new LaunchIvaHandler(this.almeState, this.setAlmeState, this.appConfig, this.apiUtils, this.ivaSetChatStatus);\n break;\n case MessageType.ActiveCCSessonIVA:\n messageHandler = new ContinueSessionHandler(this.almeState, this.setAlmeState, this.appConfig, this.apiUtils);\n break;\n case MessageType.ManageAcctIva:\n if(this.almeState.historyLoaded) {\n messageHandler = new ManageAccountsHandler(this.almeState, this.setAlmeState, this.appConfig, this.apiUtils);\n } else {\n this.setDelayPostMessageHandle(message);\n return;\n }\n break;\n case MessageType.DeepLinkRespIva:\n messageHandler = new DeepLinkRespHandler(this.almeState, this.setAlmeState, this.appConfig, this.apiUtils);\n break;\n }\n\n if(messageHandler) {\n messageHandler.handle(message);\n }\n }\n}","import { AlmeMessageHandlerUtils } from './AlmeMessageHandlerUtils';\nimport { AlmeAppConfig } from '../alme-config/AlmeAppConfig';\nimport { useEffect, useState } from 'react';\nimport { AlmeAppState } from '../components/AlmeApp/AlmeAppState';\nimport AlmePostedMessage from './AlmePostedMessage';\nimport { createAlmeApi, createApiSetting, createLiveChatNotificationApi } from '../AlmeApi';\nimport { AlmeApiUtils } from '../AlmeApiUtils';\nimport { getLogger } from '../utils/DebugUtils';\nimport { IVASetChatStatus } from '../IVAChatStatusProvider';\n\nfunction handleMessage(\n message: AlmePostedMessage,\n almeState: AlmeAppState,\n setAlmeState: (almeState: AlmeAppState) => void,\n appConfig: AlmeAppConfig,\n setDelayPostMessageHandle: (message: AlmePostedMessage) => void,\n ivaSetChatStatus: IVASetChatStatus): void {\n const apiSettings = createApiSetting(appConfig.main.apiHostName);\n const logger = getLogger(appConfig.UiLogLevel);\n const liveChatNotificationApi = createLiveChatNotificationApi(apiSettings, logger);\n const almeApi = createAlmeApi(apiSettings, logger);\n const messageHandlerUtils = new AlmeMessageHandlerUtils(\n almeState,\n setAlmeState,\n appConfig,\n new AlmeApiUtils(almeState, setAlmeState, appConfig, almeApi, liveChatNotificationApi),\n setDelayPostMessageHandle,\n ivaSetChatStatus);\n messageHandlerUtils.HandleMessage(message);\n}\n\n\nexport default function useDelayPostMessageHandler(\n state: AlmeAppState,\n setAlmeState: (almeState: AlmeAppState) => void,\n appConfig: AlmeAppConfig,\n ivaSetChatStatus: IVASetChatStatus): (message: AlmePostedMessage) => void {\n const [message, setMessage] = useState(null);\n\n useEffect(() => {\n if(message && state.historyLoaded) {\n handleMessage(message, state, setAlmeState, appConfig, setMessage, ivaSetChatStatus);\n setMessage(null);\n }\n }, [appConfig, message, setAlmeState, state, ivaSetChatStatus]);\n\n return setMessage;\n}","import React, { useState, useEffect, useRef, useCallback, MutableRefObject } from 'react';\n\nimport { AlmeAppState, getCurrentAppState, updateAppState } from './AlmeAppState';\nimport { AlmeApiUtils } from '../../AlmeApiUtils';\nimport { createLiveChatNotificationApi, createAlmeApi, createApiSetting } from '../../AlmeApi';\n\nimport { AlmeAppConfig, updateAppConfigState } from '../../alme-config/AlmeAppConfig';\nimport AlmeHeader from '../AlmeHeader/AlmeHeader';\nimport AlmeHistory from '../AlmeHistory/AlmeHistory';\nimport AlmeFooter from '../AlmeFooter/AlmeFooter';\nimport { renderLaunchPointIcon } from '../AlmeLaunchPoint/AlmeLaunchPoint';\nimport { AlmeMinimizeUtils } from '../AlmeHeader/AlmeMinimize/AlmeMinimize';\nimport { AlmeCloseUtils } from '../AlmeHeader/AlmeClose/AlmeClose';\nimport AlmeLoader from '../AlmeLoader/AlmeLoader';\nimport { focusChatIcon } from '../AlmeUtilities/dom-utils';\nimport { AppContainer, ContentContainer } from './AppContainer';\nimport Grow from '../AlmeUtilities/Transitions/Grow';\nimport { renderSessionTimeoutDialog } from '../AlmeSession/IvaSessionTimeout';\nimport { SessiontTimeoutUtils } from '../AlmeSession/AlmeSessionTimeoutUtils';\nimport { AlmeResponseExt } from '../AlmeResponse/AlmeResponseExt';\n\nimport { processLiveChatStartAction } from '../ResponseActions/AlmeLiveChatStart/AlmeLiveChatStartUtils';\nimport { processLiveChatEndAction } from '../ResponseActions/AlmeLiveChatEnd/AlmeLiveChatEndUtils';\nimport AlmeLiveChatControls from '../LiveChat/AlmeLiveChatControls/AlmeLiveChatControls';\nimport { OnSendTypingEvent } from '../AlmeInput/MessageInputBox';\nimport { useLiveChatConnected } from '../../hooks/useLiveChatConnected';\nimport { usePollForChat } from '../../hooks/usePollForChat';\n\nimport { OnContinueChat, OnEndChat } from '../LiveChat/AlmeLiveChatReportingEvents';\nimport { getLogger } from '../../utils/DebugUtils';\nimport initializeAppEvents from './initializeAppEvents';\nimport initializeAlmeApp from './initializeAlmeApp';\nimport { MarkUsedResponse } from '../LiveChat/AlmeLiveChatSurvey/AlmeLiveChatSurveyUtils';\nimport { ObjectDiff } from '../../utils/ObjectUtils';\nimport { callIfFunction } from '../../utils/FunctionUtils';\nimport { usePollForHistory } from '../../hooks/usePollForHistory';\nimport { usePostMessageListener } from '../../hooks/usePostMessageListener';\nimport { useSetChatStatus } from '../../hooks/useSetChatStatus';\nimport { useIVAChatStatus, useIVASetChatStatus } from '../../IVAChatStatusProvider';\nimport { isInlineFormResponse } from '../AlmeInlineForm/InlineFormResponseAction';\nimport { CBUserMetadata } from '../../types/UserMetadata';\n\ninterface AlmeAppProps {\n isOpen?: boolean;\n onMinimize?: () => void;\n onClose?: () => void;\n appConfig: AlmeAppConfig;\n}\n\nconst processLastResponse = (\n almeState: AlmeAppState,\n setAlmeState: (almeState: AlmeAppState) => void,\n almeApiUtils: AlmeApiUtils,\n appConfig: AlmeAppConfig,\n props: AlmeAppProps,\n lastResponse?: AlmeResponseExt): void => {\n if (lastResponse) {\n // Process last history item for LiveChatStart response action\n processLiveChatStartAction(lastResponse, almeState, setAlmeState);\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n processLiveChatEndAction(lastResponse, almeState, setAlmeState, appConfig, almeApiUtils);\n\n }\n};\n\nconst getAppTabIndex = (isDialogOpen: boolean) => isDialogOpen ? -1 : 0;\n\nconst hasLivechatSurveyLoaded = (history: AlmeResponseExt[]):boolean => history.some(h=> h.fromHistory && h.extensionData?.surveyUrl);\n\nconst canShowApp = (almeState: AlmeAppState) => !!(almeState.historyLoaded && almeState.isOpen);\n\nfunction updateSessionId(\n appConfig: AlmeAppConfig,\n almeState: AlmeAppState,\n setAlmeAppState: (state: AlmeAppState) => void,\n almeApiUtils: AlmeApiUtils,\n isAppEventsSent: MutableRefObject,\n isInitialized: boolean){\n if((isInitialized && appConfig.main.platform === 'BANK' && appConfig.main.sessionId) && (!almeState.sessionId || almeState.sessionId !== appConfig.main.sessionId)){\n const userMetadata = appConfig.main.userMetadata as CBUserMetadata;\n setAlmeAppState({\n ...almeState,\n isOpen: false,\n history: [],\n isLoggedIn: false,\n hasPreviousConversation: false,\n sessionExpired: false,\n lastActivityTime: undefined,\n isLiveChatConnected: false,\n isInitialAppEventsSent: false,\n sessionId: appConfig.main.sessionId,\n cifId: userMetadata && userMetadata.cifId ? userMetadata.cifId : undefined,\n });\n if(almeState.history && almeState.history.length>0){\n almeApiUtils.endConversation()\n .then(() => {\n almeApiUtils.createNewSessionData();\n }).catch((error) => console.error(error));\n }\n isAppEventsSent.current = isAppEventsSent.current === true ? false : isAppEventsSent.current;\n }\n }\n\nfunction updateStateFromProp(\n props: AlmeAppProps,\n state: AlmeAppState,\n setAlmeAppState: (state: AlmeAppState) => void,\n isInitialized: boolean) {\n if(typeof props.isOpen === \"boolean\"\n && props.isOpen !== state.isOpen\n && isInitialized) {//to avoid updating state multiple times\n setAlmeAppState({\n ...state,\n isOpen: props.isOpen,\n });\n }\n}\n\nfunction initialAlmeState(propsIsOpen: boolean | undefined, appConfig: AlmeAppConfig): AlmeAppState {\n const currentAppState = getCurrentAppState();\n\n return ({\n history: [],\n historyLoaded: false,\n isOpen: currentAppState.isOpen || propsIsOpen,\n isLoggedIn: currentAppState.isLoggedIn,\n clientSessionId: currentAppState.clientSessionId,\n hasPreviousConversation: false,\n sessionMessages: currentAppState.sessionMessages,\n customerCheckStatusMessage: currentAppState.customerCheckStatusMessage,\n sessionExpired: currentAppState.sessionExpired,\n lastActivityTime: currentAppState.lastActivityTime,\n isLiveChatConnected: false,\n isLiveChatSessionTimeout: false,\n isInitialAppEventsSent: false,\n sessionId: currentAppState.sessionId || appConfig.main.sessionId,\n cifId: currentAppState.cifId,\n });\n}\n\nconst AlmeApp: React.FC = (props: AlmeAppProps) => {\n const { chatPosition } = useIVAChatStatus();\n const setChatStatus = useIVASetChatStatus();\n\n const [almeState, setAlmeState] = useState(() => initialAlmeState(props.isOpen, props.appConfig));\n const history = almeState.history;\n const [isDialogOpen, setIsDialogOpen] = useState(false);\n\n const [appConfig, setAppConfig] = useState(props.appConfig);\n const isInitialized = useRef(false);\n\n /**\n * `isAppEventsSent` is same as `isInitialAppEventsSent` AlmeAppState\n * using this ref variable as well to avoid sending AppEvents multiple times\n **/\n const isAppEventsSent = useRef(false);\n\n const logger = getLogger(appConfig.UiLogLevel);\n\n const setAlmeStateWrapper = useCallback((state: AlmeAppState): void => {\n const changes = ObjectDiff(almeState as unknown as Record, state as unknown as Record);\n if(Object.keys(changes).length){\n logger.infoTrace(\"State change\", changes, \"Original State\", almeState, \"New State\", state);\n updateAppState(state);\n setAlmeState(state);\n }\n }, [almeState, setAlmeState, logger]);\n\n /**\n * State update is required in case prop changes, occurs mainly in node module implementation\n */\n updateAppConfigState(props.appConfig, appConfig, setAppConfig);\n updateStateFromProp(props, almeState, setAlmeStateWrapper, isInitialized.current);\n\n const apiSetting = createApiSetting(appConfig.main.apiHostName);\n const almeApi = createAlmeApi(apiSetting, logger);\n const liveChatNotificationApi = createLiveChatNotificationApi(apiSetting, logger);\n const almeApiUtils = new AlmeApiUtils(almeState, setAlmeStateWrapper, appConfig, almeApi, liveChatNotificationApi);\n const markUsedResponse = MarkUsedResponse(almeState, setAlmeStateWrapper);\n\n useLiveChatConnected(almeState.isLiveChatConnected, appConfig, setAppConfig);\n\n const submitAlmeInput = almeApiUtils.submitAlmeInput.bind(almeApiUtils);\n const onDisplayLinkClick = almeApiUtils.onDisplayLinkClick.bind(almeApiUtils);\n const clearSessionData = almeApiUtils.clearSessionData.bind(almeApiUtils);\n\n const almeMinimizeUtils = new AlmeMinimizeUtils(almeState, setAlmeStateWrapper, appConfig);\n\n setChatStatus.setInternalMinimizeChatHook(() => {\n almeMinimizeUtils.onMinimizeClick();\n callIfFunction(props.onMinimize);\n });\n\n const onMinimizeClick = setChatStatus.minimizeChat;\n\n const almeCloseUtils = new AlmeCloseUtils(almeState, setAlmeStateWrapper, appConfig, almeApiUtils, clearSessionData);\n function onCloseClick() {\n almeCloseUtils.onCloseClick()\n .then(() => {\n setIsDialogOpen(false);\n setChatStatus.closeChat();\n isAppEventsSent.current = false;\n callIfFunction(props.onClose);\n focusChatIcon();\n })\n .catch((error) => logger.error(error));\n }\n\n const submitFormAppEvent = almeApiUtils.submitFormAppEvent.bind(almeApiUtils);\n\n const sessionTimeoutUtils = new SessiontTimeoutUtils(almeState, setAlmeStateWrapper, appConfig, almeApiUtils);\n function onSessionTimeout() {\n sessionTimeoutUtils.onSessionTimeout()\n .catch((error) => logger.error(error));\n }\n const onUserSessionRefresh = sessionTimeoutUtils.onUserSessionRefresh.bind(sessionTimeoutUtils);\n\n usePostMessageListener(almeState, setAlmeStateWrapper, appConfig, almeApi, liveChatNotificationApi, setChatStatus);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(() => {\n /**\n * Alme app initialization sequence.\n * 1. Send a GetConfiguration Alme request convert from Key/value pair to property/value and save the results in the almeState.config.\n * 2. Send a GetHistory Alme request and if history exists:\n * - Disable all auto navigation by setting response.navUrl.AutoNavigationType = 'None'.\n * - Save the history in the almeState.history.\n * 3. Else if no history exists Send a \"WelcomeUser\" AppEvent request and save the response in the almeState.history.\n */\n\n if (isInitialized.current) {\n if(!isAppEventsSent.current) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n initializeAppEvents(almeState, setAlmeStateWrapper, appConfig, isAppEventsSent, almeApiUtils);\n }\n } else {\n isInitialized.current = true;\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n initializeAlmeApp(almeState, setAlmeStateWrapper, appConfig, setAppConfig, almeApiUtils, props.isOpen);\n }\n });\n\n updateSessionId(appConfig, almeState,setAlmeStateWrapper,almeApiUtils,isAppEventsSent,isInitialized.current);\n\n const onEndChat = OnEndChat(almeApiUtils, almeState, setAlmeStateWrapper);\n const onSendTypingEvent = OnSendTypingEvent(almeApiUtils);\n const onContinueChat = OnContinueChat(almeApiUtils);\n\n usePollForChat(appConfig, isInitialized, almeState, almeApiUtils);\n usePollForHistory(almeState, setAlmeStateWrapper, appConfig, almeApiUtils, history);\n\n const hasHistory = history.length > 0;\n const tabIndex = getAppTabIndex(isDialogOpen);\n const lastResponse = history[history.length - 1];\n const isLastResponseInlineForm = isInlineFormResponse(lastResponse);\n const isLivechatSurveyLoaded = hasLivechatSurveyLoaded(history);\n useSetChatStatus(almeState.historyLoaded, hasHistory, almeState.isOpen, window.NITGlobal?.clientAvailable);\n processLastResponse(almeState, setAlmeStateWrapper, almeApiUtils, appConfig, props, lastResponse);\n\n return (\n <>\n {\n \n \n \n \n \n {almeState.isLiveChatConnected?\n :null}\n \n \n {\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n renderSessionTimeoutDialog(almeState, appConfig, isLivechatSurveyLoaded, onUserSessionRefresh, onSessionTimeout, onCloseClick)\n }\n \n \n \n }\n {\n renderLaunchPointIcon(appConfig, almeState.historyLoaded, hasHistory, !!almeState.isOpen)\n }\n \n );\n};\n\nexport default AlmeApp;","import { ResponseAction } from \"@alme/types/response/ResponseAction\";\n\nimport { AlmeResponseNext } from '@alme/types/response/AlmeResponse';\nimport { AlmeAppState } from \"../../AlmeApp/AlmeAppState\";\n\nexport interface LiveChatStartAction extends ResponseAction {\n Name: \"LiveChatStart\";\n}\n\nexport function processLiveChatStartAction(response: AlmeResponseNext, almeState: AlmeAppState, setAlmeState: (almeState: AlmeAppState) => void): void {\n if (!almeState.isLiveChatConnected && response?.responseActions) {\n for (const action of response.responseActions) {\n if (action.Name === \"LiveChatStart\") {\n setAlmeState({\n ...almeState,\n isLiveChatConnected: true,\n } as AlmeAppState);\n return;\n }\n }\n }\n}\n","import { ResponseAction } from \"@alme/types/response/ResponseAction\";\n\nimport { AlmeResponseNext } from '@alme/types/response/AlmeResponse';\nimport { AlmeAppState } from \"../../AlmeApp/AlmeAppState\";\nimport { AlmeApiUtils } from './../../../AlmeApiUtils';\nimport { sendLoginStateEvents } from './../../AlmeApp/initialize/loginState';\nimport { AlmeAppConfig } from '../../../alme-config/AlmeAppConfig';\n\nexport interface LiveChatEndAction extends ResponseAction {\n Name: \"LiveChatEnd\";\n}\n\n\nexport async function processLiveChatEndAction(response: AlmeResponseNext, almeState: AlmeAppState, setAlmeState: (almeState: AlmeAppState) => void, appConfig: AlmeAppConfig, almeApiUtils: AlmeApiUtils): Promise {\n if (almeState.isLiveChatConnected && response?.responseActions) {\n for (const action of response.responseActions) {\n if (action.Name === \"LiveChatEnd\") {\n if (appConfig.main.isLoggedIn && !almeState.isLoggedIn) {\n const loggedInState = await sendLoginStateEvents(appConfig, almeApiUtils, almeState);\n setAlmeState({\n ...almeState,\n isLoggedIn: loggedInState.isLoggedIn,\n clientSessionId: loggedInState.clientSessionId,\n isLiveChatConnected: false,\n } as AlmeAppState);\n }\n else {\n setAlmeState({\n ...almeState,\n isLiveChatConnected: false,\n } as AlmeAppState);\n }\n return;\n }\n }\n }\n}\n","import { ReactElement } from 'react';\nimport { TenantSelectorThemeData } from '../components/AlmeTenantSelector/AlmeTenants';\nimport { AlmeLiveChatBannerConfig } from '../components/LiveChat/AlmeLiveChatBanner/AlmeLiveChatBannerConfig';\nimport { MainAppProps } from '../types/MainAppProps';\nimport { PropertyChanged } from '../utils/ObjectUtils';\n\nexport interface AlmeAppConfig {\n main: MainAppProps;\n clientName?: string;\n readonly webUrl: string;\n allowedOrigins: Array;\n lastEntryIdInterval: number;\n header: {\n headerText: string;\n isMinimizeEnabled: boolean;\n isCloseEnabled: boolean;\n isEmailTranscriptEnabled: boolean;\n liveChatHeaderText: string;\n };\n history: {\n errorResponse: {\n entryId: string;\n };\n expiredResponse: {\n entryId: string;\n };\n };\n footer: {\n maxInputLength: number;\n /**\n * Optional - remove for simple \"send\" icon\n */\n submitButtonText?: string;\n userTypingEventDelay?: number;\n };\n SystemErrorResponse: string;\n expiredErrorResponse: string;\n zIndex: number;\n isMobile: boolean;\n mobileBreakpoint : number;\n uiVersion: string;\n channel: string;\n liveChatControls: {\n buttonText: string;\n defaultOperatorName: string;\n typingMessageText: string;\n typingMessageDelay?: number;\n dialog: {\n headerText?: string;\n bodyText?: string;\n buttons?: {\n declineButtonText: string;\n acceptButtonText: string;\n };\n };\n };\n liveChatOperatorResponse: {\n shouldAutoNav?: boolean;\n useUniqueChatIcons?: boolean;\n openNewIconTitle: string;\n userCheckStatus: {\n timeoutInSec: number;\n dialog: {\n headerText: string;\n bodyText: string;\n buttons: {\n declineButtonText: string;\n acceptButtonText: string;\n };\n };\n };\n };\n liveChatUserResponse: {\n userIcon?: ReactElement;\n };\n liveChatBanner: AlmeLiveChatBannerConfig;\n notificationApi: {\n pollForNotifications: boolean;\n pollForLiveChat: boolean;\n notificationInterval: number;\n liveChatInterval: {\n connected: number;\n disconnected: number;\n };\n };\n setTenant?: (tenant: TenantSelectorThemeData) => void;\n ClientSessionTimeout?: string;\n sessionTimeoutInMs: number;\n sessionTimeoutWarningPeriodInMs: number;\n UiLogLevel: number;\n [key:string]: string | unknown ;\n}\n\nexport function updateAppConfigState(appConfigProp: AlmeAppConfig, appConfigState: AlmeAppConfig, setAppConfigState: (appConfig: AlmeAppConfig) => void): void {\n if(PropertyChanged(\n appConfigProp.main as unknown as Record,\n appConfigState.main as unknown as Record)) {\n setAppConfigState({...appConfigState});\n }\n}","import { AlmeResponseExt } from '../../AlmeResponse/AlmeResponseExt';\nimport { AlmeAppState } from \"../../AlmeApp/AlmeAppState\";\n\nexport function MarkUsedResponse(\n almeState: AlmeAppState,\n setAlmeAppState: (almeState: AlmeAppState) => void): (response: AlmeResponseExt) => void {\n return (response: AlmeResponseExt) => {\n const item = almeState.history.find(h => h.responseRevision === response.responseRevision);\n if(item) {\n item.fromHistory = true;\n setAlmeAppState({\n ...almeState,\n history: [...almeState.history],\n });\n }\n };\n}","import { useEffect } from 'react';\nimport { AlmeAppConfig } from '../alme-config/AlmeAppConfig';\n\nexport function useLiveChatConnected(isLiveChatConnected: boolean, almeAppConfig: AlmeAppConfig, setAlmeAppConfig: (almeAppConfig: AlmeAppConfig) => void): void {\n useEffect(() => {\n if (isLiveChatConnected && !almeAppConfig.notificationApi.pollForLiveChat) {\n setAlmeAppConfig({\n ...almeAppConfig,\n notificationApi: {\n ...almeAppConfig.notificationApi,\n pollForLiveChat: true,\n },\n });\n } else if (!isLiveChatConnected && almeAppConfig.notificationApi.pollForLiveChat) {\n setAlmeAppConfig({\n ...almeAppConfig,\n notificationApi: {\n ...almeAppConfig.notificationApi,\n pollForLiveChat: false,\n },\n });\n }\n }, [almeAppConfig, isLiveChatConnected, setAlmeAppConfig]);\n}","import { useEffect } from 'react';\nimport { AlmeApiUtils } from '../AlmeApiUtils';\nimport { AlmeMessageHandlerUtils } from '../post-message/AlmeMessageHandlerUtils';\nimport useDelayPostMessageHandler from '../post-message/useDelayPostMessageHandler';\nimport { AlmeAppConfig } from '../alme-config/AlmeAppConfig';\nimport { AlmeAppState } from '../components/AlmeApp/AlmeAppState';\nimport { AlmeApiNext } from '@alme/api-ts/Alme/AlmeApi';\nimport { LiveChatNotificationApiNext } from '@alme/api-ts/LiveChat/LiveChatNotificationApi';\nimport { getClientCommunicator } from '../post-message/PostMessageListener';\nimport { IVASetChatStatus } from '../IVAChatStatusProvider';\n\n\nexport const usePostMessageListener = (\n almeState: AlmeAppState,\n setAlmeState: (almeState: AlmeAppState) => void,\n appConfig: AlmeAppConfig,\n almeApi: AlmeApiNext,\n liveChatNotificationApi: LiveChatNotificationApiNext,\n ivaSetChatStatus: IVASetChatStatus): void => {\n\n const setDelayPostMessageHandle = useDelayPostMessageHandler(almeState, setAlmeState, appConfig, ivaSetChatStatus);\n\n /**\n * Create post message handlers and listen for post messagess\n */\n useEffect(() => {\n const almeMessageHandlerUtils = new AlmeMessageHandlerUtils(\n almeState,\n setAlmeState,\n appConfig,\n new AlmeApiUtils(almeState, setAlmeState, appConfig, almeApi, liveChatNotificationApi),\n setDelayPostMessageHandle,\n ivaSetChatStatus);\n const messageHandleCallback = almeMessageHandlerUtils.Handle.bind(almeMessageHandlerUtils);\n const clientCommunicator = getClientCommunicator(appConfig.allowedOrigins);\n const callbackId = clientCommunicator.addAlmeMessageListener(messageHandleCallback);\n\n return () => {\n clientCommunicator.removeAlmeMessageListener(callbackId);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [almeState, setAlmeState, appConfig, setDelayPostMessageHandle, ivaSetChatStatus]);\n };","import { AlmeApiUtils } from \"../../../AlmeApiUtils\";\nimport { LaunchParams } from \"../../AlmeLaunchPoint/LaunchParams\";\nimport { AlmeResponseExt } from \"../../AlmeResponse/AlmeResponseExt\";\nimport { AlmeAppState } from \"../AlmeAppState\";\n\n\nexport default async function sendPointOfNeedAppEvent(almeApiUtils: AlmeApiUtils, almeState: AlmeAppState): Promise {\n const launchParams: LaunchParams = {\n LaunchPointName: almeState.launchPointName || \"\",\n LaunchParameter: almeState.launchParameter || \"\",\n LaunchType: 'Reactive',\n };\n\n if (launchParams.LaunchParameter === \"PointOfNeed\") {\n return almeApiUtils.sendAppEvent('PointOfNeed', undefined, launchParams);\n }\n\n return null;\n}","import React from 'react';\nimport { AlmeAppConfig } from '../alme-config/AlmeAppConfig';\nimport { AlmeApiUtils } from '../AlmeApiUtils';\nimport { AlmeAppState } from '../components/AlmeApp/AlmeAppState';\nimport { getLogger } from '../utils/DebugUtils';\nimport useRecursiveTimeout from './useRecursiveTimeout';\n\nexport function usePollForChat(almeAppConfig: AlmeAppConfig, isInitialized: React.MutableRefObject, almeState: AlmeAppState, apiUtils: AlmeApiUtils): void {\n useRecursiveTimeout(async () => {\n const shouldPoll = almeAppConfig.notificationApi.pollForLiveChat && isInitialized.current && almeState.isOpen;\n if (shouldPoll) {\n try {\n await apiUtils.getLiveChatNotifications();\n } catch (ex) {\n getLogger(almeAppConfig.UiLogLevel).error('getLiveChatNotifications error: ', ex);\n }\n }\n }, almeState.isLiveChatConnected ? almeAppConfig.notificationApi.liveChatInterval.connected : almeAppConfig.notificationApi.liveChatInterval.disconnected);\n}","import { AlmeAppConfig } from '../alme-config/AlmeAppConfig';\nimport { AlmeApiUtils } from '../AlmeApiUtils';\nimport loadAlmeHistory from '../components/AlmeApp/initialize/loadAlmeHistory';\nimport { AlmeResponseExt, getLastResponseExtensionData } from '../components/AlmeResponse/AlmeResponseExt';\nimport { AlmeAppState, getCurrentAppState } from './../components/AlmeApp/AlmeAppState';\nimport useRecursiveTimeout from './useRecursiveTimeout';\n\n\nexport function usePollForHistory(\n almeState: AlmeAppState,\n setAlmeState: (almeState: AlmeAppState) => void,\n appConfig: AlmeAppConfig,\n almeApiUtils: AlmeApiUtils,\n history: AlmeResponseExt[]): void {\n useRecursiveTimeout(async () => {\n if (history.length && !almeState.sessionExpired) {\n const curAppState = getCurrentAppState();\n const lastResponse = history[history.length - 1];\n const lastEntryId = lastResponse?.extensionData?.entryId as string | undefined;\n const currentLastEntryId = curAppState?.lastEntryId;\n if (lastEntryId !== currentLastEntryId && lastResponse.responseRevision > 0) {\n const newHistory = await loadAlmeHistory(almeApiUtils);\n const extData = getLastResponseExtensionData(newHistory);\n setAlmeState({\n ...almeState,\n history: newHistory,\n historyLoaded: true,\n lastEntryId: extData?.entryId,\n chatId: extData?.chatId,\n launchQuestion: undefined,\n });\n }\n }\n }, appConfig.lastEntryIdInterval);\n}","import { AlmeMarkdownResponseNext } from '@alme/markdown-ts/AlmeMarkdownResponse';\nimport { AlmeResponseNext } from '@alme/types/response/AlmeResponse';\nimport { LiveChatNotificationExtensionData, LiveChatNotificationResponseNext } from '@alme/types/response/LiveChatNotificationResponse';\n\nexport interface EntryExtensionData {\n /**\n * The entry Id of the response\n */\n entryId: string;\n\n /**\n * Backend session identifier\n */\n chatId: string;\n}\n\nexport interface LiveChatExtensionData extends LiveChatNotificationExtensionData {\n /**\n * Used for appending LiveChat Operator-Joined response with LiveChatStart response\n */\n operatorJoined?: boolean;\n\n /**\n * Used for appending LiveChat Operator-Joined response with LiveChatStart response\n */\n operatorName?: string;\n\n /**\n * Used for getting the survey URL with LiveChatEnd response\n */\n surveyUrl?: string;\n\n /**\n * Used for banner text, when session ends due to timeout (user check moxie function)\n */\n isSessionTimeout?: boolean;\n}\n\n\nexport interface AlmeResponseExt extends AlmeResponseNext, LiveChatNotificationResponseNext {\n /**\n * Entry added through GetHistory Api call or Updated when singly use response are used\n */\n fromHistory? : boolean;\n\n /**\n * Extension data\n */\n extensionData: EntryExtensionData & LiveChatExtensionData;\n}\n\n/**\n * Remove this interface when @alme/mardown-ts is upgraded to latest version\n */\nexport interface AlmeResponseMarkdownInput extends AlmeResponseNext {\n /**\n * text is string instead of string | null\n * @alme/markdown@0.3.0 does not refer @alme/types@2.0.1 like the rest of the appplication\n */\n text: string;\n}\n\nexport interface AlmeMarkdownResponseExt extends AlmeMarkdownResponseNext {\n /**\n * Entry added through GetHistory Api call or Updated when singly use response are used\n */\n fromHistory? : boolean;\n\n /**\n * Extension data\n */\n extensionData: EntryExtensionData & LiveChatNotificationExtensionData;\n}\n\nexport function getLastResponseExtensionData(responses: AlmeResponseExt[]): EntryExtensionData | undefined {\n if(responses.length) {\n return responses[responses.length - 1].extensionData;\n }\n\n return undefined;\n}","import { useEffect, useState } from 'react';\nimport { useIVASetChatStatus, useIVAChatStatus } from '../IVAChatStatusProvider';\n\nexport function useSetChatStatus(\n historyLoaded: boolean,\n hasHistory: boolean,\n isOpen?: boolean,\n isIVAAvailable?: boolean): void {\n const [isChatStatusInitialized, setIsChatStatusInitialized] = useState(false);\n const { initChatStatus } = useIVASetChatStatus();\n const chatStatus = useIVAChatStatus();\n\n useEffect(() => {\n if(!isChatStatusInitialized && historyLoaded) {\n setIsChatStatusInitialized(true);\n initChatStatus({\n ...chatStatus,\n isOpen: !!isOpen,\n isAvailable: !!isIVAAvailable,\n isActive: hasHistory});\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [historyLoaded]);\n}","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/singletonStyleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n \n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[0].oneOf[4].use[1]!../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[0].oneOf[4].use[2]!./styles.css\";\n \n \n\nvar options = {};\n\n;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[0].oneOf[4].use[1]!../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[0].oneOf[4].use[2]!./styles.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React, { useEffect, useState } from \"react\";\n\nimport AlmeApp from \"./components/AlmeApp/AlmeApp\";\nimport { AlmeAppConfig } from \"./alme-config/AlmeAppConfig\";\nimport { defaultTenant } from \"./components/AlmeTenantSelector/AlmeTenants\";\nimport \"./fontAwesome\";\nimport \"./assets/styles/styles.css\";\nimport { ThemeWrapper } from \"./components/AlmeTenantSelector/ThemeWrapper\";\nimport ErrorBoundary from \"./components/ErrorBoundary/ErrorBoundary\";\n\nexport interface AppProps {\n isOpen?: boolean;\n onMinimize?: () => void;\n onClose?: () => void;\n onSessionTimeout?: () => void;\n appConfig: AlmeAppConfig;\n}\n\nconst App: React.FC = (props: AppProps) => {\n const [tenant, setTenant] = useState(defaultTenant);\n const appConfig: AlmeAppConfig = {\n ...props.appConfig,\n clientName: tenant.name.toLowerCase(),\n };\n appConfig.setTenant = setTenant;\n\n useEffect(() => {\n function onResize(): void {\n document.documentElement.style.setProperty(\n \"--vh\",\n `${window.innerHeight}px`,\n );\n document.documentElement.style.setProperty(\n \"--sw\",\n `${document.body.offsetWidth - document.body.clientWidth}px`,\n );\n }\n window.addEventListener(\"resize\", onResize);\n onResize();\n }, []);\n\n /**\n * Theme provider requires a non null value, so assigning default theme if app not initialized\n */\n return (\n \n \n \n \n \n );\n};\n\nexport default App;\n","import React, { ReactElement } from \"react\";\nimport { AlmeAppConfig } from \"./alme-config/AlmeAppConfig\";\nimport defaultConfig from \"./alme-config/appConfigMain\";\nimport App from \"./App\";\nimport { MainAppProps } from \"./types/MainAppProps\";\nimport { Platform } from \"./types/Platform\";\nimport { CBUserMetadata } from \"./types/UserMetadata\";\nimport { defaultTenant } from \"./components/AlmeTenantSelector/AlmeTenants\";\nimport { siteUrl, almeApiHostName, version } from \"./EnvUtils\";\nimport { getBaseSessionId, isCBPlatform } from \"./platform/identifiers\";\n\nimport { getHtmlInputValue } from \"./utils/HtmlUtils\";\n\nimport { isMobileDevice } from \"./components/AlmeUtilities/device-utils\";\n\nconst appVersion = version || defaultConfig.uiVersion;\n\nfunction updateMobileProps(appConfig: AlmeAppConfig) {\n appConfig.isMobile = isMobileDevice();\n if (appConfig.isMobile) {\n appConfig.channel = \"MobileWeb\";\n }\n}\n\nexport function initializeApp(accessKey?: string): ReactElement {\n let platform: Platform = \"UNKNOWN\";\n let isLoggedIn = false;\n const showIvaChatIcon = true;\n const cbPlatform = isCBPlatform();\n const cifId = getHtmlInputValue(\"ivaCifId\") as string || \"\";\n const sessionId = getBaseSessionId();\n isLoggedIn = (cifId && cifId !== \"\")? true:false;\n const userMetadata: CBUserMetadata | undefined = {\n cifId,\n };\n\n if(cbPlatform) {\n platform = \"BANK\";\n }\n\n const main: MainAppProps = {\n apiHostName: almeApiHostName as string,\n isLoggedIn,\n userMetadata,\n showIvaChatIcon,\n platform,\n sessionId,\n };\n\n const appConfig: AlmeAppConfig = {\n ...defaultConfig,\n main,\n webUrl: siteUrl,\n uiVersion: appVersion,\n accessKey: defaultTenant?.value.trim(),\n };\n\n updateMobileProps(appConfig);\n\n\n return ;\n}","export function getHtmlInputValue(id: string): string | undefined {\n const inputElement = document.getElementById(id);\n return inputElement ? (inputElement as HTMLInputElement).value : undefined;\n}\n\nexport function getHtmlCheckBoxValue(id: string): boolean | undefined {\n const inputElement = document.getElementById(id);\n return inputElement ? (inputElement as HTMLInputElement).checked : undefined;\n}","\n\n/**\n * RC Pre-login siteidentifier\n */\nconst dservice = \"dservice\";\n\n /**\n * RC Post-login siteidentifier for Desktop devices\n */\nconst eservice = \"eservice\";\n\n /**\n * RC Post-login siteidentifier for Mobile devices\n */\nconst mservice = \"mservice\";\n\n /**\n * RC Paypal Post-login siteidentifier\n */\nconst eservice_ess = \"eservice_ess\";\n\n /**\n * RC Paypal mobile post-login siteidentifier\n */\nconst mservice_mss = \"mservice_mss\";\n\n /**\n * bank Site identifier\n */\n const bank = \"bank\";\n\n\nexport function getSiteIdentifier(): string | undefined {\n return window._SFDDL && window._SFDDL.pageInfo && window._SFDDL.pageInfo.SiteIdentifier && window._SFDDL.pageInfo.SiteIdentifier.toLowerCase();\n}\n\nexport function getBaseSessionId():string | undefined {\n return window._SFDDL && window._SFDDL.base && window._SFDDL.base.session_id;\n}\n\nexport function isRC(): boolean {\n const siteIdentifier = getSiteIdentifier();\n return (\n siteIdentifier === mservice_mss\n || siteIdentifier === eservice_ess\n || siteIdentifier === mservice\n || siteIdentifier === eservice\n || siteIdentifier === dservice);\n}\n\nexport function isRCLoggedIn(): boolean {\n const siteIdentifier = getSiteIdentifier();\n return (siteIdentifier === mservice_mss || siteIdentifier === eservice_ess || siteIdentifier === mservice || siteIdentifier === eservice);\n}\n\nexport function isRCPostLoginMobile(): boolean {\n const siteIdentifier = getSiteIdentifier();\n return siteIdentifier === mservice;\n}\n\nexport function isCBPlatform(): boolean {\n const siteIdentifier = getSiteIdentifier();\n return siteIdentifier === bank;\n}","const LaunchIva = \"LaunchIva\";\nconst SwitchAcctIva = \"SwitchAcctIva\";\nconst ActiveCCSessonIVA = \"ActiveCCSessonIVA\";\nconst ManageAcctIva = \"ManageAcctIva\";\nconst DeepLinkReqCCTR = \"DeepLinkReqCCTR\";\nconst DeepLinkRespIva = \"DeepLinkRespIva\";\n\nexport default {LaunchIva, SwitchAcctIva, ActiveCCSessonIVA,ManageAcctIva,DeepLinkReqCCTR,DeepLinkRespIva};","import { ClientCommunicator } from \"@alme/post-message-api/ClientCommunicator\";\n\ninterface ClientCommunicatorMap {\n source: string | undefined;\n clientCommunicator: ClientCommunicator;\n}\n\nconst clientCommunicators: Array = [];\n\nfunction getClientCommunicator(allowedOrigins: string[], source?: string): ClientCommunicator {\n let clientCommunicatorMap = clientCommunicators.find(c => c.source === source);\n if(!clientCommunicatorMap) {\n clientCommunicatorMap = {\n source,\n clientCommunicator: new ClientCommunicator(allowedOrigins, source),\n };\n clientCommunicators.push(clientCommunicatorMap);\n }\n\n return clientCommunicatorMap.clientCommunicator;\n}\n\nexport { getClientCommunicator };","import { Origin } from \"../utils/UrlUtils\";\nimport { AlmeMessage } from \"./AlmePostedMessage\";\n\nexport interface Message extends AlmeMessage {\n /**\n * source. This is a case insensitive value.\n */\n source: 'client' | 'Client' | 'nit' | 'NIT' | string;\n}\n\nfunction postMessage(message: Message): void {\n const data = {\n message: message,\n };\n\n window.postMessage(JSON.stringify(data), Origin);\n}\n\nexport default postMessage;","import { DefaultTheme } from 'styled-components';\nimport defaultTheme from './defaultTheme';\n\nconst bpTheme: DefaultTheme = {\n ...defaultTheme,\n link: '#007833',\n button: {\n ...defaultTheme.button,\n text: '#007833',\n background: '#007833',\n },\n radio: {\n ...defaultTheme.radio,\n inactiveBorder: '#007833',\n border: '#007833',\n background: '#007833',\n },\n field: {\n focus: '#007833',\n label: '#007833',\n icon: '#007833',\n },\n};\n\nexport default bpTheme;","import { DefaultTheme } from \"styled-components\";\n\nconst defaultTheme: DefaultTheme = {\n link: '#000e3e',\n fontFamily: '\"Open Sans\", Arial, Helvetica, sans-serif',\n hoverBackground: '#EEF6F7',\n AgentConversationBackground:'#e6e6e6',\n button: {\n primary: {\n text: '#FFFFFF',\n hover: '#2A5166',\n },\n secondary: {\n hover: '#EBF0F2',\n },\n text: '#34657F',\n background: '#34657F',\n },\n field: {\n icon: '#34657F',\n focus: '#34657F',\n label: '#34657F',\n },\n switch: {\n background: '#34657F',\n },\n checkbox: {\n background: '#34657F',\n },\n datepicker: {\n selectedDate: '#34657F',\n selectedDateText: '#FFFFFF',\n },\n radio: {\n inactiveBorder: '#000e3e',\n border: '#34657F',\n background: '#34657F',\n focusBackground:'#919296',\n },\n info: '#3e8529',\n danger: '#c63527',\n dangerHeader: '#212121',\n fontSizes: {\n default: '16px',\n headerText: '18px',\n promptText: '14px',\n subText: '12px',\n },\n};\n\nexport default defaultTheme;","import { DefaultTheme } from 'styled-components';\nimport defaultTheme from './defaultTheme';\n\nconst psccTheme: DefaultTheme = {\n ...defaultTheme,\n link: '#34657f',\n button: {\n ...defaultTheme.button,\n text: '#34657f',\n background: '#34657f',\n },\n radio: {\n ...defaultTheme.radio,\n inactiveBorder: '#34657f',\n border: '#34657f',\n background: '#34657f',\n },\n field: {\n focus: '#34657f',\n label: '#34657f',\n icon: '#34657f',\n },\n};\n\nexport default psccTheme;","import { ConsoleLogger, defaultLogLevel, UiLogLevel } from './../Logger';\n\nexport function getLogger(uiLogLevel?: UiLogLevel): ConsoleLogger {\n const logLevel = uiLogLevel || defaultLogLevel;\n return ConsoleLogger.getInstance(logLevel);\n}","\nexport const callIfFunction = (func: ((...params: unknown[]) => unknown) | undefined, ...args: unknown[]): void => {\n if(typeof func === \"function\") {\n func(...args);\n }\n};","export function initializedPromise(callback: () => boolean, errorString: string, intervalInMs: number, times: number): Promise {\n let count = 0;\n function checkIfLoaded(resolve: () => void, reject: (reason?: string) => void): void {\n if(count === times) {\n reject(errorString);\n return;\n }\n if(callback()) {\n resolve();\n } else {\n count += 1;\n setTimeout(() => checkIfLoaded(resolve, reject), intervalInMs);\n }\n }\n\n return new Promise((resolve, reject) => {\n checkIfLoaded(resolve, reject);\n });\n }","import { siteUrl } from '../EnvUtils';\n\n/**\n * Origin - required for mocking window.location.origin in unit tests\n */\n const Origin = window.location.origin;\n\n /**\n * Url path name\n */\n const PathName = window.location.pathname;\n\n const isRelativePath = (url: string) => url.charAt(0) === \"/\" || (url.substring(0, 2) === \"./\") || (url.substring(0, 3) === \"../\");\n\n const removeSubdomain = (domain: string) => {\n let urlSubdomains = domain.replace(/[^.]/g, \"\").length;\n\n //remove subdomains while they are still present in either url\n while (urlSubdomains > 1) {\n const first = domain.split('.')[0];\n domain = domain.replace(first, \"\"); //remove domain name\n domain = domain.substring(1); //remove '.'\n urlSubdomains--; //dec for loop\n }\n\n return domain;\n };\n\n const gettopdomain = () => {\n const regex = /^(?:https?:\\/\\/)?(?:[^@/\\n]+@)?(?:www\\.)?([^:/?\\n]+)/;\n const host = regex.exec(window.location.host);\n let domain = '';\n if(host){\n if (host[1][host[1].length - 1] === \".\") {\n host[1] = host[1].substring(0, host[1].length - 1);\n }\n domain = removeSubdomain(host[1]);\n }\n return domain;\n };\n\n/**\n * @param url \n */\nfunction isExternal(url: string): boolean {\n\n const regex = /^(?:https?:\\/\\/)?(?:[^@/\\n]+@)?(?:www\\.)?([^:/?\\n]+)/;\n\n try {\n //check for same-path traversal\n if (isRelativePath(url)) {\n return false;\n }\n\n //initial 'easy' parse\n const host = regex.exec(window.location.host);\n let domain = regex.exec(url);\n\n //check for protocol-relative url, remove slashes and rerun regex\n if (url.substring(0, 2) === \"//\") {\n url = url.replace(\"//\", \"\");\n domain = regex.exec(url);\n }\n\n if (domain && host) {\n if (domain[1][domain[1].length - 1] === \".\") {\n domain[1] = domain[1].substring(0, domain[1].length - 1);\n }\n\n if (host[1][host[1].length - 1] === \".\") {\n host[1] = host[1].substring(0, host[1].length - 1);\n }\n\n domain[1] = removeSubdomain(domain[1]);\n host[1] = removeSubdomain(host[1]);\n\n //compare domains\n return (host[1] !== domain[1]);\n }\n } catch (ex) { console.log(ex); }\n //unrecognized url, assume external\n return true;\n}\n\nfunction getQueryParameterByName(name: string, url = window.location.href): string | null {\n const regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),\n results = regex.exec(url);\n if (!results) return null;\n if (!results[2]) return '';\n return decodeURIComponent(results[2].replace(/\\+/g, ' '));\n}\n\nfunction getSurveyUrl(surveyUrl: string, isLoggedIn: boolean, chatId: string, jsSessionId: string): string {\n const chatType = isLoggedIn ? \"postlogin\" : \"prelogin\";\n return getCompleteSurveyUrl(surveyUrl, `?chattype=${chatType}&chatid=${chatId}&icon=sync1&turl=${siteUrl}/Conversationhistory.html?JsSessionId=${jsSessionId}&parent=${siteUrl}/`);\n}\n\nfunction getCompleteSurveyUrl(surveyUrl: string, queryParameters: string): string {\n return `${surveyUrl}${queryParameters}`;\n}\n\nexport { isExternal, Origin, PathName, getQueryParameterByName, getSurveyUrl, getCompleteSurveyUrl, gettopdomain };","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"/* ess platform fix*/\\n#nit-alme-window-root .radio-group label::before, \\n#nit-alme-window-root .radio-group label::after {\\n box-sizing: content-box;\\n}\\n#nit-alme-window-root .radio-group label::before {\\n content: none;\\n}\\n\\n/* AppContainer.ts (Setpay bnpl tenant fix) */\\nbody > div#alme-ui-root > div#nit-alme-window-root {\\n right: calc(var(--sw) + 16px);\\n}\\n\\nbody > div#alme-ui-root > button#launchIvaBtn {\\n right: calc(var(--sw) + 16px);\\n}\\n\\n@media screen and (min-width: 0) and (max-width: 600px) {\\n body > div#alme-ui-root > div#nit-alme-window-root {\\n right: 0;\\n }\\n}\\n\\n#alme-survey-dialog input[type=\\\"radio\\\"] {\\n margin: 0;\\n padding: 0;\\n width: 0;\\n}\\n\\n/* Control styles fix */\\n\\np[id^='syf-help-text-']:empty {\\n display: none;\\n}\\n\\ndiv#nit-alme-window-root input#alme-message-input-box:focus,\\ndiv#nit-alme-window-root .iva-text-input-field:focus{\\n box-shadow: none; \\n outline: none;\\n border: none;\\n}\\n\\ndiv#nit-alme-window-root img{\\nmax-width: 40px !important;\\n}\\n\\ndiv#nit-alme-window-root .modalsurveydialog div {\\n margin: 0px !important; \\n padding: 0px !important;\\n overflow: inherit !important;\\n}\\n\\n/* FMPLTableStyle styles */\\n\\ndiv#nit-alme-window-root .FMPLTableStyle {\\n width: 100% !important;\\n}\\ndiv#nit-alme-window-root .FMPLTableStyle tbody tr {\\n background-color:unset !important;\\n}\\ndiv#nit-alme-window-root .FMPLTableStyle tbody tr:nth-child(even) {\\n background-color:unset !important;\\n}\\n\\ndiv#nit-alme-window-root .FMPLTableStyle th,.FMPLTableStyle td {\\n padding: 0px !important;\\n}\\n\\ndiv#nit-alme-window-root .FMPLTableStyle td {\\n font-weight: unset !important;\\n}\\n\\ndiv#nit-alme-window-root .FMPLTableStyle b {\\n font-weight: bold !important;\\n}\\n/* Transmit container styles */\\n\\ndiv#nit-alme-window-root #transmitContainer header {\\n all: unset;\\n}\\n\\ndiv#nit-alme-window-root label {\\n outline: none !important;\\n}\\nbutton[data-object=\\\"button\\\"] {\\n font-family: inherit;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/assets/styles/styles.css\"],\"names\":[],\"mappings\":\"AAAA,oBAAoB;AACpB;;EAEE,uBAAuB;AACzB;AACA;EACE,aAAa;AACf;;AAEA,6CAA6C;AAC7C;EACE,6BAA6B;AAC/B;;AAEA;EACE,6BAA6B;AAC/B;;AAEA;EACE;IACE,QAAQ;EACV;AACF;;AAEA;EACE,SAAS;EACT,UAAU;EACV,QAAQ;AACV;;AAEA,uBAAuB;;AAEvB;EACE,aAAa;AACf;;AAEA;;EAEE,gBAAgB;EAChB,aAAa;EACb,YAAY;AACd;;AAEA;AACA,0BAA0B;AAC1B;;AAEA;EACE,sBAAsB;EACtB,uBAAuB;EACvB,4BAA4B;AAC9B;;AAEA,0BAA0B;;AAE1B;EACE,sBAAsB;AACxB;AACA;EACE,iCAAiC;AACnC;AACA;EACE,iCAAiC;AACnC;;AAEA;EACE,uBAAuB;AACzB;;AAEA;EACE,6BAA6B;AAC/B;;AAEA;EACE,4BAA4B;AAC9B;AACA,8BAA8B;;AAE9B;EACE,UAAU;AACZ;;AAEA;EACE,wBAAwB;AAC1B;AACA;EACE,oBAAoB;AACtB\",\"sourcesContent\":[\"/* ess platform fix*/\\n#nit-alme-window-root .radio-group label::before, \\n#nit-alme-window-root .radio-group label::after {\\n box-sizing: content-box;\\n}\\n#nit-alme-window-root .radio-group label::before {\\n content: none;\\n}\\n\\n/* AppContainer.ts (Setpay bnpl tenant fix) */\\nbody > div#alme-ui-root > div#nit-alme-window-root {\\n right: calc(var(--sw) + 16px);\\n}\\n\\nbody > div#alme-ui-root > button#launchIvaBtn {\\n right: calc(var(--sw) + 16px);\\n}\\n\\n@media screen and (min-width: 0) and (max-width: 600px) {\\n body > div#alme-ui-root > div#nit-alme-window-root {\\n right: 0;\\n }\\n}\\n\\n#alme-survey-dialog input[type=\\\"radio\\\"] {\\n margin: 0;\\n padding: 0;\\n width: 0;\\n}\\n\\n/* Control styles fix */\\n\\np[id^='syf-help-text-']:empty {\\n display: none;\\n}\\n\\ndiv#nit-alme-window-root input#alme-message-input-box:focus,\\ndiv#nit-alme-window-root .iva-text-input-field:focus{\\n box-shadow: none; \\n outline: none;\\n border: none;\\n}\\n\\ndiv#nit-alme-window-root img{\\nmax-width: 40px !important;\\n}\\n\\ndiv#nit-alme-window-root .modalsurveydialog div {\\n margin: 0px !important; \\n padding: 0px !important;\\n overflow: inherit !important;\\n}\\n\\n/* FMPLTableStyle styles */\\n\\ndiv#nit-alme-window-root .FMPLTableStyle {\\n width: 100% !important;\\n}\\ndiv#nit-alme-window-root .FMPLTableStyle tbody tr {\\n background-color:unset !important;\\n}\\ndiv#nit-alme-window-root .FMPLTableStyle tbody tr:nth-child(even) {\\n background-color:unset !important;\\n}\\n\\ndiv#nit-alme-window-root .FMPLTableStyle th,.FMPLTableStyle td {\\n padding: 0px !important;\\n}\\n\\ndiv#nit-alme-window-root .FMPLTableStyle td {\\n font-weight: unset !important;\\n}\\n\\ndiv#nit-alme-window-root .FMPLTableStyle b {\\n font-weight: bold !important;\\n}\\n/* Transmit container styles */\\n\\ndiv#nit-alme-window-root #transmitContainer header {\\n all: unset;\\n}\\n\\ndiv#nit-alme-window-root label {\\n outline: none !important;\\n}\\nbutton[data-object=\\\"button\\\"] {\\n font-family: inherit;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n"],"names":["siteUrl","process","almeApiHostName","version","_process$env$REACT_AP","split","DefaultChatPosition","DefaultChatIconPosition","IVAChatStatusContext","React","isAvailable","isOpen","isActive","chatPosition","chatIconPosition","noop","IVASetChatStatusContext","initChatStatus","ivaChatStatus","openChat","closeChat","minimizeChat","positionChat","topRight","topLeft","bottomRight","bottomLeft","positionChatIcon","setInternalMinimizeChatHook","hook","useIVAChatStatus","useContext","useIVASetChatStatus","IVAChatStatusProvider","_ref","children","chatStatus","setChatStatus","useState","onMinimizeChatHook","useRef","ivaSetChatStatus","current","callIfFunction","Provider","value","ConsoleLogger","constructor","loggingLevel","this","error","message","_len","arguments","length","optionalParams","Array","_key","console","warn","_len2","_key2","info","_len3","_key3","infoTrace","title","groupCollapsed","_len4","_key4","log","trace","groupEnd","debug","_len5","_key5","_len6","_key6","_ConsoleLogger","instance","getInstance","defaultLogLevel","AlmeAppUtilsBase","almeState","setAlmeState","appConfig","logger","getLogger","UiLogLevel","savedAppState","CookieLoader","updateAppState","state","savedState","lastEntryId","isLoggedIn","clientSessionId","sessionMessages","customerCheckStatusMessage","sessionExpired","lastActivityTime","sessionId","cifId","UpdateStorage","getCurrentAppState","appState","GetStorage","ex","window","location","host","indexOf","cookieOptions","domain","gettopdomain","DialogTitleContainer","styled","div","withConfig","displayName","fontWeights","semiBold","DialogContent","DialogFooter","DialogButton","Button","DialogTitle","props","role","id","Overlay","Container","ModalWrapper","wrapperProps","noBackground","theme","AgentConversationBackground","height","header","className","footer","dialogProps","ariaLabel","ariaLabelledBy","ariaDescribedBy","Object","assign","tabIndex","TabTrap","defaultTenant","label","name","defaultTheme","platform","tenants","bpTheme","psccTheme","isPSCCTenant","tenant","tenantThemes","Promise","resolve","undefined","REACT_APP_VISTA_PLATFORM","then","themeModule","default","ThemeWrapper","themeLoadInitiated","ThemeProvider","savedTestPageState","LocalStorageLoader","updateTestPageState","getTestPageState","testPageState","defaultTestPageState","loginParams","userMetadata","accountNumber","primaryName","zipCode","accountType","launchSettings","launchPointName","launchParameter","SFDDL","JSON","stringify","SFDDLObject","PSCCNavResponse","PSCCNavResponseObject","IconSuffixRegex","IconNameWithoutSuffix","iconTpe","replace","MinimizeButton","CloseButton","SendIcon","ExternalLinkIcon","ThumbUpIconSolid","ThumbUpIconLight","ThumbDownIconSolid","ThumbDownIconLight","CommentIcon","OldScrollIcon","ChevronRight","ChevronLeft","ChevronUp","ChevronDown","ArrowLeft","ArrowRight","IconWrapper","size","color","Icon","PlainIcon","FontAwesomeIcon","icon","span","iconTypes","iconType","StateIcon","iconNameWithoutSuffix","selected","dateRegex","parseDate","Date","substring","getCurrentDate","date","getFullYear","getMonth","getDate","TwoDigitFormat","num","numStr","formatdate","dateAddDays","amount","addDays","getStartDate","minDays","hasParent","dependentDateValue","isNaN","setFullYear","setDate","getEndDate","maxDays","parentDate","parentDependentDays","hasChild","childDate","maxDate","parseInputDate","test","dateParts","month","day","year","commonDateValidations","isRequired","minDate","format","commonDateFieldValidation","dateString","isMobileDevice","isMobile","EscapeKey","EnterKey","Keydown","focusMessageBox","messageBox","document","getElementById","CommonElementId","MessageInputBox","focus","onEnterKeyPress","evt","onKeyPress","key","onKeyEscape","element","onEscapeFn","addEventListener","e","preventDefault","doScroll","ref","scrollIntoView","behavior","block","observeMutations","elementSelector","callback","options","querySelector","observer","MutationObserver","observe","focusChatIcon","launchButton","AlmeLaunchButton","createSvgImageUrl","btoa","config","autoAddCss","library","add","faPaperPlane","faTimes","faMinus","faUser","faExternalLink","faChevronUp","faChevronDown","faCalendarAlt","faCalendarExclamation","faThumbsUp","faThumbsDown","faThumbsUpSolid","faThumbsDownSolid","faCommentAltLines","faUserClock","faUserCheck","faUserTimes","faScrollOld","faChevronRight","faChevronLeft","faArrowLeft","faArrowRight","faCheck","readyError","Boolean","hostname","exec","async","testPageRoot","AlmeTestPage","ReactDOM","Suspense","fallback","initializedPromise","siteIdentifier","getSiteIdentifier","mainElements","getElementsByTagName","bodyElement","body","almeDiv","createElement","setAttribute","appendChild","mainApp","initializeApp","catch","renderAlmeUi","navigator","serviceWorker","ready","registration","unregister","reason","returningToMsg","start","main","text","joined","sub","ended","user","agent","operatorLefttext","timeout","defaultRepName","apiHostName","appAccessKey","showIvaChatIcon","webUrl","allowedOrigins","origin","lastEntryIdInterval","headerText","isMinimizeEnabled","isCloseEnabled","isEmailTranscriptEnabled","liveChatHeaderText","history","errorResponse","entryId","expiredResponse","submitButtonText","maxInputLength","userTypingEventDelay","SystemErrorResponse","expiredErrorResponse","zIndex","mobileBreakpoint","uiVersion","channel","liveChatControls","buttonText","defaultOperatorName","typingMessageText","typingMessageDelay","dialog","bodyText","buttons","declineButtonText","acceptButtonText","liveChatOperatorResponse","useUniqueChatIcons","openNewIconTitle","userCheckStatus","timeoutInSec","liveChatUserResponse","liveChatBanner","liveChatBannerConfig","notificationApi","pollForNotifications","pollForLiveChat","notificationInterval","liveChatInterval","connected","disconnected","sessionTimeoutInMs","sessionTimeoutWarningPeriodInMs","button","onClick","MinimizeContainer","almeAppConfig","IconButton","type","onMinimizeClick","focusProps","AlmeMinimizeUtils","isRCPostLoginMobile","postMessage","source","LoadingEllipseContainer","background","UserCardContainer","AgentCardContainer","AgentCardMessageContainer","AgentCardBubbleContent","fontSizes","TextContainer","AgentText","SectionHeader","h6","UserText","BannerContainer","ContentContainer","ContentHeader","ContentBody","iconColor","responseRevision","mainTextColor","mainText","subText","isBeginLiveChatResponse","response","responseActions","some","x","Name","withTheme","toString","extensionData","operatorJoined","_props$theme","repName","operatorName","_props$theme2","fromHistory","AlmeLiveChatBannerTemplate","SessionEnd","isOperatorJoinedResponse","MessageOrigin","isOperatorLeftResponse","isOperatorLeftOrJoinedResponse","isAgentSessionEndResponse","SessionEndReason","storageLoader","Loaders","sessionDataLoader","CookieAlmeSessionDataLoader","ConsumerCenterNavigationLinkRegex","AlmeApiUtils","almeApi","liveChatNotificationApi","almeSessionData","super","almeSession","almeMinimizeUtils","GetAlmeSessionData","AlmeSessionDataUtils","CreateAlmeSessionData","getErrorResponse","userId","displayLinkCollection","Sections","Metadata","navUrl","deferredAppCall","maskedInput","isReverted","chatId","MessageIndex","addPageAwareness","parameters","loggedInState","IsLoggedIn","ClientSessionId","context","createPageAwarenessObject","deepmerge","addRequestParams","UiVersion","jsSessionId","Context","CurrentUrl","AbsolutePath","href","Protocol","protocol","Host","HostName","Port","port","Uri","pathname","Query","search","Fragment","hash","Origin","sendErrorResponse","appendToHistory","validateAlmeSessionData","sendAlmeInput","input","displayText","AlmeUserId_FromUI","requestParams","accessKey","request","ConverseRequestDetailsNext","SendInputAsync","submitAlmeInput","submitUnitRequest","unitLink","apiParams","unitRequest","RequestUnitRequestDetailsNext","UnitUID","DisplayText","SendRequestUnitAsync","loadAlmeHistory","historyRequest","HistoryRequestDetailsNext","responses","GetHistoryAsync","sendAppEvent","eventName","appEventRequest","AppEventRequestDetailsNext","SendAppEventAsync","submitFormAppEvent","submitReportingEvent","variableName","variableValue","ReportingEventRequestDetailsNext","SendReportingEventAsync","getAlmeConfiguration","configRequest","ConfigurationRequestDetailsNext","GetConfigurationAsync","sendReportingEvent","userData","reportingEventParams","VariableName","VariableValue","now","onDisplayUrlLinkClick","link","NavigationType","urlNavigation","UrlAddress","onDisplayLinkClick","TargetType","InputText","clearSessionData","ClearAlmeSessionData","createNewSessionData","almeResponse","isArray","UpdateAlmeSessionData","_response$extensionDa","isLiveChatConnected","MessageSource","entryExtensionData","push","getLiveChatNotifications","LiveChatNotificationRequestDetailsNext","GetPendingMessagesAsync","appendLiveChatToHistory","updateOperatorNameInBeginLiveChatResponse","operatorJoinedResponse","find","i","_operatorJoinedRespon","OperatorData","updateOperatorNameInSessionEndResponse","resp","sessionEndResponse","newResponseLength","historyLength","found","_resp$i$extensionData","updateSessionEndResponseWhenTimeout","isLiveChatSessionTimeout","isSessionTimeout","lastResponse","isConsumerCenterLink","url","navigationType","requestConsumerCenterNavigation","minimizeInMobileView","open","regexarray","navKey","MessageType","DeepLinkReqCCTR","sessionInfo","targetPageKey","windowWidth","innerWidth","documentElement","clientWidth","setImmediate","endConversation","EndConversationRequestDetailsNext","EndConversationAsync","createApiSetting","defaultApiSettings","LiveChatNotificationApiSettingsBase","AlmeApiHostname","AlmeApiProtocol","AlmeApiRequestTimeout","httpHandler","HttpHandlerBase","AlmeApi","AlmeApiBase","AddAuthHeader","requestInit","newHeaders","Headers","headers","append","bmak","get_telemetry","createAlmeApi","almeApiSettings","createLiveChatNotificationApi","LiveChatNotificationApiBase","PropertyChanged","src","dest","changed","srcKeys","keys","destKeys","CloseIcon","DialogBody","ConfirmModalDialog","ModalDialog","CloseDialogHeader","yesLabel","noLabel","onYes","onNo","onClose","description","footerElement","returnFocusToElement","useEffect","buttonType","CloseContainer","TerminateLiveChat","apiUtils","openConfirmDialog","setOpenConfirmDialog","handleClickOpen","isSessionExpired","onCloseClick","activeElement","setIsDialogOpen","ConfirmDialog","handleClose","handleCancelClose","setTimeout","_returnFocusToElement","AlmeCloseUtils","hasPreviousConversation","isInitialAppEventsSent","ArrowRightLeftContainer","SwitchChatPositionButton","chatPositionPrefix","chatPositionSuffix","chatPostionFunc","toLowerCase","SwithPositionIcon","alt","HeaderContainer","Heading","h1","HeaderIconContainer","canShowSwitchPositionButton","mobileBreakPoint","showSwitchPositionButton","setShowSwitchPositionButton","onResize","showSwitchButton","removeEventListener","AlmeMinimize","AlmeClose","isLivechatSurveyLoaded","img","SydneyAvatar","iconUrl","UserAvatar","AgentCardBase","UserCardBase","AgentCardBubble","UserCardBubble","_ref2","StyledRadioGroup","RadioGroup","surveyInput","setSurveyInput","inputMetaData","Body","RadioButtons","radioOptions","managefocus","modalElement","focusableElement","querySelectorAll","noButtonElement","dailogContentElement","focusedOptionElement","handleTabKeyPress","event","shiftKey","handleKeySelected","forEach","Header","Title","style","backgroundColor","handleSurveySubmit","inputText","trim","onSubmitSurvey","Footer","SubmitLink","handleSurveyCancel","CancelLink","onChange","option","map","index","Radio","createSurveyAppEventParams","actionParams","surveyUnitLabel","SurveyUnitLabel","AlmeSurveyCard","StyledButtonDiv","StyledButton","_props$focusProps","surveyState","setSurveyState","disabled","isLastResponse","showSurveyDialog","yesSelected","noSelected","historyYesSelected","sessionStorage","getItem","historyNoSelected","ariaPressedYes","ariaPressedNo","responseAction","MetaData","InlineSurveyLinks","handleYesClick","setItem","surveyParams","Yes","onSendFormAppEvent","handleNoClick","No","AlmeSurveyDialog","Survey","NoSurvey","submitSurvey","isSurveyCancelled","gradingReason","Values","val","DisplayLabel","SubmitValue","defaultOption","o","htmlProps","TitleText","Select","valid","placeholder","isDisabled","rightIconOpen","rightIconClosed","placement","LAUNCHPICKERINPUT","LAUNCHDATEPICKERINPUT","LazyDatepickerControl","loaded","SyfLoader","setError","MinDays","NaN","MaxDays","AlmeLoader","errorObj","onBlur","overlay","showCalendar","noCalendar","showMonthDropdown","showYearDropdown","dropdownMode","shouldCloseOnSelect","adjustDateOnChange","FormWrapper","ButtonWrapper","StyledButtonDatePicker","promptText","formSubmitParams","widgetSelection","endType","WidgetSelection","formValue","setFormValue","defaultValue","Constants","dropdownResponseAction","initialValue","InitialValue","ReferenceDate","getDefaultValue","onSubmit","_props$responseAction","ReturnAppEventName","String","onSubmitFormAppEvent","onCancel","_props$responseAction2","useCallback","formInputs","comboboxElement","AlmeDropdown","InlineDatepicker","getInlineFormResponseAction","_response$responseAct","respAction","ErrorBoundary","hasError","getDerivedStateFromError","componentDidCatch","errorInfo","render","PromptText","ControlWrapper","isrequired","inputMetadata","required","optionalText","startDate","endDate","isvalid","labeltext","setValue","getOption","MatchFail","target","regexStr","validation","errText","RegExp","validationtext","matchValue","textAreaProps","maxlength","multiline","Textarea","autoCapitalize","sizeRatio","dynamicHeight","Textfield","width","inputClassName","showMaskedOption","mask","DateInputType","DropdownInputType","RequireField","initializeInputValues","metadata","dataInputs","dataInput","dateSpec","defaultDate","parentId","dependentDateDays","getValue","matchId","matchFailedText","match","textInput","matchInputSpec","matchfailedtext","inputValues","setInputValues","inputChangeParam","values","findIndex","inputValue","splice","changedInputValues","matchInputIndex","matchInput","prompt","controlSpec","v","errorMessage","_inputValues$find","_inputValues$find2","dependentDateId","DatePickerControl","dropdownSpec","DropdownControl","_inputValues$find3","textboxSpec","TextboxControl","handleFormSubmit","isValid","showError","newInputValues","activeButton","inputVal","newVal","handleFormCancel","cancelText","FeedbackCategory","DataCollectionPane","chatFormPanes","isCompleted","appEventParams","paneId","formId","feedback","action","category","feedbackAppEventParam","returnAppEventParam","onFeedbackFormSubmit","createResourceUrl","ivaWebUrl","resourceName","scriptUrl","isModule","defer","script","reject","onload","onerror","successCallback","failureCallback","scriptLoads","XmSdk","xmui","scriptLoader","$","all","IGLOO","getBlackbox","getAlmeSessionData","TransmitDialogContent","setIsOpen","setLoaded","iva_transmit_sdk","initialized","loadTransmitSDK","authenticationParams","parse","TransmitStartParams","user_id","authenticationResult","authenticate","onTransmitAuthComplete","startTrasmitWorkflow","isOverlayDataCollectionPane","paneType","overlayDataCollectionResponse","getTranmitStartWorkflowResp","overlayDataCollectionResp","transmitStartWorkflowResp","FeedbackFormOverlay","TransmitFormOverlay","AltLoginAutoNavResponseActionName","AltLoginAutoNavVistResponseActionName","SetAttributes","attrs","stringOrEmpty","submitFormData","formData","form","entries","item","hiddenField","submit","altLoginAutoNav","altLoginAutoNavEservice","appconfig","altLoginPostUrl","AccountType","data","EncryptedUserState","clientId","clientName","transferLoginAccessed","langId","startTime","URL","tokenId","authorizeURI","id_token_hint","idTokenHint","lang","altLoginAutoNavVista","linkText","isLinkEnabled","setDisabled","Link","to","focusableElements","elementFilter","el","hasAttribute","getAttribute","tagName","responseId","isInlineForm","isOverlayForm","responseRef","isInlineFocusable","stimeout","currentFocusableElements","join","filter","clearTimeout","isValidLiveChatOperatorResponse","_response$displayLink","_response$displayLink2","getAgentResponseText","_props$response$exten","html","shouldAutoNav","onTriggerAutoNavUrl","operatorFirstLetter","avatar","OperatorIcon","responseText","getAgentResponse","paintNavUrl","paintUrlLink","navType","urlAddress","buttonProps","onLinkClick","isExternal","urlNavUrl","AutoNavigationType","paintSection","section","Links","sectionIndex","_appConfig","linkIndex","urlLink","OneClickLink","paintDisplayLink","SectionID","LinkNavigationType","UrlUID","getMaskedUserInput","sharedProps","responseTag","dangerouslySetInnerHTML","__html","paintSectionHeaderResponse","displayLinks","sections","HeaderText","AlmeMarkdownProcessor","ConvertAlmeResponse","userResponseRef","agentResponseRef","maskedUserInput","inlineSurveyDialogResponseAction","getSurveyResponseAction","agentResponse","inlineFormResponseAction","altLoginAutoNavResponse","getAltAutoNavResponse","isOverlayResponse","altLoginAutoNavResponseAction","ResponseFocusHandler","AlmeInlineForm","renderInlineForm","reduce","elements","concat","AlmeSurvey","OverlayForm","isValidLiveChatUserResponse","hasUserInput","createLiveChatIconUrl","isValidLiveChatSystemResponse","_response$extensionDa2","_response$extensionDa3","Transient","LiveChatIcon","counter","setCounter","timeoutId","onTimeout","yesButtonText","noButtonText","onYesClick","onNoClick","timeStamp","timeDiff","Math","floor","showDialog","setShowDialog","setAlmeAppState","_sessionDataLoader$Ge","h","addUserCheckStatusResponse","closeDialog","removeUserCheckStatusResponse","onContinueChat","AlmeLiveChatSessionTimeoutPopup","interval","onEndChat","isValidLiveChatSessionEndResponse","sessionEndReason","sessionEndConfig","marginTop","danger","dangerHeader","CloseSurveyLink","SurveyDialogContent","SurveyIframe","iframe","IframeContainer","handleSurveyClose","onCloseSurvey","surveyURL","opacity","hasChatEnded","sessionTimedout","hasSurveyUrl","surveyUrl","isLiveChatSurveyResponse","AlmeOverlaySurveyDialog","handleLiveChatSurveyClose","markUsedResponse","_props$response","isChatResponse","isLiveChatResponse","isOperatorResponse","isUserResponse","isSystemResponse","isSessionEndResponse","isBeginLiveChat","isErrorResponse","IsError","isUserCheckStatusResponse","isLiveChatUserCheckStatusResponse","isNewResponse","AlmeLiveChatUserResponse","AlmeLiveChatOperatorResponse","AlmeLiveChatSystemResponse","AlmeLiveChatStartResponse","AlmeLiveChatEnd","AlmeLiveChatCheckUserStatusResponse","AlmeLiveChartSurveyResponse","HistoryContainer","_props$history","historyRef","_props$focusProps2","prevResponse","AlmeLiveChatResponse","AlmeResponse","isDialogOpen","_prevResponse$extensi","isTransient","isPrevTransient","Input","colors","black","InputWrapper","heavyGrey","field","MessageBoxWrapper","CharLimitDisplay","ButtonText","onSend","onSendTypingEvent","maxTextLength","userInput","setInput","isTyping","setIsTyping","inputRef","timer","onSubmitInput","inputProps","onKeyDown","stopPropagation","maxLength","readOnly","sendButtonLabel","submitFunc","AlmeInput","LaunchIconBtn","position","getChatIconPlacementStyles","launchIconUrl","resumeIconUrl","themeColor","createLaunchIconUrl","createResumeIconUrl","dataReason","dataType","dataObject","isMinimized","renderLaunchPointIcon","isHistoryLoaded","hasHistory","isChatOpen","historyLoaded","_window$NITGlobal","NITGlobal","clientAvailable","canShowLaunchPointIcon","AlmeLaunchPoint","isTestPage","setMessage","LaunchIconButton","handleClick","launchPointParams","isTestSite","getLaunchPointParams","LaunchIva","AppContainer","fontFamily","getChatPlacementStyles","GrowStyles","entering","transform","entered","exiting","exited","defaultStyles","transition","duration","Transition","in","show","mountOnEnter","unmountOnExit","cloneElement","IvaSessionTimeout","_getAlmeSessionData","dialogState","setDialogState","openSurvey","setOpenSurvey","setFocusElement","onSystemSessionTimeout","onSessionTimeout","onUserSessionTimeout","useUpdateSessionTimeoutDialogState","isSurveyOpen","currentTime","timelapse","sessionTimeoutWarningInMs","sessionTimeoutPeriodInMs","warningPeriod","timeoutRemainder","warningRemainder","timerId","round","onUserSessionRefresh","getSurveyUrl","SessiontTimeoutUtils","getExpiredResponse","_this$almeSession","updateUserLoggedInState","almeApiUtils","userLogInState","_appConfig$main$userM","_appConfig$main$userM2","loginStateResponse","UserObj","PageInfo","_SFDDL","AlmeUserID_PreLogin","LaunchPointName","LaunchParameter","LaunchType","NewSessionReason","createLogoutParams","logoutEvent","sendLoginStateEvents","_props$appConfig$live","_props$appConfig$live2","_props$appConfig$live3","_props$appConfig$live4","_props$appConfig$live5","_props$appConfig$live6","onEndClick","onCancelClick","getCommonLoadingStyles","LoaderDots","TypingMesssageContainer","Message","typingMessage","ControlContainer","handleEndChatClick","AlmeLiveChatOperatorTypingResponse","AlmeEndLiveChatDialog","cancelDialogClick","endChat","delay","savedCallback","cancel","tick","ret","launchParams","welcomeResponse","getLastResponseExtensionData","setHistory","appEventResponses","curHistory","isLoggedOut","secureMessagingLaunchParameter","proactiveLaunchUrls","launchUrl","PathName","endsWith","configSettings","almeConfigs","configurationSettings","prev","Key","Value","isRCAvailable","isPSCCAvailable","clientsJSON","clients","initializeAlmeApp","setAppConfig","propsIsOpen","insertEChatSesionInfo","insertEchatSessionInfoCalled","setEchatSessionInfoCalled","getConfiguration","merge","ClientSessionTimeout","ivaAvailability","lastHistoryItem","hasPrevConversation","sendAutoLaunchMessage","launchQuestion","MessageHandlerBase","appEvent","createApiParams","onAppEventSuccess","bind","onAppEventFailure","appParameters","pageName","accountId","appEventResponse","responseEntryId","SwitchAccountHandler","handle","saveMessage","createSessionMessage","_message$userData","switchAccountMesssage","platformSessionId","platformMessageKey","platformMessage","messages","addSessionMessage","LaunchIvaHandler","ContinueSessionHandler","ManageAccountsHandler","DeepLinkRespHandler","restrictedMsg","_message$userData2","RestrictionMessage","RestrictionPhoneNumber","phoneNumber","AlmeMessageHandlerUtils","setDelayPostMessageHandle","Handle","eventData","HandleMessage","messageHandler","SwitchAcctIva","ActiveCCSessonIVA","ManageAcctIva","DeepLinkRespIva","useDelayPostMessageHandler","apiSettings","handleMessage","processLastResponse","processLiveChatStartAction","processLiveChatEndAction","canShowApp","currentAppState","initialAlmeState","isInitialized","isAppEventsSent","setAlmeStateWrapper","changes","prevState","curState","prop","Map","ObjectDiff","appConfigProp","appConfigState","setAppConfigState","updateStateFromProp","apiSetting","MarkUsedResponse","setAlmeAppConfig","onMinimize","almeCloseUtils","sessionTimeoutUtils","usePostMessageListener","almeMessageHandlerUtils","messageHandleCallback","clientCommunicator","getClientCommunicator","callbackId","addAlmeMessageListener","removeAlmeMessageListener","sendInitialAppEvents","pointOfNeedResponse","sendPointOfNeedAppEvent","initializeAppEvents","updateSessionId","initiator","OnEndChat","OnContinueChat","useRecursiveTimeout","usePollForChat","_lastResponse$extensi","curAppState","newHistory","extData","usePollForHistory","getAppTabIndex","isLastResponseInlineForm","_h$extensionData","hasLivechatSurveyLoaded","isIVAAvailable","isChatStatusInitialized","setIsChatStatusInitialized","useSetChatStatus","Grow","transformOrigin","AlmeHeader","AlmeHistory","AlmeLiveChatControls","AlmeFooter","isLiveChatSurveyLoaded","renderSessionTimeoutDialog","setAttributes","insert","domAPI","insertStyleElement","locals","setTenant","setProperty","innerHeight","offsetWidth","uiLogLevel","AlmeApp","appVersion","defaultConfig","cbPlatform","isCBPlatform","inputElement","getHtmlInputValue","getBaseSessionId","updateMobileProps","App","mservice","bank","pageInfo","SiteIdentifier","base","session_id","clientCommunicators","clientCommunicatorMap","c","ClientCommunicator","radio","inactiveBorder","border","hoverBackground","primary","hover","secondary","switch","checkbox","datepicker","selectedDate","selectedDateText","focusBackground","logLevel","func","args","errorString","intervalInMs","times","count","checkIfLoaded","isRelativePath","charAt","removeSubdomain","urlSubdomains","first","regex","queryParameters","getCompleteSurveyUrl","___CSS_LOADER_EXPORT___","module"],"sourceRoot":""}