{"version":3,"sources":["Webchat/hooks/useDruidLocalize.ts","Webchat/components/DruidSendBox.tsx","Webchat/selectors/useContextMenu.ts","Webchat/components/DruidImagesViewer.tsx","Webchat/utils/getUrlParameter.js","Webchat/logics/buildAuthorizationDto.ts","Webchat/hooks/useHandleInitialize.ts","Webchat/components/DruidDocumentViewer.tsx","Webchat/hooks/useCreateBFStore.ts","Webchat/components/DruidActivityStatus.tsx","Webchat/components/ImageAttachmentWrapper.tsx","Webchat/hooks/useButtonsClassesEffect.ts","Webchat/components/HeroCardWrapper.tsx","Webchat/components/ThumbnailCardWrapper.tsx","Webchat/components/DruidActivityCustomTimestamp.tsx","Webchat/utils/arrayUtils.ts","Webchat/components/ConversationHistorySeparator.tsx","Webchat/components/DruidActivityWrapper.tsx","Webchat/hooks/useDruidBFMiddleswares.tsx","Webchat/logics/ignorableActivity.ts","Webchat/components/header/DruidReloadSelector.tsx","Webchat/components/header/DruidResetSelector.tsx","Webchat/components/header/DruidChangeSideSelector.tsx","Webchat/components/header/DruidOptionsContainer.tsx","Webchat/components/header/DruidMinimizeSelector.tsx","Webchat/components/header/DruidCustomButton.tsx","Webchat/components/header/DruidHeader.tsx","Webchat/components/header/DruidIsVoiceInputSelector.tsx","Webchat/components/header/DruidLanguageSelector.tsx","Webchat/selectors/useBotLanguages.ts","Webchat/components/ErrorFallback.tsx","Webchat/WebChat.tsx","Webchat/hooks/useSetDirectLineInstance.ts","Webchat/hooks/useMarkdownIt.ts","Webchat/hooks/useCognitiveServices.ts","Webchat/hooks/useDebounceHideSuggestedActions.ts","Webchat/hooks/useStaticDruidStyleSet.ts"],"names":["useLocalizer","useLanguage","hooks","useDruidLocalize","bfLocalizer","getState","useContext","DruidWebchatContext","locale","currentLanguage","useCallback","code","localization","mergedChatOptions","normalizedLanguage","normalizeLanguage","ret","defaultContextMenuIcon","_ref","size","restylingsEnabled","expanded","concat","DictationInterims","MicrophoneButton","SendButton","SuggestedActions","SendTextBox","UploadButton","Components","useActivities","useDirection","useDictateState","useStyleOptions","useSendMessage","useDisabled","useStyleSet","useWebSpeechPonyfill","useFocus","useSendBoxSpeechInterimsVisible","bfHooks","DictateState","DICTATING","STARTING","Constants","DruidSendBox","connectToWebChat","_ref2","className","druidWebChatState","druidWebChatDispatch","sensitiveDataInputMode","fileUploadInputMode","inputBlocked","hideSendBox","hideUploadButton","sendBoxButtonAlignment","backgroundColor","sendBoxButtonShadeColorOnDisabled","sendBoxBackground","sendBoxHeight","subtle","accent","sendBoxButtonColor","sendBoxButtonColorOnHover","sendBoxButtonShadeColor","sendBoxButtonColorOnFocus","sendBoxDisabledTextColor","sendBoxButtonColorOnDisabled","paddingRegular","fontSizeSmall","UI","emojiPickerEnabled","buttonsTextColor","hideDruidSendBox","blockingInputDruidSendBox","showPoweredBy","hideSuggestedActions","druidSendBoxPaddingLeftRight","druidSendBoxPaddingTop","druidSendBoxPaddingBottom","druidSendBoxTextBoxPadding","druidSendBoxInnerPaddingLeftRight","druidSendBoxInnerPaddingTopBottom","druidSendBoxInnerBorderRadius","sendBoxFontSize","useMergedOptions","sendBox","sendBoxStyleSet","sendBoxTextWrap","sendMessage","contextMenuItems","useContextMenu","SpeechRecognition","direction","disabled","sendBoxValue","setSendBoxValue","useSendBoxValue","localize","druidLocalize","focus","speechInterimsVisible","styleToEmotionObject","useStyleToEmotionObject","activities","lastActivity","useMemo","_activities$filter","filter","act","type","slice","lastBlockingInputActivity","_activities$filter2","inputHint","wcRootRef","useWebChatRefsContext","showSensitiveDataIcon","setShowSensitiveDataIcon","useState","useLayoutEffect","inputElement","querySelector","autocomplete","placeholder","shouldEnter_fileUploadInputMode","useEffect","ToggleSensitiveDataIcon","bsIcons","rootClassName","padding","Math","max","fontSize","flexShrink","flex","margin","display","borderRadius","paddingTop","paddingBottom","paddingRight","paddingLeft","color","float","position","cursor","fill","textAlign","border","alignSelf","marginBlock","width","parseInt","toString","alignItems","justifyContent","boxShadow","outline","marginBottom","height","fontFamily","textTransform","marginLeft","supportSpeechRecognition","buttonClassName","classNames","sendboxRef","useRef","_sendboxRef$current","_sendboxRef$current$q","current","setAttribute","sendBoxTemplate","userInputEnabled","uploadButtonTemplate","_jsx","_Fragment","children","emojiPickerTemplate","_jsxs","Dropdown","role","drop","Toggle","as","DruidEmojiToggle","Menu","style","EmojiPicker","previewConfig","showPreview","skinTonesDisabled","emojiStyle","EmojiStyle","NATIVE","onEmojiClick","emoji","_druidWebChatState$st","_druidWebChatState$st2","store","firstAttachment","attachments","contentType","lastBlockingInputActivity_attachmentType","length","DruidDropdownToggle","map","cmi","idx","React","Fragment","Item","href","onClick","Divider","tabIndex","dir","ref","target","defaultProps","forwardRef","props","v2_contextMenu_icon","sendBoxButton","sendBoxButtonStyleSet","e","preventDefault","title","InlineSVG","src","raw","BsEmojiSmile","useSuggestedActions","useUserID","DruidImagesViewer","forwardedRef","wrapperRef","show","setShow","currentPictureIndex","setCurrentPictureIndex","images","_act$attachments","att","_att$attachments","fAtt","test","flat","useImperativeHandle","notVisibleProps","showNavigationOnTouchDevice","ReactDOM","createPortal","ModalGateway","Modal","onClose","styles","defaults","closeOnBackdropClick","mobileAndTabletcheck","Carousel","hideControlsWhenIdle","currentIndex","container","base","state","navigationPrev","background","navigationNext","view","maxHeight","maxWidth","components","HeaderFullscreen","_images$currentPictur","_images$currentPictur2","_images$currentPictur3","contentUrl","thumbnailUrl","download","name","BsDownload","trackProps","onViewChange","newIndex","views","img","source","document","body","getUrlParameter","replace","results","RegExp","exec","window","location","search","decodeURIComponent","platform","require","useHandleInitialize","async","backendStartTimestamp","moment","utc","currentState","setCommons","authorizeResult","payload","botDto","contextMenuText","contextMenuTranslations","split","f","contextMenuTranslationItems","Object","entries","JSON","parse","reduce","acc","_currentState$botLang","key","value","botLanguages","find","bl","isDefault","_druidWebChatState$di","loaded","INITIALIZATION_STATUS","directlineInstance","directlineOptions","token","localBackendEndTimestamp","conversationId","webSocket","watermark","druidApiUrl","serverTimestamp","domain","druidBotApiUrl","withCredentials","initiatorUserId","initiatorBotId","speechToken","isBotApiEnabled","isOutOfBandUpload","backendEndTimestamp","speechRegion","isVoiceChannel","userId","botId","authorizationResultDto","toISOString","_druidWebChatState$di2","_currentState$mergedC","withCredentials_authorization","authorizationBaseUrl","baseUrl","authorizationUrl","customAuthHeaders","conversationToken_namePrefix","cookieDomain","conversationTokenEnabled","authorizationDto","mergedOptions","userLanguage","builtQueryParams","queryParams","toAddQueryParams","push","_disableAutoForwardCurrentDocumentQueryString","os","family","version","encodeURIComponent","ua","origin","pathname","parsedReceivedQueryString","parseQueryString","forEach","prqs","prqsName","allreadyFoundKeyIdx","findIndex","startsWith","ex","join","druidConversationToken","conversationToken","getCookie","_requestNewConversationToken","otherServicesEndpointIndex","queryString","isSecondaryChannel","_isSecondaryChannel","flowId","isFormChannel","buildAuthorizationDto","_authorizeResult","pRetry","authorizeCallResult","doAuthorize","_authorizeCallResult$","status","AbortError","json","retries","minTimeout","maxTimeout","catch","withMessage","message","result","serverTime","isWebSocket","apiUrl","botApiUrl","logoImage","setCookie","DruidCookies","DruidConversationToken","styleOptions","botAvatarImage","botAvatarInitials","activityStatusUserName","DruidDocumentViewer","buttonFontSize","this","privateScale","constructor","super","pagesWithSignature","allSignatures","signatureFieldTextSplit","signatureFieldTextSplitByPipe","signaturePage","scale","onResizeHandler","pngImageBytes","sigPad","pdfInstance","canvasHeight","signatureFieldTextHeight","initialMetaViewPort","undefined","componentDidMount","pdfjsLib","Array","from","getElementsByClassName","elem","documentElement","clientWidth","default","pdfjsWorker","pdfjsWorkerBlob","Blob","pdfjsWorkerBlobURL","URL","createObjectURL","GlobalWorkerOptions","workerSrc","loadingTask","getDocument","url","documentSrc","isEvalSupported","signatureFieldText","Promise","promise","then","pdf","getElementById","onResize","bind","addEventListener","i","numPages","page","getPage","viewport","getViewport","div","createElement","_pageIndex","event","appendChild","canvas","context","getContext","renderContext","canvasContext","items","getTextContent","signatureFieldTextByPipe","pipeIdx","textItem","index","str","proceedWithCheck","ti","transformArray","Util","transform","signatureLeft","signatureTop","pageNo","signatureType","forceUpdate","render","closeCustomModal","keys","ps","pageElement","pageObject","signatureIndex","signaturePositions","signature","slIndex","sp","modal","querySelectorAll","item","signingButton","pdfContainer","offsetWidth","round","offsetHeight","getSigningButtonId","classList","add","innerHTML","signButtonName","zoomOutMobile","saveButton","top","scrollTop","clientHeight","getCanvas","isEmpty","getTrimmedCanvas","toDataURL","newSignatureImageElement","pageNumberAttribute","attributes","getNamedItem","currentPageElement","onclick","changeViewPort","val","reg","oldval","content","newval","v","remove","head","insertAdjacentHTML","sl","signatureImage","getSignatureImageId","getAttribute","signatureScale","isCancel","removeEventListener","CustomModalWindow","_toDelElem$parentNode","unmountComponentAtNode","toDelElem","parentNode","removeChild","destroy","dispatch","localStorage","removeItem","console","error","saveDocument","existingPdfBytes","fetch","res","arrayBuffer","PDFLib","pdfDoc","PDFDocument","load","resolve","reject","pngImage","embedPng","getPages","drawImage","x","y","getHeight","parseFloat","resp","pdfBytes","save","blob","file","File","fileName","sendFiles","id","determinedDir","draggable","left","bottom","SignatureCanvas","penColor","signatureColorCode","canvasProps","minWidth","clear","saveButtonName","cancelButtonName","uploadButtonName","DruidActivityStatus","activityStatusReadColor","svgStyle","marginRight","MessageStatus","Read","xmlns","viewBox","d","ImageAttachmentWrapper","attachment","viewPictureHandler","wrRef","ImageAttachment","useButtonsClassesEffect","_wrRef$current","button","channelData","buttonClass","buttons","HeroCardWrapper","subtitle","text","description","hasButtons","hasImages","some","hasText","isRichCard","_wrRef$current$parent","parentElement","HeroCardContent","actionPerformedClassName","ThumbnailCardWrapper","ThumbnailCardContent","useDateFormatter","compHooks","DruidActivityCustomTimestamp","activity","timestamp","timestampFormat","timestampStyleSet","sendStatus","sendStatusStyleSet","customTimestampFormat","absoluteTime","date","Date","format","druidFormatDate","ScreenReaderText","findNestedObjectByKey","obj","len","k","found","ConversationHistorySeparator","druidStyleToEmotionObject","headerTextColor","rootFontSize","headerButtonColorOnFocus","headerFontSize","marginTop","DruidActivityWrapper","activityWrapperClassEnabled","flowStepName","flowStepType","trim","CopyButton","memo","copySucceeded","setCopySucceeded","navigator","clipboard","writeText","setTimeout","err","useAtttachmentMiddleware","druidImagesViewerRef","projectedMergedChatOptions","singleToArray","attachmentMiddleware","next","args","_allNonIgnorableActiv","others","cardActionsDisabled","allNonIgnorableActivities","_name","_activity$channelData3","activityName","toLowerCase","inactivityMessage","ignorableActivity","recentNonIgnorableActivity","pop","isActivityFromUser","activityFromBot","unstable_batchedUpdates","_druidImagesViewerRef","_druidImagesViewerRef2","_attachment$content","_attachment$content$i","_activity$channelData","removeTapFromImagesAttachmentIfEmpty","inactivateCardAfterUsage","_attachment$content2","_attachment$content2$","_activity$channelData2","_druidWebChatState$me4","_druidWebChatState$me5","_activity$channelData4","_activity$channelData5","_activity$channelData7","hiddenAdaptiveCardId","valuesActivity","_act$value","_activity$channelData6","accessibilityFeaturesEnabled","adaptiveCard_valuesRestored_fromActivityId","_ref3","_attachment$content3","field","AdaptiveCardContent","_attachment$content4","_attachment$content5","_attachment$content6","hasUrl","subString","isUrl","require_protocol","require_valid_protocol","hasHTMLTag","indexOf","DruidReloadSelector","ReloadIcon","handleReload","stopPropagation","withAutoExpand","IconButton","alt","DruidResetSelector","ResetIcon","handleReset","includingCookies","DruidChangeSideSelector","v2_switch_icon","SwitchIcon","faIcons","handleSwitchButtonClick","side","DruidOptionsContainer","headerRef","isWidget","showChangeSideButton","showReload","showLanguageSelector","showReset","headerOptions","DruidLanguageSelector","headerMenuOpen","setHeaderMenuOpen","ExpandHeaderMenuIcon","CollapseHeaderMenuIcon","canShowChangeSideButton","isMobile","canShowReset","buttonElement","ariaExpanded","toFocusButton","defaultMinimizeIcon","DruidMinimizeSelector","v2_minimize_icon","DruidCustomButton","setHeaderRef","v2_customButton_toggled_icon","v2_customButton_off_icon","v2_custom_button_initial_toggled","toggled","setToggled","handleCustomButtonSwitchClick","newToggledValue","DruidHeader","setHeaderWasDragged","useDeterminedDirection","VoiceInputSelector","v2_chatTitle_icon","fullScreenMode","draggableEnabled","chatTitle","lineHeight","headerOuterPadding","headerBottomBorderRadius","headerBorderRadius","headerTextColorOnHover","headerBackground","showHeader","showChatTitle","showCloseButton","showAvatar","showIcon","showVoiceInputSelector","speechOptions","onDragStart","wasDragged","useDraggableEffect","TitleIcon","columnGap","borderBottomRightRadius","borderBottomLeftRadius","overflow","textOverflow","whiteSpace","animationName","animationDuration","HTMLElement","nodeName","useMicrophoneButtonClick","DruidIsVoiceInputSelector","microphoneButtonClick","dictateState","isVoiceInput","KeyboardIcon","handleSwitchToVoiceOrKeyboard","focusable","selectedLanguage","isSelected","useSelectedLanguage","useBotLanguages","dropdownToggle_Transform_scaleValue","getComputedStyle","toFixed","sort","a","b","nativeName","localeCompare","sensitivity","AppConsts","DefaultLanguageId","opacity","variant","icon","FaGlobe","renderOnMount","lang","ErrorFallback","resetErrorBoundary","FaExclamationTriangle","DruidFullComposer","FullComposer","useSendPostBack","useSubmitSendBox","useFocusSendBox","usePostActivity","useSendEvent","useObserveScrollPosition","useCreateScrollToEndButtonRenderer","useScrollToEnd","useScrollTo","useObserveTranscriptFocus","BasicWebChat","WebChat","initialOptions","buttonsPadding","buttonsBorderRadius","buttonsBorderColor","buttonsBackgroundColor","buttonsBackgroundColorOnHover","buttonsTextColorOnHover","transcriptFontSize","activityStatusShowBotName","activityStatusBotName","activityStatusShowUserName","suggestedActionTextColor","designPatterns","nonCarousel_HeroCard_AutoWidth","nonCarousel_HeroCard_ButtonsOnly_BackgroundTransparent","druidAdaptiveCardHostConfig","useDruidAdaptiveCardsHostConfig","useCreateDirectLine","useSetDirectLineInstance","bfStore","subscriptions","debounceTypingOnOff","behaviorSubject","BehaviorSubject","typingOffTimeout","debounceTime","distinctUntilChanged","subscribe","showTyping","clearTimeout","complete","_getState$mergedChatO3","scrolledToTop","cancelTypingTimeout","conversationHistoryActivities","createStoreWithDevTools","ch","mapConversationHistoryActivityToActivity","bfDispatch","getBFState","_action$payload2","currentBFState","action","activityLocale","isActivityStatusUpdate","isNewActivity","params","isRobotJsV2","EndpointUrl","handleException","errorMessage","Message","InnerException","robot","UiPathRobot","init","processes","getProcesses","storeState","proc","p","includes","ProcessName","jobId","uuidv4","Error","_storeState$directlin","processParams","ProcessParams","startProcessTimestamp","jobPromise","start","onStatus","log","postActivity","JobId","JobStatus","toPromise","_storeState$directlin2","jobResults","endProcessTimestamp","Type","Token","EndpointSecret","Job","Key","StartTime","EndTime","Info","OutputArguments","sendAjaxRequest","method","headers","_storeState$directlin3","errorResults","_storeState$directlin4","job","$entityTypeName$","assign","CallbackUtterance","_storeState$directlin5","_storeState$directlin6","CorrelationId","getItem","parsedJSON","_getState$mergedChatO","determineDirection","setItem","rootElem","newElem","DocumentUrl","FileName","SignatureFieldText","SignatureScale","SignButtonName","CancelButtonName","SaveButtonName","UploadButtonName","SignatureColorCode","reactElem","_currentState$directl","_currentState$directl2","_getState$mergedChatO2","ConversationId","end","withNewDruidConversationToken","withNewAuthorizationDtoDetails","ConversationToken","formatString","arguments","RedirectUrl","ensureHttpProtocol","InSameWindow","click","BotDisplayName","UserDisplayName","FirstName","DruidLiveness","intro_screen","isWithLiveness","isWithPicture","videoRecordingMs","chatBotAvatarUrl","companyLogoUrl","modalFooterBgColor","language","o","uploadThumbnailWidth","uploadThumbnailHeight","uploadThumbnailContentType","uploadThumbnailQuality","eyesOpenedBlob","videoRecordingBlob","imageBlob","isHuman","arePermissionsGranted","hasError","instruction","instructionTime","replace_bad_chars","_storeState$directlin7","thumbnail","makeThumbnail","IsHuman","_storeState$directlin8","extension","_storeState$directlin9","_activity$suggestedAc","_currentState$mergedC4","_currentState$mergedC5","_currentState$mergedC2","_document$activeEleme","activeElement","_DruidWebchat_v","_DruidWebchat_v$hooks","DruidWebchat_v2","blockingInput_ignorableActivity","suggestedActions","actions","attachmentLayout","suggestedActionLayout","_currentState$mergedC3","setLanguage","should_SENSITIVEDATAINPUT_MODE_be_enabled","shouldEnter_sensitiveDataInputMode","setNotification","level","data","_DruidWebchat_v2$noti","_DruidWebchat_v2$noti2","notificationsEnabled","isWindowFocused","minimized","notificationsSounds","druidNewMessageNotification","play","_DruidWebchat_v2$noti3","_DruidWebchat_v2$noti4","_currentBFState$sugge","clearSuggestedActions","autoScrollSnapOnPage","scrollTo","_currentState$mergedC6","_currentState$mergedC7","_activity$from","isHideTyping","showTypingName","clientActivityID","textFormat","directLine","webServiceStatus$","serviceStatus","connectivityStatus","connectionStatus$","connStatus","ConnectionStatus","ExpiredToken","FailedToConnect","_druidInternal_suggestedAction_cancel_button","_druidInternal_passThrough_sensitiveDataInputMode","originalSendMessage","notifications","dismissNotification","heartBeatUrl","doHeartBeat","druidLanguageComparison","skipPostEvent","_currentState$directl4","_currentState$directl5","_currentState$directl3","postSenderAction","SenderActionAction","_0","_1","_currentState$directl6","_action$payload","_action$payload$activ","_action$payload$activ2","webChatEventHandler","useCreateBFStore","outerBFSuggestedActions","setOuterBFSuggestedActions","previousState","bfStoreUnsubscribe","_previousState","sub","unsubscribe","markdownIt","markdownITInstance","markdownIT","html","xhtmlOut","linkify","breaks","typographer","defaultRender","renderer","rules","link_open","tokens","options","env","self","renderToken","targetIndex","attrIndex","attrPush","attrs","cognitiveServices","useCognitiveServices","_druidWebChatState$sp2","useAsyncMemo","_druidWebChatState$sp","_currentState$speechO","expireAfter","createCognitiveServicesSpeechServicesPonyfillFactory","credentials","now","_currentState$speechO2","getSpeechToken","oldToken","_currentState$speechO3","_currentState$speechO4","respSpeechToken","authorizationToken","region","_currentState$speechO5","_currentState$speechO6","_currentState$speechO7","_currentState$speechO8","handleInitializeCallback","debounceHideSuggestedActions","hide","useDebounceHideSuggestedActions","activityStatusMiddleware","botActivitiesActionsEnabled","timestampColor","ACTIVITY_STATUS_STYLE","activityStatusClassName","attachmentSizes","firstAttachmentSize","sendState","sameTimestampGroup","botOrUserName","useActivityStatusMiddleware","cardActionMiddleware","cardAction","bfState","buttonValue","buttonType","fromBot","_bfState$suggestedAct","_druidWebChatState$pr","_druidWebChatState$pr2","_druidWebChatState$pr3","_druidWebChatState$me","_druidWebChatState$me2","_druidWebChatState$me3","_druidWebChatState$pr4","_druidWebChatState$pr5","pristineMergedChatOptions","_document$activeEleme2","useCardActionMiddleware","activityMiddleware","getDruidState","_activity$channelData8","_len","setupArgs","_key","messageActivities","reverse","conversationHistory","_activity$channelData9","currentDruidState","isShown","loadAllMessages","separator","conversationHistoryShowAll","renderAttachment","messageWithoutAttachments","messageWithoutText","StackedLayout","renderActivityStatus","_","CarouselLayout","renderAvatar","useActivityMiddleware","scrollToEndButtonMiddleware","useScrollToEndButtonMiddleware","ignoreHideSuggestedActions","hideSuggestedActionsTimeout","atEnd","scrollToEndButtonBehavior","unread","getValue","staticDruidStyleSet","transcriptLinkColor","chatBoxBorderRadius","buttonsBorderColorOnHover","suggestedActionBackgroundColor","suggestedActionBackgroundColorOnDisabled","suggestedActionTextColorOnDisabled","suggestedActionBorderColorOnDisabled","bubbleBorderRadius","scrollbarStyling","basicTranscript","overscrollBehavior","textDecoration","stackedLayout","suggestedAction","borderColor","scrollToEndButton","toast","autoResizeTextArea","overflowY","adaptiveCardRenderer","fontWeight","resize","boxSizing","fileContent","gap","sendBoxTextBox","paddingInline","right","uploadButton","useStaticDruidStyleSet","shouldRenderWebchat","strings","mergedStyleSet","merge","createStyleSet","customDruidStyleSet","styleSet","adaptiveCardsHostConfig","typingIndicatorMiddleware","_currentDruidState$me","disableTyping","DotIndicator","withText","renderMarkdown","webSpeechPonyfillFactory","userID","username","overrideLocalizedStrings","ErrorBoundary","FallbackComponent","CustomDecorator","INITIALIZATION_STATUS_MESSAGE","scrollToEnd","sendPostBack","sendEvent","submitSendBox","setFocus","_wcRootRef$querySelec","sg","_sendBoxButton$queryS","_sendBoxButton$queryS2","disableTypingAnimation","typingIndicator","typingIndicatorStyleSet","backgroundSize","typingAnimationOverridesClassName","TypingAnimation"],"mappings":"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","file":"druid_webchat_v2_modules.js","sourcesContent":["import { hooks } from 'botframework-webchat-api';\r\nimport { useCallback, useContext } from 'react';\r\nimport DruidWebchatContext, { DruidWebchatContextType } from '../WebChatContext';\r\nimport normalizeLanguage from 'botframework-webchat-api/lib/utils/normalizeLanguage';\r\n\r\nconst { useLocalizer, useLanguage } = hooks;\r\n\r\nconst useDruidLocalize = (bfLocalizer?: ReturnType) => {\r\n const [,, getState ] = useContext(DruidWebchatContext);\r\n\r\n // const localize = useLocalizer();\r\n\r\n //const [currentLanguage] = useLanguage();\r\n const { locale: currentLanguage } = getState();\r\n return useCallback((code: string): string => {\r\n const { localization } = getState().mergedChatOptions;\r\n const normalizedLanguage = normalizeLanguage(currentLanguage);\r\n var ret = (bfLocalizer && bfLocalizer(code)) || (localization && ((localization[normalizedLanguage] && localization[normalizedLanguage][code]) || (localization[\"en-US\"] && localization[\"en-US\"][code])));\r\n ret = typeof ret === 'string' ? ret : '';\r\n\r\n return ret;\r\n }, [bfLocalizer, currentLanguage, getState]);\r\n \r\n}\r\n\r\nexport default useDruidLocalize;","import { connectToWebChat, Components, hooks as bfHooks } from 'botframework-webchat-component';\n\nimport { Constants, DirectLineActivity } from 'botframework-webchat-core';\nimport { hooks } from 'botframework-webchat-api';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport React, { FC, forwardRef, useCallback, useContext, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\n\nimport { useMergedOptions } from '../selectors/useMergedOptions';\nimport { useContextMenu } from '../selectors/useContextMenu'\nimport useDruidLocalize from '../hooks/useDruidLocalize';\n\nimport useStyleToEmotionObject from 'botframework-webchat-component/lib/hooks/internal/useStyleToEmotionObject';\n\nimport DruidWebchatContext, { DruidWebchatContextType } from '../WebChatContext';\nimport { webChatDefaultOptions } from '../WebChatOptions';\nimport Dropdown from 'react-bootstrap/Dropdown';\nimport { ButtonProps } from 'react-bootstrap/esm/Button';\nimport * as bsIcons from 'react-icons/bs';\nimport { BsEmojiSmile } from 'react-icons/bs';\n\nimport { useWebChatRefsContext } from '../hooks/useWebChatRefsContext';\nimport InlineSVG from 'svg-inline-react';\nimport { shouldEnter_fileUploadInputMode } from '../logics/druidBusinessLogic';\nimport EmojiPicker, { EmojiClickData, EmojiStyle } from 'emoji-picker-react';\nimport { useSendBoxValue } from 'botframework-webchat-api/lib/hooks';\n\nconst defaultContextMenuIcon = ({ size, restylingsEnabled, expanded }: { size: any, restylingsEnabled?: boolean, expanded?: boolean }) => {\n if(restylingsEnabled) {\n size = '16px';\n\n if(!expanded) {\n return `\n \n \n `;\n } else {\n return `\n \n \n `;\n }\n \n // return ``\n }\n\n return ``\n};\n\n\nconst { DictationInterims, MicrophoneButton, SendButton, SuggestedActions, SendTextBox, UploadButton } = Components;\nconst { useActivities, useDirection, useDictateState, useStyleOptions, useSendMessage, useDisabled, useLanguage, useLocalizer } = hooks;\nconst { useStyleSet, useWebSpeechPonyfill, useFocus, useSendBoxSpeechInterimsVisible } = bfHooks;\n\n// const ROOT_STYLE = {\n// display: 'flex',\n\n// // .sr-only - This component is intended to be invisible to the visual Web Chat user, but read by the AT when using a screen reader\n\n// '& > .sr-only': {\n// color: 'transparent',\n// height: 1,\n// left: -10000,\n// overflow: 'hidden',\n// position: 'absolute',\n// top: 0,\n// whiteSpace: 'nowrap',\n// width: 1\n// }\n// };\n\nconst {\n DictateState: { DICTATING, STARTING }\n} = Constants;\n\n\nconst ROOT_STYLE = {\n '&.webchat__send-box': {\n '& .webchat__send-box__button': { flexShrink: 0 },\n '& .webchat__send-box__dictation-interims': { flex: 10000 },\n '& .webchat__send-box__main': { display: 'flex' },\n '& .webchat__send-box__microphone-button': { flex: 1 },\n '& .webchat__send-box__text-box': { flex: 10000 }\n }\n};\n\n// // TODO: [P3] We should consider exposing core/src/definitions and use it instead\n// function activityIsSpeakingOrQueuedToSpeak(activity: DirectLineActivity) {\n// return activity.type === 'message' && activity.channelData?.speak;\n// }\n\n// function useSendBoxSpeechInterimsVisible(): [boolean] {\n// const [activities] = useActivities();\n// const [dictateState] = useDictateState();\n\n// return [\n// (dictateState === STARTING || dictateState === DICTATING) &&\n// !activities.filter(activityIsSpeakingOrQueuedToSpeak).length\n// ];\n// }\n\ntype BasicSendBoxProps = {\n className?: string;\n};\nconst DruidSendBox: FC = connectToWebChat()(({ className }) => {\n\n const [druidWebChatState, druidWebChatDispatch,] = useContext(DruidWebchatContext);\n\n const { sensitiveDataInputMode, fileUploadInputMode, inputBlocked } = druidWebChatState;\n const [{ hideSendBox, hideUploadButton, sendBoxButtonAlignment, backgroundColor, sendBoxButtonShadeColorOnDisabled, sendBoxBackground, sendBoxHeight, subtle, accent, sendBoxButtonColor, sendBoxButtonColorOnHover, sendBoxButtonShadeColor, sendBoxButtonColorOnFocus, sendBoxDisabledTextColor, sendBoxButtonColorOnDisabled, paddingRegular, fontSizeSmall }] = useStyleOptions();\n const { UI: { restylingsEnabled, emojiPickerEnabled, buttonsTextColor, hideDruidSendBox, blockingInputDruidSendBox, showPoweredBy, hideSuggestedActions, druidSendBoxPaddingLeftRight, druidSendBoxPaddingTop, druidSendBoxPaddingBottom, druidSendBoxTextBoxPadding, druidSendBoxInnerPaddingLeftRight, druidSendBoxInnerPaddingTopBottom, druidSendBoxInnerBorderRadius, sendBoxFontSize } = {}} = useMergedOptions();\n const [{ sendBox: sendBoxStyleSet }] = useStyleSet();\n const [{ sendBoxTextWrap }] = useStyleOptions();\n const sendMessage = useSendMessage();\n const contextMenuItems = useContextMenu();\n const [{ SpeechRecognition = undefined } = {}] = useWebSpeechPonyfill();\n const [direction] = useDirection();\n const [disabled] = useDisabled();\n const [locale] = useLanguage();\n const [sendBoxValue, setSendBoxValue] = useSendBoxValue();\n const localize = useLocalizer();\n const druidLocalize = useDruidLocalize(localize);\n const focus = useFocus();\n const [speechInterimsVisible] = useSendBoxSpeechInterimsVisible();\n const styleToEmotionObject = useStyleToEmotionObject();\n const [activities] = useActivities();\n const lastActivity = useMemo(() => { return activities?.filter(act => act.type === 'message')?.slice(-1)[0]; }, [activities]);\n const lastBlockingInputActivity = useMemo(() => { return activities?.filter(act => act.type === 'message' && (act as any).inputHint === 'blockingInput')?.slice(-1)[0]; }, [activities]);\n const { wcRootRef } = useWebChatRefsContext();\n\n // const TEXT_INPUT_PLACEHOLDER_ref = useMemo(() => localize(\"TEXT_INPUT_PLACEHOLDER\"), [locale]); // keep original. do not change\n const [showSensitiveDataIcon, setShowSensitiveDataIcon] = useState(true);\n\n useLayoutEffect(() => {\n if (sendBoxTextWrap === false && sensitiveDataInputMode) {\n const inputElement = wcRootRef?.querySelector('.webchat__send-box-text-box__input');\n if (inputElement) {\n inputElement.type = showSensitiveDataIcon ? 'password' : 'text';\n inputElement.autocomplete = 'off'; // disable autocomplete\n inputElement.placeholder = druidLocalize(\"DRUID_TEXT_INPUT_PLACEHOLDER_SENSITIVE_DATA\");\n }\n }\n\n return () => {\n if (sensitiveDataInputMode) { // hit when disabled \n }\n }\n }, [wcRootRef, sendBoxTextWrap, sensitiveDataInputMode, showSensitiveDataIcon, locale, druidWebChatDispatch, druidLocalize, setShowSensitiveDataIcon]);\n\n useLayoutEffect(() => {\n if (inputBlocked) {\n const inputElement = wcRootRef?.querySelector('.webchat__send-box-text-box__input');\n if (inputElement) {\n inputElement.placeholder = druidLocalize(\"DRUID_TEXT_INPUT_PLACEHOLDER_SENSITIVE_DATA\");\n }\n }\n }, [inputBlocked, druidLocalize, wcRootRef]);\n\n useLayoutEffect(() => { // change placeholder of sendbox. could change implementation someday and render only placeholder. please remove this\n if (lastActivity && shouldEnter_fileUploadInputMode(lastActivity)) {\n const inputElement = wcRootRef?.querySelector('.webchat__send-box-text-box__input, .webchat__send-box-text-box__html-text-area');\n if (inputElement) {\n inputElement.placeholder = druidLocalize(\"DRUID_FILEUPLOAD_INPUT_PLACEHOLDER_TEXT\");\n }\n return () => {\n inputElement && (inputElement.placeholder = druidLocalize(\"TEXT_INPUT_PLACEHOLDER\"));\n };\n }\n }, [lastActivity, druidLocalize, wcRootRef]);\n \n useEffect(() => {\n if (!sensitiveDataInputMode) {\n setShowSensitiveDataIcon(true);\n }\n }, [sensitiveDataInputMode, setShowSensitiveDataIcon])\n useEffect(() => {\n focus('sendBoxWithoutKeyboard');\n }, [sendBoxTextWrap, focus]);\n\n const ToggleSensitiveDataIcon = useMemo(() => showSensitiveDataIcon ? bsIcons[\"BsFillEyeSlashFill\"] : bsIcons[\"BsFillEyeFill\"], [showSensitiveDataIcon]);\n\n const ROOT_STYLE = {\n '&.webchat__send-box': {\n padding: `${druidSendBoxPaddingTop === 0 ? 0 : druidSendBoxPaddingTop || 0}px \n ${druidSendBoxPaddingLeftRight === 0 ? 0 : druidSendBoxPaddingLeftRight || (paddingRegular / 2)}px \n ${druidSendBoxPaddingBottom === 0 ? 0 : Math.max((druidSendBoxPaddingBottom || (paddingRegular / 2)) - (showPoweredBy ? 5 : 0), 0)}px \n ${druidSendBoxPaddingLeftRight === 0 ? 0 : druidSendBoxPaddingLeftRight || (paddingRegular / 2)}px`,\n fontSize: sendBoxFontSize,\n backgroundColor: backgroundColor,\n '& .webchat__send-box__button': { flexShrink: 0 },\n '& .webchat__send-box__dictation-interims': {\n flex: 10000,\n padding: druidSendBoxTextBoxPadding || (paddingRegular / 2),\n margin: 0\n },\n '& .webchat__send-box__main': {\n display: 'flex',\n borderRadius: druidSendBoxInnerBorderRadius === 0 ? 0 : druidSendBoxInnerBorderRadius || paddingRegular / 2,\n paddingTop: druidSendBoxInnerPaddingTopBottom,\n paddingBottom: druidSendBoxInnerPaddingTopBottom,\n paddingRight: druidSendBoxInnerPaddingLeftRight,\n paddingLeft: druidSendBoxInnerPaddingLeftRight\n },\n '& .webchat__send-box__microphone-button': { flex: 1 },\n '& .webchat__send-box__text-box': {\n // flex: 10000,\n // padding: druidSendBoxTextBoxPadding || (paddingRegular / 2),\n '& .webchat__send-box-text-box__input, & .webchat__send-box-text-box__html-text-area': { // sendbox textarea or input\n '&:disabled, &[aria-disabled=\"true\"]': { // disabled\n '&::placeholder': {\n color: sendBoxDisabledTextColor || sendBoxButtonColorOnDisabled || subtle\n }\n }\n },\n '& + svg.webchat__send-box__toggle-show-sensitive-data': {\n float: 'right',\n position: 'relative',\n margin: 'auto',\n cursor: 'pointer',\n fill: sendBoxButtonColor || subtle\n },\n '&.webchat__send-box__text-box-blockingInput-placeholder': {\n color: subtle,\n textAlign: 'left',\n margin: 'auto'\n }\n },\n '& .druid__webchat__send-box__dropdown-menu': {\n display: 'flex',\n direction,\n ' > .dropdown-toggle': {\n color: sendBoxButtonColor || subtle,\n backgroundColor: 'transparent',\n border: 0,\n paddingRight: 0,\n cursor: 'pointer',\n ...(restylingsEnabled && \n {\n alignSelf: sendBoxButtonAlignment === 'bottom' ? 'flex-end' : sendBoxButtonAlignment === 'top' ? 'flex-start' : 'center',\n color: subtle || sendBoxButtonColor,\n borderRadius: '50%',\n backgroundColor: sendBoxBackground,\n marginBlock: '5px',\n width: sendBoxHeight ? parseInt(sendBoxHeight.toString()) - 10 : sendBoxHeight,\n padding: 0,\n flexShrink: 0,\n alignItems: 'center',\n display: 'flex',\n justifyContent: 'center',\n '&:focus-visible .webchat__icon-button__keyboard-focus-indicator': {\n display: 'block !important'\n }\n // verticalAlign: 'unset'\n // '&:not(.webchat__icon-button--stretch)': {\n // height: sendBoxHeight ? parseInt(sendBoxHeight.toString()) - 10 : sendBoxHeight\n // }\n }),\n // '&:hover:not([aria-disabled=\"true\"]), &:focus:not([aria-disabled=\"true\"])': {\n // boxShadow: 'none',\n // color: accent,\n // ...(restylingsEnabled && \n // {\n // // color: 'white',\n // backgroundColor: sendBoxButtonShadeColor,\n // }),\n // },\n '&:hover': {\n boxShadow: 'none',\n color: sendBoxButtonColorOnHover,\n ...(restylingsEnabled && \n {\n // color: 'white',\n color: accent,\n backgroundColor: sendBoxButtonShadeColor,\n }),\n },\n '&:focus': {\n boxShadow: 'none',\n color: sendBoxButtonColorOnFocus,\n ...(restylingsEnabled && \n {\n // color: 'white',\n color: accent,\n backgroundColor: sendBoxButtonShadeColor,\n }),\n },\n '&:focus-visible': {\n outline: 0,\n },\n '&[aria-disabled=\"true\"]': {\n color: sendBoxButtonColorOnDisabled,\n ...(restylingsEnabled && {\n backgroundColor: sendBoxButtonShadeColorOnDisabled\n })\n },\n '&::after': {\n display: 'none'\n },\n },\n '& .dropdown-menu': {\n textAlign: direction === 'rtl' ? 'right' : 'left',\n ...(restylingsEnabled && \n { padding: '0.5rem',\n marginBottom: 10,\n boxShadow: 'rgba(0, 0, 0, 0.2) 0px 2px 6px',\n border: 'none',\n }),\n '.dropdown-item': {\n fontSize: sendBoxFontSize,\n '&:active': {\n backgroundColor: buttonsTextColor\n },\n ...(restylingsEnabled && \n {\n height: '3rem',\n display: 'flex',\n alignItems: 'center',\n '&:hover, &:active': {\n backgroundColor: sendBoxButtonShadeColor\n }\n }),\n }\n },\n },\n '& .druid__webchat__send-box__emoji-picker': {\n '& .epr-main': {\n display: 'flex !important',\n '.epr-icn-suggested': {\n display: 'none'\n },\n '.epr-hidden-on-search': {\n display: 'none'\n },\n '.epr-emoji-category-label': {\n fontSize: '1rem !important',\n color: \"var(--epr-category-label-text-color) !important\",\n },\n '.epr-emoji-native': {\n fontFamily: 'Druid Twemoji !important',\n fontSize: '1.5rem !important'\n },\n '.epr-search-container': {\n '& > input': {\n color: 'var(--epr-text-color) !important'\n }\n }\n }\n },\n '& .webchat__bottom-banner': {\n 'fontSize': fontSizeSmall, \n display: 'flex', \n 'flexDirection': 'row-reverse', \n justifyContent:'center', \n color: subtle,\n '.webchat__bottom-banner__anchor': {\n 'textDecoration': 'none', \n color: accent,\n textTransform: 'uppercase', \n marginLeft: 5\n }\n }\n }\n };\n\n const rootClassName = styleToEmotionObject(ROOT_STYLE) + '';\n\n const supportSpeechRecognition = !!SpeechRecognition;\n\n const buttonClassName = classNames('webchat__send-box__button', {\n 'webchat__send-box__button--align-bottom': sendBoxButtonAlignment === 'bottom',\n 'webchat__send-box__button--align-stretch': sendBoxButtonAlignment !== 'bottom' && sendBoxButtonAlignment !== 'top',\n 'webchat__send-box__button--align-top': sendBoxButtonAlignment === 'top'\n });\n\n const sendboxRef = useRef(null);\n\n useLayoutEffect(() => {\n if (sendboxRef.current) {\n sendboxRef.current?.querySelector('.webchat__upload-button--file-input')?.setAttribute('aria-label', druidLocalize('TEXT_INPUT_UPLOAD_BUTTON_ALT'))\n }\n }, [sendboxRef.current]);\n\n const sendBoxTemplate = useMemo(() => {\n\n const userInputEnabled = /*!blockingInputDruidSendBox &&*/ !inputBlocked;\n const uploadButtonTemplate = <>{( userInputEnabled && (shouldEnter_fileUploadInputMode(lastActivity) || !hideUploadButton)) && !sensitiveDataInputMode && };\n\n // \n\n const emojiPickerTemplate = \n \n\n \n \n {\n const sendBoxValue = druidWebChatState?.store?.getState()?.sendBoxValue\n setSendBoxValue(sendBoxValue + emoji.emoji)\n }}>\n \n \n\n const [ firstAttachment ] = lastBlockingInputActivity?.type === 'message' && lastBlockingInputActivity?.attachments || [];\n const { contentType: lastBlockingInputActivity_attachmentType } = (firstAttachment || {});\n ///// !!!! Only default is used for now. could add different templates here, as shown below////\n // if (false && fileUploadInputMode) { \n // return (<>\n // {\n // uploadButtonTemplate\n // }\n //
{druidLocalize('DRUID_FILEUPLOAD_INPUT_PLACEHOLDER_TEXT')}
\n // );\n // }\n return (<>\n { userInputEnabled && contextMenuItems && contextMenuItems.length > 0 &&\n\n \n \n\n \n \n {\n contextMenuItems.map((cmi, idx) => {\n\n return (\n sendMessage(cmi)}>{cmi}\n { !restylingsEnabled && idx + 1 < contextMenuItems.length && }\n )\n })\n }\n \n \n\n }\n {uploadButtonTemplate}\n {emojiPickerEnabled && emojiPickerTemplate}\n { userInputEnabled && (speechInterimsVisible ? (\n \n ) : (\n <>\n \n {sensitiveDataInputMode && setShowSensitiveDataIcon(!showSensitiveDataIcon)} />}\n {/* { sensitiveDataInputMode && } */}\n \n ))}\n { userInputEnabled && (supportSpeechRecognition ? (\n \n ) : (\n \n ))}\n { !userInputEnabled &&
{ lastBlockingInputActivity_attachmentType === 'application/vnd.microsoft.card.adaptive' ? druidLocalize('DRUID_BLOCKING_INPUT_AC_PLACEHOLDER_TEXT') : druidLocalize('DRUID_BLOCKING_INPUT_PLACEHOLDER_TEXT')}
}\n )\n }, [lastActivity, lastBlockingInputActivity, blockingInputDruidSendBox, hideUploadButton, sensitiveDataInputMode, buttonClassName, fileUploadInputMode, contextMenuItems, disabled, speechInterimsVisible, ToggleSensitiveDataIcon, supportSpeechRecognition, druidLocalize, sendMessage, showSensitiveDataIcon, inputBlocked]);\n\n return (\n !hideDruidSendBox &&\n \n\n {!hideSuggestedActions && }\n
\n {sendBoxTemplate}\n
\n {\n showPoweredBy && \n
\n \n Powered by \n Druid\n \n
\n }\n\n \n );\n});\n\nDruidSendBox.defaultProps = {\n className: ''\n};\n\nDruidSendBox.propTypes = {\n className: PropTypes.string\n};\n\nconst DruidDropdownToggle: FC = forwardRef((props, ref) => {\n const { children, onClick, className, disabled} = props;\n const expanded = props[\"aria-expanded\"] as boolean;\n const { UI: { v2_contextMenu_icon = \"\", restylingsEnabled } = {}} = useMergedOptions();\n const druidLocalize = useDruidLocalize();\n const [{ sendBoxButton: sendBoxButtonStyleSet }] = useStyleSet();\n // const localUseClick = useCallback((e) => onClick ? onClick(e) : (e) => { e.preventDefault()}, [onClick]);\n // const DDIcon = faIcons[contextMenuIcon] || faIcons[webChatDefaultOptions.UI?.contextMenuIcon!];\n\n return (\n {\n e.preventDefault();\n onClick && onClick(e);\n }}\n title={druidLocalize(\"DRUID_CONTEXTUAL_MENU_BUTTON_ALT\")}\n >\n {}\n
\n \n );\n});\n\nconst DruidEmojiToggle: FC = forwardRef((props, ref) => {\n const { children, onClick, className, disabled} = props;\n const expanded = props[\"aria-expanded\"] as boolean;\n const { UI: { restylingsEnabled } = {}} = useMergedOptions();\n const druidLocalize = useDruidLocalize();\n const [{ sendBoxButton: sendBoxButtonStyleSet }] = useStyleSet();\n\n return (\n {\n e.preventDefault();\n onClick && onClick(e);\n }}\n title={druidLocalize(\"DRUID_EMOJI_PICKER_BUTTON_ALT\")}\n >\n {/* {} */}\n \n
\n \n );\n});\n\n\nexport default DruidSendBox;\n\nexport { useSendBoxSpeechInterimsVisible };\n","import { useContext } from \"react\";\r\nimport DruidWebchatContext, { DruidWebchatContextType } from \"../WebChatContext\";\r\n\r\n\r\nexport function useContextMenu(): string[] {\r\n const [druidWebChatState,] = useContext(DruidWebchatContext);\r\n return druidWebChatState.contextMenuItems;\r\n}","import ReactDOM from 'react-dom';\nimport PropTypes from 'prop-types';\nimport { BsDownload } from 'react-icons/bs';\nimport Carousel, { Modal, ModalGateway } from 'react-images';\nimport * as defaults from 'react-images/lib/styles';\nimport { forwardRef, useImperativeHandle, useRef, useState } from 'react';\nimport { hooks } from 'botframework-webchat-component';\nimport { mobileAndTabletcheck } from '../utils/mobileAndTabletCheck';\nimport { DirectLineAttachment } from 'botframework-webchat-core';\n\n\nconst { useActivities, useDisabled, useSuggestedActions, useUserID, useStyleSet, useDirection, useLocalizer } = hooks;\n\n\nexport type DruidImageViewHandle = {\n setShow: (show: boolean) => void\n setCurrentPictureIndex: (index: number) => void\n }\nexport const DruidImagesViewer = forwardRef((props, forwardedRef) => {\n \n const wrapperRef = useRef(null);\n const [show, setShow] = useState(false);\n const [currentPictureIndex, setCurrentPictureIndex] = useState(0);\n const [activities] = useActivities();\n const images = activities.filter(act => act.type === 'message' && act.attachments?.length)\n .map(att => att.type === 'message' && att.attachments?.filter(fAtt => /^image\\//u.test(fAtt.contentType)))\n .filter(act => !!act)\n .flat() as DirectLineAttachment[];\n \n useImperativeHandle(forwardedRef, () => {\n return {\n setShow,\n setCurrentPictureIndex\n }\n }, [setShow]);\n \n const notVisibleProps = { showNavigationOnTouchDevice: true };\n return (\n ReactDOM.createPortal(\n
\n \n {show ? (\n setShow(false)} styles={defaults.defaultModalStyles} closeOnBackdropClick={mobileAndTabletcheck()} {...notVisibleProps} >\n ({...defaults.defaultCarouselStyles.container(base, state), ...{ width: '100vw'}}),\n // navigation: (base, state) => ({...defaults.defaultCarouselStyles.navigation(base, state), ...{ }}),\n // defaults.defaultCarouselStyles.navigationPrev(base, state)\n navigationPrev: (base, state) => ({...defaults.defaultCarouselStyles.navigationPrev(state), ...{ background: 'gray'}}),\n navigationNext: (base, state) => ({...defaults.defaultCarouselStyles.navigationNext(state), ...{ background: 'gray'}}),\n view: (base, state) => ({...defaults.defaultCarouselStyles.view(state), ...{ '& img': { maxHeight: '80vh !important', maxWidth: '80% !important'}}}),\n } \n // {...mergedCarouselStyles}\n }\n \n components={{\n HeaderFullscreen: (props) => (\n \n \n )\n }}\n trackProps={{\n onViewChange: (newIndex) => { setCurrentPictureIndex(newIndex)}\n }}\n views={ images.map(img => ({\n // fullscreen: img.contentUrl || img.thumbnailUrl,\n // thumbnail: img.thumbnailUrl,\n source: img.thumbnailUrl || img.contentUrl || \"\",\n }))} />\n \n ) : null}\n {/* \n Modal\n \n */}\n {/* {!!images?.length && \n ({\n original: img.contentUrl || img.thumbnailUrl,\n thumbnail: img.thumbnailUrl\n }))\n }\n onClickNext={() => {}} \n />} */}\n \n {/* */}\n \n \n
\n , document.body)\n )\n });\n ","export function getUrlParameter(name) {\r\n name = name.replace(/[\\[]/, '\\\\[').replace(/[\\]]/, '\\\\]');\r\n var regex = new RegExp('[\\\\?&]' + name + '=([^&#]*)');\r\n var results = regex.exec(window.location.search);\r\n return results === null ? '' : decodeURIComponent(results[1].replace(/\\+/g, ' '));\r\n};","\nimport { getUrlParameter } from \"../utils/getUrlParameter\";\nimport { mobileAndTabletcheck } from \"../utils/mobileAndTabletCheck\";\nimport { parseQueryString } from \"../utils/urlUtils\";\nimport { getCookie } from \"../utils/cookiesUtils\";\nimport { WebChatOptions } from \"../WebChatOptions\";\nimport { WebChatState } from \"../WebChatContext\";\n\nvar platform = require('platform');\n\n\nexport function buildAuthorizationDto(mergedOptions: WebChatOptions, currentState: WebChatState) {\n \n // const mergedOptions = druidWebChatState.mergedChatOptions;\n\n var authorizationDto: Partial<{\n botId: Nullable,\n userId: string,\n conversationToken: string,\n queryString: string,\n userLanguage: string,\n otherServicesEndpointIndex: number,\n flowId: Nullable,\n isFormChannel: Nullable,\n isSecondaryChannel: Nullable\n }> = {};\n authorizationDto.botId = mergedOptions.botId;\n // authorizationDto.isExternalLoggedIn = mergedOptions.isLoggedIn; // TODO\n authorizationDto.userLanguage = /*getCookie(mergedOptions.conversationToken_namePrefix || \"\" + 'druidConversationLanguage');*/ currentState.locale;\n\n \n var builtQueryParams = \"\";\n\n builtQueryParams = mergedOptions.queryParams || \"\";\n\n var toAddQueryParams: String[] = [];\n toAddQueryParams.push(`isMobile=${mobileAndTabletcheck()}`);\n !mergedOptions._disableAutoForwardCurrentDocumentQueryString && toAddQueryParams.push(!!window.location.search ? (window.location.search.replace('?', '')) : '');\n // toAddQueryParams.push(`language=${currentState.locale}`);\n\n if (!!platform) {\n toAddQueryParams.push(...[`OSVersion=${platform.os.family} ${platform.os.version}`, `DeviceModel=${encodeURIComponent(platform.ua)}`, `App=${platform.name}`, `AppVersion=${platform.version}`, `origin=${encodeURIComponent(window.location.origin)}`, `pathName=${encodeURIComponent(window.location.pathname)}`]);\n }\n\n let parsedReceivedQueryString = parseQueryString(mergedOptions.queryParams);\n if (parsedReceivedQueryString.length) {\n parsedReceivedQueryString.filter(f => !!f).forEach(prqs => {\n try {\n let prqsName = prqs.split(\"=\")[0];\n let allreadyFoundKeyIdx = toAddQueryParams.findIndex(f => f.startsWith(prqsName));\n\n if (allreadyFoundKeyIdx >= 0 && (prqs.startsWith('OSVersion') || prqs.startsWith('DeviceModel') || prqs.startsWith('App') || prqs.startsWith('AppVersion'))) {\n toAddQueryParams[allreadyFoundKeyIdx] = prqs;\n }\n } catch (ex) {\n\n }\n });\n }\n\n builtQueryParams += (!!builtQueryParams ? '&' : '') + toAddQueryParams.filter(f => !!f).join(\"&\");\n\n var druidConversationToken: Nullable = \"\";\n if(currentState.conversationToken) {\n druidConversationToken = currentState.conversationToken;\n } else {\n if (!!getUrlParameter(mergedOptions.conversationToken_namePrefix + \"druidConversationToken\")) {\n druidConversationToken = getUrlParameter(mergedOptions.conversationToken_namePrefix + \"druidConversationToken\");\n } else {\n if (getUrlParameter('Source').split('---').length > 1) {\n druidConversationToken = getUrlParameter('Source').split('---')[1];\n builtQueryParams = builtQueryParams.replace(`---${druidConversationToken}`, '');\n }\n else {\n if (!!mergedOptions.conversationTokenEnabled || getCookie(mergedOptions.conversationToken_namePrefix + \"druidConversationToken\")) {\n druidConversationToken = getCookie(mergedOptions.conversationToken_namePrefix + \"druidConversationToken\");\n }\n }\n }\n }\n \n if (!!druidConversationToken) {\n authorizationDto.conversationToken = mergedOptions._requestNewConversationToken === true ? \"new_conversationtoken\" : druidConversationToken;\n }\n\n authorizationDto.otherServicesEndpointIndex = mergedOptions.otherServicesEndpointIndex;\n authorizationDto.userId = \"anonymous\";\n authorizationDto.queryString = builtQueryParams;\n authorizationDto.isSecondaryChannel = mergedOptions._isSecondaryChannel;\n \n authorizationDto.flowId = mergedOptions.flowId;\n authorizationDto.isFormChannel = mergedOptions.isFormChannel;\n\n return authorizationDto;\n\n}","import { Dispatch, useCallback, useContext } from \"react\";\nimport { unstable_batchedUpdates } from 'react-dom';\nimport DruidWebchatContext, { DruidWebchatContextType, WebChatState } from \"../WebChatContext\";\nimport { buildAuthorizationDto } from '../logics/buildAuthorizationDto';\nimport { doAuthorize } from \"../WebChatServices\";\nimport { setCookie } from \"../utils/cookiesUtils\";\nimport pRetry from 'p-retry';\nimport moment from 'moment';\nimport { DruidCookies } from \"../WebChatOptions\";\n\n\nexport const useHandleInitialize = () => {\n const [druidWebChatState, druidWebChatDispatch, getState] = useContext(DruidWebchatContext);\n\n return useCallback(async () => {\n const backendStartTimestamp = moment().utc();\n const currentState = getState();\n const setCommons = (authorizeResult: { botDto: { contextMenuText: string, contextMenuTranslations: string }}) => {\n druidWebChatDispatch({\n type: 'SET_INITIALIZED',\n payload: true\n });\n\n druidWebChatDispatch({\n type: 'INITIALIZATION_STATUS',\n payload: 'success'\n });\n\n if(authorizeResult?.botDto) {\n const { botDto : { contextMenuText, contextMenuTranslations } } = authorizeResult;\n if (contextMenuText != null && !!contextMenuText) {\n const contextMenuItems = contextMenuText.split(\";\").filter(f => f); // not null\n druidWebChatDispatch({\n type: 'SET_CONTEXTMENU',\n payload: contextMenuItems\n });\n \n if (contextMenuTranslations != null && !!contextMenuTranslations) {\n const contextMenuTranslationItems = Object.entries(JSON.parse(contextMenuTranslations || \"{}\")).reduce((acc, [key, value]) => {\n if (key !== currentState.botLanguages.find(bl => bl.isDefault)?.name) {\n acc[key] = value?.split(\";\");\n } else {\n acc[key] = contextMenuItems;\n }\n return acc;\n }, {});\n druidWebChatDispatch({\n type: 'SET_CONTEXTMENU_TRANSLATIONS',\n payload: contextMenuTranslationItems\n });\n }\n }\n }\n }\n //!druidWebChatState.directlineOptions?.token && !druidWebChatState.directlineInstance -> second condition -> could be botConnection sent from parameters. should stop authorizeCall\n if (druidWebChatState.loaded && currentState.INITIALIZATION_STATUS !== 'failed') {\n if(druidWebChatState.directlineInstance && !druidWebChatState.directlineOptions?.token) {\n const localBackendEndTimestamp = moment().utc();\n const { token, conversationId, webSocket, watermark, druidApiUrl, serverTimestamp, domain, druidBotApiUrl, withCredentials, initiatorUserId, initiatorBotId,speechToken, isBotApiEnabled, isOutOfBandUpload, backendStartTimestamp, backendEndTimestamp, speechRegion, isVoiceChannel, userId, botId,\n } = druidWebChatState.directlineInstance as any;\n const { authorizationResultDto } = currentState.mergedChatOptions;\n druidWebChatDispatch({\n type: 'SET_DIRECTLINEOPTIONS',\n payload: {\n token,\n conversationId,\n webSocket,\n watermark: watermark || '0',\n druidApiUrl,\n druidBotApiUrl,\n serverTimestamp: serverTimestamp.toISOString(),\n isBotApiEnabled: isBotApiEnabled,\n domain,\n isOutOfBandUpload: isOutOfBandUpload,\n backendStartTimestamp: backendStartTimestamp?.toISOString() || localBackendEndTimestamp.toISOString(),\n backendEndTimestamp: backendEndTimestamp?.toISOString(),\n withCredentials: !!withCredentials,\n initiatorUserId: initiatorUserId,\n initiatorBotId: initiatorBotId\n }\n });\n\n setCommons(authorizationResultDto);\n } else {\n if (!druidWebChatState.directlineOptions?.token) { // common path. above if is used in multichat dependency\n\n const { authorizationResultDto, withCredentials, withCredentials_authorization, authorizationBaseUrl, baseUrl, authorizationUrl, customAuthHeaders: customAuthHeaders, conversationToken_namePrefix, cookieDomain, conversationTokenEnabled } = currentState.mergedChatOptions;\n const authorizationDto = buildAuthorizationDto(currentState.mergedChatOptions, currentState);\n \n var authorizeResult;\n if (!authorizationResultDto) {\n authorizeResult = await pRetry(async () => {\n const authorizeCallResult = await doAuthorize({\n baseUrl: authorizationBaseUrl || baseUrl,\n authorizationUrl: authorizationUrl,\n authorizationDto,\n withCredentials: (withCredentials_authorization !== undefined ? withCredentials_authorization : withCredentials_authorization) ? \"include\" : \"omit\",\n customAuthHeaders\n });\n if (authorizeCallResult.status >= 400 && authorizeCallResult.status < 500) {\n throw new pRetry.AbortError(authorizeCallResult.status?.toString());\n }\n \n return authorizeCallResult.json();\n }, {\n retries: 4,\n minTimeout: 1000,\n maxTimeout: 2000\n }).catch((ex) => {\n druidWebChatDispatch({\n type: 'INITIALIZATION_STATUS',\n payload: 'failed',\n withMessage: ex?.message\n });\n });\n \n // response could be wrapped by APC \"result\" structure\n authorizeResult = authorizeResult?.result || authorizeResult;\n \n if (!authorizeResult) { // failed\n return;\n } else {\n if (!authorizeResult.token) {\n druidWebChatDispatch({\n type: 'INITIALIZATION_STATUS',\n payload: 'failed'\n });\n return;\n }\n }\n } else {\n authorizeResult = authorizationResultDto;\n }\n \n \n const backendEndTimestamp = moment().utc();\n \n const { token, conversationId, conversationToken, watermark, botDto, serverTime, domain, speechToken, speechRegion, isVoiceChannel, userId, botId,\n botDto: { isWebSocket, apiUrl, botApiUrl, isBotApiEnabled, isOutOfBandUpload, logoImage }\n } = authorizeResult;\n \n if (token && conversationToken) {\n setCookie(DruidCookies.DruidConversationToken, conversationToken, { domain: cookieDomain || \"\" }, currentState);\n }\n \n druidWebChatDispatch({\n type: 'SET_DIRECTLINEOPTIONS',\n payload: {\n token,\n conversationId,\n webSocket: isWebSocket,\n watermark: watermark || '0',\n druidApiUrl: apiUrl,\n druidBotApiUrl: botApiUrl,\n serverTimestamp: serverTime,\n isBotApiEnabled: isBotApiEnabled,\n domain,\n isOutOfBandUpload: isOutOfBandUpload,\n backendStartTimestamp: backendStartTimestamp.toISOString(),\n backendEndTimestamp: backendEndTimestamp.toISOString(),\n withCredentials: !!withCredentials,\n initiatorUserId: userId,\n initiatorBotId: botId\n }\n });\n \n druidWebChatDispatch({\n type: 'SET_SPEECHOPTIONS',\n payload: {\n ...{\n speechToken,\n speechRegion,\n isVoiceChannel\n }\n }\n });\n \n if (logoImage && !currentState.mergedChatOptions.styleOptions?.botAvatarImage) {\n druidWebChatDispatch({\n type: 'SET_MERGEDCHATOPTIONS',\n payload: {\n styleOptions: {\n botAvatarInitials: '',\n botAvatarImage: logoImage,\n }\n }\n });\n }\n \n if (userId && userId !== currentState.mergedChatOptions.userId) {// could generate node_modules\\botframework-webchat-api\\src\\hooks\\Composer.tsx -> dispatch(disconnect()) on directline\n druidWebChatDispatch({\n type: 'SET_MERGEDCHATOPTIONS',\n payload: {\n UI: {\n activityStatusUserName: userId // change only the displayName, not the actual userId. could be wrong\n }\n }\n });\n }\n \n setCommons(authorizeResult);\n }\n }\n \n }\n }, [druidWebChatState.directlineOptions, druidWebChatState.mergedChatOptions.baseUrl, druidWebChatState.loaded, druidWebChatState.mergedChatOptions.botId, druidWebChatState.mergedChatOptions.withCredentials, druidWebChatDispatch]);\n}","import * as React from 'react';\nimport { unmountComponentAtNode } from 'react-dom';\n\nimport 'rxjs';\nimport 'rxjs/add/observable/dom/ajax';\n\nimport SignatureCanvas from 'react-signature-canvas';\nimport { Store } from 'redux';\nimport sendFiles from 'botframework-webchat-core/lib/actions/sendFiles';\n// import * as pdfjsLib from 'pdfjs-dist/build/pdf.mjs';\n\n// import * as PDFLib from 'pdf-lib/dist/pdf-lib.min.js';\n// import * as pdfjsLib from 'pdfjs-dist/build/pdf.js';\n// import * as pdfjsWorker from 'pdfjs-dist/build/pdf.worker.mjs';\nimport { WebChatState } from '../WebChatContext';\n\nexport interface DruidDocumentViewerProps {\n documentSrc: string;\n store: Store;\n determinedDir: string;\n fileName: string;\n signatureFieldText: string;\n signatureScale: string;\n signButtonName: string;\n cancelButtonName: string;\n saveButtonName: string;\n uploadButtonName: string;\n signatureColorCode: string; \n}\n\ndeclare type SignaturePages = { [key: number]: { [key: number]: SignatureItem[] } };\ndeclare type SignatureItem = { signatureLeft: number, signatureTop: number, pageNo: number, signatureType: number };\n\nexport class DruidDocumentViewer extends React.Component {\n // private signatureLeft: number[] = [];\n // private signatureTop: number[] = [];\n private pagesWithSignature: SignaturePages = {};\n private allSignatures: SignatureItem[] = [];\n private signatureFieldTextSplit: string[] = [];\n private signatureFieldTextSplitByPipe: string[] = [];\n // private pngImageBytes: [];\n private signaturePage: number = 0;\n private scale: number = 0;\n private onResizeHandler;\n private pngImageBytes: string[] = [];\n\n private sigPad: any[] = [];\n private pdfInstance: any;\n private canvasHeight: number = 0;\n private signatureFieldTextHeight: number = 0;\n private privateScale: number = 0;\n private initialMetaViewPort: Element | undefined = undefined;\n private get buttonFontSize(): number {\n return this.privateScale * 12;\n }\n\n constructor(props: DruidDocumentViewerProps) {\n super(props);\n }\n\n async componentDidMount() {\n\n // const pdfjsLib = await import(\n // /* webpackChunkName: \"pdfjs-dist\" */ \n // 'pdfjs-dist/webpack.mjs');\n const pdfjsLib = await import(\n /* webpackChunkName: \"pdfjs-dist\" */ \n 'pdfjs-dist/build/pdf.mjs');\n // this is just a preload\n await import(\n /* webpackChunkName: \"pdflib\" */ \n 'pdf-lib/dist/pdf-lib.min.js');\n\n Array.from(document.getElementsByClassName('signaturePadContainer')).forEach(elem => (elem as any).style.display = 'none');\n\n const width = document.documentElement.clientWidth;\n if (width <= 450) {\n this.privateScale = 0.4;\n } else if (width <= 700) {\n this.privateScale = 0.7;\n } else if (width <= 1000) {\n this.privateScale = 1.0;\n } else {\n this.privateScale = 1.5;\n }\n this.scale = 1.5;\n\n const { default: pdfjsWorker } = await import(\n /* webpackChunkName: \"pdfjsWorker\" */ \n 'pdfjs-dist/build/pdf.worker.min.mjs');\n\n if (typeof pdfjsWorker === 'string') {\n const pdfjsWorkerBlob = new Blob([pdfjsWorker], {type: 'application/javascript' });\n const pdfjsWorkerBlobURL = URL.createObjectURL(pdfjsWorkerBlob);\n pdfjsLib.GlobalWorkerOptions.workerSrc = pdfjsWorkerBlobURL;\n } else {\n pdfjsLib.GlobalWorkerOptions.workerSrc = './pdf.worker.js'; // external settup\n }\n\n const loadingTask = pdfjsLib.getDocument({ url: this.props.documentSrc, isEvalSupported: false});\n this.signatureFieldTextSplit = this.props.signatureFieldText.split(' ');\n this.signatureFieldTextSplitByPipe = this.props.signatureFieldText.split('|');\n new Promise((promise) => {\n loadingTask.promise.then(async (pdf) => {\n this.pdfInstance = pdf;\n const container = document.getElementById('pdf-container');\n // const modal = document.getElementById('druid_jsDocumentViewer_v2');\n this.onResizeHandler = this.onResize.bind(this);\n window.addEventListener('resize', this.onResizeHandler);\n\n // Loop from 1 to total_number_of_pages in PDF document\n for (let i = 1; i <= pdf.numPages; i++) {\n // Get desired page\n const page = await pdf.getPage(i);\n const viewport = page.getViewport({ scale: this.scale });\n const div = document.createElement('div');\n // Set id attribute with page-#{pdf_page_number} format\n div.setAttribute('id', 'page-' + (page._pageIndex + 1));\n div.addEventListener('click', event => {\n \n });\n // This will keep positions of child elements as per our needs\n div.setAttribute('style', 'position: relative');\n // Append div within div#container\n container?.appendChild(div);\n // Create a new Canvas element\n const canvas = document.createElement('canvas');\n // Append Canvas within div#page-#{pdf_page_number}\n div.appendChild(canvas);\n const context = canvas.getContext('2d');\n canvas.height = viewport.height;\n this.canvasHeight = canvas.height;\n canvas.width = viewport.width;\n const renderContext = {\n canvasContext: context,\n viewport\n };\n const items = await page.getTextContent();\n if (items.items.length > 0) {\n this.signatureFieldTextSplitByPipe.forEach((signatureFieldTextByPipe, pipeIdx) => {\n items.items.forEach((textItem: any, index) => {\n if (textItem.str === signatureFieldTextByPipe || textItem.str === this.signatureFieldTextSplit[0]) {\n let proceedWithCheck = true;\n if (textItem.str === this.signatureFieldTextSplit[0] && this.signatureFieldTextSplit.length > 1) {\n proceedWithCheck = items.items.slice(index, index + (this.signatureFieldTextSplit.length * 2 - 1)).map((ti: any) => ti.str).join('') === signatureFieldTextByPipe;\n }\n\n if (proceedWithCheck) {\n this.signaturePage = page._pageIndex;\n const transformArray = pdfjsLib.Util.transform(page.getViewport({ scale: this.scale }).transform, textItem.transform);\n this.signatureFieldTextHeight = textItem.height;\n\n // promise(this.signaturePage);\n if (!this.pagesWithSignature[this.signaturePage]) {\n this.pagesWithSignature[this.signaturePage] = {};\n }\n\n if (!this.pagesWithSignature[this.signaturePage][pipeIdx]) {\n this.pagesWithSignature[this.signaturePage][pipeIdx] = [];\n //{signatureLeft: number, signatureTop: number}[]\n }\n\n this.pagesWithSignature[this.signaturePage][pipeIdx] = [...this.pagesWithSignature[this.signaturePage][pipeIdx], ...[{ signatureLeft: transformArray[4], signatureTop: transformArray[5], pageNo: this.signaturePage, signatureType: pipeIdx }]];\n this.allSignatures = [...this.allSignatures, { signatureLeft: transformArray[4], signatureTop: transformArray[5], pageNo: this.signaturePage, signatureType: pipeIdx }];\n this.forceUpdate();\n }\n }\n });\n });\n\n }\n // Render PDF page\n page.render(renderContext as any);\n }\n\n promise(this.pagesWithSignature);\n\n }).catch(ex => {\n this.closeCustomModal(true);\n });\n\n\n }).then((pagesWithSignature: SignaturePages) => {\n\n Object.keys(pagesWithSignature).map(ps => parseInt(ps)).forEach(pageNo => {\n const pageElement = document.getElementById(`page-${pageNo + 1}`);\n const pageObject = pagesWithSignature[pageNo];\n Object.entries(pageObject).map(([key, value]) => ({ signatureIndex: parseInt(key), signaturePositions: value })).forEach((signature) => {\n\n const slIndex = signature.signatureIndex;\n\n (signature.signaturePositions as any).forEach((sp) => {\n const { signatureLeft, signatureTop } = sp;\n const modal = document.getElementById('druid_jsDocumentViewer_v2');\n const canvas = modal?.querySelectorAll('canvas').item(0);\n const signingButton = document.createElement('button');\n const pdfContainer = document.getElementById('pdf-container');\n modal && canvas && signingButton.setAttribute('style', 'position: absolute; z-index: 1200; left:' + (signatureLeft * canvas.offsetWidth / canvas.width + (modal.offsetWidth > canvas.offsetWidth ? (modal.offsetWidth - canvas.offsetWidth) / 2 - (modal.offsetWidth - pdfContainer!.offsetWidth) / 2 : 0) + 'px; bottom:' + Math.round(0.025 * modal.offsetHeight + canvas.offsetHeight - (signatureTop * canvas.offsetHeight / canvas.height - this.signatureFieldTextHeight * this.privateScale)) + 'px; font-size: ' + this.buttonFontSize + 'px'));\n signingButton.setAttribute('id', this.getSigningButtonId(sp));\n signingButton.classList.add(`signingButton_${slIndex}`, 'btn', 'btn-info');\n signingButton.innerHTML = this.props.signButtonName || 'Sign here';\n signingButton.addEventListener('click', event => {\n this.zoomOutMobile();\n\n const saveButton = document.getElementById(`signaturePadSave_${slIndex}`);\n // var newSaveButton = saveButton.cloneNode(true);\n // (saveButton as any).replaceWith(newSaveButton);\n // const clickYPosition = event.pageY;\n document.getElementById(`signaturePadContainer_${slIndex}`)!.style.display = 'block';\n document.getElementById(`signaturePadContainer_${slIndex}`)!.style.top = `${document.getElementById('druid_jsDocumentViewer_v2')!.scrollTop + document.getElementById(`signaturePadContainer_${slIndex}`)!.clientHeight}px`;\n this.sigPad[slIndex].getCanvas().height = document.getElementById(`signaturePadCanvasContainer_${slIndex}`)!.clientHeight;\n this.sigPad[slIndex].getCanvas().width = document.getElementById(`signaturePadCanvasContainer_${slIndex}`)!.clientWidth;\n\n saveButton?.addEventListener('click', event => {\n if (!this.sigPad[slIndex].isEmpty()) {\n // document.getElementById(`signingButton_${slIndex}`).style.display = 'none';\n Array.from(document.getElementsByClassName(`signingButton_${slIndex}`)).forEach(elem => (elem as any).style.display = 'none');\n this.pngImageBytes[slIndex] = this.sigPad[slIndex].getTrimmedCanvas().toDataURL('image/png');\n\n Array.from(modal!.querySelectorAll(`.signature-image_${slIndex}`)).forEach(newSignatureImageElement => {\n const pageNumberAttribute = parseInt(newSignatureImageElement.attributes.getNamedItem('page-number')!.value);\n const currentPageElement = document.getElementById(`page-${pageNumberAttribute + 1}`);\n newSignatureImageElement.setAttribute('draggable', 'false');\n // const img = document.getElementById('signature-image');\n // newSignatureImageElement.setAttribute('style', `position: absolute;transform:scale(${this.props.signatureScale}); cursor: pointer; left:${signatureLeft * canvas.offsetWidth / canvas.width + (modal.offsetWidth > canvas.offsetWidth ? (modal.offsetWidth - canvas.offsetWidth) / 2 - (modal.offsetWidth - pdfContainer.offsetWidth) / 2 : 0)}px; bottom:${Math.round(0.025 * modal.offsetHeight + canvas.offsetHeight - (signatureTop * canvas.offsetHeight / canvas.height - this.signatureFieldTextHeight * this.privateScale))}px; height: ${this.privateScale * 40}px; width: ${this.privateScale * 80}px; background-color: transparent`);\n // Send data to server instead...\n newSignatureImageElement.setAttribute('src', this.pngImageBytes[slIndex]);\n\n currentPageElement?.appendChild(newSignatureImageElement);\n (newSignatureImageElement as HTMLImageElement).onclick = (event) => {\n this.zoomOutMobile();\n document.getElementById(`signaturePadContainer_${slIndex}`)!.style.display = 'block';\n // this.sigPad.clear();\n // this.sigPad.fromDataURL(this.pngImageBytes[slIndex], { ratio: 3});\n if (this.sigPad[slIndex].getCanvas().height !== document.getElementById(`signaturePadCanvasContainer_${slIndex}`)!.clientHeight && document.getElementById(`signaturePadCanvasContainer_${slIndex}`)!.clientHeight !== 0) {\n this.sigPad[slIndex].getCanvas().height = document.getElementById(`signaturePadCanvasContainer_${slIndex}`)!.clientHeight;\n }\n\n if (this.sigPad[slIndex].getCanvas().width !== document.getElementById(`signaturePadCanvasContainer_${slIndex}`)!.clientWidth && document.getElementById(`signaturePadCanvasContainer_${slIndex}`)!.clientWidth !== 0) {\n this.sigPad[slIndex].getCanvas().width = document.getElementById(`signaturePadCanvasContainer_${slIndex}`)!.clientWidth;\n }\n }\n });\n document.getElementById(`signaturePadContainer_${slIndex}`)!.style.display = 'none';\n document.getElementById('druid-icon-save')!.style.display = 'inline-block';\n }\n });\n });\n\n pageElement?.appendChild(signingButton);\n });\n\n\n });\n });\n\n\n\n\n });\n }\n\n changeViewPort(key, val) {\n const reg = new RegExp(key, 'i');\n let oldval = (document.querySelector('meta[name=\"viewport\"]') as any).content;\n const newval = reg.test(oldval) ? oldval.split(/,\\s*/).map(v => reg.test(v) ? key + '=' + val : v).join(', ') : oldval += ', ' + key + '=' + val;\n (document.querySelector('meta[name=\"viewport\"]') as any).content = newval;\n }\n\n zoomOutMobile() {\n this.initialMetaViewPort = document.querySelectorAll('meta[name=viewport]')[0];\n if (this.initialMetaViewPort) {\n this.initialMetaViewPort.remove();\n }\n document.head.insertAdjacentHTML('beforeend', '');\n\n document.querySelectorAll('meta[name=viewport]')[0].remove();\n document.head.insertAdjacentHTML('beforeend', '');\n }\n\n onResize() {\n const modal = document.getElementById('druid_jsDocumentViewer_v2');\n const canvas = modal?.querySelector('canvas'); // pdf canvas\n const pdfContainer = document.getElementById('pdf-container');\n\n this.sigPad.forEach((sp, slIndex) => {\n sp.getCanvas().height = document.getElementById(`signaturePadCanvasContainer_${slIndex}`)!.clientHeight; // signpad canvas\n sp.getCanvas().width = document.getElementById(`signaturePadCanvasContainer_${slIndex}`)!.clientWidth;\n })\n \n\n const width = document.documentElement.clientWidth;\n if (width <= 450) {\n this.privateScale = 0.4;\n } else if (width <= 700) {\n this.privateScale = 0.7;\n } else if (width <= 1000) {\n this.privateScale = 1.0;\n } else {\n this.privateScale = 1.5;\n }\n\n this.allSignatures.forEach(sl => {\n const signatureImage = document.getElementById(this.getSignatureImageId(sl));\n const signingButton = document.getElementById(this.getSignatureImageId(sl));\n if (!signatureImage || (signatureImage.getAttribute('src') === null || signatureImage.getAttribute('src') === '')) {\n signingButton && canvas && modal && pdfContainer && signingButton.setAttribute('style', 'position: absolute; z-index: 1200; left:' + (sl.signatureLeft * canvas.offsetWidth / canvas.width + (modal.offsetWidth > canvas.offsetWidth ? (modal.offsetWidth - canvas.offsetWidth ) / 2 - (modal.offsetWidth - pdfContainer.offsetWidth)/2 : 0) + 'px; bottom:' + Math.round(0.025 * modal.offsetHeight + canvas.offsetHeight - (sl.signatureTop * canvas.offsetHeight / canvas.height - this.signatureFieldTextHeight * this.privateScale)) + 'px; font-size: ' + this.buttonFontSize + 'px' ));\n } else {\n if (signatureImage) {\n canvas && modal && pdfContainer && signatureImage.setAttribute('style', `position: absolute;transform:scale(${this.props.signatureScale}); cursor: pointer; left:${sl.signatureLeft * canvas.offsetWidth / canvas.width + (modal.offsetWidth > canvas.offsetWidth ? (modal.offsetWidth - canvas.offsetWidth) / 2 - (modal.offsetWidth - pdfContainer.offsetWidth)/2 : 0)}px; bottom:${Math.round(0.025 * modal.offsetHeight + canvas.offsetHeight - (sl.signatureTop * canvas.offsetHeight / canvas.height - this.signatureFieldTextHeight * this.privateScale))}px; height: ${this.privateScale * 40}px; width: ${this.privateScale * 80}px; background-color: transparent`);\n }\n }\n })\n \n }\n\n closeCustomModal(isCancel?: true) {\n try {\n window.removeEventListener('resize', this.onResizeHandler);\n const CustomModalWindow = document.getElementById('druid_jsDocumentViewer_v2');\n\n if (!!CustomModalWindow) {\n CustomModalWindow.classList ? CustomModalWindow.classList.remove('open') : CustomModalWindow.className = CustomModalWindow.className.replace(new RegExp('(^|\\\\b)' + 'open'.split(' ').join('|') + '(\\\\b|$)', 'gi'), ' ');\n\n // $(document).unbind('keyup.Escape');\n\n if (!!document.getElementById('druidWebchatSignDocumentModal')) {\n unmountComponentAtNode(document.getElementById('druidWebchatSignDocumentModal')!);\n const toDelElem = document.getElementById('druidWebchatSignDocumentModal');\n toDelElem?.parentNode?.removeChild(toDelElem);\n }\n\n if (this.pdfInstance) {\n this.pdfInstance.destroy();\n }\n if (isCancel) {\n // const storeState = this.props.store.getState();\n \n this.props.store.dispatch({\n type: 'WEB_CHAT/SEND_EVENT',\n payload: {\n name: 'CancelUpload',\n value: {}\n }\n });\n // storeState.directlineInstance?.postActivity({\n // type: 'event',\n // name: 'CancelUpload',\n // from: {\n // id: storeState.directlineOptions.use\n // },\n // value: {}\n // }).subscribe();\n }\n localStorage.removeItem('Druid_SignDocument_ActivityId');\n }\n } catch (ex) {\n console.error(ex);\n }\n }\n\n async saveDocument() {\n\n // Fetch an existing PDF document\n try {\n const existingPdfBytes = await fetch(this.props.documentSrc).then(res => res.arrayBuffer());\n const PDFLib = await import(\n /* webpackChunkName: \"pdflib\" */ \n 'pdf-lib/dist/pdf-lib.min.js');\n\n // Load a PDFDocument from the existing PDF bytes\n const pdfDoc = await PDFLib.PDFDocument.load(existingPdfBytes);\n new Promise((resolve, reject) => {\n this.allSignatures.forEach(async (signature, index) => {\n if(this.pngImageBytes[signature.signatureType]) {\n const arrayBuffer = await fetch(this.pngImageBytes[signature.signatureType]).then(res => res.arrayBuffer());\n const pngImage = await pdfDoc.embedPng(arrayBuffer);\n\n const pages = pdfDoc.getPages();\n const page = pages[signature.pageNo];\n\n page.drawImage(pngImage, {\n x: signature.signatureLeft / this.scale,\n y: (page.getHeight() - signature.signatureTop / this.scale),\n width: 80 * parseFloat(this.props.signatureScale), // to sync with others\n height: 40 * parseFloat(this.props.signatureScale)\n });\n } else {\n resolve(false)\n }\n \n if(index === this.allSignatures.length - 1) {\n resolve(true);\n }\n \n });\n }).then(async (resp) => {\n if(!resp) return;\n // Serialize the PDFDocument to bytes (a Uint8Array)\n const pdfBytes = await pdfDoc.save();\n const blob = new Blob([pdfBytes], { type: 'application/pdf' });\n const file = new File([blob], this.props.fileName, { type: 'application/pdf' }); // to change file name\n this.props.store.dispatch(sendFiles([{\n name: file.name,\n size: file.size,\n url: window.URL.createObjectURL(file)\n }]));\n this.closeCustomModal();\n });\n } catch (ex) {\n console.error(ex);\n }\n\n }\n\n private getSignatureImageId(sl: SignatureItem) {\n return `${sl.pageNo}_${sl.signatureLeft}_${sl.signatureTop}_signature-image`;\n }\n\n private getSigningButtonId(sl: SignatureItem) {\n return `signingButton_${sl.pageNo}_${sl.signatureLeft}_${sl.signatureTop}`;\n }\n\n render() {\n\n // $(document).on('keyup.Escape', ()=> {\n // this.closeCustomModal();\n // });\n\n const modal = document.getElementById('druid_jsDocumentViewer_v2');\n const canvas = modal && modal.querySelectorAll('canvas').item(0);\n const pdfContainer = document.getElementById('pdf-container');\n\n return (
\n
\n
\n {/* */}\n\n
\n {\n modal && canvas && this.allSignatures.map((sl, idx) =>\n ( canvas.offsetWidth ? (modal.offsetWidth - canvas.offsetWidth) / 2 - (modal.offsetWidth - pdfContainer!.offsetWidth) / 2 : 0)}px`,\n bottom: `${Math.round(0.025 * modal.offsetHeight + canvas.offsetHeight - (sl.signatureTop * canvas.offsetHeight / canvas.height - this.signatureFieldTextHeight * this.privateScale))}px`,\n // height: `${this.privateScale * 40}px`,\n width: `${this.privateScale * 80}px`,\n backgroundColor: 'transparent'\n }}\n >\n\n )\n )\n\n }\n\n {\n\n this.signatureFieldTextSplitByPipe && this.signatureFieldTextSplitByPipe.map((sl, idx) => (
\n
\n { this.sigPad[idx] = ref; }}>\n
\n
\n \n \n \n\n
\n
))\n\n }\n\n \n {\n !this.props.uploadButtonName ?\n (\n this.saveDocument()} title=\"Save\" id=\"druid-icon-save\" className=\"druid-icon-save\">\n \n \n ):\n (\n \n )\n }\n { this.closeCustomModal(true); }} title=\"Close\" className=\"druid-icon-close\">\n \n \n {/* className=\"fa fa-2x fa-times icon-close\" */}\n {/* \n \n */}\n {/* */}\n
\n\n
);\n }\n}\n","import React, { useContext, useEffect, useMemo } from \"react\";\nimport { withDevTools as createStoreWithDevTools } from 'botframework-webchat-core/lib/createStore';\nimport DruidWebchatContext, { DruidWebchatContextType, WebChatState } from \"../WebChatContext\";\nimport { ConnectionStatus, SenderActionAction } from 'botframework-directlinejs';\nimport { Subscription } from \"rxjs/Subscription\";\nimport { DruidCookies, WebChatOptions } from \"../WebChatOptions\";\nimport sendFiles from 'botframework-webchat-core/lib/actions/sendFiles';\n\nimport activityFromBot from 'botframework-webchat-core/src/definitions/activityFromBot';\nimport clearSuggestedActions from 'botframework-webchat-core/lib/actions/clearSuggestedActions';\nimport dismissNotification from 'botframework-webchat-core/lib/actions/dismissNotification';\nimport setLanguage from 'botframework-webchat-core/lib/actions/setLanguage';\nimport setNotification from 'botframework-webchat-core/lib/actions/setNotification';\nimport moment from \"moment\";\nimport { v4 as uuidv4 } from 'uuid';\nimport { getCookie, setCookie } from \"../utils/cookiesUtils\";\nimport { ensureHttpProtocol } from \"../utils/urlUtils\";\nimport pRetry from \"p-retry\";\nimport { doHeartBeat } from \"../WebChatServices\";\nimport { druidLanguageComparison, isNewActivity, mapConversationHistoryActivityToActivity, shouldEnter_sensitiveDataInputMode } from \"../logics/druidBusinessLogic\";\nimport { Observable, BehaviorSubject } from 'rxjs';\n\nimport { blockingInput_ignorableActivity } from \"../logics/ignorableActivity\";\nimport { DruidDocumentViewer } from \"../components/DruidDocumentViewer\";\nimport { determineDirection } from \"../utils/localeUtils\";\n\n\nimport { render } from \"react-dom\";\nimport { makeThumbnail } from \"../utils/pictureUtils\";\n\nexport const useCreateBFStore = ({ initialOptions }: { initialOptions: WebChatOptions }) => {\n\n const [druidWebChatState, druidWebChatDispatch, getState] = useContext(DruidWebchatContext);\n\n const debounceTypingOnOff = useMemo(() => {\n const behaviorSubject = new BehaviorSubject(null);\n let typingOffTimeout: any = null;\n behaviorSubject.debounceTime(300).distinctUntilChanged().subscribe(showTyping => {\n if (showTyping !== null) {\n typingOffTimeout && clearTimeout(typingOffTimeout);\n if(showTyping === false) {\n typingOffTimeout = setTimeout(() => druidWebChatDispatch({ type: 'SET_SHOWTYPING', payload: showTyping }), 700);\n }\n druidWebChatDispatch({ type: 'SET_SHOWTYPING', payload: showTyping });\n }\n });\n return behaviorSubject;\n }, [druidWebChatDispatch]);\n\n useEffect(() => {\n return () => {\n debounceTypingOnOff && debounceTypingOnOff.complete();\n }\n }, [debounceTypingOnOff]);\n\n\n // should have a druidWebchatState.loaded == true dependency for reload/reset to work effective. used some conditional rendering to avoid issues.\n return useMemo(\n () => {\n const customDruidMiddleware = ({ dispatch, getState: getBFState }) => next => action => {\n druidWebChatDispatch(action); // forward to internal chat\n if (!action.payload?.activity?.channelData?.isActivityStatusUpdate) {\n // const currentState = getState();\n // initialOptions.webChatEventHandler && initialOptions.webChatEventHandler(action, currentState, getBFState());\n\n // if(currentState.mergedChatOptions.webChatEventHandler) {\n // currentState.mergedChatOptions.webChatEventHandler(action, currentState, getBFState());\n // }\n } else { // if isActivityStatusUpdate and from 'bot' => return false and break the chain of actions\n const { activity: { from: { role = \"\" } = {} } } = action.payload || {};\n if (role === 'bot') {\n return false;\n }\n }\n return next(action);\n };\n const subscriptions: Subscription[] = [];\n let scrolledToTop = false;\n var cancelTypingTimeout: any = null;\n // initialOptions.webChatEventHandler && initialOptions.webChatEventHandler(action)\n const coreDruidMiddleware = ({ dispatch: bfDispatch, getState: getBFState }) => next => async action => {\n // const { mergedChatOptions, minimized } = druidWebChatState;\n const currentState = getState();\n const currentBFState = getBFState();\n if (action.type === 'DIRECT_LINE/INCOMING_ACTIVITY') {\n const { payload: { activity, activity: { channelData, locale: activityLocale } } } = action;\n if (!activity.channelData?.isActivityStatusUpdate) {\n if (activity.type === 'event') {\n const toLowerCaseName = ((activity.name as string) || \"\").toLowerCase();\n switch (toLowerCaseName) {\n case 'set-druid-cookies': {\n druidWebChatDispatch({ type: 'SET_DRUID_COOKIES', payload: activity });\n return;\n }\n case 'robotjsstartprocess': {\n if (!!activity.value && isNewActivity(currentState, activity)) {\n const params = JSON.parse(activity.value);\n const isRobotJsV2 = !!params.EndpointUrl;\n const handleException = (e: any): string => {\n let errorMessage = e.Message || e.message;\n let f = e.InnerException;\n while (f != null) {\n errorMessage += '/' + f.Message;\n f = f.InnerException;\n }\n return errorMessage;\n }\n\n (async () => {\n try {\n const UiPathRobotPromise = await import(\n /* webpackChunkName: \"robotjs\" */\n '@uipath/robot'\n );\n\n const UiPathRobot = UiPathRobotPromise.UiPathRobot;\n\n const robot = UiPathRobot.init();\n const processes = await robot.getProcesses();\n\n const storeState = getState();\n const proc = processes.find(p => p.name.includes(params.ProcessName));\n const jobId = uuidv4();\n\n if (!proc) {\n throw new Error(`UIPath Process <${params.ProcessName}> not found!`);\n }\n\n if (isRobotJsV2) {\n // [robotjs v2]\n const processParams = JSON.parse(params.ProcessParams);\n const startProcessTimestamp = moment().utc().toISOString();\n const jobPromise = proc.start(processParams);\n jobPromise.onStatus(message => {\n console.log(`${proc.name}: ${message}`);\n });\n\n await storeState.directlineInstance?.postActivity({\n from: { id: storeState.mergedChatOptions.userId || \"\" },\n name: 'RobotJsProcessStatus',\n type: 'event',\n value: { JobId: jobId, JobStatus: 'job.created' }\n }).toPromise();\n\n try {\n const jobResults = await jobPromise;\n const endProcessTimestamp = moment().utc().toISOString();\n const results = {\n Type: 'job.completed',\n Token: params.EndpointSecret,\n Job: {\n // \"Id\": job.jobId,\n Key: jobId,\n // \"State\": \"Successful\",\n StartTime: startProcessTimestamp,\n EndTime: endProcessTimestamp,\n Info: null,\n OutputArguments: jobResults\n }\n };\n\n await storeState.directlineInstance?.sendAjaxRequest({\n url: params.EndpointUrl,\n method: 'POST',\n body: results,\n headers: {\n 'Content-Type': 'application/json'\n }\n }).toPromise();\n } catch (ex) {\n const endProcessTimestamp = moment().utc().toISOString();\n const errorResults = {\n Type: 'job.faulted',\n Token: params.EndpointSecret,\n Job: {\n Key: jobId,\n StartTime: startProcessTimestamp,\n EndTime: endProcessTimestamp,\n Info: handleException(ex)\n }\n };\n\n await storeState.directlineInstance?.sendAjaxRequest({\n url: params.EndpointUrl,\n method: 'POST',\n body: errorResults,\n headers: {\n 'Content-Type': 'application/json'\n }\n }).toPromise();\n }\n\n } else {\n // [robotjs v1]\n\n const job = proc.start(params);\n\n const results = { $entityTypeName$: 'RobotJsOutput' };\n\n const jobResults = await job;\n Object.assign(results, jobResults);\n storeState.directlineInstance?.postActivity({\n from: { id: storeState.mergedChatOptions.userId || \"\" },\n name: params.CallbackUtterance,\n type: 'event',\n value: results\n }).subscribe(() => {\n console.log(params.CallbackUtterance + ' sent');\n });\n }\n\n } catch (e) {\n // If anything goes wrong\n console.log(`Exception: ${e}`);\n\n const storeState = getState();\n\n if (isRobotJsV2) {\n await storeState.directlineInstance?.postActivity({\n from: { id: storeState.mergedChatOptions.userId || \"\" },\n name: 'RobotJsProcessStatus',\n type: 'event',\n value: { JobStatus: 'job.failed', Info: handleException(e) }\n }).toPromise();\n\n } else {\n await storeState.directlineInstance?.postActivity({\n from: { id: storeState.mergedChatOptions.userId || \"\" },\n name: 'Exception',\n type: 'event',\n value: { $entityTypeName$: 'SystemError', Message: handleException(e), CorrelationId: params.CorrelationId }\n }).toPromise();\n }\n\n }\n })();\n }\n break;\n }\n\n case 'signdocument': {\n try {\n if (!!activity.value && (isNewActivity(currentState, activity) || localStorage.getItem('Druid_SignDocument_ActivityId') === activity.id)) {\n const parsedJSON = JSON.parse(activity.value);\n setTimeout(() => {\n const determinedDir = determineDirection(getState().mergedChatOptions?.dir, getState().locale);\n try {\n localStorage.setItem('Druid_SignDocument_ActivityId', activity.id);\n const rootElem = document.createElement('div');\n rootElem.setAttribute('id', 'druidWebchatSignDocumentModal');\n const drdWebchatRoot = document.body; // getElementById('druidWebchatRoot')\n const newElem = drdWebchatRoot.appendChild(rootElem);\n const { DocumentUrl: documentSrc, FileName: fileName, SignatureFieldText: signatureFieldText, SignatureScale: signatureScale = '1',\n SignButtonName: signButtonName, CancelButtonName: cancelButtonName, SaveButtonName: saveButtonName, UploadButtonName: uploadButtonName, SignatureColorCode: signatureColorCode = \"#000000\" } = parsedJSON;\n const reactElem = React.createElement(DruidDocumentViewer, { documentSrc, store: getState().store, determinedDir, fileName, signatureFieldText, signatureScale, signButtonName, cancelButtonName, saveButtonName, uploadButtonName, signatureColorCode}, null);\n render(reactElem, newElem, () => {\n document.querySelectorAll('#druid_jsDocumentViewer_v2 .documentViewer__container').item(0).scrollTop = 0;\n const CustomModalWindow = document.getElementById('druid_jsDocumentViewer_v2');\n CustomModalWindow && (CustomModalWindow.classList ? CustomModalWindow.classList.add('open') : CustomModalWindow.className += ' ' + 'open');\n });\n } catch (ex) {\n getState().store.dispatch({\n type: 'WEB_CHAT/SEND_EVENT',\n payload: {\n name: 'CancelUpload',\n value: {}\n }\n });\n }\n }, 100);\n }\n } catch (ex) {\n console.error(ex);\n }\n break;\n }\n case 'changetopreviousconversation':\n case 'changeconversation': { // should refactor -> don't use cookie.\n try {\n if (!!activity.value && isNewActivity(currentState, activity)) {\n const parsedJSON = JSON.parse(activity.value);\n if (parsedJSON.ConversationId !== currentState.directlineOptions?.conversationId) {\n currentState.directlineInstance?.end(); // end previous connection\n if (parsedJSON.DruidConversationToken) {\n druidWebChatDispatch({\n type: 'RESET',\n withNewDruidConversationToken: parsedJSON.DruidConversationToken,\n withNewAuthorizationDtoDetails: !!getState().mergedChatOptions?.authorizationResultDto && {\n conversationId: parsedJSON.ConversationId,\n token: parsedJSON.ConversationToken,\n druidConversationToken: parsedJSON.DruidConversationToken,\n watermark: '0'\n },\n withAutoExpand: true\n });\n }\n\n }\n }\n\n } catch (ex) {\n console.error(ex);\n }\n\n break;\n }\n\n case 'redirecttossopage': {\n try {\n if (!!activity.value && isNewActivity(currentState, activity)) {\n try {\n const parsedJSON = JSON.parse(activity.value);\n\n const formatString = (str: string, ...val: string[]) => {\n for (let index = 0; index < val.length; index++) {\n str = str.replace(`{${index}}`, val[index]);\n }\n return str;\n };\n\n window.location.href = formatString(parsedJSON.RedirectUrl, window.location.href);\n } catch (ex) {\n console.error(`RedirectToSSoPage BCEvent failed with message: ${ex}`);\n }\n }\n } catch (ex) {\n console.error(ex);\n }\n break;\n }\n case 'redirecttopage': {\n try {\n if (!!activity.value && isNewActivity(currentState, activity)) {\n try {\n const parsedJSON = JSON.parse(activity.value);\n parsedJSON.RedirectUrl = ensureHttpProtocol(parsedJSON.RedirectUrl);\n if (!parsedJSON.InSameWindow) {\n Object.assign(document.createElement('a'), { target: '_blank', href: parsedJSON.RedirectUrl }).click();\n } else {\n window.location.href = parsedJSON.RedirectUrl;\n }\n } catch (ex) {\n console.error(`RedirectToPage BCEvent failed with message: ${ex}`);\n }\n }\n } catch (ex) {\n console.error(ex);\n }\n break;\n }\n\n case 'changedisplayname': {\n if (!!activity.value) {\n try {\n const params = JSON.parse(activity.value);\n if (params.BotDisplayName) {\n druidWebChatDispatch({ type: 'SET_MERGEDCHATOPTIONS', payload: { UI: { activityStatusBotName: params.BotDisplayName } } });\n }\n\n if (params.UserDisplayName) {\n druidWebChatDispatch({ type: 'SET_MERGEDCHATOPTIONS', payload: { UI: { activityStatusUserName: params.UserDisplayName } } });\n }\n } catch (ex) {\n\n }\n }\n return;\n }\n\n case 'userauthenticated': {\n if (!!activity.value) {\n try {\n const params = JSON.parse(activity.value);\n if (params.FirstName) {\n druidWebChatDispatch({ type: 'SET_MERGEDCHATOPTIONS', payload: { UI: { activityStatusUserName: params.FirstName } } });\n }\n } catch (ex) {\n\n }\n }\n return;\n }\n\n case 'startliveness': {\n try {\n if (isNewActivity(currentState, activity)) {\n (async () => {\n await import(\n /* webpackChunkName: \"liveness\" */\n '@druidsoft/liveness/dist/build/static/js/druid_liveness.js'\n );\n if ((window as any).DruidLiveness) {\n let params;\n const parsedJSON = JSON.parse(activity.value);\n console.log(parsedJSON);\n if (parsedJSON.$entityTypeName$ === 'Liveness') {\n params = {\n intro_screen: parsedJSON.intro_screen || 1,\n isWithLiveness: parsedJSON.isWithLiveness !== undefined ? parsedJSON.isWithLiveness : true,\n isWithPicture: parsedJSON.isWithPicture === true,\n videoRecordingMs: parsedJSON.videoRecordingMs !== undefined ? parsedJSON.videoRecordingMs : 5000,\n UI: { chatBotAvatarUrl: parsedJSON.chatBotAvatarUrl, companyLogoUrl: parsedJSON.companyLogoUrl, modalFooterBgColor: parsedJSON.modalFooterBgColor },\n language: parsedJSON.language !== undefined ? parsedJSON.language : \"ro\"\n };\n }\n\n (window as any).DruidLiveness.init(params).subscribe(async o => {\n if (o) {\n\n const { styleOptions: { uploadThumbnailWidth, uploadThumbnailHeight, uploadThumbnailContentType, uploadThumbnailQuality } = {} } = getState().mergedChatOptions;\n \n const code = o.code;\n const payload = o.payload;\n // const eyesOpenedBlob = payload.eyesOpenedBlob;\n // const videoRecordingBlob = payload.videoRecordingBlob;\n // const isHuman = payload.isHuman;\n // const arePermissionsGranted = payload.arePermissionsGranted;\n // const hasError = payload.hasError;\n // const instruction = payload.instruction;\n // const instructionTime = payload.instructionTime;\n const { eyesOpenedBlob, videoRecordingBlob, imageBlob, isHuman, arePermissionsGranted, hasError, instruction, instructionTime, isWithPicture, language } = payload;\n\n const replace_bad_chars = function (text) {\n return text.replace(/[<>\"':;\\\\/|*!?]/g, \"_\")\n };\n\n switch (code) {\n case 0: {\n console.log('A intrat pe code 0');\n const storeState = getState();\n\n storeState.store.dispatch({\n type: 'WEB_CHAT/SEND_EVENT',\n payload: {\n name: 'livenessselfie',\n value: { $entityTypeName$: 'Liveness' }\n }\n });\n\n if (eyesOpenedBlob) {\n console.log('S-a facut dispatch la img');\n const file = new File([eyesOpenedBlob], `liveness_selfie_${replace_bad_chars(activity.id)}_${(storeState.directlineInstance as any)?.conversationId}.png`, { type: eyesOpenedBlob.type }); // to change file name\n storeState.store.dispatch(sendFiles([{\n name: file.name,\n size: file.size,\n url: window.URL.createObjectURL(file),\n thumbnail: await makeThumbnail(\n file,\n uploadThumbnailWidth,\n uploadThumbnailHeight,\n uploadThumbnailContentType,\n uploadThumbnailQuality\n )\n }]));\n\n // this.store.dispatch(sendFiles([file] as any as FileList, this.props.user, this.props.locale));\n }\n break;\n }\n case 1: {\n const storeState = getState();\n storeState.store.dispatch({\n type: 'WEB_CHAT/SEND_EVENT',\n payload: {\n name: 'livenessresponse',\n value: {\n $entityTypeName$: 'Liveness',\n IsHuman: !!isHuman,\n arePermissionsGranted: !!arePermissionsGranted,\n hasError: !!hasError,\n instruction: instruction,\n instructionTime: instructionTime\n }\n }\n });\n // isWithPicture param is ignored. videoRecording has priority even though videoRecording param will not be sent if isWithPicture === true.\n if (videoRecordingBlob) {\n const extension = videoRecordingBlob.type === 'video/webm' ? 'webm' : 'mp4';\n const file = new File([videoRecordingBlob], `liveness_${replace_bad_chars(activity.id)}_${(storeState.directlineInstance as any)?.conversationId}.${extension}`, { type: videoRecordingBlob.type }); // to change file name\n storeState.store.dispatch(sendFiles([{\n name: file.name,\n size: file.size,\n url: window.URL.createObjectURL(file)\n }]));\n } else {\n if(imageBlob) {\n const file = new File([imageBlob], `liveness_image_${replace_bad_chars(activity.id)}_${(storeState.directlineInstance as any)?.conversationId}.png`, { type: imageBlob.type }); // to change file name\n storeState.store.dispatch(sendFiles([{\n name: file.name,\n size: file.size,\n url: window.URL.createObjectURL(file),\n thumbnail: await makeThumbnail(\n file,\n uploadThumbnailWidth,\n uploadThumbnailHeight,\n uploadThumbnailContentType,\n uploadThumbnailQuality\n )\n }]));\n }\n }\n break;\n }\n default:\n break;\n }\n }\n });\n }\n })();\n }\n }\n catch (ex) {\n console.error(`StartLiveness failed with error message: ${ex}`);\n }\n break;\n }\n\n default:\n break;\n }\n }\n\n if (activity.type === 'message') {\n if (activity.inputHint === 'blockingInput') { // blockinput\n // druidWebChatDispatch({ type: 'SET_MERGEDCHATOPTIONS', payload: { UI: { blockingInputDruidSendBox: true } } });\n if(currentState.mergedChatOptions?.UI?.accessibilityFeaturesEnabled && document.activeElement?.getAttribute('data-id') === 'webchat-sendbox-input') {\n setTimeout(() => DruidWebchat_v2?.hooks?.focus(\"main\"), 0);\n }\n druidWebChatDispatch({ type: 'SET_INPUT_BLOCKED', payload: true });\n } else {\n if (currentState.inputBlocked && !blockingInput_ignorableActivity(activity)) { // ignorableActivity used for inactivityMessage -> don't unblock input\n // druidWebChatDispatch({ type: 'SET_MERGEDCHATOPTIONS', payload: { UI: { blockingInputDruidSendBox: false } } });\n druidWebChatDispatch({ type: 'SET_INPUT_BLOCKED', payload: false });\n }\n }\n\n if (activity.suggestedActions && activity.suggestedActions.actions?.length > 0 && activity.attachmentLayout) {\n druidWebChatDispatch({ type: 'SET_MERGEDCHATOPTIONS', payload: { styleOptions: { suggestedActionLayout: activity.attachmentLayout } } });\n }\n\n if (activityFromBot(activity) && activity.type === 'message') { // activity.type === 'message' is redundant\n if ((isNewActivity(currentState, activity)) && activityLocale && activityLocale !== currentBFState.language) { // change locale from message locale\n bfDispatch(setLanguage(activityLocale));\n }\n\n const should_SENSITIVEDATAINPUT_MODE_be_enabled = shouldEnter_sensitiveDataInputMode(activity);\n // could be removed. added handler inside webchatReducer.\n // there was a problem, when DL is polling mode and two consecutive sensitive data inputs were sent (confirm password). this bit of code is processed before webchatReducer handlers -> SET_SENSITIVEDATAINPUT_MODE ended always false, because of the post_activity_fullfiled regarding the first step password.\n if (currentState.sensitiveDataInputMode !== should_SENSITIVEDATAINPUT_MODE_be_enabled) {\n druidWebChatDispatch({ type: 'SET_SENSITIVEDATAINPUT_MODE', payload: should_SENSITIVEDATAINPUT_MODE_be_enabled });\n }\n\n if (isNewActivity(currentState, activity) && !!activity.channelData?.inactivityMessage) { // inactivityMessage\n bfDispatch(setNotification({\n id: 'inactivity_message_notification',\n level: 'info',\n message: activity.text,\n alt: '',\n data: {}\n }));\n return false;\n }\n\n if (currentState.mergedChatOptions?.notificationsEnabled && (!DruidWebchat_v2.isWindowFocused || currentState.minimized) && isNewActivity(currentState, activity)) { // new message notifications\n druidWebChatDispatch({ type: 'SET_NEWMESSAGE', payload: true });\n DruidWebchat_v2.notificationsSounds?.druidNewMessageNotification?.play().then(() => {\n }).catch(() => {\n setTimeout(() => {\n try {\n DruidWebchat_v2.notificationsSounds?.druidNewMessageNotification?.play();\n } catch (ex) { }\n }, 1000);\n });\n }\n } else {\n if (currentBFState.suggestedActions?.length > 0) {// hide suggested actions if last message is not from bot\n bfDispatch(clearSuggestedActions());\n }\n }\n\n //initially, when no message from the user is sent, autoScrollSnap won't work because of a BF limitation. this should fix the problem.\n if(!scrolledToTop && !!currentState.mergedChatOptions?.styleOptions?.autoScrollSnapOnPage && activityFromBot(activity) && activity.type === 'message' && currentBFState.activities && isNewActivity(currentState, activity)) {\n const hasUserActivities = currentBFState.activities.some(act => act?.type === 'message' && !activityFromBot(act));\n if(!hasUserActivities) {\n scrolledToTop = true;\n DruidWebchat_v2.hooks.scrollTo({ scrollTop: 0}, 'auto');\n }\n }\n }\n }\n }\n if (action.type === 'DIRECT_LINE/QUEUE_INCOMING_ACTIVITY') {\n const { payload: { activity, activity: { channelData } } } = action;\n if (!activity.channelData?.isActivityStatusUpdate) {\n if (activity.type === 'typing') { // show hide typing override\n if (!channelData || channelData.isHideTyping !== true) {\n debounceTypingOnOff.next((currentState.mergedChatOptions?.UI?.showTypingName && activity.from?.name) || true);\n // druidWebChatDispatch({type: 'SET_SHOWTYPING', payload: true});\n } else {\n debounceTypingOnOff.next(false);\n\n // druidWebChatDispatch({type: 'SET_SHOWTYPING', payload: false});\n }\n }\n\n if(activity.type === 'message' && (!activityFromBot(activity) || !!activity.channelData?.clientActivityID)) {\n activity.textFormat = 'plain';\n }\n }\n }\n if (action.type === 'DIRECT_LINE/CONNECT_FULFILLED') {\n subscriptions.push(action.payload.directLine.webServiceStatus$\n .subscribe((serviceStatus) => {\n const currentBFState = getBFState();\n if (currentBFState.connectivityStatus !== \"uninitialized\") {\n druidWebChatDispatch({ type: 'SERVICESTATUS_CHANGE', payload: serviceStatus });\n }\n }\n ));\n subscriptions.push(action.payload.directLine.connectionStatus$\n .subscribe((connStatus) => {\n if (connStatus === ConnectionStatus.ExpiredToken || connStatus === ConnectionStatus.FailedToConnect) {\n druidWebChatDispatch({ type: 'RESET' });\n }\n }\n ));\n }\n\n if (action.type === 'DIRECT_LINE/DISCONNECT') {\n }\n\n if (action.type === 'DIRECT_LINE/DISCONNECT_FULFILLED') {\n\n }\n\n if (action.type === 'WEB_CHAT/SET_SUGGESTED_ACTIONS') { // set suggestedActions layout based on attachmentLayout (uncommented)\n // if(action.payload.suggestedActions && action.payload.suggestedActions.length > 0 && action.payload.attachmentLayout) {\n // druidWebChatDispatch({ type: 'SET_MERGEDCHATOPTIONS', payload: { styleOptions: { suggestedActionLayout: action.payload.attachmentLayout }} });\n // }\n if (currentState.sensitiveDataInputMode && action.payload.suggestedActions && !action.payload.suggestedActions.length) { // if sensitiveDataInputMode is on, don't hide suggestedActions\n return false;\n }\n }\n\n if (action.type === 'WEB_CHAT/SEND_MESSAGE') {\n if (currentState.sensitiveDataInputMode && !action.payload._druidInternal_suggestedAction_cancel_button && !action.payload._druidInternal_passThrough_sensitiveDataInputMode) {\n if (action.payload.method === 'keyboard') {\n druidWebChatDispatch({ type: 'INTERNAL/PROCCESS_SENSITIVE_MESSAGE', payload: { originalSendMessage: action } });\n }\n\n return false;\n }\n if (currentBFState.notifications && currentBFState.notifications['inactivity_message_notification']) {\n bfDispatch(dismissNotification('inactivity_message_notification'));\n }\n\n if (currentState.mergedChatOptions.heartBeatUrl) { // heartbeat\n try {\n const heartBeatResult = await pRetry(async () => {\n const heartBeatCallResult = await doHeartBeat({\n baseUrl: currentState.mergedChatOptions.heartBeatUrl || \"\"\n });\n\n return heartBeatCallResult.status;\n }, {\n retries: 0,\n minTimeout: 1000,\n maxTimeout: 2000\n }).catch(() => {\n return 500;\n });\n\n if (heartBeatResult >= 500) {\n document.location.href = '/'; // go to home of website\n }\n\n } catch (ex) {\n console.error(ex);\n }\n }\n }\n if (action.type === 'DIRECT_LINE/UPDATE_CONNECTION_STATUS') {\n // dispatch({\n // type: 'WEB_CHAT/SEND_EVENT',\n // payload: {\n // name: 'webchat/join',\n // value: {\n // language: window.navigator.language\n // }\n // }\n // });\n // this.webServiceStatusSubscription = botConnection.webServiceStatus$.subscribe(serviceStatus => this.store.dispatch({ type: 'ServiceStatus_Change', serviceStatus }));\n // subscriptions.push(action.payload.directLine.webServiceStatus$.subscribe((serviceStatus) => {\n // // debugger;\n // druidWebChatDispatch({ type: 'SERVICESTATUS_CHANGE', payload: serviceStatus });\n // }\n // ));\n }\n\n if (action.type === 'WEB_CHAT/SET_LANGUAGE' && action.payload?.language) { // triggered from setLanguage dispatch above\n // druidWebChatDispatch({\n // type: 'SET_LOCALE',\n // payload: action.payload.language\n // });\n if (!druidLanguageComparison(currentState.locale, action.payload.language)) {\n druidWebChatDispatch({\n type: 'SET_SELECTEDLANGUAGE',\n payload: action.payload.language,\n skipPostEvent: true\n });\n }\n }\n\n if (action.type === 'WEB_CHAT/SET_SEND_BOX') {\n const { text: sendBoxValue } = action.payload;\n\n if (!!cancelTypingTimeout) {\n clearTimeout(cancelTypingTimeout);\n }\n if (sendBoxValue) { // to ignore '' value when SUBMIT_SEND_BOX. we only cancel previous typingOn action. it will be handled by 'WEB_CHAT/SUBMIT_SEND_BOX'\n cancelTypingTimeout = setTimeout(() => {\n currentState.directlineInstance?.postSenderAction(SenderActionAction._0);\n }, 2001);\n\n currentState.directlineInstance?.postSenderAction(SenderActionAction._1);\n } else {\n currentState.directlineInstance?.postSenderAction(SenderActionAction._0);\n }\n }\n\n if (action.type === 'WEB_CHAT/SUBMIT_SEND_BOX') { // send cancel typing. this has no effect if already is off because of distinctUntilChanged in directlinejs\n currentState.directlineInstance?.postSenderAction(SenderActionAction._0);\n }\n\n if (action.type === 'WEB_CHAT/STOP_DICTATE') {\n if (currentBFState.sendBoxValue) { // fixes microphone stays disabled when speaking is on and user inputs text in sendbox (stopping)\n bfDispatch({ type: 'WEB_CHAT/SET_DICTATE_STATE', payload: { dictateState: 0 } }); // force dictate state to IDLE instead of STOPPING\n }\n }\n\n return next(action);\n };\n const conversationHistoryActivities = getState().mergedChatOptions?.conversationHistoryActivities || [];\n const bfStore = createStoreWithDevTools({activities: conversationHistoryActivities?.map((ch, idx) => mapConversationHistoryActivityToActivity(ch, conversationHistoryActivities?.length - 11 <= idx)) || [] }, ...[coreDruidMiddleware, customDruidMiddleware]);\n\n\n return { bfStore, subscriptions };\n },\n [druidWebChatDispatch, initialOptions.webChatEventHandler, activityFromBot] /* , druidWebChatState?.mergedChatOptions?.conversationHistoryActivities */\n );\n};\n\n","import { FC, useContext } from \"react\";\r\nimport { MessageStatus } from 'botframework-directlinejs';\r\nimport DruidWebchatContext, { DruidWebchatContextType } from \"../WebChatContext\";\r\nimport useStyleToEmotionObject from 'botframework-webchat-component/lib/hooks/internal/useStyleToEmotionObject';\r\nimport classNames from \"classnames\";\r\nimport { useMergedOptions } from '../selectors/useMergedOptions';\r\n// import useStyleOptions from \"botframework-webchat/lib/hooks/useStyleOptions\";\r\nimport { hooks } from 'botframework-webchat-api';\r\n\r\n\r\nconst { useDirection, useStyleOptions } = hooks;\r\nconst DruidActivityStatus: FC<{status: number, className: string, activityStatusReadColor: Nullable}> = (({ status, className, activityStatusReadColor }) => {\r\n const [druidWebChatState,,] = useContext(DruidWebchatContext);\r\n const [direction] = useDirection();\r\n\r\n const [{ subtle, accent }] = useStyleOptions();\r\n // const { UI: { activityStatusReadColor } = {}, } = useMergedOptions();\r\n\r\n\r\n\r\n const styleToEmotionObject = useStyleToEmotionObject();\r\n const ROOT_STYLE = {}[`&.${className}`] = {\r\n display: 'flex',\r\n margin: 'auto',\r\n '> svg.druid-icon-check': {\r\n '&.druid-icon-check-read': {\r\n color: activityStatusReadColor || accent\r\n },\r\n '&.druid-icon-check-delivered': {\r\n color: subtle\r\n },\r\n '&.druid-icon-check-sent': {\r\n // color: 'red'\r\n }\r\n }\r\n };\r\n \r\n const rootClassName = styleToEmotionObject(ROOT_STYLE) + '';\r\n\r\n const svgStyle = { height: '15px', marginLeft: direction === 'ltr' ? '3px' : undefined, marginRight: direction === 'rtl' ? '3px' : undefined, width: '15px' };\r\n return druidWebChatState.directlineOptions?.isBotApiEnabled ? \r\n (\r\n \r\n {\r\n status > 1 ?\r\n \r\n : \r\n }\r\n \r\n ) \r\n : (null);\r\n});\r\n\r\nexport default DruidActivityStatus;","import React, {FC, useLayoutEffect, useRef} from 'react';\nimport ImageAttachment from 'botframework-webchat-component/lib/Attachment/ImageAttachment';\nimport { hooks } from 'botframework-webchat-component';\n\n\n\nconst { useActivities } = hooks;\n\n/* eslint react/prop-types: \"off\" */\n/* eslint react/require-default-props: \"off\" */\n\nconst ImageAttachmentWrapper: FC<{attachment, viewPictureHandler}> = ({attachment, viewPictureHandler}) => {\n const wrRef = useRef(null);\n useLayoutEffect(() => {\n\n // removed by MM: images are rendered with large dimmensions. leave as they are from bfv4. preview is available for fullscale image.\n\n // const imgDivWrapper = wrRef.current?.querySelector('div');\n \n // const imgElement = imgDivWrapper?.querySelector('img');\n // if(imgElement) {\n // imgElement.style.position = 'relative';\n // imgElement.style.left = \"0\";\n // imgElement.style.top = \"0\";\n // imgElement.style.transform = \"none\";\n // }\n \n }); \n\n const [activities] = useActivities();\n const images = activities.filter(act => act.type === 'message' && act.attachments?.length)\n .map(att => att.type === 'message' && att.attachments?.filter(fAtt => /^image\\//u.test(fAtt.contentType)))\n .flat();\n const idx = images.findIndex(att => att === attachment);\n\n return (\n
viewPictureHandler(idx)} style={{cursor: 'pointer'}}>\n \n \n
);\n}\n\nexport default ImageAttachmentWrapper;","import React, { useLayoutEffect } from \"react\";\n\nexport const useButtonsClassesEffect = ({ wrRef, attachment }: { wrRef: React.RefObject, attachment: any }) => {\n useLayoutEffect(() => {\n wrRef.current?.querySelectorAll('.ac-pushButton').forEach((button, idx) => {\n const { channelData: { buttonClass = \"\" } = {} } = {} = attachment.content.buttons[idx] || {};\n buttonClass && button.classList.add(buttonClass); // TODO: add default class\n });\n }); // , [attachment]\n};","import React, {FC, useLayoutEffect, useMemo, useRef} from 'react';\nimport HeroCardContent from 'botframework-webchat/lib/adaptiveCards/Attachment/HeroCardContent';\nimport { useButtonsClassesEffect } from '../hooks/useButtonsClassesEffect';\nimport classNames from 'classnames';\n\nconst HeroCardWrapper: FC<{attachment: any, disabled: boolean}> = ({attachment, disabled}) => {\n const wrRef = useRef(null);\n\n const { content, content: { buttons, images, subtitle, text, description }} = attachment;\n const hasButtons = !!buttons?.length;\n const hasImages = (images as any[] || [])?.some(img => img.url);\n const hasText = !!subtitle || !!text || !!description;\n const isRichCard = hasButtons === hasImages ? hasButtons : hasText; // a minimum of two conditions are met\n const className = useMemo(\n () => classNames(\n isRichCard && 'druid-hero-card__rich',\n isRichCard && hasButtons && 'druid-hero-card__rich--has-buttons',\n isRichCard && hasImages && 'druid-hero-card__rich--has-images',\n isRichCard && hasText && 'druid-hero-card__rich--has-text',\n !isRichCard && hasButtons && 'druid-hero-card__buttons-only',\n !isRichCard && hasImages && 'druid-hero-card__icons-only',\n !isRichCard && hasText && 'druid-hero-card__text-only')\n , [hasButtons, hasImages, hasText, isRichCard]);\n\n useButtonsClassesEffect({wrRef, attachment});\n\n useLayoutEffect(() => { // add druid decorators. only druid-hero-card__buttons-only is used for now.\n if(className) { // throws error without checking\n const classNames = className.split(\" \");\n wrRef.current?.parentElement?.classList.add(...classNames);\n }\n }, [className]);\n return (\n
\n \n \n {/* \n\n */}\n
);\n}\n\nexport default HeroCardWrapper;","import React, {FC, useLayoutEffect, useMemo, useRef} from 'react';\r\nimport ThumbnailCardContent from 'botframework-webchat/lib/adaptiveCards/Attachment/ThumbnailCardContent';\r\nimport { useButtonsClassesEffect } from '../hooks/useButtonsClassesEffect';\r\nimport classNames from 'classnames';\r\n\r\nconst ThumbnailCardWrapper: FC<{attachment: any, disabled: boolean}> = ({attachment, disabled}) => {\r\n const wrRef = useRef(null);\r\n \r\n const { content, content: { buttons, images, subtitle, text, description }} = attachment;\r\n const hasButtons = !!buttons?.length;\r\n const hasImages = !!images?.length;\r\n const hasText = !!subtitle || !!text || !!description;\r\n const isRichCard = hasButtons === hasImages ? hasButtons : hasText; // a minimum of two conditions are met\r\n const className = useMemo(\r\n () => classNames(isRichCard && 'druid-thumbnail-card__rich', !isRichCard && hasButtons && 'druid-thumbnail-card__buttons-only', !isRichCard && hasImages && 'druid-thumbnail-card__icons-only', !isRichCard && hasText && 'druid-thumbnail-card__text-only')\r\n , [hasButtons, hasImages, hasText, isRichCard]);\r\n\r\n\r\n useButtonsClassesEffect({wrRef, attachment});\r\n\r\n useLayoutEffect(() => { // add druid decorators. only druid-hero-card__buttons-only is used for now.\r\n wrRef.current?.parentElement?.classList.add(className);\r\n }, [className]);\r\n return (\r\n
\r\n \r\n \r\n
);\r\n}\r\n\r\nexport default ThumbnailCardWrapper;","import React, { FC, useContext, useMemo } from \"react\";\nimport DruidWebchatContext, { DruidWebchatContextType } from \"../WebChatContext\";\nimport useStyleToEmotionObject from 'botframework-webchat-component/lib/hooks/internal/useStyleToEmotionObject';\nimport classNames from \"classnames\";\nimport { useMergedOptions } from '../selectors/useMergedOptions';\n\nimport ScreenReaderText from 'botframework-webchat-component/lib/ScreenReaderText';\nimport useLocalizedGlobalize from 'botframework-webchat-api/lib/hooks/internal/useLocalizedGlobalize';\nimport useWebChatAPIContext from 'botframework-webchat-api/lib/hooks/internal/useWebChatAPIContext';\n\nimport { hooks } from 'botframework-webchat-api';\nimport { hooks as compHooks } from 'botframework-webchat-component';\nimport moment from \"moment\";\n\nconst { useStyleOptions, useDateFormatter, useLocalizer } = hooks;\nconst { useStyleSet } = compHooks;\n\nconst DruidActivityCustomTimestamp = ({ activity: { timestamp } }) => {\n // const { localizedGlobalizeState } = useWebChatAPIContext();\n // const [globalize] = localizedGlobalizeState ; \n const [{ timestampFormat }] = useStyleOptions();\n const [{ timestamp: timestampStyleSet, sendStatus: sendStatusStyleSet }] = useStyleSet();\n const { UI: { customTimestampFormat } = {} } = useMergedOptions();\n\n const localize = useLocalizer();\n\n const druidFormatDate = useMemo(() => date => moment(new Date(date)).format(customTimestampFormat) , [\n customTimestampFormat\n ]);\n\n // const druidFormatDate = useMemo(() => {\n // var globalizeFormatter = globalize.dateFormatter.bind(globalize);\n // return (date) => \n // }, [globalize, customTimestampFormat]);\n \n // const globalizeFormatter = globalize.dateFormatter.bind(globalize)\n const absoluteTime = druidFormatDate(timestamp) ;\n\n return (\n !!timestamp ? (\n \n {<>\n \n {{absoluteTime}}\n }\n \n ) : null\n );\n};\n\n\nexport default DruidActivityCustomTimestamp;","export function findNestedObjectByKey(obj: any, key: string, value: any) {\n if (obj[key] === value) {\n return obj;\n } else {\n var keys = Object.keys(obj); // add this line to iterate over the keys\n \n for (var i = 0, len = keys.length; i < len; i++) {\n var k = keys[i];\n \n // add \"obj[k] &&\" to ignore null values\n if (obj[k] && typeof obj[k] == 'object') {\n var found = findNestedObjectByKey(obj[k], key, value);\n if (found) {\n // If the object was found in the recursive call, bubble it up.\n return found;\n }\n }\n }\n }\n}\n","import { useMergedOptions } from \"../selectors/useMergedOptions\";\nimport classNames from \"classnames\";\nimport { useContext } from \"react\";\nimport DruidWebchatContext, { DruidWebchatContextType } from \"../WebChatContext\";\nimport PropTypes from 'prop-types';\n\n\nexport const ConversationHistorySeparator = (props) => {\n const { onClick, children } = props;\n const [druidWebChatState, druidWebChatDispatch, ,druidStyleToEmotionObject] = useContext(DruidWebchatContext);\n\n const { \n styleOptions : { subtle, accent, sendBoxButtonColorOnDisabled, sendBoxButtonColorOnHover, sendBoxButtonColorOnFocus, paddingRegular } = {},\n disabled,\n UI: { buttonsTextColor, headerTextColor, rootFontSize, headerButtonColorOnFocus, headerFontSize } = {}\n } = useMergedOptions();\n\n const ROOT_STYLE = {\n '&.wc-conversation-history-separator': {\n border: `1px #535874 solid`,\n height: 0,\n marginTop: 25,\n marginBottom: 25,\n marginLeft: 25,\n position: 'relative',\n cursor: 'pointer',\n '> span': {\n top: -8,\n position: 'absolute',\n backgroundColor: '#535874',\n color: 'white',\n paddingLeft: 10,\n paddingRight: 10,\n borderRadius: 15,\n fontSize: 12,\n left: '2%',\n }\n }\n };\n const rootClassName = druidStyleToEmotionObject(ROOT_STYLE) + '';\n return
{children}
;\n}\n\n// ConversationHistorySeparator.propTypes = {\n// props: PropTypes.shape({\n// className: PropTypes.string,\n// onClick: PropTypes.func,\n// }),\n// children: PropTypes.node.isRequired\n// };","import { FC, PropsWithChildren, useContext } from \"react\";\r\nimport DruidWebchatContext, { DruidWebchatContextType } from \"../WebChatContext\";\r\nimport React from \"react\";\r\nimport { useMergedOptions } from \"../selectors/useMergedOptions\";\r\n\r\n\r\nconst DruidActivityWrapper = ((props: PropsWithChildren<{ activity: any }>) => {\r\n const { UI: { activityWrapperClassEnabled } = {}\r\n } = useMergedOptions();\r\n const { children, activity } = props;\r\n const { channelData = { flowStepName: undefined, flowStepType: undefined } }: {channelData: { flowStepName?: string, flowStepType?: string } } = activity;\r\n if(!!channelData.flowStepName && !!channelData.flowStepType && !!activityWrapperClassEnabled) {\r\n const className = `druid-activity_${channelData.flowStepName.trim().replace(/[^a-zA-Z0-9]/g, \"\")}_${channelData.flowStepType.trim().replace(/[^a-zA-Z0-9]/g, \"-\")}`;\r\n return
\r\n {children}\r\n
;\r\n }\r\n return { children };\r\n});\r\n\r\nexport default DruidActivityWrapper;","import React, { useContext, useLayoutEffect, useMemo, useRef, useState } from \"react\";\nimport DruidWebchatContext, { DruidWebchatContextType } from \"../WebChatContext\";\nimport { useMergedOptions } from '../selectors/useMergedOptions';\nimport classNames from \"classnames\";\nimport DruidActivityStatus from '../components/DruidActivityStatus';\nimport { unstable_batchedUpdates } from \"react-dom\";\nimport ImageAttachmentWrapper from \"../components/ImageAttachmentWrapper\";\nimport HeroCardWrapper from \"../components/HeroCardWrapper\";\nimport ThumbnailCardWrapper from \"../components/ThumbnailCardWrapper\";\nimport { DruidImageViewHandle } from \"../components/DruidImagesViewer\";\nimport CarouselLayout from 'botframework-webchat-component/lib/Activity/CarouselLayout';\nimport StackedLayout from 'botframework-webchat-component/lib/Activity/StackedLayout';\nimport isUrl from 'validator/es/lib/isURL';\nimport { WebChatOptions } from \"../WebChatOptions\";\nimport { singleToArray, OneOrMany } from \"botframework-webchat-core\";\nimport CardActionMiddleware from \"botframework-webchat-api/lib/types/CardActionMiddleware\";\nimport AttachmentMiddleware from \"botframework-webchat-api/lib/types/AttachmentMiddleware\";\nimport ActivityMiddleware from \"botframework-webchat-api/lib/types/ActivityMiddleware\";\nimport { ActivityStatusMiddleware } from \"botframework-webchat-api/lib/types/ActivityStatusMiddleware\";\nimport ScrollToEndButtonMiddleware from \"botframework-webchat-api/lib/types/ScrollToEndButtonMiddleware\";\nimport AdaptiveCardContent from 'botframework-webchat/lib/adaptiveCards/Attachment/AdaptiveCardContent';\nimport activityFromBot from 'botframework-webchat-core/src/definitions/activityFromBot';\n\n\nimport { BehaviorSubject } from 'rxjs';\nimport { removeTapFromImagesAttachmentIfEmpty, shouldEnter_fileUploadInputMode, shouldEnter_sensitiveDataInputMode } from \"../logics/druidBusinessLogic\";\nimport useDruidLocalize from \"./useDruidLocalize\";\nimport DruidActivityCustomTimestamp from \"../components/DruidActivityCustomTimestamp\";\nimport { ignorableActivity } from \"../logics/ignorableActivity\";\nimport { findNestedObjectByKey } from \"../utils/arrayUtils\";\nimport { ConversationHistorySeparator } from \"../components/ConversationHistorySeparator\";\nimport DruidActivityWrapper from \"../components/DruidActivityWrapper\";\n\nexport const useActivityStatusMiddleware = (projectedMergedChatOptions: WebChatOptions) => {\n const [, , , druidStyleToEmotionObject] = useContext(DruidWebchatContext);\n\n const { UI: { activityStatusShowBotName, activityStatusBotName, activityStatusUserName, activityStatusShowUserName, activityStatusReadColor, customTimestampFormat, botActivitiesActionsEnabled } = {},\n styleOptions: { timestampColor, fontSizeSmall, subtle } = {}\n } = useMergedOptions();\n return [...singleToArray(projectedMergedChatOptions.activityStatusMiddleware), () => next => args => {\n const ROOT_STYLE = {\n '&.druid__webchat__activityStatus__timestamp': {\n display: 'flex',\n '& .druid__webchat__activityStatus__timestampPretext': {\n '& > span': {\n fontSize: fontSizeSmall,\n color: timestampColor || subtle\n }\n\n }\n },\n 'span.activityStatus__sendStatus': {\n fontSize: fontSizeSmall,\n color: timestampColor || subtle\n },\n 'button.copyToClipboard': {\n background: 'none',\n border: 'none',\n padding: '5px 5px 0',\n 'svg': {\n width: '14px',\n height: '14px',\n fill: '#767676',\n }\n }\n };\n\n const ACTIVITY_STATUS_STYLE = {\n '&.activityStatus__sendStatus': {\n fontSize: fontSizeSmall,\n color: timestampColor || subtle\n }\n }\n const rootClassName = druidStyleToEmotionObject(ROOT_STYLE) + '';\n const activityStatusClassName = druidStyleToEmotionObject(ACTIVITY_STATUS_STYLE) + '';\n const {\n activity,\n activity: {\n id,\n from: { role, name },\n status,\n attachments = [],\n channelData: { attachmentSizes: [firstAttachmentSize] = [] } = {}\n },\n sendState,\n sameTimestampGroup\n } = args;\n\n const botOrUserName = role === 'user' ? activityStatusShowUserName && (activityStatusUserName || name) : activityStatusShowBotName && (activityStatusBotName || name);\n if (sendState === 'sending') {\n return next(args) || Sending…;\n } else if (sendState === 'send failed') {\n const [firstAttachment] = attachments;\n if(firstAttachment && firstAttachment.contentType && !firstAttachment.thumbnailUrl && !firstAttachment.contentUrl && firstAttachmentSize) { \n // large size uploads to DL are rejected. when retrying, contentUrl is removed from the activity - patchActivity (botframework-webchat-core\\src\\reducers\\createActivitiesReducer.ts)\n return { firstAttachmentSize > 4194304 ? 'File is too big' : 'Failed to send'}\n }\n return next(args) || Failed to send;\n } else if (!sameTimestampGroup) {\n return (\n \n {{botOrUserName}{botOrUserName && <> - }}\n {\n customTimestampFormat ?\n \n :\n <>{next(args)}\n }\n {role !== 'bot' && }\n {botActivitiesActionsEnabled && role === 'bot' && !!activity.text && }\n \n );\n }\n return next(args);\n }].filter((item) => !!item) as OneOrMany;\n}\n\nconst CopyButton = React.memo(({ text }: { text: string }) => {\n const [copySucceeded, setCopySucceeded] = useState(false);\n \n const copyMessageToClipboard = async () => {\n try {\n await navigator.clipboard.writeText(text);\n setCopySucceeded(true);\n setTimeout(() => {\n setCopySucceeded(false);\n }, 1000);\n } catch (err) {\n setCopySucceeded(false);\n }\n };\n\n return (\n \n );\n});\n\nexport const useCardActionMiddleware = (projectedMergedChatOptions: WebChatOptions) => {\n const [druidWebChatState, druidWebChatDispatch, ,] = useContext(DruidWebchatContext);\n const druidLocalize = useDruidLocalize();\n //\n return [...singleToArray(projectedMergedChatOptions.cardActionMiddleware), ({ dispatch }) => next => (args) => {\n const { cardAction, /*getSignInUrl, target*/ } = args;\n const bfState = druidWebChatState.store.getState();\n switch(cardAction.type) {\n case 'imBack': {\n if(cardAction.value === '_druidInternal_suggestedAction_cancel_button') {\n dispatch({\n type: 'WEB_CHAT/SEND_MESSAGE',\n payload: {\n text: druidLocalize(\"DRUID_CANCEL_ACTION_TEXT\"),\n _druidInternal_suggestedAction_cancel_button: true,\n channelData: { buttonValue: 'UserCanceledInput', buttonType: cardAction.type }\n }\n });\n \n druidWebChatDispatch({\n type: 'INTERNAL/DISABLE_UNTIL_ANY_CONFIRMED_ACTIVITY'\n });\n \n return false;\n } else {\n druidWebChatDispatch({\n type: 'INTERNAL/DISABLE_CARDACTIONS_UNTIL_ANY_CONFIRMED_ACTIVITY',\n payload: { fromBot: true }\n });\n }\n \n unstable_batchedUpdates(async () => {\n if (bfState?.suggestedActions?.length && druidWebChatState.pristineMergedChatOptions?.styleOptions\n && druidWebChatState.pristineMergedChatOptions?.styleOptions?.suggestedActionLayout !== druidWebChatState.mergedChatOptions.styleOptions?.suggestedActionLayout) {\n druidWebChatDispatch({\n type: 'SET_MERGEDCHATOPTIONS',\n payload: {\n styleOptions: {\n suggestedActionLayout: druidWebChatState.pristineMergedChatOptions?.styleOptions?.suggestedActionLayout\n }\n }\n });\n }\n dispatch({\n type: 'WEB_CHAT/SEND_MESSAGE',\n payload: {\n text: `${cardAction.title || cardAction.text}`,\n channelData: { buttonValue: `${cardAction.value || cardAction.title}`, buttonType: cardAction.type }\n }\n });\n\n if(druidWebChatState.mergedChatOptions?.UI?.accessibilityFeaturesEnabled) {\n if(druidWebChatState.inputBlocked) {\n druidWebChatDispatch({ type: 'SET_INPUT_BLOCKED', payload: false });\n }\n setTimeout(() => { \n if(document.activeElement?.nodeName?.toLowerCase() === 'body') {\n DruidWebchat_v2?.hooks?.focus(\"sendBoxWithoutKeyboard\");\n }\n // if setTimeout is set to 0, sendbox remains readonly. component/SendBox/TextBox.tsx -> focusCallback() issue.\n }, 10);\n }\n });\n break;\n }\n\n case 'openUrl': {\n // if the action is triggered by Hero/Thumbnail with image and tap attribute -> there is no title -> no message is sent\n cardAction.title && dispatch({\n type: 'WEB_CHAT/SEND_MESSAGE',\n payload: {\n text: cardAction.title,\n channelData: { buttonValue: cardAction.value, buttonType: cardAction.type }\n }\n });\n if(!cardAction.value) { // if value is null (flowstep with type H or T, without navigationUrl defined -> tap empty object -> no cardAction.value -> then skip )\n return null;\n }\n return next(args);\n }\n\n default : {\n return next(args);\n }\n }\n }].filter((item) => !!item) as OneOrMany;\n}\n\nexport const useAtttachmentMiddleware = (druidImagesViewerRef: React.RefObject, projectedMergedChatOptions: WebChatOptions) => {\n const [druidWebChatState, , getState ,] = useContext(DruidWebchatContext);\n return [...singleToArray(projectedMergedChatOptions.attachmentMiddleware), () => next => (args) => {\n const { activity, attachment, ...others } = args;\n const { activities }: { activities: any[] } = druidWebChatState.store.getState();\n const { cardActionsDisabled } = getState();\n // const messageActivities = activities.filter(activity => activity.type === 'message');\n // const messageWithAttachmentActivities = messageActivities.filter(activity => ((activity.attachments && activity.attachments.length) || activity.suggestedActions) && activityFromBot(activity));\n\n const allNonIgnorableActivities = activities.filter(activity => !ignorableActivity(activity));\n const recentNonIgnorableActivity = allNonIgnorableActivities?.pop()?.id === activity?.id;\n\n // const recentBotMessage = messageActivities.pop()?.id === activity?.id; // could change to recentUserMessage\n // const recentBotMessageWithAttachments = messageWithAttachmentActivities.pop()?.id === activity?.id; // could change to recentUserMessage\n\n const isActivityFromUser = !activityFromBot(activity);\n // const hasChannelData_RenderHtml = true || activity?.channelData?.renderHtml === true;\n\n // if(hasChannelData_RenderHtml && activity.text) {\n // var doc = new DOMParser().parseFromString(activity.text, \"text/html\");\n // attachment.content = doc.documentElement.textContent;\n // }\n \n\n if (/^image\\//u.test(attachment.contentType)) {\n return {\n if (!!~idx) {\n unstable_batchedUpdates(() => {\n druidImagesViewerRef.current?.setShow(true);\n druidImagesViewerRef.current?.setCurrentPictureIndex(idx);\n });\n\n }\n\n }} />\n }\n switch (attachment.contentType) {\n case 'application/vnd.microsoft.card.hero': {\n\n if(attachment.content?.images?.length) {\n attachment.content.images = removeTapFromImagesAttachmentIfEmpty(attachment.content.images);\n }\n return \n ;\n }\n\n case 'application/vnd.microsoft.card.thumbnail': {\n if(attachment.content?.images?.length) {\n attachment.content.images = removeTapFromImagesAttachmentIfEmpty(attachment.content.images);\n }\n return \n ;\n }\n\n case 'application/vnd.microsoft.card.adaptive': {\n const hiddenAdaptiveCardId = activity?.channelData?.hiddenAdaptiveCardId;\n const valuesActivity = activities?.filter(act => act.type === 'message' && act.value?.hiddenAdaptiveCardId === hiddenAdaptiveCardId).pop();\n // disable feature when accessibilityFeaturesEnabled == true => the focus is lost and body is focused.\n if(!druidWebChatState?.mergedChatOptions?.UI?.accessibilityFeaturesEnabled && valuesActivity?.value && (!activity.channelData?.adaptiveCard_valuesRestored_fromActivityId || activity.channelData?.adaptiveCard_valuesRestored_fromActivityId !== valuesActivity.id)) {\n Object.entries(valuesActivity.value).forEach(([key, value]) => {\n const field = findNestedObjectByKey(attachment.content?.body, \"id\", key); //?.find(field => field.id === key);\n field && (field.value = field.type !== \"Input.Number\" ? value : parseInt(value?.toString()) || 0);\n });\n attachment.content = {...attachment.content };\n activity.channelData ??= {};\n activity.channelData.adaptiveCard_valuesRestored_fromActivityId = valuesActivity.id;// valuesActivity.id;\n }\n return (\n \n );\n }\n \n\n case 'text/plain': {\n \n // if(hasChannelData_RenderHtml || !isActivityFromUser) {\n // attachment.contentType = \"text/markdown\";\n // return next(args);\n // }\n\n const hasUrl = attachment.content?.split(/(?:,|;|-| |\"|<|>)+/).find(subString => isUrl(subString, { require_protocol: false, require_valid_protocol: false }));\n const hasHTMLTag = !!~attachment.content?.indexOf('>') || !!~attachment.content?.indexOf('<');\n\n if (hasUrl && (!isActivityFromUser || !hasHTMLTag)) {\n attachment.contentType = \"text/markdown\";\n }\n\n return next(args);\n }\n\n default:\n return next(args);\n\n }\n }].filter((item) => !!item) as OneOrMany;\n}\n\nexport const useActivityMiddleware = (projectedMergedChatOptions: WebChatOptions) => {\n const [druidWebChatState, druidWebChatDispatch , getDruidState ,] = useContext(DruidWebchatContext);\n const druidLocalize = useDruidLocalize();\n const { styleOptions: { paddingRegular } = {}\n } = useMergedOptions();\n // projectedMergedChatOptions.activityMiddleware,\n return [...singleToArray(projectedMergedChatOptions.activityMiddleware), () => next => (...setupArgs) => {\n const currentBFStoreState = druidWebChatState.store.getState();\n const messageActivities = currentBFStoreState.activities.filter(act => act.type === 'message').reverse();\n const { activity = {} } = setupArgs[0];\n // paddingRegular\n if(activity.channelData?.conversationHistory) {\n const currentDruidState = getDruidState();\n const { isShown, loadAllMessages, separator } = activity.channelData?.conversationHistory;\n if(loadAllMessages) {\n if(currentDruidState.conversationHistoryShowAll) {\n return false;\n } else {\n return druidWebChatDispatch({type: 'CONVERSATION_HISTORY_SHOWALL', payload: true})}>Load all messages ↑;\n }\n }\n if(separator) {\n return Active conversation;\n }\n \n if(isShown === false && !currentDruidState.conversationHistoryShowAll) {\n return false;\n }\n }\n \n if (activity.type === \"message\") {\n if (!!activity.value) { // submit action on custom adaptivecard -> should not render anything\n return false;\n }\n\n if ((messageActivities && messageActivities.indexOf(activity) > 200)) {\n return
; // fixes other bugs (not scrolling to bottom). could not return false, returned empty div but there are white spaces on top of the transcript.\n }\n if ((activity.attachments || []).length > 1 && activity.attachmentLayout === 'carousel' && activity.text) { //separate the message from attachment to render two \"activities\". this way the carousel scrolls only the attachments\n return (renderAttachment, props) => {\n const { attachments, attachmentLayout, ...messageWithoutAttachments } = activity;\n const { text, ...messageWithoutText } = activity;\n return (\n \n
\n false } }} />\n
\n \n
\n )\n };\n }\n\n // MM: careful -> two cases are handled here\n if(shouldEnter_sensitiveDataInputMode(activity)) { //|| shouldEnter_fileUploadInputMode(activity)\n activity.suggestedActions = {\n actions: [\n { type: \"imBack\", title: druidLocalize(\"DRUID_CANCEL_BUTTON_TEXT\"), text: druidLocalize(\"DRUID_CANCEL_ACTION_TEXT\"), value: \"_druidInternal_suggestedAction_cancel_button\", channelData: { buttonClass: \"\" }, _druidInternal_suggestedAction_cancel_button: true }\n ]\n }\n }\n\n return (...renderArgs) => { next(setupArgs[0])(...renderArgs) } ;\n\n }\n return next(...setupArgs);\n }\n ].filter((item) => !!item) as OneOrMany;\n}\n\nexport const useScrollToEndButtonMiddleware = (projectedMergedChatOptions: WebChatOptions, debounceHideSuggestedActions: BehaviorSubject) => {\n return useMemo(() => {\n var ignoreHideSuggestedActions: boolean = false;\n var hideSuggestedActionsTimeout: any = null;\n return [...singleToArray(projectedMergedChatOptions.scrollToEndButtonMiddleware), () => (next) => (args) => {\n if(ignoreHideSuggestedActions) {\n return next(args);\n }\n //atEnd could be used for suggestedAction hiding\n var { atEnd, styleOptions: { scrollToEndButtonBehavior }, unread } = args;\n // debounceHideSuggestedActions.next(!atEnd);\n // var atEndRefined = atEnd;\n // if (!atEnd) {\n // const scrollableTranscript = document.querySelector('.webchat__basic-transcript__scrollable');\n // if (scrollableTranscript) {\n // const { scrollHeight, scrollTop, offsetHeight } = scrollableTranscript;\n // atEnd = scrollHeight - scrollTop - offsetHeight < 10;\n // // if (atEndRefined !== isAtEndRefined) return next(args);\n // }\n // }\n // args.atEnd = atEnd;\n\n // if(hideSuggestedActionsTimeout) {\n // clearTimeout(hideSuggestedActionsTimeout);\n // }\n // if (!atEndRefined) {\n \n // hideSuggestedActionsTimeout = setTimeout(() => debounceHideSuggestedActions.next(!atEndRefined), 500);\n\n // } else {\n const hideSuggestedActions = !atEnd;\n if(debounceHideSuggestedActions.getValue() !== hideSuggestedActions && !hideSuggestedActions) {\n ignoreHideSuggestedActions = true;\n if(hideSuggestedActionsTimeout) {\n clearTimeout(hideSuggestedActionsTimeout);\n }\n hideSuggestedActionsTimeout = setTimeout(() => ignoreHideSuggestedActions = false, 500);\n }\n debounceHideSuggestedActions.next(!atEnd);\n // }\n\n return next(args);\n }].filter((item) => !!item) as OneOrMany\n }, [projectedMergedChatOptions.scrollToEndButtonMiddleware, debounceHideSuggestedActions]);\n}","import { Activity } from \"@druidsoft/botframework-directlinejs\";\n\nexport const blockingInput_ignorableActivity = (activity: Activity) => {\n return !!activity?.channelData?.inactivityMessage || !!activity?.channelData?.isActivityStatusUpdate;\n}\n\nexport const ignorableActivity = (activity: Activity) => {\n // to lower case\n const activityName = (activity as any)?.name?.toLowerCase();\n return !!activity?.channelData?.inactivityMessage \n || activityName === \"EnableChat\".toLowerCase() \n || activityName === \"Authentication\".toLowerCase() \n || activityName === \"LanguageChanged\".toLowerCase()\n || activityName === \"userAuthenticated\".toLowerCase()\n || activity?.type === 'typing'\n ;\n}","\r\nimport { FC, useCallback, useContext } from \"react\";\r\nimport DruidWebchatContext, { DruidWebchatContextType, WebChatHeaderOptions } from \"../../WebChatContext\";\r\n\r\n\r\nimport { useMergedOptions } from \"../../selectors/useMergedOptions\";\r\nimport * as bsIcons from 'react-icons/bs';\r\nimport IconButton from 'botframework-webchat-component/lib/SendBox/IconButton';\r\nimport classNames from \"classnames\";\r\nimport useDruidLocalize from \"../../hooks/useDruidLocalize\";\r\n\r\n\r\n\r\nexport const DruidReloadSelector: FC = () => {\r\n const [, druidWebChatDispatch, ,] = useContext(DruidWebchatContext);\r\n\r\n const {\r\n styleOptions: { } = {},\r\n UI: { headerFontSize } = {},\r\n disabled,\r\n } = useMergedOptions();\r\n const druidLocalize = useDruidLocalize();\r\n\r\n const ReloadIcon = bsIcons[\"BsArrowRepeat\"];\r\n\r\n\r\n const handleReload = useCallback((e) => {\r\n e.stopPropagation();\r\n\r\n druidWebChatDispatch({\r\n type: 'RESET',\r\n // payload: { // if payload is removed, possible bug fixes. safer to not set payload.\r\n // UI: {\r\n // autoExpandEnabled: true\r\n // }\r\n // },\r\n withAutoExpand: true\r\n });\r\n }, [druidWebChatDispatch]);\r\n\r\n\r\n // !!!!! --- Stylings are defined in DruidHeader.tsx !!!!!!\r\n return (\r\n \r\n )\r\n\r\n}\r\n\r\n\r\n\r\n\r\n","\r\nimport { FC, useCallback, useContext } from \"react\";\r\nimport DruidWebchatContext, { DruidWebchatContextType, WebChatHeaderOptions } from \"../../WebChatContext\";\r\n\r\n\r\nimport { useMergedOptions } from \"../../selectors/useMergedOptions\";\r\nimport * as bsIcons from 'react-icons/bs';\r\nimport { removeAllCookies } from \"../../utils/cookiesUtils\";\r\nimport classNames from \"classnames\";\r\nimport IconButton from 'botframework-webchat-component/lib/SendBox/IconButton';\r\nimport useDruidLocalize from \"../../hooks/useDruidLocalize\";\r\n\r\n\r\nexport const DruidResetSelector: FC = () => {\r\n const [druidWebChatState, druidWebChatDispatch, getState ,] = useContext(DruidWebchatContext);\r\n\r\n const { \r\n styleOptions : { } = {},\r\n UI: { headerFontSize } = {},\r\n disabled,\r\n } = useMergedOptions();\r\n\r\n const druidLocalize = useDruidLocalize();\r\n\r\n const ResetIcon = bsIcons[\"BsFileEarmarkX\"];\r\n\r\n\r\n const handleReset = useCallback((e) => {\r\n if(e && e.stopPropagation) {\r\n e.stopPropagation();\r\n }\r\n\r\n // removeAllCookies(getState());\r\n\r\n druidWebChatDispatch({\r\n type: 'RESET',\r\n withAutoExpand: true,\r\n includingCookies: true\r\n });\r\n }, [druidWebChatDispatch]);\r\n\r\n // !!!!! --- Stylings are defined in DruidHeader.tsx !!!!!!\r\n return (\r\n \r\n )\r\n\r\n}\r\n\r\n\r\n\r\n\r\n","\r\nimport { FC, useCallback, useContext } from \"react\";\r\nimport DruidWebchatContext, { DruidWebchatContextType, WebChatHeaderOptions } from \"../../WebChatContext\";\r\n\r\nimport IconButton from 'botframework-webchat-component/lib/SendBox/IconButton';\r\nimport { useMergedOptions } from \"../../selectors/useMergedOptions\";\r\n\r\nimport * as bsIcons from 'react-icons/bs';\r\nimport * as faIcons from 'react-icons/fa';\r\nimport classNames from \"classnames\";\r\nimport useDruidLocalize from \"../../hooks/useDruidLocalize\";\r\n\r\nexport const DruidChangeSideSelector: FC = () => {\r\n const [druidWebChatState, druidWebChatDispatch, ,] = useContext(DruidWebchatContext);\r\n\r\n const { disabled, UI: { v2_switch_icon = \"\", headerFontSize } = {},\r\n styleOptions: { } = {}\r\n } = useMergedOptions();\r\n const druidLocalize = useDruidLocalize();\r\n\r\n const SwitchIcon = bsIcons[v2_switch_icon] || faIcons[v2_switch_icon];\r\n\r\n const handleSwitchButtonClick = useCallback((e) => {\r\n e.stopPropagation();\r\n\r\n druidWebChatDispatch({\r\n type: 'SET_SIDE',\r\n payload: druidWebChatState.side === 'left' ? 'right' : 'left'\r\n });\r\n }, [druidWebChatState.side, druidWebChatDispatch]);\r\n // !!!!! --- Stylings are defined in DruidHeader.tsx !!!!!!\r\n return (SwitchIcon && (\r\n \r\n )\r\n )\r\n}\r\n\r\n\r\n\r\n\r\n","\r\nimport { FC, useCallback, useContext, useLayoutEffect, useRef, useState } from \"react\";\r\nimport DruidWebchatContext, { DruidWebchatContextType, WebChatHeaderOptions } from \"../../WebChatContext\";\r\n\r\n\r\nimport { useMergedOptions } from \"../../selectors/useMergedOptions\";\r\nimport { DruidReloadSelector } from \"./DruidReloadSelector\";\r\nimport { DruidResetSelector } from \"./DruidResetSelector\";\r\nimport { DruidChangeSideSelector } from \"./DruidChangeSideSelector\";\r\nimport IconButton from 'botframework-webchat-component/lib/SendBox/IconButton';\r\n\r\nimport * as bsIcons from 'react-icons/bs';\r\nimport * as faIcons from 'react-icons/fa';\r\nimport classNames from \"classnames\";\r\nimport useDruidLocalize from \"../../hooks/useDruidLocalize\";\r\nimport { DruidCustomButton } from \"./DruidCustomButton\";\r\nimport { useWebChatRefsContext } from \"../../hooks/useWebChatRefsContext\";\r\n\r\n\r\nexport const DruidOptionsContainer = ({ children }) => {\r\n\r\n const [druidWebChatState, , , ] = useContext(DruidWebchatContext);\r\n const { headerRef } = useWebChatRefsContext();\r\n\r\n const { isWidget,\r\n UI: { headerFontSize, accessibilityFeaturesEnabled } = {},\r\n styleOptions: { } = {}\r\n } = useMergedOptions();\r\n const { showChangeSideButton, showReload, showLanguageSelector, showReset } = druidWebChatState.headerOptions;\r\n const druidLocalize = useDruidLocalize();\r\n\r\n const { DruidLanguageSelector = null } = children || {};\r\n\r\n\r\n const [headerMenuOpen, setHeaderMenuOpen] = useState(false);\r\n\r\n const ExpandHeaderMenuIcon = bsIcons[\"BsGear\"];\r\n const CollapseHeaderMenuIcon = bsIcons[\"BsCheckLg\"];\r\n\r\n\r\n const canShowChangeSideButton = !druidWebChatState.isMobile && showChangeSideButton;\r\n const canShowReset = isWidget && showReset;\r\n\r\n useLayoutEffect(() => {\r\n if(accessibilityFeaturesEnabled) {\r\n const buttonElement = headerRef?.querySelector(\".druid__webchat__header-toggle-menu\");\r\n if(buttonElement) {\r\n buttonElement.ariaExpanded = headerMenuOpen.toString();\r\n }\r\n \r\n if (headerMenuOpen) {\r\n const toFocusButton = headerRef?.querySelector(\".druid__webchat__header-button\");\r\n toFocusButton?.focus();\r\n }\r\n }\r\n }, [headerRef, headerMenuOpen, accessibilityFeaturesEnabled]);\r\n\r\n return (<>\r\n {headerMenuOpen &&\r\n (<>\r\n {\r\n isWidget && showReset && // not available on isWidget == false\r\n }\r\n {\r\n showReload && \r\n }\r\n {/* {\r\n showLanguageSelector && DruidLanguageSelector\r\n } */}\r\n {\r\n canShowChangeSideButton && \r\n }\r\n {/* { } */}\r\n\r\n )\r\n }\r\n\r\n
\r\n {\r\n (showReload || canShowReset || canShowChangeSideButton) && (ExpandHeaderMenuIcon || CollapseHeaderMenuIcon) &&\r\n ( { e.stopPropagation(); setHeaderMenuOpen(!headerMenuOpen);}}\r\n >\r\n { !headerMenuOpen ? : }\r\n )\r\n }\r\n )\r\n\r\n\r\n}\r\n\r\n\r\n\r\n\r\n","\r\nimport React, { FC, useCallback, useContext, useLayoutEffect, useRef } from \"react\";\r\nimport DruidWebchatContext, { DruidWebchatContextType, WebChatHeaderOptions } from \"../../WebChatContext\";\r\n\r\n\r\nimport { useMergedOptions } from \"../../selectors/useMergedOptions\";\r\n\r\n// import * as bsIcons from 'react-icons/bs';\r\n// import * as faIcons from 'react-icons/fa';\r\nimport { useWebChatRefsContext } from \"../../hooks/useWebChatRefsContext\";\r\nimport InlineSVG from 'svg-inline-react';\r\nimport useDruidLocalize from \"../../hooks/useDruidLocalize\";\r\n\r\nconst defaultMinimizeIcon = ({size}: {size: any}) => {\r\n return ``\r\n};\r\n\r\nexport const DruidMinimizeSelector: FC = () => {\r\n const [, druidWebChatDispatch, ,] = useContext(DruidWebchatContext);\r\n const { headerRef } = useWebChatRefsContext();\r\n const druidLocalize = useDruidLocalize();\r\n\r\n const { UI: { v2_minimize_icon = \"\", headerFontSize } = {},\r\n styleOptions: { } = {}\r\n } = useMergedOptions();\r\n\r\n useLayoutEffect(() => {\r\n // const svgItem = headerRef?.querySelector(\".druid__webchat__header-minimize > svg\")\r\n // svgItem?.setAttribute('width', `${headerFontSize}`);\r\n // svgItem?.setAttribute('height', `${headerFontSize}`);\r\n\r\n }, [headerRef, headerFontSize]);\r\n\r\n // var MinimizeIcon;\r\n // if(typeof v2_minimize_icon === \"string\") {\r\n // MinimizeIcon = bsIcons[v2_minimize_icon] || faIcons[v2_minimize_icon];\r\n // } else {\r\n // MinimizeIcon = v2_minimize_icon;\r\n // }\r\n \r\n // !!!!! --- Stylings are defined in DruidHeader.tsx !!!!!!\r\n return (\r\n )\r\n}\r\n\r\n\r\n\r\n\r\n","import React, { FC, useCallback, useContext, useRef, useState, Fragment, useEffect, useMemo } from \"react\";\r\nimport { createPortal } from \"react-dom\";\r\nimport { useDeterminedDirection } from \"../../selectors/useDeterminedDirection\";\r\nimport { useMergedOptions } from \"../../selectors/useMergedOptions\";\r\nimport DruidWebchatContext, { DruidWebchatContextType, WebChatHeaderOptions } from \"../../WebChatContext\";\r\nimport { DruidOptionsContainer } from \"./DruidOptionsContainer\";\r\nimport { DruidMinimizeSelector } from \"./DruidMinimizeSelector\";\r\n\r\nimport { DruidReloadSelector } from \"./DruidReloadSelector\";\r\nimport { DruidResetSelector } from \"./DruidResetSelector\";\r\n\r\nimport IconButton from 'botframework-webchat-component/lib/SendBox/IconButton';\r\n\r\nimport * as bsIcons from 'react-icons/bs';\r\nimport * as faIcons from 'react-icons/fa';\r\n\r\nimport classNames from \"classnames\";\r\nimport Button from \"react-bootstrap/Button\";\r\nimport Collapse from \"react-bootstrap/Collapse\";\r\nimport { useWebChatRefsContext } from \"../../hooks/useWebChatRefsContext\";\r\nimport useDruidLocalize from \"../../hooks/useDruidLocalize\";\r\n\r\n\r\nexport const DruidCustomButton: FC = () => {\r\n const [druidWebChatState, druidWebChatDispatch, ,] = useContext(DruidWebchatContext);\r\n const { setHeaderRef } = useWebChatRefsContext();\r\n\r\n\r\n\r\n const { disabled, UI: { v2_customButton_toggled_icon = \"\", v2_customButton_off_icon = \"\", v2_custom_button_initial_toggled = undefined, headerFontSize } = {},\r\n styleOptions: { } = {}\r\n } = useMergedOptions();\r\n\r\n const [toggled, setToggled] = useState(v2_custom_button_initial_toggled);\r\n\r\n const SwitchIcon = useMemo(() => (toggled ?\r\n bsIcons[v2_customButton_toggled_icon] || faIcons[v2_customButton_toggled_icon] || faIcons[\"FaSignOutAlt\"] :\r\n (bsIcons[v2_customButton_off_icon] || faIcons[v2_customButton_off_icon]) || faIcons[\"FaSignInAlt\"])\r\n , [toggled]);\r\n const handleCustomButtonSwitchClick = useCallback((e) => {\r\n e.stopPropagation();\r\n const newToggledValue = !toggled;\r\n setToggled(newToggledValue);\r\n druidWebChatDispatch({\r\n type: 'SET_CUSTOM_BUTTON_TOGGLE',\r\n payload: newToggledValue\r\n });\r\n }, [druidWebChatDispatch, toggled, setToggled]);\r\n\r\n return (<>\r\n {\r\n v2_custom_button_initial_toggled !== undefined && \r\n {SwitchIcon && }\r\n \r\n }\r\n );\r\n};","import React, { FC, useCallback, useContext, useRef, useState, Fragment, useEffect } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useDeterminedDirection } from \"../../selectors/useDeterminedDirection\";\nimport { useMergedOptions } from \"../../selectors/useMergedOptions\";\nimport DruidWebchatContext, { DruidWebchatContextType, WebChatHeaderOptions } from \"../../WebChatContext\";\nimport { DruidOptionsContainer } from \"./DruidOptionsContainer\";\nimport { DruidMinimizeSelector } from \"./DruidMinimizeSelector\";\n\nimport { DruidReloadSelector } from \"./DruidReloadSelector\";\nimport { DruidResetSelector } from \"./DruidResetSelector\";\n\nimport IconButton from 'botframework-webchat-component/lib/SendBox/IconButton';\n\nimport * as bsIcons from 'react-icons/bs';\nimport * as faIcons from 'react-icons/fa';\n\nimport classNames from \"classnames\";\nimport Button from \"react-bootstrap/Button\";\nimport Collapse from \"react-bootstrap/Collapse\";\nimport { useWebChatRefsContext } from \"../../hooks/useWebChatRefsContext\";\nimport { DruidCustomButton } from \"./DruidCustomButton\";\nimport { useDraggableEffect } from \"../../hooks/useDraggableEffect\";\n\n\n\nexport const DruidHeader = ({ children }) => {\n const [druidWebChatState, druidWebChatDispatch, , druidStyleToEmotionObject] = useContext(DruidWebchatContext);\n const { setHeaderRef, setHeaderWasDragged } = useWebChatRefsContext();\n\n const [headerMenuOpen, setHeaderMenuOpen] = useState(false);\n const headerRef = useRef(null);\n\n const determinedDir = useDeterminedDirection();\n const { VoiceInputSelector = null, DruidLanguageSelector = null } = children || {};\n\n const { disabled, isWidget,\n UI: { v2_chatTitle_icon = \"\", v2_minimize_icon = \"\", v2_switch_icon = \"\", restylingsEnabled, fullScreenMode, draggableEnabled, chatTitle, headerTextColor, headerFontSize, rootFontSize, lineHeight, headerOuterPadding, headerButtonColorOnFocus, headerBottomBorderRadius, headerBorderRadius, headerTextColorOnHover, headerBackground } = {},\n styleOptions: { paddingRegular, accent, subtle, sendBoxButtonColorOnHover, sendBoxButtonColorOnDisabled, backgroundColor, botAvatarImage, sendBoxButtonColorOnFocus } = {},\n } = useMergedOptions();\n const { showHeader, showChatTitle, showChangeSideButton, showReload, showCloseButton, showLanguageSelector, showAvatar, showIcon, showVoiceInputSelector, showReset } = druidWebChatState.headerOptions;\n const { INITIALIZATION_STATUS } = druidWebChatState;\n const { isVoiceChannel, speechToken } = druidWebChatState.speechOptions;\n\n useEffect(() => {\n setHeaderRef(headerRef.current || undefined);\n }, [headerRef, setHeaderRef]);\n\n \n const [onDragStart, wasDragged] = useDraggableEffect(draggableEnabled, headerRef, \"druid__minimizable__web-chat__chat-box\");\n useEffect(() => {\n setHeaderWasDragged(wasDragged);\n }, [wasDragged, setHeaderWasDragged]);\n\n const TitleIcon = bsIcons[v2_chatTitle_icon] || faIcons[v2_chatTitle_icon];\n const ROOT_STYLE = {\n '&.druid__webchat__header': {\n color: headerTextColor,\n backgroundColor: INITIALIZATION_STATUS === 'success' ? backgroundColor: 'transparent',\n cursor: 'pointer',\n padding: restylingsEnabled && 5,\n '& .druid__webchat__header-container': {\n \n backgroundColor: accent,\n background: headerBackground,\n color: headerTextColor,\n height: 'auto',\n padding: headerOuterPadding || paddingRegular,\n display: 'flex',\n columnGap: paddingRegular! / 2,\n borderBottomRightRadius: headerBottomBorderRadius,\n borderBottomLeftRadius: headerBottomBorderRadius,\n borderRadius: restylingsEnabled && headerBorderRadius,\n '& .filler': {\n flex: '0 10000 100%'\n },\n '.druid__webchat__header-title':{\n margin: 'auto',\n alignSelf: 'center',\n fontSize: headerFontSize || rootFontSize,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap'\n },\n '.druid__webchat__header-avatar': {\n height: `calc(${headerFontSize} * ${lineHeight !== 'normal'? lineHeight : 1.2})`,\n transform: 'scale(1.3)'\n },\n '.druid__webchat__header-button': {\n color: headerTextColor,\n backgroundColor: 'Transparent',\n border: 0,\n outline: 0,\n padding: 0,\n width: 'auto',\n margin: 'auto',\n display: 'flex',\n '& > svg': {\n fill: headerTextColor,\n // backgroundColor: 'Transparent'\n },\n '&.webchat__icon-button .webchat__icon-button__shade': {\n display: 'none'\n },\n \n '&[aria-disabled]': { // on button disabled\n color: sendBoxButtonColorOnDisabled,\n '& > svg': {\n fill: sendBoxButtonColorOnDisabled\n }\n },\n '&:not([aria-disabled])': {\n '&:hover' :{\n color: headerTextColorOnHover || sendBoxButtonColorOnHover,\n '& > svg': {\n fill: headerTextColorOnHover || sendBoxButtonColorOnHover\n }\n },\n '&:focus': {\n color: headerButtonColorOnFocus || sendBoxButtonColorOnFocus,\n '& > svg': {\n fill: headerButtonColorOnFocus || sendBoxButtonColorOnFocus\n }\n }\n },\n '&.druid__webchat__header-fadeIn':{\n animationName: 'fadeIn',\n animationDuration: '1s'\n },\n '&.druid__webchat__header-switch': {\n \n },\n '&.druid__webchat__header-minimize': { // this is not type\n '&:hover > svg': {\n fill: headerTextColorOnHover || sendBoxButtonColorOnHover\n },\n '&:focus > svg': {\n fill: headerButtonColorOnFocus || sendBoxButtonColorOnFocus\n }\n },\n '&.druid__webchat__header-microphone': {\n transform: 'scale(1.2)',\n \n },\n '&.druid__webchat__header-keyboard': {\n transform: 'scale(1.2)',\n \n },\n '&.druid__webchat__header-reload': {\n transform: 'scale(1.2)',\n \n },\n '&.druid__webchat__header-reset': {\n \n },\n '&.druid__webchat__header-toggle-menu': {\n }\n },\n \n }\n }\n };\n\n\n const rootClassName = druidStyleToEmotionObject(ROOT_STYLE) + '';\n return (\n showHeader ? \n
{ if(isWidget && !fullScreenMode && (e.target instanceof HTMLElement) && (/*e.target.nodeName === \"HEADER\" Header was removed || */ e.target.nodeName == \"DIV\")) { druidWebChatDispatch({ type: 'CLOSE_WEBCHAT' }); }}}>\n
\n {\n showAvatar && !TitleIcon && ((botAvatarImage && {chatTitle}/))\n }\n {\n showIcon && TitleIcon &&
\n }\n \n {showChatTitle &&
\n {chatTitle}\n
}\n { INITIALIZATION_STATUS === 'success' &&{children}}\n
\n \n { INITIALIZATION_STATUS === 'success' &&{children}}\n {\n showLanguageSelector && DruidLanguageSelector\n } \n {\n // isVoiceChannel && speechToken. speechToken was added because of isVoiceChannel: true bug from backend.\n isVoiceChannel && speechToken && showVoiceInputSelector && VoiceInputSelector // this is DruidIsVoiceInputSelector. should refactor.\n }\n\n {\n showCloseButton && \n }\n
\n
\n :\n <>\n \n );\n}","\nimport { FC, useCallback, useContext } from \"react\";\nimport DruidWebchatContext, { DruidWebchatContextType, WebChatHeaderOptions } from \"../../WebChatContext\";\n\n\nimport { hooks } from 'botframework-webchat-component';\n\nimport { useMergedOptions } from \"../../selectors/useMergedOptions\";\nimport * as bsIcons from 'react-icons/bs';\nimport classNames from \"classnames\";\nimport IconButton from 'botframework-webchat-component/lib/SendBox/IconButton';\nimport useDruidLocalize from \"../../hooks/useDruidLocalize\";\n\n\nconst { useMicrophoneButtonClick, useDictateState } = hooks;\n\nexport const DruidIsVoiceInputSelector: FC = () => {\n const [druidWebChatState, druidWebChatDispatch, ,druidStyleToEmotionObject] = useContext(DruidWebchatContext);\n\n const microphoneButtonClick = useMicrophoneButtonClick();\n const [dictateState] = useDictateState();\n const druidLocalize = useDruidLocalize();\n \n\n const { isVoiceInput, sensitiveDataInputMode } = druidWebChatState;\n // const styleToEmotionObject = useStyleToEmotionObject();\n const { \n styleOptions : { } = {},\n disabled,\n UI: { headerFontSize, blockingInputDruidSendBox } = {}\n } = useMergedOptions();\n\n\n const KeyboardIcon = bsIcons[\"BsKeyboard\"];\n\n\n const handleSwitchToVoiceOrKeyboard = useCallback((e) => {\n e.stopPropagation();\n druidWebChatDispatch({\n type: 'SET_IS_VOICEINPUT',\n payload: !isVoiceInput\n });\n if(!isVoiceInput) { // must not click on button if switch to keyboard mode\n setTimeout(() => microphoneButtonClick && microphoneButtonClick(), 300);\n }\n \n }, [isVoiceInput, druidWebChatDispatch, microphoneButtonClick]);\n\n\n // !!!!! --- Stylings are defined in DruidHeader.tsx !!!!!!\n return !isVoiceInput ? \n (\n \n \n \n )\n :\n // botframework-webchat-core\\src\\constants\\DictateState.js for dictateState enum\n (\n \n )\n}\n\n\n\n\n","import React, { FC, useCallback, useContext, useMemo } from \"react\";\nimport { useDeterminedDirection } from \"../../selectors/useDeterminedDirection\";\nimport DruidWebchatContext, { DruidWebchatContextType, WebChatHeaderOptions } from \"../../WebChatContext\";\n// import DruidWebchatRefsContext, { DruidWebchatRefsContextType } from \"../../contexts/WebChatRefsContext\";\n// import useStyleToEmotionObject from 'botframework-webchat-component/lib/hooks/internal/useStyleToEmotionObject';\n\n\nimport { hooks } from 'botframework-webchat-component';\n\nimport Dropdown from 'react-bootstrap/Dropdown';\nimport { useBotLanguages, useSelectedLanguage } from \"../../selectors/useBotLanguages\";\nimport classNames from \"classnames\";\nimport { useMergedOptions } from \"../../selectors/useMergedOptions\";\nimport { useWebChatRefsContext } from \"../../hooks/useWebChatRefsContext\";\nimport useDruidLocalize from \"../../hooks/useDruidLocalize\";\nimport { FaGlobe } from 'react-icons/fa';\nimport { AppConsts } from \"../../logics/druidBusinessLogic\";\n\n\nconst { useDictateState } = hooks;\n\nexport const DruidLanguageSelector: FC = () => {\n const [druidWebChatState, druidWebChatDispatch, ,druidStyleToEmotionObject] = useContext(DruidWebchatContext);\n const { headerRef } = useWebChatRefsContext();\n const { \n styleOptions : { subtle, sendBoxButtonColorOnDisabled, sendBoxButtonColorOnHover, sendBoxButtonColorOnFocus, paddingRegular, accent, sendBoxButtonShadeColor } = {},\n disabled,\n UI: { buttonsTextColor, headerTextColor, rootFontSize, headerButtonColorOnFocus, headerFontSize, restylingsEnabled } = {}\n } = useMergedOptions();\n\n const { sensitiveDataInputMode } = druidWebChatState;\n\n const selectedLanguage = useSelectedLanguage();\n const botLanguages = useBotLanguages();\n const druidLocalize = useDruidLocalize();\n\n const [dictateState] = useDictateState();\n const determinedDir = useDeterminedDirection();\n const dropdownToggle_Transform_scaleValue = useMemo(() => {\n // 11 (13 with padding) is famfamfam icon size. use 14 for calculations, just to be a smaller\n return headerRef ? parseInt(parseFloat(getComputedStyle(headerRef.querySelector('.druid__webchat__header-title')!).height).toFixed()) / 14: (20 /11);\n }, [headerRef])\n // const styleToEmotionObject = useStyleToEmotionObject();\n\n const orderedBotLanguages = useMemo(() => {\n // https://tc39.es/ecma402/#sec-intl.collator.prototype.compare\n return botLanguages?.sort((a, b) => a.nativeName.localeCompare(b.nativeName, undefined, {sensitivity: 'base'})) || [];\n }, [botLanguages]);\n\n const ROOT_STYLE = {\n '&.druid__webchat__header__language-menu': {\n display: 'flex',\n animationName: 'fadeIn',\n animationDuration: '1s',\n paddingLeft: 5,\n paddingRight: 5,\n direction: determinedDir,\n ' > .dropdown-toggle': {\n display: 'flex',\n color: headerTextColor,\n backgroundColor: 'transparent',\n border: 0,\n paddingLeft: 5,\n paddingRight: 5,\n transform: `scale(${selectedLanguage?.id !== AppConsts.DefaultLanguageId ? dropdownToggle_Transform_scaleValue : 1})`, \n '&:hover': {\n boxShadow: 'none',\n color: subtle\n },\n '&:focus' : {\n boxShadow: 'none',\n color: subtle \n },\n '&:focus-visible': {\n outline: 0,\n },\n '&:focus-visible > span': {\n outline: `1px ${headerButtonColorOnFocus || sendBoxButtonColorOnFocus} solid`,\n },\n '&[disabled]': {\n color: sendBoxButtonColorOnDisabled,\n opacity: '50%'\n },\n '&::after': {\n display: 'none'\n }\n },\n '.dropdown-menu' : {\n textAlign: determinedDir === 'rtl' ? 'right': 'left',\n ...(restylingsEnabled && \n { padding: '0.5rem',\n marginBottom: 10,\n boxShadow: 'rgba(0, 0, 0, 0.2) 0px 2px 6px',\n border: 'none',\n }),\n '.dropdown-item': {\n fontSize: rootFontSize,\n alignItems: 'center',\n '& > strong': {\n color: accent\n },\n '&:active': {\n backgroundColor: buttonsTextColor\n },\n ...(restylingsEnabled && \n {\n height: '3rem',\n display: 'flex',\n alignItems: 'center',\n '&:hover, &:active': {\n backgroundColor: sendBoxButtonShadeColor\n }\n }),\n '& > span': {\n display: 'inline-block',\n marginLeft: 5\n }\n }\n },\n }\n };\n\n const rootClassName = druidStyleToEmotionObject(ROOT_STYLE) + '';\n return (\n \n {/* variant sets btn btn-primary by default. keep string empty */}\n \n {\n selectedLanguage?.id !== AppConsts.DefaultLanguageId ? \n \n :\n <>\n \n {/* */}\n \n }\n \n {/* \n */}\n\n \n {\n botLanguages.filter(bl => bl.id !== AppConsts.DefaultLanguageId).map((lang, idx) => {\n\n return (\n { druidWebChatDispatch({type:'SET_SELECTEDLANGUAGE', payload: lang.name})}}>{lang.nativeName} \n {!restylingsEnabled && (idx + 1 < botLanguages.filter(bl => bl.id !== AppConsts.DefaultLanguageId).length) && }\n )\n })\n }\n \n \n );\n}","import { useContext } from \"react\";\r\nimport DruidWebchatContext, { DruidWebchatContextType } from \"../WebChatContext\";\r\n\r\n\r\nexport function useSelectedLanguage() {\r\n const [druidWebChatState,] = useContext(DruidWebchatContext);\r\n return druidWebChatState.botLanguages.find(bl => bl.isSelected);\r\n}\r\n\r\nexport function useBotLanguages() {\r\n const [druidWebChatState,] = useContext(DruidWebchatContext);\r\n return druidWebChatState.botLanguages;\r\n}","import React, { useContext } from \"react\";\r\nimport DruidWebchatContext, { DruidWebchatContextType } from \"../WebChatContext\";\r\nimport { DruidHeader } from \"./header/DruidHeader\";\r\nimport { FaExclamationTriangle } from \"react-icons/fa\";\r\nimport { useDeterminedDirection } from \"../selectors/useDeterminedDirection\";\r\n\r\nexport function ErrorFallback({error, resetErrorBoundary}) {\r\n const [, druidWebChatDispatch,, ] = useContext(DruidWebchatContext);\r\n const determinedDir = useDeterminedDirection();\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n )\r\n }","import React, { createRef, forwardRef, useContext, useEffect, useMemo, useRef, FC, useLayoutEffect, useState, useImperativeHandle, useCallback, ComponentProps } from 'react';\nimport ReactDOM from 'react-dom';\n// import { createCognitiveServicesSpeechServicesPonyfillFactory } from 'botframework-webchat'; //Components\n// import createCognitiveServicesSpeechServicesPonyfillFactory from 'botframework-webchat/lib/createCognitiveServicesSpeechServicesPonyfillFactory';\nimport { Components, ReactWebChatProps } from 'botframework-webchat-component';\n\nimport FullComposer, { FullComposerProps } from 'botframework-webchat/lib/FullComposer';\n\n// import Composer from 'botframework-webchat-component/lib/Composer';\n\n\n// import { Components} from 'botframework-webchat'; //Components\n\nimport activityFromBot from 'botframework-webchat-core/src/definitions/activityFromBot';\nimport { hooks } from 'botframework-webchat-component';\nimport createStyleSet from 'botframework-webchat/lib/createFullStyleSet';\n\nimport TypingAnimation from 'botframework-webchat-component/lib/Assets/TypingAnimation';\nimport { unstable_batchedUpdates } from 'react-dom';\n\nimport { BehaviorSubject } from 'rxjs';\n\nimport './WebChat.css';\nimport DruidWebchatContext, { DruidWebchatContextType } from './WebChatContext';\nimport { WebChatOptions } from './WebChatOptions';\nimport DruidSendBox from './components/DruidSendBox';\nimport { DruidImagesViewer, DruidImageViewHandle } from './components/DruidImagesViewer';\n\nimport { useCreateBFStore, useHandleInitialize } from './hooks';\nimport { useActivityStatusMiddleware, useAtttachmentMiddleware, useCardActionMiddleware, useActivityMiddleware, useScrollToEndButtonMiddleware } from './hooks/useDruidBFMiddleswares';\nimport { useCognitiveServices } from './hooks/useCognitiveServices';\nimport { useCreateDirectLine } from './hooks/useCreateDirectLine';\nimport { useSetDirectLineInstance } from './hooks/useSetDirectLineInstance';\nimport { useStaticDruidStyleSet } from './hooks/useStaticDruidStyleSet';\n\nimport { useDebounceHideSuggestedActions } from './hooks/useDebounceHideSuggestedActions';\nimport normalizeLanguage from 'botframework-webchat-api/lib/utils/normalizeLanguage';\n\n\n\n\nimport { useDeterminedDirection } from './selectors/useDeterminedDirection';\nimport { useMarkdownIt } from './hooks/useMarkdownIt';\nimport classNames from 'classnames';\nimport * as merge from 'deepmerge';\nimport { useDruidAdaptiveCardsHostConfig, useMergedOptions } from './selectors/useMergedOptions';\nimport useStyleToEmotionObject from 'botframework-webchat-component/lib/hooks/internal/useStyleToEmotionObject';\n\nimport 'famfamfam-flags/dist/sprite/famfamfam-flags.min.css';\nimport { DruidHeader } from './components/header/DruidHeader';\nimport { DruidIsVoiceInputSelector } from './components/header/DruidIsVoiceInputSelector';\nimport { DruidLanguageSelector } from './components/header/DruidLanguageSelector';\n\n\nimport { useFocus } from 'botframework-webchat-component/lib/hooks';\nimport { useWebChatRefsContext } from './hooks/useWebChatRefsContext';\nimport { ErrorBoundary } from 'react-error-boundary';\nimport { ErrorFallback } from './components/ErrorFallback';\nimport useDruidLocalize from './hooks/useDruidLocalize';\nconst DruidFullComposer: FC & ReactWebChatProps> = (props: any) => \n\nconst { useActivities, useDisabled, useSuggestedActions, useUserID, useStyleSet, useDirection, useLocalizer, useSendPostBack, useSubmitSendBox, \n useFocusSendBox, usePostActivity, useSendMessage, useSendEvent, useObserveScrollPosition, useCreateScrollToEndButtonRenderer, useScrollToEnd, useScrollTo, useObserveTranscriptFocus } = hooks;\nconst { BasicWebChat } = Components;\nconst WebChat = forwardRef(({ className, initialOptions }: { className: string, initialOptions: WebChatOptions }, ref) => {\n\n const [druidWebChatState, druidWebChatDispatch, getState, druidStyleToEmotionObject] = useContext(DruidWebchatContext);\n\n const { UI: { buttonsPadding, buttonsBorderRadius, buttonsBorderColor, buttonsBackgroundColor, buttonsBackgroundColorOnHover, buttonsTextColorOnHover, buttonsTextColor, transcriptFontSize, activityStatusShowBotName, activityStatusBotName, activityStatusUserName, activityStatusShowUserName } = {},\n styleOptions: { suggestedActionTextColor, fontSizeSmall, subtle, paddingRegular } = {}, disabled,\n designPatterns: { nonCarousel_HeroCard_AutoWidth, nonCarousel_HeroCard_ButtonsOnly_BackgroundTransparent } = {},\n localization\n } = useMergedOptions();\n\n const { store, ...projectedMergedChatOptions } = useMergedOptions();\n const druidAdaptiveCardHostConfig = useDruidAdaptiveCardsHostConfig();\n\n const directlineInstance = useCreateDirectLine();\n useSetDirectLineInstance({ directlineInstance });\n\n const { bfStore, subscriptions } = useCreateBFStore({ initialOptions });\n\n // const markdownIt = useMemo(() => markdownIT({html: true, linkify: true, breaks: true,\n // typographer: true}), []);\n\n const [outerBFSuggestedActions, setOuterBFSuggestedActions] = useState([]);\n\n //used to set bfStore inside druid's state. also listens for bfStore's state changes and updates current component internal state (not druid's state).\n useEffect(() => { // should not setstate inside useMemo\n druidWebChatDispatch({\n type: 'SET_BF_WEBCHAT_STORE',\n payload: bfStore\n });\n var previousState: any = null;\n const bfStoreUnsubscribe = bfStore.subscribe(() => {\n const currentState = bfStore.getState();\n if (previousState?.suggestedActions !== currentState.suggestedActions) {\n setOuterBFSuggestedActions(currentState.suggestedActions);\n }\n\n previousState = currentState;\n });\n\n return () => {\n bfStoreUnsubscribe();\n }\n }, [bfStore]);\n useEffect(() => { // on component dismount\n return () => {\n subscriptions.forEach((sub) => sub.unsubscribe());\n }\n }, []);\n\n const markdownIt = useMarkdownIt();\n\n const cognitiveServices = useCognitiveServices();\n\n const handleInitializeCallback = useHandleInitialize();\n const determinedDir = useDeterminedDirection();\n\n const druidImagesViewerRef = useRef(null);\n const debounceHideSuggestedActions = useDebounceHideSuggestedActions(outerBFSuggestedActions);\n\n\n projectedMergedChatOptions.activityStatusMiddleware = useActivityStatusMiddleware(projectedMergedChatOptions);\n projectedMergedChatOptions.cardActionMiddleware = useCardActionMiddleware(projectedMergedChatOptions);\n\n projectedMergedChatOptions.attachmentMiddleware = useAtttachmentMiddleware(druidImagesViewerRef, projectedMergedChatOptions);\n projectedMergedChatOptions.activityMiddleware = useActivityMiddleware(projectedMergedChatOptions);\n projectedMergedChatOptions.scrollToEndButtonMiddleware = useScrollToEndButtonMiddleware(projectedMergedChatOptions, debounceHideSuggestedActions);\n\n useEffect(() => {\n handleInitializeCallback();\n }, [handleInitializeCallback]);\n\n const staticDruidStyleSet = useStaticDruidStyleSet({ outerBFSuggestedActions });\n const shouldRenderWebchat = !!druidWebChatState.directlineOptions?.token;\n useImperativeHandle(ref, () => {\n return shouldRenderWebchat;\n }, [shouldRenderWebchat]); //bfStore.dispatch, \n\n const druidLocalize = useCallback(\n (strings, language: string) => {\n const normalizedLanguage = normalizeLanguage(language);\n\n if(localization && localization[normalizedLanguage]) {\n return {\n ...strings,\n ...localization[normalizedLanguage]\n // TEXT_INPUT_PLACEHOLDER: 'What is on your mind?'\n };\n }\n \n\n return strings;\n },\n [localization],\n );\n \n // should useMemo\n const mergedStyleSet = merge.all([createStyleSet({ ...projectedMergedChatOptions.styleOptions }),\n staticDruidStyleSet,\n projectedMergedChatOptions.customDruidStyleSet || {}\n]);\n\n\n return (\n \n {\n\n shouldRenderWebchat ? (\n // node_modules\\adaptivecards\\lib\\host-config.js\n // \n //
\n // \n // \n //
\n //
\n \n next => ({ ...args }) => {\n const currentDruidState = getState();\n const { disableTyping } = currentDruidState.mergedChatOptions?.UI || {};\n if(disableTyping || !currentDruidState.showTyping) {\n return;\n }\n return ;\n }}\n renderMarkdown={markdownIt.render.bind(markdownIt)}\n locale={druidWebChatState.locale}\n webSpeechPonyfillFactory={cognitiveServices}\n userID={druidWebChatState.mergedChatOptions.userId}\n username={druidWebChatState.mergedChatOptions.username || druidWebChatState.mergedChatOptions.userId}\n dir={determinedDir}\n overrideLocalizedStrings={druidLocalize}\n // attachmentMiddleware={attachmentMiddleware}\n // activityStatusMiddleware={activityStatusMiddleware}\n // cardActionMiddleware={cardActionMiddleware}\n // scrollToEndButtonMiddleware={() => (next) => (args) => {\n // //atEnd could be used for suggestedAction hiding\n // const { atEnd, styleOptions: { scrollToEndButtonBehavior }, unread } = args;\n // debounceHideSuggestedActions.next(!atEnd);\n // return next(args);\n // } }\n >\n \n \n \n {{\n VoiceInputSelector: ,\n DruidLanguageSelector: \n }}\n \n \n \n \n \n \n \n ) : (\n !druidWebChatState.directlineOptions?.token && \n \n \n
\n
\n
\n \n
\n {druidWebChatState.INITIALIZATION_STATUS === 'uninitialized' &&

Please wait while we are connecting.

}\n {druidWebChatState.INITIALIZATION_STATUS === 'failed' &&

Failed to load {druidWebChatState.INITIALIZATION_STATUS_MESSAGE && `(${druidWebChatState.INITIALIZATION_STATUS_MESSAGE})`}. {e.preventDefault(); druidWebChatDispatch({ type: 'RESET' }); }}>Retry

}\n
\n
\n
\n )\n }\n
\n )\n});\n\nconst getLastActivity = (messageActivities: any[]) => { // move to helper\n return messageActivities[messageActivities.length - 1];\n}\n\nconst CustomDecorator = () => {\n const [druidWebChatState,, getState,] = useContext(DruidWebchatContext);\n const { wcRootRef } = useWebChatRefsContext();\n\n const [activities] = useActivities();\n const [suggestedActions] = useSuggestedActions();\n const scrollToEnd = useScrollToEnd();\n const scrollTo = useScrollTo();\n const sendPostBack = useSendPostBack();\n const postActivity = usePostActivity();\n const sendMessage = useSendMessage();\n const sendEvent = useSendEvent();\n const submitSendBox = useSubmitSendBox();\n const focus = useFocus();\n\n \n const userId = useUserID();\n const setFocus = useFocus();\n const { INITIALIZATION_STATUS, minimized, mergedChatOptions: { UI: { hideSuggestedActions, restylingsEnabled } = {}}} = druidWebChatState;\n\n useLayoutEffect(() => {\n if (suggestedActions) {\n wcRootRef?.querySelectorAll('.webchat__suggested-action')?.forEach((sg, idx) => {\n const { channelData: { buttonClass = null } = {} } = suggestedActions[idx] as any;\n buttonClass && sg.classList.add(buttonClass);\n });\n }\n }, [suggestedActions, wcRootRef, hideSuggestedActions]);\n\n useEffect(() => {\n const currentState = getState();\n if(INITIALIZATION_STATUS === 'success' && !minimized && !currentState.isMobile) { // focus sendbox automatically on chat open\n setFocus('sendBox');\n }\n }, [INITIALIZATION_STATUS, minimized, setFocus]);\n\n useEffect(() => {\n DruidWebchat_v2.hooks.scrollToEnd = scrollToEnd;\n DruidWebchat_v2.hooks.scrollTo = scrollTo;\n DruidWebchat_v2.hooks.sendPostBack = sendPostBack;\n DruidWebchat_v2.hooks.postActivity = postActivity;\n DruidWebchat_v2.hooks.sendMessage = sendMessage;\n DruidWebchat_v2.hooks.sendEvent = sendEvent;\n DruidWebchat_v2.hooks.submitSendBox = submitSendBox;\n DruidWebchat_v2.hooks.focus = focus;\n }, [scrollToEnd, scrollTo, sendPostBack, postActivity, sendMessage, sendEvent, submitSendBox]);\n useLayoutEffect(() => {\n \n var sendBoxButton = wcRootRef?.querySelector('svg.webchat__send-icon');\n if (sendBoxButton) {\n if(restylingsEnabled) {\n\n// \n// \n// \n sendBoxButton.setAttribute('height', '16px');\n sendBoxButton.setAttribute('width', '16px');\n\n sendBoxButton.setAttribute('viewBox', '0 0 13 14');\n\n sendBoxButton.querySelector('path')?.setAttribute('d', \"M12.6875 6.71094C12.5 6.89844 12.25 6.99219 12 6.99219C11.7188 6.99219 11.4688 6.89844 11.2812 6.71094L8 3.42969V12.9922C8 13.5547 7.53125 13.9922 7 13.9922C6.5 13.9922 6 13.5547 6 12.9922V3.42969L2.6875 6.71094C2.3125 7.11719 1.65625 7.11719 1.28125 6.71094C0.875 6.33594 0.875 5.67969 1.28125 5.30469L6.28125 0.304688C6.65625 -0.101562 7.3125 -0.101562 7.6875 0.304688L12.6875 5.30469C13.0938 5.67969 13.0938 6.33594 12.6875 6.71094Z\");\n } else {\n sendBoxButton.setAttribute('viewBox', '0 0 28 28');\n sendBoxButton.querySelector('path')?.setAttribute('d', \"M 14 0.4375 C 21.492188 0.4375 27.5625 6.507812 27.5625 14 C 27.5625 21.492188 21.492188 27.5625 14 27.5625 C 6.507812 27.5625 0.4375 21.492188 0.4375 14 C 0.4375 6.507812 6.507812 0.4375 14 0.4375 Z M 12.417969 8.289062 L 16.546875 12.25 L 6.5625 12.25 C 5.835938 12.25 5.25 12.835938 5.25 13.5625 L 5.25 14.4375 C 5.25 15.164062 5.835938 15.75 6.5625 15.75 L 16.546875 15.75 L 12.417969 19.710938 C 11.890625 20.21875 11.878906 21.066406 12.398438 21.585938 L 13 22.179688 C 13.511719 22.695312 14.34375 22.695312 14.851562 22.179688 L 22.109375 14.929688 C 22.625 14.414062 22.625 13.585938 22.109375 13.074219 L 14.851562 5.8125 C 14.339844 5.300781 13.507812 5.300781 13 5.8125 L 12.398438 6.410156 C 11.878906 6.933594 11.890625 7.78125 12.417969 8.289062 Z M 12.417969 8.289062\");\n }\n }\n });\n\n return (null);\n}\n\nconst DotIndicator = ({ withText }: { withText?: string}) => {\n const [druidWebChatState,,] = useContext(DruidWebchatContext);\n\n const { disableTypingAnimation } = druidWebChatState.mergedChatOptions?.UI || {};\n const{ styleOptions: { subtle, fontSizeSmall } = {}\n } = useMergedOptions();\n\n const styleToEmotionObject = useStyleToEmotionObject();\n const [{ typingIndicator: typingIndicatorStyleSet }] = useStyleSet();\n const [direction] = useDirection();\n const localize = useLocalizer();\n const druidLocalize = useDruidLocalize(localize);\n\n const ROOT_STYLE = {\n '&.webchat__typingIndicator': {\n 'fontSize': fontSizeSmall, \n backgroundSize: 'contain',\n color: subtle,\n '&::first-letter': {\n textTransform: !withText ? 'capitalize': 'none',\n },\n paddingBottom: 5\n }\n };\n\n const TYPING_ANIMATION_STYLE = {\n '& .webchat__typingIndicator': {\n backgroundSize: 'contain',\n }\n};\n\n const rootClassName = styleToEmotionObject(ROOT_STYLE) + '';\n const typingAnimationOverridesClassName = styleToEmotionObject(TYPING_ANIMATION_STYLE) + '';\n\n if(disableTypingAnimation) {\n return (\n \n {withText} {druidLocalize('DRUID_USER_IS_TYPING')}...\n );\n }\n \n return (\n
\n { withText ?
{ withText } {druidLocalize('DRUID_USER_IS_TYPING')}
: }\n
\n );\n};\n\nexport default WebChat;\n","import { DirectLine } from \"botframework-directlinejs\";\r\nimport { useContext, useEffect } from \"react\"\r\nimport DruidWebchatContext, { DruidWebchatContextType } from \"../WebChatContext\";\r\n\r\nexport const useSetDirectLineInstance = ({directlineInstance}: {directlineInstance: DirectLine | null }) => {\r\n const [,druidWebChatDispatch,] = useContext(DruidWebchatContext);\r\n\r\n useEffect(() => {\r\n if(directlineInstance) {\r\n druidWebChatDispatch({\r\n type:'SET_DIRECTLINEINSTANCE',\r\n payload: directlineInstance\r\n });\r\n }\r\n }, [directlineInstance, druidWebChatDispatch])\r\n}","import { useMemo } from \"react\";\r\nimport markdownIT from 'markdown-it';\r\n\r\nexport const useMarkdownIt = () => useMemo(() => {\r\n const markdownITInstance = markdownIT({html: true, xhtmlOut: true, linkify: true, breaks: true,\r\n typographer: true});\r\n\r\n const defaultRender = markdownITInstance.renderer.rules.link_open || ((tokens, idx, options, env, self) => {\r\n return self.renderToken(tokens, idx, options);\r\n });\r\n\r\n markdownITInstance.renderer.rules.link_open = (tokens, idx, options, env, self) => {\r\n // If you are sure other plugins can't add `target` - drop check below\r\n const targetIndex = tokens[idx].attrIndex('target');\r\n \r\n if (targetIndex < 0) {\r\n tokens[idx].attrPush(['target', '_blank']); // add new attribute\r\n } else {\r\n tokens[idx].attrs[targetIndex][1] = '_blank'; // replace value of existing attr\r\n }\r\n \r\n // pass token to default renderer.\r\n return defaultRender(tokens, idx, options, env, self);\r\n };\r\n\r\n return markdownITInstance;\r\n}\r\n, []);","import { useContext, useMemo } from \"react\";\nimport DruidWebchatContext, { DruidWebchatContextType } from \"../WebChatContext\";\nimport { getSpeechToken } from '../WebChatServices';\n// import { createCognitiveServicesSpeechServicesPonyfillFactory } from 'botframework-webchat'; //Components\n\nimport { useAsyncMemo } from \"use-async-memo\";\n\n\n\nexport const useCognitiveServices = (): any => { \n // can't be typed. when using useAsyncMemo lib, \n // returning a function is being executed by react-dom.basicStateReducer (return typeof action === 'function' ? action(state) : action;). we need to return fake wrapper function.\n const [druidWebChatState, druidWebChatDispatch, getState,] = useContext(DruidWebchatContext);\n\n return useAsyncMemo(async () => {\n const currentState = getState();\n let expireAfter = 0;\n\n if (druidWebChatState.isVoiceInput && druidWebChatState.speechOptions?.isVoiceChannel && currentState.speechOptions?.speechToken) {\n const createCognitiveServicesSpeechServicesPonyfillFactory = await (await import(\n /* webpackChunkName: \"speech\" */ \n 'botframework-webchat/lib/createCognitiveServicesSpeechServicesPonyfillFactory')).default;\n return () => createCognitiveServicesSpeechServicesPonyfillFactory(\n {\n credentials: () => {\n const currentState = getState();\n const now = Date.now();\n if (now > expireAfter) {\n expireAfter = now + 300000; // to expire after 5 minutes\n return getSpeechToken({ baseUrl: currentState.mergedChatOptions.baseUrl!, botId: currentState.mergedChatOptions.botId!, oldToken: currentState.speechOptions?.speechToken!, withCredentials: currentState.mergedChatOptions.withCredentials ? \"include\" : \"omit\" })\n .then(async res => {\n const respSpeechToken = await res.json();\n if (respSpeechToken) {\n druidWebChatDispatch({\n type: 'SET_SPEECHOPTIONS', payload: {\n speechToken: respSpeechToken\n }\n })\n }\n return {\n authorizationToken: respSpeechToken || currentState.speechOptions?.speechToken!,\n region: currentState.speechOptions?.speechRegion!\n }\n },\n err => {\n expireAfter = 0;\n console.error(err); // try with old token\n return {\n authorizationToken: currentState.speechOptions?.speechToken!,\n region: currentState.speechOptions?.speechRegion!\n }\n });\n\n } else {\n return new Promise(resolve => resolve({\n authorizationToken: currentState.speechOptions?.speechToken!,\n region: currentState.speechOptions?.speechRegion!\n }));\n }\n\n }\n });\n } else {\n return undefined;\n }\n }, [druidWebChatState.isVoiceInput, getState, druidWebChatState.speechOptions?.isVoiceChannel]);\n\n // return useMemo(() => {\n // const currentState = getState();\n // let expireAfter = 0;\n\n // if (druidWebChatState.isVoiceInput && druidWebChatState.speechOptions?.isVoiceChannel && currentState.speechOptions?.speechToken) {\n \n // return createCognitiveServicesSpeechServicesPonyfillFactory(\n // {\n // credentials: () => {\n // const currentState = getState();\n // const now = Date.now();\n // if (now > expireAfter) {\n // expireAfter = now + 300000; // to expire after 5 minutes\n // return getSpeechToken({ baseUrl: currentState.mergedChatOptions.baseUrl!, botId: currentState.mergedChatOptions.botId!, oldToken: currentState.speechOptions?.speechToken!, withCredentials: currentState.mergedChatOptions.withCredentials ? \"include\" : \"omit\" })\n // .then(async res => {\n // const respSpeechToken = await res.json();\n // if (respSpeechToken) {\n // druidWebChatDispatch({\n // type: 'SET_SPEECHOPTIONS', payload: {\n // speechToken: respSpeechToken\n // }\n // })\n // }\n // return {\n // authorizationToken: respSpeechToken || currentState.speechOptions?.speechToken!,\n // region: currentState.speechOptions?.speechRegion!\n // }\n // },\n // err => {\n // expireAfter = 0;\n // console.error(err); // try with old token\n // return {\n // authorizationToken: currentState.speechOptions?.speechToken!,\n // region: currentState.speechOptions?.speechRegion!\n // }\n // });\n\n // } else {\n // return new Promise(resolve => resolve({\n // authorizationToken: currentState.speechOptions?.speechToken!,\n // region: currentState.speechOptions?.speechRegion!\n // }));\n // }\n\n // }\n // });\n // } else {\n // return undefined;\n // }\n // }, [druidWebChatState.isVoiceInput, getState, druidWebChatState.speechOptions?.isVoiceChannel]);\n}","import { useContext, useEffect, useMemo } from \"react\";\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport DruidWebchatContext, { DruidWebchatContextType } from '../WebChatContext';\r\n\r\n\r\nexport const useDebounceHideSuggestedActions = (outerBFSuggestedActions: any[]) => {\r\n\r\n const [, druidWebChatDispatch, ,] = useContext(DruidWebchatContext);\r\n\r\n const debounceHideSuggestedActions = useMemo(() => {\r\n const behaviorSubject = new BehaviorSubject(false);\r\n behaviorSubject.debounceTime(50).distinctUntilChanged().subscribe(hide => {\r\n if(outerBFSuggestedActions.length) {\r\n druidWebChatDispatch({ type: 'HIDE_SUGGESTEDACTIONS', payload: hide });\r\n }\r\n });\r\n return behaviorSubject;\r\n }, [outerBFSuggestedActions]);\r\n useEffect(() => {\r\n return () => {\r\n debounceHideSuggestedActions && debounceHideSuggestedActions.complete();\r\n }\r\n }, [outerBFSuggestedActions]);\r\n\r\n return debounceHideSuggestedActions;\r\n}\r\n\r\n// removed from WebChat.tsx\r\n// const debounceHideSuggestedActions = useMemo(() => {\r\n // const behaviorSubject = new BehaviorSubject(false);\r\n // behaviorSubject.debounceTime(50).distinctUntilChanged().subscribe(hide => {\r\n // druidWebChatDispatch({ type: 'HIDE_SUGGESTEDACTIONS', payload: hide })\r\n // });\r\n // return behaviorSubject;\r\n // }, []);\r\n // useEffect(() => {\r\n // return () => {\r\n // debounceHideSuggestedActions && debounceHideSuggestedActions.complete();\r\n // }\r\n // }, []);\r\n\r\n // // useEffect(() => {\r\n // // debounceHideSuggestedActions.next(!outerBFatEnd);\r\n // // }, [outerBFatEnd]);","import { useContext } from \"react\";\n\nimport DruidWebchatContext, { DruidWebchatContextType } from \"../WebChatContext\";\nimport { useMergedOptions } from '../selectors/useMergedOptions';\n\nexport const useStaticDruidStyleSet = ({ outerBFSuggestedActions }: { outerBFSuggestedActions: any[] }) => {\n const [druidWebChatState, , ,] = useContext(DruidWebchatContext);\n const { UI = {}, UI: { restylingsEnabled, transcriptLinkColor, buttonsPadding, druidSendBoxTextBoxPadding, buttonsBorderRadius, buttonsBorderColor, buttonsBackgroundColor, chatBoxBorderRadius, buttonsBackgroundColorOnHover, buttonsTextColorOnHover, buttonsBorderColorOnHover, buttonsTextColor, transcriptFontSize, rootFontSize, activityStatusShowBotName, activityStatusBotName, activityStatusUserName, activityStatusShowUserName } = {},\n styleOptions= {}, styleOptions: { accent, suggestedActionBackgroundColor, suggestedActionTextColor, fontSizeSmall, subtle, paddingRegular, sendBoxHeight, suggestedActionBackgroundColorOnDisabled, suggestedActionTextColorOnDisabled, suggestedActionBorderColorOnDisabled, sendBoxButtonColorOnDisabled, sendBoxDisabledTextColor, bubbleBorderRadius,sendBoxBackground } = {}, disabled,\n designPatterns: { nonCarousel_HeroCard_AutoWidth, nonCarousel_HeroCard_ButtonsOnly_BackgroundTransparent } = {}\n } = useMergedOptions();\n\n const scrollbarStyling = {\n '&::-webkit-scrollbar': {\n width: 8\n },\n '&::-webkit-scrollbar-thumb': {\n backgroundColor: 'rgb(219, 222, 225)',\n borderRadius: chatBoxBorderRadius\n }\n };\n return {\n basicTranscript: {\n '.druidWebchatRoot_v2 &': {\n '&.webchat__basic-transcript': {\n overscrollBehavior: 'contain',\n fontSize: transcriptFontSize || rootFontSize,\n '.webchat__basic-transcript__scrollable': {\n overscrollBehavior: 'none',\n ...scrollbarStyling\n }\n }\n\n },\n // REMOVED: message from bot and user should be aligned\n // 'div[class$=\"__nub-pad\"]': !druidWebChatState.mergedChatOptions.styleOptions?.botAvatarImage && { // if nubSize == 0 -> hide nub padding\n // width: '0 !important'\n // },\n // must be with ID #druidWebchatRoot_v2 (or be more specific. was done below at adaptiveCardRenderer)\n // '#druidWebchatRoot_v2 & .ac-pushButton': { // could/should have used adaptiveCardRenderer from createStyleSet -> createAdaptiveCardsStyleSet\n // padding: `${buttonsPadding}px`,\n // borderRadius: `${buttonsBorderRadius}px`,\n // fontSize: transcriptFontSize || rootFontSize, // possible bug fixes for not scrolling to bottom\n // fontWeight: '400', // possible bug fixes for not scrolling to bottom\n // // adaptivecards.css overrides. ex: height: 31px is wrong.\n // height: 'auto',\n // fontFamily: 'inherit',\n // '&:not([aria-disabled=\"true\"])' : {\n // borderColor: `${buttonsBorderColor}`,\n // backgroundColor: `${buttonsBackgroundColor}`,//?.startsWith(\"$\") ? (styleOptions[buttonsBackgroundColor.replace('$','')]) : buttonsBackgroundColor}`,\n // color: buttonsTextColor,\n // cursor: 'pointer',\n // '&:hover': {\n // backgroundColor: `${buttonsBackgroundColorOnHover || buttonsTextColor}`,\n // color: buttonsTextColorOnHover || buttonsBackgroundColor,\n // borderColor: `${buttonsBorderColorOnHover}` || 'transparent'\n // }\n // },\n // '&[aria-pressed=\"true\"]' : {\n // backgroundColor: `${buttonsBackgroundColorOnHover || buttonsTextColor}`,\n // color: buttonsTextColorOnHover || buttonsBackgroundColor,\n // borderColor: buttonsBorderColor || 'transparent',\n // // SHOULD consider using bellow for after button pressed\n // // [aria-pressed=\"true\"]': {\n // // backgroundColor: cardPushButtonBackgroundColor,\n // // borderColor: cardPushButtonBackgroundColor,\n // // color: cardPushButtonTextColor\n // // }\n // },\n \n // },\n '.druidWebchatRoot_v2 & button:not([aria-disabled=\"true\"])': {\n cursor: 'pointer'\n },\n '.druidWebchatRoot_v2 & a': {\n textDecoration: 'none',\n '&[href]': {\n color: transcriptLinkColor,\n '&:visited': {\n color: transcriptLinkColor\n }\n }\n }\n },\n stackedLayout: {\n '.druidWebchatRoot_v2 &.webchat__stacked-layout:not(.webchat__stacked-layout--from-user)': {\n '& .webchat__stacked-layout__attachment': {\n width: nonCarousel_HeroCard_AutoWidth && 'auto',\n '& .webchat__bubble__content.druid-hero-card__buttons-only': {\n backgroundColor: nonCarousel_HeroCard_ButtonsOnly_BackgroundTransparent && 'Transparent',\n border: nonCarousel_HeroCard_ButtonsOnly_BackgroundTransparent && 0,\n borderRadius: nonCarousel_HeroCard_ButtonsOnly_BackgroundTransparent && 0,\n '& .webchat__adaptive-card-renderer': {\n '& .ac-adaptiveCard': {\n paddingLeft: nonCarousel_HeroCard_ButtonsOnly_BackgroundTransparent && '0 !important',\n paddingRight: nonCarousel_HeroCard_ButtonsOnly_BackgroundTransparent && '0 !important',\n paddingTop: nonCarousel_HeroCard_ButtonsOnly_BackgroundTransparent && '0 !important',\n }\n }\n }\n }\n }\n },\n suggestedActions: {\n '&.webchat__suggested-actions': {\n fontSize: transcriptFontSize || rootFontSize,\n '& .webchat__suggested-actions__flow-box': {\n justifyContent: outerBFSuggestedActions?.length <= 2 && 'center'\n }\n },\n },\n suggestedAction: {\n '#druidWebchatRoot_v2 &.webchat__suggested-action': {\n padding: buttonsPadding,\n '&:not([aria-disabled=\"true\"])' :{\n cursor: 'pointer',\n '&:hover': {\n backgroundColor: `${buttonsBackgroundColorOnHover || suggestedActionTextColor}`,\n color: buttonsTextColorOnHover || suggestedActionBackgroundColor,\n borderColor: buttonsBorderColorOnHover || buttonsBackgroundColorOnHover || suggestedActionTextColor\n }\n },\n '&[aria-disabled=\"true\"]': {\n backgroundColor: suggestedActionBackgroundColorOnDisabled || sendBoxButtonColorOnDisabled,\n color: suggestedActionTextColorOnDisabled || sendBoxDisabledTextColor,\n borderColor: suggestedActionBorderColorOnDisabled || sendBoxButtonColorOnDisabled\n }\n }\n },\n scrollToEndButton: {\n '#druidWebchatRoot_v2 &.webchat__scroll-to-end-button': {\n padding: paddingRegular! / 2,\n opacity: '70%'\n },\n },\n toast: {\n '& .webchat__toast__text':{\n textAlign: 'center'\n }\n },\n autoResizeTextArea: {\n '&.webchat__auto-resize-textarea':{\n 'textarea.webchat__auto-resize-textarea__textarea': {\n ...scrollbarStyling\n },\n '& .webchat__auto-resize-textarea__doppelganger': {\n overflowY: 'none'\n }\n },\n \n },\n adaptiveCardRenderer: {\n '&.webchat__adaptive-card-renderer .ac-adaptiveCard': {\n '& *': {\n fontFamily: 'inherit !important'\n },\n 'select.ac-multichoiceInput': {\n // select has a problem with height.\n height: `calc(${paddingRegular! + 2}px + ${rootFontSize} + 5px)`,\n padding: paddingRegular! / 2\n },\n '& .ac-pushButton': { // could/should have used adaptiveCardRenderer from createStyleSet -> createAdaptiveCardsStyleSet\n padding: `${buttonsPadding}px`,\n borderRadius: `${buttonsBorderRadius}px`,\n fontSize: transcriptFontSize || rootFontSize, // possible bug fixes for not scrolling to bottom\n fontWeight: '400', // possible bug fixes for not scrolling to bottom\n // adaptivecards.css overrides. ex: height: 31px is wrong.\n height: 'auto',\n fontFamily: 'inherit',\n '&:not([aria-disabled=\"true\"])' : {\n borderColor: `${buttonsBorderColor}`,\n backgroundColor: `${buttonsBackgroundColor}`,//?.startsWith(\"$\") ? (styleOptions[buttonsBackgroundColor.replace('$','')]) : buttonsBackgroundColor}`,\n color: buttonsTextColor,\n cursor: 'pointer',\n '&:hover': {\n backgroundColor: `${buttonsBackgroundColorOnHover || buttonsTextColor}`,\n color: buttonsTextColorOnHover || buttonsBackgroundColor,\n borderColor: `${buttonsBorderColorOnHover}` || 'transparent'\n }\n },\n '&[aria-pressed=\"true\"]' : {\n backgroundColor: `${buttonsBackgroundColorOnHover || buttonsTextColor}`,\n color: buttonsTextColorOnHover || buttonsBackgroundColor,\n borderColor: buttonsBorderColor || 'transparent',\n // SHOULD consider using bellow for after button pressed\n // [aria-pressed=\"true\"]': {\n // backgroundColor: cardPushButtonBackgroundColor,\n // borderColor: cardPushButtonBackgroundColor,\n // color: cardPushButtonTextColor\n // }\n },\n },\n '& .ac-textBlock, & .ac-textRun': {\n // fontFamily: 'inherit !important'\n },\n '& .ac-input': {\n // fontFamily: 'inherit',\n // color: 'black',\n '&.ac-textInput' : {\n resize: 'none',\n '&.ac-multiline' : {\n height: 72\n }\n },\n '&.ac-textInput, &.ac-numberInput, &.ac-dateInput, &.ac-timeInput, &.ac-multichoiceInput': {\n border: '1px solid #DDDDDD',\n boxSizing: 'border-box',\n padding: '4px 8px 4px 8px',\n height: 31\n },\n '&.ac-multichoiceInput': {\n backgroundColor: 'white'\n }\n }\n }\n },\n fileContent: {\n '& .webchat__fileContent__downloadIcon': {\n padding: 0 // if css box-size: border-box + padding: 20px -> icon is not visible. useless padding if not overriden\n },\n '& .webchat__fileContent__fileName': {\n color: 'inherit'\n }\n },\n sendBox: {\n '&.webchat__send-box': {\n ...(restylingsEnabled && \n { \n '& .webchat__send-box__main': {\n backgroundColor: 'transparent',\n gap: ((paddingRegular || 0) / 2)\n }\n })\n }\n },\n sendBoxTextBox: {\n '&.webchat__send-box-text-box': {\n flex: 10000,\n padding: druidSendBoxTextBoxPadding || ((paddingRegular || 0) / 2),\n ...(restylingsEnabled && \n { \n backgroundColor: sendBoxBackground,\n borderRadius: bubbleBorderRadius,\n paddingInline: paddingRegular,\n '& .webchat__send-box-text-box__input': {\n \n },\n\n '& .webchat__send-box-text-box__input, & .webchat__send-box-text-box__html-text-area': {\n // backgroundColor: 'red'\n }\n }),\n }\n },\n sendBoxButton: {\n '&.webchat__icon-button .webchat__icon-button__shade': {\n display: !restylingsEnabled && 'none'\n },\n ...(restylingsEnabled && \n { \n '&.webchat__icon-button': {\n // borderRadius: '50%',\n marginBlock: 5,\n // alignSelf: 'center',\n // color: accent,\n '&.webchat__send-button': {\n // marginLeft: 10\n },\n //UNCOMMENT\n '& .webchat__icon-button__shade': {\n display: 'block',\n top: 'unset',\n bottom: 'unset',\n left: 'unset',\n right: 'unset',\n width: sendBoxHeight ? parseInt(sendBoxHeight.toString()) - 10 : sendBoxHeight, // We use the sendBoxHeight, so the button looks square\n height: sendBoxHeight ? parseInt(sendBoxHeight.toString()) - 10 : sendBoxHeight\n\n },\n width: sendBoxHeight ? parseInt(sendBoxHeight.toString()) - 10 : sendBoxHeight, // We use the sendBoxHeight, so the button looks square\n\n '&:not(.webchat__icon-button--stretch)': {\n height: sendBoxHeight ? parseInt(sendBoxHeight.toString()) - 10 : sendBoxHeight\n },\n\n // '&:not(.webchat__icon-button--stretch)': {\n // height: sendBoxHeight ? parseInt(sendBoxHeight.toString()) - 10 : sendBoxHeight,\n // '& .webchat__icon-button__shade': {\n // display: 'block',\n // top: 0,\n // left: 0,\n // right: 0,\n // bottom: 0\n // }\n // },\n // '.webchat__icon-button__shade': {\n // display: 'block',\n // position: 'absolute',\n // top: 'unset',\n // bottom: 'unset',\n // left: 'unset',\n // right: 'unset',\n // },\n // width: sendBoxHeight ? parseInt(sendBoxHeight.toString()) - 10 : sendBoxHeight,\n },\n }),\n },\n uploadButton: {\n // marginInline: 10,\n ...(restylingsEnabled && \n {\n width: sendBoxHeight ? parseInt(sendBoxHeight.toString()) - 5 : sendBoxHeight,\n })\n }\n // bubble: {\n // '&.webchat__bubble': {\n // '&.webchat__bubble--hide-nub, &.webchat__bubble--show-nub': {\n // // '& .webchat__bubble__nub-pad': {\n // '& [class$=\"__nub-pad\"]': {\n // width: '0 !important'\n // }\n // }\n // }\n // }\n };\n}"],"sourceRoot":""}