Files
im_webapp/umd/280.prod.js
T
Your NameandClaude Sonnet 5 eb4c1cd8da 用登录页现有logo重新生成PWA图标/favicon/OG分享图;顺手发现并重建了严重过期的生产构建产物
图标部分:logo.svg/logo96.png/logo192.png/logo32x32.png/logo32x32a.png原来画的是开源Tinode
项目自己的蓝绿橙"t"speech-bubble标志。用登录页AppMark组件的真实CSS参数(白色圆角方卡 + 旋转
-18deg的蓝色squircle + 加粗白色首字母,色值#1677ff,圆角50% 50% 50% 18%)原样重新画成独立
的SVG/PNG资源,不是另起一套新设计——文字/图标/圆角比例/旋转角度均按登录页实测的computed style
数值1:1还原。favicon(32x32)的"未读"变体(右下角绿点)沿用原有的visual language。

og-logo.jpeg(社交分享预览图,og:image meta标签用)问题比图标本身更明显:原图整个背景是金门大桥
照片,前景写着"Tinode / Open Source Instant Messenger",这两行文字是本次engagement里最直接的
一处Tinode品牌泄漏(没有隐藏在代码里,链接分享出去别人就直接看到)。改成深色渐变背景+同一套
logo mark+"MeetingIM"+"即时通讯",不再引用任何第三方项目的名字或素材。

意外发现:umd/index.prod.js(生产构建产物,index.html的<script>直接引用)从很早之前就没有
重新构建过,仍然包含"TinodeWeb"/"web.tinode.co"/tinode.co的隐私政策与服务条款链接/
support@tinode.co邮箱等一整套本轮及更早各轮已经在源码里修掉的Tinode字样——如果这份产物被
原样部署,之前所有品牌清理都不会真正体现在生产环境。已用`npm run build:prod`重新构建(干净
通过,只有两条跟本次改动无关的资源体积警告),确认重建后的产物里"MeetingIM"正确替换了旧品牌名、
真实域名替换了tinode.co。这次只重新生成了产物文件,没有执行任何部署动作。

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-05 23:30:11 +08:00

2 lines
133 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"use strict";(self.webpackChunktinode_webapp=self.webpackChunktinode_webapp||[]).push([[280],{9280:function(e,t,s){s.r(t),s.d(t,{default:function(){return ee}});var i=s(1594),n=s.n(i),a=s(8181),o=s(4532),r=s(4752),l=s(8353),h=s(7256),d=s(7849),c=s(4848);const p={image:["image","#3ba55c"],video:["videocam","#3b82c4"],audio:["audiotrack","#8b5cf6"],document:["description","#e05d44"],file:["insert_drive_file","#8a8f98"]};class u extends n().Component{constructor(e){super(e),this.state={downloader:null,progress:0},this.downloadFile=this.downloadFile.bind(this),this.handleCancel=this.handleCancel.bind(this)}downloadFile(e,t,s){if(!e)return void this.props.onError("Invalid download URL '"+e+"'");const i=(0,l.mO)(this.props.tinode);this.setState({downloader:i}),i.download(e,t,s,e=>this.setState({progress:e/this.props.size}),e=>this.props.onError(e,"err")).then(e=>this.setState({downloader:null,progress:0})).catch(e=>{e&&this.props.onError("Error downloading file: "+e.message,"err"),this.setState({downloader:null,progress:0})})}handleCancel(){this.props.uploading?this.props.onCancelUpload():this.state.downloader&&this.state.downloader.cancel()}render(){let e=this.props.filename||"file_attachment";e.length>36&&(e=e.substr(0,16)+"..."+e.substr(-16));let t,s,i=this.props.size>0?(0,c.jsxs)("span",{className:"small gray",children:["(",(0,h.lX)(this.props.size),")"]}):null;this.props.uploading||this.state.downloader||!(0,d.YO)(this.props.downloadUrl)?(t=(0,d.Jf)(this.props.downloadUrl),s=null):(t="#",s=e=>{e.preventDefault(),this.downloadFile(this.props.downloadUrl,this.props.filename,this.props.mimetype)});const n=(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)("i",{className:"material-icons",children:"file_download"})," ",(0,c.jsx)(a.FormattedMessage,{id:"save_attachment",defaultMessage:"save",description:"Call to save an attachment"})]}),[o,l]=p[function(e){const t=(e||"").toLowerCase();return t.startsWith("image/")?"image":t.startsWith("video/")?"video":t.startsWith("audio/")?"audio":"application/pdf"===t||"text/plain"===t||t.includes("msword")||t.includes("wordprocessingml")||t.includes("spreadsheetml")||t.includes("presentationml")||"application/vnd.ms-excel"===t||"application/vnd.ms-powerpoint"===t?"document":"file"}(this.props.mimetype)];return(0,c.jsxs)("div",{className:"attachment",children:[(0,c.jsx)("div",{children:(0,c.jsx)("i",{className:"material-icons big",style:{color:l},children:o})}),(0,c.jsxs)("div",{className:"flex-column",children:[(0,c.jsxs)("div",{children:[e," ",i]}),this.props.uploading||this.state.downloader?(0,c.jsx)(r.A,{progress:this.props.uploading?this.props.progress:this.state.progress,onCancel:this.handleCancel}):(0,c.jsx)("div",{children:t?(0,c.jsx)("a",{href:t,download:this.props.filename,onClick:s,children:n}):(0,c.jsx)("span",{className:"light-gray",children:n})})]})]})}}const m={image:"[图片]",video:"[视频]",voice:"[语音]",file:"[文件]",link:"[链接]"};function g(e){if(!e)return"";return(e.summary||e.text||"").trim()||m[e.type]||""}class f extends n().PureComponent{constructor(e){super(e),this.state={expanded:!1},this.handleToggle=this.handleToggle.bind(this)}handleToggle(e){e.preventDefault(),e.stopPropagation(),this.setState(e=>({expanded:!e.expanded}))}render(){const e=this.props.content||{},t=Number(e.item_count)||(Array.isArray(e.items)?e.items.length:0),s=this.state.expanded?e.items||[]:e.preview||[],i=(e.comment||"").trim();return(0,c.jsxs)("div",{className:"forward-bundle",children:[(0,c.jsx)("div",{className:"forward-bundle-title",children:e.title||"聊天记录"}),(0,c.jsx)("ul",{className:"forward-bundle-lines",children:s.map((e,t)=>{const s=function(e,t){const s=(t||"").trim();if(!s)return"";const i=s.startsWith("usr")?s:"usr"+s,n=e&&e.getTopic?e.getTopic(i):null,a=n&&n.public;return a&&(a.fn||a.name)||""}(this.props.tinode,e.from);return(0,c.jsxs)("li",{children:[s?(0,c.jsxs)("b",{children:[s,":"]}):null,g(e)]},(null!=e.seq?e.seq:t)+":"+t)})}),t>s.length||this.state.expanded?(0,c.jsx)("button",{type:"button",className:"forward-bundle-more",onClick:this.handleToggle,children:this.state.expanded?"收起":`查看完整记录(共 ${t} 条)`}):(0,c.jsxs)("div",{className:"forward-bundle-count",children:["共 ",t," 条消息"]}),i?(0,c.jsx)("div",{className:"forward-bundle-comment",children:i}):null]})}}var v=s(5247);const b=(0,a.defineMessages)({message_sending:{id:"message_sending",defaultMessage:"sending...",description:"Message being sent, in place of time stamp"},message_sending_failed:{id:"message_sending_failed",defaultMessage:"failed",description:"Failed to send message, in place of time stamp"},message_edited_marker:{id:"message_edited_marker",defaultMessage:", edited",description:"Marker indicating that the message was edited"}});class S extends n().PureComponent{render(){const{formatMessage:e}=this.props.intl;let t;t=this.props.received<=o.Tinode.MESSAGE_STATUS_SENDING?e(b.message_sending):this.props.received==o.Tinode.MESSAGE_STATUS_FAILED||this.props.received==o.Tinode.MESSAGE_STATUS_FATAL?e(b.message_sending_failed):this.props.timestamp.toLocaleTimeString(this.props.intl.locale,{timeStyle:"short"});const s=(0,d.LO)(this.props.received),i=s?(0,c.jsx)("i",{className:"material-icons small "+(s.color||""),children:s.name}):null,n=this.props.edited?e(b.message_edited_marker):null;return(0,c.jsxs)("span",{className:"timestamp",children:[t,n," ",i]})}}var y=(0,a.injectIntl)(S),x=s(2067),C=s(184);const M="im-voice-played:";function w(e,t,s){try{const i=JSON.parse(localStorage.getItem(M+e+":"+t)||"[]");return Array.isArray(i)&&i.includes(s)}catch(e){return!1}}class j extends n().PureComponent{constructor(e){super(e),this.state={progress:0,voicePlayed:w(e.tinode.getCurrentUserID(),e.topic,e.seq)},e.uploader&&(e.uploader.onProgress=this.handleProgress.bind(this)),this.handleExpandImage=this.handleExpandImage.bind(this),this.handlePlayVideo=this.handlePlayVideo.bind(this),this.handleFormButtonClick=this.handleFormButtonClick.bind(this),this.handleQuoteClick=this.handleQuoteClick.bind(this),this.handleContextClick=this.handleContextClick.bind(this),this.handleCancelUpload=this.handleCancelUpload.bind(this),this.handleDraftyClick=this.handleDraftyClick.bind(this),this.handleVoicePlayed=this.handleVoicePlayed.bind(this),this.formatterContext={formatMessage:e.intl.formatMessage.bind(e.intl),viewportWidth:e.viewportWidth,authorizeURL:e.tinode.authorizeURL.bind(e.tinode),onHandleClick:this.handleDraftyClick,onVoicePlayed:this.handleVoicePlayed}}handleDraftyClick=(e,t)=>{switch(t){case"image":this.handleExpandImage(e);break;case"video":this.handlePlayVideo(e);break;case"form_button":this.handleFormButtonClick(e);break;case"quote":this.handleQuoteClick(e);break;case"contact_chat":e.preventDefault();try{const t=new URL(e.target.dataset.val)?.pathname,s=t.split("/").filter(Boolean);C.A.navigateTo(C.A.setUrlTopic("",s.pop()||""))}catch(e){console.error("Invalid URL:",e)}break;case"contact_find":e.preventDefault();let s=C.A.setUrlSidePanel(window.location.hash,"newtpk");s=C.A.addUrlParam(s,"q",e.target.dataset.val),s=C.A.addUrlParam(s,"tab","find"),C.A.navigateTo(s);break;default:console.info("Unhandled drafty action.",t,e.target.dataset)}};handleExpandImage(e){e.preventDefault(),this.props.onExpandMedia({url:e.target.src,filename:e.target.dataset.name,width:e.target.dataset.width,height:e.target.dataset.height,size:e.target.dataset.size,type:e.target.dataset.mime})}handlePlayVideo(e){e.preventDefault(),this.props.onExpandMedia({video:!0,url:e.target.dataset.src,preview:e.target.src,filename:e.target.dataset.name,width:e.target.dataset.width,height:e.target.dataset.height,duration:e.target.dataset.duration,size:e.target.dataset.size,type:e.target.dataset.mime})}handleFormButtonClick(e){e.preventDefault();const t={seq:this.props.seq,resp:{}};e.target.dataset.name&&(t.resp[e.target.dataset.name]=e.target.dataset.val?e.target.dataset.val:void 0===e.target.dataset.val?1:""+e.target.dataset.val),"url"==e.target.dataset.act&&(t.ref=(0,d.Jf)(e.target.dataset.ref)||"about:blank");const s=e.target.dataset.title||"unknown";this.props.onFormResponse(e.target.dataset.act,s,t)}handleContextClick(e){e.preventDefault(),e.stopPropagation();const t=[];if(this.props.received==o.Tinode.MESSAGE_STATUS_FAILED&&t.push("menu_item_send_retry"),this.props.received>o.Tinode.MESSAGE_STATUS_FATAL){if(this.props.userIsWriter&&(t.push("menu_item_reply"),!this.props.response)){let e=!1;o.Drafty.entities(this.props.content,(t,s,i)=>(e=["AU","EX","FM","IM","TC","VC","VD"].includes(i),e)),e||o.Drafty.styles(this.props.content,t=>(e=["QQ"].includes(t),e)),e||t.push("menu_item_edit")}this.props.userIsAdmin&&t.push(this.props.pinned?"menu_item_unpin":"menu_item_pin")}t.push("menu_item_forward"),this.props.showContextMenu({seq:this.props.seq,replace:this.props.edited?parseInt(this.props.edited.split(":")[1]):0,content:this.props.content,head:this.props.head,userFrom:this.props.userFrom,userName:this.props.userName,y:e.pageY,x:e.pageX,pickReply:this.props.pickReply,editMessage:this.props.editMessage,timestamp:this.props.timestamp},t)}handleProgress(e){this.setState({progress:e})}handleCancelUpload(){this.props.onCancelUpload(this.props.seq,this.props.uploader)}handleVoicePlayed(){this.state.voicePlayed||(function(e,t,s){try{const i=M+e+":"+t,n=JSON.parse(localStorage.getItem(i)||"[]"),a=Array.isArray(n)?n:[];a.includes(s)||localStorage.setItem(i,JSON.stringify(a.concat(s).slice(-500)))}catch(e){}}(this.props.tinode.getCurrentUserID(),this.props.topic,this.props.seq),this.setState({voicePlayed:!0}))}handleQuoteClick(e){e.preventDefault(),e.stopPropagation();const t=this.props.replyToSeq;t&&this.props.onQuoteClick(t)}renderFailReason(){return this.props.response||this.props.received!=o.Tinode.MESSAGE_STATUS_FAILED&&this.props.received!=o.Tinode.MESSAGE_STATUS_FATAL?null:"blocked_by_peer"==this.props.relationship||"blocked_by_me"==this.props.relationship?(0,c.jsx)("div",{className:"message-fail-reason",children:"消息已发送,但被对方拒收了"}):"none"==this.props.relationship?(0,c.jsxs)("div",{className:"message-fail-reason",children:["你还不是他(她)朋友。",(0,c.jsx)("a",{href:"#",onClick:this.props.onSendFriendVerification,children:"发送朋友验证"})]}):null}render(){const e=this.props.sequence+" "+(this.props.response?"left":"right"),t="single"==this.props.sequence||"last"==this.props.sequence?"bubble tip":"bubble",s=this.props.userAvatar||!0,i=!this.props.response&&(this.props.received==o.Tinode.MESSAGE_STATUS_FAILED||this.props.received==o.Tinode.MESSAGE_STATUS_FATAL),r=this.renderFailReason();let l=!1;this.props.response&&this.props.mimeType==o.Drafty.getContentType()&&o.Drafty.isValid(this.props.content)&&o.Drafty.entities(this.props.content,(e,t,s)=>("AU"===s&&(l=!0),l));const h=l&&!this.state.voicePlayed;let d="message-content";const p=this.props.isGroup&&this.props.response&&("single"==this.props.sequence||"last"==this.props.sequence);let m=this.props.content;this.props.head&&("system_notice"===this.props.head["x-im-type"]||"system_action"===this.props.head["x-im-type"])&&m&&"object"==typeof m&&"string"==typeof m.text&&(m=m.text);let g=null;this.props.head&&"forward_bundle"===this.props.head["x-im-type"]&&m&&"object"==typeof m&&(m.items||m.preview)&&(g=(0,c.jsx)(f,{content:m,tinode:this.props.tinode}));const b=[];if(this.props.mimeType==o.Drafty.getContentType()&&o.Drafty.isValid(m)){o.Drafty.attachments(m,(e,t)=>{o.Drafty.isFormResponseType(e.mime)||b.push((0,c.jsx)(u,{tinode:this.props.tinode,downloadUrl:o.Drafty.getDownloadUrl(e),filename:e.name,uploading:o.Drafty.isProcessing(e),mimetype:e.mime,size:o.Drafty.getEntitySize(e),progress:this.state.progress,onCancelUpload:this.handleCancelUpload,onError:this.props.onError},t))},this);const e=o.Drafty.format(m,x.e3,this.formatterContext);m=n().createElement(n().Fragment,null,e)}else"string"==typeof m?new RegExp("^\\p{RGI_Emoji}{1,5}$","v").test(m||"")&&(d+=" emoji-"+(m||"").match(/(?:👨🏻‍❤️‍💋‍👨🏻|👨🏻‍❤️‍💋‍👨🏼|👨🏻‍❤️‍💋‍👨🏽|👨🏻‍❤️‍💋‍👨🏾|👨🏻‍❤️‍💋‍👨🏿|👨🏼‍❤️‍💋‍👨🏻|👨🏼‍❤️‍💋‍👨🏼|👨🏼‍❤️‍💋‍👨🏽|👨🏼‍❤️‍💋‍👨🏾|👨🏼‍❤️‍💋‍👨🏿|👨🏽‍❤️‍💋‍👨🏻|👨🏽‍❤️‍💋‍👨🏼|👨🏽‍❤️‍💋‍👨🏽|👨🏽‍❤️‍💋‍👨🏾|👨🏽‍❤️‍💋‍👨🏿|👨🏾‍❤️‍💋‍👨🏻|👨🏾‍❤️‍💋‍👨🏼|👨🏾‍❤️‍💋‍👨🏽|👨🏾‍❤️‍💋‍👨🏾|👨🏾‍❤️‍💋‍👨🏿|👨🏿‍❤️‍💋‍👨🏻|👨🏿‍❤️‍💋‍👨🏼|👨🏿‍❤️‍💋‍👨🏽|👨🏿‍❤️‍💋‍👨🏾|👨🏿‍❤️‍💋‍👨🏿|👩🏻‍❤️‍💋‍👨🏻|👩🏻‍❤️‍💋‍👨🏼|👩🏻‍❤️‍💋‍👨🏽|👩🏻‍❤️‍💋‍👨🏾|👩🏻‍❤️‍💋‍👨🏿|👩🏻‍❤️‍💋‍👩🏻|👩🏻‍❤️‍💋‍👩🏼|👩🏻‍❤️‍💋‍👩🏽|👩🏻‍❤️‍💋‍👩🏾|👩🏻‍❤️‍💋‍👩🏿|👩🏼‍❤️‍💋‍👨🏻|👩🏼‍❤️‍💋‍👨🏼|👩🏼‍❤️‍💋‍👨🏽|👩🏼‍❤️‍💋‍👨🏾|👩🏼‍❤️‍💋‍👨🏿|👩🏼‍❤️‍💋‍👩🏻|👩🏼‍❤️‍💋‍👩🏼|👩🏼‍❤️‍💋‍👩🏽|👩🏼‍❤️‍💋‍👩🏾|👩🏼‍❤️‍💋‍👩🏿|👩🏽‍❤️‍💋‍👨🏻|👩🏽‍❤️‍💋‍👨🏼|👩🏽‍❤️‍💋‍👨🏽|👩🏽‍❤️‍💋‍👨🏾|👩🏽‍❤️‍💋‍👨🏿|👩🏽‍❤️‍💋‍👩🏻|👩🏽‍❤️‍💋‍👩🏼|👩🏽‍❤️‍💋‍👩🏽|👩🏽‍❤️‍💋‍👩🏾|👩🏽‍❤️‍💋‍👩🏿|👩🏾‍❤️‍💋‍👨🏻|👩🏾‍❤️‍💋‍👨🏼|👩🏾‍❤️‍💋‍👨🏽|👩🏾‍❤️‍💋‍👨🏾|👩🏾‍❤️‍💋‍👨🏿|👩🏾‍❤️‍💋‍👩🏻|👩🏾‍❤️‍💋‍👩🏼|👩🏾‍❤️‍💋‍👩🏽|👩🏾‍❤️‍💋‍👩🏾|👩🏾‍❤️‍💋‍👩🏿|👩🏿‍❤️‍💋‍👨🏻|👩🏿‍❤️‍💋‍👨🏼|👩🏿‍❤️‍💋‍👨🏽|👩🏿‍❤️‍💋‍👨🏾|👩🏿‍❤️‍💋‍👨🏿|👩🏿‍❤️‍💋‍👩🏻|👩🏿‍❤️‍💋‍👩🏼|👩🏿‍❤️‍💋‍👩🏽|👩🏿‍❤️‍💋‍👩🏾|👩🏿‍❤️‍💋‍👩🏿|🧑🏻‍❤️‍💋‍🧑🏼|🧑🏻‍❤️‍💋‍🧑🏽|🧑🏻‍❤️‍💋‍🧑🏾|🧑🏻‍❤️‍💋‍🧑🏿|🧑🏼‍❤️‍💋‍🧑🏻|🧑🏼‍❤️‍💋‍🧑🏽|🧑🏼‍❤️‍💋‍🧑🏾|🧑🏼‍❤️‍💋‍🧑🏿|🧑🏽‍❤️‍💋‍🧑🏻|🧑🏽‍❤️‍💋‍🧑🏼|🧑🏽‍❤️‍💋‍🧑🏾|🧑🏽‍❤️‍💋‍🧑🏿|🧑🏾‍❤️‍💋‍🧑🏻|🧑🏾‍❤️‍💋‍🧑🏼|🧑🏾‍❤️‍💋‍🧑🏽|🧑🏾‍❤️‍💋‍🧑🏿|🧑🏿‍❤️‍💋‍🧑🏻|🧑🏿‍❤️‍💋‍🧑🏼|🧑🏿‍❤️‍💋‍🧑🏽|🧑🏿‍❤️‍💋‍🧑🏾|🏴󠁧󠁢󠁥󠁮󠁧󠁿|🏴󠁧󠁢󠁳󠁣󠁴󠁿|🏴󠁧󠁢󠁷󠁬󠁳󠁿|👨🏻‍❤️‍👨🏻|👨🏻‍❤️‍👨🏼|👨🏻‍❤️‍👨🏽|👨🏻‍❤️‍👨🏾|👨🏻‍❤️‍👨🏿|👨🏻‍🐰‍👨🏼|👨🏻‍🐰‍👨🏽|👨🏻‍🐰‍👨🏾|👨🏻‍🐰‍👨🏿|👨🏻‍🤝‍👨🏼|👨🏻‍🤝‍👨🏽|👨🏻‍🤝‍👨🏾|👨🏻‍🤝‍👨🏿|👨🏻‍🫯‍👨🏼|👨🏻‍🫯‍👨🏽|👨🏻‍🫯‍👨🏾|👨🏻‍🫯‍👨🏿|👨🏼‍❤️‍👨🏻|👨🏼‍❤️‍👨🏼|👨🏼‍❤️‍👨🏽|👨🏼‍❤️‍👨🏾|👨🏼‍❤️‍👨🏿|👨🏼‍🐰‍👨🏻|👨🏼‍🐰‍👨🏽|👨🏼‍🐰‍👨🏾|👨🏼‍🐰‍👨🏿|👨🏼‍🤝‍👨🏻|👨🏼‍🤝‍👨🏽|👨🏼‍🤝‍👨🏾|👨🏼‍🤝‍👨🏿|👨🏼‍🫯‍👨🏻|👨🏼‍🫯‍👨🏽|👨🏼‍🫯‍👨🏾|👨🏼‍🫯‍👨🏿|👨🏽‍❤️‍👨🏻|👨🏽‍❤️‍👨🏼|👨🏽‍❤️‍👨🏽|👨🏽‍❤️‍👨🏾|👨🏽‍❤️‍👨🏿|👨🏽‍🐰‍👨🏻|👨🏽‍🐰‍👨🏼|👨🏽‍🐰‍👨🏾|👨🏽‍🐰‍👨🏿|👨🏽‍🤝‍👨🏻|👨🏽‍🤝‍👨🏼|👨🏽‍🤝‍👨🏾|👨🏽‍🤝‍👨🏿|👨🏽‍🫯‍👨🏻|👨🏽‍🫯‍👨🏼|👨🏽‍🫯‍👨🏾|👨🏽‍🫯‍👨🏿|👨🏾‍❤️‍👨🏻|👨🏾‍❤️‍👨🏼|👨🏾‍❤️‍👨🏽|👨🏾‍❤️‍👨🏾|👨🏾‍❤️‍👨🏿|👨🏾‍🐰‍👨🏻|👨🏾‍🐰‍👨🏼|👨🏾‍🐰‍👨🏽|👨🏾‍🐰‍👨🏿|👨🏾‍🤝‍👨🏻|👨🏾‍🤝‍👨🏼|👨🏾‍🤝‍👨🏽|👨🏾‍🤝‍👨🏿|👨🏾‍🫯‍👨🏻|👨🏾‍🫯‍👨🏼|👨🏾‍🫯‍👨🏽|👨🏾‍🫯‍👨🏿|👨🏿‍❤️‍👨🏻|👨🏿‍❤️‍👨🏼|👨🏿‍❤️‍👨🏽|👨🏿‍❤️‍👨🏾|👨🏿‍❤️‍👨🏿|👨🏿‍🐰‍👨🏻|👨🏿‍🐰‍👨🏼|👨🏿‍🐰‍👨🏽|👨🏿‍🐰‍👨🏾|👨🏿‍🤝‍👨🏻|👨🏿‍🤝‍👨🏼|👨🏿‍🤝‍👨🏽|👨🏿‍🤝‍👨🏾|👨🏿‍🫯‍👨🏻|👨🏿‍🫯‍👨🏼|👨🏿‍🫯‍👨🏽|👨🏿‍🫯‍👨🏾|👩🏻‍❤️‍👨🏻|👩🏻‍❤️‍👨🏼|👩🏻‍❤️‍👨🏽|👩🏻‍❤️‍👨🏾|👩🏻‍❤️‍👨🏿|👩🏻‍❤️‍👩🏻|👩🏻‍❤️‍👩🏼|👩🏻‍❤️‍👩🏽|👩🏻‍❤️‍👩🏾|👩🏻‍❤️‍👩🏿|👩🏻‍🐰‍👩🏼|👩🏻‍🐰‍👩🏽|👩🏻‍🐰‍👩🏾|👩🏻‍🐰‍👩🏿|👩🏻‍🤝‍👨🏼|👩🏻‍🤝‍👨🏽|👩🏻‍🤝‍👨🏾|👩🏻‍🤝‍👨🏿|👩🏻‍🤝‍👩🏼|👩🏻‍🤝‍👩🏽|👩🏻‍🤝‍👩🏾|👩🏻‍🤝‍👩🏿|👩🏻‍🫯‍👩🏼|👩🏻‍🫯‍👩🏽|👩🏻‍🫯‍👩🏾|👩🏻‍🫯‍👩🏿|👩🏼‍❤️‍👨🏻|👩🏼‍❤️‍👨🏼|👩🏼‍❤️‍👨🏽|👩🏼‍❤️‍👨🏾|👩🏼‍❤️‍👨🏿|👩🏼‍❤️‍👩🏻|👩🏼‍❤️‍👩🏼|👩🏼‍❤️‍👩🏽|👩🏼‍❤️‍👩🏾|👩🏼‍❤️‍👩🏿|👩🏼‍🐰‍👩🏻|👩🏼‍🐰‍👩🏽|👩🏼‍🐰‍👩🏾|👩🏼‍🐰‍👩🏿|👩🏼‍🤝‍👨🏻|👩🏼‍🤝‍👨🏽|👩🏼‍🤝‍👨🏾|👩🏼‍🤝‍👨🏿|👩🏼‍🤝‍👩🏻|👩🏼‍🤝‍👩🏽|👩🏼‍🤝‍👩🏾|👩🏼‍🤝‍👩🏿|👩🏼‍🫯‍👩🏻|👩🏼‍🫯‍👩🏽|👩🏼‍🫯‍👩🏾|👩🏼‍🫯‍👩🏿|👩🏽‍❤️‍👨🏻|👩🏽‍❤️‍👨🏼|👩🏽‍❤️‍👨🏽|👩🏽‍❤️‍👨🏾|👩🏽‍❤️‍👨🏿|👩🏽‍❤️‍👩🏻|👩🏽‍❤️‍👩🏼|👩🏽‍❤️‍👩🏽|👩🏽‍❤️‍👩🏾|👩🏽‍❤️‍👩🏿|👩🏽‍🐰‍👩🏻|👩🏽‍🐰‍👩🏼|👩🏽‍🐰‍👩🏾|👩🏽‍🐰‍👩🏿|👩🏽‍🤝‍👨🏻|👩🏽‍🤝‍👨🏼|👩🏽‍🤝‍👨🏾|👩🏽‍🤝‍👨🏿|👩🏽‍🤝‍👩🏻|👩🏽‍🤝‍👩🏼|👩🏽‍🤝‍👩🏾|👩🏽‍🤝‍👩🏿|👩🏽‍🫯‍👩🏻|👩🏽‍🫯‍👩🏼|👩🏽‍🫯‍👩🏾|👩🏽‍🫯‍👩🏿|👩🏾‍❤️‍👨🏻|👩🏾‍❤️‍👨🏼|👩🏾‍❤️‍👨🏽|👩🏾‍❤️‍👨🏾|👩🏾‍❤️‍👨🏿|👩🏾‍❤️‍👩🏻|👩🏾‍❤️‍👩🏼|👩🏾‍❤️‍👩🏽|👩🏾‍❤️‍👩🏾|👩🏾‍❤️‍👩🏿|👩🏾‍🐰‍👩🏻|👩🏾‍🐰‍👩🏼|👩🏾‍🐰‍👩🏽|👩🏾‍🐰‍👩🏿|👩🏾‍🤝‍👨🏻|👩🏾‍🤝‍👨🏼|👩🏾‍🤝‍👨🏽|👩🏾‍🤝‍👨🏿|👩🏾‍🤝‍👩🏻|👩🏾‍🤝‍👩🏼|👩🏾‍🤝‍👩🏽|👩🏾‍🤝‍👩🏿|👩🏾‍🫯‍👩🏻|👩🏾‍🫯‍👩🏼|👩🏾‍🫯‍👩🏽|👩🏾‍🫯‍👩🏿|👩🏿‍❤️‍👨🏻|👩🏿‍❤️‍👨🏼|👩🏿‍❤️‍👨🏽|👩🏿‍❤️‍👨🏾|👩🏿‍❤️‍👨🏿|👩🏿‍❤️‍👩🏻|👩🏿‍❤️‍👩🏼|👩🏿‍❤️‍👩🏽|👩🏿‍❤️‍👩🏾|👩🏿‍❤️‍👩🏿|👩🏿‍🐰‍👩🏻|👩🏿‍🐰‍👩🏼|👩🏿‍🐰‍👩🏽|👩🏿‍🐰‍👩🏾|👩🏿‍🤝‍👨🏻|👩🏿‍🤝‍👨🏼|👩🏿‍🤝‍👨🏽|👩🏿‍🤝‍👨🏾|👩🏿‍🤝‍👩🏻|👩🏿‍🤝‍👩🏼|👩🏿‍🤝‍👩🏽|👩🏿‍🤝‍👩🏾|👩🏿‍🫯‍👩🏻|👩🏿‍🫯‍👩🏼|👩🏿‍🫯‍👩🏽|👩🏿‍🫯‍👩🏾|🧑🏻‍❤️‍🧑🏼|🧑🏻‍❤️‍🧑🏽|🧑🏻‍❤️‍🧑🏾|🧑🏻‍❤️‍🧑🏿|🧑🏻‍🐰‍🧑🏼|🧑🏻‍🐰‍🧑🏽|🧑🏻‍🐰‍🧑🏾|🧑🏻‍🐰‍🧑🏿|🧑🏻‍🤝‍🧑🏻|🧑🏻‍🤝‍🧑🏼|🧑🏻‍🤝‍🧑🏽|🧑🏻‍🤝‍🧑🏾|🧑🏻‍🤝‍🧑🏿|🧑🏻‍🫯‍🧑🏼|🧑🏻‍🫯‍🧑🏽|🧑🏻‍🫯‍🧑🏾|🧑🏻‍🫯‍🧑🏿|🧑🏼‍❤️‍🧑🏻|🧑🏼‍❤️‍🧑🏽|🧑🏼‍❤️‍🧑🏾|🧑🏼‍❤️‍🧑🏿|🧑🏼‍🐰‍🧑🏻|🧑🏼‍🐰‍🧑🏽|🧑🏼‍🐰‍🧑🏾|🧑🏼‍🐰‍🧑🏿|🧑🏼‍🤝‍🧑🏻|🧑🏼‍🤝‍🧑🏼|🧑🏼‍🤝‍🧑🏽|🧑🏼‍🤝‍🧑🏾|🧑🏼‍🤝‍🧑🏿|🧑🏼‍🫯‍🧑🏻|🧑🏼‍🫯‍🧑🏽|🧑🏼‍🫯‍🧑🏾|🧑🏼‍🫯‍🧑🏿|🧑🏽‍❤️‍🧑🏻|🧑🏽‍❤️‍🧑🏼|🧑🏽‍❤️‍🧑🏾|🧑🏽‍❤️‍🧑🏿|🧑🏽‍🐰‍🧑🏻|🧑🏽‍🐰‍🧑🏼|🧑🏽‍🐰‍🧑🏾|🧑🏽‍🐰‍🧑🏿|🧑🏽‍🤝‍🧑🏻|🧑🏽‍🤝‍🧑🏼|🧑🏽‍🤝‍🧑🏽|🧑🏽‍🤝‍🧑🏾|🧑🏽‍🤝‍🧑🏿|🧑🏽‍🫯‍🧑🏻|🧑🏽‍🫯‍🧑🏼|🧑🏽‍🫯‍🧑🏾|🧑🏽‍🫯‍🧑🏿|🧑🏾‍❤️‍🧑🏻|🧑🏾‍❤️‍🧑🏼|🧑🏾‍❤️‍🧑🏽|🧑🏾‍❤️‍🧑🏿|🧑🏾‍🐰‍🧑🏻|🧑🏾‍🐰‍🧑🏼|🧑🏾‍🐰‍🧑🏽|🧑🏾‍🐰‍🧑🏿|🧑🏾‍🤝‍🧑🏻|🧑🏾‍🤝‍🧑🏼|🧑🏾‍🤝‍🧑🏽|🧑🏾‍🤝‍🧑🏾|🧑🏾‍🤝‍🧑🏿|🧑🏾‍🫯‍🧑🏻|🧑🏾‍🫯‍🧑🏼|🧑🏾‍🫯‍🧑🏽|🧑🏾‍🫯‍🧑🏿|🧑🏿‍❤️‍🧑🏻|🧑🏿‍❤️‍🧑🏼|🧑🏿‍❤️‍🧑🏽|🧑🏿‍❤️‍🧑🏾|🧑🏿‍🐰‍🧑🏻|🧑🏿‍🐰‍🧑🏼|🧑🏿‍🐰‍🧑🏽|🧑🏿‍🐰‍🧑🏾|🧑🏿‍🤝‍🧑🏻|🧑🏿‍🤝‍🧑🏼|🧑🏿‍🤝‍🧑🏽|🧑🏿‍🤝‍🧑🏾|🧑🏿‍🤝‍🧑🏿|🧑🏿‍🫯‍🧑🏻|🧑🏿‍🫯‍🧑🏼|🧑🏿‍🫯‍🧑🏽|🧑🏿‍🫯‍🧑🏾|👨‍❤️‍💋‍👨|👨‍👨‍👦‍👦|👨‍👨‍👧‍👦|👨‍👨‍👧‍👧|👨‍👩‍👦‍👦|👨‍👩‍👧‍👦|👨‍👩‍👧‍👧|👩‍❤️‍💋‍👨|👩‍❤️‍💋‍👩|👩‍👩‍👦‍👦|👩‍👩‍👧‍👦|👩‍👩‍👧‍👧|🧑‍🧑‍🧒‍🧒|🏃🏻‍♀️‍➡️|🏃🏻‍♂️‍➡️|🏃🏼‍♀️‍➡️|🏃🏼‍♂️‍➡️|🏃🏽‍♀️‍➡️|🏃🏽‍♂️‍➡️|🏃🏾‍♀️‍➡️|🏃🏾‍♂️‍➡️|🏃🏿‍♀️‍➡️|🏃🏿‍♂️‍➡️|👨🏻‍🦯‍➡️|👨🏻‍🦼‍➡️|👨🏻‍🦽‍➡️|👨🏼‍🦯‍➡️|👨🏼‍🦼‍➡️|👨🏼‍🦽‍➡️|👨🏽‍🦯‍➡️|👨🏽‍🦼‍➡️|👨🏽‍🦽‍➡️|👨🏾‍🦯‍➡️|👨🏾‍🦼‍➡️|👨🏾‍🦽‍➡️|👨🏿‍🦯‍➡️|👨🏿‍🦼‍➡️|👨🏿‍🦽‍➡️|👩🏻‍🦯‍➡️|👩🏻‍🦼‍➡️|👩🏻‍🦽‍➡️|👩🏼‍🦯‍➡️|👩🏼‍🦼‍➡️|👩🏼‍🦽‍➡️|👩🏽‍🦯‍➡️|👩🏽‍🦼‍➡️|👩🏽‍🦽‍➡️|👩🏾‍🦯‍➡️|👩🏾‍🦼‍➡️|👩🏾‍🦽‍➡️|👩🏿‍🦯‍➡️|👩🏿‍🦼‍➡️|👩🏿‍🦽‍➡️|🚶🏻‍♀️‍➡️|🚶🏻‍♂️‍➡️|🚶🏼‍♀️‍➡️|🚶🏼‍♂️‍➡️|🚶🏽‍♀️‍➡️|🚶🏽‍♂️‍➡️|🚶🏾‍♀️‍➡️|🚶🏾‍♂️‍➡️|🚶🏿‍♀️‍➡️|🚶🏿‍♂️‍➡️|🧎🏻‍♀️‍➡️|🧎🏻‍♂️‍➡️|🧎🏼‍♀️‍➡️|🧎🏼‍♂️‍➡️|🧎🏽‍♀️‍➡️|🧎🏽‍♂️‍➡️|🧎🏾‍♀️‍➡️|🧎🏾‍♂️‍➡️|🧎🏿‍♀️‍➡️|🧎🏿‍♂️‍➡️|🧑🏻‍🦯‍➡️|🧑🏻‍🦼‍➡️|🧑🏻‍🦽‍➡️|🧑🏼‍🦯‍➡️|🧑🏼‍🦼‍➡️|🧑🏼‍🦽‍➡️|🧑🏽‍🦯‍➡️|🧑🏽‍🦼‍➡️|🧑🏽‍🦽‍➡️|🧑🏾‍🦯‍➡️|🧑🏾‍🦼‍➡️|🧑🏾‍🦽‍➡️|🧑🏿‍🦯‍➡️|🧑🏿‍🦼‍➡️|🧑🏿‍🦽‍➡️|🫱🏻‍🫲🏼|🫱🏻‍🫲🏽|🫱🏻‍🫲🏾|🫱🏻‍🫲🏿|🫱🏼‍🫲🏻|🫱🏼‍🫲🏽|🫱🏼‍🫲🏾|🫱🏼‍🫲🏿|🫱🏽‍🫲🏻|🫱🏽‍🫲🏼|🫱🏽‍🫲🏾|🫱🏽‍🫲🏿|🫱🏾‍🫲🏻|🫱🏾‍🫲🏼|🫱🏾‍🫲🏽|🫱🏾‍🫲🏿|🫱🏿‍🫲🏻|🫱🏿‍🫲🏼|🫱🏿‍🫲🏽|🫱🏿‍🫲🏾|🏃‍♀️‍➡️|🏃‍♂️‍➡️|👨‍❤️‍👨|👨‍👦‍👦|👨‍👧‍👦|👨‍👧‍👧|👨‍👨‍👦|👨‍👨‍👧|👨‍👩‍👦|👨‍👩‍👧|👨‍🦯‍➡️|👨‍🦼‍➡️|👨‍🦽‍➡️|👩‍❤️‍👨|👩‍❤️‍👩|👩‍👦‍👦|👩‍👧‍👦|👩‍👧‍👧|👩‍👩‍👦|👩‍👩‍👧|👩‍🦯‍➡️|👩‍🦼‍➡️|👩‍🦽‍➡️|🚶‍♀️‍➡️|🚶‍♂️‍➡️|🧎‍♀️‍➡️|🧎‍♂️‍➡️|🧑‍🤝‍🧑|🧑‍🦯‍➡️|🧑‍🦼‍➡️|🧑‍🦽‍➡️|🧑‍🧑‍🧒|🧑‍🧒‍🧒|🏃🏻‍♀️|🏃🏻‍♂️|🏃🏻‍➡️|🏃🏼‍♀️|🏃🏼‍♂️|🏃🏼‍➡️|🏃🏽‍♀️|🏃🏽‍♂️|🏃🏽‍➡️|🏃🏾‍♀️|🏃🏾‍♂️|🏃🏾‍➡️|🏃🏿‍♀️|🏃🏿‍♂️|🏃🏿‍➡️|🏄🏻‍♀️|🏄🏻‍♂️|🏄🏼‍♀️|🏄🏼‍♂️|🏄🏽‍♀️|🏄🏽‍♂️|🏄🏾‍♀️|🏄🏾‍♂️|🏄🏿‍♀️|🏄🏿‍♂️|🏊🏻‍♀️|🏊🏻‍♂️|🏊🏼‍♀️|🏊🏼‍♂️|🏊🏽‍♀️|🏊🏽‍♂️|🏊🏾‍♀️|🏊🏾‍♂️|🏊🏿‍♀️|🏊🏿‍♂️|🏋🏻‍♀️|🏋🏻‍♂️|🏋🏼‍♀️|🏋🏼‍♂️|🏋🏽‍♀️|🏋🏽‍♂️|🏋🏾‍♀️|🏋🏾‍♂️|🏋🏿‍♀️|🏋🏿‍♂️|🏌🏻‍♀️|🏌🏻‍♂️|🏌🏼‍♀️|🏌🏼‍♂️|🏌🏽‍♀️|🏌🏽‍♂️|🏌🏾‍♀️|🏌🏾‍♂️|🏌🏿‍♀️|🏌🏿‍♂️|👁️‍🗨️|👨🏻‍⚕️|👨🏻‍⚖️|👨🏻‍✈️|👨🏻‍🌾|👨🏻‍🍳|👨🏻‍🍼|👨🏻‍🎓|👨🏻‍🎤|👨🏻‍🎨|👨🏻‍🏫|👨🏻‍🏭|👨🏻‍💻|👨🏻‍💼|👨🏻‍🔧|👨🏻‍🔬|👨🏻‍🚀|👨🏻‍🚒|👨🏻‍🦯|👨🏻‍🦰|👨🏻‍🦱|👨🏻‍🦲|👨🏻‍🦳|👨🏻‍🦼|👨🏻‍🦽|👨🏼‍⚕️|👨🏼‍⚖️|👨🏼‍✈️|👨🏼‍🌾|👨🏼‍🍳|👨🏼‍🍼|👨🏼‍🎓|👨🏼‍🎤|👨🏼‍🎨|👨🏼‍🏫|👨🏼‍🏭|👨🏼‍💻|👨🏼‍💼|👨🏼‍🔧|👨🏼‍🔬|👨🏼‍🚀|👨🏼‍🚒|👨🏼‍🦯|👨🏼‍🦰|👨🏼‍🦱|👨🏼‍🦲|👨🏼‍🦳|👨🏼‍🦼|👨🏼‍🦽|👨🏽‍⚕️|👨🏽‍⚖️|👨🏽‍✈️|👨🏽‍🌾|👨🏽‍🍳|👨🏽‍🍼|👨🏽‍🎓|👨🏽‍🎤|👨🏽‍🎨|👨🏽‍🏫|👨🏽‍🏭|👨🏽‍💻|👨🏽‍💼|👨🏽‍🔧|👨🏽‍🔬|👨🏽‍🚀|👨🏽‍🚒|👨🏽‍🦯|👨🏽‍🦰|👨🏽‍🦱|👨🏽‍🦲|👨🏽‍🦳|👨🏽‍🦼|👨🏽‍🦽|👨🏾‍⚕️|👨🏾‍⚖️|👨🏾‍✈️|👨🏾‍🌾|👨🏾‍🍳|👨🏾‍🍼|👨🏾‍🎓|👨🏾‍🎤|👨🏾‍🎨|👨🏾‍🏫|👨🏾‍🏭|👨🏾‍💻|👨🏾‍💼|👨🏾‍🔧|👨🏾‍🔬|👨🏾‍🚀|👨🏾‍🚒|👨🏾‍🦯|👨🏾‍🦰|👨🏾‍🦱|👨🏾‍🦲|👨🏾‍🦳|👨🏾‍🦼|👨🏾‍🦽|👨🏿‍⚕️|👨🏿‍⚖️|👨🏿‍✈️|👨🏿‍🌾|👨🏿‍🍳|👨🏿‍🍼|👨🏿‍🎓|👨🏿‍🎤|👨🏿‍🎨|👨🏿‍🏫|👨🏿‍🏭|👨🏿‍💻|👨🏿‍💼|👨🏿‍🔧|👨🏿‍🔬|👨🏿‍🚀|👨🏿‍🚒|👨🏿‍🦯|👨🏿‍🦰|👨🏿‍🦱|👨🏿‍🦲|👨🏿‍🦳|👨🏿‍🦼|👨🏿‍🦽|👩🏻‍⚕️|👩🏻‍⚖️|👩🏻‍✈️|👩🏻‍🌾|👩🏻‍🍳|👩🏻‍🍼|👩🏻‍🎓|👩🏻‍🎤|👩🏻‍🎨|👩🏻‍🏫|👩🏻‍🏭|👩🏻‍💻|👩🏻‍💼|👩🏻‍🔧|👩🏻‍🔬|👩🏻‍🚀|👩🏻‍🚒|👩🏻‍🦯|👩🏻‍🦰|👩🏻‍🦱|👩🏻‍🦲|👩🏻‍🦳|👩🏻‍🦼|👩🏻‍🦽|👩🏼‍⚕️|👩🏼‍⚖️|👩🏼‍✈️|👩🏼‍🌾|👩🏼‍🍳|👩🏼‍🍼|👩🏼‍🎓|👩🏼‍🎤|👩🏼‍🎨|👩🏼‍🏫|👩🏼‍🏭|👩🏼‍💻|👩🏼‍💼|👩🏼‍🔧|👩🏼‍🔬|👩🏼‍🚀|👩🏼‍🚒|👩🏼‍🦯|👩🏼‍🦰|👩🏼‍🦱|👩🏼‍🦲|👩🏼‍🦳|👩🏼‍🦼|👩🏼‍🦽|👩🏽‍⚕️|👩🏽‍⚖️|👩🏽‍✈️|👩🏽‍🌾|👩🏽‍🍳|👩🏽‍🍼|👩🏽‍🎓|👩🏽‍🎤|👩🏽‍🎨|👩🏽‍🏫|👩🏽‍🏭|👩🏽‍💻|👩🏽‍💼|👩🏽‍🔧|👩🏽‍🔬|👩🏽‍🚀|👩🏽‍🚒|👩🏽‍🦯|👩🏽‍🦰|👩🏽‍🦱|👩🏽‍🦲|👩🏽‍🦳|👩🏽‍🦼|👩🏽‍🦽|👩🏾‍⚕️|👩🏾‍⚖️|👩🏾‍✈️|👩🏾‍🌾|👩🏾‍🍳|👩🏾‍🍼|👩🏾‍🎓|👩🏾‍🎤|👩🏾‍🎨|👩🏾‍🏫|👩🏾‍🏭|👩🏾‍💻|👩🏾‍💼|👩🏾‍🔧|👩🏾‍🔬|👩🏾‍🚀|👩🏾‍🚒|👩🏾‍🦯|👩🏾‍🦰|👩🏾‍🦱|👩🏾‍🦲|👩🏾‍🦳|👩🏾‍🦼|👩🏾‍🦽|👩🏿‍⚕️|👩🏿‍⚖️|👩🏿‍✈️|👩🏿‍🌾|👩🏿‍🍳|👩🏿‍🍼|👩🏿‍🎓|👩🏿‍🎤|👩🏿‍🎨|👩🏿‍🏫|👩🏿‍🏭|👩🏿‍💻|👩🏿‍💼|👩🏿‍🔧|👩🏿‍🔬|👩🏿‍🚀|👩🏿‍🚒|👩🏿‍🦯|👩🏿‍🦰|👩🏿‍🦱|👩🏿‍🦲|👩🏿‍🦳|👩🏿‍🦼|👩🏿‍🦽|👮🏻‍♀️|👮🏻‍♂️|👮🏼‍♀️|👮🏼‍♂️|👮🏽‍♀️|👮🏽‍♂️|👮🏾‍♀️|👮🏾‍♂️|👮🏿‍♀️|👮🏿‍♂️|👯🏻‍♀️|👯🏻‍♂️|👯🏼‍♀️|👯🏼‍♂️|👯🏽‍♀️|👯🏽‍♂️|👯🏾‍♀️|👯🏾‍♂️|👯🏿‍♀️|👯🏿‍♂️|👰🏻‍♀️|👰🏻‍♂️|👰🏼‍♀️|👰🏼‍♂️|👰🏽‍♀️|👰🏽‍♂️|👰🏾‍♀️|👰🏾‍♂️|👰🏿‍♀️|👰🏿‍♂️|👱🏻‍♀️|👱🏻‍♂️|👱🏼‍♀️|👱🏼‍♂️|👱🏽‍♀️|👱🏽‍♂️|👱🏾‍♀️|👱🏾‍♂️|👱🏿‍♀️|👱🏿‍♂️|👳🏻‍♀️|👳🏻‍♂️|👳🏼‍♀️|👳🏼‍♂️|👳🏽‍♀️|👳🏽‍♂️|👳🏾‍♀️|👳🏾‍♂️|👳🏿‍♀️|👳🏿‍♂️|👷🏻‍♀️|👷🏻‍♂️|👷🏼‍♀️|👷🏼‍♂️|👷🏽‍♀️|👷🏽‍♂️|👷🏾‍♀️|👷🏾‍♂️|👷🏿‍♀️|👷🏿‍♂️|💁🏻‍♀️|💁🏻‍♂️|💁🏼‍♀️|💁🏼‍♂️|💁🏽‍♀️|💁🏽‍♂️|💁🏾‍♀️|💁🏾‍♂️|💁🏿‍♀️|💁🏿‍♂️|💂🏻‍♀️|💂🏻‍♂️|💂🏼‍♀️|💂🏼‍♂️|💂🏽‍♀️|💂🏽‍♂️|💂🏾‍♀️|💂🏾‍♂️|💂🏿‍♀️|💂🏿‍♂️|💆🏻‍♀️|💆🏻‍♂️|💆🏼‍♀️|💆🏼‍♂️|💆🏽‍♀️|💆🏽‍♂️|💆🏾‍♀️|💆🏾‍♂️|💆🏿‍♀️|💆🏿‍♂️|💇🏻‍♀️|💇🏻‍♂️|💇🏼‍♀️|💇🏼‍♂️|💇🏽‍♀️|💇🏽‍♂️|💇🏾‍♀️|💇🏾‍♂️|💇🏿‍♀️|💇🏿‍♂️|🕵🏻‍♀️|🕵🏻‍♂️|🕵🏼‍♀️|🕵🏼‍♂️|🕵🏽‍♀️|🕵🏽‍♂️|🕵🏾‍♀️|🕵🏾‍♂️|🕵🏿‍♀️|🕵🏿‍♂️|🙅🏻‍♀️|🙅🏻‍♂️|🙅🏼‍♀️|🙅🏼‍♂️|🙅🏽‍♀️|🙅🏽‍♂️|🙅🏾‍♀️|🙅🏾‍♂️|🙅🏿‍♀️|🙅🏿‍♂️|🙆🏻‍♀️|🙆🏻‍♂️|🙆🏼‍♀️|🙆🏼‍♂️|🙆🏽‍♀️|🙆🏽‍♂️|🙆🏾‍♀️|🙆🏾‍♂️|🙆🏿‍♀️|🙆🏿‍♂️|🙇🏻‍♀️|🙇🏻‍♂️|🙇🏼‍♀️|🙇🏼‍♂️|🙇🏽‍♀️|🙇🏽‍♂️|🙇🏾‍♀️|🙇🏾‍♂️|🙇🏿‍♀️|🙇🏿‍♂️|🙋🏻‍♀️|🙋🏻‍♂️|🙋🏼‍♀️|🙋🏼‍♂️|🙋🏽‍♀️|🙋🏽‍♂️|🙋🏾‍♀️|🙋🏾‍♂️|🙋🏿‍♀️|🙋🏿‍♂️|🙍🏻‍♀️|🙍🏻‍♂️|🙍🏼‍♀️|🙍🏼‍♂️|🙍🏽‍♀️|🙍🏽‍♂️|🙍🏾‍♀️|🙍🏾‍♂️|🙍🏿‍♀️|🙍🏿‍♂️|🙎🏻‍♀️|🙎🏻‍♂️|🙎🏼‍♀️|🙎🏼‍♂️|🙎🏽‍♀️|🙎🏽‍♂️|🙎🏾‍♀️|🙎🏾‍♂️|🙎🏿‍♀️|🙎🏿‍♂️|🚣🏻‍♀️|🚣🏻‍♂️|🚣🏼‍♀️|🚣🏼‍♂️|🚣🏽‍♀️|🚣🏽‍♂️|🚣🏾‍♀️|🚣🏾‍♂️|🚣🏿‍♀️|🚣🏿‍♂️|🚴🏻‍♀️|🚴🏻‍♂️|🚴🏼‍♀️|🚴🏼‍♂️|🚴🏽‍♀️|🚴🏽‍♂️|🚴🏾‍♀️|🚴🏾‍♂️|🚴🏿‍♀️|🚴🏿‍♂️|🚵🏻‍♀️|🚵🏻‍♂️|🚵🏼‍♀️|🚵🏼‍♂️|🚵🏽‍♀️|🚵🏽‍♂️|🚵🏾‍♀️|🚵🏾‍♂️|🚵🏿‍♀️|🚵🏿‍♂️|🚶🏻‍♀️|🚶🏻‍♂️|🚶🏻‍➡️|🚶🏼‍♀️|🚶🏼‍♂️|🚶🏼‍➡️|🚶🏽‍♀️|🚶🏽‍♂️|🚶🏽‍➡️|🚶🏾‍♀️|🚶🏾‍♂️|🚶🏾‍➡️|🚶🏿‍♀️|🚶🏿‍♂️|🚶🏿‍➡️|🤦🏻‍♀️|🤦🏻‍♂️|🤦🏼‍♀️|🤦🏼‍♂️|🤦🏽‍♀️|🤦🏽‍♂️|🤦🏾‍♀️|🤦🏾‍♂️|🤦🏿‍♀️|🤦🏿‍♂️|🤵🏻‍♀️|🤵🏻‍♂️|🤵🏼‍♀️|🤵🏼‍♂️|🤵🏽‍♀️|🤵🏽‍♂️|🤵🏾‍♀️|🤵🏾‍♂️|🤵🏿‍♀️|🤵🏿‍♂️|🤷🏻‍♀️|🤷🏻‍♂️|🤷🏼‍♀️|🤷🏼‍♂️|🤷🏽‍♀️|🤷🏽‍♂️|🤷🏾‍♀️|🤷🏾‍♂️|🤷🏿‍♀️|🤷🏿‍♂️|🤸🏻‍♀️|🤸🏻‍♂️|🤸🏼‍♀️|🤸🏼‍♂️|🤸🏽‍♀️|🤸🏽‍♂️|🤸🏾‍♀️|🤸🏾‍♂️|🤸🏿‍♀️|🤸🏿‍♂️|🤹🏻‍♀️|🤹🏻‍♂️|🤹🏼‍♀️|🤹🏼‍♂️|🤹🏽‍♀️|🤹🏽‍♂️|🤹🏾‍♀️|🤹🏾‍♂️|🤹🏿‍♀️|🤹🏿‍♂️|🤼🏻‍♀️|🤼🏻‍♂️|🤼🏼‍♀️|🤼🏼‍♂️|🤼🏽‍♀️|🤼🏽‍♂️|🤼🏾‍♀️|🤼🏾‍♂️|🤼🏿‍♀️|🤼🏿‍♂️|🤽🏻‍♀️|🤽🏻‍♂️|🤽🏼‍♀️|🤽🏼‍♂️|🤽🏽‍♀️|🤽🏽‍♂️|🤽🏾‍♀️|🤽🏾‍♂️|🤽🏿‍♀️|🤽🏿‍♂️|🤾🏻‍♀️|🤾🏻‍♂️|🤾🏼‍♀️|🤾🏼‍♂️|🤾🏽‍♀️|🤾🏽‍♂️|🤾🏾‍♀️|🤾🏾‍♂️|🤾🏿‍♀️|🤾🏿‍♂️|🦸🏻‍♀️|🦸🏻‍♂️|🦸🏼‍♀️|🦸🏼‍♂️|🦸🏽‍♀️|🦸🏽‍♂️|🦸🏾‍♀️|🦸🏾‍♂️|🦸🏿‍♀️|🦸🏿‍♂️|🦹🏻‍♀️|🦹🏻‍♂️|🦹🏼‍♀️|🦹🏼‍♂️|🦹🏽‍♀️|🦹🏽‍♂️|🦹🏾‍♀️|🦹🏾‍♂️|🦹🏿‍♀️|🦹🏿‍♂️|🧍🏻‍♀️|🧍🏻‍♂️|🧍🏼‍♀️|🧍🏼‍♂️|🧍🏽‍♀️|🧍🏽‍♂️|🧍🏾‍♀️|🧍🏾‍♂️|🧍🏿‍♀️|🧍🏿‍♂️|🧎🏻‍♀️|🧎🏻‍♂️|🧎🏻‍➡️|🧎🏼‍♀️|🧎🏼‍♂️|🧎🏼‍➡️|🧎🏽‍♀️|🧎🏽‍♂️|🧎🏽‍➡️|🧎🏾‍♀️|🧎🏾‍♂️|🧎🏾‍➡️|🧎🏿‍♀️|🧎🏿‍♂️|🧎🏿‍➡️|🧏🏻‍♀️|🧏🏻‍♂️|🧏🏼‍♀️|🧏🏼‍♂️|🧏🏽‍♀️|🧏🏽‍♂️|🧏🏾‍♀️|🧏🏾‍♂️|🧏🏿‍♀️|🧏🏿‍♂️|🧑🏻‍⚕️|🧑🏻‍⚖️|🧑🏻‍✈️|🧑🏻‍🌾|🧑🏻‍🍳|🧑🏻‍🍼|🧑🏻‍🎄|🧑🏻‍🎓|🧑🏻‍🎤|🧑🏻‍🎨|🧑🏻‍🏫|🧑🏻‍🏭|🧑🏻‍💻|🧑🏻‍💼|🧑🏻‍🔧|🧑🏻‍🔬|🧑🏻‍🚀|🧑🏻‍🚒|🧑🏻‍🦯|🧑🏻‍🦰|🧑🏻‍🦱|🧑🏻‍🦲|🧑🏻‍🦳|🧑🏻‍🦼|🧑🏻‍🦽|🧑🏻‍🩰|🧑🏼‍⚕️|🧑🏼‍⚖️|🧑🏼‍✈️|🧑🏼‍🌾|🧑🏼‍🍳|🧑🏼‍🍼|🧑🏼‍🎄|🧑🏼‍🎓|🧑🏼‍🎤|🧑🏼‍🎨|🧑🏼‍🏫|🧑🏼‍🏭|🧑🏼‍💻|🧑🏼‍💼|🧑🏼‍🔧|🧑🏼‍🔬|🧑🏼‍🚀|🧑🏼‍🚒|🧑🏼‍🦯|🧑🏼‍🦰|🧑🏼‍🦱|🧑🏼‍🦲|🧑🏼‍🦳|🧑🏼‍🦼|🧑🏼‍🦽|🧑🏼‍🩰|🧑🏽‍⚕️|🧑🏽‍⚖️|🧑🏽‍✈️|🧑🏽‍🌾|🧑🏽‍🍳|🧑🏽‍🍼|🧑🏽‍🎄|🧑🏽‍🎓|🧑🏽‍🎤|🧑🏽‍🎨|🧑🏽‍🏫|🧑🏽‍🏭|🧑🏽‍💻|🧑🏽‍💼|🧑🏽‍🔧|🧑🏽‍🔬|🧑🏽‍🚀|🧑🏽‍🚒|🧑🏽‍🦯|🧑🏽‍🦰|🧑🏽‍🦱|🧑🏽‍🦲|🧑🏽‍🦳|🧑🏽‍🦼|🧑🏽‍🦽|🧑🏽‍🩰|🧑🏾‍⚕️|🧑🏾‍⚖️|🧑🏾‍✈️|🧑🏾‍🌾|🧑🏾‍🍳|🧑🏾‍🍼|🧑🏾‍🎄|🧑🏾‍🎓|🧑🏾‍🎤|🧑🏾‍🎨|🧑🏾‍🏫|🧑🏾‍🏭|🧑🏾‍💻|🧑🏾‍💼|🧑🏾‍🔧|🧑🏾‍🔬|🧑🏾‍🚀|🧑🏾‍🚒|🧑🏾‍🦯|🧑🏾‍🦰|🧑🏾‍🦱|🧑🏾‍🦲|🧑🏾‍🦳|🧑🏾‍🦼|🧑🏾‍🦽|🧑🏾‍🩰|🧑🏿‍⚕️|🧑🏿‍⚖️|🧑🏿‍✈️|🧑🏿‍🌾|🧑🏿‍🍳|🧑🏿‍🍼|🧑🏿‍🎄|🧑🏿‍🎓|🧑🏿‍🎤|🧑🏿‍🎨|🧑🏿‍🏫|🧑🏿‍🏭|🧑🏿‍💻|🧑🏿‍💼|🧑🏿‍🔧|🧑🏿‍🔬|🧑🏿‍🚀|🧑🏿‍🚒|🧑🏿‍🦯|🧑🏿‍🦰|🧑🏿‍🦱|🧑🏿‍🦲|🧑🏿‍🦳|🧑🏿‍🦼|🧑🏿‍🦽|🧑🏿‍🩰|🧔🏻‍♀️|🧔🏻‍♂️|🧔🏼‍♀️|🧔🏼‍♂️|🧔🏽‍♀️|🧔🏽‍♂️|🧔🏾‍♀️|🧔🏾‍♂️|🧔🏿‍♀️|🧔🏿‍♂️|🧖🏻‍♀️|🧖🏻‍♂️|🧖🏼‍♀️|🧖🏼‍♂️|🧖🏽‍♀️|🧖🏽‍♂️|🧖🏾‍♀️|🧖🏾‍♂️|🧖🏿‍♀️|🧖🏿‍♂️|🧗🏻‍♀️|🧗🏻‍♂️|🧗🏼‍♀️|🧗🏼‍♂️|🧗🏽‍♀️|🧗🏽‍♂️|🧗🏾‍♀️|🧗🏾‍♂️|🧗🏿‍♀️|🧗🏿‍♂️|🧘🏻‍♀️|🧘🏻‍♂️|🧘🏼‍♀️|🧘🏼‍♂️|🧘🏽‍♀️|🧘🏽‍♂️|🧘🏾‍♀️|🧘🏾‍♂️|🧘🏿‍♀️|🧘🏿‍♂️|🧙🏻‍♀️|🧙🏻‍♂️|🧙🏼‍♀️|🧙🏼‍♂️|🧙🏽‍♀️|🧙🏽‍♂️|🧙🏾‍♀️|🧙🏾‍♂️|🧙🏿‍♀️|🧙🏿‍♂️|🧚🏻‍♀️|🧚🏻‍♂️|🧚🏼‍♀️|🧚🏼‍♂️|🧚🏽‍♀️|🧚🏽‍♂️|🧚🏾‍♀️|🧚🏾‍♂️|🧚🏿‍♀️|🧚🏿‍♂️|🧛🏻‍♀️|🧛🏻‍♂️|🧛🏼‍♀️|🧛🏼‍♂️|🧛🏽‍♀️|🧛🏽‍♂️|🧛🏾‍♀️|🧛🏾‍♂️|🧛🏿‍♀️|🧛🏿‍♂️|🧜🏻‍♀️|🧜🏻‍♂️|🧜🏼‍♀️|🧜🏼‍♂️|🧜🏽‍♀️|🧜🏽‍♂️|🧜🏾‍♀️|🧜🏾‍♂️|🧜🏿‍♀️|🧜🏿‍♂️|🧝🏻‍♀️|🧝🏻‍♂️|🧝🏼‍♀️|🧝🏼‍♂️|🧝🏽‍♀️|🧝🏽‍♂️|🧝🏾‍♀️|🧝🏾‍♂️|🧝🏿‍♀️|🧝🏿‍♂️|⛹🏻‍♀️|⛹🏻‍♂️|⛹🏼‍♀️|⛹🏼‍♂️|⛹🏽‍♀️|⛹🏽‍♂️|⛹🏾‍♀️|⛹🏾‍♂️|⛹🏿‍♀️|⛹🏿‍♂️|🏋️‍♀️|🏋️‍♂️|🏌️‍♀️|🏌️‍♂️|🏳️‍⚧️|🏳️‍🌈|🕵️‍♀️|🕵️‍♂️|😶‍🌫️|⛓️‍💥|⛹️‍♀️|⛹️‍♂️|❤️‍🔥|❤️‍🩹|🍄‍🟫|🍋‍🟩|🏃‍♀️|🏃‍♂️|🏃‍➡️|🏄‍♀️|🏄‍♂️|🏊‍♀️|🏊‍♂️|🏴‍☠️|🐕‍🦺|🐦‍🔥|🐻‍❄️|👨‍⚕️|👨‍⚖️|👨‍✈️|👨‍🌾|👨‍🍳|👨‍🍼|👨‍🎓|👨‍🎤|👨‍🎨|👨‍🏫|👨‍🏭|👨‍👦|👨‍👧|👨‍💻|👨‍💼|👨‍🔧|👨‍🔬|👨‍🚀|👨‍🚒|👨‍🦯|👨‍🦰|👨‍🦱|👨‍🦲|👨‍🦳|👨‍🦼|👨‍🦽|👩‍⚕️|👩‍⚖️|👩‍✈️|👩‍🌾|👩‍🍳|👩‍🍼|👩‍🎓|👩‍🎤|👩‍🎨|👩‍🏫|👩‍🏭|👩‍👦|👩‍👧|👩‍💻|👩‍💼|👩‍🔧|👩‍🔬|👩‍🚀|👩‍🚒|👩‍🦯|👩‍🦰|👩‍🦱|👩‍🦲|👩‍🦳|👩‍🦼|👩‍🦽|👮‍♀️|👮‍♂️|👯‍♀️|👯‍♂️|👰‍♀️|👰‍♂️|👱‍♀️|👱‍♂️|👳‍♀️|👳‍♂️|👷‍♀️|👷‍♂️|💁‍♀️|💁‍♂️|💂‍♀️|💂‍♂️|💆‍♀️|💆‍♂️|💇‍♀️|💇‍♂️|😮‍💨|😵‍💫|🙂‍↔️|🙂‍↕️|🙅‍♀️|🙅‍♂️|🙆‍♀️|🙆‍♂️|🙇‍♀️|🙇‍♂️|🙋‍♀️|🙋‍♂️|🙍‍♀️|🙍‍♂️|🙎‍♀️|🙎‍♂️|🚣‍♀️|🚣‍♂️|🚴‍♀️|🚴‍♂️|🚵‍♀️|🚵‍♂️|🚶‍♀️|🚶‍♂️|🚶‍➡️|🤦‍♀️|🤦‍♂️|🤵‍♀️|🤵‍♂️|🤷‍♀️|🤷‍♂️|🤸‍♀️|🤸‍♂️|🤹‍♀️|🤹‍♂️|🤼‍♀️|🤼‍♂️|🤽‍♀️|🤽‍♂️|🤾‍♀️|🤾‍♂️|🦸‍♀️|🦸‍♂️|🦹‍♀️|🦹‍♂️|🧍‍♀️|🧍‍♂️|🧎‍♀️|🧎‍♂️|🧎‍➡️|🧏‍♀️|🧏‍♂️|🧑‍⚕️|🧑‍⚖️|🧑‍✈️|🧑‍🌾|🧑‍🍳|🧑‍🍼|🧑‍🎄|🧑‍🎓|🧑‍🎤|🧑‍🎨|🧑‍🏫|🧑‍🏭|🧑‍💻|🧑‍💼|🧑‍🔧|🧑‍🔬|🧑‍🚀|🧑‍🚒|🧑‍🦯|🧑‍🦰|🧑‍🦱|🧑‍🦲|🧑‍🦳|🧑‍🦼|🧑‍🦽|🧑‍🧒|🧑‍🩰|🧔‍♀️|🧔‍♂️|🧖‍♀️|🧖‍♂️|🧗‍♀️|🧗‍♂️|🧘‍♀️|🧘‍♂️|🧙‍♀️|🧙‍♂️|🧚‍♀️|🧚‍♂️|🧛‍♀️|🧛‍♂️|🧜‍♀️|🧜‍♂️|🧝‍♀️|🧝‍♂️|🧞‍♀️|🧞‍♂️|🧟‍♀️|🧟‍♂️|\*️⃣|🇦🇨|🇦🇩|🇦🇪|🇦🇫|🇦🇬|🇦🇮|🇦🇱|🇦🇲|🇦🇴|🇦🇶|🇦🇷|🇦🇸|🇦🇹|🇦🇺|🇦🇼|🇦🇽|🇦🇿|🇧🇦|🇧🇧|🇧🇩|🇧🇪|🇧🇫|🇧🇬|🇧🇭|🇧🇮|🇧🇯|🇧🇱|🇧🇲|🇧🇳|🇧🇴|🇧🇶|🇧🇷|🇧🇸|🇧🇹|🇧🇻|🇧🇼|🇧🇾|🇧🇿|🇨🇦|🇨🇨|🇨🇩|🇨🇫|🇨🇬|🇨🇭|🇨🇮|🇨🇰|🇨🇱|🇨🇲|🇨🇳|🇨🇴|🇨🇵|🇨🇶|🇨🇷|🇨🇺|🇨🇻|🇨🇼|🇨🇽|🇨🇾|🇨🇿|🇩🇪|🇩🇬|🇩🇯|🇩🇰|🇩🇲|🇩🇴|🇩🇿|🇪🇦|🇪🇨|🇪🇪|🇪🇬|🇪🇭|🇪🇷|🇪🇸|🇪🇹|🇪🇺|🇫🇮|🇫🇯|🇫🇰|🇫🇲|🇫🇴|🇫🇷|🇬🇦|🇬🇧|🇬🇩|🇬🇪|🇬🇫|🇬🇬|🇬🇭|🇬🇮|🇬🇱|🇬🇲|🇬🇳|🇬🇵|🇬🇶|🇬🇷|🇬🇸|🇬🇹|🇬🇺|🇬🇼|🇬🇾|🇭🇰|🇭🇲|🇭🇳|🇭🇷|🇭🇹|🇭🇺|🇮🇨|🇮🇩|🇮🇪|🇮🇱|🇮🇲|🇮🇳|🇮🇴|🇮🇶|🇮🇷|🇮🇸|🇮🇹|🇯🇪|🇯🇲|🇯🇴|🇯🇵|🇰🇪|🇰🇬|🇰🇭|🇰🇮|🇰🇲|🇰🇳|🇰🇵|🇰🇷|🇰🇼|🇰🇾|🇰🇿|🇱🇦|🇱🇧|🇱🇨|🇱🇮|🇱🇰|🇱🇷|🇱🇸|🇱🇹|🇱🇺|🇱🇻|🇱🇾|🇲🇦|🇲🇨|🇲🇩|🇲🇪|🇲🇫|🇲🇬|🇲🇭|🇲🇰|🇲🇱|🇲🇲|🇲🇳|🇲🇴|🇲🇵|🇲🇶|🇲🇷|🇲🇸|🇲🇹|🇲🇺|🇲🇻|🇲🇼|🇲🇽|🇲🇾|🇲🇿|🇳🇦|🇳🇨|🇳🇪|🇳🇫|🇳🇬|🇳🇮|🇳🇱|🇳🇴|🇳🇵|🇳🇷|🇳🇺|🇳🇿|🇴🇲|🇵🇦|🇵🇪|🇵🇫|🇵🇬|🇵🇭|🇵🇰|🇵🇱|🇵🇲|🇵🇳|🇵🇷|🇵🇸|🇵🇹|🇵🇼|🇵🇾|🇶🇦|🇷🇪|🇷🇴|🇷🇸|🇷🇺|🇷🇼|🇸🇦|🇸🇧|🇸🇨|🇸🇩|🇸🇪|🇸🇬|🇸🇭|🇸🇮|🇸🇯|🇸🇰|🇸🇱|🇸🇲|🇸🇳|🇸🇴|🇸🇷|🇸🇸|🇸🇹|🇸🇻|🇸🇽|🇸🇾|🇸🇿|🇹🇦|🇹🇨|🇹🇩|🇹🇫|🇹🇬|🇹🇭|🇹🇯|🇹🇰|🇹🇱|🇹🇲|🇹🇳|🇹🇴|🇹🇷|🇹🇹|🇹🇻|🇹🇼|🇹🇿|🇺🇦|🇺🇬|🇺🇲|🇺🇳|🇺🇸|🇺🇾|🇺🇿|🇻🇦|🇻🇨|🇻🇪|🇻🇬|🇻🇮|🇻🇳|🇻🇺|🇼🇫|🇼🇸|🇽🇰|🇾🇪|🇾🇹|🇿🇦|🇿🇲|🇿🇼|🎅🏻|🎅🏼|🎅🏽|🎅🏾|🎅🏿|🏂🏻|🏂🏼|🏂🏽|🏂🏾|🏂🏿|🏃🏻|🏃🏼|🏃🏽|🏃🏾|🏃🏿|🏄🏻|🏄🏼|🏄🏽|🏄🏾|🏄🏿|🏇🏻|🏇🏼|🏇🏽|🏇🏾|🏇🏿|🏊🏻|🏊🏼|🏊🏽|🏊🏾|🏊🏿|🏋🏻|🏋🏼|🏋🏽|🏋🏾|🏋🏿|🏌🏻|🏌🏼|🏌🏽|🏌🏾|🏌🏿|🐈‍⬛|🐦‍⬛|👂🏻|👂🏼|👂🏽|👂🏾|👂🏿|👃🏻|👃🏼|👃🏽|👃🏾|👃🏿|👆🏻|👆🏼|👆🏽|👆🏾|👆🏿|👇🏻|👇🏼|👇🏽|👇🏾|👇🏿|👈🏻|👈🏼|👈🏽|👈🏾|👈🏿|👉🏻|👉🏼|👉🏽|👉🏾|👉🏿|👊🏻|👊🏼|👊🏽|👊🏾|👊🏿|👋🏻|👋🏼|👋🏽|👋🏾|👋🏿|👌🏻|👌🏼|👌🏽|👌🏾|👌🏿|👍🏻|👍🏼|👍🏽|👍🏾|👍🏿|👎🏻|👎🏼|👎🏽|👎🏾|👎🏿|👏🏻|👏🏼|👏🏽|👏🏾|👏🏿|👐🏻|👐🏼|👐🏽|👐🏾|👐🏿|👦🏻|👦🏼|👦🏽|👦🏾|👦🏿|👧🏻|👧🏼|👧🏽|👧🏾|👧🏿|👨🏻|👨🏼|👨🏽|👨🏾|👨🏿|👩🏻|👩🏼|👩🏽|👩🏾|👩🏿|👫🏻|👫🏼|👫🏽|👫🏾|👫🏿|👬🏻|👬🏼|👬🏽|👬🏾|👬🏿|👭🏻|👭🏼|👭🏽|👭🏾|👭🏿|👮🏻|👮🏼|👮🏽|👮🏾|👮🏿|👯🏻|👯🏼|👯🏽|👯🏾|👯🏿|👰🏻|👰🏼|👰🏽|👰🏾|👰🏿|👱🏻|👱🏼|👱🏽|👱🏾|👱🏿|👲🏻|👲🏼|👲🏽|👲🏾|👲🏿|👳🏻|👳🏼|👳🏽|👳🏾|👳🏿|👴🏻|👴🏼|👴🏽|👴🏾|👴🏿|👵🏻|👵🏼|👵🏽|👵🏾|👵🏿|👶🏻|👶🏼|👶🏽|👶🏾|👶🏿|👷🏻|👷🏼|👷🏽|👷🏾|👷🏿|👸🏻|👸🏼|👸🏽|👸🏾|👸🏿|👼🏻|👼🏼|👼🏽|👼🏾|👼🏿|💁🏻|💁🏼|💁🏽|💁🏾|💁🏿|💂🏻|💂🏼|💂🏽|💂🏾|💂🏿|💃🏻|💃🏼|💃🏽|💃🏾|💃🏿|💅🏻|💅🏼|💅🏽|💅🏾|💅🏿|💆🏻|💆🏼|💆🏽|💆🏾|💆🏿|💇🏻|💇🏼|💇🏽|💇🏾|💇🏿|💏🏻|💏🏼|💏🏽|💏🏾|💏🏿|💑🏻|💑🏼|💑🏽|💑🏾|💑🏿|💪🏻|💪🏼|💪🏽|💪🏾|💪🏿|🕴🏻|🕴🏼|🕴🏽|🕴🏾|🕴🏿|🕵🏻|🕵🏼|🕵🏽|🕵🏾|🕵🏿|🕺🏻|🕺🏼|🕺🏽|🕺🏾|🕺🏿|🖐🏻|🖐🏼|🖐🏽|🖐🏾|🖐🏿|🖕🏻|🖕🏼|🖕🏽|🖕🏾|🖕🏿|🖖🏻|🖖🏼|🖖🏽|🖖🏾|🖖🏿|🙅🏻|🙅🏼|🙅🏽|🙅🏾|🙅🏿|🙆🏻|🙆🏼|🙆🏽|🙆🏾|🙆🏿|🙇🏻|🙇🏼|🙇🏽|🙇🏾|🙇🏿|🙋🏻|🙋🏼|🙋🏽|🙋🏾|🙋🏿|🙌🏻|🙌🏼|🙌🏽|🙌🏾|🙌🏿|🙍🏻|🙍🏼|🙍🏽|🙍🏾|🙍🏿|🙎🏻|🙎🏼|🙎🏽|🙎🏾|🙎🏿|🙏🏻|🙏🏼|🙏🏽|🙏🏾|🙏🏿|🚣🏻|🚣🏼|🚣🏽|🚣🏾|🚣🏿|🚴🏻|🚴🏼|🚴🏽|🚴🏾|🚴🏿|🚵🏻|🚵🏼|🚵🏽|🚵🏾|🚵🏿|🚶🏻|🚶🏼|🚶🏽|🚶🏾|🚶🏿|🛀🏻|🛀🏼|🛀🏽|🛀🏾|🛀🏿|🛌🏻|🛌🏼|🛌🏽|🛌🏾|🛌🏿|🤌🏻|🤌🏼|🤌🏽|🤌🏾|🤌🏿|🤏🏻|🤏🏼|🤏🏽|🤏🏾|🤏🏿|🤘🏻|🤘🏼|🤘🏽|🤘🏾|🤘🏿|🤙🏻|🤙🏼|🤙🏽|🤙🏾|🤙🏿|🤚🏻|🤚🏼|🤚🏽|🤚🏾|🤚🏿|🤛🏻|🤛🏼|🤛🏽|🤛🏾|🤛🏿|🤜🏻|🤜🏼|🤜🏽|🤜🏾|🤜🏿|🤝🏻|🤝🏼|🤝🏽|🤝🏾|🤝🏿|🤞🏻|🤞🏼|🤞🏽|🤞🏾|🤞🏿|🤟🏻|🤟🏼|🤟🏽|🤟🏾|🤟🏿|🤦🏻|🤦🏼|🤦🏽|🤦🏾|🤦🏿|🤰🏻|🤰🏼|🤰🏽|🤰🏾|🤰🏿|🤱🏻|🤱🏼|🤱🏽|🤱🏾|🤱🏿|🤲🏻|🤲🏼|🤲🏽|🤲🏾|🤲🏿|🤳🏻|🤳🏼|🤳🏽|🤳🏾|🤳🏿|🤴🏻|🤴🏼|🤴🏽|🤴🏾|🤴🏿|🤵🏻|🤵🏼|🤵🏽|🤵🏾|🤵🏿|🤶🏻|🤶🏼|🤶🏽|🤶🏾|🤶🏿|🤷🏻|🤷🏼|🤷🏽|🤷🏾|🤷🏿|🤸🏻|🤸🏼|🤸🏽|🤸🏾|🤸🏿|🤹🏻|🤹🏼|🤹🏽|🤹🏾|🤹🏿|🤼🏻|🤼🏼|🤼🏽|🤼🏾|🤼🏿|🤽🏻|🤽🏼|🤽🏽|🤽🏾|🤽🏿|🤾🏻|🤾🏼|🤾🏽|🤾🏾|🤾🏿|🥷🏻|🥷🏼|🥷🏽|🥷🏾|🥷🏿|🦵🏻|🦵🏼|🦵🏽|🦵🏾|🦵🏿|🦶🏻|🦶🏼|🦶🏽|🦶🏾|🦶🏿|🦸🏻|🦸🏼|🦸🏽|🦸🏾|🦸🏿|🦹🏻|🦹🏼|🦹🏽|🦹🏾|🦹🏿|🦻🏻|🦻🏼|🦻🏽|🦻🏾|🦻🏿|🧍🏻|🧍🏼|🧍🏽|🧍🏾|🧍🏿|🧎🏻|🧎🏼|🧎🏽|🧎🏾|🧎🏿|🧏🏻|🧏🏼|🧏🏽|🧏🏾|🧏🏿|🧑🏻|🧑🏼|🧑🏽|🧑🏾|🧑🏿|🧒🏻|🧒🏼|🧒🏽|🧒🏾|🧒🏿|🧓🏻|🧓🏼|🧓🏽|🧓🏾|🧓🏿|🧔🏻|🧔🏼|🧔🏽|🧔🏾|🧔🏿|🧕🏻|🧕🏼|🧕🏽|🧕🏾|🧕🏿|🧖🏻|🧖🏼|🧖🏽|🧖🏾|🧖🏿|🧗🏻|🧗🏼|🧗🏽|🧗🏾|🧗🏿|🧘🏻|🧘🏼|🧘🏽|🧘🏾|🧘🏿|🧙🏻|🧙🏼|🧙🏽|🧙🏾|🧙🏿|🧚🏻|🧚🏼|🧚🏽|🧚🏾|🧚🏿|🧛🏻|🧛🏼|🧛🏽|🧛🏾|🧛🏿|🧜🏻|🧜🏼|🧜🏽|🧜🏾|🧜🏿|🧝🏻|🧝🏼|🧝🏽|🧝🏾|🧝🏿|🫃🏻|🫃🏼|🫃🏽|🫃🏾|🫃🏿|🫄🏻|🫄🏼|🫄🏽|🫄🏾|🫄🏿|🫅🏻|🫅🏼|🫅🏽|🫅🏾|🫅🏿|🫰🏻|🫰🏼|🫰🏽|🫰🏾|🫰🏿|🫱🏻|🫱🏼|🫱🏽|🫱🏾|🫱🏿|🫲🏻|🫲🏼|🫲🏽|🫲🏾|🫲🏿|🫳🏻|🫳🏼|🫳🏽|🫳🏾|🫳🏿|🫴🏻|🫴🏼|🫴🏽|🫴🏾|🫴🏿|🫵🏻|🫵🏼|🫵🏽|🫵🏾|🫵🏿|🫶🏻|🫶🏼|🫶🏽|🫶🏾|🫶🏿|🫷🏻|🫷🏼|🫷🏽|🫷🏾|🫷🏿|🫸🏻|🫸🏼|🫸🏽|🫸🏾|🫸🏿|#️⃣|0️⃣|1️⃣|2️⃣|3️⃣|4️⃣|5️⃣|6️⃣|7️⃣|8️⃣|9️⃣|☝🏻|☝🏼|☝🏽|☝🏾|☝🏿|⛹🏻|⛹🏼|⛹🏽|⛹🏾|⛹🏿|✊🏻|✊🏼|✊🏽|✊🏾|✊🏿|✋🏻|✋🏼|✋🏽|✋🏾|✋🏿|✌🏻|✌🏼|✌🏽|✌🏾|✌🏿|✍🏻|✍🏼|✍🏽|✍🏾|✍🏿|🅰️|🅱️|🅾️|🅿️|🈂️|🈷️|🌡️|🌤️|🌥️|🌦️|🌧️|🌨️|🌩️|🌪️|🌫️|🌬️|🌶️|🍽️|🎖️|🎗️|🎙️|🎚️|🎛️|🎞️|🎟️|🏋️|🏌️|🏍️|🏎️|🏔️|🏕️|🏖️|🏗️|🏘️|🏙️|🏚️|🏛️|🏜️|🏝️|🏞️|🏟️|🏳️|🏵️|🏷️|🐿️|👁️|📽️|🕉️|🕊️|🕯️|🕰️|🕳️|🕴️|🕵️|🕶️|🕷️|🕸️|🕹️|🖇️|🖊️|🖋️|🖌️|🖍️|🖐️|🖥️|🖨️|🖱️|🖲️|🖼️|🗂️|🗃️|🗄️|🗑️|🗒️|🗓️|🗜️|🗝️|🗞️|🗡️|🗣️|🗨️|🗯️|🗳️|🗺️|🛋️|🛍️|🛎️|🛏️|🛠️|🛡️|🛢️|🛣️|🛤️|🛥️|🛩️|🛰️|🛳️|©️|®️|‼️|⁉️|™️|ℹ️|↔️|↕️|↖️|↗️|↘️|↙️|↩️|↪️|⌨️|⏏️|⏭️|⏮️|⏯️|⏱️|⏲️|⏸️|⏹️|⏺️|Ⓜ️|▪️|▫️|▶️|◀️|◻️|◼️|☀️|☁️|☂️|☃️|☄️|☎️|☑️|☘️|☝️|☠️|☢️|☣️|☦️|☪️|☮️|☯️|☸️|☹️|☺️|♀️|♂️|♟️|♠️|♣️|♥️|♦️|♨️|♻️|♾️|⚒️|⚔️|⚕️|⚖️|⚗️|⚙️|⚛️|⚜️|⚠️|⚧️|⚰️|⚱️|⛈️|⛏️|⛑️|⛓️|⛩️|⛰️|⛱️|⛴️|⛷️|⛸️|⛹️|✂️|✈️|✉️|✌️|✍️|✏️|✒️|✔️|✖️|✝️|✡️|✳️|✴️|❄️|❇️|❣️|❤️|➡️|⤴️|⤵️|⬅️|⬆️|⬇️|〰️|〽️|㊗️|㊙️|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F393}\u{1F3A0}-\u{1F3CA}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F4}\u{1F3F8}-\u{1F43E}\u{1F440}\u{1F442}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F57A}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5FB}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CC}\u{1F6D0}-\u{1F6D2}\u{1F6D5}-\u{1F6D8}\u{1F6DC}-\u{1F6DF}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6FC}\u{1F7E0}-\u{1F7EB}\u{1F7F0}\u{1F90C}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F9FF}\u{1FA70}-\u{1FA7C}\u{1FA80}-\u{1FA8A}\u{1FA8E}-\u{1FAC6}\u{1FAC8}\u{1FACD}-\u{1FADC}\u{1FADF}-\u{1FAEA}\u{1FAEF}-\u{1FAF8}])/gu).length):m=(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)("i",{className:"material-icons gray",children:"warning_amber"})," ",(0,c.jsx)("i",{className:"gray",children:(0,c.jsx)(a.FormattedMessage,{id:"invalid_content",defaultMessage:"invalid content",description:"Shown when the message is unreadable"})})]});return(0,c.jsxs)("li",{ref:this.props.innerRef,className:e,children:[this.props.selectMode?(0,c.jsx)("i",{className:"material-icons select-checkbox"+(this.props.selected?" blue":""),onClick:()=>this.props.onToggleSelect(this.props.seq),children:this.props.selected?"check_circle":"radio_button_unchecked"}):null,this.props.isGroup&&this.props.response?(0,c.jsx)("div",{className:"avatar-box",children:p?(0,c.jsx)(v.A,{authorizeURL:this.props.tinode.authorizeURL,topic:this.props.userFrom,title:this.props.userName,avatar:s}):null}):null,i&&r?(0,c.jsx)("i",{className:"material-icons red message-fail-icon",children:"error"}):null,(0,c.jsxs)("div",{children:[(0,c.jsxs)("div",{className:t,children:[h?(0,c.jsx)("i",{className:"voice-unread-dot"}):null,(0,c.jsxs)("div",{className:"content-meta",children:[(0,c.jsxs)("div",{className:d,children:[g||m,b]}),this.props.timestamp?(0,c.jsx)(y,{edited:this.props.edited,timestamp:this.props.timestamp,received:this.props.received}):null]}),this.props.showContextMenu&&!this.props.selectMode?(0,c.jsx)("span",{className:"menuTrigger",children:(0,c.jsx)("a",{href:"#",onClick:this.handleContextClick,children:(0,c.jsx)("i",{className:"material-icons",children:"expand_more"})})}):null]}),r,p?(0,c.jsxs)("div",{className:"author",children:[this.props.userName||(0,c.jsx)("i",{children:(0,c.jsx)(a.FormattedMessage,{id:"user_not_found",defaultMessage:"Not found",description:"In place of a user's full name when the user is not found."})}),"owner"==this.props.senderRole?(0,c.jsx)("em",{className:"role-badge owner",children:"群主"}):"admin"==this.props.senderRole?(0,c.jsx)("em",{className:"role-badge admin",children:"管理员"}):null]}):null]})]})}}const _=(0,a.injectIntl)(j);var A=n().forwardRef((e,t)=>(0,c.jsx)(_,{innerRef:t,...e})),P=s(6565),T=s(3405),D=s(3272),E=s(7981);class k extends n().Component{constructor(e){super(e)}render(){const e=[],t=(this.props.subscribers||[]).length,s=Math.min(4,t);return(this.props.subscribers||[]).some(t=>(e.push((0,c.jsx)("div",{className:"avatar-box",children:(0,c.jsx)(v.A,{authorizeURL:this.props.tinode.authorizeURL,topic:t.user,avatar:(0,E.to)(t.public?t.public.photo:null)||!0,title:t.public?t.public.fn:null})},t.user)),e.length==s)),0==e.length?null:(0,c.jsxs)("div",{id:"topic-users",children:[e," ",t>s?(0,c.jsx)("span",{children:(0,c.jsx)(a.FormattedMessage,{id:"more_online_members",defaultMessage:"+{overflow} more",description:"Shown in MessagesView title bar when the number of online subscribers exceeds MAX_ONLINE_IN_TOPIC",values:{overflow:t-s}})}):null]})}}class F extends n().PureComponent{constructor(e){super(e),this.handleButtonAction=this.handleButtonAction.bind(this)}handleButtonAction(e,t){e.preventDefault(),this.props.onAction(t)}render(){return(0,c.jsxs)("div",{className:"accept-invite-panel",children:[(0,c.jsx)("div",{className:"title",children:(0,c.jsx)(a.FormattedMessage,{id:"chat_invitation",defaultMessage:"You are invited to start a new chat. What would you like to do?",description:"New chat invitation message: [Accept] [Ignore] [Block]."})}),(0,c.jsxs)("div",{className:"footer",children:[(0,c.jsx)("button",{className:"primary",onClick:e=>{this.handleButtonAction(e,"accept")},children:(0,c.jsx)(a.FormattedMessage,{id:"chat_invitation_accept",defaultMessage:"Accept",description:"Action [Accept] for chat invitation."})}),(0,c.jsx)("button",{className:"secondary",onClick:e=>{this.handleButtonAction(e,"delete")},children:(0,c.jsx)(a.FormattedMessage,{id:"chat_invitation_ignore",defaultMessage:"Ignore",description:"Action [Ignore] for chat invitation."})}),(0,c.jsx)("button",{className:"secondary",onClick:e=>{this.handleButtonAction(e,"block")},children:(0,c.jsx)(a.FormattedMessage,{id:"chat_invitation_block",defaultMessage:"Block",description:"Action [Block] for chat invitation."})})]})]})}}var R=s(9304);function N({children:e}){return(0,c.jsx)("i",{className:"material-icons","aria-hidden":"true",children:e})}class I extends n().PureComponent{render(){return(0,c.jsx)("div",{id:"dummy-view",children:(0,c.jsxs)("div",{children:[(0,c.jsx)("span",{id:"dummy-view-icon",children:(0,c.jsx)(N,{children:"forum"})}),(0,c.jsx)("h2",{children:D.iv}),(0,c.jsx)("p",{children:"选择一个会话开始聊天"})]})})}}class U extends n().PureComponent{constructor(e){super(e)}render(){let e=null,t="bubble";return this.props.date?(e=(0,c.jsx)(c.Fragment,{children:this.props.date}),t+=" date"):this.props.deleted&&(e=(0,c.jsx)("i",{className:"gray",children:this.props.deletedText||"消息已删除"}),t+=" deleted"),e?(0,c.jsx)("li",{className:"meta",children:(0,c.jsx)("div",{className:t,children:(0,c.jsx)("div",{className:"message-content",children:e})})}):(0,c.jsx)(c.Fragment,{children:null})}}const L=(0,a.defineMessages)({message_not_found:{id:"message_not_found",defaultMessage:"message not found",description:"Pinned message is not found"},message_deleted:{id:"message_deleted",defaultMessage:"message deleted",description:"Pinned message is deleted"}});class q extends n().PureComponent{constructor(e){super(e),this.touchX=null,this.touchY=null,this.touchSurface=n().createRef(),this.getSelectedIndex=this.getSelectedIndex.bind(this),this.handleCancel=this.handleCancel.bind(this),this.handleSelected=this.handleSelected.bind(this),this.handleMoveNext=this.handleMoveNext.bind(this),this.handleMovePrev=this.handleMovePrev.bind(this),this.handleTouchEventStart=this.handleTouchEventStart.bind(this),this.handleTouchEventEnd=this.handleTouchEventEnd.bind(this),this.handleTouchCancel=this.handleTouchCancel.bind(this)}componentDidMount(){this.touchSurface.current.addEventListener("touchstart",this.handleTouchEventStart,{passive:!0}),this.touchSurface.current.addEventListener("touchend",this.handleTouchEventEnd,{passive:!0}),this.touchSurface.current.addEventListener("touchcancel",this.handleTouchCancel,{passive:!0})}componentWillUnmount(){this.touchSurface.current.removeEventListener("touchstart",this.handleTouchEventStart),this.touchSurface.current.removeEventListener("touchend",this.handleTouchEventEnd),this.touchSurface.current.removeEventListener("touchcancel",this.handleTouchCancel)}getSelectedIndex(){return(this.props.pins||[]).length-this.props.selected-1}handleCancel(e){e.preventDefault(),this.props.onCancel(this.props.pins[this.getSelectedIndex()])}handleSelected(e){e.preventDefault(),this.props.onSelected(this.props.pins[this.getSelectedIndex()])}handleMoveNext(e,t){t||e.preventDefault(),e.stopPropagation();const s=Math.max(this.props.selected-1,0);s!=this.props.selected&&this.props.setSelected(s)}handleMovePrev(e,t){t||e.preventDefault(),e.stopPropagation();const s=Math.min(this.props.selected+1,(this.props.pins||[]).length-1);s!=this.props.selected&&this.props.setSelected(s)}handleTouchEventStart(e){1==e.touches.length&&(this.touchX=e.touches[0].clientX,this.touchY=e.touches[0].clientY)}handleTouchEventEnd(e){if(null===this.touchX||1!=e.changedTouches.length)return void(this.touchX=null);const t=this.touchX-e.changedTouches[0].clientX,s=this.touchY-e.changedTouches[0].clientY;this.touchX=null,Math.abs(t)>Math.abs(s)||Math.abs(s)<39||(s>0?this.handleMovePrev(e,!0):this.handleMoveNext(e,!0))}handleTouchCancel(){this.touchX=null}render(){const e=this.getSelectedIndex();let t=(this.props.messages||[])[e];t=t?t._deleted?(0,c.jsx)("i",{className:"gray",children:this.props.intl.formatMessage(L.message_deleted)}):o.Drafty.format(t.content,x.TU,{formatMessage:this.props.intl.formatMessage.bind(this.props.intl),authorizeURL:this.props.tinode.authorizeURL.bind(this.props.tinode)}):(0,c.jsx)("i",{className:"gray",children:this.props.intl.formatMessage(L.message_not_found)});const s=[];return this.props.pins.forEach(t=>{const i=s.length==e?"adot":"dot";s.push((0,c.jsx)("div",{className:i},t))}),(0,c.jsxs)("div",{id:"pinned-wrapper",ref:this.touchSurface,children:[this.props.isAdmin?(0,c.jsx)("div",{className:"cancel",children:(0,c.jsx)("a",{href:"#",onClick:this.handleCancel,children:(0,c.jsx)("i",{className:"material-icons gray",children:"close"})})}):(0,c.jsx)("div",{children:(0,c.jsx)("i",{className:"material-icons gray",children:"push_pin"})}),(0,c.jsx)("div",{className:"pinned-scroll",children:s}),(0,c.jsx)("div",{className:"pinned",onClick:this.handleSelected,children:(0,c.jsx)("p",{children:t})}),(0,c.jsxs)("div",{className:"pinned-menu",children:[(0,c.jsx)("span",{className:"menuTrigger upper",children:e>0?(0,c.jsx)("a",{href:"#",onClick:this.handleMovePrev,children:(0,c.jsx)("i",{className:"material-icons",children:"expand_less"})}):null}),(0,c.jsx)("span",{className:"menuTrigger lower",children:this.props.selected>0?(0,c.jsx)("a",{href:"#",onClick:this.handleMoveNext,children:(0,c.jsx)("i",{className:"material-icons",children:"expand_more"})}):null})]})]})}}var z=(0,a.injectIntl)(q),O=s(781),V=s(5372);const H=n().lazy(e=>s.e(821).then(s.bind(s,7821))),B=n().lazy(e=>s.e(623).then(s.bind(s,1623))),Q=n().lazy(e=>s.e(534).then(s.bind(s,8534))),G=n().lazy(e=>Promise.all([s.e(892),s.e(803)]).then(s.bind(s,4803))),W=n().lazy(e=>s.e(592).then(s.bind(s,4592))),J=(0,a.defineMessages)({message_deleted:{id:"message_deleted",defaultMessage:"message deleted",description:"Placeholder shown in the timeline where a message was recalled or deleted"},online_now:{id:"online_now",defaultMessage:"online now",description:"Indicator that the user or topic is currently online"},last_seen:{id:"last_seen_timestamp",defaultMessage:"Last seen: {timestamp}",description:"Label for the timestamp of when the user or topic was last online"},not_found:{id:"title_not_found",defaultMessage:"Not found",description:"Title shown when topic is not found"},channel:{id:"channel",defaultMessage:"channel",description:"Subtitle shown for channels in MessagesView instead of last seen"},file_attachment_too_large:{id:"file_attachment_too_large",defaultMessage:"The file size {size} exceeds the {limit} limit.",description:"Error message when attachment is too large"},invalid_content:{id:"invalid_content",defaultMessage:"invalid content",description:"Shown when the message is unreadable"},editing_message:{id:"editing_message",defaultMessage:"Editing",description:"Title over message editing preview"},drag_file:{id:"drag_file",defaultMessage:"Drag file here",description:"Prompt on the file drag-n-drop overlay banner"},self_topic_name:{id:"self_topic_name",defaultMessage:"Saved messages",description:"Name of self topic for UI"},subscriber_count:{id:"subscriber_count",defaultMessage:"{count, plural, one {{count, number} subscriber} two {{count, number} subscribers} three {{count, number} subscribers} few {{count, number} subscribers} many {{count, number} subscribers} other {{count, number} subscribers}}",description:"Count of channel subscribers"},member_count:{id:"member_count",defaultMessage:"{count, plural, one {{count, number} member} two {{count, number} members} three {{count, number} members} few {{count, number} members} many {{count, number} members} other {{count, number} members}}",description:"Count of group topic members"},cannot_parse_vcard:{id:"cannot_parse_vcard",defaultMessage:"Cannot parse vCard file.",description:"Error message when vCard file cannot be parsed"}});function K(e){if(e){const t=e.getExcessive()||"";return e.isJoiner("given")&&(t.includes("R")||t.includes("W"))}return!1}function Y(e){if(e){const t=e.getMissing()||"";return e.isJoiner("want")&&(t.includes("R")||t.includes("W"))}return!1}const X="__mention_all__";function $(e){return 1==e||3==e}class Z extends n().Component{constructor(e){super(e),this.state=Z.getDerivedStateFromProps(e,{}),this.state.messagePolicy=null,this.state.toast=null,this.state.riskDialog=null,this.mentionedUsers=[],this.mentionAllPending=!1,this.componentSetup=this.componentSetup.bind(this),this.leave=this.leave.bind(this),this.sendMessage=this.sendMessage.bind(this),this.handleRiskConfirm=this.handleRiskConfirm.bind(this),this.handleRiskCancel=this.handleRiskCancel.bind(this),this.retrySend=this.retrySend.bind(this),this.sendImageAttachment=this.sendImageAttachment.bind(this),this.sendVideoAttachment=this.sendVideoAttachment.bind(this),this.sendFileAttachment=this.sendFileAttachment.bind(this),this.sendAudioAttachment=this.sendAudioAttachment.bind(this),this.sendTheCardAttachment=this.sendTheCardAttachment.bind(this),this.sendKeyPress=this.sendKeyPress.bind(this),this.subscribe=this.subscribe.bind(this),this.handleScrollReference=this.handleScrollReference.bind(this),this.mountDnDEvents=this.mountDnDEvents.bind(this),this.handleScrollEvent=this.handleScrollEvent.bind(this),this.handleDescChange=this.handleDescChange.bind(this),this.handleSubsUpdated=this.handleSubsUpdated.bind(this),this.handleMessageUpdate=this.handleMessageUpdate.bind(this),this.handleAuxUpdate=this.handleAuxUpdate.bind(this),this.handleAllMessagesReceived=this.handleAllMessagesReceived.bind(this),this.handleInfoReceipt=this.handleInfoReceipt.bind(this),this.handleExpandMedia=this.handleExpandMedia.bind(this),this.handleClosePreview=this.handleClosePreview.bind(this),this.handleCallPanelToggle=this.handleCallPanelToggle.bind(this),this.handleFormResponse=this.handleFormResponse.bind(this),this.handleContextClick=this.handleContextClick.bind(this),this.handleShowMessageContextMenu=this.handleShowMessageContextMenu.bind(this),this.handleNewChatAcceptance=this.handleNewChatAcceptance.bind(this),this.handleEnablePeer=this.handleEnablePeer.bind(this),this.loadRelationshipContext=this.loadRelationshipContext.bind(this),this.loadGroupContext=this.loadGroupContext.bind(this),this.loadDraft=this.loadDraft.bind(this),this.handleComposerChange=this.handleComposerChange.bind(this),this.clearDraft=this.clearDraft.bind(this),this.mentionSearch=this.mentionSearch.bind(this),this.mentionSelected=this.mentionSelected.bind(this),this.handleShowAnnouncement=this.handleShowAnnouncement.bind(this),this.handleShowJoinRequests=this.handleShowJoinRequests.bind(this),this.handleSendFriendVerification=this.handleSendFriendVerification.bind(this),this.handleBatchDelete=this.handleBatchDelete.bind(this),this.handleBatchFavorite=this.handleBatchFavorite.bind(this),this.handleAttachFile=this.handleAttachFile.bind(this),this.handleAttachImageOrVideo=this.handleAttachImageOrVideo.bind(this),this.handleCancelUpload=this.handleCancelUpload.bind(this),this.postReadNotification=this.postReadNotification.bind(this),this.clearNotificationQueue=this.clearNotificationQueue.bind(this),this.goToLatestMessage=this.goToLatestMessage.bind(this),this.handleFileDrop=this.handleFileDrop.bind(this),this.handlePickReply=this.handlePickReply.bind(this),this.handleEditMessage=this.handleEditMessage.bind(this),this.handleCancelReply=this.handleCancelReply.bind(this),this.handleQuoteClick=this.handleQuoteClick.bind(this),this.jumpToMessage=this.jumpToMessage.bind(this),this.handleUnpinMessage=this.handleUnpinMessage.bind(this),this.handleCallHangup=this.handleCallHangup.bind(this),this.isDragEnabled=this.isDragEnabled.bind(this),this.handleDragStart=this.handleDragStart.bind(this),this.handleDragIn=this.handleDragIn.bind(this),this.handleDragOut=this.handleDragOut.bind(this),this.handleDrag=this.handleDrag.bind(this),this.handleDrop=this.handleDrop.bind(this),this.chatMessageRefs=[],this.getOrCreateMessageRef=this.getOrCreateMessageRef.bind(this),this.getVisibleMessageRange=this.getVisibleMessageRange.bind(this),this.dragCounter=0,this.dndRef=null,this.readNotificationQueue=[],this.readNotificationTimer=null,this.keyPressTimer=null}getOrCreateMessageRef(e){if(this.chatMessageRefs[e])return this.chatMessageRefs[e];const t=n().createRef();return this.chatMessageRefs[e]=t,t}getVisibleMessageRange(e){let t=Number.MAX_SAFE_INTEGER,s=-1,i=!1;return this.chatMessageRefs.every((n,a)=>{if(n.current){const{top:o,bottom:r,height:l}=n.current.getBoundingClientRect();if(o<=e.top?e.top-o<=l:r-e.bottom<=l)i=!0,t=Math.min(t,a),s=Math.max(s,a);else if(i)return!1}return!0}),s>=t?{min:t,max:s}:{min:0,max:0}}componentDidMount(){this.messagesScroller&&this.messagesScroller.addEventListener("scroll",this.handleScrollEvent),this.mountDnDEvents(this.dndRef),this.componentSetup({},{}),(0,l.Jv)().then(e=>{this.setState({messagePolicy:e.message_policy||null})}).catch(e=>{})}componentWillUnmount(){this.state.rtcPanel&&this.handleCallHangup(this.state.topic,this.props.callSeq),this.messagesScroller&&this.messagesScroller.removeEventListener("scroll",this.handleScrollEvent),window.clearTimeout(this.toastTimer),this.clearNotificationQueue(),this.dndRef&&(this.dndRef.removeEventListener("dragstart",this.handleDragStart),this.dndRef.removeEventListener("dragenter",this.handleDragIn),this.dndRef.removeEventListener("dragleave",this.handleDragOut),this.dndRef.removeEventListener("dragover",this.handleDrag),this.dndRef.removeEventListener("drop",this.handleDrop))}componentDidUpdate(e,t){!this.messagesScroller||t.topic==this.state.topic&&t.maxSeqId==this.state.maxSeqId&&t.minSeqId==this.state.minSeqId||this.state.scrollPosition<100&&(this.messagesScroller.scrollTop=this.messagesScroller.scrollHeight-this.state.scrollPosition-this.messagesScroller.offsetHeight),this.props.applicationVisible?this.postReadNotification(0):this.clearNotificationQueue(),this.props.jumpToSeq&&this.props.jumpToSeq!=e.jumpToSeq&&this.jumpToMessage(parseInt(this.props.jumpToSeq,10)),this.componentSetup(e,t)}componentSetup(e,t){const s=this.props.tinode?this.props.tinode.getTopic(this.state.topic):void 0;if(this.state.topic!=t.topic&&(t.topic&&!o.Tinode.isNewGroupTopicName(t.topic)&&(this.leave(t.topic),t.rtcPanel&&this.handleCallHangup(t.topic,e.callSeq)),s&&(s.onData=this.handleMessageUpdate,s.onAllMessagesReceived=this.handleAllMessagesReceived,s.onInfo=this.handleInfoReceipt,s.onMetaDesc=this.handleDescChange,s.onSubsUpdated=this.handleSubsUpdated,s.onPres=this.handleSubsUpdated,s.onAuxUpdated=this.handleAuxUpdate),this.mentionedUsers=[],this.mentionAllPending=!1,this.loadRelationshipContext(s),this.loadGroupContext(s),this.loadDraft(s)),s)if(this.state.topic!=t.topic||this.props.myUserId&&!e.myUserId){const e=this.props.newTopicParams&&this.props.newTopicParams._topicName==this.props.topic;s.isP2PType()&&e?s.getMeta(s.startMetaQuery().withDesc().build()):this.props.myUserId&&this.subscribe(s)}else s.isSubscribed()&&this.state.isReader&&!t.isReader?s.getMeta(s.startMetaQuery().withLaterData().build()):s.isSubscribed()||!this.props.ready||e.ready||this.subscribe(s)}static getDerivedStateFromProps(e,t){let s={};if(e.topic)if(e.topic!=t.topic){const i=e.tinode.getTopic(e.topic);if(s={topic:e.topic,deleted:i._deleted,docPreview:null,imagePreview:null,imagePostview:null,videoPreview:null,videoPostview:null,rtcPanel:null,minimizedCallPanel:!1,typingIndicator:!1,scrollPosition:0,fetchingMessages:!1,showGoToLastButton:!1,contentToEdit:null,dragging:!1,selectedPin:0,relationshipContext:null,groupRoles:null,myGroupRole:null,groupAnnouncement:null,pendingJoinRequests:0,draftText:null,draftVersion:0,riskDialog:null},e.forwardMessage)if(e.forwardMessage.content){const t=e.forwardMessage.content,i=t?.length||t?.size||0;s.docPreview={object:t,type:e.forwardMessage.type,size:i}}else s.reply={content:e.forwardMessage.preview,seq:null};else s.reply=null;if(i){const n=[];e.connected&&i.subscribers(t=>{t.online&&t.user!=e.myUserId&&n.push(t)}),Object.assign(s,{onlineSubs:n}),i.isSelfType()?Object.assign(s,{title:e.intl.formatMessage(J.self_topic_name),avatar:!0}):i.public?Object.assign(s,{title:(0,d.TP)(i.name,i.public,""),avatar:(0,E.to)(i.public.photo)}):Object.assign(s,{title:"",avatar:null});const a=i.p2pPeerDesc();a?Object.assign(s,{peerMessagingDisabled:Y(a.acs)}):t.peerMessagingDisabled&&Object.assign(s,{peerMessagingDisabled:!1}),Object.assign(s,{minSeqId:i.minMsgSeq(),maxSeqId:i.maxMsgSeq(),latestClearId:i.maxClearId(),channel:i.isChannelType(),pins:(i.aux("pins")||[]).slice(),pinsLoaded:!1}),e.callTopic==i.name&&$(e.callState)&&(s.rtcPanel=e.callTopic)}else Object.assign(s,{minSeqId:-1,maxSeqId:-1,latestClearId:-1,onlineSubs:[],title:"",avatar:null,peerMessagingDisabled:!1,channel:!1,pins:[],pinsLoaded:!1})}else e.callTopic==t.topic&&!t.rtcPanel&&$(e.callState)&&(s.rtcPanel=e.callTopic);else s={minSeqId:-1,maxSeqId:-1,latestClearId:-1,onlineSubs:[],topic:null,title:"",avatar:null,isVerified:!1,isStaff:!1,isDangerous:!1,deleted:!1,docPreview:null,imagePreview:null,imagePostview:null,videoPreview:null,videoPostview:null,rtcPanel:null,minimizedCallPanel:!1,typingIndicator:!1,scrollPosition:0,fetchingMessages:!1,peerMessagingDisabled:!1,channel:!1,reply:null,contentToEdit:null,showGoToLastButton:!1,dragging:!1,pins:[],pinsLoaded:!1,selectedPin:0,subsVersion:0,relationshipContext:null,groupRoles:null,myGroupRole:null,groupAnnouncement:null,pendingJoinRequests:0,draftText:null,draftVersion:0};return e.acs?(e.acs.isWriter()!=t.isWriter&&(s.isWriter=!t.isWriter),e.acs.isReader()!=t.isReader&&(s.isReader=!t.isReader),e.acs.isAdmin()!=t.isAdmin&&(s.isAdmin=!t.isAdmin),!e.acs.isReader("given")!=t.readingBlocked&&(s.readingBlocked=!t.readingBlocked),e.acs.isSharer()!=t.isSharer&&(s.isSharer=!t.isSharer)):(t.isWriter&&(s.isWriter=!1),t.isReader&&(s.isReader=!1),t.isAdmin&&(s.isAdmin=!1),t.readingBlocked||(s.readingBlocked=!0),t.isSharer&&(s.isSharer=!1)),K(e.acs)==!t.unconformed&&(s.unconfirmed=!t.unconformed),!e.connected&&t.onlineSubs&&t.onlineSubs.length>0&&(s.onlineSubs=[]),s}subscribe(e){if(e.isSubscribed()||!this.props.ready)return;const t=this.props.newTopicParams&&this.props.newTopicParams._topicName==this.props.topic;let s=e.startMetaQuery().withLaterDesc().withLaterSub().withAux();(this.state.isReader||t)&&(s=s.withLaterData(24),this.state.isReader&&(s=s.withLaterDel()),this.setState({fetchingMessages:!0}));const i=t?this.props.newTopicParams:void 0;e.subscribe(s.build(),i).then(t=>{if(303==t.code)return void C.A.navigateTo(C.A.setUrlTopic("",t.params.topic));this.state.topic!=t.topic&&this.setState({topic:t.topic}),this.state.deleted&&this.setState({deleted:!1}),this.props.onNewTopicCreated(this.props.topic,t.topic);let s=[];e.queuedMessages(t=>{t._sending||(t._fatal||t.head&&t.head.webrtc?s.push(t.seq):e.isSubscribed()&&this.retrySend(t))}),s.length>0&&e.delMessagesList(s,!0)}).catch(e=>{console.error("Failed subscription to",this.state.topic,e),this.props.onError(e.message,"err");const t=Z.getDerivedStateFromProps({},{});t.title=this.props.intl.formatMessage(J.not_found),this.setState(t)})}leave(e){if(!e||!this.props.tinode.isTopicCached(e))return;const t=this.props.tinode.getTopic(e);t&&t.isSubscribed()&&t.leave(!1).catch(e=>{}).finally(e=>{this.setState({fetchingMessages:!1}),t.onData=void 0,t.onAllMessagesReceived=void 0,t.onInfo=void 0,t.onMetaDesc=void 0,t.onSubsUpdated=void 0,t.onPres=void 0,t.onAuxUpdated=void 0})}handleScrollReference(e){e&&(e.addEventListener("scroll",this.handleScrollEvent),this.messagesScroller=e,this.messagesScroller.scrollTop=this.messagesScroller.scrollHeight-this.state.scrollPosition-this.messagesScroller.offsetHeight)}handleScrollEvent(e){const t=e.target.scrollHeight-e.target.scrollTop-e.target.offsetHeight;if(this.setState({scrollPosition:t,showGoToLastButton:t>100&&t<this.state.scrollPosition}),!this.state.fetchingMessages&&!this.processingScrollEvent){if(e.target.scrollTop<=40){const t=this.props.tinode.getTopic(this.state.topic);if(t&&t.isSubscribed()){this.processingScrollEvent=!0;const{min:s,max:i}=this.getVisibleMessageRange(e.target.getBoundingClientRect()),n=t.msgHasMoreMessages(s,i,!1);n.length>0&&this.setState({fetchingMessages:!0},e=>{t.getMessagesPage(24,n,s,i).catch(e=>this.props.onError(e.message,"err")).finally(e=>this.setState({fetchingMessages:!1}))})}}this.processingScrollEvent=!1}}mountDnDEvents(e){e&&(e.addEventListener("dragstart",this.handleDragStart),e.addEventListener("dragenter",this.handleDragIn),e.addEventListener("dragleave",this.handleDragOut),e.addEventListener("dragover",this.handleDrag),e.addEventListener("drop",this.handleDrop),this.dndRef=e)}goToLatestMessage(){this.setState({scrollPosition:0}),this.messagesScroller&&(this.messagesScroller.scrollTop=this.messagesScroller.scrollHeight-this.messagesScroller.offsetHeight)}handleDescChange(e){o.Tinode.isSelfTopicName(this.props.topic)?this.setState({title:this.props.intl.formatMessage(J.self_topic_name),avatar:!0}):e.public?this.setState({title:(0,d.TP)(this.props.topic,e.public,""),avatar:(0,E.to)(e.public.photo)}):this.setState({title:"",avatar:null}),e.acs&&this.setState({isWriter:e.acs.isWriter(),isReader:e.acs.isReader(),isAdmin:e.acs.isAdmin(),readingBlocked:!e.acs.isReader("given"),unconfirmed:K(e.acs)})}postReadNotification(e){if(!this.props.applicationVisible||!this.state.topic)return;this.readNotificationTimer||(this.readNotificationTimer=setInterval(e=>{if(0==this.readNotificationQueue.length)return clearInterval(this.readNotificationTimer),void(this.readNotificationTimer=null);let t=-1;for(;this.readNotificationQueue.length>0;){const e=this.readNotificationQueue[0];if(e.topicName!=this.state.topic){this.readNotificationQueue.shift();continue}const s=new Date;if(!(e.sendAt<=s))break;this.readNotificationQueue.shift(),(0==e.seq||o.Tinode.isServerAssignedSeq(e.seq))&&(t=Math.max(t,e.seq))}if(t>=0){const e=this.props.tinode.getTopic(this.state.topic);if(e)try{e.noteRead(t)}catch(e){console.error("Failed to send read notification",e)}}},300));const t=new Date;this.readNotificationQueue.push({topicName:this.state.topic,seq:e,sendAt:t.setMilliseconds(t.getMilliseconds()+1500)})}clearNotificationQueue(){this.readNotificationQueue=[],this.readNotificationTimer&&(clearInterval(this.readNotificationTimer),this.readNotificationTimer=null)}handleSubsUpdated(){if(this.state.topic){const e=[],t=this.props.tinode.getTopic(this.state.topic);t.subscribers(t=>{t.online&&t.user!=this.props.myUserId&&e.push(t)});const s={onlineSubs:e,subsVersion:this.state.subsVersion+1},i=t.p2pPeerDesc();i?Object.assign(s,{peerMessagingDisabled:Y(i.acs)}):this.state.peerMessagingDisabled&&Object.assign(s,{peerMessagingDisabled:!1}),this.setState(s)}}handleMessageUpdate(e){if(!this.state.topic)return;const t=this.props.tinode.getTopic(this.state.topic);e?(clearTimeout(this.keyPressTimer),this.setState({maxSeqId:t.maxMsgSeq(),minSeqId:t.minMsgSeq(),typingIndicator:!1},s=>{t.isNewMessage(e.seq)?this.state.scrollPosition>100?this.setState({showGoToLastButton:!0}):this.goToLatestMessage():this.messagesScroller&&(this.messagesScroller.scrollTop=this.messagesScroller.scrollHeight-this.state.scrollPosition-this.messagesScroller.offsetHeight)}),t.msgStatus(e,!0)>=o.Tinode.MESSAGE_STATUS_SENT&&e.from!=this.props.myUserId&&this.postReadNotification(e.seq)):this.setState({latestClearId:t.maxClearId()})}handleAllMessagesReceived(e){if(this.setState({fetchingMessages:!1}),!e){const e=this.props.tinode.getTopic(this.state.topic);return void(e&&this.postReadNotification(e.seq))}if(this.state.pinsLoaded)this.setState({pinsLoaded:!1});else{const e=this.props.tinode.getTopic(this.state.topic);this.setState({pinsLoaded:!0},t=>{e.getPinnedMessages()})}}handleAuxUpdate(e){const t=(e.pins||[]).slice();let s=this.state.selectedPin;t.length>this.state.pins.length?s=0:s>=t.length&&(s=Math.max(0,t.length-1)),this.setState({pins:t,selectedPin:s})}handleInfoReceipt(e){switch(e.what){case"kp":clearTimeout(this.keyPressTimer),this.keyPressTimer=setTimeout(e=>this.setState({typingIndicator:!1}),4e3),this.state.typingIndicator||this.setState({typingIndicator:!0});break;case"read":case"recv":this.forceUpdate();break;default:console.info("Other change in topic: ",e.what)}}handleExpandMedia(e){e&&(e.video?this.setState({videoPostview:e}):this.setState({imagePostview:e}))}handleClosePreview(){this.state.imagePreview&&this.state.imagePreview.url&&URL.revokeObjectURL(this.state.imagePreview.url),this.state.videoPreview&&this.state.videoPreview.url&&URL.revokeObjectURL(this.state.videoPreview.url),this.setState({imagePostview:null,imagePreview:null,docPreview:null,videoPreview:null,videoPostview:null}),this.props.onCancelForwardMessage()}handleFormResponse(e,t,s){if("pub"==e)this.sendMessage(o.Drafty.attachJSON(o.Drafty.parse(t),s));else if("url"==e){const e=new URL(s.ref),t=e.searchParams;for(let e in s.resp)s.resp.hasOwnProperty(e)&&t.set(e,s.resp[e]);["name","seq"].forEach(e=>{s[e]&&t.set(e,s[e])}),t.set("uid",this.props.myUserId),t.set("topic",this.state.topic),e.search=t,window.open(e,"_blank")}else console.info("Unknown action in form",e)}handleContextClick(e){e.preventDefault(),e.stopPropagation(),this.props.showContextMenu({topicName:this.state.topic,y:e.pageY,x:e.pageX})}handleShowMessageContextMenu(e,t){"chan"==e.userFrom&&(e.userFrom=this.state.topic,e.userName=this.state.title),e.topicName=this.state.topic;let s=t||[];this.state.reply&&this.state.reply.editing&&(s=s.filter(e=>"menu_item_reply"!==e));const i=this.props.tinode.getTopic(e.topicName);if(i){const t=this.state.messagePolicy?this.state.messagePolicy.edit_window_seconds:0;!s.includes("menu_item_edit")||t>0&&e.timestamp&&e.timestamp.getTime()>(new Date).getTime()-1e3*t||(s=s.filter(e=>"menu_item_edit"!==e)),s.push("menu_item_copy","menu_item_favorite");const n=this.state.messagePolicy?this.state.messagePolicy.recall_window_seconds:0,a=i.isGroupType()&&i.getAccessMode()&&i.getAccessMode().isAdmin();if((e.userFrom==this.props.myUserId||a)&&e.seq>0&&n>0&&e.timestamp&&e.timestamp.getTime()>(new Date).getTime()-1e3*n&&s.push("menu_item_recall"),i.isSelfType())s.push("message_delete_generic");else{i.isChannelType()||s.push("message_delete");const t=i.getAccessMode();if(t&&t.isDeleter()){let i=t.isOwner();if(!i){const t=0|this.props.tinode.getServerParam(o.Tinode.MSG_DELETE_AGE,0);i=0==t||!!(t>0&&e.timestamp)&&e.timestamp.getTime()>(new Date).getTime()-1e3*t}i&&s.push("message_delete_hard")}}}s.push("menu_item_select"),this.props.showContextMenu(e,s)}handleNewChatAcceptance(e){this.props.onNewChat(this.state.topic,e)}handleEnablePeer(e){e.preventDefault(),this.props.onChangePermissions(this.state.topic,"JRWPS",this.state.topic)}loadRelationshipContext(e){if(!e||!e.isP2PType())return;const t=e.name;(0,l.pl)(t).then(e=>{this.state.topic==t&&this.setState({relationshipContext:e})}).catch(e=>{})}loadGroupContext(e){if(!e||!e.isGroupType()||e.isChannelType())return;const t=e.name;(0,l.Nk)(t).then(e=>{if(this.state.topic!=t)return;const s={};(e.items||[]).forEach(e=>{s[e.user_id]=e.role}),this.setState({groupRoles:s,myGroupRole:s[this.props.myUserId]||null}),"owner"!=s[this.props.myUserId]&&"admin"!=s[this.props.myUserId]||(0,l.s7)(t,"pending").then(e=>{this.state.topic==t&&this.setState({pendingJoinRequests:(e.items||[]).length})}).catch(e=>{})}).catch(e=>{}),(0,l.Yx)(t).then(e=>{this.state.topic==t&&this.setState({groupAnnouncement:e&&e.content?e:null})}).catch(e=>{})}mentionSearch(e){const t=this.props.tinode?this.props.tinode.getTopic(this.state.topic):null;return t&&t.isGroupType()?(0,l.Nk)(this.state.topic,{mentionable:!0,query:e}).then(t=>{const s=t.items||[];return t.permissions&&t.permissions.can_mention_all&&"所有人".includes((e||"").trim())?[{user_id:X,display_name:"所有人"},...s]:s}):Promise.resolve([])}mentionSelected(e,t){e!==X?(this.mentionedUsers=(this.mentionedUsers||[]).filter(e=>e.name!==t),this.mentionedUsers.push({uid:e,name:t})):this.mentionAllPending=!0}loadDraft(e){if(!e)return;const t=e.name;(0,l.V6)(t).then(e=>{this.state.topic==t&&this.setState({draftText:e.content||"",draftVersion:e.version||0})}).catch(e=>{})}handleComposerChange(e){if(this.state.reply&&this.state.reply.editing)return;if(this.props.forwardMessage)return;const t=this.state.topic;if(!t)return;const s=this.state.draftVersion||0;this.draftSaveTimers=this.draftSaveTimers||{},this.draftSaveTimers[t]&&window.clearTimeout(this.draftSaveTimers[t]),this.draftSaveTimers[t]=window.setTimeout(()=>{delete this.draftSaveTimers[t],(0,l.k8)(t,e,[],s).then(e=>{this.state.topic==t&&this.setState({draftVersion:e.version})}).catch(e=>{})},600)}clearDraft(e,t){this.draftSaveTimers&&this.draftSaveTimers[e]&&(window.clearTimeout(this.draftSaveTimers[e]),delete this.draftSaveTimers[e]);const s=null!=t?t:this.state.topic==e&&this.state.draftVersion||0;(0,l.k8)(e,"",[],s).then(t=>{this.state.topic==e&&this.setState({draftText:"",draftVersion:t.version})}).catch(e=>{})}handleShowAnnouncement(e){e.preventDefault();let t=C.A.addUrlParam(C.A.setUrlSidePanel("","group-announcement-detail"),"topic",this.state.topic);t=C.A.addUrlParam(t,"from","chat"),C.A.navigateTo(t)}handleShowJoinRequests(e){e.preventDefault();let t=C.A.addUrlParam(C.A.setUrlSidePanel("","group-join-requests"),"topic",this.state.topic);t=C.A.addUrlParam(t,"from","chat"),C.A.navigateTo(t)}handleSendFriendVerification(e){e.preventDefault(),C.A.navigateTo(C.A.addUrlParam(C.A.setUrlSidePanel("","friend-verification"),"uid",this.state.topic))}showToast(e){this.setState({toast:e}),window.clearTimeout(this.toastTimer),this.toastTimer=window.setTimeout(()=>this.setState({toast:null}),3500)}handleBatchDelete(){const e=this.props.tinode.getTopic(this.state.topic);if(!e||!this.props.selectedSeqs.length)return;const t=this.props.selectedSeqs.filter(t=>!e.cancelSend(t));t.length?e.delMessagesList(t,!0).then(e=>{this.props.onExitSelectMode()}).catch(e=>{this.props.onError(e.message,"err")}):this.props.onExitSelectMode()}handleBatchFavorite(){if(!this.props.selectedSeqs.length)return;const e=this.state.topic,t=this.props.selectedSeqs.slice();(0,l.Bc)(t.map(t=>({topic:e,seq:t}))).then(()=>(0,l.qM)({type:"all",limit:100}).then(s=>{const i=s&&s.items||[],n=new Set(i.filter(t=>t.source&&t.source.topic==e).map(e=>String(e.source.seq))),a=t.filter(e=>!n.has(String(e)));a.length===t.length?this.props.onError("收藏失败","err"):a.length?this.showToast(`已收藏 ${t.length-a.length}/${t.length} 条`):this.showToast("收藏成功")})).catch(e=>{this.props.onError(e.message,"err")})}sendKeyPress(e){const t=this.props.tinode.getTopic(this.state.topic);t.isSubscribed()&&(e||t.noteKeyPress())}applyMentionResolution(e){e&&Array.isArray(e.ent)&&this.mentionedUsers&&this.mentionedUsers.length&&e.ent.forEach(e=>{if("MN"===e.tp&&e.data&&"string"==typeof e.data.val){const t=this.mentionedUsers.find(t=>t.name===e.data.val);t&&(e.data.val=t.uid)}})}sendMessage(e,t,s,i){const n="string"==typeof e?e:null;let a;if(!e&&this.props.forwardMessage)e=this.props.forwardMessage.msg,a=this.props.forwardMessage.head,this.handleCancelReply();else if(this.state.reply){if(this.state.reply.editing){if(e==this.state.contentToEdit)return void this.handleCancelReply();a={replace:":"+this.state.reply.seq}}else this.state.reply.content&&(a={reply:""+this.state.reply.seq},"string"==typeof e&&(e=o.Drafty.parse(e),this.applyMentionResolution(e)),e=o.Drafty.append(o.Drafty.sanitizeEntities(this.state.reply.content),e));this.handleCancelReply()}else if("string"==typeof e&&this.mentionedUsers&&this.mentionedUsers.length){const t=o.Drafty.parse(e);this.applyMentionResolution(t),e=t}this.mentionedUsers=[],this.mentionAllPending&&(a={...a||{},mention_all:!0},this.mentionAllPending=!1),i&&(a={...a||{},"x-im-type":i});const r=this.state.topic,h=this.state.draftVersion||0,d=()=>{const i=this.props.sendMessage(e,t,s,a);return null!=n&&i&&"function"==typeof i.then&&r&&i.then(()=>this.clearDraft(r,h)),i},c=n&&n.match(/https?:\/\/\S+/g);if(c){const e={block:2,warn:1,allow:0},t=Array.from(new Set(c));return Promise.all(t.map(e=>(0,l.Iv)(e,"message_compose"))).then(t=>{const s=t.reduce((t,s)=>(e[s.decision]||0)>(e[t.decision]||0)?s:t);return"allow"===s.decision?d():new Promise(e=>{this.state.riskDialog&&this.state.riskDialog.resolve(!1),this.setState({riskDialog:{blocked:"block"===s.decision,challengeId:s.risk_challenge_id,send:d,resolve:e}})})}).catch(e=>d())}return d()}handleRiskConfirm(){const e=this.state.riskDialog;if(!e)return;this.setState({riskDialog:null});const t=()=>e.resolve(e.send());e.challengeId?(0,l.rF)(e.challengeId,"continue").then(t).catch(t):t()}handleRiskCancel(){const e=this.state.riskDialog;e&&(this.setState({riskDialog:null}),e.challengeId&&!e.blocked&&(0,l.rF)(e.challengeId,"cancel").catch(e=>{}),e.resolve(!1))}retrySend(e){this.props.sendMessage(e.content,void 0,void 0,e.head).then(t=>{this.props.tinode.getTopic(this.state.topic).delMessagesList([e.seq],!0)})}sendFileAttachment(e){const t=.75*this.props.tinode.getServerParam("maxMessageSize",262144)-1024|0;if((o.TheCard.isFileSupported(e.type,e.name)||e.type==o.TheCard.contentType)&&this.sendTheCardAttachment(e,t))return;const s=e=>e===D.Uv?"application/octet-stream":e;if(e.size>t){const t=(0,l.Lf)(this.props.tinode);if(!t)return void this.props.onError(this.props.intl.formatMessage(J.cannot_initiate_upload));const i=t.upload(e),n=o.Drafty.attachFile(null,{mime:s(e.type),filename:e.name,size:e.size,urlPromise:i});this.sendMessage(n,i,t,"file")}else(0,E.bB)(e).then(t=>this.sendMessage(o.Drafty.attachFile(null,{mime:s(t.mime),data:t.bits,filename:t.name,size:e.size}),void 0,void 0,"file")).catch(e=>this.props.onError(e.message,"err"))}sendTheCardAttachment(e,t){return!(e.size>t||(e.type==o.TheCard.contentType?(this.sendMessage(o.Drafty.appendTheCard(null,e.object)),0):((0,E.QJ)(e).then(e=>{this.sendMessage(o.Drafty.appendTheCard(null,e))}).catch(e=>{this.props.onError(this.props.intl.formatMessage(J.cannot_parse_vcard,{error:e.message}),"err")}),0)))}handleAttachFile(e){const t=this.props.tinode.getServerParam("maxFileUploadSize",D.qy);e.size>t?this.props.onError(this.props.intl.formatMessage(J.file_attachment_too_large,{size:(0,h.lX)(e.size),limit:(0,h.lX)(t)}),"err"):this.setState({docPreview:{file:e,name:e.name,size:e.size,type:e.type}})}handleCallHangup(e,t){this.props.onVideoCallClosed(),this.setState({rtcPanel:null}),this.props.onCallHangup(e,t)}handleCallPanelToggle(){this.setState({minimizedCallPanel:!this.state.minimizedCallPanel})}sendImageAttachment(e,t){const s=this.state.imagePreview.mime,i=this.state.imagePreview.width,n=this.state.imagePreview.height,a=this.state.imagePreview.filename,r=.75*this.props.tinode.getServerParam("maxMessageSize",262144)-1024|0;if(t.size>r){const r=(0,l.Lf)(this.props.tinode);if(!r)return void this.props.onError(this.props.intl.formatMessage(J.cannot_initiate_upload));const h=r.upload(t);return void(0,E.ag)(t,64,64,-1,!1).then(e=>(0,E.Sk)(e.blob)).then(l=>{let d=o.Drafty.insertImage(null,0,{mime:s,_tempPreview:l.bits,bits:l.bits,width:i,height:n,filename:a,size:t.size,urlPromise:h});e&&(d=o.Drafty.appendLineBreak(d),d=o.Drafty.append(d,o.Drafty.parse(e))),this.sendMessage(d,h,r,"image")}).catch(e=>this.props.onError(e,"err"))}(0,E.Sk)(t).then(s=>{let r=o.Drafty.insertImage(null,0,{mime:s.mime,bits:s.bits,width:i,height:n,filename:a,size:t.size});e&&(r=o.Drafty.appendLineBreak(r),r=o.Drafty.append(r,o.Drafty.parse(e))),this.sendMessage(r,void 0,void 0,"image")})}sendVideoAttachment(e,t,s,i){const n=i.width,a=i.height,r=.75*this.props.tinode.getServerParam("maxMessageSize",262144)-1024|0,h=[];let d;if(t.size+s.size>r){if(d=(0,l.Lf)(this.props.tinode),!d)return void this.props.onError(this.props.intl.formatMessage(J.cannot_initiate_upload));h[0]=t.size>.675*r?d.upload(t):null,h[1]=s.size>.275*r?d.upload(s):null}if(0==h.length)return void Promise.all([(0,E.Sk)(t),(0,E.Sk)(s)]).then(s=>{const[r,l]=s;let h=o.Drafty.insertVideo(null,0,{mime:r.mime,bits:r.bits,preview:l.bits,premime:l.mime,width:n,height:a,duration:i.duration,filename:i.name,size:t.size});e&&(h=o.Drafty.appendLineBreak(h),h=o.Drafty.append(h,o.Drafty.parse(e))),this.sendMessage(h,void 0,void 0,"video")});const c=Promise.all(h),p=[];p[0]=h[0]?null:(0,E.Sk)(t),p[1]=h[1]?null:(0,E.ag)(s,1024,1024,-1,!1).then(e=>(0,E.Sk)(e.blob)),p[2]=(0,E.ag)(s,96,96,-1,!1).then(e=>(0,E.Sk)(e.blob)),Promise.all(p).then(s=>{const[r,l,h]=s;let p=o.Drafty.insertVideo(null,0,{mime:i.mime,bits:r?r.bits:null,_tempPreview:h.bits,preview:l?l.bits:h.bits,premime:l?l.mime:h.mime,width:n,height:a,duration:i.duration,filename:i.name,size:t.size,urlPromise:c});e&&(p=o.Drafty.appendLineBreak(p),p=o.Drafty.append(p,o.Drafty.parse(e))),this.sendMessage(p,c,d,"video")}).catch(e=>this.props.onError(e.message,"err"))}handleAttachImageOrVideo(e){const t=this.props.tinode.getServerParam("maxFileUploadSize",D.qy);e.type.startsWith("video/")?this.setState({videoPreview:{url:URL.createObjectURL(e),blob:e,filename:e.name,size:e.size,mime:e.type}}):(0,E.ag)(e,1024,1024,t,!1).then(e=>{this.setState({imagePreview:{url:URL.createObjectURL(e.blob),blob:e.blob,filename:e.name,width:e.width,height:e.height,size:e.blob.size,mime:e.mime}})}).catch(e=>{this.props.onError(e.message,"err")})}handleFileDrop(e){if(!e||0==e.length)return;const t=e[0];t.type&&t.type.startsWith("image/")?this.handleAttachImageOrVideo(t):this.handleAttachFile(t)}sendAudioAttachment(e,t,s){fetch(e).then(e=>e.blob()).then(e=>{const i=.75*this.props.tinode.getServerParam("maxMessageSize",262144)-1024;if(e.size>i){const i=(0,l.Lf)(this.props.tinode);if(!i)return void this.props.onError(this.props.intl.formatMessage(J.cannot_initiate_upload));const n=i.upload(e),a=o.Drafty.appendAudio(null,{mime:e.type,size:e.size,duration:s,preview:t,urlPromise:n});this.sendMessage(a,n,i,"voice")}else(0,E.Sk)(e).then(i=>{this.sendMessage(o.Drafty.appendAudio(null,{mime:i.mime,bits:i.bits,size:e.size,duration:s,preview:t}),void 0,void 0,"voice")})}).catch(e=>{this.props.onError(e.message,"err")})}handleCancelUpload(e,t){const s=this.props.tinode.getTopic(this.state.topic).findMessage(e);s&&(s._cancelled=!0),t.cancel()}handlePickReply(e,t,s,i){e&&t?(t="string"==typeof t?o.Drafty.init(t):t,t=o.Drafty.isValid(t)?o.Drafty.replyContent(t,30):o.Drafty.append(o.Drafty.init("⚠ "),o.Drafty.wrapInto(this.props.intl.formatMessage(J.invalid_content),"EM")),this.setState({reply:{content:o.Drafty.quote(i,s,t),seq:e}}),this.props.onCancelForwardMessage()):this.setState({reply:null})}handleEditMessage(e,t){if(!e||!t)return void this.setState({reply:null});t="string"==typeof t?o.Drafty.init(t):t;const s=o.Drafty.toMarkdown(t);t=o.Drafty.isValid(t)?o.Drafty.replyContent(t,48):o.Drafty.append(o.Drafty.init("⚠ "),o.Drafty.wrapInto(this.props.intl.formatMessage(J.invalid_content),"EM")),this.setState({reply:{content:o.Drafty.quote(this.props.intl.formatMessage(J.editing_message),null,t),seq:e,editing:!0},contentToEdit:s}),this.props.onCancelForwardMessage()}handleCancelReply(){this.setState({reply:null,contentToEdit:null}),this.props.onCancelForwardMessage()}handleQuoteClick(e){const t=this.getOrCreateMessageRef(e);t&&t.current?(t.current.scrollIntoView({block:"center",behavior:"smooth"}),t.current.classList.add("flash"),setTimeout(e=>{t.current.classList.remove("flash")},1e3)):(console.error("Unresolved message ref",e),this.props.onError&&this.props.onError("该消息已被删除或撤回","err"))}jumpToMessage(e){const t=this.props.tinode&&this.props.topic?this.props.tinode.getTopic(this.props.topic):null;if(!t||!e||isNaN(e))return;C.A.navigateTo(C.A.removeUrlParam(window.location.hash,"jumpseq"));const s=()=>window.setTimeout(()=>this.handleQuoteClick(e),150);t.findMessage(e)?s():t.getMeta(t.startMetaQuery().withData(Math.max(1,e-20),e+21,41).build()).then(s).catch(e=>this.props.onError(e.message,"err"))}handleUnpinMessage(e){this.props.tinode.getTopic(this.state.topic).pinMessage(e,!1)}isDragEnabled(){const e=!(!this.state.reply||!this.state.reply.editing);return this.state.isWriter&&!this.state.unconfirmed&&!this.props.forwardMessage&&!this.state.peerMessagingDisabled&&!e}handleDragStart(e){e.preventDefault(),e.stopPropagation(),e.dataTransfer.clearData()}handleDragIn(e){e.preventDefault(),e.stopPropagation(),this.dragCounter++,e.dataTransfer.items&&e.dataTransfer.items.length>0&&this.setState({dragging:!0})}handleDragOut(e){e.preventDefault(),e.stopPropagation(),this.dragCounter--,this.dragCounter<=0&&this.setState({dragging:!1})}handleDrag(e){e.preventDefault(),e.stopPropagation()}handleDrop(e){e.preventDefault(),e.stopPropagation(),this.setState({dragging:!1}),this.isDragEnabled()&&e.dataTransfer.files&&e.dataTransfer.files.length>0&&(this.handleFileDrop(e.dataTransfer.files),this.dragCounter=0)}render(){const{formatMessage:e}=this.props.intl,t=this.state.rtcPanel&&(0,c.jsx)(i.Suspense,{fallback:(0,c.jsx)("div",{children:(0,c.jsx)(a.FormattedMessage,{id:"loading_note",defaultMessage:"Loading...",description:"Message shown when component is loading"})}),children:(0,c.jsx)(H,{topic:this.state.topic,seq:this.props.callSeq,callState:this.props.callState,callAudioOnly:this.props.callAudioOnly,tinode:this.props.tinode,title:this.state.title,avatar:this.state.avatar||!0,minimized:this.state.minimizedCallPanel,onError:this.props.onError,onHangup:this.handleCallHangup,onToggleMinimize:this.handleCallPanelToggle,onInvite:this.props.onCallInvite,onSendOffer:this.props.onCallSendOffer,onIceCandidate:this.props.onCallIceCandidate,onSendAnswer:this.props.onCallSendAnswer})}),s=this.state.riskDialog&&(0,c.jsx)(O.wW,{blocked:this.state.riskDialog.blocked,onConfirm:this.handleRiskConfirm,onCancel:this.handleRiskCancel});let n;if(this.state.topic){let r;if(this.state.imagePreview)r=(0,c.jsx)(i.Suspense,{fallback:(0,c.jsx)("div",{children:(0,c.jsx)(a.FormattedMessage,{id:"loading_note",defaultMessage:"Loading...",description:"Message shown when component is loading"})}),children:(0,c.jsx)(Q,{content:this.state.imagePreview,tinode:this.props.tinode,reply:this.state.reply,onCancelReply:this.handleCancelReply,onClose:this.handleClosePreview,onSendMessage:this.sendImageAttachment})});else if(this.state.videoPreview)r=(0,c.jsx)(i.Suspense,{fallback:(0,c.jsx)("div",{children:(0,c.jsx)(a.FormattedMessage,{id:"loading_note",defaultMessage:"Loading...",description:"Message shown when component is loading"})}),children:(0,c.jsx)(W,{content:this.state.videoPreview,tinode:this.props.tinode,reply:this.state.reply,onError:this.props.onError,onCancelReply:this.handleCancelReply,onClose:this.handleClosePreview,onSendMessage:this.sendVideoAttachment})});else if(this.state.imagePostview)r=(0,c.jsx)(i.Suspense,{fallback:(0,c.jsx)("div",{children:(0,c.jsx)(a.FormattedMessage,{id:"loading_note",defaultMessage:"Loading...",description:"Message shown when component is loading"})}),children:(0,c.jsx)(Q,{content:this.state.imagePostview,onClose:this.handleClosePreview})});else if(this.state.videoPostview)r=(0,c.jsx)(i.Suspense,{fallback:(0,c.jsx)("div",{children:(0,c.jsx)(a.FormattedMessage,{id:"loading_note",defaultMessage:"Loading...",description:"Message shown when component is loading"})}),children:(0,c.jsx)(W,{content:this.state.videoPostview,tinode:this.props.tinode,onError:this.props.onError,onClose:this.handleClosePreview})});else if(this.state.docPreview)r=o.TheCard.isFileSupported(this.state.docPreview.type,this.state.docPreview.name)||this.state.docPreview.type==o.TheCard.contentType?(0,c.jsx)(i.Suspense,{fallback:(0,c.jsx)("div",{children:(0,c.jsx)(a.FormattedMessage,{id:"loading_note",defaultMessage:"Loading...",description:"Message shown when component is loading"})}),children:(0,c.jsx)(G,{content:this.state.docPreview,tinode:this.props.tinode,reply:this.state.reply,onCancelReply:this.handleCancelReply,onClose:this.handleClosePreview,onSendMessage:this.sendFileAttachment})}):(0,c.jsx)(i.Suspense,{fallback:(0,c.jsx)("div",{children:(0,c.jsx)(a.FormattedMessage,{id:"loading_note",defaultMessage:"Loading...",description:"Message shown when component is loading"})}),children:(0,c.jsx)(B,{content:this.state.docPreview,tinode:this.props.tinode,reply:this.state.reply,onCancelReply:this.handleCancelReply,onClose:this.handleClosePreview,onSendMessage:this.sendFileAttachment})});else{const t=this.props.tinode.getTopic(this.state.topic),s=t.isChannelType()||t.chan,i=t.isGroupType()&&!s,n=[];t.trusted&&(t.trusted.verified&&n.push({icon:"verified",color:"badge-inv"}),t.trusted.staff&&n.push({icon:"staff",color:"badge-inv"}),t.trusted.danger&&n.push({icon:"dangerous",color:"badge-inv"}));const l=[];this.state.pins.forEach(e=>l.push(t.latestMsgVersion(e)||t.findMessage(e)));const d=[];let p=null,u=null,m=i?"chat-box group":"chat-box";t.messages((e,s,n,a)=>{let o=n?n.from||"chan":null,r="single",l=e.from||"chan";l==p?r=l==o?"middle":"last":l==o&&(r="first"),p=l;const m=!(l==this.props.myUserId),g=t.msgStatus(e,!0);let f,v,b=l;const S=t.userDesc(l);S&&S.public&&(f=S.public.fn,v=(0,E.to)(S.public.photo));const y=this.getOrCreateMessageRef(e.seq);let x=e.head?parseInt(e.head.reply):null;if(x&&!isNaN(x)||(x=null),e.hi)d.push((0,c.jsx)(U,{deleted:!0,deletedText:this.props.intl.formatMessage(J.message_deleted)},e.seq));else{const t=new Date(e.ts);u&&u.toDateString()==t.toDateString()||(d.push((0,c.jsx)(U,{date:(0,h.mf)(e.ts),locale:this.props.intl.locale},"date-"+e.seq)),u=t),d.push((0,c.jsx)(A,{tinode:this.props.tinode,topic:this.state.topic,content:e.content,mimeType:e.head&&e.head.mime,head:e.head,replyToSeq:x,edited:e.head&&!e.head.webrtc&&e.head.replace,timestamp:e.ts,response:m,seq:e.seq,isGroup:i,isChan:this.state.channel,userFrom:b,userName:f,userAvatar:v,senderRole:i&&this.state.groupRoles?this.state.groupRoles[l]:null,sequence:r,received:g,uploader:e._uploader,userIsWriter:this.state.isWriter,userIsAdmin:this.state.isAdmin,relationship:this.state.relationshipContext?this.state.relationshipContext.relationship:null,onSendFriendVerification:this.handleSendFriendVerification,selectMode:this.props.selectMode,selected:this.props.selectedSeqs&&this.props.selectedSeqs.includes(e.seq),onToggleSelect:this.props.onToggleMessageSelect,pinned:this.state.pins.includes(e.seq),viewportWidth:this.props.viewportWidth,showContextMenu:this.handleShowMessageContextMenu,onExpandMedia:this.handleExpandMedia,onFormResponse:this.handleFormResponse,onCancelUpload:this.handleCancelUpload,pickReply:this.handlePickReply,editMessage:this.handleEditMessage,onQuoteClick:this.handleQuoteClick,onAcceptCall:this.props.onAcceptCall,onError:this.props.onError,ref:y},e.seq))}});let g=null;if(s)t.subcnt&&(g=e(J.subscriber_count,{count:t.subcnt}));else{const s=this.props.tinode.getMeTopic().getContact(this.state.topic);s&&(o.Tinode.isP2PTopicName(s.topic)?s.online?g=e(J.online_now):s.seen&&(g=e(J.last_seen,{timestamp:(0,h.cq)(s.seen.when,this.props.intl.locale)})):o.Tinode.isGroupTopicName(s.topic)&&t.subcnt&&(g=e(J.member_count,{count:t.subcnt})))}const f=this.state.avatar||!0,b=this.state.deleted||t.isSelfType()?null:this.props.online?"online"+(this.state.typingIndicator?" typing":""):"offline",S="panel-title"+(this.state.deleted?" deleted":""),y="dark"==this.props.colorSchema?"dark":"",x=!(!this.state.reply||!this.state.reply.editing);let C=(0,c.jsxs)(c.Fragment,{children:[this.state.groupAnnouncement?(0,c.jsxs)("a",{href:"#",id:"group-announcement-banner",onClick:this.handleShowAnnouncement,children:[(0,c.jsx)("i",{className:"material-icons",children:"campaign"}),(0,c.jsx)("span",{children:this.state.groupAnnouncement.content}),(0,c.jsx)("i",{className:"material-icons",children:"chevron_right"})]}):null,this.state.pendingJoinRequests>0?(0,c.jsxs)("a",{href:"#",id:"group-join-request-banner",onClick:this.handleShowJoinRequests,children:[(0,c.jsx)("i",{className:"material-icons",children:"person_add_alt"}),(0,c.jsxs)("span",{children:["新邀请进群申请(",this.state.pendingJoinRequests,")"]}),(0,c.jsx)("i",{className:"material-icons",children:"chevron_right"})]}):null,(0,c.jsxs)("div",{id:"messages-container",className:y,children:[(0,c.jsx)("button",{id:"go-to-latest",className:"action-button"+(this.state.showGoToLastButton?"":" hidden"),onClick:this.goToLatestMessage,children:(0,c.jsx)("i",{className:"material-icons",children:"arrow_downward"})}),(0,c.jsx)("div",{id:"messages-panel",ref:this.handleScrollReference,children:(0,c.jsx)("ul",{id:"scroller",className:m,children:d})}),this.state.isReader?null:(0,c.jsx)("div",{id:"write-only-background",children:this.state.readingBlocked?(0,c.jsx)("div",{id:"write-only-note",children:(0,c.jsx)(a.FormattedMessage,{id:"messages_not_readable",defaultMessage:"no access to messages",description:"Message shown in topic without the read access"})}):null}),(0,c.jsxs)("div",{className:"toast"+(this.state.toast?" show":""),children:[(0,c.jsx)("i",{className:"material-icons",children:"check"})," ",this.state.toast]})]}),this.state.peerMessagingDisabled&&!this.state.unconfirmed?(0,c.jsxs)("div",{id:"peer-messaging-disabled-note",children:[(0,c.jsx)("i",{className:"material-icons secondary",children:"block"})," ",(0,c.jsx)(a.FormattedMessage,{id:"peers_messaging_disabled",defaultMessage:"Peer's messaging is disabled.",description:"Shown when the p2p peer's messaging is disabled"})," ",(0,c.jsx)("a",{href:"#",onClick:this.handleEnablePeer,children:(0,c.jsx)(a.FormattedMessage,{id:"enable_peers_messaging",defaultMessage:"Enable",description:"Call to action to enable peer's messaging"})}),"."]}):null,!this.state.unconfirmed&&this.state.relationshipContext&&"pending_inbound"==this.state.relationshipContext.relationship?(0,c.jsx)("div",{id:"relationship-status-note",children:"以上是打招呼的消息"}):null,!this.state.unconfirmed&&this.state.relationshipContext&&"pending_outbound"==this.state.relationshipContext.relationship?(0,c.jsx)("div",{id:"relationship-status-note",children:"好友申请正在等待处理"}):null,!this.state.unconfirmed&&this.state.relationshipContext&&"none"==this.state.relationshipContext.relationship?(0,c.jsxs)("div",{id:"relationship-status-note",children:["你们还不是好友,发送消息前需先验证 ",(0,c.jsx)("a",{href:"#",onClick:this.handleSendFriendVerification,children:"发送朋友验证"})]}):null,this.props.selectMode?(0,c.jsxs)("div",{id:"batch-action-bar",children:[(0,c.jsxs)("div",{id:"batch-action-count",children:["已选 ",this.props.selectedSeqs.length," 个"]}),(0,c.jsxs)("div",{id:"batch-action-buttons",children:[(0,c.jsxs)("a",{href:"#",onClick:e=>{e.preventDefault(),this.props.selectedSeqs.length&&this.props.onShowBatchForward()},className:this.props.selectedSeqs.length?"":"disabled",children:[(0,c.jsx)("i",{className:"material-icons",children:"forward"}),"转发"]}),(0,c.jsxs)("a",{href:"#",onClick:e=>{e.preventDefault(),this.handleBatchFavorite()},className:this.props.selectedSeqs.length?"":"disabled",children:[(0,c.jsx)("i",{className:"material-icons",children:"star_border"}),"收藏"]}),(0,c.jsxs)("a",{href:"#",onClick:e=>{e.preventDefault(),this.handleBatchDelete()},className:this.props.selectedSeqs.length?"":"disabled",children:[(0,c.jsx)("i",{className:"material-icons",children:"delete_outline"}),"删除"]})]}),(0,c.jsx)("a",{href:"#",id:"batch-action-cancel",onClick:e=>{e.preventDefault(),this.props.onExitSelectMode()},children:"取消"})]}):this.state.unconfirmed?(0,c.jsx)(F,{onAction:this.handleNewChatAcceptance}):(0,c.jsx)(V.A,{tinode:this.props.tinode,topicName:this.state.topic,noInput:!!this.props.forwardMessage,disabled:!this.state.isWriter||this.state.deleted,reply:this.state.reply,initMessage:null!=this.state.contentToEdit?this.state.contentToEdit:this.state.draftText,sendOnEnter:this.props.sendOnEnter,onKeyPress:this.sendKeyPress,onRecordingProgress:this.sendKeyPress,onMessageChange:this.props.forwardMessage?null:this.handleComposerChange,onMentionSearch:this.props.forwardMessage||!i?null:this.mentionSearch,onMentionSelected:this.mentionSelected,onSendMessage:this.sendMessage,onAttachFile:this.props.forwardMessage||x?null:this.handleAttachFile,onAttachImage:this.props.forwardMessage||x?null:this.handleAttachImageOrVideo,onAttachAudio:this.props.forwardMessage||x?null:this.sendAudioAttachment,canStartCall:!this.props.forwardMessage&&this.props.canStartCall,onStartAudioCall:this.props.onStartAudioCall,onStartVideoCall:this.props.onStartVideoCall,onError:this.props.onError,onQuoteClick:this.handleQuoteClick,onCancelReply:this.handleCancelReply})]});r=(0,c.jsxs)(c.Fragment,{children:[(0,c.jsxs)("div",{id:"topic-caption-panel",className:"caption-panel",children:[this.props.displayMobile?(0,c.jsx)("a",{href:"#",id:"hide-message-view",onClick:e=>{e.preventDefault(),this.leave(this.state.topic),this.props.onHideMessagesView()},children:(0,c.jsx)("i",{className:"material-icons",children:"arrow_back"})}):null,(0,c.jsxs)("div",{className:"avatar-box",children:[(0,c.jsx)(v.A,{authorizeURL:this.props.tinode.authorizeURL,avatar:f,topic:this.state.topic,title:this.state.title,deleted:this.state.deleted}),s?null:(0,c.jsx)("span",{className:b})]}),(0,c.jsxs)("div",{id:"topic-title-group",children:[(0,c.jsxs)("div",{id:"topic-title",className:S,children:[this.state.title||(0,c.jsx)("i",{children:(0,c.jsx)(a.FormattedMessage,{id:"unnamed_topic",defaultMessage:"Unnamed",description:"Title shown when the topic has no name"})}),(0,c.jsx)(P.A,{badges:n})]}),(0,c.jsx)("div",{id:"topic-last-seen",children:g})]}),(0,c.jsx)("div",{style:{marginLeft:"auto"}}),!this.props.displayMobile&&this.state.pins.length>0?(0,c.jsx)(z,{tinode:this.props.tinode,pins:this.state.pins,messages:l,selected:this.state.selectedPin,isAdmin:this.state.isAdmin,setSelected:e=>this.setState({selectedPin:e}),onSelected:this.handleQuoteClick,onCancel:this.handleUnpinMessage}):null,i?(0,c.jsx)(k,{tinode:this.props.tinode,subscribers:this.state.onlineSubs}):null,(0,c.jsx)("div",{children:(0,c.jsx)("a",{href:"#",onClick:this.handleContextClick,children:(0,c.jsx)("i",{className:"material-icons",children:"more_vert"})})})]}),this.props.displayMobile?(0,c.jsxs)(c.Fragment,{children:[this.state.pins.length>0?(0,c.jsx)(z,{tinode:this.props.tinode,pins:this.state.pins,messages:l,selected:this.state.selectedPin,isAdmin:this.state.isAdmin,setSelected:e=>this.setState({selectedPin:e}),onSelected:this.handleQuoteClick,onCancel:this.handleUnpinMessage}):null,(0,c.jsx)(T.A,{level:this.props.errorLevel,text:this.props.errorText,onClearError:this.props.onError})]}):null,(0,c.jsx)(R.A,{show:this.state.fetchingMessages}),C,this.state.dragging&&this.isDragEnabled()?(0,c.jsx)("div",{className:"drag-n-drop",children:e(J.drag_file)}):null]})}n=(0,c.jsxs)("div",{id:"topic-view",ref:this.mountDnDEvents,children:[r,t,s]})}else n=(0,c.jsx)(I,{});return n}}var ee=(0,a.injectIntl)(Z)},5372:function(e,t,s){var i=s(1594),n=s.n(i),a=s(8181),o=s(4532),r=(s(3272),s(7981)),l=s(2067),h=s(8353),d=s(4848);const c=n().lazy(e=>Promise.all([s.e(537),s.e(965)]).then(s.bind(s,965))),p=["😀","😁","😂","🤣","😃","😄","😅","😆","😉","😊","😋","😎","😍","😘","🥰","😗","😙","😚","🙂","🤗","🤩","🤔","🤨","😐","😑","😶","🙄","😏","😣","😥","😮","🤐","😯","😪","😫","🥱","😴","😌","😛","😜","😝","🤤","😒","😓","😔","😕","🙃","🤑","😲","☹️","🙁","😖","😞","😟","😤","😢","😭","😦","😧","😨","😩","🤯","😬","😰","😱","🥵","🥶","😳","🤪","😵","😡","😠","🤬","😷","🤒","🤕","🤢","🤮","🥳","🥴","🥺","🤫","🤭","🧐","🤓","😈","👿","👍","👎","👏","🙌","🤝","🙏","💪","❤️","🧡","💛","💚","💙","💜","🖤","💔","💕","💯","🔥","🎉","🎂","🌹","☀️","🌙","⭐"],u={image:"[图片]",video:"[视频]",voice:"[语音]",file:"[文件]",link:"[链接]",text:"[文本]"};function m(e){if("image"===e.type||"video"===e.type||"voice"===e.type)return u[e.type];const t=e.snapshot&&e.snapshot.content;return"string"==typeof t&&t.trim()?t:t&&"string"==typeof t.txt&&t.txt.trim()?t.txt:u[e.type]||e.type||e.favorite_id}const g="im-recent-emoji";function f(){try{const e=JSON.parse(localStorage.getItem(g)||"[]");return Array.isArray(e)?e:[]}catch(e){return[]}}const v=(0,a.defineMessages)({messaging_disabled:{id:"messaging_disabled_prompt",defaultMessage:"Messaging disabled",description:"Prompt in SendMessage in read-only topic"},type_new_message:{id:"new_message_prompt",defaultMessage:"New message",description:"Prompt in send message field"},add_image_caption:{id:"image_caption_prompt",defaultMessage:"Image caption",description:"Prompt in SendMessage for attached image"},file_attachment_too_large:{id:"file_attachment_too_large",defaultMessage:"The file size {size} exceeds the {limit} limit.",description:"Error message when attachment is too large"},cannot_initiate_upload:{id:"cannot_initiate_file_upload",defaultMessage:"Cannot initiate file upload.",description:"Generic error messagewhen attachment fails"},icon_title_record_voice:{id:"icon_title_record_voice",defaultMessage:"Record voice message",description:"Icon tool tip for recording a voice message"},icon_title_attach_file:{id:"icon_title_attach_file",defaultMessage:"Attach file",description:"Icon tool tip for attaching a file"},icon_title_add_image:{id:"icon_title_add_image",defaultMessage:"Add image",description:"Icon tool tip for attaching an image"},icon_title_send:{id:"icon_title_send",defaultMessage:"Send message",description:"Icon tool tip for sending a message"}});class b extends n().PureComponent{constructor(e){super(e),this.state={quote:null,message:"",audioRec:!1,audioAvailable:!(!navigator.mediaDevices||!navigator.mediaDevices.getUserMedia),mentionQuery:null,mentionResults:[],mentionHighlight:0,emojiOpen:!1,emojiTab:"emoji",recentEmoji:f(),attachOpen:!1,cardPicker:null,favPicker:null,audioCancelling:!1},this.keypressTimestamp=0,this.handlePasteEvent=this.handlePasteEvent.bind(this),this.handleAttachImage=this.handleAttachImage.bind(this),this.handleAttachFile=this.handleAttachFile.bind(this),this.handleAttachAudio=this.handleAttachAudio.bind(this),this.handleSend=this.handleSend.bind(this),this.handleKeyPress=this.handleKeyPress.bind(this),this.handleMessageTyping=this.handleMessageTyping.bind(this),this.handleDropAttach=this.handleDropAttach.bind(this),this.handleQuoteClick=this.handleQuoteClick.bind(this),this.selectMention=this.selectMention.bind(this),this.startHoldRecording=this.startHoldRecording.bind(this),this.handleHoldMove=this.handleHoldMove.bind(this),this.endHoldRecording=this.endHoldRecording.bind(this),this.handleHoldVisibilityChange=this.handleHoldVisibilityChange.bind(this),this.toggleEmojiPanel=this.toggleEmojiPanel.bind(this),this.insertEmoji=this.insertEmoji.bind(this),this.deleteLastChar=this.deleteLastChar.bind(this),this.toggleAttachPanel=this.toggleAttachPanel.bind(this),this.openCardPicker=this.openCardPicker.bind(this),this.openFavPicker=this.openFavPicker.bind(this),this.sendCard=this.sendCard.bind(this),this.sendFavorite=this.sendFavorite.bind(this),this.formatReply=this.formatReply.bind(this)}componentDidMount(){this.messageEditArea&&(this.messageEditArea.addEventListener("paste",this.handlePasteEvent,!1),"all"==window.getComputedStyle(this.messageEditArea).getPropertyValue("transition-property")&&this.messageEditArea.focus()),this.setState({quote:this.formatReply()})}componentWillUnmount(){this.messageEditArea&&this.messageEditArea.removeEventListener("paste",this.handlePasteEvent,!1),this.mentionSearchTimer&&window.clearTimeout(this.mentionSearchTimer),window.removeEventListener("mousemove",this.handleHoldMove),window.removeEventListener("mouseup",this.endHoldRecording),window.removeEventListener("touchmove",this.handleHoldMove),window.removeEventListener("touchend",this.endHoldRecording),window.removeEventListener("blur",this.endHoldRecording),document.removeEventListener("visibilitychange",this.handleHoldVisibilityChange)}componentDidUpdate(e){if(this.messageEditArea&&("all"==window.getComputedStyle(this.messageEditArea).getPropertyValue("transition-property")&&this.messageEditArea.focus(),this.messageEditArea.style.height="0px",this.messageEditArea.style.height=this.messageEditArea.scrollHeight+"px"),e.topicName!=this.props.topicName)this.setState({message:this.props.initMessage||"",audioRec:!1,quote:null,mentionQuery:null,mentionResults:[],emojiOpen:!1,attachOpen:!1,cardPicker:null,favPicker:null});else if(!e.disabled&&this.props.disabled&&this.state.audioRec)this.endHoldRecording(),this.setState({audioRec:!1});else if(e.initMessage!=this.props.initMessage){const e=this.props.initMessage||"";this.setState({message:e},t=>{this.messageEditArea.scrollTop=this.messageEditArea.scrollHeight,this.messageEditArea.setSelectionRange(e.length,e.length)})}e.reply!=this.props.reply&&this.setState({quote:this.formatReply()})}formatReply(){return this.props.reply?o.Drafty.format(this.props.reply.content,l.NV,{formatMessage:this.props.intl.formatMessage.bind(this.props.intl),authorizeURL:this.props.tinode.authorizeURL.bind(this.props.tinode)}):null}handlePasteEvent(e){this.props.disabled||(0,r.iJ)(e,e=>{this.props.onAttachImage&&this.props.onAttachImage(e)},e=>{this.props.onAttachFile&&this.props.onAttachFile(e)},this.props.onError)&&e.preventDefault()}handleAttachImage(e){e.target.files&&e.target.files.length>0&&this.props.onAttachImage&&this.props.onAttachImage(e.target.files[0]),e.target.value=""}handleAttachFile(e){e.target.files&&e.target.files.length>0&&this.props.onAttachFile&&this.props.onAttachFile(e.target.files[0]),e.target.value=""}handleDropAttach(e){e&&e.length>0&&this.props.onAttachFile&&this.props.onAttachFile(e[0])}handleAttachAudio(e,t,s){this.setState({audioRec:!1}),this.props.onAttachAudio&&this.props.onAttachAudio(e,t,s)}handleSend(e){e.preventDefault();const t=this.state.message.trim();if(t||this.props.acceptBlank||this.props.noInput){const e=this.props.onSendMessage(t);e&&"function"==typeof e.then?e.then(e=>{!1!==e&&this.setState({message:""})}):this.setState({message:""})}}handleKeyPress(e){if(this.state.audioRec)return e.preventDefault(),void e.stopPropagation();if(null!=this.state.mentionQuery){if("Escape"===e.key)return e.preventDefault(),void this.setState({mentionQuery:null,mentionResults:[]});if(this.state.mentionResults.length>0&&("ArrowDown"===e.key||"ArrowUp"===e.key)){e.preventDefault();const t="ArrowDown"===e.key?1:-1,s=this.state.mentionResults.length;return void this.setState({mentionHighlight:(this.state.mentionHighlight+t+s)%s})}if("Enter"===e.key&&this.state.mentionResults.length>0)return e.preventDefault(),e.stopPropagation(),void this.selectMention(this.state.mentionResults[this.state.mentionHighlight])}"Enter"===e.key&&("plain"==this.props.sendOnEnter?e.shiftKey||(e.preventDefault(),e.stopPropagation(),this.handleSend(e)):(e.ctrlKey||e.metaKey)&&(e.preventDefault(),e.stopPropagation(),this.handleSend(e)))}handleMessageTyping(e){if(this.setState({message:e.target.value}),this.updateMentionState(e.target.value,e.target.selectionStart),this.props.onMessageChange&&this.props.onMessageChange(e.target.value),this.props.onKeyPress){const e=(new Date).getTime();e-this.keypressTimestamp>3e3&&(this.props.onKeyPress(),this.keypressTimestamp=e)}}updateMentionState(e,t){if(!this.props.onMentionSearch||null==t)return;const s=e.slice(0,t),i=/(?:^|\s)@([^\s@]*)$/.exec(s);if(!i)return void(null!=this.state.mentionQuery&&this.setState({mentionQuery:null,mentionResults:[]}));const n=i[1],a=t-n.length-1;this.setState({mentionQuery:n,mentionStart:a,mentionHighlight:0}),this.mentionSearchTimer&&window.clearTimeout(this.mentionSearchTimer),this.mentionSearchTimer=window.setTimeout(()=>{this.props.onMentionSearch(n).then(e=>{null!=this.state.mentionQuery&&this.setState({mentionResults:e||[]})}).catch(()=>{})},200)}selectMention(e){const{message:t,mentionStart:s,mentionQuery:i}=this.state;if(null==s||null==i)return;const n=e.group_nickname||e.display_name||e.user_id,a="@"+n+" ",o=s+1+i.length,r=t.slice(0,s)+a+t.slice(o),l=s+a.length;this.setState({message:r,mentionQuery:null,mentionResults:[]}),this.props.onMentionSelected&&this.props.onMentionSelected(e.user_id,n),this.props.onMessageChange&&this.props.onMessageChange(r),requestAnimationFrame(()=>{this.messageEditArea&&(this.messageEditArea.focus(),this.messageEditArea.setSelectionRange(l,l))})}handleQuoteClick(e){if(e.preventDefault(),e.stopPropagation(),this.props.reply&&this.props.onQuoteClick){const e=this.props.reply.seq;this.props.onQuoteClick(e)}}toggleEmojiPanel(e){e.preventDefault(),this.setState(e=>({emojiOpen:!e.emojiOpen,attachOpen:!1,audioRec:!1}))}insertEmoji(e){const t=this.messageEditArea,s=t?t.selectionStart:this.state.message.length,i=t?t.selectionEnd:this.state.message.length,n=this.state.message.slice(0,s)+e+this.state.message.slice(i);!function(e){try{const t=[e].concat(f().filter(t=>t!==e)).slice(0,30);localStorage.setItem(g,JSON.stringify(t))}catch(e){}}(e),this.setState({message:n,recentEmoji:f()}),this.props.onMessageChange&&this.props.onMessageChange(n);const a=s+e.length;requestAnimationFrame(()=>{this.messageEditArea&&(this.messageEditArea.focus(),this.messageEditArea.setSelectionRange(a,a))})}deleteLastChar(){const e=this.messageEditArea,t=e?e.selectionStart:this.state.message.length,s=e?e.selectionEnd:this.state.message.length;let i,n;if(t!==s)i=this.state.message.slice(0,t)+this.state.message.slice(s),n=t;else{if(!(t>0))return;{const e=Array.from(this.state.message.slice(0,t));e.pop(),i=e.join("")+this.state.message.slice(t),n=e.join("").length}}this.setState({message:i}),this.props.onMessageChange&&this.props.onMessageChange(i),requestAnimationFrame(()=>{this.messageEditArea&&(this.messageEditArea.focus(),this.messageEditArea.setSelectionRange(n,n))})}toggleAttachPanel(e){e.preventDefault(),this.setState(e=>({attachOpen:!e.attachOpen,emojiOpen:!1}))}openCardPicker(e){e.preventDefault(),this.setState({attachOpen:!1,cardPicker:{loading:!0}}),(0,h.M7)().then(e=>{this.setState({cardPicker:{loading:!1,items:e.items||[]}})}).catch(()=>this.setState({cardPicker:{loading:!1,items:[],error:!0}}))}sendCard(e){this.setState({cardPicker:null});const t=t=>{const s=new o.TheCard(e.display_name||e.user_id,t);o.TheCard.setTinodeID(s,e.user_id),this.props.onSendMessage(o.Drafty.appendTheCard(null,s),void 0,void 0,"card")};e.avatar_file_id?(0,h.w8)(e.avatar_file_id).then(t).catch(()=>t(void 0)):t(void 0)}openFavPicker(e){e.preventDefault(),this.setState({attachOpen:!1,favPicker:{loading:!0}}),(0,h.qM)({type:"all"}).then(e=>{this.setState({favPicker:{loading:!1,items:e.items||[]}})}).catch(()=>this.setState({favPicker:{loading:!1,items:[],error:!0}}))}sendFavorite(e){this.setState({favPicker:null}),this.props.topicName&&(0,h.t$)([e.favorite_id],[this.props.topicName]).then(e=>{const t=(e&&e.items||[]).filter(e=>"failed"===e.status);t.length&&this.props.onError&&this.props.onError("发送失败:"+((0,h.pI)(t[0].reason)||t[0].reason||"未知原因"),"err")}).catch(e=>{this.props.onError&&this.props.onError(e&&e.message||"发送失败","err")})}startHoldRecording(e){e.preventDefault(),this.state.audioRec||(this.holdStartY="touches"in e?e.touches[0]&&e.touches[0].clientY:e.clientY,this.setState({audioRec:!0,audioCancelling:!1,emojiOpen:!1,attachOpen:!1}),window.addEventListener("mousemove",this.handleHoldMove),window.addEventListener("mouseup",this.endHoldRecording),window.addEventListener("touchmove",this.handleHoldMove,{passive:!1}),window.addEventListener("touchend",this.endHoldRecording),window.addEventListener("blur",this.endHoldRecording),document.addEventListener("visibilitychange",this.handleHoldVisibilityChange))}handleHoldVisibilityChange(){document.hidden&&this.endHoldRecording()}handleHoldMove(e){const t="touches"in e?e.touches[0]&&e.touches[0].clientY:e.clientY;if(null==t||null==this.holdStartY)return;const s=this.holdStartY-t>80;s!==this.state.audioCancelling&&this.setState({audioCancelling:s})}endHoldRecording(){window.removeEventListener("mousemove",this.handleHoldMove),window.removeEventListener("mouseup",this.endHoldRecording),window.removeEventListener("touchmove",this.handleHoldMove),window.removeEventListener("touchend",this.endHoldRecording),window.removeEventListener("blur",this.endHoldRecording),document.removeEventListener("visibilitychange",this.handleHoldVisibilityChange),this.holdStartY=null;const e={preventDefault:()=>{}};this.audioRecorderInstance&&(this.state.audioCancelling?this.audioRecorderInstance.handleDelete(e):this.audioRecorderInstance.handleDone(e))}render(){const{formatMessage:e}=this.props.intl,t=this.props.disabled?e(v.messaging_disabled):this.props.messagePrompt?e(v[this.props.messagePrompt]):e(v.type_new_message),s=this.props.reply&&this.props.reply.editing?"check_circle":"send",n=this.state.quote?(0,d.jsxs)("div",{id:"reply-quote-preview",children:[(0,d.jsx)("div",{className:"cancel",children:(0,d.jsx)("a",{href:"#",onClick:e=>{e.preventDefault(),this.props.onCancelReply()},children:(0,d.jsx)("i",{className:"material-icons gray",children:"close"})})}),this.state.quote]}):null,o=this.state.audioAvailable&&this.props.onAttachAudio,r=null!=this.state.mentionQuery?(0,d.jsx)("div",{id:"mention-picker",children:0===this.state.mentionResults.length?(0,d.jsx)("div",{className:"mention-picker-empty",children:"无匹配成员"}):this.state.mentionResults.map((e,t)=>(0,d.jsx)("div",{className:"mention-picker-row"+(t===this.state.mentionHighlight?" active":""),onMouseDown:t=>{t.preventDefault(),this.selectMention(e)},onMouseEnter:()=>this.setState({mentionHighlight:t}),children:e.group_nickname||e.display_name||e.user_id},e.user_id))}):null;return(0,d.jsxs)("div",{id:"send-message-wrapper",children:[this.props.noInput?null:n,r,(0,d.jsx)("div",{id:"send-message-panel",children:this.props.disabled?(0,d.jsx)("div",{id:"writing-disabled",children:t}):(0,d.jsxs)(d.Fragment,{children:[this.props.noInput?n||(0,d.jsx)("div",{className:"hr thin"}):this.state.audioRec?(0,d.jsx)(i.Suspense,{fallback:(0,d.jsx)("div",{children:(0,d.jsx)(a.FormattedMessage,{id:"loading_note",defaultMessage:"Loading...",description:"Message shown when component is loading"})}),children:(0,d.jsx)(c,{ref:e=>{this.audioRecorderInstance=e},holdMode:!0,cancelling:this.state.audioCancelling,onRecordingProgress:e=>this.props.onKeyPress(!0),onDeleted:e=>this.setState({audioRec:!1}),onFinished:this.handleAttachAudio})}):(0,d.jsx)("textarea",{id:"send-message-input",placeholder:t,value:this.state.message,onChange:this.handleMessageTyping,onKeyDown:this.handleKeyPress,ref:e=>{this.messageEditArea=e}}),this.props.noInput||this.state.audioRec?null:(0,d.jsx)("a",{href:"#",onClick:this.toggleEmojiPanel,title:"表情",children:(0,d.jsx)("i",{className:"material-icons secondary",children:this.state.emojiOpen?"keyboard":"insert_emoticon"})}),this.props.onAttachFile&&!this.state.audioRec?(0,d.jsx)("a",{href:"#",onClick:this.toggleAttachPanel,title:e(v.icon_title_attach_file),children:(0,d.jsx)("i",{className:"material-icons secondary",children:this.state.attachOpen?"keyboard":"add_circle_outline"})}):null,this.state.message||!o?(0,d.jsx)("a",{href:"#",onClick:this.handleSend,title:e(v.icon_title_send),children:(0,d.jsx)("i",{className:"material-icons",children:s})}):this.state.audioRec?null:(0,d.jsx)("a",{href:"#",onMouseDown:this.startHoldRecording,onTouchStart:this.startHoldRecording,onClick:e=>e.preventDefault(),title:e(v.icon_title_record_voice),children:(0,d.jsx)("i",{className:"material-icons",children:"mic"})}),(0,d.jsx)("input",{type:"file",ref:e=>{this.attachFile=e},onChange:this.handleAttachFile,style:{display:"none"}}),(0,d.jsx)("input",{type:"file",ref:e=>{this.attachImage=e},accept:"image/*, video/*",onChange:this.handleAttachImage,style:{display:"none"}}),(0,d.jsx)("input",{type:"file",ref:e=>{this.attachCamera=e},accept:"image/*",capture:"environment",onChange:this.handleAttachImage,style:{display:"none"}})]})}),this.state.emojiOpen?(0,d.jsxs)("div",{id:"emoji-panel",children:[(0,d.jsxs)("div",{id:"emoji-panel-tabs",children:[(0,d.jsx)("a",{href:"#",className:"emoji"===this.state.emojiTab?"active":"",onClick:e=>{e.preventDefault(),this.setState({emojiTab:"emoji"})},children:"😊"}),(0,d.jsx)("a",{href:"#",className:"recent"===this.state.emojiTab?"active":"",onClick:e=>{e.preventDefault(),this.setState({emojiTab:"recent"})},children:"♡"})]}),(0,d.jsx)("div",{id:"emoji-panel-grid",children:0===("emoji"===this.state.emojiTab?p:this.state.recentEmoji).length?(0,d.jsx)("div",{className:"emoji-panel-empty",children:"还没有常用表情"}):("emoji"===this.state.emojiTab?p:this.state.recentEmoji).map((e,t)=>(0,d.jsx)("a",{href:"#",onClick:t=>{t.preventDefault(),this.insertEmoji(e)},children:e},e+t))}),(0,d.jsxs)("div",{id:"emoji-panel-footer",children:[(0,d.jsx)("a",{href:"#",onClick:e=>{e.preventDefault(),this.deleteLastChar()},title:"删除",children:(0,d.jsx)("i",{className:"material-icons",children:"backspace"})}),(0,d.jsx)("a",{href:"#",className:"emoji-panel-send"+(this.state.message?" active":""),onClick:e=>{e.preventDefault(),this.handleSend(e)},title:e(v.icon_title_send),children:(0,d.jsx)("i",{className:"material-icons",children:s})})]})]}):null,this.state.attachOpen?(0,d.jsxs)("div",{id:"attach-panel",children:[(0,d.jsxs)("a",{href:"#",onClick:e=>{e.preventDefault(),this.setState({attachOpen:!1}),this.attachImage.click()},children:[(0,d.jsx)("i",{className:"material-icons",children:"photo"}),(0,d.jsx)("span",{children:"照片"})]}),(0,d.jsxs)("a",{href:"#",onClick:e=>{e.preventDefault(),this.setState({attachOpen:!1}),this.attachCamera.click()},children:[(0,d.jsx)("i",{className:"material-icons",children:"photo_camera"}),(0,d.jsx)("span",{children:"拍摄"})]}),(0,d.jsxs)("a",{href:"#",className:this.props.canStartCall?"":"disabled",onClick:e=>{e.preventDefault(),this.setState({attachOpen:!1}),this.props.canStartCall&&this.props.onStartAudioCall&&this.props.onStartAudioCall()},children:[(0,d.jsx)("i",{className:"material-icons",children:"call"}),(0,d.jsx)("span",{children:"语音通话"})]}),(0,d.jsxs)("a",{href:"#",onClick:this.openCardPicker,children:[(0,d.jsx)("i",{className:"material-icons",children:"badge"}),(0,d.jsx)("span",{children:"名片"})]}),(0,d.jsxs)("a",{href:"#",onClick:e=>{e.preventDefault(),this.setState({attachOpen:!1}),this.attachFile.click()},children:[(0,d.jsx)("i",{className:"material-icons",children:"attach_file"}),(0,d.jsx)("span",{children:"文件"})]}),(0,d.jsxs)("a",{href:"#",onClick:this.openFavPicker,children:[(0,d.jsx)("i",{className:"material-icons",children:"star_border"}),(0,d.jsx)("span",{children:"收藏"})]}),(0,d.jsxs)("a",{href:"#",className:this.props.canStartCall?"":"disabled",onClick:e=>{e.preventDefault(),this.setState({attachOpen:!1}),this.props.canStartCall&&this.props.onStartVideoCall&&this.props.onStartVideoCall()},children:[(0,d.jsx)("i",{className:"material-icons",children:"videocam"}),(0,d.jsx)("span",{children:"视频通话"})]})]}):null,this.state.cardPicker?(0,d.jsx)("div",{className:"send-message-picker-backdrop",onClick:()=>this.setState({cardPicker:null}),children:(0,d.jsxs)("section",{onClick:e=>e.stopPropagation(),children:[(0,d.jsxs)("header",{children:["选择联系人",(0,d.jsx)("a",{href:"#",onClick:e=>{e.preventDefault(),this.setState({cardPicker:null})},children:(0,d.jsx)("i",{className:"material-icons",children:"close"})})]}),(0,d.jsx)("div",{className:"send-message-picker-list",children:this.state.cardPicker.loading?(0,d.jsx)("p",{className:"send-message-picker-empty",children:"加载中…"}):0===this.state.cardPicker.items.length?(0,d.jsx)("p",{className:"send-message-picker-empty",children:this.state.cardPicker.error?"加载失败":"暂无好友"}):this.state.cardPicker.items.map(e=>(0,d.jsx)("a",{href:"#",onClick:t=>{t.preventDefault(),this.sendCard(e)},children:e.display_name||e.user_id},e.user_id))})]})}):null,this.state.favPicker?(0,d.jsx)("div",{className:"send-message-picker-backdrop",onClick:()=>this.setState({favPicker:null}),children:(0,d.jsxs)("section",{onClick:e=>e.stopPropagation(),children:[(0,d.jsxs)("header",{children:["我的收藏",(0,d.jsx)("a",{href:"#",onClick:e=>{e.preventDefault(),this.setState({favPicker:null})},children:(0,d.jsx)("i",{className:"material-icons",children:"close"})})]}),(0,d.jsx)("div",{className:"send-message-picker-list",children:this.state.favPicker.loading?(0,d.jsx)("p",{className:"send-message-picker-empty",children:"加载中…"}):0===this.state.favPicker.items.length?(0,d.jsx)("p",{className:"send-message-picker-empty",children:this.state.favPicker.error?"加载失败":"暂无收藏"}):this.state.favPicker.items.map(e=>(0,d.jsx)("a",{href:"#",onClick:t=>{t.preventDefault(),this.sendFavorite(e)},children:m(e)},e.favorite_id))})]})}):null]})}}t.A=(0,a.injectIntl)(b)}}]);
//# sourceMappingURL=280.prod.js.map