{"version":3,"sources":["models/AlmeTheme.ts","personas/mainPersona/config.tsx","components/AlmeMinimize/AlmeMinimizeConfig.tsx","components/AlmeMoreMenu/AlmeMoreMenuConfig.tsx","components/AlmeClose/AlmeCloseConfig.tsx","components/AlmeUtilityBar/AlmeUtilityBarConfig.tsx","components/AlmeHeader/AlmeHeaderConfig.tsx","personas/baseThemeOverrides.tsx","personas/examples/verintTheme.ts","personas/examples/ColorExamples/rainbow.ts","personas/examples/ColorExamples/badContrast.ts","personas/examples/ColorExamples/blackAndWhite.ts","personas/examples/ColorExamples/shades.ts","personas/examples/TypographyExamples/brushScript.ts","personas/examples/TypographyExamples/courierNewScript.ts","personas/examples/TypographyExamples/adjustedTypeSpaced.ts","personas/examples/TypographyExamples/adjustedTypeCompression.ts","personas/examples/TypographyExamples/timesNewRomanScript.ts","personas/examples/ShapeExamples/customShapes.ts","personas/examples/ShapeExamples/everythingIsRounded.ts","personas/examples/ShapeExamples/everythingIsSharp.ts","components/AlmeApp/AlmeAppConfig.tsx","api/AlmeApiUtilsConfig.ts","components/LiveChat/AlmeLiveChatControls/AlmeLiveChatControlsConfig.tsx","components/AlmeThemeModeToggle/AlmeThemeModeToggleConfig.tsx","components/AlmeLaunchTools/AlmeLaunchToolsConfig.tsx","components/AlmeCloseIcon/AlmeCloseIconConfig.tsx","components/AlmeInput/AlmeInputConfig.tsx","images/Koala_opt1.svg","personas lazy /^/.//.*$/ groupOptions: {} namespace object","images/Chat_opt2.svg","images/Person_opt4.svg","components/AlmeResponse/AlmeUserResponse/AlmeUserResponseConfig.tsx","components/ResponseActions/AlmeCtaButton/AlmeCtaButtonConfig.tsx","components/ResponseActions/ChangeTenantConfirmation/ChangeTenantConfirmationConfig.tsx","components/ResponseActions/AlmeSurvey/AlmeSurveyConfig.tsx","components/AlmeResponse/AlmeIvaResponse/AlmeIvaResponseConfig.tsx","components/AlmeResponse/AlmeResponseConfig.tsx","components/AlmeScrollButton/AlmeScrollButtonConfig.tsx","components/AlmeTimeoutWarning/AlmeTimeoutWarningConfig.tsx","components/LiveChat/AlmeLiveChatBanner/AlmeLiveChatBannerConfig.ts","components/LiveChat/AlmeLiveChatResponse/AlmeLiveChatOperatorResponse/AlmeLiveChatOperatorResponseConfig.tsx","components/LiveChat/AlmeLiveChatResponse/AlmeLiveChatSystemResponse/AlmeLiveChatSystemResponseConfig.tsx","components/LiveChat/AlmeLiveChatResponse/AlmeLiveChatUserResponse/AlmeLiveChatUserResponseConfig.tsx","components/LiveChat/AlmeLiveChatResponse/AlmeLiveChatResponseConfig.tsx","components/AlmeHistory/AlmeHistoryConfig.tsx","polyfills/utils.ts","serviceWorker.ts","axeConfig.ts","indexConfig.ts","Logger.ts","utils/PersonaUtils.ts","hooks/useAlmeMessageListener.tsx","components/AlmeApp/AlmeAppState.ts","api/AlmeApiUtils.ts","utils/UrlUtils.ts","api/AlmeApi.ts","components/FocusVisibleStyle.ts","components/AlmeMinimize/AlmeMinimize.tsx","components/AlmeCloseIcon/AlmeCloseIcon.tsx","components/AlmeDialog/AlmeDialog.tsx","components/AlmeDialog/AlmeDialog.styles.ts","components/AlmeClose/AlmeClose.tsx","models/AlmeColorMapping.ts","components/AlmeHeader/AlmeHeader.styles.ts","components/AlmeMoreMenu/AlmeMoreMenu.styles.ts","components/AlmeMoreMenu/AlmeMoreMenu.tsx","components/AlmeUtilityBar/AlmeUtilityBar.styles.ts","components/AlmeUtilityBar/AlmeUtilityBarItem.tsx","components/AlmeUtilityBar/AlmeUtilityBar.tsx","components/AlmeHeader/AlmeHeader.tsx","components/AlmeHistory/AlmeHistory.styles.ts","components/AlmeScrollButton/AlmeScrollButton.styles.ts","components/AlmeScrollButton/AlmeScrollButton.tsx","components/AlmeResponse/AlmeResponse.styles.ts","components/AlmeResponse/AlmeStyledButton/AlmeStyledButton.tsx","components/AlmeResponse/AlmeStyledButton/AlmeStyledButton.styles.ts","components/AlmeGoogleAnalytics/AlmeGoogleAnalyticsUtils.tsx","components/AlmeResponse/AlmeResponseUtils.tsx","components/AlmeResponse/AlmeUserResponse/AlmeUserResponse.tsx","components/AlmeResponse/AlmeUserResponse/AlmeUserResponse.styles.ts","components/ResponseActions/AlmeCtaButton/AlmeCtaButton.tsx","components/ResponseActions/AlmeCtaButton/AlmeCtaButton.styles.ts","components/ResponseActions/AlmeSurvey/AlmeSurveyDialog.tsx","components/ResponseActions/AlmeSurvey/AlmeSurvey.tsx","components/ResponseActions/AlmeSurvey/AlmeSurvey.styles.ts","components/ResponseActions/ChangeTenantConfirmation/ChangeTenantConfirmation.tsx","components/ResponseActions/ChangeTenantConfirmation/ChangeTenantConfirmation.styles.tsx","components/AlmeResponse/AlmeIvaResponse/AlmeIvaResponse.tsx","components/AlmeResponse/AlmeIvaResponse/AlmeIvaResponse.styles.ts","components/AlmeResponse/AlmeResponse.tsx","components/LiveChat/AlmeLiveChatBanner/AlmeLiveChatBanner.styles.ts","components/LiveChat/AlmeLiveChatBanner/AlmeLiveChatBanner.tsx","components/LiveChat/AlmeLiveChatResponse/AlmeLiveChatOperatorResponse/AlmeLiveChatOperatorResponse.styles.ts","utils/ColorUtils.ts","components/LiveChat/AlmeLiveChatResponse/AlmeLiveChatOperatorResponse/AlmeLiveChatOperatorResponse.tsx","components/LiveChat/AlmeLiveChatResponse/AlmeLiveChatUserResponse/AlmeLiveChatUserResponse.tsx","components/LiveChat/AlmeLiveChatResponse/AlmeLiveChatUserResponse/AlmeLiveChatUserResponse.styles.ts","components/LiveChat/AlmeLiveChatResponse/AlmeLiveChatSystemResponse/AlmeLiveChatSystemResponse.tsx","components/LiveChat/AlmeLiveChatResponse/AlmeLiveChatSystemResponse/AlmeLiveChatSystemResponse.styles.ts","components/LiveChat/AlmeLiveChatResponse/AlmeLiveChatResponse.tsx","api/AlmeEnvironmentConfig.ts","components/AlmeTimeoutWarning/AlmeTimeoutWarning.tsx","components/AlmeTimeoutWarning/AlmeTimeoutWarning.styles.ts","utils/ConfigUtils.ts","components/AlmeHistory/AlmeHistory.tsx","utils/iFrameUtils.ts","components/AlmeFooter/AlmeFooter.styles.ts","components/AlmeInput/AlmeInput.styles.ts","components/AlmeInput/AlmeInput.tsx","components/AlmePoweredByLink/AlmePoweredByLink.styles.ts","components/AlmePoweredByLink/AlmePoweredByLink.tsx","components/AlmeDisclaimer/AlmeDisclaimer.tsx","components/AlmeDisclaimer/AlmeDisclaimer.styles.ts","components/AlmeFooter/AlmeFooter.tsx","components/AlmeLaunchPoint/AlmeLaunchPoint.styles.ts","components/AlmeLaunchPoint/AlmeLaunchPoint.tsx","models/AlmeIvaTypeMapping.ts","components/AlmeApp/AlmeApp.styles.ts","components/LiveChat/AlmeLiveChatControls/AlmeEndLiveChatDialog.tsx","components/LiveChat/AlmeLiveChatControls/AlmeLiveChatControls.tsx","components/LiveChat/AlmeLiveChatControls/AlmeLiveChatControls.styles.ts","hooks/useAlmeSessionData.tsx","components/AlmeApp/AlmeAppUtils.ts","components/ResponseActions/AlmeLiveChatStart/AlmeLiveChatStartUtils.ts","components/ResponseActions/AlmeLiveChatEnd/AlmeLiveChatEndUtils.ts","hooks/useAlmeInitialization.ts","hooks/useRecursiveTimeout.ts","api/AlmeSessionUtils.ts","components/AlmeApp/AlmeApp.tsx","hooks/useSetAlmeStateCallback.tsx","hooks/useInlineIvaStyles.ts","hooks/useSetDefaultLoggingLevel.tsx","hooks/useLiveChatConnected.ts","hooks/useResetIvaCallback.ts","hooks/useLaunchIvaCallback.ts","hooks/usePollForNotifications.tsx","hooks/usePollForChat.tsx","hooks/useSyncLastEntry.tsx","VerintIVAUI.tsx","components/AlmeThemeModeToggle/AlmeThemeModeToggle.tsx","components/AlmeThemeSelector/AlmeThemeSelector.tsx","components/AlmeStyleTools/AlmePaletteTool/AlmePaletteTool.tsx","components/AlmeStyleTools/AlmeThemeTool/AlmeThemeTool.tsx","components/AlmeConfigFormControl/AlmeConfigFormControl.tsx","components/AlmeInput/AlmeInputConfigTool.tsx","components/AlmePoweredByLink/AlmePoweredByLinkConfigTool.tsx","components/AlmeFooter/AlmeFooterConfigTool.tsx","components/AlmeLaunchPoint/AlmeLaunchPointConfigTool.tsx","components/AlmeCloseIcon/AlmeCloseIconConfigTool.tsx","components/AlmeClose/AlmeCloseConfigTool.tsx","components/AlmeMinimize/AlmeMinimizeConfigTool.tsx","components/AlmeMoreMenu/AlmeMoreMenuConfigTool.tsx","components/AlmeHeader/AlmeHeaderConfigTool.tsx","components/AlmeResponse/AlmeIvaResponse/AlmeIvaResponseConfigTool.tsx","components/LiveChat/AlmeLiveChatResponse/AlmeLiveChatOperatorResponse/AlmeLiveChatOperatorResponseConfigTool.tsx","components/LiveChat/AlmeLiveChatResponse/AlmeLiveChatResponseConfigTool.tsx","components/AlmeScrollButton/AlmeScrollButtonConfigTool.tsx","components/AlmeHistory/AlmeHistoryConfigTool.tsx","components/AlmeApp/AlmeAppConfigTool.tsx","components/AlmeIconColorTool/AlmeIconColorTool.tsx","components/AlmeStyleTools/AlmeStyleTools.tsx","components/AlmeLaunchTools/AlmeTenantMenu.tsx","components/AlmeTestPage/AlmeLanguageMenu/AlmeLanguageMenu.tsx","components/AlmeLaunchTools/AlmeLaunchTools.tsx","components/TestAlmePostMessageListener/TestAlmePostMessageListener.tsx","components/AlmeTestPage/AlmeModuleVersion/AlmeModuleVersion.tsx","components/AlmeTestPage/AlmeTestPage.tsx","IvaWrapper.tsx","hooks/useGetPersonaConfigCallback.tsx","utils/ConfigMapUtils.tsx","images/Chat_opt1.svg","images/Panda_opt1.svg","images/Person_opt1.svg","images/Person_opt2.svg","images/Person_opt3.svg","index.tsx","components/AlmeLaunchPoint/AlmeLaunchPointConfig.tsx","components/AlmePoweredByLink/AlmePoweredByLInkConfig.tsx","components/AlmeDisclaimer/AlmeDisclaimerConfig.tsx","components/AlmeFooter/AlmeFooterConfig.tsx","personas/mainPersona/theme.ts","components/AlmeDialog/AlmeDialogConfig.tsx"],"names":["defaultTheme","createMuiTheme","defaultDarkTheme","palette","type","defaultAlmeTheme","lightTheme","darkTheme","customAppConfig","appConfig","customApiUtilsConfig","apiUtilsConfig","customHeaderConfig","headerConfig","customHistoryConfig","historyConfig","customFooterConfig","footerConfig","customLaunchPointConfig","launchPointConfig","launchPoint","customLiveChatControlsConfig","liveChatControlsConfig","customThemeModeToggleConfig","themeModeToggleConfig","customLaunchToolsConfig","launchToolsConfig","appConfigMain","defaultConfig","minimize","isMinimizeEnabled","styles","moreMenu","isEmailTranscriptEnabled","iconTitle","close","closeConfig","dialog","dialogConfig","utilityBar","isEnabled","breakpoint","backgroundColor","borderColor","items","title","links","href","label","target","header","minimizeConfig","moreMenuConfig","utilityBarConfig","hasBorder","baseTheme","overrides","MuiDialog","root","MuiBackdrop","display","position","MuiButton","MuiContainer","MuiInputLabel","zIndex","MuiCardHeader","action","alignSelf","marginTop","typography","h6","breakpoints","down","fontSize","button","textTransform","lightModeTheme","deepmerge","primary","light","main","dark","secondary","background","paper","default","darkTypography","appThemeMain","error","divider","text","disabled","hint","primaryMain","primaryContrast","getContrastText","secondaryMain","secondaryContrast","MuiAvatar","colorDefault","MuiFormLabel","color","containedPrimary","containedSecondary","primaryContrastDark","secondaryContrastDark","fontFamily","letterSpacing","subtitle1","fontWeight","subtitle2","caption","body1","body2","shape","borderRadius","lastEntryIdInterval","notificationApi","pollForNotifications","pollForLiveChat","notificationInterval","liveChatInterval","connected","disconnected","revision","apiUtils","uiVersion","process","errorResponse","entryId","liveChatControls","buttonText","defaultOperatorName","typingMessageText","typingMessageDelay","themeModeToggle","launchTools","launchButton","variant","closeIcon","isCloseEnabled","input","maxInputLength","userTypingEventDelay","textField","size","sendIcon","displayError","map","webpackAsyncContext","req","__webpack_require__","o","Promise","resolve","then","e","Error","code","ids","id","all","slice","t","keys","Object","module","exports","userResponse","ctaButton","optionButton","survey","ivaResponse","ctaButtonConfig","changeTenantConfirmationConfig","surveyConfig","ivaIcon","displayLink","navUrl","response","userResponseConfig","ivaResponseConfig","scrollButton","timeout","displayDuration","liveChatBanner","joined","sub","left","ended","reason","defaultReason","defaultRepName","liveChatOperatorResponse","chatIcon","useUniqueChatIcons","liveChatSystemResponse","liveChatUserResponse","liveChatResponse","bannerConfig","operatorConfig","userConfig","systemConfig","history","responseConfig","scrollButtonConfig","liveChatResponseConfig","timeoutConfig","shouldScrollOnNav","isIE11","window","MSInputMethodContext","document","documentMode","readyErrorMsg","Boolean","location","hostname","exec","axeConfig","rules","enabled","indexConfig","embeddedIvaRootId","popupIvaRootId","inlineIvaRootId","testPageRootId","ivaProDivId","getRootIdByIvaType","ivaType","UiLogLevel","ConsoleLogger","loggingLevel","this","message","optionalParams","console","warn","info","debug","log","instance","defaultLevel","getInstance","getAccessKeyFromQuery","accessKeyParamName","URLSearchParams","search","get","undefined","url","results","RegExp","decodeURIComponent","replace","getAccessKey","createTheme","themeStack","mergedTheme","filter","theme","responsiveFontSizes","ex","defaultLogger","getPersonaFromMapping","newKey","personaState","personaMapped","persona","i","personaMappingJson","length","personaMapping","verintAccessKey","toLowerCase","newPersona","current","language","normalizeLanguageTag","documentElement","lang","languageFile","currentLanguageFile","currentLanguage","currentIntlConfig","locale","messages","defaultTranslation","getCurrentIntlConfig","defaultAccessKey","useAlmeMessageListener","clientCommunicator","onAlmeMessage","useEffect","almeMessageCallback","addAlmeMessageListener","removeAlmeMessageListener","createChannelTypes","isMobile","isTablet","AlmeApiUtils","almeState","setAlmeState","almeSession","almeSessionUtils","validateAlmeSessionData","almeConfig","almeApi","liveChatNotificationApi","cache","createIntlCache","intl","createIntl","responseRevision","userId","formatMessage","defaultMessage","description","displayLinkCollection","Sections","Metadata","responseActions","deferredAppCall","maskedInput","isReverted","extensionData","Context","CurrentUrl","createPageAwarenessObject","CurrentDevice","createDeviceInformationObject","AbsolutePath","Protocol","protocol","Host","host","HostName","Port","port","Uri","pathname","Query","Fragment","hash","Origin","origin","deviceDetect","parameters","pageAwarenessParams","createContextObject","customParams","createCustomParams","uiVersionParam","UiVersion","getErrorResponse","appendToHistory","displayText","requestParams","addRequestParams","request","ConverseRequestDetailsNext","sessionId","agentChannel","SendInputAsync","refreshSessionTimer","sendAlmeInput","sendErrorResponse","unitLink","apiParams","unitRequest","RequestUnitRequestDetailsNext","UnitUID","DisplayText","SendRequestUnitAsync","historyRequest","HistoryRequestDetailsNext","GetHistoryAsync","responses","startSessionTimer","eventName","sendAppEvent","appEventRequest","AppEventRequestDetailsNext","SendAppEventAsync","configRequest","ConfigurationRequestDetailsNext","GetConfigurationAsync","variableName","variableValue","ReportingEventRequestDetailsNext","SendReportingEventAsync","EndConversationRequestDetailsNext","EndConversationAsync","NotificationRequestDetailsNext","GetPendingMessagesAsync","appendNotificationToHistory","LiveChatNotificationRequestDetailsNext","liveChatIndex","GetLiveChatNotificationAsync","appendLiveChatToHistory","isLiveChatConnected","MessageSource","push","index","MessageIndex","isNaN","trailingPeriodRegex","isExternal","windowHost","urlHost","windowsHostParts","split","reverse","rootWindowHost","urlHostParts","isHostEqual","getLocation","urlLink","createElement","openNavLink","navigationType","open","openWindow","urlAddress","createDefaultSettings","apiSettings","LiveChatNotificationApiSettingsBase","almeScriptLoader","getElementById","src","almeScriptLoaderUrl","AlmeApiHostname","httpHandler","HttpHandlerBase","useFocusStyles","makeStyles","createStyles","visibleFocus","outline","AlmeMinimize","props","classes","useIntl","defaultIcon","minimizeIcon","buttonSize","React","cloneElement","className","aria-label","onClick","onMinimizeClick","top","postMessage","focusProps","AlmeCloseIcon","withStyles","closeButton","fontWeightBold","onClose","other","forwardRef","closeClass","ref","DialogTitle","margin","padding","spacing","closeButtonTopRight","right","children","Focusclasses","disableTypography","DialogContent","DialogActions","Dialog","dialogPaper","height","width","withTheme","setIsDialogOpen","onEntered","onExited","container","useStyles","closeContainer","AlmeClose","useState","setOpen","shouldFocus","setShouldFocus","closeRef","useRef","isDialogOpen","focus","handleCancelClose","disableEnforceFocus","aria-labelledby","aria-describedby","fullWidth","role","dividers","gutterBottom","buttons","onResetIva","styledBy","property","mapping","componentWithStyles","paddingLeft","initial","contrastText","borderBottom","augmentColor","padTitle","border","StyledMenu","moreMenuStyles","elevation","getContentAnchorEl","anchorOrigin","vertical","horizontal","transformOrigin","StyledMenuItem","anchorEl","setAnchorEl","aria-controls","aria-haspopup","event","currentTarget","marginBottom","utilityBarButton","whiteSpace","textAlign","utilityBarStyles","anchorRef","handleClose","key","Menu","keepMounted","link","MenuItem","onUtilityLinkClick","handleRowClick","useTheme","useMediaQuery","disableGutters","justifyContent","item","createUtilityItem","headerContainer","flexFlow","headerRowContainer","alignItems","titleContainer","buttonContainer","headerStyles","headerClasses","padClass","headerIcon","titleClassName","headerText","style","headerTextFont","box","overflow","bottom","scrollButtonStyles","scrollToResponse","onScrollClick","augmentPrimaryColor","augmentSecondaryColor","augmentPrimary","augmentSecondary","primaryAugmented","secondaryAugmented","addGAEventTracker","displaytext","ga","paintUrlLink","navType","buttonProps","onLinkClick","handleClick","preventDefault","icon","titleAccess","endIcon","onTriggerAutoNavUrl","urlNavUrl","AutoNavigationType","UrlAddress","paintSection","section","Links","sectionIndex","linkIndex","inlineKey","TargetType","NavigationType","paintDisplayLink","SectionID","paintNavUrl","isLiveChat","disableButton","LinkNavigationType","shouldDisable","UrlUID","isNotInlineLink","paintSectionHeader","sections","HeaderText","some","getMaskedUserInput","trim","getAgentResponseText","getReplacingFunction","inlineClass","domNode","Element","attribs","placeHolderElement","sectionIdNumber","defaultElement","displayLinks","domToReact","replaceInlineLinkHtml","replaceLinks","doc","options","Array","isArray","getHtmlAsArray","forEach","element","child","stringElement","renderToStaticMarkup","replaced","parse","getAgentResponse","responseClass","sharedProps","html","convertedHTML","component","responseText","onDisplayLinkClick","submitUnitRequest","submitReportingEvent","submitAlmeInput","InputText","getLinkSpec","matches","sectionIndexStr","linkIndexStr","parseInt","foundSectionIndex","findIndex","foundSection","updateDisplayLinkSection","isInline","buildInlineLinkReplacer","ConvertAlmeResponse","inText","inlineRegex","escapeAlmeDisplayLink","marked","userCardContainer","userColor","userColorLight","userCard","wordWrap","ivaCardContent","userCardBody","maskedUserInput","hasUserInput","responseAccessibilityLabel","hidden","aria-hidden","direction","in","onScroll","userResponseRef","userIcon","responseId","toString","inlineAction","Name","getCtaResponseAction","onCtaClick","ButtonDisplayText","AlmeSurveyDialog","firstRadioButton","radioButtonOptions","find","x","surveyInput","setSurveyInput","surveyReason","setSurveyReason","onSubmitInput","hasReason","onSubmitSurvey","submitLinkConfig","AppeventName","grade","SurveyUnitLabel","gradingQueue","gradingType","radioGroup","radioButtonColor","radioButtonLength","value","defaultValue","onChange","radioValue","control","getRadioGroup","freeFormText","freeformTextMaxLength","multiline","surveyDialogDisplayText","bodyText","rows","inputText","inputProps","maxLength","isOpen","declineButtonText","acceptButtonText","validateSurveyAction","inlineSurveyLinks","MetaData","InlineSurveyLinks","No","ActionType","Yes","Title","validateInlineSurveyLinks","surveys","Survey","Footer","SubmitLink","Body","RadioButtons","radioOptions","FreeformText","validateSurveys","modifyAlmeDialogConfig","inlineSurveyConfig","unitLabel","setSurveyDialogDisplayText","Header","placeholder","CancelLink","maxHeight","surveyButtonBox","surveyTitle","paddingRight","surveyYesButton","marginLeft","surveyNoButton","showSurveyDialog","setShowSurveyDialog","selectedSurveyId","setSelectedSurveyId","surveyTriggerRef","getSurveyResponseAction","handleSurveyLinkClick","config","typedConfig","submitSurvey","gradingComments","gradingReason","SurveyId","appEventName","onSubmitClick","align","noWrap","confirmationOption","responseAction","reduce","elements","option","concat","accessKey","previousInput","rootClass","savedAccessKey","CookieLoader","oldAccessKey","GetStorage","changeTenantAppEvent","inputToResend","appEvent","NewClientAccessKey","OldClientAccessKey","Initiator","InputToResend","setNewKey","UpdateStorage","buildOptionButton","NewTenantUrl","PreviousInput","sectionHeader","paddingTop","paperColor","ivaCard","ivaCardActions","ivaCardContainer","ivaCardBodyText","maxWidth","inlineButton","textDec","cursor","setDisableButton","hasIvaResponse","isSessionTimeout","shouldDisableOnClick","DisableOnClick","shouldAutoNav","alt","raised","isLastResponse","agentResponseRef","disableSpacing","onSurveySubmitClick","responseStyles","mainBanner","subBanner","isValidLiveChatBannerResponse","hasOperatorJoined","MessageOrigin","hasOperatorLeft","hasChatEnded","liveChatBannerStyles","repName","OperatorData","joinedSubText","leftText","sessionEndReason","SessionEndReason","endReasonText","gutterPxSm","convertToHex","charCodeAt","substr","isValidLiveChatOperatorResponse","liveChatOperatorResponseStyles","avatar","operatorName","iconColor","charAt","isValidLiveChatUserResponse","userCardContent","isValidLiveChatSystemResponse","Transient","systemCard","systemCardBody","systemBodyText","systemCardContent","systemCardContainer","AlmeLiveChatResponse","isChatResponse","isLiveChatResponse","isOperatorResponse","isUserResponse","isSystemResponse","isBannerResponse","IsError","lcResponseComponent","isNewResponse","AlmeEnvironmentConfig","snackBar","snackBarMessage","snackBarAction","snackBarContent","values","timeoutValue","getConfig","ClientSessionTimeout","timeoutMessage","_","handleTimeoutClose","setShouldDisplayTimeout","shouldDisplayTimeout","autoHideDuration","scrollPositionLoader","historyStyles","isVisible","setIsVisible","renderControlFlag","setRenderControlFlag","historyRef","handleScroll","scrollHeight","scrollTop","offsetHeight","childHeight","clientHeight","shouldBeVisible","lastChild","childTop","self","inIframe","scrollIntoView","behavior","scroll","debounce","prevResponse","tabIndex","isTransient","isPrevTransient","dividerColor","dividerBorder","darkBorder","disabledBackground","paddingBottom","colorBackground","borderTop","submitIcon","submitButton","marginRight","almeInputBox","inputLabel","customInputLabel","inputStyles","userInput","setInput","hasError","setError","isTyping","setIsTyping","timer","setTimeout","clearTimeout","useAlmeInputRef","submitFunc","accessibilityProps","sharedInputProps","inputId","substring","onSendTypingEvent","onKeyDown","stopPropagation","inputRef","helperText","FormHelperTextProps","InputLabelProps","autoFocus","shouldAutoFocus","sharedButtonProps","submitId","sharedFormProps","noValidate","autoComplete","sharedTextInputProps","submitButtonText","InputProps","outlined","endAdornment","linkContainer","poweredByLinkStyles","poweredByLink","disclaimer","font","footerStyles","footerClasses","footer","hasBackgroundColor","shadows","mainShadow","gutterPx","boxShadow","card","minWidth","cardHeader","cardActions","launchPointStyles","launchQuestion","setLaunchQuestion","isSmall","inputFieldText","sharedIconProps","hasHistory","inputPlaceholderText","data","source","launchPointName","launchParameter","sendLaunchPostMessage","titleText","unmountOnExit","titleTypographyProps","sendInputPostMessage","launchIcon","flexDirection","rootIvaType","embedded","popup","inline","up","rootPulse","fade","animation","AlmeEndLiveChatDialog","onCancelClick","onEndClick","flexWrap","endChatButton","typingNotification","flexGrow","animationName","animationDuration","animationIterationCount","animationFillMode","animationDelay","opacity","typingId","setTypingId","typingMessage","showDialog","setShowDialog","HandleIsDialogOpen","OperatorTyping","onEndChat","loadAlmeSessionData","sessionDataLoader","sessionData","GetAlmeSessionData","AlmeSessionDataUtils","CreateAlmeSessionData","useClearSessionData","savedAppState","setAlmeSessionData","clearAppData","useCallback","ClearAlmeSessionData","ClearStorage","loadAlmeHistory","almeApiUtils","curHistory","params","launchData","launchType","welcomeResponse","handleTenantChange","disableAutoNav","processLastResponse","setAlmeStateWrapper","lastResponse","processLiveChatStartAction","processLiveChatEndAction","tenantAppEvent","inputResend","tenantResponse","resendResponse","setAlmeConfigSettings","getAlmeConfiguration","almeConfigs","configSettings","configurationSettings","prev","Key","Value","setConfig","handleLaunchQuestion","questionResponse","useRecursiveTimeout","callback","delay","savedCallback","cancel","tick","ret","getSessionExpiredResponse","isSessionTimeoutResponse","AlmeSessionUtils","almeSessionData","getAlmeSessionFromStorage","clearSessionData","saveLastActivityTime","sessionTimer","sessionLength","minutestoMs","Number","remainingTime","getRemainingTime","onSessionTimeout","isMinimized","Date","toISOString","currentTime","getTime","inactivityTime","lastActivityTime","lastEntryId","minutes","sessionLoader","almeSessionCookieName","CookieAlmeSessionDataLoader","ClientCommunicator","getCurrentAppState","currentAppState","appStyles","initialAlmeState","pulse","setPulse","isInitialized","setAlmeConfig","sessionUtils","state","useSetAlmeStateCallback","useMemo","onUpdateAlmeSessionData","almeResponse","newSessionData","useAlmeSessionDataCallback","clearSessionWithoutTenant","saveActivityTIme","useSaveLastActivityTime","almeApiSettings","AlmeApiBase","createAlmeApi","LiveChatNotificationApiBase","createLiveChatNotificationApi","apiConfig","useSetDefaultLoggingLevel","UpdateAlmeSessionData","useSaveAlmeSessionData","UseLiveChatConnected","isIvaProLaunch","initializeAlmeApp","lastHistoryItem","chatResponses","lastChatResponse","setOnSessionTimeout","useAlmeInitialization","ivaRootId","ivaRootElement","OnDisplayLinkClick","onSubmitAlmeInput","OnSubmitAlmeInput","OnMinimizeClick","SetIsDialogOpen","submitAppEvent","OnSurveySubmitClick","ButtonTarget","OnCtaClickCallback","OnEndChat","OnSendTypingEvent","shouldResetIsInitialized","resetSessionData","newState","useResetIvaCallback","onLaunchIva","payload","launchPayload","useLaunchIvaCallback","getNotifications","usePollForNotifications","getLiveChatNotifications","usePollForChat","curAppState","currentLastEntryId","useSyncLastEntry","ivaAvailability","disablePulse","onPointerEnter","onMouseEnter","onFocus","onTouchStart","jssPlugin","increaseSpecificity","jss","create","plugins","jssPreset","VerintIVAUI","themeMode","StylesProvider","ThemeProvider","almeThemeModeToggleContainer","AlmeThemeModeToggle","isDarkChecked","toggleLabel","checked","setThemeMode","textColor","body","updateTestPageTheme","appThemes","name","verintTheme","rainbowTheme","badContrastTheme","blackAndWhiteTheme","shadesTheme","brushScriptTheme","CourierNewSriptTheme","timesNewRomanScriptTheme","adjustedTypeComfortableTheme","adjustedTypeCompressionTheme","customShapeTheme","everythingIsRoundedTheme","everythingIsSharpTheme","AlmeThemeSelector","themeNumber","setState","htmlFor","setTheme","currentTheme","createPalette","colorContainer","mainPanel","augmentContainer","augmentPanel","splitPanel","validateColor","test","AlmeBasicColorControl","setColor","colorStyles","idVal","useColorRef","newColor","AlmePaletteColorControl","paletteColor","setMain","setLight","setDark","mainStyles","lightStyles","darkStyles","avatarStyles","avatarValue","useMainRef","augmented","useLightRef","useDarkRef","AlmePaletteTool","appTheme","getAppTheme","useMainPrimaryRef","useLightPrimaryRef","useDarkPrimaryRef","useMainSecondaryRef","useLightSecondaryRef","useDarkSecondaryRef","useDefaultRef","usePaperRef","expandIcon","customTheme","customMuiTheme","themeTextarea","AlmeThemeTool","textareaValue","JSON","stringify","useThemeTextareaRef","themeOptions","controlGroup","controls","AlmeConfigFormControl","isRadioControl","radioButtons","isTextControl","configControls","i1","controlGroups","i2","changeHandler","i3","inputBoxColor","inputBoxVariant","inputBoxSize","inputBoxPlaceholderText","inputButtonSubmitButtonText","inputButtonColor","newValue","onConfigChange","idPrefix","namePrefix","inputConfig","poweredByLinkConfig","launchConfig","AlmeCloseIconConfigTool","AlmeCloseConfigTool","closeIconConfig","AlmeMinimizeConfigTool","AlmeMoreMenuConfigTool","moreConfig","AlmeLiveChatResponseConfigTool","operatorResponseConfig","setConfigState","AlmeIconColorTool","names","scope","colorCodeHex","AlmeStyleTools","menu","personaNames","AlmeTenantMenu","selectedIndex","setSelectedIndex","selected","selectedPersona","setAccessKey","handleMenuItemClick","languageMenu","languages","AlmeLanguageMenu","selectedLanguageIndex","indexOf","includes","selectedLanguage","baseUrl","lastIndexOf","AlmeLaunchTools","onSendPostMessage","TestAlmePostMessageListener","postMessageValue","setPostMessageValue","addEventListener","readOnly","boxWidth","ModuleVersion","moduleVersions","setModuleVersions","handleAccordionChange","isExpanded","handler","endPoint","AlmeApiProtocol","AlmeApiBasePath","SendAsync","join","AlmeTestPage","setIvaType","changeContainerDiv","currentIvaType","newIvaType","curContainer","setPersonaState","AlmeModuleVersion","IvaWrapper","setAlmePersonaWrapper","setNewAccessKey","setPersona","intlConfig","setIntlConfig","launchWithPersona","onChangePersona","useGetPersonaConfigCallback","renderTestPage","wrapperProps","mapPersona","clientConfig","iconMap","chatRectangle","chatCircle","koala","panda","man","woman","person1","person2","mapClientConfig","validatedConfig","validIconNames","callToActionColor","getValidColor","callToActionVariant","getValidVariant","validateString","displayLinkColor","displayLinkVariant","navUrlColor","navUrlVariant","scrollButtonColor","getValidSize","submitButtonColor","launchButtonColor","getValidConfig","headerConfigMapped","historyConfigMapped","getIvaIcon","iconName","validButtonColors","validSimpleColors","validColorProps","isTextField","validButtonVariants","validTextFieldVariants","validSizes","str","validStrings","renderAlmeUi","loadPolyfills","setupReactAxe","almeUiRoot","almePopupRoot","testPageRoot","clientDiv","getInitialPersona","almeApp","rootElement","setupRootDiv","strictAlmeApp","ReactDOM","render","ivaProDiv","axe","bodyElement","mainElements","getElementsByTagName","almeDiv","setAttribute","appendChild","defaultPersona","createApiSettings","almeApiHostname","Verint","renderIVA","navigator","serviceWorker","ready","registration","unregister","catch","poweredByConfig","disclaimerConfig","primaryMainDark","secondaryMainDark","darkPalette","closeButtonConfig"],"mappings":"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AED,+BAAgC,CAC/B,IACA,EACA,IAED,6CAA8C,CAC7C,IACA,EACA,IAED,kDAAmD,CAClD,IACA,EACA,IAED,qCAAsC,CACrC,IACA,EACA,IAED,yCAA0C,CACzC,IACA,EACA,IAED,4CAA6C,CAC5C,IACA,EACA,IAED,sCAAuC,CACtC,IACA,EACA,GAED,0CAA2C,CAC1C,IACA,EACA,GAED,oCAAqC,CACpC,IACA,EACA,IAED,uCAAwC,CACvC,IACA,EACA,IAED,qDAAsD,CACrD,IACA,EACA,IAED,0DAA2D,CAC1D,IACA,EACA,IAED,mBAAoB,CACnB,IACA,EACA,IAED,uBAAwB,CACvB,IACA,EACA,IAED,0BAA2B,CAC1B,IACA,EACA,IAED,oBAAqB,CACpB,IACA,EACA,GAED,wBAAyB,CACxB,IACA,EACA,GAED,kBAAmB,CAClB,IACA,EACA,IAED,qBAAsB,CACrB,IACA,EACA,IAED,mCAAoC,CACnC,IACA,EACA,IAED,wCAAyC,CACxC,IACA,EACA,IAED,2BAA4B,CAC3B,IACA,EACA,EACA,IAED,+BAAgC,CAC/B,IACA,EACA,EACA,IAED,kCAAmC,CAClC,IACA,EACA,GAED,4BAA6B,CAC5B,IACA,EACA,EACA,GAED,gCAAiC,CAChC,IACA,EACA,EACA,GAED,0BAA2B,CAC1B,IACA,EACA,IAED,6BAA8B,CAC7B,IACA,EACA,IAED,2CAA4C,CAC3C,IACA,EACA,IAED,gDAAiD,CAChD,IACA,EACA,IAED,4BAA6B,CAC5B,IACA,EACA,EACA,IAED,gCAAiC,CAChC,IACA,EACA,EACA,IAED,mCAAoC,CACnC,IACA,EACA,GAED,6BAA8B,CAC7B,IACA,EACA,EACA,GAED,iCAAkC,CACjC,IACA,EACA,EACA,GAED,2BAA4B,CAC3B,IACA,EACA,IAED,8BAA+B,CAC9B,IACA,EACA,IAED,4CAA6C,CAC5C,IACA,EACA,IAED,iDAAkD,CACjD,IACA,EACA,IAED,2BAA4B,CAC3B,IACA,EACA,EACA,IAED,+BAAgC,CAC/B,IACA,EACA,EACA,IAED,kCAAmC,CAClC,IACA,EACA,GAED,4BAA6B,CAC5B,IACA,EACA,EACA,GAED,gCAAiC,CAChC,IACA,EACA,EACA,GAED,0BAA2B,CAC1B,IACA,EACA,IAED,6BAA8B,CAC7B,IACA,EACA,IAED,2CAA4C,CAC3C,IACA,EACA,IAED,gDAAiD,CAChD,IACA,EACA,IAED,mBAAoB,CACnB,IACA,EACA,IAED,uBAAwB,CACvB,IACA,EACA,IAED,0BAA2B,CAC1B,IACA,EACA,IAED,oBAAqB,CACpB,IACA,EACA,GAED,wBAAyB,CACxB,IACA,EACA,GAED,kBAAmB,CAClB,IACA,EACA,IAED,qBAAsB,CACrB,IACA,EACA,IAED,mCAAoC,CACnC,IACA,EACA,IAED,wCAAyC,CACxC,IACA,EACA,IAED,uBAAwB,CACvB,IACA,GAED,2BAA4B,CAC3B,IACA,GAED,uCAAwC,CACvC,IACA,GAED,0CAA2C,CAC1C,IACA,GAED,yCAA0C,CACzC,IACA,GAED,4CAA6C,CAC5C,IACA,GAED,mCAAoC,CACnC,IACA,GAED,sCAAuC,CACtC,IACA,GAED,kCAAmC,CAClC,IACA,GAED,qCAAsC,CACrC,IACA,GAED,qCAAsC,CACrC,IACA,EACA,IAED,yCAA0C,CACzC,IACA,EACA,IAED,0CAA2C,CAC1C,IACA,EACA,IAED,8CAA+C,CAC9C,IACA,EACA,IAED,yCAA0C,CACzC,IACA,EACA,IAED,6CAA8C,CAC7C,IACA,EACA,IAED,wCAAyC,CACxC,IACA,GAED,2CAA4C,CAC3C,IACA,GAED,+CAAgD,CAC/C,IACA,GAED,kDAAmD,CAClD,IACA,GAED,6CAA8C,CAC7C,IACA,GAED,gDAAiD,CAChD,IACA,GAED,wDAAyD,CACxD,IACA,GAED,2DAA4D,CAC3D,IACA,GAED,mDAAoD,CACnD,IACA,GAED,sDAAuD,CACtD,IACA,GAED,4CAA6C,CAC5C,IACA,GAED,+CAAgD,CAC/C,IACA,GAED,iDAAkD,CACjD,IACA,GAED,oDAAqD,CACpD,IACA,GAED,oDAAqD,CACpD,IACA,GA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","file":"static/js/main.8c7b487f.chunk.js","sourcesContent":["import { ThemeOptions } from \"@material-ui/core\";\nimport { createMuiTheme } from \"@material-ui/core/styles\";\nexport interface DynamicThemeModule {\n default: AlmeTheme;\n}\n\nexport interface AlmeTheme {\n lightTheme: ThemeOptions;\n darkTheme: ThemeOptions;\n}\n\nexport const defaultTheme = createMuiTheme();\nexport const defaultDarkTheme = createMuiTheme({ palette: { type: 'dark' } });\n\nexport const defaultAlmeTheme = {\n lightTheme: defaultTheme,\n darkTheme: defaultDarkTheme,\n} as AlmeTheme;\n\nexport type AlmeThemeMode = 'light' | 'dark';","/**\n * @summary This is the file that custom client config changes can be made.\n * Make changes within the custom component config objects\n * @module appConfigMain\n */\nimport headerConfig, { AlmeHeaderConfig } from '../../components/AlmeHeader/AlmeHeaderConfig';\nimport appConfig, { AlmeAppConfig } from '../../components/AlmeApp/AlmeAppConfig';\nimport historyConfig, { AlmeHistoryConfig } from '../../components/AlmeHistory/AlmeHistoryConfig';\nimport apiUtilsConfig, { AlmeApiUtilsConfig } from '../../api/AlmeApiUtilsConfig';\nimport footerConfig, { AlmeFooterConfig } from '../../components/AlmeFooter/AlmeFooterConfig';\nimport launchPointConfig, { AlmeLaunchPointConfig } from '../../components/AlmeLaunchPoint/AlmeLaunchPointConfig';\nimport liveChatControlsConfig, { AlmeLiveChatControlsConfig } from '../../components/LiveChat/AlmeLiveChatControls/AlmeLiveChatControlsConfig';\nimport themeModeToggleConfig, { AlmeThemeModeToggleConfig } from '../../components/AlmeThemeModeToggle/AlmeThemeModeToggleConfig';\nimport { AlmeConfig } from '../../models/AlmeConfig';\nimport launchToolsConfig, { AlmeLaunchToolsConfig } from '../../components/AlmeLaunchTools/AlmeLaunchToolsConfig';\n\n\nconst customAppConfig: AlmeAppConfig = {\n ...appConfig,\n};\n\nconst customApiUtilsConfig: AlmeApiUtilsConfig = {\n ...apiUtilsConfig,\n};\n\nconst customHeaderConfig: AlmeHeaderConfig = {\n ...headerConfig,\n};\n\nconst customHistoryConfig: AlmeHistoryConfig = {\n ...historyConfig,\n};\n\nconst customFooterConfig: AlmeFooterConfig = {\n ...footerConfig,\n};\n\nconst customLaunchPointConfig: AlmeLaunchPointConfig = {\n ...launchPointConfig,\n launchPoint: {\n // Note: to disable global launch comment all of these settings.\n ...launchPointConfig.launchPoint,\n //buttonText: 'Need Help?',\n //inputFieldText: 'Ask IVA',\n },\n};\n\nconst customLiveChatControlsConfig: AlmeLiveChatControlsConfig = {\n ...liveChatControlsConfig,\n};\n\nconst customThemeModeToggleConfig: AlmeThemeModeToggleConfig = {\n ...themeModeToggleConfig,\n};\n\nconst customLaunchToolsConfig: AlmeLaunchToolsConfig = {\n ...launchToolsConfig,\n};\n\nconst appConfigMain: AlmeConfig = {\n ...customAppConfig,\n ...customApiUtilsConfig,\n ...customHeaderConfig,\n ...customHistoryConfig,\n ...customFooterConfig,\n ...customLaunchPointConfig,\n ...customLiveChatControlsConfig,\n ...customThemeModeToggleConfig,\n ...customLaunchToolsConfig,\n};\n\nexport default appConfigMain;","import { ReactElement } from 'react';\nimport { SvgIconProps } from '@material-ui/core';\n\nexport interface AlmeMinimizeConfig {\n minimize: {\n isMinimizeEnabled: boolean;\n styles: {\n buttonSize?: SvgIconProps['fontSize'];\n };\n minimizeIcon?: ReactElement;\n };\n}\n\n/**\n * This is the baseline minimize 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: AlmeMinimizeConfig = {\n minimize: {\n isMinimizeEnabled: true,\n styles: {},\n },\n};\n\nexport default defaultConfig;","import { IconButtonProps } from '@material-ui/core';\n\nexport interface AlmeMoreMenuConfig {\n moreMenu: {\n isEmailTranscriptEnabled: boolean;\n styles: {\n buttonSize?: IconButtonProps['size'];\n };\n iconTitle: string;\n };\n}\n\n/**\n * This is the baseline more menu 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: AlmeMoreMenuConfig = {\n moreMenu: {\n isEmailTranscriptEnabled: false,\n styles: {},\n iconTitle: 'More',\n },\n};\n\nexport default defaultConfig;\n","import dialogConfig, { AlmeDialogConfig } from \"../AlmeDialog/AlmeDialogConfig\";\nimport closeConfig, { AlmeCloseIconConfig } from \"../AlmeCloseIcon/AlmeCloseIconConfig\";\n\ninterface CloseConfig extends AlmeDialogConfig, AlmeCloseIconConfig { }\n\nexport interface AlmeCloseConfig {\n close: CloseConfig;\n}\n\n/**\n * This is the baseline close 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: AlmeCloseConfig = {\n close: {\n ...closeConfig,\n dialog: {\n ...dialogConfig.dialog,\n },\n\n },\n};\n\nexport default defaultConfig;","import { AlmeColorProp } from \"../../models/AlmeColorMapping\";\n\nexport interface UtilityBarLink {\n href: string;\n label: string;\n target: \"_self\" | \"_blank\" | \"_parent\" | \"_top\";\n}\n\nexport interface UtilityBarItem {\n title?: string;\n links: UtilityBarLink[];\n}\n\nexport interface AlmeUtilityBarConfig {\n utilityBar: {\n isEnabled: boolean;\n items: UtilityBarItem[];\n breakpoint: number;\n styles: {\n backgroundColor?: AlmeColorProp;\n borderColor?: AlmeColorProp;\n };\n };\n}\n\n/**\n * This is the baseline utility bar 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: AlmeUtilityBarConfig = {\n utilityBar: {\n isEnabled: false,\n breakpoint: 945,\n styles: {\n backgroundColor: 'default',\n borderColor: 'secondary',\n }, items: [\n {\n title: 'Medication Guide ISI menu', links: [{\n href: \"#test\",\n label: \"Important Safety\\n Information\",\n target: \"_self\",\n },\n {\n href: \"https://www.xkcd.com\",\n label: \"xkcd.com\",\n target: \"_blank\",\n },\n {\n href: \"https://www.google.com\",\n label: \"Prescribing\\n Information\",\n target: \"_blank\",\n }],\n },\n {\n links: [\n {\n href: \"https://www.google.com\",\n label: \"Prescribing\\n Information\",\n target: \"_blank\",\n }],\n },\n {\n links: [{\n href: \"https://www.xkcd.com\",\n label: \"Medication\\n Guide\",\n target: \"_blank\",\n }],\n },\n ],\n },\n};\n\nexport default defaultConfig;\n","import { ReactElement } from 'react';\n\nimport { TypographyProps } from '@material-ui/core';\nimport { AlmeMinimizeConfig } from '../AlmeMinimize/AlmeMinimizeConfig';\nimport { AlmeMoreMenuConfig } from '../AlmeMoreMenu/AlmeMoreMenuConfig';\n\nimport minimizeConfig from '../AlmeMinimize/AlmeMinimizeConfig';\nimport moreMenuConfig from '../AlmeMoreMenu/AlmeMoreMenuConfig';\nimport closeConfig, { AlmeCloseConfig } from '../AlmeClose/AlmeCloseConfig';\n\nimport { AlmeColorProp } from '../../models/AlmeColorMapping';\nimport utilityBarConfig, { AlmeUtilityBarConfig } from \"../AlmeUtilityBar/AlmeUtilityBarConfig\";\n\ninterface HeaderConfig extends AlmeCloseConfig, AlmeMinimizeConfig, AlmeMoreMenuConfig, AlmeUtilityBarConfig {\n styles: {\n hasBorder: boolean;\n headerTextFont?: TypographyProps['variant'];\n backgroundColor?: AlmeColorProp;\n };\n headerIcon?: ReactElement;\n}\n\nexport interface AlmeHeaderConfig {\n header: HeaderConfig;\n}\n\n/**\n * This is the baseline header 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](appConfigMain)\n*/\nconst defaultConfig: AlmeHeaderConfig = {\n header: {\n ...minimizeConfig,\n ...moreMenuConfig,\n ...closeConfig,\n ...utilityBarConfig,\n styles: {\n hasBorder: false,\n },\n },\n};\n\nexport default defaultConfig;\n","import { ThemeOptions } from '@material-ui/core';\n\nconst baseOverrides = {\n MuiDialog: {\n root: {\n },\n },\n MuiBackdrop: {\n root: {\n display: 'block',\n position: 'absolute',\n },\n },\n MuiButton: {\n root: {\n },\n },\n MuiContainer: {\n root: {\n 'overscroll-behavior': 'contain',\n },\n },\n MuiInputLabel: {\n root: {\n zIndex: 'auto',\n },\n },\n MuiCardHeader: {\n action: {\n alignSelf: 'unset',\n marginTop: 'unset',\n },\n },\n};\n\n/**\n * https://themes.material-ui.com/\n * https://material-ui.com/customization/default-theme/\n * https://material.io/resources/color/#!/?view.left=0&view.right=0&primary.color=c24f00&secondary.color=214563\n */\nconst baseTheme = {\n overrides: {\n ...baseOverrides,\n },\n\n} as ThemeOptions;\n\nexport default baseTheme;","import { ThemeOptions } from '@material-ui/core';\nimport deepmerge from 'deepmerge';\nimport { defaultTheme, AlmeTheme, defaultDarkTheme } from '../../models/AlmeTheme';\n\n\nconst palette = {\n primary: {\n light: '#007AFF',\n main: '#0057BF',\n dark: '#0D3E86',\n },\n secondary: {\n light: '#00CE7C',\n main: '#09A761',\n dark: '#0D7F46',\n },\n background: {\n paper: '#e5e9f0',\n default: '#F5F5F7',\n },\n};\nconst typography = {\n // This was added for the header (with the X and _ buttons) in iPhone 5\n // SE. It applies to other mobile devices in Portrait orientation. This\n // will affect other headings, so it may need to be moved in the future.\n h6: {\n [defaultTheme.breakpoints.down('xs')]: {\n fontSize: '16px',\n },\n },\n button:{\n textTransform: 'none',\n },\n};\n\nconst overrides = {\n MuiDialog: {\n root: {\n },\n },\n MuiBackdrop: {\n root: {\n display: 'block',\n position: 'absolute',\n },\n },\n MuiContainer: {\n root: {\n 'overscroll-behavior': 'contain',\n },\n },\n};\n\nconst lightModeTheme = deepmerge(defaultTheme, { palette, typography,overrides }) as ThemeOptions;\n\nconst darkPalette = {\n type: 'dark',\n primary: {\n light: '#007AFF',\n main: '#85CBFF',\n dark: '#E1F4FF',\n },\n secondary: {\n light: '#09A761',\n main: '#00CE7C',\n dark: '#82EB96',\n },\n };\n\n const darkTypography= {\n // This was added for the header (with the X and _ buttons) in iPhone 5\n // SE. It applies to other mobile devices in Portrait orientation. This\n // will affect other headings, so it may need to be moved in the future.\n h6: {\n [defaultTheme.breakpoints.down('xs')]: {\n fontSize: '16px',\n },\n },\n button:{\n textTransform: 'none',\n },\n };\n\n const darkModeTheme = deepmerge(defaultDarkTheme,{palette:darkPalette,typography:darkTypography,overrides}) as ThemeOptions;\n\nexport const appThemeMain = {\n lightTheme: lightModeTheme,\n darkTheme: darkModeTheme,\n} as AlmeTheme;","/** In this example the LightTheme colors have been edited. We would not recommend using this color scheme in production, but hopefully\n * it helps demonstrate some of the customizations that are possible and the power of the Material UI. By using the deepmerge library, we are able to integrate our\n * palette changes with the default theme template.\n *\n * Another powerful feature of Material UI is the ability to use the framework to pick complementary colors. This feature is not exploited\n * in this example. Instead, many colors from the rainbow are forced onto the UI.\n *\n * Some useful links for working with themes can be found at:\n * https://themes.material-ui.com/\n * https://material-ui.com/customization/default-theme/ //Will show all the properties you can edit\n * https://material.io/resources/color/#!/?view.left=0&view.right=0&primary.color=c24f00&secondary.color=214563 //great for color selecting\n *\n *\n */\n\nimport { ThemeOptions } from '@material-ui/core';\nimport { defaultDarkTheme, AlmeTheme } from '../../../models/AlmeTheme';\n\n\n//this is the property of the default theme we want to edit\nconst palette = {\n primary: {\n light: '#FF0000',\n main: \"#FF0000\",\n dark: '#FF0000',\n },\n //effects the button for sending user message\n secondary: {\n light: '#00CE7C',\n main: \"#FF0000\",\n dark: '#0D7F46',\n },\n //Effects the main body of the IVA\n background: {\n paper: '#FF7F00', //effects individual messages\n default: '#FFFF00', //effects the main body of the IVA\n },\n error: {\n light: '#00CE7C',\n main: \"#FF0000\",\n dark: '#0D7F46',\n },\n divider: \"#00FF00\",\n //text is not referring to response text inside the IVA\n text: {\n primary: \"#0000FF\",\n secondary: \"#0000FF\",\n disabled: \"#000000\",\n hint: \"#0000FF\",\n },\n};\n\n\nconst lightModeTheme = { palette } as ThemeOptions;\n\n\nexport const appThemeMain = {\n lightTheme: lightModeTheme,\n darkTheme: defaultDarkTheme,\n} as AlmeTheme;\n","/**\n* This theme is designed to show what can go wrong if you assign a primary and\n * secondary color to values very similar to each other. The theme has been modified\n * to use these colors more than is proper.\n *\n * By default the pallette colors are used to determine the color of the text based on contrast automatically.\n * This can be forcefully changed but without contrast they will be hard to read.\n *\n *\n * Colors are modified in the lightThemeMode under the palette property. Notice that many of the colors can be programmatically generated via functions from Material UI.\n *\n * Some useful links for working with themes can be found at:\n * https://themes.material-ui.com/\n * https://material-ui.com/customization/default-theme/ //Will show all the properties you can edit\n * https://material.io/resources/color/#!/?view.left=0&view.right=0&primary.color=c24f00&secondary.color=214563 //great for color selecting\n *\n */\n\nimport { ThemeOptions } from '@material-ui/core';\nimport { defaultTheme, defaultDarkTheme, AlmeTheme } from '../../../models/AlmeTheme';\n\n\n/**\n * ! @primaryMain is given a value very close to the secondaryMain, this is done to simulate a bad contrast.\n */\n\nconst primaryMain = '#89ba84';\nconst primaryContrast = defaultTheme.palette.getContrastText(primaryMain); //This is where the auto contrast function lives. Use it to get a complementary, contrasting color.\n\nconst secondaryMain = '#89be84';\nconst secondaryContrast = defaultTheme.palette.getContrastText(secondaryMain);\n\nconst palette = {\n primary: {\n light: primaryMain,\n main: primaryMain,\n dark: primaryMain,\n },\n secondary: {\n light: secondaryMain,\n main: secondaryMain,\n dark: secondaryMain,\n },\n background: {\n paper: primaryMain,\n default: secondaryMain,\n },\n};\n\nconst overrides = {\n MuiAvatar: {\n colorDefault: {\n backgroundColor: '#343434',\n },\n },\n MuiFormLabel: {\n root: {\n color: 'rgba(0, 0, 0, 0.65)',\n },\n },\n MuiButton: {\n containedPrimary: {\n '&&': {\n color: `${primaryContrast}`,\n },\n },\n containedSecondary: {\n '&&': {\n color: `${secondaryContrast}`,\n },\n },\n },\n};\n\nconst lightModeTheme = {\n palette,\n overrides,\n} as ThemeOptions;\n\n\nconst primaryMainDark = '#85CBFF';\nconst primaryContrastDark = defaultDarkTheme.palette.getContrastText(primaryMain);\n\nconst secondaryMainDark = '#00CE7C';\nconst secondaryContrastDark = defaultDarkTheme.palette.getContrastText(secondaryMain);\n\n\nconst darkPalette = {\n type: 'dark',\n primary: {\n light: '#007AFF',\n main: primaryMainDark,\n dark: '#E1F4FF',\n },\n secondary: {\n light: '#09A761',\n main: secondaryMainDark,\n dark: '#82EB96',\n },\n};\n\n\nconst darkOverrides = {\n containedPrimary: {\n '&&': {\n color: `${primaryContrastDark}`,\n },\n },\n containedSecondary: {\n '&&': {\n color: `${secondaryContrastDark}`,\n },\n },\n};\n\nconst darkModeTheme = {\n palette: darkPalette,\n overrides: darkOverrides,\n} as ThemeOptions;\n\n\nexport const appThemeMain = {\n lightTheme: lightModeTheme,\n darkTheme: darkModeTheme,\n} as AlmeTheme;\n","/**\n * This theme is mainly controlled by adjusting the PrimaryMain and\n * secondaryMain color variables. Material UI is smart enough to complement these\n * choices. This file only adjust lightMode.\n *\n * Colors are modified in the lightThemeMode under the palette property. Notice that many of the colors can be programmatically generated via functions from Material UI.\n *\n * Some useful links for working with themes can be found at:\n * https://themes.material-ui.com/\n * https://material-ui.com/customization/default-theme/ //Will show all the properties you can edit\n * https://material.io/resources/color/#!/?view.left=0&view.right=0&primary.color=c24f00&secondary.color=214563 //great for color selecting\n */\n\nimport { ThemeOptions } from '@material-ui/core';\nimport { defaultTheme, defaultDarkTheme, AlmeTheme } from '../../../models/AlmeTheme';\n\n\nconst primaryMain = '#000000';\nconst primaryContrast = defaultTheme.palette.getContrastText(primaryMain);\n\n\nconst palette = {\n primary: {\n light: '#007AFF',\n main: primaryMain,\n dark: '#0D3E86',\n },\n //effects the button for sending user message\n secondary: {\n light: '#00CE7C',\n main: primaryContrast,\n dark: '#0D7F46',\n },\n //Effects the main body of the IVA\n background: {\n paper: '#FFFFFF', //effects individual messages\n default: '#FFFFFF', //effects the main body of the IVA\n },\n};\n\nconst lightModeTheme = { palette } as ThemeOptions;\n\n\nexport const appThemeMain = {\n lightTheme: lightModeTheme,\n darkTheme: defaultDarkTheme,\n} as AlmeTheme;","/**\n * In this example the LightTheme colors have been edited. We would not recommend using this color scheme in production, but hopefully\n * it helps demonstrate some of the customizations that are possible and the power of the Material UI.\n *\n * Another powerful feature of Material UI is the ability to use the framework to pick complementary colors. This feature is not exploited\n * in this example. Instead, many colors from the rainbow are forced onto the UI.\n *\n * Some useful links for working with themes can be found at:\n * https://themes.material-ui.com/\n * https://material-ui.com/customization/default-theme/ //Will show all the properties you can edit\n * https://material.io/resources/color/#!/?view.left=0&view.right=0&primary.color=c24f00&secondary.color=214563 //great for color selecting\n */\n\nimport { ThemeOptions } from '@material-ui/core';\nimport { defaultDarkTheme, AlmeTheme } from '../../../models/AlmeTheme';\n\nconst palette = {\n background: {\n paper: '#856088', //effects individual messages\n default: '#9400d3', //effects the main body of the IVA\n },\n};\nconst lightModeTheme = { palette } as ThemeOptions;\n\nexport const appThemeMain = {\n lightTheme: lightModeTheme,\n darkTheme: defaultDarkTheme,\n} as AlmeTheme;\n","/**\n * This file demonstrates how to adjust the font to brush script\n *\n * Some useful links for working with themes can be found at:\n * https://themes.material-ui.com/\n * https://material-ui.com/customization/default-theme/ //Will show all the properties you can edit\n * https://material.io/resources/color/#!/?view.left=0&view.right=0&primary.color=c24f00&secondary.color=214563 //great for color selecting\n */\n\n\nimport { ThemeOptions } from '@material-ui/core';\nimport { AlmeTheme, defaultTheme } from '../../../models/AlmeTheme';\n\n\nconst fontFamily = {\n fontFamily: 'Brush Script MT',\n letterSpacing: 'unset',\n};\n\nconst typography = {\n subtitle1: {\n ...defaultTheme.typography.subtitle1,\n ...fontFamily,\n fontWeight: 'bold',\n },\n subtitle2: {\n ...defaultTheme.typography.subtitle2,\n ...fontFamily,\n },\n caption: {\n ...defaultTheme.typography.caption,\n ...fontFamily,\n },\n body1: {\n ...defaultTheme.typography.body1,\n ...fontFamily,\n },\n body2: {\n ...defaultTheme.typography.body2,\n ...fontFamily,\n },\n button: {\n ...defaultTheme.typography.button,\n textTransform: 'none',\n },\n};\n\nconst lightModeTheme = { typography } as ThemeOptions;\n\n\n\nexport const appThemeMain = {\n lightTheme: lightModeTheme,\n darkTheme: {},\n} as AlmeTheme;\n","/**\n * This file demonstrates how to select Courier New Script.\n *\n * Some useful links for working with themes can be found at:\n * https://themes.material-ui.com/\n * https://material-ui.com/customization/default-theme/ //Will show all the properties you can edit\n * https://material.io/resources/color/#!/?view.left=0&view.right=0&primary.color=c24f00&secondary.color=214563 //great for color selecting\n */\n\n\nimport { ThemeOptions } from '@material-ui/core';\nimport { AlmeTheme, defaultTheme } from '../../../models/AlmeTheme';\n\n\nconst fontFamily = {\n fontFamily: 'Courier New',\n letterSpacing: 'unset',\n};\n\nconst typography = {\n subtitle1: {\n ...defaultTheme.typography.subtitle1,\n ...fontFamily,\n fontWeight: 'bold',\n },\n subtitle2: {\n ...defaultTheme.typography.subtitle2,\n ...fontFamily,\n },\n caption: {\n ...defaultTheme.typography.caption,\n ...fontFamily,\n },\n body1: {\n ...defaultTheme.typography.body1,\n ...fontFamily,\n },\n body2: {\n ...defaultTheme.typography.body2,\n ...fontFamily,\n },\n button: {\n ...defaultTheme.typography.button,\n textTransform: 'none',\n },\n};\n\nconst lightModeTheme = { typography } as ThemeOptions;\n\n\n\nexport const appThemeMain = {\n lightTheme: lightModeTheme,\n darkTheme: {},\n} as AlmeTheme;\n","/**\n * Demonstrates regular spacing between letters\n *\n * Some useful links for working with themes can be found at:\n * https://themes.material-ui.com/\n * https://material-ui.com/customization/default-theme/ //Will show all the properties you can edit\n * https://material.io/resources/color/#!/?view.left=0&view.right=0&primary.color=c24f00&secondary.color=214563 //great for color selecting\n */\n\n\nimport { ThemeOptions } from '@material-ui/core';\nimport { defaultTheme, defaultDarkTheme, AlmeTheme } from '../../../models/AlmeTheme';\n\nconst typography = {\n // This was added for the header (with the X and _ buttons) in iPhone 5\n // SE. It applies to other mobile devices in Portrait orientation. This\n // will affect other headings, so it may need to be moved in the future.\n h6: {\n [defaultTheme.breakpoints.down('xs')]: {\n letterSpacing: \"0.5em\", //This adjust the letter spacing of the \"Intelligent Virtual Assistant\" in the demo IVA.\n\n },\n },\n subtitle1: {\n letterSpacing: \"0.5em\",\n },\n body1: {\n letterSpacing: \"0.5em\",\n },\n};\n\n\nconst lightModeTheme = { typography } as ThemeOptions;\n\n\nexport const appThemeMain = {\n lightTheme: lightModeTheme,\n darkTheme: defaultDarkTheme,\n} as AlmeTheme;\n","/**\n * Demonstrates how to compress the distance between characters for certain elements\n *\n * Some useful links for working with themes can be found at:\n * https://themes.material-ui.com/\n * https://material-ui.com/customization/default-theme/ //Will show all the properties you can edit\n * https://material.io/resources/color/#!/?view.left=0&view.right=0&primary.color=c24f00&secondary.color=214563 //great for color selecting\n */\n\n\nimport { ThemeOptions } from '@material-ui/core';\nimport { defaultTheme, AlmeTheme } from '../../../models/AlmeTheme';\n\n\nconst typography = {\n // This was added for the header (with the X and _ buttons) in iPhone 5\n // SE. It applies to other mobile devices in Portrait orientation. This\n // will affect other headings, so it may need to be moved in the future.\n h6: {\n [defaultTheme.breakpoints.down('xs')]: {\n letterSpacing: \"-0.1em\", //This adjust the letter spacing of the \"Intelligent Virutal Assistant\" in the demo IVA.\n\n },\n },\n subtitle1: {\n letterSpacing: \"-0.1em\",\n },\n body1: {\n letterSpacing: \"-0.1em\",\n },\n};\n\n\nconst lightModeTheme = { typography } as ThemeOptions;\n\n\nexport const appThemeMain = {\n lightTheme: lightModeTheme,\n darkTheme: {},\n} as AlmeTheme;\n","/**\n * This file demonstrates how to select Times New Roman as the default script.\n *\n * Some useful links for working with themes can be found at:\n * https://themes.material-ui.com/\n * https://material-ui.com/customization/default-theme/ //Will show all the properties you can edit\n * https://material.io/resources/color/#!/?view.left=0&view.right=0&primary.color=c24f00&secondary.color=214563 //great for color selecting\n */\n\n\nimport { ThemeOptions } from '@material-ui/core';\nimport { AlmeTheme, defaultTheme } from '../../../models/AlmeTheme';\n\nconst fontFamily = {\n fontFamily: 'Times New Roman',\n letterSpacing: 'unset',\n};\n\nconst typography = {\n subtitle1: {\n ...defaultTheme.typography.subtitle1,\n ...fontFamily,\n fontWeight: 'bold',\n },\n subtitle2: {\n ...defaultTheme.typography.subtitle2,\n ...fontFamily,\n },\n caption: {\n ...defaultTheme.typography.caption,\n ...fontFamily,\n },\n body1: {\n ...defaultTheme.typography.body1,\n ...fontFamily,\n },\n body2: {\n ...defaultTheme.typography.body2,\n ...fontFamily,\n },\n button: {\n ...defaultTheme.typography.button,\n textTransform: 'none',\n },\n};\n\nconst lightModeTheme = { typography } as ThemeOptions;\n\n\n\nexport const appThemeMain = {\n lightTheme: lightModeTheme,\n darkTheme: {},\n} as AlmeTheme;\n","/**\n * Shapes can be customized using the Material UI theming engine. In this example the lightMode theme is adjusted at several points to change the border radius of several shapes.\n * The modifications take place towards the bottom of the lightModeTheme object.\n *\n * Some useful links for working with themes can be found at:\n * https://themes.material-ui.com/\n * https://material-ui.com/customization/default-theme/ //Will show all the properties you can edit\n * https://material.io/resources/color/#!/?view.left=0&view.right=0&primary.color=c24f00&secondary.color=214563 //great for color selecting\n */\n\nimport { ThemeOptions } from '@material-ui/core';\nimport { AlmeTheme } from '../../../models/AlmeTheme';\n\n\n\nconst shape = {\n borderRadius: 24,\n};\n\nconst lightModeTheme = { shape } as ThemeOptions;\n\n\nexport const appThemeMain = {\n lightTheme: lightModeTheme,\n darkTheme: {},\n} as AlmeTheme;\n","/**\n * This example adjust the rounding of both the IVA response and the edges of the IVA widget. Changes can be seeing on the lightModeTheme object.\n *\n * Some useful links for working with themes can be found at:\n * https://themes.material-ui.com/\n * https://material-ui.com/customization/default-theme/ //Will show all the properties you can edit\n * https://material.io/resources/color/#!/?view.left=0&view.right=0&primary.color=c24f00&secondary.color=214563 //great for color selecting\n */\n\nimport { ThemeOptions } from '@material-ui/core';\nimport { defaultTheme, AlmeTheme } from '../../../models/AlmeTheme';\n\n\n\nconst typography = {\n // This was added for the header (with the X and _ buttons) in iPhone 5\n // SE. It applies to other mobile devices in Portrait orientation. This\n // will affect other headings, so it may need to be moved in the future.\n h6: {\n [defaultTheme.breakpoints.down('xs')]: {\n fontSize: '16px',\n },\n },\n subtitle1: {\n fontWeight: 'bold',\n },\n};\n\nconst overrides = {\n MuiInputLabel: {\n root: {\n borderRadius: 100,\n },\n },\n // Individual UI components can also have their border Radius Adjusted.\n MuiContainer: {\n root: {\n borderRadius: 25,\n },\n },\n};\n\nconst shape = {\n borderRadius: 100,\n};\n\n\n\nconst lightModeTheme = { typography, overrides, shape } as ThemeOptions;\n\nexport const appThemeMain = {\n lightTheme: lightModeTheme,\n darkTheme: {},\n} as AlmeTheme;\n","/**\n *In this example the shape property of the lightModeTheme object has been reduced to zero. This results in sharper corners being seen by the user.\n *\n * Some useful links for working with themes can be found at:\n * https://themes.material-ui.com/\n * https://material-ui.com/customization/default-theme/ //Will show all the properties you can edit\n * https://material.io/resources/color/#!/?view.left=0&view.right=0&primary.color=c24f00&secondary.color=214563 //great for color selecting\n */\n\nimport { ThemeOptions } from '@material-ui/core';\nimport { defaultDarkTheme, AlmeTheme } from '../../../models/AlmeTheme';\n\n\n\nconst shape = {\n borderRadius: 0,\n};\n\nconst lightModeTheme = { shape } as ThemeOptions;\n\n\nexport const appThemeMain = {\n lightTheme: lightModeTheme,\n darkTheme: defaultDarkTheme,\n} as AlmeTheme;\n","\nexport interface AlmeAppConfig {\n lastEntryIdInterval: number;\n notificationApi: {\n pollForNotifications: boolean;\n pollForLiveChat: boolean;\n notificationInterval: number;\n liveChatInterval: {\n connected: number;\n disconnected: number;\n };\n };\n revision: number;\n}\n\n/**\n * This is the baseline alme app 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: AlmeAppConfig = {\n lastEntryIdInterval: 10000,\n notificationApi: {\n pollForNotifications: false,\n pollForLiveChat: false,\n notificationInterval: 10000,\n liveChatInterval: {\n connected: 2000,\n disconnected: 30000,\n },\n },\n revision: 0,\n};\n\nexport default defaultConfig;","export interface AlmeApiUtilsConfig {\n apiUtils: {\n errorResponse: {\n entryId: string;\n };\n uiVersion: string;\n };\n}\n\n/**\n * This is the baseline alme api utils 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: AlmeApiUtilsConfig = {\n apiUtils: {\n uiVersion: process.env.VERSION || '0.0.0',\n errorResponse: {\n entryId: '00000000-0000-0000-0000-000000000000',\n },\n },\n};\n\nexport default defaultConfig;","import dialogConfig, { AlmeDialogConfig } from \"../../AlmeDialog/AlmeDialogConfig\";\n\ninterface LiveChatControlsConfig extends AlmeDialogConfig {\n buttonText: string;\n defaultOperatorName: string;\n typingMessageText: string;\n typingMessageDelay?: number;\n}\n\nexport interface AlmeLiveChatControlsConfig {\n liveChatControls: LiveChatControlsConfig;\n\n}\n\n/**\n * This is the baseline live chat controls 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: AlmeLiveChatControlsConfig = {\n liveChatControls: {\n buttonText: 'End Chat',\n defaultOperatorName: 'Operator',\n typingMessageText: 'is typing',\n typingMessageDelay: 3000,\n dialog: {\n ...dialogConfig.dialog,\n },\n },\n\n};\n\nexport default defaultConfig;","export interface AlmeThemeModeToggleConfig {\n themeModeToggle: {\n label?: string;\n };\n}\n\n/**\n * This is the baseline theme mode toggle 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: AlmeThemeModeToggleConfig = {\n themeModeToggle: {\n label: 'Dark Mode',\n },\n};\n\nexport default defaultConfig;","import { ButtonProps } from '@material-ui/core';\nimport launchPointConfig, { AlmeLaunchPointConfig } from '../AlmeLaunchPoint/AlmeLaunchPointConfig';\n\ninterface LaunchToolsConfig extends AlmeLaunchPointConfig {\n launchButton: {\n color: ButtonProps['color'];\n variant: ButtonProps['variant'];\n };\n}\n\nexport interface AlmeLaunchToolsConfig {\n launchTools: LaunchToolsConfig;\n}\n\nconst defaultConfig: AlmeLaunchToolsConfig = {\n launchTools: {\n launchButton: {\n color: 'secondary' as const,\n variant: 'contained' as const,\n },\n ...launchPointConfig,\n },\n};\n\nexport default defaultConfig;","import { SvgIconProps } from '@material-ui/core';\n\nexport interface AlmeCloseIconConfig {\n closeIcon: {\n isCloseEnabled: boolean;\n styles: {\n buttonSize?: SvgIconProps['fontSize'];\n };\n };\n}\n\n/**\n * This is the baseline close icon 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: AlmeCloseIconConfig = {\n closeIcon: {\n isCloseEnabled: true,\n styles: {},\n },\n};\n\nexport default defaultConfig;","import React from 'react';\nimport { TextFieldProps, FilledTextFieldProps, ButtonProps, OutlinedTextFieldProps, StandardTextFieldProps } from \"@material-ui/core\";\nimport { ReactElement } from \"react\";\n\nimport SendIcon from '@material-ui/icons/Send';\n\nexport interface AlmeInputConfig {\n input: {\n maxInputLength: number;\n /**\n * Optional - remove for simple \"send\" icon\n */\n submitButtonText?: string;\n userTypingEventDelay?: number;\n styles: {\n textField: {\n color: TextFieldProps['color'];\n variant: FilledTextFieldProps['variant'] | OutlinedTextFieldProps['variant'] | StandardTextFieldProps['variant'];\n size: TextFieldProps['size'];\n };\n button: {\n color: ButtonProps['color'];\n };\n };\n shouldAutoFocus?: boolean;\n sendIcon?: ReactElement;\n displayError?: boolean;\n };\n}\n\n/**\n * This is the baseline input 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: AlmeInputConfig = {\n input: {\n //submitButtonText: 'Send',\n maxInputLength: 200,\n userTypingEventDelay: 10000,\n styles: {\n textField: {\n color: 'secondary' as const,\n variant: 'outlined' as const,\n size: 'medium' as const,\n },\n button: {\n color: 'secondary' as const,\n },\n },\n sendIcon: (),\n displayError: true,\n },\n};\n\nexport default defaultConfig;\n","export default \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 182.99 182.99'%3e%3cdefs%3e%3cstyle%3e.cls-1%7bfill:%23bcbbbb%3b%7d.cls-2%7bfill:%23333%3b%7d%3c/style%3e%3c/defs%3e%3cg id='Layer_2' data-name='Layer 2'%3e%3cg id='Layer_1-2' data-name='Layer 1'%3e%3ccircle class='cls-1' cx='91.5' cy='91.5' r='91.5'/%3e%3cpath class='cls-2' d='M59.06%2c78.35l1.84-.69L60%2c75.88a18.67%2c18.67%2c0%2c1%2c0-16.81%2c26.79%2c19.41%2c19.41%2c0%2c0%2c0%2c3.12-.26l1.94-.33-.5-1.9a18.13%2c18.13%2c0%2c0%2c1-.61-4.69A18.38%2c18.38%2c0%2c0%2c1%2c59.06%2c78.35ZM43.59%2c95.49a22.55%2c22.55%2c0%2c0%2c0%2c.29%2c3.58h-.65A15.08%2c15.08%2c0%2c1%2c1%2c55.89%2c75.81%2c22%2c22%2c0%2c0%2c0%2c43.59%2c95.49Z'/%3e%3cpath class='cls-2' d='M138.72%2c54.21c-8.19%2c0-16.81%2c3.94-22.74%2c10.21a73.66%2c73.66%2c0%2c0%2c0-21.66-9.93%2c2.49%2c2.49%2c0%2c0%2c0-2.91.82c-.75%2c1.06-.4%2c2.18.28%2c3.37A51.13%2c51.13%2c0%2c0%2c0%2c80.2%2c57.3a2.16%2c2.16%2c0%2c0%2c0-2.12%2c1.39c-.62%2c1.67.67%2c2.78%2c3.51%2c5.22l.84.73a53.49%2c53.49%2c0%2c0%2c0-11.9%2c3.58c-5.92-8.49-15.62-14-25.15-14A30.37%2c30.37%2c0%2c0%2c0%2c15.05%2c84.54a30%2c30%2c0%2c0%2c0%2c2.82%2c12.78%2c2%2c2%2c0%2c0%2c0%2c1.37%2c1.12%2c2%2c2%2c0%2c0%2c0%2c1.26-.13%2c32.38%2c32.38%2c0%2c0%2c0%2c6.62%2c9%2c2.11%2c2.11%2c0%2c0%2c0%2c2.08.57%2c2%2c2%2c0%2c0%2c0%2c1.18-.91l1.09.83c3.94%2c3%2c8.83%2c6.78%2c13.48%2c7%2c3.07%2c19.07%2c20.23%2c30.32%2c46.74%2c30.32%2c27.56%2c0%2c45.48-11.57%2c48.38-31.07%2c6.23-.62%2c9.92-3.8%2c12.74-6.23l.94-.81a2%2c2%2c0%2c0%2c0%2c1.15.87%2c2.1%2c2.1%2c0%2c0%2c0%2c2.09-.57%2c32.58%2c32.58%2c0%2c0%2c0%2c6.62-9%2c2%2c2%2c0%2c0%2c0%2c1.25.13%2c2%2c2%2c0%2c0%2c0%2c1.37-1.12%2c30%2c30%2c0%2c0%2c0%2c2.82-12.78A30.37%2c30.37%2c0%2c0%2c0%2c138.72%2c54.21Zm25%2c39.87a2.09%2c2.09%2c0%2c0%2c0-1.23-.1%2c2%2c2%2c0%2c0%2c0-1.36%2c1.16%2c29.61%2c29.61%2c0%2c0%2c1-5.14%2c8.1%2c2%2c2%2c0%2c0%2c0-.82-.55%2c2.19%2c2.19%2c0%2c0%2c0-2%2c.31c-.89.64-1.74%2c1.37-2.64%2c2.15-3.23%2c2.78-6.88%2c5.94-14.14%2c5.42l-.25%2c3.58h.06c-1.46%2c8.77-6.24%2c15.58-14.26%2c20.27-7.69%2c4.5-18.13%2c6.87-30.19%2c6.87-11.77%2c0-21.93-2.41-29.39-7-8.61-5.27-13.28-13.18-13.91-23.51l-3.86.23c0%2c.06%2c0%2c.12%2c0%2c.18-3.42-.47-7.53-3.63-10.89-6.21-.95-.73-1.85-1.42-2.67-2a2.18%2c2.18%2c0%2c0%2c0-2-.31%2c2%2c2%2c0%2c0%2c0-.82.55A29.85%2c29.85%2c0%2c0%2c1%2c23%2c95.14%2c2%2c2%2c0%2c0%2c0%2c21.62%2c94a2.09%2c2.09%2c0%2c0%2c0-1.23.1%2c26.76%2c26.76%2c0%2c0%2c1%2c25-36.28c10.81%2c0%2c19.8%2c7.64%2c23.91%2c15.21l1.25-.68%2c0%2c.07A50.54%2c50.54%2c0%2c0%2c1%2c86.05%2c68%2c2.22%2c2.22%2c0%2c0%2c0%2c88%2c66.47c.49-1.62-.78-2.83-3.38-5.07A53.9%2c53.9%2c0%2c0%2c1%2c94%2c63.26a2.44%2c2.44%2c0%2c0%2c0%2c2.89-.75c.77-1%2c.41-2.17-.28-3.34A72.89%2c72.89%2c0%2c0%2c1%2c116.4%2c69.41l.36-.5%2c0%2c0C122%2c62.17%2c130.63%2c57.8%2c138.72%2c57.8a26.76%2c26.76%2c0%2c0%2c1%2c25%2c36.28Z'/%3e%3cpath class='cls-2' d='M139.44%2c64.62a18.79%2c18.79%2c0%2c0%2c0-16.82%2c10.55l-.85%2c1.77%2c1.84.69a18.31%2c18.31%2c0%2c0%2c1%2c11.27%2c21.83l-.5%2c1.9%2c1.94.33a19.41%2c19.41%2c0%2c0%2c0%2c3.12.26%2c18.67%2c18.67%2c0%2c0%2c0%2c0-37.33Zm0%2c33.74h-.66a21.44%2c21.44%2c0%2c0%2c0%2c.3-3.58%2c22%2c22%2c0%2c0%2c0-12.3-19.68%2c15.08%2c15.08%2c0%2c1%2c1%2c12.66%2c23.27Z'/%3e%3cpath class='cls-2' d='M129.81%2c84.72%2c117.18%2c84c-.1%2c0-.15%2c0-.17.06-.51%2c0-1%2c0-1.56%2c0-1%2c0-2%2c0-3%2c0-5.86-.14-12.5-.3-16.57%2c3.67a10.36%2c10.36%2c0%2c0%2c0-2.19%2c3.18%2c13%2c13%2c0%2c0%2c0-6.18-.1%2c10.19%2c10.19%2c0%2c0%2c0-1.34-1.64c-4.07-4-10.71-3.82-16.57-3.68-1%2c0-2.07%2c0-3%2c0-.54%2c0-1%2c0-1.56%2c0%2c0%2c0-.07-.06-.17-.06l-12.63.72a1%2c1%2c0%2c0%2c0-1%2c.94v4.72a1%2c1%2c0%2c0%2c0%2c.84.93l1.28.2c-.91%2c3.42-.25%2c7.47.36%2c11.16l.08.45c2%2c12.1%2c10.85%2c13.4%2c18%2c13.4%2c1%2c0%2c2%2c0%2c3%2c0a14.06%2c14.06%2c0%2c0%2c0%2c5.59-1.28c.83%2c6.66%2c4.78%2c12.73%2c9.77%2c13.84v2.89a11.27%2c11.27%2c0%2c0%2c1-3.75-1.13%2c1.62%2c1.62%2c0%2c0%2c0-1.49%2c2.87%2c14.77%2c14.77%2c0%2c0%2c0%2c6.84%2c1.6%2c19.4%2c19.4%2c0%2c0%2c0%2c7.53-1.57%2c1.62%2c1.62%2c0%2c1%2c0-1.38-2.93%2c16.29%2c16.29%2c0%2c0%2c1-4.51%2c1.17v-2.9c5.2-1.16%2c9.29-7.7%2c9.86-14.68a14.57%2c14.57%2c0%2c0%2c0%2c4.07.68c.94%2c0%2c2%2c.06%2c3%2c.06%2c7.18%2c0%2c16-1.3%2c18-13.41l.07-.44c.62-3.7%2c1.28-7.75.37-11.17l1.28-.2a1%2c1%2c0%2c0%2c0%2c.84-.93V85.66A1%2c1%2c0%2c0%2c0%2c129.81%2c84.72ZM92.59%2c94.54a20.1%2c20.1%2c0%2c0%2c0-.2%2c2.87c0%2c.57%2c0%2c1.14%2c0%2c1.7-.25%2c0-.48%2c0-.75%2c0a17.83%2c17.83%2c0%2c0%2c0-2.14.13c0-.12%2c0-.24%2c0-.36a17.92%2c17.92%2c0%2c0%2c0-.53-4.5A8.94%2c8.94%2c0%2c0%2c1%2c92.59%2c94.54Zm-18%2c19.51h0c-9%2c.24-15.5-.34-17.11-10.12l-.07-.45c-.75-4.5-1.52-9.14.6-11.64%2c1.42-1.67%2c4.27-2.52%2c8.47-2.52%2c1%2c0%2c2.07%2c0%2c3.14%2c0s2.14-.06%2c3.22-.06c4.15%2c0%2c8.26.38%2c10.56%2c2.63a6.73%2c6.73%2c0%2c0%2c1%2c.85%2c1l.39.68a11.68%2c11.68%2c0%2c0%2c1%2c1%2c5.28c0%2c.47%2c0%2c.94%2c0%2c1.42-4.17%2c2-5.29%2c6.56-5.48%2c12A9.78%2c9.78%2c0%2c0%2c1%2c74.62%2c114.05Zm49.9-12-.07.45c-1.62%2c9.78-8.11%2c10.36-17.11%2c10.12h0a9.94%2c9.94%2c0%2c0%2c1-4.14-1c-.28-5.67-1.7-10.26-6.81-11.9a22.39%2c22.39%2c0%2c0%2c1-.13-2.32c0-3.22.75-5.51%2c2.28-7%2c2.3-2.24%2c6.41-2.62%2c10.56-2.62%2c1.08%2c0%2c2.16%2c0%2c3.22%2c0s2.12%2c0%2c3.14%2c0c4.2%2c0%2c7%2c.85%2c8.47%2c2.52C126%2c92.9%2c125.27%2c97.55%2c124.52%2c102Z'/%3e%3cpath class='cls-2' d='M77.92%2c105.53c-5-5-10.92-2.24-13.33-.06a1.62%2c1.62%2c0%2c0%2c0%2c2.17%2c2.41%2c9%2c9%2c0%2c0%2c1%2c3.06-1.67%2c5.47%2c5.47%2c0%2c0%2c1%2c5.81%2c1.61%2c1.58%2c1.58%2c0%2c0%2c0%2c1.14.47%2c1.6%2c1.6%2c0%2c0%2c0%2c1.15-.47A1.62%2c1.62%2c0%2c0%2c0%2c77.92%2c105.53Z'/%3e%3cpath class='cls-2' d='M104.79%2c105.47a1.62%2c1.62%2c0%2c0%2c0%2c2.17%2c2.41%2c9.14%2c9.14%2c0%2c0%2c1%2c3.06-1.67%2c5.47%2c5.47%2c0%2c0%2c1%2c5.81%2c1.61%2c1.6%2c1.6%2c0%2c0%2c0%2c1.15.47%2c1.58%2c1.58%2c0%2c0%2c0%2c1.14-.47%2c1.61%2c1.61%2c0%2c0%2c0%2c0-2.29C113.09%2c100.49%2c107.2%2c103.29%2c104.79%2c105.47Z'/%3e%3c/g%3e%3c/g%3e%3c/svg%3e\"","var map = {\n\t\"./Cornerstones4Care/config\": [\n\t\t313,\n\t\t9,\n\t\t10\n\t],\n\t\"./Cornerstones4Care/config.tsx\": [\n\t\t313,\n\t\t9,\n\t\t10\n\t],\n\t\"./Cornerstones4Care/ivaAvatar.png\": [\n\t\t494,\n\t\t9,\n\t\t43\n\t],\n\t\"./Cornerstones4Care/persona\": [\n\t\t350,\n\t\t9,\n\t\t3\n\t],\n\t\"./Cornerstones4Care/persona.tsx\": [\n\t\t350,\n\t\t9,\n\t\t3\n\t],\n\t\"./Cornerstones4Care/theme\": [\n\t\t314,\n\t\t9,\n\t\t14\n\t],\n\t\"./Cornerstones4Care/theme.ts\": [\n\t\t314,\n\t\t9,\n\t\t14\n\t],\n\t\"./Cornerstones4Care/translations/languages\": [\n\t\t351,\n\t\t3,\n\t\t29\n\t],\n\t\"./Cornerstones4Care/translations/languages.json\": [\n\t\t351,\n\t\t3,\n\t\t29\n\t],\n\t\"./NovocareDiabetesEducation/config\": [\n\t\t315,\n\t\t9,\n\t\t11\n\t],\n\t\"./NovocareDiabetesEducation/config.tsx\": [\n\t\t315,\n\t\t9,\n\t\t11\n\t],\n\t\"./NovocareDiabetesEducation/ivaAvatar.png\": [\n\t\t495,\n\t\t9,\n\t\t44\n\t],\n\t\"./NovocareDiabetesEducation/persona\": [\n\t\t352,\n\t\t9,\n\t\t4\n\t],\n\t\"./NovocareDiabetesEducation/persona.tsx\": [\n\t\t352,\n\t\t9,\n\t\t4\n\t],\n\t\"./NovocareDiabetesEducation/theme\": [\n\t\t316,\n\t\t9,\n\t\t15\n\t],\n\t\"./NovocareDiabetesEducation/theme.ts\": [\n\t\t316,\n\t\t9,\n\t\t15\n\t],\n\t\"./NovocareDiabetesEducation/translations/languages\": [\n\t\t353,\n\t\t3,\n\t\t30\n\t],\n\t\"./NovocareDiabetesEducation/translations/languages.json\": [\n\t\t353,\n\t\t3,\n\t\t30\n\t],\n\t\"./Ozempic/config\": [\n\t\t317,\n\t\t9,\n\t\t12\n\t],\n\t\"./Ozempic/config.tsx\": [\n\t\t317,\n\t\t9,\n\t\t12\n\t],\n\t\"./Ozempic/ivaAvatar.png\": [\n\t\t496,\n\t\t9,\n\t\t45\n\t],\n\t\"./Ozempic/persona\": [\n\t\t354,\n\t\t9,\n\t\t5\n\t],\n\t\"./Ozempic/persona.tsx\": [\n\t\t354,\n\t\t9,\n\t\t5\n\t],\n\t\"./Ozempic/theme\": [\n\t\t318,\n\t\t9,\n\t\t16\n\t],\n\t\"./Ozempic/theme.ts\": [\n\t\t318,\n\t\t9,\n\t\t16\n\t],\n\t\"./Ozempic/translations/languages\": [\n\t\t355,\n\t\t3,\n\t\t31\n\t],\n\t\"./Ozempic/translations/languages.json\": [\n\t\t355,\n\t\t3,\n\t\t31\n\t],\n\t\"./OzempicConsumer/config\": [\n\t\t319,\n\t\t9,\n\t\t0,\n\t\t17\n\t],\n\t\"./OzempicConsumer/config.tsx\": [\n\t\t319,\n\t\t9,\n\t\t0,\n\t\t17\n\t],\n\t\"./OzempicConsumer/ivaAvatar.png\": [\n\t\t498,\n\t\t9,\n\t\t0\n\t],\n\t\"./OzempicConsumer/persona\": [\n\t\t356,\n\t\t9,\n\t\t0,\n\t\t7\n\t],\n\t\"./OzempicConsumer/persona.tsx\": [\n\t\t356,\n\t\t9,\n\t\t0,\n\t\t7\n\t],\n\t\"./OzempicConsumer/theme\": [\n\t\t320,\n\t\t9,\n\t\t18\n\t],\n\t\"./OzempicConsumer/theme.ts\": [\n\t\t320,\n\t\t9,\n\t\t18\n\t],\n\t\"./OzempicConsumer/translations/languages\": [\n\t\t357,\n\t\t3,\n\t\t32\n\t],\n\t\"./OzempicConsumer/translations/languages.json\": [\n\t\t357,\n\t\t3,\n\t\t32\n\t],\n\t\"./RybelsusConsumer/config\": [\n\t\t321,\n\t\t9,\n\t\t1,\n\t\t19\n\t],\n\t\"./RybelsusConsumer/config.tsx\": [\n\t\t321,\n\t\t9,\n\t\t1,\n\t\t19\n\t],\n\t\"./RybelsusConsumer/ivaAvatar.png\": [\n\t\t499,\n\t\t9,\n\t\t1\n\t],\n\t\"./RybelsusConsumer/persona\": [\n\t\t358,\n\t\t9,\n\t\t1,\n\t\t8\n\t],\n\t\"./RybelsusConsumer/persona.tsx\": [\n\t\t358,\n\t\t9,\n\t\t1,\n\t\t8\n\t],\n\t\"./RybelsusConsumer/theme\": [\n\t\t322,\n\t\t9,\n\t\t20\n\t],\n\t\"./RybelsusConsumer/theme.ts\": [\n\t\t322,\n\t\t9,\n\t\t20\n\t],\n\t\"./RybelsusConsumer/translations/languages\": [\n\t\t359,\n\t\t3,\n\t\t33\n\t],\n\t\"./RybelsusConsumer/translations/languages.json\": [\n\t\t359,\n\t\t3,\n\t\t33\n\t],\n\t\"./TresibaConsumer/config\": [\n\t\t323,\n\t\t9,\n\t\t2,\n\t\t21\n\t],\n\t\"./TresibaConsumer/config.tsx\": [\n\t\t323,\n\t\t9,\n\t\t2,\n\t\t21\n\t],\n\t\"./TresibaConsumer/ivaAvatar.png\": [\n\t\t500,\n\t\t9,\n\t\t2\n\t],\n\t\"./TresibaConsumer/persona\": [\n\t\t360,\n\t\t9,\n\t\t2,\n\t\t9\n\t],\n\t\"./TresibaConsumer/persona.tsx\": [\n\t\t360,\n\t\t9,\n\t\t2,\n\t\t9\n\t],\n\t\"./TresibaConsumer/theme\": [\n\t\t324,\n\t\t9,\n\t\t22\n\t],\n\t\"./TresibaConsumer/theme.ts\": [\n\t\t324,\n\t\t9,\n\t\t22\n\t],\n\t\"./TresibaConsumer/translations/languages\": [\n\t\t361,\n\t\t3,\n\t\t34\n\t],\n\t\"./TresibaConsumer/translations/languages.json\": [\n\t\t361,\n\t\t3,\n\t\t34\n\t],\n\t\"./Victoza/config\": [\n\t\t325,\n\t\t9,\n\t\t13\n\t],\n\t\"./Victoza/config.tsx\": [\n\t\t325,\n\t\t9,\n\t\t13\n\t],\n\t\"./Victoza/ivaAvatar.png\": [\n\t\t497,\n\t\t9,\n\t\t46\n\t],\n\t\"./Victoza/persona\": [\n\t\t362,\n\t\t9,\n\t\t6\n\t],\n\t\"./Victoza/persona.tsx\": [\n\t\t362,\n\t\t9,\n\t\t6\n\t],\n\t\"./Victoza/theme\": [\n\t\t326,\n\t\t9,\n\t\t23\n\t],\n\t\"./Victoza/theme.ts\": [\n\t\t326,\n\t\t9,\n\t\t23\n\t],\n\t\"./Victoza/translations/languages\": [\n\t\t363,\n\t\t3,\n\t\t35\n\t],\n\t\"./Victoza/translations/languages.json\": [\n\t\t363,\n\t\t3,\n\t\t35\n\t],\n\t\"./baseThemeOverrides\": [\n\t\t121,\n\t\t9\n\t],\n\t\"./baseThemeOverrides.tsx\": [\n\t\t121,\n\t\t9\n\t],\n\t\"./examples/ColorExamples/badContrast\": [\n\t\t125,\n\t\t9\n\t],\n\t\"./examples/ColorExamples/badContrast.ts\": [\n\t\t125,\n\t\t9\n\t],\n\t\"./examples/ColorExamples/blackAndWhite\": [\n\t\t126,\n\t\t9\n\t],\n\t\"./examples/ColorExamples/blackAndWhite.ts\": [\n\t\t126,\n\t\t9\n\t],\n\t\"./examples/ColorExamples/rainbow\": [\n\t\t124,\n\t\t9\n\t],\n\t\"./examples/ColorExamples/rainbow.ts\": [\n\t\t124,\n\t\t9\n\t],\n\t\"./examples/ColorExamples/shades\": [\n\t\t127,\n\t\t9\n\t],\n\t\"./examples/ColorExamples/shades.ts\": [\n\t\t127,\n\t\t9\n\t],\n\t\"./examples/IconExamples/headerIcon\": [\n\t\t364,\n\t\t9,\n\t\t24\n\t],\n\t\"./examples/IconExamples/headerIcon.tsx\": [\n\t\t364,\n\t\t9,\n\t\t24\n\t],\n\t\"./examples/IconExamples/ivaResponseIcon\": [\n\t\t365,\n\t\t9,\n\t\t25\n\t],\n\t\"./examples/IconExamples/ivaResponseIcon.tsx\": [\n\t\t365,\n\t\t9,\n\t\t25\n\t],\n\t\"./examples/IconExamples/userInputIncon\": [\n\t\t366,\n\t\t9,\n\t\t26\n\t],\n\t\"./examples/IconExamples/userInputIncon.tsx\": [\n\t\t366,\n\t\t9,\n\t\t26\n\t],\n\t\"./examples/ShapeExamples/customShapes\": [\n\t\t133,\n\t\t9\n\t],\n\t\"./examples/ShapeExamples/customShapes.ts\": [\n\t\t133,\n\t\t9\n\t],\n\t\"./examples/ShapeExamples/everythingIsRounded\": [\n\t\t134,\n\t\t9\n\t],\n\t\"./examples/ShapeExamples/everythingIsRounded.ts\": [\n\t\t134,\n\t\t9\n\t],\n\t\"./examples/ShapeExamples/everythingIsSharp\": [\n\t\t135,\n\t\t9\n\t],\n\t\"./examples/ShapeExamples/everythingIsSharp.ts\": [\n\t\t135,\n\t\t9\n\t],\n\t\"./examples/TypographyExamples/adjustedTypeCompression\": [\n\t\t131,\n\t\t9\n\t],\n\t\"./examples/TypographyExamples/adjustedTypeCompression.ts\": [\n\t\t131,\n\t\t9\n\t],\n\t\"./examples/TypographyExamples/adjustedTypeSpaced\": [\n\t\t130,\n\t\t9\n\t],\n\t\"./examples/TypographyExamples/adjustedTypeSpaced.ts\": [\n\t\t130,\n\t\t9\n\t],\n\t\"./examples/TypographyExamples/brushScript\": [\n\t\t128,\n\t\t9\n\t],\n\t\"./examples/TypographyExamples/brushScript.ts\": [\n\t\t128,\n\t\t9\n\t],\n\t\"./examples/TypographyExamples/courierNewScript\": [\n\t\t129,\n\t\t9\n\t],\n\t\"./examples/TypographyExamples/courierNewScript.ts\": [\n\t\t129,\n\t\t9\n\t],\n\t\"./examples/TypographyExamples/timesNewRomanScript\": [\n\t\t132,\n\t\t9\n\t],\n\t\"./examples/TypographyExamples/timesNewRomanScript.ts\": [\n\t\t132,\n\t\t9\n\t],\n\t\"./examples/verintTheme\": [\n\t\t123,\n\t\t9\n\t],\n\t\"./examples/verintTheme.ts\": [\n\t\t123,\n\t\t9\n\t],\n\t\"./mainPersona/config\": [\n\t\t104,\n\t\t9\n\t],\n\t\"./mainPersona/config.tsx\": [\n\t\t104,\n\t\t9\n\t],\n\t\"./mainPersona/persona\": [\n\t\t367,\n\t\t9,\n\t\t27\n\t],\n\t\"./mainPersona/persona.tsx\": [\n\t\t367,\n\t\t9,\n\t\t27\n\t],\n\t\"./mainPersona/theme\": [\n\t\t70,\n\t\t9\n\t],\n\t\"./mainPersona/theme.ts\": [\n\t\t70,\n\t\t9\n\t],\n\t\"./mainPersona/translations/languages\": [\n\t\t77,\n\t\t3\n\t],\n\t\"./mainPersona/translations/languages.json\": [\n\t\t77,\n\t\t3\n\t],\n\t\"./personaMapping\": [\n\t\t72,\n\t\t3\n\t],\n\t\"./personaMapping.json\": [\n\t\t72,\n\t\t3\n\t],\n\t\"./testPersona/persona\": [\n\t\t368,\n\t\t9,\n\t\t28\n\t],\n\t\"./testPersona/persona.tsx\": [\n\t\t368,\n\t\t9,\n\t\t28\n\t],\n\t\"./testPersona/translations/languages\": [\n\t\t369,\n\t\t3,\n\t\t36\n\t],\n\t\"./testPersona/translations/languages.json\": [\n\t\t369,\n\t\t3,\n\t\t36\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn Promise.all(ids.slice(2).map(__webpack_require__.e)).then(function() {\n\t\treturn __webpack_require__.t(id, ids[1])\n\t});\n}\nwebpackAsyncContext.keys = function webpackAsyncContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackAsyncContext.id = 262;\nmodule.exports = webpackAsyncContext;","export default \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 182.99 182.99'%3e%3cdefs%3e%3cstyle%3e.cls-1%7bfill:%23bcbbbb%3b%7d.cls-2%7bfill:%23333%3b%7d%3c/style%3e%3c/defs%3e%3cg id='Layer_2' data-name='Layer 2'%3e%3cg id='Layer_1-2' data-name='Layer 1'%3e%3ccircle class='cls-1' cx='91.5' cy='91.5' r='91.5'/%3e%3cpath class='cls-2' d='M114.41%2c82H68a2.26%2c2.26%2c0%2c1%2c1%2c0-4.51h46.43a2.26%2c2.26%2c0%2c1%2c1%2c0%2c4.51Z'/%3e%3cpath class='cls-2' d='M114.41%2c94.78H68a2.26%2c2.26%2c0%2c1%2c1%2c0-4.51h46.43a2.26%2c2.26%2c0%2c1%2c1%2c0%2c4.51Z'/%3e%3cpath class='cls-2' d='M98.45%2c107.59H68a2.26%2c2.26%2c0%2c1%2c1%2c0-4.51H98.45a2.26%2c2.26%2c0%2c1%2c1%2c0%2c4.51Z'/%3e%3cpath class='cls-2' d='M118.61%2c146.92l-14.88-9.33a46.75%2c46.75%2c0%2c1%2c1%2c29.62-66h0a46.67%2c46.67%2c0%2c0%2c1-13.22%2c57.8Zm-14.2-14.22%2c10.34%2c6.48L115.81%2c127l.82-.6A42.24%2c42.24%2c0%2c1%2c0%2c103.44%2c133Z'/%3e%3c/g%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 182.99 182.99'%3e%3cdefs%3e%3cstyle%3e.cls-1%7bfill:%23bcbbbb%3b%7d.cls-2%7bfill:%23333%3b%7d%3c/style%3e%3c/defs%3e%3cg id='Layer_2' data-name='Layer 2'%3e%3cg id='Layer_1-2' data-name='Layer 1'%3e%3ccircle class='cls-1' cx='91.5' cy='91.5' r='91.5'/%3e%3cpath class='cls-2' d='M141.05%2c136.3a2.4%2c2.4%2c0%2c0%2c1-2.21-1.49c-6.14-15.19-14.27-26.68-23.5-33.23a2.38%2c2.38%2c0%2c1%2c1%2c2.75-3.88c10%2c7.07%2c18.68%2c19.29%2c25.17%2c35.32a2.38%2c2.38%2c0%2c0%2c1-1.32%2c3.1A2.32%2c2.32%2c0%2c0%2c1%2c141.05%2c136.3Z'/%3e%3cpath class='cls-2' d='M44.15%2c136.3a2.32%2c2.32%2c0%2c0%2c1-.89-.18%2c2.38%2c2.38%2c0%2c0%2c1-1.32-3.1c6.51-16.08%2c15.23-28.31%2c25.25-35.38a2.38%2c2.38%2c0%2c0%2c1%2c2.74%2c3.89c-9.26%2c6.54-17.42%2c18-23.57%2c33.28A2.4%2c2.4%2c0%2c0%2c1%2c44.15%2c136.3Z'/%3e%3cpath class='cls-2' d='M92.39%2c94.61A28.61%2c28.61%2c0%2c1%2c1%2c121%2c66%2c28.64%2c28.64%2c0%2c0%2c1%2c92.39%2c94.61Zm0-52.46A23.85%2c23.85%2c0%2c1%2c0%2c116.25%2c66%2c23.88%2c23.88%2c0%2c0%2c0%2c92.39%2c42.15Z'/%3e%3c/g%3e%3c/g%3e%3c/svg%3e\"","import { ReactElement } from \"react\";\n\ninterface UserResponseConfig {\n userIcon?: ReactElement;\n}\n\nexport interface AlmeUserResponseConfig {\n userResponse: UserResponseConfig;\n}\n\n/**\n * This is the baseline response 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: AlmeUserResponseConfig = {\n userResponse: {\n },\n};\n\nexport default defaultConfig;","import { ButtonProps } from '@material-ui/core';\n\ninterface CtaButtonConfig {\n styles: {\n button: {\n color: ButtonProps['color'];\n variant: ButtonProps['variant'];\n };\n };\n}\n\nexport interface AlmeCtaButtonConfig {\n ctaButton: CtaButtonConfig;\n}\n\nconst defaultConfig: AlmeCtaButtonConfig = {\n ctaButton: {\n styles: {\n button: {\n color: 'secondary' as const,\n variant: 'contained' as const,\n },\n },\n },\n};\n\nexport default defaultConfig;","import { ButtonProps } from '@material-ui/core';\n\ninterface ChangeTenantConfirmationButtonConfig {\n styles: {\n button: {\n color: ButtonProps['color'];\n variant: ButtonProps['variant'];\n };\n };\n}\n\nexport interface ChangeTenantConfirmationConfig {\n optionButton: ChangeTenantConfirmationButtonConfig;\n}\n\nconst defaultConfig: ChangeTenantConfirmationConfig = {\n optionButton: {\n styles: {\n button: {\n color: 'secondary' as const,\n variant: 'contained' as const,\n },\n },\n },\n};\n\nexport default defaultConfig;","import dialogConfig, { AlmeDialogConfig, DialogConfig } from \"../../AlmeDialog/AlmeDialogConfig\";\nimport { InlineSurveyLinkAppEventConfig } from \"./AlmeSurvey\";\n\nexport type RadioButtonColor = 'default' | 'primary' | 'secondary' | undefined;\n\ninterface SurveyConfig extends DialogConfig {\n freeformTextMaxLength?: number;\n radioButtonColor?: RadioButtonColor;\n radioButtonOptions?: string[];\n submitLinkConfig?: InlineSurveyLinkAppEventConfig;\n}\n\ninterface AlmeSurveyDialogConfig extends AlmeDialogConfig {\n dialog: SurveyConfig;\n}\n\nexport interface AlmeSurveyConfig {\n survey: AlmeSurveyDialogConfig;\n}\n\n/**\n * This is the baseline survey config. Some values from this config will be populated via response action.\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: AlmeSurveyConfig = {\n survey: {\n dialog: {\n ...dialogConfig.dialog,\n },\n },\n};\n\nexport default defaultConfig;\n","import { Avatar, ButtonProps } from \"@material-ui/core\";\nimport React, { ReactElement } from \"react\";\nimport { FaRobot } from \"react-icons/fa\";\nimport ctaButtonConfig, { AlmeCtaButtonConfig } from \"../../ResponseActions/AlmeCtaButton/AlmeCtaButtonConfig\";\nimport changeTenantConfirmationConfig, { ChangeTenantConfirmationConfig } from \"../../ResponseActions/ChangeTenantConfirmation/ChangeTenantConfirmationConfig\";\nimport surveyConfig, { AlmeSurveyConfig } from \"../../ResponseActions/AlmeSurvey/AlmeSurveyConfig\";\n\ninterface IvaResponseConfig extends AlmeCtaButtonConfig, AlmeSurveyConfig, ChangeTenantConfirmationConfig {\n shouldAutoNav?: boolean;\n ivaIcon?: ReactElement;\n styles: {\n displayLink: {\n color: ButtonProps['color'];\n variant: ButtonProps['variant'];\n };\n navUrl: {\n color: ButtonProps['color'];\n variant: ButtonProps['variant'];\n };\n };\n}\n\nexport interface AlmeIvaResponseConfig {\n ivaResponse: IvaResponseConfig;\n}\n\n/**\n * This is the baseline response 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: AlmeIvaResponseConfig = {\n ivaResponse: {\n ...ctaButtonConfig,\n ...changeTenantConfirmationConfig,\n ...surveyConfig,\n ivaIcon: (\n \n \n \n ),\n styles: {\n displayLink: {\n color: 'primary' as const,\n variant: 'outlined' as const,\n },\n navUrl: {\n color: 'primary' as const,\n variant: 'contained' as const,\n },\n },\n },\n};\n\nexport default defaultConfig;","import userResponseConfig, { AlmeUserResponseConfig } from './AlmeUserResponse/AlmeUserResponseConfig';\nimport ivaResponseConfig, { AlmeIvaResponseConfig } from './AlmeIvaResponse/AlmeIvaResponseConfig';\n\ninterface ResponseConfig extends AlmeUserResponseConfig, AlmeIvaResponseConfig {\n}\n\nexport interface AlmeResponseConfig {\n response: ResponseConfig;\n}\n\n/**\n * This is the baseline response 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: AlmeResponseConfig = {\n response: {\n ...userResponseConfig,\n ...ivaResponseConfig,\n },\n};\n\nexport default defaultConfig;","import { ButtonProps } from \"@material-ui/core\";\n\nexport interface AlmeScrollButtonConfig {\n scrollButton: {\n styles: {\n color: ButtonProps['color'];\n variant: ButtonProps['variant'];\n };\n };\n}\n\n/**\n * This is the baseline scroll button 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: AlmeScrollButtonConfig = {\n scrollButton: {\n styles: {\n color: 'primary' as const,\n variant: 'contained' as const,\n },\n },\n};\n\nexport default defaultConfig;","import { AlmeColorProp } from \"../../models/AlmeColorMapping\";\nimport dialogConfig, { AlmeDialogConfig } from \"../AlmeDialog/AlmeDialogConfig\";\n\ninterface TimeoutWarningConfig extends AlmeDialogConfig {\n isEnabled: boolean;\n displayDuration: number;\n styles: {\n backgroundColor: AlmeColorProp;\n };\n}\n\nexport interface AlmeTimeoutWarningConfig {\n timeout: TimeoutWarningConfig;\n}\n\n/**\n * This is the baseline timeout warning 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: AlmeTimeoutWarningConfig = {\n timeout: {\n ...dialogConfig,\n isEnabled: true,\n displayDuration: 6000,\n styles: {\n backgroundColor: 'paper',\n },\n },\n};\n\nexport default defaultConfig;","import { TypographyProps } from \"@material-ui/core\";\n\nexport interface AlmeLiveChatBannerConfig {\n liveChatBanner: {\n joined: {\n main: {\n text: string;\n variant?: TypographyProps['variant'];\n };\n sub: {\n text: string;\n variant?: TypographyProps['variant'];\n };\n };\n ended: {\n main: {\n text: string;\n variant?: TypographyProps['variant'];\n };\n sub: {\n text: string;\n variant?: TypographyProps['variant'];\n };\n reason: {\n defaultReason: string;\n text: string;\n variant?: TypographyProps['variant'];\n };\n };\n left: {\n text: string;\n variant?: TypographyProps['variant'];\n };\n defaultRepName: string;\n };\n}\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 liveChatBanner: {\n joined: {\n main: {\n text: 'Connected To',\n },\n sub: {\n text: 'Customer Service Representative: ',\n },\n },\n left: {\n text: ' has left the conversation',\n },\n ended: {\n main: {\n text: 'Returning To',\n },\n sub: {\n text: 'Virtual Assistant',\n },\n reason: {\n defaultReason: 'System',\n text: ' Ended Live Chat',\n },\n },\n defaultRepName: 'Operator',\n },\n};\n\nexport default defaultConfig;","import React, { ReactElement } from \"react\";\nimport { Avatar } from '@material-ui/core';\nimport FaceIcon from '@material-ui/icons/Face';\nimport { ButtonProps } from '@material-ui/core';\n\ninterface LiveChatOperatorResponseConfig {\n chatIcon?: ReactElement;\n styles: {\n displayLink: {\n color: ButtonProps['color'];\n variant: ButtonProps['variant'];\n };\n navUrl: {\n color: ButtonProps['color'];\n variant: ButtonProps['variant'];\n };\n };\n shouldAutoNav?: boolean;\n useUniqueChatIcons?: boolean;\n}\n\nexport interface AlmeLiveChatOperatorResponseConfig {\n liveChatOperatorResponse: LiveChatOperatorResponseConfig;\n}\n\n/**\n * This is the baseline live chat operator response 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: AlmeLiveChatOperatorResponseConfig = {\n liveChatOperatorResponse: {\n chatIcon: (\n \n \n \n ),\n styles: {\n displayLink: {\n color: 'primary' as const,\n variant: 'outlined' as const,\n },\n navUrl: {\n color: 'primary' as const,\n variant: 'contained' as const,\n },\n },\n useUniqueChatIcons: true,\n },\n};\n\nexport default defaultConfig;","// eslint-disable-next-line @typescript-eslint/no-empty-interface\ninterface LiveChatSystemResponseConfig {\n // TODO: Add system response config properties.\n}\n\nexport interface AlmeLiveChatSystemResponseConfig {\n liveChatSystemResponse: LiveChatSystemResponseConfig;\n}\n\n/**\n * This is the baseline live chat system response 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: AlmeLiveChatSystemResponseConfig = {\n liveChatSystemResponse: {},\n};\n\nexport default defaultConfig;","import { ReactElement } from \"react\";\n\ninterface LiveChatUserResponseConfig {\n userIcon?: ReactElement;\n}\n\nexport interface AlmeLiveChatUserResponseConfig {\n liveChatUserResponse: LiveChatUserResponseConfig;\n}\n\n/**\n * This is the baseline live chat user response 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: AlmeLiveChatUserResponseConfig = {\n liveChatUserResponse: {},\n};\n\nexport default defaultConfig;","import bannerConfig, { AlmeLiveChatBannerConfig } from '../AlmeLiveChatBanner/AlmeLiveChatBannerConfig';\nimport operatorConfig, { AlmeLiveChatOperatorResponseConfig } from \"./AlmeLiveChatOperatorResponse/AlmeLiveChatOperatorResponseConfig\";\nimport systemConfig, { AlmeLiveChatSystemResponseConfig } from './AlmeLiveChatSystemResponse/AlmeLiveChatSystemResponseConfig';\nimport userConfig, { AlmeLiveChatUserResponseConfig } from \"./AlmeLiveChatUserResponse/AlmeLiveChatUserResponseConfig\";\n\ninterface LiveChatResponseConfig extends AlmeLiveChatBannerConfig, AlmeLiveChatOperatorResponseConfig, AlmeLiveChatUserResponseConfig, AlmeLiveChatSystemResponseConfig { }\n\nexport interface AlmeLiveChatResponseConfig {\n liveChatResponse: LiveChatResponseConfig;\n}\n\n/**\n * This is the baseline live chat response 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: AlmeLiveChatResponseConfig = {\n liveChatResponse: {\n ...bannerConfig,\n ...operatorConfig,\n ...userConfig,\n ...systemConfig,\n },\n};\n\nexport default defaultConfig;","import responseConfig, { AlmeResponseConfig } from \"../AlmeResponse/AlmeResponseConfig\";\nimport scrollButtonConfig, { AlmeScrollButtonConfig } from \"../AlmeScrollButton/AlmeScrollButtonConfig\";\nimport timeoutConfig, { AlmeTimeoutWarningConfig } from \"../AlmeTimeoutWarning/AlmeTimeoutWarningConfig\";\nimport liveChatResponseConfig, { AlmeLiveChatResponseConfig } from \"../LiveChat/AlmeLiveChatResponse/AlmeLiveChatResponseConfig\";\n\nexport interface HistoryConfig extends AlmeResponseConfig, AlmeScrollButtonConfig,\n AlmeLiveChatResponseConfig, AlmeTimeoutWarningConfig {\n shouldScrollOnNav?: boolean;\n}\nexport interface AlmeHistoryConfig {\n history: HistoryConfig;\n}\n\n/**\n * This is the baseline history 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: AlmeHistoryConfig = {\n history: {\n ...responseConfig,\n ...scrollButtonConfig,\n ...liveChatResponseConfig,\n ...timeoutConfig,\n shouldScrollOnNav: true,\n },\n};\n\nexport default defaultConfig;","interface DocumentIE11 extends Document {\n documentMode: unknown;\n}\n\nexport function isIE11(): boolean {\n return !!window.MSInputMethodContext && !!(document as DocumentIE11).documentMode;\n}","// 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\n\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);\nconst readyErrorMsg = 'serviceWorker.ready failed';\n\ntype Config = {\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\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 installingWorkerOnStateChange(installingWorker, registration, config);\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction installingWorkerOnStateChange(installingWorker: ServiceWorker, registration: ServiceWorkerRegistration, config?: Config): void {\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 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(readyErrorMsg, 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(readyErrorMsg, 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(readyErrorMsg, reason);\n });\n }\n}\n","// https://github.com/dequelabs/axe-core/blob/master/doc/API.md#api-name-axeconfigure\nconst axeConfig = {\n rules: [\n {\n id: 'heading-order',\n enabled: false,\n },\n {\n id: 'page-has-heading-one',\n enabled: false,\n },\n ],\n};\n\nexport default axeConfig;","import { AlmeIvaTypeProp } from \"./models/AlmeIvaTypeMapping\";\n\nconst indexConfig = {\n embeddedIvaRootId: 'alme-ui-embedded-root',\n popupIvaRootId: 'alme-ui-popup-root',\n inlineIvaRootId: 'alme-ui-client-root',\n testPageRootId: 'alme-ui-test-page-root',\n ivaProDivId: 'verint-iva-ui-root',\n};\n\nexport function getRootIdByIvaType(ivaType?: AlmeIvaTypeProp): string {\n switch (ivaType) {\n case 'popup':\n return indexConfig.popupIvaRootId;\n case 'inline':\n return indexConfig.inlineIvaRootId;\n case 'embedded':\n default:\n return indexConfig.embeddedIvaRootId;\n }\n\n}\n\nexport default indexConfig;","import { Logger as ApiLogger } from '@alme/types/logging/Logger';\r\nimport { isDebug } from './utils/DebugUtils';\r\n\r\nexport type Logger = ApiLogger;\r\n\r\nexport enum UiLogLevel {\r\n FATAL = 1,\r\n ERROR = 2,\r\n WARN = 3,\r\n INFO = 4,\r\n DEBUG = 5,\r\n ALL = 6,\r\n}\r\n\r\nexport class ConsoleLogger implements Logger {\r\n private static instance: ConsoleLogger;\r\n public loggingLevel: UiLogLevel;\r\n\r\n private constructor(loggingLevel: UiLogLevel) {\r\n this.loggingLevel = loggingLevel;\r\n }\r\n\r\n static getInstance(loggingLevel: UiLogLevel): ConsoleLogger {\r\n if (!ConsoleLogger.instance) {\r\n ConsoleLogger.instance = new ConsoleLogger(loggingLevel);\r\n }\r\n\r\n ConsoleLogger.instance.loggingLevel = loggingLevel;\r\n return ConsoleLogger.instance;\r\n }\r\n\r\n error(message?: unknown, ...optionalParams: unknown[]): void {\r\n if (this.loggingLevel >= 1) {\r\n console.error(message, ...optionalParams);\r\n }\r\n }\r\n\r\n warn(message?: unknown, ...optionalParams: unknown[]): void {\r\n if (this.loggingLevel >= 3) {\r\n console.warn(message, ...optionalParams);\r\n }\r\n }\r\n\r\n info(message?: unknown, ...optionalParams: unknown[]): void {\r\n if (this.loggingLevel >= 4) {\r\n console.info(message, ...optionalParams);\r\n }\r\n }\r\n\r\n debug(message?: unknown, ...optionalParams: unknown[]): void {\r\n if (this.loggingLevel >= 5) {\r\n console.debug(message, ...optionalParams);\r\n }\r\n }\r\n\r\n log(message?: unknown, ...optionalParams: unknown[]): void {\r\n if (this.loggingLevel >= 6) {\r\n console.log(message, ...optionalParams);\r\n }\r\n }\r\n}\r\n\r\nlet defaultLevel: UiLogLevel = 3;\r\nif (isDebug()) {\r\n defaultLevel = UiLogLevel.ALL;\r\n}\r\n\r\nexport default ConsoleLogger.getInstance(defaultLevel);\r\n\r\nexport const defaultLogLevel = defaultLevel;","import { PersonaMapping, PersonaState } from '../models/AlmePersona';\nimport { AlmeIvaTypeProp } from \"../models/AlmeIvaTypeMapping\";\nimport personaMappingJson from '../personas/personaMapping.json';\n\nimport { Theme, ThemeOptions } from '@material-ui/core';\nimport { createMuiTheme, responsiveFontSizes } from '@material-ui/core/styles';\nimport defaultLogger from '../Logger';\nimport deepmerge from 'deepmerge';\nimport baseTheme from '../personas/baseThemeOverrides';\nimport { createIntlCache, createIntl, IntlShape } from 'react-intl';\nimport { OptionalIntlConfig } from 'react-intl/src/components/provider';\nimport defaultTranslation from \"../personas/mainPersona/translations/languages.json\";\n\nexport function getAccessKeyFromQuery(): string | undefined {\n const accessKeyParamName = 'almeAccessKey';\n if (typeof URLSearchParams !== 'undefined') {\n const urlParams = new URLSearchParams(window.location.search);\n const accessKeyParam = urlParams.get(accessKeyParamName);\n return accessKeyParam || undefined;\n }\n else {\n // IE Fallback\n const url = window.location.href;\n const regex = new RegExp('[?&]' + accessKeyParamName + '(=([^&#]*)|&|#|$)');\n const results = regex.exec(url);\n if (!results) {\n return;\n }\n if (!results[2]) {\n return;\n }\n return decodeURIComponent(results[2].replace(/\\+/g, ' '));\n }\n}\n\nexport function getAccessKey(ivaType?: AlmeIvaTypeProp): string | undefined {\n if (ivaType && ivaType === 'popup') {\n return getAccessKeyFromQuery();\n }\n else {\n return undefined;\n }\n}\n\nexport function createTheme(themeStack?: ThemeOptions[]): Theme {\n const mergedTheme = themeStack ? deepmerge.all([baseTheme, ...(themeStack.filter(e => e != null))]) : baseTheme;\n let theme = createMuiTheme(mergedTheme);\n try {\n theme = responsiveFontSizes(theme);\n } catch (ex) {\n defaultLogger.log('failed to set response font sizes\\n', ex);\n }\n return theme;\n}\n\nexport interface DynamicPersonaModule {\n default: PersonaState;\n}\n\nexport async function getPersonaFromMapping(newKey: string, personaState: PersonaState, personaMapped?: React.MutableRefObject): Promise {\n let persona = {\n ...personaState,\n } as PersonaState;\n for (let i = 0; i < personaMappingJson.length; i++) {\n const personaMapping = personaMappingJson[i] as PersonaMapping;\n if (personaMapping.verintAccessKey.toLowerCase() === newKey.toLowerCase()) {\n const newPersona = (await import(`../personas/${personaMapping.location}`) as DynamicPersonaModule).default;\n if (personaMapped) {\n personaMapped.current = true;\n }\n let language = document.documentElement.lang;\n language = normalizeLanguageTag(language);\n const languageFile = (await import(`../personas/${personaMapping.languageFile}`) as Record>)[language];\n persona = {\n ...newPersona,\n verintAccessKey: { current: newKey.toLowerCase() },\n currentLanguageFile: languageFile,\n currentLanguage: language,\n };\n }\n }\n return persona;\n}\n\nlet currentIntlConfig: OptionalIntlConfig = { locale: 'en-US', messages: (defaultTranslation as Record>)[\"en-US\"] };\n\nexport function getCurrentIntlConfig(): OptionalIntlConfig {\n return currentIntlConfig;\n}\n\nexport function setIntlConfig(currentLanguage: string, currentLanguageFile: Record): IntlShape {\n const cache = createIntlCache();\n\n const intlConfig = { locale: currentLanguage, messages: currentLanguageFile } as OptionalIntlConfig;\n currentIntlConfig = intlConfig;\n\n return createIntl(\n intlConfig,\n cache,\n );\n}\n\nexport function normalizeLanguageTag(language: string): string {\n switch (language) {\n case 'es-ES':\n case 'es-US':\n case 'es-us':\n case 'es-es':\n case 'es':\n return 'es-ES';\n case 'en-US':\n case 'en':\n case 'en-us':\n return 'en-US';\n default:\n return 'en-US';\n }\n}\n\nexport const defaultAccessKey = \"00000000-0000-0000-0000-000000000000\";\nexport const muiThemeAccessKey = \"ffffffff-ffff-ffff-ffff-ffffffffffff\";\nexport const C4CKey = \"2592608f-208d-43fe-b6a9-5e5f94a498dd\";\nexport const OzempicKey = \"298578a3-1ffc-41d5-8b6b-9633edd0d575\";\nexport const VictozaKey = \"a082ce3c-8bc3-4914-afdc-557a58ee1f7a\";\nexport const OzempicConsumerKey = \"75e9c154-e580-4705-bc7f-422ae73e54d0\";\nexport const RybelsusConsumerKey = \"9bf8112d-e721-4f7e-8f8b-ecd52368a7da\";\nexport const TresibaConsumerKey = \"54db5e74-8bee-466c-8bd8-c590623187a6\";\nexport const NovocareDiabetesEducationKey = \"8295fc13-7040-44cf-ba3a-a85f606dc253\";\n","import { AlmeMessageEventData } from \"@alme/post-message-api/AlmeMessageEventData\";\nimport { useEffect } from \"react\";\nimport defaultLogger from \"../Logger\";\nimport { ClientCommunicator } from '@alme/post-message-api/ClientCommunicator';\n\nexport function useAlmeMessageListener(clientCommunicator: ClientCommunicator, onAlmeMessage: (payload: AlmeMessageEventData) => void): void {\n useEffect(() => {\n try {\n const almeMessageCallback = clientCommunicator.addAlmeMessageListener(onAlmeMessage);\n\n return () => {\n clientCommunicator.removeAlmeMessageListener(almeMessageCallback);\n };\n } catch (error) {\n defaultLogger.error(\"Error using callback\", error);\n }\n }, [clientCommunicator, onAlmeMessage]);\n}\n","import { AlmeResponseNext } from '@alme/types/response/AlmeResponse';\nimport { AlmeLaunchIvaMessageEventData } from '@alme/post-message-api/AlmeLaunchIvaMessageEventData';\nimport { isMobile, isTablet } from 'react-device-detect';\nimport { ChannelTypes } from '@alme/api-ts/Alme/V5/ChannelTypes';\n\nexport interface AlmeSavedAppState {\n isOpen?: boolean;\n lastEntryId?: string;\n isMinimized?: boolean;\n}\n\n// TODO: Split out unrelated properties from AlmeAppState for better rendering performance.\nexport interface AlmeAppState extends AlmeSavedAppState {\n history: (AlmeResponseNext)[];\n launchQuestion?: string;\n isDialogOpen?: boolean;\n liveChatIndex: number;\n isLiveChatConnected: boolean;\n launchData?: AlmeLaunchIvaMessageEventData;\n agentChannel: ChannelTypes;\n}\n\nexport function createChannelTypes(): ChannelTypes {\n if (isMobile || isTablet) {\n return \"MobileWeb\";\n }\n return \"Web\";\n}\n","import { AlmeAppState } from '../components/AlmeApp/AlmeAppState';\n\nimport { AlmeResponseNext } from '@alme/types/response/AlmeResponse';\nimport { ConfigurationResponse } from '@alme/types/response/ConfigurationResponse';\nimport { UnitDisplayLink } from '@alme/types/response/UnitDisplayLink';\n\nimport { NotificationResponseNext } from '@alme/types/response/NotificationResponse';\nimport { LiveChatNotificationResponseNext } from '@alme/types/response/LiveChatNotificationResponse';\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 { ReportingEventRequestDetailsNext } from '@alme/api-ts/Alme/ReportingEventRequestDetails';\nimport { EntryOriginTypesNext } from '@alme/api-ts/Alme/EntryOriginTypes';\n\nimport { LiveChatNotificationApiNext } from '@alme/api-ts/LiveChat/LiveChatNotificationApi';\nimport { LiveChatNotificationRequestDetailsNext } from '@alme/api-ts/LiveChat/LiveChatNotificationRequestDetails';\nimport { deviceDetect } from 'react-device-detect';\n\nimport deepmerge from 'deepmerge';\n\nimport { AlmeApiUtilsConfig } from './AlmeApiUtilsConfig';\nimport { AlmeSessionData } from '@alme/session-ts/AlmeSessionData';\n\nimport defaultLogger from '../Logger';\nimport { AlmeSessionUtils } from \"./AlmeSessionUtils\";\nimport { ReportingEventResponseNext } from '@alme/types/response/ReportingEventResponse';\nimport { NotificationRequestDetailsNext } from '@alme/api-ts/Alme/NotificationRequestDetails';\nimport { EndConversationRequestDetailsNext } from '@alme/api-ts/Alme/EndConversationRequestDetails';\nimport { createIntl, createIntlCache } from 'react-intl';\nimport { getCurrentIntlConfig } from '../utils/PersonaUtils';\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\nexport class AlmeApiUtils {\n private almeState: AlmeAppState;\n private setAlmeState: (state: AlmeAppState) => void;\n private almeConfig: AlmeApiUtilsConfig;\n private almeSession: AlmeSessionData;\n private almeSessionUtils: AlmeSessionUtils | undefined;\n private almeApi: AlmeApiNext;\n private liveChatNotificationApi: LiveChatNotificationApiNext;\n private validateAlmeSessionData: (response: AlmeResponseNext | AlmeResponseNext[]) => void;\n private verintAccessKey: string | undefined;\n private currentLanguage: string;\n\n constructor(almeState: AlmeAppState, setAlmeState: (state: AlmeAppState) => void, almeSession: AlmeSessionData, almeSessionUtils: AlmeSessionUtils | undefined, validateAlmeSessionData: (response: AlmeResponseNext | AlmeResponseNext[]) => void, almeConfig: AlmeApiUtilsConfig, almeApi: AlmeApiNext, liveChatNotificationApi: LiveChatNotificationApiNext, verintAccessKey?: string) {\n this.almeState = almeState;\n this.setAlmeState = setAlmeState;\n this.almeSession = almeSession;\n this.almeSessionUtils = almeSessionUtils;\n this.validateAlmeSessionData = validateAlmeSessionData;\n this.almeConfig = almeConfig;\n this.almeApi = almeApi;\n this.liveChatNotificationApi = liveChatNotificationApi;\n this.verintAccessKey = verintAccessKey;\n this.currentLanguage = getCurrentIntlConfig().locale;\n }\n\n private getErrorResponse(): AlmeResponseNext {\n const currentIntlConfig = getCurrentIntlConfig();\n const cache = createIntlCache();\n const intl = createIntl({ locale: currentIntlConfig.locale, messages: currentIntlConfig.messages }, cache);\n\n const responseRevision = this.almeState.history.length ?\n (this.almeState.history[this.almeState.history.length - 1].responseRevision + 1) :\n 1;\n\n return {\n id: this.almeConfig.apiUtils.errorResponse.entryId,\n userId: this.almeSession.userId,\n text: intl.formatMessage({\n id: \"apiUtils.systemErrorMessage\",\n defaultMessage: 'Default system error message',\n description: 'AlmeApiUtils system error message',\n }),\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.almeConfig.apiUtils.errorResponse.entryId,\n },\n };\n }\n\n private createCustomParams(): Record {\n // TODO: add your custom params here.\n return {};\n }\n\n /**\n * Create Context parameter object.\n * @param location DOM window location object\n */\n private createContextObject(location: Location): { Context: { CurrentUrl: FpmlUrlProperties; CurrentDevice: Record } } {\n return {\n Context: {\n CurrentUrl: this.createPageAwarenessObject(location),\n CurrentDevice: this.createDeviceInformationObject(),\n },\n };\n }\n\n /**\n * Create Page Awareness parameter object.\n * @param location DOM window location object\n */\n private createPageAwarenessObject(location: Location): FpmlUrlProperties {\n return {\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 }\n\n /**\n * Create Device Information parameter object.\n */\n private createDeviceInformationObject(): Record {\n return deviceDetect() as Record;\n }\n\n /**\n * Create parameter object and\n * deep merge with existing parameters, custom parameters, and page awareness parameters.\n * @see deepmerge.all\n * @param parameters Current input parameters\n * @returns Input parameters merged with page awareness parameters\n */\n private addRequestParams(parameters: Record): Record {\n const pageAwarenessParams = this.createContextObject(window.location);\n const customParams = this.createCustomParams();\n const uiVersionParam = {\n UiVersion: this.almeConfig.apiUtils.uiVersion,\n };\n return deepmerge.all([uiVersionParam, pageAwarenessParams, customParams, parameters]) as Record;\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 AlmeApiNext.SendInputAsync\n * @see ConverseRequestDetailsNext\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(input: string, origin: EntryOriginTypesNext = 'Typed', displayText: string = input, parameters: Record = {}): Promise {\n const requestParams = this.addRequestParams(parameters);\n const request = new ConverseRequestDetailsNext(this.almeSession.userId, this.almeSession.sessionId, input, origin, displayText, requestParams,\n this.almeState.agentChannel, this.currentLanguage, undefined, this.verintAccessKey);\n const response = await this.almeApi.SendInputAsync(request);\n this.almeSessionUtils?.refreshSessionTimer();\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 AlmeApiNext.SendInputAsync\n * @see ConverseRequestDetailsNext\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: Record = {}): 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 defaultLogger.error(error);\n this.sendErrorResponse();\n }\n }\n\n /**\n * Submits a Request Unit request\n * @see UnitDisplayLink\n */\n public async submitUnitRequest(unitLink: UnitDisplayLink, parameters: Record = {}): Promise {\n const apiParams = this.addRequestParams(parameters);\n const unitRequest = new RequestUnitRequestDetailsNext(this.almeSession.userId, this.almeSession.sessionId, unitLink.Metadata.UnitUID,\n unitLink.DisplayText, 'Click', apiParams, this.currentLanguage, this.almeState.agentChannel, undefined, this.verintAccessKey);\n try {\n const response = await this.almeApi.SendRequestUnitAsync(unitRequest);\n this.almeSessionUtils?.refreshSessionTimer();\n this.appendToHistory(response);\n this.validateAlmeSessionData(response);\n } catch (error) {\n defaultLogger.error(error);\n this.sendErrorResponse();\n }\n }\n\n /**\n * Sends an Alme GetHistory request and returns the history response or empty AlmeResponseNext[] if no history exists.\n * @see AlmeApiNext.GetHistoryAsync\n * @see HistoryRequestDetailsNext\n * @see [api/ConversationSupport/GetHistory](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.almeSessionUtils?.startSessionTimer();\n this.validateAlmeSessionData(responses);\n return responses;\n } catch (error) {\n defaultLogger.error(error);\n return [];\n }\n }\n\n /**\n * Sends an Alme Application Event request and appends to the history.\n * @see [api/Conversation/appEvent](https://confluence.nextit.com/pages/viewpage.action?pageId=35688488)\n * @see [Understanding Entry Types and Origins](https://confluence.nextit.com/display/AlmeTech/Understanding+Entry+Types+and+Origins)\n */\n public async submitAppEvent(eventName: string, origin: EntryOriginTypesNext = 'Internal', parameters: Record = {}): Promise {\n try {\n const response = await this.sendAppEvent(eventName, origin, parameters);\n this.appendToHistory(response);\n this.validateAlmeSessionData(response);\n } catch (error) {\n defaultLogger.error(error);\n this.sendErrorResponse();\n }\n }\n\n /**\n * Sends an Alme Application Event request and returns the resulting AlmeResponseNext. This does not automatically append to the history.\n * @see AlmeResponseNext\n * @see [api/Conversation/appEvent](https://confluence.nextit.com/pages/viewpage.action?pageId=35688488)\n * @see [Understanding Entry Types and Origins](https://confluence.nextit.com/display/AlmeTech/Understanding+Entry+Types+and+Origins)\n */\n public async sendAppEvent(eventName: string, origin: EntryOriginTypesNext = 'Internal', parameters: Record = {}): Promise {\n const apiParams = this.addRequestParams(parameters);\n const appEventRequest = new AppEventRequestDetailsNext(this.almeSession.userId, this.almeSession.sessionId, eventName, origin, apiParams,\n this.almeState.agentChannel, this.currentLanguage, undefined, this.verintAccessKey);\n try {\n const response = await this.almeApi.SendAppEventAsync(appEventRequest);\n this.almeSessionUtils?.refreshSessionTimer();\n this.validateAlmeSessionData(response);\n return response;\n } catch (error) {\n defaultLogger.error(error);\n return this.getErrorResponse();\n }\n }\n\n /**\n * Sends an Alme GetConfiguration request.\n * @see ConfigurationRequestDetailsNext\n * @see [api/Configuration/GetConfiguration](https://confluence.nextit.com/pages/viewpage.action?pageId=35688487)\n */\n public async getAlmeConfiguration(): Promise {\n const configRequest = new ConfigurationRequestDetailsNext(this.almeState.agentChannel);\n try {\n return await this.almeApi.GetConfigurationAsync(configRequest);\n } catch (error) {\n defaultLogger.error(error);\n return null;\n }\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.almeState.agentChannel, undefined, this.verintAccessKey);\n try {\n return await this.almeApi.SendReportingEventAsync(request);\n } catch (error) {\n defaultLogger.error(error);\n return null;\n }\n }\n\n public async endConversation(): Promise {\n try {\n const request = new EndConversationRequestDetailsNext(this.almeSession.sessionId);\n return await this.almeApi.EndConversationAsync(request);\n } catch (error) {\n defaultLogger.error(error);\n return false;\n }\n }\n\n public async getNotifications(): Promise {\n try {\n const request = new NotificationRequestDetailsNext(this.almeSession.sessionId);\n const response = await this.almeApi.GetPendingMessagesAsync(request);\n this.almeSessionUtils?.refreshSessionTimer();\n if (response) {\n this.appendNotificationToHistory(response);\n }\n } catch (error) {\n defaultLogger.error(error);\n }\n }\n\n public async getLiveChatNotifications(): Promise {\n try {\n const request = new LiveChatNotificationRequestDetailsNext(this.almeSession.sessionId, this.almeState.liveChatIndex + 1);\n const response = await this.liveChatNotificationApi.GetLiveChatNotificationAsync(request);\n this.almeSessionUtils?.refreshSessionTimer();\n if (response) {\n this.appendLiveChatToHistory(response);\n }\n } catch (error) {\n defaultLogger.error(error);\n }\n }\n\n private appendToHistory(response: AlmeResponseNext): void {\n if (!response || !response.userId) {\n return;\n }\n\n const isLiveChatConnected = response?.extensionData?.MessageSource === 'LiveChat';\n\n const history = this.almeState.history;\n history.push(response);\n this.setAlmeState({\n ...this.almeState,\n history,\n isLiveChatConnected,\n });\n }\n\n private appendNotificationToHistory(response: NotificationResponseNext[]) {\n if (!response || !response.length) {\n return;\n }\n\n const history = this.almeState.history;\n history.push(...response);\n\n this.setAlmeState({\n ...this.almeState,\n history,\n });\n }\n\n private appendLiveChatToHistory(response: LiveChatNotificationResponseNext[]) {\n if (!response || !response.length) {\n return;\n }\n\n const history = this.almeState.history;\n history.push(...response);\n\n let liveChatIndex = this.almeState.liveChatIndex;\n const index = response[response.length - 1].extensionData.MessageIndex;\n if (typeof index === 'number' && !isNaN(index) && index >= 0) {\n // Note: it is possible for index to be 0. This typically starts at 1.\n liveChatIndex = index;\n }\n\n this.setAlmeState({\n ...this.almeState,\n history,\n liveChatIndex,\n isLiveChatConnected: true,\n });\n }\n}\n","import { LinkNavigationTypes } from '@alme/types/response/LinkNavigationTypes';\nimport defaultLogger from '../Logger';\n\nconst trailingPeriodRegex = /\\.$/;\n\nfunction isHostEqual(windowHost: string, urlHost: string): boolean {\n if (!windowHost || !urlHost) {\n return false;\n }\n\n const windowsHostParts = windowHost.replace(trailingPeriodRegex, '').split('.').reverse();\n const rootWindowHost = '.' + windowsHostParts[1] + '.' + windowsHostParts[0];\n\n const urlHostParts = urlHost.replace(trailingPeriodRegex, '').split('.').reverse();\n const rootUrlHost = '.' + urlHostParts[1] + '.' + urlHostParts[0];\n\n return rootWindowHost === rootUrlHost;\n}\n\nexport function isExternal(url: string): boolean {\n try {\n const windowHost = window.location.hostname;\n const urlLink = getLocation(url);\n return !isHostEqual(windowHost, urlLink.hostname);\n } catch (ex) {\n defaultLogger.warn(ex);\n }\n return true;\n}\n\nexport function getQueryValue(key: string): string | undefined {\n const nvString = window.location.search.substring(1);\n return parseKey(key, nvString);\n}\n\nexport function parseKey(key: string, nvString: string): string | undefined {\n const vars = nvString.split(\"&\");\n for (let i = 0; i < vars.length; i++) {\n const pair = vars[i].split(\"=\");\n if (pair[0] === key)\n return decodeURIComponent(pair[1]);\n }\n return undefined;\n}\n\nexport function getLocation(url: string): Location {\n const urlLink = document.createElement('a');\n urlLink.href = url;\n return urlLink as unknown as Location;\n}\n\nexport function openNavLink(navigationType: LinkNavigationTypes, url: string): void {\n switch (navigationType) {\n case 'MainPage':\n window.open(url, '_self');\n break;\n case 'None':\n break;\n case 'Popup':\n default:\n window.open(url, '_blank');\n break;\n }\n}\nexport function openWindow(urlAddress: string, target: string): void {\n window.open(urlAddress, target);\n}","import { AlmeApiBase } from '@alme/api-ts/Alme/AlmeApiBase';\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';\nimport { HttpHandlerBase } from '@alme/api-ts/HttpHandlerBase';\nimport defaultLogger from '../Logger';\nimport { isDebug } from '../utils/DebugUtils';\nimport { getLocation } from '../utils/UrlUtils';\nimport { AlmeApiNext } from '@alme/api-ts/Alme/AlmeApi';\n\nexport function createDefaultSettings(): LiveChatNotificationApiSettings {\n const apiSettings = new LiveChatNotificationApiSettingsBase();\n\n if (isDebug()) {\n // if running locally point to dev server.\n apiSettings.AlmeApiHostname = 'Niqanovalme101.ebu.nextnet.com';\n defaultLogger.warn('Using dev server: ', apiSettings.AlmeApiHostname);\n }\n else {\n const almeScriptLoader = document?.getElementById(\"alme-script-loader\") as HTMLScriptElement;\n\n if (almeScriptLoader && almeScriptLoader.src) {\n const almeScriptLoaderUrl = getLocation(almeScriptLoader.src);\n apiSettings.AlmeApiHostname = almeScriptLoaderUrl.host;\n }\n }\n return apiSettings;\n}\n\nconst httpHandler = new HttpHandlerBase();\n\nexport function createAlmeApi(almeApiSettings?: LiveChatNotificationApiSettings): AlmeApiNext {\n const apiSettings = almeApiSettings || createDefaultSettings();\n return new AlmeApiBase(defaultLogger, httpHandler, apiSettings);\n}\n\nexport function createLiveChatNotificationApi(almeApiSettings?: LiveChatNotificationApiSettings): LiveChatNotificationApiNext {\n const apiSettings = almeApiSettings || createDefaultSettings();\n return new LiveChatNotificationApiBase(defaultLogger, httpHandler, apiSettings);\n}\n","import { createStyles, makeStyles } from '@material-ui/core/styles';\n\nexport const useFocusStyles = makeStyles(() =>\n createStyles({\n visibleFocus: {\n \"&.Mui-focusVisible\": { outline: \"2px solid black\" },\n },\n }),\n);","import React, { useCallback } from 'react';\n\nimport { AlmeAppState } from \"../AlmeApp/AlmeAppState\";\n\nimport { IconButton } from '@material-ui/core';\nimport { FocusComponentProps } from '../../models/ComponentProps';\nimport { AlmeMinimizeConfig } from './AlmeMinimizeConfig';\n\nimport MinimizeIcon from '@material-ui/icons/Remove';\nimport { AlmeApiUtils } from '../../api/AlmeApiUtils';\nimport { AlmeIvaTypeProp } from '../../models/AlmeIvaTypeMapping';\nimport { useIntl } from 'react-intl';\nimport {useFocusStyles} from '../FocusVisibleStyle';\n\ninterface AlmeMinimizeProps {\n almeConfig: AlmeMinimizeConfig;\n onMinimizeClick: () => void;\n ivaType?: AlmeIvaTypeProp;\n focusProps?: FocusComponentProps;\n}\n\nconst AlmeMinimize: React.FC = (props: AlmeMinimizeProps) => {\n const classes = useFocusStyles();\n const intl = useIntl();\n if (!props.almeConfig.minimize.isMinimizeEnabled || props.ivaType === 'popup') {\n return null;\n }\n\n const onMinClick = () => {\n props.onMinimizeClick();\n const data = {\n message: {\n type: 'MinimizeIva',\n },\n };\n window.top?.postMessage(data, \"*\");\n };\n\n const defaultIcon = props.almeConfig.minimize.minimizeIcon || ;\n const fontSize = props.almeConfig.minimize.styles.buttonSize || 'small';\n const minimizeIcon = React.cloneElement(defaultIcon, { fontSize });\n\n return (\n \n {minimizeIcon}\n \n );\n};\n\nexport default AlmeMinimize;\n\nexport function OnMinimizeClick(almeState: AlmeAppState, setAlmeState: (state: AlmeAppState) => void, apiUtils: React.MutableRefObject): () => void {\n return useCallback(() => {\n void apiUtils.current.submitReportingEvent('MinimizeClicked', 'true');\n setAlmeState({\n ...almeState,\n isOpen: false,\n isMinimized: true,\n });\n }, [almeState, setAlmeState, apiUtils]);\n}\n","import React, { RefObject } from 'react';\nimport { Theme, WithStyles, withStyles } from '@material-ui/core/styles';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { IconButton } from '@material-ui/core';\n\nimport { FocusComponentProps } from '../../models/ComponentProps';\nimport { AlmeCloseIconConfig } from '../AlmeCloseIcon/AlmeCloseIconConfig';\nimport { useIntl } from 'react-intl';\n\n\nconst styles = (theme: Theme) => ({\n closeButton: {\n fontWeight: theme.typography.fontWeightBold,\n fontSize: theme.typography.h6.fontSize,\n },\n});\n\nexport interface AlmeCloseIconProps extends WithStyles {\n onClose: () => void;\n className?: string;\n focusProps?: FocusComponentProps;\n almeConfig: AlmeCloseIconConfig;\n forwardRef?: RefObject;\n id: string;\n}\n\nexport const AlmeCloseIcon = withStyles(styles)((props: AlmeCloseIconProps) => {\n const { classes, onClose, className, focusProps, almeConfig, forwardRef, ...other } = props;\n const closeClass = className ? `${classes.closeButton} ${className}` : classes.closeButton;\n const intl = useIntl();\n\n return (\n \n \n \n );\n});","import React, { useCallback } from 'react';\n\nimport { Theme, createStyles, WithStyles, withStyles } from '@material-ui/core/styles';\nimport {\n Typography,\n DialogTitle as MuiDialogTitle,\n DialogContent as MuiDialogContent,\n DialogActions as MuiDialogActions,\n Dialog as MuiDialog,\n} from '@material-ui/core';\nimport { AlmeAppState } from '../AlmeApp/AlmeAppState';\n\nimport dialogStyles from './AlmeDialog.styles';\nimport { FocusComponentProps } from '../../models/ComponentProps';\nimport { AlmeDialogConfig } from './AlmeDialogConfig';\nimport { AlmeCloseIcon } from '../AlmeCloseIcon/AlmeCloseIcon';\nimport { useFocusStyles } from '../FocusVisibleStyle';\n\nconst styles = (theme: Theme) => createStyles({\n root: {\n margin: 0,\n padding: theme.spacing(2),\n backgroundColor: theme.palette.background.default,\n color: theme.palette.text.primary,\n },\n closeButtonTopRight: {\n fontWeight: theme.typography.fontWeightBold,\n fontSize: theme.typography.h6.fontSize,\n position: 'absolute',\n right: theme.spacing(1),\n top: theme.spacing(1),\n },\n closeButton: {\n fontWeight: theme.typography.fontWeightBold,\n fontSize: theme.typography.h6.fontSize,\n },\n});\n\nexport interface DialogTitleProps extends WithStyles {\n children: React.ReactNode;\n onClose: () => void;\n focusProps?: FocusComponentProps;\n almeConfig: AlmeDialogConfig;\n id: string;\n}\n\nexport const DialogTitle = withStyles(styles)((props: DialogTitleProps) => {\n const { children, classes, onClose, almeConfig, ...other } = props;\n const Focusclasses = useFocusStyles();\n return (\n \n {children}\n \n \n );\n});\n\nexport const DialogContent = withStyles((theme: Theme) => ({\n root: {\n padding: theme.spacing(2),\n backgroundColor: theme.palette.background.default,\n color: theme.palette.text.primary,\n },\n}))(MuiDialogContent);\n\nexport const DialogActions = withStyles((theme: Theme) => ({\n root: {\n margin: 0,\n padding: theme.spacing(1),\n backgroundColor: theme.palette.background.default,\n color: theme.palette.text.primary,\n },\n}))(MuiDialogActions);\n\nexport interface DialogProps extends WithStyles {\n children: React.ReactNode;\n open: boolean;\n setIsDialogOpen: (isOpen: boolean) => void;\n id: string;\n disableEnforceFocus?: boolean;\n onClose: () => void;\n fullWidth?: boolean;\n}\n\nexport const Dialog = withStyles(\n (theme) => ({\n ...dialogStyles(theme),\n }),\n { withTheme: true },\n)((props: DialogProps) => {\n const { children, classes, setIsDialogOpen, ...other } = props;\n\n const setOpen = () => {\n setIsDialogOpen(true);\n };\n\n const setClose = () => {\n setIsDialogOpen(false);\n };\n\n return (\n document.getElementById(\"nit-alme-window-root\")}\n > {children});\n});\n\nexport function SetIsDialogOpen(almeState: AlmeAppState, setAlmeState: (state: AlmeAppState) => void): (isOpen: boolean) => void {\n return useCallback((isOpen: boolean) => {\n setAlmeState({\n ...almeState,\n isDialogOpen: isOpen,\n });\n }, [almeState, setAlmeState]);\n}\n","import { Theme } from '@material-ui/core/styles';\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport default function componentWithStyles({ palette }: Theme) {\n return {\n dialogPaper: {\n backgroundColor: palette.type === 'dark' ? 'rgba(255, 255, 255, 0.75)' : 'rgba(0, 0, 0, 0.15)',\n position: 'absolute !important' as 'absolute' ,\n height: '100%',\n width: '100%',\n },\n };\n}\n","import React, { useState, useEffect, useRef } from 'react';\n\nimport { DialogTitle, DialogContent, DialogActions, Dialog } from '../AlmeDialog/AlmeDialog';\nimport { FocusComponentProps } from '../../models/ComponentProps';\n\nimport { createStyles, makeStyles } from '@material-ui/core/styles';\nimport { Button, Typography } from '@material-ui/core';\nimport { AlmeCloseConfig } from './AlmeCloseConfig';\nimport { AlmeCloseIcon } from '../AlmeCloseIcon/AlmeCloseIcon';\nimport { AlmeIvaTypeProp } from '../../models/AlmeIvaTypeMapping';\nimport { FormattedMessage, useIntl } from 'react-intl';\nimport {useFocusStyles} from '../FocusVisibleStyle';\n\nconst useStyles = makeStyles(() =>\n createStyles({\n closeContainer: {\n display: 'inline-block',\n },\n }),\n);\n\ninterface AlmeCloseProps {\n onResetIva: (isOpen: boolean, sessionEndReason: string, shouldResetIsInitialized?: boolean) => void;\n almeConfig: AlmeCloseConfig;\n setIsDialogOpen: (isOpen: boolean) => void;\n ivaType?: AlmeIvaTypeProp;\n focusProps?: FocusComponentProps;\n isDialogOpen?: boolean;\n}\n\nconst AlmeClose: React.FC = (props: AlmeCloseProps) => {\n const intl = useIntl();\n const [open, setOpen] = React.useState(false);\n const [shouldFocus, setShouldFocus] = useState(false);\n const closeRef = useRef(null);\n\n const classes = useStyles();\n const Focusclasses = useFocusStyles();\n\n useEffect(() => {\n if (!props.isDialogOpen && shouldFocus) {\n closeRef.current?.focus();\n setShouldFocus(false);\n }\n }, [props.isDialogOpen, shouldFocus]);\n\n\n const handleClickOpen = (): void => {\n setOpen(true);\n };\n\n const handleCancelClose = (): void => {\n setOpen(false);\n setShouldFocus(true);\n };\n\n const handleClose = (): void => {\n const data = {\n message: {\n type: 'CloseIva',\n },\n };\n window.top.postMessage(data, \"*\");\n setOpen(false);\n props.onResetIva(false, \"UserEndedSession\", true);\n };\n\n if (!props.almeConfig.close.closeIcon.isCloseEnabled || props.ivaType === 'popup') {\n return null;\n }\n\n const accessibilityAttrs = {\n role: 'dialog',\n };\n\n return (\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n );\n};\n\nexport default AlmeClose;\n","export type AlmeColorProp = 'default' | 'divider' | 'initial' | 'paper' | 'primary' | 'secondary';\n\ninterface AlmeColorStyles extends Record {\n color?: AlmeColorProp;\n children?: React.ReactNode;\n}\n\ntype AlmeColorsMapping = Record;\n\n// Like https://github.com/brunobertolini/styled-by\nexport const styledBy = (property: string, mapping: AlmeColorsMapping) => (props: AlmeColorStyles): string | undefined => {\n return mapping[props[property] as string || 'initial'] as string | undefined;\n};\n","import { Theme } from '@material-ui/core';\nimport { styledBy } from '../../models/AlmeColorMapping';\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport default function componentWithStyles({ palette, spacing }: Theme) {\n return {\n root: {\n padding: spacing(1),\n paddingLeft: spacing(1.5),\n color: styledBy('color', {\n default: palette.text.primary,\n divider: palette.text.primary,\n initial: palette.text.primary,\n paper: palette.text.primary,\n primary: palette.primary.contrastText,\n secondary: palette.secondary.contrastText,\n }),\n backgroundColor: styledBy('color', {\n default: palette.background.default,\n divider: palette.divider,\n initial: 'initial',\n paper: palette.background.paper,\n primary: palette.primary.main,\n secondary: palette.secondary.main,\n }),\n },\n\n divider: {\n borderBottom: styledBy('color', {\n default: `1px solid ${palette.divider}`,\n divider: `1px solid ${palette.augmentColor({ main: palette.divider }).dark}`,\n initial: 'none',\n paper: `1px solid ${palette.augmentColor({ main: palette.background.paper }).dark}`,\n primary: `1px solid ${palette.primary.dark}`,\n secondary: `1px solid ${palette.secondary.dark}`,\n }),\n },\n text: {\n color: styledBy('color', {\n default: palette.text.primary,\n divider: palette.text.primary,\n initial: palette.text.primary,\n paper: palette.text.primary,\n primary: palette.primary.contrastText,\n secondary: palette.secondary.contrastText,\n }),\n alignSelf: 'center',\n },\n padTitle: {\n paddingLeft: spacing(1),\n },\n };\n}","const styles = {\n paper: {\n border: '1px solid #d3d4d5',\n },\n};\n\nexport default styles;","import React from 'react';\n\nimport moreMenuStyles from './AlmeMoreMenu.styles';\n\nimport MoreVertIcon from '@material-ui/icons/MoreVert';\nimport { WithStyles, withStyles, makeStyles, createStyles } from '@material-ui/core/styles';\nimport { MenuProps } from '@material-ui/core/Menu';\nimport { IconButton, Menu, MenuItem } from '@material-ui/core';\nimport { FocusComponentProps } from '../../models/ComponentProps';\nimport { AlmeMoreMenuConfig } from './AlmeMoreMenuConfig';\nimport { AlmeIvaTypeProp } from '../../models/AlmeIvaTypeMapping';\n\nconst useStyles = makeStyles(() =>\n createStyles({\n root: {\n display: 'inline-block',\n },\n }),\n);\n\nconst StyledMenu = withStyles(moreMenuStyles)((props: MenuProps) => (\n \n));\n\nconst StyledMenuItem = withStyles((theme) => ({\n root: {\n },\n}))(MenuItem);\n\ninterface AlmeMoreMenuProps extends WithStyles {\n almeConfig: AlmeMoreMenuConfig;\n ivaType?: AlmeIvaTypeProp;\n focusProps?: FocusComponentProps;\n}\n\nconst AlmeMoreMenu: React.FC = (props: AlmeMoreMenuProps) => {\n const classes = useStyles();\n\n const [anchorEl, setAnchorEl] = React.useState(null);\n\n const handleClick = (event: React.MouseEvent): void => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleClose = (): void => {\n setAnchorEl(null);\n };\n\n const open = Boolean(anchorEl);\n const id = open ? 'simple-popover' : undefined;\n\n if (!props.almeConfig.moreMenu.isEmailTranscriptEnabled || props.ivaType === 'popup') {\n return null;\n }\n\n return (\n
\n \n \n \n \n Email Transcript\n \n
\n );\n};\n\nexport default withStyles(moreMenuStyles)(AlmeMoreMenu);","import { Theme } from \"@material-ui/core\";\nimport { createStyles } from '@material-ui/core/styles';\nimport { styledBy } from \"../../models/AlmeColorMapping\";\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport default function componentWithStyles({ palette, typography }: Theme) {\n\n return createStyles({\n utilityBar: {\n color: styledBy('color', {\n default: palette.text.primary,\n divider: palette.text.primary,\n initial: palette.text.primary,\n paper: palette.text.primary,\n primary: palette.primary.contrastText,\n secondary: palette.secondary.contrastText,\n }),\n backgroundColor: styledBy('color', {\n default: palette.background.default,\n divider: palette.divider,\n initial: 'initial',\n paper: palette.background.paper,\n primary: palette.primary.main,\n secondary: palette.secondary.main,\n }),\n borderBottom: styledBy('borderColor', {\n default: `1px solid`,\n divider: `1px solid ${palette.augmentColor({ main: palette.divider }).dark}`,\n initial: 'none',\n paper: `1px solid ${palette.augmentColor({ main: palette.background.paper }).dark}`,\n primary: `1px solid ${palette.primary.main}`,\n secondary: `1px solid ${palette.secondary.main}`,\n }),\n marginBottom: '12px',\n },\n utilityBarButton: {\n whiteSpace: \"break-spaces\",\n textAlign: \"center\",\n color: styledBy('color', {\n default: palette.text.primary,\n divider: palette.text.primary,\n initial: palette.text.primary,\n paper: palette.text.primary,\n primary: palette.primary.contrastText,\n secondary: palette.secondary.contrastText,\n }),\n },\n });\n}\n","import * as React from 'react';\nimport { Button } from \"@material-ui/core\";\nimport Menu from '@material-ui/core/Menu';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport utilityBarStyles from './AlmeUtilityBar.styles';\nimport { WithStyles, withStyles } from '@material-ui/core/styles';\nimport { FocusComponentProps } from \"../../models/ComponentProps\";\nimport { AlmeUtilityBarConfig, UtilityBarLink } from \"./AlmeUtilityBarConfig\";\n\n\ninterface AlmeUtilityBarItemProps extends WithStyles {\n almeConfig: AlmeUtilityBarConfig;\n focusProps?: FocusComponentProps;\n key: number;\n title?: string;\n links: UtilityBarLink[];\n onUtilityLinkClick: () => void;\n}\n\nfunction AlmeUtilityBarItem(props: AlmeUtilityBarItemProps) {\n const [anchorEl, setAnchorEl] = React.useState(null);\n const anchorRef = React.useRef(null);\n\n\n const handleClose = () => {\n setAnchorEl(null);\n };\n\n const handleClick = (event: React.MouseEvent) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleRowClick = (event: Event | React.SyntheticEvent, link: UtilityBarLink) => {\n if (link.target === \"_self\") {\n props.onUtilityLinkClick();\n }\n window.open(link.href, link.target);\n handleClose();\n };\n\n return (\n <>\n \n {props?.title}\n \n\n \n {props.links.map((link, key) => {\n return ( handleRowClick(e, link)}\n id={`alme-utility-button-${key}`}\n href={link.href}\n target={link.target}\n key={key}\n >\n {link.label}\n );\n })}\n \n \n );\n}\n\nexport default withStyles(utilityBarStyles)(AlmeUtilityBarItem);\n","import React, { ReactElement } from \"react\";\nimport utilityBarStyles from './AlmeUtilityBar.styles';\nimport { Box, Button, Container, useMediaQuery } from \"@material-ui/core\";\nimport { WithStyles, withStyles, useTheme } from '@material-ui/core/styles';\nimport { FocusComponentProps } from \"../../models/ComponentProps\";\nimport { AlmeUtilityBarConfig, UtilityBarItem } from \"./AlmeUtilityBarConfig\";\nimport ALmeUtilityBarItem from './AlmeUtilityBarItem';\n\ninterface AlmeUtilityBarProps extends WithStyles {\n almeConfig: AlmeUtilityBarConfig;\n focusProps?: FocusComponentProps;\n onUtilityLinkClick: () => void;\n}\n\n\nfunction createUtilityItem(item: UtilityBarItem, props: AlmeUtilityBarProps, key: number): ReactElement {\n if (item.links.length === 1) {\n return \n {item.links[0].label}\n ;\n }\n return (\n \n );\n}\n\nconst AlmeUtilityBar: React.FC | null = (props: AlmeUtilityBarProps) => {\n const theme = useTheme();\n const shouldDisplay = useMediaQuery(theme.breakpoints.down(props.almeConfig.utilityBar.breakpoint))\n && props.almeConfig.utilityBar.isEnabled;\n\n if (!shouldDisplay) {\n return null;\n }\n else {\n return (\n \n \n {props.almeConfig.utilityBar.items.map((item, key) => createUtilityItem(item, props, key))}\n \n \n );\n }\n};\n\nexport default withStyles(utilityBarStyles)(AlmeUtilityBar);\n","import React from 'react';\n\nimport AlmeMinimize from '../AlmeMinimize/AlmeMinimize';\nimport AlmeClose from '../AlmeClose/AlmeClose';\nimport headerStyles from './AlmeHeader.styles';\nimport AlmeMoreMenu from '../AlmeMoreMenu/AlmeMoreMenu';\n\nimport { makeStyles, createStyles, WithStyles, withStyles } from '@material-ui/core/styles';\nimport { Typography } from '@material-ui/core';\nimport { FocusComponentProps } from '../../models/ComponentProps';\nimport { AlmeHeaderConfig } from './AlmeHeaderConfig';\nimport AlmeUtilityBar from \"../AlmeUtilityBar/AlmeUtilityBar\";\nimport { AlmeIvaTypeProp } from '../../models/AlmeIvaTypeMapping';\n\nimport { FormattedMessage } from 'react-intl';\n\nconst useStyles = makeStyles(() =>\n createStyles({\n headerContainer: {\n display: 'flex',\n flexFlow: 'column nowrap',\n },\n headerRowContainer: {\n display: 'flex',\n flexFlow: 'row nowrap',\n justifyContent: 'space-between',\n alignItems: 'center',\n },\n titleContainer: {\n alignItems: 'center',\n display: 'flex',\n height: '100%',\n },\n buttonContainer: {\n display: 'flex',\n },\n }),\n);\n\ninterface AlmeHeaderProps extends WithStyles {\n almeConfig: AlmeHeaderConfig;\n onMinimizeClick: () => void;\n onUtilityLinkClick: () => void;\n onResetIva: (isOpen: boolean, sessionEndReason: string, shouldResetIsInitialized?: boolean) => void;\n setIsDialogOpen: (isOpen: boolean) => void;\n ivaType?: AlmeIvaTypeProp;\n focusProps?: FocusComponentProps;\n isDialogOpen?: boolean;\n isLiveChatConnected?: boolean;\n}\n\nconst AlmeHeader: React.FC = (props: AlmeHeaderProps) => {\n const classes = useStyles();\n\n let headerClasses = `${classes.headerContainer} ${props.classes.root}`;\n if (props.almeConfig.header.styles.hasBorder) {\n headerClasses += ` ${props.classes.divider}`;\n }\n\n const padClass = props.almeConfig.header.headerIcon ? props.classes.padTitle : '';\n const titleClassName = `${props.classes.text} ${padClass}`;\n\n const headerText = props.isLiveChatConnected ? 'header.liveChatHeaderText' : \"header.headerText\";\n return (\n
\n \n
\n
\n {props.almeConfig.header.headerIcon}\n \n \n \n
\n
\n \n \n \n
\n
\n
\n );\n};\n\nexport default withStyles(headerStyles)(AlmeHeader);\n","import { Theme } from '@material-ui/core';\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport default function componentWithStyles({ palette }: Theme) {\n const backgroundColor = palette.background.default;\n return {\n root: {\n backgroundColor,\n height: '100%',\n },\n box: {\n padding: '4px 2px 0 2px',\n position: 'relative' as const,\n overflow: 'hidden',\n height: 'inherit',\n },\n };\n}","import { Theme } from '@material-ui/core';\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport default function componentWithStyles({ palette, spacing }: Theme) {\n return {\n root: {\n position: 'absolute' as const,\n bottom: spacing(1),\n right: spacing(3),\n },\n };\n}","import React, { MutableRefObject } from \"react\";\nimport scrollButtonStyles from './AlmeScrollButton.styles';\nimport { Button } from \"@material-ui/core\";\nimport { WithStyles, withStyles } from '@material-ui/core/styles';\nimport { FocusComponentProps } from \"../../models/ComponentProps\";\nimport ArrowDownwardIcon from '@material-ui/icons/ArrowDownward';\nimport { AlmeScrollButtonConfig } from \"./AlmeScrollButtonConfig\";\nimport { FormattedMessage } from \"react-intl\";\nimport { useFocusStyles } from \"../FocusVisibleStyle\";\n\ninterface AlmeScrollButtonProps extends WithStyles {\n scrollToResponse: MutableRefObject;\n almeConfig: AlmeScrollButtonConfig;\n focusProps?: FocusComponentProps;\n onScrollClick: () => void;\n}\n\nconst AlmeScrollButton: React.FC | null = (props: AlmeScrollButtonProps) => {\n const Focusclasses = useFocusStyles();\n const handleClick = (): void => {\n props.scrollToResponse.current = true;\n props.onScrollClick();\n };\n\n return (\n \n \n \n \n );\n};\nexport default withStyles(scrollButtonStyles)(AlmeScrollButton);\n","import { Theme } from '@material-ui/core';\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport default function componentWithStyles({ palette, spacing, typography }: Theme) {\n // TODO: use styledBy to better allow for styling card background and text colors\n return {\n root: {\n height: '100%',\n },\n };\n}","import React from 'react';\n\nimport buttonStyles from \"./AlmeStyledButton.styles\";\nimport { withStyles, WithStyles } from '@material-ui/core/styles';\nimport { Button, ButtonProps } from \"@material-ui/core\";\nimport { FocusComponentProps } from '../../../models/ComponentProps';\n\nexport interface AlmeStyledButtonProps extends FocusComponentProps {\n id?: string;\n className?: string;\n color?: ButtonProps['color'];\n variant?: ButtonProps['variant'];\n fullWidth?: ButtonProps['fullWidth'];\n key: string;\n href?: ButtonProps['href'];\n target?: '_self' | '_blank';\n size?: ButtonProps['size'];\n endIcon?: ButtonProps['endIcon'];\n onClick?: ButtonProps['onClick'];\n}\n\ninterface StyledButtonProps extends AlmeStyledButtonProps, WithStyles { }\n\nconst AlmeStyledButton: React.FC = (props: StyledButtonProps) => {\n const { classes, ...other } = props;\n return ;\n } else {\n return defaultElement;\n }\n}\n\n/**\n * This function is to be used as a parameter when parsing the HTML, it defines the replace function that is\n * used to insert inline links in place of the placeholder HTML elements.\n * @param response the post-markdown AlmeResponse\n * @param inlineClass styles that will be applied to buttons to make them look like elements\n * @param onLinkClick will be utilized for Unit and Input links\n * @returns the replace function\n */\nfunction getReplacingFunction(response: AlmeMarkdownResponseNext, inlineClass: string, onLinkClick?: ((link: DisplayLink | NavUrl) => void)) {\n return {\n replace: ((domNode: DOMNode) => {\n\n if (!domNode) {\n return;\n }\n const Element = domNode as Element;\n\n if (Element.type === \"tag\" && Element.attribs.id === \"replace\") {\n return replaceInlineLinkHtml(Element, response, inlineClass, onLinkClick);\n }\n }),\n };\n}\n\nfunction getHtmlAsArray(doc: string | JSX.Element | JSX.Element[]): JSX.Element[] | string[] {\n return Array.isArray(doc) ? doc : [doc] as JSX.Element[] | string[];\n}\n\nfunction replaceLinks(doc: string | JSX.Element | JSX.Element[], options: { replace: (domNode: DOMNode) => JSX.Element | undefined }) {\n const elements = getHtmlAsArray(doc);\n\n elements.forEach((element: JSX.Element | string) => {\n const children = ((element as JSX.Element)?.props as JSX.ElementChildrenAttribute)?.children;\n\n if (Array.isArray(children)) {\n children.forEach((child: ReactElement, index) => {\n const stringElement = renderToStaticMarkup(child);\n let replaced = parse(stringElement, options);\n const props = { key: stringElement };\n if (stringElement) {\n if (typeof replaced !== 'string') {\n replaced = React.cloneElement((replaced as ReactElement), props);\n }\n children[index] = (replaced as ReactElement);\n }\n });\n }\n });\n\n return doc;\n}\n\nexport function getAgentResponse(response: AlmeMarkdownResponseNext, responseClass: string, inlineClass: string, onLinkClick?: ((link: DisplayLink | NavUrl) => void)): ReactElement | null {\n const sharedProps = {\n className: responseClass,\n variant: \"body1\" as const,\n };\n\n if (response.html) {\n const parsedHtml = parse(response.html);\n const options = getReplacingFunction(response, inlineClass, onLinkClick);\n const convertedHTML = replaceLinks(parsedHtml, options);\n\n return (\n \n {convertedHTML}\n \n );\n }\n\n const responseText = getAgentResponseText(response);\n if (!responseText) {\n return null;\n }\n\n return {responseText};\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 [displayLinkCollection output property](https://confluence.nextit.com/pages/viewpage.action?pageId=35688489)\n */\nexport async function onDisplayLinkClick(link: DisplayLink | NavUrl, apiUtils: React.MutableRefObject): Promise {\n if ((link as DisplayLink).TargetType) {\n link = link as DisplayLink;\n addGAEventTracker(link.DisplayText);\n switch (link.TargetType) {\n case 'Unit':\n await apiUtils.current.submitUnitRequest(link as UnitDisplayLink);\n break;\n case 'Url':\n await apiUtils.current.submitReportingEvent('UrlClicked', link.Metadata.UrlAddress as string);\n openNavLink((link as UrlDisplayLink).Metadata.NavigationType, (link as UrlDisplayLink).Metadata.UrlAddress);\n break;\n case 'Input':\n await apiUtils.current.submitAlmeInput((link as InputDisplayLink).Metadata.InputText, 'Click', (link as InputDisplayLink).DisplayText);\n break;\n default:\n defaultLogger.warn('Unknown Link Type', link.TargetType);\n break;\n }\n }\n else {\n link = link as NavUrl;\n await apiUtils.current.submitReportingEvent('UrlClicked', link.Metadata?.UrlAddress as string);\n openNavLink(link.LinkNavigationType, link.UrlAddress);\n }\n}\n\nfunction getLinkSpec(sections: DisplayLinkSection[], matches: RegExpMatchArray): DisplayLink | null {\n const [displayText, sectionIndexStr, linkIndexStr] = matches.slice(1);\n\n // Convert from string to number or bail\n let linkIndex = parseInt(linkIndexStr, 10);\n if (isNaN(linkIndex)) {\n return null;\n }\n\n // Convert from string to number or bail\n // Also bail if index is -1 (i.e., not found)\n // Can't just .find() here because we might have to subtract\n let foundSectionIndex = parseInt(sectionIndexStr, 10);\n if (isNaN(foundSectionIndex)) {\n // eslint-disable-next-line array-callback-return\n foundSectionIndex = sections.findIndex((section) => {\n if (linkIndex < section.Links.length) {\n return true;\n }\n linkIndex -= section.Links.length;\n });\n\n if (foundSectionIndex < 0) {\n return null;\n }\n }\n\n const foundSection = sections[foundSectionIndex];\n if (!foundSection) {\n return null;\n }\n\n const link = foundSection.Links[linkIndex] || null;\n\n // Override text when specified\n if (link && displayText) {\n link.DisplayText = displayText;\n }\n return link;\n}\n\nfunction updateDisplayLinkSection(sections: DisplayLinkSection[], linkIndex: number): DisplayLinkSection[] {\n return sections.map((section) => {\n const displayLinks = section.Links;\n const link = displayLinks[linkIndex];\n link.Metadata = {\n ...link.Metadata,\n isInline: true,\n };\n section.Links = displayLinks;\n return section;\n }).filter((section) => {\n // remove sections without any links.\n return !!section.Links.length;\n });\n}\n\nfunction buildInlineLinkReplacer(responseText: string, matches: RegExpExecArray, link: UrlDisplayLink | UnitDisplayLink | InputDisplayLink): string {\n return responseText.replace(matches[0], ``);\n}\n\nexport function MarkUp(inText: string): string {\n return inText ? marked(inText) : inText;\n}\n\n/**\n * Parse the HTML string for inline links syntax from FPML, if found replace the substring with\n * a temporary element that will later be replaced with the inline link.\n * @param response is the full AlmeResponse containing post-markdown HTML\n * @returns the response text with placeholder elements for inline links\n */\nexport function escapeAlmeDisplayLink(response: AlmeResponseV5 | AlmeResponseV6 | AlmeResponseNext): string {\n const inlineRegex = /\\[([^\\][]+)\\]\\((?:(\\d{1,2}),)?(\\d{1,2})?\\)/ig;\n const sections = response.displayLinkCollection ? response.displayLinkCollection.Sections : [];\n let { text } = response;\n let matches: RegExpExecArray | null;\n // eslint-disable-next-line no-cond-assign\n while (matches = inlineRegex.exec(text)) {\n const link = getLinkSpec(sections, matches);\n if (link) {\n switch (link.TargetType) {\n case 'Url':\n text = buildInlineLinkReplacer(text, matches, link as UrlDisplayLink);\n break;\n case 'Unit':\n text = buildInlineLinkReplacer(text, matches, link as UnitDisplayLink);\n break;\n case 'Input':\n text = buildInlineLinkReplacer(text, matches, link as InputDisplayLink);\n break;\n case \"None\":\n text = text.replace(matches[0], matches[1]);\n break;\n }\n if (response.displayLinkCollection) {\n response.displayLinkCollection.Sections = updateDisplayLinkSection(response.displayLinkCollection.Sections, +matches[3]);\n }\n } else {\n text = text.replace(matches[0], matches[1]);\n }\n }\n return text;\n}\n\n/**\n * Wrapper function for converting alme responses to markdown\n * @param response alme response\n * @returns markdown response\n */\nexport function ConvertAlmeResponse(response: AlmeResponseNext): AlmeMarkdownResponseNext {\n const responseText = escapeAlmeDisplayLink(response);\n return {\n ...response,\n html: MarkUp(responseText),\n } as AlmeMarkdownResponseNext;\n}\n\n","import { Card, CardContent, Slide, Theme, Typography } from '@material-ui/core';\nimport React, { ReactElement } from 'react';\nimport userCardStyles from './AlmeUserResponse.styles';\nimport { withStyles, WithStyles, createStyles, makeStyles } from '@material-ui/core/styles';\nimport { getMaskedUserInput } from '../AlmeResponseUtils';\nimport { AlmeMarkdownResponseNext } from '../AlmeResponse';\nimport { FocusComponentProps } from '../../../models/ComponentProps';\n\nconst useStyles = makeStyles(({ spacing }: Theme) =>\n createStyles({\n userCardContainer: {\n display: 'flex',\n flexFlow: 'row nowrap',\n justifyContent: 'flex-end',\n },\n }),\n);\n\nexport type AlmeUserResponseCardClasses = Record<\"userCardContainer\", string>;\n\ninterface AlmeUserResponseProps extends WithStyles {\n response: AlmeMarkdownResponseNext;\n responseRevision: string;\n entryId: string;\n userResponseRef: React.RefObject;\n onScroll: () => void;\n userIcon?: ReactElement;\n focusProps?: FocusComponentProps;\n}\n\nconst AlmeUserResponse: React.FC = (props: AlmeUserResponseProps) => {\n const classes: AlmeUserResponseCardClasses = useStyles();\n const maskedUserInput = getMaskedUserInput(props.response);\n const hasUserInput = !!maskedUserInput;\n const responseAccessibilityLabel = ;\n\n if (!hasUserInput) {\n return null;\n }\n\n return (\n \n
\n \n \n {responseAccessibilityLabel}\n {maskedUserInput}\n \n \n {props.userIcon}\n
\n \n );\n};\n\nexport default withStyles(userCardStyles)(AlmeUserResponse);\n","import { Theme } from '@material-ui/core';\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport default function componentWithStyles({ palette, spacing, typography }: Theme) {\n // TODO: use styledBy to better allow for styling card background and text colors\n const userColor = palette.augmentColor({ main: palette.background.default });\n const userColorLight = palette.augmentColor({ main: userColor.light });\n\n return {\n root: {\n height: '100%',\n },\n userCard: {\n wordWrap: 'break-word' as const,\n margin: spacing(1),\n backgroundColor: userColorLight.main,\n color: userColorLight.contrastText,\n },\n ivaCardContent: {\n '&:last-child': {\n padding: spacing(2),\n },\n },\n userCardBody: {},\n };\n}","import React, { useCallback } from 'react';\n\nimport { Button } from \"@material-ui/core\";\nimport { createStyles, makeStyles, withStyles, WithStyles } from '@material-ui/core/styles';\n\nimport { AlmeMarkdownResponseNext } from \"../../AlmeResponse/AlmeResponse\";\nimport { ResponseAction } from \"@alme/types/response/ResponseAction\";\n\nimport ctaButtonStyles from './AlmeCtaButton.styles';\nimport { AlmeApiUtils } from '../../../api/AlmeApiUtils';\nimport { FocusComponentProps } from '../../../models/ComponentProps';\nimport { DisplayLinkTargetTypes } from '@alme/types/response/DisplayLinkTargetTypes';\nimport { UnitDisplayLink } from '@alme/types/response/UnitDisplayLink';\nimport { EntryExtensionData } from '@alme/types/response/EntryExtensionData';\nimport { AlmeCtaButtonConfig } from './AlmeCtaButtonConfig';\n\nexport interface CtaResponseAction extends ResponseAction {\n ButtonDisplayText: string;\n ButtonTarget: string;\n ButtonType: DisplayLinkTargetTypes;\n parameters: {\n UnitLabel: string;\n Type: string;\n };\n Name: \"CallToActionButton\";\n}\n\nconst useStyles = makeStyles(() =>\n createStyles({\n root: {\n },\n }),\n);\n\ninterface AlmeCtaButtonProps extends WithStyles {\n response: AlmeMarkdownResponseNext;\n onCtaClick: (action: CtaResponseAction, entryId: string) => Promise;\n focusProps?: FocusComponentProps;\n responseId: string;\n almeConfig: AlmeCtaButtonConfig;\n}\n\nconst AlmeCtaButton: React.FC = (props: AlmeCtaButtonProps) => {\n const classes = useStyles();\n\n const responseRevision = (props.responseId || props.response.responseRevision).toString();\n\n // ? TODO: can you have multiple call to action buttons?\n const getCtaResponseAction = (): CtaResponseAction | null => {\n if (!props.response.responseActions)\n return null;\n else {\n for (const action of props.response.responseActions) {\n if (action.Name === \"CallToActionButton\") {\n return action as CtaResponseAction;\n }\n }\n return null;\n }\n };\n\n const entryId = (props.response.extensionData && (props.response.extensionData as EntryExtensionData).entryId) || props.response.responseRevision.toString();\n\n const inlineAction = getCtaResponseAction();\n if (!inlineAction) {\n return null;\n } else {\n return (\n { void props.onCtaClick(inlineAction, entryId); }}\n fullWidth\n {...props.focusProps}\n >{inlineAction.ButtonDisplayText}\n );\n }\n};\n\nexport default withStyles(ctaButtonStyles)(AlmeCtaButton);\n\nexport function OnCtaClickCallback(apiUtils: React.MutableRefObject): (action: CtaResponseAction, entryId: string) => Promise {\n return useCallback(async (action: CtaResponseAction, entryId: string): Promise => {\n const unitLink = {\n Metadata: {\n UnitUID: action.ButtonTarget,\n },\n DisplayText: action.ButtonDisplayText,\n } as UnitDisplayLink;\n await apiUtils.current.submitUnitRequest(unitLink, {\n ...action.parameters,\n entryId,\n });\n }, [apiUtils]);\n}","import { Theme } from \"@material-ui/core\";\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport default function componentWithStyles({ spacing }: Theme) {\n return {\n ctaButton: {\n marginTop: spacing(2),\n },\n };\n}","import React, { useState, ReactElement, MutableRefObject } from 'react';\n\nimport { TextField, Button, FormControlLabel, Radio, RadioGroup } from '@material-ui/core';\n\nimport { DialogTitle, DialogContent, DialogActions, Dialog } from '../../AlmeDialog/AlmeDialog';\nimport { AlmeSurveyConfig, RadioButtonColor } from './AlmeSurveyConfig';\nimport { FireSurveyAppEvent, SurveyDialogDisplayText } from \"./AlmeSurvey\";\nimport { useIntl } from 'react-intl';\nimport { useFocusStyles } from '../../FocusVisibleStyle';\n\nexport interface AlmeSurveyDialogProps {\n onSubmitSurvey: FireSurveyAppEvent;\n setIsDialogOpen: (isOpen: boolean) => void;\n isOpen: boolean;\n almeConfig: AlmeSurveyConfig;\n entryId: string;\n surveyDialogDisplayText: SurveyDialogDisplayText;\n scrollToResponse?: MutableRefObject;\n}\n\nconst AlmeSurveyDialog: React.FC = (props: AlmeSurveyDialogProps): ReactElement => {\n const intl = useIntl();\n const Focusclasses = useFocusStyles();\n const firstRadioButton = props.almeConfig.survey.dialog.radioButtonOptions?.find(x => x !== undefined) ?? '';\n const [surveyInput, setSurveyInput] = useState('');\n const [surveyReason, setSurveyReason] = useState(firstRadioButton);\n\n const textChanged = (event: React.ChangeEvent): void => {\n const inputText = event.target.value;\n setSurveyInput(inputText);\n };\n\n const onSubmitInput = (hasReason: boolean) => async (): Promise => {\n if (props.scrollToResponse)\n props.scrollToResponse.current = true;\n\n await props.onSubmitSurvey(\n props.entryId,\n props.almeConfig.survey.dialog.submitLinkConfig?.AppeventName ?? \"GradingComplete\",\n props.almeConfig.survey.dialog.submitLinkConfig?.parameters.grade ?? 0,\n props.almeConfig.survey.dialog.submitLinkConfig?.parameters.SurveyUnitLabel ?? \"\",\n hasReason ? surveyInput.trim() : '',\n props.almeConfig.survey.dialog.submitLinkConfig?.parameters.gradingQueue,\n hasReason ? surveyReason : '',\n props.almeConfig.survey.dialog.submitLinkConfig?.parameters.gradingType);\n setSurveyInput('');\n };\n\n const radioGroup = getRadioGroup(surveyReason, firstRadioButton, props.almeConfig.survey.dialog.radioButtonColor, setSurveyReason,\n props.almeConfig.survey?.dialog?.radioButtonOptions?.length, props.almeConfig.survey?.dialog?.radioButtonOptions);\n\n const freeFormText = props.almeConfig.survey?.dialog?.freeformTextMaxLength !== 0\n ? \n : <>;\n\n return (\n \n \n {props.surveyDialogDisplayText.headerText}\n \n \n {radioGroup}\n {freeFormText}\n \n \n \n {props.surveyDialogDisplayText.buttons.declineButtonText}\n \n \n {props.surveyDialogDisplayText.buttons.acceptButtonText}\n \n \n \n );\n};\n\nexport default AlmeSurveyDialog;\n\n\nfunction getRadioGroup(surveyReason: string, firstRadioButton: string, radioButtonColor: RadioButtonColor,\n setSurveyReason: (value: React.SetStateAction) => void, radioButtonLength?: number, radioButtonOptions?: string[]): JSX.Element {\n return (radioButtonLength ?? 0) > 0\n ? { setSurveyReason(value); }}\n >\n {radioButtonOptions?.map((radioValue, index) => (\n } label={radioValue} />\n ))}\n \n : <>;\n}\n","import React, { useState, useCallback, useRef, useEffect, MutableRefObject } from 'react';\n\nimport { Button, Box, Theme, Typography } from \"@material-ui/core\";\nimport { createStyles, makeStyles, withStyles, WithStyles } from '@material-ui/core/styles';\n\nimport { AlmeMarkdownResponseNext } from \"../../AlmeResponse/AlmeResponse\";\nimport { ResponseAction } from \"@alme/types/response/ResponseAction\";\n\nimport surveyStyles from './AlmeSurvey.styles';\nimport { AlmeApiUtils } from '../../../api/AlmeApiUtils';\nimport AlmeSurveyDialog from './AlmeSurveyDialog';\nimport { FocusComponentProps } from '../../../models/ComponentProps';\nimport { AlmeSurveyConfig } from './AlmeSurveyConfig';\nimport { useFocusStyles } from '../../FocusVisibleStyle';\n\nexport interface SurveyDialogDisplayText {\n headerText: string;\n bodyText: string;\n buttons: {\n acceptButtonText: string;\n declineButtonText: string;\n };\n}\n\nfunction validateInlineSurveyLinks(action: InlineSurveyResponseAction | undefined): boolean {\n const inlineSurveyLinks = action?.MetaData.InlineSurveyLinks;\n\n if (!inlineSurveyLinks?.No?.ActionType) {\n console.log(\"Missing 'No' link config or action type\");\n return false;\n }\n if (inlineSurveyLinks?.No?.ActionType === \"AppEvent\" && !(inlineSurveyLinks.No as InlineSurveyLinkAppEventConfig)?.AppeventName) {\n console.log(\"Missing 'No' link config or appevent name \");\n return false;\n }\n if (!inlineSurveyLinks?.Yes?.ActionType) {\n console.log(\"Missing 'Yes' link config or action type\");\n return false;\n }\n if (inlineSurveyLinks?.Yes?.ActionType === \"AppEvent\" && !(inlineSurveyLinks.Yes as InlineSurveyLinkAppEventConfig)?.AppeventName) {\n console.log(\"Missing 'Yes' link config or appevent type\");\n return false;\n }\n if ((inlineSurveyLinks?.Yes?.ActionType !== \"AppEvent\" && inlineSurveyLinks?.Yes?.ActionType !== \"ShowSurvey\") ||\n (inlineSurveyLinks?.No?.ActionType !== \"AppEvent\" && inlineSurveyLinks?.No?.ActionType !== \"ShowSurvey\")) {\n console.log(\"Invalid Action type provided\");\n return false;\n }\n if (!inlineSurveyLinks?.Yes?.ActionType) {\n console.log(\"Missing 'Yes' link config or action type\");\n return false;\n }\n if (!inlineSurveyLinks?.Title) {\n console.log(\"Missing survey links title\");\n return false;\n }\n\n return true;\n}\n\nfunction validateSurveys(action: InlineSurveyResponseAction | undefined): boolean {\n const surveys = action?.MetaData.Survey;\n\n for (const id in surveys) {\n const survey = surveys[id];\n if (!survey?.Footer?.SubmitLink?.AppeventName) {\n console.log(\"Missing survey submit link appevent name\");\n return false;\n }\n if (!survey?.Body?.RadioButtons?.radioOptions?.length && !survey?.Body?.FreeformText) {\n console.log(\"Missing both radio buttons and freeform text, so no way to collect feedback\");\n return false;\n }\n }\n\n return true;\n}\n\nfunction validateSurveyAction(action: InlineSurveyResponseAction | undefined): boolean {\n if (!action) {\n return false;\n }\n\n return validateInlineSurveyLinks(action) && validateSurveys(action);\n}\n\nfunction getSurveyResponseAction(props: AlmeSurveyProps): InlineSurveyResponseAction | undefined {\n const action = props.response.responseActions?.find(action => action.Name === \"InlineSurvey\") as InlineSurveyResponseAction;\n\n return validateSurveyAction(action) ? action : undefined;\n}\n\nfunction modifyAlmeDialogConfig(inlineSurveyConfig: InlineSurveyConfig, dialogConfig: AlmeSurveyConfig, unitLabel: string): AlmeSurveyConfig {\n return {\n survey: {\n dialog: {\n ...dialogConfig.survey.dialog,\n freeformTextMaxLength: inlineSurveyConfig.Body?.FreeformText?.maxLength ?? 0,\n radioButtonOptions: inlineSurveyConfig.Body?.RadioButtons?.radioOptions ?? [],\n submitLinkConfig: {\n ...inlineSurveyConfig.Footer.SubmitLink,\n parameters: {\n ...inlineSurveyConfig.Footer.SubmitLink.parameters,\n SurveyUnitLabel: unitLabel,\n },\n },\n },\n },\n };\n}\n\nfunction setSurveyDialogDisplayText(inlineSurveyConfig: InlineSurveyConfig): SurveyDialogDisplayText {\n return {\n headerText: inlineSurveyConfig.Header.Title,\n bodyText: inlineSurveyConfig.Body?.FreeformText?.placeholder ?? \"\",\n buttons: {\n acceptButtonText: inlineSurveyConfig.Footer.SubmitLink.DisplayText,\n declineButtonText: inlineSurveyConfig.Footer.CancelLink.DisplayText,\n },\n } as SurveyDialogDisplayText;\n}\n\nexport interface InlineSurveyLinkBaseConfig {\n ActionType: \"ShowSurvey\" | \"AppEvent\";\n DisplayText: string;\n}\n\nexport interface InlineSurveyLinkShowSurveyConfig extends InlineSurveyLinkBaseConfig {\n ActionType: \"ShowSurvey\";\n SurveyId: string;\n}\n\nexport interface InlineSurveyLinkAppEventConfig extends InlineSurveyLinkBaseConfig {\n ActionType: \"AppEvent\";\n AppeventName: string;\n parameters: {\n grade: number;\n gradingComments: string;\n gradingQueue: number;\n gradingReason: string;\n gradingType: string;\n SurveyUnitLabel: string;\n };\n}\n\nexport interface InlineSurveyConfig {\n Header: {\n Title: string;\n };\n Body: {\n FreeformText: {\n maxLength: number;\n placeholder: string;\n };\n RadioButtons: {\n radioOptions: string[];\n };\n };\n Footer: {\n CancelLink: {\n DisplayText: string;\n };\n SubmitLink: InlineSurveyLinkAppEventConfig;\n };\n}\n\nexport interface InlineSurveyResponseAction extends ResponseAction {\n Name: 'InlineSurvey';\n MetaData: {\n InlineSurveyLinks: {\n Title: string;\n No: InlineSurveyLinkBaseConfig;\n Yes: InlineSurveyLinkBaseConfig;\n };\n Survey: {\n [key: string]: InlineSurveyConfig;\n };\n };\n SurveyUnitLabel: string;\n}\n\nexport type FireSurveyAppEvent = (entryId: string,\n appEventName: string,\n grade: number,\n SurveyUnitLabel: string,\n gradingComments?: string,\n gradingQueue?: number,\n gradingReason?: string,\n gradingType?: string) => Promise;\n\nconst useStyles = makeStyles(({ spacing }: Theme) =>\n createStyles({\n header: {\n maxHeight: 10,\n },\n closeContainer: {\n display: 'inline-block',\n },\n surveyButtonBox: {\n marginTop: spacing(-0.5),\n padding: spacing(1),\n },\n surveyTitle: {\n display: 'inline',\n paddingRight: 10,\n marginTop: spacing(.5),\n },\n }),\n);\n\ninterface AlmeSurveyProps extends WithStyles {\n response: AlmeMarkdownResponseNext;\n isLastResponse: boolean;\n onSubmitClick: FireSurveyAppEvent;\n setIsDialogOpen: (isOpen: boolean) => void;\n responseId: string;\n focusProps?: FocusComponentProps;\n almeConfig: AlmeSurveyConfig;\n isDialogOpen?: boolean;\n scrollToResponse?: MutableRefObject;\n}\n\nconst AlmeSurvey: React.FC = (props: AlmeSurveyProps) => {\n const [showSurveyDialog, setShowSurveyDialog] = useState(false);\n const [selectedSurveyId, setSelectedSurveyId] = useState();\n const [shouldFocus, setShouldFocus] = useState(false);\n const surveyTriggerRef = useRef(null);\n\n const classes = useStyles();\n const Focusclasses = useFocusStyles();\n\n useEffect(() => {\n if (!props.isDialogOpen && shouldFocus) {\n surveyTriggerRef.current?.focus();\n setShouldFocus(false);\n }\n }, [props.isDialogOpen, shouldFocus]);\n\n const inlineAction = getSurveyResponseAction(props);\n\n function handleSurveyLinkClick(config: InlineSurveyLinkBaseConfig, SurveyUnitLabel: string): void {\n\n let typedConfig;\n switch (config.ActionType) {\n case \"AppEvent\":\n if(props.scrollToResponse)\n props.scrollToResponse.current = true;\n typedConfig = config as InlineSurveyLinkAppEventConfig;\n void submitSurvey(\n props.response.extensionData.entryId as string,\n typedConfig.AppeventName,\n typedConfig.parameters.grade,\n SurveyUnitLabel,\n typedConfig.parameters.gradingComments,\n typedConfig.parameters.gradingQueue,\n typedConfig.parameters.gradingReason,\n typedConfig.parameters.gradingType);\n\n break;\n\n case \"ShowSurvey\":\n typedConfig = config as InlineSurveyLinkShowSurveyConfig;\n setSelectedSurveyId(typedConfig.SurveyId);\n setShowSurveyDialog(true);\n\n break;\n }\n }\n\n const submitSurvey = async (entryId: string,\n appEventName: string,\n grade: number,\n SurveyUnitLabel: string,\n gradingComments = \"\",\n gradingQueue = 2,\n gradingReason = \"\",\n gradingType = \"Survey\"): Promise => {\n await props.onSubmitClick(entryId, appEventName, grade, SurveyUnitLabel, gradingComments, gradingQueue, gradingReason, gradingType);\n\n setShowSurveyDialog(false);\n };\n\n const handleNoClick = (): void => {\n\n handleSurveyLinkClick(inlineAction?.MetaData.InlineSurveyLinks.No as InlineSurveyLinkBaseConfig, inlineAction?.SurveyUnitLabel ?? \"\");\n };\n\n const handleYesClick = (): void => {\n handleSurveyLinkClick(inlineAction?.MetaData.InlineSurveyLinks.Yes as InlineSurveyLinkBaseConfig, inlineAction?.SurveyUnitLabel ?? \"\");\n };\n\n return inlineAction ? (\n <>\n \n \n {inlineAction.MetaData.InlineSurveyLinks.Title}\n \n
\n \n {inlineAction.MetaData.InlineSurveyLinks.No.DisplayText}\n \n \n {inlineAction.MetaData.InlineSurveyLinks.Yes.DisplayText}\n \n
\n
\n {selectedSurveyId ?\n () :\n <>\n }\n \n ) : null;\n};\n\nexport default withStyles(surveyStyles)(AlmeSurvey);\n\nexport function OnSurveySubmitClick(apiUtils: React.MutableRefObject): FireSurveyAppEvent {\n return useCallback(async (\n entryId: string,\n appEventName: string,\n grade: number,\n SurveyUnitLabel: string,\n gradingComments = \"\",\n gradingQueue = 2,\n gradingReason = \"\",\n gradingType = \"Survey\"): Promise => {\n const parameters = {\n entryId,\n grade,\n SurveyUnitLabel,\n gradingComments,\n gradingQueue,\n gradingReason,\n gradingType,\n };\n\n await apiUtils.current.submitAppEvent(appEventName, 'External', parameters);\n\n }, [apiUtils]);\n}\n","import { Theme } from \"@material-ui/core\";\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport default function componentWithStyles({ spacing }: Theme) {\n return {\n surveyYesButton: {\n marginLeft: spacing(1.5),\n },\n surveyNoButton: {\n marginLeft: spacing(1.5),\n },\n };\n}\n","import React, { ReactElement } from 'react';\n\nimport { Button } from \"@material-ui/core\";\nimport { createStyles, makeStyles, withStyles, WithStyles } from '@material-ui/core/styles';\n\nimport { AlmeMarkdownResponseNext } from \"../../AlmeResponse/AlmeResponse\";\nimport { ResponseAction } from \"@alme/types/response/ResponseAction\";\n\nimport confirmationOptionStyles from './ChangeTenantConfirmation.styles';\nimport { FocusComponentProps } from '../../../models/ComponentProps';\nimport { ChangeTenantConfirmationConfig } from './ChangeTenantConfirmationConfig';\nimport { CookieLoader } from \"@alme/storage-ts/CookieLoader\";\n\nexport interface ChangeTenantAppEvent {\n Name: string;\n parameters: {\n NewClientAccessKey: string;\n OldClientAccessKey: string;\n Initiator: string;\n InputToResend: string;\n };\n}\n\ninterface ChangeTenantConfirmationOption {\n DisplayText: string;\n NewClientAccessKey: string;\n NewTenantUrl: string;\n}\n\nexport interface ChangeTenantConfirmationResponseAction extends ResponseAction {\n PreviousInput: string;\n options: ChangeTenantConfirmationOption[];\n Name: \"ChangeTenantConfirmation\";\n}\n\nconst useStyles = makeStyles(() =>\n createStyles({\n root: {\n },\n }),\n);\n\ninterface AlmeChangeTenantConfirmationProps extends WithStyles {\n response: AlmeMarkdownResponseNext;\n focusProps?: FocusComponentProps;\n responseId: string;\n almeConfig: ChangeTenantConfirmationConfig;\n}\n\nconst ChangeTenantConfirmation: React.FC = (props: AlmeChangeTenantConfirmationProps) => {\n const classes = useStyles();\n const responseRevision = (props.responseId || props.response.responseRevision).toString();\n\n const responseAction = props.response.responseActions?.find(action => action.Name === \"ChangeTenantConfirmation\") as ChangeTenantConfirmationResponseAction;\n if (!responseAction) {\n return null;\n } else {\n return (\n <>\n {responseAction.options.reduce((elements: ReactElement[], option): ReactElement[] => {\n return elements.concat(\n buildOptionButton(option.DisplayText, option.NewClientAccessKey, option.NewTenantUrl, responseRevision, props, responseAction.PreviousInput, classes.root));\n }, [] as ReactElement[])}\n \n );\n }\n};\n\nexport default withStyles(confirmationOptionStyles)(ChangeTenantConfirmation);\n\nfunction buildOptionButton(displayText: string, accessKey: string, url: string, responseRevision: string, props: AlmeChangeTenantConfirmationProps, previousInput: string, rootClass: string) {\n\n const savedAccessKey = new CookieLoader('verintAccessKey');\n const oldAccessKey = savedAccessKey.GetStorage();\n const changeTenantAppEvent = new CookieLoader('changeTenantAppEvent');\n const inputToResend = new CookieLoader('inputToResend');\n\n const appEvent = {\n Name: \"ChangeTenant\",\n parameters: {\n NewClientAccessKey: accessKey,\n OldClientAccessKey: oldAccessKey,\n Initiator: \"Conversation\",\n InputToResend: previousInput,\n },\n } as ChangeTenantAppEvent;\n\n const setNewKey = () => {\n changeTenantAppEvent.UpdateStorage(appEvent);\n savedAccessKey.UpdateStorage(accessKey);\n inputToResend.UpdateStorage(previousInput);\n };\n\n return (\n {displayText}\n );\n}","import { Theme } from \"@material-ui/core\";\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport default function componentWithStyles({ spacing }: Theme) {\n return {\n confirmationOption: {\n marginTop: spacing(2),\n },\n };\n}","import { Card, CardActions, CardContent, Slide, Theme, Typography } from '@material-ui/core';\nimport React, { MutableRefObject, ReactElement, useEffect, useState } from 'react';\nimport ivaCardStyles from './AlmeIvaResponse.styles';\nimport { withStyles, WithStyles, createStyles, makeStyles } from '@material-ui/core/styles';\nimport {\n getAgentResponse,\n onTriggerAutoNavUrl,\n paintNavUrl,\n paintSection,\n paintSectionHeader,\n} from '../AlmeResponseUtils';\nimport AlmeCtaButton, { CtaResponseAction } from '../../ResponseActions/AlmeCtaButton/AlmeCtaButton';\nimport AlmeSurvey, { FireSurveyAppEvent } from '../../ResponseActions/AlmeSurvey/AlmeSurvey';\nimport { DisplayLink } from '@alme/types/response/DisplayLink';\nimport { FocusComponentProps } from '../../../models/ComponentProps';\nimport { AlmeMarkdownResponseNext, AlmeResponseClasses } from '../AlmeResponse';\nimport { AlmeIvaResponseConfig } from './AlmeIvaResponseConfig';\nimport { NavUrl } from '@alme/types/response/NavUrl';\nimport ChangeTenantConfirmation from \"../../ResponseActions/ChangeTenantConfirmation/ChangeTenantConfirmation\";\n\nconst useStyles = makeStyles(({ spacing }: Theme) =>\n createStyles({\n userCardContainer: {\n display: 'flex',\n flexFlow: 'row nowrap',\n justifyContent: 'flex-end',\n },\n displayLink: {\n textAlign: 'left',\n justifyContent: 'normal',\n marginTop: '10px',\n \"&.Mui-focusVisible\": { outline: \"2px solid black\" },\n },\n navUrl: {\n marginTop: spacing(2),\n },\n sectionHeader: {\n paddingTop: spacing(2),\n },\n }),\n);\n\nexport type AlmeIvaCardClasses = Record<\"displayLink\" | \"navUrl\", string>;\n\ninterface AlmeIvaResponseProps extends WithStyles {\n almeConfig: AlmeIvaResponseConfig;\n response: AlmeMarkdownResponseNext;\n responseRevision: string;\n isLastResponse: boolean;\n entryId: string;\n agentResponseRef: React.RefObject;\n onScroll: () => void;\n onCtaClick: (action: CtaResponseAction, entryId: string) => Promise;\n setIsDialogOpen: (isOpen: boolean) => void;\n onDisplayLinkClick: (link: DisplayLink | NavUrl) => void;\n onSurveySubmitClick: FireSurveyAppEvent;\n ivaIcon?: ReactElement;\n isDialogOpen?: boolean;\n focusProps?: FocusComponentProps;\n scrollToResponse?: MutableRefObject;\n}\n\nconst AlmeIvaResponse: React.FC = (props: AlmeIvaResponseProps) => {\n const [disableButton, setDisableButton] = useState(false);\n const classes: AlmeResponseClasses = useStyles();\n const responseText = getAgentResponse(props.response, `${props.classes.ivaCardBodyText}`, `${props.classes.inlineButton}`, props.onDisplayLinkClick);\n const hasIvaResponse = !!(responseText || props.response.navUrl || (props.response.displayLinkCollection?.Sections.length));\n const isSessionTimeout = props.response.extensionData[\"isSessionTimeoutResponse\"]\n && props.response.extensionData[\"isSessionTimeoutResponse\"] === true;\n\n const responseAccessibilityLabel = ;\n\n const shouldDisableOnClick = (props.response.navUrl && props.response.navUrl?.Metadata?.DisableOnClick) ? true : undefined;\n const onLinkClick = () => {\n props.onDisplayLinkClick(props.response.navUrl as DisplayLink | NavUrl);\n if(shouldDisableOnClick) {\n setDisableButton(true);\n }\n };\n\n\n useEffect(() => {\n if (props.response.navUrl && props.almeConfig.ivaResponse.shouldAutoNav) {\n onTriggerAutoNavUrl(props.response.navUrl);\n }\n // Empty dependency-list so autoNav only happens once:\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n let ivaIcon = props.ivaIcon;\n if (props.ivaIcon) {\n ivaIcon = React.cloneElement(\n props.ivaIcon,\n {\n alt:\"\",\n },\n );\n }\n\n if (!hasIvaResponse) {\n return null;\n }\n else if (isSessionTimeout) {\n return (\n <>\n {responseAccessibilityLabel}\n {responseText}\n \n );\n }\n else {\n return (\n \n
\n {ivaIcon}\n \n \n {responseAccessibilityLabel}\n {responseText}\n \n {paintNavUrl(props.entryId, props.response.navUrl, props.responseRevision, classes, props.almeConfig, onLinkClick, props.focusProps, undefined, disableButton)}\n \n {props.response.displayLinkCollection && !!props.response.displayLinkCollection.Sections.length &&\n <> {paintSectionHeader(props.response.displayLinkCollection.Sections, classes.sectionHeader)}\n {props.response.displayLinkCollection.Sections.reduce((elements: ReactElement[], section): ReactElement[] => {\n return elements.concat(paintSection(props.entryId, section, props.onDisplayLinkClick, classes, props.almeConfig, props.focusProps));\n }, [] as ReactElement[])} \n }\n \n \n \n \n \n
\n
\n );\n }\n};\n\nexport default withStyles(ivaCardStyles)(AlmeIvaResponse);\n","import { Theme } from '@material-ui/core';\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport default function componentWithStyles({ palette, spacing, typography }: Theme) {\n // TODO: use styledBy to better allow for styling card background and text colors\n const paperColor = palette.augmentColor({ main: palette.background.paper });\n const gutterPxSm = spacing(1);\n return {\n root: {\n height: '100%',\n },\n ivaCard: {\n margin: gutterPxSm,\n color: paperColor.contrastText,\n },\n ivaCardActions: {\n justifyContent: \"center\",\n padding: spacing(0),\n },\n ivaCardContent: {\n '&:last-child': {\n padding: spacing(2),\n },\n },\n ivaCardContainer: {\n display: 'flex',\n flexFlow: 'row nowrap',\n justifyContent: 'flex-start',\n },\n ivaCardBodyText: {\n '& * a': {\n ...typography.button,\n },\n '& p': {\n ...typography.body1,\n },\n '& p:first-child': {\n marginTop: 0,\n },\n '& p:last-child': {\n marginBottom: 0,\n },\n '& * img': {\n maxWidth: '100%',\n },\n },\n inlineButton: {\n background: 'none',\n border: 'none',\n padding: 0,\n color: palette.primary.main,\n textDec: 'underline',\n cursor: 'pointer',\n 'text-decoration': 'underline',\n },\n };\n}\n","import React, { useRef, ReactElement, useCallback, MutableRefObject } from 'react';\nimport { withStyles, WithStyles } from '@material-ui/core/styles';\n\nimport { AlmeResponseNext, AlmeResponseV5, AlmeResponseV6 } from '@alme/types/response/AlmeResponse';\nimport { DisplayLink } from '@alme/types/response/DisplayLink';\nimport { EntryExtensionData } from '@alme/types/response/EntryExtensionData';\n\nimport responseStyles from './AlmeResponse.styles';\nimport { FocusComponentProps } from '../../models/ComponentProps';\n\nimport { CtaResponseAction } from '../ResponseActions/AlmeCtaButton/AlmeCtaButton';\n\nimport { AlmeApiUtils } from '../../api/AlmeApiUtils';\nimport { AlmeResponseConfig } from './AlmeResponseConfig';\nimport AlmeUserResponse from './AlmeUserResponse/AlmeUserResponse';\nimport AlmeIvaResponse from './AlmeIvaResponse/AlmeIvaResponse';\nimport { FireSurveyAppEvent } from \"../ResponseActions/AlmeSurvey/AlmeSurvey\";\nimport { NavUrl } from '@alme/types/response/NavUrl';\nimport { ConvertAlmeResponse, onDisplayLinkClick } from './AlmeResponseUtils';\n\nexport type AlmeResponseClasses = Record<\"userCardContainer\" | \"displayLink\" | \"navUrl\" | \"sectionHeader\", string>;\nexport interface AlmeMarkdownResponseV5 extends AlmeResponseV5 {\n html: string;\n}\n\nexport interface AlmeMarkdownResponseV6 extends AlmeResponseV6 {\n html: string;\n}\n\nexport interface AlmeMarkdownResponseNext extends AlmeResponseNext {\n html: string;\n}\n\n\ninterface AlmeResponseProps extends WithStyles {\n response: AlmeResponseNext;\n children?: ReactElement[];\n isLastResponse: boolean;\n onDisplayLinkClick: (link: DisplayLink | NavUrl) => void;\n onSurveySubmitClick: FireSurveyAppEvent;\n almeConfig: AlmeResponseConfig;\n setIsDialogOpen: (isOpen: boolean) => void;\n focusProps?: FocusComponentProps;\n onCtaClick: (action: CtaResponseAction, entryId: string) => Promise;\n responseId?: string | number;\n isDialogOpen?: boolean;\n onScroll: () => void;\n scrollToResponse?: MutableRefObject;\n}\n\nconst AlmeResponse: React.FC = (props: AlmeResponseProps) => {\n const response = ConvertAlmeResponse(props.response);\n\n const responseRevision = (props.responseId || response.responseRevision).toString();\n const entryId = response.id || (response.extensionData && (response.extensionData as EntryExtensionData)?.entryId) || responseRevision;\n\n const userResponseRef = useRef(null);\n const agentResponseRef = useRef(null);\n\n return (\n <>\n \n \n \n );\n};\n\nexport default withStyles(responseStyles)(AlmeResponse);\n\nexport function OnDisplayLinkClick(apiUtils: React.MutableRefObject, scrollToResponse: MutableRefObject): (link: DisplayLink | NavUrl) => Promise {\n return useCallback(async (link: DisplayLink | NavUrl) => {\n scrollToResponse.current = true;\n await onDisplayLinkClick(link, apiUtils);\n }, [apiUtils, scrollToResponse]);\n}\n","import { Theme } from '@material-ui/core';\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nconst styles = ({ spacing }: Theme) => {\n return {\n root: {\n margin: spacing(1),\n },\n mainBanner: {\n },\n subBanner: {\n },\n };\n};\n\nexport default styles;","import React from 'react';\nimport { withStyles, WithStyles } from '@material-ui/core/styles';\nimport { Slide, Typography } from '@material-ui/core';\nimport liveChatBannerStyles from './AlmeLiveChatBanner.styles';\nimport { LiveChatNotificationResponseNext } from '@alme/types/response/LiveChatNotificationResponse';\nimport { AlmeLiveChatBannerConfig } from './AlmeLiveChatBannerConfig';\n\nexport type AlmeLiveChatBannerClasses = Record<\"mainBanner\" | \"subBanner\", string>;\n\ninterface AlmeLiveChatBannerProps extends WithStyles {\n response: LiveChatNotificationResponseNext;\n responseId?: string | number;\n almeConfig: AlmeLiveChatBannerConfig;\n onScroll: () => void;\n}\n\nexport function isValidLiveChatBannerResponse(response: LiveChatNotificationResponseNext): boolean {\n const hasOperatorJoined = response.extensionData.MessageOrigin === \"Operator-Joined\";\n const hasOperatorLeft = response.extensionData.MessageOrigin === \"Operator-Left\";\n const hasChatEnded = response.extensionData.MessageOrigin === \"Session-End\";\n return hasOperatorJoined || hasOperatorLeft || hasChatEnded;\n}\n\nconst AlmeLiveChatBanner: React.FC = (props: AlmeLiveChatBannerProps) => {\n\n const response = props.response;\n const hasOperatorJoined = response.extensionData.MessageOrigin === \"Operator-Joined\";\n const hasOperatorLeft = response.extensionData.MessageOrigin === \"Operator-Left\";\n const hasChatEnded = response.extensionData.MessageOrigin === \"Session-End\";\n\n if (!isValidLiveChatBannerResponse(props.response)) {\n return null;\n }\n\n\n const responseRevision = (props.responseId || response.responseRevision).toString();\n const repName = response.extensionData.OperatorData?.Name || props.almeConfig.liveChatBanner.defaultRepName;\n const joinedSubText = `${props.almeConfig.liveChatBanner.joined.sub.text}${repName}`;\n const leftText = `${repName}${props.almeConfig.liveChatBanner.left.text}`;\n const sessionEndReason = response.extensionData.SessionEndReason || props.almeConfig.liveChatBanner.ended.reason.defaultReason;\n const endReasonText = `${sessionEndReason}${props.almeConfig.liveChatBanner.ended.reason.text}`;\n\n return (\n <>\n { hasOperatorJoined &&\n \n
\n
\n {props.almeConfig.liveChatBanner.joined.main.text}\n
\n
\n {joinedSubText}\n
\n
\n
\n }\n { hasOperatorLeft &&\n \n
\n
\n {leftText}\n
\n
\n
\n }\n { hasChatEnded &&\n \n
\n
\n {props.almeConfig.liveChatBanner.ended.main.text}\n
\n
\n {props.almeConfig.liveChatBanner.ended.sub.text}\n
\n
\n {endReasonText}\n
\n
\n
\n }\n \n );\n};\n\nexport default withStyles(liveChatBannerStyles)(AlmeLiveChatBanner);","import { Theme } from '@material-ui/core';\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport default function componentWithStyles({ palette, spacing, typography }: Theme) {\n const paperColor = palette.augmentColor({ main: palette.background.paper });\n const gutterPxSm = spacing(1);\n return {\n ivaCard: {\n margin: gutterPxSm,\n color: paperColor.contrastText,\n },\n ivaCardBodyText: {\n '& * a': {\n ...typography.button,\n },\n '& p': {\n ...typography.body1,\n },\n '& p:first-child': {\n marginTop: 0,\n },\n '& p:last-child': {\n marginBottom: 0,\n },\n },\n ivaCardActions: {\n display: 'block',\n margin: gutterPxSm,\n },\n ivaCardContent: {\n '&:last-child': {\n padding: spacing(2),\n },\n },\n ivaCardContainer: {\n display: 'flex',\n flexFlow: 'row nowrap',\n justifyContent: 'flex-start',\n },\n inlineButton: {\n background: 'none',\n border: 'none',\n padding: 0,\n color: '#069',\n textDec: 'underline',\n cursor: 'pointer',\n 'text-decoration': 'underline',\n },\n };\n}","export function convertToHex(text?: string): string {\n if (!text) {\n return 'inherit';\n }\n\n let hash = 0;\n for (let i = 0; i < text.length; i++) {\n hash = text.charCodeAt(i) + ((hash << 5) - hash);\n }\n let color = '#';\n for (let i = 0; i < 3; i++) {\n const value = (hash >> (i * 8)) & 0xFF;\n color += ('00' + value.toString(16)).substr(-2);\n }\n return color;\n}","import React, { useEffect } from 'react';\n\nimport { CardContent, Card, Theme, Avatar } from '@material-ui/core';\nimport { withStyles, WithStyles, createStyles, makeStyles, useTheme } from '@material-ui/core/styles';\n\nimport { LiveChatNotificationResponseNext } from '@alme/types/response/LiveChatNotificationResponse';\nimport { AlmeMarkdownResponseNext } from '../../../AlmeResponse/AlmeResponse';\n\nimport liveChatOperatorResponseStyles from './AlmeLiveChatOperatorResponse.styles';\nimport { FocusComponentProps } from '../../../../models/ComponentProps';\n\nimport { getAgentResponse, getAgentResponseText, onTriggerAutoNavUrl, paintNavUrl } from '../../../AlmeResponse/AlmeResponseUtils';\nimport { AlmeLiveChatOperatorResponseConfig } from './AlmeLiveChatOperatorResponseConfig';\nimport { convertToHex } from '../../../../utils/ColorUtils';\nimport { DisplayLink } from '@alme/types/response/DisplayLink';\nimport { NavUrl } from '@alme/types/response/NavUrl';\nimport { EntryExtensionData } from '@alme/types/response/EntryExtensionData';\n\nexport function isValidLiveChatOperatorResponse(response: LiveChatNotificationResponseNext): 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\nconst useStyles = makeStyles(({ spacing }: Theme) =>\n createStyles({\n navUrl: {\n marginTop: spacing(2),\n },\n }),\n);\n\nexport type AlmeLiveChatOperatorResponseClasses = Record<\"navUrl\", string>;\n\ninterface AlmeLiveChatOperatorResponseProps extends WithStyles {\n response: LiveChatNotificationResponseNext;\n isLastResponse: boolean;\n almeConfig: AlmeLiveChatOperatorResponseConfig;\n focusProps?: FocusComponentProps;\n responseId?: string | number;\n onDisplayLinkClick: (link: DisplayLink | NavUrl) => void;\n}\n\nconst AlmeLiveChatOperatorResponse: React.FC = (props: AlmeLiveChatOperatorResponseProps) => {\n const classes: AlmeLiveChatOperatorResponseClasses = useStyles();\n const theme = useTheme();\n\n const response = {\n ...props.response,\n // TODO: add support for limited markdown in live chat (i.e. URL links).\n html: '',\n } as AlmeMarkdownResponseNext;\n\n useEffect(() => {\n if (response.navUrl && props.almeConfig.liveChatOperatorResponse.shouldAutoNav) {\n onTriggerAutoNavUrl(response.navUrl);\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.id || (response.extensionData && (response.extensionData as EntryExtensionData)?.entryId) || responseRevision;\n\n let avatar = props.almeConfig.liveChatOperatorResponse.chatIcon;\n\n const operatorName = props.response.extensionData.OperatorData?.Name;\n if (props.almeConfig.liveChatOperatorResponse.useUniqueChatIcons && operatorName) {\n const iconColor = theme.palette.augmentColor({ main: convertToHex(operatorName) });\n avatar = ({operatorName.charAt(0)});\n }\n\n if (avatar && operatorName) {\n avatar = React.cloneElement(avatar, { alt: operatorName, title: operatorName });\n }\n\n const responseText = getAgentResponse(response, `${props.classes.ivaCardBodyText}`, `${props.classes.inlineButton}`, props.onDisplayLinkClick);\n\n return (\n \n {avatar}\n \n \n {responseText}\n {paintNavUrl(entryId, response.navUrl, responseRevision, classes, props.almeConfig, props.onDisplayLinkClick, props.focusProps, true)}\n \n \n \n );\n};\n\nexport default withStyles(liveChatOperatorResponseStyles)(AlmeLiveChatOperatorResponse);\n","import React from 'react';\n\nimport { CardContent, Card, Typography } from '@material-ui/core';\nimport { withStyles, WithStyles } from '@material-ui/core/styles';\n\nimport { LiveChatNotificationResponseNext } from '@alme/types/response/LiveChatNotificationResponse';\nimport { EntryExtensionData } from '@alme/types/response/EntryExtensionData';\n\nimport liveChatUserResponseStyles from './AlmeLiveChatUserResponse.styles';\nimport { FocusComponentProps } from '../../../../models/ComponentProps';\n\nimport { getMaskedUserInput } from '../../../AlmeResponse/AlmeResponseUtils';\nimport { AlmeLiveChatUserResponseConfig } from './AlmeLiveChatUserResponseConfig';\n\nexport function isValidLiveChatUserResponse(response: LiveChatNotificationResponseNext): boolean {\n const maskedUserInput = getMaskedUserInput(response);\n const hasUserInput = !!maskedUserInput;\n return response?.extensionData?.MessageOrigin === 'User' && hasUserInput;\n}\n\ninterface AlmeLiveChatUserResponseProps extends WithStyles {\n response: LiveChatNotificationResponseNext;\n isLastResponse: boolean;\n almeConfig: AlmeLiveChatUserResponseConfig;\n focusProps?: FocusComponentProps;\n responseId?: string | number;\n}\n\nconst AlmeLiveChatUserResponse: React.FC = (props: AlmeLiveChatUserResponseProps) => {\n if (!isValidLiveChatUserResponse(props.response)) {\n return null;\n }\n\n const maskedUserInput = getMaskedUserInput(props.response);\n const responseRevision = (props.responseId || props.response.responseRevision).toString();\n const entryId = props.response.id || (props.response.extensionData && (props.response.extensionData as unknown as EntryExtensionData)?.entryId) || responseRevision;\n\n return (\n \n \n \n {maskedUserInput}\n \n \n {props.almeConfig.liveChatUserResponse.userIcon}\n \n );\n};\n\nexport default withStyles(liveChatUserResponseStyles)(AlmeLiveChatUserResponse);\n","import { Theme } from '@material-ui/core';\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport default function componentWithStyles({ palette, spacing }: Theme) {\n const userColor = palette.augmentColor({ main: palette.background.default });\n const userColorLight = palette.augmentColor({ main: userColor.light });\n return {\n userCard: {\n wordWrap: 'break-word' as const,\n margin: spacing(1),\n backgroundColor: userColorLight.main,\n color: userColorLight.contrastText,\n },\n userCardBody: {},\n userCardContent: {\n '&:last-child': {\n padding: spacing(2),\n },\n },\n userCardContainer: {\n display: 'flex',\n flexFlow: 'row nowrap',\n justifyContent: 'flex-end',\n },\n };\n}","import React from 'react';\n\nimport { CardContent, Card, Typography } from '@material-ui/core';\nimport { withStyles, WithStyles } from '@material-ui/core/styles';\n\nimport { LiveChatNotificationResponseNext } from '@alme/types/response/LiveChatNotificationResponse';\nimport { EntryExtensionData } from '@alme/types/response/EntryExtensionData';\nimport { AlmeMarkdownResponseNext } from '../../../AlmeResponse/AlmeResponse';\n\nimport liveChatSystemResponseStyles from './AlmeLiveChatSystemResponse.styles';\nimport { FocusComponentProps } from '../../../../models/ComponentProps';\n\nimport { getAgentResponse, getAgentResponseText } from '../../../AlmeResponse/AlmeResponseUtils';\nimport { AlmeLiveChatSystemResponseConfig } from './AlmeLiveChatSystemResponseConfig';\n\nexport function isValidLiveChatSystemResponse(response: LiveChatNotificationResponseNext, 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 extends WithStyles {\n response: LiveChatNotificationResponseNext;\n isLastResponse: boolean;\n almeConfig: AlmeLiveChatSystemResponseConfig;\n focusProps?: FocusComponentProps;\n responseId?: string | number;\n}\n\nconst AlmeLiveChatSystemResponse: React.FC = (props: AlmeLiveChatSystemResponseProps) => {\n const response = {\n ...props.response,\n // TODO: add support for limited markdown in live chat (i.e. URL links).\n html: '',\n } as AlmeMarkdownResponseNext;\n\n if (!isValidLiveChatSystemResponse(props.response, props.isLastResponse)) {\n return null;\n }\n\n const responseText = getAgentResponse(response, props.classes.systemBodyText, props.classes.inlineButton);\n const responseRevision = (props.responseId || response.responseRevision).toString();\n const entryId = response.id || (response.extensionData && (response.extensionData as EntryExtensionData)?.entryId) || responseRevision;\n\n return (\n \n \n \n {responseText}\n \n \n \n );\n};\n\nexport default withStyles(liveChatSystemResponseStyles)(AlmeLiveChatSystemResponse);\n","import { Theme } from '@material-ui/core';\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport default function componentWithStyles({ palette, spacing, typography }: Theme) {\n const gutterPxSm = spacing(1);\n\n return {\n systemCard: {\n backgroundColor: palette.background.default,\n margin: gutterPxSm,\n },\n systemCardBody: {},\n systemBodyText: {\n '& * a': {\n ...typography.button,\n },\n '& p': {\n ...typography.caption,\n },\n '& p:first-child': {\n marginTop: 0,\n },\n '& p:last-child': {\n marginBottom: 0,\n },\n },\n systemCardContent: {\n '&:last-child': {\n padding: spacing(2),\n },\n },\n systemCardContainer: {\n display: 'flex',\n flexFlow: 'row nowrap',\n justifyContent: 'flex-start',\n },\n inlineButton: {\n background: 'none',\n border: 'none',\n padding: 0,\n color: '#069',\n textDec: 'underline',\n cursor: 'pointer',\n 'text-decoration': 'underline',\n },\n };\n}","import React from 'react';\n\nimport { Slide } from '@material-ui/core';\n\nimport { LiveChatNotificationResponseNext } from '@alme/types/response/LiveChatNotificationResponse';\n\nimport { FocusComponentProps } from '../../../models/ComponentProps';\n\nimport { AlmeLiveChatResponseConfig } from './AlmeLiveChatResponseConfig';\nimport AlmeLiveChatBanner, { isValidLiveChatBannerResponse } from '../AlmeLiveChatBanner/AlmeLiveChatBanner';\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 { DisplayLink } from '@alme/types/response/DisplayLink';\nimport { NavUrl } from '@alme/types/response/NavUrl';\n\ninterface AlmeLiveChatResponseProps {\n response: LiveChatNotificationResponseNext;\n isNewResponse?: boolean;\n isLastResponse: boolean;\n almeConfig: AlmeLiveChatResponseConfig;\n focusProps?: FocusComponentProps;\n responseId?: string | number;\n onScroll: () => void;\n onDisplayLinkClick: (link: DisplayLink | NavUrl) => void;\n}\n\nconst AlmeLiveChatResponse: React.FC = (props: AlmeLiveChatResponseProps) => {\n\n const isChatResponse = isLiveChatResponse(props.response);\n const isOperatorResponse = isValidLiveChatOperatorResponse(props.response);\n const isUserResponse = isValidLiveChatUserResponse(props.response);\n const isSystemResponse = isValidLiveChatSystemResponse(props.response, props.isLastResponse);\n const isBannerResponse = isValidLiveChatBannerResponse(props.response);\n const isErrorResponse = !!props.response?.extensionData?.IsError;\n\n if (isErrorResponse || !isChatResponse || (!isOperatorResponse && !isUserResponse && !isSystemResponse && !isBannerResponse)) {\n return null;\n }\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\n const lcResponseComponent = (\n
\n \n \n \n \n
\n );\n\n\n if (props.isNewResponse) {\n return (\n \n {lcResponseComponent}\n \n );\n } else {\n return lcResponseComponent;\n }\n};\n\nexport default AlmeLiveChatResponse;\n","\nexport class AlmeEnvironmentConfig {\n private static instance: AlmeEnvironmentConfig;\n private static config: Record;\n\n private constructor() {\n AlmeEnvironmentConfig.config = {};\n }\n\n public static getInstance(): AlmeEnvironmentConfig {\n if (!AlmeEnvironmentConfig.instance) {\n AlmeEnvironmentConfig.instance = new AlmeEnvironmentConfig();\n }\n\n return AlmeEnvironmentConfig.instance;\n }\n\n public setConfig(config: Record): void {\n AlmeEnvironmentConfig.config = config;\n }\n\n public getConfig(): Record {\n return AlmeEnvironmentConfig.config;\n }\n}","import React from 'react';\nimport { IconButton, Snackbar, SnackbarContent } from '@material-ui/core';\nimport { withStyles, WithStyles } from '@material-ui/core/styles';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { AlmeHistoryConfig } from '../AlmeHistory/AlmeHistoryConfig';\nimport { FocusComponentProps } from '../../models/ComponentProps';\nimport { AlmeEnvironmentConfig } from '../../api/AlmeEnvironmentConfig';\nimport timeoutWarningStyles from './AlmeTimeoutWarning.styles';\nimport { getTextWithConfigs } from '../../utils/ConfigUtils';\nimport { useIntl } from 'react-intl';\nimport { useFocusStyles } from '../FocusVisibleStyle';\ninterface AlmeTimeoutWarningProps extends WithStyles {\n almeConfig: AlmeHistoryConfig;\n shouldDisplayTimeout: boolean;\n focusProps?: FocusComponentProps;\n setShouldDisplayTimeout:(newState:boolean)=> void;\n}\n\nconst AlmeTimeoutWarning: React.FC = (props: AlmeTimeoutWarningProps) => {\n const intl = useIntl();\n const Focusclasses = useFocusStyles();\n const config = AlmeEnvironmentConfig.getInstance().getConfig();\n\n const defaultTime = config.ClientSessionTimeout ?? \"20\";\n const timeoutValue = defaultTime as string;\n\n const message = intl.formatMessage({\n id: \"timeout.timeoutWarningMessage\",\n defaultMessage: 'Default timeout warning message',\n description: 'AlmeTimeoutWarning text',\n });\n const timeoutMessage = getTextWithConfigs([timeoutValue], message);\n\n const handleTimeoutClose = (event?: React.SyntheticEvent, reason?: string): void => {\n if (reason === 'clickaway') {\n return;\n }\n\n props.setShouldDisplayTimeout(false);\n };\n\n\n if (!props.almeConfig.history.timeout.isEnabled || !props.shouldDisplayTimeout) {\n return null;\n }\n else {\n return (\n \n \n \n \n \n \n }\n />\n \n );\n }\n};\n\nexport default withStyles(timeoutWarningStyles)(AlmeTimeoutWarning);\n","import { Theme } from '@material-ui/core';\nimport { styledBy } from '../../models/AlmeColorMapping';\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport default function componentWithStyles({ palette, spacing }: Theme) {\n return {\n snackBar: {\n position: 'absolute' as const,\n bottom: spacing(1),\n width: '100%',\n },\n snackBarMessage:{width:'80%'},\n snackBarAction:{display:'inline'},\n snackBarContent: {\n color: styledBy('color', {\n default: palette.text.primary,\n divider: palette.text.primary,\n initial: palette.text.primary,\n paper: palette.text.primary,\n primary: palette.primary.contrastText,\n secondary: palette.secondary.contrastText,\n }),\n backgroundColor: styledBy('color', {\n default: palette.background.default,\n divider: palette.divider,\n initial: 'initial',\n paper: palette.background.paper,\n primary: palette.primary.main,\n secondary: palette.secondary.main,\n }),\n },\n };\n}","export function getTextWithConfigs(values: unknown[], ogText: string): string {\n return ogText.replace(/\\{([0-9]+)\\}/g,\n function (_, index: number) { return values[index] as string; });\n}","import React, { ReactElement, useState, useRef, useEffect, MutableRefObject } from 'react';\n\nimport historyStyles from './AlmeHistory.styles';\nimport { debounce } from '@material-ui/core/utils';\nimport { Theme, Container } from '@material-ui/core';\nimport { createStyles, makeStyles, WithStyles, withStyles, useTheme } from '@material-ui/core/styles';\nimport { FocusComponentProps } from '../../models/ComponentProps';\nimport AlmeScrollButton from '../AlmeScrollButton/AlmeScrollButton';\nimport { AlmeHistoryConfig } from './AlmeHistoryConfig';\nimport { AlmeResponseNext } from '@alme/types/response/AlmeResponse';\nimport AlmeResponse from '../AlmeResponse/AlmeResponse';\nimport AlmeLiveChatResponse from '../LiveChat/AlmeLiveChatResponse/AlmeLiveChatResponse';\nimport { DisplayLink } from '@alme/types/response/DisplayLink';\nimport { CtaResponseAction } from '../ResponseActions/AlmeCtaButton/AlmeCtaButton';\nimport { isLiveChatResponse } from '@alme/api-ts/Utils';\nimport { inIframe } from '../../utils/iFrameUtils';\nimport { FireSurveyAppEvent } from \"../ResponseActions/AlmeSurvey/AlmeSurvey\";\nimport AlmeTimeoutWarning from '../AlmeTimeoutWarning/AlmeTimeoutWarning';\nimport { NavUrl } from '@alme/types/response/NavUrl';\nimport { LiveChatNotificationResponseNext } from '@alme/types/response/LiveChatNotificationResponse';\nimport { useIntl } from 'react-intl';\nimport { CookieLoader } from '@alme/storage-ts/CookieLoader';\n\nconst scrollPositionLoader = new CookieLoader('scrollPosition');\n\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n overflow: 'auto',\n padding: theme.spacing(1),\n marginBottom: '2px',\n },\n }),\n);\n\ninterface AlmeHistoryProps extends WithStyles {\n scrollToResponse: MutableRefObject;\n history: AlmeResponseNext[];\n onDisplayLinkClick: (link: DisplayLink | NavUrl) => void;\n onSurveySubmitClick: FireSurveyAppEvent;\n setIsDialogOpen: (isOpen: boolean) => void;\n onCtaClick: (action: CtaResponseAction, entryId: string) => Promise;\n almeConfig: AlmeHistoryConfig;\n shouldDisplayTimeout: boolean;\n isDialogOpen?: boolean;\n focusProps?: FocusComponentProps;\n isLiveChatConnected?: boolean;\n setShouldDisplayTimeout: (newState: boolean) => void;\n}\n\nfunction AlmeHistory(props: AlmeHistoryProps): ReactElement {\n const intl = useIntl();\n const classes = useStyles();\n const theme = useTheme();\n const [isVisible, setIsVisible] = useState(false);\n const [renderControlFlag, setRenderControlFlag] = useState(false);\n const historyRef = useRef(null);\n\n const handleScroll = (): void => {\n if (!historyRef?.current?.children || historyRef.current.children.length <= 0) {\n return;\n }\n const scrollHeight = historyRef.current.scrollHeight;\n const scrollTop = historyRef.current.scrollTop;\n const offsetHeight = historyRef.current.offsetHeight;\n if (renderControlFlag) {\n props.scrollToResponse.current = false;\n scrollPositionLoader.UpdateStorage(scrollTop.toString());\n }\n\n\n const lastChild = historyRef.current.children[historyRef.current.children.length - 1];\n let childHeight = lastChild.clientHeight - theme.spacing(2);\n if (childHeight < 1) {\n childHeight = 0;\n }\n\n const shouldBeVisible = scrollTop < (scrollHeight - offsetHeight - childHeight);\n if ((isVisible && shouldBeVisible) || (!isVisible && !shouldBeVisible)) {\n return;\n }\n setIsVisible(shouldBeVisible);\n };\n\n const onScrollClick = () => {\n if (!historyRef?.current?.children || historyRef.current.children.length <= 0) {\n return;\n }\n setIsVisible(false);\n\n const scrollHeight = historyRef.current.scrollHeight;\n const lastChild = historyRef.current.children[historyRef.current.children.length - 1] as HTMLDivElement;\n\n if (!lastChild.clientHeight) {\n return;\n }\n let childHeight = lastChild.offsetHeight + theme.spacing(1);\n if (childHeight < 1) {\n childHeight = 0;\n }\n\n const childTop = (scrollHeight - childHeight);\n\n if (props.scrollToResponse.current) {\n if (inIframe()) {\n historyRef.current.scrollTop = childTop;\n }\n else if (lastChild?.scrollIntoView) {\n lastChild.scrollIntoView({ behavior: 'smooth' });\n }\n props.scrollToResponse.current = false;\n scrollPositionLoader.UpdateStorage(childTop.toString());\n }\n };\n\n useEffect(() => {\n handleScroll();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n if (historyRef.current) {\n //Navigation, scroll to bottom\n if (props.scrollToResponse.current) {\n onScrollClick();\n setRenderControlFlag(true);\n }\n else {\n const scroll = scrollPositionLoader.GetStorage();\n\n historyRef.current.scrollTop = scroll ? parseInt(scroll) : historyRef.current.scrollTop;\n\n setRenderControlFlag(true);\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [historyRef.current, setRenderControlFlag]);\n\n const accessibilityAttrs = {\n \"aria-live\": 'polite' as const,\n role: 'dialog',\n };\n return (\n
\n \n {props.history?.length > 0 && props.history.map((response, i) => {\n if (isLiveChatResponse(response)) {\n const prevResponse = (i > 0) ? props.history[i - 1] as LiveChatNotificationResponseNext : undefined;\n return (\n \n );\n }\n return (\n \n );\n })}\n \n {isVisible &&\n }\n \n
\n );\n}\n\nexport default withStyles(historyStyles)(AlmeHistory);\n\nexport function isNewResponse(response: LiveChatNotificationResponseNext, prevResponse?: LiveChatNotificationResponseNext): boolean {\n const isTransient = response?.extensionData?.Transient === true;\n const isPrevTransient = prevResponse?.extensionData?.Transient === true;\n return !isTransient || !isPrevTransient || response.text !== prevResponse?.text;\n}\n","export function inIframe(): boolean {\n try {\n return window.self !== window.top;\n } catch (e) {\n return true;\n }\n}\n\n","import { Theme } from '@material-ui/core';\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport default function componentWithStyles({ palette, spacing }: Theme) {\n const backgroundColor = palette.divider;\n const dividerColor = palette.divider;\n const dividerBorder = `1px solid ${dividerColor}`;\n const darkBorder = `1px solid ${palette.action.disabledBackground}`;\n\n return {\n root: {\n paddingBottom: spacing(1),\n },\n colorBackground: {\n backgroundColor,\n },\n divider: {\n borderTop: dividerBorder,\n '&$colorBackground': {\n borderTop: darkBorder,\n },\n },\n };\n}","import { Theme } from '@material-ui/core';\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport default function componentWithStyles({ spacing, palette }: Theme) {\n return {\n submitIcon: {},\n submitButton: {\n marginRight: spacing(1),\n marginTop: `-${spacing(1)}px`,\n },\n almeInputBox: {\n marginLeft: spacing(1),\n marginRight: spacing(1),\n marginBottom: 0,\n },\n textField: {\n color: palette.text.primary,\n },\n inputLabel: {},\n };\n}","import React, { useState, useRef, useCallback, useEffect, ReactElement, MutableRefObject } from 'react';\n\nimport inputStyles from './AlmeInput.styles';\n\nimport { Button, IconButton, TextField, InputAdornment } from '@material-ui/core';\nimport { withStyles, WithStyles, makeStyles, createStyles } from '@material-ui/core/styles';\n\nimport { FocusComponentProps } from '../../models/ComponentProps';\n\nimport { AlmeApiUtils } from '../../api/AlmeApiUtils';\n\nimport { EntryOriginTypes } from '@alme/api-ts/Alme/V6/EntryOriginTypes';\nimport { AlmeInputConfig } from './AlmeInputConfig';\nimport { useIntl } from 'react-intl';\nimport { useFocusStyles } from '../FocusVisibleStyle';\n\nconst useStyles = makeStyles(() =>\n createStyles({\n root: {\n display: 'flex',\n alignItems: 'center',\n margin: 0,\n padding: 0,\n },\n customInputLabel: {\n zIndex: 'unset',\n },\n }),\n);\n\ninterface AlmeInputProps extends WithStyles {\n inputId: string;\n submitId: string;\n submitFunc: (input: string) => void;\n almeConfig: AlmeInputConfig;\n isLiveChatConnected?: boolean;\n onSendTypingEvent?: () => void;\n focusProps?: FocusComponentProps;\n}\n\nconst AlmeInput: React.FC = (props: AlmeInputProps) => {\n const intl = useIntl();\n const classes = useStyles();\n const Focusclasses = useFocusStyles();\n const [userInput, setInput] = useState('');\n const [hasError, setError] = useState(false);\n const [isTyping, setIsTyping] = useState(false);\n\n const userTypingEventDelay = props.almeConfig.input.userTypingEventDelay || 10000;\n useEffect(() => {\n let timer: NodeJS.Timeout | null = null;\n if (isTyping) {\n timer = setTimeout(() => {\n setIsTyping(false);\n }, userTypingEventDelay);\n }\n\n return () => {\n if (timer !== null) {\n clearTimeout(timer);\n }\n };\n }, [isTyping, userTypingEventDelay]);\n\n const useAlmeInputRef = useRef(null);\n\n useEffect(() => {\n useAlmeInputRef?.current?.focus();\n }, []);\n\n /**\n * Handles input box change using the setInput state function.\n * This function handles max input length and will not allow\n * text longer than props.maxInputLength to be added.\n */\n const textChanged = (event: React.ChangeEvent): void => {\n let inputText = event.target.value;\n\n if (inputText?.length) {\n setError(false);\n }\n\n if (inputText.length > props.almeConfig.input.maxInputLength) {\n inputText = inputText.substring(0, props.almeConfig.input.maxInputLength);\n }\n\n if (props.isLiveChatConnected && typeof props.onSendTypingEvent === 'function' && !isTyping) {\n setIsTyping(true);\n props.onSendTypingEvent();\n }\n\n setInput(inputText);\n };\n\n /**\n * Submits the inputText using supplied submitFunc function\n * if the text is not empty or whitespace and then clears\n * the input box using the setInput state function.\n */\n const onSubmitInput = (): void => {\n const inputText = userInput.trim();\n\n if (inputText) {\n props.submitFunc(inputText);\n setInput('');\n // ? TODO: should we reset typing when the input is submitted?\n //setIsTyping(false);\n } else {\n setError(true);\n useAlmeInputRef?.current?.focus();\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 getHelperText = (almeConfig: AlmeInputConfig): string => {\n if (hasError && almeConfig.input.displayError) {\n return intl.formatMessage({\n id: \"input.inputErrorMessage\",\n defaultMessage: 'Default input error message',\n description: 'AlmeInput error helper text',\n });\n }\n return `${userInput.length}/${props.almeConfig.input.maxInputLength}`;\n };\n\n const accessibilityProps= getAccessibilityProps();\n\n const sharedInputProps = {\n id: props.inputId,\n error: props.almeConfig.input.displayError && hasError,\n className: props.classes.almeInputBox,\n value: userInput,\n label:\n intl.formatMessage({\n id: \"input.inputPlaceHolderText\",\n defaultMessage: 'Default input placeholderText',\n description: 'Alme Input placeholder text',\n }),\n 'aria-label':\n intl.formatMessage({\n id: \"input.inputTextAriaLabel\",\n defaultMessage: 'Default input text aria label',\n description: 'Alme Input text aria label',\n }),\n inputProps: { className: props.classes.textField },\n margin: 'normal' as const,\n onChange: textChanged,\n onKeyDown,\n fullWidth: true,\n inputRef: useAlmeInputRef,\n helperText: getHelperText(props.almeConfig),\n FormHelperTextProps: accessibilityProps,\n variant: props.almeConfig.input.styles.textField.variant,\n color: props.almeConfig.input.styles.textField.color,\n size: props.almeConfig.input.styles.textField.size,\n InputLabelProps: { className: `${props.classes.inputLabel}` },\n autoFocus: props.almeConfig.input.shouldAutoFocus,\n };\n\n const sharedButtonProps = {\n id: props.submitId,\n onClick: onSubmitInput,\n 'aria-label': intl.formatMessage({\n id: \"input.sendButtonAriaLabel\",\n defaultMessage: 'Default input send button aria label',\n description: 'AlmeInput send button aria label',\n }),\n color: props.almeConfig.input.styles.button.color,\n };\n\n const sharedFormProps = {\n className: classes.root,\n noValidate: true,\n autoComplete: \"off\",\n };\n\n const sharedTextInputProps = {\n };\n\n const getAlmeInput = (): ReactElement => {\n if (props.almeConfig.input.submitButtonText) {\n return (\n <>\n \n {intl.formatMessage({\n id: \"input.sendButtonText\",\n defaultMessage: 'Default send button text',\n description: 'Send button text if present',\n })}\n \n );\n } else {\n return (\n \n {props.almeConfig.input.sendIcon}\n ),\n }}\n InputLabelProps={{classes: {outlined: classes.customInputLabel}}}\n />\n );\n }\n };\n\n return (\n
\n {getAlmeInput()}\n
\n );\n\n function getAccessibilityProps() {\n return hasError ? {\n className: `${props.classes.textField}`,\n role: 'alert',\n 'aria-atomic': true,\n } : {className: `${props.classes.textField}`};\n }\n};\n\nexport default withStyles(inputStyles)(AlmeInput);\n\nexport function OnSubmitAlmeInput(apiUtils: React.MutableRefObject, scrollToResponse: MutableRefObject): (input: string, origin?: EntryOriginTypes, displayText?: string, parameters?: Record) => void {\n return useCallback(async (input: string, origin?: EntryOriginTypes, displayText?: string, parameters?: Record) => {\n scrollToResponse.current = true;\n await apiUtils.current.submitAlmeInput(input, origin, displayText, parameters);\n }, [apiUtils, scrollToResponse]);\n}\n\nexport function OnSendTypingEvent(apiUtils: React.MutableRefObject): () => Promise {\n return useCallback(async () => {\n await apiUtils.current.submitReportingEvent('Typing');\n }, [apiUtils]);\n}\n","// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport default function componentWithStyles() {\n return {\n linkContainer: {\n width: '100%',\n textAlign: 'center' as const,\n },\n };\n}","import React from \"react\";\nimport poweredByLinkStyles from './AlmePoweredByLink.styles';\nimport { Button, Container } from \"@material-ui/core\";\nimport { WithStyles, withStyles } from '@material-ui/core/styles';\nimport { FocusComponentProps } from \"../../models/ComponentProps\";\nimport { AlmePoweredByLinkConfig } from \"./AlmePoweredByLInkConfig\";\n\ninterface AlmePoweredByLinkProps extends WithStyles {\n almeConfig: AlmePoweredByLinkConfig;\n focusProps?: FocusComponentProps;\n}\n\nconst AlmePoweredByLink: React.FC | null = (props: AlmePoweredByLinkProps) => {\n if (props.almeConfig.poweredByLink.isEnabled) {\n return (\n \n \n \n );\n }\n else\n return null;\n\n};\nexport default withStyles(poweredByLinkStyles)(AlmePoweredByLink);","import React from \"react\";\nimport disclaimerStyles from './AlmeDisclaimer.styles';\nimport { Container, Typography } from \"@material-ui/core\";\nimport { WithStyles, withStyles } from '@material-ui/core/styles';\nimport { FocusComponentProps } from \"../../models/ComponentProps\";\nimport { AlmeDisclaimerConfig } from \"./AlmeDisclaimerConfig\";\nimport { FormattedMessage } from \"react-intl\";\n\ninterface AlmeDisclaimerProps extends WithStyles {\n almeConfig: AlmeDisclaimerConfig;\n focusProps?: FocusComponentProps;\n}\n\nconst AlmeDisclaimer: React.FC | null = (props: AlmeDisclaimerProps) => {\n if (props.almeConfig.disclaimer.isEnabled) {\n return (\n \n \n \n \n \n );\n }\n else {\n return null;\n }\n\n};\nexport default withStyles(disclaimerStyles)(AlmeDisclaimer);\n","// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport default function componentWithStyles() {\n return {\n disclaimer: {\n width: '100%',\n textAlign: 'center' as const,\n },\n };\n}\n","import React from 'react';\n\nimport footerStyles from './AlmeFooter.styles';\nimport AlmeInput from '../AlmeInput/AlmeInput';\nimport AlmePoweredByLink from '../AlmePoweredByLink/AlmePoweredByLink';\n\nimport { Container } from '@material-ui/core';\nimport { withStyles, WithStyles } from '@material-ui/core/styles';\nimport { FocusComponentProps } from '../../models/ComponentProps';\nimport { AlmeFooterConfig } from './AlmeFooterConfig';\nimport AlmeDisclaimer from \"../AlmeDisclaimer/AlmeDisclaimer\";\n\ninterface AlmeFooterProps extends WithStyles {\n submitFunc: (input: string) => void;\n almeConfig: AlmeFooterConfig;\n isLiveChatConnected?: boolean;\n onSendTypingEvent?: () => void;\n focusProps?: FocusComponentProps;\n}\n\nconst AlmeFooter: React.FC = (props: AlmeFooterProps) => {\n let footerClasses = `${props.classes.root}`;\n if (props.almeConfig.footer.styles.hasBorder) {\n footerClasses += ` ${props.classes.divider}`;\n }\n if (props.almeConfig.footer.styles.hasBackgroundColor) {\n footerClasses += ` ${props.classes.colorBackground}`;\n }\n\n return (\n \n <>\n \n \n \n \n \n );\n};\n\nexport default withStyles(footerStyles)(AlmeFooter);\n","import { Theme } from '@material-ui/core';\nimport { styledBy } from '../../models/AlmeColorMapping';\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport default function componentWithStyles({ breakpoints, palette, shadows, spacing }: Theme) {\n const mainShadow = shadows[5];\n const gutterPx = spacing(2);\n const gutterPxSm = spacing(1);\n const dividerColor = palette.divider;\n const dividerBorder = `1px solid ${dividerColor}`;\n\n const augmentPrimaryColor = { main: palette.primary.dark };\n const augmentSecondaryColor = { main: palette.secondary.dark };\n const augmentPrimary = palette.augmentColor(augmentPrimaryColor);\n const augmentSecondary = palette.augmentColor(augmentSecondaryColor);\n\n return {\n root: {\n position: 'fixed' as const,\n right: gutterPx + gutterPxSm,\n bottom: gutterPx * 2 + gutterPxSm,\n borderRadius: spacing(0),\n display: 'flex',\n alignItems: 'flex-end',\n [breakpoints.down('sm')]: {\n right: gutterPxSm,\n bottom: gutterPx + gutterPxSm,\n },\n },\n icon: {\n color: styledBy('color', {\n default: palette.getContrastText(palette.background.default),\n divider: palette.getContrastText(palette.divider),\n initial: palette.primary.contrastText,\n paper: palette.getContrastText(palette.background.paper),\n primary: palette.primary.contrastText,\n secondary: palette.secondary.contrastText,\n }),\n backgroundColor: styledBy('color', {\n default: palette.background.default,\n divider: palette.divider,\n initial: 'initial',\n paper: palette.background.paper,\n primary: palette.primary.main,\n secondary: palette.secondary.main,\n }),\n '&:hover': {\n backgroundColor: styledBy('color', {\n default: palette.background.default,\n divider: palette.divider,\n initial: 'initial',\n paper: palette.background.paper,\n primary: augmentPrimary.main,\n secondary: augmentSecondary.main,\n }),\n color: styledBy('color', {\n default: palette.getContrastText(palette.background.default),\n divider: palette.getContrastText(palette.divider),\n initial: palette.primary.contrastText,\n paper: palette.getContrastText(palette.background.paper),\n primary: augmentPrimary.contrastText,\n secondary: augmentSecondary.contrastText,\n }),\n },\n boxShadow: mainShadow,\n zIndex: 2,\n },\n button: {\n color: styledBy('color', {\n default: palette.getContrastText(palette.background.default),\n divider: palette.getContrastText(palette.divider),\n initial: palette.primary.contrastText,\n paper: palette.getContrastText(palette.background.paper),\n primary: palette.primary.contrastText,\n secondary: palette.secondary.contrastText,\n }),\n backgroundColor: styledBy('color', {\n default: palette.background.default,\n divider: palette.divider,\n initial: 'initial',\n paper: palette.background.paper,\n primary: palette.primary.main,\n secondary: palette.secondary.main,\n }),\n '&:hover': {\n backgroundColor: styledBy('color', {\n default: palette.getContrastText(palette.background.default),\n divider: palette.getContrastText(palette.divider),\n initial: palette.primary.contrastText,\n paper: palette.getContrastText(palette.background.paper),\n primary: augmentPrimary.main,\n secondary: augmentSecondary.main,\n }),\n color: styledBy('color', {\n default: palette.getContrastText(palette.background.default),\n divider: palette.getContrastText(palette.divider),\n initial: palette.primary.contrastText,\n paper: palette.getContrastText(palette.background.paper),\n primary: augmentPrimary.contrastText,\n secondary: augmentSecondary.contrastText,\n }),\n },\n zIndex: 1,\n marginLeft: spacing(0) - gutterPxSm,\n },\n card: {\n border: dividerBorder,\n backgroundColor: palette.background.default,\n minWidth: 350,\n },\n cardHeader: {\n backgroundColor: palette.primary.main,\n color: palette.primary.contrastText,\n padding: spacing(1),\n },\n cardActions: {\n padding: spacing(0),\n paddingBottom: spacing(1),\n },\n };\n}","import MinimizeIcon from '@material-ui/icons/Remove';\n\nimport React, { Dispatch, SetStateAction, useEffect } from 'react';\n\nimport { useTheme, withStyles, WithStyles } from '@material-ui/core/styles';\nimport {\n Button,\n Box,\n IconButton,\n Fade,\n Card,\n CardHeader,\n CardActions,\n useMediaQuery,\n} from '@material-ui/core';\n\nimport launchPointStyles from './AlmeLaunchPoint.styles';\nimport AlmeInput from '../AlmeInput/AlmeInput';\nimport { AlmeLaunchPointConfig } from './AlmeLaunchPointConfig';\nimport { AlmeLaunchIvaMessageEventData } from '@alme/post-message-api/AlmeLaunchIvaMessageEventData';\nimport { defaultAccessKey, getAccessKeyFromQuery } from '../../utils/PersonaUtils';\nimport { AlmeIvaTypeProp } from '../../models/AlmeIvaTypeMapping';\nimport { useIntl } from 'react-intl';\nimport { CookieLoader } from '@alme/storage-ts/CookieLoader';\n\nconst savedAccessKey = new CookieLoader('verintAccessKey');\n\ninterface AlmeLaunchPointProps extends WithStyles {\n isOpen?: boolean;\n ivaType?: AlmeIvaTypeProp;\n almeConfig: AlmeLaunchPointConfig;\n hasHistory: boolean;\n}\n\nfunction shouldShowLaunchPoint(ivaType?: AlmeIvaTypeProp) {\n return !ivaType || ivaType === 'embedded';\n}\n\nconst sendLaunchPostMessage = (hasHistory: boolean, inputPlaceholderText: string, setLaunchQuestion: Dispatch>, inputFieldText?: string): void => {\n if (inputFieldText && !hasHistory && inputPlaceholderText) {\n setLaunchQuestion(true);\n }\n else {\n const accessKey = getAccessKeyFromQuery() || savedAccessKey.GetStorage() || defaultAccessKey;\n\n const data = {\n message: {\n type: \"LaunchIva\",\n source: \"client\",\n launchPointName: \"Global\",\n launchParameter: \"MainPage\",\n accessKey,\n },\n } as AlmeLaunchIvaMessageEventData;\n\n window.postMessage(data, window.location.origin);\n }\n};\n\nconst sendInputPostMessage = (setLaunchQuestion: Dispatch>, input?: string): void => {\n const accessKey = getAccessKeyFromQuery() || savedAccessKey.GetStorage() || defaultAccessKey;\n\n const data = {\n message: {\n type: \"LaunchIva\",\n source: \"client\",\n launchPointName: \"Global\",\n launchParameter: \"MainPage\",\n launchQuestion: input,\n accessKey,\n },\n } as AlmeLaunchIvaMessageEventData;\n\n if (input) {\n setLaunchQuestion(true);\n }\n\n window.postMessage(data, window.location.origin);\n};\n\nconst AlmeLaunchPoint: React.FC = (props: AlmeLaunchPointProps) => {\n /** State variable controls if launch with question form will render, initially set to false. */\n const [launchQuestion, setLaunchQuestion] = React.useState(false);\n const intl = useIntl();\n const theme = useTheme();\n const isSmall = useMediaQuery(theme.breakpoints.down('sm')) && !props.almeConfig.launchPoint.inputFieldText;\n\n useEffect(() => {\n if (!props.isOpen) {\n setLaunchQuestion(false);\n }\n }, [props.isOpen]);\n\n /**\n * Upon clicking the launch icon, check if launch with question config is set, and is start of a new session\n * If conditions pass, set state variable to render launch with question.\n */\n const handleClick = (): void => {\n sendLaunchPostMessage(props.hasHistory, intl.formatMessage({\n id: \"launchpoint.inputPlaceHolderText\",\n defaultMessage: 'Default launchpoint input placeholderText',\n description: 'AlmeLaunchPoint input placeholder text',\n }), setLaunchQuestion, props.almeConfig.launchPoint.inputFieldText);\n };\n\n const handleInputClick = (input?: string): void => {\n sendInputPostMessage(setLaunchQuestion, input);\n };\n\n const handleMinClick = (): void => {\n if (props.almeConfig.launchPoint.inputFieldText)\n setLaunchQuestion(false);\n };\n\n if (!shouldShowLaunchPoint(props.ivaType)) {\n return null;\n }\n\n const sharedIconProps = {\n id: 'launchIvaBtn',\n onClick: handleClick,\n title: props.almeConfig.launchPoint.titleText || \"Launch IVA\",\n };\n\n return (\n \n \n {\n launchQuestion &&\n !props.hasHistory &&\n \n \n }>\n \n \n \n \n \n }\n {\n !launchQuestion &&\n props.almeConfig.launchPoint.launchIcon &&\n {props.almeConfig.launchPoint.launchIcon}\n }\n {\n !launchQuestion &&\n props.almeConfig.launchPoint.buttonText &&\n {props.almeConfig.launchPoint.buttonText}\n }\n \n \n );\n};\n\nexport default withStyles(launchPointStyles)(AlmeLaunchPoint);\n","export type AlmeIvaTypeProp = 'embedded' | 'popup' | 'inline';\n\ninterface AlmeIvaTypeStyles extends Record {\n ivaType?: AlmeIvaTypeProp;\n children?: React.ReactNode;\n}\n\ntype AlmeIvaTypeMapping = Record;\n\nexport const styledBy = (property: string, mapping: AlmeIvaTypeMapping) => (props: AlmeIvaTypeStyles): string | undefined => {\n return mapping[props[property] as string || 'embedded'] as string | undefined;\n};\n","import { Theme } from '@material-ui/core';\nimport { createStyles } from '@material-ui/core/styles';\nimport { fade } from '@material-ui/core/styles';\nimport { styledBy } from '../../models/AlmeIvaTypeMapping';\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport default function componentWithStyles({ breakpoints, palette, shadows, spacing }: Theme) {\n const mainShadow = shadows[5];\n const backgroundColor = palette.background.default;\n const gutterPx = spacing(2);\n const dividerColor = palette.divider;\n const dividerBorder = `1px solid ${dividerColor}`;\n const maxHeight = 650;\n const width = 450;\n return createStyles({\n root: {\n display: 'flex',\n flexDirection: 'column',\n backgroundColor,\n border: dividerBorder,\n boxShadow: mainShadow,\n },\n rootIvaType: {\n [breakpoints.down('sm')]: {\n width: styledBy('ivaType', {\n embedded: '100%',\n popup: '100%',\n inline: '100%',\n }),\n height: styledBy('ivaType', {\n embedded: `100%`,\n popup: '100%',\n inline: '100%',\n }),\n bottom: styledBy('ivaType', {\n embedded: `0`,\n popup: 'auto',\n inline: 'auto',\n }),\n right: styledBy('ivaType', {\n embedded: `0`,\n popup: 'auto',\n inline: 'auto',\n }),\n },\n [breakpoints.up(768)]: {\n width: styledBy('ivaType', {\n embedded: `${width}px`,\n popup: '100%',\n inline: '100%',\n }),\n height: styledBy('ivaType', {\n embedded: `calc(100% - ${gutterPx * 2}px)`,\n popup: '100%',\n inline: '100%',\n }),\n maxHeight: styledBy('ivaType', {\n embedded: `${maxHeight}px`,\n popup: 'none',\n inline: 'none',\n }),\n bottom: styledBy('ivaType', {\n embedded: `${gutterPx}px`,\n popup: 'auto',\n inline: 'auto',\n }),\n right: styledBy('ivaType', {\n embedded: `${gutterPx}px`,\n popup: 'auto',\n inline: 'auto',\n }),\n },\n margin: styledBy('ivaType', {\n embedded: 0,\n popup: 'auto auto',\n inline: 'auto auto',\n }),\n position: styledBy('ivaType', {\n embedded: 'fixed',\n popup: 'static',\n inline: 'static',\n }) as unknown as 'static' | 'fixed',\n },\n rootPulse: {\n boxShadow: `0 0 0 ${fade(palette.primary.main, .75)}`,\n animation: `$pulse 2s infinite`,\n '&:hover': {\n animation: 'none',\n },\n },\n '@keyframes pulse': {\n '0%': {\n boxShadow: `0 0 0 0 ${fade(palette.primary.main, .75)}`,\n },\n '70%': {\n boxShadow: `0 0 0 10px ${fade(palette.primary.main, 0)}`,\n },\n '100%': {\n boxShadow: `0 0 0 0 ${fade(palette.primary.main, 0)}`,\n },\n },\n });\n}\n","import React from 'react';\nimport { DialogTitle, DialogContent, DialogActions, Dialog } from '../../AlmeDialog/AlmeDialog';\nimport { FocusComponentProps } from '../../../models/ComponentProps';\n\nimport { createStyles, makeStyles } from '@material-ui/core/styles';\nimport { Button, Typography } from '@material-ui/core';\nimport { AlmeLiveChatControlsConfig } from './AlmeLiveChatControlsConfig';\nimport { FormattedMessage } from 'react-intl';\n\nconst useStyles = makeStyles(() =>\n createStyles({\n closeContainer: {\n display: 'inline-block',\n },\n }),\n);\n\ninterface AlmeEndLiveChatDialogProps {\n onEndClick: () => void;\n onCancelClick: () => void;\n almeConfig: AlmeLiveChatControlsConfig;\n setIsDialogOpen: (isOpen: boolean) => void;\n focusProps?: FocusComponentProps;\n isOpen: boolean;\n}\n\nconst AlmeEndLiveChatDialog: React.FC = (props: AlmeEndLiveChatDialogProps) => {\n\n const classes = useStyles();\n const handleEndClick = () => {\n props.onEndClick();\n props.onCancelClick();\n };\n\n return (\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n );\n};\nexport default AlmeEndLiveChatDialog;","import React, { useCallback, useState, useEffect, useRef } from 'react';\n\nimport { Theme, Box, Button, Typography } from '@material-ui/core';\nimport { withStyles, WithStyles, createStyles, makeStyles } from '@material-ui/core/styles';\n\nimport { LiveChatNotificationResponseNext } from '@alme/types/response/LiveChatNotificationResponse';\n\nimport liveChatControlsStyles from './AlmeLiveChatControls.styles';\nimport { FocusComponentProps } from '../../../models/ComponentProps';\nimport { AlmeResponseNext } from '@alme/types/response/AlmeResponse';\nimport { AlmeApiUtils } from '../../../api/AlmeApiUtils';\nimport { AlmeLiveChatControlsConfig } from './AlmeLiveChatControlsConfig';\nimport AlmeEndLiveChatDialog from './AlmeEndLiveChatDialog';\n\nconst useStyles = makeStyles(({ spacing }: Theme) =>\n createStyles({\n root: {\n display: 'flex',\n flexWrap: 'nowrap',\n marginBottom: `-${spacing(1)}px`,\n alignItems: 'center',\n },\n endChatButton: {\n },\n typingNotification: {\n padding: `${spacing(.75)}px ${spacing(1)}`,\n flexGrow: 1,\n textAlign: 'right',\n marginRight: spacing(1),\n },\n }),\n);\n\nfunction HandleIsDialogOpen(props: AlmeLiveChatControlsProps, shouldFocus: boolean,\n closeRef: React.RefObject, setShouldFocus: React.Dispatch>): void {\n useEffect(() => {\n if (!props.isDialogOpen && shouldFocus) {\n closeRef.current?.focus();\n setShouldFocus(false);\n }\n }, [props.isDialogOpen, shouldFocus, setShouldFocus, closeRef]);\n}\n\nfunction OperatorTyping(props: AlmeLiveChatControlsProps, typingMessage: React.MutableRefObject, isTyping: boolean,\n typingId: number, setIsTyping: React.Dispatch>, setTypingId: React.Dispatch>): void {\n useEffect(() => {\n if ((props.response as LiveChatNotificationResponseNext)?.extensionData?.MessageOrigin === 'Operator-Typing') {\n const operatorName = (props.response as LiveChatNotificationResponseNext)?.extensionData?.OperatorData?.Name || props.almeConfig.liveChatControls.defaultOperatorName;\n typingMessage.current = `${operatorName} ${props.almeConfig.liveChatControls.typingMessageText}`;\n if (!isTyping && typingId < props.responseId) {\n setIsTyping(true);\n setTypingId(props.responseId);\n }\n }\n }, [isTyping, props.almeConfig.liveChatControls.defaultOperatorName, props.almeConfig.liveChatControls.typingMessageText, props.response, props.responseId, setIsTyping, setTypingId, typingId, typingMessage]);\n}\n\ninterface AlmeLiveChatControlsProps extends WithStyles {\n almeConfig: AlmeLiveChatControlsConfig;\n isLiveChatConnected: boolean;\n onEndChat: () => void;\n setIsDialogOpen: (isOpen: boolean) => void;\n responseId: number;\n response?: LiveChatNotificationResponseNext | AlmeResponseNext;\n focusProps?: FocusComponentProps;\n isDialogOpen?: boolean;\n}\n\nconst AlmeLiveChatControls: React.FC = (props: AlmeLiveChatControlsProps) => {\n const classes = useStyles();\n const [isTyping, setIsTyping] = useState(false);\n const [typingId, setTypingId] = useState(0);\n const typingMessage = useRef('');\n const [showDialog, setShowDialog] = useState(false);\n const [shouldFocus, setShouldFocus] = useState(false);\n const closeRef = useRef(null);\n\n HandleIsDialogOpen(props, shouldFocus, closeRef, setShouldFocus);\n\n const handleEndChatClick = () => {\n setShowDialog(true);\n };\n\n const handleCancelDialogClick = () => {\n setShowDialog(false);\n setShouldFocus(true);\n };\n\n useEffect(() => {\n let timer: NodeJS.Timeout | null = null;\n if (isTyping) {\n timer = setTimeout(() => {\n setIsTyping(false);\n }, props.almeConfig.liveChatControls.typingMessageDelay);\n }\n\n return () => {\n if (timer !== null) {\n clearTimeout(timer);\n }\n };\n }, [isTyping, props.almeConfig.liveChatControls.typingMessageDelay]);\n\n OperatorTyping(props, typingMessage, isTyping, typingId, setIsTyping, setTypingId);\n\n if (!props.isLiveChatConnected) {\n return null;\n }\n\n return (\n \n \n {isTyping &&\n \n {typingMessage.current}...\n \n }\n \n \n );\n};\n\nexport default withStyles(liveChatControlsStyles)(AlmeLiveChatControls);\n\nexport function OnEndChat(apiUtils: React.MutableRefObject): () => void {\n return useCallback((): void => {\n /**\n * If the user is in a live chat session, whether waiting in a queue or actively talking with one or more operators,\n * this event will terminate the session. The user will subsequently be deescalated back to the IVA.\n */\n void apiUtils.current.submitReportingEvent('TerminateSession', 'User');\n }, [apiUtils]);\n}\n","import { Theme } from '@material-ui/core';\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport default function componentWithStyles({ palette, spacing, typography }: Theme) {\n return {\n root: {},\n typingNotification: {\n '& span': {\n animationName: `$ellipsis`,\n animationDuration: '1.4s',\n animationIterationCount: 'infinite',\n animationFillMode: 'both',\n },\n '& span:nth-child(2)': {\n animationDelay: '.2s',\n },\n '& span:nth-child(3)': {\n animationDelay: '.4s',\n },\n },\n '@keyframes ellipsis': {\n /**\n * At the start of the animation the dot\n * has an opacity of .2\n */\n '0%': {\n opacity: .2,\n },\n /**\n * At 20% the dot is fully visible and\n * then fades out slowly\n */\n '20%': {\n opacity: 1,\n },\n /**\n * Until it reaches an opacity of .2 and\n * the animation can start again\n */\n '100%': {\n opacity: .2,\n },\n },\n };\n}","import { AlmeSessionData } from \"@alme/session-ts/AlmeSessionData\";\nimport { AlmeSessionDataLoaderBase } from \"@alme/session-ts/AlmeSessionDataLoaderBase\";\nimport { AlmeSessionDataUtils } from \"@alme/session-ts/AlmeSessionDataUtils\";\nimport { StorageLoaderBase } from \"@alme/storage-ts/StorageLoaderBase\";\nimport { AlmeResponseNext } from \"@alme/types/response/AlmeResponse\";\nimport { useCallback, useEffect } from \"react\";\nimport { AlmeSavedAppState } from \"../components/AlmeApp/AlmeAppState\";\n\nimport defaultLogger from '../Logger';\n\nexport function loadAlmeSessionData(sessionDataLoader: AlmeSessionDataLoaderBase): AlmeSessionData {\n let sessionData: AlmeSessionData | null = null;\n try {\n sessionData = sessionDataLoader.GetAlmeSessionData();\n } catch (ex) {\n defaultLogger.error(ex);\n }\n if (!sessionData) {\n sessionData = AlmeSessionDataUtils.CreateAlmeSessionData();\n }\n return sessionData;\n}\n\nexport function useSaveAlmeSessionData(almeSessionData: AlmeSessionData, sessionDataLoader: AlmeSessionDataLoaderBase): void {\n useEffect(() => {\n let sessionData: AlmeSessionData | null = null;\n try {\n sessionData = sessionDataLoader.GetAlmeSessionData();\n } catch (ex) {\n defaultLogger.error(ex);\n }\n if (sessionData && (sessionData?.userId !== almeSessionData.userId ||\n sessionData?.sessionId !== almeSessionData?.sessionId ||\n sessionData.lastActivityTime !== almeSessionData?.lastActivityTime)\n ) {\n try {\n sessionDataLoader.UpdateAlmeSessionData(almeSessionData);\n } catch (ex) {\n defaultLogger.error(ex);\n }\n }\n }, [almeSessionData, sessionDataLoader]);\n}\n\nexport function useAlmeSessionDataCallback(\n almeSessionData: AlmeSessionData,\n setAlmeSessionData: (almeSessionData: AlmeSessionData) => void,\n): (response: AlmeResponseNext | AlmeResponseNext[]) => void {\n return useCallback((response: AlmeResponseNext | AlmeResponseNext[]): void => {\n let almeResponse: AlmeResponseNext;\n if (response && (response as AlmeResponseNext[]).length) {\n // get the last history item to set alme session data.\n almeResponse = (response as AlmeResponseNext[])[(response as AlmeResponseNext[]).length - 1];\n } else {\n almeResponse = response as AlmeResponseNext;\n }\n\n if (almeResponse && almeResponse.userId && almeSessionData.userId !== almeResponse.userId) {\n const newSessionData: AlmeSessionData = {\n sessionId: almeSessionData.sessionId,\n userId: almeResponse.userId,\n lastActivityTime: almeSessionData.lastActivityTime,\n };\n setAlmeSessionData(newSessionData);\n }\n }, [almeSessionData.sessionId, almeSessionData.userId, almeSessionData.lastActivityTime, setAlmeSessionData]);\n}\n\nexport function useSaveLastActivityTime(\n almeSessionData: AlmeSessionData,\n setAlmeSessionData: (almeSessionData: AlmeSessionData) => void,\n): (lastActivityTime: string) => void {\n\n return useCallback((lastActivityTime) => {\n\n if (lastActivityTime !== almeSessionData.lastActivityTime) {\n setAlmeSessionData({ ...almeSessionData, lastActivityTime });\n }\n }, [almeSessionData, setAlmeSessionData]);\n}\n\nexport function useClearSessionData(\n sessionDataLoader: AlmeSessionDataLoaderBase,\n savedAppState: StorageLoaderBase,\n setAlmeSessionData: (almeSessionData: AlmeSessionData) => void,\n clearAppData: () => void,\n): () => void {\n return useCallback((): void => {\n try {\n clearAppData();\n } catch (ex) {\n defaultLogger.error(ex);\n }\n try {\n sessionDataLoader.ClearAlmeSessionData();\n } catch (ex) {\n defaultLogger.error(ex);\n }\n try {\n savedAppState.ClearStorage();\n } catch (ex) {\n defaultLogger.error(ex);\n }\n setAlmeSessionData(AlmeSessionDataUtils.CreateAlmeSessionData());\n }, [clearAppData, savedAppState, sessionDataLoader, setAlmeSessionData]);\n}\n","import { AlmeResponseNext } from \"@alme/types/response/AlmeResponse\";\nimport { AlmeApiUtils } from \"../../api/AlmeApiUtils\";\nimport { AlmeAppState } from \"./AlmeAppState\";\nimport defaultLogger from '../../Logger';\nimport { Dispatch, SetStateAction } from \"react\";\nimport { CookieLoader } from \"@alme/storage-ts/CookieLoader\";\nimport { ChangeTenantAppEvent } from \"../ResponseActions/ChangeTenantConfirmation/ChangeTenantConfirmation\";\nimport { processLiveChatStartAction } from \"../ResponseActions/AlmeLiveChatStart/AlmeLiveChatStartUtils\";\nimport { processLiveChatEndAction } from \"../ResponseActions/AlmeLiveChatEnd/AlmeLiveChatEndUtils\";\n\nexport async function loadAlmeHistory(almeApiUtils: AlmeApiUtils, almeState: AlmeAppState, setShouldDisplayTimeout?: Dispatch>): Promise {\n let curHistory: AlmeResponseNext[] = [];\n const changeTenantAppEvent = new CookieLoader('changeTenantAppEvent');\n const inputToResend = new CookieLoader('inputToResend');\n\n try {\n curHistory = await almeApiUtils.loadAlmeHistory();\n if (!curHistory.length) {\n try {\n curHistory = [];\n const params = {\n launchPointName: almeState.launchData?.message?.launchPointName,\n launchParameter: almeState.launchData?.message?.launchParameter,\n launchType: almeState.launchData?.message?.launchType,\n };\n const welcomeResponse = await almeApiUtils.sendAppEvent('WelcomeUser', 'Internal', params);\n if (welcomeResponse) {\n curHistory.push(welcomeResponse);\n if (setShouldDisplayTimeout)\n setShouldDisplayTimeout(true);\n }\n } catch (error) {\n defaultLogger.error(error);\n }\n } else {\n curHistory = await handleTenantChange(almeApiUtils, curHistory, changeTenantAppEvent, inputToResend);\n curHistory = disableAutoNav(curHistory);\n }\n } catch (error) {\n defaultLogger.error(error);\n }\n\n return curHistory;\n}\n\nexport function processLastResponse(almeState: AlmeAppState, setAlmeStateWrapper: (state: AlmeAppState) => void): AlmeResponseNext | undefined {\n let lastResponse;\n if (almeState?.history?.length) {\n lastResponse = almeState.history[almeState.history.length - 1];\n }\n\n if (lastResponse) {\n // Process last history item item for LiveChatStart Response Action.\n processLiveChatStartAction(lastResponse, almeState, setAlmeStateWrapper);\n processLiveChatEndAction(lastResponse, almeState, setAlmeStateWrapper);\n }\n return lastResponse;\n}\n\nfunction disableAutoNav(curHistory: AlmeResponseNext[]) {\n // Disable all auto navigation on history load.\n for (const response of curHistory) {\n if (response?.navUrl) {\n response.navUrl.AutoNavigationType = 'None';\n }\n }\n return curHistory;\n}\n\nasync function handleTenantChange(almeApiUtils: AlmeApiUtils, curHistory: AlmeResponseNext[], changeTenantAppEvent: CookieLoader, inputToResend: CookieLoader) {\n const tenantAppEvent = changeTenantAppEvent.GetStorage();\n const inputResend = inputToResend.GetStorage();\n\n if (tenantAppEvent && inputResend) {\n const tenantResponse = await almeApiUtils.sendAppEvent(tenantAppEvent.Name, 'Internal', tenantAppEvent.parameters);\n if (tenantResponse) {\n curHistory.push(tenantResponse);\n }\n changeTenantAppEvent.ClearStorage();\n const resendResponse = await almeApiUtils.sendAlmeInput(inputResend);\n if (resendResponse) {\n curHistory.push(resendResponse);\n }\n inputToResend.ClearStorage();\n }\n\n return curHistory;\n}\n","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\";\n\nexport interface LiveChatEndAction extends ResponseAction {\n Name: \"LiveChatEnd\";\n}\n\nexport function processLiveChatEndAction(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 === \"LiveChatEnd\") {\n setAlmeState({\n ...almeState,\n isLiveChatConnected: false,\n } as AlmeAppState);\n return;\n }\n }\n }\n}\n","import { isLiveChatResponse } from \"@alme/api-ts/Utils\";\nimport { ConfigurationKeyValuePair } from \"@alme/types/response/ConfigurationResponse\";\nimport { LiveChatNotificationResponseNext } from \"@alme/types/response/LiveChatNotificationResponse\";\nimport { Dispatch, SetStateAction, useEffect } from \"react\";\nimport { AlmeApiUtils } from \"../api/AlmeApiUtils\";\nimport { AlmeAppState } from \"../components/AlmeApp/AlmeAppState\";\nimport { loadAlmeHistory } from \"../components/AlmeApp/AlmeAppUtils\";\nimport { AlmeResponseNext } from '@alme/types/response/AlmeResponse';\nimport defaultLogger from '../Logger';\nimport { AlmeEnvironmentConfig } from \"../api/AlmeEnvironmentConfig\";\nimport { AlmeSessionUtils } from \"../api/AlmeSessionUtils\";\n\nexport function useAlmeInitialization(apiUtils: React.MutableRefObject,\n almeState: AlmeAppState,\n isInitialized: React.MutableRefObject,\n setAlmeStateWrapper: (state: AlmeAppState) => void,\n personaMapped: boolean,\n scrollToResponse: React.MutableRefObject,\n shouldScrollOnNav?: boolean,\n setShouldDisplayTimeout?: Dispatch>,\n isIvaProLaunch?: React.MutableRefObject,\n almeSessionUtils?: React.MutableRefObject): void {\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 const initializeAlmeApp = async (): Promise => {\n // Example setting config settings.\n await setAlmeConfigSettings(apiUtils);\n\n const curHistory = await loadAlmeHistory(apiUtils.current, almeState, setShouldDisplayTimeout);\n\n await handleLaunchQuestion(almeState, apiUtils, curHistory);\n\n let isLiveChatConnected = false;\n if (curHistory?.length) {\n const lastHistoryItem = curHistory[curHistory.length - 1] as LiveChatNotificationResponseNext;\n isLiveChatConnected = isLiveChatResponse(lastHistoryItem);\n }\n\n const chatResponses = curHistory.filter((value) => {\n return isLiveChatResponse(value) && typeof value?.extensionData?.MessageIndex === 'number';\n });\n let liveChatIndex = -1;\n\n if (chatResponses.length) {\n const lastChatResponse = chatResponses[chatResponses.length - 1] as LiveChatNotificationResponseNext;\n liveChatIndex = lastChatResponse.extensionData.MessageIndex;\n }\n\n if (shouldScrollOnNav) {\n scrollToResponse.current = true;\n }\n\n setAlmeStateWrapper({\n ...almeState,\n isOpen: true,\n history: curHistory,\n launchQuestion: undefined,\n isLiveChatConnected,\n liveChatIndex,\n launchData: undefined,\n } as AlmeAppState);\n\n if (almeSessionUtils?.current)\n almeSessionUtils?.current.setOnSessionTimeout();\n };\n\n if (isInitialized.current || !personaMapped || almeState.isMinimized || isIvaProLaunch?.current) {\n return;\n } else {\n isInitialized.current = true;\n void initializeAlmeApp();\n }\n }, [almeState, apiUtils, isInitialized, setAlmeStateWrapper, setShouldDisplayTimeout, personaMapped, isIvaProLaunch, almeSessionUtils, shouldScrollOnNav, scrollToResponse]);\n}\n\nasync function setAlmeConfigSettings(apiUtils: React.MutableRefObject): Promise {\n try {\n const almeConfigs = await apiUtils.current.getAlmeConfiguration();\n if (almeConfigs) {\n const configSettings = almeConfigs.configurationSettings.reduce>((prev: Record, x: ConfigurationKeyValuePair) => {\n return { ...prev, [x.Key]: x.Value };\n }, {});\n AlmeEnvironmentConfig.getInstance().setConfig(configSettings);\n }\n } catch (error) {\n defaultLogger.error(error);\n }\n}\n\nasync function handleLaunchQuestion(almeState: AlmeAppState, apiUtils: React.MutableRefObject, curHistory: AlmeResponseNext[]): Promise {\n if (almeState.launchQuestion) {\n try {\n const questionResponse = await apiUtils.current.sendAlmeInput(almeState.launchQuestion);\n curHistory.push(questionResponse);\n } catch (ex) {\n defaultLogger.error(ex);\n }\n }\n}\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: NodeJS.Timeout;\n let cancel = false;\n function tick() {\n const ret = savedCallback.current();\n\n if (ret instanceof Promise) {\n void ret.then(() => {\n if (delay !== null && !cancel) {\n id = setTimeout(tick, delay);\n }\n });\n } else if (delay !== null && !cancel) {\n id = setTimeout(tick, delay);\n }\n }\n if (delay !== null) {\n id = setTimeout(tick, delay);\n return () => {\n if (id) { clearTimeout(id); }\n cancel = true;\n };\n }\n }, [delay]);\n}\n\nexport default useRecursiveTimeout;","import { NotificationResponseNext } from \"@alme/types/response/NotificationResponse\";\nimport { AlmeEnvironmentConfig } from \"./AlmeEnvironmentConfig\";\nimport { AlmeSessionData } from \"@alme/session-ts/AlmeSessionData\";\nimport { AlmeAppState } from \"../components/AlmeApp/AlmeAppState\";\nimport { createIntlCache, createIntl } from \"react-intl\";\nimport { getCurrentIntlConfig } from \"../utils/PersonaUtils\";\n\n\nfunction getSessionExpiredResponse(entryId: string): NotificationResponseNext {\n const currentIntlConfig = getCurrentIntlConfig();\n const cache = createIntlCache();\n const intl = createIntl({ locale: currentIntlConfig.locale, messages: currentIntlConfig.messages }, cache);\n\n return {\n id: \"\",\n userId: \"\",\n responseRevision: 0,\n maskedInput: \"\",\n text: intl.formatMessage({\n id: \"sessionUtils.timeoutMessage\",\n defaultMessage: 'Default session timeout message',\n description: 'AlmeSessionUtils session timeout message',\n }),\n navUrl: null,\n responseActions: [],\n displayLinkCollection: null,\n deferredAppCall: null,\n isReverted: false,\n extensionData: {\n MessageIndex: 0,\n entryId,\n isSessionTimeoutResponse: true,\n },\n };\n}\n\n\nexport class AlmeSessionUtils {\n\n private almeSessionData: AlmeSessionData;\n private almeState: AlmeAppState;\n private getAlmeSessionFromStorage: () => AlmeSessionData;\n private clearSessionData: () => void;\n private setAlmeState: (state: AlmeAppState) => void;\n private saveLastActivityTime: (lastActivityTime: string) => void;\n public sessionTimer: NodeJS.Timeout | undefined;\n\n\n constructor(\n almeSessionData: AlmeSessionData,\n almeState: AlmeAppState,\n getAlmeSessionFromStorage: () => AlmeSessionData,\n clearSessionData: () => void,\n setAlmeState: (state: AlmeAppState) => void,\n saveLastActivityTime: (lastActivityTime: string) => void,\n sessionTimer: NodeJS.Timeout | undefined = undefined,\n ) {\n this.almeSessionData = almeSessionData;\n this.almeState = almeState;\n this.getAlmeSessionFromStorage = getAlmeSessionFromStorage;\n this.clearSessionData = clearSessionData;\n this.setAlmeState = setAlmeState;\n this.saveLastActivityTime = saveLastActivityTime;\n this.sessionTimer = sessionTimer;\n }\n\n startSessionTimer(): void {\n const sessionLength = this.minutestoMs(Number(AlmeEnvironmentConfig.getInstance().getConfig().ClientSessionTimeout));\n\n if (!sessionLength || this.sessionTimer) { return; }\n\n const remainingTime = this.getRemainingTime(sessionLength);\n\n this.sessionTimer = setTimeout(() => { this.onSessionTimeout(this.almeState.isOpen, this.almeState.isMinimized); }, remainingTime);\n }\n\n refreshSessionTimer(): void {\n const sessionLength = this.minutestoMs(Number(AlmeEnvironmentConfig.getInstance().getConfig().ClientSessionTimeout));\n\n if (!sessionLength) { return; }\n\n this.saveLastActivityTime(new Date().toISOString());\n\n if (this.sessionTimer) { clearTimeout(this.sessionTimer); }\n\n this.sessionTimer = setTimeout(() => { this.onSessionTimeout(this.almeState.isOpen, this.almeState.isMinimized); }, sessionLength);\n }\n\n setOnSessionTimeout(): void {\n const sessionLength = this.minutestoMs(Number(AlmeEnvironmentConfig.getInstance().getConfig().ClientSessionTimeout));\n\n if (!sessionLength) { return; }\n\n const remainingTime = this.getRemainingTime(sessionLength);\n\n if (this.sessionTimer) { clearTimeout(this.sessionTimer); }\n\n this.sessionTimer = setTimeout(() => { this.onSessionTimeout(this.almeState.isOpen, this.almeState.isMinimized); }, remainingTime);\n }\n\n private onSessionTimeout(isOpen?: boolean, isMinimized?: boolean): void {\n\n const almeSessionData = this.getAlmeSessionFromStorage();\n\n const sessionLength = this.minutestoMs(Number(AlmeEnvironmentConfig.getInstance().getConfig().ClientSessionTimeout) || 0);\n const currentTime = new Date().getTime();\n const lastActivityTime = new Date(almeSessionData.lastActivityTime ?? (currentTime - sessionLength)).getTime();\n const inactivityTime = currentTime - lastActivityTime;\n\n if (inactivityTime >= sessionLength) {\n const lastResponse = this.almeState.history.slice(-1)[0];\n const lastEntryId = lastResponse?.extensionData?.entryId as string ?? \"\";\n\n this.clearSessionData();\n this.setAlmeState({\n ...this.almeState,\n isMinimized,\n isOpen,\n history: [getSessionExpiredResponse(lastEntryId)],\n });\n }\n else {\n const remainingTime = sessionLength - inactivityTime;\n if (this.sessionTimer) { clearTimeout(this.sessionTimer); }\n\n this.sessionTimer = setTimeout(() => { this.onSessionTimeout(this.almeState.isOpen, this.almeState.isMinimized); }, remainingTime);\n }\n }\n\n private minutestoMs(minutes: number): number {\n return minutes * 6e4;\n }\n\n private getRemainingTime(sessionLength: number): number {\n const currentTime = new Date().getTime();\n const lastActivityTime = new Date(this.almeSessionData.lastActivityTime ?? currentTime).getTime();\n const inactivityTime = currentTime - lastActivityTime;\n return (sessionLength - inactivityTime);\n }\n}\n","import React, { useState, useEffect, useRef, useMemo } from 'react';\n\nimport { AlmeAppState, AlmeSavedAppState, createChannelTypes } from './AlmeAppState';\nimport { AlmeApiUtils } from '../../api/AlmeApiUtils';\nimport { createLiveChatNotificationApi, createAlmeApi } from '../../api/AlmeApi';\n\nimport { AlmeConfig } from '../../models/AlmeConfig';\n\nimport AlmeHeader from '../AlmeHeader/AlmeHeader';\nimport AlmeHistory from '../AlmeHistory/AlmeHistory';\nimport AlmeFooter from '../AlmeFooter/AlmeFooter';\nimport { OnDisplayLinkClick } from '../AlmeResponse/AlmeResponse';\nimport AlmeLaunchPoint from '../AlmeLaunchPoint/AlmeLaunchPoint';\nimport { OnMinimizeClick } from '../AlmeMinimize/AlmeMinimize';\n\nimport { WithStyles, withStyles } from '@material-ui/core/styles';\nimport { Container, Grow } from '@material-ui/core';\n\nimport { CookieLoader } from '@alme/storage-ts/CookieLoader';\n\nimport appStyles from './AlmeApp.styles';\nimport { AlmeIvaTypeProp } from '../../models/AlmeIvaTypeMapping';\nimport { OnSurveySubmitClick } from '../ResponseActions/AlmeSurvey/AlmeSurvey';\nimport { SetIsDialogOpen } from '../AlmeDialog/AlmeDialog';\nimport { OnCtaClickCallback } from '../ResponseActions/AlmeCtaButton/AlmeCtaButton';\n\n\nimport { ClientCommunicator } from '@alme/post-message-api/ClientCommunicator';\nimport AlmeLiveChatControls, { OnEndChat } from '../LiveChat/AlmeLiveChatControls/AlmeLiveChatControls';\nimport { OnSendTypingEvent, OnSubmitAlmeInput } from '../AlmeInput/AlmeInput';\nimport { useLaunchIvaCallback } from '../../hooks/useLaunchIvaCallback';\nimport { useResetIvaCallback } from '../../hooks/useResetIvaCallback';\nimport { UseLiveChatConnected } from '../../hooks/useLiveChatConnected';\n\nimport defaultLogger from '../../Logger';\n\nimport { CookieAlmeSessionDataLoader, almeSessionCookieName } from '@alme/session-ts/CookieAlmeSessionDataLoader';\nimport { AlmeSessionData } from '@alme/session-ts/AlmeSessionData';\nimport { loadAlmeSessionData, useAlmeSessionDataCallback, useClearSessionData, useSaveAlmeSessionData, useSaveLastActivityTime } from '../../hooks/useAlmeSessionData';\nimport { loadAlmeHistory, processLastResponse } from './AlmeAppUtils';\nimport { useAlmeInitialization } from '../../hooks/useAlmeInitialization';\nimport { useSetDefaultLoggingLevel } from '../../hooks/useSetDefaultLoggingLevel';\nimport { useAlmeMessageListener } from '../../hooks/useAlmeMessageListener';\nimport { useSyncLastEntry } from '../../hooks/useSyncLastEntry';\nimport { usePollForNotifications } from '../../hooks/usePollForNotifications';\nimport { usePollForChat } from '../../hooks/usePollForChat';\nimport { useInlineIvaStyles } from '../../hooks/useInlineIvaStyles';\nimport { LiveChatNotificationApiSettings } from '@alme/api-ts/LiveChat/LiveChatNotificationApiSettings';\nimport { AlmeSessionUtils } from '../../api/AlmeSessionUtils';\nimport { useSetAlmeStateCallback } from '../../hooks/useSetAlmeStateCallback';\n\nconst sessionLoader = new CookieLoader(almeSessionCookieName);\nconst sessionDataLoader = new CookieAlmeSessionDataLoader(sessionLoader);\nconst savedAppState = new CookieLoader('almeUiState');\nconst clientCommunicator = new ClientCommunicator();\n\nfunction getCurrentAppState(): AlmeSavedAppState | null {\n let currentAppState: AlmeSavedAppState | null = null;\n try {\n currentAppState = savedAppState.GetStorage();\n } catch (ex) {\n defaultLogger.error(ex);\n }\n return currentAppState;\n}\n\ninterface AlmeAppProps extends WithStyles {\n ivaType?: AlmeIvaTypeProp;\n almeConfig: AlmeConfig;\n verintAccessKey?: React.MutableRefObject;\n apiSettings?: LiveChatNotificationApiSettings;\n personaMapped: React.MutableRefObject;\n isIvaProLaunch?: React.MutableRefObject;\n clearAppData: () => void;\n}\n\nconst AlmeApp: React.FC = (props: AlmeAppProps) => {\n const currentAppState = getCurrentAppState();\n const initialAlmeState: AlmeAppState = {\n history: [],\n isOpen: currentAppState?.isOpen || props.ivaType === 'popup',\n isMinimized: currentAppState?.isMinimized || false,\n liveChatIndex: -1,\n isLiveChatConnected: false,\n agentChannel: createChannelTypes(),\n };\n const [almeState, setAlmeState] = useState(initialAlmeState);\n const scrollToResponse = useRef(false);\n const [pulse, setPulse] = useState(false);\n const isInitialized = useRef(false);\n const [almeConfig, setAlmeConfig] = useState(props.almeConfig);\n const [almeSessionData, setAlmeSessionData] = useState(loadAlmeSessionData(sessionDataLoader));\n const sessionUtils = useRef();\n const [shouldDisplayTimeout, setShouldDisplayTimeout] = useState(false);\n // Prevents iva from opening with default skinning on navigation\n useEffect(() => {\n if (almeState.isOpen) {\n setAlmeStateWrapper({\n ...almeState,\n isOpen: false,\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const setAlmeStateWrapper = useSetAlmeStateCallback(setAlmeState, savedAppState);\n const getAlmeSessionFromStorage = () => loadAlmeSessionData(sessionDataLoader);\n\n useMemo(() => {\n setAlmeConfig(props.almeConfig);\n }, [props.almeConfig]);\n\n const onUpdateAlmeSessionData = useAlmeSessionDataCallback(almeSessionData, setAlmeSessionData);\n const clearSessionData = useClearSessionData(sessionDataLoader, savedAppState, setAlmeSessionData, props.clearAppData);\n const clearSessionWithoutTenant = useClearSessionData(sessionDataLoader, savedAppState, setAlmeSessionData, props.clearAppData);\n const saveActivityTIme = useSaveLastActivityTime(almeSessionData, setAlmeSessionData);\n\n useEffect(() => {\n sessionUtils.current = new AlmeSessionUtils(almeSessionData, almeState, getAlmeSessionFromStorage,\n clearSessionWithoutTenant, setAlmeStateWrapper, saveActivityTIme, sessionUtils.current?.sessionTimer);\n\n }, [almeSessionData, almeState, clearSessionWithoutTenant, setAlmeStateWrapper, saveActivityTIme]);\n\n const almeApi = createAlmeApi(props.apiSettings);\n const liveChatNotificationApi = createLiveChatNotificationApi(props.apiSettings);\n\n const apiUtils = useRef(new AlmeApiUtils(almeState, setAlmeStateWrapper, almeSessionData, sessionUtils.current, onUpdateAlmeSessionData, almeConfig, almeApi, liveChatNotificationApi, props.verintAccessKey?.current));\n useEffect(() => {\n const apiConfig = {\n apiUtils: almeConfig.apiUtils,\n };\n\n apiUtils.current = new AlmeApiUtils(almeState, setAlmeStateWrapper, almeSessionData, sessionUtils.current,\n onUpdateAlmeSessionData, apiConfig, almeApi, liveChatNotificationApi, props.verintAccessKey?.current);\n }, [almeState, almeConfig.apiUtils, setAlmeStateWrapper, almeSessionData, onUpdateAlmeSessionData, props.verintAccessKey, almeApi, liveChatNotificationApi]);\n\n useSetDefaultLoggingLevel();\n useSaveAlmeSessionData(almeSessionData, sessionDataLoader);\n UseLiveChatConnected(almeState.isLiveChatConnected, almeConfig, setAlmeConfig);\n useAlmeInitialization(apiUtils, almeState, isInitialized, setAlmeStateWrapper, props.personaMapped.current, scrollToResponse, props.almeConfig.history.shouldScrollOnNav, setShouldDisplayTimeout, props.isIvaProLaunch, sessionUtils);\n useInlineIvaStyles(almeState.isOpen, props.ivaType);\n\n const onDisplayLinkClick = OnDisplayLinkClick(apiUtils, scrollToResponse);\n const onSubmitAlmeInput = OnSubmitAlmeInput(apiUtils, scrollToResponse);\n const onMinimizeClick = OnMinimizeClick(almeState, setAlmeStateWrapper, apiUtils);\n const setIsDialogOpen = SetIsDialogOpen(almeState, setAlmeStateWrapper);\n const onSurveySubmitClick = OnSurveySubmitClick(apiUtils);\n const onCtaClick = OnCtaClickCallback(apiUtils);\n const onEndChat = OnEndChat(apiUtils);\n const onSendTypingEvent = OnSendTypingEvent(apiUtils);\n const onResetIva = useResetIvaCallback(almeState, apiUtils, setAlmeState, clearSessionData, isInitialized, props.personaMapped, props.verintAccessKey);\n const onLaunchIva = useLaunchIvaCallback(almeState, isInitialized, setAlmeStateWrapper, apiUtils, setPulse, scrollToResponse, props.isIvaProLaunch);\n\n useAlmeMessageListener(clientCommunicator, onLaunchIva);\n usePollForNotifications(almeConfig, isInitialized, almeState, apiUtils);\n usePollForChat(almeConfig, isInitialized, almeState, apiUtils);\n useSyncLastEntry(almeState, apiUtils, almeConfig, setAlmeStateWrapper, getCurrentAppState, loadAlmeHistory);\n\n useEffect(() => {\n if (almeState.isMinimized)\n sessionUtils.current?.setOnSessionTimeout();\n }, [almeState.isMinimized]);\n\n useEffect(() => {\n if (window.top)\n window.top.postMessage({ ivaAvailability: true }, \"*\");\n }, []);\n\n const hasHistory: boolean = almeState.history.length > 0;\n const tabIndex = almeState.isDialogOpen ? -1 : 0;\n const disablePulse = () => {\n if (pulse) {\n setPulse(false);\n }\n };\n\n const lastResponse = processLastResponse(almeState, setAlmeStateWrapper);\n\n return (\n <>\n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default withStyles(appStyles)(AlmeApp);\n","import { useCallback } from \"react\";\nimport { EntryExtensionData } from '@alme/types/response/EntryExtensionData';\nimport defaultLogger from '../Logger';\nimport { AlmeAppState, AlmeSavedAppState } from \"../components/AlmeApp/AlmeAppState\";\nimport { CookieLoader } from \"@alme/storage-ts/CookieLoader\";\n\nexport function useSetAlmeStateCallback(\n setAlmeState: (state: AlmeAppState) => void,\n savedAppState: CookieLoader,\n): (state: AlmeAppState) => void {\n return useCallback((state: AlmeAppState): void => {\n state.lastEntryId = (state.history.length &&\n (state.history[state.history.length - 1].extensionData as EntryExtensionData).entryId) || undefined;\n\n try {\n savedAppState.UpdateStorage({\n isOpen: state.isOpen,\n lastEntryId: state.lastEntryId,\n isMinimized: state.isMinimized,\n });\n } catch (ex) {\n defaultLogger.error(ex);\n }\n return setAlmeState(state);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n}","import { useEffect } from \"react\";\nimport { getRootIdByIvaType } from \"../indexConfig\";\nimport { AlmeIvaTypeProp } from \"../models/AlmeIvaTypeMapping\";\nimport defaultLogger from '../Logger';\n\nexport function useInlineIvaStyles(\n isOpen?: boolean,\n ivaType?: AlmeIvaTypeProp,\n): void {\n useEffect(() => {\n const ivaRootId = getRootIdByIvaType(ivaType);\n const ivaRootElement = document.getElementById(ivaRootId);\n if (!ivaRootElement) {\n defaultLogger.warn('Failed to get IVA root element: ');\n return;\n }\n\n if (!ivaType || ivaType !== 'inline') {\n ivaRootElement.style.display = '';\n } else {\n ivaRootElement.style.display = isOpen ? 'block' : 'none';\n }\n }, [isOpen, ivaType]);\n}","import {useEffect} from \"react\";\nimport defaultLogger from \"../Logger\";\nimport { AlmeEnvironmentConfig } from \"../api/AlmeEnvironmentConfig\";\n\nexport function useSetDefaultLoggingLevel(): void {\n const config = AlmeEnvironmentConfig.getInstance().getConfig();\n useEffect(() => {\n if (config && config.UiLogLevel && typeof config.UiLogLevel === 'string') {\n try {\n defaultLogger.loggingLevel = parseInt(config.UiLogLevel);\n } catch (ex) {\n // do nothing.\n }\n }\n }, [config]);\n}\n","import { useEffect } from \"react\";\nimport { AlmeConfig } from \"../models/AlmeConfig\";\n\nexport function UseLiveChatConnected(isLiveChatConnected: boolean, almeConfig: AlmeConfig, setAlmeConfig: (almeConfig: AlmeConfig) => void): void {\n useEffect(() => {\n if (isLiveChatConnected && !almeConfig.notificationApi.pollForLiveChat) {\n setAlmeConfig({\n ...almeConfig,\n notificationApi: {\n ...almeConfig.notificationApi,\n pollForLiveChat: true,\n },\n });\n } else if (!isLiveChatConnected && almeConfig.notificationApi.pollForLiveChat) {\n setAlmeConfig({\n ...almeConfig,\n notificationApi: {\n ...almeConfig.notificationApi,\n pollForLiveChat: false,\n },\n });\n }\n\n }, [almeConfig, isLiveChatConnected, setAlmeConfig]);\n}","import React, { useCallback } from 'react';\nimport { AlmeAppState, createChannelTypes } from '../components/AlmeApp/AlmeAppState';\nimport { AlmeApiUtils } from \"../api/AlmeApiUtils\";\n\nexport function useResetIvaCallback(\n almeState: AlmeAppState,\n apiUtils: React.MutableRefObject,\n setAlmeState: (state: AlmeAppState) => void,\n clearSessionData: () => void,\n isInitialized: React.MutableRefObject,\n personaMapped: React.MutableRefObject,\n verintAccessKey?: React.MutableRefObject,\n isIvaProLaunch?: React.MutableRefObject,\n): (isOpen: boolean, sessionEndReason: string, shouldResetIsInitialized?: boolean, resetSessionData?: boolean) => Promise {\n return useCallback(async (isOpen: boolean, sessionEndReason: string, shouldResetIsInitialized?: boolean, resetSessionData = true) => {\n await apiUtils.current.submitReportingEvent('SessionEnd', sessionEndReason);\n if (resetSessionData) { clearSessionData(); }\n const newState: AlmeAppState = {\n ...almeState,\n isOpen,\n history: [],\n liveChatIndex: -1,\n isLiveChatConnected: false,\n agentChannel: createChannelTypes(),\n };\n if (almeState.isDialogOpen) {\n newState.isDialogOpen = false;\n }\n personaMapped.current = false;\n if (verintAccessKey)\n verintAccessKey.current = '';\n if (isIvaProLaunch)\n isIvaProLaunch.current = false;\n setAlmeState(newState);\n if (shouldResetIsInitialized && isInitialized.current) {\n isInitialized.current = false;\n }\n }, [almeState, apiUtils, clearSessionData, isInitialized, isIvaProLaunch, personaMapped, setAlmeState, verintAccessKey]);\n}\n","import { useCallback } from \"react\";\nimport { AlmeMessageEventData } from \"@alme/post-message-api/AlmeMessageEventData\";\nimport { AlmeLaunchIvaMessageEventData } from \"@alme/post-message-api/AlmeLaunchIvaMessageEventData\";\nimport { AlmeAppState } from \"../components/AlmeApp/AlmeAppState\";\nimport { AlmeApiUtils } from \"../api/AlmeApiUtils\";\nimport defaultLogger from '../Logger';\n\nexport function useLaunchIvaCallback(almeState: AlmeAppState,\n isInitialized: React.MutableRefObject,\n setAlmeState: (state: AlmeAppState) => void,\n apiUtils: React.MutableRefObject,\n setPulse: (value: boolean) => void,\n scrollToResponse: { current: boolean },\n isIvaProLaunch?: React.MutableRefObject,\n): (payload: AlmeMessageEventData) => void {\n // eslint-disable-next-line sonarjs/cognitive-complexity\n return useCallback((payload: AlmeMessageEventData): void => {\n const launchPayload = payload as AlmeLaunchIvaMessageEventData;\n try {\n if (typeof launchPayload?.message?.type === \"string\" && launchPayload?.message?.type?.toLowerCase() === 'launchiva') {\n defaultLogger.log('useLaunchIvaCallback: ', launchPayload);\n const launchQuestion = launchPayload?.message?.launchQuestion?.trim();\n if (!almeState.isOpen) {\n if (!isInitialized.current) {\n // if not open and not initialized add this to state to happen on init.\n scrollToResponse.current = true;\n if (isIvaProLaunch)\n isIvaProLaunch.current = false;\n setAlmeState({\n ...almeState,\n launchQuestion: launchPayload.message.launchQuestion || undefined,\n launchData: launchPayload,\n isMinimized: false,\n });\n } else if (launchQuestion && typeof launchQuestion === \"string\" && almeState.isMinimized) {\n // IVA was minimized. Open and send question.\n setAlmeState({\n ...almeState,\n isOpen: true,\n isMinimized: false,\n });\n void apiUtils.current.submitAlmeInput(launchQuestion);\n } else {\n // Iva was minimized. Just open.\n setAlmeState({\n ...almeState,\n isOpen: true,\n isMinimized: false,\n });\n }\n } else if (launchQuestion) {\n // IVA is already open. Send question.\n void apiUtils.current.submitAlmeInput(launchQuestion);\n } else {\n // IVA is already open\n setPulse(true);\n }\n }\n } catch (error) {\n defaultLogger.error('Error executing launchIva callback', error);\n }\n }, [almeState, isInitialized, scrollToResponse, isIvaProLaunch, setAlmeState, apiUtils, setPulse]);\n}","import { AlmeConfig } from \"../models/AlmeConfig\";\nimport { AlmeApiUtils } from \"../api/AlmeApiUtils\";\nimport { AlmeAppState } from \"../components/AlmeApp/AlmeAppState\";\nimport defaultLogger from \"../Logger\";\nimport useRecursiveTimeout from \"./useRecursiveTimeout\";\n\nexport function usePollForNotifications(almeConfig: AlmeConfig, isInitialized: React.MutableRefObject, almeState: AlmeAppState, apiUtils: React.MutableRefObject): void {\n useRecursiveTimeout(async () => {\n const shouldPoll = almeConfig.notificationApi.pollForNotifications && isInitialized.current && almeState.isOpen;\n if (shouldPoll) {\n try {\n await apiUtils.current.getNotifications();\n } catch (ex) {\n defaultLogger.error('getNotifications error: ', ex);\n }\n }\n }, almeConfig.notificationApi.notificationInterval);\n}","import { AlmeConfig } from \"../models/AlmeConfig\";\nimport { AlmeApiUtils } from \"../api/AlmeApiUtils\";\nimport { AlmeAppState } from \"../components/AlmeApp/AlmeAppState\";\nimport defaultLogger from \"../Logger\";\nimport useRecursiveTimeout from \"./useRecursiveTimeout\";\n\nexport function usePollForChat(almeConfig: AlmeConfig, isInitialized: React.MutableRefObject, almeState: AlmeAppState, apiUtils: React.MutableRefObject): void {\n useRecursiveTimeout(async () => {\n const shouldPoll = almeConfig.notificationApi.pollForLiveChat && isInitialized.current && almeState.isOpen;\n if (shouldPoll) {\n try {\n await apiUtils.current.getLiveChatNotifications();\n } catch (ex) {\n defaultLogger.error('getLiveChatNotifications error: ', ex);\n }\n }\n }, almeState.isLiveChatConnected ? almeConfig.notificationApi.liveChatInterval.connected : almeConfig.notificationApi.liveChatInterval.disconnected);\n}","import { AlmeResponseNext } from \"@alme/types/response/AlmeResponse\";\nimport { AlmeConfig } from \"../models/AlmeConfig\";\nimport { AlmeApiUtils } from \"../api/AlmeApiUtils\";\nimport { AlmeAppState, AlmeSavedAppState } from \"../components/AlmeApp/AlmeAppState\";\nimport useRecursiveTimeout from \"./useRecursiveTimeout\";\nimport { MutableRefObject } from \"react\";\n\nexport function useSyncLastEntry(almeState: AlmeAppState,\n apiUtils: MutableRefObject,\n almeConfig: AlmeConfig,\n setAlmeStateWrapper: (state: AlmeAppState) => void,\n getCurrentAppState: () => AlmeSavedAppState | null,\n loadAlmeHistory: (almeApiUtils: AlmeApiUtils, almeState: AlmeAppState) => Promise,\n): void {\n useRecursiveTimeout(async () => {\n if (almeState.history.length) {\n const curAppState = getCurrentAppState();\n const lastResponse = almeState.history.slice(-1)[0];\n const lastEntryId = lastResponse?.extensionData?.entryId as string | undefined;\n const currentLastEntryId = curAppState?.lastEntryId;\n\n if (lastEntryId !== currentLastEntryId && lastResponse.responseRevision > 0) {\n const history = await loadAlmeHistory(apiUtils.current, almeState);\n\n setAlmeStateWrapper({\n ...almeState,\n history,\n launchQuestion: undefined,\n });\n }\n }\n }, almeConfig.lastEntryIdInterval);\n}\n","import React from 'react';\n\nimport { jssPreset, StylesProvider, ThemeProvider } from '@material-ui/core/styles';\n\nimport AlmeApp from './components/AlmeApp/AlmeApp';\nimport { createTheme } from './utils/PersonaUtils';\nimport { defaultTheme, defaultDarkTheme } from './models/AlmeTheme';\n\nimport { create } from 'jss';\n\nimport increaseSpecificity from '@alme/jss-increase-specificity-plugin';\nimport { LiveChatNotificationApiSettings } from '@alme/api-ts/LiveChat/LiveChatNotificationApiSettings';\nimport { AlmeIvaTypeProp } from './models/AlmeIvaTypeMapping';\nimport { PersonaState } from './models/AlmePersona';\n\nexport interface AppProps {\n personaState: PersonaState;\n apiSettings: LiveChatNotificationApiSettings;\n ivaType: AlmeIvaTypeProp;\n personaMapped: React.MutableRefObject;\n isIvaProLaunch?: React.MutableRefObject;\n clearAppData: () => void;\n}\n\nconst jssPlugin = increaseSpecificity();\n\nconst jss = create({\n plugins: [...jssPreset().plugins, jssPlugin],\n});\n\nconst VerintIVAUI: React.FC = (props: AppProps) => {\n\n const theme = props.personaState.themeMode === 'dark' ?\n createTheme([defaultDarkTheme, props.personaState.theme.darkTheme]) :\n createTheme([defaultTheme, props.personaState.theme.lightTheme]);\n\n return (\n \n \n \n \n \n );\n};\n\nexport default VerintIVAUI;\n","import React from 'react';\n\nimport { AlmeThemeMode } from '../../models/AlmeTheme';\n\nimport { Switch, FormControlLabel } from '@material-ui/core';\nimport { createStyles, makeStyles } from '@material-ui/core/styles';\nimport { AlmeConfig } from '../../models/AlmeConfig';\n\nconst useStyles = makeStyles(() =>\n createStyles({\n almeThemeModeToggleContainer: {\n marginLeft: '0',\n },\n }),\n);\n\ninterface AlmeThemeModeToggleProps {\n setThemeMode: (themeMode: AlmeThemeMode) => void;\n themeMode: AlmeThemeMode;\n almeConfig: AlmeConfig;\n}\n\nconst AlmeThemeModeToggle: React.FC = (props: AlmeThemeModeToggleProps) => {\n const classes = useStyles();\n\n const isDarkChecked = props.themeMode === 'dark' ? true : false;\n\n const handleChange = () => (event: React.ChangeEvent): void => {\n const themeMode: AlmeThemeMode = event.target.checked ? 'dark' : 'light';\n props.setThemeMode(themeMode);\n updateTestPageTheme(themeMode);\n };\n\n const toggleLabel = props.almeConfig.themeModeToggle.label || '';\n\n return (\n \n }\n label={toggleLabel} />\n );\n};\n\nexport default AlmeThemeModeToggle;\n\nfunction updateTestPageTheme(themeMode: AlmeThemeMode): void {\n const textColor = themeMode === 'dark' ? 'white' : 'black';\n const backgroundColor = themeMode === 'dark' ? 'black' : 'white';\n document.body.style.backgroundColor = backgroundColor;\n document.body.style.color = textColor;\n}","import React, { useState, ReactElement } from 'react';\n\nimport appThemeMain from '../../personas/mainPersona/theme';\nimport { appThemeMain as verintTheme } from '../../personas/examples/verintTheme';\nimport { appThemeMain as rainbowTheme } from '../../personas/examples/ColorExamples/rainbow';\nimport { appThemeMain as badContrastTheme } from '../../personas/examples/ColorExamples/badContrast';\nimport { appThemeMain as blackAndWhiteTheme } from '../../personas/examples/ColorExamples/blackAndWhite';\nimport { appThemeMain as shadesTheme } from '../../personas/examples/ColorExamples/shades';\nimport { appThemeMain as brushScriptTheme } from '../../personas/examples/TypographyExamples/brushScript';\nimport { appThemeMain as CourierNewSriptTheme } from '../../personas/examples/TypographyExamples/courierNewScript';\nimport { appThemeMain as adjustedTypeComfortableTheme } from '../../personas/examples/TypographyExamples/adjustedTypeSpaced';\nimport { appThemeMain as adjustedTypeCompressionTheme } from '../../personas/examples/TypographyExamples/adjustedTypeCompression';\nimport { appThemeMain as timesNewRomanScriptTheme } from '../../personas/examples/TypographyExamples/timesNewRomanScript';\nimport { appThemeMain as customShapeTheme } from '../../personas/examples/ShapeExamples/customShapes';\nimport { appThemeMain as everythingIsRoundedTheme } from '../../personas/examples/ShapeExamples/everythingIsRounded';\nimport { appThemeMain as everythingIsSharpTheme } from '../../personas/examples/ShapeExamples/everythingIsSharp';\n\nimport { FormControl, InputLabel, NativeSelect, ThemeOptions } from '@material-ui/core';\nimport { AlmeTheme } from '../../models/AlmeTheme';\n\ninterface ThemeSelectorThemeData {\n lightTheme: ThemeOptions;\n darkTheme: ThemeOptions;\n name: string;\n}\n\nconst appThemes: ThemeSelectorThemeData[] = [\n {\n lightTheme: appThemeMain.lightTheme,\n darkTheme: appThemeMain.darkTheme,\n name: 'Main',\n },\n {\n lightTheme: verintTheme.lightTheme,\n darkTheme: verintTheme.darkTheme,\n name: 'Verint',\n },\n {\n lightTheme: rainbowTheme.lightTheme,\n darkTheme: rainbowTheme.darkTheme,\n name: 'Rainbow',\n },\n {\n lightTheme: badContrastTheme.lightTheme,\n darkTheme: badContrastTheme.darkTheme,\n name: 'Bad Contrast',\n },\n {\n lightTheme: blackAndWhiteTheme.lightTheme,\n darkTheme: blackAndWhiteTheme.darkTheme,\n name: 'Black and White Theme',\n },\n {\n lightTheme: shadesTheme.lightTheme,\n darkTheme: shadesTheme.darkTheme,\n name: 'shades Theme',\n },\n {\n lightTheme: brushScriptTheme.lightTheme,\n darkTheme: brushScriptTheme.darkTheme,\n name: 'Brush Script Theme',\n },\n {\n lightTheme: CourierNewSriptTheme.lightTheme,\n darkTheme: CourierNewSriptTheme.darkTheme,\n name: 'Courier Script Theme',\n },\n {\n lightTheme: timesNewRomanScriptTheme.lightTheme,\n darkTheme: timesNewRomanScriptTheme.darkTheme,\n name: 'Times New Roman Theme',\n },\n {\n lightTheme: adjustedTypeComfortableTheme.lightTheme,\n darkTheme: adjustedTypeComfortableTheme.darkTheme,\n name: 'Spaced Text Theme',\n },\n {\n lightTheme: adjustedTypeCompressionTheme.lightTheme,\n darkTheme: adjustedTypeCompressionTheme.darkTheme,\n name: 'Compressed Text Theme',\n },\n {\n lightTheme: customShapeTheme.lightTheme,\n darkTheme: customShapeTheme.darkTheme,\n name: 'Custom Shape Theme',\n },\n {\n lightTheme: everythingIsRoundedTheme.lightTheme,\n darkTheme: everythingIsRoundedTheme.darkTheme,\n name: 'rounded corners Theme',\n },\n {\n lightTheme: everythingIsSharpTheme.lightTheme,\n darkTheme: everythingIsSharpTheme.darkTheme,\n name: 'sharp corners Theme',\n },\n];\n\ninterface AlmeThemeSelectorProps {\n setTheme: (theme: AlmeTheme) => void;\n}\n\ninterface ThemeSelectorState {\n themeNumber: number;\n name: string;\n}\n\nexport default function AlmeThemeSelector(props: AlmeThemeSelectorProps): ReactElement {\n const [state, setState] = useState({\n themeNumber: 0,\n name: appThemes[0].name,\n });\n\n const handleChange = (name: keyof typeof state) => (\n event: React.ChangeEvent<{ value: unknown }>,\n ): void => {\n setState({\n ...state,\n [name]: event.target.value,\n });\n if (name === 'themeNumber') {\n const lightTheme = appThemes[event.target.value as number].lightTheme;\n const darkTheme = appThemes[event.target.value as number].darkTheme;\n const theme = {\n lightTheme: lightTheme,\n darkTheme: darkTheme,\n } as AlmeTheme;\n\n props.setTheme(theme);\n } else {\n const currentTheme: ThemeSelectorThemeData = appThemes.find((value) => {\n return value.name === event.target.value as string;\n }) || appThemes[0];\n\n const theme = {\n lightTheme: currentTheme.lightTheme,\n darkTheme: currentTheme.darkTheme,\n } as AlmeTheme;\n\n props.setTheme(theme);\n }\n };\n\n return (\n \n Theme\n \n {\n appThemes.map((value, index) => {\n return (\n \n {value.name}\n \n );\n })\n }\n \n \n );\n}","import React, { ReactElement, useState, useRef, useEffect } from 'react';\n\nimport { Theme, Accordion, AccordionDetails, AccordionSummary, Typography, Container, Avatar, Box, TextField, AccordionActions, Button, ThemeOptions } from '@material-ui/core';\nimport { createStyles, makeStyles, createMuiTheme } from '@material-ui/core/styles';\n\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\n\n// eslint-disable-next-line no-restricted-imports\nimport createPalette, { PaletteColor } from '@material-ui/core/styles/createPalette';\nimport { AlmeTheme, AlmeThemeMode } from '../../../models/AlmeTheme';\n\nconst { augmentColor } = createPalette({});\n\nconst useStyles = makeStyles((theme: Theme) => createStyles(\n {\n root: {\n width: '60%',\n },\n colorContainer: {\n boxShadow: theme.shadows[1],\n paddingTop: theme.spacing(1),\n paddingBottom: theme.spacing(1),\n '&:hover': {\n boxShadow: theme.shadows[4],\n },\n },\n mainPanel: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexDirection: 'column',\n height: '204px',\n border: `solid 1px ${theme.palette.divider}`,\n padding: theme.spacing(2),\n },\n augmentContainer: {\n display: 'flex',\n },\n augmentPanel: {\n height: '115px',\n flexGrow: 1,\n padding: theme.spacing(1),\n border: `solid 1px ${theme.palette.divider}`,\n },\n splitPanel: {\n height: '151px',\n border: `solid 1px ${theme.palette.divider}`,\n padding: theme.spacing(2),\n },\n // TODO: add divider color to controls below.\n dividerColor: {\n backgroundColor: theme.palette.divider,\n },\n },\n));\n\nfunction validateColor(color: string) {\n return /^#[0-9A-F]{3,6}$/i.test(color);\n}\n\ninterface AlmeBasicColorControlProps {\n color: string;\n useColorRef: React.RefObject;\n title: string;\n idVal: string;\n}\n\nfunction AlmeBasicColorControl(props: AlmeBasicColorControlProps): ReactElement {\n const classes = useStyles();\n\n const [color, setColor] = useState(props.color);\n\n useEffect(() => {\n setColor(props.color);\n }, [props.color]);\n\n const handleColorChange = (event: React.ChangeEvent) => {\n const newColor = event.target.value;\n if (newColor?.length && validateColor(newColor)) {\n setColor(newColor);\n }\n };\n\n const colorStyles = {\n backgroundColor: color,\n color: augmentColor({ main: color }).contrastText,\n };\n\n return (\n \n {props.title}\n \n \n );\n}\n\ninterface AlmePaletteColorControlProps {\n paletteColor: PaletteColor;\n useMainRef: React.RefObject;\n useLightRef: React.RefObject;\n useDarkRef: React.RefObject;\n title: string;\n idVal: string;\n avatarValue: string;\n}\n\nfunction AlmePaletteColorControl(props: AlmePaletteColorControlProps): ReactElement {\n const classes = useStyles();\n\n const [main, setMain] = useState(props.paletteColor.main);\n const [light, setLight] = useState(props.paletteColor.light);\n const [dark, setDark] = useState(props.paletteColor.dark);\n\n useEffect(() => {\n setMain(props.paletteColor.main);\n setLight(props.paletteColor.light);\n setDark(props.paletteColor.dark);\n }, [props.paletteColor]);\n\n const handleColorChange = (event: React.ChangeEvent) => {\n const primary = event.target.value;\n if (primary?.length && validateColor(primary)) {\n const augmented = augmentColor({ main: primary.toString() });\n setMain(primary);\n setLight(augmented.light);\n setDark(augmented.dark);\n }\n };\n\n const mainStyles = {\n backgroundColor: main,\n color: augmentColor({ main }).contrastText,\n };\n\n const lightStyles = {\n backgroundColor: light,\n color: augmentColor({ main: light }).contrastText,\n };\n\n const darkStyles = {\n backgroundColor: dark,\n color: augmentColor({ main: dark }).contrastText,\n };\n\n const avatarStyles = {\n backgroundColor: props.paletteColor.contrastText,\n color: props.paletteColor.main,\n };\n\n return (\n \n {props.title}\n \n {props.avatarValue}\n \n \n \n \n P - Light\n \n \n \n P - Dark\n \n \n \n \n );\n}\n\nfunction getAppTheme(props: AlmePaletteToolProps): Theme {\n const theme = props.themeMode === 'dark' ? props.theme.darkTheme : props.theme.lightTheme;\n return createMuiTheme(theme);\n}\n\ninterface AlmePaletteToolProps {\n theme: AlmeTheme;\n themeMode: AlmeThemeMode;\n setTheme: (theme: AlmeTheme) => void;\n}\n\nexport default function AlmePaletteTool(props: AlmePaletteToolProps): ReactElement {\n const classes = useStyles();\n\n const appTheme = getAppTheme(props);\n\n const useMainPrimaryRef = useRef(null);\n const useLightPrimaryRef = useRef(null);\n const useDarkPrimaryRef = useRef(null);\n const useMainSecondaryRef = useRef(null);\n const useLightSecondaryRef = useRef(null);\n const useDarkSecondaryRef = useRef(null);\n const useDefaultRef = useRef(null);\n const usePaperRef = useRef(null);\n\n useEffect(() => {\n useMainPrimaryRef.current && (useMainPrimaryRef.current.value = appTheme.palette.primary.main);\n useLightPrimaryRef.current && (useLightPrimaryRef.current.value = appTheme.palette.primary.light);\n useDarkPrimaryRef.current && (useDarkPrimaryRef.current.value = appTheme.palette.primary.dark);\n\n useMainSecondaryRef.current && (useMainSecondaryRef.current.value = appTheme.palette.secondary.main);\n useLightSecondaryRef.current && (useLightSecondaryRef.current.value = appTheme.palette.secondary.light);\n useDarkSecondaryRef.current && (useDarkSecondaryRef.current.value = appTheme.palette.secondary.dark);\n\n useDefaultRef.current && (useDefaultRef.current.value = appTheme.palette.background.default);\n usePaperRef.current && (usePaperRef.current.value = appTheme.palette.background.paper);\n }, [\n appTheme.palette.background.default, appTheme.palette.background.paper,\n appTheme.palette.primary.dark, appTheme.palette.primary.light, appTheme.palette.primary.main,\n appTheme.palette.secondary.dark, appTheme.palette.secondary.light, appTheme.palette.secondary.main,\n ]);\n\n const applyThemeClick = () => {\n const customTheme: ThemeOptions = {\n ...appTheme,\n palette: {\n ...appTheme.palette,\n type: props.themeMode === 'dark' ? 'dark' : 'light' as const,\n primary: {\n ...appTheme.palette.primary,\n main: useMainPrimaryRef.current?.value || appTheme.palette.primary.main,\n light: useLightPrimaryRef.current?.value || appTheme.palette.primary.light,\n dark: useDarkPrimaryRef.current?.value || appTheme.palette.primary.dark,\n },\n secondary: {\n ...appTheme.palette.secondary,\n main: useMainSecondaryRef.current?.value || appTheme.palette.secondary.main,\n light: useLightSecondaryRef.current?.value || appTheme.palette.secondary.light,\n dark: useDarkSecondaryRef.current?.value || appTheme.palette.secondary.dark,\n },\n background: {\n ...appTheme.palette.background,\n default: useDefaultRef.current?.value || appTheme.palette.background.default,\n paper: usePaperRef.current?.value || appTheme.palette.background.paper,\n },\n },\n };\n const customMuiTheme = {\n lightTheme: customTheme.palette?.type === 'light' ? customTheme : props.theme.lightTheme,\n darkTheme: customTheme.palette?.type === 'dark' ? customTheme : props.theme.darkTheme,\n } as AlmeTheme;\n\n props.setTheme(customMuiTheme);\n };\n\n return (\n \n \n }\n aria-controls=\"panel-color-tool-content\"\n id=\"panel-color-tool-header\"\n >\n Color Tool\n \n \n \n \n \n Background\n \n \n \n \n \n \n \n \n \n );\n}","import React, { ReactElement, useRef } from 'react';\n\nimport { Theme, Button, Accordion, AccordionDetails, AccordionSummary, Typography, AccordionActions, TextField } from '@material-ui/core';\nimport { createStyles, makeStyles, ThemeOptions } from '@material-ui/core/styles';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport { AlmeTheme, AlmeThemeMode } from '../../../models/AlmeTheme';\n\nconst useStyles = makeStyles(({ spacing }: Theme) =>\n createStyles({\n root: {\n width: '60%',\n },\n themeTextarea: {\n width: '100%',\n },\n }),\n);\n\ninterface AlmeThemeToolProps {\n setTheme: (theme: AlmeTheme) => void;\n theme: AlmeTheme;\n themeMode: AlmeThemeMode;\n}\n\nexport default function AlmeThemeTool(props: AlmeThemeToolProps): ReactElement {\n const classes = useStyles();\n const appTheme = props.themeMode === 'dark' ? props.theme.darkTheme : props.theme.lightTheme;\n\n const textareaValue = JSON.stringify(appTheme, null, 4);\n const useThemeTextareaRef = useRef(null);\n\n const applyThemeClick = () => {\n const themeOptions = useThemeTextareaRef.current?.value;\n if (!themeOptions) {\n return;\n }\n const customTheme = JSON.parse(themeOptions) as ThemeOptions;\n\n const customMuiTheme = {\n lightTheme: customTheme.palette?.type === 'light' ? customTheme : props.theme.lightTheme,\n darkTheme: customTheme.palette?.type === 'dark' ? customTheme : props.theme.darkTheme,\n } as AlmeTheme;\n\n props.setTheme(customMuiTheme);\n };\n\n return (\n
\n \n }\n aria-controls=\"panel-custom-theme-content\"\n id=\"panel-custom-theme-header\"\n >\n Custom Theme\n \n \n \n \n \n \n \n \n
\n );\n}","import React from 'react';\n\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\n\nimport {\n Theme, Box, FormControl, FormLabel, Typography,\n FormControlLabel, Radio, RadioGroup, SvgIconProps,\n ButtonProps, TextFieldProps, TypographyProps, Container, TextField,\n} from '@material-ui/core';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n display: 'flex',\n flexFlow: 'row wrap',\n border: `solid 1px ${theme.palette.divider}`,\n justifyContent: 'space-around',\n },\n controlGroup: {\n display: 'flex',\n flexFlow: 'row wrap',\n boxShadow: theme.shadows[1],\n padding: theme.spacing(2),\n '&:hover': {\n boxShadow: theme.shadows[4],\n },\n },\n controls: {\n padding: theme.spacing(1),\n },\n }),\n);\n\nexport type BoolPropTypes = 'true' | 'false';\n\nexport type ControlPropTypes = ButtonProps['color'] | ButtonProps['variant'] | TextFieldProps['color'] | TextFieldProps['variant'] |\n TextFieldProps['size'] | BoolPropTypes | TypographyProps['variant'] | SvgIconProps['fontSize'] | string;\n\nexport interface ConfigControlGroups {\n name: string;\n controlGroups: (RadioButtonControl | TextControl)[];\n}\n\nexport interface RadioButtonControl {\n label: string;\n name: string;\n value: ControlPropTypes;\n changeHandler: (event: React.ChangeEvent) => void;\n radioButtons: string[];\n}\n\nexport interface TextControl {\n id: string;\n label: string;\n name: string;\n value: ControlPropTypes;\n changeHandler: (event: React.ChangeEvent) => void;\n}\n\ninterface AlmeConfigFormControlProps {\n title: string;\n configControls: ConfigControlGroups[];\n}\n\nconst AlmeConfigFormControl: React.FC = (props: AlmeConfigFormControlProps) => {\n const classes = useStyles();\n\n const isRadioControl = (control: RadioButtonControl | TextControl): boolean => {\n return (control as RadioButtonControl).radioButtons && (control as RadioButtonControl).radioButtons.length > 0;\n };\n\n const isTextControl = (control: RadioButtonControl | TextControl): boolean => {\n return !!(control as TextControl).id && !isRadioControl(control);\n };\n\n return (\n \n {props.title}\n {props.configControls.map((controls, i1) => (\n \n {controls.controlGroups.map((control, i2) => (\n \n \n {control.label}\n {isRadioControl(control) &&\n \n {(control as RadioButtonControl).radioButtons.map((radioValue, i3) => (\n } label={radioValue} />\n ))}\n \n }\n {isTextControl(control) &&\n \n }\n \n \n ))}\n \n ))}\n \n );\n};\n\nexport default AlmeConfigFormControl;","import React from 'react';\n\nimport inputStyles from './AlmeInput.styles';\n\nimport { withStyles, WithStyles } from '@material-ui/core/styles';\n\nimport { ButtonProps, TextFieldProps } from '@material-ui/core';\nimport { AlmeInputConfig } from './AlmeInputConfig';\nimport AlmeConfigFormControl, { ConfigControlGroups } from '../AlmeConfigFormControl/AlmeConfigFormControl';\nimport { useIntl } from 'react-intl';\nimport defaultTranslation from \"../../personas/mainPersona/translations/languages.json\";\n\ninterface AlmeInputConfigToolProps extends WithStyles {\n namePrefix: string;\n idPrefix: string;\n almeConfig: AlmeInputConfig;\n onConfigChange: (almeConfig: AlmeInputConfig) => void;\n}\n\nconst AlmeInputConfigTool: React.FC = (props: AlmeInputConfigToolProps) => {\n const intl = useIntl();\n const inputBoxColor = props.almeConfig.input.styles.textField.color;\n const inputBoxVariant = props.almeConfig.input.styles.textField.variant;\n const inputBoxSize = props.almeConfig.input.styles.textField.size;\n const inputBoxPlaceholderText = intl.formatMessage({\n id: \"input.inputPlaceHolderText\",\n defaultMessage: 'Default input placeholderText',\n description: 'Alme Input placeholder text',\n });\n const inputButtonSubmitButtonText = props.almeConfig.input.submitButtonText;\n const inputButtonColor = props.almeConfig.input.styles.button.color;\n\n const setInputBoxColor = (event: React.ChangeEvent) => {\n const newValue = (event.target as HTMLInputElement).value as TextFieldProps['color'];\n const almeConfig = props.almeConfig;\n almeConfig.input.styles.textField.color = newValue;\n props.onConfigChange(almeConfig);\n };\n\n const setInputBoxVariant = (event: React.ChangeEvent) => {\n const newValue = (event.target as HTMLInputElement).value as TextFieldProps['variant'];\n const almeConfig = props.almeConfig;\n almeConfig.input.styles.textField.variant = newValue;\n props.onConfigChange(almeConfig);\n };\n\n const setInputBoxSize = (event: React.ChangeEvent) => {\n const newValue = (event.target as HTMLInputElement).value as TextFieldProps['size'];\n const almeConfig = props.almeConfig;\n almeConfig.input.styles.textField.size = newValue;\n props.onConfigChange(almeConfig);\n };\n\n const setInputBoxPlaceholderText = (event: React.ChangeEvent) => {\n const newValue = (event.target as HTMLInputElement).value;\n const almeConfig = props.almeConfig;\n (defaultTranslation as Record>)[\"en-US\"][\"input.inputPlaceHolderText\"] = newValue;\n props.onConfigChange(almeConfig);\n };\n\n const setInputButtonSubmitButtonText = (event: React.ChangeEvent) => {\n const newValue = (event.target as HTMLInputElement).value;\n const almeConfig = props.almeConfig;\n almeConfig.input.submitButtonText = newValue;\n props.onConfigChange(almeConfig);\n };\n\n const setInputButtonColor = (event: React.ChangeEvent) => {\n const newValue = (event.target as HTMLInputElement).value as ButtonProps['color'];\n const almeConfig = props.almeConfig;\n almeConfig.input.styles.button.color = newValue;\n props.onConfigChange(almeConfig);\n };\n\n const configControls: ConfigControlGroups[] = [\n {\n name: 'Input Box',\n controlGroups: [\n {\n label: 'Input Box Color',\n name: 'inputBoxColor',\n value: inputBoxColor,\n changeHandler: setInputBoxColor,\n radioButtons: ['primary', 'secondary'],\n },\n {\n label: 'Input Box Variant',\n name: 'inputBoxVariant',\n value: inputBoxVariant,\n changeHandler: setInputBoxVariant,\n radioButtons: ['outlined', 'filled', 'standard'],\n },\n {\n label: 'Input Box Size',\n name: 'inputBoxSize',\n value: inputBoxSize,\n changeHandler: setInputBoxSize,\n radioButtons: ['small', 'medium'],\n },\n {\n id: `${props.idPrefix}input-box-placeholder-text-config`,\n label: 'Input Box Placeholder Text',\n name: `${props.namePrefix}InputBoxPlaceholderText`,\n value: inputBoxPlaceholderText,\n changeHandler: setInputBoxPlaceholderText,\n },\n ],\n },\n {\n name: 'Input Button',\n controlGroups: [\n {\n label: 'Input Button Color',\n name: 'inputButtonColor',\n value: inputButtonColor,\n changeHandler: setInputButtonColor,\n radioButtons: ['inherit', 'default', 'primary', 'secondary'],\n },\n {\n id: `${props.idPrefix}input-button-submit-text-config`,\n label: 'Input Button Submit Button Text',\n name: `${props.namePrefix}InputButtonSubmitButtonText`,\n value: inputButtonSubmitButtonText,\n changeHandler: setInputButtonSubmitButtonText,\n },\n ],\n },\n ];\n\n return (\n \n );\n};\n\nexport default withStyles(inputStyles)(AlmeInputConfigTool);\n","import React from 'react';\n\nimport poweredByLinkStyles from './AlmePoweredByLink.styles';\n\nimport { withStyles, WithStyles } from '@material-ui/core/styles';\n\nimport { AlmePoweredByLinkConfig } from './AlmePoweredByLInkConfig';\nimport AlmeConfigFormControl, { BoolPropTypes, ConfigControlGroups } from '../AlmeConfigFormControl/AlmeConfigFormControl';\n\ninterface AlmePoweredByLinkConfigToolProps extends WithStyles {\n almeConfig: AlmePoweredByLinkConfig;\n onConfigChange: (almeConfig: AlmePoweredByLinkConfig) => void;\n}\n\nconst AlmePoweredByLinkConfigTool: React.FC = (props: AlmePoweredByLinkConfigToolProps) => {\n const isEnabled = props.almeConfig.poweredByLink.isEnabled.toString() as BoolPropTypes;\n\n const setIsEnabled = (event: React.ChangeEvent) => {\n const newValue = (event.target as HTMLInputElement).value;\n const almeConfig = props.almeConfig;\n almeConfig.poweredByLink.isEnabled = newValue === 'true';\n props.onConfigChange(almeConfig);\n };\n\n const configControls: ConfigControlGroups[] = [\n {\n name: 'Powered By Link',\n controlGroups: [\n {\n label: 'Is Enabled',\n name: 'isEnabled',\n value: isEnabled,\n changeHandler: setIsEnabled,\n radioButtons: ['true', 'false'],\n },\n ],\n },\n ];\n\n return (\n \n );\n};\n\nexport default withStyles(poweredByLinkStyles)(AlmePoweredByLinkConfigTool);\n","import React from 'react';\n\nimport footerStyles from './AlmeFooter.styles';\n\nimport { withStyles, WithStyles, makeStyles, createStyles } from '@material-ui/core/styles';\n\nimport {\n Theme, Accordion, AccordionDetails, AccordionSummary,\n Typography, Container, Box,\n} from '@material-ui/core';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport AlmeInputConfigTool from '../AlmeInput/AlmeInputConfigTool';\nimport { AlmeFooterConfig } from './AlmeFooterConfig';\nimport { AlmeInputConfig } from '../AlmeInput/AlmeInputConfig';\nimport AlmePoweredByLinkConfigTool from '../AlmePoweredByLink/AlmePoweredByLinkConfigTool';\nimport { AlmePoweredByLinkConfig } from '../AlmePoweredByLink/AlmePoweredByLInkConfig';\nimport AlmeConfigFormControl, { BoolPropTypes, ConfigControlGroups } from '../AlmeConfigFormControl/AlmeConfigFormControl';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n },\n }),\n);\n\ninterface AlmeFooterConfigToolProps extends WithStyles {\n almeConfig: AlmeFooterConfig;\n onConfigChange: (almeConfig: AlmeFooterConfig) => void;\n}\n\nconst AlmeFooterConfigTool: React.FC = (props: AlmeFooterConfigToolProps) => {\n const classes = useStyles();\n\n const footerHasBorder = props.almeConfig.footer.styles.hasBorder.toString() as BoolPropTypes;\n const footerHasBackgroundColor = props.almeConfig.footer.styles.hasBackgroundColor.toString() as BoolPropTypes;\n\n const setFooterHasBorder = (event: React.ChangeEvent) => {\n const newValue = (event.target as HTMLInputElement).value as BoolPropTypes;\n const almeConfig = props.almeConfig;\n almeConfig.footer.styles.hasBorder = newValue === 'true';\n props.onConfigChange(almeConfig);\n };\n\n const setFooterHasBackgroundColor = (event: React.ChangeEvent) => {\n const newValue = (event.target as HTMLInputElement).value as BoolPropTypes;\n const almeConfig = props.almeConfig;\n almeConfig.footer.styles.hasBackgroundColor = newValue === 'true';\n props.onConfigChange(almeConfig);\n };\n\n const onInputConfigChange = (inputConfig: AlmeInputConfig): void => {\n const footerConfig: AlmeFooterConfig = {\n footer: {\n ...props.almeConfig.footer,\n input: {\n ...inputConfig.input,\n },\n },\n };\n props.onConfigChange(footerConfig);\n };\n\n const onPoweredByLinkConfigChange = (poweredByLinkConfig: AlmePoweredByLinkConfig): void => {\n const footerConfig: AlmeFooterConfig = {\n footer: {\n ...props.almeConfig.footer,\n poweredByLink: {\n ...poweredByLinkConfig.poweredByLink,\n },\n },\n };\n props.onConfigChange(footerConfig);\n };\n\n\n const configControls: ConfigControlGroups[] = [\n {\n name: 'Footer',\n controlGroups: [\n {\n label: 'Footer Border',\n name: 'footerHasBorder',\n value: footerHasBorder,\n changeHandler: setFooterHasBorder,\n radioButtons: ['true', 'false'],\n },\n {\n label: 'Footer Background',\n name: 'footerHasBackgroundColor',\n value: footerHasBackgroundColor,\n changeHandler: setFooterHasBackgroundColor,\n radioButtons: ['true', 'false'],\n },\n ],\n },\n ];\n\n return (\n \n \n }\n aria-controls=\"panel-alme-footer-config-tool-content\"\n id=\"panel-alme-footer-config-tool-header\"\n >\n Alme Footer Config Tools\n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default withStyles(footerStyles)(AlmeFooterConfigTool);","import React from 'react';\n\nimport launchPointStyles from './AlmeLaunchPoint.styles';\n\nimport { withStyles, WithStyles, makeStyles, createStyles } from '@material-ui/core/styles';\n\nimport {\n Theme, Accordion, AccordionDetails, AccordionSummary,\n Typography, Container, Box,\n} from '@material-ui/core';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\n\nimport { AlmeLaunchPointConfig } from './AlmeLaunchPointConfig';\nimport AlmeConfigFormControl, { ConfigControlGroups } from '../AlmeConfigFormControl/AlmeConfigFormControl';\nimport AlmeInputConfigTool from '../AlmeInput/AlmeInputConfigTool';\nimport { AlmeInputConfig } from '../AlmeInput/AlmeInputConfig';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n },\n }),\n);\n\ninterface AlmeLaunchPointConfigToolProps extends WithStyles {\n almeConfig: AlmeLaunchPointConfig;\n onConfigChange: (almeConfig: AlmeLaunchPointConfig) => void;\n}\n\nconst AlmeLaunchPointConfigTool: React.FC = (props: AlmeLaunchPointConfigToolProps) => {\n const classes = useStyles();\n\n const launchPointButtonText = props.almeConfig.launchPoint.buttonText;\n const launchPointInputFieldText = props.almeConfig.launchPoint.inputFieldText;\n\n const setLaunchPointButtonText = (event: React.ChangeEvent) => {\n const newValue = (event.target as HTMLInputElement).value;\n const almeConfig = props.almeConfig;\n almeConfig.launchPoint.buttonText = newValue;\n props.onConfigChange(almeConfig);\n };\n\n const setLaunchPointInputFieldText = (event: React.ChangeEvent) => {\n const newValue = (event.target as HTMLInputElement).value;\n const almeConfig = props.almeConfig;\n almeConfig.launchPoint.inputFieldText = newValue;\n props.onConfigChange(almeConfig);\n };\n\n const onInputConfigChange = (inputConfig: AlmeInputConfig): void => {\n const launchConfig: AlmeLaunchPointConfig = {\n launchPoint: {\n ...props.almeConfig.launchPoint,\n input: {\n ...inputConfig.input,\n },\n },\n };\n props.onConfigChange(launchConfig);\n };\n\n const configControls: ConfigControlGroups[] = [\n {\n name: 'Launch Point Button',\n controlGroups: [\n {\n id: 'alme-launch-point-button-text-config',\n label: 'Launch Point Button Text',\n name: 'launchPointButtonText',\n value: launchPointButtonText,\n changeHandler: setLaunchPointButtonText,\n },\n {\n id: 'alme-launch-point-input-text-config',\n label: 'Launch Point Input Text',\n name: 'launchPointInputFieldText',\n value: launchPointInputFieldText,\n changeHandler: setLaunchPointInputFieldText,\n },\n ],\n },\n ];\n\n return (\n \n \n }\n aria-controls=\"panel-alme-launch-point-config-tool-content\"\n id=\"panel-alme-launch-point-config-tool-header\"\n >\n Alme Launch Point Config Tools\n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default withStyles(launchPointStyles)(AlmeLaunchPointConfigTool);\n","import React from 'react';\n\nimport { AlmeCloseIconConfig } from './AlmeCloseIconConfig';\nimport AlmeConfigFormControl, { BoolPropTypes, ConfigControlGroups } from '../AlmeConfigFormControl/AlmeConfigFormControl';\nimport { SvgIconProps } from '@material-ui/core';\n\ninterface AlmeCloseIconConfigToolProps {\n almeConfig: AlmeCloseIconConfig;\n onConfigChange: (almeConfig: AlmeCloseIconConfig) => void;\n}\n\nconst AlmeCloseIconConfigTool: React.FC = (props: AlmeCloseIconConfigToolProps) => {\n const isEnabled = props.almeConfig.closeIcon.isCloseEnabled.toString() as BoolPropTypes;\n const closeButtonSize = props.almeConfig.closeIcon.styles.buttonSize;\n\n const setIsEnabled = (event: React.ChangeEvent) => {\n const newValue = (event.target as HTMLInputElement).value;\n const almeConfig = props.almeConfig;\n almeConfig.closeIcon.isCloseEnabled = newValue === 'true';\n props.onConfigChange(almeConfig);\n };\n\n const setCloseButtonSize = (event: React.ChangeEvent) => {\n const newValue = (event.target as HTMLInputElement).value as SvgIconProps['fontSize'];\n const almeConfig = props.almeConfig;\n almeConfig.closeIcon.styles.buttonSize = newValue;\n props.onConfigChange(almeConfig);\n };\n\n const configControls: ConfigControlGroups[] = [\n {\n name: 'Close Icon',\n controlGroups: [\n {\n label: 'Is Enabled',\n name: 'isEnabled',\n value: isEnabled,\n changeHandler: setIsEnabled,\n radioButtons: ['true', 'false'],\n },\n {\n label: 'Close Button Size',\n name: 'closeButtonSize',\n value: closeButtonSize,\n changeHandler: setCloseButtonSize,\n radioButtons: [\"small\", \"inherit\", \"default\", \"large\"],\n },\n ],\n },\n ];\n\n return (\n \n );\n};\n\nexport default AlmeCloseIconConfigTool;\n","import React from 'react';\n\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\n\nimport {\n Theme, Accordion, AccordionDetails, AccordionSummary,\n Typography, Container, Box,\n} from '@material-ui/core';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport { AlmeCloseConfig } from './AlmeCloseConfig';\nimport { AlmeCloseIconConfig } from '../AlmeCloseIcon/AlmeCloseIconConfig';\nimport AlmeCloseIconConfigTool from '../AlmeCloseIcon/AlmeCloseIconConfigTool';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n },\n }),\n);\n\ninterface AlmeCloseConfigToolProps {\n almeConfig: AlmeCloseConfig;\n onConfigChange: (almeConfig: AlmeCloseConfig) => void;\n}\n\nconst AlmeCloseConfigTool: React.FC = (props: AlmeCloseConfigToolProps) => {\n const classes = useStyles();\n\n const onCloseIconConfigChance = (closeIconConfig: AlmeCloseIconConfig): void => {\n const closeConfig: AlmeCloseConfig = {\n close: {\n ...props.almeConfig.close,\n closeIcon: {\n ...closeIconConfig.closeIcon,\n },\n },\n };\n props.onConfigChange(closeConfig);\n };\n\n return (\n \n \n }\n aria-controls=\"panel-alme-close-config-tool-content\"\n id=\"panel-alme-close-config-tool-header\"\n >\n Alme Close Config Tools\n \n \n \n \n \n \n \n \n );\n};\n\nexport default AlmeCloseConfigTool;","import React from 'react';\n\nimport { AlmeMinimizeConfig } from './AlmeMinimizeConfig';\nimport AlmeConfigFormControl, { BoolPropTypes, ConfigControlGroups } from '../AlmeConfigFormControl/AlmeConfigFormControl';\nimport { SvgIconProps } from '@material-ui/core';\n\ninterface AlmeMinimizeConfigToolProps {\n almeConfig: AlmeMinimizeConfig;\n onConfigChange: (almeConfig: AlmeMinimizeConfig) => void;\n}\n\nconst AlmeMinimizeConfigTool: React.FC = (props: AlmeMinimizeConfigToolProps) => {\n const isEnabled = props.almeConfig.minimize.isMinimizeEnabled.toString() as BoolPropTypes;\n const minimizeButtonSize = props.almeConfig.minimize.styles.buttonSize;\n\n const setIsEnabled = (event: React.ChangeEvent) => {\n const newValue = (event.target as HTMLInputElement).value;\n const almeConfig = props.almeConfig;\n almeConfig.minimize.isMinimizeEnabled = newValue === 'true';\n props.onConfigChange(almeConfig);\n };\n\n const setMinimizeButtonSize = (event: React.ChangeEvent) => {\n const newValue = (event.target as HTMLInputElement).value as SvgIconProps['fontSize'];\n const almeConfig = props.almeConfig;\n almeConfig.minimize.styles.buttonSize = newValue;\n props.onConfigChange(almeConfig);\n };\n\n const configControls: ConfigControlGroups[] = [\n {\n name: 'Minimize Button',\n controlGroups: [\n {\n label: 'Is Enabled',\n name: 'isEnabled',\n value: isEnabled,\n changeHandler: setIsEnabled,\n radioButtons: ['true', 'false'],\n },\n {\n label: 'Minimize Button Size',\n name: 'minimizeButtonSize',\n value: minimizeButtonSize,\n changeHandler: setMinimizeButtonSize,\n radioButtons: [\"small\", \"inherit\", \"default\", \"large\"],\n },\n ],\n },\n ];\n\n return (\n \n );\n};\n\nexport default AlmeMinimizeConfigTool;\n","import React from 'react';\n\nimport moreMenuStyles from './AlmeMoreMenu.styles';\n\nimport { withStyles, WithStyles } from '@material-ui/core/styles';\n\nimport { AlmeMoreMenuConfig } from './AlmeMoreMenuConfig';\nimport AlmeConfigFormControl, { BoolPropTypes, ConfigControlGroups } from '../AlmeConfigFormControl/AlmeConfigFormControl';\n\ninterface AlmeMoreMenuConfigToolProps extends WithStyles {\n almeConfig: AlmeMoreMenuConfig;\n onConfigChange: (almeConfig: AlmeMoreMenuConfig) => void;\n}\n\nconst AlmeAlmeMoreMenuConfigTool: React.FC = (props: AlmeMoreMenuConfigToolProps) => {\n const isEmailTranscriptEnabled = props.almeConfig.moreMenu.isEmailTranscriptEnabled.toString() as BoolPropTypes;\n\n const setIsEmailTranscriptEnabled = (event: React.ChangeEvent) => {\n const newValue = (event.target as HTMLInputElement).value;\n const almeConfig = props.almeConfig;\n almeConfig.moreMenu.isEmailTranscriptEnabled = newValue === 'true';\n props.onConfigChange(almeConfig);\n };\n\n const configControls: ConfigControlGroups[] = [\n {\n name: 'More Menu',\n controlGroups: [\n {\n label: 'Is Email Transcript Enabled',\n name: 'isEmailTranscriptEnabled',\n value: isEmailTranscriptEnabled,\n changeHandler: setIsEmailTranscriptEnabled,\n radioButtons: ['true', 'false'],\n },\n ],\n },\n ];\n\n return (\n \n );\n};\n\nexport default withStyles(moreMenuStyles)(AlmeAlmeMoreMenuConfigTool);\n","import React from 'react';\n\nimport headerStyles from './AlmeHeader.styles';\n\nimport { withStyles, WithStyles, makeStyles, createStyles } from '@material-ui/core/styles';\n\nimport {\n Theme, Accordion, AccordionDetails, AccordionSummary,\n Typography, Container, Box, TypographyProps,\n} from '@material-ui/core';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport { AlmeHeaderConfig } from './AlmeHeaderConfig';\nimport { AlmeCloseConfig } from '../AlmeClose/AlmeCloseConfig';\nimport { AlmeMinimizeConfig } from '../AlmeMinimize/AlmeMinimizeConfig';\nimport AlmeCloseConfigTool from '../AlmeClose/AlmeCloseConfigTool';\nimport AlmeMinimizeConfigTool from '../AlmeMinimize/AlmeMinimizeConfigTool';\nimport AlmeMoreMenuConfigTool from '../AlmeMoreMenu/AlmeMoreMenuConfigTool';\nimport { AlmeMoreMenuConfig } from '../AlmeMoreMenu/AlmeMoreMenuConfig';\nimport AlmeConfigFormControl, { BoolPropTypes, ConfigControlGroups } from '../AlmeConfigFormControl/AlmeConfigFormControl';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n },\n }),\n);\n\ninterface AlmeHeaderConfigToolProps extends WithStyles {\n almeConfig: AlmeHeaderConfig;\n onConfigChange: (almeConfig: AlmeHeaderConfig) => void;\n}\n\nconst AlmeHeaderConfigTool: React.FC = (props: AlmeHeaderConfigToolProps) => {\n const classes = useStyles();\n\n const onMinimizeConfigChange = (minimizeConfig: AlmeMinimizeConfig): void => {\n const headerConfig: AlmeHeaderConfig = {\n header: {\n ...props.almeConfig.header,\n minimize: {\n ...minimizeConfig.minimize,\n },\n },\n };\n props.onConfigChange(headerConfig);\n };\n\n const onCloseConfigChance = (closeConfig: AlmeCloseConfig): void => {\n const headerConfig: AlmeHeaderConfig = {\n header: {\n ...props.almeConfig.header,\n close: {\n ...closeConfig.close,\n },\n },\n };\n props.onConfigChange(headerConfig);\n };\n\n const onMoreMenuConfigChange = (moreConfig: AlmeMoreMenuConfig): void => {\n const headerConfig: AlmeHeaderConfig = {\n header: {\n ...props.almeConfig.header,\n moreMenu: {\n ...moreConfig.moreMenu,\n },\n },\n };\n props.onConfigChange(headerConfig);\n };\n\n const headerHasBorder = props.almeConfig.header.styles.hasBorder.toString() as BoolPropTypes;\n const headerTextFont = props.almeConfig.header.styles.headerTextFont;\n\n const setHeaderHasBorder = (event: React.ChangeEvent) => {\n const newValue = (event.target as HTMLInputElement).value as BoolPropTypes;\n const almeConfig = props.almeConfig;\n almeConfig.header.styles.hasBorder = newValue === 'true';\n props.onConfigChange(almeConfig);\n };\n\n const setHeaderTextFont = (event: React.ChangeEvent) => {\n const newValue = (event.target as HTMLInputElement).value as TypographyProps['variant'];\n const almeConfig = props.almeConfig;\n almeConfig.header.styles.headerTextFont = newValue;\n props.onConfigChange(almeConfig);\n };\n\n const configControls: ConfigControlGroups[] = [\n {\n name: 'Header',\n controlGroups: [\n {\n label: 'Header Border',\n name: 'headerHasBorder',\n value: headerHasBorder,\n changeHandler: setHeaderHasBorder,\n radioButtons: ['true', 'false'],\n },\n {\n label: 'Header Text Font',\n name: 'headerTextFont',\n value: headerTextFont,\n changeHandler: setHeaderTextFont,\n radioButtons: [\"button\", \"caption\", \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\", \"inherit\", \"subtitle1\", \"subtitle2\", \"body1\", \"body2\", \"overline\", \"srOnly\"],\n },\n ],\n },\n ];\n\n return (\n \n \n }\n aria-controls=\"panel-alme-header-config-tool-content\"\n id=\"panel-alme-header-config-tool-header\"\n >\n Alme Header Config Tools\n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default withStyles(headerStyles)(AlmeHeaderConfigTool);","import React from 'react';\n\nimport responseStyles from '../AlmeResponse.styles';\n\nimport { withStyles, WithStyles } from '@material-ui/core/styles';\n\nimport { ButtonProps } from '@material-ui/core';\nimport AlmeConfigFormControl, { ConfigControlGroups } from '../../AlmeConfigFormControl/AlmeConfigFormControl';\nimport { AlmeIvaResponseConfig } from './AlmeIvaResponseConfig';\n\ninterface AlmeIvaResponseConfigToolProps extends WithStyles {\n almeConfig: AlmeIvaResponseConfig;\n onConfigChange: (almeConfig: AlmeIvaResponseConfig) => void;\n}\n\nconst AlmeIvaResponseConfigTool: React.FC = (props: AlmeIvaResponseConfigToolProps) => {\n const displayLinkColor = props.almeConfig.ivaResponse.styles.displayLink.color;\n const displayLinkVariant = props.almeConfig.ivaResponse.styles.displayLink.variant;\n const navUrlColor = props.almeConfig.ivaResponse.styles.navUrl.color;\n const navUrlVariant = props.almeConfig.ivaResponse.styles.navUrl.variant;\n\n const setDisplayLinkColor = (event: React.ChangeEvent) => {\n const newValue = (event.target as HTMLInputElement).value as ButtonProps['color'];\n const almeConfig = props.almeConfig;\n almeConfig.ivaResponse.styles.displayLink.color = newValue;\n props.onConfigChange(almeConfig);\n };\n\n const setDisplayLinkVariant = (event: React.ChangeEvent) => {\n const newValue = (event.target as HTMLInputElement).value as ButtonProps['variant'];\n const almeConfig = props.almeConfig;\n almeConfig.ivaResponse.styles.displayLink.variant = newValue;\n props.onConfigChange(almeConfig);\n };\n\n const setNavUrlColor = (event: React.ChangeEvent) => {\n const newValue = (event.target as HTMLInputElement).value as ButtonProps['color'];\n const almeConfig = props.almeConfig;\n almeConfig.ivaResponse.styles.navUrl.color = newValue;\n props.onConfigChange(almeConfig);\n };\n\n const setNavUrlVariant = (event: React.ChangeEvent) => {\n const newValue = (event.target as HTMLInputElement).value as ButtonProps['variant'];\n const almeConfig = props.almeConfig;\n almeConfig.ivaResponse.styles.navUrl.variant = newValue;\n props.onConfigChange(almeConfig);\n };\n\n const configControls: ConfigControlGroups[] = [\n {\n name: 'Display Link',\n controlGroups: [\n {\n label: 'Display Link Color',\n name: 'displayLinkColor',\n value: displayLinkColor,\n changeHandler: setDisplayLinkColor,\n radioButtons: ['inherit', 'default', 'primary', 'secondary'],\n },\n {\n label: 'Display Link Variant',\n name: 'displayLinkVariant',\n value: displayLinkVariant,\n changeHandler: setDisplayLinkVariant,\n radioButtons: ['text', 'outlined', 'contained'],\n },\n ],\n },\n {\n name: 'Nav Url',\n controlGroups: [\n {\n label: 'Nav Url Color',\n name: 'navUrlColor',\n value: navUrlColor,\n changeHandler: setNavUrlColor,\n radioButtons: ['inherit', 'default', 'primary', 'secondary'],\n },\n {\n label: 'Nav Url Variant',\n name: 'navUrlVariant',\n value: navUrlVariant,\n changeHandler: setNavUrlVariant,\n radioButtons: ['text', 'outlined', 'contained'],\n },\n ],\n },\n ];\n\n return (\n \n );\n};\n\nexport default withStyles(responseStyles)(AlmeIvaResponseConfigTool);\n","import React from 'react';\n\nimport liveChatOperatorResponseStyles from './AlmeLiveChatOperatorResponse.styles';\n\nimport { withStyles, WithStyles } from '@material-ui/core/styles';\n\nimport { ButtonProps } from '@material-ui/core';\nimport AlmeConfigFormControl, { ConfigControlGroups } from '../../../AlmeConfigFormControl/AlmeConfigFormControl';\nimport { AlmeLiveChatOperatorResponseConfig } from './AlmeLiveChatOperatorResponseConfig';\n\ninterface AlmeLiveChatOperatorResponseConfigToolProps extends WithStyles {\n almeConfig: AlmeLiveChatOperatorResponseConfig;\n onConfigChange: (almeConfig: AlmeLiveChatOperatorResponseConfig) => void;\n}\n\nconst AlmeLiveChatOperatorResponseConfigTool: React.FC = (props: AlmeLiveChatOperatorResponseConfigToolProps) => {\n const displayLinkColor = props.almeConfig.liveChatOperatorResponse.styles.displayLink.color;\n const displayLinkVariant = props.almeConfig.liveChatOperatorResponse.styles.displayLink.variant;\n const navUrlColor = props.almeConfig.liveChatOperatorResponse.styles.navUrl.color;\n const navUrlVariant = props.almeConfig.liveChatOperatorResponse.styles.navUrl.variant;\n\n const setDisplayLinkColor = (event: React.ChangeEvent) => {\n const newValue = (event.target as HTMLInputElement).value as ButtonProps['color'];\n const almeConfig = props.almeConfig;\n almeConfig.liveChatOperatorResponse.styles.displayLink.color = newValue;\n props.onConfigChange(almeConfig);\n };\n\n const setDisplayLinkVariant = (event: React.ChangeEvent) => {\n const newValue = (event.target as HTMLInputElement).value as ButtonProps['variant'];\n const almeConfig = props.almeConfig;\n almeConfig.liveChatOperatorResponse.styles.displayLink.variant = newValue;\n props.onConfigChange(almeConfig);\n };\n\n const setNavUrlColor = (event: React.ChangeEvent) => {\n const newValue = (event.target as HTMLInputElement).value as ButtonProps['color'];\n const almeConfig = props.almeConfig;\n almeConfig.liveChatOperatorResponse.styles.navUrl.color = newValue;\n props.onConfigChange(almeConfig);\n };\n\n const setNavUrlVariant = (event: React.ChangeEvent) => {\n const newValue = (event.target as HTMLInputElement).value as ButtonProps['variant'];\n const almeConfig = props.almeConfig;\n almeConfig.liveChatOperatorResponse.styles.navUrl.variant = newValue;\n props.onConfigChange(almeConfig);\n };\n\n const configControls: ConfigControlGroups[] = [\n {\n name: 'Display Link',\n controlGroups: [\n {\n label: 'Display Link Color',\n name: 'displayLinkColor',\n value: displayLinkColor,\n changeHandler: setDisplayLinkColor,\n radioButtons: ['inherit', 'default', 'primary', 'secondary'],\n },\n {\n label: 'Display Link Variant',\n name: 'displayLinkVariant',\n value: displayLinkVariant,\n changeHandler: setDisplayLinkVariant,\n radioButtons: ['text', 'outlined', 'contained'],\n },\n ],\n },\n {\n name: 'Nav Url',\n controlGroups: [\n {\n label: 'Nav Url Color',\n name: 'navUrlColor',\n value: navUrlColor,\n changeHandler: setNavUrlColor,\n radioButtons: ['inherit', 'default', 'primary', 'secondary'],\n },\n {\n label: 'Nav Url Variant',\n name: 'navUrlVariant',\n value: navUrlVariant,\n changeHandler: setNavUrlVariant,\n radioButtons: ['text', 'outlined', 'contained'],\n },\n ],\n },\n ];\n\n return (\n \n );\n};\n\nexport default withStyles(liveChatOperatorResponseStyles)(AlmeLiveChatOperatorResponseConfigTool);\n","import React from 'react';\n\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\n\nimport {\n Theme, Accordion, AccordionDetails, AccordionSummary,\n Typography, Container, Box,\n} from '@material-ui/core';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport { AlmeLiveChatResponseConfig } from './AlmeLiveChatResponseConfig';\nimport { AlmeLiveChatOperatorResponseConfig } from './AlmeLiveChatOperatorResponse/AlmeLiveChatOperatorResponseConfig';\nimport AlmeLiveChatOperatorResponseConfigTool from './AlmeLiveChatOperatorResponse/AlmeLiveChatOperatorResponseConfigTool';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n },\n }),\n);\n\ninterface AlmeLiveChatResponseConfigToolProps {\n almeConfig: AlmeLiveChatResponseConfig;\n onConfigChange: (almeConfig: AlmeLiveChatResponseConfig) => void;\n}\n\nconst AlmeLiveChatResponseConfigTool: React.FC = (props: AlmeLiveChatResponseConfigToolProps) => {\n const classes = useStyles();\n\n const onLiveChatOperatorResponseConfigChance = (operatorResponseConfig: AlmeLiveChatOperatorResponseConfig): void => {\n const liveChatResponseConfig: AlmeLiveChatResponseConfig = {\n liveChatResponse: {\n ...props.almeConfig.liveChatResponse,\n liveChatOperatorResponse: {\n ...operatorResponseConfig.liveChatOperatorResponse,\n },\n },\n };\n props.onConfigChange(liveChatResponseConfig);\n };\n\n return (\n \n \n }\n aria-controls=\"panel-alme-live-chat-response-config-tool-content\"\n id=\"panel-alme-live-chat-response-config-tool-header\"\n >\n Alme Live Chat Response Config Tools\n \n \n \n \n \n \n \n \n );\n};\n\nexport default AlmeLiveChatResponseConfigTool;","import React from 'react';\n\nimport scrollButtonStyles from './AlmeScrollButton.styles';\n\nimport { withStyles, WithStyles } from '@material-ui/core/styles';\n\nimport { ButtonProps } from '@material-ui/core';\nimport AlmeConfigFormControl, { ConfigControlGroups } from '../AlmeConfigFormControl/AlmeConfigFormControl';\nimport { AlmeScrollButtonConfig } from './AlmeScrollButtonConfig';\n\ninterface AlmeScrollButtonConfigToolProps extends WithStyles {\n almeConfig: AlmeScrollButtonConfig;\n onConfigChange: (almeConfig: AlmeScrollButtonConfig) => void;\n}\n\nconst AlmeScrollButtonConfigTool: React.FC = (props: AlmeScrollButtonConfigToolProps) => {\n const scrollButtonColor = props.almeConfig.scrollButton.styles.color;\n const scrollButtonVariant = props.almeConfig.scrollButton.styles.variant;\n\n const setScrollButtonColor = (event: React.ChangeEvent) => {\n const newValue = (event.target as HTMLInputElement).value as ButtonProps['color'];\n const almeConfig = props.almeConfig;\n almeConfig.scrollButton.styles.color = newValue;\n props.onConfigChange(almeConfig);\n };\n\n const setScrollButtonVariant = (event: React.ChangeEvent) => {\n const newValue = (event.target as HTMLInputElement).value as ButtonProps['variant'];\n const almeConfig = props.almeConfig;\n almeConfig.scrollButton.styles.variant = newValue;\n props.onConfigChange(almeConfig);\n };\n\n const configControls: ConfigControlGroups[] = [\n {\n name: 'Scroll Button',\n controlGroups: [\n {\n label: 'Scroll Button Color',\n name: 'scrollButtonColor',\n value: scrollButtonColor,\n changeHandler: setScrollButtonColor,\n radioButtons: ['inherit', 'default', 'primary', 'secondary'],\n },\n {\n label: 'Scroll Button Variant',\n name: 'scrollButtonVariant',\n value: scrollButtonVariant,\n changeHandler: setScrollButtonVariant,\n radioButtons: ['text', 'outlined', 'contained'],\n },\n ],\n },\n ];\n\n return (\n \n );\n};\n\nexport default withStyles(scrollButtonStyles)(AlmeScrollButtonConfigTool);\n","import React from 'react';\n\nimport historyStyles from './AlmeHistory.styles';\n\nimport { withStyles, WithStyles, makeStyles, createStyles } from '@material-ui/core/styles';\n\nimport {\n Theme, Accordion, AccordionDetails, AccordionSummary,\n Typography, Container, Box,\n} from '@material-ui/core';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport { AlmeHistoryConfig } from './AlmeHistoryConfig';\nimport { AlmeScrollButtonConfig } from '../AlmeScrollButton/AlmeScrollButtonConfig';\nimport { AlmeLiveChatResponseConfig } from '../LiveChat/AlmeLiveChatResponse/AlmeLiveChatResponseConfig';\nimport AlmeResponseConfigTool from '../AlmeResponse/AlmeIvaResponse/AlmeIvaResponseConfigTool';\nimport AlmeLiveChatResponseConfigTool from '../LiveChat/AlmeLiveChatResponse/AlmeLiveChatResponseConfigTool';\nimport AlmeScrollButtonConfigTool from '../AlmeScrollButton/AlmeScrollButtonConfigTool';\nimport { AlmeIvaResponseConfig } from '../AlmeResponse/AlmeIvaResponse/AlmeIvaResponseConfig';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n },\n }),\n);\n\ninterface AlmeHistoryConfigToolProps extends WithStyles {\n almeConfig: AlmeHistoryConfig;\n onConfigChange: (almeConfig: AlmeHistoryConfig) => void;\n}\n\nconst AlmeHistoryConfigTool: React.FC = (props: AlmeHistoryConfigToolProps) => {\n const classes = useStyles();\n\n const onResponseConfigChange = (ivaResponseConfig: AlmeIvaResponseConfig): void => {\n const historyConfig: AlmeHistoryConfig = {\n history: {\n ...props.almeConfig.history,\n response: {\n ...props.almeConfig.history.response,\n ivaResponse: {\n ...ivaResponseConfig.ivaResponse,\n },\n },\n },\n };\n props.onConfigChange(historyConfig);\n };\n\n const onScrollButtonConfigChange = (scrollButtonConfig: AlmeScrollButtonConfig): void => {\n const historyConfig: AlmeHistoryConfig = {\n history: {\n ...props.almeConfig.history,\n scrollButton: {\n ...scrollButtonConfig.scrollButton,\n },\n },\n };\n props.onConfigChange(historyConfig);\n };\n\n const onLiveChatResponseConfigChance = (liveChatResponseConfig: AlmeLiveChatResponseConfig): void => {\n const historyConfig: AlmeHistoryConfig = {\n history: {\n ...props.almeConfig.history,\n liveChatResponse: {\n ...liveChatResponseConfig.liveChatResponse,\n },\n },\n };\n props.onConfigChange(historyConfig);\n };\n\n return (\n \n \n }\n aria-controls=\"panel-alme-history-config-tool-content\"\n id=\"panel-alme-history-config-tool-header\"\n >\n Alme History Config Tools\n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default withStyles(historyStyles)(AlmeHistoryConfigTool);","import React from 'react';\n\nimport appStyles from './AlmeApp.styles';\n\nimport { withStyles, WithStyles, makeStyles, createStyles } from '@material-ui/core/styles';\nimport { AlmeConfig } from '../../models/AlmeConfig';\n\nimport {\n Theme, Accordion, AccordionDetails, AccordionSummary,\n Typography, Container, Box,\n} from '@material-ui/core';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport AlmeFooterConfigTool from '../AlmeFooter/AlmeFooterConfigTool';\nimport { AlmeFooterConfig } from '../AlmeFooter/AlmeFooterConfig';\nimport AlmeLaunchPointConfigTool from '../AlmeLaunchPoint/AlmeLaunchPointConfigTool';\nimport { AlmeLaunchPointConfig } from '../AlmeLaunchPoint/AlmeLaunchPointConfig';\nimport AlmeHeaderConfigTool from '../AlmeHeader/AlmeHeaderConfigTool';\nimport { AlmeHeaderConfig } from '../AlmeHeader/AlmeHeaderConfig';\nimport { AlmeHistoryConfig } from '../AlmeHistory/AlmeHistoryConfig';\nimport AlmeHistoryConfigTool from '../AlmeHistory/AlmeHistoryConfigTool';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n width: '60%',\n },\n }),\n);\n\ninterface AlmeFooterProps extends WithStyles {\n almeConfig: AlmeConfig;\n setConfigState: (almeConfig: AlmeConfig) => void;\n}\n\nconst AlmeAppConfigTool: React.FC = (props: AlmeFooterProps) => {\n const classes = useStyles();\n\n const onHeaderConfigChange = (headerConfig: AlmeHeaderConfig): void => {\n const almeConfig: AlmeConfig = {\n ...props.almeConfig,\n header: {\n ...headerConfig.header,\n },\n };\n props.setConfigState(almeConfig);\n };\n\n const onHistoryConfigChange = (headerConfig: AlmeHistoryConfig): void => {\n const almeConfig: AlmeConfig = {\n ...props.almeConfig,\n history: {\n ...headerConfig.history,\n },\n };\n props.setConfigState(almeConfig);\n };\n\n const onFooterConfigChange = (footerConfig: AlmeFooterConfig): void => {\n const almeConfig: AlmeConfig = {\n ...props.almeConfig,\n footer: {\n ...footerConfig.footer,\n },\n };\n props.setConfigState(almeConfig);\n };\n\n const onLaunchPointConfigChange = (launchConfig: AlmeLaunchPointConfig): void => {\n const almeConfig: AlmeConfig = {\n ...props.almeConfig,\n launchPoint: {\n ...launchConfig.launchPoint,\n },\n };\n props.setConfigState(almeConfig);\n };\n\n return (\n \n \n }\n aria-controls=\"panel-alme-app-config-tool-content\"\n id=\"panel-alme-app-config-tool-header\"\n >\n Alme App Config Tools\n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default withStyles(appStyles)(AlmeAppConfigTool);","import React, { ReactElement } from 'react';\nimport {\n Avatar, Paper, Table, TableBody, TableCell, TableContainer,\n TableHead, TableRow, AccordionDetails, AccordionSummary, Accordion, Typography,\n} from '@material-ui/core';\nimport { convertToHex } from '../../utils/ColorUtils';\nimport { createStyles, makeStyles, useTheme } from '@material-ui/core/styles';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport { AlmeConfig } from '../../models/AlmeConfig';\n\nconst useStyles = makeStyles(() =>\n createStyles({\n root: {\n width: '60%',\n },\n }),\n);\n\ninterface AlmeIconColorToolProps {\n almeConfig: AlmeConfig;\n names?: string[];\n}\n\nexport default function AlmeIconColorTool(props: AlmeIconColorToolProps): ReactElement {\n const classes = useStyles();\n const theme = useTheme();\n\n const names = props.names || [\n \"Rachel Green\",\n \"Joey Tribbiani\",\n \"Ross Geller\",\n \"Monica Geller\",\n \"Ben Geller\",\n \"Emma Geller-Green\",\n \"Chandler Bing\",\n \"Phoebe Buffay\",\n \"Ursula Buffay\",\n \"Janice Hosenstein\",\n \"Gunther\",\n \"Richard Burke\",\n \"Kathy\",\n \"Emily Waltham\",\n \"Sarah Tuttle\",\n \"Jill Green\",\n \"Charlie Wheeler\",\n ];\n\n let defaultIcon = props.almeConfig.history.liveChatResponse.liveChatOperatorResponse.chatIcon;\n if (defaultIcon) {\n defaultIcon = React.cloneElement(defaultIcon, { alt: 'Default', title: 'Default' });\n }\n\n return (\n
\n \n }\n aria-controls=\"panel-icon-color-tool-content\"\n id=\"panel-icon-color-tool-header\"\n >\n Icon Colors\n \n \n \n \n \n \n Name\n Color Code Hex\n \n \n \n \n Default Icon\n \n {defaultIcon}\n \n \n {names.map((name, i) => {\n const colorCodeHex = theme.palette.augmentColor({ main: convertToHex(name) });\n return (\n \n \n {name}\n \n \n {name.charAt(0)}\n \n \n );\n })}\n \n
\n
\n
\n
\n
\n );\n}","import React, { ReactElement } from 'react';\nimport { Theme, Container, Typography } from '@material-ui/core';\nimport { createStyles, makeStyles } from '@material-ui/core/styles';\nimport AlmeThemeModeToggle from '../AlmeThemeModeToggle/AlmeThemeModeToggle';\nimport AlmeThemeSelector from '../AlmeThemeSelector/AlmeThemeSelector';\nimport AlmePaletteTool from './AlmePaletteTool/AlmePaletteTool';\nimport AlmeThemeTool from './AlmeThemeTool/AlmeThemeTool';\nimport AlmeAppConfigTool from '../AlmeApp/AlmeAppConfigTool';\nimport AlmeIconColorTool from '../AlmeIconColorTool/AlmeIconColorTool';\nimport { AlmeTheme, AlmeThemeMode } from '../../models/AlmeTheme';\nimport { AlmeConfig } from '../../models/AlmeConfig';\n\nconst useStyles = makeStyles(({ palette, spacing }: Theme) =>\n createStyles({\n root: {\n border: `solid 1px ${palette.divider}`,\n padding: spacing(1),\n },\n }),\n);\n\ninterface AlmeStyleToolsProps {\n theme: AlmeTheme;\n themeMode: AlmeThemeMode;\n almeConfig: AlmeConfig;\n setTheme: (theme: AlmeTheme) => void;\n setThemeMode: (themeMode: AlmeThemeMode) => void;\n setConfig: (config: AlmeConfig) => void;\n}\n\nexport default function AlmeStyleTools(props: AlmeStyleToolsProps): ReactElement {\n const classes = useStyles();\n\n return (\n \n Style Tools\n \n
\n \n
\n \n
\n \n
\n \n
\n \n
\n );\n}","import React, { Dispatch, SetStateAction } from 'react';\nimport { List, ListItem, ListItemText, Menu, MenuItem, Theme, Typography } from '@material-ui/core';\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\nimport personaMappingJson from '../../personas/personaMapping.json';\n\n\ninterface AlmeTenantMenuProps {\n setAccessKey: Dispatch>;\n}\n\nconst useStyles = makeStyles(({ palette, spacing }: Theme) =>\n createStyles({\n root: {\n padding: spacing(1),\n },\n menu: {\n width: '60%',\n backgroundColor: palette.background.paper,\n },\n }),\n);\n\nconst personaNames = personaMappingJson.map(persona => persona.name);\n\nconst AlmeTenantMenu: React.FC = (props: AlmeTenantMenuProps) => {\n const classes = useStyles();\n const [anchorEl, setAnchorEl] = React.useState(null);\n const [selectedIndex, setSelectedIndex] = React.useState(0);\n\n const handleClickListItem = (event: React.MouseEvent) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleMenuItemClick = (event: React.MouseEvent, index: number) => {\n setSelectedIndex(index);\n setAnchorEl(null);\n const selectedPersona = personaMappingJson.find(persona => persona.name === personaMappingJson[index].name);\n if (selectedPersona?.verintAccessKey) {\n props.setAccessKey(selectedPersona.verintAccessKey);\n }\n };\n\n const handleClose = () => {\n setAnchorEl(null);\n };\n\n return (\n
\n Select access key from dropdown menu (must use Launch IVA button)\n
\n \n \n \n \n \n \n {personaNames.map((option, index) => (\n handleMenuItemClick(event, index)}\n >\n {option}\n \n ))}\n \n
\n
\n );\n};\n\nexport default AlmeTenantMenu;\n","import React from 'react';\nimport { Button, List, ListItem, ListItemText, Menu, MenuItem, Theme, Typography } from '@material-ui/core';\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\n\nconst useStyles = makeStyles(({ palette, spacing }: Theme) =>\n createStyles({\n root: {\n padding: spacing(1),\n },\n menu: {\n width: '60%',\n backgroundColor: palette.background.paper,\n },\n languageMenu: {\n display: 'flex',\n },\n }),\n);\n\n// Update this array with names of multi-language test pages\nconst languages = ['English', 'Spanish'];\n\nconst AlmeLanguageMenu: React.FC = () => {\n const selectedLanguageIndex = languages.indexOf(languages.find(lang => window.location.pathname.includes(lang)) ?? 'English');\n const classes = useStyles();\n const [anchorEl, setAnchorEl] = React.useState(null);\n const [selectedIndex, setSelectedIndex] = React.useState(selectedLanguageIndex);\n\n const handleClickListItem = (event: React.MouseEvent) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleMenuItemClick = (event: React.MouseEvent, index: number) => {\n setSelectedIndex(index);\n setAnchorEl(null);\n };\n\n const navigate = () => {\n const selectedLanguage = languages[selectedIndex];\n const baseUrl = window.location.href.substr(0, window.location.href.lastIndexOf('/'));\n let navUrl = baseUrl + `/${selectedLanguage}.html`;\n if (selectedLanguage === 'English')\n navUrl = baseUrl;\n window.open(navUrl, '_self');\n };\n\n const handleClose = () => {\n setAnchorEl(null);\n };\n\n return (\n
\n Select language and click button to update page\n
\n
\n \n \n \n \n \n \n {languages.map((option, index) => (\n handleMenuItemClick(event, index)}\n >\n {option}\n \n ))}\n \n
\n
\n Update\n
\n
\n
\n );\n};\n\nexport default AlmeLanguageMenu;\n","import React, { ReactElement, useState } from 'react';\n\nimport { Theme, Container, Typography, Button } from '@material-ui/core';\nimport { createStyles, makeStyles } from '@material-ui/core/styles';\n\nimport AlmeInput from '../AlmeInput/AlmeInput';\nimport { AlmeLaunchIvaMessageEventData } from '@alme/post-message-api/AlmeLaunchIvaMessageEventData';\nimport AlmeTenantMenu from './AlmeTenantMenu';\nimport { defaultAccessKey } from '../../utils/PersonaUtils';\nimport { AlmeLaunchToolsConfig } from './AlmeLaunchToolsConfig';\nimport AlmeLanguageMenu from '../AlmeTestPage/AlmeLanguageMenu/AlmeLanguageMenu';\n\nconst useStyles = makeStyles(({ palette, spacing }: Theme) =>\n createStyles({\n root: {\n border: `solid 1px ${palette.divider}`,\n padding: spacing(1),\n },\n }),\n);\n\ninterface AlmeLaunchToolsProps {\n almeConfig: AlmeLaunchToolsConfig;\n}\n\nexport default function AlmeLaunchTools(props: AlmeLaunchToolsProps): ReactElement {\n const classes = useStyles();\n const [accessKey, setAccessKey] = useState(defaultAccessKey);\n\n const onSendPostMessage = (input?: string) => {\n if (accessKey === defaultAccessKey) {\n const data = {\n message: {\n type: \"LaunchIva\",\n source: \"client\",\n launchPointName: \"Global\",\n launchParameter: \"MainPage\",\n accessKey: accessKey,\n },\n } as AlmeLaunchIvaMessageEventData;\n\n if (input && typeof input === 'string') {\n data.message.launchQuestion = input;\n }\n\n window.postMessage(data, window.location.origin);\n }\n else {\n const data = {\n message: {\n type: \"LaunchIva\",\n source: \"client\",\n accessKey: accessKey,\n },\n } as AlmeLaunchIvaMessageEventData;\n\n if (input && typeof input === 'string') {\n data.message.launchQuestion = input;\n }\n\n window.postMessage(data, window.location.origin);\n }\n };\n\n return (\n \n Launch Tools\n { onSendPostMessage(); }}>Launch IVA\n \n \n \n \n );\n}","import { Container, Theme, Typography } from \"@material-ui/core\";\nimport React, { ReactElement, useState } from \"react\";\nimport { createStyles, makeStyles } from \"@material-ui/core/styles\";\n\nconst useStyles = makeStyles(({ palette, spacing }: Theme) =>\n createStyles({\n root: {\n border: `solid 1px ${palette.divider}`,\n padding: spacing(1),\n },\n }),\n);\n\ninterface PostMessageData {\n message: {\n type: string;\n };\n}\n\nexport default function TestAlmePostMessageListener(): ReactElement {\n const classes = useStyles();\n\n const [postMessageValue, setPostMessageValue] = useState(\"No post messages received\");\n\n const handleMinimizeClose = (e: MessageEvent): void => {\n const data = e.data as PostMessageData;\n setPostMessageValue(data?.message?.type ?? \"Post message received but incorrect type\");\n };\n\n window.addEventListener('message', handleMinimizeClose);\n\n return (\n \n PostMessage Listener\n