diff --git a/umd/125.prod.js b/umd/125.prod.js new file mode 100644 index 00000000..ee997fa9 --- /dev/null +++ b/umd/125.prod.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunktinode_webapp=self.webpackChunktinode_webapp||[]).push([[125],{9125:function(d,e,c){c.r(e);var l=c(1594),o=c.n(l),a=c(8181),i=c(111),s=c(7256),n=c(4848);class t extends o().PureComponent{constructor(d){super(d),this.countries=[];const{formatDisplayName:e}=d.intl;i.forEach(d=>{d.dial.split(",").forEach(c=>{this.countries.push({dial:c.trim(),code:d.code,flag:(0,s.lb)(d.code),name:e(d.code,{type:"region"})})})}),this.countries.sort((d,e)=>d.name.localeCompare(e.name))}componentDidMount(){this.selectedRef&&this.selectedRef.scrollIntoView({block:"center",inline:"nearest"})}render(){const d=[],e=this.props.selected||"US";return this.countries.forEach((c,l)=>{const o=c.code==e?"selected ":"";d.push((0,n.jsxs)("li",{className:o,ref:d=>{c.code==e&&(this.selectedRef=d)},onClick:d=>this.props.onSubmit(c.code,c.dial),children:[(0,n.jsx)("span",{className:"country-flag",children:c.flag}),(0,n.jsxs)("span",{className:"country",children:[" ",c.name]}),(0,n.jsxs)("span",{className:"dial-code",children:[" +",c.dial]})]},l))}),(0,n.jsx)("div",{className:"scrollable-panel",style:{height:"30rem"},children:(0,n.jsx)("ul",{className:"phone-country-selector",children:d})})}}e.default=(0,a.injectIntl)(t)},111:function(d){d.exports=JSON.parse('[{"dial":"93","code":"AF"},{"dial":"355","code":"AL"},{"dial":"213","code":"DZ"},{"dial":"1-684","code":"AS"},{"dial":"376","code":"AD"},{"dial":"244","code":"AO"},{"dial":"1-264","code":"AI"},{"dial":"672","code":"AQ"},{"dial":"1-268","code":"AG"},{"dial":"54","code":"AR"},{"dial":"374","code":"AM"},{"dial":"297","code":"AW"},{"dial":"61","code":"AU"},{"dial":"43","code":"AT"},{"dial":"994","code":"AZ"},{"dial":"1-242","code":"BS"},{"dial":"973","code":"BH"},{"dial":"880","code":"BD"},{"dial":"1-246","code":"BB"},{"dial":"375","code":"BY"},{"dial":"32","code":"BE"},{"dial":"501","code":"BZ"},{"dial":"229","code":"BJ"},{"dial":"1-441","code":"BM"},{"dial":"975","code":"BT"},{"dial":"591","code":"BO"},{"dial":"387","code":"BA"},{"dial":"267","code":"BW"},{"dial":"55","code":"BR"},{"dial":"246","code":"IO"},{"dial":"1-284","code":"VG"},{"dial":"673","code":"BN"},{"dial":"359","code":"BG"},{"dial":"226","code":"BF"},{"dial":"257","code":"BI"},{"dial":"855","code":"KH"},{"dial":"237","code":"CM"},{"dial":"1","code":"CA"},{"dial":"238","code":"CV"},{"dial":"1-345","code":"KY"},{"dial":"236","code":"CF"},{"dial":"235","code":"TD"},{"dial":"56","code":"CL"},{"dial":"86","code":"CN"},{"dial":"61","code":"CX"},{"dial":"61","code":"CC"},{"dial":"57","code":"CO"},{"dial":"269","code":"KM"},{"dial":"682","code":"CK"},{"dial":"506","code":"CR"},{"dial":"385","code":"HR"},{"dial":"53","code":"CU"},{"dial":"599","code":"CW"},{"dial":"357","code":"CY"},{"dial":"420","code":"CZ"},{"dial":"243","code":"CD"},{"dial":"45","code":"DK"},{"dial":"253","code":"DJ"},{"dial":"1-767","code":"DM"},{"dial":"1-809, 1-829, 1-849","code":"DO"},{"dial":"670","code":"TL"},{"dial":"593","code":"EC"},{"dial":"20","code":"EG"},{"dial":"503","code":"SV"},{"dial":"240","code":"GQ"},{"dial":"291","code":"ER"},{"dial":"372","code":"EE"},{"dial":"251","code":"ET"},{"dial":"500","code":"FK"},{"dial":"298","code":"FO"},{"dial":"679","code":"FJ"},{"dial":"358","code":"FI"},{"dial":"33","code":"FR"},{"dial":"689","code":"PF"},{"dial":"241","code":"GA"},{"dial":"220","code":"GM"},{"dial":"995","code":"GE"},{"dial":"49","code":"DE"},{"dial":"233","code":"GH"},{"dial":"350","code":"GI"},{"dial":"30","code":"GR"},{"dial":"299","code":"GL"},{"dial":"1-473","code":"GD"},{"dial":"1-671","code":"GU"},{"dial":"502","code":"GT"},{"dial":"44-1481","code":"GG"},{"dial":"224","code":"GN"},{"dial":"245","code":"GW"},{"dial":"592","code":"GY"},{"dial":"509","code":"HT"},{"dial":"504","code":"HN"},{"dial":"852","code":"HK"},{"dial":"36","code":"HU"},{"dial":"354","code":"IS"},{"dial":"91","code":"IN"},{"dial":"62","code":"ID"},{"dial":"98","code":"IR"},{"dial":"964","code":"IQ"},{"dial":"353","code":"IE"},{"dial":"44-1624","code":"IM"},{"dial":"972","code":"IL"},{"dial":"39","code":"IT"},{"dial":"225","code":"CI"},{"dial":"1-876","code":"JM"},{"dial":"81","code":"JP"},{"dial":"44-1534","code":"JE"},{"dial":"962","code":"JO"},{"dial":"7, 997","code":"KZ"},{"dial":"254","code":"KE"},{"dial":"686","code":"KI"},{"dial":"383","code":"XK"},{"dial":"965","code":"KW"},{"dial":"996","code":"KG"},{"dial":"856","code":"LA"},{"dial":"371","code":"LV"},{"dial":"961","code":"LB"},{"dial":"266","code":"LS"},{"dial":"231","code":"LR"},{"dial":"218","code":"LY"},{"dial":"423","code":"LI"},{"dial":"370","code":"LT"},{"dial":"352","code":"LU"},{"dial":"853","code":"MO"},{"dial":"389","code":"MK"},{"dial":"261","code":"MG"},{"dial":"265","code":"MW"},{"dial":"60","code":"MY"},{"dial":"960","code":"MV"},{"dial":"223","code":"ML"},{"dial":"356","code":"MT"},{"dial":"692","code":"MH"},{"dial":"222","code":"MR"},{"dial":"230","code":"MU"},{"dial":"262","code":"YT"},{"dial":"52","code":"MX"},{"dial":"691","code":"FM"},{"dial":"373","code":"MD"},{"dial":"377","code":"MC"},{"dial":"976","code":"MN"},{"dial":"382","code":"ME"},{"dial":"1-664","code":"MS"},{"dial":"212","code":"MA"},{"dial":"258","code":"MZ"},{"dial":"95","code":"MM"},{"dial":"264","code":"NA"},{"dial":"674","code":"NR"},{"dial":"977","code":"NP"},{"dial":"31","code":"NL"},{"dial":"599","code":"CW"},{"dial":"687","code":"NC"},{"dial":"64","code":"NZ"},{"dial":"505","code":"NI"},{"dial":"227","code":"NE"},{"dial":"234","code":"NG"},{"dial":"683","code":"NU"},{"dial":"850","code":"KP"},{"dial":"1-670","code":"MP"},{"dial":"47","code":"NO"},{"dial":"968","code":"OM"},{"dial":"92","code":"PK"},{"dial":"680","code":"PW"},{"dial":"970","code":"PS"},{"dial":"507","code":"PA"},{"dial":"675","code":"PG"},{"dial":"595","code":"PY"},{"dial":"51","code":"PE"},{"dial":"63","code":"PH"},{"dial":"64","code":"PN"},{"dial":"48","code":"PL"},{"dial":"351","code":"PT"},{"dial":"1-787, 1-939","code":"PR"},{"dial":"974","code":"QA"},{"dial":"242","code":"CG"},{"dial":"262","code":"RE"},{"dial":"40","code":"RO"},{"dial":"7","code":"RU"},{"dial":"250","code":"RW"},{"dial":"590","code":"BL"},{"dial":"290","code":"SH"},{"dial":"1-869","code":"KN"},{"dial":"1-758","code":"LC"},{"dial":"590","code":"MF"},{"dial":"508","code":"PM"},{"dial":"1-784","code":"VC"},{"dial":"685","code":"WS"},{"dial":"378","code":"SM"},{"dial":"239","code":"ST"},{"dial":"966","code":"SA"},{"dial":"221","code":"SN"},{"dial":"381","code":"RS"},{"dial":"248","code":"SC"},{"dial":"232","code":"SL"},{"dial":"65","code":"SG"},{"dial":"1-721","code":"SX"},{"dial":"421","code":"SK"},{"dial":"386","code":"SI"},{"dial":"677","code":"SB"},{"dial":"252","code":"SO"},{"dial":"27","code":"ZA"},{"dial":"82","code":"KR"},{"dial":"211","code":"SS"},{"dial":"34","code":"ES"},{"dial":"94","code":"LK"},{"dial":"249","code":"SD"},{"dial":"597","code":"SR"},{"dial":"47","code":"SJ"},{"dial":"268","code":"SZ"},{"dial":"46","code":"SE"},{"dial":"41","code":"CH"},{"dial":"963","code":"SY"},{"dial":"886","code":"TW"},{"dial":"992","code":"TJ"},{"dial":"255","code":"TZ"},{"dial":"66","code":"TH"},{"dial":"228","code":"TG"},{"dial":"690","code":"TK"},{"dial":"676","code":"TO"},{"dial":"1-868","code":"TT"},{"dial":"216","code":"TN"},{"dial":"90","code":"TR"},{"dial":"993","code":"TM"},{"dial":"1-649","code":"TC"},{"dial":"688","code":"TV"},{"dial":"1-340","code":"VI"},{"dial":"256","code":"UG"},{"dial":"380","code":"UA"},{"dial":"971","code":"AE"},{"dial":"44","code":"GB"},{"dial":"1","code":"US"},{"dial":"598","code":"UY"},{"dial":"998","code":"UZ"},{"dial":"678","code":"VU"},{"dial":"379","code":"VA"},{"dial":"58","code":"VE"},{"dial":"84","code":"VN"},{"dial":"681","code":"WF"},{"dial":"212","code":"EH"},{"dial":"967","code":"YE"},{"dial":"260","code":"ZM"},{"dial":"263","code":"ZW"}]')}}]); +//# sourceMappingURL=125.prod.js.map \ No newline at end of file diff --git a/umd/125.prod.js.map b/umd/125.prod.js.map new file mode 100644 index 00000000..8bf9c7c3 --- /dev/null +++ b/umd/125.prod.js.map @@ -0,0 +1 @@ +{"version":3,"file":"125.prod.js","mappings":"wLASA,MAAMA,UAA6BC,IAAA,cACjC,WAAAC,CAAYC,GACVC,MAAMD,GAENE,KAAKC,UAAY,GACjB,MAAMC,kBAAEA,GAAsBJ,EAAMK,KACpCC,EAAeC,QAAQC,IACPA,EAAGC,KAAKC,MAAM,KACtBH,QAAQI,IACZT,KAAKC,UAAUS,KAAK,CAClBH,KAAME,EAAKE,OACXC,KAAMN,EAAGM,KACTC,MAAM,EAAAC,EAAAC,IAAUT,EAAGM,MACnBI,KAAMd,EAAkBI,EAAGM,KAAM,CAACK,KAAM,iBAK9CjB,KAAKC,UAAUiB,KAAK,CAACC,EAAGC,IAAMD,EAAEH,KAAKK,cAAcD,EAAEJ,MACvD,CAEA,iBAAAM,GACMtB,KAAKuB,aACPvB,KAAKuB,YAAYC,eAAe,CAACC,MAAO,SAAUC,OAAQ,WAE9D,CAEA,MAAAC,GACE,MAAM1B,EAAY,GACZ2B,EAAW5B,KAAKF,MAAM8B,UAAY,KAYxC,OAXA5B,KAAKC,UAAUI,QAAQ,CAACwB,EAAGC,KACzB,MAAMC,EAASF,EAAEjB,MAAQgB,EAAW,YAAc,GAClD3B,EAAUS,MAAK,EAAAsB,EAAAC,MAAA,MAAIC,UAAWH,EAC5BI,IAAKA,IAAYN,EAAEjB,MAAQgB,IAAW5B,KAAKuB,YAAcY,IACzDC,QAASC,GAAKrC,KAAKF,MAAMwC,SAAST,EAAEjB,KAAMiB,EAAEtB,MAAMgC,SAAA,EAClD,EAAAP,EAAAQ,KAAA,QAAMN,UAAU,eAAcK,SAAEV,EAAEhB,QAClC,EAAAmB,EAAAC,MAAA,QAAMC,UAAU,UAASK,SAAA,CAAC,IAAOV,EAAEb,SACnC,EAAAgB,EAAAC,MAAA,QAAMC,UAAU,YAAWK,SAAA,CAAC,KAAQV,EAAEtB,UALEuB,OAU1C,EAAAE,EAAAQ,KAAA,OAAKN,UAAU,mBAAmBH,MAAO,CAACU,OAAQ,SAASF,UACzD,EAAAP,EAAAQ,KAAA,MAAIN,UAAU,yBAAwBK,SACnCtC,KAIT,EAGFyC,EAAA,SAAe,EAAAC,EAAAC,YAAWjD","sources":["webpack://tinode-webapp/./src/widgets/phone-country-selector.jsx"],"sourcesContent":["// Selector for country dialing code.\n\nimport React from 'react';\nimport { injectIntl } from 'react-intl';\n\nimport * as dcodes from '../dcodes.json';\n\nimport { flagEmoji } from '../lib/strformat';\n\nclass PhoneCountrySelector extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.countries = [];\n const { formatDisplayName } = props.intl;\n dcodes.default.forEach(dc => {\n const parts = dc.dial.split(',');\n parts.forEach(part => {\n this.countries.push({\n dial: part.trim(),\n code: dc.code,\n flag: flagEmoji(dc.code),\n name: formatDisplayName(dc.code, {type: 'region'})\n });\n });\n });\n\n this.countries.sort((a, b) => a.name.localeCompare(b.name));\n }\n\n componentDidMount() {\n if (this.selectedRef) {\n this.selectedRef.scrollIntoView({block: 'center', inline: 'nearest'});\n }\n }\n\n render() {\n const countries = [];\n const selected = this.props.selected || 'US';\n this.countries.forEach((c, idx) => {\n const style = (c.code == selected ? 'selected ' : '');\n countries.push(
  • {if (c.code == selected) {this.selectedRef = ref}}}\n onClick={_ => this.props.onSubmit(c.code, c.dial)}>\n {c.flag}\n  {c.name}\n  +{c.dial}\n
  • );\n });\n\n return (\n
    \n \n
    \n );\n }\n}\n\nexport default injectIntl(PhoneCountrySelector);\n"],"names":["PhoneCountrySelector","react__WEBPACK_IMPORTED_MODULE_0___default","constructor","props","super","this","countries","formatDisplayName","intl","_dcodes_json__WEBPACK_IMPORTED_MODULE_2__","forEach","dc","dial","split","part","push","trim","code","flag","_lib_strformat__WEBPACK_IMPORTED_MODULE_3__","lb","name","type","sort","a","b","localeCompare","componentDidMount","selectedRef","scrollIntoView","block","inline","render","selected","c","idx","style","react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__","jsxs","className","ref","onClick","_","onSubmit","children","jsx","height","__webpack_exports__","react_intl__WEBPACK_IMPORTED_MODULE_1__","injectIntl"],"sourceRoot":""} \ No newline at end of file diff --git a/umd/158.prod.js b/umd/158.prod.js new file mode 100644 index 00000000..85d91a30 --- /dev/null +++ b/umd/158.prod.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunktinode_webapp=self.webpackChunktinode_webapp||[]).push([[158],{158:function(e,s,t){t.r(s),t.d(s,{default:function(){return D}});var i=t(1594),a=t.n(i),n=t(8181),o=t(4532),r=t(3889),l=t(6686),d=t(3207),c=t(3717),h=t(3405),p=t(4306),m=t(4848);const u=(0,n.defineMessages)({no_contacts:{id:"no_contacts",defaultMessage:"You have no contacts :-(",description:"Shown in ContactsView when the user has no contacts"},contacts_not_found_short:{id:"contacts_not_found_short",defaultMessage:"No contacts match ''{query}''",description:"Shown in ContactsView when search returned no results"},add_members_prompt:{id:"add_members_prompt",defaultMessage:"add members",description:"Placeholder in group members input field"}});class g extends a().Component{constructor(e){super(e),this.state={members:e.members,index:g.indexMembers(e.members),staticMembers:g.staticMembers(e.members,e.keepInitialMembers,e.requiredMember),contactFilter:"",noContactsMessage:e.intl.formatMessage(u.no_contacts),selectedContacts:g.selectedContacts(e.members)},this.handleContactSelected=this.handleContactSelected.bind(this),this.handleMemberRemoved=this.handleMemberRemoved.bind(this),this.handleContactFilter=this.handleContactFilter.bind(this),this.handleSubmit=this.handleSubmit.bind(this),this.handleCancel=this.handleCancel.bind(this)}static indexMembers(e){let s={};return e.forEach(e=>{s[e.user]={delta:0,present:!0}}),s}static staticMembers(e,s,t){let i=[];return e.forEach(e=>{(s||e.user==t)&&i.push(e.user)}),i}static selectedContacts(e){let s=[];return e.forEach(e=>{s.push(e.user)}),s}handleContactSelected(e,s){let t=this.state.index[e];if(t){if(t.present)return;t.delta+=1,t.present=!0}else t={delta:1,present:!0};let i=this.state.members.slice();i.push(this.props.contacts[s]);const a=g.selectedContacts(i),n=this.state.index;n[e]=t,this.setState({members:i,index:n,selectedContacts:a})}handleMemberRemoved(e,s){const t=this.state.index[e];if(!t||!t.present)return;t.present=!1,t.delta-=1;let i=this.state.members.slice();i.splice(s,1);const a=g.selectedContacts(i),n=this.state.index;n[e]=t,this.setState({members:i,index:n,selectedContacts:a})}handleContactFilter(e){const{formatMessage:s}=this.props.intl,t=e?s(u.contacts_not_found_short,{query:e}):s(u.no_contacts);this.setState({contactFilter:e,noContactsMessage:t})}static doContactFiltering(e,s){if(e){for(let t=0;t=0)return!0;return!1}return!0}handleSubmit(){const e=[],s=[],t=[];Object.keys(this.state.index).forEach(i=>{this.state.index[i].present&&e.push(i),this.state.index[i].delta>0?s.push(i):this.state.index[i].delta<0&&t.push(i)}),this.props.onSubmit(e,s,t)}handleCancel(){this.props.onCancel()}render(){return(0,m.jsxs)("div",{id:"group-manager",children:[(0,m.jsx)("div",{className:"panel-form-row",children:(0,m.jsx)("label",{className:"small",children:(0,m.jsx)(n.FormattedMessage,{id:"title_group_members",defaultMessage:"Group Members",description:"Section title"})})}),(0,m.jsx)("div",{className:"panel-form-row",children:(0,m.jsx)(p.A,{tinode:this.props.tinode,chips:this.state.members,staticMembers:this.state.staticMembers,prompt:this.props.intl.formatMessage(u.add_members_prompt),filterFunc:this.handleContactFilter,onChipRemoved:this.handleMemberRemoved})}),(0,m.jsx)("div",{className:"panel-form-row",children:(0,m.jsx)("label",{className:"small",children:(0,m.jsx)(n.FormattedMessage,{id:"title_all_contacts",defaultMessage:"All Contacts",description:"Section title [All Contacts]"})})}),(0,m.jsx)(c.A,{tinode:this.props.tinode,contacts:this.props.contacts,myUserId:this.props.myUserId,topicSelected:this.state.selectedContacts,filter:this.state.contactFilter,filterFunc:g.doContactFiltering,emptyListMessage:this.state.noContactsMessage,showOnline:!1,showUnread:!1,onTopicSelected:this.handleContactSelected}),(0,m.jsxs)("div",{id:"group-manager-buttons",className:"panel-form-row",children:[(0,m.jsx)("button",{className:"secondary",onClick:this.handleCancel,children:(0,m.jsx)(n.FormattedMessage,{id:"button_cancel",defaultMessage:"Cancel",description:"Button [Cancel]"})}),(0,m.jsx)("button",{className:"primary",onClick:this.handleSubmit,children:(0,m.jsx)(n.FormattedMessage,{id:"button_ok",defaultMessage:"OK",description:"Button [OK]"})})]})]})}}var b=(0,n.injectIntl)(g),f=t(5370),v=t(9022),x=t(9593),_=t.n(x);t(3272);class M extends a().PureComponent{constructor(e){super(e),this.qrCodeRef=a().createRef()}componentDidMount(){new(_())(this.qrCodeRef.current,{text:this.props.uri,width:128,height:128})}render(){return(0,m.jsxs)("div",{className:"panel-form-column",children:[(0,m.jsx)("br",{}),(0,m.jsx)("div",{className:"qr-code",ref:this.qrCodeRef}),(0,m.jsx)("div",{children:(0,m.jsx)("tt",{children:this.props.uri})}),(0,m.jsx)("div",{className:"dialog-buttons",children:(0,m.jsx)("button",{className:"outline",onClick:this.props.onCancel,children:(0,m.jsx)(n.FormattedMessage,{id:"button_ok",defaultMessage:"OK",description:"Button [OK]"})})})]})}}var j=t(6916);const C=(0,n.defineMessages)({clear_messages:{id:"action_clear_messages",defaultMessage:"Clear Messages",description:"Flat button [Clear Messages] (soft-delete messages)"},clear_messages_warning:{id:"clear_messages_warning",defaultMessage:"Are you sure you want to clear all messages? It cannot be undone.",description:"Alert dialog warning when deleting all messages."},delete_messages:{id:"action_delete_messages",defaultMessage:"Clear Messages for All",description:"Flat button [Clear for All] (hard-delete all messages)"},delete_messages_warning:{id:"delete_messages_warning",defaultMessage:"Are you sure you want to delete all messages for everyone? It cannot be undone.",description:"Alert dialog warning when hard-deleting all messages."},topic_delete:{id:"topic_delete",defaultMessage:"Delete Conversation",description:"Alert title when deleting the topic."},topic_delete_warning:{id:"topic_delete_warning",defaultMessage:"Are you sure you want to delete this conversation? It cannot be undone.",description:"Alert warning when deleting entire topic"},leave_chat:{id:"action_leave_chat",defaultMessage:"Leave Conversation",description:"Flat button [Leave Conversation]"},leave_chat_warning:{id:"leave_chat_warning",defaultMessage:"Are you sure you want to leave this conversation?",description:"Alert dialog warning when unsubscribing from a chat."},block_contact:{id:"action_block_contact",defaultMessage:"Block Contact",description:"Flat button [Block Contact]"},block_contact_warning:{id:"block_contact_warning",defaultMessage:"Are you sure you want to block this contact?",description:"Alert dialog warning when blocking a contact."},report_chat:{id:"action_report_chat",defaultMessage:"Report Conversation",description:"Flat button [Report Group]"},report_chat_warning:{id:"report_chat_warning",defaultMessage:"Are you sure you want to block and report this conversation?",description:"Alert dialog warning when reporting a conversation for abuse"},other_user:{id:"label_other_user",defaultMessage:"Other",description:"Label for the other user when the user is unnamed"}});class N extends a().PureComponent{constructor(e){super(e),this.handleDeleteTopic=this.handleDeleteTopic.bind(this),this.handleDeleteMessages=this.handleDeleteMessages.bind(this),this.handleLeave=this.handleLeave.bind(this),this.handleBlock=this.handleBlock.bind(this),this.handleReport=this.handleReport.bind(this)}handleDeleteTopic(e){e.preventDefault();const{formatMessage:s}=this.props.intl;this.props.onShowAlert(s(C.topic_delete),s(C.topic_delete_warning),e=>this.props.onDeleteTopic(this.props.topic),null,!0,null)}handleDeleteMessages(e){e.preventDefault();const{formatMessage:s}=this.props.intl;this.props.onShowAlert(s(this.props.deleter?C.delete_messages:C.clear_messages),s(this.props.deleter?C.delete_messages_warning:C.clear_messages_warning),e=>this.props.onDeleteMessages(this.props.topic),null,!0,null)}handleLeave(e){e.preventDefault();const{formatMessage:s}=this.props.intl;this.props.onShowAlert(s(C.leave_chat),s(C.leave_chat_warning),e=>this.props.onLeaveTopic(this.props.topic),null,!0,null)}handleBlock(e){e.preventDefault();const{formatMessage:s}=this.props.intl;this.props.onShowAlert(s(C.block_contact),s(C.block_contact_warning),e=>this.props.onBlockTopic(this.props.topic),null,!0,null)}handleReport(e){e.preventDefault();const{formatMessage:s}=this.props.intl;this.props.onShowAlert(s(C.report_chat),s(C.report_chat_warning),e=>{this.props.onReportTopic(this.props.topic)},null,!0,null)}render(){const{formatMessage:e}=this.props.intl;return(0,m.jsxs)("div",{className:"scrollable-panel",children:[(0,m.jsxs)("div",{className:"panel-form-column",children:[this.props.channel?null:(0,m.jsxs)("a",{href:"#",className:"flat-button",onClick:this.handleDeleteMessages,children:[(0,m.jsx)("i",{className:"material-icons",children:"delete_outline"}),"  ",e(this.props.deleter?C.delete_messages:C.clear_messages)]}),this.props.owner?(0,m.jsxs)("a",{href:"#",className:"danger flat-button",onClick:this.handleDeleteTopic,children:[(0,m.jsx)("i",{className:"material-icons",children:"delete"}),"  ",e(C.topic_delete)]}):(0,m.jsxs)("a",{href:"#",className:"danger flat-button",onClick:this.handleLeave,children:[(0,m.jsx)("i",{className:"material-icons",children:"exit_to_app"}),"  ",e(C.leave_chat)]}),this.props.groupTopic?null:(0,m.jsxs)("a",{href:"#",className:"danger flat-button",onClick:this.handleBlock,children:[(0,m.jsx)("i",{className:"material-icons",children:"block"}),"  ",e(C.block_contact)]}),this.props.owner?null:(0,m.jsxs)("a",{href:"#",className:"danger flat-button",onClick:this.handleReport,children:[(0,m.jsx)("i",{className:"material-icons",children:"report"}),"  ",e(C.report_chat)]})]}),(0,m.jsx)("div",{className:"hr"}),(0,m.jsx)("div",{className:"panel-form-column",children:this.props.groupTopic?(0,m.jsxs)(m.Fragment,{children:[(0,m.jsxs)("div",{className:"group",children:[(0,m.jsx)("label",{children:(0,m.jsx)(n.FormattedMessage,{id:"label_your_permissions",defaultMessage:"Your permissions:",description:"Label for current user permissions"})})," ",(0,m.jsx)("tt",{className:"clickable",onClick:e=>{e.preventDefault(),this.props.onLaunchPermissionsEditor("want")},children:this.props.access})]}),this.props.channel?null:(0,m.jsxs)("div",{className:"group",children:[(0,m.jsx)("div",{children:(0,m.jsx)("label",{className:"small",children:(0,m.jsx)(n.FormattedMessage,{id:"label_default_access_mode",defaultMessage:"Default access mode:",description:"Label for default access mode"})})}),(0,m.jsxs)("div",{className:"quoted",children:[(0,m.jsxs)("div",{children:["Auth: ",(0,m.jsx)("tt",{className:this.props.owner?"clickable":null,onClick:e=>{e.preventDefault(),this.props.owner&&this.props.onLaunchPermissionsEditor("auth")},children:this.props.auth})]}),(0,m.jsxs)("div",{children:["Anon: ",(0,m.jsx)("tt",{className:this.props.owner?"clickable":null,onClick:e=>{e.preventDefault(),this.props.owner&&this.props.onLaunchPermissionsEditor("anon")},children:this.props.anon})]})]})]})]}):(0,m.jsxs)("div",{className:"group",children:[(0,m.jsx)("div",{children:(0,m.jsx)("label",{className:"small",children:(0,m.jsx)(n.FormattedMessage,{id:"label_permissions",defaultMessage:"Permissions:",description:"Section title"})})}),(0,m.jsxs)("div",{className:"quoted",children:[(0,m.jsxs)("div",{children:[(0,m.jsx)(n.FormattedMessage,{id:"label_you",defaultMessage:"You:",description:"Label for the current user"})," ",(0,m.jsx)("tt",{className:"clickable",onClick:e=>{e.preventDefault(),this.props.onLaunchPermissionsEditor("want")},children:this.props.access})]}),(0,m.jsxs)("div",{children:[this.props.fullName?this.props.fullName:e(C.other_user),":  ",(0,m.jsx)("tt",{className:"clickable",onClick:e=>{e.preventDefault(),this.props.onLaunchPermissionsEditor("given")},children:this.props.modeGiven2})]})]})]})})]})}}var w=(0,n.injectIntl)(N),S=t(7981),T=t(7256);const k=(0,n.defineMessages)({info:{id:"panel_title_info",description:"Title for InfoView",defaultMessage:"Info"},general:{id:"panel_title_general",description:"Title for TopicCommon.",defaultMessage:"General"},security:{id:"panel_title_security",description:"Title for TopicSecirity and AccSecurity.",defaultMessage:"Security"},members:{id:"panel_title_members",description:"Title for managing group members view.",defaultMessage:"Members"},crop:{id:"panel_title_crop",description:"Title for AvatarCropView.",defaultMessage:"Drag to Adjust"},perm_want:{id:"requested_permissions",defaultMessage:"Requested",description:"Title for permissions"},perm_given:{id:"granted_permissions",defaultMessage:"Granted",description:"Title for permissions"},perm_auth:{id:"permissions_authenticated",defaultMessage:"Authenticated",description:"Title for editing default authenticated permissions"},perm_anon:{id:"permissions_anonymous",defaultMessage:"Anonymous",description:"Title for editing default anonymous permissions"},perm_user:{id:"permissions_user",defaultMessage:"User's Permissions",description:"Title for editing user's permissions"},edit_permissions:{id:"menu_item_edit_permissions",defaultMessage:"Edit permissions",description:"Menu item [Edit permissions]"},qrcode:{id:"scan_qr_code",defaultMessage:"Scan QR Code",description:"Title for scanning QR code"},text_copied:{id:"text_copied",defaultMessage:"Copied to clipboard",description:"Notification that text has been copied to clipboard"},self_topic_name:{id:"self_topic_name",defaultMessage:"Saved messages",description:"Name of self topic for UI"},self_topic_comment:{id:"self_topic_comment",defaultMessage:"Notes, messages, links, files saved for posterity",description:"Comment for self topic for UI"}});class A extends a().Component{constructor(e){super(e),this.state={topic:null,owner:!1,admin:!1,sharer:!1,deleter:!1,muted:!1,address:null,groupTopic:void 0,isSelf:!1,channel:void 0,fullName:void 0,description:void 0,avatar:null,private:null,selectedContact:null,access:null,modeGiven:null,modeWant:null,modeGiven2:null,modeWant2:null,auth:null,anon:null,contactList:[],trustedBadges:[],previousMetaDesc:void 0,previousSubsUpdated:void 0},this.propsUpdated=this.propsUpdated.bind(this),this.resetSubs=this.resetSubs.bind(this),this.resetDesc=this.resetDesc.bind(this),this.resetTags=this.resetTags.bind(this),this.onMetaDesc=this.onMetaDesc.bind(this),this.onSubsUpdated=this.onSubsUpdated.bind(this),this.handleImageChanged=this.handleImageChanged.bind(this),this.handleMuted=this.handleMuted.bind(this),this.handleUnarchive=this.handleUnarchive.bind(this),this.handlePermissionsChanged=this.handlePermissionsChanged.bind(this),this.handleLaunchPermissionsEditor=this.handleLaunchPermissionsEditor.bind(this),this.handleShowQRCode=this.handleShowQRCode.bind(this),this.handleCopyToClipboard=this.handleCopyToClipboard.bind(this),this.handleShare=this.handleShare.bind(this),this.handleShowAddMembers=this.handleShowAddMembers.bind(this),this.handleMemberUpdateRequest=this.handleMemberUpdateRequest.bind(this),this.handleMemberSelected=this.handleMemberSelected.bind(this),this.handleContextMenu=this.handleContextMenu.bind(this),this.handleBackNavigate=this.handleBackNavigate.bind(this)}propsUpdated(e){const s=this.props.tinode.getTopic(e.topic);s&&(this.onMetaDesc!=s.onMetaDesc&&(this.previousMetaDesc=s.onMetaDesc,s.onMetaDesc=this.onMetaDesc,this.previousSubsUpdated=s.onSubsUpdated,s.onSubsUpdated=this.onSubsUpdated),this.state.topic!=e.topic&&(this.setState({topic:e.topic}),this.resetDesc(s,e),this.resetSubs(s,e),this.resetTags(s)))}componentDidMount(){this.propsUpdated(this.props)}componentDidUpdate(e){this.propsUpdated(e)}componentWillUnmount(){const e=this.props.tinode.getTopic(this.props.topic);e&&(this.setState({topic:null}),e.onMetaDesc=this.previousMetaDesc,e.onSubsUpdated=this.previousSubsUpdated)}resetSubs(e,s){const t={contactList:[]};if("p2p"==e.getType()){const i=e.subscriber(s.topic);i?(t.modeGiven2=i.acs.getGiven(),t.modeWant2=i.acs.getWant()):(t.modeGiven2="N",t.modeWant2="N")}else e.subscribers(e=>{t.contactList.push(e)},this);this.setState(t)}resetDesc(e,s){const t=e.getDefaultAccess()||{},i=e.getAccessMode(),a=[];if(e.trusted)for(const[s,t]of Object.entries(e.trusted))t&&a.push(s);const n=e.isSelfType();this.setState({owner:i&&i.isOwner(),admin:i&&i.isAdmin(),sharer:i&&i.isSharer(),deleter:i&&i.isDeleter(),muted:i&&i.isMuted(),fullName:n?s.intl.formatMessage(k.self_topic_name):(0,T.W5)(e.public&&e.public.fn,60),description:n?s.intl.formatMessage(k.self_topic_comment):(0,T.W5)(e.public&&e.public.note,360),avatar:(0,S.to)(e.public?e.public.photo:null),trustedBadges:a,private:(0,T.W5)(e.private&&e.private.comment,60),archived:e.isArchived(),address:e.name,groupTopic:e.isGroupType(),isSelf:n,channel:e.isChannelType()||e.chan,access:i?i.getMode():void 0,modeGiven:i?i.getGiven():void 0,modeWant:i?i.getWant():void 0,auth:t.auth,anon:t.anon})}resetTags(e){if("grp"!=e.getType())return;const s=e.getAccessMode();s&&s.isOwner()&&e.getMeta(e.startMetaQuery().withTags().build())}onMetaDesc(e){const s=this.props.tinode.getTopic(this.props.topic);s&&(this.resetDesc(s,this.props),this.previousMetaDesc&&this.previousMetaDesc!=this.onMetaDesc&&this.previousMetaDesc(e))}onSubsUpdated(e){const s=this.props.tinode.getTopic(this.props.topic);s&&(this.resetSubs(s,this.props),this.previousSubsUpdated&&this.previousSubsUpdated!=this.onSubsUpdated&&this.previousSubsUpdated(e))}handleImageChanged(e,s){this.setState({avatar:s}),this.props.onTopicDescUpdate(this.props.topic,new o.TheCard(null,s||o.Tinode.DEL_CHAR),null)}handleMuted(e,s){this.setState({muted:s}),this.props.onChangePermissions(this.props.topic,s?"-P":"+P")}handleUnarchive(e,s){this.props.onTopicUnArchive(this.props.topic)}handlePermissionsChanged(e,s){switch(e){case"auth":this.props.onTopicDescUpdateRequest(this.props.topic,null,null,{auth:s});break;case"anon":this.props.onTopicDescUpdateRequest(this.props.topic,null,null,{anon:s});break;case"mode":case"want":this.props.onChangePermissions(this.props.topic,s);break;case"given":this.props.onChangePermissions(this.props.topic,s,this.props.topic);break;case"user":this.props.onChangePermissions(this.props.topic,s,this.state.userPermissionsEdited)}this.handleBackNavigate()}handleLaunchPermissionsEditor(e,s){const{formatMessage:t}=this.props.intl;let i,a,n,r,l,d,c;switch(e){case"mode":i=this.state.access;break;case"want":i=this.state.modeWant,a=this.state.modeGiven,this.state.owner?n="O":(n=o.AccessMode.encode(o.AccessMode.diff("ASDO",this.state.modeGiven)),this.state.channel&&(n+="W")),r=t(k.perm_want),l=t(k.perm_given);break;case"given":i=this.state.modeGiven2,a=this.state.modeWant2,n=this.state.groupTopic?this.state.owner?"":"O":"ASDO",r=t(k.perm_given),l=t(k.perm_want);break;case"auth":i=this.state.auth,n="O";break;case"anon":i=this.state.anon,n="O";break;case"user":{const e=this.props.tinode.getTopic(this.props.topic);if(!e)return;const o=e.subscriber(s);if(!o||!o.acs)return;i=o.acs.getGiven(),a=o.acs.getWant(),n=this.state.owner?"":"O",r=t(k.perm_given),l=t(k.perm_want),o.public&&(d=o.public.fn,c=o.public.photo);break}default:return void console.error("Unknown permission editing mode '"+e+"'")}this.setState({userPermissionsEdited:s,userPermissionsTitle:d,userPermissionsAvatar:c,editedPermissions:i,immutablePermissions:a,editedPermissionsTitle:r,immutablePermissionsTitle:l,editedPermissionsSkipped:n}),this.props.onNavigate(`perm/${e}`)}handleShowQRCode(e){e.preventDefault(),this.props.onNavigate("qrcode")}handleCopyToClipboard(e,s){e.preventDefault(),navigator.clipboard.writeText(s).then(e=>{this.setState({toast:this.props.intl.formatMessage(k.text_copied)}),setTimeout(e=>{this.setState({toast:""})},3e3)})}handleShare(e){e.preventDefault();const s=new o.TheCard(this.state.fullName,this.state.avatar,null,this.state.description);o.TheCard.setTinodeID(s,o.Tinode.URI_TOPIC_ID_PREFIX+this.props.topic),this.props.onShareTheCard(s)}handleShowAddMembers(e){e.preventDefault(),this.props.onInitFind(),this.props.onNavigate("members")}handleMemberUpdateRequest(e,s,t){this.props.onMemberUpdateRequest(this.props.topic,s,t),this.props.onNavigate("info")}handleMemberSelected(e){this.setState({selectedContact:e})}handleBackNavigate(){const e=(this.props.panel||"info").split("/");"info"==e[0]?this.props.onNavigate(null):"perm"==e[0]?"user"==e[1]?this.props.onNavigate("info"):this.props.onNavigate("security"):this.props.onNavigate("info")}handleContextMenu(e){const{formatMessage:s}=this.props.intl,t=this.props.tinode.getTopic(this.props.topic);if(!t)return;const i=t.subscriber(e.topicName);if(!i||!i.acs)return;const a=this.props.tinode.isMe(e.topicName),n=[{title:s(k.edit_permissions),handler:s=>this.handleLaunchPermissionsEditor(a?"want":"user",e.topicName)}];a||n.push("member_delete"),n.push(i.acs.isMuted()?"member_unmute":"member_mute"),a||n.push(i.acs.isJoiner()?"member_block":"member_unblock"),this.props.showContextMenu({topicName:this.props.topic,x:e.x,y:e.y,user:e.topicName},n)}render(){const e=(this.props.panel||"info").split("/"),s=e[0];e.shift();const{formatMessage:t}=this.props.intl,i=t(("perm"==s?k["perm_"+e[0]]:k[s])||k.info),a=this.props.tinode.getTopic(this.state.topic),p=a&&a.alias();return(0,m.jsxs)("div",{id:"info-view",children:[(0,m.jsx)("div",{className:"toast"+(this.state.toast?" show":""),children:this.state.toast}),(0,m.jsxs)("div",{className:"caption-panel",id:"info-caption-panel",children:[(0,m.jsx)("div",{className:"panel-title",id:"info-title",children:i}),(0,m.jsx)("div",{children:(0,m.jsx)(f.A,{onCancel:this.handleBackNavigate})})]}),this.props.displayMobile?(0,m.jsx)(h.A,{level:this.props.errorLevel,text:this.props.errorText,onClearError:this.props.onError}):null,"members"==s?(0,m.jsx)(b,{tinode:this.props.tinode,members:this.state.contactList,requiredMember:this.props.myUserId,keepInitialMembers:!this.state.admin&&!this.state.owner,myUserId:this.props.myUserId,contacts:this.props.searchableContacts,onCancel:this.handleBackNavigate,onSubmit:this.handleMemberUpdateRequest}):"perm"==s&&e.length>0?(0,m.jsx)(v.A,{tinode:this.props.tinode,mode:this.state.editedPermissions,compare:this.state.immutablePermissions,skip:this.state.editedPermissionsSkipped,modeTitle:this.state.editedPermissionsTitle,compareTitle:this.state.immutablePermissionsTitle,userTitle:this.state.userPermissionsTitle,item:this.state.userPermissionsEdited,userAvatar:this.state.userPermissionsAvatar,onSubmit:s=>this.handlePermissionsChanged(e[0],s),onCancel:this.handleBackNavigate}):"general"==s?(0,m.jsx)(j.A,{tinode:this.props.tinode,topic:this.props.topic,reqCredMethod:this.props.reqCredMethod,onCredAdd:this.props.onCredAdd,onUpdateTagsRequest:this.props.onTopicTagsUpdateRequest,onCredConfirm:this.props.onCredConfirm,onCredDelete:this.props.onCredDelete,onUpdateTopicDesc:this.props.onTopicDescUpdateRequest,onError:this.props.onError}):"security"==s?(0,m.jsx)(w,{topic:this.props.topic,owner:this.state.owner,admin:this.state.admin,sharer:this.state.sharer,deleter:this.state.deleter,muted:this.state.muted,groupTopic:this.state.groupTopic,channel:this.state.channel,access:this.state.access,modeGiven:this.state.modeGiven,modeWant:this.state.modeWant,modeGiven2:this.state.modeGiven2,modeWant2:this.state.modeWant2,auth:this.state.auth,anon:this.state.anon,onShowAlert:this.props.onShowAlert,onDeleteMessages:this.props.onDeleteMessages,onLeaveTopic:this.props.onLeaveTopic,onBlockTopic:this.props.onBlockTopic,onReportTopic:this.props.onReportTopic,onLaunchPermissionsEditor:this.handleLaunchPermissionsEditor,onNavigate:this.props.onNavigate}):"qrcode"==s?(0,m.jsx)(M,{uri:o.Tinode.URI_TOPIC_ID_PREFIX+this.props.topic,onCancel:this.handleBackNavigate}):(0,m.jsxs)("div",{id:"info-view-content",className:"scrollable-panel",children:[(0,m.jsxs)("div",{className:"panel-form-column",children:[this.state.isSelf?null:(0,m.jsxs)("a",{href:"#",className:"flat-button float-right",onClick:e=>{e.preventDefault(),this.props.onNavigate("general")},children:[(0,m.jsx)("i",{className:"material-icons",children:"edit"})," ",(0,m.jsx)(n.FormattedMessage,{id:"button_edit",defaultMessage:"Edit",description:"Call to action [Edit]"})]}),(0,m.jsx)("center",{children:(0,m.jsx)(r.A,{tinode:this.props.tinode,avatar:this.state.avatar,readOnly:!0,uid:this.props.topic,title:this.state.fullName})}),(0,m.jsxs)("div",{className:"group",children:[(0,m.jsx)("div",{children:(0,m.jsx)("label",{className:"small",children:(0,m.jsx)(n.FormattedMessage,{id:"label_topic_name",defaultMessage:"Name",description:"Label for editing topic name"})})}),(0,m.jsxs)("div",{className:"large ellipsized",children:[this.state.fullName," ",this.state.channel?(0,m.jsx)("i",{className:"material-icons",children:"podcasts"}):null]})]}),this.state.private?(0,m.jsxs)("div",{className:"group",children:[(0,m.jsx)("div",{children:(0,m.jsx)("label",{className:"small",children:(0,m.jsx)(n.FormattedMessage,{id:"label_private",defaultMessage:"Private comment",description:"Label for editing 'private'"})})}),(0,m.jsx)("div",{className:"large ellipsized",children:this.state.private})]}):null,this.state.isSelf?null:(0,m.jsxs)(m.Fragment,{children:[(0,m.jsxs)("div",{className:"panel-form-row",children:[(0,m.jsxs)("div",{children:[(0,m.jsx)("label",{className:"small",children:(0,m.jsx)(n.FormattedMessage,{id:"label_user_id",defaultMessage:"ID:",description:"Label for user address (ID)"})})," ",(0,m.jsx)("tt",{children:this.state.address})]}),(0,m.jsxs)("div",{style:{marginLeft:"auto"},children:[" ",(0,m.jsx)("a",{href:"#",onClick:e=>{this.handleCopyToClipboard(e,this.state.address)},children:(0,m.jsx)("i",{className:"material-icons",children:"content_copy"})}),"   ",(0,m.jsx)("a",{href:"#",onClick:this.handleShowQRCode,children:(0,m.jsx)("i",{className:"material-icons",children:"qr_code"})}),"   ",(0,m.jsx)("a",{href:"#",onClick:this.handleShare,children:(0,m.jsx)("i",{className:"material-icons",children:"share"})})," "]})]}),p?(0,m.jsxs)("div",{className:"panel-form-row",children:[(0,m.jsxs)("div",{children:[(0,m.jsx)("label",{className:"small",children:(0,m.jsx)(n.FormattedMessage,{id:"label_alias",defaultMessage:"Alias:",description:"Label for user or topic alias"})})," ",(0,m.jsx)("tt",{children:p})]}),(0,m.jsxs)("div",{style:{marginLeft:"auto"},children:[" ",(0,m.jsx)("a",{href:"#",onClick:e=>{this.handleCopyToClipboard(e,p)},children:(0,m.jsx)("i",{className:"material-icons",children:"content_copy"})}),"   ",(0,m.jsx)("i",{className:"material-icons",style:{opacity:0},children:"qr_code"})," "]})]}):null]}),this.state.trustedBadges.length>0?(0,m.jsx)("div",{className:"group",children:(0,m.jsx)(l.A,{trustedBadges:this.state.trustedBadges})}):null,this.state.groupTopic&&a.subcnt>0?(0,m.jsxs)("div",{className:"group",children:[(0,m.jsx)("label",{className:"small",children:this.state.channel?(0,m.jsx)(n.FormattedMessage,{id:"label_subscriber_count",defaultMessage:"Subscribers:",description:"Label for the count of channel subscribers"}):(0,m.jsx)(n.FormattedMessage,{id:"label_member_count",defaultMessage:"Members:",description:"Label for the count of group topic members"})})," ",(0,m.jsx)(n.FormattedNumber,{value:a.subcnt})]}):null,this.state.description?(0,m.jsxs)("div",{className:"group",children:[(0,m.jsx)("label",{className:"small",children:(0,m.jsx)(n.FormattedMessage,{id:"label_description",defaultMessage:"Description",description:"Label for description of user or topic"})}),(0,m.jsx)("div",{children:this.state.description})]}):null]}),this.state.isSelf?null:(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)("div",{className:"hr"}),(0,m.jsxs)("div",{className:"panel-form-row",children:[(0,m.jsx)("label",{children:(0,m.jsx)(n.FormattedMessage,{id:"label_muting_topic",defaultMessage:"Muted:",description:"Label for Muting/unmuting the topic"})}),(0,m.jsx)(d.A,{name:"P",checked:this.state.muted,onChange:this.handleMuted})]})]}),this.state.archived?(0,m.jsxs)("div",{className:"panel-form-row",children:[(0,m.jsx)("label",{children:(0,m.jsx)(n.FormattedMessage,{id:"label_unarchive_topic",defaultMessage:"Archived:",description:"Label for unarchiving the topic"})}),(0,m.jsx)(d.A,{name:"archived",checked:!0,onChange:this.handleUnarchive})]}):null,this.state.isSelf?null:(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)("div",{className:"hr"}),(0,m.jsx)("div",{className:"panel-form-row",children:(0,m.jsxs)("a",{href:"#",className:"flat-button",onClick:e=>{e.preventDefault(),this.props.onNavigate("security")},children:[(0,m.jsx)("i",{className:"material-icons",children:"security"})," ",(0,m.jsx)(n.FormattedMessage,{id:"button_security",defaultMessage:"Security",description:"Navigaton button for security panel."})]})})]}),this.state.groupTopic&&this.state.sharer?(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)("div",{className:"hr"}),(0,m.jsx)("div",{className:"panel-form-row",children:(0,m.jsx)("label",{className:"small",children:(0,m.jsx)(n.FormattedMessage,{id:"label_group_members",defaultMessage:"Group members:",description:"Section title or label"})})}),(0,m.jsx)("div",{className:"panel-form-row",children:(0,m.jsxs)("a",{href:"#",className:"flat-button",onClick:this.handleShowAddMembers,children:[(0,m.jsx)("i",{className:"material-icons",children:"person_add"}),"  ",(0,m.jsx)(n.FormattedMessage,{id:"button_add_members",defaultMessage:"Add members",description:"Flat button [Add members] (to topic)"})]})}),(0,m.jsx)(n.FormattedMessage,{id:"group_has_no_members",defaultMessage:"No members",description:"Shown in place of group members",children:e=>(0,m.jsx)(c.A,{tinode:this.props.tinode,contacts:this.state.contactList,myUserId:this.props.myUserId,emptyListMessage:e,topicSelected:this.state.selectedContact,showOnline:!1,showUnread:!1,showMode:!0,noScroll:!0,onTopicSelected:this.handleMemberSelected,showContextMenu:!!this.state.admin&&this.handleContextMenu})})]}):null]})]})}}var D=(0,n.injectIntl)(A)},9022:function(e,s,t){var i=t(1594),a=t.n(i),n=t(8181),o=t(3207),r=t(1974),l=t(7981),d=t(4848);const c=(0,n.defineMessages)({joiner:{id:"permission_join",defaultMessage:"Join ({val})",description:"Name of J permission"},reader:{id:"permission_read",defaultMessage:"Read ({val})",description:"Name of R permission"},writer:{id:"permission_write",defaultMessage:"Write ({val})",description:"Name of W permission"},preser:{id:"permission_pres",defaultMessage:"Get notified ({val})",description:"Name of P permission"},approver:{id:"permission_admin",defaultMessage:"Approve ({val})",description:"Name of A permission"},sharer:{id:"permission_share",defaultMessage:"Share ({val})",description:"Name of S permission"},deleter:{id:"permission_delete",defaultMessage:"Delete ({val})",description:"Name of D permission"},owner:{id:"permission_owner",defaultMessage:"Owner ({val})",description:"Name of O permission"}});class h extends a().Component{constructor(e){super(e),this.state={mode:(e.mode||"").replace("N","")},this.handleChange=this.handleChange.bind(this),this.handleSubmit=this.handleSubmit.bind(this),this.handleCancel=this.handleCancel.bind(this)}handleChange(e){let s=this.state.mode;-1==s.indexOf(e)?s+=e:s=s.replace(e,""),this.setState({mode:s})}handleSubmit(){const e=(this.state.mode||"N").split("").sort().join("");e!==(this.props.mode||"N").split("").sort().join("")?this.props.onSubmit(e):this.props.onCancel()}handleCancel(){this.props.onCancel()}render(){const{formatMessage:e}=this.props.intl,s={J:e(c.joiner,{val:"J"}),R:e(c.reader,{val:"R"}),W:e(c.writer,{val:"W"}),P:e(c.preser,{val:"P"}),A:e(c.approver,{val:"A"}),S:e(c.sharer,{val:"S"}),D:e(c.deleter,{val:"D"}),O:e(c.owner,{val:"O"})};let t=this.props.skip||"",i=this.state.mode,a=(this.props.compare||"").replace("N",""),h=[];for(let e=0;e<8;e++){let n="JRWPASDO".charAt(e);t.indexOf(n)>=0&&i.indexOf(n)<0||h.push((0,d.jsxs)("tr",{children:[(0,d.jsx)("td",{children:s[n]}),(0,d.jsx)("td",{className:"checkbox",children:t.indexOf(n)<0?(0,d.jsx)(o.A,{name:n,checked:i.indexOf(n)>=0,onChange:this.handleChange}):(0,d.jsx)(o.A,{name:n,checked:i.indexOf(n)>=0})}),this.props.compare?(0,d.jsx)("td",{className:"checkbox",children:(0,d.jsx)(o.A,{name:n,checked:a.indexOf(n)>=0})}):null]},n))}return(0,d.jsxs)("div",{className:"panel-form-column",children:[this.props.userTitle?(0,d.jsx)("ul",{className:"contact-box small",children:(0,d.jsx)(r.A,{tinode:this.props.tinode,item:this.props.item,title:this.props.userTitle,small:!0,avatar:(0,l.to)(this.props.userAvatar?this.props.userAvatar:null)})}):null,(0,d.jsx)("label",{className:"small",children:(0,d.jsx)(n.FormattedMessage,{id:"title_permissions",defaultMessage:"Permissions",description:"Section title"})}),(0,d.jsxs)("table",{className:"permission-editor",children:[this.props.compare?(0,d.jsx)("thead",{children:(0,d.jsxs)("tr",{children:[(0,d.jsx)("th",{}),(0,d.jsx)("th",{children:this.props.modeTitle}),(0,d.jsx)("th",{children:this.props.compareTitle})]})}):null,(0,d.jsx)("tbody",{children:h})]}),(0,d.jsx)("br",{}),(0,d.jsxs)("div",{className:"dialog-buttons",children:[(0,d.jsx)("button",{className:"outline",onClick:this.handleCancel,children:(0,d.jsx)(n.FormattedMessage,{id:"button_cancel",defaultMessage:"Cancel",description:"Button [Cancel]"})}),(0,d.jsx)("button",{className:"primary",onClick:this.handleSubmit,children:(0,d.jsx)(n.FormattedMessage,{id:"button_ok",defaultMessage:"OK",description:"Button [OK]"})})]})]})}}s.A=(0,n.injectIntl)(h)}}]); +//# sourceMappingURL=158.prod.js.map \ No newline at end of file diff --git a/umd/158.prod.js.map b/umd/158.prod.js.map new file mode 100644 index 00000000..438c9699 --- /dev/null +++ b/umd/158.prod.js.map @@ -0,0 +1 @@ +{"version":3,"file":"158.prod.js","mappings":"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","sources":["webpack://tinode-webapp/./src/widgets/group-manager.jsx","webpack://tinode-webapp/./src/widgets/show-qrcode.jsx","webpack://tinode-webapp/./src/widgets/topic-security.jsx","webpack://tinode-webapp/./src/views/info-view.jsx","webpack://tinode-webapp/./src/widgets/permissions-editor.jsx"],"sourcesContent":["// GroupMembers: control for managing a list of group members.\nimport React from 'react';\nimport { FormattedMessage, defineMessages, injectIntl } from 'react-intl';\n\nimport ChipInput from './chip-input.jsx';\nimport ContactList from './contact-list.jsx';\n\nconst messages = defineMessages({\n no_contacts: {\n id: 'no_contacts',\n defaultMessage: 'You have no contacts :-(',\n description: 'Shown in ContactsView when the user has no contacts'\n },\n contacts_not_found_short: {\n id: 'contacts_not_found_short',\n defaultMessage: \"No contacts match ''{query}''\",\n description: 'Shown in ContactsView when search returned no results'\n },\n add_members_prompt: {\n id: 'add_members_prompt',\n defaultMessage: 'add members',\n description: 'Placeholder in group members input field'\n }\n});\n\nclass GroupManager extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n // Array of topic members\n members: props.members,\n index: GroupManager.indexMembers(props.members),\n staticMembers: GroupManager.staticMembers(props.members, props.keepInitialMembers, props.requiredMember),\n contactFilter: '',\n noContactsMessage: props.intl.formatMessage(messages.no_contacts),\n selectedContacts: GroupManager.selectedContacts(props.members)\n };\n\n this.handleContactSelected = this.handleContactSelected.bind(this);\n this.handleMemberRemoved = this.handleMemberRemoved.bind(this);\n this.handleContactFilter = this.handleContactFilter.bind(this);\n this.handleSubmit = this.handleSubmit.bind(this);\n this.handleCancel = this.handleCancel.bind(this);\n }\n\n static indexMembers(members) {\n let index = {};\n members.forEach(m => {\n index[m.user] = {delta: 0, present: true}; // Delta: 0 unchanged, +1 added, -1 removed\n });\n return index;\n }\n\n static staticMembers(members, keepInitial, requiredMember) {\n let stat = [];\n members.forEach(m => {\n if (keepInitial || m.user == requiredMember) {\n stat.push(m.user);\n }\n });\n return stat;\n }\n\n static selectedContacts(members) {\n let sel = [];\n members.forEach(m => {\n sel.push(m.user);\n });\n return sel;\n }\n\n handleContactSelected(userId, index) {\n let status = this.state.index[userId];\n if (status) {\n if (status.present) {\n // Prevent duplicate members\n return;\n }\n status.delta += 1;\n status.present = true;\n } else {\n status = {delta: 1, present: true};\n }\n\n let m = this.state.members.slice();\n m.push(this.props.contacts[index]);\n\n const sel = GroupManager.selectedContacts(m);\n\n const i = this.state.index;\n i[userId] = status;\n\n this.setState({members: m, index: i, selectedContacts: sel});\n }\n\n handleMemberRemoved(userId, index) {\n const status = this.state.index[userId];\n if (!status || !status.present) {\n return;\n }\n status.present = false;\n status.delta -= 1;\n\n let m = this.state.members.slice();\n m.splice(index, 1);\n\n const sel = GroupManager.selectedContacts(m);\n\n const i = this.state.index;\n i[userId] = status;\n\n this.setState({members: m, index: i, selectedContacts: sel});\n }\n\n handleContactFilter(val) {\n const {formatMessage} = this.props.intl;\n const msg = !val ?\n formatMessage(messages.no_contacts) :\n formatMessage(messages.contacts_not_found_short, {query: val});\n\n this.setState({contactFilter: val, noContactsMessage: msg});\n }\n\n static doContactFiltering(filter, values) {\n if (filter) {\n for (let i=0; i= 0) {\n return true;\n }\n }\n return false;\n }\n return true;\n }\n\n handleSubmit() {\n const members = [];\n const added = [];\n const removed = [];\n\n const keys = Object.keys(this.state.index);\n keys.forEach(k => {\n if (this.state.index[k].present) {\n members.push(k);\n }\n\n if (this.state.index[k].delta > 0) {\n added.push(k);\n } else if (this.state.index[k].delta < 0) {\n removed.push(k);\n }\n });\n this.props.onSubmit(members, added, removed);\n }\n\n handleCancel() {\n this.props.onCancel();\n }\n\n render() {\n return (\n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n \n
    \n \n \n
    \n
    \n );\n }\n};\n\nexport default injectIntl(GroupManager);\n","import QRCode from 'qrcodejs';\nimport React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport { QRCODE_SIZE } from '../config';\n\nexport default class ShowQRCode extends React.PureComponent {\n constructor(props) {\n super(props);\n this.qrCodeRef = React.createRef();\n }\n\n componentDidMount() {\n new QRCode(this.qrCodeRef.current, {\n text: this.props.uri,\n width: QRCODE_SIZE,\n height: QRCODE_SIZE,\n });\n }\n\n render() {\n return (\n
    \n
    \n
    \n
    {this.props.uri}
    \n
    \n \n
    \n
    \n );\n }\n};\n","// Edit account parameters.\nimport React from 'react';\nimport { FormattedMessage, defineMessages, injectIntl } from 'react-intl';\n\nconst messages = defineMessages({\n clear_messages: {\n id: 'action_clear_messages',\n defaultMessage: 'Clear Messages',\n description: 'Flat button [Clear Messages] (soft-delete messages)'\n },\n clear_messages_warning: {\n id: 'clear_messages_warning',\n defaultMessage: 'Are you sure you want to clear all messages? It cannot be undone.',\n description: 'Alert dialog warning when deleting all messages.'\n },\n delete_messages: {\n id: 'action_delete_messages',\n defaultMessage: 'Clear Messages for All',\n description: 'Flat button [Clear for All] (hard-delete all messages)'\n },\n delete_messages_warning: {\n id: 'delete_messages_warning',\n defaultMessage: 'Are you sure you want to delete all messages for everyone? It cannot be undone.',\n description: 'Alert dialog warning when hard-deleting all messages.'\n },\n topic_delete: {\n id: 'topic_delete',\n defaultMessage: 'Delete Conversation',\n description: 'Alert title when deleting the topic.'\n },\n topic_delete_warning: {\n id: 'topic_delete_warning',\n defaultMessage: 'Are you sure you want to delete this conversation? It cannot be undone.',\n description: 'Alert warning when deleting entire topic'\n },\n leave_chat: {\n id: 'action_leave_chat',\n defaultMessage: 'Leave Conversation',\n description: 'Flat button [Leave Conversation]'\n },\n leave_chat_warning: {\n id: 'leave_chat_warning',\n defaultMessage: 'Are you sure you want to leave this conversation?',\n description: 'Alert dialog warning when unsubscribing from a chat.'\n },\n block_contact: {\n id: 'action_block_contact',\n defaultMessage: \"Block Contact\",\n description: \"Flat button [Block Contact]\"\n },\n block_contact_warning: {\n id: 'block_contact_warning',\n defaultMessage: 'Are you sure you want to block this contact?',\n description: 'Alert dialog warning when blocking a contact.'\n },\n report_chat: {\n id: 'action_report_chat',\n defaultMessage: 'Report Conversation',\n description: 'Flat button [Report Group]'\n },\n report_chat_warning: {\n id: 'report_chat_warning',\n defaultMessage: 'Are you sure you want to block and report this conversation?',\n description: 'Alert dialog warning when reporting a conversation for abuse'\n },\n other_user: {\n id: 'label_other_user',\n defaultMessage: 'Other',\n description: 'Label for the other user when the user is unnamed'\n },\n});\n\nclass TopicSecurity extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.handleDeleteTopic = this.handleDeleteTopic.bind(this);\n this.handleDeleteMessages = this.handleDeleteMessages.bind(this);\n this.handleLeave = this.handleLeave.bind(this);\n this.handleBlock = this.handleBlock.bind(this);\n this.handleReport = this.handleReport.bind(this);\n }\n\n handleDeleteTopic(e) {\n e.preventDefault();\n const {formatMessage} = this.props.intl;\n this.props.onShowAlert(\n formatMessage(messages.topic_delete), // title\n formatMessage(messages.topic_delete_warning), // content\n _ => this.props.onDeleteTopic(this.props.topic), // onConfirm\n null, // \"OK\"\n true, // Show Reject button\n null // \"Cancel\"\n );\n }\n\n handleDeleteMessages(e) {\n e.preventDefault();\n const {formatMessage} = this.props.intl;\n this.props.onShowAlert(\n formatMessage(this.props.deleter ? messages.delete_messages : messages.clear_messages), // title\n formatMessage(this.props.deleter ? messages.delete_messages_warning : messages.clear_messages_warning), // content\n _ => this.props.onDeleteMessages(this.props.topic), // onConfirm\n null, // \"OK\"\n true, // Show Reject button\n null // \"Cancel\"\n );\n }\n\n handleLeave(e) {\n e.preventDefault();\n const {formatMessage} = this.props.intl;\n this.props.onShowAlert(\n formatMessage(messages.leave_chat), // title\n formatMessage(messages.leave_chat_warning), // content\n _ => this.props.onLeaveTopic(this.props.topic), // onConfirm\n null, // \"OK\"\n true, // Show Reject button\n null // \"Cancel\"\n );\n }\n\n handleBlock(e) {\n e.preventDefault();\n const {formatMessage} = this.props.intl;\n this.props.onShowAlert(\n formatMessage(messages.block_contact), // title\n formatMessage(messages.block_contact_warning), // content\n _ => this.props.onBlockTopic(this.props.topic), // onConfirm\n null, // \"OK\"\n true, // Show Reject button\n null // \"Cancel\"\n );\n }\n\n handleReport(e) {\n e.preventDefault();\n const {formatMessage} = this.props.intl;\n this.props.onShowAlert(\n formatMessage(messages.report_chat), // title\n formatMessage(messages.report_chat_warning), // content\n (_ => { this.props.onReportTopic(this.props.topic); }), // onConfirm\n null, // \"OK\"\n true, // Show Reject button\n null // \"Cancel\"\n );\n }\n\n render() {\n const {formatMessage} = this.props.intl;\n return (\n
    \n
    \n {!this.props.channel ?\n \n delete_outline  {\n formatMessage(this.props.deleter ? messages.delete_messages : messages.clear_messages)\n }\n \n :\n null\n }\n {this.props.owner ?\n \n delete  {formatMessage(messages.topic_delete)}\n \n :\n \n exit_to_app  {formatMessage(messages.leave_chat)}\n \n }\n {!this.props.groupTopic ?\n \n block  {formatMessage(messages.block_contact)}\n \n :\n null\n }\n {!this.props.owner ?\n \n report  {formatMessage(messages.report_chat)}\n \n :\n null\n }\n
    \n
    \n
    \n {this.props.groupTopic ?\n <>\n
    \n {e.preventDefault(); this.props.onLaunchPermissionsEditor('want')}}>\n {this.props.access}\n \n
    \n {!this.props.channel ?\n
    \n
    \n \n
    \n
    \n
    Auth: {\n e.preventDefault();\n if (this.props.owner) {\n this.props.onLaunchPermissionsEditor('auth');\n }\n }}>{this.props.auth}\n
    \n
    Anon: {\n e.preventDefault();\n if (this.props.owner) {\n this.props.onLaunchPermissionsEditor('anon');\n }\n }}>{this.props.anon}\n
    \n
    \n
    \n :\n null\n }\n \n :\n
    \n
    \n \n
    \n
    \n
    \n {e.preventDefault(); this.props.onLaunchPermissionsEditor('want')}}>\n {this.props.access}\n \n
    \n
    {this.props.fullName ? this.props.fullName : formatMessage(messages.other_user)}:\n   {e.preventDefault(); this.props.onLaunchPermissionsEditor('given')}}>\n {this.props.modeGiven2}\n \n
    \n
    \n
    \n }\n
    \n
    \n );\n }\n};\n\nexport default injectIntl(TopicSecurity);\n","// InfoView: panel with topic/user info.\nimport React from 'react';\nimport { FormattedMessage, FormattedNumber, defineMessages, injectIntl } from 'react-intl';\n\nimport { AccessMode, Tinode, TheCard } from 'tinode-sdk';\n\nimport AvatarUpload from '../widgets/avatar-upload.jsx';\nimport BadgeList from '../widgets/badge-list.jsx';\nimport CheckBox from '../widgets/checkbox.jsx';\nimport ContactList from '../widgets/contact-list.jsx';\nimport ErrorPanel from '../widgets/error-panel.jsx';\nimport GroupManager from '../widgets/group-manager.jsx';\nimport MenuCancel from '../widgets/menu-cancel.jsx';\nimport PermissionsEditor from '../widgets/permissions-editor.jsx';\nimport ShowQRCode from '../widgets/show-qrcode.jsx';\nimport TopicCommonView from './topic-common-view.jsx';\nimport TopicSecurity from '../widgets/topic-security.jsx';\n\nimport { MAX_TITLE_LENGTH, MAX_TOPIC_DESCRIPTION_LENGTH,\n NO_ACCESS_MODE, TOAST_DURATION } from '../config.js';\n\nimport { makeImageUrl } from '../lib/blob-helpers.js';\nimport { truncateString } from '../lib/strformat.js';\n\nconst messages = defineMessages({\n info: {\n id: 'panel_title_info',\n description: 'Title for InfoView',\n defaultMessage: 'Info'\n },\n general: {\n id: 'panel_title_general',\n description: 'Title for TopicCommon.',\n defaultMessage: 'General'\n },\n security: {\n id: 'panel_title_security',\n description: 'Title for TopicSecirity and AccSecurity.',\n defaultMessage: 'Security'\n },\n members: {\n id: 'panel_title_members',\n description: 'Title for managing group members view.',\n defaultMessage: 'Members'\n },\n crop: {\n id: 'panel_title_crop',\n description: 'Title for AvatarCropView.',\n defaultMessage: 'Drag to Adjust'\n },\n perm_want: {\n id: 'requested_permissions',\n defaultMessage: 'Requested',\n description: 'Title for permissions'\n },\n perm_given: {\n id: 'granted_permissions',\n defaultMessage: 'Granted',\n description: 'Title for permissions'\n },\n perm_auth: {\n id: 'permissions_authenticated',\n defaultMessage: 'Authenticated',\n description: 'Title for editing default authenticated permissions'\n },\n perm_anon: {\n id: 'permissions_anonymous',\n defaultMessage: 'Anonymous',\n description: 'Title for editing default anonymous permissions'\n },\n perm_user: {\n id: 'permissions_user',\n defaultMessage: 'User\\'s Permissions',\n description: 'Title for editing user\\'s permissions'\n },\n edit_permissions: {\n id: 'menu_item_edit_permissions',\n defaultMessage: 'Edit permissions',\n description: 'Menu item [Edit permissions]'\n },\n qrcode: {\n id: 'scan_qr_code',\n defaultMessage: 'Scan QR Code',\n description: 'Title for scanning QR code'\n },\n text_copied: {\n id: 'text_copied',\n defaultMessage: 'Copied to clipboard',\n description: 'Notification that text has been copied to clipboard'\n },\n self_topic_name: {\n id: 'self_topic_name',\n defaultMessage: 'Saved messages',\n description: 'Name of self topic for UI',\n },\n self_topic_comment: {\n id: 'self_topic_comment',\n defaultMessage: 'Notes, messages, links, files saved for posterity',\n description: 'Comment for self topic for UI',\n },\n});\n\nclass InfoView extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n topic: null,\n owner: false,\n admin: false,\n sharer: false,\n deleter: false,\n muted: false,\n address: null,\n groupTopic: undefined,\n isSelf: false,\n channel: undefined,\n fullName: undefined,\n description: undefined,\n avatar: null,\n private: null,\n selectedContact: null,\n access: null,\n modeGiven: null,\n modeWant: null,\n modeGiven2: null, // P2P topic, the other user mode given\n modeWant2: null, // P2P topic, the other user mode want\n auth: null,\n anon: null,\n contactList: [],\n trustedBadges: [],\n previousMetaDesc: undefined,\n previousSubsUpdated: undefined,\n };\n\n this.propsUpdated = this.propsUpdated.bind(this);\n this.resetSubs = this.resetSubs.bind(this);\n this.resetDesc = this.resetDesc.bind(this);\n this.resetTags = this.resetTags.bind(this);\n this.onMetaDesc = this.onMetaDesc.bind(this);\n this.onSubsUpdated = this.onSubsUpdated.bind(this);\n this.handleImageChanged = this.handleImageChanged.bind(this);\n this.handleMuted = this.handleMuted.bind(this);\n this.handleUnarchive = this.handleUnarchive.bind(this);\n this.handlePermissionsChanged = this.handlePermissionsChanged.bind(this);\n this.handleLaunchPermissionsEditor = this.handleLaunchPermissionsEditor.bind(this);\n this.handleShowQRCode = this.handleShowQRCode.bind(this);\n this.handleCopyToClipboard = this.handleCopyToClipboard.bind(this);\n this.handleShare = this.handleShare.bind(this);\n this.handleShowAddMembers = this.handleShowAddMembers.bind(this);\n this.handleMemberUpdateRequest = this.handleMemberUpdateRequest.bind(this);\n this.handleMemberSelected = this.handleMemberSelected.bind(this);\n this.handleContextMenu = this.handleContextMenu.bind(this);\n this.handleBackNavigate = this.handleBackNavigate.bind(this);\n }\n\n propsUpdated(props) {\n const topic = this.props.tinode.getTopic(props.topic);\n if (!topic) {\n return;\n }\n\n if (this.onMetaDesc != topic.onMetaDesc) {\n this.previousMetaDesc = topic.onMetaDesc;\n topic.onMetaDesc = this.onMetaDesc;\n\n this.previousSubsUpdated = topic.onSubsUpdated;\n topic.onSubsUpdated = this.onSubsUpdated;\n }\n\n if (this.state.topic != props.topic) {\n this.setState({topic: props.topic});\n this.resetDesc(topic, props);\n this.resetSubs(topic, props);\n this.resetTags(topic);\n }\n }\n\n // Must provide this for lazy loaded components.\n componentDidMount() {\n this.propsUpdated(this.props);\n }\n\n componentDidUpdate(props) {\n this.propsUpdated(props);\n }\n\n componentWillUnmount() {\n const topic = this.props.tinode.getTopic(this.props.topic);\n if (!topic) {\n return;\n }\n this.setState({topic: null});\n topic.onMetaDesc = this.previousMetaDesc;\n topic.onSubsUpdated = this.previousSubsUpdated;\n }\n\n resetSubs(topic, props) {\n const newState = {contactList: []};\n if (topic.getType() == 'p2p') {\n // Fetch the other party in the p2p conversation.\n // Topic may not be ready yet, so check if user is found.\n const user2 = topic.subscriber(props.topic);\n if (user2) {\n newState.modeGiven2 = user2.acs.getGiven();\n newState.modeWant2 = user2.acs.getWant();\n } else {\n newState.modeGiven2 = NO_ACCESS_MODE;\n newState.modeWant2 = NO_ACCESS_MODE;\n }\n } else {\n topic.subscribers((sub) => {\n newState.contactList.push(sub);\n }, this);\n }\n\n this.setState(newState);\n }\n\n resetDesc(topic, props) {\n const defacs = topic.getDefaultAccess() || {};\n const acs = topic.getAccessMode();\n\n const badges = [];\n if (topic.trusted) {\n for (const [key, val] of Object.entries(topic.trusted)) {\n if (val) {\n badges.push(key);\n }\n }\n }\n\n const isSelf = topic.isSelfType();\n\n this.setState({\n owner: acs && acs.isOwner(),\n admin: acs && acs.isAdmin(),\n sharer: acs && acs.isSharer(),\n deleter: acs && acs.isDeleter(),\n muted: acs && acs.isMuted(),\n\n fullName: isSelf ?\n props.intl.formatMessage(messages.self_topic_name) :\n truncateString(topic.public && topic.public.fn, MAX_TITLE_LENGTH),\n description: isSelf ?\n props.intl.formatMessage(messages.self_topic_comment) :\n truncateString(topic.public && topic.public.note, MAX_TOPIC_DESCRIPTION_LENGTH),\n avatar: makeImageUrl(topic.public ? topic.public.photo : null),\n trustedBadges: badges,\n private: truncateString(topic.private && topic.private.comment, MAX_TITLE_LENGTH),\n archived: topic.isArchived(),\n address: topic.name,\n groupTopic: topic.isGroupType(),\n isSelf: isSelf,\n channel: topic.isChannelType() || topic.chan,\n access: acs ? acs.getMode() : undefined,\n modeGiven: acs ? acs.getGiven() : undefined,\n modeWant: acs ? acs.getWant() : undefined,\n auth: defacs.auth,\n anon: defacs.anon\n });\n }\n\n resetTags(topic) {\n if (topic.getType() != 'grp') {\n return;\n }\n\n const acs = topic.getAccessMode();\n if (acs && acs.isOwner()) {\n // Requesting tags: owner is editing the topic.\n topic.getMeta(topic.startMetaQuery().withTags().build());\n }\n }\n\n onMetaDesc(desc) {\n const topic = this.props.tinode.getTopic(this.props.topic);\n if (!topic) {\n return;\n }\n this.resetDesc(topic, this.props);\n\n if (this.previousMetaDesc && this.previousMetaDesc != this.onMetaDesc) {\n this.previousMetaDesc(desc);\n }\n }\n\n onSubsUpdated(subs) {\n const topic = this.props.tinode.getTopic(this.props.topic);\n if (!topic) {\n return;\n }\n this.resetSubs(topic, this.props);\n\n if (this.previousSubsUpdated && this.previousSubsUpdated != this.onSubsUpdated) {\n this.previousSubsUpdated(subs);\n }\n }\n\n handleImageChanged(mime, img) {\n this.setState({avatar: img});\n this.props.onTopicDescUpdate(this.props.topic, new TheCard(null, img || Tinode.DEL_CHAR), null);\n }\n\n handleMuted(ignored, checked) {\n this.setState({muted: checked});\n this.props.onChangePermissions(this.props.topic, checked ? '-P' : '+P');\n }\n\n handleUnarchive(ignored, ignored2) {\n this.props.onTopicUnArchive(this.props.topic);\n }\n\n handlePermissionsChanged(which, perm) {\n switch (which) {\n case 'auth':\n this.props.onTopicDescUpdateRequest(this.props.topic, null, null, {auth: perm});\n break;\n case 'anon':\n this.props.onTopicDescUpdateRequest(this.props.topic, null, null, {anon: perm});\n break;\n case 'mode':\n case 'want':\n this.props.onChangePermissions(this.props.topic, perm);\n break;\n case 'given':\n this.props.onChangePermissions(this.props.topic, perm, this.props.topic);\n break;\n case 'user':\n this.props.onChangePermissions(this.props.topic, perm, this.state.userPermissionsEdited);\n break;\n }\n\n this.handleBackNavigate();\n }\n\n handleLaunchPermissionsEditor(which, uid) {\n const {formatMessage} = this.props.intl;\n let toEdit, toCompare, toSkip, titleEdit, titleCompare, userTitle, userAvatar;\n switch (which) {\n case 'mode':\n toEdit = this.state.access;\n break;\n case 'want':\n toEdit = this.state.modeWant;\n toCompare = this.state.modeGiven;\n if (this.state.owner) {\n // Don't allow owner to unset 'O' permission. All other permissions are OK.\n toSkip = 'O';\n } else {\n // Allow accepting any of 'ASDO' permissions but don't allow asking for them.\n toSkip = AccessMode.encode(AccessMode.diff('ASDO', this.state.modeGiven));\n if (this.state.channel) {\n // Channels are read-only.\n toSkip += 'W';\n }\n }\n titleEdit = formatMessage(messages.perm_want);\n titleCompare = formatMessage(messages.perm_given);\n break;\n case 'given':\n toEdit = this.state.modeGiven2;\n toCompare = this.state.modeWant2;\n toSkip = this.state.groupTopic ? (this.state.owner ? '' : 'O') : 'ASDO';\n titleEdit = formatMessage(messages.perm_given);\n titleCompare = formatMessage(messages.perm_want);\n break;\n case 'auth':\n toEdit = this.state.auth;\n toSkip = 'O';\n break;\n case 'anon':\n toEdit = this.state.anon;\n toSkip = 'O';\n break;\n case 'user': {\n const topic = this.props.tinode.getTopic(this.props.topic);\n if (!topic) {\n return;\n }\n const user = topic.subscriber(uid);\n if (!user || !user.acs) {\n return;\n }\n toEdit = user.acs.getGiven();\n toCompare = user.acs.getWant();\n toSkip = this.state.owner ? '' : 'O';\n titleEdit = formatMessage(messages.perm_given);\n titleCompare = formatMessage(messages.perm_want);\n if (user.public) {\n userTitle = user.public.fn;\n userAvatar = user.public.photo;\n }\n break;\n }\n default:\n console.error(\"Unknown permission editing mode '\" + which + \"'\");\n return;\n }\n this.setState({\n userPermissionsEdited: uid,\n userPermissionsTitle: userTitle,\n userPermissionsAvatar: userAvatar,\n editedPermissions: toEdit,\n immutablePermissions: toCompare,\n editedPermissionsTitle: titleEdit,\n immutablePermissionsTitle: titleCompare,\n editedPermissionsSkipped: toSkip,\n });\n this.props.onNavigate(`perm/${which}`);\n }\n\n handleShowQRCode(e) {\n e.preventDefault();\n this.props.onNavigate('qrcode');\n }\n\n handleCopyToClipboard(e, text) {\n e.preventDefault();\n navigator.clipboard.writeText(text).then(_ => {\n this.setState({toast: this.props.intl.formatMessage(messages.text_copied)});\n setTimeout(_ => { this.setState({toast: ''}); }, TOAST_DURATION);\n });\n }\n\n handleShare(e) {\n e.preventDefault();\n const card = new TheCard(this.state.fullName, this.state.avatar, null, this.state.description);\n TheCard.setTinodeID(card, Tinode.URI_TOPIC_ID_PREFIX + this.props.topic);\n this.props.onShareTheCard(card);\n }\n\n handleShowAddMembers(e) {\n e.preventDefault();\n this.props.onInitFind();\n this.props.onNavigate('members');\n }\n\n handleMemberUpdateRequest(members, added, removed) {\n this.props.onMemberUpdateRequest(this.props.topic, added, removed);\n this.props.onNavigate('info');\n }\n\n handleMemberSelected(uid) {\n this.setState({selectedContact: uid});\n }\n\n handleBackNavigate() {\n const args = (this.props.panel || 'info').split('/');\n if (args[0] == 'info') {\n this.props.onNavigate(null);\n } else if (args[0] == 'perm') {\n if (args[1] == 'user') {\n this.props.onNavigate('info');\n } else {\n this.props.onNavigate('security');\n }\n } else {\n this.props.onNavigate('info');\n }\n }\n\n handleContextMenu(params) {\n const {formatMessage} = this.props.intl;\n const topic = this.props.tinode.getTopic(this.props.topic);\n if (!topic) {\n return;\n }\n const user = topic.subscriber(params.topicName);\n if (!user || !user.acs) {\n return;\n }\n\n const isMe = this.props.tinode.isMe(params.topicName);\n const menuItems = [{\n title: formatMessage(messages.edit_permissions),\n handler: _ => this.handleLaunchPermissionsEditor(isMe ? 'want' : 'user', params.topicName)\n }];\n if (!isMe) {\n menuItems.push('member_delete');\n }\n menuItems.push(user.acs.isMuted() ? 'member_unmute' : 'member_mute');\n if (!isMe) {\n menuItems.push(user.acs.isJoiner() ? 'member_block' : 'member_unblock');\n }\n this.props.showContextMenu({\n topicName: this.props.topic,\n x: params.x,\n y: params.y,\n user: params.topicName}, menuItems);\n }\n\n render() {\n const args = (this.props.panel || 'info').split('/');\n const view = args[0];\n args.shift();\n\n const {formatMessage} = this.props.intl;\n const panelTitle = formatMessage((view == 'perm' ? messages['perm_' + args[0]] : messages[view])\n || messages['info']);\n\n const topic = this.props.tinode.getTopic(this.state.topic);\n const alias = topic && topic.alias();\n\n return (\n
    \n
    {this.state.toast}
    \n
    \n
    {panelTitle}
    \n
    \n \n
    \n
    \n {this.props.displayMobile ?\n : null}\n {view == 'members' ?\n \n :\n view == 'perm' && args.length > 0 ?\n this.handlePermissionsChanged(args[0], mode)}\n onCancel={this.handleBackNavigate} />\n :\n view == 'general' ?\n \n :\n view == 'security' ?\n \n :\n view == 'qrcode' ?\n \n :\n
    \n
    \n {!this.state.isSelf ?\n {e.preventDefault(); this.props.onNavigate('general');}}>\n edit \n \n \n : null\n }\n
    \n \n
    \n
    \n
    \n
    {this.state.fullName} \n {this.state.channel ? podcasts : null}
    \n
    \n {this.state.private ?\n
    \n
    \n
    {this.state.private}
    \n
    \n : null\n }\n {!this.state.isSelf ?\n <>\n \n {alias ?\n
    \n
    \n  \n {alias}\n
    \n \n
    \n : null}\n \n : null\n }\n {this.state.trustedBadges.length > 0 ?\n
    \n \n
    \n : null\n }\n {this.state.groupTopic && topic.subcnt > 0 ?\n
     
    \n : null\n }\n {this.state.description ?\n
    \n \n
    {this.state.description}
    \n
    : null}\n
    \n {!this.state.isSelf ?\n <>
    \n
    \n \n \n
    \n : null\n }\n {this.state.archived ?\n
    \n \n \n
    \n :\n null\n }\n {!this.state.isSelf ?\n <>
    \n \n : null\n }\n {this.state.groupTopic && this.state.sharer ?\n <>\n
    \n
    \n \n
    \n \n {\n (no_members) => \n }\n \n :\n null\n }\n
    \n }\n
    \n );\n }\n};\n\nexport default injectIntl(InfoView);\n","// PermissionsEditor: Component for editing permissions\n// \nimport React from 'react';\nimport { FormattedMessage, defineMessages, injectIntl } from 'react-intl';\n\nimport CheckBox from './checkbox.jsx';\nimport Contact from './contact.jsx';\n\nimport { makeImageUrl } from '../lib/blob-helpers.js';\n\n// Translatable permission names.\nconst messages = defineMessages({\n joiner: {\n id: 'permission_join',\n defaultMessage: \"Join ({val})\",\n description: 'Name of J permission'\n },\n reader: {\n id: 'permission_read',\n defaultMessage: \"Read ({val})\",\n description: 'Name of R permission'\n },\n writer: {\n id: 'permission_write',\n defaultMessage: \"Write ({val})\",\n description: 'Name of W permission'\n },\n preser: {\n id: 'permission_pres',\n defaultMessage: \"Get notified ({val})\",\n description: 'Name of P permission'\n },\n approver: {\n id: 'permission_admin',\n defaultMessage: \"Approve ({val})\",\n description: 'Name of A permission'\n },\n sharer: {\n id: 'permission_share',\n defaultMessage: \"Share ({val})\",\n description: 'Name of S permission'\n },\n deleter: {\n id: 'permission_delete',\n defaultMessage: \"Delete ({val})\",\n description: 'Name of D permission'\n },\n owner: {\n id: 'permission_owner',\n defaultMessage: \"Owner ({val})\",\n description: 'Name of O permission'\n }\n});\n\nclass PermissionsEditor extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n mode: (props.mode || '').replace('N', '')\n };\n\n this.handleChange = this.handleChange.bind(this);\n this.handleSubmit = this.handleSubmit.bind(this);\n this.handleCancel = this.handleCancel.bind(this);\n }\n\n handleChange(val) {\n let mode = this.state.mode;\n const idx = mode.indexOf(val);\n if (idx == -1) {\n mode += val;\n } else {\n mode = mode.replace(val, '');\n }\n this.setState({mode: mode});\n }\n\n handleSubmit() {\n // Normalize string, otherwise cannot check if mode has changed.\n const mode = (this.state.mode || 'N').split('').sort().join('');\n const before = (this.props.mode || 'N').split('').sort().join('')\n if (mode !== before) {\n this.props.onSubmit(mode);\n } else {\n this.props.onCancel();\n }\n }\n\n handleCancel() {\n this.props.onCancel();\n }\n\n render() {\n const {formatMessage} = this.props.intl;\n const all = 'JRWPASDO';\n const names = {\n 'J': formatMessage(messages.joiner, {val: 'J'}),\n 'R': formatMessage(messages.reader, {val: 'R'}),\n 'W': formatMessage(messages.writer, {val: 'W'}),\n 'P': formatMessage(messages.preser, {val: 'P'}),\n 'A': formatMessage(messages.approver, {val: 'A'}),\n 'S': formatMessage(messages.sharer, {val: 'S'}),\n 'D': formatMessage(messages.deleter, {val: 'D'}),\n 'O': formatMessage(messages.owner, {val: 'O'})\n };\n\n let skip = this.props.skip || '';\n let mode = this.state.mode;\n let compare = (this.props.compare || '').replace('N', '');\n let items = [];\n for (let i=0; i= 0 && mode.indexOf(c) < 0) {\n // Permission is marked as inactive: hide unchecked permissions, disable checked permissions\n continue;\n }\n items.push(\n \n {names[c]}\n {skip.indexOf(c) < 0 ?\n = 0)} onChange={this.handleChange}/>\n :\n = 0)} />\n }{this.props.compare ? \n = 0)}/>\n : null}\n \n );\n }\n\n return (\n
    \n {this.props.userTitle ?\n
    : null}\n \n \n {this.props.compare ?\n \n \n \n :\n null}\n \n {items}\n
    {this.props.modeTitle}{this.props.compareTitle}
    \n
    \n
    \n \n \n
    \n
    \n );\n }\n};\n\nexport default injectIntl(PermissionsEditor);\n"],"names":["messages","external_ReactIntl_","defineMessages","no_contacts","id","defaultMessage","description","contacts_not_found_short","add_members_prompt","GroupManager","external_React_default","Component","constructor","props","super","this","state","members","index","indexMembers","staticMembers","keepInitialMembers","requiredMember","contactFilter","noContactsMessage","intl","formatMessage","selectedContacts","handleContactSelected","bind","handleMemberRemoved","handleContactFilter","handleSubmit","handleCancel","forEach","m","user","delta","present","keepInitial","stat","push","sel","userId","status","slice","contacts","i","setState","splice","val","msg","query","doContactFiltering","filter","values","length","indexOf","added","removed","Object","keys","k","onSubmit","onCancel","render","jsx_runtime","jsxs","children","jsx","className","FormattedMessage","chip_input","A","tinode","chips","prompt","filterFunc","onChipRemoved","contact_list","myUserId","topicSelected","emptyListMessage","showOnline","showUnread","onTopicSelected","onClick","group_manager","injectIntl","ShowQRCode","PureComponent","qrCodeRef","createRef","componentDidMount","external_QRCode_default","current","text","uri","width","height","ref","topic_security_messages","clear_messages","clear_messages_warning","delete_messages","delete_messages_warning","topic_delete","topic_delete_warning","leave_chat","leave_chat_warning","block_contact","block_contact_warning","report_chat","report_chat_warning","other_user","TopicSecurity","handleDeleteTopic","handleDeleteMessages","handleLeave","handleBlock","handleReport","e","preventDefault","onShowAlert","_","onDeleteTopic","topic","deleter","onDeleteMessages","onLeaveTopic","onBlockTopic","onReportTopic","channel","href","owner","groupTopic","Fragment","onLaunchPermissionsEditor","access","auth","anon","fullName","modeGiven2","topic_security","info_view_messages","info","general","security","crop","perm_want","perm_given","perm_auth","perm_anon","perm_user","edit_permissions","qrcode","text_copied","self_topic_name","self_topic_comment","InfoView","admin","sharer","muted","address","undefined","isSelf","avatar","private","selectedContact","modeGiven","modeWant","modeWant2","contactList","trustedBadges","previousMetaDesc","previousSubsUpdated","propsUpdated","resetSubs","resetDesc","resetTags","onMetaDesc","onSubsUpdated","handleImageChanged","handleMuted","handleUnarchive","handlePermissionsChanged","handleLaunchPermissionsEditor","handleShowQRCode","handleCopyToClipboard","handleShare","handleShowAddMembers","handleMemberUpdateRequest","handleMemberSelected","handleContextMenu","handleBackNavigate","getTopic","componentDidUpdate","componentWillUnmount","newState","getType","user2","subscriber","acs","getGiven","getWant","subscribers","sub","defacs","getDefaultAccess","getAccessMode","badges","trusted","key","entries","isSelfType","isOwner","isAdmin","isSharer","isDeleter","isMuted","strformat","W5","public","fn","note","blob_helpers","to","photo","comment","archived","isArchived","name","isGroupType","isChannelType","chan","getMode","getMeta","startMetaQuery","withTags","build","desc","subs","mime","img","onTopicDescUpdate","external_tinode_","TheCard","Tinode","DEL_CHAR","ignored","checked","onChangePermissions","ignored2","onTopicUnArchive","which","perm","onTopicDescUpdateRequest","userPermissionsEdited","uid","toEdit","toCompare","toSkip","titleEdit","titleCompare","userTitle","userAvatar","AccessMode","encode","diff","console","error","userPermissionsTitle","userPermissionsAvatar","editedPermissions","immutablePermissions","editedPermissionsTitle","immutablePermissionsTitle","editedPermissionsSkipped","onNavigate","navigator","clipboard","writeText","then","toast","setTimeout","card","setTinodeID","URI_TOPIC_ID_PREFIX","onShareTheCard","onInitFind","onMemberUpdateRequest","args","panel","split","params","topicName","isMe","menuItems","title","handler","isJoiner","showContextMenu","x","y","view","shift","panelTitle","alias","menu_cancel","displayMobile","error_panel","level","errorLevel","errorText","onClearError","onError","searchableContacts","permissions_editor","mode","compare","skip","modeTitle","compareTitle","item","topic_common_view","reqCredMethod","onCredAdd","onUpdateTagsRequest","onTopicTagsUpdateRequest","onCredConfirm","onCredDelete","onUpdateTopicDesc","avatar_upload","readOnly","style","marginLeft","opacity","badge_list","subcnt","FormattedNumber","value","widgets_checkbox","onChange","no_members","showMode","noScroll","info_view","react_intl__WEBPACK_IMPORTED_MODULE_1__","joiner","reader","writer","preser","approver","PermissionsEditor","react__WEBPACK_IMPORTED_MODULE_0___default","replace","handleChange","sort","join","names","J","R","W","P","S","D","O","items","all","c","charAt","react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__","_checkbox_jsx__WEBPACK_IMPORTED_MODULE_2__","_contact_jsx__WEBPACK_IMPORTED_MODULE_3__","small","_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_4__","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file diff --git a/umd/331.prod.js b/umd/331.prod.js new file mode 100644 index 00000000..bae688fd --- /dev/null +++ b/umd/331.prod.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunktinode_webapp=self.webpackChunktinode_webapp||[]).push([[331],{6331:function(e,s,i){i.r(s);var t=i(1594),n=i.n(t),a=i(8181),o=i(3207),d=i(2514),l=i(9022),r=i(4848);const c=(0,a.defineMessages)({delete_account:{id:"delete_account",defaultMessage:"Delete account",description:"Title for delete account warning"},delete_account_warning:{id:"delete_account_warning",defaultMessage:"Are you sure you want to delete your account? It cannot be undone.",description:"Warning message when deleting an account"}});class h extends n().Component{constructor(e){super(e);const s=this.props.tinode.getMeTopic();let i=0;s.contacts(e=>{e.acs&&!e.acs.isJoiner()&&i++});const t=s.getDefaultAccess();this.state={auth:t?t.auth:null,anon:t?t.anon:null,showPermissionEditorFor:void 0,blockedCount:i},this.handlePasswordUpdate=this.handlePasswordUpdate.bind(this),this.handleLaunchPermissionsEditor=this.handleLaunchPermissionsEditor.bind(this),this.handleHidePermissionsEditor=this.handleHidePermissionsEditor.bind(this),this.handlePermissionsChanged=this.handlePermissionsChanged.bind(this),this.handleDeleteAccount=this.handleDeleteAccount.bind(this),this.handleCheckboxClick=this.handleCheckboxClick.bind(this)}handlePasswordUpdate(e){this.setState({password:e}),this.props.onUpdatePassword(e)}handleLaunchPermissionsEditor(e){this.setState({showPermissionEditorFor:e,editedPermissions:this.state[e]})}handleHidePermissionsEditor(){this.setState({showPermissionEditorFor:void 0})}handlePermissionsChanged(e){let s={};s[this.state.showPermissionEditorFor]=e,this.props.onUpdateAccountDesc("me",void 0,void 0,s);let i={showPermissionEditorFor:void 0};i[this.state.showPermissionEditorFor]=e,this.setState(i)}handleCheckboxClick(e,s){this.props.onToggleIncognitoMode(s)}handleDeleteAccount(e){e.preventDefault();const{formatMessage:s}=this.props.intl;this.props.onShowAlert(s(c.delete_account),s(c.delete_account_warning),e=>this.props.onDeleteAccount(),null,!0,null)}render(){return(0,r.jsx)(r.Fragment,{children:this.state.showPermissionEditorFor?(0,r.jsx)(l.A,{mode:this.state.editedPermissions,skip:"O",onSubmit:this.handlePermissionsChanged,onCancel:this.handleHidePermissionsEditor}):(0,r.jsxs)("div",{className:"scrollable-panel",children:[(0,r.jsxs)("div",{className:"panel-form-column",children:[(0,r.jsx)("label",{className:"small",children:(0,r.jsx)(a.FormattedMessage,{id:"label_password",defaultMessage:"Password",description:"Label for password editing"})}),(0,r.jsx)("div",{children:(0,r.jsx)(a.FormattedMessage,{id:"password_unchanged_prompt",defaultMessage:"Unchanged",description:"Message in editor while password is unchanged",children:e=>(0,r.jsx)(d.A,{placeholder:e,type:"password",onFinished:this.handlePasswordUpdate})})})]}),(0,r.jsx)("div",{className:"hr"}),(0,r.jsxs)("div",{className:"panel-form-row",children:[(0,r.jsx)("label",{htmlFor:"incognito-mode",children:(0,r.jsx)(a.FormattedMessage,{id:"label_incognito_mode",defaultMessage:"Incognito mode:",description:"Label for incognito mode toggle"})}),(0,r.jsx)(o.A,{name:"incognito",id:"incognito-mode",checked:this.props.incognitoMode,onChange:this.handleCheckboxClick})]}),(0,r.jsx)("div",{className:"panel-form-row",children:(0,r.jsx)("span",{className:"small gray",children:(0,r.jsx)(a.FormattedMessage,{id:"incognito_mode_description",defaultMessage:"Hide your online status and typing indicators.",description:"Description for incognito mode toggle"})})}),(0,r.jsx)("div",{className:"hr"}),(0,r.jsxs)("div",{className:"panel-form-column",children:[(0,r.jsxs)("a",{href:"#",className:"danger flat-button",onClick:e=>{e.preventDefault(),this.props.onLogout()},children:[(0,r.jsx)("i",{className:"material-icons",children:"exit_to_app"}),"  ",(0,r.jsx)(a.FormattedMessage,{id:"button_logout",defaultMessage:"Logout",description:"Button [Logout]"})]}),(0,r.jsxs)("a",{href:"#",className:"danger flat-button",onClick:e=>{this.handleDeleteAccount(e)},children:[(0,r.jsx)("i",{className:"material-icons",children:"delete"}),"  ",(0,r.jsx)(a.FormattedMessage,{id:"button_delete_account",defaultMessage:"Delete account",description:"Button [Delete account]"})]})]}),(0,r.jsx)("div",{className:"hr"}),(0,r.jsxs)("div",{className:"panel-form-column",children:[(0,r.jsx)("div",{children:(0,r.jsx)("label",{className:"small",children:(0,r.jsx)(a.FormattedMessage,{id:"label_default_access_mode",defaultMessage:"Default access mode:",description:"Label for default access mode"})})}),(0,r.jsxs)("div",{className:"quoted",children:[(0,r.jsxs)("div",{children:["Auth: ",(0,r.jsx)("tt",{className:"clickable",onClick:this.handleLaunchPermissionsEditor.bind(this,"auth"),children:this.state.auth})]}),(0,r.jsxs)("div",{children:["Anon: ",(0,r.jsx)("tt",{className:"clickable",onClick:this.handleLaunchPermissionsEditor.bind(this,"anon"),children:this.state.anon})]})]})]}),this.state.blockedCount>0?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("div",{className:"hr"}),(0,r.jsxs)("div",{className:"panel-form-row",children:[(0,r.jsx)("i",{className:"material-icons",children:"block"})," ",(0,r.jsx)("a",{href:"#",className:"gray",onClick:e=>{e.preventDefault(),this.props.onShowBlocked()},children:(0,r.jsx)(a.FormattedMessage,{id:"blocked_contacts_link",defaultMessage:"Blocked contacts ({count})",values:{count:this.state.blockedCount},description:"Blocked contacts link"})})]})]}):null]})})}}s.default=(0,a.injectIntl)(h)},9022:function(e,s,i){var t=i(1594),n=i.n(t),a=i(8181),o=i(3207),d=i(1974),l=i(7981),r=i(4848);const c=(0,a.defineMessages)({joiner:{id:"permission_join",defaultMessage:"Join ({val})",description:"Name of J permission"},reader:{id:"permission_read",defaultMessage:"Read ({val})",description:"Name of R permission"},writer:{id:"permission_write",defaultMessage:"Write ({val})",description:"Name of W permission"},preser:{id:"permission_pres",defaultMessage:"Get notified ({val})",description:"Name of P permission"},approver:{id:"permission_admin",defaultMessage:"Approve ({val})",description:"Name of A permission"},sharer:{id:"permission_share",defaultMessage:"Share ({val})",description:"Name of S permission"},deleter:{id:"permission_delete",defaultMessage:"Delete ({val})",description:"Name of D permission"},owner:{id:"permission_owner",defaultMessage:"Owner ({val})",description:"Name of O permission"}});class h extends n().Component{constructor(e){super(e),this.state={mode:(e.mode||"").replace("N","")},this.handleChange=this.handleChange.bind(this),this.handleSubmit=this.handleSubmit.bind(this),this.handleCancel=this.handleCancel.bind(this)}handleChange(e){let s=this.state.mode;-1==s.indexOf(e)?s+=e:s=s.replace(e,""),this.setState({mode:s})}handleSubmit(){const e=(this.state.mode||"N").split("").sort().join("");e!==(this.props.mode||"N").split("").sort().join("")?this.props.onSubmit(e):this.props.onCancel()}handleCancel(){this.props.onCancel()}render(){const{formatMessage:e}=this.props.intl,s={J:e(c.joiner,{val:"J"}),R:e(c.reader,{val:"R"}),W:e(c.writer,{val:"W"}),P:e(c.preser,{val:"P"}),A:e(c.approver,{val:"A"}),S:e(c.sharer,{val:"S"}),D:e(c.deleter,{val:"D"}),O:e(c.owner,{val:"O"})};let i=this.props.skip||"",t=this.state.mode,n=(this.props.compare||"").replace("N",""),h=[];for(let e=0;e<8;e++){let a="JRWPASDO".charAt(e);i.indexOf(a)>=0&&t.indexOf(a)<0||h.push((0,r.jsxs)("tr",{children:[(0,r.jsx)("td",{children:s[a]}),(0,r.jsx)("td",{className:"checkbox",children:i.indexOf(a)<0?(0,r.jsx)(o.A,{name:a,checked:t.indexOf(a)>=0,onChange:this.handleChange}):(0,r.jsx)(o.A,{name:a,checked:t.indexOf(a)>=0})}),this.props.compare?(0,r.jsx)("td",{className:"checkbox",children:(0,r.jsx)(o.A,{name:a,checked:n.indexOf(a)>=0})}):null]},a))}return(0,r.jsxs)("div",{className:"panel-form-column",children:[this.props.userTitle?(0,r.jsx)("ul",{className:"contact-box small",children:(0,r.jsx)(d.A,{tinode:this.props.tinode,item:this.props.item,title:this.props.userTitle,small:!0,avatar:(0,l.to)(this.props.userAvatar?this.props.userAvatar:null)})}):null,(0,r.jsx)("label",{className:"small",children:(0,r.jsx)(a.FormattedMessage,{id:"title_permissions",defaultMessage:"Permissions",description:"Section title"})}),(0,r.jsxs)("table",{className:"permission-editor",children:[this.props.compare?(0,r.jsx)("thead",{children:(0,r.jsxs)("tr",{children:[(0,r.jsx)("th",{}),(0,r.jsx)("th",{children:this.props.modeTitle}),(0,r.jsx)("th",{children:this.props.compareTitle})]})}):null,(0,r.jsx)("tbody",{children:h})]}),(0,r.jsx)("br",{}),(0,r.jsxs)("div",{className:"dialog-buttons",children:[(0,r.jsx)("button",{className:"outline",onClick:this.handleCancel,children:(0,r.jsx)(a.FormattedMessage,{id:"button_cancel",defaultMessage:"Cancel",description:"Button [Cancel]"})}),(0,r.jsx)("button",{className:"primary",onClick:this.handleSubmit,children:(0,r.jsx)(a.FormattedMessage,{id:"button_ok",defaultMessage:"OK",description:"Button [OK]"})})]})]})}}s.A=(0,a.injectIntl)(h)}}]); +//# sourceMappingURL=331.prod.js.map \ No newline at end of file diff --git a/umd/331.prod.js.map b/umd/331.prod.js.map new file mode 100644 index 00000000..1f9b1f9c --- /dev/null +++ b/umd/331.prod.js.map @@ -0,0 +1 @@ +{"version":3,"file":"331.prod.js","mappings":"mMAQA,MAAMA,GAAW,EAAAC,EAAAC,gBAAe,CAC9BC,eAAgB,CACdC,GAAI,iBACJC,eAAgB,iBAChBC,YAAa,oCAEfC,uBAAwB,CACtBH,GAAI,yBACJC,eAAgB,qEAChBC,YAAa,8CAIjB,MAAME,UAAwBC,IAAA,UAC5B,WAAAC,CAAYC,GACVC,MAAMD,GAEN,MAAME,EAAKC,KAAKH,MAAMI,OAAOC,aAC7B,IAAIC,EAAe,EACnBJ,EAAGK,SAAUC,IACPA,EAAEC,MAAQD,EAAEC,IAAIC,YAClBJ,MAGJ,MAAMK,EAAST,EAAGU,mBAClBT,KAAKU,MAAQ,CACXC,KAAMH,EAASA,EAAOG,KAAO,KAC7BC,KAAMJ,EAASA,EAAOI,KAAO,KAC7BC,6BAAyBC,EACzBX,aAAcA,GAGhBH,KAAKe,qBAAuBf,KAAKe,qBAAqBC,KAAKhB,MAC3DA,KAAKiB,8BAAgCjB,KAAKiB,8BAA8BD,KAAKhB,MAC7EA,KAAKkB,4BAA8BlB,KAAKkB,4BAA4BF,KAAKhB,MACzEA,KAAKmB,yBAA2BnB,KAAKmB,yBAAyBH,KAAKhB,MACnEA,KAAKoB,oBAAsBpB,KAAKoB,oBAAoBJ,KAAKhB,MACzDA,KAAKqB,oBAAsBrB,KAAKqB,oBAAoBL,KAAKhB,KAC3D,CAEA,oBAAAe,CAAqBO,GACnBtB,KAAKuB,SAAS,CAACC,SAAUF,IACzBtB,KAAKH,MAAM4B,iBAAiBH,EAC9B,CAEA,6BAAAL,CAA8BS,GAC5B1B,KAAKuB,SAAS,CACZV,wBAAyBa,EACzBC,kBAAmB3B,KAAKU,MAAMgB,IAElC,CAEA,2BAAAR,GACElB,KAAKuB,SAAS,CAACV,6BAAyBC,GAC1C,CAEA,wBAAAK,CAAyBS,GACvB,IAAIpB,EAAS,CAAC,EACdA,EAAOR,KAAKU,MAAMG,yBAA2Be,EAC7C5B,KAAKH,MAAMgC,oBAAoB,UAAMf,OAAWA,EAAWN,GAE3D,IAAIsB,EAAW,CAACjB,6BAAyBC,GACzCgB,EAAS9B,KAAKU,MAAMG,yBAA2Be,EAC/C5B,KAAKuB,SAASO,EAChB,CAEA,mBAAAT,CAAoBU,EAAMC,GACxBhC,KAAKH,MAAMoC,sBAAsBD,EACnC,CAEA,mBAAAZ,CAAoBc,GAClBA,EAAEC,iBACF,MAAMC,cAACA,GAAiBpC,KAAKH,MAAMwC,KACnCrC,KAAKH,MAAMyC,YACTF,EAAclD,EAASG,gBACvB+C,EAAclD,EAASO,wBACtB8C,GAAKvC,KAAKH,MAAM2C,kBACjB,MACA,EACA,KAEJ,CAEA,MAAAC,GACE,OACE,EAAAC,EAAAC,KAAAD,EAAAE,SAAA,CAAAC,SAAG7C,KAAKU,MAAMG,yBACZ,EAAA6B,EAAAC,KAACG,EAAAC,EAAiB,CAChBC,KAAMhD,KAAKU,MAAMiB,kBACjBsB,KAAK,IACLC,SAAUlD,KAAKmB,yBACfgC,SAAUnD,KAAKkB,+BAEjB,EAAAwB,EAAAU,MAAA,OAAKC,UAAU,mBAAkBR,SAAA,EAC/B,EAAAH,EAAAU,MAAA,OAAKC,UAAU,oBAAmBR,SAAA,EAChC,EAAAH,EAAAC,KAAA,SAAOU,UAAU,QAAOR,UACtB,EAAAH,EAAAC,KAACxD,EAAAmE,iBAAgB,CAAChE,GAAG,iBAAiBC,eAAe,WACjDC,YAAY,kCAElB,EAAAkD,EAAAC,KAAA,OAAAE,UACE,EAAAH,EAAAC,KAACxD,EAAAmE,iBAAgB,CAAChE,GAAG,4BAA4BC,eAAe,YAC9DC,YAAY,gDAA+CqD,SAC1DU,IAAuB,EAAAb,EAAAC,KAACa,EAAAT,EAAW,CAClCU,YAAaF,EACbG,KAAK,WACLC,WAAY3D,KAAKe,+BAIzB,EAAA2B,EAAAC,KAAA,OAAKU,UAAU,QACf,EAAAX,EAAAU,MAAA,OAAKC,UAAU,iBAAgBR,SAAA,EAC7B,EAAAH,EAAAC,KAAA,SAAOiB,QAAQ,iBAAgBf,UAC7B,EAAAH,EAAAC,KAACxD,EAAAmE,iBAAgB,CAAChE,GAAG,uBAAuBC,eAAe,kBACzDC,YAAY,uCAEhB,EAAAkD,EAAAC,KAACkB,EAAAd,EAAQ,CAACe,KAAK,YAAYxE,GAAG,iBAC5B0C,QAAShC,KAAKH,MAAMkE,cAAeC,SAAUhE,KAAKqB,0BAEtD,EAAAqB,EAAAC,KAAA,OAAKU,UAAU,iBAAgBR,UAC7B,EAAAH,EAAAC,KAAA,QAAMU,UAAU,aAAYR,UAC1B,EAAAH,EAAAC,KAACxD,EAAAmE,iBAAgB,CAAChE,GAAG,6BAA6BC,eAAe,iDAC/DC,YAAY,+CAGlB,EAAAkD,EAAAC,KAAA,OAAKU,UAAU,QACf,EAAAX,EAAAU,MAAA,OAAKC,UAAU,oBAAmBR,SAAA,EAChC,EAAAH,EAAAU,MAAA,KAAGa,KAAK,IAAIZ,UAAU,qBAAqBa,QAAUhC,IAAOA,EAAEC,iBAAkBnC,KAAKH,MAAMsE,YAAatB,SAAA,EACtG,EAAAH,EAAAC,KAAA,KAAGU,UAAU,iBAAgBR,SAAC,gBAAe,MAAO,EAAAH,EAAAC,KAACxD,EAAAmE,iBAAgB,CAAChE,GAAG,gBACvEC,eAAe,SAASC,YAAY,wBAExC,EAAAkD,EAAAU,MAAA,KAAGa,KAAK,IAAIZ,UAAU,qBAAqBa,QAAUhC,IAAOlC,KAAKoB,oBAAoBc,IAAKW,SAAA,EACxF,EAAAH,EAAAC,KAAA,KAAGU,UAAU,iBAAgBR,SAAC,WAAU,MAAO,EAAAH,EAAAC,KAACxD,EAAAmE,iBAAgB,CAAChE,GAAG,wBAClEC,eAAe,iBAAiBC,YAAY,mCAGlD,EAAAkD,EAAAC,KAAA,OAAKU,UAAU,QACf,EAAAX,EAAAU,MAAA,OAAKC,UAAU,oBAAmBR,SAAA,EAChC,EAAAH,EAAAC,KAAA,OAAAE,UACE,EAAAH,EAAAC,KAAA,SAAOU,UAAU,QAAOR,UACtB,EAAAH,EAAAC,KAACxD,EAAAmE,iBAAgB,CAAChE,GAAG,4BAA4BC,eAAe,uBAC9DC,YAAY,uCAGlB,EAAAkD,EAAAU,MAAA,OAAKC,UAAU,SAAQR,SAAA,EACrB,EAAAH,EAAAU,MAAA,OAAAP,SAAA,CAAK,UAAM,EAAAH,EAAAC,KAAA,MAAIU,UAAU,YACvBa,QAASlE,KAAKiB,8BAA8BD,KAAKhB,KAAM,QAAQ6C,SAAE7C,KAAKU,MAAMC,WAC9E,EAAA+B,EAAAU,MAAA,OAAAP,SAAA,CAAK,UAAM,EAAAH,EAAAC,KAAA,MAAIU,UAAU,YACvBa,QAASlE,KAAKiB,8BAA8BD,KAAKhB,KAAM,QAAQ6C,SAAE7C,KAAKU,MAAME,gBAGjFZ,KAAKU,MAAMP,aAAe,GACzB,EAAAuC,EAAAU,MAAAV,EAAAE,SAAA,CAAAC,SAAA,EACE,EAAAH,EAAAC,KAAA,OAAKU,UAAU,QACf,EAAAX,EAAAU,MAAA,OAAKC,UAAU,iBAAgBR,SAAA,EAC7B,EAAAH,EAAAC,KAAA,KAAGU,UAAU,iBAAgBR,SAAC,UAAS,KACvC,EAAAH,EAAAC,KAAA,KAAGsB,KAAK,IAAIZ,UAAU,OAAOa,QAAUhC,IAAOA,EAAEC,iBAAkBnC,KAAKH,MAAMuE,iBAAkBvB,UAC7F,EAAAH,EAAAC,KAACxD,EAAAmE,iBAAgB,CAAChE,GAAG,wBAAwBC,eAAe,6BAC1D8E,OAAQ,CAAEC,MAAOtE,KAAKU,MAAMP,cAAgBX,YAAY,kCAI9D,SAIZ,EAGF+E,EAAA,SAAe,EAAApF,EAAAqF,YAAW9E,kGCpK1B,MAAMR,GAAW,EAAAC,EAAAC,gBAAe,CAC9BqF,OAAQ,CACNnF,GAAI,kBACJC,eAAgB,eAChBC,YAAa,wBAEfkF,OAAQ,CACNpF,GAAI,kBACJC,eAAgB,eAChBC,YAAa,wBAEfmF,OAAQ,CACNrF,GAAI,mBACJC,eAAgB,gBAChBC,YAAa,wBAEfoF,OAAQ,CACNtF,GAAI,kBACJC,eAAgB,uBAChBC,YAAa,wBAEfqF,SAAU,CACRvF,GAAI,mBACJC,eAAgB,kBAChBC,YAAa,wBAEfsF,OAAQ,CACNxF,GAAI,mBACJC,eAAgB,gBAChBC,YAAa,wBAEfuF,QAAS,CACPzF,GAAI,oBACJC,eAAgB,iBAChBC,YAAa,wBAEfwF,MAAO,CACL1F,GAAI,mBACJC,eAAgB,gBAChBC,YAAa,0BAIjB,MAAMyF,UAA0BtF,IAAA,UAC9B,WAAAC,CAAYC,GACVC,MAAMD,GAENG,KAAKU,MAAQ,CACXsC,MAAOnD,EAAMmD,MAAQ,IAAIkC,QAAQ,IAAK,KAGxClF,KAAKmF,aAAenF,KAAKmF,aAAanE,KAAKhB,MAC3CA,KAAKoF,aAAepF,KAAKoF,aAAapE,KAAKhB,MAC3CA,KAAKqF,aAAerF,KAAKqF,aAAarE,KAAKhB,KAC7C,CAEA,YAAAmF,CAAaG,GACX,IAAItC,EAAOhD,KAAKU,MAAMsC,MAEV,GADAA,EAAKuC,QAAQD,GAEvBtC,GAAQsC,EAERtC,EAAOA,EAAKkC,QAAQI,EAAK,IAE3BtF,KAAKuB,SAAS,CAACyB,KAAMA,GACvB,CAEA,YAAAoC,GAEE,MAAMpC,GAAQhD,KAAKU,MAAMsC,MAAQ,KAAKwC,MAAM,IAAIC,OAAOC,KAAK,IAExD1C,KADYhD,KAAKH,MAAMmD,MAAQ,KAAKwC,MAAM,IAAIC,OAAOC,KAAK,IAE5D1F,KAAKH,MAAMqD,SAASF,GAEpBhD,KAAKH,MAAMsD,UAEf,CAEA,YAAAkC,GACErF,KAAKH,MAAMsD,UACb,CAEA,MAAAV,GACE,MAAML,cAACA,GAAiBpC,KAAKH,MAAMwC,KAE7BsD,EAAQ,CACZC,EAAKxD,EAAclD,EAASuF,OAAQ,CAACa,IAAK,MAC1CO,EAAKzD,EAAclD,EAASwF,OAAQ,CAACY,IAAK,MAC1CQ,EAAK1D,EAAclD,EAASyF,OAAQ,CAACW,IAAK,MAC1CS,EAAK3D,EAAclD,EAAS0F,OAAQ,CAACU,IAAK,MAC1CvC,EAAKX,EAAclD,EAAS2F,SAAU,CAACS,IAAK,MAC5CU,EAAK5D,EAAclD,EAAS4F,OAAQ,CAACQ,IAAK,MAC1CW,EAAK7D,EAAclD,EAAS6F,QAAS,CAACO,IAAK,MAC3CY,EAAK9D,EAAclD,EAAS8F,MAAO,CAACM,IAAK,OAG3C,IAAIrC,EAAOjD,KAAKH,MAAMoD,MAAQ,GAC1BD,EAAOhD,KAAKU,MAAMsC,KAClBmD,GAAWnG,KAAKH,MAAMsG,SAAW,IAAIjB,QAAQ,IAAK,IAClDkB,EAAQ,GACZ,IAAK,IAAIC,EAAE,EAAGA,EAAEC,EAAYD,IAAK,CAC/B,IAAIhG,EAjBM,WAiBEkG,OAAOF,GACfpD,EAAKsC,QAAQlF,IAAM,GAAK2C,EAAKuC,QAAQlF,GAAK,GAI9C+F,EAAMI,MACJ,EAAA9D,EAAAU,MAAA,MAAAP,SAAA,EACE,EAAAH,EAAAC,KAAA,MAAAE,SAAK8C,EAAMtF,MACX,EAAAqC,EAAAC,KAAA,MAAIU,UAAU,WAAUR,SAAEI,EAAKsC,QAAQlF,GAAK,GAC1C,EAAAqC,EAAAC,KAAC8D,EAAA1D,EAAQ,CAACe,KAAMzD,EAAG2B,QAAUgB,EAAKuC,QAAQlF,IAAM,EAAI2D,SAAUhE,KAAKmF,gBAEnE,EAAAzC,EAAAC,KAAC8D,EAAA1D,EAAQ,CAACe,KAAMzD,EAAG2B,QAAUgB,EAAKuC,QAAQlF,IAAM,MAC3CL,KAAKH,MAAMsG,SAAU,EAAAzD,EAAAC,KAAA,MAAIU,UAAU,WAAUR,UAClD,EAAAH,EAAAC,KAAC8D,EAAA1D,EAAQ,CAACe,KAAMzD,EAAG2B,QAAUmE,EAAQZ,QAAQlF,IAAM,MAC7C,OARDA,GAWb,CAEA,OACE,EAAAqC,EAAAU,MAAA,OAAKC,UAAU,oBAAmBR,SAAA,CAC/B7C,KAAKH,MAAM6G,WACV,EAAAhE,EAAAC,KAAA,MAAIU,UAAU,oBAAmBR,UAAC,EAAAH,EAAAC,KAACgE,EAAA5D,EAAO,CACxC9C,OAAQD,KAAKH,MAAMI,OACnB2G,KAAM5G,KAAKH,MAAM+G,KACjBC,MAAO7G,KAAKH,MAAM6G,UAClBI,OAAO,EACPC,QAAQ,EAAAC,EAAAC,IAAajH,KAAKH,MAAMqH,WAAalH,KAAKH,MAAMqH,WAAa,UAAiB,MAC1F,EAAAxE,EAAAC,KAAA,SAAOU,UAAU,QAAOR,UAAC,EAAAH,EAAAC,KAACxD,EAAAmE,iBAAgB,CAAChE,GAAG,oBAC5CC,eAAe,cAAcC,YAAY,qBAC3C,EAAAkD,EAAAU,MAAA,SAAOC,UAAU,oBAAmBR,SAAA,CACnC7C,KAAKH,MAAMsG,SACV,EAAAzD,EAAAC,KAAA,SAAAE,UAAO,EAAAH,EAAAU,MAAA,MAAAP,SAAA,EACL,EAAAH,EAAAC,KAAA,UAAS,EAAAD,EAAAC,KAAA,MAAAE,SAAK7C,KAAKH,MAAMsH,aACzB,EAAAzE,EAAAC,KAAA,MAAAE,SAAK7C,KAAKH,MAAMuH,oBAElB,MACF,EAAA1E,EAAAC,KAAA,SAAAE,SACGuD,QAEH,EAAA1D,EAAAC,KAAA,UACA,EAAAD,EAAAU,MAAA,OAAKC,UAAU,iBAAgBR,SAAA,EAC7B,EAAAH,EAAAC,KAAA,UAAQU,UAAU,UAAUa,QAASlE,KAAKqF,aAAaxC,UACrD,EAAAH,EAAAC,KAACxD,EAAAmE,iBAAgB,CAAChE,GAAG,gBAAgBC,eAAe,SAASC,YAAY,uBAE3E,EAAAkD,EAAAC,KAAA,UAAQU,UAAU,UAAUa,QAASlE,KAAKoF,aAAavC,UACrD,EAAAH,EAAAC,KAACxD,EAAAmE,iBAAgB,CAAChE,GAAG,YAAYC,eAAe,KAAKC,YAAY,uBAK3E,EAGF+E,EAAAxB,GAAe,EAAA5D,EAAAqF,YAAWS","sources":["webpack://tinode-webapp/./src/views/acc-security-view.jsx","webpack://tinode-webapp/./src/widgets/permissions-editor.jsx"],"sourcesContent":["// Edit account parameters.\nimport React from 'react';\nimport { FormattedMessage, defineMessages, injectIntl } from 'react-intl';\n\nimport CheckBox from '../widgets/checkbox.jsx';\nimport InPlaceEdit from '../widgets/in-place-edit.jsx';\nimport PermissionsEditor from '../widgets/permissions-editor.jsx';\n\nconst messages = defineMessages({\n delete_account: {\n id: 'delete_account',\n defaultMessage: 'Delete account',\n description: 'Title for delete account warning'\n },\n delete_account_warning: {\n id: 'delete_account_warning',\n defaultMessage: 'Are you sure you want to delete your account? It cannot be undone.',\n description: 'Warning message when deleting an account'\n }\n});\n\nclass AccSecurityView extends React.Component {\n constructor(props) {\n super(props);\n\n const me = this.props.tinode.getMeTopic();\n let blockedCount = 0;\n me.contacts((c) => {\n if (c.acs && !c.acs.isJoiner()) {\n blockedCount ++;\n }\n });\n const defacs = me.getDefaultAccess();\n this.state = {\n auth: defacs ? defacs.auth : null,\n anon: defacs ? defacs.anon : null,\n showPermissionEditorFor: undefined,\n blockedCount: blockedCount,\n };\n\n this.handlePasswordUpdate = this.handlePasswordUpdate.bind(this);\n this.handleLaunchPermissionsEditor = this.handleLaunchPermissionsEditor.bind(this);\n this.handleHidePermissionsEditor = this.handleHidePermissionsEditor.bind(this);\n this.handlePermissionsChanged = this.handlePermissionsChanged.bind(this);\n this.handleDeleteAccount = this.handleDeleteAccount.bind(this);\n this.handleCheckboxClick = this.handleCheckboxClick.bind(this);\n }\n\n handlePasswordUpdate(pwd) {\n this.setState({password: pwd});\n this.props.onUpdatePassword(pwd);\n }\n\n handleLaunchPermissionsEditor(which) {\n this.setState({\n showPermissionEditorFor: which,\n editedPermissions: this.state[which]\n });\n }\n\n handleHidePermissionsEditor() {\n this.setState({showPermissionEditorFor: undefined});\n }\n\n handlePermissionsChanged(perm) {\n let defacs = {};\n defacs[this.state.showPermissionEditorFor] = perm;\n this.props.onUpdateAccountDesc('me', undefined, undefined, defacs);\n\n let newState = {showPermissionEditorFor: undefined};\n newState[this.state.showPermissionEditorFor] = perm;\n this.setState(newState);\n }\n\n handleCheckboxClick(what, checked) {\n this.props.onToggleIncognitoMode(checked);\n }\n\n handleDeleteAccount(e) {\n e.preventDefault();\n const {formatMessage} = this.props.intl;\n this.props.onShowAlert(\n formatMessage(messages.delete_account), // title\n formatMessage(messages.delete_account_warning), // content\n (_ => this.props.onDeleteAccount()), // onConfirm\n null, // use default text \"OK\"\n true, // Show Reject button\n null // use default text \"Cancel\"\n );\n }\n\n render() {\n return (\n <>{this.state.showPermissionEditorFor ?\n \n :\n
    \n
    \n \n
    \n {\n (password_unchanged) => \n }\n
    \n
    \n
    \n
    \n \n \n
    \n
    \n \n \n \n
    \n
    \n \n
    \n
    \n
    \n \n
    \n
    \n
    Auth: {this.state.auth}
    \n
    Anon: {this.state.anon}
    \n
    \n
    \n {this.state.blockedCount > 0 ?\n <>\n \n }\n );\n }\n};\n\nexport default injectIntl(AccSecurityView);\n","// PermissionsEditor: Component for editing permissions\n// \nimport React from 'react';\nimport { FormattedMessage, defineMessages, injectIntl } from 'react-intl';\n\nimport CheckBox from './checkbox.jsx';\nimport Contact from './contact.jsx';\n\nimport { makeImageUrl } from '../lib/blob-helpers.js';\n\n// Translatable permission names.\nconst messages = defineMessages({\n joiner: {\n id: 'permission_join',\n defaultMessage: \"Join ({val})\",\n description: 'Name of J permission'\n },\n reader: {\n id: 'permission_read',\n defaultMessage: \"Read ({val})\",\n description: 'Name of R permission'\n },\n writer: {\n id: 'permission_write',\n defaultMessage: \"Write ({val})\",\n description: 'Name of W permission'\n },\n preser: {\n id: 'permission_pres',\n defaultMessage: \"Get notified ({val})\",\n description: 'Name of P permission'\n },\n approver: {\n id: 'permission_admin',\n defaultMessage: \"Approve ({val})\",\n description: 'Name of A permission'\n },\n sharer: {\n id: 'permission_share',\n defaultMessage: \"Share ({val})\",\n description: 'Name of S permission'\n },\n deleter: {\n id: 'permission_delete',\n defaultMessage: \"Delete ({val})\",\n description: 'Name of D permission'\n },\n owner: {\n id: 'permission_owner',\n defaultMessage: \"Owner ({val})\",\n description: 'Name of O permission'\n }\n});\n\nclass PermissionsEditor extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n mode: (props.mode || '').replace('N', '')\n };\n\n this.handleChange = this.handleChange.bind(this);\n this.handleSubmit = this.handleSubmit.bind(this);\n this.handleCancel = this.handleCancel.bind(this);\n }\n\n handleChange(val) {\n let mode = this.state.mode;\n const idx = mode.indexOf(val);\n if (idx == -1) {\n mode += val;\n } else {\n mode = mode.replace(val, '');\n }\n this.setState({mode: mode});\n }\n\n handleSubmit() {\n // Normalize string, otherwise cannot check if mode has changed.\n const mode = (this.state.mode || 'N').split('').sort().join('');\n const before = (this.props.mode || 'N').split('').sort().join('')\n if (mode !== before) {\n this.props.onSubmit(mode);\n } else {\n this.props.onCancel();\n }\n }\n\n handleCancel() {\n this.props.onCancel();\n }\n\n render() {\n const {formatMessage} = this.props.intl;\n const all = 'JRWPASDO';\n const names = {\n 'J': formatMessage(messages.joiner, {val: 'J'}),\n 'R': formatMessage(messages.reader, {val: 'R'}),\n 'W': formatMessage(messages.writer, {val: 'W'}),\n 'P': formatMessage(messages.preser, {val: 'P'}),\n 'A': formatMessage(messages.approver, {val: 'A'}),\n 'S': formatMessage(messages.sharer, {val: 'S'}),\n 'D': formatMessage(messages.deleter, {val: 'D'}),\n 'O': formatMessage(messages.owner, {val: 'O'})\n };\n\n let skip = this.props.skip || '';\n let mode = this.state.mode;\n let compare = (this.props.compare || '').replace('N', '');\n let items = [];\n for (let i=0; i= 0 && mode.indexOf(c) < 0) {\n // Permission is marked as inactive: hide unchecked permissions, disable checked permissions\n continue;\n }\n items.push(\n \n {names[c]}\n {skip.indexOf(c) < 0 ?\n = 0)} onChange={this.handleChange}/>\n :\n = 0)} />\n }{this.props.compare ? \n = 0)}/>\n : null}\n \n );\n }\n\n return (\n
    \n {this.props.userTitle ?\n
    : null}\n \n \n {this.props.compare ?\n \n \n \n :\n null}\n \n {items}\n
    {this.props.modeTitle}{this.props.compareTitle}
    \n
    \n
    \n \n \n
    \n
    \n );\n }\n};\n\nexport default injectIntl(PermissionsEditor);\n"],"names":["messages","react_intl__WEBPACK_IMPORTED_MODULE_1__","defineMessages","delete_account","id","defaultMessage","description","delete_account_warning","AccSecurityView","react__WEBPACK_IMPORTED_MODULE_0___default","constructor","props","super","me","this","tinode","getMeTopic","blockedCount","contacts","c","acs","isJoiner","defacs","getDefaultAccess","state","auth","anon","showPermissionEditorFor","undefined","handlePasswordUpdate","bind","handleLaunchPermissionsEditor","handleHidePermissionsEditor","handlePermissionsChanged","handleDeleteAccount","handleCheckboxClick","pwd","setState","password","onUpdatePassword","which","editedPermissions","perm","onUpdateAccountDesc","newState","what","checked","onToggleIncognitoMode","e","preventDefault","formatMessage","intl","onShowAlert","_","onDeleteAccount","render","react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__","jsx","Fragment","children","_widgets_permissions_editor_jsx__WEBPACK_IMPORTED_MODULE_4__","A","mode","skip","onSubmit","onCancel","jsxs","className","FormattedMessage","password_unchanged","_widgets_in_place_edit_jsx__WEBPACK_IMPORTED_MODULE_3__","placeholder","type","onFinished","htmlFor","_widgets_checkbox_jsx__WEBPACK_IMPORTED_MODULE_2__","name","incognitoMode","onChange","href","onClick","onLogout","onShowBlocked","values","count","__webpack_exports__","injectIntl","joiner","reader","writer","preser","approver","sharer","deleter","owner","PermissionsEditor","replace","handleChange","handleSubmit","handleCancel","val","indexOf","split","sort","join","names","J","R","W","P","S","D","O","compare","items","i","all","charAt","push","_checkbox_jsx__WEBPACK_IMPORTED_MODULE_2__","userTitle","_contact_jsx__WEBPACK_IMPORTED_MODULE_3__","item","title","small","avatar","_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_4__","to","userAvatar","modeTitle","compareTitle"],"sourceRoot":""} \ No newline at end of file diff --git a/umd/523.prod.js b/umd/523.prod.js new file mode 100644 index 00000000..eea7dad0 --- /dev/null +++ b/umd/523.prod.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunktinode_webapp=self.webpackChunktinode_webapp||[]).push([[523],{7523:function(e,t,s){s.r(t),s.d(t,{default:function(){return Q}});var i=s(1594),a=s.n(i),n=s(8181),o=s(4532),r=s(4752),l=s(7256),d=s(7849),h=s(4848);class c extends a().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=this.props.tinode.getLargeFileHelper();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,h.jsxs)("span",{className:"small gray",children:["(",(0,l.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 a=(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)("i",{className:"material-icons",children:"file_download"})," ",(0,h.jsx)(n.FormattedMessage,{id:"save_attachment",defaultMessage:"save",description:"Call to save an attachment"})]});return(0,h.jsxs)("div",{className:"attachment",children:[(0,h.jsx)("div",{children:(0,h.jsx)("i",{className:"material-icons big gray",children:"insert_drive_file"})}),(0,h.jsxs)("div",{className:"flex-column",children:[(0,h.jsxs)("div",{children:[e," ",i]}),this.props.uploading||this.state.downloader?(0,h.jsx)(r.A,{progress:this.props.uploading?this.props.progress:this.state.progress,onCancel:this.handleCancel}):(0,h.jsx)("div",{children:t?(0,h.jsx)("a",{href:t,download:this.props.filename,onClick:s,children:a}):(0,h.jsx)("span",{className:"light-gray",children:a})})]})]})}}var p=s(5247);const u=(0,n.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 g extends a().PureComponent{render(){const{formatMessage:e}=this.props.intl;let t;t=this.props.received<=o.Tinode.MESSAGE_STATUS_SENDING?e(u.message_sending):this.props.received==o.Tinode.MESSAGE_STATUS_FAILED||this.props.received==o.Tinode.MESSAGE_STATUS_FATAL?e(u.message_sending_failed):this.props.timestamp.toLocaleTimeString(this.props.intl.locale,{timeStyle:"short"});const s=(0,d.LO)(this.props.received),i=s?(0,h.jsx)("i",{className:"material-icons small "+s.color,children:s.name}):null,a=this.props.edited?e(u.message_edited_marker):null;return(0,h.jsxs)("span",{className:"timestamp",children:[t,a," ",i]})}}var m=(0,n.injectIntl)(g),f=s(2067),v=s(184);class b extends a().PureComponent{constructor(e){super(e),this.state={progress:0},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.formatterContext={formatMessage:e.intl.formatMessage.bind(e.intl),viewportWidth:e.viewportWidth,authorizeURL:e.tinode.authorizeURL.bind(e.tinode),onHandleClick:this.handleDraftyClick}}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);v.A.navigateTo(v.A.setUrlTopic("",s.pop()||""))}catch(e){console.error("Invalid URL:",e)}break;case"contact_find":e.preventDefault();let s=v.A.setUrlSidePanel(window.location.hash,"newtpk");s=v.A.addUrlParam(s,"q",e.target.dataset.val),s=v.A.addUrlParam(s,"tab","find"),v.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,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)}handleQuoteClick(e){e.preventDefault(),e.stopPropagation();const t=this.props.replyToSeq;t&&this.props.onQuoteClick(t)}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;let i="message-content";const r=this.props.isGroup&&this.props.response&&("single"==this.props.sequence||"last"==this.props.sequence);let l=this.props.content;const d=[];if(this.props.mimeType==o.Drafty.getContentType()&&o.Drafty.isValid(l)){o.Drafty.attachments(l,(e,t)=>{o.Drafty.isFormResponseType(e.mime)||d.push((0,h.jsx)(c,{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(l,f.e3,this.formatterContext);l=a().createElement(a().Fragment,null,e)}else"string"==typeof l?new RegExp("^\\p{RGI_Emoji}{1,5}$","v").test(l||"")&&(i+=" emoji-"+(l||"").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):l=(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)("i",{className:"material-icons gray",children:"warning_amber"})," ",(0,h.jsx)("i",{className:"gray",children:(0,h.jsx)(n.FormattedMessage,{id:"invalid_content",defaultMessage:"invalid content",description:"Shown when the message is unreadable"})})]});return(0,h.jsxs)("li",{ref:this.props.innerRef,className:e,children:[this.props.isGroup&&this.props.response?(0,h.jsx)("div",{className:"avatar-box",children:r?(0,h.jsx)(p.A,{authorizeURL:this.props.tinode.authorizeURL,topic:this.props.userFrom,title:this.props.userName,avatar:s}):null}):null,(0,h.jsxs)("div",{children:[(0,h.jsxs)("div",{className:t,children:[(0,h.jsxs)("div",{className:"content-meta",children:[(0,h.jsxs)("div",{className:i,children:[l,d]}),this.props.timestamp?(0,h.jsx)(m,{edited:this.props.edited,timestamp:this.props.timestamp,received:this.props.received}):null]}),this.props.showContextMenu?(0,h.jsx)("span",{className:"menuTrigger",children:(0,h.jsx)("a",{href:"#",onClick:this.handleContextClick,children:(0,h.jsx)("i",{className:"material-icons",children:"expand_more"})})}):null]}),r?(0,h.jsx)("div",{className:"author",children:this.props.userName||(0,h.jsx)("i",{children:(0,h.jsx)(n.FormattedMessage,{id:"user_not_found",defaultMessage:"Not found",description:"In place of a user's full name when the user is not found."})})}):null]})]})}}const M=(0,n.injectIntl)(b);var S=a().forwardRef((e,t)=>(0,h.jsx)(M,{innerRef:t,...e})),y=s(6565),x=s(3405),w=s(3272),C=s(7981);class _ extends a().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,h.jsx)("div",{className:"avatar-box",children:(0,h.jsx)(p.A,{authorizeURL:this.props.tinode.authorizeURL,topic:t.user,avatar:(0,C.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,h.jsxs)("div",{id:"topic-users",children:[e," ",t>s?(0,h.jsx)("span",{children:(0,h.jsx)(n.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 A extends a().PureComponent{constructor(e){super(e),this.handleButtonAction=this.handleButtonAction.bind(this)}handleButtonAction(e,t){e.preventDefault(),this.props.onAction(t)}render(){return(0,h.jsxs)("div",{className:"accept-invite-panel",children:[(0,h.jsx)("div",{className:"title",children:(0,h.jsx)(n.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,h.jsxs)("div",{className:"footer",children:[(0,h.jsx)("button",{className:"primary",onClick:e=>{this.handleButtonAction(e,"accept")},children:(0,h.jsx)(n.FormattedMessage,{id:"chat_invitation_accept",defaultMessage:"Accept",description:"Action [Accept] for chat invitation."})}),(0,h.jsx)("button",{className:"secondary",onClick:e=>{this.handleButtonAction(e,"delete")},children:(0,h.jsx)(n.FormattedMessage,{id:"chat_invitation_ignore",defaultMessage:"Ignore",description:"Action [Ignore] for chat invitation."})}),(0,h.jsx)("button",{className:"secondary",onClick:e=>{this.handleButtonAction(e,"block")},children:(0,h.jsx)(n.FormattedMessage,{id:"chat_invitation_block",defaultMessage:"Block",description:"Action [Block] for chat invitation."})})]})]})}}var F=s(9304);class P extends a().PureComponent{render(){const e=w.C3+" ("+o.Tinode.getLibrary()+")";return(0,h.jsx)("div",{id:"dummy-view",children:(0,h.jsxs)("div",{children:[(0,h.jsxs)("a",{href:"https://github.com/tinode/chat/",children:[(0,h.jsx)("img",{id:"logo",alt:"logo",src:"img/logo.svg"}),(0,h.jsx)("h2",{children:"Tinode Web"})]}),(0,h.jsxs)("p",{children:[(0,h.jsx)(n.FormattedMessage,{id:"label_client",defaultMessage:"Client:",description:"Label for a client version"})," ",e]}),(0,h.jsxs)("p",{children:[(0,h.jsx)(n.FormattedMessage,{id:"label_server",defaultMessage:"Server:",description:"Label for a server version"})," ",this.props.serverVersion," (",this.props.serverAddress,")"]})]})})}}class D extends a().PureComponent{constructor(e){super(e)}render(){let e=null,t="bubble";return this.props.date&&(e=(0,h.jsx)(h.Fragment,{children:this.props.date}),t+=" date"),e?(0,h.jsx)("li",{className:"meta",children:(0,h.jsx)("div",{className:t,children:(0,h.jsx)("div",{className:"message-content",children:e})})}):(0,h.jsx)(h.Fragment,{children:null})}}const j=(0,n.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 E extends a().PureComponent{constructor(e){super(e),this.touchX=null,this.touchY=null,this.touchSurface=a().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,h.jsx)("i",{className:"gray",children:this.props.intl.formatMessage(j.message_deleted)}):o.Drafty.format(t.content,f.TU,{formatMessage:this.props.intl.formatMessage.bind(this.props.intl),authorizeURL:this.props.tinode.authorizeURL.bind(this.props.tinode)}):(0,h.jsx)("i",{className:"gray",children:this.props.intl.formatMessage(j.message_not_found)});const s=[];return this.props.pins.forEach(t=>{const i=s.length==e?"adot":"dot";s.push((0,h.jsx)("div",{className:i},t))}),(0,h.jsxs)("div",{id:"pinned-wrapper",ref:this.touchSurface,children:[this.props.isAdmin?(0,h.jsx)("div",{className:"cancel",children:(0,h.jsx)("a",{href:"#",onClick:this.handleCancel,children:(0,h.jsx)("i",{className:"material-icons gray",children:"close"})})}):(0,h.jsx)("div",{children:(0,h.jsx)("i",{className:"material-icons gray",children:"push_pin"})}),(0,h.jsx)("div",{className:"pinned-scroll",children:s}),(0,h.jsx)("div",{className:"pinned",onClick:this.handleSelected,children:(0,h.jsx)("p",{children:t})}),(0,h.jsxs)("div",{className:"pinned-menu",children:[(0,h.jsx)("span",{className:"menuTrigger upper",children:e>0?(0,h.jsx)("a",{href:"#",onClick:this.handleMovePrev,children:(0,h.jsx)("i",{className:"material-icons",children:"expand_less"})}):null}),(0,h.jsx)("span",{className:"menuTrigger lower",children:this.props.selected>0?(0,h.jsx)("a",{href:"#",onClick:this.handleMoveNext,children:(0,h.jsx)("i",{className:"material-icons",children:"expand_more"})}):null})]})]})}}var T=(0,n.injectIntl)(E),R=s(5372);const k=a().lazy(e=>s.e(821).then(s.bind(s,7821))),N=a().lazy(e=>s.e(623).then(s.bind(s,1623))),I=a().lazy(e=>s.e(534).then(s.bind(s,8534))),L=a().lazy(e=>Promise.all([s.e(892),s.e(803)]).then(s.bind(s,4803))),U=a().lazy(e=>s.e(592).then(s.bind(s,4592))),z=(0,n.defineMessages)({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 q(e){if(e){const t=e.getExcessive()||"";return e.isJoiner("given")&&(t.includes("R")||t.includes("W"))}return!1}function B(e){if(e){const t=e.getMissing()||"";return e.isJoiner("want")&&(t.includes("R")||t.includes("W"))}return!1}function O(e){return 1==e||3==e}class V extends a().Component{constructor(e){super(e),this.state=V.getDerivedStateFromProps(e,{}),this.componentSetup=this.componentSetup.bind(this),this.leave=this.leave.bind(this),this.sendMessage=this.sendMessage.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.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.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=a().createRef();return this.chatMessageRefs[e]=t,t}getVisibleMessageRange(e){let t=Number.MAX_SAFE_INTEGER,s=-1,i=!1;return this.chatMessageRefs.every((a,n)=>{if(a.current){const{top:o,bottom:r,height:l}=a.current.getBoundingClientRect();if(o<=e.top?e.top-o<=l:r-e.bottom<=l)i=!0,t=Math.min(t,n),s=Math.max(s,n);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({},{})}componentWillUnmount(){this.messagesScroller&&this.messagesScroller.removeEventListener("scroll",this.handleScrollEvent),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.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)),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},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 a=[];e.connected&&i.subscribers(t=>{t.online&&t.user!=e.myUserId&&a.push(t)}),Object.assign(s,{onlineSubs:a}),i.isSelfType()?Object.assign(s,{title:e.intl.formatMessage(z.self_topic_name),avatar:!0}):i.public?Object.assign(s,{title:i.public.fn,avatar:(0,C.to)(i.public.photo)}):Object.assign(s,{title:"",avatar:null});const n=i.p2pPeerDesc();n?Object.assign(s,{peerMessagingDisabled:B(n.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&&O(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&&O(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};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||(t.readingBlocked=!0),t.isSharer&&(s.isSharer=!1)),q(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 v.A.navigateTo(v.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=V.getDerivedStateFromProps({},{});t.title=this.props.intl.formatMessage(z.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&&t0&&this.setState({fetchingMessages:!0},e=>{t.getMessagesPage(24,a,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(z.self_topic_name),avatar:!0}):e.public?this.setState({title:e.public.fn,avatar:(0,C.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:q(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:B(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;const s=t||[],i=this.props.tinode.getTopic(e.topicName);if(i)if(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")}}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)}sendKeyPress(e){const t=this.props.tinode.getTopic(this.state.topic);t.isSubscribed()&&(e?t.noteRecording(!0):t.noteKeyPress())}sendMessage(e,t,s){let i;if(!e&&this.props.forwardMessage)e=this.props.forwardMessage.msg,i=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();i={replace:":"+this.state.reply.seq}}else this.state.reply.content&&(i={reply:""+this.state.reply.seq},"string"==typeof e&&(e=o.Drafty.parse(e)),e=o.Drafty.append(o.Drafty.sanitizeEntities(this.state.reply.content),e));this.handleCancelReply()}this.props.sendMessage(e,t,s,i)}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===w.Uv?"application/octet-stream":e;if(e.size>t){const t=this.props.tinode.getLargeFileHelper();if(!t)return void this.props.onError(this.props.intl.formatMessage(z.cannot_initiate_upload));const i=t.upload(e),a=o.Drafty.attachFile(null,{mime:s(e.type),filename:e.name,size:e.size,urlPromise:i});this.sendMessage(a,i,t)}else(0,C.bB)(e).then(t=>this.sendMessage(o.Drafty.attachFile(null,{mime:s(t.mime),data:t.bits,filename:t.name,size:e.size}))).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,C.QJ)(e).then(e=>{this.sendMessage(o.Drafty.appendTheCard(null,e))}).catch(e=>{this.props.onError(this.props.intl.formatMessage(z.cannot_parse_vcard,{error:e.message}),"err")}),0)))}handleAttachFile(e){const t=this.props.tinode.getServerParam("maxFileUploadSize",w.qy);e.size>t?this.props.onError(this.props.intl.formatMessage(z.file_attachment_too_large,{size:(0,l.lX)(e.size),limit:(0,l.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,a=this.state.imagePreview.height,n=this.state.imagePreview.filename,r=.75*this.props.tinode.getServerParam("maxMessageSize",262144)-1024|0;if(t.size>r){const r=this.props.tinode.getLargeFileHelper();if(!r)return void this.props.onError(this.props.intl.formatMessage(z.cannot_initiate_upload));const l=r.upload(t);return void(0,C.ag)(t,64,64,-1,!1).then(e=>(0,C.Sk)(e.blob)).then(d=>{let h=o.Drafty.insertImage(null,0,{mime:s,_tempPreview:d.bits,bits:d.bits,width:i,height:a,filename:n,size:t.size,urlPromise:l});e&&(h=o.Drafty.appendLineBreak(h),h=o.Drafty.append(h,o.Drafty.parse(e))),this.sendMessage(h,l,r)}).catch(e=>this.props.onError(e,"err"))}(0,C.Sk)(t).then(s=>{let r=o.Drafty.insertImage(null,0,{mime:s.mime,bits:s.bits,width:i,height:a,filename:n,size:t.size});e&&(r=o.Drafty.appendLineBreak(r),r=o.Drafty.append(r,o.Drafty.parse(e))),this.sendMessage(r)})}sendVideoAttachment(e,t,s,i){const a=i.width,n=i.height,r=.75*this.props.tinode.getServerParam("maxMessageSize",262144)-1024|0,l=[];let d;if(t.size+s.size>r){if(d=this.props.tinode.getLargeFileHelper(),!d)return void this.props.onError(this.props.intl.formatMessage(z.cannot_initiate_upload));l[0]=t.size>.675*r?d.upload(t):null,l[1]=s.size>.275*r?d.upload(s):null}if(0==l.length)return void Promise.all([(0,C.Sk)(t),(0,C.Sk)(s)]).then(s=>{const[r,l]=s;let d=o.Drafty.insertVideo(null,0,{mime:r.mime,bits:r.bits,preview:l.bits,premime:l.mime,width:a,height:n,duration:i.duration,filename:i.name,size:t.size});e&&(d=o.Drafty.appendLineBreak(d),d=o.Drafty.append(d,o.Drafty.parse(e))),this.sendMessage(d)});const h=Promise.all(l),c=[];c[0]=l[0]?null:(0,C.Sk)(t),c[1]=l[1]?null:(0,C.ag)(s,1024,1024,-1,!1).then(e=>(0,C.Sk)(e.blob)),c[2]=(0,C.ag)(s,96,96,-1,!1).then(e=>(0,C.Sk)(e.blob)),Promise.all(c).then(s=>{const[r,l,c]=s;let p=o.Drafty.insertVideo(null,0,{mime:i.mime,bits:r?r.bits:null,_tempPreview:c.bits,preview:l?l.bits:c.bits,premime:l?l.mime:c.mime,width:a,height:n,duration:i.duration,filename:i.name,size:t.size,urlPromise:h});e&&(p=o.Drafty.appendLineBreak(p),p=o.Drafty.append(p,o.Drafty.parse(e))),this.sendMessage(p,h,d)}).catch(e=>this.props.onError(e.message,"err"))}handleAttachImageOrVideo(e){const t=this.props.tinode.getServerParam("maxFileUploadSize",w.qy);e.type.startsWith("video/")?this.setState({videoPreview:{url:URL.createObjectURL(e),blob:e,filename:e.name,size:e.size,mime:e.type}}):(0,C.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=this.props.tinode.getLargeFileHelper();if(!i)return void this.props.onError(this.props.intl.formatMessage(z.cannot_initiate_upload));const a=i.upload(e),n=o.Drafty.appendAudio(null,{mime:e.type,size:e.size,duration:s,preview:t,urlPromise:a});this.sendMessage(n,a,i)}else(0,C.Sk)(e).then(i=>{this.sendMessage(o.Drafty.appendAudio(null,{mime:i.mime,bits:i.bits,size:e.size,duration:s,preview:t}))})}).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(z.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(z.invalid_content),"EM")),this.setState({reply:{content:o.Drafty.quote(this.props.intl.formatMessage(z.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)}handleUnpinMessage(e){this.props.tinode.getTopic(this.state.topic).pinMessage(e,!1)}isDragEnabled(){return this.state.isWriter&&!this.state.unconfirmed&&!this.props.forwardMessage&&!this.state.peerMessagingDisabled}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,h.jsx)(i.Suspense,{fallback:(0,h.jsx)("div",{children:(0,h.jsx)(n.FormattedMessage,{id:"loading_note",defaultMessage:"Loading...",description:"Message shown when component is loading"})}),children:(0,h.jsx)(k,{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})});let s;if(this.state.topic){let a;if(this.state.imagePreview)a=(0,h.jsx)(i.Suspense,{fallback:(0,h.jsx)("div",{children:(0,h.jsx)(n.FormattedMessage,{id:"loading_note",defaultMessage:"Loading...",description:"Message shown when component is loading"})}),children:(0,h.jsx)(I,{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)a=(0,h.jsx)(i.Suspense,{fallback:(0,h.jsx)("div",{children:(0,h.jsx)(n.FormattedMessage,{id:"loading_note",defaultMessage:"Loading...",description:"Message shown when component is loading"})}),children:(0,h.jsx)(U,{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)a=(0,h.jsx)(i.Suspense,{fallback:(0,h.jsx)("div",{children:(0,h.jsx)(n.FormattedMessage,{id:"loading_note",defaultMessage:"Loading...",description:"Message shown when component is loading"})}),children:(0,h.jsx)(I,{content:this.state.imagePostview,onClose:this.handleClosePreview})});else if(this.state.videoPostview)a=(0,h.jsx)(i.Suspense,{fallback:(0,h.jsx)("div",{children:(0,h.jsx)(n.FormattedMessage,{id:"loading_note",defaultMessage:"Loading...",description:"Message shown when component is loading"})}),children:(0,h.jsx)(U,{content:this.state.videoPostview,tinode:this.props.tinode,onError:this.props.onError,onClose:this.handleClosePreview})});else if(this.state.docPreview)a=o.TheCard.isFileSupported(this.state.docPreview.type,this.state.docPreview.name)||this.state.docPreview.type==o.TheCard.contentType?(0,h.jsx)(i.Suspense,{fallback:(0,h.jsx)("div",{children:(0,h.jsx)(n.FormattedMessage,{id:"loading_note",defaultMessage:"Loading...",description:"Message shown when component is loading"})}),children:(0,h.jsx)(L,{content:this.state.docPreview,tinode:this.props.tinode,reply:this.state.reply,onCancelReply:this.handleCancelReply,onClose:this.handleClosePreview,onSendMessage:this.sendFileAttachment})}):(0,h.jsx)(i.Suspense,{fallback:(0,h.jsx)("div",{children:(0,h.jsx)(n.FormattedMessage,{id:"loading_note",defaultMessage:"Loading...",description:"Message shown when component is loading"})}),children:(0,h.jsx)(N,{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,r=[];t.trusted&&(t.trusted.verified&&r.push({icon:"verified",color:"badge-inv"}),t.trusted.staff&&r.push({icon:"staff",color:"badge-inv"}),t.trusted.danger&&r.push({icon:"dangerous",color:"badge-inv"}));const d=[];this.state.pins.forEach(e=>d.push(t.latestMsgVersion(e)||t.findMessage(e)));const c=[];let u=null,g=null,m=null;t.messages((e,s,a,n)=>{let o=a?a.from||"chan":null,r="single",d=e.from||"chan";d==u?r=d==o?"middle":"last":d==o&&(r="first"),u=d;const p=!(d==this.props.myUserId),f=t.msgStatus(e,!0);let v,b,M=d;const y=t.userDesc(d);y&&y.public&&(v=y.public.fn,b=(0,C.to)(y.public.photo)),m=i?"chat-box group":"chat-box";const x=this.getOrCreateMessageRef(e.seq);let w=e.head?parseInt(e.head.reply):null;if(w&&!isNaN(w)||(w=null),e.hi)c.push((0,h.jsx)(D,{deleted:!0},e.seq));else{const t=new Date(e.ts);g&&g.toDateString()==t.toDateString()||(c.push((0,h.jsx)(D,{date:(0,l.mf)(e.ts),locale:this.props.intl.locale},"date-"+e.seq)),g=t),c.push((0,h.jsx)(S,{tinode:this.props.tinode,topic:this.state.topic,content:e.content,mimeType:e.head&&e.head.mime,replyToSeq:w,edited:e.head&&!e.head.webrtc&&e.head.replace,timestamp:e.ts,response:p,seq:e.seq,isGroup:i,isChan:this.state.channel,userFrom:M,userName:v,userAvatar:b,sequence:r,received:f,uploader:e._uploader,userIsWriter:this.state.isWriter,userIsAdmin:this.state.isAdmin,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:x},e.seq))}});let f=null;if(s)t.subcnt&&(f=e(z.subscriber_count,{count:t.subcnt}));else{const s=this.props.tinode.getMeTopic().getContact(this.state.topic);s&&(o.Tinode.isP2PTopicName(s.topic)?s.online?f=e(z.online_now):s.seen&&(f=e(z.last_seen,{timestamp:(0,l.cq)(s.seen.when,this.props.intl.locale)})):o.Tinode.isGroupTopicName(s.topic)&&t.subcnt&&(f=e(z.member_count,{count:t.subcnt})))}const v=this.state.avatar||!0,b=this.state.deleted||t.isSelfType()?null:this.props.online?"online"+(this.state.typingIndicator?" typing":""):"offline",M="panel-title"+(this.state.deleted?" deleted":""),w="dark"==this.props.colorSchema?"dark":"";let P=(0,h.jsxs)(h.Fragment,{children:[(0,h.jsxs)("div",{id:"messages-container",className:w,children:[(0,h.jsx)("button",{id:"go-to-latest",className:"action-button"+(this.state.showGoToLastButton?"":" hidden"),onClick:this.goToLatestMessage,children:(0,h.jsx)("i",{className:"material-icons",children:"arrow_downward"})}),(0,h.jsx)("div",{id:"messages-panel",ref:this.handleScrollReference,children:(0,h.jsx)("ul",{id:"scroller",className:m,children:c})}),this.state.isReader?null:(0,h.jsx)("div",{id:"write-only-background",children:this.state.readingBlocked?(0,h.jsx)("div",{id:"write-only-note",children:(0,h.jsx)(n.FormattedMessage,{id:"messages_not_readable",defaultMessage:"no access to messages",description:"Message shown in topic without the read access"})}):null})]}),this.state.peerMessagingDisabled&&!this.state.unconfirmed?(0,h.jsxs)("div",{id:"peer-messaging-disabled-note",children:[(0,h.jsx)("i",{className:"material-icons secondary",children:"block"})," ",(0,h.jsx)(n.FormattedMessage,{id:"peers_messaging_disabled",defaultMessage:"Peer's messaging is disabled.",description:"Shown when the p2p peer's messaging is disabled"})," ",(0,h.jsx)("a",{href:"#",onClick:this.handleEnablePeer,children:(0,h.jsx)(n.FormattedMessage,{id:"enable_peers_messaging",defaultMessage:"Enable",description:"Call to action to enable peer's messaging"})}),"."]}):null,this.state.unconfirmed?(0,h.jsx)(A,{onAction:this.handleNewChatAcceptance}):(0,h.jsx)(R.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:this.state.contentToEdit,sendOnEnter:this.props.sendOnEnter,onKeyPress:this.sendKeyPress,onRecordingProgress:this.sendKeyPress,onSendMessage:this.sendMessage,onAttachFile:this.props.forwardMessage?null:this.handleAttachFile,onAttachImage:this.props.forwardMessage?null:this.handleAttachImageOrVideo,onAttachAudio:this.props.forwardMessage?null:this.sendAudioAttachment,onError:this.props.onError,onQuoteClick:this.handleQuoteClick,onCancelReply:this.handleCancelReply})]});a=(0,h.jsxs)(h.Fragment,{children:[(0,h.jsxs)("div",{id:"topic-caption-panel",className:"caption-panel",children:[this.props.displayMobile?(0,h.jsx)("a",{href:"#",id:"hide-message-view",onClick:e=>{e.preventDefault(),this.leave(this.state.topic),this.props.onHideMessagesView()},children:(0,h.jsx)("i",{className:"material-icons",children:"arrow_back"})}):null,(0,h.jsxs)("div",{className:"avatar-box",children:[(0,h.jsx)(p.A,{authorizeURL:this.props.tinode.authorizeURL,avatar:v,topic:this.state.topic,title:this.state.title,deleted:this.state.deleted}),s?null:(0,h.jsx)("span",{className:b})]}),(0,h.jsxs)("div",{id:"topic-title-group",children:[(0,h.jsxs)("div",{id:"topic-title",className:M,children:[this.state.title||(0,h.jsx)("i",{children:(0,h.jsx)(n.FormattedMessage,{id:"unnamed_topic",defaultMessage:"Unnamed",description:"Title shown when the topic has no name"})}),(0,h.jsx)(y.A,{badges:r})]}),(0,h.jsx)("div",{id:"topic-last-seen",children:f})]}),(0,h.jsx)("div",{style:{marginLeft:"auto"}}),!this.props.displayMobile&&this.state.pins.length>0?(0,h.jsx)(T,{tinode:this.props.tinode,pins:this.state.pins,messages:d,selected:this.state.selectedPin,isAdmin:this.state.isAdmin,setSelected:e=>this.setState({selectedPin:e}),onSelected:this.handleQuoteClick,onCancel:this.handleUnpinMessage}):null,i?(0,h.jsx)(_,{tinode:this.props.tinode,subscribers:this.state.onlineSubs}):null,(0,h.jsx)("div",{children:(0,h.jsx)("a",{href:"#",onClick:this.handleContextClick,children:(0,h.jsx)("i",{className:"material-icons",children:"more_vert"})})})]}),this.props.displayMobile?(0,h.jsxs)(h.Fragment,{children:[this.state.pins.length>0?(0,h.jsx)(T,{tinode:this.props.tinode,pins:this.state.pins,messages:d,selected:this.state.selectedPin,isAdmin:this.state.isAdmin,setSelected:e=>this.setState({selectedPin:e}),onSelected:this.handleQuoteClick,onCancel:this.handleUnpinMessage}):null,(0,h.jsx)(x.A,{level:this.props.errorLevel,text:this.props.errorText,onClearError:this.props.onError})]}):null,(0,h.jsx)(F.A,{show:this.state.fetchingMessages}),P,this.state.dragging&&this.isDragEnabled()?(0,h.jsx)("div",{className:"drag-n-drop",children:e(z.drag_file)}):null]})}s=(0,h.jsxs)("div",{id:"topic-view",ref:this.mountDnDEvents,children:[a,t]})}else s=(0,h.jsx)(P,{serverVersion:this.props.serverVersion,serverAddress:this.props.serverAddress});return s}}var Q=(0,n.injectIntl)(V)},5372:function(e,t,s){var i=s(1594),a=s.n(i),n=s(8181),o=s(4532),r=(s(3272),s(7981)),l=s(2067),d=s(4848);const h=a().lazy(e=>Promise.all([s.e(537),s.e(965)]).then(s.bind(s,965))),c=(0,n.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 p extends a().PureComponent{constructor(e){super(e),this.state={quote:null,message:"",audioRec:!1,audioAvailable:!(!navigator.mediaDevices||!navigator.mediaDevices.getUserMedia)},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.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)}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});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(e)},e=>{this.props.onAttachFile(e)},this.props.onError)&&e.preventDefault()}handleAttachImage(e){e.target.files&&e.target.files.length>0&&this.props.onAttachImage(e.target.files[0]),e.target.value=""}handleAttachFile(e){e.target.files&&e.target.files.length>0&&this.props.onAttachFile(e.target.files[0]),e.target.value=""}handleDropAttach(e){e&&e.length>0&&this.props.onAttachFile(e[0])}handleAttachAudio(e,t,s){this.setState({audioRec:!1}),this.props.onAttachAudio(e,t,s)}handleSend(e){e.preventDefault();const t=this.state.message.trim();(t||this.props.acceptBlank||this.props.noInput)&&(this.props.onSendMessage(t),this.setState({message:""}))}handleKeyPress(e){if(this.state.audioRec)return e.preventDefault(),void e.stopPropagation();"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.props.onKeyPress){const e=(new Date).getTime();e-this.keypressTimestamp>3e3&&(this.props.onKeyPress(),this.keypressTimestamp=e)}}handleQuoteClick(e){if(e.preventDefault(),e.stopPropagation(),this.props.reply&&this.props.onQuoteClick){const e=this.props.reply.seq;this.props.onQuoteClick(e)}}render(){const{formatMessage:e}=this.props.intl,t=this.props.disabled?e(c.messaging_disabled):this.props.messagePrompt?e(c[this.props.messagePrompt]):e(c.type_new_message),s=this.props.reply&&this.props.reply.editing?"check_circle":"send",a=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;return(0,d.jsxs)("div",{id:"send-message-wrapper",children:[this.props.noInput?null:a,(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.onAttachFile&&!this.state.audioRec?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("a",{href:"#",onClick:e=>{e.preventDefault(),this.attachImage.click()},title:e(c.icon_title_add_image),children:(0,d.jsx)("i",{className:"material-icons secondary",children:"photo"})}),(0,d.jsx)("a",{href:"#",onClick:e=>{e.preventDefault(),this.attachFile.click()},title:e(c.icon_title_attach_file),children:(0,d.jsx)("i",{className:"material-icons secondary",children:"attach_file"})})]}):null,this.props.noInput?a||(0,d.jsx)("div",{className:"hr thin"}):this.state.audioRec?(0,d.jsx)(i.Suspense,{fallback:(0,d.jsx)("div",{children:(0,d.jsx)(n.FormattedMessage,{id:"loading_note",defaultMessage:"Loading...",description:"Message shown when component is loading"})}),children:(0,d.jsx)(h,{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.state.message||!o?(0,d.jsx)("a",{href:"#",onClick:this.handleSend,title:e(c.icon_title_send),children:(0,d.jsx)("i",{className:"material-icons",children:s})}):this.state.audioRec?null:(0,d.jsx)("a",{href:"#",onClick:e=>{e.preventDefault(),this.setState({audioRec:!0})},title:e(c.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"}})]})})]})}}t.A=(0,n.injectIntl)(p)}}]); +//# sourceMappingURL=523.prod.js.map \ No newline at end of file diff --git a/umd/523.prod.js.map b/umd/523.prod.js.map new file mode 100644 index 00000000..1df584e2 --- /dev/null +++ b/umd/523.prod.js.map @@ -0,0 +1 @@ +{"version":3,"file":"523.prod.js","mappings":"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","sources":["webpack://tinode-webapp/./src/widgets/attachment.jsx","webpack://tinode-webapp/./src/widgets/received-marker.jsx","webpack://tinode-webapp/./src/widgets/chat-message.jsx","webpack://tinode-webapp/./src/widgets/group-subs.jsx","webpack://tinode-webapp/./src/widgets/invitation.jsx","webpack://tinode-webapp/./src/views/logo-view.jsx","webpack://tinode-webapp/./src/widgets/meta-message.jsx","webpack://tinode-webapp/./src/widgets/pinned-messages.jsx","webpack://tinode-webapp/./src/views/messages-view.jsx","webpack://tinode-webapp/./src/widgets/send-message.jsx"],"sourcesContent":["import React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport FileProgress from './file-progress.jsx';\nimport { bytesToHumanSize } from '../lib/strformat.js';\nimport { isUrlRelative, sanitizeUrl } from '../lib/utils.js';\n\nexport default class Attachment extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n downloader: null,\n progress: 0\n };\n\n this.downloadFile = this.downloadFile.bind(this);\n this.handleCancel = this.handleCancel.bind(this);\n }\n\n downloadFile(url, filename, mimetype) {\n if (!url) {\n this.props.onError(\"Invalid download URL '\" + url + \"'\");\n return;\n }\n\n const downloader = this.props.tinode.getLargeFileHelper();\n this.setState({downloader: downloader});\n downloader.download(url, filename, mimetype,\n loaded => this.setState({progress: loaded / this.props.size}),\n err => this.props.onError(err, 'err')\n )\n .then(_ => this.setState({downloader: null, progress: 0}))\n .catch(err => {\n if (err) {\n this.props.onError(\"Error downloading file: \" + err.message, 'err');\n }\n this.setState({downloader: null, progress: 0});\n });\n }\n\n handleCancel() {\n if (this.props.uploading) {\n this.props.onCancelUpload();\n } else if (this.state.downloader) {\n this.state.downloader.cancel();\n }\n }\n\n render() {\n let filename = this.props.filename || 'file_attachment';\n if (filename.length > 36) {\n filename = filename.substr(0, 16) + '...' + filename.substr(-16);\n }\n let size = this.props.size > 0 ?\n ({bytesToHumanSize(this.props.size)}) :\n null;\n\n // Detect if the download URL is relative or absolute.\n // If the URL is relative use LargeFileHelper to attach authentication\n // credentials to the request.\n let url, helperFunc;\n if (!this.props.uploading && !this.state.downloader && isUrlRelative(this.props.downloadUrl)) {\n // Relative URL. Use download helper.\n url = '#';\n helperFunc = (e) => {\n e.preventDefault();\n this.downloadFile(this.props.downloadUrl, this.props.filename, this.props.mimetype);\n };\n } else {\n url = sanitizeUrl(this.props.downloadUrl);\n helperFunc = null;\n }\n const downloadWidget = <>file_download ;\n return (\n
    \n
    insert_drive_file
    \n
    \n
    {filename} {size}
    \n {this.props.uploading || this.state.downloader ?\n \n :\n
    {url ?\n {downloadWidget}\n :\n {downloadWidget}\n }
    \n }\n
    \n
    \n );\n }\n};\n","// Received/read indicator.\nimport React from 'react';\nimport { defineMessages, injectIntl } from 'react-intl';\n\nimport { Tinode } from 'tinode-sdk';\n\nimport { deliveryMarker } from '../lib/utils.js';\n\nconst messages = defineMessages({\n message_sending: {\n id: 'message_sending',\n defaultMessage: 'sending...',\n description: 'Message being sent, in place of time stamp'\n },\n message_sending_failed: {\n id: 'message_sending_failed',\n defaultMessage: 'failed',\n description: 'Failed to send message, in place of time stamp'\n },\n message_edited_marker: {\n id: 'message_edited_marker',\n defaultMessage: ', edited',\n description: 'Marker indicating that the message was edited'\n }\n});\n\nclass ReceivedMarker extends React.PureComponent {\n render() {\n const {formatMessage} = this.props.intl;\n let timestamp;\n if (this.props.received <= Tinode.MESSAGE_STATUS_SENDING) {\n timestamp = formatMessage(messages.message_sending);\n } else if (this.props.received == Tinode.MESSAGE_STATUS_FAILED ||\n this.props.received == Tinode.MESSAGE_STATUS_FATAL) {\n timestamp = formatMessage(messages.message_sending_failed);\n } else {\n timestamp = this.props.timestamp.toLocaleTimeString(this.props.intl.locale, { timeStyle: 'short' });\n }\n\n const icon = deliveryMarker(this.props.received);\n const marker = icon ? {icon.name} : null;\n const edited = this.props.edited ? formatMessage(messages.message_edited_marker) : null;\n\n return (\n \n {timestamp}{edited}{'\\u00a0'}{marker}\n \n );\n }\n};\n\nexport default injectIntl(ReceivedMarker);\n","// Single chat message bubble, sent or received.\n\nimport React from 'react';\nimport { FormattedMessage, injectIntl } from 'react-intl';\nimport { Drafty, Tinode, TheCard } from 'tinode-sdk';\n\nimport Attachment from './attachment.jsx';\nimport LetterTile from './letter-tile.jsx';\nimport ReceivedMarker from './received-marker.jsx'\n\nimport { fullFormatter } from '../lib/formatters.js';\nimport { sanitizeUrl } from '../lib/utils.js';\nimport HashNavigation from '../lib/navigation.js';\n\nclass BaseChatMessage extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.state = {\n progress: 0\n };\n\n if (props.uploader) {\n props.uploader.onProgress = this.handleProgress.bind(this);\n }\n\n this.handleExpandImage = this.handleExpandImage.bind(this);\n this.handlePlayVideo = this.handlePlayVideo.bind(this);\n this.handleFormButtonClick = this.handleFormButtonClick.bind(this);\n this.handleQuoteClick = this.handleQuoteClick.bind(this);\n this.handleContextClick = this.handleContextClick.bind(this);\n this.handleCancelUpload = this.handleCancelUpload.bind(this);\n this.handleDraftyClick = this.handleDraftyClick.bind(this);\n\n this.formatterContext = {\n formatMessage: props.intl.formatMessage.bind(props.intl),\n viewportWidth: props.viewportWidth,\n authorizeURL: props.tinode.authorizeURL.bind(props.tinode),\n\n onHandleClick: this.handleDraftyClick\n };\n }\n\n handleDraftyClick = (e, action) => {\n switch (action) {\n case 'image':\n this.handleExpandImage(e);\n break;\n case 'video':\n this.handlePlayVideo(e);\n break;\n case 'form_button':\n this.handleFormButtonClick(e);\n break;\n case 'quote':\n this.handleQuoteClick(e);\n break;\n case 'contact_chat':\n e.preventDefault();\n try {\n // tinode:topic/usr123abc -> usr123abc\n const pathname = new URL(e.target.dataset.val)?.pathname;\n const parts = pathname.split('/').filter(Boolean);\n HashNavigation.navigateTo(HashNavigation.setUrlTopic('', parts.pop() || ''));\n } catch (error) {\n console.error(\"Invalid URL:\", error);\n }\n break;\n case 'contact_find':\n e.preventDefault();\n let hashUrl = HashNavigation.setUrlSidePanel(window.location.hash, 'newtpk');\n hashUrl = HashNavigation.addUrlParam(hashUrl, 'q', e.target.dataset.val);\n hashUrl = HashNavigation.addUrlParam(hashUrl, 'tab', 'find');\n HashNavigation.navigateTo(hashUrl);\n break;\n default:\n // No special handling; let the browser deal with it.\n console.info('Unhandled drafty action.', action, e.target.dataset);\n break;\n }\n }\n\n handleExpandImage(e) {\n e.preventDefault();\n this.props.onExpandMedia({\n url: e.target.src,\n filename: e.target.dataset.name,\n width: e.target.dataset.width,\n height: e.target.dataset.height,\n size: e.target.dataset.size,\n type: e.target.dataset.mime\n });\n }\n\n handlePlayVideo(e) {\n e.preventDefault();\n this.props.onExpandMedia({\n video: true,\n url: e.target.dataset.src,\n preview: e.target.src,\n filename: e.target.dataset.name,\n width: e.target.dataset.width,\n height: e.target.dataset.height,\n duration: e.target.dataset.duration,\n size: e.target.dataset.size,\n type: e.target.dataset.mime\n });\n }\n\n handleFormButtonClick(e) {\n e.preventDefault();\n const data = {\n seq: this.props.seq\n };\n data.resp = {};\n if (e.target.dataset.name) {\n data.resp[e.target.dataset.name] = e.target.dataset.val ? e.target.dataset.val :\n e.target.dataset.val === undefined ? 1 : '' + e.target.dataset.val;\n }\n if (e.target.dataset.act == 'url') {\n data.ref = sanitizeUrl(e.target.dataset.ref) || 'about:blank';\n }\n const text = e.target.dataset.title || 'unknown';\n this.props.onFormResponse(e.target.dataset.act, text, data);\n }\n\n handleContextClick(e) {\n e.preventDefault();\n e.stopPropagation();\n const menuItems = [];\n if (this.props.received == Tinode.MESSAGE_STATUS_FAILED) {\n menuItems.push('menu_item_send_retry');\n }\n if (this.props.received > Tinode.MESSAGE_STATUS_FATAL) {\n if (this.props.userIsWriter) {\n menuItems.push('menu_item_reply');\n if (!this.props.response) {\n let immutable = false;\n Drafty.entities(this.props.content, (_0, _1, tp) => {\n immutable = ['AU', 'EX', 'FM', 'IM', 'TC', 'VC', 'VD'].includes(tp);\n return immutable;\n });\n if (!immutable) {\n Drafty.styles(this.props.content, tp => {\n immutable = ['QQ'].includes(tp);\n return immutable;\n });\n }\n if (!immutable) {\n menuItems.push('menu_item_edit');\n }\n }\n }\n if (this.props.userIsAdmin) {\n menuItems.push(this.props.pinned ? 'menu_item_unpin' : 'menu_item_pin');\n }\n }\n menuItems.push('menu_item_forward');\n\n this.props.showContextMenu({\n seq: this.props.seq,\n replace: this.props.edited ? parseInt(this.props.edited.split(':')[1]) : 0,\n content: this.props.content,\n userFrom: this.props.userFrom,\n userName: this.props.userName,\n y: e.pageY,\n x: e.pageX,\n pickReply: this.props.pickReply,\n editMessage: this.props.editMessage,\n timestamp: this.props.timestamp,\n }, menuItems);\n }\n\n handleProgress(ratio) {\n this.setState({progress: ratio});\n }\n\n handleCancelUpload() {\n this.props.onCancelUpload(this.props.seq, this.props.uploader);\n }\n\n handleQuoteClick(e) {\n e.preventDefault();\n e.stopPropagation();\n const replyToSeq = this.props.replyToSeq;\n if (replyToSeq) {\n this.props.onQuoteClick(replyToSeq);\n }\n }\n\n render() {\n const sideClass = this.props.sequence + ' ' + (this.props.response ? 'left' : 'right');\n const bubbleClass = (this.props.sequence == 'single' || this.props.sequence == 'last') ? 'bubble tip' : 'bubble';\n const avatar = this.props.userAvatar || true;\n let textSizeClass = 'message-content';\n const fullDisplay = (this.props.isGroup && this.props.response &&\n (this.props.sequence == 'single' || this.props.sequence == 'last'));\n\n let content = this.props.content;\n const attachments = [];\n if (this.props.mimeType == Drafty.getContentType() && Drafty.isValid(content)) {\n Drafty.attachments(content, (att, i) => {\n if (Drafty.isFormResponseType(att.mime)) {\n // Don't show json drafty form response objects as attachments.\n // They are not meant for users.\n return;\n }\n attachments.push();\n }, this);\n const tree = Drafty.format(content, fullFormatter, this.formatterContext);\n content = React.createElement(React.Fragment, null, tree);\n } else if (typeof content == 'string') {\n // Make font bigger for emoji-only messages.\n // Must use 'new RegExp(...)' because React does not like /{1-5}/.\n if (new RegExp('^\\\\p{RGI_Emoji}{1,5}$', 'v').test(content || '')) {\n // Content consists of 1-5 emoji characters. Count how many and use it to increase the font size.\n textSizeClass += ' emoji-' + (content || '').match(/\\p{RGI_Emoji}/vg).length;\n }\n } else {\n content = <>warning_amber \n \n }\n\n return (\n
  • \n {this.props.isGroup && this.props.response ?\n
    \n {fullDisplay ?\n :\n null}\n
    :\n null}\n
    \n
    \n
    \n
    \n {content}\n {attachments}\n
    \n {this.props.timestamp ?\n \n : null}\n
    \n {this.props.showContextMenu ?\n \n \n expand_more\n \n : null\n }\n
    \n {fullDisplay ?\n
    \n {this.props.userName ||\n \n }\n
    \n : null\n }\n
    \n
  • \n );\n }\n};\n\nconst IntlChatMessage = injectIntl(BaseChatMessage);\nconst ChatMessage = React.forwardRef((props, ref) => );\n\nexport default ChatMessage;\n","// GroupSubs: a list of group subscribers currently online.\n// Show in the topic title bar\nimport React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport { MAX_ONLINE_IN_TOPIC } from '../config.js'\n\nimport LetterTile from './letter-tile.jsx';\nimport { makeImageUrl } from '../lib/blob-helpers.js';\n\nexport default class GroupSubs extends React.Component {\n constructor(props) {\n super(props);\n }\n\n render() {\n const usersOnline = [];\n const totalCount = (this.props.subscribers || []).length;\n const countToShow = Math.min(MAX_ONLINE_IN_TOPIC, totalCount);\n\n (this.props.subscribers || []).some((sub) => {\n usersOnline.push(\n
    \n \n
    \n );\n return usersOnline.length == countToShow;\n });\n if (usersOnline.length == 0) {\n return null;\n }\n return (\n
    {usersOnline} {totalCount > countToShow ?\n \n \n : null}\n
    \n );\n }\n};\n","// A single topic or user.\nimport React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nexport default class Invitation extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.handleButtonAction = this.handleButtonAction.bind(this);\n }\n\n handleButtonAction(evt, data) {\n evt.preventDefault();\n this.props.onAction(data);\n }\n\n render() {\n return (\n
    \n
    \n \n
    \n
    \n \n \n \n
    \n
    \n );\n }\n};\n","/* This is just a static page to display when no conversation is selected. */\nimport React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport { Tinode } from 'tinode-sdk';\n\nimport { APP_NAME } from '../config.js';\n\nexport default class LogoView extends React.PureComponent {\n render() {\n const version = APP_NAME + ' (' + Tinode.getLibrary() + ')';\n return (\n
    \n
    \n \n \"logo\"\n

    Tinode Web

    \n
    \n

    {version}

    \n

    {this.props.serverVersion} ({this.props.serverAddress})

    \n
    \n
    \n );\n }\n};\n","// Message bubble with non-payload content, such as an indicator of deleted content or a date stamp.\n\nimport React from 'react';\n\nexport default class MetaMessage extends React.PureComponent {\n constructor(props) {\n super(props);\n }\n\n render() {\n let content = null;\n let bubbleClass = 'bubble';\n if (this.props.date) {\n // A date badge.\n content = <>{this.props.date}\n bubbleClass += ' date';\n }\n\n if (!content) {\n return <>{null}\n }\n\n return (\n
  • \n
    \n
    \n {content}\n
    \n
    \n
  • \n );\n }\n};\n","// Send message form.\nimport React from 'react';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport { Drafty } from 'tinode-sdk';\n\nimport { previewFormatter } from '../lib/formatters.js';\nimport { MIN_SWIPE_DISTANCE } from '../config.js';\n\nconst messages = defineMessages({\n message_not_found: {\n id: 'message_not_found',\n defaultMessage: 'message not found',\n description: 'Pinned message is not found'\n },\n message_deleted: {\n id: 'message_deleted',\n defaultMessage: 'message deleted',\n description: 'Pinned message is deleted'\n }\n});\n\nclass PinnedMessages extends React.PureComponent {\n constructor(props) {\n super(props);\n\n // Starting location of the touch gesture.\n this.touchX = null;\n this.touchY = null;\n\n this.touchSurface = React.createRef();\n\n this.getSelectedIndex = this.getSelectedIndex.bind(this);\n this.handleCancel = this.handleCancel.bind(this);\n this.handleSelected = this.handleSelected.bind(this);\n this.handleMoveNext = this.handleMoveNext.bind(this);\n this.handleMovePrev = this.handleMovePrev.bind(this);\n this.handleTouchEventStart = this.handleTouchEventStart.bind(this);\n this.handleTouchEventEnd = this.handleTouchEventEnd.bind(this);\n this.handleTouchCancel = this.handleTouchCancel.bind(this);\n }\n\n componentDidMount() {\n this.touchSurface.current.addEventListener('touchstart', this.handleTouchEventStart, {passive: true});\n this.touchSurface.current.addEventListener('touchend', this.handleTouchEventEnd, {passive: true});\n this.touchSurface.current.addEventListener('touchcancel', this.handleTouchCancel, {passive: true});\n }\n\n componentWillUnmount() {\n this.touchSurface.current.removeEventListener('touchstart', this.handleTouchEventStart);\n this.touchSurface.current.removeEventListener('touchend', this.handleTouchEventEnd);\n this.touchSurface.current.removeEventListener('touchcancel', this.handleTouchCancel);\n }\n getSelectedIndex() {\n const list = (this.props.pins || []);\n return list.length - this.props.selected - 1;\n }\n\n handleCancel(e) {\n e.preventDefault();\n this.props.onCancel(this.props.pins[this.getSelectedIndex()]);\n }\n\n handleSelected(e) {\n e.preventDefault();\n this.props.onSelected(this.props.pins[this.getSelectedIndex()]);\n }\n\n handleMoveNext(e, isTouch) {\n // Don't call preventDefault for touch events.\n isTouch || e.preventDefault();\n e.stopPropagation();\n const idx = Math.max(this.props.selected - 1, 0);\n if (idx != this.props.selected) {\n this.props.setSelected(idx);\n }\n }\n\n handleMovePrev(e, isTouch) {\n // Don't call preventDefault for touch events.\n isTouch || e.preventDefault();\n e.stopPropagation();\n const idx = Math.min(this.props.selected + 1, (this.props.pins || []).length - 1);\n if (idx != this.props.selected) {\n this.props.setSelected(idx);\n }\n }\n\n handleTouchEventStart(e) {\n if (e.touches.length == 1) {\n this.touchX = e.touches[0].clientX;\n this.touchY = e.touches[0].clientY;\n }\n }\n\n handleTouchEventEnd(e) {\n if (this.touchX === null || e.changedTouches.length != 1) {\n this.touchX = null;\n return;\n }\n\n const dX = this.touchX - e.changedTouches[0].clientX;\n const dY = this.touchY - e.changedTouches[0].clientY;\n this.touchX = null;\n\n if (Math.abs(dX) > Math.abs(dY) || Math.abs(dY) < MIN_SWIPE_DISTANCE) {\n // Horizontal swipe or too short vertical swipe.\n return;\n }\n\n if (dY > 0) {\n this.handleMovePrev(e, true);\n } else {\n this.handleMoveNext(e, true);\n }\n }\n\n handleTouchCancel() {\n this.touchX = null;\n }\n\n render() {\n const selected = this.getSelectedIndex();\n let messageShown = (this.props.messages || [])[selected];\n messageShown = messageShown ?\n messageShown._deleted ?\n {this.props.intl.formatMessage(messages.message_deleted)}\n :\n Drafty.format(messageShown.content, previewFormatter, {\n formatMessage: this.props.intl.formatMessage.bind(this.props.intl),\n authorizeURL: this.props.tinode.authorizeURL.bind(this.props.tinode)\n })\n :\n {this.props.intl.formatMessage(messages.message_not_found)};\n\n const dots = [];\n this.props.pins.forEach(seq => {\n const cn = dots.length == selected ? 'adot' : 'dot';\n dots.push(
    );\n });\n\n return (\n
    \n {this.props.isAdmin ?\n
    \n close\n
    :\n
    push_pin
    \n }\n
    {dots}
    \n

    {messageShown}

    \n
    \n \n {selected > 0 ?\n \n expand_less\n \n : null\n }\n \n \n {this.props.selected > 0 ?\n \n expand_more\n \n : null\n }\n \n
    \n
    \n );\n }\n}\n\nexport default injectIntl(PinnedMessages);\n","// Panel with a chat.\n\nimport React, { Suspense } from 'react';\nimport { FormattedMessage, defineMessages, injectIntl } from 'react-intl';\n\nimport { Drafty, Tinode, TheCard } from 'tinode-sdk';\n\nconst CallPanel = React.lazy(_ => import('../widgets/call-panel.jsx'));\nimport ChatMessage from '../widgets/chat-message.jsx';\nimport ContactBadges from '../widgets/contact-badges.jsx';\nconst DocPreview = React.lazy(_ => import('../widgets/doc-preview.jsx'));\nimport ErrorPanel from '../widgets/error-panel.jsx';\nimport GroupSubs from '../widgets/group-subs.jsx';\nconst ImagePreview = React.lazy(_ => import('../widgets/image-preview.jsx'));\nimport Invitation from '../widgets/invitation.jsx';\nimport LetterTile from '../widgets/letter-tile.jsx';\nimport LoadSpinner from '../widgets/load-spinner.jsx';\nimport LogoView from './logo-view.jsx';\nimport MetaMessage from '../widgets/meta-message.jsx';\nimport PinnedMessages from '../widgets/pinned-messages.jsx';\nimport SendMessage from '../widgets/send-message.jsx';\nconst TheCardPreview = React.lazy(_ => import('../widgets/the-card-preview.jsx'));\nconst VideoPreview = React.lazy(_ => import('../widgets/video-preview.jsx'));\n\nimport { DEFAULT_P2P_ACCESS_MODE, EDIT_PREVIEW_LENGTH, IMAGE_PREVIEW_DIM, IMMEDIATE_P2P_SUBSCRIPTION,\n DRAFTY_FR_MIME_TYPE_LEGACY, KEYPRESS_DELAY, MESSAGES_PAGE, MAX_EXTERN_ATTACHMENT_SIZE, MAX_IMAGE_DIM,\n MAX_INBAND_ATTACHMENT_SIZE, READ_DELAY, QUOTED_REPLY_LENGTH, VIDEO_PREVIEW_DIM } from '../config.js';\nimport { CALL_STATE_OUTGOING_INITATED, CALL_STATE_IN_PROGRESS } from '../constants.js';\nimport { blobToBase64, fileToBase64, imageScaled, importVCard, makeImageUrl } from '../lib/blob-helpers.js';\nimport HashNavigation from '../lib/navigation.js';\nimport { bytesToHumanSize, relativeDateFormat, shortDateFormat } from '../lib/strformat.js';\n\n// Run timer with this frequency (ms) for checking notification queue.\nconst NOTIFICATION_EXEC_INTERVAL = 300;\n// Scroll distance before [go to latest message] button is shown.\nconst SHOW_GO_TO_LAST_DIST = 100;\n// Sctoll distance from the top when fetching the page of earlier messages is triggered.\nconst FETCH_PAGE_TRIGGER = 40;\n\nconst messages = defineMessages({\n online_now: {\n id: 'online_now',\n defaultMessage: 'online now',\n description: 'Indicator that the user or topic is currently online',\n },\n last_seen: {\n id: 'last_seen_timestamp',\n defaultMessage: 'Last seen: {timestamp}',\n description: 'Label for the timestamp of when the user or topic was last online'\n },\n not_found: {\n id: 'title_not_found',\n defaultMessage: 'Not found',\n description: 'Title shown when topic is not found'\n },\n channel: {\n id: 'channel',\n defaultMessage: 'channel',\n description: 'Subtitle shown for channels in MessagesView instead of last seen'\n },\n file_attachment_too_large: {\n id: 'file_attachment_too_large',\n defaultMessage: 'The file size {size} exceeds the {limit} limit.',\n description: 'Error message when attachment is too large'\n },\n invalid_content: {\n id: 'invalid_content',\n defaultMessage: 'invalid content',\n description: 'Shown when the message is unreadable'\n },\n editing_message: {\n id: 'editing_message',\n defaultMessage: 'Editing',\n description: 'Title over message editing preview'\n },\n drag_file: {\n id: 'drag_file',\n defaultMessage: 'Drag file here',\n description: 'Prompt on the file drag-n-drop overlay banner'\n },\n self_topic_name: {\n id: 'self_topic_name',\n defaultMessage: 'Saved messages',\n description: 'Name of self topic for UI'\n },\n subscriber_count: {\n id: 'subscriber_count',\n defaultMessage: '{count, plural, ' +\n 'one {{count, number} subscriber} ' +\n 'two {{count, number} subscribers} ' +\n 'three {{count, number} subscribers} ' +\n 'few {{count, number} subscribers} ' +\n 'many {{count, number} subscribers} ' +\n 'other {{count, number} subscribers}}',\n description: 'Count of channel subscribers'\n },\n member_count: {\n id: 'member_count',\n defaultMessage: '{count, plural, ' +\n 'one {{count, number} member} ' +\n 'two {{count, number} members} ' +\n 'three {{count, number} members} ' +\n 'few {{count, number} members} ' +\n 'many {{count, number} members} ' +\n 'other {{count, number} members}}',\n description: 'Count of group topic members'\n },\n cannot_parse_vcard: {\n id: 'cannot_parse_vcard',\n defaultMessage: 'Cannot parse vCard file.',\n description: 'Error message when vCard file cannot be parsed'\n }\n});\n\n// Checks if the access permissions are granted but not yet accepted.\nfunction isUnconfirmed(acs) {\n if (acs) {\n const ex = acs.getExcessive() || '';\n return acs.isJoiner('given') && (ex.includes('R') || ex.includes('W'));\n }\n return false;\n}\n\nfunction isPeerRestricted(acs) {\n if (acs) {\n const ms = acs.getMissing() || '';\n return acs.isJoiner('want') && (ms.includes('R') || ms.includes('W'));\n }\n return false;\n}\n\nfunction shouldPresentCallPanel(callState) {\n // Show call panel if either:\n // - call is outgoing (and the client is waiting for the other side to pick up) or,\n // - call is already in progress.\n return callState == CALL_STATE_OUTGOING_INITATED || callState == CALL_STATE_IN_PROGRESS;\n}\n\nclass MessagesView extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = MessagesView.getDerivedStateFromProps(props, {});\n\n this.componentSetup = this.componentSetup.bind(this);\n this.leave = this.leave.bind(this);\n this.sendMessage = this.sendMessage.bind(this);\n this.retrySend = this.retrySend.bind(this);\n this.sendImageAttachment = this.sendImageAttachment.bind(this);\n this.sendVideoAttachment = this.sendVideoAttachment.bind(this);\n this.sendFileAttachment = this.sendFileAttachment.bind(this);\n this.sendAudioAttachment = this.sendAudioAttachment.bind(this);\n this.sendTheCardAttachment = this.sendTheCardAttachment.bind(this);\n this.sendKeyPress = this.sendKeyPress.bind(this);\n this.subscribe = this.subscribe.bind(this);\n this.handleScrollReference = this.handleScrollReference.bind(this);\n this.mountDnDEvents = this.mountDnDEvents.bind(this);\n this.handleScrollEvent = this.handleScrollEvent.bind(this);\n this.handleDescChange = this.handleDescChange.bind(this);\n this.handleSubsUpdated = this.handleSubsUpdated.bind(this);\n this.handleMessageUpdate = this.handleMessageUpdate.bind(this);\n this.handleAuxUpdate = this.handleAuxUpdate.bind(this);\n this.handleAllMessagesReceived = this.handleAllMessagesReceived.bind(this);\n this.handleInfoReceipt = this.handleInfoReceipt.bind(this);\n this.handleExpandMedia = this.handleExpandMedia.bind(this);\n this.handleClosePreview = this.handleClosePreview.bind(this);\n this.handleCallPanelToggle = this.handleCallPanelToggle.bind(this);\n this.handleFormResponse = this.handleFormResponse.bind(this);\n this.handleContextClick = this.handleContextClick.bind(this);\n this.handleShowMessageContextMenu = this.handleShowMessageContextMenu.bind(this);\n this.handleNewChatAcceptance = this.handleNewChatAcceptance.bind(this);\n this.handleEnablePeer = this.handleEnablePeer.bind(this);\n this.handleAttachFile = this.handleAttachFile.bind(this);\n this.handleAttachImageOrVideo = this.handleAttachImageOrVideo.bind(this);\n this.handleCancelUpload = this.handleCancelUpload.bind(this);\n this.postReadNotification = this.postReadNotification.bind(this);\n this.clearNotificationQueue = this.clearNotificationQueue.bind(this);\n this.goToLatestMessage = this.goToLatestMessage.bind(this);\n this.handleFileDrop = this.handleFileDrop.bind(this);\n\n this.handlePickReply = this.handlePickReply.bind(this);\n this.handleEditMessage = this.handleEditMessage.bind(this);\n this.handleCancelReply = this.handleCancelReply.bind(this);\n this.handleQuoteClick = this.handleQuoteClick.bind(this);\n this.handleUnpinMessage = this.handleUnpinMessage.bind(this);\n this.handleCallHangup = this.handleCallHangup.bind(this);\n\n this.isDragEnabled = this.isDragEnabled.bind(this);\n this.handleDragStart = this.handleDragStart.bind(this);\n this.handleDragIn = this.handleDragIn.bind(this);\n this.handleDragOut = this.handleDragOut.bind(this);\n this.handleDrag = this.handleDrag.bind(this);\n this.handleDrop = this.handleDrop.bind(this);\n\n this.chatMessageRefs = [];\n this.getOrCreateMessageRef = this.getOrCreateMessageRef.bind(this);\n this.getVisibleMessageRange = this.getVisibleMessageRange.bind(this);\n\n // Keeps track of the drag event.\n // Need a counter b/c the browser's 'drag' events may fire multiple times\n // when the user takes the mouse pointer over the container:\n // for the component itself and for all nested/child elements.\n this.dragCounter = 0;\n this.dndRef = null;\n\n this.readNotificationQueue = [];\n this.readNotificationTimer = null;\n\n this.keyPressTimer = null;\n }\n\n getOrCreateMessageRef(seqId) {\n if (this.chatMessageRefs[seqId]) {\n return this.chatMessageRefs[seqId];\n }\n const ref = React.createRef();\n this.chatMessageRefs[seqId] = ref;\n return ref;\n }\n\n getVisibleMessageRange(holderRect) {\n let min = Number.MAX_SAFE_INTEGER, max = -1;\n let visibilityStatus = false;\n this.chatMessageRefs.every((ref, seq) => {\n if (ref.current) {\n const { top, bottom, height } = ref.current.getBoundingClientRect();\n const visible = top <= holderRect.top ? holderRect.top - top <= height : bottom - holderRect.bottom <= height;\n if (visible) {\n visibilityStatus = true;\n min = Math.min(min, seq);\n max = Math.max(max, seq);\n } else if (visibilityStatus) {\n // The remaining elements are no longer visible, no need to iterate them.\n return false;\n }\n }\n return true;\n });\n\n return max >= min ? {min: min, max: max} : {min: 0, max: 0};\n }\n\n componentDidMount() {\n if (this.messagesScroller) {\n this.messagesScroller.addEventListener('scroll', this.handleScrollEvent);\n }\n\n // Drag and drop events\n this.mountDnDEvents(this.dndRef);\n\n this.componentSetup({}, {});\n }\n\n componentWillUnmount() {\n if (this.messagesScroller) {\n this.messagesScroller.removeEventListener('scroll', this.handleScrollEvent);\n }\n\n // Flush all notifications.\n this.clearNotificationQueue();\n\n // Drag and drop events\n if (this.dndRef) {\n this.dndRef.removeEventListener('dragstart', this.handleDragStart);\n this.dndRef.removeEventListener('dragenter', this.handleDragIn);\n this.dndRef.removeEventListener('dragleave', this.handleDragOut);\n this.dndRef.removeEventListener('dragover', this.handleDrag);\n this.dndRef.removeEventListener('drop', this.handleDrop);\n }\n }\n\n componentDidUpdate(prevProps, prevState) {\n // Scroll last message into view on component update e.g. on message received\n // or vertical shrinking.\n if (this.messagesScroller &&\n (prevState.topic != this.state.topic || prevState.maxSeqId != this.state.maxSeqId ||\n prevState.minSeqId != this.state.minSeqId)) {\n // New message.\n if (this.state.scrollPosition < SHOW_GO_TO_LAST_DIST) {\n this.messagesScroller.scrollTop = this.messagesScroller.scrollHeight -\n this.state.scrollPosition - this.messagesScroller.offsetHeight;\n }\n }\n\n if (!this.props.applicationVisible) {\n // If application is not visible, flush all unsent 'read' notifications.\n this.clearNotificationQueue();\n } else {\n // Otherwise assume there are unread messages.\n this.postReadNotification(0);\n }\n\n this.componentSetup(prevProps, prevState);\n }\n\n componentSetup(prevProps, prevState) {\n const topic = this.props.tinode ? this.props.tinode.getTopic(this.state.topic) : undefined;\n if (this.state.topic != prevState.topic) {\n if (prevState.topic && !Tinode.isNewGroupTopicName(prevState.topic)) {\n this.leave(prevState.topic);\n if (prevState.rtcPanel) {\n this.handleCallHangup(prevState.topic, prevProps.callSeq);\n }\n }\n\n if (topic) {\n topic.onData = this.handleMessageUpdate;\n topic.onAllMessagesReceived = this.handleAllMessagesReceived;\n topic.onInfo = this.handleInfoReceipt;\n topic.onMetaDesc = this.handleDescChange;\n topic.onSubsUpdated = this.handleSubsUpdated;\n topic.onPres = this.handleSubsUpdated;\n topic.onAuxUpdated = this.handleAuxUpdate;\n }\n }\n\n if (topic) {\n if ((this.state.topic != prevState.topic) || (this.props.myUserId && !prevProps.myUserId)) {\n // Don't immediately subscribe to a new p2p topic, wait for the first message.\n const newTopic = (this.props.newTopicParams && this.props.newTopicParams._topicName == this.props.topic);\n if (topic.isP2PType() && newTopic && !IMMEDIATE_P2P_SUBSCRIPTION) {\n topic.getMeta(topic.startMetaQuery().withDesc().build());\n } else if (this.props.myUserId) {\n this.subscribe(topic);\n }\n } else if (topic.isSubscribed() && this.state.isReader && !prevState.isReader) {\n // If reader status has changed and data became available.\n topic.getMeta(topic.startMetaQuery().withLaterData().build());\n } else if (!topic.isSubscribed() && this.props.ready && !prevProps.ready) {\n // Connection restored (e.g. wake from sleep): resubscribe to the currently open topic.\n this.subscribe(topic);\n }\n }\n }\n\n static getDerivedStateFromProps(nextProps, prevState) {\n let nextState = {};\n if (!nextProps.topic) {\n // Default state: no topic.\n nextState = {\n minSeqId: -1,\n maxSeqId: -1,\n latestClearId: -1,\n onlineSubs: [],\n topic: null,\n title: '',\n avatar: null,\n isVerified: false,\n isStaff: false,\n isDangerous: false,\n deleted: false,\n docPreview: null,\n imagePreview: null,\n imagePostview: null,\n videoPreview: null,\n videoPostview: null,\n rtcPanel: null,\n minimizedCallPanel: false,\n typingIndicator: false,\n scrollPosition: 0,\n fetchingMessages: false,\n peerMessagingDisabled: false,\n channel: false,\n reply: null,\n contentToEdit: null,\n showGoToLastButton: false,\n dragging: false,\n pins: [],\n pinsLoaded: false,\n selectedPin: 0,\n subsVersion: 0\n };\n } else if (nextProps.topic != prevState.topic) {\n const topic = nextProps.tinode.getTopic(nextProps.topic);\n\n nextState = {\n topic: nextProps.topic,\n deleted: topic._deleted,\n docPreview: null,\n imagePreview: null,\n imagePostview: null,\n videoPreview: null,\n videoPostview: null,\n rtcPanel: null,\n minimizedCallPanel: false,\n typingIndicator: false,\n scrollPosition: 0,\n fetchingMessages: false,\n showGoToLastButton: false,\n contentToEdit: null,\n dragging: false,\n selectedPin: 0\n };\n\n if (nextProps.forwardMessage) {\n if (nextProps.forwardMessage.content) {\n const content = nextProps.forwardMessage.content;\n const size = content?.length || (content?.size || 0);\n nextState.docPreview = {\n object: content,\n type: nextProps.forwardMessage.type,\n size: size\n };\n } else {\n // We are forwarding a message. Show preview.\n nextState.reply = {\n content: nextProps.forwardMessage.preview,\n seq: null\n };\n }\n } else {\n nextState.reply = null;\n }\n\n if (topic) {\n // Topic exists.\n const subs = [];\n\n if (nextProps.connected) {\n topic.subscribers((sub) => {\n if (sub.online && sub.user != nextProps.myUserId) {\n subs.push(sub);\n }\n });\n }\n\n Object.assign(nextState, {\n onlineSubs: subs\n });\n\n if (topic.isSelfType()) {\n Object.assign(nextState, {\n title: nextProps.intl.formatMessage(messages.self_topic_name),\n avatar: true\n });\n } else if (topic.public) {\n Object.assign(nextState, {\n title: topic.public.fn,\n avatar: makeImageUrl(topic.public.photo)\n });\n } else {\n Object.assign(nextState, {\n title: '',\n avatar: null\n });\n }\n\n const peer = topic.p2pPeerDesc();\n if (peer) {\n Object.assign(nextState, {\n peerMessagingDisabled: isPeerRestricted(peer.acs)\n });\n } else if (prevState.peerMessagingDisabled) {\n Object.assign(nextState, {\n peerMessagingDisabled: false\n });\n }\n Object.assign(nextState, {\n minSeqId: topic.minMsgSeq(),\n maxSeqId: topic.maxMsgSeq(),\n latestClearId: topic.maxClearId(),\n channel: topic.isChannelType(),\n pins: (topic.aux('pins') || []).slice(),\n pinsLoaded: false\n });\n\n if (nextProps.callTopic == topic.name && shouldPresentCallPanel(nextProps.callState)) {\n nextState.rtcPanel = nextProps.callTopic;\n }\n } else {\n // Invalid topic.\n Object.assign(nextState, {\n minSeqId: -1,\n maxSeqId: -1,\n latestClearId: -1,\n onlineSubs: [],\n title: '',\n avatar: null,\n peerMessagingDisabled: false,\n channel: false,\n pins: [],\n pinsLoaded: false\n });\n }\n } else {\n // We are still in same topic. Show the call panel if necessary.\n if (nextProps.callTopic == prevState.topic && !prevState.rtcPanel &&\n shouldPresentCallPanel(nextProps.callState)) {\n nextState.rtcPanel = nextProps.callTopic;\n }\n }\n\n if (nextProps.acs) {\n if (nextProps.acs.isWriter() != prevState.isWriter) {\n nextState.isWriter = !prevState.isWriter;\n }\n if (nextProps.acs.isReader() != prevState.isReader) {\n nextState.isReader = !prevState.isReader;\n }\n if (nextProps.acs.isAdmin() != prevState.isAdmin) {\n nextState.isAdmin = !prevState.isAdmin;\n }\n if (!nextProps.acs.isReader('given') != prevState.readingBlocked) {\n nextState.readingBlocked = !prevState.readingBlocked;\n }\n if (nextProps.acs.isSharer() != prevState.isSharer) {\n nextState.isSharer = !prevState.isSharer;\n }\n } else {\n if (prevState.isWriter) {\n nextState.isWriter = false;\n }\n if (prevState.isReader) {\n nextState.isReader = false;\n }\n if (prevState.isAdmin) {\n nextState.isAdmin = false;\n }\n if (!prevState.readingBlocked) {\n prevState.readingBlocked = true;\n }\n if (prevState.isSharer) {\n nextState.isSharer = false;\n }\n }\n\n if (isUnconfirmed(nextProps.acs) == !prevState.unconformed) {\n nextState.unconfirmed = !prevState.unconformed;\n }\n\n // Clear subscribers online when there is no connection.\n if (!nextProps.connected && prevState.onlineSubs && prevState.onlineSubs.length > 0) {\n nextState.onlineSubs = [];\n }\n\n return nextState;\n }\n\n subscribe(topic) {\n if (topic.isSubscribed() || !this.props.ready) {\n return;\n }\n\n // Is this a new topic?\n const newTopic = (this.props.newTopicParams && this.props.newTopicParams._topicName == this.props.topic);\n // Don't request the tags. They are useless unless the user\n // is the owner and is editing the topic.\n let getQuery = topic.startMetaQuery().withLaterDesc().withLaterSub().withAux();\n if (this.state.isReader || newTopic) {\n // Reading is either permitted or we don't know because it's a new topic. Ask for messages.\n getQuery = getQuery.withLaterData(MESSAGES_PAGE);\n if (this.state.isReader) {\n getQuery = getQuery.withLaterDel();\n }\n // And show \"loading\" spinner.\n this.setState({ fetchingMessages: true });\n }\n\n const setQuery = newTopic ? this.props.newTopicParams : undefined;\n topic.subscribe(getQuery.build(), setQuery)\n .then(ctrl => {\n if (ctrl.code == 303) {\n // Redirect to another topic requested.\n HashNavigation.navigateTo(HashNavigation.setUrlTopic('', ctrl.params.topic));\n return;\n }\n if (this.state.topic != ctrl.topic) {\n this.setState({topic: ctrl.topic});\n }\n if (this.state.deleted) {\n this.setState({deleted: false});\n }\n this.props.onNewTopicCreated(this.props.topic, ctrl.topic);\n // If there are unsent messages (except hard-failed and video call messages),\n // try sending them now. Hard-failed and unsent video call messages will be dropped.\n let discard = [];\n topic.queuedMessages(pub => {\n if (pub._sending) {\n return;\n }\n if (pub._fatal || (pub.head && pub.head.webrtc)) {\n // Filter out unsent failed & video call messages.\n discard.push(pub.seq);\n return;\n }\n if (topic.isSubscribed()) {\n this.retrySend(pub);\n }\n });\n if (discard.length > 0) {\n topic.delMessagesList(discard, true);\n }\n })\n .catch(err => {\n console.error(\"Failed subscription to\", this.state.topic, err);\n this.props.onError(err.message, 'err');\n const blankState = MessagesView.getDerivedStateFromProps({}, {});\n blankState.title = this.props.intl.formatMessage(messages.not_found);\n this.setState(blankState);\n });\n }\n\n leave(oldTopicName) {\n if (!oldTopicName || !this.props.tinode.isTopicCached(oldTopicName)) {\n return;\n }\n\n const oldTopic = this.props.tinode.getTopic(oldTopicName);\n if (oldTopic && oldTopic.isSubscribed()) {\n oldTopic.leave(false)\n .catch(_ => { /* do nothing here */ })\n .finally(_ => {\n // We don't care if the request succeeded or failed.\n // The topic is dead regardless.\n this.setState({fetchingMessages: false});\n oldTopic.onData = undefined;\n oldTopic.onAllMessagesReceived = undefined;\n oldTopic.onInfo = undefined;\n oldTopic.onMetaDesc = undefined;\n oldTopic.onSubsUpdated = undefined;\n oldTopic.onPres = undefined;\n oldTopic.onAuxUpdated = undefined;\n });\n }\n }\n\n // Don't use React.createRef as the ref.current is not available in componentDidMount in this component.\n handleScrollReference(node) {\n if (node) {\n node.addEventListener('scroll', this.handleScrollEvent);\n this.messagesScroller = node;\n this.messagesScroller.scrollTop = this.messagesScroller.scrollHeight -\n this.state.scrollPosition - this.messagesScroller.offsetHeight;\n }\n }\n\n // Get older messages and show/hide [go to latest message] button.\n handleScrollEvent(event) {\n const pos = event.target.scrollHeight - event.target.scrollTop - event.target.offsetHeight;\n this.setState({\n scrollPosition: pos,\n // Show [go to latest message] if far enough from bottom and scrolling down.\n showGoToLastButton: (pos > SHOW_GO_TO_LAST_DIST) && (pos < this.state.scrollPosition),\n });\n\n if (this.state.fetchingMessages || this.processingScrollEvent) {\n return;\n }\n\n if (event.target.scrollTop <= FETCH_PAGE_TRIGGER) {\n const topic = this.props.tinode.getTopic(this.state.topic);\n if (topic && topic.isSubscribed()) {\n this.processingScrollEvent = true;\n const {min, max} = this.getVisibleMessageRange(event.target.getBoundingClientRect());\n const gaps = topic.msgHasMoreMessages(min, max, false);\n if (gaps.length > 0) {\n this.setState({fetchingMessages: true}, _ => {\n topic.getMessagesPage(MESSAGES_PAGE, gaps, min, max)\n .catch(err => this.props.onError(err.message, 'err'))\n .finally(_ => this.setState({fetchingMessages: false}));\n });\n }\n }\n }\n this.processingScrollEvent = false;\n }\n\n /* Mount drag and drop events */\n mountDnDEvents(dnd) {\n if (dnd) {\n dnd.addEventListener('dragstart', this.handleDragStart);\n dnd.addEventListener('dragenter', this.handleDragIn);\n dnd.addEventListener('dragleave', this.handleDragOut);\n dnd.addEventListener('dragover', this.handleDrag);\n dnd.addEventListener('drop', this.handleDrop);\n this.dndRef = dnd;\n }\n }\n\n goToLatestMessage() {\n this.setState({scrollPosition: 0});\n if (this.messagesScroller) {\n this.messagesScroller.scrollTop = this.messagesScroller.scrollHeight - this.messagesScroller.offsetHeight;\n }\n }\n\n handleDescChange(desc) {\n if (Tinode.isSelfTopicName(this.props.topic)) {\n this.setState({\n title: this.props.intl.formatMessage(messages.self_topic_name),\n avatar: true\n });\n } else if (desc.public) {\n this.setState({\n title: desc.public.fn,\n avatar: makeImageUrl(desc.public.photo)\n });\n } else {\n this.setState({\n title: '',\n avatar: null\n });\n }\n\n if (desc.acs) {\n this.setState({\n isWriter: desc.acs.isWriter(),\n isReader: desc.acs.isReader(),\n isAdmin: desc.acs.isAdmin(),\n readingBlocked: !desc.acs.isReader('given'),\n unconfirmed: isUnconfirmed(desc.acs),\n });\n }\n }\n\n postReadNotification(seq) {\n // Ignore notifications if the app is invisible or topic is not yet available.\n if (!this.props.applicationVisible || !this.state.topic) {\n return;\n }\n\n // Set up the timer if it's not running already.\n if (!this.readNotificationTimer) {\n this.readNotificationTimer = setInterval(_ => {\n if (this.readNotificationQueue.length == 0) {\n // Shut down the timer if the queue is empty.\n clearInterval(this.readNotificationTimer);\n this.readNotificationTimer = null;\n return;\n }\n\n let seq = -1;\n while (this.readNotificationQueue.length > 0) {\n const n = this.readNotificationQueue[0];\n if (n.topicName != this.state.topic) {\n // Topic has changed. Drop the notification.\n this.readNotificationQueue.shift();\n continue;\n }\n\n const now = new Date();\n if (n.sendAt <= now) {\n // Remove expired notification from queue.\n this.readNotificationQueue.shift();\n if (n.seq == 0 || Tinode.isServerAssignedSeq(n.seq)) {\n seq = Math.max(seq, n.seq);\n }\n } else {\n break;\n }\n }\n\n // Send only one notification for the whole batch of messages.\n if (seq >= 0) {\n const topic = this.props.tinode.getTopic(this.state.topic);\n if (topic) {\n try {\n topic.noteRead(seq);\n } catch (err) {\n console.error(\"Failed to send read notification\", err);\n }\n }\n }\n }, NOTIFICATION_EXEC_INTERVAL);\n }\n\n const now = new Date();\n this.readNotificationQueue.push({\n topicName: this.state.topic,\n seq: seq,\n sendAt: now.setMilliseconds(now.getMilliseconds() + READ_DELAY)\n });\n }\n\n // Clear notification queue and timer.\n clearNotificationQueue() {\n this.readNotificationQueue = [];\n if (this.readNotificationTimer) {\n clearInterval(this.readNotificationTimer);\n this.readNotificationTimer = null;\n }\n }\n\n handleSubsUpdated() {\n if (this.state.topic) {\n const subs = [];\n const topic = this.props.tinode.getTopic(this.state.topic);\n topic.subscribers(sub => {\n if (sub.online && sub.user != this.props.myUserId) {\n subs.push(sub);\n }\n });\n const newState = {onlineSubs: subs, subsVersion: this.state.subsVersion + 1};\n const peer = topic.p2pPeerDesc();\n if (peer) {\n Object.assign(newState, {\n peerMessagingDisabled: isPeerRestricted(peer.acs)\n });\n } else if (this.state.peerMessagingDisabled) {\n Object.assign(newState, {\n peerMessagingDisabled: false\n });\n }\n this.setState(newState);\n }\n }\n\n // The 'msg' could be false-ish if some message ranges were deleted.\n handleMessageUpdate(msg) {\n if (!this.state.topic) {\n return;\n }\n const topic = this.props.tinode.getTopic(this.state.topic);\n if (!msg) {\n // msg could be null if one or more messages were deleted.\n // Updating state to force redraw.\n this.setState({latestClearId: topic.maxClearId()});\n return;\n }\n\n clearTimeout(this.keyPressTimer)\n this.setState({maxSeqId: topic.maxMsgSeq(), minSeqId: topic.minMsgSeq(), typingIndicator: false}, _ => {\n // Scroll to the bottom if the message is added to the end of the message\n // list if already at the bottom, otherwise show [go to latest] button.\n // Implemented as a callback to be sure the scroll height has been updated.\n if (topic.isNewMessage(msg.seq)) {\n if (this.state.scrollPosition > SHOW_GO_TO_LAST_DIST) {\n this.setState({showGoToLastButton: true});\n } else {\n this.goToLatestMessage();\n }\n } else {\n if (this.messagesScroller) {\n this.messagesScroller.scrollTop = this.messagesScroller.scrollHeight - this.state.scrollPosition -\n this.messagesScroller.offsetHeight;\n }\n }\n });\n\n // Aknowledge messages except own messages. They are\n // automatically assumed to be read and recived.\n const status = topic.msgStatus(msg, true);\n if (status >= Tinode.MESSAGE_STATUS_SENT && msg.from != this.props.myUserId) {\n this.postReadNotification(msg.seq);\n }\n }\n\n handleAllMessagesReceived(count) {\n this.setState({fetchingMessages: false});\n if (!count) {\n // All messages received. Nothing left to receive.\n const topic = this.props.tinode.getTopic(this.state.topic);\n if (topic) {\n // Send read notification for the absolute last message.\n this.postReadNotification(topic.seq);\n }\n return;\n }\n\n // Load pinned message too (if any);\n if (!this.state.pinsLoaded) {\n // This needs to be guarded to avoid an infinite loop.\n // The loop may happen if some pinned messages are deleted.\n const topic = this.props.tinode.getTopic(this.state.topic);\n this.setState({pinsLoaded: true}, _ => {\n topic.getPinnedMessages();\n });\n } else {\n this.setState({pinsLoaded: false});\n }\n }\n\n handleAuxUpdate(aux) {\n const pins = (aux['pins'] || []).slice();\n let selectedPin = this.state.selectedPin;\n if (pins.length > this.state.pins.length) {\n // New pins added, show the latest.\n selectedPin = 0;\n } else if (selectedPin >= pins.length) {\n selectedPin = Math.max(0, pins.length - 1);\n }\n this.setState({pins: pins, selectedPin: selectedPin});\n }\n\n handleInfoReceipt(info) {\n switch (info.what) {\n case 'kp': {\n clearTimeout(this.keyPressTimer);\n this.keyPressTimer = setTimeout(_ => this.setState({typingIndicator: false}), KEYPRESS_DELAY + 1000);\n if (!this.state.typingIndicator) {\n this.setState({typingIndicator: true});\n }\n break;\n }\n case 'read':\n case 'recv':\n // Redraw due to changed recv/read status.\n this.forceUpdate();\n break;\n default:\n console.info(\"Other change in topic: \", info.what);\n }\n }\n\n handleExpandMedia(content) {\n if (!content) {\n return;\n }\n\n if (content.video) {\n this.setState({videoPostview: content});\n } else {\n this.setState({imagePostview: content});\n }\n }\n\n handleClosePreview() {\n if (this.state.imagePreview && this.state.imagePreview.url) {\n URL.revokeObjectURL(this.state.imagePreview.url);\n }\n if (this.state.videoPreview && this.state.videoPreview.url) {\n URL.revokeObjectURL(this.state.videoPreview.url);\n }\n this.setState({\n imagePostview: null,\n imagePreview: null,\n docPreview: null,\n videoPreview: null,\n videoPostview: null,\n });\n this.props.onCancelForwardMessage();\n }\n\n handleFormResponse(action, text, data) {\n if (action == 'pub') {\n this.sendMessage(Drafty.attachJSON(Drafty.parse(text), data));\n } else if (action == 'url') {\n const url = new URL(data.ref);\n const params = url.searchParams;\n for (let key in data.resp) {\n if (data.resp.hasOwnProperty(key)) {\n params.set(key, data.resp[key]);\n }\n }\n ['name', 'seq'].forEach(key => {\n if (data[key]) {\n params.set(key, data[key]);\n }\n });\n params.set('uid', this.props.myUserId);\n params.set('topic', this.state.topic);\n url.search = params;\n window.open(url, '_blank');\n } else {\n console.info(\"Unknown action in form\", action);\n }\n }\n\n handleContextClick(e) {\n e.preventDefault();\n e.stopPropagation();\n this.props.showContextMenu({ topicName: this.state.topic, y: e.pageY, x: e.pageX });\n }\n\n handleShowMessageContextMenu(params, messageSpecificMenuItems) {\n if (params.userFrom == 'chan') {\n params.userFrom = this.state.topic;\n params.userName = this.state.title;\n }\n params.topicName = this.state.topic;\n const menuItems = messageSpecificMenuItems || [];\n const topic = this.props.tinode.getTopic(params.topicName);\n if (topic) {\n // Self -> (1) always hard-delete with [Delete] title.\n // P2P -> (1) hard-delete if allowed and not too old, (2) always soft-delete.\n // Group -> (1) hard-delete if allowed and not too old or owner, (2) always soft-delete.\n if (topic.isSelfType()) {\n // Hard-delete with plain [Delete] title.\n menuItems.push('message_delete_generic');\n } else {\n if (!topic.isChannelType()) {\n // P2P or normal group: always allow to soft-delete.\n menuItems.push('message_delete');\n }\n\n const acs = topic.getAccessMode();\n if (acs && acs.isDeleter()) {\n // Owner can always hard-delete regardless of age.\n let canDelete = acs.isOwner();\n if (!canDelete) {\n // Not owner: check message age if configured on the server.\n const maxDelAge = this.props.tinode.getServerParam(Tinode.MSG_DELETE_AGE, 0) | 0;\n // Make sure the message is not too old. This check is here just to make the UI\n // more user-friendly. The server will enforce the limit regardless of this.\n canDelete = maxDelAge == 0 || (maxDelAge > 0 && params.timestamp ?\n params.timestamp.getTime() > (new Date().getTime() - maxDelAge * 1000) : false);\n }\n if (canDelete) {\n // [Delete for All] title.\n menuItems.push('message_delete_hard');\n }\n }\n }\n }\n this.props.showContextMenu(params, menuItems);\n }\n\n handleNewChatAcceptance(action) {\n this.props.onNewChat(this.state.topic, action);\n }\n\n handleEnablePeer(e) {\n e.preventDefault();\n this.props.onChangePermissions(this.state.topic, DEFAULT_P2P_ACCESS_MODE, this.state.topic);\n }\n\n sendKeyPress(audio) {\n const topic = this.props.tinode.getTopic(this.state.topic);\n if (topic.isSubscribed()) {\n if (audio) {\n topic.noteRecording(true);\n } else {\n topic.noteKeyPress();\n }\n }\n }\n\n // sendMessage sends the message with an optional subscription to topic first.\n sendMessage(msg, uploadCompletionPromise, uploader) {\n let head;\n if (!msg && this.props.forwardMessage) {\n // We are forwarding a message.\n msg = this.props.forwardMessage.msg;\n head = this.props.forwardMessage.head;\n this.handleCancelReply();\n } else if (this.state.reply) {\n if (this.state.reply.editing) {\n if (msg == this.state.contentToEdit) {\n // Message unchanged.\n this.handleCancelReply();\n return;\n }\n // Editing an existing message.\n head = {replace: ':' + this.state.reply.seq};\n } else if (this.state.reply.content) {\n // Replying to a message in this topic.\n // Turn it into Drafty so we can make a quoted Drafty object later.\n head = {reply: '' + this.state.reply.seq};\n if (typeof msg == 'string') {\n msg = Drafty.parse(msg);\n }\n msg = Drafty.append(Drafty.sanitizeEntities(this.state.reply.content), msg);\n }\n this.handleCancelReply();\n }\n this.props.sendMessage(msg, uploadCompletionPromise, uploader, head);\n }\n\n // Retry sending a message.\n retrySend(pub) {\n this.props.sendMessage(pub.content, undefined, undefined, pub.head)\n .then(_ => {\n // All good. Remove the original message draft from the cache.\n const topic = this.props.tinode.getTopic(this.state.topic);\n topic.delMessagesList([pub.seq], true);\n });\n }\n\n // sendFileAttachment sends the file as Drafty message:\n // - if file is too large, upload it and send a s link.\n // - if file is small enough, just send it in-band.\n sendFileAttachment(file) {\n // Server-provided limit reduced for base64 encoding and overhead.\n const maxInbandAttachmentSize = (this.props.tinode.getServerParam('maxMessageSize',\n MAX_INBAND_ATTACHMENT_SIZE) * 0.75 - 1024) | 0;\n\n if (TheCard.isFileSupported(file.type, file.name) || file.type == TheCard.contentType) {\n // This is a vCard file, try to convert and send as TheCard.\n if (this.sendTheCardAttachment(file, maxInbandAttachmentSize)) {\n // Successfully sent as TheCard.\n return;\n }\n // Sending as TheCard failed, fall through to sending as generic file attachment.\n }\n\n // If the attachment is a JSON file, then use 'application/octet-stream' instead of 'application/json'.\n // This is a temporary workaround for the collision with the 'application/json' MIME type of form responses.\n // Remove this code in 2026 or so.\n const jsonMimeConverter = (fileType) => fileType === DRAFTY_FR_MIME_TYPE_LEGACY ? 'application/octet-stream' : fileType;\n\n if (file.size > maxInbandAttachmentSize) {\n // Too large to send inband - uploading out of band and sending as a link.\n const uploader = this.props.tinode.getLargeFileHelper();\n if (!uploader) {\n this.props.onError(this.props.intl.formatMessage(messages.cannot_initiate_upload));\n return;\n }\n const uploadCompletionPromise = uploader.upload(file);\n const msg = Drafty.attachFile(null, {\n mime: jsonMimeConverter(file.type),\n filename: file.name,\n size: file.size,\n urlPromise: uploadCompletionPromise\n });\n // Pass data and the uploader to the TinodeWeb.\n this.sendMessage(msg, uploadCompletionPromise, uploader);\n } else {\n // Small enough to send inband.\n fileToBase64(file)\n .then(b64 => this.sendMessage(Drafty.attachFile(null, {\n mime: jsonMimeConverter(b64.mime),\n data: b64.bits,\n filename: b64.name,\n size: file.size\n })))\n .catch(err => this.props.onError(err.message, 'err'));\n }\n }\n\n // Convert attached vCard to TheCard and send.\n sendTheCardAttachment(file, maxInbandAttachmentSize) {\n if (file.size > maxInbandAttachmentSize) {\n // Cannot convert to TheCard, send as a generic file attachment instead.\n return false;\n }\n\n if (file.type == TheCard.contentType) {\n // Already TheCard, no need to convert.\n this.sendMessage(Drafty.appendTheCard(null, file.object));\n return true;\n }\n\n importVCard(file)\n .then(card => {\n this.sendMessage(Drafty.appendTheCard(null, card));\n })\n .catch(err => {\n this.props.onError(this.props.intl.formatMessage(messages.cannot_parse_vcard, {error: err.message}), 'err');\n });\n return true;\n }\n\n // handleAttachFile method is called when [Attach file] button is clicked: launch attachment preview.\n handleAttachFile(file) {\n const maxExternAttachmentSize = this.props.tinode.getServerParam('maxFileUploadSize', MAX_EXTERN_ATTACHMENT_SIZE);\n\n if (file.size > maxExternAttachmentSize) {\n // Too large.\n this.props.onError(this.props.intl.formatMessage(messages.file_attachment_too_large,\n {size: bytesToHumanSize(file.size), limit: bytesToHumanSize(maxExternAttachmentSize)}), 'err');\n } else {\n this.setState({\n docPreview: {\n file: file,\n name: file.name,\n size: file.size,\n type: file.type\n }\n });\n }\n }\n\n handleCallHangup(topic, seq) {\n this.props.onVideoCallClosed();\n this.setState({\n rtcPanel: null\n });\n this.props.onCallHangup(topic, seq);\n }\n\n handleCallPanelToggle() {\n this.setState({minimizedCallPanel: !this.state.minimizedCallPanel});\n }\n\n // sendImageAttachment sends the image bits as Drafty message.\n sendImageAttachment(caption, blob) {\n const mime = this.state.imagePreview.mime;\n const width = this.state.imagePreview.width;\n const height = this.state.imagePreview.height;\n const fname = this.state.imagePreview.filename;\n\n // Server-provided limit reduced for base64 encoding and overhead.\n const maxInbandAttachmentSize = (this.props.tinode.getServerParam('maxMessageSize',\n MAX_INBAND_ATTACHMENT_SIZE) * 0.75 - 1024) | 0;\n\n if (blob.size > maxInbandAttachmentSize) {\n // Too large to send inband - uploading out of band and sending as a link.\n const uploader = this.props.tinode.getLargeFileHelper();\n if (!uploader) {\n this.props.onError(this.props.intl.formatMessage(messages.cannot_initiate_upload));\n return;\n }\n const uploadCompletionPromise = uploader.upload(blob);\n\n // Make small preview to show while uploading.\n imageScaled(blob, IMAGE_PREVIEW_DIM, IMAGE_PREVIEW_DIM, -1, false)\n // Convert tiny image into base64 for serialization and previewing.\n .then(scaled => blobToBase64(scaled.blob))\n .then(b64 => {\n let msg = Drafty.insertImage(null, 0, {\n mime: mime,\n _tempPreview: b64.bits, // This preview will not be serialized.\n bits: b64.bits, // Image thumbnail.\n width: width,\n height: height,\n filename: fname,\n size: blob.size,\n urlPromise: uploadCompletionPromise\n });\n if (caption) {\n msg = Drafty.appendLineBreak(msg);\n msg = Drafty.append(msg, Drafty.parse(caption));\n }\n // Pass data and the uploader to the TinodeWeb.\n this.sendMessage(msg, uploadCompletionPromise, uploader);\n })\n .catch(err => this.props.onError(err, 'err'));\n return;\n }\n\n // Send the image inband if it's not too big. The image has been scaled already\n // in image preview.\n blobToBase64(blob)\n .then(b64 => {\n let msg = Drafty.insertImage(null, 0, {\n mime: b64.mime,\n bits: b64.bits,\n width: width,\n height: height,\n filename: fname,\n size: blob.size\n });\n if (caption) {\n msg = Drafty.appendLineBreak(msg);\n msg = Drafty.append(msg, Drafty.parse(caption));\n }\n this.sendMessage(msg);\n });\n }\n\n // sendVideoAttachment sends the video bits as Drafty message.\n sendVideoAttachment(caption, videoBlob, previewBlob, params) {\n const width = params.width;\n const height = params.height;\n\n // Server-provided limit reduced for base64 encoding and overhead.\n const maxInbandAttachmentSize = (this.props.tinode.getServerParam('maxMessageSize',\n MAX_INBAND_ATTACHMENT_SIZE) * 0.75 - 1024) | 0;\n\n const uploads = [];\n let uploader;\n if ((videoBlob.size + previewBlob.size) > maxInbandAttachmentSize) {\n // One or both are too large to send inband. Uploading out of band and sending as a link.\n uploader = this.props.tinode.getLargeFileHelper();\n if (!uploader) {\n this.props.onError(this.props.intl.formatMessage(messages.cannot_initiate_upload));\n return;\n }\n\n uploads[0] = videoBlob.size > maxInbandAttachmentSize * 0.675 ? uploader.upload(videoBlob) : null;\n uploads[1] = previewBlob.size > maxInbandAttachmentSize * 0.275 ? uploader.upload(previewBlob) : null;\n }\n\n if (uploads.length == 0) {\n // Both video and preview are small enough to send inband.\n Promise.all([blobToBase64(videoBlob), blobToBase64(previewBlob)])\n .then(b64s => {\n const [v64, i64] = b64s;\n let msg = Drafty.insertVideo(null, 0, {\n mime: v64.mime,\n bits: v64.bits,\n preview: i64.bits,\n premime: i64.mime,\n width: width,\n height: height,\n duration: params.duration,\n filename: params.name,\n size: videoBlob.size\n });\n if (caption) {\n msg = Drafty.appendLineBreak(msg);\n msg = Drafty.append(msg, Drafty.parse(caption));\n }\n this.sendMessage(msg);\n });\n return;\n }\n\n const uploadCompletionPromise = Promise.all(uploads);\n\n const b64conv = [];\n // Small video converted to base64.\n b64conv[0] = uploads[0] ? null : blobToBase64(videoBlob);\n // Full-size preview fits inline.\n b64conv[1] = uploads[1] ? null : imageScaled(previewBlob, MAX_IMAGE_DIM, MAX_IMAGE_DIM, -1, false)\n .then(scaled => blobToBase64(scaled.blob));\n // Small preview to show while uploading.\n b64conv[2] = imageScaled(previewBlob, VIDEO_PREVIEW_DIM, VIDEO_PREVIEW_DIM, -1, false)\n .then(scaled => blobToBase64(scaled.blob));\n // Convert tiny image into base64 for serialization and previewing.\n Promise.all(b64conv)\n .then(b64s => {\n const [video, img, preview] = b64s;\n let msg = Drafty.insertVideo(null, 0, {\n mime: params.mime,\n bits: video ? video.bits : null,\n _tempPreview: preview.bits,\n preview: img ? img.bits : preview.bits,\n premime: img ? img.mime : preview.mime,\n width: width,\n height: height,\n duration: params.duration,\n filename: params.name,\n size: videoBlob.size,\n urlPromise: uploadCompletionPromise\n });\n\n if (caption) {\n msg = Drafty.appendLineBreak(msg);\n msg = Drafty.append(msg, Drafty.parse(caption));\n }\n // Pass data and the uploader to the TinodeWeb.\n this.sendMessage(msg, uploadCompletionPromise, uploader);\n })\n .catch(err => this.props.onError(err.message, 'err'));\n }\n\n // handleAttachImageOrVideo method is called when [Attach image or video] button is clicked: launch image or video preview.\n handleAttachImageOrVideo(file) {\n const maxExternAttachmentSize = this.props.tinode.getServerParam('maxFileUploadSize', MAX_EXTERN_ATTACHMENT_SIZE);\n\n if (file.type.startsWith('video/')) {\n this.setState({videoPreview: {\n url: URL.createObjectURL(file),\n blob: file,\n filename: file.name,\n size: file.size,\n mime: file.type\n }});\n return;\n }\n\n // Get image dimensions and size, optionally scale it down.\n imageScaled(file, MAX_IMAGE_DIM, MAX_IMAGE_DIM, maxExternAttachmentSize, false)\n .then(scaled => {\n this.setState({imagePreview: {\n url: URL.createObjectURL(scaled.blob),\n blob: scaled.blob,\n filename: scaled.name,\n width: scaled.width,\n height: scaled.height,\n size: scaled.blob.size,\n mime: scaled.mime\n }});\n }).catch(err => {\n this.props.onError(err.message, 'err');\n });\n }\n\n // handleFileDrop is called when the user drags & drops a file upon the message view.\n handleFileDrop(files) {\n if (!files || files.length == 0) {\n return;\n }\n const file = files[0];\n if (file.type && file.type.startsWith('image/')) {\n this.handleAttachImageOrVideo(file);\n } else {\n this.handleAttachFile(file);\n }\n }\n\n // sendAudioAttachment sends audio bits inband as Drafty message (no preview).\n sendAudioAttachment(url, preview, duration) {\n fetch(url)\n .then(result => result.blob())\n .then(blob => {\n // Server-provided limit reduced for base64 encoding and overhead.\n const maxInbandAttachmentSize = this.props.tinode.getServerParam('maxMessageSize', MAX_INBAND_ATTACHMENT_SIZE) * 0.75 - 1024;\n if (blob.size > maxInbandAttachmentSize) {\n // Too large to send inband - uploading out of band and sending as a link.\n const uploader = this.props.tinode.getLargeFileHelper();\n if (!uploader) {\n this.props.onError(this.props.intl.formatMessage(messages.cannot_initiate_upload));\n return;\n }\n const uploadCompletionPromise = uploader.upload(blob);\n const msg = Drafty.appendAudio(null, {\n mime: blob.type,\n size: blob.size,\n duration: duration,\n preview: preview,\n urlPromise: uploadCompletionPromise\n });\n // Pass data and the uploader to the TinodeWeb.\n this.sendMessage(msg, uploadCompletionPromise, uploader);\n } else {\n // Small enough to send inband.\n blobToBase64(blob)\n .then(b64 => {\n this.sendMessage(Drafty.appendAudio(null, {\n mime: b64.mime,\n bits: b64.bits,\n size: blob.size,\n duration: duration,\n preview: preview,\n }))\n })\n }\n })\n .catch(err => {this.props.onError(err.message, 'err')});;\n }\n\n handleCancelUpload(seq, uploader) {\n const topic = this.props.tinode.getTopic(this.state.topic);\n const found = topic.findMessage(seq);\n if (found) {\n found._cancelled = true;\n }\n uploader.cancel();\n }\n\n // seq: seq ID of the source message\n // context: message content.\n // senderId: UID of the sender of the source message.\n // senderName: full name of the sender of the original message.\n handlePickReply(seq, content, senderId, senderName) {\n if (!seq || !content) {\n this.setState({reply: null});\n return;\n }\n\n content = typeof content == 'string' ? Drafty.init(content) : content;\n if (Drafty.isValid(content)) {\n content = Drafty.replyContent(content, QUOTED_REPLY_LENGTH);\n } else {\n // /!\\ invalid content.\n content = Drafty.append(Drafty.init('\\u26A0 '),\n Drafty.wrapInto(this.props.intl.formatMessage(messages.invalid_content), 'EM'));\n }\n\n this.setState({\n reply: {\n content: Drafty.quote(senderName, senderId, content),\n seq: seq\n }\n });\n this.props.onCancelForwardMessage();\n }\n\n // seq: seq ID of the message to edit.\n // context: message content.\n handleEditMessage(seq, content) {\n if (!seq || !content) {\n this.setState({reply: null});\n return;\n }\n\n content = typeof content == 'string' ? Drafty.init(content) : content;\n const editable = Drafty.toMarkdown(content);\n if (Drafty.isValid(content)) {\n content = Drafty.replyContent(content, EDIT_PREVIEW_LENGTH);\n } else {\n // /!\\ invalid content.\n content = Drafty.append(Drafty.init('\\u26A0 '),\n Drafty.wrapInto(this.props.intl.formatMessage(messages.invalid_content), 'EM'));\n }\n\n this.setState({\n reply: {\n content: Drafty.quote(this.props.intl.formatMessage(messages.editing_message), null, content),\n seq: seq,\n editing: true\n },\n contentToEdit: editable\n });\n this.props.onCancelForwardMessage();\n }\n\n\n handleCancelReply() {\n this.setState({reply: null, contentToEdit: null});\n this.props.onCancelForwardMessage();\n }\n\n handleQuoteClick(replyToSeq) {\n const ref = this.getOrCreateMessageRef(replyToSeq);\n if (ref && ref.current) {\n ref.current.scrollIntoView({block: \"center\", behavior: \"smooth\"});\n ref.current.classList.add('flash');\n setTimeout(_ => {ref.current.classList.remove('flash')} , 1000);\n } else {\n console.error(\"Unresolved message ref\", replyToSeq);\n }\n }\n\n handleUnpinMessage(seq) {\n const topic = this.props.tinode.getTopic(this.state.topic);\n topic.pinMessage(seq, false);\n }\n\n isDragEnabled() {\n return this.state.isWriter && !this.state.unconfirmed && !this.props.forwardMessage && !this.state.peerMessagingDisabled;\n }\n\n handleDragStart(e) {\n e.preventDefault();\n e.stopPropagation();\n e.dataTransfer.clearData();\n }\n\n handleDragIn(e) {\n e.preventDefault();\n e.stopPropagation();\n this.dragCounter++;\n if (e.dataTransfer.items && e.dataTransfer.items.length > 0) {\n this.setState({dragging: true});\n }\n }\n\n handleDragOut(e) {\n e.preventDefault();\n e.stopPropagation();\n this.dragCounter--;\n if (this.dragCounter <= 0) {\n this.setState({dragging: false});\n }\n }\n\n handleDrag(e) {\n e.preventDefault();\n e.stopPropagation();\n }\n\n handleDrop(e) {\n e.preventDefault();\n e.stopPropagation();\n this.setState({dragging: false});\n if (this.isDragEnabled() && e.dataTransfer.files && e.dataTransfer.files.length > 0) {\n this.handleFileDrop(e.dataTransfer.files);\n this.dragCounter = 0;\n }\n }\n\n render() {\n const {formatMessage} = this.props.intl;\n\n // P2P call is an overlay, not a separate component because it cannot be\n // re-mounted between full screen/minimized.\n const overlay = this.state.rtcPanel &&\n
    }>\n \n ;\n\n let component;\n if (!this.state.topic) {\n component = ;\n\n } else {\n let component2;\n if (this.state.imagePreview) {\n // Preview image before sending.\n component2 = (\n
    }>\n \n \n );\n } else if (this.state.videoPreview) {\n // Preview video.\n component2 =
    }>\n \n ;\n\n } else if (this.state.imagePostview) {\n // Expand received image.\n component2 =
    }>\n \n ;\n\n } else if (this.state.videoPostview) {\n // Play received video.\n component2 =
    }>\n \n ;\n\n } else if (this.state.docPreview) {\n // Preview attachment before sending.\n if (TheCard.isFileSupported(this.state.docPreview.type, this.state.docPreview.name) ||\n this.state.docPreview.type == TheCard.contentType) {\n component2 =
    }>\n \n ;\n } else {\n component2 =
    }>\n \n ;\n }\n } else {\n const topic = this.props.tinode.getTopic(this.state.topic);\n const isChannel = topic.isChannelType() || topic.chan;\n const groupTopic = topic.isGroupType() && !isChannel;\n const icon_badges = [];\n if (topic.trusted) {\n if (topic.trusted.verified) {\n icon_badges.push({icon: 'verified', color: 'badge-inv'});\n }\n if (topic.trusted.staff) {\n icon_badges.push({icon: 'staff', color: 'badge-inv'});\n }\n if (topic.trusted.danger) {\n icon_badges.push({icon: 'dangerous', color: 'badge-inv'});\n }\n }\n\n const pinnedMessages = [];\n this.state.pins.forEach(seq => pinnedMessages.push(topic.latestMsgVersion(seq) || topic.findMessage(seq)));\n\n const messageNodes = [];\n let previousFrom = null;\n let prevDate = null;\n let chatBoxClass = null;\n topic.messages((msg, prev, next, i) => {\n let nextFrom = next ? (next.from || 'chan') : null;\n\n let sequence = 'single';\n let thisFrom = msg.from || 'chan';\n if (thisFrom == previousFrom) {\n if (thisFrom == nextFrom) {\n sequence = 'middle';\n } else {\n sequence = 'last';\n }\n } else if (thisFrom == nextFrom) {\n sequence = 'first';\n }\n previousFrom = thisFrom;\n\n const isReply = !(thisFrom == this.props.myUserId);\n const deliveryStatus = topic.msgStatus(msg, true);\n\n let userFrom = thisFrom, userName, userAvatar;\n const user = topic.userDesc(thisFrom);\n if (user && user.public) {\n userName = user.public.fn;\n userAvatar = makeImageUrl(user.public.photo);\n }\n chatBoxClass = groupTopic ? 'chat-box group' : 'chat-box';\n\n // Ref for this chat message.\n const ref = this.getOrCreateMessageRef(msg.seq);\n let replyToSeq = msg.head ? parseInt(msg.head.reply) : null;\n if (!replyToSeq || isNaN(replyToSeq)) {\n replyToSeq = null;\n }\n\n if (msg.hi) {\n // Deleted message.\n messageNodes.push(\n \n );\n } else {\n const thisDate = new Date(msg.ts);\n // This message was sent on a different date than the previous.\n if (!prevDate || prevDate.toDateString() != thisDate.toDateString()) {\n messageNodes.push(\n \n );\n prevDate = thisDate;\n }\n messageNodes.push(\n \n );\n }\n });\n\n let lastSeen = null;\n if (isChannel) {\n if (topic.subcnt) {\n lastSeen = formatMessage(messages.subscriber_count, {count: topic.subcnt});\n }\n } else {\n const cont = this.props.tinode.getMeTopic().getContact(this.state.topic);\n if (cont) {\n if (Tinode.isP2PTopicName(cont.topic)) {\n if (cont.online) {\n lastSeen = formatMessage(messages.online_now);\n } else if (cont.seen) {\n lastSeen = formatMessage(messages.last_seen,\n {timestamp: shortDateFormat(cont.seen.when, this.props.intl.locale)});\n // TODO: also handle user agent in c.seen.ua\n }\n } else if (Tinode.isGroupTopicName(cont.topic)) {\n if (topic.subcnt) {\n lastSeen = formatMessage(messages.member_count, {count: topic.subcnt});\n }\n }\n }\n }\n const avatar = this.state.avatar || true;\n const online = this.state.deleted || topic.isSelfType() ? null :\n this.props.online ? 'online' + (this.state.typingIndicator ? ' typing' : '') : 'offline';\n\n const titleClass = 'panel-title' + (this.state.deleted ? ' deleted' : '');\n const darkModeClass = this.props.colorSchema == 'dark' ? 'dark' : '';\n\n let messagesComponent = (\n <>\n
    \n \n
    \n
      \n {messageNodes}\n
    \n
    \n {!this.state.isReader ?\n
    \n {this.state.readingBlocked ?\n
    \n \n
    \n : null }\n
    \n : null }\n
    \n {this.state.peerMessagingDisabled && !this.state.unconfirmed ?\n
    \n block .\n
    : null}\n {this.state.unconfirmed ?\n \n :\n }\n \n );\n\n component2 = (\n <>\n
    \n {this.props.displayMobile ?\n {e.preventDefault(); this.leave(this.state.topic); this.props.onHideMessagesView();}}>\n arrow_back\n \n :\n null}\n
    \n \n {!isChannel ? : null}\n
    \n
    \n
    {\n this.state.title ||\n \n }
    \n
    {lastSeen}
    \n
    \n
    \n {!this.props.displayMobile && this.state.pins.length > 0 ?\n this.setState({selectedPin: index})}\n onSelected={this.handleQuoteClick}\n onCancel={this.handleUnpinMessage} />\n : null}\n {groupTopic ?\n :\n null\n }\n \n
    \n {this.props.displayMobile ?\n <>\n {this.state.pins.length > 0 ?\n this.setState({selectedPin: index})}\n onSelected={this.handleQuoteClick}\n onCancel={this.handleUnpinMessage} />\n : null\n }\n \n \n : null}\n \n {messagesComponent}\n {this.state.dragging && this.isDragEnabled() ?\n
    {formatMessage(messages.drag_file)}
    \n : null}\n \n );\n }\n component =
    {component2}{overlay}
    \n }\n return component;\n }\n};\n\nexport default injectIntl(MessagesView);\n","// Send message form.\nimport React, { Suspense } from 'react';\nimport { FormattedMessage, defineMessages, injectIntl } from 'react-intl';\nimport { Drafty } from 'tinode-sdk';\n\n// Lazy-loading AudioRecorder because it's quite large due to\n// a dependency on webm-duration-fix.\nconst AudioRecorder = React.lazy(_ => import('./audio-recorder.jsx'));\n\nimport { KEYPRESS_DELAY } from '../config.js';\nimport { filePasted } from '../lib/blob-helpers.js';\nimport { replyFormatter } from '../lib/formatters.js';\n\nconst messages = defineMessages({\n messaging_disabled: {\n id: 'messaging_disabled_prompt',\n defaultMessage: 'Messaging disabled',\n description: 'Prompt in SendMessage in read-only topic'\n },\n type_new_message: {\n id: 'new_message_prompt',\n defaultMessage: 'New message',\n description: 'Prompt in send message field'\n },\n add_image_caption: {\n id: 'image_caption_prompt',\n defaultMessage: 'Image caption',\n description: 'Prompt in SendMessage for attached image'\n },\n file_attachment_too_large: {\n id: 'file_attachment_too_large',\n defaultMessage: 'The file size {size} exceeds the {limit} limit.',\n description: 'Error message when attachment is too large'\n },\n cannot_initiate_upload: {\n id: 'cannot_initiate_file_upload',\n defaultMessage: 'Cannot initiate file upload.',\n description: 'Generic error messagewhen attachment fails'\n },\n icon_title_record_voice: {\n id: 'icon_title_record_voice',\n defaultMessage: 'Record voice message',\n description: 'Icon tool tip for recording a voice message'\n },\n icon_title_attach_file: {\n id: 'icon_title_attach_file',\n defaultMessage: 'Attach file',\n description: 'Icon tool tip for attaching a file'\n },\n icon_title_add_image: {\n id: 'icon_title_add_image',\n defaultMessage: 'Add image',\n description: 'Icon tool tip for attaching an image'\n },\n icon_title_send: {\n id: 'icon_title_send',\n defaultMessage: 'Send message',\n description: 'Icon tool tip for sending a message'\n },\n});\n\nclass SendMessage extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.state = {\n quote: null,\n message: '',\n audioRec: false,\n audioAvailable: !!(navigator.mediaDevices && navigator.mediaDevices.getUserMedia),\n };\n\n // Timestamp when the previous key press was sent to the server.\n this.keypressTimestamp = 0;\n\n this.handlePasteEvent = this.handlePasteEvent.bind(this);\n this.handleAttachImage = this.handleAttachImage.bind(this);\n this.handleAttachFile = this.handleAttachFile.bind(this);\n this.handleAttachAudio = this.handleAttachAudio.bind(this);\n this.handleSend = this.handleSend.bind(this);\n this.handleKeyPress = this.handleKeyPress.bind(this);\n this.handleMessageTyping = this.handleMessageTyping.bind(this);\n this.handleDropAttach = this.handleDropAttach.bind(this);\n\n this.handleQuoteClick = this.handleQuoteClick.bind(this);\n\n this.formatReply = this.formatReply.bind(this);\n }\n\n componentDidMount() {\n if (this.messageEditArea) {\n this.messageEditArea.addEventListener('paste', this.handlePasteEvent, false);\n if (window.getComputedStyle(this.messageEditArea).getPropertyValue('transition-property') == 'all') {\n // Set focus on desktop, but not on mobile: focus causes soft keyboard to pop up.\n this.messageEditArea.focus();\n }\n }\n\n this.setState({quote: this.formatReply()});\n }\n\n componentWillUnmount() {\n if (this.messageEditArea) {\n this.messageEditArea.removeEventListener('paste', this.handlePasteEvent, false);\n }\n }\n\n componentDidUpdate(prevProps) {\n if (this.messageEditArea) {\n if (window.getComputedStyle(this.messageEditArea).getPropertyValue('transition-property') == 'all') {\n // Set focus on desktop, but not on mobile: focus causes soft keyboard to pop up.\n this.messageEditArea.focus();\n }\n\n // Adjust height of the message area for the amount of text.\n this.messageEditArea.style.height = '0px';\n this.messageEditArea.style.height = this.messageEditArea.scrollHeight + 'px';\n }\n\n if (prevProps.topicName != this.props.topicName) {\n this.setState({message: this.props.initMessage || '', audioRec: false, quote: null});\n } else if (prevProps.initMessage != this.props.initMessage) {\n const msg = this.props.initMessage || '';\n this.setState({message: msg}, _ => {\n // If there is text, scroll to bottom and set caret to the end.\n this.messageEditArea.scrollTop = this.messageEditArea.scrollHeight;\n this.messageEditArea.setSelectionRange(msg.length, msg.length);\n });\n }\n if (prevProps.reply != this.props.reply) {\n this.setState({quote: this.formatReply()});\n }\n }\n\n formatReply() {\n return this.props.reply ?\n Drafty.format(this.props.reply.content, replyFormatter, {\n formatMessage: this.props.intl.formatMessage.bind(this.props.intl),\n authorizeURL: this.props.tinode.authorizeURL.bind(this.props.tinode)\n }) : null;\n }\n\n handlePasteEvent(e) {\n if (this.props.disabled) {\n return;\n }\n // FIXME: handle large files too.\n if (filePasted(e,\n file => { this.props.onAttachImage(file); },\n file => { this.props.onAttachFile(file); },\n this.props.onError)) {\n\n // If a file was pasted, don't paste base64 data into input field.\n e.preventDefault();\n }\n }\n\n handleAttachImage(e) {\n if (e.target.files && e.target.files.length > 0) {\n this.props.onAttachImage(e.target.files[0]);\n }\n // Clear the value so the same file can be uploaded again.\n e.target.value = '';\n }\n\n handleAttachFile(e) {\n if (e.target.files && e.target.files.length > 0) {\n this.props.onAttachFile(e.target.files[0]);\n }\n // Clear the value so the same file can be uploaded again.\n e.target.value = '';\n }\n\n handleDropAttach(files) {\n if (files && files.length > 0) {\n this.props.onAttachFile(files[0]);\n }\n }\n\n handleAttachAudio(url, preview, duration) {\n this.setState({audioRec: false});\n this.props.onAttachAudio(url, preview, duration);\n }\n\n handleSend(e) {\n e.preventDefault();\n const message = this.state.message.trim();\n if (message || this.props.acceptBlank || this.props.noInput) {\n this.props.onSendMessage(message);\n this.setState({message: ''});\n }\n }\n\n /* Send on Enter key */\n handleKeyPress(e) {\n if (this.state.audioRec) {\n // Ignore key presses while audio is being recorded.\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n\n // Enter pressed: either send, or enter a new line.\n if (e.key === 'Enter') {\n if (this.props.sendOnEnter == 'plain') {\n // Have Shift-Enter insert a line break instead\n if (!e.shiftKey) {\n e.preventDefault();\n e.stopPropagation();\n\n this.handleSend(e);\n }\n } else {\n if (e.ctrlKey || e.metaKey) {\n e.preventDefault();\n e.stopPropagation();\n\n this.handleSend(e);\n }\n }\n }\n }\n\n handleMessageTyping(e) {\n this.setState({message: e.target.value});\n if (this.props.onKeyPress) {\n const now = new Date().getTime();\n if (now - this.keypressTimestamp > KEYPRESS_DELAY) {\n this.props.onKeyPress();\n this.keypressTimestamp = now;\n }\n }\n }\n\n handleQuoteClick(e) {\n e.preventDefault();\n e.stopPropagation();\n if (this.props.reply && this.props.onQuoteClick) {\n const replyToSeq = this.props.reply.seq;\n this.props.onQuoteClick(replyToSeq);\n }\n }\n\n render() {\n const { formatMessage } = this.props.intl;\n const prompt = this.props.disabled ?\n formatMessage(messages.messaging_disabled) :\n (this.props.messagePrompt ?\n formatMessage(messages[this.props.messagePrompt]) :\n formatMessage(messages.type_new_message));\n\n const sendIcon = (this.props.reply && this.props.reply.editing) ?\n 'check_circle' : 'send';\n\n const quote = this.state.quote ?\n () : null;\n const audioEnabled = this.state.audioAvailable && this.props.onAttachAudio;\n return (\n
    \n {!this.props.noInput ? quote : null}\n
    \n {!this.props.disabled ?\n <>\n {this.props.onAttachFile && !this.state.audioRec ?\n <>\n {e.preventDefault(); this.attachImage.click();}} title={formatMessage(messages.icon_title_add_image)}>\n photo\n \n {e.preventDefault(); this.attachFile.click();}} title={formatMessage(messages.icon_title_attach_file)}>\n attach_file\n \n \n :\n null}\n {this.props.noInput ?\n (quote ||
    ) :\n (this.state.audioRec ?\n (
    }>\n this.props.onKeyPress(true)}\n onDeleted={_ => this.setState({audioRec: false})}\n onFinished={this.handleAttachAudio}/>\n ) :\n