Last active
March 26, 2021 10:05
-
-
Save Daltonic/95691ea892a18442150cc8ec3eafd003 to your computer and use it in GitHub Desktop.
Tinder clone Chat.vue
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<template> | |
<div id="chats"> | |
<div class="content-wrapper"> | |
<div class="content"> | |
<section class="msger"> | |
<header class="msger-header"> | |
<div class="msger-header-title"> | |
<div class="msger__avatar"> | |
<CometChatAvatar :image="user.avatar" /> | |
</div> | |
<div class="msger__avatar__details"> | |
<p>{{ user.name }}</p> | |
<small>{{ user.status }}</small> | |
</div> | |
</div> | |
</header> | |
<main ref="container" class="msger-chat"> | |
<div | |
class="msg-list" | |
v-for="message in messages" | |
:key="message.sentAt" | |
> | |
<div v-if="typeof message.text != 'undefined'"> | |
<div | |
v-if="message.receiverId !== user.uid" | |
class="msg left-msg" | |
> | |
<div class="msg--wrapper"> | |
<div class="bubble--wrapper"> | |
<CometChatAvatar | |
:image="user.avatar" | |
class="msg-img" | |
style="width: 50px; height: 50px" | |
/> | |
<div class="msg-bubble"> | |
<div class="msg-info"> | |
<div class="msg-info-name">{{ user.name }}</div> | |
</div> | |
<div class="msg-text">{{ message.text }}</div> | |
</div> | |
</div> | |
<div class="msg-info-time"> | |
{{ toReadableString(message.sentAt) }} | |
</div> | |
</div> | |
</div> | |
<div v-else class="msg right-msg"> | |
<div class="msg--wrapper"> | |
<div class="bubble--wrapper"> | |
<CometChatAvatar | |
:image="message.sender.avatar" | |
class="msg-img" | |
style="width: 50px; height: 50px" | |
/> | |
<div class="msg-bubble"> | |
<div class="msg-info"> | |
<div class="msg-info-name"> | |
{{ message.sender.name }} | |
</div> | |
</div> | |
<div class="msg-text">{{ message.text }}</div> | |
</div> | |
</div> | |
<div class="msg-info-time"> | |
<img | |
v-if=" | |
message.sentAt && | |
!message.deliveredAt && | |
!message.readAt | |
" | |
src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAFo9M/3AAAAAXNSR0IArs4c6QAAARdJREFUOBFjYEAGIiIiUQg+kBeB4EFZYmJiVnDB////M8I5WBmSkpImIAkmmCxQy0MYmwFogxGcQxYDaEIaTCPcKSA3/vv3T56JiYn11atXi2AKBopGdiQLuiNERUU9WVlZD8HEwSElLi4eBZTgcXBwYAGGmOyzZ89uwBTAvQk19p+AgMDiO3fu/IQpQKGBptigCNCFw0ysLSAPfvv2zZ+bm1vo69evj2H64OkFJoCNVlFR4bty5UoCUI6Xj4/vLDY1YDEFBQUOkE3ICiQkJBRAIQhMLAHY0jE8mEGagPFh8ffvXz0g8xMjI+MWFhYWjd+/fxsB2ddev359BNlgGBvFAJgg0DZrYNLUBvHZ2NgOIUcsTM3goQFXzEj1uzh+EwAAAABJRU5ErkJggg==" | |
alt="time" | |
class="message__timestamp__img" | |
/> | |
<img | |
v-else-if=" | |
message.sentAt && | |
message.deliveredAt && | |
!message.readAt | |
" | |
src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAFo9M/3AAAAAXNSR0IArs4c6QAAAWNJREFUOBFjYEAGEhISosh8BgaQCCNMSFJS0gTGZhARETECYbgAMgOuRUxMzAokwQhUGgGkmYD435s3b1aABBn+///PCMJgDskE0Mg0kCYYDTYGZOG/f//kmZiYWIFGr2NkZAx69erVIpJNp5IGmONgNIpfRUVFPVlZWe//+fNHnoWF5eGzZ89uMImLi0cBJXgcHBxYgD6Qtba2vg3yEUgS5CiwCVDj/gkICCz++PFjND8//9I7d+78RHE10BQbkACMRpGkKYeZkOkgz3379s2fm5tb6OvXr4/R+SjBhG6YiooK34cPH8KAcfyLj49vJVCeHRgIocC4/g3iwwNCQUGBA2QysgHAFK0ACj1gQgkApT0pKSk5ZD5MLdgFwLiw+Pv3rx5Q8BPQ9C3ASNL4/fu3EZB97fXr10eAIWsINMQUxodpBtEoXgDaZg2MRG2QBBsb2yFQZAINdwEargTjg+QGFwAAd+eJSUtUxzMAAAAASUVORK5CYII=" | |
alt="time" | |
class="message__timestamp__img" | |
/> | |
<img | |
v-else | |
src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAFo9M/3AAAAAXNSR0IArs4c6QAAAWdJREFUOBHNUrtKA1EQPXeNRUDxgVqLQj7AjWjAwh8QKyvbuIIgVhYWNhYWdhFBkugPpLOwt7CwSEQLrTQI1roB44Os7nhm4YZdCyWg4MDsmTOzM3dm7gXiMlUWN84B9RjrcouyBQOJOMmmqg0mMJ5S0IjhrzfELmpQWzYZdUJEjGpEOv6wZNSKxagMScEYzDHU63RjIgxwzvOGO67+Swm2OYupeN1sSY650DzxSFFjxi3JXcpgxunDQ8tHc2wA6bqPV06h24NT88zoe4h7Bv10D4bqDTwqajAh2aLsqcNiIvin5McbzVUkHTRwwms642BrX/m3BbjLcbZ/RX3i4JnWC/pDwTWLNZWfLhrf0flyBzKoldW2ki3LPG19jBdVDyNvz5j+CFFn8qVyTdZ/ow64uR2+sXXy25SDWa7do62Pfp9tr0yWZIMnb1tObEtiBN7wLk9Y1ahxkK8umUOOUSFdsLyd+W+MTyDvnh60pF/jAAAAAElFTkSuQmCC" | |
alt="time" | |
class="message__timestamp__img" | |
/> | |
{{ toReadableString(message.sentAt) }} | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
<div class="spacer"></div> | |
</main> | |
<form @submit.prevent="sendMessage()" class="msger-inputarea"> | |
<input | |
type="text" | |
class="msger-input" | |
placeholder="Enter your message..." | |
v-model.trim="message" | |
/> | |
<button type="submit" class="msger-send-btn">Send</button> | |
</form> | |
</section> | |
</div> | |
</div> | |
<SideBar /> | |
</div> | |
</template> | |
<script> | |
import { CometChat } from "@cometchat-pro/chat"; | |
import { CometChatAvatar } from "../cometchat-pro-vue-ui-kit"; | |
import SideBar from "../shared/SideBar"; | |
export default { | |
name: "chats", | |
props: { | |
uid: { | |
type: String, | |
required: true, | |
}, | |
}, | |
data() { | |
return { | |
messages: [], | |
message: "", | |
user: {}, | |
}; | |
}, | |
components: { | |
SideBar, | |
CometChatAvatar, | |
}, | |
created() { | |
this.getMessages(); | |
this.getUser(); | |
this.listenForMessage(); | |
}, | |
destroyed() { | |
CometChat.removeMessageListener(this.uid) | |
}, | |
updated() { | |
this.scrollToEnd() | |
}, | |
methods: { | |
getUser() { | |
const uid = this.uid; | |
CometChat.getUser(uid) | |
.then((user) => (this.user = user)) | |
.catch((error) => console.log(error)); | |
}, | |
getMessages() { | |
const limit = 50; | |
const messagesRequest = new CometChat.MessagesRequestBuilder() | |
.setLimit(limit) | |
.setUID(this.uid) | |
.build(); | |
messagesRequest | |
.fetchPrevious() | |
.then((messages) => { | |
messages.map((message, i) => { | |
if (!message.readAt) { | |
const messageId = message.id; | |
const receiverId = message.sender.uid; | |
const receiverType = "user"; | |
console.log({ i: i + 1, l: messages.length, r: receiverId, u: this.uid }); | |
if (i + 1 === messages.length && receiverId === this.uid) | |
CometChat.markAsRead(messageId, receiverId, receiverType); | |
} | |
}); | |
this.messages = messages; | |
}) | |
.catch((error) => console.log("Message fetching failed with error:", error)); | |
}, | |
sendMessage() { | |
const receiverID = this.uid; | |
const messageText = this.message; | |
const receiverType = CometChat.RECEIVER_TYPE.USER; | |
const textMessage = new CometChat.TextMessage( | |
receiverID, | |
messageText, | |
receiverType | |
); | |
CometChat.sendMessage(textMessage) | |
.then((message) => { | |
this.message = ""; | |
this.messages.push(message); | |
}) | |
.catch((error) => console.log("Message sending failed with error:", error)); | |
}, | |
listenForMessage() { | |
const listenerID = this.uid; | |
CometChat.addMessageListener( | |
listenerID, | |
new CometChat.MessageListener({ | |
onTextMessageReceived: (messageReceipt) => { | |
if (this.uid === messageReceipt.sender.uid) { | |
this.messages.push(messageReceipt); | |
const messageId = messageReceipt.id; | |
const receiverId = messageReceipt.sender.uid; | |
const receiverType = "user"; | |
CometChat.markAsRead(messageId, receiverId, receiverType); | |
} | |
}, | |
onMessagesDelivered: (messageReceipt) => { | |
this.messages.filter((msg) => (msg.deliveredAt = messageReceipt.deliveredAt)); | |
}, | |
onMessagesRead: (messageReceipt) => { | |
this.messages.filter((msg) => (msg.readAt = messageReceipt.readAt)); | |
}, | |
}) | |
); | |
}, | |
scrollToEnd () { | |
const elmnt = this.$refs.container; | |
elmnt.scrollTop = elmnt.scrollHeight; | |
}, | |
toReadableString(time) { | |
if (time < 0) time = 0; | |
let hrs = ~~((time / 3600) % 24), | |
mins = ~~((time % 3600) / 60), | |
timeType = hrs > 11 ? "PM" : "AM"; | |
if (hrs > 12) hrs = hrs - 12; | |
if (hrs == 0) hrs = 12; | |
if (mins < 10) mins = "0" + mins; | |
return hrs + ":" + mins + timeType; | |
}, | |
}, | |
watch: { | |
messages() { | |
this.scrollToEnd() | |
} | |
} | |
}; | |
</script> | |
<style scoped> | |
html { | |
background-color: #f9f9f9; | |
} | |
.wrapper { | |
position: relative; | |
} | |
.content-wrapper { | |
float: right; | |
width: 100%; | |
} | |
.content { | |
margin-left: 320px; | |
clear: both; | |
background: #f9f9ff; | |
overflow-y: hidden; | |
height: 100vh; | |
} | |
html { | |
box-sizing: border-box; | |
} | |
*, | |
*:before, | |
*:after { | |
margin: 0; | |
padding: 0; | |
box-sizing: inherit; | |
} | |
body { | |
display: flex; | |
justify-content: center; | |
align-items: center; | |
height: 100vh; | |
background-image: var(--body-bg); | |
font-family: Helvetica, sans-serif; | |
} | |
.msger { | |
height: calc(100% - 50px); | |
border: var(--border); | |
border-radius: 5px; | |
background: var(--msger-bg); | |
box-shadow: 0 15px 15px -5px rgba(0, 0, 0, 0.2); | |
} | |
.msger-header { | |
display: flex; | |
justify-content: space-between; | |
padding: 10px; | |
border-bottom: var(--border); | |
background: #ececff; | |
color: #666; | |
} | |
.msger-header-title { | |
display: flex; | |
align-items: center; | |
} | |
.msger-chat { | |
flex: 1; | |
overflow-y: auto; | |
padding: 10px; | |
height: 100vh; | |
} | |
.msger-chat::-webkit-scrollbar { | |
width: 6px; | |
} | |
.msger-chat::-webkit-scrollbar-track { | |
background: #ddd; | |
} | |
.msger-chat::-webkit-scrollbar-thumb { | |
background: #bdbdbd; | |
} | |
.msg { | |
display: flex; | |
align-items: flex-end; | |
} | |
.msg-list { | |
margin: 10px 0; | |
} | |
.msg-img { | |
width: 50px; | |
height: 50px; | |
margin-right: 10px; | |
background: #ddd; | |
background-repeat: no-repeat; | |
background-position: center; | |
background-size: cover; | |
border-radius: 50%; | |
} | |
.msg-bubble { | |
max-width: 450px; | |
padding: 15px; | |
border-radius: 15px; | |
background: var(--left-msg-bg); | |
} | |
.msg-info { | |
display: flex; | |
justify-content: space-between; | |
align-items: center; | |
margin-bottom: 10px; | |
} | |
.msg-info-name { | |
margin-right: 10px; | |
font-weight: bold; | |
} | |
.msg-info-time { | |
font-size: 0.85em; | |
display: flex; | |
margin-top: 10px; | |
} | |
.left-msg .msg-bubble { | |
border-bottom-left-radius: 0; | |
} | |
.right-msg { | |
flex-direction: row-reverse; | |
} | |
.right-msg .msg-bubble { | |
background: rgb(233, 12, 119); | |
background: linear-gradient( | |
90deg, | |
rgba(233, 12, 119, 1) 0%, | |
rgba(241, 96, 89, 1) 100% | |
); | |
color: #fff; | |
border-bottom-right-radius: 0; | |
} | |
.right-msg .msg-img { | |
margin: 0 0 0 10px; | |
} | |
.left-msg .msg-bubble { | |
display: inline-block; | |
border-radius: 12px; | |
background-color: rgb(246, 246, 246); | |
padding: 8px 12px; | |
align-self: flex-start; | |
width: auto; | |
} | |
.msger-inputarea { | |
padding: 10px; | |
border-top: var(--border); | |
background: #eee; | |
position: fixed; | |
bottom: 0; | |
width: 100vw; | |
} | |
.msger-inputarea * { | |
padding: 10px; | |
border: none; | |
border-radius: 3px; | |
font-size: 1em; | |
} | |
.msger-input { | |
flex: 1; | |
width: calc(100% - 425px); | |
background: #ddd; | |
} | |
.msger-send-btn { | |
margin-left: 10px; | |
background: rgb(233, 12, 119); | |
color: #fff; | |
font-weight: bold; | |
cursor: pointer; | |
transition: background 0.23s; | |
} | |
.msger-send-btn:hover { | |
background: rgb(241, 96, 89); | |
} | |
.msger-chat { | |
background-color: #fcfcfe; | |
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='260' height='260' viewBox='0 0 260 260'%3E%3Cg fill-rule='evenodd'%3E%3Cg fill='%23dddddd' fill-opacity='0.4'%3E%3Cpath d='M24.37 16c.2.65.39 1.32.54 2H21.17l1.17 2.34.45.9-.24.11V28a5 5 0 0 1-2.23 8.94l-.02.06a8 8 0 0 1-7.75 6h-20a8 8 0 0 1-7.74-6l-.02-.06A5 5 0 0 1-17.45 28v-6.76l-.79-1.58-.44-.9.9-.44.63-.32H-20a23.01 23.01 0 0 1 44.37-2zm-36.82 2a1 1 0 0 0-.44.1l-3.1 1.56.89 1.79 1.31-.66a3 3 0 0 1 2.69 0l2.2 1.1a1 1 0 0 0 .9 0l2.21-1.1a3 3 0 0 1 2.69 0l2.2 1.1a1 1 0 0 0 .9 0l2.21-1.1a3 3 0 0 1 2.69 0l2.2 1.1a1 1 0 0 0 .86.02l2.88-1.27a3 3 0 0 1 2.43 0l2.88 1.27a1 1 0 0 0 .85-.02l3.1-1.55-.89-1.79-1.42.71a3 3 0 0 1-2.56.06l-2.77-1.23a1 1 0 0 0-.4-.09h-.01a1 1 0 0 0-.4.09l-2.78 1.23a3 3 0 0 1-2.56-.06l-2.3-1.15a1 1 0 0 0-.45-.11h-.01a1 1 0 0 0-.44.1L.9 19.22a3 3 0 0 1-2.69 0l-2.2-1.1a1 1 0 0 0-.45-.11h-.01a1 1 0 0 0-.44.1l-2.21 1.11a3 3 0 0 1-2.69 0l-2.2-1.1a1 1 0 0 0-.45-.11h-.01zm0-2h-4.9a21.01 21.01 0 0 1 39.61 0h-2.09l-.06-.13-.26.13h-32.31zm30.35 7.68l1.36-.68h1.3v2h-36v-1.15l.34-.17 1.36-.68h2.59l1.36.68a3 3 0 0 0 2.69 0l1.36-.68h2.59l1.36.68a3 3 0 0 0 2.69 0L2.26 23h2.59l1.36.68a3 3 0 0 0 2.56.06l1.67-.74h3.23l1.67.74a3 3 0 0 0 2.56-.06zM-13.82 27l16.37 4.91L18.93 27h-32.75zm-.63 2h.34l16.66 5 16.67-5h.33a3 3 0 1 1 0 6h-34a3 3 0 1 1 0-6zm1.35 8a6 6 0 0 0 5.65 4h20a6 6 0 0 0 5.66-4H-13.1z'/%3E%3Cpath id='path6_fill-copy' d='M284.37 16c.2.65.39 1.32.54 2H281.17l1.17 2.34.45.9-.24.11V28a5 5 0 0 1-2.23 8.94l-.02.06a8 8 0 0 1-7.75 6h-20a8 8 0 0 1-7.74-6l-.02-.06a5 5 0 0 1-2.24-8.94v-6.76l-.79-1.58-.44-.9.9-.44.63-.32H240a23.01 23.01 0 0 1 44.37-2zm-36.82 2a1 1 0 0 0-.44.1l-3.1 1.56.89 1.79 1.31-.66a3 3 0 0 1 2.69 0l2.2 1.1a1 1 0 0 0 .9 0l2.21-1.1a3 3 0 0 1 2.69 0l2.2 1.1a1 1 0 0 0 .9 0l2.21-1.1a3 3 0 0 1 2.69 0l2.2 1.1a1 1 0 0 0 .86.02l2.88-1.27a3 3 0 0 1 2.43 0l2.88 1.27a1 1 0 0 0 .85-.02l3.1-1.55-.89-1.79-1.42.71a3 3 0 0 1-2.56.06l-2.77-1.23a1 1 0 0 0-.4-.09h-.01a1 1 0 0 0-.4.09l-2.78 1.23a3 3 0 0 1-2.56-.06l-2.3-1.15a1 1 0 0 0-.45-.11h-.01a1 1 0 0 0-.44.1l-2.21 1.11a3 3 0 0 1-2.69 0l-2.2-1.1a1 1 0 0 0-.45-.11h-.01a1 1 0 0 0-.44.1l-2.21 1.11a3 3 0 0 1-2.69 0l-2.2-1.1a1 1 0 0 0-.45-.11h-.01zm0-2h-4.9a21.01 21.01 0 0 1 39.61 0h-2.09l-.06-.13-.26.13h-32.31zm30.35 7.68l1.36-.68h1.3v2h-36v-1.15l.34-.17 1.36-.68h2.59l1.36.68a3 3 0 0 0 2.69 0l1.36-.68h2.59l1.36.68a3 3 0 0 0 2.69 0l1.36-.68h2.59l1.36.68a3 3 0 0 0 2.56.06l1.67-.74h3.23l1.67.74a3 3 0 0 0 2.56-.06zM246.18 27l16.37 4.91L278.93 27h-32.75zm-.63 2h.34l16.66 5 16.67-5h.33a3 3 0 1 1 0 6h-34a3 3 0 1 1 0-6zm1.35 8a6 6 0 0 0 5.65 4h20a6 6 0 0 0 5.66-4H246.9z'/%3E%3Cpath d='M159.5 21.02A9 9 0 0 0 151 15h-42a9 9 0 0 0-8.5 6.02 6 6 0 0 0 .02 11.96A8.99 8.99 0 0 0 109 45h42a9 9 0 0 0 8.48-12.02 6 6 0 0 0 .02-11.96zM151 17h-42a7 7 0 0 0-6.33 4h54.66a7 7 0 0 0-6.33-4zm-9.34 26a8.98 8.98 0 0 0 3.34-7h-2a7 7 0 0 1-7 7h-4.34a8.98 8.98 0 0 0 3.34-7h-2a7 7 0 0 1-7 7h-4.34a8.98 8.98 0 0 0 3.34-7h-2a7 7 0 0 1-7 7h-7a7 7 0 1 1 0-14h42a7 7 0 1 1 0 14h-9.34zM109 27a9 9 0 0 0-7.48 4H101a4 4 0 1 1 0-8h58a4 4 0 0 1 0 8h-.52a9 9 0 0 0-7.48-4h-42z'/%3E%3Cpath d='M39 115a8 8 0 1 0 0-16 8 8 0 0 0 0 16zm6-8a6 6 0 1 1-12 0 6 6 0 0 1 12 0zm-3-29v-2h8v-6H40a4 4 0 0 0-4 4v10H22l-1.33 4-.67 2h2.19L26 130h26l3.81-40H58l-.67-2L56 84H42v-6zm-4-4v10h2V74h8v-2h-8a2 2 0 0 0-2 2zm2 12h14.56l.67 2H22.77l.67-2H40zm13.8 4H24.2l3.62 38h22.36l3.62-38z'/%3E%3Cpath d='M129 92h-6v4h-6v4h-6v14h-3l.24 2 3.76 32h36l3.76-32 .24-2h-3v-14h-6v-4h-6v-4h-8zm18 22v-12h-4v4h3v8h1zm-3 0v-6h-4v6h4zm-6 6v-16h-4v19.17c1.6-.7 2.97-1.8 4-3.17zm-6 3.8V100h-4v23.8a10.04 10.04 0 0 0 4 0zm-6-.63V104h-4v16a10.04 10.04 0 0 0 4 3.17zm-6-9.17v-6h-4v6h4zm-6 0v-8h3v-4h-4v12h1zm27-12v-4h-4v4h3v4h1v-4zm-6 0v-8h-4v4h3v4h1zm-6-4v-4h-4v8h1v-4h3zm-6 4v-4h-4v8h1v-4h3zm7 24a12 12 0 0 0 11.83-10h7.92l-3.53 30h-32.44l-3.53-30h7.92A12 12 0 0 0 130 126z'/%3E%3Cpath d='M212 86v2h-4v-2h4zm4 0h-2v2h2v-2zm-20 0v.1a5 5 0 0 0-.56 9.65l.06.25 1.12 4.48a2 2 0 0 0 1.94 1.52h.01l7.02 24.55a2 2 0 0 0 1.92 1.45h4.98a2 2 0 0 0 1.92-1.45l7.02-24.55a2 2 0 0 0 1.95-1.52L224.5 96l.06-.25a5 5 0 0 0-.56-9.65V86a14 14 0 0 0-28 0zm4 0h6v2h-9a3 3 0 1 0 0 6H223a3 3 0 1 0 0-6H220v-2h2a12 12 0 1 0-24 0h2zm-1.44 14l-1-4h24.88l-1 4h-22.88zm8.95 26l-6.86-24h18.7l-6.86 24h-4.98zM150 242a22 22 0 1 0 0-44 22 22 0 0 0 0 44zm24-22a24 24 0 1 1-48 0 24 24 0 0 1 48 0zm-28.38 17.73l2.04-.87a6 6 0 0 1 4.68 0l2.04.87a2 2 0 0 0 2.5-.82l1.14-1.9a6 6 0 0 1 3.79-2.75l2.15-.5a2 2 0 0 0 1.54-2.12l-.19-2.2a6 6 0 0 1 1.45-4.46l1.45-1.67a2 2 0 0 0 0-2.62l-1.45-1.67a6 6 0 0 1-1.45-4.46l.2-2.2a2 2 0 0 0-1.55-2.13l-2.15-.5a6 6 0 0 1-3.8-2.75l-1.13-1.9a2 2 0 0 0-2.5-.8l-2.04.86a6 6 0 0 1-4.68 0l-2.04-.87a2 2 0 0 0-2.5.82l-1.14 1.9a6 6 0 0 1-3.79 2.75l-2.15.5a2 2 0 0 0-1.54 2.12l.19 2.2a6 6 0 0 1-1.45 4.46l-1.45 1.67a2 2 0 0 0 0 2.62l1.45 1.67a6 6 0 0 1 1.45 4.46l-.2 2.2a2 2 0 0 0 1.55 2.13l2.15.5a6 6 0 0 1 3.8 2.75l1.13 1.9a2 2 0 0 0 2.5.8zm2.82.97a4 4 0 0 1 3.12 0l2.04.87a4 4 0 0 0 4.99-1.62l1.14-1.9a4 4 0 0 1 2.53-1.84l2.15-.5a4 4 0 0 0 3.09-4.24l-.2-2.2a4 4 0 0 1 .97-2.98l1.45-1.67a4 4 0 0 0 0-5.24l-1.45-1.67a4 4 0 0 1-.97-2.97l.2-2.2a4 4 0 0 0-3.09-4.25l-2.15-.5a4 4 0 0 1-2.53-1.84l-1.14-1.9a4 4 0 0 0-5-1.62l-2.03.87a4 4 0 0 1-3.12 0l-2.04-.87a4 4 0 0 0-4.99 1.62l-1.14 1.9a4 4 0 0 1-2.53 1.84l-2.15.5a4 4 0 0 0-3.09 4.24l.2 2.2a4 4 0 0 1-.97 2.98l-1.45 1.67a4 4 0 0 0 0 5.24l1.45 1.67a4 4 0 0 1 .97 2.97l-.2 2.2a4 4 0 0 0 3.09 4.25l2.15.5a4 4 0 0 1 2.53 1.84l1.14 1.9a4 4 0 0 0 5 1.62l2.03-.87zM152 207a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm6 2a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm-11 1a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm-6 0a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm3-5a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm-8 8a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm3 6a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm0 6a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm4 7a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm5-2a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm5 4a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm4-6a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm6-4a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm-4-3a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm4-3a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm-5-4a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm-24 6a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm16 5a5 5 0 1 0 0-10 5 5 0 0 0 0 10zm7-5a7 7 0 1 1-14 0 7 7 0 0 1 14 0zm86-29a1 1 0 0 0 0 2h2a1 1 0 0 0 0-2h-2zm19 9a1 1 0 0 1 1-1h2a1 1 0 0 1 0 2h-2a1 1 0 0 1-1-1zm-14 5a1 1 0 0 0 0 2h2a1 1 0 0 0 0-2h-2zm-25 1a1 1 0 0 0 0 2h2a1 1 0 0 0 0-2h-2zm5 4a1 1 0 0 0 0 2h2a1 1 0 0 0 0-2h-2zm9 0a1 1 0 0 1 1-1h2a1 1 0 0 1 0 2h-2a1 1 0 0 1-1-1zm15 1a1 1 0 0 1 1-1h2a1 1 0 0 1 0 2h-2a1 1 0 0 1-1-1zm12-2a1 1 0 0 0 0 2h2a1 1 0 0 0 0-2h-2zm-11-14a1 1 0 0 1 1-1h2a1 1 0 0 1 0 2h-2a1 1 0 0 1-1-1zm-19 0a1 1 0 0 0 0 2h2a1 1 0 0 0 0-2h-2zm6 5a1 1 0 0 1 1-1h2a1 1 0 0 1 0 2h-2a1 1 0 0 1-1-1zm-25 15c0-.47.01-.94.03-1.4a5 5 0 0 1-1.7-8 3.99 3.99 0 0 1 1.88-5.18 5 5 0 0 1 3.4-6.22 3 3 0 0 1 1.46-1.05 5 5 0 0 1 7.76-3.27A30.86 30.86 0 0 1 246 184c6.79 0 13.06 2.18 18.17 5.88a5 5 0 0 1 7.76 3.27 3 3 0 0 1 1.47 1.05 5 5 0 0 1 3.4 6.22 4 4 0 0 1 1.87 5.18 4.98 4.98 0 0 1-1.7 8c.02.46.03.93.03 1.4v1h-62v-1zm.83-7.17a30.9 30.9 0 0 0-.62 3.57 3 3 0 0 1-.61-4.2c.37.28.78.49 1.23.63zm1.49-4.61c-.36.87-.68 1.76-.96 2.68a2 2 0 0 1-.21-3.71c.33.4.73.75 1.17 1.03zm2.32-4.54c-.54.86-1.03 1.76-1.49 2.68a3 3 0 0 1-.07-4.67 3 3 0 0 0 1.56 1.99zm1.14-1.7c.35-.5.72-.98 1.1-1.46a1 1 0 1 0-1.1 1.45zm5.34-5.77c-1.03.86-2 1.79-2.9 2.77a3 3 0 0 0-1.11-.77 3 3 0 0 1 4-2zm42.66 2.77c-.9-.98-1.87-1.9-2.9-2.77a3 3 0 0 1 4.01 2 3 3 0 0 0-1.1.77zm1.34 1.54c.38.48.75.96 1.1 1.45a1 1 0 1 0-1.1-1.45zm3.73 5.84c-.46-.92-.95-1.82-1.5-2.68a3 3 0 0 0 1.57-1.99 3 3 0 0 1-.07 4.67zm1.8 4.53c-.29-.9-.6-1.8-.97-2.67.44-.28.84-.63 1.17-1.03a2 2 0 0 1-.2 3.7zm1.14 5.51c-.14-1.21-.35-2.4-.62-3.57.45-.14.86-.35 1.23-.63a2.99 2.99 0 0 1-.6 4.2zM275 214a29 29 0 0 0-57.97 0h57.96zM72.33 198.12c-.21-.32-.34-.7-.34-1.12v-12h-2v12a4.01 4.01 0 0 0 7.09 2.54c.57-.69.91-1.57.91-2.54v-12h-2v12a1.99 1.99 0 0 1-2 2 2 2 0 0 1-1.66-.88zM75 176c.38 0 .74-.04 1.1-.12a4 4 0 0 0 6.19 2.4A13.94 13.94 0 0 1 84 185v24a6 6 0 0 1-6 6h-3v9a5 5 0 1 1-10 0v-9h-3a6 6 0 0 1-6-6v-24a14 14 0 0 1 14-14 5 5 0 0 0 5 5zm-17 15v12a1.99 1.99 0 0 0 1.22 1.84 2 2 0 0 0 2.44-.72c.21-.32.34-.7.34-1.12v-12h2v12a3.98 3.98 0 0 1-5.35 3.77 3.98 3.98 0 0 1-.65-.3V209a4 4 0 0 0 4 4h16a4 4 0 0 0 4-4v-24c.01-1.53-.23-2.88-.72-4.17-.43.1-.87.16-1.28.17a6 6 0 0 1-5.2-3 7 7 0 0 1-6.47-4.88A12 12 0 0 0 58 185v6zm9 24v9a3 3 0 1 0 6 0v-9h-6z'/%3E%3Cpath d='M-17 191a1 1 0 0 0 0 2h2a1 1 0 0 0 0-2h-2zm19 9a1 1 0 0 1 1-1h2a1 1 0 0 1 0 2H3a1 1 0 0 1-1-1zm-14 5a1 1 0 0 0 0 2h2a1 1 0 0 0 0-2h-2zm-25 1a1 1 0 0 0 0 2h2a1 1 0 0 0 0-2h-2zm5 4a1 1 0 0 0 0 2h2a1 1 0 0 0 0-2h-2zm9 0a1 1 0 0 1 1-1h2a1 1 0 0 1 0 2h-2a1 1 0 0 1-1-1zm15 1a1 1 0 0 1 1-1h2a1 1 0 0 1 0 2h-2a1 1 0 0 1-1-1zm12-2a1 1 0 0 0 0 2h2a1 1 0 0 0 0-2H4zm-11-14a1 1 0 0 1 1-1h2a1 1 0 0 1 0 2h-2a1 1 0 0 1-1-1zm-19 0a1 1 0 0 0 0 2h2a1 1 0 0 0 0-2h-2zm6 5a1 1 0 0 1 1-1h2a1 1 0 0 1 0 2h-2a1 1 0 0 1-1-1zm-25 15c0-.47.01-.94.03-1.4a5 5 0 0 1-1.7-8 3.99 3.99 0 0 1 1.88-5.18 5 5 0 0 1 3.4-6.22 3 3 0 0 1 1.46-1.05 5 5 0 0 1 7.76-3.27A30.86 30.86 0 0 1-14 184c6.79 0 13.06 2.18 18.17 5.88a5 5 0 0 1 7.76 3.27 3 3 0 0 1 1.47 1.05 5 5 0 0 1 3.4 6.22 4 4 0 0 1 1.87 5.18 4.98 4.98 0 0 1-1.7 8c.02.46.03.93.03 1.4v1h-62v-1zm.83-7.17a30.9 30.9 0 0 0-.62 3.57 3 3 0 0 1-.61-4.2c.37.28.78.49 1.23.63zm1.49-4.61c-.36.87-.68 1.76-.96 2.68a2 2 0 0 1-.21-3.71c.33.4.73.75 1.17 1.03zm2.32-4.54c-.54.86-1.03 1.76-1.49 2.68a3 3 0 0 1-.07-4.67 3 3 0 0 0 1.56 1.99zm1.14-1.7c.35-.5.72-.98 1.1-1.46a1 1 0 1 0-1.1 1.45zm5.34-5.77c-1.03.86-2 1.79-2.9 2.77a3 3 0 0 0-1.11-.77 3 3 0 0 1 4-2zm42.66 2.77c-.9-.98-1.87-1.9-2.9-2.77a3 3 0 0 1 4.01 2 3 3 0 0 0-1.1.77zm1.34 1.54c.38.48.75.96 1.1 1.45a1 1 0 1 0-1.1-1.45zm3.73 5.84c-.46-.92-.95-1.82-1.5-2.68a3 3 0 0 0 1.57-1.99 3 3 0 0 1-.07 4.67zm1.8 4.53c-.29-.9-.6-1.8-.97-2.67.44-.28.84-.63 1.17-1.03a2 2 0 0 1-.2 3.7zm1.14 5.51c-.14-1.21-.35-2.4-.62-3.57.45-.14.86-.35 1.23-.63a2.99 2.99 0 0 1-.6 4.2zM15 214a29 29 0 0 0-57.97 0h57.96z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E"); | |
} | |
.spacer { | |
margin-bottom: 150px; | |
} | |
.msger__avatar { | |
width: 40px; | |
height: 40px; | |
margin-right: 10px; | |
} | |
.msger__avatar img, | |
.msg-img { | |
object-fit: cover; | |
} | |
.msger__options span { | |
margin: 0 5px; | |
cursor: pointer; | |
} | |
.right-msg .bubble--wrapper { | |
display: flex; | |
justify-content: center; | |
align-items: center; | |
flex-direction: row-reverse; | |
} | |
.left-msg .bubble--wrapper { | |
display: flex; | |
justify-content: center; | |
align-items: center; | |
} | |
@media only screen and (max-width: 768px) { | |
.content { | |
margin-left: 0; | |
} | |
.msger-input { | |
width: calc(100% - 105px); | |
} | |
} | |
:root { | |
--body-bg: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%); | |
--msger-bg: #fff; | |
--border: 2px solid #ddd; | |
--left-msg-bg: #ececec; | |
--right-msg-bg: #579ffb; | |
} | |
</style> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment