{"version":3,"sources":["chat-api/chat-api.ts","chat-api/poll.ts","assets/images/extentions sync /^/.//.*/.png$","assets/images/extentions/docx.png","assets/images/extentions/others.png","assets/images/extentions/pdf.png","assets/images/extentions/xls.png","assets/images/extentions/xlsx.png","GlobalStyle.ts","components/ChatHeader/styles.ts","data/AppContext.tsx","data/ChatContext.tsx","data/MessageContext.tsx","data/ThemeContext.tsx","data/index.tsx","components/ChatHeader/index.tsx","components/ChatFooter/styles.ts","components/ChatFooter/TextInput/styles.ts","components/Audio/styles.tsx","components/Audio/Audio.tsx","components/ChatFooter/TextInput/index.tsx","hooks/useOutsideAlerter.tsx","components/ChatFooter/IconPanel/styles.ts","components/ChatFooter/IconPanel/index.tsx","components/ChatFooter/index.tsx","components/ChatBody/styles.ts","utils/index.ts","components/ChatBody/TimeDivider/TimeDivider.tsx","components/ChatBody/Message/MessageFooter/styles.ts","utils/whatsapp-parser/index.ts","utils/whatsapp-parser/Lexer.ts","utils/whatsapp-parser/Parser.ts","components/ChatBody/Message/MessageFooter/MessageFooter.tsx","components/ChatBody/Message/MessageBody/MessageBodyVideo/styles.tsx","components/ChatBody/Message/MessageBody/MessageBodyVideo/MessageBodyVideo.tsx","components/ChatBody/Message/MessageBody/MessageBodyImage/styles.tsx","components/ChatBody/Message/MessageBody/MessageBodyImage/MessageBodyImage.tsx","components/ChatBody/Message/MessageBody/MessageBodyDocument/styles.tsx","components/ChatBody/Message/MessageBody/MessageBodyDocument/MessageBodyDocument.tsx","components/ChatBody/Message/MessageBody/MessaBodyAudio/styles.tsx","components/ChatBody/Message/MessageBody/MessaBodyAudio/MessageBodyAudio.tsx","utils/maps.ts","components/ChatBody/Message/MessageBody/MessageBodyLocation/styles.tsx","components/ChatBody/Message/MessageBody/MessageBodyLocation/MessageBodyLocation.tsx","components/ChatBody/Message/styles.tsx","components/ChatBody/Message/Message.tsx","components/ChatBody/CustomKeyboard/styles.ts","components/ChatBody/CustomKeyboard/CustomKeyboard.tsx","components/ChatBody/index.tsx","components/Form/styles.ts","components/Form/index.tsx","components/Chat/styles.ts","components/Chat/index.tsx","App.tsx","index.tsx","chat-api/index.ts"],"names":["instance","mongoObjectId","Date","getTime","toString","replace","Math","random","toLowerCase","ChatAPI","classId","id","accessToken","corporateAccountId","getGlobal","api","messages","chat","pooling","config","language","window","navigator","CACHE","Map","lastUpdateDate","axios","create","baseURL","headers","_classId","_objId","_id","contentType","url","this","get","data","responseType","then","res","URL","createObjectURL","blob","downloadLink","defaults","_class","resp","status","emit","initPoll","localStorage","setItem","JSON","stringify","fn","check","interval","executePoll","resolve","reject","a","result","setTimeout","Promise","poll","getMessages","bind","initialMessage","communicationTool","body","date","toISOString","type","MessageType","Text","MessageStatus","Read","from","isOld","token","application","Authorization","catch","err","response","payload","audiency","setGlobal","user","password","base64","btoa","endpoint","hasMessagesChanged","oldestMessage","loadedMessages","length","postMessage","getItem","parent","reverse","forEach","newMessage","_lastUpdateDate","index","map","loadedMessage","indexOf","VideoConference","videoConference","error","console","olderMessage","sort","b","file","cancelToken","formData","FormData","append","post","cookieEnabled","languages","userAgent","serverDiff","serverDate","now","sendHash","code","messageBody","MessageBodyTypeClass","chatId","additionalData","useragent","location","href","host","locale","env","findIndex","message","getChat","client","Queued","encodeURIComponent","cached","set","key","value","EventEmitter","webpackContext","req","webpackContextResolve","__webpack_require__","o","e","Error","keys","Object","module","exports","SIZE","sm","DEVICE","mobile","desktop","createGlobalStyle","Container","styled","div","props","icon","forceResponsiveMode","isMobile","showChat","backgroundColor","isExpanded","Title","span","IconWrapper","Content","color","ExpandWrapper","StyledAvatar","Avatar","textColor","AppContext","createContext","AppContextProvider","React","memo","children","useState","isLoading","setIsLoading","setInitialMessage","showAttendant","setShowAttendant","hasVideo","setHasVideo","isAnonymous","setIsAnonymous","setCommunicationTool","translationBundle","setTranslationBundle","showAvatar","setShowAvatar","responsiveMode","setResponsiveMode","getTranslation","useCallback","args","unit","param","contextState","Provider","ChatContext","mql","matchMedia","ChatContextProvider","chatAPI","setChat","setShowChat","setUser","isLoggingIn","setIsLoggingIn","authsConfig","setAuthsConfig","avatarURL","setAvatarURL","innerWidth","setIsMobile","setIsExpanded","useAppState","useEffect","mqlCallback","matches","addEventListener","removeEventListener","photo","downloadPhoto","getOrgConfig","authenticatorsConfig","MessageContext","MessageContextProvider","useChatState","scrollBottom","setScrollBottom","setMessages","sendingMessages","setSendingMessages","isRecordingAudio","setIsRecordingAudio","sendMessage","genMessage","prev","finally","filter","obj","uploadAndSend","messageType","CancelToken","source","name","size","uploadFile","collection","Audio","hash","storage","ThemeContext","ThemeContextProvider","theme","setTheme","horizontalPosition","header","title","titleColor","buttonsColor","timeDividerBackgroundColor","timeDividerTextColor","customer","messageBackgroundColor","messageTextColor","messageHourTextColor","runnableTrackColor","sliderTrackColor","enterprise","footer","textInput","placeholderColor","sendIconColor","iconsPanel","iconsBackgroundHoverColor","iconsColor","context","useContext","undefined","useTheme","useMessageState","GlobalState","ChatHeader","document","querySelector","style","overflow","setOverflow","handleClick","as","onClick","src","Icon","className","EditorWrapper","StyledEditor","Editor","SendButton","IconButton","SendIcon","Send","MicIcon","Mic","styles","SendContainer","active","animate","RecordingBullet","Button","button","StopButton","Timer","ButtonWrapper","flex","Mp3Recorder","MicRecorder","bitRate","timer","setTimer","recordingStarted","setRecordingStarted","start","stop","startTimer","clearTimeout","sendAudio","getMp3","File","substr","lastModified","justifySelf","today","moment","utcOffset","hour","minute","second","millisecond","format","getTimer","Check","emojiPlugin","createEmojiMartPlugin","TextInput","isReady","setIsReady","EditorState","createEmpty","editorState","setEditorState","text","setText","plugins","keyPressed","event","shiftKey","ctrlKey","preventDefault","onChange","newEditorState","currentContentTextLength","getCurrentContent","getPlainText","newContentTextLength","moveFocusToEnd","convertToRaw","blocks","block","trim","join","handleSendClick","recordAudio","getUserMedia","audio","getButton","useMemo","hasText","disableRipple","disableTouchRipple","readOnly","spellCheck","placeholder","handleReturn","useOutsideAlerter","ref","stateSetter","handleClickOutside","current","contains","target","handleEscape","StyledIconButton","StyledAttachFileIcon","AttachFile","StyledEmojiIcon","InsertEmoticon","StyledVoiceChatIcon","VoiceChat","StyledCollapse","Collapse","offset","StyleArrowIcon","PlayArrow","IconPanel","attachFileRef","useRef","showEmojiPicker","setShowEmojiPicker","Picker","emojiPickerRef","handleFile","files","test","Image","Video","Document","icons","tooltip","unshift","click","push","accept","display","Tooltip","arrow","component","in","timeout","appear","enter","exit","el","perline","showPreview","showSkinTones","i18n","search","clear","notfound","skintext","categories","recent","people","nature","foods","activity","places","objects","symbols","flags","ChatFooter","MessagesContainer","LoadingContainer","isLastMessage","messagesByDate","isMsgOut","TimeDividerBody","TimeDividerText","TimeDividerContainer","dir","yesterday","subtract","startOf","diff","calendar","split","toUpperCase","msgDate","isSameWeek","getReadableTime","LexemeType","useStyles","makeStyles","createStyles","messageDocument","maxWidth","minWidth","messageWithMedia","messageWithoutMedia","messageWithText","padding","messageWithTextAndMedia","messageWithDocument","VideoConferenceWrapper","MessageInfoContainer","MessageInfoContainerWithoutText","MessageInfo","MessageInfoWithoutText","MessageHour","hourColor","MessageTextWrapper","MessageTextContent","MessageTextSpacer","Lexer","ch","lexeme","TEXT","state","getChar","isEOL","isBlank","BOLD","ungetChar","isWord","ITALIC","DASHED","CODE","char","Parser","lexer","getLexeme","slice","parse","LINK_REGEX","links","match","link","idx","parsed","reduce","VideoConferenceText","endDate","rel","MessageText","dangerouslySetInnerHTML","__html","MessageFooter","hourTextColor","classes","hasTextOrCaption","Info","Hsm","preview","caption","isMedia","hasCaption","getClassByMessageType","role","position","MediaRow","MediaItem","VideoContainer","MediaWithoutCaption","MediaTag","video","mediaVideo","width","height","videoWidth","videoHeight","controls","preload","Loading","ImageContainer","ImageItem","img","mediaImage","imageBlob","open","alt","DocumentContainer","DocumentLink","DocumentRow","ExtentionIconContainer","ExtentionIcon","DocumentNameContainer","DocumentName","DownloadIconContainer","InfoItemBullet","InfoContainer","InfoItem","getFileExtention","mimetypes","extention","pop","includes","getFileSize","round","fileName","mediaDocument","mediaBlob","numberOfPages","setNumberOfPages","reader","FileReader","readAsBinaryString","onloadend","count","getNumberOfPages","createElement","download","appendChild","remove","filename","backgroundImage","require","data-icon","cursor","xmlns","viewBox","fill","d","LittleLoading","data-meta-key","substring","lastIndexOf","AudioContainer","AudioControls","AudioControlsRow","AudioPlay","AudioPlayButton","AudioProgressContainer","AudioDuration","AudioProgress","AudioProgressSpan","AudioProgressInput","input","mediaAudio","playing","audioState","setAudioState","getAudioProgess","Number","currentTime","duration","toFixed","ontimeupdate","aState","ended","flexDirection","paused","play","pause","getAudioCurrentTime","min","max","String","generateMapUrl","lon","lat","address","generateMapPictureUrl","Link","coordinates","Box","fontSize","marginTop","marginLeft","MessageContainer","TextContainer","isOut","MessageStatusError","MessageErrorIcon","ContainerLoadingMedia","RowLoadingMedia","LoadingIconDiv","ContainerLoadingMediaBefore","ContainerLittleLoadingMedia","RowLittleLoadingMedia","LittleLoadingIconDiv","ContainerLittleLoadingMediaBefore","fadeIn","keyframes","dotTyping","DotTyping","DotContainer","MessageBody","Sticker","useTooltip","order","cancel","stroke","cx","cy","r","strokeWidth","prevProps","nextProps","lastChild","headerBackgorunColor","setMediaImage","setMediaVideo","setMediaDocument","setMediaAudio","setMediaBlob","setImageBlob","tooltipClass","attendant","setAttendant","mediaMessage","getFile","onload","onloadeddata","isOutMessage","animation","alignItems","marginBottom","loading","charAt","marginRight","MS","Failed","placement","boxShadow","Location","CustomKeyboardDiv","LinkIcon","OpenInNewIcon","KeyboardButton","CustomKeyboard","buttons","btn","identifier","ChatBody","isLoadingOldMessages","setIsLoadingOldMessages","hasMoreMessages","setHasMoreMessages","chatRef","footerRef","messagesRef","newChat","setNewChat","setInterval","newMessages","msg","clearInterval","callback","messagesContainer","i","scrollTop","offsetHeight","scrollHeight","scrollIntoView","on","off","addInitialMessage","handleScroll","oldScrollTop","getOldMessages","scrollTo","loadMoreMessages","messagesHeight","chatHeight","sortedMessages","msgA","msgB","allowedMessages","Internal","isLastLoading","canAnimate","onScroll","values","sndMsg","find","_","groupBy","getMessagesByDate","customKeyboards","keyboard","Input","TextField","Form","form","SubmitButton","p","OtherAuth","primary","secondary","FormError","rotation","AuthError","showPassword","setShowPassword","setFormData","errors","setErrors","handleChange","some","auth","onSubmit","signIn","subject","origin","_chat","root","InputLabelProps","focused","InputProps","label","required","endAdornment","InputAdornment","Visibility","VisibilityOff","disabled","item","loginUrl","curr","Pulsing","css","customPosition","left","right","WIDTH","MessageSkeleton","Skeleton","LoadingChat","hasFooter","StartMessages","EndMessages","Chat","setLoading","resizeCallback","setProperty","innerHeight","collapsedHeight","disableStrictModeCompat","onEnter","anonymousLogin","validateToken","urlParams","URLSearchParams","SD_ANONYMOUS_USER_ID","renewToken","variant","ChatApp","getConfig","conf","anonymous","UIConfig","chatwebUIConfig","logo","GlobalStyle","App","setContext","oldContext","addContext","ReactDOM","render","StrictMode","getElementById","S1MessageType","FeaturedLocation","ExecutionContext","process","SYDLE_CHAT_WEB_ENV","TextMessageBodyClass","MediaMessageBodyClass","Contacts"],"mappings":"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","file":"static/js/main.5e221c63.chunk.js","sourcesContent":["import axios, { AxiosError, AxiosInstance, AxiosResponse, CancelTokenSource } from 'axios';\nimport { EventEmitter } from 'events';\nimport { APIErrorResponse, BaseMessage, Chat, CommunicationTool, FileBean, getGlobal, Message, MessageBodyTypeClass, MessageStatus, MessageType, setGlobal, VideoConferenceMessage } from '.';\nimport poll from './poll';\n\nconst mongoObjectId = function () {\n var timestamp = (new Date().getTime() / 1000 | 0).toString(16);\n return timestamp + 'xxxxxxxxxxxxxxxx'.replace(/[x]/g, function () {\n return (Math.random() * 16 | 0).toString(16);\n }).toLowerCase();\n};\n\nlet instance: ChatAPI;\n\nclass ChatAPI extends EventEmitter {\n public classId?: string;\n public id?: string;\n public accessToken?: string;\n public corporateAccountId: string = getGlobal('REACT_APP_SYDLE_CORPORATE_ACCOUNT_ID');\n\n public api?: AxiosInstance;\n private messages: Array = [];\n public chat: Chat | null = null;\n private pooling = false;\n private config: any = null;\n private language = window.navigator.language;\n\n private CACHE = new Map();\n // Data de atualização mais recente\n protected lastUpdateDate: Date = new Date(0);\n\n constructor() {\n super();\n\n if (!instance) {\n this.lastUpdateDate = new Date(0);\n this.api = axios.create({\n baseURL: `${getGlobal('REACT_APP_BASE_URL')}/api/1/${getGlobal('REACT_APP_APPLICATION')}`,\n headers: {\n 'Accept-Language': this.language,\n 'Content-Type': 'application/json'\n }\n });\n instance = this;\n }\n\n return instance;\n }\n\n getFile({ _classId, _objId, _id, contentType }: any) {\n let url = `/_classId/${_classId}/_download/${_objId}/${_id}?contentType=${contentType}`;\n return this.api!.get(url, { data: null, responseType: 'blob' })\n .then((res: AxiosResponse) => {\n return {\n url: URL.createObjectURL(res.data),\n blob: res.data,\n downloadLink: `${this.api?.defaults.baseURL}${url}`\n };\n });\n }\n\n getChat(chat?: any) {\n if (chat) {\n return this.api!.get(`/_classId/${chat._class._id}/getChat/${chat._id}`, { data: null })\n .then((resp: AxiosResponse<{ chat: Chat }>) => {\n if (resp.data.chat.status !== 'completed') {\n this.chat = resp.data.chat;\n this.id = resp.data.chat._id;\n this.classId = resp.data.chat._class._id;\n this.emit('chat', resp.data.chat);\n\n if (!this.pooling) {\n this.initPoll();\n }\n\n localStorage.setItem('_chat', JSON.stringify(this.chat));\n }\n return resp.data.chat;\n });\n } else {\n return this.api!.get(`/_classId/${this.classId}/getChat/${this.id}`, { data: null })\n .then((resp: AxiosResponse<{ chat: Chat }>) => {\n this.chat = resp.data.chat;\n this.emit('chat', resp.data.chat);\n\n if (!this.pooling) {\n this.initPoll();\n }\n\n localStorage.setItem('_chat', JSON.stringify(this.chat));\n\n return this.chat;\n });\n }\n }\n\n initPoll() {\n this.pooling = true;\n poll(this.getMessages.bind(this), () => false, getGlobal('REACT_APP_POOLING_TIME') || 5000);\n }\n\n addInitialMessage(initialMessage: string, communicationTool: CommunicationTool) {\n this.messages = [{\n body: {\n body: initialMessage\n },\n date: (new Date()).toISOString(),\n type: MessageType.Text,\n status: MessageStatus.Read,\n from: communicationTool,\n _id: '0'\n }];\n this.emit('messages', { messages: this.messages, isOld: false });\n }\n\n renewToken(token: string, application: string = getGlobal('REACT_APP_APPLICATION')) {\n return axios.get(`${getGlobal('REACT_APP_BASE_URL')}/api/1/${application}/sys/auth/renewToken`, {\n headers: {\n Authorization: `Bearer ${token}`\n }\n })\n .then((res: AxiosResponse) => {\n this.accessToken = res.data.accessToken.token;\n this.api = axios.create({\n baseURL: `${getGlobal('REACT_APP_BASE_URL')}/api/1/${application}`,\n headers: {\n Authorization: `Bearer ${this.accessToken}`,\n 'Content-Type': 'application/json'\n }\n });\n return res.data;\n }).catch((err: AxiosError) => {\n return Promise.reject(err.response?.status);\n })\n }\n\n validateToken(token: string) {\n return axios.get(`${getGlobal('REACT_APP_BASE_URL')}/api/sys/rest/validateToken`, {\n headers: {\n 'Authorization': `Bearer ${token}`,\n 'Accept-Language': this.language,\n 'Content-Type': 'application/json'\n }\n }).then((res: AxiosResponse) => {\n let application = getGlobal('REACT_APP_APPLICATION');\n\n if (res.data.accessToken?.payload?.audiency?.[0]) {\n application = res.data.accessToken?.payload?.audiency[0];\n setGlobal('REACT_APP_APPLICATION', application);\n }\n\n this.accessToken = res.data.accessToken.token;\n this.api = axios.create({\n baseURL: `${getGlobal('REACT_APP_BASE_URL')}/api/1/${application}`,\n headers: {\n Authorization: `Bearer ${this.accessToken}`,\n 'Content-Type': 'application/json'\n }\n });\n return res.data;\n });\n }\n\n getOrgConfig() {\n return axios.get(`${getGlobal('REACT_APP_BASE_URL')}/api/1/${getGlobal('REACT_APP_APPLICATION')}/_organizationConfigs/${getGlobal('REACT_APP_ORGANIZATION')}`)\n .then(res => {\n return res.data;\n })\n .catch((err: AxiosError) => {\n return Promise.reject(err.response?.status);\n })\n }\n\n signIn({ user, password }: { user: string, password: string }) {\n const base64 = btoa(`${user}:${password}`);\n return axios.get(`${getGlobal('REACT_APP_BASE_URL')}/api/1/${getGlobal('REACT_APP_APPLICATION')}/sys/auth/signIn`, {\n headers: {\n Authorization: `Basic ${base64}`\n }\n })\n .then((res: AxiosResponse) => {\n this.accessToken = res.data.accessToken.token;\n this.api = axios.create({\n baseURL: `${getGlobal('REACT_APP_BASE_URL')}/api/1/${getGlobal('REACT_APP_APPLICATION')}`,\n headers: {\n Authorization: `Bearer ${this.accessToken}`,\n 'Content-Type': 'application/json'\n }\n });\n return res.data;\n }).catch((err: AxiosError) => {\n return Promise.reject(err.response?.status);\n })\n }\n\n getMessages() {\n let endpoint = `/_classId/${this.classId}/getMessagesFromChat/${this.id}`;\n if (this.lastUpdateDate.getTime() > 0) {\n endpoint += `?lastUpdateDate=${this.lastUpdateDate.toISOString()}`;\n }\n return this.api!.get(endpoint, { data: null })\n .then(res => {\n let hasMessagesChanged = false;\n const oldestMessage = this.messages[0];\n const loadedMessages = [...this.messages];\n // postMessage:\n if (res.data.messages && res.data.messages.length > 0 && res.data.messages[0].postMessage && localStorage.getItem('_lastMessageId') !== res.data.messages[0]._id) {\n localStorage.setItem('_lastMessageId', res.data.messages[0]._id);\n window.parent.postMessage(res.data.messages[0].postMessage, '*');\n }\n (res.data.messages as Message[]).reverse().forEach(newMessage => {\n if (newMessage._lastUpdateDate) {\n const date = new Date(newMessage._lastUpdateDate);\n if (date > this.lastUpdateDate) {\n this.lastUpdateDate = date;\n }\n }\n\n const index = loadedMessages.map(loadedMessage => loadedMessage._id).indexOf(newMessage._id);\n if (index !== -1) {\n if (newMessage.status !== this.messages[index].status ||\n (newMessage.type === MessageType.VideoConference &&\n (newMessage.body.status !== (this.messages[index] as VideoConferenceMessage).body.status || newMessage.body.videoConference?.status !== (this.messages[index] as VideoConferenceMessage).body.videoConference?.status))) {\n this.messages[index] = newMessage;\n this.messages = [...this.messages];\n hasMessagesChanged = true;\n }\n } else {\n // Verificar se a mensagem está dentro da janela no front\n if (!oldestMessage || new Date(newMessage.date).getTime() > new Date(oldestMessage.date).getTime()) {\n this.messages = [...this.messages, newMessage];\n hasMessagesChanged = true;\n }\n }\n });\n\n if (hasMessagesChanged) {\n this.emit('messages', { messages: this.messages, isOld: false });\n }\n\n return res.data;\n })\n .catch((error: AxiosError) => {\n console.error(error.response?.data)\n return [];\n });\n }\n\n getOldMessages() {\n const olderMessage = this.messages.sort((a, b) => {\n return new Date(a.date).getTime() - new Date(b.date).getTime();\n })[0];\n\n return this.api!.get(`/_classId/${this.classId}/getMessagesFromChat/${this.chat?._id}?olderMessageDate=${olderMessage.date}`, { data: null })\n .then(res => {\n let hasMessagesChanged = false;\n const loadedMessages = [...this.messages];\n (res.data.messages as Message[]).reverse().forEach(newMessage => {\n const index = loadedMessages.map(loadedMessage => loadedMessage._id).indexOf(newMessage._id);\n if (index === -1) {\n this.messages = [newMessage, ...this.messages];\n hasMessagesChanged = true;\n }\n });\n\n if (hasMessagesChanged) {\n this.emit('messages', { messages: this.messages, isOld: true });\n }\n\n return res.data;\n })\n .catch((error: AxiosError) => {\n return Promise.reject(error.response?.data);\n });\n }\n\n uploadFile(file: File, cancelToken?: CancelTokenSource) {\n let formData = new FormData();\n const source = cancelToken;\n const config = {\n headers: { 'content-type': 'multipart/form-data' },\n cancelToken: source?.token\n }\n formData.append('file', file);\n return this.api!.post(`/_classId/${this.classId}/_upload/${this.id}`, formData, config)\n .then((res: AxiosResponse) => {\n return res.data;\n }).catch((error: AxiosError) => {\n return Promise.reject(error.response?.data);\n });\n }\n\n getConfig() {\n if (!this.config) {\n return this.api!.post(`/com.sydle.communication/ChatWebAccount/getConfig/${this.corporateAccountId}`, {\n navigator: {\n cookieEnabled: navigator.cookieEnabled,\n language: navigator.language,\n languages: navigator.languages,\n userAgent: navigator.userAgent\n },\n localStorage: localStorage\n }).then((res: any) => {\n this.config = res.data;\n this.config.serverDiff = new Date(this.config.serverDate).getTime() - Date.now();\n return res.data;\n }).catch((error: AxiosError) => {\n return Promise.reject(error.response?.data);\n });\n } else {\n return Promise.resolve(this.config);\n }\n }\n\n sendMessage({ from, type, body, sendHash }: { from: any, type: MessageType, body: Message['body'], sendHash?: string }) {\n return this.api!.post(`/com.sydle.communication/ChatWebAccount/inboundNotifications/${this.corporateAccountId}`, {\n from: {\n _id: from.code\n },\n messageBody: {\n _class: MessageBodyTypeClass[type],\n ...body\n },\n type,\n sendHash,\n chatId: this.id,\n additionalData: {\n useragent: navigator.userAgent,\n url: window.location.href,\n host: window.location.host,\n locale: navigator.language,\n env: (window as { [key: string]: any })[\"ENV\"]\n }\n },\n {\n headers: {\n Authorization: `Bearer ${this.accessToken}`,\n 'Content-Type': 'application/json'\n }\n }).then((res: AxiosResponse) => {\n const index = this.messages.findIndex((message) => message._id === res.data._id);\n if (index === -1) {\n this.messages = [...this.messages, res.data];\n }\n\n if ((!this.id || !this.classId) || (this.id !== res.data.chat?._id)) {\n const chat = res.data.chat as any;\n this.id = chat._id;\n this.classId = chat._class._id;\n this.getChat();\n }\n\n this.emit('messages', { messages: this.messages, isOld: false });\n if (this.id) {\n this.getMessages();\n }\n return res.data;\n }).catch((error: AxiosError) => {\n return Promise.reject(error.response?.data);\n });\n }\n\n genMessage({ type, body, cancelToken }: { type: MessageType, body: Message['body'], cancelToken: CancelTokenSource }): BaseMessage {\n return {\n _id: mongoObjectId(),\n type,\n body: {\n _class: MessageBodyTypeClass[type],\n ...body\n },\n cancelToken: cancelToken,\n date: new Date(Date.now() + this.config.serverDiff),\n from: {\n user: this.chat?.client!\n },\n status: MessageStatus.Queued,\n sendHash: mongoObjectId()\n };\n }\n\n async downloadPhoto({ _classId, _objId }: any) {\n let url = `/_classId/5f219106e0c42b6b86a697c8/downloadPhoto?_body=${encodeURIComponent(JSON.stringify({ _classId, _objId }))}`;\n\n const cached = this.CACHE.get(url);\n if (cached) {\n return cached;\n }\n\n return await this.api!.get(url, { data: null, responseType: 'blob' })\n .then((res: AxiosResponse) => {\n const response = {\n url: URL.createObjectURL(res.data),\n blob: res.data,\n downloadLink: `${this.api?.defaults.baseURL}${url}`\n };\n this.CACHE.set(url, response);\n return response;\n });\n }\n\n addContext({ key, value }: { key: string, value: string }) {\n return this.api!.post(`/_classId/${this.classId}/addContext/${this.id}`, { key, value });\n }\n\n}\n\nexport default ChatAPI;\n","export default function poll(fn: () => Promise, check: (data: any) => boolean, interval: number) {\n const executePoll = async (resolve: any, reject: any) => {\n const result = await fn();\n\n if (check(result)) {\n return resolve(result);\n } else {\n setTimeout(executePoll, interval, resolve, reject);\n }\n };\n return new Promise(executePoll);\n};","var map = {\n\t\"./docx.png\": 363,\n\t\"./others.png\": 364,\n\t\"./pdf.png\": 365,\n\t\"./xls.png\": 366,\n\t\"./xlsx.png\": 367\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 362;","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADMAAAA8CAMAAAD8KXLNAAAAulBMVEUAAACPw/ePw/lgqvVfqvaUx/mQxPhfqfWjz/lfqfVfqvZgp/9cp/ZfqvZgqvaayPpTpPVfqvVjpvNgqfaQw/mjzvq42PdfqvZgqvZiq/ZwsveRxflkqe9rsPdcqPZeqPRorvfN5fzw9/5bp/Z2tvdZoOqTxvqCuvPj8P7+//+QxPmBvfl3su+Pw/lWpfWx1fuJwPlUpPWVxvnp8/7////4+/9ure3C3/uq0fvb7P1usffn8v15tfFMmOceGILeAAAAF3RSTlMAIdHm7ijJ+JH8eQeTzaw68foX1Ll9kGZdllAAAAEQSURBVHgB7dZVcsMwFIVhhTkp5krmMJcZ9r+sMl7PEczopfC/f7ZFtoUQreZuWVepJ3g73VKtoSvaKzDS6kp9abSsMtQumQ1HtYbZcCSl2TBkZRiyNU+o4m6WxYqzeUIFd/P0eO7m6fGsDUNmQ+lsypA0ll6E4XdkYSbrTTj96AlJczSJ1rOP7vrQsFt9dl/HBnX8y00Cg0YFqBtkKJuDbgdEwMSLM9Cp9GnUCWoD54AOYH7XZwRDhtQRagVNfA5azKXX9RmirpGRaowKfM6bt/NDekPZYa6rIAEGz/VwNfJvskGuy3FimAOVzzhvlA+Z//f1vyltu5p90Sw5mq2eEG1H03759e+Ua7aVO82WeASxdDP0M8Z9fAAAAABJRU5ErkJggg==\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADMAAAA8CAYAAADL94L/AAAByElEQVR4Ae3axdJTQRAFYFyegA3u8ALseCDcicsGhxt3x+G32BXc3X3NBnfXYTqp3sZlhuqpOlXZRL46He9ReJyJxGSTEreaPfEHZiX+1uSJvelVNu+Jvjd7Yk9zI8aSUe0eDpjCIYfNSuw5v/zF5In/6mU27478tXriLJvXjdSwPq1lCDTCmxjiCNav8GZYBVMwWKagX8kWjk9vCcMhYWhEFEw1+oV0wZjdPKY6Vn9EwmBDTYPwBoXCYPLGDQTJjkHQNQRJj0FQtmgs+C8wOHIIkh2DoDu5vD5Xfkz9hsTBWDyxhjDYUDqvLRYSY1JilSQGyyxXOt4QKJPX70NDQmI27gyxHcn9bH/5RFMNAUgoDI4afOAMHBiCdiDNj5woGAhgsCEYudSI1lBCRwoPL957slAoDDYEoPXb/ZVs3FE/y9072fDxsx4BMPVfGOpl1VY/y5++4EWM1Fm9LcCKpy8RpnchDGEIQxjCEIYwhCEMYQhDGMIQhjCEIQxhCEMYwhCGMIQhDGEIQxhYNlXiP+XHXLRDM5thQVpyzIfS2YtLceVEkRmzalsgMArPhp258bA6b/LEb8LqPM930VNdvY/fhMmCxw+Of+4BTcPInBo2AAAAAElFTkSuQmCC\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADMAAAA8CAMAAAD8KXLNAAAAvVBMVEUAAAD3d3fxRkbyRkbyRkb3fn74g4PyRUX3lZXzRUXyRUX/RkbyQED3fn7zRUX2iYn/Rkb4lpb0cHDvQEDzRETzRkbzQEDzQkLzOzv////939/yODj2enr4kJD0UVHzPT38xMT92tr5lZX1ZGT+6+v4g4P1bW35m5v7yMj91dX3fn76sLD1XFz6qan//f36trb+5OT0VVX6rKz7vb3yNDT4iIj/9vb0TEz5o6PtTEzlRUXsYWHiNzfyRETsSEiKDgROAAAAFHRSTlMAH+Z5+80n+JHu0AWTv6w6CX3V/BbNCjoAAAHfSURBVHgB7daDsisxGMDxHNtftLZqu+//WDebOu1p08H1f7D8zRoIoferx4djXb4htYvXy7vrI32NXi4U8v6KjzcbFTcKer48bQplS3dYwyhbwhpGRTpGRZpGoNvzjUT6RkU6RkX6RiJNM7dUhE/2NYkVhDU2lCgIa6DxxNr0eathBPoab5re6xjJ1pkaRu2XmP8GiIzKCSrHAW9NiKhiwKnKsFkukRMOZaWCVnWZA7uGxEaZn6UDApBGYjz3ekDFZtrGoig1FRPwZXnoQoXL6p0qwSTjy9pdxdicG41K1ue8g6kwRiWLOPcHQDzO84aoE7N9M2SMWX1eD11hal0zNMQ8tzQ2c0UU75saBXB9zhMmTJthsyc2J7cTuIRSQQ5sxzRZK9oYN4x4VGXCDMtz14IDxiusntiM0SILQ6oG71umMLKcHTCL+rEL+qZe5iWUwta+hUwYz7btoCAHTCdJEgcTgKUxY84NfPwc1AihABhLM+x2N+c6oICXqWa5RJo8bTQ59x04YgJhYMvIMnnvfGtivxmsTdr0RbmNCca0ZjR7FCtGNnCcAd6aEIELyhLFABXb35qg62k59v9d9d/8MnN5fa75QFeXZ5qvN4SezzTPCKEn8et/p9vD49UT+gEdNgrQ89qG8QAAAABJRU5ErkJggg==\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADMAAAA8CAMAAAD8KXLNAAAAulBMVEUAAACK4K5X0otX14eI362F3aqG4q1X0Yqe5LxX0YpW0otT0YhS0YdW0otW0otX0otY0Iug5Lqg5r2e5byf3rr///9O0IVR0IdU0YlX0otV0opV0YpKz4L+//5S0YjJ8dqK4K7p+fCQ4rKI36x426KL4K5t15p12qDT9OFy2Z5Lz4JXyIdZzotb046r6MVY0oz9/v2D3qpo15e47M593KXc9uj4/fqh5r5PxYHL8dvP8t687dCd5bue5bzVEOpnAAAAFXRSTlMAwekIyxwk+JHcffGW/KzN0Ss+eo5vCipPAAABZklEQVR4Ae3WhfaqMACA8dn1T3VBd9jd+v6PZY/L2YExbtdnKz8aAQBQar43eH18ArbKW7HGbVioMKT0JvFThh6LXorZxmRQ7VXAMIgPqDHLldyGTimPuaFqfmOWq/kNXSZxQ6ckaByTQQJm6TFIyoz4thlHQmbg2p4XR5II8mdOVPkzMny0HURtu9RkpUSpdWrE6//VBqnpoUQjS87mmNbGUZIMkfYwvZ0uJxjla83aurWG0Iq35pow6F0zIJz5vagg5BpDQRjjBYTzPqYhxeCbEbm+PUDN1yUaGf0Io8uyfDcyTc8yE0wIuZo5IjQ84RtrfGsF4WIcy/ru2xROb2nPVxrfhMvAdV0DQjNwacEy/A7r4BdtU6wi1L/tbyqiqZhvVvatEMKTZ39pxTVa4rrWvvc2naYFDcbQXGeWlhNQwhiM0sN/zv/1f1N8zWs6oFnMaVptAF5ympf7pf9HqyZa671ZAhesTDDT4wdnEAAAAABJRU5ErkJggg==\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADMAAAA8CAMAAAD8KXLNAAAAulBMVEUAAACK4K5X0otX14eI362F3aqG4q1X0Yqe5LxX0YpW0otT0YhS0YdW0otW0otX0otY0Iug5Lqg5r2e5byf3rr///9O0IVR0IdU0YlX0otV0opV0YpKz4L+//5S0YjJ8dqK4K7p+fCQ4rKI36x426KL4K5t15p12qDT9OFy2Z5Lz4JXyIdZzotb046r6MVY0oz9/v2D3qpo15e47M593KXc9uj4/fqh5r5PxYHL8dvP8t687dCd5bue5bzVEOpnAAAAFXRSTlMAwekIyxwk+JHcffGW/KzN0Ss+eo5vCipPAAABZklEQVR4Ae3WhfaqMACA8dn1T3VBd9jd+v6PZY/L2YExbtdnKz8aAQBQar43eH18ArbKW7HGbVioMKT0JvFThh6LXorZxmRQ7VXAMIgPqDHLldyGTimPuaFqfmOWq/kNXSZxQ6ckaByTQQJm6TFIyoz4thlHQmbg2p4XR5II8mdOVPkzMny0HURtu9RkpUSpdWrE6//VBqnpoUQjS87mmNbGUZIMkfYwvZ0uJxjla83aurWG0Iq35pow6F0zIJz5vagg5BpDQRjjBYTzPqYhxeCbEbm+PUDN1yUaGf0Io8uyfDcyTc8yE0wIuZo5IjQ84RtrfGsF4WIcy/ru2xROb2nPVxrfhMvAdV0DQjNwacEy/A7r4BdtU6wi1L/tbyqiqZhvVvatEMKTZ39pxTVa4rrWvvc2naYFDcbQXGeWlhNQwhiM0sN/zv/1f1N8zWs6oFnMaVptAF5ympf7pf9HqyZa671ZAhesTDDT4wdnEAAAAABJRU5ErkJggg==\"","import { createGlobalStyle } from 'styled-components';\n\nexport const SIZE = {\n sm: 576\n};\n\nexport const DEVICE = {\n mobile: `(max-width: ${SIZE.sm - 0.02}px)`,\n desktop: `(min-width: ${SIZE}px)`\n};\n\nexport default createGlobalStyle`\n /* BLOCO BÁSICO PARA CONSTRUÇÃO DA APP */\n sdiv {\n animation: 0s none;\n backface-visibility: visible;\n background: none;\n border: 0;\n box-shadow: none;\n box-sizing: border-box;\n bottom: auto;\n caption-side: top;\n clear: none;\n clip: auto;\n cursor: inherit;\n display: block;\n direction: ltr;\n flex: none;\n height: auto;\n hyphens: manual;\n image-rendering: auto;\n justify-content: flex-start;\n left: auto;\n letter-spacing: normal;\n line-height: normal;\n margin: 0;\n max-height: none;\n max-width: none;\n min-height: 0;\n min-width: 0;\n object-fit: fill;\n opacity: 1;\n order: 1;\n orphans: 2;\n outline: 0 none;\n overflow: visible;\n padding: 0;\n perspective: none;\n position: static;\n resize: none;\n right: auto;\n text-align: left;\n text-decoration: none;\n text-indent: 0;\n text-overflow: clip;\n text-shadow: none;\n text-transform: none;\n top: auto;\n transform: none;\n transition: all 0s ease 0s;\n unicode-bidi: normal;\n user-select: none;\n vertical-align: baseline;\n white-space: normal;\n width: auto;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n z-index: auto;\n zoom: normal;\n filter: none !important;\n font-weight: 400;\n font-family: 'Roboto', sans-serif;\n }\n\n .wppMediaLoading {\n animation: mediaLoading 2s linear infinite;\n z-index: 2;\n display: block;\n pointer-events: none;\n margin: -2px 0 0 -2px;\n }\n\n @keyframes mediaLoading {\n to {\n transform: rotate(1turn)\n }\n }\n\n .wppMessageLoading {\n animation: mediaLoading 1.6s linear infinite;\n z-index: 2;\n flex: 1;\n pointer-events: none;\n width: 24px;\n height: 24px;\n text-align: center;\n align-self: center;\n /* border: solid 1px red; */\n }\n\n .wppMediaLoadingCircle {\n stroke: rgba(255, 255, 255);\n stroke-dasharray: 1, 150;\n stroke-dashoffset: 0;\n stroke-linecap: round;\n animation: mediaLoadingCircle 1.5s ease-in-out infinite;\n }\n\n .wppMessageLoadingCircle {\n stroke: #429789;\n stroke-dasharray: 1, 150;\n stroke-dashoffset: 0;\n stroke-linecap: round;\n animation: mediaLoadingCircle 1.5s ease-in-out infinite;\n }\n\n @keyframes mediaLoadingCircle {\n 0% {\n stroke-dasharray: 1, 150;\n stroke-dashoffset: 0\n }\n 50% {\n stroke-dasharray: 90, 150;\n stroke-dashoffset: -35\n }\n to {\n stroke-dasharray: 90, 150;\n stroke-dashoffset: -124\n }\n }\n\n /* RECORDING AUDIO */\n\n @keyframes recording {\n 100% {\n opacity: 1;\n }\n 50% {\n opacity: 0;\n }\n }\n\n @keyframes width-increase {\n 0% {\n width: 180px;\n opacity: 0;\n }\n 100% {\n width: 220px;\n opacity: 1;\n }\n }\n\n @keyframes width-decrease {\n 0% {\n width: 220px;\n }\n 100% {\n width: 44px;\n }\n }\n\n /* PLACEHOLDER LOADING */\n\n & .uiPlaceholderInline {\n display: inline-block;\n width: 75px;\n margin-right: 10px;\n height: 12px;\n background-color: rgba(110, 110, 110, 0.5);\n border-radius: 2px;\n animation: placeholder-inline 2s ease-in-out infinite;\n }\n\n @keyframes placeholder-inline {\n 0% {\n background-color: rgba(134, 134, 134, 0.1);\n }\n 100% {\n background-color: rgba(134, 134, 134, 0.4);\n }\n }\n\n & .MuiTooltip-popper {\n z-index: 10001 !important;\n }\n\n /*\n #⚛️ *:not([class^=\"MuiInput\"]) {\n box-sizing: border-box;\n }\n\n #⚛️ *:not(span){\n font-family: 'Roboto', sans-serif;\n }\n */\n\n #⚛️ input[type=range] {\n appearance: none;\n /* Hides the slider so that custom slider can be made */\n width: 100%;\n /* Specific width is required for Firefox. */\n }\n\n #⚛️ input[type=range]::-webkit-slider-thumb {\n appearance: none;\n height: 14px;\n width: 14px;\n border-radius: 50%;\n /* background: #00a5f4; */\n cursor: default;\n margin-top: -6px;\n }\n\n #⚛️ input[type=range]::-webkit-slider-runnable-track {\n width: 100%;\n height: 3px;\n cursor: pointer;\n }\n\n & .public-DraftEditor-content {\n font-family: 'Roboto', sans-serif;\n font-size: 13px;\n }\n\n & .public-DraftEditorPlaceholder-root {\n color: #999;\n pointer-events: none;\n font-size: 13px;\n font-family: 'Roboto', sans-serif;\n position: absolute;\n transition: opacity .08s linear;\n user-select: none;\n }\n \n #⚛️ ::-webkit-scrollbar {\n width: 6px !important;\n height: 6px !important;\n }\n\n #⚛️ ::-webkit-scrollbar-track {\n background: hsla(0, 0%, 100%, .1);\n }\n\n #⚛️ ::-webkit-scrollbar-thumb {\n background: rgba(0, 0, 0, .2);\n }\n\n & .emoji-mart {\n background-color: #F0F0F0;\n border: unset !important;\n width: 100% !important;\n }\n\n & .emoji-mart-category-label span { \n background-color: #F0F0F0;\n }\n\n & .emoji-mart-search input {\n background-color: #D9D9D9;\n }\n\n & .emoji-mart-anchor-bar {\n background-color: #429789 !important;\n }\n\n & .emoji-mart-anchor-icon svg {\n color: #858585;\n }\n\n & .emoji-mart-category {\n margin-top: 15px;\n }\n\n & .emoji-mart-category div span {\n color: rgba(0, 0, 0, .45);\n }\n\n & .emoji-mart-scroll {\n overflow-y: scroll;\n overflow-x: hidden;\n height: 164px !important;\n }\n\n & .emoji-mart-anchors button {\n cursor: pointer;\n }\n\n & .emoji-mart-no-results {\n padding-top: 40px;\n }\n`;\n","import { Avatar } from '@material-ui/core';\nimport styled from 'styled-components';\nimport { DEVICE } from '../../GlobalStyle';\n\nexport const Container = styled.div<{backgroundColor: string, showChat: boolean, isExpanded: boolean, forceResponsiveMode: boolean, icon: boolean, isMobile: boolean}>`\n height: 50px;\n width: 100%;\n background-color: ${props => (props.icon && (props.forceResponsiveMode || props.isMobile) && !props.showChat) ? 'transparent' : props.backgroundColor};\n border-radius: ${props => props.isExpanded ? '0' : ` 7px 7px 0 0`};\n display: flex;\n justify-content: flex-start;\n align-items: center;\n user-select:none;\n cursor: ${props => props.showChat ? 'auto' : 'pointer'};\n\n @media ${DEVICE.mobile} {\n height: ${props => props.showChat ? 50 : 65}px;\n border-radius: 0;\n }\n\n ${props => props.forceResponsiveMode ? `@media all {\n height: ${props.showChat ? 50 : 65}px;\n border-radius: ${props.isExpanded || props.isMobile ? '0' : ` 7px 7px 0 0`};\n }`: ``}\n`;\n\nexport const Title = styled.span<{showChat: boolean, forceResponsiveMode: boolean}>`\n flex: 1;\n font-size: 14px;\n margin-left: 14px;\n margin-right: 14px;\n\n @media ${DEVICE.mobile} {\n display: ${props => props.showChat ? 'block' : 'none'};\n }\n\n ${props => props.forceResponsiveMode ? `@media all {\n display: ${props.showChat ? 'block' : 'none'};\n }`: ``}\n`;\n\nexport const IconWrapper = styled.span<{showChat: boolean, forceResponsiveMode: boolean}>`\n display: flex;\n margin-left: 14px;\n align-items: center;\n cursor: pointer;\n \n span {\n font-size: 16px;\n }\n\n ${props => props.forceResponsiveMode && !props.showChat? `@media all {\n display: block;\n margin: 0 auto;\n \n span {\n font-size: 30px;\n }\n }`: ``}\n\n ${props => !props.showChat ? \n `\n @media ${DEVICE.mobile} {\n display: block;\n margin: 0 auto;\n \n span {\n font-size: 30px;\n }\n }\n `\n :\n ``\n }\n \n`;\n\nexport const Content = styled.div<{color: string}>`\n color: ${props => props.color};\n width: 100%;\n display: flex;\n flex-direction: row;\n align-items: center;\n`;\n\nexport const ExpandWrapper = styled.span`\n display: flex;\n align-items: center;\n cursor: pointer;\n margin-left: 14px;\n margin-right: 14px;\n\n @media ${DEVICE.mobile} {\n display: none;\n }\n`;\n\nexport const StyledAvatar = styled(Avatar)<{textColor?: string, backgroundColor?: string}>`\n && {\n width: 65px;\n height: 65px;\n margin: auto;\n color: ${props => props.textColor};\n background-color: ${props => props.backgroundColor};\n }\n`;\n","import React, { createContext, useState, useCallback } from 'react';\nimport { CommunicationTool } from '../chat-api';\n\nexport interface AppContextTypes {\n isLoading: boolean;\n setIsLoading(state: any): void;\n initialMessage: string;\n setInitialMessage(state: any): void;\n isAnonymous: boolean;\n setIsAnonymous(state: any): void;\n showAttendant: boolean;\n setShowAttendant(state: any): void;\n communicationTool: CommunicationTool;\n setCommunicationTool(state: any): void;\n translationBundle: TranslationBundle;\n setTranslationBundle(state: any): void;\n getTranslation(key: string, args?: any[]): string;\n hasVideo: boolean;\n setHasVideo(state: any): void;\n showAvatar: boolean;\n setShowAvatar(state: any): void;\n responsiveMode: boolean;\n setResponsiveMode(state: any): void;\n}\n\nexport interface TranslationBundle {\n [key: string]: string;\n}\n\nexport const AppContext = createContext(null!);\n\nconst AppContextProvider: React.FC = React.memo(({children}) => {\n const [isLoading, setIsLoading] = useState(true);\n const [initialMessage, setInitialMessage] = useState(null!);\n const [showAttendant, setShowAttendant] = useState(false);\n const [hasVideo, setHasVideo] = useState(false);\n const [isAnonymous, setIsAnonymous] = useState(false);\n const [communicationTool, setCommunicationTool] = useState(null!);\n const [translationBundle, setTranslationBundle] = useState({});\n const [showAvatar, setShowAvatar] = useState(false);\n const [responsiveMode, setResponsiveMode] = useState(false);\n\n const getTranslation = useCallback((key: string, args?: any[]) => {\n let unit = translationBundle[key];\n if (unit && args && args.length) {\n args.forEach((param, index) => {\n unit = unit.replace(`{${index}}`, param.replace(/\\$/gi, \"$$$$\"));\n });\n }\n return unit || key\n }, [translationBundle]);\n\n const contextState: AppContextTypes = {\n isLoading,\n setIsLoading,\n initialMessage,\n setInitialMessage,\n showAttendant,\n isAnonymous,\n setIsAnonymous,\n setShowAttendant,\n communicationTool,\n setCommunicationTool,\n translationBundle,\n setTranslationBundle,\n getTranslation,\n hasVideo,\n setHasVideo,\n showAvatar,\n setShowAvatar,\n responsiveMode,\n setResponsiveMode\n };\n\n return (\n \n {children}\n \n );\n})\n\n\nexport default AppContextProvider;","import React, { createContext, useState, useEffect } from 'react';\nimport { useAppState } from '.';\nimport ChatAPI, { Chat, AuthenticatorsConfig } from '../chat-api';\nimport { DEVICE, SIZE } from '../GlobalStyle';\n\nexport interface ChatContextTypes {\n chat: Chat;\n setChat(state: any): void;\n showChat: boolean;\n setShowChat(state: any): void;\n isMobile: boolean;\n setIsMobile(state: any): void;\n isExpanded: boolean;\n setIsExpanded(state: any): void;\n user: any;\n setUser(state: any): void;\n isLoggingIn: boolean;\n setIsLoggingIn(state: any): void;\n authsConfig: AuthenticatorsConfig[];\n avatarURL: string;\n setAvatarURL(state: any): void;\n}\n\nexport const ChatContext = createContext(null!);\n\nconst mql = window.matchMedia(DEVICE.mobile);\n\nconst ChatContextProvider: React.FC = React.memo(({children}) => {\n const chatAPI = new ChatAPI();\n const [chat, setChat] = useState(null!);\n const [showChat, setShowChat] = useState(false);\n const [user, setUser] = useState<{}>(null!);\n const [isLoggingIn, setIsLoggingIn] = useState(false);\n const [authsConfig, setAuthsConfig] = useState();\n const [avatarURL, setAvatarURL] = useState();\n const [isMobile, setIsMobile] = useState(window.innerWidth <= SIZE.sm);\n const [isExpanded, setIsExpanded] = useState(false);\n const { communicationTool } = useAppState();\n \n useEffect(() => { \n const mqlCallback = (e: MediaQueryListEvent) => {\n setIsMobile(e.matches);\n }\n\n mql.addEventListener('change', mqlCallback);\n return () => {\n mql.removeEventListener('change', mqlCallback);\n }\n }, []);\n\n useEffect(() => {\n if (communicationTool?.user?.photo) {\n chatAPI.downloadPhoto(communicationTool.user.photo).then((file) => {\n setAvatarURL(file.url);\n })\n }\n }, [chatAPI, communicationTool]);\n\n useEffect(() => {\n chatAPI.getOrgConfig().then(res => setAuthsConfig(res.authenticatorsConfig));\n }, [chatAPI]);\n\n useEffect(() => {\n if (user) {\n setIsLoggingIn(false);\n }\n }, [user]);\n\n const contextState = {\n chat,\n setChat,\n showChat,\n setShowChat,\n isMobile,\n setIsMobile,\n isExpanded,\n setIsExpanded,\n user, \n setUser,\n authsConfig,\n isLoggingIn, \n setIsLoggingIn,\n avatarURL, \n setAvatarURL\n } as ChatContextTypes;\n\n return (\n \n {children}\n \n );\n})\n\n\nexport default ChatContextProvider;","import React, { createContext, useState } from 'react';\nimport ChatAPI, { Message, MessageType } from '../chat-api';\nimport axios from 'axios';\nimport { useChatState } from '.';\n\nexport interface MessageContextTypes {\n scrollBottom: boolean;\n setScrollBottom(state: boolean): void;\n messages: Message[];\n setMessages(state: any): void;\n sendingMessages: Message[];\n setSendingMessages(state: any): void;\n isRecordingAudio: boolean;\n setIsRecordingAudio(state: any): void;\n sendMessage(args: any): Promise;\n uploadAndSend(file: File, messageType: MessageType): void;\n}\n\nexport const MessageContext = createContext(null!);\n\nconst MessageContextProvider: React.FC = React.memo(({children}) => {\n const chatAPI = new ChatAPI();\n const { user } = useChatState();\n const [scrollBottom, setScrollBottom] = useState(true);\n const [messages, setMessages] = useState([]);\n const [sendingMessages, setSendingMessages] = useState([]);\n const [isRecordingAudio, setIsRecordingAudio] = useState(false);\n const contextState = {\n scrollBottom,\n setScrollBottom,\n messages, \n setMessages,\n sendingMessages, \n setSendingMessages,\n isRecordingAudio, \n setIsRecordingAudio\n }; \n\n const uploadAndSend: MessageContextTypes['uploadAndSend'] = (file: File, messageType: MessageType) => {\n const message = chatAPI.genMessage({\n type: messageType,\n cancelToken: axios.CancelToken.source(),\n body: {\n file: {\n _id: Math.random().toString(),\n name: file.name,\n length: file.size,\n contentType: file.type\n }\n }\n });\n setSendingMessages(prev => [...prev, message]);\n setScrollBottom(true);\n chatAPI.uploadFile(file, message.cancelToken).then(res => {\n return chatAPI.sendMessage({\n from: user,\n type: messageType,\n body: {\n file: {\n _id: res._id,\n collection: res.collection,\n contentType: messageType === MessageType.Audio ? 'audio/mpeg' : res.contentType,\n hash: res.hash,\n length: res.length,\n name: res.name,\n storage: res.storage,\n },\n },\n sendHash: message.sendHash\n });\n }).finally(() => {\n setSendingMessages(prev => prev.filter(obj => obj._id !== message._id));\n });\n }\n\n const sendMessage: MessageContextTypes['sendMessage'] = (args: any) => {\n const message = chatAPI.genMessage(args);\n setSendingMessages(prev => [...prev, message]);\n setScrollBottom(true);\n return chatAPI.sendMessage({...args, from: user, sendHash: message.sendHash})\n .finally(() => {\n setSendingMessages(prev => prev.filter(obj => obj._id !== message._id))\n });\n }\n\n return (\n \n {children}\n \n );\n});\n\n\nexport default MessageContextProvider;","import React, { createContext, useState, useEffect } from 'react';\nimport { useAppState } from '.';\nimport { ChatProps } from '../components/Chat';\n\nexport interface ThemeContextTypes extends ChatProps {\n setTheme(state: any): void;\n}\n\nexport const ThemeContext = createContext(null!);\n\nconst ThemeContextProvider: React.FC = React.memo(({ children }) => {\n const { translationBundle, getTranslation } = useAppState();\n const [theme, setTheme] = useState({});\n\n useEffect(() => {\n if (Object.keys(translationBundle).length) {\n setTheme({\n horizontalPosition: 'right',\n header: {\n title: getTranslation('THEME_APP_TITLE'),\n icon: 'fa fa-envelope-o',\n backgroundColor: '#000',\n titleColor: '#fff'\n },\n body: {\n backgroundColor: '#f0f0f0',\n buttonsColor: '#000',\n timeDividerBackgroundColor: '#e1f5feeb',\n timeDividerTextColor: 'rgba(0, 0, 0, 0.88)',\n customer: {\n messageBackgroundColor: '#000',\n messageTextColor: '#fff',\n messageHourTextColor: '#fff',\n runnableTrackColor: '#fff',\n sliderTrackColor: '#00a5f4',\n },\n enterprise: {\n messageBackgroundColor: '#fff',\n messageTextColor: '#222d38',\n messageHourTextColor: 'rgba(0,0,0,0.45)',\n runnableTrackColor: '#f0f0f0',\n sliderTrackColor: '#00a5f4'\n }\n },\n footer: {\n textInput: {\n textColor: '#4a4a4a',\n backgroundColor: '#fff',\n placeholderColor: '#999',\n sendIconColor: '#000'\n },\n iconsPanel: {\n iconsBackgroundHoverColor: '#0000000a',\n backgroundColor: '#f1f1f1',\n iconsColor: '#6A6A6A'\n }\n }\n });\n }\n }, [translationBundle, getTranslation]);\n\n return (\n \n {children}\n \n );\n})\n\n\nexport default ThemeContextProvider;","import React, { useContext } from 'react';\nimport AppContextProvider, { AppContext, AppContextTypes } from './AppContext';\nimport ChatContextProvider, { ChatContext, ChatContextTypes } from \"./ChatContext\";\nimport MessageContextProvider, { MessageContext, MessageContextTypes } from \"./MessageContext\";\nimport ThemeContextProvider, { ThemeContext, ThemeContextTypes } from \"./ThemeContext\";\n\nconst GlobalState: React.FC = ({children}) => {\n return (\n \n \n \n \n {children}\n \n \n \n \n );\n}\n\nexport function useAppState() {\n const context = useContext(AppContext);\n if (context === undefined) {\n throw new Error('useAppState must be used within a AppContext');\n }\n return context;\n}\n\nexport function useChatState () {\n const context = useContext(ChatContext);\n if (context === undefined) {\n throw new Error('useChatState must be used within a ChatContext');\n }\n return context;\n}\n\nexport function useTheme () {\n const context = useContext(ThemeContext);\n if (context === undefined) {\n throw new Error('useTheme must be used within a ThemeContext');\n }\n return context;\n}\n\nexport function useMessageState () {\n const context = useContext(MessageContext);\n if (context === undefined) {\n throw new Error('useMessageState must be used within a MessageContext');\n }\n return context;\n}\n\n\nexport default GlobalState;","import React, { useState } from 'react';\nimport { Icon } from '@material-ui/core';\nimport CloseIcon from '@material-ui/icons/Close';\nimport ZoomOutMapIcon from '@material-ui/icons/ZoomOutMap';\nimport MinimizeIcon from '@material-ui/icons/Minimize';\n\nimport { Container, Title, IconWrapper, Content, ExpandWrapper, StyledAvatar } from './styles';\nimport { useChatState, useTheme } from '../../data';\n\nexport interface ChatHeaderProps {\n title?: string;\n titleColor?: string;\n backgroundColor?: string;\n icon?: string;\n logo?: string;\n forceResponsiveMode?: boolean\n}\n\nconst ChatHeader: React.FC = (props) => {\n const { showChat, setShowChat, isMobile, setIsExpanded, isExpanded } = useChatState();\n const { title, titleColor, backgroundColor, icon } = useTheme().header!;\n const [overflow, setOverflow] = useState(document.querySelector('body')!.style.overflow);\n\n const handleClick = () => {\n if (showChat) {\n document.querySelector('body')!.style.overflow = overflow;\n setIsExpanded(false);\n } else if (isMobile || props.forceResponsiveMode) {\n setOverflow(document.querySelector('body')!.style.overflow);\n document.querySelector('body')!.style.overflow = 'hidden';\n }\n \n setShowChat(!showChat);\n }\n\n const handleExpand = () => {\n if (isExpanded) {\n document.querySelector('body')!.style.overflow = overflow;\n } else {\n setOverflow(document.querySelector('body')!.style.overflow);\n document.querySelector('body')!.style.overflow = 'hidden';\n }\n\n setIsExpanded(!isExpanded);\n }\n\n return (\n {} : handleClick} \n forceResponsiveMode={props.forceResponsiveMode!}\n isMobile={isMobile}\n icon={(!!props.icon)}\n >\n \n { props.icon && (isMobile || props.forceResponsiveMode) && !showChat ? \n :\n \n {showChat ? : }\n \n }\n {title}\n {showChat &&\n \n {isExpanded ? : }\n \n }\n \n \n );\n}\n\nexport default ChatHeader;","import styled from 'styled-components';\n\nexport const Container = styled.div`\n border-top: 1px solid #f1f1f1;\n height: 90px;\n`;\n","import styled from 'styled-components';\nimport { IconButton } from \"@material-ui/core\";\nimport { Send, Mic } from \"@material-ui/icons\";\nimport Editor from 'draft-js-plugins-editor';\nimport { TextInputProps } from \"./index\";\n\nexport const EditorWrapper = styled.div`\n background-color: #fff;\n color: white;\n padding: 0px 12px 0px 12px;\n flex: 1 1 auto;\n font-size: 15px;\n font-weight: 400;\n line-height: 20px;\n min-width: 0;\n outline: none;\n width: 85%;\n max-height: 100%;\n overflow-y: scroll;\n will-change: width;\n`;\n\nexport const StyledEditor = styled(Editor)`\n padding: 0;\n padding-right: 2px;\n font-size: 15px;\n font-weight: 400;\n max-height: 100px;\n min-height: 20px;\n outline: none;\n overflow-x: hidden;\n overflow-y: scroll;\n white-space: pre-wrap;\n color: #4a4a4a;\n width: 100%;\n user-select: text;\n`;\n\nexport const SendButton = styled(IconButton)`\n height: 100%;\n width: 15%;\n background-color:green;\n && {\n &:hover{\n background-color: white;\n }\n }\n`;\n\nexport const SendIcon = styled(Send)`\n font-size: 18px;\n color: black;\n`;\n\nexport const MicIcon = styled(Mic)`\n font-size: 18px;\n color: black;\n`;\n\nexport const Container = styled.div<{styles?: TextInputProps}>`\n background-color: ${props => props.styles?.backgroundColor};\n ${EditorWrapper} {\n background-color: ${props => props.styles?.backgroundColor};\n color: ${props => props.styles?.textColor};\n }\n ${SendButton} {\n &:hover{\n background-color: ${props => props.styles?.backgroundColor};\n }\n }\n & .public-DraftEditorPlaceholder-root {\n color: ${props => props.styles?.placeholderColor};\n }\n ${SendIcon} {\n color: ${props => props.styles?.sendIconColor};\n }\n ${MicIcon} {\n color: ${props => props.styles?.sendIconColor};\n }\n height: 50px;\n display: flex;\n align-items: center;\n`;\n\nexport const SendContainer = styled.div<{ active?: boolean, animate?: boolean }>`\n padding: 5px 10px;\n flex: none;\n min-height: 52px;\n width: ${props => props.active ? '220px' : '44px'};\n display: flex;\n animation: ${props => props.animate ?\n (props.active ? 'width-increase .3s ease-in' : 'width-decrease .3s linear') : ''\n };\n`;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n display: flex;\n width: 100%;\n justify-content: space-evenly;\n align-items: center;\n text-align: center;\n`;\n\nexport const RecordingBullet = styled.span`\n display: inline-block;\n background-color: rgb(236, 17, 17);\n width: 15px;\n height: 15px;\n border-radius: 50%;\n animation: recording .8s ease-in-out infinite;\n margin-right: 7px;\n`;\n\nexport const Button = styled.button`\n text-align: center;\n background-color: transparent;\n width: 34px;\n height: 34px;\n border-radius: 50%;\n display: flex;\n justify-content: center;\n align-items: center;\n transition: .1s;\n &:hover {\n transform: scale(1.15);\n color: #fff;\n }\n`;\n\nexport const StopButton = styled(Button)`\n && {\n width: 30px;\n height: 30px;\n }\n border: solid 1px rgb(236, 17, 17);\n color: rgb(236, 17, 17);\n &:hover {\n background-color: rgb(236, 17, 17);\n }\n`;\n\nexport const SendButton = styled(Button)`\n && {\n width: 30px;\n height: 30px;\n }\n border: solid 1px rgb(36, 163, 148);\n color: rgb(36, 163, 148);\n &:hover {\n background-color: rgb(36, 163, 148);\n }\n`;\n\nexport const Timer = styled.span`\n font-size: 20px; \n color: #6a6a6a;\n display: inline;\n`;\n\nexport const ButtonWrapper = styled.div<{flex?: string}>`\n display: flex;\n justify-content: flex-${props => props.flex};\n svg {\n font-size: 17px;\n align-self: center;\n }\n`;","import React, { useState, useEffect, useCallback } from 'react';\nimport { Check, Close } from '@material-ui/icons';\nimport moment from 'moment-with-locales-es6';\nimport MicRecorder from 'mic-recorder-to-mp3';\nimport {\n Container,\n StopButton,\n RecordingBullet,\n SendButton,\n Timer,\n ButtonWrapper\n} from './styles';\nimport { MessageType } from '../../chat-api';\nimport { useMessageState } from '../../data';\n\nconst Mp3Recorder = new MicRecorder({ bitRate: 128 });\n\nfunction generateUniqueName() {\n return `${Math.random().toString(20).substr(2)}${Date.now().toString()}`;\n}\n\nfunction getTimer(timer: number) {\n const today = moment().utcOffset(0);\n\n today.set({ hour: 0, minute: 0, second: timer, millisecond: 0 });\n\n if (timer < 600) {\n return today.format('m:ss');\n } else if (timer < 3600) {\n return today.format('mm:ss');\n } else {\n return today.format('hh:mm');\n }\n}\n\nfunction Audio() {\n const [timer, setTimer] = useState(0);\n const [recordingStarted, setRecordingStarted] = useState(false);\n const { setIsRecordingAudio, isRecordingAudio, uploadAndSend } = useMessageState();\n\n useEffect(() => {\n if (isRecordingAudio) {\n Mp3Recorder\n .start()\n .then(() => {\n setRecordingStarted(true);\n }).catch(\n (e: any) => console.error(e)\n );\n }\n }, [isRecordingAudio, setIsRecordingAudio]);\n\n useEffect(() => {\n return () => {\n Mp3Recorder.stop();\n }\n }, []);\n\n useEffect(() => {\n function stopTimer() {\n clearTimeout(startTimer);\n }\n const startTimer = setTimeout(() => recordingStarted && setTimer(timer + 1), 1000);\n return () => {\n stopTimer();\n }\n }, [timer, recordingStarted])\n\n const stopRecording = () => {\n Mp3Recorder.stop();\n setIsRecordingAudio(false);\n };\n\n const sendAudio = useCallback(() => {\n Mp3Recorder\n .stop()\n .getMp3()\n .then((res: any) => {\n const blob = res[1];\n const file = new File([blob], generateUniqueName(), { lastModified: Date.now() });\n uploadAndSend(file, MessageType.Audio);\n setIsRecordingAudio(false);\n }).catch((err: any) => console.error(err));\n }, [setIsRecordingAudio, uploadAndSend]);\n\n if (!isRecordingAudio) {\n return null;\n }\n\n return (\n \n \n \n \n \n \n \n \n {getTimer(timer)}\n \n \n \n \n \n \n \n );\n}\n\nexport default React.memo(Audio);\n","import React, { useState, useCallback, useEffect, useMemo } from 'react';\nimport { EditorState, convertToRaw } from \"draft-js\";\nimport createEmojiMartPlugin from 'draft-js-emoji-mart-plugin';\nimport data from 'emoji-mart/data/facebook.json';\nimport { Container, StyledEditor, SendIcon, SendButton, EditorWrapper, MicIcon, SendContainer } from './styles';\nimport { useMessageState, useChatState, useTheme, useAppState } from '../../../data';\nimport { MessageType } from '../../../chat-api';\nimport Audio from \"../../Audio/Audio\";\n\nexport const emojiPlugin = createEmojiMartPlugin({\n data,\n set: 'facebook'\n});\n\nexport interface TextInputProps {\n textColor?: string;\n backgroundColor?: string;\n placeholderColor?: string;\n sendIconColor?: string;\n}\n\nconst TextInput: React.FC = () => {\n const { getTranslation } = useAppState();\n const { textInput } = useTheme().footer!;\n const [isReady, setIsReady] = useState(false);\n const [editorState, setEditorState] = useState(EditorState.createEmpty());\n const { sendMessage, isRecordingAudio, setIsRecordingAudio } = useMessageState();\n const { chat, showChat } = useChatState();\n const [text, setText] = useState('');\n const plugins = [emojiPlugin];\n\n const keyPressed = useCallback((event: React.KeyboardEvent) => {\n if (text && event.key === \"Enter\" && !event.shiftKey && !event.ctrlKey) {\n event.preventDefault();\n setEditorState(EditorState.createEmpty());\n sendMessage({\n type: MessageType.Text,\n body: {\n body: text\n }\n }).then(() => {\n setText('');\n });\n return 'handled';\n }\n\n return 'not-handled';\n }, [setText, setEditorState, text, sendMessage]);\n\n const onChange = useCallback((newEditorState: EditorState) => {\n const currentContentTextLength = editorState.getCurrentContent().getPlainText().length;\n const newContentTextLength = newEditorState.getCurrentContent().getPlainText().length;\n \n if (currentContentTextLength === 0 && newContentTextLength === 1) {\n setEditorState(EditorState.moveFocusToEnd(newEditorState));\n } else {\n setEditorState(newEditorState);\n }\n },[setEditorState, editorState]);\n\n useEffect(() => {\n const blocks = convertToRaw(editorState.getCurrentContent()).blocks;\n const value = blocks.map(block => block.text.trim()).join('\\n');\n setText(value);\n }, [editorState]);\n\n const handleSendClick = useCallback(() => {\n setEditorState(EditorState.createEmpty());\n sendMessage({\n type: MessageType.Text,\n body:{\n body: text\n } \n }).then(() => {\n setText('');\n })\n }, [sendMessage, text])\n\n const recordAudio = useCallback(() => {\n navigator.getUserMedia({ audio: true },\n () => {\n setIsRecordingAudio(true);\n if (!isReady) setIsReady(true);\n },\n () => {\n setIsReady(false);\n }\n );\n }, [setIsRecordingAudio, isReady]);\n\n const getButton = useMemo(() => \n (hasText: boolean) => {\n if (hasText || !chat) {\n return (\n \n \n \n );\n } else {\n return (\n \n \n \n );\n }\n }\n , [handleSendClick, recordAudio, chat]);\n\n return (\n \n \n \n \n \n {!isRecordingAudio ? \n getButton(!!text) \n :\n \n \n );\n}\n\nexport default TextInput;","import { useEffect } from 'react';\n\nconst useOutsideAlerter = (ref: any, stateSetter: any) => {\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (ref.current && !ref.current.contains(event.target)) {\n stateSetter(false)\n }\n }\n\n function handleEscape(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n stateSetter(false);\n }\n }\n\n document.addEventListener('mousedown', handleClickOutside);\n document.addEventListener('keydown', handleEscape);\n \n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n document.removeEventListener('keydown', handleEscape);\n };\n }, [ref, stateSetter]);\n}\n\nexport default useOutsideAlerter;","import styled from 'styled-components';\nimport { IconButton, Collapse } from \"@material-ui/core\";\nimport { AttachFile, InsertEmoticon, PlayArrow, VoiceChat } from \"@material-ui/icons\";\nimport { IconPanelProps } from \"./index\";\n\nexport const StyledIconButton = styled(IconButton)`\n && {\n padding: 8px;\n border-radius: unset;\n }\n`;\n\nexport const StyledAttachFileIcon = styled(AttachFile)`\n \n`;\n\nexport const StyledEmojiIcon = styled(InsertEmoticon)`\n \n`;\n\nexport const StyledVoiceChatIcon = styled(VoiceChat)`\n \n`;\n\nexport const StyledCollapse = styled(Collapse)<{index: number, offset: boolean}>`\n position: absolute;\n bottom: 40px;\n left: ${props => (props.index - 0.5) * 40 + 10 + (props.offset && props.index === 0 ? 20 : 0)}px;\n box-shadow: 0 4px 20px 0 rgba(0,0,0,.1), 0 8px 17px 0 rgba(0,0,0,.16);\n width: 290px;\n z-index: 10000;\n border-radius: 7px;\n & .MuiCollapse-wrapperInner {\n background-color: #F0F0F0;\n }\n`;\n\nexport const StyleArrowIcon = styled(PlayArrow)`\n transform: rotate(90deg);\n color: #F0F0F0;\n position: absolute;\n top: 240px;\n left: ${props => props.offset ? -2 : 18}px;\n z-index: 10000;\n`; \n\nexport const Container = styled.div<{styles?: IconPanelProps }>`\n background-color: ${props => props.styles?.backgroundColor};\n ${StyledAttachFileIcon} {\n color:${props => props.styles?.iconsColor};\n }\n ${StyledEmojiIcon} {\n color:${props => props.styles?.iconsColor};\n }\n ${StyledVoiceChatIcon} {\n color:${props => props.styles?.iconsColor};\n }\n ${StyledIconButton}{\n :hover{\n background-color: ${props => props.styles?.iconsBackgroundHoverColor || 'unset'}\n }\n }\n height: 40px;\n display: flex;\n position: relative;\n`;","import React, { useState, useRef } from 'react';\nimport { Tooltip } from \"@material-ui/core\";\nimport { emojiPlugin } from \"../TextInput/index\";\nimport useOutsideAlerter from \"../../../hooks/useOutsideAlerter\";\nimport 'emoji-mart/css/emoji-mart.css';\nimport { \n Container, StyledIconButton,\n StyledAttachFileIcon, StyleArrowIcon,\n StyledEmojiIcon, StyledCollapse, StyledVoiceChatIcon\n} from './styles';\nimport { useMessageState, useTheme, useChatState, useAppState } from '../../../data';\nimport { MessageType } from '../../../chat-api';\n\nexport interface IconPanelProps {\n iconsColor?: string;\n iconsBackgroundHoverColor?: string | null;\n backgroundColor?: string;\n}\n\nconst getType = (type: string) => {\n const isIMG = /(image)\\/.*$/igm;\n const isVIDEO = /(video)\\/.*$/igm;\n if(isIMG.test(type)) \n return MessageType.Image;\n else if(isVIDEO.test(type)) \n return MessageType.Video;\n else\n return MessageType.Document;\n}\n\nconst IconPanel: React.FC = () => {\n const { getTranslation } = useAppState();\n const { iconsPanel } = useTheme().footer!;\n const attachFileRef = useRef(null);\n const [showEmojiPicker, setShowEmojiPicker] = useState(false);\n const { Picker } = emojiPlugin;\n const emojiPickerRef = useRef(null);\n const { chat, isExpanded, isMobile } = useChatState();\n const { hasVideo } = useAppState();\n const { uploadAndSend, sendMessage, setScrollBottom } = useMessageState();\n\n useOutsideAlerter(emojiPickerRef, setShowEmojiPicker);\n \n const handleEmojiClick = (e: React.MouseEvent) => {\n e.preventDefault();\n setShowEmojiPicker(prev => {\n return !prev\n });\n }\n\n const handleCameraClick = (e: React.MouseEvent) => {\n e.preventDefault();\n sendMessage({\n type: MessageType.VideoConference,\n body: {}\n });\n setScrollBottom(true);\n }\n\n const handleAttachFileClick = () => {\n attachFileRef?.current?.click();\n }\n\n const handleFile = (files: File[]) => {\n uploadAndSend(files[0], getType(files[0].type)!);\n }\n\n let icons: any[] = [\n {id: 1, icon: , tooltip: getTranslation('ICON_PANEL_EMOJI_TOOLTIP'), onClick: handleEmojiClick, ref: emojiPickerRef }\n ];\n\n if (chat) {\n icons.unshift({id: 0, icon: , tooltip: getTranslation('ICON_PANEL_FILE_TOOLTIP'), onClick: handleAttachFileClick});\n }\n\n if (hasVideo) {\n icons.push({id: 2, icon: , tooltip: getTranslation('ICON_PANEL_VIDEO_TOOLTIP'), onClick: handleCameraClick});\n }\n\n return (\n <>\n handleFile(e.target.files)}\n style={{ display: 'none' }} \n />\n \n {icons.map((icon, index) => (\n \n \n \n {icon.icon}\n \n \n {icon.id === 1 &&\n el.id === 1)}\n offset={isExpanded || isMobile}\n >\n \n el.id === 1) === 0 && (isExpanded || isMobile)}/>\n \n }\n \n ))}\n \n \n );\n}\n\nexport default IconPanel;","import React from 'react';\nimport { Container } from './styles';\nimport TextInput, { TextInputProps } from './TextInput';\nimport IconPanel, { IconPanelProps } from './IconPanel';\n\nexport interface ChatFooterProps {\n textInput?: TextInputProps;\n iconsPanel?: IconPanelProps;\n}\n\nconst ChatFooter: React.FC = () => {\n return (\n \n \n \n \n );\n}\n\nexport default ChatFooter;","import styled from 'styled-components';\nimport { ChatBodyProps } from '.';\nimport { DEVICE } from '../../GlobalStyle';\n\nexport const Container = styled.div<{styles: ChatBodyProps, isExpanded: boolean}>`\n background-color: ${props => props.styles.backgroundColor};\n height: 300px;\n overflow-y: scroll;\n\n @media ${DEVICE.mobile} {\n height: calc(100vh - 90px - 50px);\n height: calc(100 * var(--vh) - 90px - 50px);\n }\n\n ${props => props.isExpanded ? `\n height: calc(100vh - 90px - 50px);\n height: calc(100 * var(--vh) - 90px - 50px);\n `\n :\n ``\n }\n`;\n\nexport const MessagesContainer = styled.div`\n flex: 0 0 auto;\n padding-bottom: 8px;\n padding-top: 5px;\n transition: padding-left .3s cubic-bezier(.69,0,.79,.14);\n`;\n\nexport const LoadingContainer = styled.div`\n width: 42px;\n height: 42px;\n border-radius: 50%;\n margin: auto;\n margin-top: 25px;\n margin-bottom: 40px;\n box-shadow: #6e6e63;\n background-color: #fff;\n display: flex;\n`;","import { Message, MessageType, CommunicationTool } from '../chat-api';\nimport moment from 'moment';\nimport _ from 'lodash';\n\n\n// Check if it's the last message or if it's the last message of the sender\nexport const isLastMessage = (index: number, messagesByDate: Message[], message: Message) => {\n return index === messagesByDate.length - 1 || messagesByDate[index + 1].from.user?._id !== message.from.user?._id || messagesByDate[index + 1].type === MessageType.VideoConference;\n}\n\n// Check if it's the first message or if it's the first message of the sender\nexport const isFirstMessage = (index: number, messagesByDate: Message[], message: Message) => {\n return index === 0 || messagesByDate[index - 1].from.user?._id !== message.from.user?._id || messagesByDate[index - 1].type === MessageType.VideoConference;\n}\n\nexport const getMessagesByDate = (messages: Message[], sendingMessages: Message[]) => {\n sendingMessages = sendingMessages.filter(sndMsg => !messages.find(msg => (msg._id && msg._id === sndMsg._id)\n || (msg.sendHash && msg.sendHash === sndMsg.sendHash)));\n messages = [...messages, ...sendingMessages].sort((msgA, msgB) => {\n return (new Date(msgA.date).getTime()) - (new Date(msgB.date).getTime());\n });\n return _.groupBy(messages, (message: Message) => moment(message.date).format('YYYY-MM-DD'));\n}\n\nexport const isMsgOut = (message: Message | null, communicationTool: CommunicationTool | null) => {\n return message?.from.user?._id === communicationTool?.user?._id;\n}\n\nexport const getMediaDuration = (mediaVideo: HTMLVideoElement | HTMLAudioElement | null) => {\n const today = moment().utcOffset(0);\n if (mediaVideo) {\n today.set({ hour: 0, minute: 0, second: mediaVideo.duration, millisecond: 0 })\n if (mediaVideo.duration < 600)\n return today.format('m:ss');\n else if (mediaVideo.duration < 3600)\n return today.format('mm:ss');\n else\n return today.format('hh:mm');\n }\n return '0:00';\n}\n\nexport const calculateColorCode = (text: any) => {\n if (text == null) {\n return 'S';\n }\n\n const textString = text.toString();\n\n /* Garante que \"Sydle\" sempre terá um fundo preto. */\n if (textString && (textString.trim().toLowerCase() === 'sydle' || textString.trim().toLowerCase() === 's')) {\n return 'S';\n }\n\n return String.fromCharCode('A'.charCodeAt(0) + (calculateStringHash(textString) % 26));\n}\n\nexport const calculateStringHash = (str: string) => {\n let hash = 5381,\n i = str.length;\n\n while (i) {\n hash = (hash * 33) ^ str.charCodeAt(--i);\n }\n\n /* JavaScript does bitwise operations (like XOR, above) on 32-bit signed\n * integers. Since we want the results to be always positive, convert the\n * signed int to an unsigned by doing an unsigned bitshift. */\n return hash >>> 0;\n}\n","import React from 'react';\nimport moment from 'moment-with-locales-es6';\nimport { ChatBodyProps } from \"../index\";\nimport styled from 'styled-components';\n\nmoment.locale(window.navigator.language);\n\ninterface TimeDividerProps {\n date: string | Date,\n styles: ChatBodyProps\n}\n\nconst TimeDividerBody = styled.div`\n margin-bottom: 0;\n /* background-color: rgba(225, 245, 254, 0.92); */\n border-radius: 7.5px;\n box-shadow: 0 1px .5px rgba(0, 0, 0, 0.13);\n padding: 5px 12px 6px;\n text-align: center;\n text-shadow: 0 1px 0 rgba(255, 255, 255, .4);\n box-sizing: border-box;\n /* color: rgba(0, 0, 0, 0.88); */\n display: inline-block;\n flex: none;\n font-size: 13px;\n line-height: 21px;\n max-width: 100% !important;\n position: relative;\n`;\n\nconst TimeDividerText = styled.span`\n font-size: 100%;\n display: inline;\n vertical-align: initial;\n outline: none;\n margin: 0;\n padding: 0;\n border: 0;\n`;\n\nconst TimeDividerContainer = styled.div<{styles: ChatBodyProps}>`\n ${TimeDividerBody}{\n background-color: ${props => props.styles.timeDividerBackgroundColor};\n color: ${props => props.styles.timeDividerTextColor};\n } \n padding-left: 8%;\n padding-right: 8%;\n margin-bottom: 12px;\n display: flex;\n flex-direction: row;\n justify-content: center;\n position: relative;\n`;\n\nconst getReadableTime = (date: Date | string) => {\n const yesterday = moment().subtract(1, 'day').startOf('day');\n const getTodayOrYesterday = (): string => {\n return moment(date).calendar().split(' ')[0].toUpperCase();\n }\n\n const isSameWeek = () => {\n const today = moment(new Date());\n const msgDate = moment(date);\n if (today.diff(msgDate, 'days') > 7) {\n return false;\n }\n return msgDate.format('e') < today.format('e');\n }\n\n let readableTime: string;\n if (moment(date).diff(yesterday) >= 0) {\n readableTime = getTodayOrYesterday();\n } else if (isSameWeek()) {\n readableTime = moment(date).format('dddd').toUpperCase();\n } else {\n readableTime = moment(date).format('DD/MM/YYYY');\n }\n\n return readableTime;\n}\n\nfunction TimeDivider({ date, styles }: TimeDividerProps) {\n return (\n \n \n {getReadableTime(date)}\n \n \n );\n}\n\nexport default React.memo(TimeDivider);\n","import { makeStyles, createStyles } from \"@material-ui/styles\";\nimport styled from 'styled-components';\nimport { ThemeContextTypes } from \"../../../../data/ThemeContext\";\n\nexport const useStyles = makeStyles(() => createStyles({\n messageDocument: {\n maxWidth: '270px',\n minWidth: '270px'\n },\n messageWithMedia: {\n maxWidth: '330px',\n },\n messageWithoutMedia: {\n maxWidth: '512px',\n },\n messageWithText: {\n padding: '12px 16px',\n },\n messageWithTextAndMedia: {\n padding: '4px 2px 8px 9px',\n },\n messageWithDocument: {\n padding: '6px 4px 8px 9px',\n },\n}));\n\nexport const VideoConferenceWrapper = styled.div<{theme?: ThemeContextTypes}>`\n display: flex;\n align-items: center;\n background-color: ${props => props.theme.body?.timeDividerBackgroundColor};\n padding: 10px;\n box-shadow: 0px 1px 0px 0.5px rgba(0, 0, 0 , 0.13);\n border-radius: 7.5px;\n svg{\n color: ${props => props.theme.body?.customer?.sliderTrackColor};\n }\n a{\n text-decoration: underline;\n color: blue;\n cursor: pointer;\n }\n`;\n\n\nexport const MessageInfoContainer = styled.div`\n float: right;\n margin: -10px 0px -5px 4px;\n position: relative;\n z-index: 10;\n`;\n\nexport const MessageInfoContainerWithoutText = styled.div`\n right: 8px;\n position: absolute;\n bottom: 6px;\n z-index: 2;\n`;\n\nexport const MessageInfo = styled.div`\n font: inherit;\n color: rgba(0, 0, 0, 0.45);\n height: 15px;\n outline: none;\n font-size: 11px;\n line-height: 15px;\n white-space: nowrap;\n vertical-align: initial;\n`;\n\nexport const MessageInfoWithoutText = styled.div`\n color: rgba(255, 255, 255, .9);\n font-size: 11px;\n height: 15px;\n line-height: 15px;\n white-space: nowrap;\n`;\n\nexport const MessageHour = styled.span<{hourColor?: string}>`\n display: inline-block;\n vertical-align: top;\n color: ${props => props.hourColor};\n`;\n\nexport const MessageTextWrapper = styled.div`\n position: relative;\n`;\n\nexport const MessageTextContent = styled.div<{textColor: string}>`\n display: inline;\n color: ${props => props.textColor};\n user-select: text;\n cursor: text;\n white-space: pre-wrap;\n word-break: break-word;\n\n a {\n color: ${props => props.textColor};\n }\n a:visited {\n color: ${props => props.textColor};\n }\n`;\n\nexport const MessageTextSpacer = styled.div`\n vertical-align: middle;\n display: inline-block;\n width: 40px;\n`;","import Lexer from './Lexer';\nimport Parser from './Parser';\n\nexport enum LexemeType {\n TEXT = '',\n BOLD = 'strong',\n ITALIC = 'em',\n DASHED = 'del',\n CODE = 'pre'\n}\n\nexport interface Lexeme {\n type: LexemeType;\n token: string;\n}\n\nexport const LINK_REGEX = /(http|https):\\/\\/([\\w_-]+(?:(?:\\.[\\w_-]+)+))([\\w.,@?^=%&:/~+#-]*[\\w@?^=%&/~+#-])?/g;\n\nexport function parse(text: string): string {\n const links = text.match(LINK_REGEX);\n\n links?.forEach((link, idx) => {\n text = text.replace(link, `[LINK_${idx}]`);\n });\n \n const lexer = new Lexer(text);\n const parser = new Parser(lexer);\n const parsed = parser.parse();\n\n return links ? links.reduce((text, link, idx) => {\n return text.replace(`[LINK_${idx}]`, `${link}`);\n }, parsed) : parsed;\n};\n\nexport default parse;","import { Lexeme, LexemeType } from '.';\n\nexport default class Lexer {\n private text: string;\n private index: number;\n\n constructor(text: string) {\n this.text = text;\n this.index = 0;\n (window as any).Lexer = Lexer;\n }\n\n getLexeme(): Lexeme {\n const lexeme: Lexeme = {\n type: LexemeType.TEXT,\n token: ''\n };\n let ch: string;\n let state = 1;\n\n while (state !== 23) {\n ch = this.getChar();\n switch (state) {\n case 1:\n if (ch === '*') {\n lexeme.token += ch;\n state = 2;\n } else if (ch === '_' ) {\n lexeme.token += ch;\n state = 7;\n } else if (ch === '~' ) {\n lexeme.token += ch;\n state = 12;\n } else if (ch === '`' ) {\n lexeme.token += ch;\n state = 17;\n } else {\n lexeme.token += ch;\n state = 22;\n }\n break;\n case 2:\n if (ch === '*') {\n lexeme.token += ch;\n state = 3;\n } else if (this.isEOL(ch)) {\n lexeme.token += ch;\n state = 23;\n } else {\n lexeme.token += ch;\n }\n break;\n case 3:\n if (ch === '*') {\n lexeme.token += ch;\n state = 4;\n } else if (this.isBlank(ch)) {\n lexeme.type = LexemeType.BOLD;\n if (ch) {\n this.ungetChar();\n }\n state = 23;\n } else {\n lexeme.token += ch;\n state = 5;\n }\n break;\n case 4:\n if (ch === '*') {\n lexeme.token += ch;\n } else {\n state = 23;\n if (ch) {\n this.ungetChar();\n }\n }\n break;\n case 5:\n if (ch === '*') {\n lexeme.token += ch;\n state = 6;\n } else if (this.isEOL(ch)) {\n state = 23;\n } else {\n lexeme.token += ch;\n }\n break;\n case 6:\n if (this.isWord(ch)) {\n lexeme.token += ch;\n state = 5;\n } else {\n lexeme.type = LexemeType.BOLD;\n if (ch) {\n this.ungetChar();\n }\n state = 23;\n }\n break;\n case 7:\n if (ch === '_') {\n lexeme.token += ch;\n state = 8;\n } else if (this.isEOL(ch)) {\n lexeme.token += ch;\n state = 23;\n } else {\n lexeme.token += ch;\n }\n break;\n case 8:\n if (ch === '_') {\n lexeme.token += ch;\n state = 9;\n } else if (this.isBlank(ch)) {\n lexeme.type = LexemeType.ITALIC;\n if (ch) {\n this.ungetChar();\n }\n state = 23;\n } else {\n lexeme.token += ch;\n state = 10;\n }\n break;\n case 9:\n if (ch === '_') {\n lexeme.token += ch;\n } else {\n state = 23;\n if (ch) {\n this.ungetChar();\n }\n }\n break;\n case 10:\n if (ch === '_') {\n lexeme.token += ch;\n state = 11;\n } else if (this.isEOL(ch)) {\n state = 23;\n } else {\n lexeme.token += ch;\n }\n break;\n case 11:\n if (this.isWord(ch)) {\n lexeme.token += ch;\n state = 10;\n } else {\n lexeme.type = LexemeType.ITALIC;\n if (ch) {\n this.ungetChar();\n }\n state = 23;\n }\n break;\n case 12:\n if (ch === '~') {\n lexeme.token += ch;\n state = 13;\n } else if (this.isEOL(ch)) {\n lexeme.token += ch;\n state = 23;\n } else {\n lexeme.token += ch;\n }\n break;\n case 13:\n if (ch === '~') {\n lexeme.token += ch;\n state = 14;\n } else if (this.isBlank(ch)) {\n lexeme.type = LexemeType.DASHED;\n if (ch) {\n this.ungetChar();\n }\n state = 23;\n } else {\n lexeme.token += ch;\n state = 15;\n }\n break;\n case 14:\n if (ch === '~') {\n lexeme.token += ch;\n } else {\n state = 23;\n if (ch) {\n this.ungetChar();\n }\n }\n break;\n case 15:\n if (ch === '~') {\n lexeme.token += ch;\n state = 16;\n } else if (this.isEOL(ch)) {\n state = 23;\n } else {\n lexeme.token += ch;\n }\n break;\n case 16:\n if (this.isWord(ch)) {\n lexeme.token += ch;\n state = 15;\n } else {\n lexeme.type = LexemeType.ITALIC;\n if (ch) {\n this.ungetChar();\n }\n state = 23;\n }\n break;\n case 17:\n if (ch === '`') {\n lexeme.token += ch;\n state = 18;\n } else {\n if (ch) {\n this.ungetChar();\n }\n state = 23;\n }\n break;\n case 18:\n if (ch === '`') {\n lexeme.token += ch;\n state = 19;\n } else {\n if (ch) {\n this.ungetChar();\n }\n state = 23;\n }\n break;\n case 19:\n if (ch === '`') {\n lexeme.token += ch;\n state = 20;\n } else if (ch === '') {\n state = 23;\n } else {\n lexeme.token += ch\n }\n break;\n case 20:\n lexeme.token += ch;\n if (ch === '`') {\n state = 21;\n } else {\n state = 23;\n }\n break;\n case 21:\n lexeme.token += ch;\n if (ch === '`') {\n lexeme.type = LexemeType.CODE;\n }\n state = 23;\n break;\n case 22:\n if (ch === '*' || ch === '_' || ch === '~' || ch === '`') {\n state = 23;\n if (ch) {\n this.ungetChar();\n }\n } else if (ch === '') {\n state = 23;\n } else {\n lexeme.token += ch;\n }\n break;\n default:\n throw new Error('Invalid state!');\n }\n }\n\n return lexeme;\n }\n\n getChar(): string {\n if (this.index < this.text.length) {\n return this.text[this.index++];\n }\n\n return '';\n }\n\n ungetChar() {\n if (this.index > 0) {\n this.index--;\n }\n }\n\n isBlank(char: string) {\n return /^[^\\w*_]?$/.test(char);\n }\n\n isEOL(char: string) {\n return /^[\\n]?$/.test(char);\n }\n\n isWord(char: string) {\n return /^[A-Za-z0-9]$/.test(char);\n }\n}","import Lexer from './Lexer';\nimport parse, { LexemeType } from '.';\n\nexport default class Parser {\n private lexer: Lexer;\n\n constructor(lexer: Lexer) {\n this.lexer = lexer;\n }\n\n parse(): string {\n let lexeme;\n let result = '';\n\n do {\n lexeme = this.lexer.getLexeme();\n switch (lexeme.type) {\n case LexemeType.BOLD: {\n const text = lexeme.token.slice(1, lexeme.token.length - 1);\n if (lexeme.token.length > 2) {\n result += '' + parse(text) + '';\n } else {\n result += lexeme.token;\n }\n }\n break;\n case LexemeType.ITALIC: {\n const text = lexeme.token.slice(1, lexeme.token.length - 1);\n if (lexeme.token.length > 2) {\n result += '' + parse(text) + '';\n } else {\n result += lexeme.token;\n }\n }\n break;\n case LexemeType.DASHED: {\n const text = lexeme.token.slice(1, lexeme.token.length - 1);\n if (lexeme.token.length > 2) {\n result += '' + parse(text) + '';\n } else {\n result += lexeme.token;\n }\n }\n break;\n case LexemeType.CODE: {\n const text = lexeme.token.slice(3, lexeme.token.length - 3);\n if (lexeme.token.length > 6) {\n result += '' + text + '';\n } else {\n result += lexeme.token;\n }\n }\n break;\n case LexemeType.TEXT: \n result += lexeme.token;\n break;\n default:\n throw new Error('Invalid type!');\n }\n } while (lexeme.token !== '');\n\n return result;\n }\n}","import React from 'react';\nimport { MessageType, Message as MessageModel, Chat, TextMessage, VideoConferenceMessage, TemplateMessage, MediaMessage } from \"../../../../chat-api\";\nimport moment from \"moment-with-locales-es6\";\nimport { isMedia, hasCaption, hasTextOrCaption } from \"../Message\";\nimport { \n useStyles, MessageInfo, MessageInfoContainer, MessageInfoContainerWithoutText, \n MessageInfoWithoutText, MessageHour, VideoConferenceWrapper, MessageTextWrapper, MessageTextContent, MessageTextSpacer \n} from './styles';\nimport MissedVideoCallIcon from '@material-ui/icons/MissedVideoCall';\nimport VideoCallIcon from '@material-ui/icons/VideoCall';\nimport MovieIcon from '@material-ui/icons/Movie';\nimport VideocamIcon from '@material-ui/icons/Videocam';\nimport { useAppState, useTheme } from '../../../../data';\nimport { ThemeContextTypes } from '../../../../data/ThemeContext';\nimport parse from '../../../../utils/whatsapp-parser';\n\ninterface MessageFooterProps {\n message: MessageModel;\n chat: Chat | null;\n textColor?: string;\n hourTextColor?: string;\n}\n\nconst VideoConferenceText = React.memo(({ message, theme }: {message: VideoConferenceMessage, theme: ThemeContextTypes}) => {\n const { getTranslation } = useAppState();\n \n if (message.body.status === 'refused') {\n return (\n \n  \n {getTranslation('MESSAGE_VIDEO_REFUSED', [moment(message.date).format('HH:mm')])}\n \n );\n } else {\n if (message.body.videoConference?.status === 'completed') {\n return (\n \n  \n {getTranslation('MESSAGE_VIDEO_COMPLETED', [moment(message.body.videoConference?.endDate).format('HH:mm')])}\n \n );\n } else {\n if (!!message.body?.link) {\n return (\n \n  \n {getTranslation('MESSAGE_VIDEO_ACCEPTED')} {getTranslation('MESSAGE_VIDEO_ACCEPTED_LINK')} \n \n );\n } else {\n return (\n \n  \n {getTranslation('MESSAGE_VIDEO_WAITING')}\n \n );\n }\n }\n }\n});\n\nconst MessageText = React.memo(({ text, textColor }: { text: string, textColor?: string }) => {\n return (\n \n \n \n \n );\n});\n\nexport const MessageFooter = React.memo(({ message, textColor, hourTextColor }: MessageFooterProps) => {\n const theme = useTheme();\n const classes = useStyles();\n const Container = hasTextOrCaption(message) ? MessageInfoContainer : MessageInfoContainerWithoutText;\n const Info = (message.type === MessageType.Audio || hasTextOrCaption(message)) ? MessageInfo : MessageInfoWithoutText;\n\n const getClassByMessageType = (message: MessageModel) => {\n if (message.type === MessageType.Text) {\n return `${classes.messageWithoutMedia} ${classes.messageWithText}`;\n } else if (message.type === MessageType.Document) {\n return `${classes.messageDocument} ${classes.messageWithDocument}`;\n } else if (message.type === MessageType.Audio) {\n return '';\n } else {\n return `${classes.messageWithMedia} ${isMedia(message.type) ? (hasCaption(message) && classes.messageWithTextAndMedia) : classes.messageWithText}`;\n }\n };\n\n const text = message.type === MessageType.Text ? (message as TextMessage).body.body : \n message.type === MessageType.Hsm ? (message as TemplateMessage).body.preview! : (message as MediaMessage).body.caption;\n\n return (\n \n {text &&\n \n }\n {message.type !== MessageType.VideoConference ?\n \n \n \n {moment(message.date).format('HH:mm')}\n \n \n \n :\n \n \n \n \n \n }\n \n );\n});\n\n\nexport default MessageFooter;","import styled from 'styled-components';\n\nexport const MediaRow = styled.div`\n border-radius: 6px;\n cursor: pointer;\n overflow: hidden;\n display: flex;\n align-items: center;\n justify-content: center;\n position: relative;\n max-width: 100%;\n max-height: 160px;\n`;\n\nexport const MediaItem = styled.div`\n width: 100%;\n height: 100%;\n position: relative;\n`;\n\nexport const VideoContainer = styled.div`\n /* padding: 3px; */\n box-sizing: border-box;\n max-width: 226px;\n min-width: 226px;\n position: relative;\n z-index: 1;\n`;\n\nexport const MediaWithoutCaption = styled.div`\n left: 0;\n bottom: 0;\n height: 28px;\n position: absolute;\n width: 100%;\n z-index: 2;\n`;\n\nexport const MediaTag = styled.video`\n flex: none;\n width: 100%;\n /* filter: blur(8px) brightness(70%); */\n`;\n\nexport const ContainerMediaPlay = styled.div`\n left: 0;\n align-items: center;\n color: #fff;\n display: flex;\n height: 100%;\n justify-content: center;\n position: absolute;\n top: 0;\n width: 100%;\n z-index: 100;\n`;\n\nexport const MediaPlay = styled.div`\n background: rgba(0, 0, 0,.35);\n border-radius: 50%;\n align-items: center;\n color: #fff;\n display: flex;\n height: 50px;\n justify-content: center;\n position: relative;\n width: 50px;\n padding-top: 5px;\n`;\n\nexport const ContainerVideoIcon = styled.span`\n left: 6px;\n bottom: 3px;\n position: absolute;\n z-ndex: 100;\n color: rgba(255, 255, 255,.9);\n font-size: 11px;\n line-height: 15px;\n height: 15px;\n`;\n\nexport const VideoIconItem = styled.div`\n margin-right: 3px;\n color: #fff;\n display: inline-block;\n vertical-align: top;\n`;\n\nexport const MessageFooter = styled.div`\n bottom: 0;\n height: 28px;\n position: absolute;\n width: 100%;\n z-index: 2;\n`;","import React from 'react';\nimport { Loading, hasCaption } from '../../Message';\nimport {\n MediaRow,\n MediaItem,\n VideoContainer,\n MediaTag,\n MediaWithoutCaption,\n MessageFooter\n} from './styles';\n\ninterface MessageBodyVideoProps {\n message: any,\n mediaVideo: HTMLVideoElement | null\n}\n\nfunction MessageBodyVideo({ message, mediaVideo }: MessageBodyVideoProps) {\n return (\n \n \n \n {(!mediaVideo || !mediaVideo.src) ?\n \n :\n \n \n \n \n \n }\n \n {!hasCaption(message) && }\n \n \n \n );\n}\n\nexport default React.memo(MessageBodyVideo)","import styled from 'styled-components';\n\nexport const ImageContainer = styled.div`\n /* padding: 3px; */\n box-sizing: border-box;\n max-width: 336px;\n max-height: 336px;\n position: relative;\n z-index: 1;\n`;\n\nexport const MediaRow = styled.div`\n border-radius: 6px;\n cursor: pointer;\n overflow: hidden;\n display: flex;\n align-items: center;\n justify-content: center;\n position: relative;\n max-width: 100%;\n max-height: 250px;\n`;\n\nexport const ImageItem = styled.div`\n width: 100%;\n height: 100%;\n position: relative;\n`;\n\nexport const MediaWithoutCaption = styled.div`\n /* left: 0;\n background: linear-gradient(0deg,rgba(0, 0, 0, .3),rgba(0, 0, 0, 0));\n bottom: 0;\n height: 28px;\n position: absolute;\n width: 100%;\n z-index: 2; */\n`;\n\nexport const MediaTag = styled.img`\n flex: none;\n width: 100%;\n`;","import React from 'react';\nimport { Loading } from '../../Message';\nimport { MediaMessage } from '../../../../../chat-api';\nimport {\n ImageContainer,\n MediaRow,\n ImageItem,\n MediaWithoutCaption,\n MediaTag\n} from './styles';\n\ninterface MessageBodyImageProps {\n message: MediaMessage,\n mediaImage: HTMLImageElement | null;\n imageBlob: Blob | null;\n}\n\nfunction MessageBodyImage({ message, mediaImage, imageBlob }: MessageBodyImageProps) {\n const handleClick = () => {\n if (message.body.file && imageBlob) {\n window.open(URL.createObjectURL(imageBlob), '_blank');\n }\n }\n\n return (\n \n \n \n {(!mediaImage || !mediaImage.src) ?\n \n :\n \n \n \n }\n \n \n \n \n );\n}\n\nexport default React.memo(MessageBodyImage);","import styled from 'styled-components';\n\nexport const MediaRow = styled.div`\n border-radius: 6px;\n cursor: pointer;\n overflow: hidden;\n display: flex;\n align-items: center;\n justify-content: center;\n position: relative;\n max-width: 100%;\n /* width: 270px; */\n`;\n\nexport const DocumentContainer = styled.div`\n padding: 3px 3px 8px;\n box-sizing: border-box;\n width: 276px;\n position: relative;\n z-index: 1;\n`;\n\nexport const DocumentLink = styled.a`\n border-radius: 6px;\n cursor: pointer;\n box-sizing: border-box;\n color: inherit;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n width: 100%;\n text-decoration: none;\n`;\n\nexport const DocumentRow = styled.div`\n padding: 13px 19px;\n align-items: center;\n display: flex;\n flex-direction: row;\n flex: 0 0 auto;\n text-decoration: none;\n`;\n\nexport const ExtentionIconContainer = styled.div`\n margin-top: -1px;\n flex: none;\n`;\n\nexport const ExtentionIcon = styled.div`\n background-repeat: no-repeat;\n background-size: contain;\n height: 30px;\n width: 26px;\n`;\n\nexport const DocumentNameContainer = styled.div`\n margin: 0 10px;\n flex: 1 1 auto;\n overflow: hidden;\n position: relative;\n text-overflow: ellipsis;\n top: -2px;\n white-space: nowrap;\n`;\n\nexport const DocumentName = styled.span`\n display: inline;\n visibility: visible;\n`;\n\nexport const DownloadIconContainer = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n position: relative;\n flex: none;\n width: 34px;\n height: 34px;\n color: rgba(51, 51, 51, .5);\n`;\n\n\nexport const InfoItemBullet = styled.span`\n display: inline-block;\n max-width: 60px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n margin: 0 4px;\n display: inline-block;\n color: rgba(0, 0, 0, .25);\n`;\n\n\nexport const InfoContainer = styled.div<{textColor?: string}>`\n left: 8px;\n bottom: 3px;\n color: ${props => props.textColor};\n ${InfoItemBullet} {\n color: ${props => props.textColor};\n\n }\n font-size: 11px;\n height: 15px;\n line-height: 15px;\n position: absolute;\n`;\n\nexport const InfoItem = styled.span`\n display: inline-block;\n max-width: 60px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n","import React, { useState, useEffect } from 'react';\nimport { MediaMessage, Chat } from '../../../../../chat-api';\nimport { LittleLoading } from '../../Message';\nimport {\n MediaRow,\n DocumentContainer,\n DocumentLink,\n DocumentRow,\n ExtentionIconContainer,\n ExtentionIcon,\n DocumentNameContainer,\n DocumentName,\n DownloadIconContainer,\n InfoContainer,\n InfoItemBullet,\n InfoItem, \n} from './styles';\n\nfunction getFileExtention(message: MediaMessage) {\n const mimetypes: any = {\n 'pdf': ['application/pdf'],\n 'xls': ['application/vnd.ms-excel'], \n 'xlsx': ['application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'], \n 'docx': ['application/vnd.openxmlformats-officedocument.wordprocessingml.document']\n };\n const extention = message.body.file.name && message.body.file.name!.split('.').pop();\n\n if (extention && mimetypes[extention]) {\n return extention;\n }\n\n if (mimetypes['pdf'].includes(message.body.file.contentType!)) {\n return 'pdf';\n } else if (mimetypes['xls'].includes(message.body.file.contentType!)) {\n return 'xls';\n } else if (mimetypes['xlsx'].includes(message.body.file.contentType!)) {\n return 'xlsx';\n } else if (mimetypes['docx'].includes(message.body.file.contentType!)) {\n return 'docx';\n } else {\n return 'others';\n }\n}\n\nfunction getFileSize(message: MediaMessage) {\n const size = message.body.file.length!;\n\n if (size < 1000) {\n return `${size} B`;\n } else if (Math.round(size / 1000) < 1000) {\n return `${Math.round(size / 1000)} kB`;\n } else if (Math.round((size / 1000) / 1000) < 1000) {\n return `${Math.round((size / 1000) / 1000)} MB`;\n } else {\n return `${Math.round(((size / 1000) / 1000) / 1000)} GB`;\n }\n}\n\ninterface MessageBodyDocumentProps {\n message: MediaMessage,\n mediaDocument:HTMLAnchorElement | null,\n mediaBlob: Blob | null,\n chat: Chat | null,\n textColor?: string;\n backgroundColor?: string;\n}\n\nfunction MessageBodyDocument({ message, mediaDocument, mediaBlob, chat, textColor, backgroundColor }: MessageBodyDocumentProps) {\n const [numberOfPages, setNumberOfPages] = useState(0);\n const getImagePath = (fileName: string) => require(`../../../../../assets/images/extentions/${fileName}.png`);\n \n useEffect(() => {\n function getNumberOfPages() {\n var reader = new FileReader();\n if (mediaBlob) {\n reader.readAsBinaryString(mediaBlob);\n reader.onloadend = function () {\n var count = reader.result?.toString().match(/\\/Type[\\s]*\\/Page[^s]/g)?.length || 0;\n setNumberOfPages(count);\n }\n }\n }\n\n if (getFileExtention(message) === 'pdf') {\n getNumberOfPages();\n }\n }, [message, mediaBlob]);\n\n const handleClick = () => {\n if (message.body.file && mediaBlob) {\n const a = document.createElement('a');\n a.href = URL.createObjectURL(mediaBlob);\n a.download = message.body.file.name!;\n document.body.appendChild(a);\n a.click();\n a.remove();\n }\n }\n \n return (\n \n \n \n \n \n \n \n \n \n {message.body.filename || message.body.file.name}\n \n \n {(!mediaDocument || !mediaDocument.href) ? \n \n :\n \n \n \n \n \n \n }\n \n \n \n \n \n \n {!!numberOfPages && (\n <>\n \n {`${numberOfPages} ${numberOfPages > 1 ? 'páginas' : 'página'}`}\n \n \n \n )}\n \n {getFileExtention(message) === 'others' ? \n message.body.file.name?.substring(message.body.file.name?.lastIndexOf('.')+1, message.body.file.name?.length).toUpperCase()\n : getFileExtention(message).toUpperCase()\n }\n \n \n {getFileSize(message)}\n \n \n );\n}\n\nexport default React.memo(MessageBodyDocument);","import styled from 'styled-components';\n\nexport const AudioContainer = styled.div`\n padding: 6px;\n box-sizing: border-box;\n max-width: 336px;\n width: 250px;\n max-height: 336px;\n`;\n\nexport const MediaRow = styled.div`\n align-items: center;\n display: flex;\n`;\n\nexport const AudioControls = styled.div`\n padding-left: 8px;\n padding-right: 8px;\n padding-bottom: 8px;\n flex-grow: 1;\n`;\n\nexport const AudioControlsRow = styled.div`\n align-items: center;\n display: flex;\n`;\n\nexport const AudioPlay = styled.div`\n flex: none;\n margin-right: 12px;\n margin-top: -1px;\n height: 34px;\n width: 34px;\n position: relative;\n display: block;\n`;\n\nexport const AudioPlayButton = styled.button<{backgroundColor?: string, textColor?: string}>`\n color: ${props => props.textColor};\n background-color: ${props => props.backgroundColor};\n border: none;\n width: 34px;\n height: 34px;\n position: relative;\n display: block;\n cursor: pointer;\n padding: 0;\n :focus {\n outline: none;\n }\n`;\n\nexport const AudioProgressContainer = styled.div`\n flex: 1;\n`;\n\nexport const AudioDuration = styled.div<{textColor?: string}>`\n bottom: 4px;\n color: ${props => props.textColor};\n font-size: 11px;\n line-height: 15px;\n position: absolute;\n`;\n\nexport const AudioProgress = styled.div`\n position: relative;\n width: 100%;\n top: -1px;\n`;\n\nexport const AudioProgressSpan = styled.span`\n width: 0;\n position: absolute;\n display: inline;\n left: 0;\n top: 9px;\n height: 3px;\n pointer-events: none;\n z-index: 10;\n`;\n\nexport const AudioProgressInput = styled.input<{runnableTrackColor?: string, sliderTrackColor?: string}>`\n height: 21px;\n box-sizing: border-box;\n ::-webkit-slider-runnable-track {\n background-color: ${props => props.runnableTrackColor};\n border-top: 1px solid ${props => props.runnableTrackColor} !important;\n border-bottom: 1px solid ${props => props.runnableTrackColor} !important;\n }\n ::-webkit-slider-thumb {\n background-color: ${props => props.sliderTrackColor};\n } \n background-color: initial !important;\n outline: none !important;\n border: none;\n display: block;\n position: relative;\n width: 100%;\n margin: 0;\n appearance: none;\n`;\n\nexport const AudioPhotoContainer = styled.div`\n flex: none;\n z-index: 200;\n position: relative;\n`;\n\nexport const AudioPhoto = styled.div`\n border-radius: 50%;\n background-color: #e6e6e6;\n position: relative;\n overflow: hidden;\n width: 55px;\n height: 55px;\n`;\n\nexport const AudioPhotoImg = styled.img`\n border-radius: 50%;\n opacity: 1;\n display: block;\n position: relative;\n transition: opacity .15s ease-out;\n width: 100%;\n height: 100%;\n z-index: 100;\n overflow: hidden;\n`;\n\nexport const AudioPhotoIconContainer = styled.div`\n z-index: 200;\n position: absolute;\n bottom: -2px;\n`;\n\nexport const AudioPhotoIcon = styled.div`\n width: 19px;\n height: 26px;\n z-index: 100;\n`;","import React, { useState, useEffect } from 'react';\nimport { MediaMessage } from '../../../../../chat-api';\nimport moment from 'moment-with-locales-es6';\nimport { isMsgOut } from '../../../../../utils';\nimport { LittleLoading } from \"../../Message\";\n\nimport {\n AudioContainer,\n MediaRow,\n AudioControls,\n AudioControlsRow,\n AudioPlay,\n AudioPlayButton,\n AudioProgressContainer,\n AudioDuration,\n AudioProgress,\n AudioProgressSpan,\n AudioProgressInput\n} from './styles';\nimport { useChatState } from '../../../../../data';\n\ninterface MessageBodyAudioProps {\n message: MediaMessage;\n mediaAudio: HTMLAudioElement | null;\n backgroundColor?: string;\n textColor?: string;\n runnableTrackColor?: string; \n sliderTrackColor?: string; \n}\n\nfunction MessageBodyAudio({ message, mediaAudio, textColor, backgroundColor, runnableTrackColor, sliderTrackColor }: MessageBodyAudioProps) {\n const { chat } = useChatState();\n\n const [audioState, setAudioState] = useState({ playing: false });\n\n useEffect(() => {\n if (mediaAudio) {\n mediaAudio.ontimeupdate = function () {\n setAudioState(aState => {\n return {\n ...aState,\n playing: mediaAudio.ended ? false : aState.playing,\n currentTime: mediaAudio.currentTime\n }\n });\n }\n }\n }, [mediaAudio]);\n\n function playAudio() {\n if (mediaAudio) {\n mediaAudio.paused ? mediaAudio.play() : mediaAudio.pause();\n setAudioState({ ...audioState, playing: !audioState.playing })\n }\n }\n\n function getAudioProgess() {\n return mediaAudio ?\n ((Number(mediaAudio.currentTime) * 100) / Number(mediaAudio.duration)).toFixed(2)\n : 0;\n }\n\n function getAudioCurrentTime() {\n const today = moment().utcOffset(0);\n if (mediaAudio) {\n const duration = audioState.playing ? mediaAudio.currentTime : mediaAudio.duration;\n today.set({ hour: 0, minute: 0, second: duration, millisecond: 0 });\n if (duration < 600) {\n return today.format('m:ss');\n } else if (duration < 3600) {\n return today.format('mm:ss');\n } else {\n return today.format('hh:mm');\n }\n }\n return '0:00';\n }\n\n function handleChangeAudioProgress(e: any) {\n if (mediaAudio) {\n mediaAudio.currentTime = (mediaAudio.duration * e.target.value) / 100;\n }\n }\n\n return (\n \n \n \n \n \n \n {!mediaAudio || !mediaAudio.src ?\n \n : !audioState.playing ?\n \n \n \n \n \n :\n \n \n \n \n \n }\n \n \n \n {getAudioCurrentTime()}\n \n \n \n {!!mediaAudio && }\n \n \n \n \n \n \n );\n}\n\nexport default React.memo(MessageBodyAudio)","export function generateMapUrl(lon: number, lat: number, name:string|undefined, address:string|undefined){\n if (name || address) {\n let location = name ? `${name},${address}` : address;\n return `https://www.google.com/maps/search/${location}/@${lat},${lon},17z`;\n } else {\n return `http://www.google.com/maps/place/${lat},${lon}`;\n }\n}\n\nexport function generateMapPictureUrl(lon: number, lat: number, key = googleApiKey()){\n return `https://maps.googleapis.com/maps/api/staticmap?center=${lat},${lon}&zoom=15&size=330x185&maptype=roadmap&markers=color:red%7C${lat},${lon}&key=${key}`;\n}\n\nexport function googleApiKey(){\n return 'AIzaSyCEk4b-RZe0JtMXeNtb5Y_iYErEqkslDO4';\n}","import React from 'react';\nimport styled from 'styled-components';\n\nexport const ImageContainer = styled.div`\n padding: 3px;\n box-sizing: border-box;\n max-width: 250px;\n max-height: 336px;\n position: relative;\n z-index: 1;\n`;\n\nexport const MediaRow = styled.div`\n border-radius: 6px;\n cursor: pointer;\n overflow: hidden;\n display: flex;\n align-items: center;\n justify-content: center;\n position: relative;\n max-width: 100%;\n max-height: 330px;\n`;\n\nexport const ImageItem = styled.div`\n width: 100%;\n height: 100%;\n position: relative;\n`;\n\nexport const MediaWithoutCaption = styled.div`\n left: 0;\n background: linear-gradient(0deg,rgba(0, 0, 0, .3),rgba(0, 0, 0, 0));\n bottom: 0;\n height: 28px;\n position: absolute;\n width: 100%;\n z-index: 2;\n`;\n\nexport const MediaTag = React.memo(styled.img`\n flex: none;\n width: 100%;\n`);","import React from 'react';\nimport { LocationMessage } from '../../../../../chat-api';\nimport { generateMapUrl, generateMapPictureUrl } from '../../../../../utils/maps'\nimport { Link, Box } from '@material-ui/core'\nimport {\n ImageContainer,\n MediaRow,\n ImageItem,\n MediaTag\n} from './styles';\n\ninterface MessageBodyLocationProps {\n message: LocationMessage;\n textColor?: string;\n}\n\nfunction MessageBodyLocation({ message, textColor }: MessageBodyLocationProps) {\n return (\n \n \n \n \n \n \n \n \n \n \n {message.body.name &&\n \n \n {message.body.name}\n \n \n }\n {message.body.address &&\n \n {message.body.address}\n \n }\n \n );\n}\n\nexport default React.memo(MessageBodyLocation);","import styled, { keyframes } from 'styled-components';\nimport { Avatar } from \"@material-ui/core\";\n\nexport const StyledAvatar = styled(Avatar)<{textColor?: string, backgroundColor?: string}>`\n && {\n width: 35px;\n height: 35px;\n margin-right: 10px;\n color: ${props => props.textColor};\n background-color: ${props => props.backgroundColor};\n }\n`;\n\nexport const MessageContainer = styled.div`\n display: flex;\n flex-direction: column;\n position: relative;\n padding-left: 3%;\n padding-right: 8px;\n margin-bottom: 2px;\n align-items: flex-end;\n`;\n\nexport const TailOut = styled.span`\n color: #dcf8c6;\n display: block;\n height: 13px;\n width: 8px;\n z-index: 1000;\n margin-left: -8px;\n margin-top: -2px;\n order: 2;\n`;\n\nexport const TailIn = styled.span`\n left: -8px;\n display: block;\n height: 13px;\n position: absolute;\n top: -2px;\n width: 8px;\n z-index: 100;\n color: #fff;\n`;\n\nexport const TextContainer = styled.div<{isOut: boolean}>`\n position: relative;\n z-index: 200;\n width: ${props => props.isOut ? 'calc(100% - 45px)' : '100%'};\n border-radius: 7.5px;\n box-shadow: 0 1px 0.5px rgba(0, 0, 0, 0.13);\n background-color: #dcf8c6;\n order: 1;\n`;\n\nexport const MessageStatusError = styled.div`\n height: 100%;\n display: flex;\n align-self: center;\n z-index: 1000;\n pointer-events: none;\n`;\n\nexport const MessageErrorIcon = styled.div`\n background-color: rgb(223, 51, 51);\n border-radius: 50%;\n border: 1px solid #fff;\n align-items: center;\n color: #fff;\n height: 24px;\n justify-content: center;\n pointer-events: auto;\n width: 24px;\n margin-left: 5px;\n &[role=\"button\"] {\n cursor: pointer;\n }\n`;\n\nexport const ContainerLoadingMedia = styled.div`\n left: 0;\n align-items: center;\n color: #fff;\n display: flex;\n height: 100%;\n justify-content: center;\n position: absolute;\n top: 0;\n width: 100%;\n z-index: 100;\n background-color: rgba(0, 0, 0, .16);\n`;\n\nexport const RowLoadingMedia = styled.div`\n position: relative;\n display: inline-block;\n height: 50px;\n width: 50px;\n`;\n\nexport const LoadingIconDiv = styled.div`\n left: 0;\n position: absolute;\n top: 0;\n width: 50px;\n height: 50px;\n`;\n\nexport const ContainerLoadingMediaBefore = styled.div`\n background-color: rgba(0, 0, 0, .07);\n border-radius: 50%;\n height: 44px;\n width: 44px;\n position: relative;\n`;\n\n\nexport const ContainerLittleLoadingMedia = styled.div`\n align-items: center;\n color: #fff;\n display: flex;\n height: 34px;\n justify-content: center;\n width: 34px;\n /* background-color: rgba(0, 0, 0, .16); */\n`;\n\nexport const RowLittleLoadingMedia = styled.div`\n position: relative;\n display: inline-block;\n width: 100%;\n height: 100%;\n`;\n\n\nexport const LittleLoadingIconDiv = styled.div`\n left: 0;\n position: absolute;\n`;\n\n\nexport const ContainerLittleLoadingMediaBefore = styled.div`\n background-color: rgba(0, 0, 0, .07);\n border-radius: 50%;\n width: 100%;\n height: 100%;\n`;\n\nexport const fadeIn = keyframes`\n 0% { opacity: 0; }\n 100% { opacity: 1; }\n }\n`;\n\nexport const dotTyping = keyframes`\n 0% {\n box-shadow: 9984px 0 0 0 grey, 9999px 0 0 0 grey, 10014px 0 0 0 grey;\n }\n 16.667% {\n box-shadow: 9984px -10px 0 0 grey, 9999px 0 0 0 grey, 10014px 0 0 0 grey;\n }\n 33.333% {\n box-shadow: 9984px 0 0 0 grey, 9999px 0 0 0 grey, 10014px 0 0 0 grey;\n }\n 50% {\n box-shadow: 9984px 0 0 0 grey, 9999px -10px 0 0 grey, 10014px 0 0 0 grey;\n }\n 66.667% {\n box-shadow: 9984px 0 0 0 grey, 9999px 0 0 0 grey, 10014px 0 0 0 grey;\n }\n 83.333% {\n box-shadow: 9984px 0 0 0 grey, 9999px 0 0 0 grey, 10014px -10px 0 0 grey;\n }\n 100% {\n box-shadow: 9984px 0 0 0 grey, 9999px 0 0 0 grey, 10014px 0 0 0 grey;\n }\n`;\n\nexport const DotTyping = styled.div`\n position: relative;\n left: -9999px;\n width: 10px;\n height: 10px;\n border-radius: 5px;\n background-color: grey;\n color: grey;\n box-shadow: 9984px 0 0 0 grey, 9999px 0 0 0 grey, 10014px 0 0 0 grey;\n animation: ${dotTyping} 0.9s infinite linear;\n`;\n\nexport const DotContainer = styled.div`\n position: relative;\n z-index: 200;\n width: 90px;\n border-radius: 7.5px;\n box-shadow: 0 1px 0.5px rgb(0 0 0 / 13%);\n background-color: white;\n -webkit-order: 1;\n -ms-flex-order: 1;\n order: 1;\n display: flex;\n height: 39px;\n overflow: hidden;\n align-items: center;\n justify-content: center;\n`;\n\nexport const MessageBody = styled.div`\n border-radius: 7.5px;\n color: #303030;\n display:flex;\n align-items: center;\n font-size: 13px;\n line-height: 13px;\n position: relative;\n word-break: break-word;\n animation: ${fadeIn} 0.4s ease-in-out;\n`;\n","import React, { useState, useEffect } from 'react';\nimport { createStyles, makeStyles, Tooltip } from '@material-ui/core';\nimport { isMsgOut } from '../../../utils';\nimport ChatAPI, { MessageStatus as MS, MessageType, Message as MessageModel, MediaMessage } from '../../../chat-api';\nimport MessageFooter from \"./MessageFooter/MessageFooter\";\nimport MessageBodyVideo from './MessageBody/MessageBodyVideo/MessageBodyVideo';\nimport MessageBodyImage from './MessageBody/MessageBodyImage/MessageBodyImage';\nimport MessageBodyDocument from './MessageBody/MessageBodyDocument/MessageBodyDocument';\nimport MessageBodyAudio from './MessageBody/MessaBodyAudio/MessageBodyAudio';\nimport MessageBodyLocation from './MessageBody/MessageBodyLocation/MessageBodyLocation'\nimport {\n ContainerLoadingMedia,\n RowLoadingMedia,\n LoadingIconDiv,\n ContainerLoadingMediaBefore,\n MessageStatusError,\n MessageErrorIcon,\n TextContainer,\n MessageBody,\n MessageContainer,\n ContainerLittleLoadingMedia,\n RowLittleLoadingMedia,\n LittleLoadingIconDiv,\n ContainerLittleLoadingMediaBefore,\n StyledAvatar,\n DotTyping,\n DotContainer\n} from './styles';\nimport { useAppState, useChatState, useTheme } from '../../../data';\nimport { CSSProperties } from '@material-ui/styles';\n\nexport interface MessageProps {\n message: any,\n index: number,\n lastChild?: Boolean,\n animate?: Boolean\n}\n\nexport const isMedia = (type: MessageType) => {\n return ([MessageType.Audio, MessageType.Document, MessageType.Image, MessageType.Sticker, MessageType.Video].includes(type));\n}\n\nexport const hasCaption = (message: MessageModel) => {\n if (message.type === MessageType.Document)\n return true;\n return !!(message as MediaMessage).body.caption;\n}\n\nexport const hasTextOrCaption = (message: MessageModel) => {\n if (message.type === MessageType.Document)\n return true;\n if (isMedia(message.type)) {\n return hasCaption(message);\n }\n return true;\n}\n\nconst useTooltip = makeStyles(() => createStyles({\n tooltip: {\n order: 3,\n }\n}));\n\nconst Message = ({ message, index, lastChild, animate }: MessageProps) => {\n const { backgroundColor, customer, enterprise } = useTheme().body!;\n const { backgroundColor: headerBackgorunColor, titleColor } = useTheme().header!;\n const chatAPI = new ChatAPI();\n const { showAttendant, communicationTool } = useAppState();\n const { chat, avatarURL } = useChatState();\n const [mediaImage, setMediaImage] = useState(null);\n const [mediaVideo, setMediaVideo] = useState(null);\n const [mediaDocument, setMediaDocument] = useState(null);\n const [mediaAudio, setMediaAudio] = useState(null);\n const [mediaBlob, setMediaBlob] = useState(null);\n const [imageBlob, setImageBlob] = useState(null);\n const tooltipClass = useTooltip();\n const [attendant, setAttendant] = useState(null!);\n\n useEffect(() => {\n if (showAttendant && message.attendant && message.attendant.photo) {\n chatAPI.downloadPhoto(message.attendant.photo).then(file => {\n setAttendant(file.url);\n })\n }\n }, [chatAPI, message, showAttendant]);\n\n useEffect(() => {\n const mediaMessage = (message as MediaMessage);\n if (mediaMessage.body?.type === MessageType.Image) {\n chatAPI.getFile(mediaMessage.body?.file).then(file => {\n const img = new Image();\n img.src = file.url;\n setImageBlob(file.blob);\n img.onload = () => setMediaImage(img);\n });\n } else if (mediaMessage.body?.type === MessageType.Video) {\n chatAPI.getFile(mediaMessage.body?.file).then(file => {\n const video = document.createElement('video');\n video.src = file.url;\n video.onloadeddata = () => setMediaVideo(video);\n });\n } else if (mediaMessage.body?.type === MessageType.Document) {\n chatAPI.getFile(mediaMessage.body?.file).then(file => {\n const a = document.createElement('a');\n a.href = file.downloadLink!;\n setMediaDocument(a);\n setMediaBlob(file?.blob);\n })\n } else if (mediaMessage.body?.type === MessageType.Audio) {\n chatAPI.getFile(message.body?.file).then(file => {\n const audio = new Audio(file.url);\n audio.src = file.url;\n audio.onloadeddata = () => setMediaAudio(audio);\n });\n }\n }, [message, chatAPI]);\n\n const isOutMessage = isMsgOut(message, chat?.communicationTool || communicationTool);\n let style = {};\n\n if (!animate)\n style = {\n animation: 'none'\n } as CSSProperties;\n\n return (\n \n {!message.loading ?\n \n {lastChild ?\n (isOutMessage && message.type !== MessageType.VideoConference) &&\n ((showAttendant && message.attendant) ?\n \n {message.attendant.name.charAt(0)}\n \n :\n \n {chat ? chat.communicationTool?.user?.name.charAt(0) : message.from.user?.name.charAt(0)}\n )\n :\n (isOutMessage && message.type !== MessageType.VideoConference) &&\n
\n }\n\n {/* Error icon when the message fails */}\n {(isOutMessage && message.status === MS.Failed) &&\n \n \n \n \n \n \n \n \n \n \n \n \n }\n \n {message.type === MessageType.Image &&\n \n }\n {message.type === MessageType.Video &&\n \n }\n {message.type === MessageType.Audio &&\n \n }\n {message.type === MessageType.Document &&\n \n }\n {message.type === MessageType.Location &&\n \n }\n {message.type === MessageType.Sticker &&\n \n Mensagem de sticker não suportada\n \n }\n \n \n
\n :\n \n {(isOutMessage && message.type !== MessageType.VideoConference) &&\n ((message.attendant) ?\n \n {message.attendant.name.charAt(0)}\n \n :\n \n {chat ? chat.communicationTool?.user?.name.charAt(0) : message.from.user?.name.charAt(0)}\n )\n }\n\n \n \n \n \n }\n
\n );\n};\n\nexport const LittleLoading = React.memo(({ message, textColor }: { message: MediaMessage, textColor?: string }) => {\n return (\n message.cancelToken?.cancel()}>\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}, (prevProps, nextProps) => {\n return prevProps.message === nextProps.message\n});\n\nexport const Loading = React.memo(({ message }: { message: MediaMessage }) => {\n return (\n message.cancelToken?.cancel()}>\n message.cancelToken?.cancel()}>\n message.cancelToken?.cancel()}>\n \n \n \n \n message.cancelToken?.cancel()}>\n \n \n \n \n \n \n \n \n )\n}, (prevProps, nextProps) => {\n return prevProps.message === nextProps.message\n});\n\nexport default React.memo(Message, (prevProps, nextProps) => {\n return prevProps.message === nextProps.message &&\n prevProps.message.status === nextProps.message.status &&\n prevProps.lastChild === nextProps.lastChild &&\n prevProps.message.loading === nextProps.message.loading;\n});\n","import styled from 'styled-components'; \nimport OpenInNewIcon from '@material-ui/icons/OpenInNew';\n\nexport const CustomKeyboardDiv = styled.div\n `\n padding: 0 8px 0 3%;\n display: flex;\n justify-content: flex-end;\n flex-direction: row;\n flex-wrap: wrap;\n `\n;\n\nexport const LinkIcon = styled(OpenInNewIcon) ``;\n\nexport const KeyboardButton = styled.div<{ color: string; link?: boolean }>\n `\n cursor:pointer;\n margin: 0 5px 10px 5px;\n padding: 5px 15px;\n display: flex;\n align-items: center;\n border: 1px solid;\n border-radius: 20px;\n font-size: 13px;\n border-color: ${props => props.color};\n color: ${props => props.color};\n word-break: break-word;\n text-align: center;\n max-width: 100%;\n text-decoration: ${props => props.link ? 'underline' : 'none'};\n\n &:hover {\n opacity: 0.5;\n }\n\n ${LinkIcon} {\n font-size: 16px;\n padding: 0 5px 0 0;\n color: ${props => props.color};\n }\n `\n;","import React, { useCallback } from \"react\";\nimport { MessageType } from \"../../../chat-api\";\nimport { useMessageState, useTheme } from \"../../../data\";\nimport { CustomKeyboardDiv, KeyboardButton, LinkIcon } from \"./styles\";\n\nexport interface CustomKeyboardProps {\n buttons: any[],\n}\n\nconst CustomKeyboard = ({buttons}: CustomKeyboardProps) => {\n const { sendMessage } = useMessageState();\n const { buttonsColor } = useTheme().body!;\n\n const handleClick = useCallback((btn) => {\n sendMessage({\n type: MessageType.Text,\n body: {\n body: btn.text,\n payload: btn.identifier\n },\n })\n }, [sendMessage]);\n\n return (\n \n {\n buttons.map((btn) => (\n btn.type === 'text' ?\n handleClick(btn)}\n key={btn.identifier}\n >\n {btn.text}\n \n :\n window.open(btn.identifier, '_blank')}\n key={btn.identifier} \n >\n {btn.text}\n \n ))\n }\n \n );\n};\n\nexport default CustomKeyboard;","import React, { useEffect, useState, useRef, useCallback } from 'react';\nimport ChatAPI, { Message as MessageModel, MessageType } from '../../chat-api';\nimport { Container, LoadingContainer, MessagesContainer } from './styles';\nimport { getMessagesByDate, isLastMessage, isMsgOut } from '../../utils/index';\nimport TimeDivider from './TimeDivider/TimeDivider';\nimport Message from \"./Message/Message\";\nimport { useMessageState, useChatState, useTheme, useAppState } from '../../data';\nimport CustomKeyboard from './CustomKeyboard/CustomKeyboard';\n\nexport interface ChatBodyProps {\n backgroundColor?: string;\n timeDividerBackgroundColor?: string;\n timeDividerTextColor?: string;\n buttonsColor?: string;\n customer?: {\n messageBackgroundColor?: string;\n messageTextColor?: string;\n messageHourTextColor?: string;\n runnableTrackColor?: string;\n sliderTrackColor?: string;\n };\n enterprise?: {\n messageBackgroundColor?: string;\n messageTextColor?: string;\n messageHourTextColor?: string;\n runnableTrackColor?: string;\n sliderTrackColor?: string;\n };\n responsiveMode?: boolean;\n}\n\nconst ChatBody: React.FC = () => {\n const { timeDividerBackgroundColor, timeDividerTextColor, backgroundColor } = useTheme().body!;\n const chatAPI = new ChatAPI();\n const { messages, setMessages, scrollBottom, setScrollBottom, sendingMessages } = useMessageState();\n const { chat, isExpanded } = useChatState();\n const { initialMessage, communicationTool } = useAppState();\n const [isLoadingOldMessages, setIsLoadingOldMessages] = useState(false);\n const [hasMoreMessages, setHasMoreMessages] = useState(false);\n const chatRef = useRef(null);\n const footerRef = useRef(null);\n const messagesRef = useRef(null);\n const [newChat, setNewChat] = useState(false);\n\n useEffect(() => {\n const removeFirstLoading = () => {\n let newMessages = JSON.parse(JSON.stringify(messages));\n let index = (newMessages || []).findIndex((msg: any) => msg.loading);\n if (index !== -1) {\n newMessages[index].loading = false;\n setMessages(newMessages);\n }\n }\n\n let interval = setInterval(removeFirstLoading, 1000);\n\n return () => {\n clearInterval(interval);\n }\n });\n\n useEffect(() => {\n const callback = (messagesContainer: { messages: MessageModel[] }) => {\n let newMessages = JSON.parse(JSON.stringify(messagesContainer.messages));\n if (messages.length !== newMessages.length) {\n newMessages = newMessages.map((msg: any) => { msg.loading = false; return msg; });\n for (let i = newMessages.length - 1; i >= messages?.length; i--) {\n let isOut = isMsgOut(newMessages[i], chat?.communicationTool || communicationTool);\n if (!isOut)\n break;\n newMessages[i].loading = true;\n }\n }\n\n setMessages(newMessages);\n\n if (chatRef.current?.scrollTop! + chatRef.current?.offsetHeight! === chatRef.current?.scrollHeight) {\n footerRef?.current?.scrollIntoView({\n block: 'start',\n });\n }\n };\n\n chatAPI.on('messages', callback);\n return () => {\n chatAPI.off('messages', callback);\n };\n }, [chatAPI, setMessages, messages, chat, communicationTool]);\n\n useEffect(() => {\n if (chat) {\n setHasMoreMessages(!newChat);\n } else {\n setNewChat(true);\n if (initialMessage) {\n chatAPI.addInitialMessage(initialMessage, communicationTool);\n }\n }\n }, [chat, communicationTool, initialMessage, chatAPI, newChat]);\n\n const handleScroll = useCallback(() => {\n function loadMoreMessages() {\n setIsLoadingOldMessages(true);\n try {\n const oldScrollTop = chatRef.current?.scrollTop;\n chatAPI.getOldMessages().then(data => {\n if (chatRef.current?.scrollTop === 0) {\n chatRef.current?.scrollTo(0, Number(oldScrollTop) + 10);\n }\n setHasMoreMessages(data.messages.length > 0);\n setIsLoadingOldMessages(false);\n });\n } catch (error) {\n setIsLoadingOldMessages(false);\n }\n }\n\n if (chatRef.current) {\n if (chatRef.current.scrollTop > 0 && chatRef.current.scrollTop < 100 && !isLoadingOldMessages && hasMoreMessages) {\n loadMoreMessages();\n } else if (chatRef.current.scrollTop === 0 && hasMoreMessages && !isLoadingOldMessages) {\n chatRef.current?.scrollTo(0, 50);\n }\n }\n\n if (!(chatRef.current?.scrollTop! + chatRef.current?.offsetHeight! > chatRef.current?.scrollHeight! - 100)) {\n setScrollBottom(false);\n } else {\n setScrollBottom(true);\n }\n }, [hasMoreMessages, isLoadingOldMessages, chatAPI, setScrollBottom]);\n\n useEffect(() => {\n function loadMoreMessages() {\n setIsLoadingOldMessages(true);\n try {\n chatAPI.getOldMessages().then((data: any) => {\n if (scrollBottom) {\n footerRef?.current?.scrollIntoView({\n block: 'start',\n });\n }\n setHasMoreMessages(data.messages.length > 0);\n setIsLoadingOldMessages(false);\n });\n } catch (error) {\n setIsLoadingOldMessages(false);\n }\n }\n\n const messagesHeight = messagesRef?.current?.offsetHeight || 0;\n const chatHeight = chatRef?.current?.offsetHeight || 0;\n\n if (chat && messagesHeight !== 0 && messagesHeight < chatHeight && hasMoreMessages && !isLoadingOldMessages) {\n loadMoreMessages();\n }\n\n if (footerRef.current && messages.length > 0 && scrollBottom) {\n footerRef.current.scrollIntoView({\n block: 'start',\n });\n }\n }, [messages, scrollBottom, hasMoreMessages, isLoadingOldMessages, chat, chatAPI, sendingMessages]);\n\n const sortedMessages = (messages || []).sort((msgA, msgB) => {\n return (new Date(msgA.date).getTime()) - (new Date(msgB.date).getTime());\n });\n\n const isLastLoading = (message: any) => {\n let index = messages.findIndex((msg) => message._id === msg._id);\n if (index === -1 || !message.loading)\n return false;\n if (index === messages.length - 1 || (index + 1 < messages.length && !messages[index + 1].loading))\n return true;\n\n return false;\n }\n\n const allowedMessages = (messages || []).filter((msg: any) => msg.type !== MessageType.Internal && (!msg.loading || isLastLoading(msg))).sort((msgA, msgB) => {\n return (new Date(msgA.date).getTime()) - (new Date(msgB.date).getTime());\n });\n\n const canAnimate = (message: any): Boolean => {\n return (isMsgOut(message, chat?.communicationTool || communicationTool) || (sendingMessages || []).findIndex(el => el._id === message._id) !== -1)\n }\n return (\n \n \n {(isLoadingOldMessages || (hasMoreMessages && messages.length === 0)) && (\n \n \n \n \n \n )}\n {Object.values(getMessagesByDate(allowedMessages, sendingMessages)).map((messagesByDate: MessageModel[]) => (\n \n \n {messagesByDate.map((message: MessageModel, i: number) => (\n \n ))}\n \n ))}\n \n \n {\n (((!sendingMessages || sendingMessages.length === 0) && sortedMessages && sortedMessages.length && !sortedMessages[sortedMessages.length - 1].loading && sortedMessages[sortedMessages.length - 1].customKeyboards) || [])\n .map((keyboard, index) => (\n ))\n }\n \n );\n}\n\nexport default ChatBody;","import { IconButton, TextField } from \"@material-ui/core\";\nimport styled, { keyframes } from 'styled-components';\nimport { DEVICE } from '../../GlobalStyle';\n\nexport const Content = styled.div`\n width: 250px;\n padding: 0 20px 20px 20px;\n background-color: white;\n border-radius: 20px;\n`;\n\nexport const Input = styled(TextField)`\n && {\n margin-top: 10px;\n }\n && .inputRoot {\n font-weight: 300;\n }\n`;\n\nexport const Form = styled.form`\n display: flex;\n flex-direction: column;\n width: 100%;\n`;\n\nexport const SubmitButton = styled.button`\n margin-top: 15px;\n height: 35px;\n outline: none;\n cursor: pointer;\n border: unset;\n border-radius: 3px;\n display: flex;\n justify-content: center;\n align-items: center;\n`;\n\nexport const StyledIconButton = styled(IconButton)`\n && {\n padding: unset;\n :hover {\n background-color: unset;\n }\n }\n svg {\n width: 0.8em;\n }\n`;\n\nexport const Title = styled.p`\n font-size: 14px;\n margin: 1em 0 15px 0;\n`;\n\nexport const OtherAuth = styled.p`\n margin: 1em 0 1em 0;\n font-size: 13px;\n text-overflow: clip;\n width: 240px;\n text-align: center;\n a {\n text-decoration: none;\n :hover {\n text-decoration: underline;\n }\n }\n`;\n\n\nexport const Container = styled.div<{ primary?: string, secondary?: string, text?: string, isExpanded: boolean }>`\n height: 300px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n\n @media ${DEVICE.mobile} {\n height: calc(100vh - 50px);\n height: calc(100 * var(--vh) - 50px);\n }\n\n ${props => props.isExpanded ? `\n height: calc(100vh - 50px);\n height: calc(100 * var(--vh) - 50px);\n `\n :\n ``\n }\n\n ${SubmitButton} {\n background-color: ${props => props.primary}; \n color: ${props => props.secondary}; \n }\n\n ${Input} {\n & .focusedLabel {\n color: ${props => props.primary};\n }\n & .MuiInput-underline:after {\n border-bottom: 2px solid ${props => props.primary};\n }\n & .MuiInput-underline:hover::before {\n border-bottom: 2px solid ${props => props.primary};\n }\n }\n\n ${Content} {\n box-shadow: 0 3px 10px 0 rgba(0,0,0,.08), 0 0 1px 0 rgba(0,0,0,.22), inset 0 2px 0 0 ${props => props.primary};\n }\n\n ${Title} {\n color: ${props => props.text};\n }\n\n ${OtherAuth} {\n color: ${props => props.text};\n }\n`;\n\nexport const FormError = styled.p`\n font-size: 14px;\n color: red;\n margin-top: 6px;\n margin-bottom: -4px;\n text-align: center;\n`;\n\nconst rotation = keyframes`\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }`;\n\nexport const Loading = styled.div`\n :after {\n content: \" \";\n display: block;\n width: 14px;\n height: 14px;\n margin: 8px;\n border-radius: 50%;\n border: 6px solid #fff;\n border-color: #fff transparent #fff transparent;\n animation: ${rotation} 1.2s linear infinite;\n }\n`;\n\nexport const AuthError = styled.span`\n text-align: center;\n`;","import React, { useState } from 'react';\nimport { InputAdornment } from \"@material-ui/core\";\nimport { Visibility, VisibilityOff } from \"@material-ui/icons\";\nimport ChatAPI from '../../chat-api';\nimport { useTheme, useChatState, useAppState } from '../../data';\nimport {\n Container, Input, Form, Content, SubmitButton, StyledIconButton, Title,\n OtherAuth, FormError, Loading, AuthError\n} from './styles';\n\ninterface FormData {\n user: string;\n password: string;\n}\n\nconst FormComponent: React.FC = () => {\n const { getTranslation } = useAppState();\n const { setUser, authsConfig, setIsLoggingIn, isLoggingIn, isExpanded } = useChatState();\n const { isAnonymous } = useAppState();\n const { backgroundColor, titleColor } = useTheme().header!;\n const { iconsPanel } = useTheme().footer!;\n const chatAPI = new ChatAPI();\n const [showPassword, setShowPassword] = useState(false);\n const [formData, setFormData] = useState({\n user: '',\n password: ''\n });\n const [errors, setErrors] = useState({});\n\n const handleChange = (key: keyof FormData) => (e: React.ChangeEvent) => {\n setFormData({ ...formData, [key]: e.target.value });\n };\n\n const handleSubmit = (e: any) => {\n e.preventDefault();\n setIsLoggingIn(true);\n chatAPI.signIn(formData)\n .then(res => {\n setUser(res);\n localStorage.setItem('explorer_user', JSON.stringify(res));\n window.postMessage(JSON.stringify({\n subject: '_authenticate',\n body: res\n }), window.location.origin);\n let _chat = localStorage.getItem('_chat');\n if (_chat) {\n try {\n _chat = JSON.parse(_chat);\n return chatAPI.getChat(_chat).catch(() => Promise.resolve());\n } catch (e) { }\n }\n }).catch(err => {\n if (err === 401) {\n setIsLoggingIn(false);\n errors.form = getTranslation('FORM_ERROR_CREDENTIALS');\n setErrors({ ...errors });\n }\n else {\n setIsLoggingIn(false);\n errors.form = getTranslation('FORM_ERROR_UNEXPECTED_ERROR');\n setErrors({ ...errors });\n }\n });\n }\n\n const getShowPassword = () => {\n return (\n \n setShowPassword(prev => !prev)}>\n {!!formData.password ?\n showPassword ? : \n : <>}\n \n \n );\n }\n return (\n \n {isExpanded && {getTranslation('FORM_LOGIN_MESSAGE')}}\n {authsConfig?.some(auth => auth?.type === 'basic') &&\n \n {errors.form && {errors.form}}\n
\n \n \n \n {isLoggingIn ? : getTranslation('FORM_SIGNIN_BUTTON')}\n \n \n
}\n {authsConfig?.some(auth => auth?.type !== 'basic') &&\n {getTranslation('FORM_CUSTOM_AUTH_LABEL')}  \n {authsConfig\n .filter(auth => auth.type !== 'basic')\n .map(item => (\n {item.name}\n ))\n .reduce((prev, curr) => [prev, ` ${getTranslation('FORM_CUSTOM_AUTH_OR')} `, curr])\n }.\n \n }\n {(!isAnonymous && (!authsConfig || !authsConfig.length)) && {getTranslation('ERROR_NO_AUTHENTICATOR')}}\n \n );\n}\n\nexport default React.memo(FormComponent);","import { Collapse } from '@material-ui/core';\nimport { Skeleton } from '@material-ui/lab';\nimport styled, { css, keyframes } from 'styled-components';\nimport { DEVICE } from '../../GlobalStyle';\n\n\nconst WIDTH = 400;\n\nexport const Container = styled.div<{isExpanded: boolean, responsiveMode: boolean, showChat: boolean}>`\n background-color: #f1f1f1;\n width: ${props => props.isExpanded ? '100%' : `${WIDTH}px`};\n border-radius: ${props => props.isExpanded ? '0' : ` 7px 7px 0 0`};\n cursor: auto;\n\n @media ${DEVICE.mobile} {\n width: 100%;\n border-radius: 0;\n }\n\n ${props => props.responsiveMode ? `\n width: ${ props.isExpanded || !props.showChat ? '100%' : `${WIDTH}px`};\n border-radius: 0;\n\n ${ props.showChat ? `\n\n border-radius: 0;\n left: unset;\n right: unset;\n\n ` : ``}\n `: ``}\n`;\n\nexport const Content = styled.div`\n height: 100%;\n`;\n\nexport const Pulsing = keyframes`\n 0% {\n transform: scale(0.95);\n box-shadow: 0 0 0 0 rgba(0, 0, 0, 0.7);\n }\n\n 70% {\n transform: scale(1);\n box-shadow: 0 0 0 10px rgba(0, 0, 0, 0);\n }\n\n 100% {\n transform: scale(0.95);\n box-shadow: 0 0 0 0 rgba(0, 0, 0, 0);\n }\n`;\n\nexport const StyledCollapse = styled(Collapse)`\n z-index: 10000;\n position: fixed;\n bottom: 0;\n box-shadow: 0 20px 40px 8px rgba(0,0,0,.25);\n animation: ${props => ((props.isMobile || props.responsiveMode) && !props.showChat) ? css`${Pulsing} 1.25s infinite cubic-bezier(0.66, 0, 0, 1)` : ``};\n\n ${props => props.responsiveMode && !props.showChat ? `\n width: 65px;\n min-height: 65px;\n height: 65px;\n border-radius: 65px;\n bottom: 20px;\n transition: none !important;\n box-shadow: none;\n background-color:red;\n ` : ``}\n\n @media ${DEVICE.mobile} {\n width: 65px;\n min-height: 65px;\n height: 65px;\n border-radius: 65px;\n bottom: 20px;\n transition: none !important;\n box-shadow: none;\n\n ${props => props.horizontalPosition === 'center' ? `\n left: unset;\n right: 50%;\n margin: 0 -32.5px 0 auto;\n ` \n : props.horizontalPosition === 'left' ? `\n left: 20px;\n right: unset;\n `\n : props.horizontalPosition === 'right' ? `\n right: 20px;\n left: unset;\n `\n : props.customPosition?.left ? `\n left: ${props.customPosition.left}px;\n right: unset; \n `\n : `\n right: ${props.customPosition?.right}px;\n left: unset; \n `\n };\n\n ${props => props.showChat ? `\n width: 100vw;\n height: 100vh;\n height: calc(100 * var(--vh));\n bottom: 0;\n top: 0;\n left: 0;\n right: 0;\n border-radius: 0;\n ` : ``}\n }\n\n ${props => props.horizontalPosition === 'center' ? `\n left: unset;\n right: 50%;\n margin: 0 -${WIDTH/2}px 0 auto;\n ` \n : props.horizontalPosition === 'left' ? `\n left: 10px;\n right: unset;\n `\n : props.horizontalPosition === 'right' ? `\n right: 10px;\n left: unset;\n `\n : props.customPosition?.left ? `\n left: ${props.customPosition.left}px;\n right: unset; \n `\n : `\n right: ${props.customPosition?.right}px;\n left: unset; \n `\n };\n\n ${props => props.isExpanded ? `\n width: 100vw;\n height: 100vh;\n height: calc(100 * var(--vh));\n bottom: 0;\n top: 0;\n left: 0;\n right: 0;\n border-radius: 0;\n box-shadow: 0;\n ` : ``}\n\n\n`;\n\nexport const MessageSkeleton = styled(Skeleton)`\n border-radius: 7px;\n margin-bottom: 5px;\n`;\n\nexport const LoadingChat = styled.div<{hasFooter: boolean, isExpanded: boolean, responsiveMode: boolean}>`\n padding-left: 40px;\n padding-right:8px;\n padding-top: 15px;\n\n @media ${DEVICE.mobile} {\n height: calc(100vh - 50px - ${props => props.hasFooter ? 90 : 0}px);\n height: calc(100 * var(--vh) - 50px - ${props => props.hasFooter ? 90 : 0}px);\n }\n\n ${props => props.isExpanded ? `\n height: calc(100vh - 50px - ${props.hasFooter ? 90 : 0}px);\n height: calc(100 * var(--vh) - 50px - ${props.hasFooter ? 90 : 0}px);\n ` : `` }\n\n`;\n\nexport const StartMessages = styled.div`\n width: 100%;\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n margin-bottom: 10px;\n`;\n\nexport const EndMessages = styled.div`\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n`;","import React, { useState, useEffect } from 'react';\nimport ChatHeader, { ChatHeaderProps } from '../ChatHeader';\nimport ChatFooter, { ChatFooterProps } from '../ChatFooter';\nimport ChatBody, { ChatBodyProps } from '../ChatBody';\nimport Form from '../Form';\nimport ChatAPI, { Chat as ChatType, SD_ANONYMOUS_USER_ID, setGlobal } from '../../chat-api';\nimport { useAppState, useChatState, useTheme } from '../../data';\nimport {\n Container,\n Content,\n StyledCollapse,\n LoadingChat,\n StartMessages,\n MessageSkeleton,\n EndMessages,\n} from './styles';\nimport { getGlobal } from '../../chat-api';\n\nexport interface ChatProps {\n horizontalPosition?: 'left' | 'center' | 'right' | 'custom';\n customPosition?: {\n right?: number,\n left?: number\n };\n header?: ChatHeaderProps;\n body?: ChatBodyProps;\n footer?: ChatFooterProps;\n}\n\nconst Chat: React.FC = () => {\n const chatAPI = new ChatAPI();\n const {\n isLoading,\n isAnonymous,\n showAvatar,\n responsiveMode\n } = useAppState();\n const {\n isMobile,\n setIsMobile,\n isExpanded,\n showChat,\n user,\n setUser,\n setChat,\n setAvatarURL,\n avatarURL\n } = useChatState();\n const theme = useTheme();\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n const resizeCallback = () => {\n document.querySelector(':root')!.style\n .setProperty('--vh', `${window.innerHeight / 100}px`);\n }\n\n resizeCallback();\n window.addEventListener('resize', resizeCallback);\n return () => {\n window.removeEventListener('resize', resizeCallback);\n }\n }, [setIsMobile]);\n\n const handleEnter = () => {\n const anonymousLogin = () => {\n return isAnonymous ? chatAPI.validateToken(getGlobal('REACT_APP_ACCESS_TOKEN'))\n .then(res => {\n setUser(res);\n let _chat: any = localStorage.getItem('_chat');\n if (_chat) {\n try {\n _chat = JSON.parse(_chat);\n\n if (_chat?.communicationTool?._id === getGlobal('REACT_APP_SYDLE_CORPORATE_ACCOUNT_ID') && _chat?.client?._id === res.code) {\n return chatAPI.getChat(_chat).catch(() => Promise.resolve());\n }\n } catch (e) { }\n }\n }) : Promise.reject();\n };\n\n setLoading(true);\n const urlParams = new URLSearchParams(window.location.search.replace('?', ''));\n\n if (!isAnonymous || localStorage.getItem('explorer_user') || urlParams.get('accessToken')) {\n try {\n let user = JSON.parse(localStorage.getItem('explorer_user') as string);\n \n if (user && user.accessToken && user.accessToken.token && user.code !== SD_ANONYMOUS_USER_ID) { \n let application = user.accessToken.payload?.audiency?.[0] || getGlobal('REACT_APP_APPLICATION');\n setGlobal('REACT_APP_APPLICATION', application);\n\n chatAPI.renewToken(user.accessToken.token, application)\n .then(res => {\n localStorage.setItem('explorer_user', JSON.stringify(res));\n setUser(res);\n let _chat = localStorage.getItem('_chat') as any;\n if (_chat) {\n try {\n _chat = JSON.parse(_chat);\n if (_chat?.communicationTool?._id === getGlobal('REACT_APP_SYDLE_CORPORATE_ACCOUNT_ID') && _chat?.client?._id === res.code) {\n return chatAPI.getChat(_chat).catch(() => Promise.resolve());\n }\n } catch (e) { }\n }\n })\n .catch(() => anonymousLogin())\n .catch(() => setUser(null!))\n .finally(() => setLoading(false));\n } else if (urlParams.get('accessToken')) {\n const token = urlParams.get('accessToken') || '';\n chatAPI.renewToken(token)\n .then(res => {\n localStorage.setItem('explorer_user', JSON.stringify(res));\n setUser(res);\n let _chat = localStorage.getItem('_chat') as any;\n if (_chat) {\n try {\n _chat = JSON.parse(_chat);\n if (_chat?.communicationTool?._id === getGlobal('REACT_APP_SYDLE_CORPORATE_ACCOUNT_ID') && _chat?.client?._id === res.code) {\n return chatAPI.getChat(_chat).catch(() => Promise.resolve());\n }\n } catch (e) { }\n }\n })\n .catch(() => anonymousLogin())\n .catch(() => setUser(null!))\n .finally(() => setLoading(false));\n } else {\n if (isAnonymous) {\n anonymousLogin()\n .catch(() => setUser(null!))\n .finally(() => setLoading(false));\n } else {\n setLoading(false);\n setUser(null!);\n }\n }\n } catch (error) {\n console.error(error);\n }\n } else {\n anonymousLogin()\n .catch(() => setUser(null!))\n .finally(() => setLoading(false));\n }\n }\n\n useEffect(() => {\n const callback = (res: ChatType) => {\n if (res.communicationTool?.user?.photo) {\n chatAPI.downloadPhoto(res.communicationTool?.user?.photo).then(file => setAvatarURL(file.url));\n }\n\n setChat(res);\n };\n\n chatAPI.on('chat', callback);\n return () => {\n chatAPI.off('chat', callback);\n };\n }, [chatAPI, setChat, setAvatarURL]);\n\n return !isLoading ? (\n \n \n \n \n {loading ?\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n : user ?\n \n :\n
\n }\n {!loading && user && }\n \n \n \n ) : null;\n}\n\nexport default Chat;","import React, { useEffect, useState } from 'react';\nimport ChatAPI from './chat-api';\nimport Chat, { ChatProps } from './components/Chat';\nimport { useAppState, useChatState, useTheme } from './data/index';\nimport GlobalStyle from './GlobalStyle';\n\ninterface ChatContext {\n [key: string]: string;\n}\n\nconst ChatApp = React.memo(() => {\n const chatAPI = new ChatAPI();\n const {\n setInitialMessage,\n setShowAttendant,\n setIsAnonymous,\n setCommunicationTool,\n setShowAvatar,\n setResponsiveMode,\n setTranslationBundle,\n setHasVideo,\n setIsLoading\n } = useAppState();\n const { setTheme } = useTheme();\n\n useEffect(() => {\n chatAPI.getConfig().then((conf: any) => {\n setIsAnonymous(conf.anonymous);\n setInitialMessage(conf.initialMessage);\n setShowAttendant(conf.showAttendant);\n setCommunicationTool(conf.communicationTool);\n setTranslationBundle(conf.translationBundle);\n setHasVideo(conf.hasVideo);\n\n const UIConfig = conf.chatwebUIConfig as (ChatProps | null);\n setTheme((theme: ChatProps) => ({\n horizontalPosition: UIConfig?.horizontalPosition || theme.horizontalPosition,\n customPosition: UIConfig?.customPosition || theme.customPosition,\n header: {\n title: UIConfig?.header?.title || theme.header?.title,\n icon: UIConfig?.header?.icon || theme.header?.icon,\n logo: UIConfig?.header?.logo || theme.header?.logo,\n backgroundColor: UIConfig?.header?.backgroundColor || theme.header?.backgroundColor,\n titleColor: UIConfig?.header?.titleColor || theme.header?.titleColor\n },\n body: {\n backgroundColor: UIConfig?.body?.backgroundColor || theme.body?.backgroundColor,\n timeDividerBackgroundColor: UIConfig?.body?.timeDividerBackgroundColor || theme.body?.timeDividerBackgroundColor,\n timeDividerTextColor: UIConfig?.body?.timeDividerTextColor || theme.body?.timeDividerTextColor,\n buttonsColor: UIConfig?.body?.buttonsColor || theme.body?.buttonsColor,\n customer: {\n messageBackgroundColor: UIConfig?.body?.customer?.messageBackgroundColor || theme.body?.customer?.messageBackgroundColor,\n messageTextColor: UIConfig?.body?.customer?.messageTextColor || theme.body?.customer?.messageTextColor,\n messageHourTextColor: UIConfig?.body?.customer?.messageHourTextColor || theme.body?.customer?.messageHourTextColor,\n runnableTrackColor: UIConfig?.body?.customer?.runnableTrackColor || theme.body?.customer?.runnableTrackColor,\n sliderTrackColor: UIConfig?.body?.customer?.sliderTrackColor || theme.body?.customer?.sliderTrackColor,\n },\n enterprise: {\n messageBackgroundColor: UIConfig?.body?.enterprise?.messageBackgroundColor || theme.body?.enterprise?.messageBackgroundColor,\n messageTextColor: UIConfig?.body?.enterprise?.messageTextColor || theme.body?.enterprise?.messageTextColor,\n messageHourTextColor: UIConfig?.body?.enterprise?.messageHourTextColor || theme.body?.enterprise?.messageHourTextColor,\n runnableTrackColor: UIConfig?.body?.enterprise?.runnableTrackColor || theme.body?.enterprise?.runnableTrackColor,\n sliderTrackColor: UIConfig?.body?.enterprise?.sliderTrackColor || theme.body?.enterprise?.sliderTrackColor\n }\n },\n footer: {\n textInput: {\n textColor: UIConfig?.footer?.textInput?.textColor || theme.footer?.textInput?.textColor,\n backgroundColor: UIConfig?.footer?.textInput?.backgroundColor || theme.footer?.textInput?.backgroundColor,\n placeholderColor: UIConfig?.footer?.textInput?.placeholderColor || theme.footer?.textInput?.placeholderColor,\n sendIconColor: UIConfig?.footer?.textInput?.sendIconColor || theme.footer?.textInput?.sendIconColor\n },\n iconsPanel: {\n iconsBackgroundHoverColor: UIConfig?.footer?.iconsPanel?.iconsBackgroundHoverColor || theme.footer?.iconsPanel?.iconsBackgroundHoverColor,\n backgroundColor: UIConfig?.footer?.iconsPanel?.backgroundColor || theme.footer?.iconsPanel?.backgroundColor,\n iconsColor: UIConfig?.footer?.iconsPanel?.iconsColor || theme.footer?.iconsPanel?.iconsColor\n }\n }\n }));\n\n if (conf.chatwebUIConfig) {\n setShowAvatar(conf.chatwebUIConfig.showAvatar);\n setResponsiveMode(conf.chatwebUIConfig.forceResponsiveMode);\n }\n\n setIsLoading(false);\n });\n }, [chatAPI, setCommunicationTool, setHasVideo, setInitialMessage, setIsAnonymous, setIsLoading, setResponsiveMode, setShowAttendant, setShowAvatar, setTheme, setTranslationBundle]);\n\n return (\n <>\n \n \n \n )\n});\n\nfunction App() {\n const chatAPI = new ChatAPI();\n const [context, setContext] = useState({});\n const { chat } = useChatState();\n\n useEffect(() => {\n const callback = (event: MessageEvent) => {\n try {\n const data = JSON.parse(event.data);\n\n if ((data.subject === '_itemLoaded' || data.subject === 'getContext') && data.body) {\n setContext((oldContext) => ({ ...oldContext, ...data.body }));\n }\n } catch(_) {}\n };\n\n window.addEventListener('message', callback);\n\n // Envia a mensagem para obter o contexto\n window.parent.postMessage(JSON.stringify({ subject: 'getContext' }), '*');\n return () => {\n window.removeEventListener('message', callback);\n }\n }, []);\n\n useEffect(() => {\n if (chat && context && Object.keys(context).length) {\n chatAPI.addContext({ key: 'sd_portal', value: JSON.stringify(context) });\n }\n }, [chat, chatAPI, context]);\n\n return (\n \n );\n}\n\nexport default App;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport App from './App';\nimport GlobalState from './data';\n\nReactDOM.render(\n \n \n \n \n ,\n document.getElementById('⚛️')\n);\n","import { CancelTokenSource } from \"axios\";\nimport ChatAPI from './chat-api';\n\nexport function getGlobal(name: string): T {\n return (process.env?.[name] || window.SYDLE_CHAT_WEB_ENV?.[name])! as unknown as T;\n}\n\nexport function setGlobal(name: string, value: string) {\n if (process && process.env) {\n process.env[name] = value;\n }\n if (window.SYDLE_CHAT_WEB_ENV) {\n window.SYDLE_CHAT_WEB_ENV[name] = value;\n }\n}\n\nexport enum S1MessageType {\n ERROR = 'ERROR',\n WARNING = 'WARN',\n INFO = 'INFO',\n DEBUG = 'DEBUG'\n}\n\nexport enum FeaturedLocation {\n DETAILS = \"DETAILS\",\n RELATIONSHIP = \"RELATIONSHIP\",\n TIMELINE = \"TIMELINE\",\n PIPELINE = \"PIPELINE\"\n}\n\nexport enum ExecutionContext {\n OBJECT = \"OBJECT\",\n CLASS = \"CLASS\",\n}\n\nexport interface CustomFileType extends File {\n isDocument?: boolean;\n}\n\nexport const SD_ANONYMOUS_USER_ID = '5cbdb800dbab3e44afeae867';\nexport const CHAT_ANONYMOUS_USER_ID = '609e68846d5c2e645c104c12'\n\nexport interface AuthenticatorsConfig {\n allowPasswordRecovery?: boolean;\n authenticatorId: string;\n loginUrl?: string;\n getLogoutUrl?: string;\n hasLogout: boolean;\n identifier: string;\n name: string;\n type: string;\n}\n\nexport interface MenuMethod {\n executionContext: Array;\n exhibition: string;\n featuredLocation: Array;\n icon: string;\n identifier: string;\n inputClassId: string | null;\n maximumObjects: number | null;\n minimumObjects: number;\n name: string;\n outputClassId: string | null;\n}\n\nexport interface S1Message {\n code: string;\n context: string;\n text: string;\n type: S1MessageType\n}\n\nexport interface APIErrorResponse {\n contextMessages: S1Message[],\n generalMessages: S1Message[],\n _messages: S1Message[]\n}\n\nexport interface InfoCardFeatures {\n label: string,\n value: string[],\n}\n\nexport interface InfoCardLogo {\n classIdentifier: string,\n classPackageIdentifier: string,\n fileId: string,\n objectId: string,\n _classId: string,\n}\n\nexport interface InfoCard {\n _id: string,\n features: InfoCardFeatures[],\n logo: InfoCardLogo | null,\n type: string,\n canGet: boolean,\n ids: string[],\n}\n\nexport interface FileBean {\n contentType?: string;\n _id: string;\n _objId?: string;\n _classId?: string;\n collection?: string;\n hash?: string;\n length?: number;\n name?: string;\n storage?: string;\n}\n\nexport interface AclUser {\n _id: string;\n name: string;\n photo: FileBean | null;\n}\n\nexport interface CommunicationTool {\n number?: string;\n _id?: string;\n user?: AclUser;\n photo?: FileBean | null;\n}\n\nexport interface Client {\n _id: string;\n name: string;\n photo: FileBean | null;\n}\n\nexport interface Chat {\n _id: string;\n _class?: any;\n client: Client | null;\n communicationTool: CommunicationTool | null;\n processInstance?: {\n _id: string,\n _classId: string,\n classIdentifier: string,\n classPackageIdentifier: string\n };\n status: 'new' | 'inprogress' | 'completed';\n}\n\nexport interface KeyboardButton {\n type: 'text' | 'link';\n text: string;\n identifier?: string;\n}\n\nexport interface CustomKeyboard {\n buttons: KeyboardButton[];\n}\n\nexport enum MessageType {\n Audio = 'audio',\n Contacts = 'contacts',\n Document = 'document',\n Hsm = 'hsm',\n Image = 'image',\n Location = 'location',\n Text = 'text',\n Video = 'video',\n VideoConference = 'videoConference',\n Sticker = 'sticker',\n Internal = 'internal',\n}\n\nexport enum MessageStatus {\n Sent = 'sent',\n Delivered = 'delivered',\n Read = 'read',\n Failed = 'failed',\n Deleted = 'deleted',\n Queued = 'queued',\n}\n\nexport type MessageBodyClass = {\n _id: string\n};\n\nexport const messageClassId: string = '5e7ba9460fc22673073624d3';\n\nexport const TextMessageBodyClass: MessageBodyClass = {\n _id: '5e7baa930fc2267307362efd'\n};\n\nexport const MediaMessageBodyClass: MessageBodyClass = {\n _id: '5e7babd80fc22673073633c9'\n};\n\nexport const VideoConferenceMessageBodyClass: MessageBodyClass = {\n _id: '5f3e6829487dd1589e8ff45b'\n};\n\nexport const LocationMessageBodyClass: MessageBodyClass = {\n _id: '5e82089d9f864e38464166bc'\n};\n\nexport const TemplateMessageBodyClass: MessageBodyClass = {\n _id: '5e7c9bca0fc226730738b5e8'\n};\n\nexport const ContactsMessageBodyClass: MessageBodyClass = {\n _id: '5e8207cc9f864e38464157dc'\n};\n\nexport const MessageBodyTypeClass: {\n [Type in MessageType]: MessageBodyClass\n} = {\n [MessageType.Audio]: MediaMessageBodyClass,\n [MessageType.Contacts]: ContactsMessageBodyClass,\n [MessageType.Document]: MediaMessageBodyClass,\n [MessageType.Hsm]: TemplateMessageBodyClass,\n [MessageType.Image]: MediaMessageBodyClass,\n [MessageType.Location]: LocationMessageBodyClass,\n [MessageType.Text]: TextMessageBodyClass,\n [MessageType.Video]: MediaMessageBodyClass,\n [MessageType.VideoConference]: VideoConferenceMessageBodyClass,\n [MessageType.Sticker]: MediaMessageBodyClass,\n [MessageType.Internal]: TextMessageBodyClass,\n};\n\nexport interface BaseMessage {\n _id?: string;\n date: string | Date;\n from: CommunicationTool;\n chat?: Chat;\n type: MessageType;\n body: any;\n cancelToken?: CancelTokenSource;\n status: MessageStatus;\n error?: string;\n sendHash?: string;\n customKeyboards?: CustomKeyboard[];\n loading?: boolean;\n _lastUpdateDate?: string | Date;\n}\n\nexport interface TextMessage extends BaseMessage {\n type: MessageType.Text | MessageType.Internal;\n body: {\n _class?: MessageBodyClass,\n body: string,\n preview_url?: boolean,\n payload?: string\n }\n}\n\nexport interface MediaMessage extends BaseMessage {\n type: MessageType.Audio | MessageType.Document | MessageType.Image | MessageType.Video | MessageType.Sticker;\n body: {\n _class?: MessageBodyClass,\n type?: MessageType,\n file: FileBean,\n caption?: string,\n filename?: string\n }\n}\n\nexport interface VideoConferenceMessage extends BaseMessage {\n type: MessageType.VideoConference;\n body: {\n _class?: MessageBodyClass,\n videoConference?: any;\n status?: \"accepted\" | \"recorded\" | \"refused\";\n link: string;\n }\n}\n\nexport interface LocationMessage extends BaseMessage {\n type: MessageType.Location;\n body: {\n _class?: MessageBodyClass,\n coordinates: {\n type: 'Point',\n coordinates: number[]\n },\n name?: string,\n address?: string\n }\n}\n\nexport interface ContactsMessage extends BaseMessage {\n type: MessageType.Contacts;\n body: {\n _class?: MessageBodyClass,\n customers: any[]\n }\n}\n\nexport interface TemplateMessage extends BaseMessage {\n type: MessageType.Hsm;\n body: {\n _class?: MessageBodyClass,\n template: {\n _id: string;\n },\n preview?: string,\n }\n}\n\nexport type Message = TextMessage | MediaMessage | VideoConferenceMessage | LocationMessage | ContactsMessage | TemplateMessage;\n\nexport default ChatAPI;"],"sourceRoot":""}